From 2937ca5308e58aa9a20b5db528ea4c4de904105f Mon Sep 17 00:00:00 2001 From: Fredrik Lindqvist Date: Sat, 26 Oct 2019 09:53:03 +0200 Subject: [PATCH 01/56] Removal of Hassbian from documentation (#10934) * R.I.P Hassbian * Restore device tracker to glosssay * Remove space --- source/_docs/authentication.markdown | 4 +- source/_docs/ecosystem/appdaemon.markdown | 2 +- .../certificates/lets_encrypt.markdown | 6 +- .../tls_domain_certificate.markdown | 2 +- source/_docs/ecosystem/hadashboard.markdown | 2 +- source/_docs/installation.markdown | 1 - source/_docs/installation/hassbian.markdown | 17 +-- .../hassbian/common-tasks.markdown | 135 ------------------ .../hassbian/customization.markdown | 55 ------- .../hassbian/installation.markdown | 126 ---------------- .../hassbian/integrations.markdown | 50 ------- .../installation/hassbian/upgrading.markdown | 32 ----- source/_docs/installation/updating.markdown | 4 +- source/_docs/z-wave/device-specific.markdown | 2 - source/_docs/z-wave/installation.markdown | 14 +- source/_includes/asides/docs_navigation.html | 1 - source/_integrations/dsmr.markdown | 12 -- .../_integrations/environment_canada.markdown | 12 +- source/_integrations/ffmpeg.markdown | 3 +- source/_integrations/hdmi_cec.markdown | 2 +- source/_integrations/logger.markdown | 6 - source/_integrations/modem_callerid.markdown | 6 +- source/_integrations/nmap_tracker.markdown | 2 +- source/_integrations/ps4.markdown | 1 - source/_integrations/samsungtv.markdown | 9 -- source/_integrations/sensehat.markdown | 4 +- source/_integrations/tensorflow.markdown | 2 +- source/_integrations/totalconnect.markdown | 2 +- source/_integrations/xiaomi.markdown | 2 +- source/_integrations/yi.markdown | 2 +- 30 files changed, 35 insertions(+), 483 deletions(-) delete mode 100644 source/_docs/installation/hassbian/common-tasks.markdown delete mode 100644 source/_docs/installation/hassbian/customization.markdown delete mode 100644 source/_docs/installation/hassbian/installation.markdown delete mode 100644 source/_docs/installation/hassbian/integrations.markdown delete mode 100644 source/_docs/installation/hassbian/upgrading.markdown diff --git a/source/_docs/authentication.markdown b/source/_docs/authentication.markdown index e50261cee4c..be648d36981 100644 --- a/source/_docs/authentication.markdown +++ b/source/_docs/authentication.markdown @@ -97,12 +97,12 @@ This is because we only allow an IP address as a client ID when your IP address If you don't have a valid domain name for your Home Assistant instance, you can modify the `hosts` file on your computer to fake one. On Windows, edit the `C:\Windows\System32\Drivers\etc\hosts` file with administrator privilege, or on Linux the `/etc/hosts` file, and add following entry: ```text -12.34.56.78 hassbian.home +12.34.56.78 homeassistant.home ``` Replace `12.34.56.78` with your Home Assistant's public IP address. -This will allow you to open Home Assistant at `http://hassbian.home:8123/` +This will allow you to open Home Assistant at `http://homeassistant.home:8123/` ### Stuck on Loading data diff --git a/source/_docs/ecosystem/appdaemon.markdown b/source/_docs/ecosystem/appdaemon.markdown index f4c05863a79..dff067d4042 100755 --- a/source/_docs/ecosystem/appdaemon.markdown +++ b/source/_docs/ecosystem/appdaemon.markdown @@ -101,4 +101,4 @@ Of course, if I wanted to make this App or its predecessor reusable, I would hav In addition, Apps can write to `AppDaemon`'s log files, and there is a system of constraints that allows you to control when and under what circumstances Apps and callbacks are active to keep the logic clean and simple. -For full installation instructions, see the [AppDaemon Project Documentation pages](http://appdaemon.readthedocs.io/en/stable/). If you're using Hassbian, then the [Hassbian scripts](https://github.com/home-assistant/hassbian-scripts/blob/dev/docs/suites/appdaemon.md) make it easy to install. +For full installation instructions, see the [AppDaemon Project Documentation pages](http://appdaemon.readthedocs.io/en/stable/). diff --git a/source/_docs/ecosystem/certificates/lets_encrypt.markdown b/source/_docs/ecosystem/certificates/lets_encrypt.markdown index 67d777deb09..163ef2fe511 100644 --- a/source/_docs/ecosystem/certificates/lets_encrypt.markdown +++ b/source/_docs/ecosystem/certificates/lets_encrypt.markdown @@ -5,7 +5,7 @@ description: "A guide to remotely accessing Home Assistant and securing the conn
-If you are using Hass.io or Hassbian, do not use this guide. Instead, use the [DuckDNS add-on](/addons/duckdns/) for Hass.io or the [DuckDNS suite](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/suites/duckdns.md) for Hassbian to automatically maintain a subdomain including HTTPS certificates via Let's Encrypt. +If you are using Hass.io do not use this guide. Instead, use the [DuckDNS add-on](/addons/duckdns/) for Hass.io.
@@ -17,7 +17,7 @@ This guide was added by mf_social on 16/03/2017 and was valid at the time of wri * You want to access your Home Assistant instance when you are away from home (ie, not connected to your local network) and secure it with a TLS/SSL certificate. * You have a basic understanding of the phrases I have used so far. * You are not currently running anything on port 80 on your network (you'd know if you were). - * If you are not using Home Assistant on a Debian/Raspian/Hassbian system you will be able to convert any of the terminology I use in to the correct syntax for your system. + * If you are not using Home Assistant on a Debian/Raspian system you will be able to convert any of the terminology I use in to the correct syntax for your system. * You understand that this is a 'guide' covering the general application of these things to the general masses and there are things outside of the scope of it, and it does not cover every eventuality (although I have made some notes where people may stumble). Also, I have used some turns of phrase to make it easier to understand for the novice reader which people of advanced knowledge may say is inaccurate. My goal here is to get you through this guide with a satisfactory outcome and have a decent understanding of what you are doing and why, not to teach you advanced internet communication protocols. * Each step presumes you have fully completed the previous step successfully, so if you did an earlier step following a different guide, please ensure that you have not missed anything out that may affect the step you have jumped to, and ensure that you adapt any commands to take in to account different file placements from other guides. @@ -266,7 +266,7 @@ wget https://dl.eff.org/certbot-auto chmod a+x certbot-auto ``` -You might need to stop Home Assistant before continuing with the next step. You can do this via the Web-UI or use the following command if you are running on Hassbian: +You might need to stop Home Assistant before continuing with the next step. You can do this via the Web-UI or use the following command if you are running on Raspbian: ```text sudo systemctl stop home-assistant@homeassistant.service diff --git a/source/_docs/ecosystem/certificates/tls_domain_certificate.markdown b/source/_docs/ecosystem/certificates/tls_domain_certificate.markdown index dfe03dd62d8..27563e1a3d7 100644 --- a/source/_docs/ecosystem/certificates/tls_domain_certificate.markdown +++ b/source/_docs/ecosystem/certificates/tls_domain_certificate.markdown @@ -63,4 +63,4 @@ http: ssl_key: /etc/letsencrypt/live/mydomain.com/privkey.pem ``` -Make sure the files are accessible by the user that runs Home Assistant, eg. `homeassistant` for a HASSbian setup. +Make sure the files are accessible by the user that runs Home Assistant. diff --git a/source/_docs/ecosystem/hadashboard.markdown b/source/_docs/ecosystem/hadashboard.markdown index 1f01eb23fda..d0d28079e71 100755 --- a/source/_docs/ecosystem/hadashboard.markdown +++ b/source/_docs/ecosystem/hadashboard.markdown @@ -31,4 +31,4 @@ HADashboard is a modular, skinnable dashboard for [Home Assistant](/) that is in Glassic Theme

-For full installation instructions see the HADashboard section in the [AppDaemon Project Documentation](http://appdaemon.readthedocs.io/en/stable/DASHBOARD_INSTALL.html). If you're using Hassbian, then the [Hassbian scripts](https://github.com/home-assistant/hassbian-scripts/blob/dev/docs/suites/appdaemon.md) make it easy to install AppDaemon. +For full installation instructions see the HADashboard section in the [AppDaemon Project Documentation](http://appdaemon.readthedocs.io/en/stable/DASHBOARD_INSTALL.html). \ No newline at end of file diff --git a/source/_docs/installation.markdown b/source/_docs/installation.markdown index 14021f1d3b6..f4ff3b53970 100644 --- a/source/_docs/installation.markdown +++ b/source/_docs/installation.markdown @@ -49,7 +49,6 @@ These install options are fully supported by Home Assistant's documentation. For :-----|:-----|:----- [Hass.io](/hassio/installation/)|Raspberry Pi
VM|Anybody [Docker](/docs/installation/docker/)|Docker|Anybody already running Docker -[Hassbian](/docs/hassbian/installation/)|Raspberry Pi|Those who want a more traditional Linux experience and either have experience with Linux, or intend to learn ## Alternative installs diff --git a/source/_docs/installation/hassbian.markdown b/source/_docs/installation/hassbian.markdown index 1b26f35791f..513f7fd32b4 100644 --- a/source/_docs/installation/hassbian.markdown +++ b/source/_docs/installation/hassbian.markdown @@ -1,21 +1,12 @@ --- title: "Hassbian" -description: "Instructions to flash the Home Assistant Hassbian image on a Raspberry Pi." +description: "Hassbian image for a Raspberry Pi." redirect_from: /getting-started/hassbian/ --- -Hassbian is our customized operating system for the Raspberry Pi Zero, 2,3 and 3B+. It is one of the easiest ways of installing Home Assistant. - - [Install Hassbian](/docs/hassbian/installation/) - - [Customize your installation](/docs/hassbian/customization/) - - [Pi specific integrations](/docs/hassbian/integrations/) - - [Learn how to perform common tasks](/docs/hassbian/common-tasks/) +
-### Activating the virtual environment + The Hassbian image is deprecated as of October 2019. Please move to another [installation method](/getting-started/). -When instructions tell you to activate the virtual environment to install a Python library, or perform some tasks, the following commands will do this: - -```bash -sudo -u homeassistant -H -s -source /srv/homeassistant/bin/activate -``` +
\ No newline at end of file diff --git a/source/_docs/installation/hassbian/common-tasks.markdown b/source/_docs/installation/hassbian/common-tasks.markdown deleted file mode 100644 index 304e12e17a4..00000000000 --- a/source/_docs/installation/hassbian/common-tasks.markdown +++ /dev/null @@ -1,135 +0,0 @@ ---- -title: "Common tasks on Hassbian" -description: "Instructions on how to do common tasks on Hassbian." -redirect_from: /docs/hassbian/common-tasks/ ---- - -### Login to the Raspberry Pi - -To login to your Raspberry Pi running Hassbian you're going to be using a ssh client. Depending on your platform there are several alternatives for doing this. Linux and Mac OS generally have a ssh client installed. Windows users are recommended to download and install the ssh client [Putty][ssh-putty]. - -Connect to the Raspberry Pi over ssh. Default user name is `pi` and password is `raspberry`. -Linux and Mac OS users execute the following command in a terminal. - -```bash -ssh pi@ip-address-of-pi -``` - -Windows users start [Putty][ssh-putty], enter the IP address of the Raspberry Pi in the *Host name* field and port 22 in the *Port* field. Then click *Open* and a terminal window will open. Enter the credentials. Default user name is `pi` and password is `raspberry`. - -Optionally, starting with Windows 10 anniversary update, you can use the built-in '[Bash on Windows][bash-windows]' to use SSH if you have enabled Developer mode and have installed the "Windows Subsystem for Linux (beta)" feature. - -### Start/Stop/Restart Home Assistant - -Log in as the `pi` account and execute the following commands: - -```bash -sudo systemctl stop home-assistant@homeassistant.service -``` - -Replace `stop` with `start` or `restart` to get the desired functionality. -To get the current state of the `homeassistant.service` replace `stop` with `status`. - -### Update Home Assistant - -
- -You can use `hassbian-config` to automate the process by running `sudo hassbian-config upgrade homeassistant` - -
- -Log in as the `pi` account and execute the following commands: - -```bash -sudo systemctl stop home-assistant@homeassistant.service -sudo -u homeassistant -H -s -source /srv/homeassistant/bin/activate -pip3 install --upgrade homeassistant -exit -sudo systemctl start home-assistant@homeassistant.service -``` - -This will in order do the following: - -- Stop the Home Assistant service running on Hassbian -- Open a shell as the `homeassistant` user running the Homeassistant service and that has ownership over the Home Assistant installation. -- Change into the virtual Python environment at `/srv/homeassistant/` containing the Home Assistant installation. -- Upgrade the Home Assistant installation to the latest release. -- Exit the shell and return to the `pi` user. -- Start the Home Assistant service. - -### Manually launch Home Assistant - -Log in as the `pi` account and execute the following commands: - -```bash -sudo -u homeassistant -H -s -source /srv/homeassistant/bin/activate -hass -``` - -This will start Home Assistant in your shell and output anything that ends up in the log and more into the console. This will fail if the Home Assistant service is already running so don't forget to [stop][stop-homeassistant] it first. If you want the log output to be colored, execute `hass --script check_config` first. This will install the `colorlog` module. - -### Check your configuration - -Log in as the `pi` account and execute the following commands: - -```bash -sudo -u homeassistant -H -s -source /srv/homeassistant/bin/activate -hass --script check_config -``` - -This will output any errors in your configuration files to console. - -### Read the Home Assistant log file - -Log in as the `pi` account and execute the following commands: - -```bash -sudo -u homeassistant -H -s -cd /home/homeassistant/.homeassistant -nano home-assistant.log -``` - -This will in order do the following: - -- Open a shell as the `homeassistant` user. -- Change directory to the Home Assistant configuration directory. -- Open the log file in the nano editor. - -Optionally, you can also view the log with `journalctl`. -Log in as the `pi` account and execute the following commands: - -```bash -sudo journalctl -fu home-assistant@homeassistant.service -``` - -### Edit the Home Assistant configuration - -Log in as the `pi` account and execute the following commands: - -```bash -sudo -u homeassistant -H -s -cd /home/homeassistant/.homeassistant -nano configuration.yaml -``` - -This will in order do the following: - -- Open a shell as the `homeassistant` user. -- Change directory to the Home Assistant configuration directory. -- Open the configuration file in the nano editor. - -It's generally recommended that you read the [Getting started][configuring-homeassistant] guide for how to configure Home Assistant. - -### Change locale, timezone and keyboard layout - -```bash -sudo raspi-config -``` - -[configuring-homeassistant]: /getting-started/configuration/ -[ssh-putty]: http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html -[stop-homeassistant]: /docs/installation/hassbian/common-tasks/#startstoprestart-home-assistant -[bash-windows]: https://msdn.microsoft.com/en-us/commandline/wsl/about diff --git a/source/_docs/installation/hassbian/customization.markdown b/source/_docs/installation/hassbian/customization.markdown deleted file mode 100644 index 0785821875b..00000000000 --- a/source/_docs/installation/hassbian/customization.markdown +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: "Customization" -description: "Instructions to flash the Home Assistant Hassbian image on a Raspberry Pi." -redirect_from: /docs/hassbian/customization/ ---- - -To allow you to customize your installation further, we have included a tool called `hassbian-config`. This tool comes with a set of suites that can easily be installed or upgraded for easier customization of your Home Assistant installation. -The tool is available by running `hassbian-config`. - -### Install scripts - -To view the available suites run `hassbian-config show` or have a look at the [hassbian-scripts repository][hassbian-repo]. -These are some of the available suites: - -- [AppDaemon](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/suites/appdaemon.md) -- [Cloud9](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/suites/cloud9.md) -- [Custom Component Store](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/suites/custom-component-store.md) -- [Fail2Ban](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/suites/fail2ban.md) **This suite can't be installed on Raspberry Pi Zero** -- [Duck DNS](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/suites/duckdns.md) _This can also be configured to generate Let's Encrypt SSL certificates_ -- [Hue](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/suites/hue.md) -- [Hassbian Manager](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/suites/manager.md) is a web UI tool that can help you manage your suites. -- [Mosquitto](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/suites/mosquitto.md) -- [Pi-hole](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/suites/pihole.md) -- [Razberry](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/suites/razberry.md) -- [Samba](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/suites/samba.md) -- [Trådfri](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/suites/tradfri.md) -- [Webterminal](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/suites/webterminal.md) -- [Zigbee2mqtt](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/suites/zigbee2mqtt.md) -- Various database engines. - - [MariaDB](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/suites/mariadb.md) - - [PostgreSQL](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/suites/postgresql.md) - - [MS SQL](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/suites/mssql.md) - -To install any of them simply run `sudo hassbian-config install SUITE`. - -### Upgrade scripts - -To view the available suites run `hassbian-config show` or have a look at the [hassbian-scripts repository][hassbian-repo]. -These are some of the available suites: - -- [AppDaemon](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/suites/appdaemon.md) -- [Cloud9](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/suites/cloud9.md) -- [Custom Component Store](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/suites/custom-component-store.md) -- [Hassbian](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/suites/hassbian.md) -- [Hassbian Manager](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/suites/manager.md) -- [Home Assistant](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/suites/homeassistant.md) -- [hassbian-config (hassbian-scripts)](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/suites/hassbian_config.md) -- [Python](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/suites/python.md) - -To upgrade any of them simply run `sudo hassbian-config upgrade SUITE`. - -For more information about this tool have a look at the [hassbian-scripts repository][hassbian-repo]. - -[hassbian-repo]: https://github.com/home-assistant/hassbian-scripts -[cec]: /integrations/hdmi_cec/ diff --git a/source/_docs/installation/hassbian/installation.markdown b/source/_docs/installation/hassbian/installation.markdown deleted file mode 100644 index a5cfce1bf89..00000000000 --- a/source/_docs/installation/hassbian/installation.markdown +++ /dev/null @@ -1,126 +0,0 @@ ---- -title: "Installing Hassbian" -description: "Instructions to flash the Home Assistant Hassbian image on a Raspberry Pi." -redirect_from: /docs/hassbian/installation/ ---- - -One of the easiest ways to install Home Assistant on your Raspberry Pi Zero, 2, 3 and 3B+ is by using Hassbian: a Raspberry Pi image with Home Assistant built-in. The image will install the latest version of Home Assistant on initial boot (~10 minutes). - - 1. [Download the Hassbian image][image-download] - 2. Use [balenaEtcher][balenaEtcher] to flash the image to your SD card. We recommend at least a 32 GB SD card to avoid running out of space. - 3. Ensure your Raspberry Pi has wired access to the internet for the entire process or configure your [wireless network settings](#wireless-network) **before proceeding to step 4**. - 4. Insert SD card to Raspberry Pi and turn it on. Initial installation of Home Assistant will take about 10 minutes. - -
- -Please remember to ensure you're using an [appropriate power supply](https://www.raspberrypi.org/documentation/faqs/#pi-power) with your Pi. Mobile chargers may not be suitable since some were only designed to provide just enough power to the device it was designed for by the manufacturer. **Do not** try to power the Pi from the USB port on a TV, computer, or similar. - -
- -These instructions are also available as a [video](https://www.youtube.com/watch?v=iIz6XqDwHEk). -Additional information is available in this [video](https://www.youtube.com/watch?v=tCGlQSsQ-Mc). - -After initial boot an installer will run in the background, this will download and install the newest version of [hassbian-config](https://github.com/home-assistant/hassbian-scripts) and Home-Assistant, this takes around 10 minutes to complete, after it has finished, you will be prompted to login: `hassbian login:`. Installation is complete at this point. The default username is `pi` and the password is `raspberry`. - -Open a browser on a device that's connected to the same network as your Raspberry Pi and point it to Home Assistant at `http://hassbian.local:8123`. If you want to login via SSH, the default username is `pi` and password is `raspberry` (please change this by running `passwd`). The Home Assistant configuration is located at `/home/homeassistant/.homeassistant/`. - -If you find that the web page is not reachable after 30 minutes or so, check that you have files in `/home/homeassistant/.homeassistant/`, if there are no files in this location then run the installer manually using this command: `sudo systemctl start install_homeassistant.service`. - - -The following extras are included on the image: - - - GPIO pins are ready to use. - - Bluetooth is ready to use (supported models only, no Bluetooth LE). - - SSH server is enabled. - - A tool called [`hassbian-config`](https://github.com/home-assistant/hassbian-scripts#hassbian-scripts). - -### Wireless Network - -After flashing the image to your SD Card open the partition `boot` and create a new file `wpa_supplicant.conf`. Edit the file and enter your network credentials. For more information visit [Setting up WiFi for Raspbian][wifi-setup]. During start the file will automatically be copied in the right folder and the network connection will be established. The file could look like this: - -```conf -country=SE -ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev -update_config=1 - -network={ - ssid="YOUR_SSID" - psk="YOUR_PASSWORD" -} -``` - -You may need to adjust the country code depending upon where you are. A list of codes can be found [here](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements). - -If you are using a [hidden SSID](https://en.wikipedia.org/wiki/Network_cloaking) for your WiFi network , you must add `scan_ssid=1` to the `network` section to be able to connect. - -If you are running in trouble with your WiFi connection (for [further details](https://www.raspberrypi.org/forums/viewtopic.php?t=207882)), check the output of the following command: - -```bash -$ sudo rfkill list -0: phy0: Wireless LAN -Soft blocked: yes -Hard blocked: no -``` - -To unblock it, execute `$ sudo rfkill unblock wifi`. - -### Technical Details - - - Home Assistant is installed in a virtual Python environment at `/srv/homeassistant/` - - Home Assistant will be started as a service run by the user `homeassistant` - - The configuration is located at `/home/homeassistant/.homeassistant` - -[image-download]: https://github.com/home-assistant/pi-gen/releases/latest -[balenaEtcher]: https://www.balena.io/etcher -[http://hassbian.local:8123]: http://hassbian.local:8123 -[wifi-setup]: https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md - -## Updating - -The [Hassbian Scripts](https://github.com/home-assistant/hassbian-scripts) are the easiest way of updating both the host operating system, and Home Assistant. - -### Updating Home Assistant - -SSH to your system as the user `pi` and run: - -```bash -$ sudo hassbian-config upgrade homeassistant -``` - -### Updating the host operating system - -SSH to your system as the user `pi` and run: - -```bash -$ sudo hassbian-config upgrade hassbian -``` - -## Run a specific version - -In the event that a Home Assistant version doesn't play well with your hardware setup, you can downgrade to a previous release. For example: - -```bash -$ sudo hassbian-config upgrade homeassistant=0.XX.X -``` - -#### Run the beta version - -If you would like to test next release before anyone else, you can install the beta version released every two weeks, for example: - -```bash -$ sudo hassbian-config upgrade homeassistant --beta -``` - -## Run the development version - -If you want to stay on the bleeding-edge Home Assistant development branch, you can upgrade to `dev`. - -
- The "dev" branch is likely to be unstable. Potential consequences include loss of data and instance corruption. -
- -For example: - -```bash -$ sudo hassbian-config upgrade homeassistant --dev -``` diff --git a/source/_docs/installation/hassbian/integrations.markdown b/source/_docs/installation/hassbian/integrations.markdown deleted file mode 100644 index 5d0679a0ac5..00000000000 --- a/source/_docs/installation/hassbian/integrations.markdown +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: "Raspberry Pi integrations" -description: "Home Assistant integrations specific to the Raspberry Pi." -redirect_from: /docs/hassbian/integrations/ ---- - -Some integrations that are specific for the Raspberry Pi can require some further configuration outside of Home Assistant. All commands below are assumed to be executed with the `pi` account. For full documentation of these integrations refer to the [integrations](/components) page. - -### Bluetooth Tracker - -The Bluetooth tracker will work on a Raspberry Pi 3 with the built-in Bluetooth module or with a USB Bluetooth device on any of the other Raspberry Pi's. - -Software needed for the tracker is pre-installed so just follow the [Bluetooth Tracker integration](/integrations/bluetooth_tracker/) and [Device Tracker page](/integrations/device_tracker/) pages. - -### Raspberry Pi GPIO - -Each of the following devices are connected to the GPIO pins on the Raspberry Pi. -For more details about the GPIO layout, visit the [documentation](https://www.raspberrypi.org/documentation/usage/gpio/) from the Raspberry Pi foundation. - -Permission have been given to the `homeassistant` user to use the GPIO pins and all of the following integrations should require no underlying changes to work. -Just follow the integration pages for each on how to add them to your Home Assistant installation. - - - [DHT Sensor](/integrations/dht/) - - [Raspberry Pi Cover](/integrations/rpi_gpio/#cover) - - [Raspberry Pi GPIO Binary Sensor](/integrations/rpi_gpio/#binary-sensor) - - [Raspberry Pi GPIO Switch](/integrations/rpi_gpio/#switch) - - [Raspberry Pi RF Switch](/integrations/rpi_rf/) - -### Raspberry Pi Camera - -The Raspberry Pi Camera is a specific camera for the Raspberry Pi boards. For more information about the camera I suggest reading the [documentation](https://www.raspberrypi.org/documentation/usage/camera/) from the Raspberry Pi foundation. - -To use the camera it needs to be enabled with the `raspi-config` utility. - -```bash -$ sudo raspi-config -``` - -Go to `Interfacing Options`, select `Enable camera` choose `` and hit `Enter`, then go to `Finish` and you'll be prompted to reboot. - -After this follow the [Raspberry Pi Camera integration](/integrations/rpi_camera/) page. - -### One wire Sensor - -The One wire sensor requires that support for it is enabled on the Raspberry Pi and that the One Wire device is connected to GPIO pin 4. -To enable One Wire support add the following line to the end of `/boot/config.txt` -```yaml -dtoverlay=w1-gpio -``` -After this follow the [One Wire Sensor integration](/integrations/onewire/) page. diff --git a/source/_docs/installation/hassbian/upgrading.markdown b/source/_docs/installation/hassbian/upgrading.markdown deleted file mode 100644 index f9d25d306f3..00000000000 --- a/source/_docs/installation/hassbian/upgrading.markdown +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: "Upgrading Hassbian" -description: "Instructions on how to upgrade Hassbian to the latest version." -redirect_from: /docs/hassbian/upgrading/ ---- - -Hassbian is based on Raspbian and uses the same repositories. Any changes to Raspbian will be reflected in Hassbian. To update and upgrade system packages and installed software (excluding Home Assistant) do the following. -Log in as the `pi` account and execute the following commands: - -```bash -sudo apt-get update -sudo apt-get -y upgrade -``` - -#### Updating Home Assistant - -
- -You can use `hassbian-config` to automate the process by running `sudo hassbian-config upgrade homeassistant` - -
- -To update the Home Assistant installation execute the following command as the `pi` user. - -```bash -sudo systemctl stop home-assistant@homeassistant.service -sudo -u homeassistant -H -s -source /srv/homeassistant/bin/activate -pip3 install --upgrade homeassistant -exit -sudo systemctl start home-assistant@homeassistant.service -``` diff --git a/source/_docs/installation/updating.markdown b/source/_docs/installation/updating.markdown index 8e06868f0f2..ff13b539ebf 100644 --- a/source/_docs/installation/updating.markdown +++ b/source/_docs/installation/updating.markdown @@ -6,7 +6,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/installation/hassbian/common-tasks/#update-home-assistant), 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/) or [Virtualenv](/docs/installation/virtualenv/#upgrading-home-assistant).
@@ -14,7 +14,7 @@ Check what's new in the latest version and potentially impacts your system in [H
-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/), 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/) or [Virtualenv](/docs/installation/virtualenv).
diff --git a/source/_docs/z-wave/device-specific.markdown b/source/_docs/z-wave/device-specific.markdown index f58e205f810..de7ac006618 100644 --- a/source/_docs/z-wave/device-specific.markdown +++ b/source/_docs/z-wave/device-specific.markdown @@ -78,8 +78,6 @@ at this point simply add your user (homeassistant) to the dialout group: $ sudo usermod -a -G dialout homeassistant ``` -Finally, reboot again to make those changes active. It's has been tested on hassbian and has been reported that this is also required on the Pi2. -
If you've installed the Z-Way software, you'll need to ensure you disable it before you install Home Assistant or you won't be able to access the board. Do this with `sudo /etc/init.d/z-way-server stop; sudo update-rc.d z-way-server disable`. diff --git a/source/_docs/z-wave/installation.markdown b/source/_docs/z-wave/installation.markdown index 66d3e410d80..d8c0842ea06 100644 --- a/source/_docs/z-wave/installation.markdown +++ b/source/_docs/z-wave/installation.markdown @@ -142,23 +142,13 @@ ls -1tr /dev/tty*|tail -n 1 The `modemmanager` package will interfere with any Z-Wave (or Zigbee) stick and should be removed or disabled. Failure to do so will result in random failures of those components. For example you can disable with `sudo systemctl disable ModemManager` and remove with `sudo apt-get purge modemmanager` -### Hassbian - -You do not need to install any software to use Z-Wave. - -To find the path of your Z-Wave USB stick, disconnect it and then reconnect it to your system and run: - -```bash -ls -1tr /dev/tty*|tail -n 1 -``` - ### Community install methods #### Raspberry Pi specific On the Raspberry Pi you will need to enable the serial interface in the `raspi-config` tool before you can add Z-Wave to Home Assistant. Make sure to reboot the Raspberry Pi for the setting to take effect. -#### Linux (except Hassbian) +#### Linux On Debian Linux platforms there are dependencies you will need to have installed ahead of time (included in `systemd-devel` on Fedora/RHEL systems): @@ -276,7 +266,7 @@ If you're getting errors like: openzwave-embed/open-zwave-master/libopenzwave.a: No such file or directory -Then the problem is that you're missing `libudev-dev` (or the equivalent for your distribution), please [install it](/docs/z-wave/installation/#linux-except-hassbian). +Then the problem is that you're missing `libudev-dev` (or the equivalent for your distribution), please [install it](/docs/z-wave/installation/#linux). ### Random failures diff --git a/source/_includes/asides/docs_navigation.html b/source/_includes/asides/docs_navigation.html index 054b60fbf2a..0ce9be273b6 100644 --- a/source/_includes/asides/docs_navigation.html +++ b/source/_includes/asides/docs_navigation.html @@ -10,7 +10,6 @@ {% active_link /docs/installation/ Installation %}
  • {% active_link /hassio/ Hass.io %}
  • -
  • {% active_link /docs/installation/hassbian/ Hassbian %}
  • {% active_link /docs/installation/updating/ Updating %}
  • {% active_link /docs/installation/troubleshooting/ Troubleshooting %}
diff --git a/source/_integrations/dsmr.markdown b/source/_integrations/dsmr.markdown index 6da6374b879..13a7a0ae834 100644 --- a/source/_integrations/dsmr.markdown +++ b/source/_integrations/dsmr.markdown @@ -121,18 +121,6 @@ or 2001:raw:600:/dev/ttyUSB0:9600 EVEN 1STOPBIT 7DATABITS XONXOFF LOCAL -RTSCTS ``` -[HASSbian](/docs/installation/hassbian/installation/) users have to give dialout permission to the user `homeassistant`: - -```bash -$ sudo usermod -a -G dialout homeassistant -``` - -and after that you need to reboot! - -```bash -$ sudo reboot -``` - Docker users have to allow Docker access to the device by adding `--device /dev/ttyUSB21:/dev/ttyUSB21` to the run command: ```hass diff --git a/source/_integrations/environment_canada.markdown b/source/_integrations/environment_canada.markdown index daaf3397cfd..d4196a79120 100644 --- a/source/_integrations/environment_canada.markdown +++ b/source/_integrations/environment_canada.markdown @@ -14,13 +14,15 @@ The `environment_canada` weather platforms provide meteorological data for Canad The following device types and data are supported: -- [Weather](#weather) - Current conditions and forecasts -- [Sensor](#sensor) - Current conditions and alerts -- [Camera](#camera) - Radar imagery +- [Location Selection](#location-selection) +- [Weather](#weather) +- [Sensor](#sensor) + - [Alert TTS Script](#alert-tts-script) +- [Camera](#camera)

- On Raspbian or Hassbian, you may need to manually install additional prerequisites with the following command: + On Raspbian you may need to manually install additional prerequisites with the following command: `sudo apt-get install libatlas-base-dev libopenjp2-7`

@@ -172,7 +174,7 @@ camera: ```

- On Raspbian or Hassbian, you may need to manually install additional prerequisites with the following command: + On Raspbian you may need to manually install additional prerequisites with the following command: `sudo apt-get install libatlas-base-dev libopenjp2-7`

diff --git a/source/_integrations/ffmpeg.markdown b/source/_integrations/ffmpeg.markdown index 47082c8b5ec..48219e79d7b 100644 --- a/source/_integrations/ffmpeg.markdown +++ b/source/_integrations/ffmpeg.markdown @@ -11,8 +11,7 @@ The `ffmpeg` integration allows other Home Assistant integrations to process vid
-You need the `ffmpeg` binary in your system path. On Hassbian you will need to login as the `pi` user and `sudo apt install ffmpeg`. On Debian 8 or Raspbian (Jessie) you can install it from [debian-backports](https://backports.debian.org/Instructions/). If you want [hardware acceleration](https://trac.ffmpeg.org/wiki/HWAccelIntro) support on a Raspberry Pi, you will need to build from source by yourself. Windows binaries are available on the [FFmpeg](https://www.ffmpeg.org/) website. - +You need the `ffmpeg` binary in your system path. On Debian 8 or Raspbian (Jessie) you can install it from [debian-backports](https://backports.debian.org/Instructions/). If you want [hardware acceleration](https://trac.ffmpeg.org/wiki/HWAccelIntro) support on a Raspberry Pi, you will need to build from source by yourself. Windows binaries are available on the [FFmpeg](http://www.ffmpeg.org/) website.
diff --git a/source/_integrations/hdmi_cec.markdown b/source/_integrations/hdmi_cec.markdown index f77c0d39d76..674509549fa 100644 --- a/source/_integrations/hdmi_cec.markdown +++ b/source/_integrations/hdmi_cec.markdown @@ -38,7 +38,7 @@ ln -s /path/to/your/installation/of/_cec.so /path/to/your/venv/lib/python*/site- ##### Symlinking examples: -For the default virtual environment of a [HASSbian Image for Raspberry Pi](/docs/installation/raspberry-pi/) the command would be as follows. +For the default virtual environment of a [Manual install for Raspberry Pi](/docs/installation/raspberry-pi/) the command would be as follows. ```bash ln -s /usr/local/lib/python*/dist-packages/cec.py /srv/homeassistant/lib/python*/site-packages diff --git a/source/_integrations/logger.markdown b/source/_integrations/logger.markdown index 91c90ab03d4..261cd6a1ab6 100644 --- a/source/_integrations/logger.markdown +++ b/source/_integrations/logger.markdown @@ -121,12 +121,6 @@ The log information are stored in the and you can read it with the command-line tool `cat` or follow it dynamically with `tail -f`. -If you are a Hassbian user you can use the example below: - -```bash -$ tail -f /home/homeassistant/.homeassistant/home-assistant.log -``` - If you are a Hass.io user, you can use the example below, when logged in through the [SSH add-on](/addons/ssh/): diff --git a/source/_integrations/modem_callerid.markdown b/source/_integrations/modem_callerid.markdown index c14ff30a8a5..cf395ee921e 100644 --- a/source/_integrations/modem_callerid.markdown +++ b/source/_integrations/modem_callerid.markdown @@ -7,7 +7,7 @@ ha_release: "0.40" ha_iot_class: Local Polling --- -The `modem_callerid` sensor platform uses an available modem for collecting caller ID information. It requires a Hayes AT compatible modem that supports caller ID detection (via AT+VCID=1). +The `modem_callerid` integration uses an available modem for collecting caller ID information. It requires a Hayes AT compatible modem that supports caller ID detection (via AT+VCID=1). When the sensor detects a new call, its state changes to 'ring' for each ring and 'callerid' when caller id information is received. It returns to 'idle' once ringing stops. The state event includes an attribute payload that includes the time of the call, name and number. @@ -19,7 +19,7 @@ To find the path of your USB modem, run: ls /dev/ttyACM* ``` -If Home Assistant (`hass`) runs with another user (e.g., `homeassistant` on Hassbian) give access to the stick with: +If Home Assistant (`hass`) runs with another user (e.g., `homeassistant`) give access to the stick with: ```bash sudo usermod -a -G dialout homeassistant @@ -54,7 +54,7 @@ To find the path of your USB modem, run: `$ ls /dev/ttyACM*` -If Home Assistant (`hass`) runs with another user (e.g., `homeassistant` on Hassbian) give access to the stick with: +If Home Assistant (`hass`) runs with another user (e.g., `homeassistant`) give access to the stick with: `$ sudo usermod -a -G dialout homeassistant` diff --git a/source/_integrations/nmap_tracker.markdown b/source/_integrations/nmap_tracker.markdown index bfba601a65a..e64fa16bea9 100644 --- a/source/_integrations/nmap_tracker.markdown +++ b/source/_integrations/nmap_tracker.markdown @@ -14,7 +14,7 @@ As an alternative to the router-based device tracking, it is possible to directl Please keep in mind that modern smart phones will usually turn off WiFi when they are idle. Simple trackers like this may not be reliable on their own.
-You might have to install the packages for `arp` and `nmap`. On Debian based hosts (for example Hassbian and Raspbian) do so by running `$ sudo apt-get install net-tools nmap`. On a Fedora host run `$ sudo dnf -y install nmap`. +You might have to install the packages for `arp` and `nmap`. On Debian based hosts (for example Raspbian) do so by running `$ sudo apt-get install net-tools nmap`. On a Fedora host run `$ sudo dnf -y install nmap`.
diff --git a/source/_integrations/ps4.markdown b/source/_integrations/ps4.markdown index bb6795a2e1b..d0f2ca1cd86 100644 --- a/source/_integrations/ps4.markdown +++ b/source/_integrations/ps4.markdown @@ -50,7 +50,6 @@ There are varying methods to perform this, dependent on your OS that is running Home Assistant installed on a Debian-type OS may require configuration. This section is applicable but not limited to the following operating systems: - Debian -- Hassbian - Rassbian - Armbian - Ubuntu diff --git a/source/_integrations/samsungtv.markdown b/source/_integrations/samsungtv.markdown index 42a4a548e20..885e9e98d7f 100644 --- a/source/_integrations/samsungtv.markdown +++ b/source/_integrations/samsungtv.markdown @@ -144,15 +144,6 @@ No additional actions are required No additional actions are required -### Hassbian - -You will need to activate the venv and install the websocket library: - -```bash -sudo -u homeassistant -H -s -source /srv/homeassistant/bin/activate -pip3 install websocket-client -``` ### Other install methods You will need to install the `websocket-client` Python package in your Home Assistant install. This will probably be done with: diff --git a/source/_integrations/sensehat.markdown b/source/_integrations/sensehat.markdown index 855577b206d..e605795f352 100644 --- a/source/_integrations/sensehat.markdown +++ b/source/_integrations/sensehat.markdown @@ -141,7 +141,7 @@ group: - group.sense_hat ``` -### Directions for installing on Raspberry Pi All-In-One installer and HASSbian: +### Directions for installing on Raspberry Pi Raspbian Based installation: Here are the steps to make the _SenseHAT_ sensor work _successfully_ with the virtual environment versions. @@ -182,7 +182,7 @@ sudo reboot ``` Unfortunately enabling the SenseHAT Sensor integration for a Virtual Environment install of Home Assistant fails with errors. -_(The Raspberry Pi All-In-One installer and HASSbian both run Home Assistant in an virtual environment)._ +_(The Raspberry Pi All-In-One installer run Home Assistant in an virtual environment)._ These issues have been discussed in the repository issue [#5093](https://github.com/home-assistant/home-assistant/issues/5093) This fix has been tested with a clean install of: diff --git a/source/_integrations/tensorflow.markdown b/source/_integrations/tensorflow.markdown index 25605ea0743..f68cd5e7358 100644 --- a/source/_integrations/tensorflow.markdown +++ b/source/_integrations/tensorflow.markdown @@ -12,7 +12,7 @@ The `tensorflow` image processing platform allows you to detect and recognize ob
- The following packages must be installed on Hassbian/Raspbian before following the setup for the integration to work: + The following packages must be installed on Raspbian before following the setup for the integration to work: `sudo apt-get install libatlas-base-dev libopenjp2-7 libtiff5`
diff --git a/source/_integrations/totalconnect.markdown b/source/_integrations/totalconnect.markdown index fbe62169a24..0116385285c 100644 --- a/source/_integrations/totalconnect.markdown +++ b/source/_integrations/totalconnect.markdown @@ -16,7 +16,7 @@ The `triggered` state also provides a state attribute called `triggered_source` - `Fire/Smoke` is when fire or smoke is detected, or a person pushed the Fire button - `Carbon Monoxide` is when carbon monoxide is detected -If you have issues running this component, you may require `libxml2-dev` and `libxmlsec1-dev` packages. To install these on Hassbian, run the command `apt install libxml2-dev libxmlsec1-dev` with sudo. +If you have issues running this component, you may require `libxml2-dev` and `libxmlsec1-dev` packages. To install these on Raspbian, run the command `apt install libxml2-dev libxmlsec1-dev` with sudo. ## Configuration diff --git a/source/_integrations/xiaomi.markdown b/source/_integrations/xiaomi.markdown index b1440866c1d..5c742048fab 100644 --- a/source/_integrations/xiaomi.markdown +++ b/source/_integrations/xiaomi.markdown @@ -30,7 +30,7 @@ Currently, version 0.1.4-beta2 of the custom firmware is the highest supported.
-Hassbian users: Don't forget to install `ffmpeg` support on your platform, otherwise, you'll not see video. +Raspbian users: Don't forget to install `ffmpeg` support on your platform, otherwise, you'll not see video.
diff --git a/source/_integrations/yi.markdown b/source/_integrations/yi.markdown index f69d8f25ddb..9c220a1f776 100644 --- a/source/_integrations/yi.markdown +++ b/source/_integrations/yi.markdown @@ -38,7 +38,7 @@ If you use a version higher than 0.1.4-beta2, you can simply solve the FTP issue
-Hassbian users: don't forget to install ffmpeg support on your platform, otherwise, you'll not see video. +Raspbian users: don't forget to install ffmpeg support on your platform, otherwise, you'll not see video.
From f0bc18386fda6147128a47a25989e5540e9cdf1a Mon Sep 17 00:00:00 2001 From: Ernst Klamer Date: Sat, 26 Oct 2019 11:22:47 +0200 Subject: [PATCH 02/56] Move Solar-Log docs to _integrations folder (#10971) The Solar-Log documentation was located in the wrong folder (_components). Moved to _integrations folder. --- source/{_components => _integrations}/solarlog.markdown | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename source/{_components => _integrations}/solarlog.markdown (100%) diff --git a/source/_components/solarlog.markdown b/source/_integrations/solarlog.markdown similarity index 100% rename from source/_components/solarlog.markdown rename to source/_integrations/solarlog.markdown From adfdf290b55a9316f56991aca2988632ac4b8afb Mon Sep 17 00:00:00 2001 From: jjlawren Date: Sat, 26 Oct 2019 06:46:32 -0500 Subject: [PATCH 03/56] Plex supports Local Push (#10993) --- source/_integrations/plex.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/plex.markdown b/source/_integrations/plex.markdown index 872fe7e7d87..c87fcfe043d 100644 --- a/source/_integrations/plex.markdown +++ b/source/_integrations/plex.markdown @@ -7,7 +7,7 @@ ha_category: - Sensor featured: true ha_release: 0.7.4 -ha_iot_class: Local Polling +ha_iot_class: Local Push ha_config_flow: true --- From 5ddb34abf50e20c2b6778ba9cf1bb0873b48a703 Mon Sep 17 00:00:00 2001 From: gngj Date: Sat, 26 Oct 2019 15:07:24 +0300 Subject: [PATCH 04/56] Add region config (#10983) --- source/_integrations/microsoft.markdown | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/source/_integrations/microsoft.markdown b/source/_integrations/microsoft.markdown index d5bce0a8f62..1d2556defbe 100644 --- a/source/_integrations/microsoft.markdown +++ b/source/_integrations/microsoft.markdown @@ -37,7 +37,7 @@ gender: type: string default: "`Female`" type: - description: "The voice type you want to use. Accepted values are listed as the service name mapping [in the documentation](https://docs.microsoft.com/en-us/azure/cognitive-services/Speech/api-reference-rest/bingvoiceoutput)." + description: "The voice type you want to use. Accepted values are listed as the service name mapping [in the documentation](https://docs.microsoft.com/en-us/azure/cognitive-services/speech-service/language-support#text-to-speech)." required: false type: string default: "`ZiraRUS`" @@ -60,6 +60,11 @@ contour: description: "Change the contour of the output in percentages. This overrides the pitch setting. See the [W3 SSML specification](https://www.w3.org/TR/speech-synthesis/#pitch_contour) for what it does. Example value: `(0,0) (100,100)`." required: false type: string +region: + description: "The region of your API endpoint. See [documentation](https://docs.microsoft.com/en-us/azure/cognitive-services/speech-service/regions)." + required: false + type: string + default: "`eastus`" {% endconfiguration %} @@ -79,4 +84,5 @@ tts: volume: -50 pitch: high contour: (0, 0) (100, 100) + region: eastus ``` From 0f574d3f5a15494aac8410d611bdfa061c9614c8 Mon Sep 17 00:00:00 2001 From: Robert Van Gorkom Date: Sat, 26 Oct 2019 05:18:34 -0700 Subject: [PATCH 05/56] =?UTF-8?q?Updating=20withings=20documentation=20to?= =?UTF-8?q?=20remain=20consistent=20with=20new=E2=80=A6=20(#10970)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/_integrations/withings.markdown | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/source/_integrations/withings.markdown b/source/_integrations/withings.markdown index ae66ac8846a..5dce6f9877a 100644 --- a/source/_integrations/withings.markdown +++ b/source/_integrations/withings.markdown @@ -22,7 +22,7 @@ Values for your account: - Logo: Any reasonable picture will do. - Description: Personal app for collecting my data. - Contact Email: Your email address -- Callback Uri: `https://your-domain-name/` - Withings will check if this URL is accessible (HTTP HEAD) upon submitting the form. +- Callback Uri: `https://your-domain-name/auth/external/callback` - Withings will check if this URL is accessible (HTTP HEAD) upon submitting the form. - Company: Home Assistant Once saved, the "Client Id" and "Consumer Secret" fields will be populated. You will need these in the next step. @@ -33,7 +33,7 @@ Once saved, the "Client Id" and "Consumer Secret" fields will be populated. You # Example configuration.yaml entry withings: client_id: CLIENT_ID - client_secret: CLIENT_SECRET + client_secret: CONSUMER_SECRET profiles: - USER_PROFILE_NAME ``` @@ -43,28 +43,27 @@ Withings supports multiple profiles per account. Each profile has a person's nam ### Step 3 - Authorize Home Assistant - Confirm your YAML configuration is valid by using the `Check Config` tool (see note). + - Note: In order for "Check Config" to be visible, you must enable "Advanced Mode" on your user profile. The "Check Config" tool can be found by clicking "Configuration" from the sidebar (cog icon) and then clicking "Server Control". - Restart Home Assistant. - Go to the integrations page. -- Add a Withings integration. -- Select the profile you intend to pull data. This will take you to the Withings site. -- On the Withings site, choose the profile you selected in the previous step (if prompted). - - Note: It's important you select the same profile from the previous step. Choosing a different one will result in Home Assistant displaying data for profile 2, but it will be labeled as profile 1. -- Authorize the application. Your browser will redirect you to your Home Assistant URL. +- Add a Withings integration. This will open a new tab/window on the withings site. +- On the Withings site, choose the profile of the data you want to sync. +- Authorize the application. Your browser will redirect you to the redirect uri you provided during account setup. - Note: If you get a browser error saying the site is inaccessible, you can modify the `http://domain` portion of the URL to something you know is accessible, locally or publically. For example, `http://localhost:8123`. This occurs when the base URL provided by Home Assistant to Withings is not accessible to the outside world. Changing the domain will not affect how data is synchronized. +- Once authorized, the tab/window will close and the integration page will prompt to select a profile. Select the profile you chose while on the withings site. + - Note: It's important you select the same profile from the previous step. Choosing a different one will result in Home Assistant displaying the wrong data. - Data will synchronize immediately and update every 5 minutes. -Note: In order for "Check Config" to be visible, you must enable "Advanced Mode" on your user profile. The "Check Config" tool can be found by clicking "Configuration" from the sidebar (cog icon) and then clicking "Server Control". - ## Configuration ```yaml # Example configuration.yaml entry withings: client_id: CLIENT_ID - client_secret: CLIENT_SECRET + client_secret: CONSUMER_SECRET profiles: - USER_PROFILE_NAME ``` @@ -81,9 +80,4 @@ profiles: description: Withings supports multiple profiles per account. Provide the person's name whom you want Home Assistant entities to will be associated with (just a name, it doesn't have to be perfect). During the authorization step, you will be asked to select this user from the Withings website. required: true type: map -base_url: - description: Overrides Home Assistant's default base URL to use when authorizing with Withings. - required: false - type: string - default: The base URL provided in the Home Assistant `api` component. {% endconfiguration %} From 057fb85caf0b1984106e49e301f2e669268b946d Mon Sep 17 00:00:00 2001 From: ZiroNL Date: Sun, 27 Oct 2019 13:09:01 +0100 Subject: [PATCH 06/56] Adding charset to imap component (#10967) --- source/_integrations/imap.markdown | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/source/_integrations/imap.markdown b/source/_integrations/imap.markdown index b96c727b69f..06ff98d5891 100644 --- a/source/_integrations/imap.markdown +++ b/source/_integrations/imap.markdown @@ -55,6 +55,11 @@ search: required: false default: UnSeen UnDeleted type: string +charset: + description: The characterset used for this connection + required: false + default: UTF-8 + type: string {% endconfiguration %} ### Configuring IMAP Searches @@ -68,7 +73,7 @@ By default, this integration will count unread emails. By configuring the search #### Full configuration sample with search ```yaml -# Example configuration.yaml entry +# Example configuration.yaml entry for gmail sensor: - platform: imap server: imap.gmail.com @@ -76,4 +81,15 @@ sensor: username: YOUR_USERNAME password: YOUR_PASSWORD search: FROM , SUBJECT + charset: utf-8 + +# Example configuration.yaml entry for Office 365 +sensor: + - platform: imap + server: outlook.office365.com + port: 993 + username: email@address.com + password: password + search: FROM , SUBJECT + charset: US-ASCII ``` From b9b241c3a0dfd2ccd3a03d8eee1e6d64b2b04bad Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 27 Oct 2019 20:52:41 +0100 Subject: [PATCH 07/56] Fix typo (#11012) --- source/_integrations/imap.markdown | 7 +++---- source/_integrations/imap_email_content.markdown | 12 ++++++------ 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/source/_integrations/imap.markdown b/source/_integrations/imap.markdown index 06ff98d5891..418ddab9176 100644 --- a/source/_integrations/imap.markdown +++ b/source/_integrations/imap.markdown @@ -8,7 +8,7 @@ ha_release: 0.25 ha_iot_class: Cloud Push --- -The `imap` sensor platform is observing your [IMAP server](https://en.wikipedia.org/wiki/Internet_Message_Access_Protocol) and reporting the amount of unread emails. +The `imap` integration is observing your [IMAP server](https://en.wikipedia.org/wiki/Internet_Message_Access_Protocol) and reporting the amount of unread emails. ## Configuration @@ -56,9 +56,9 @@ search: default: UnSeen UnDeleted type: string charset: - description: The characterset used for this connection + description: The character set used for this connection. required: false - default: UTF-8 + default: utf-8 type: string {% endconfiguration %} @@ -81,7 +81,6 @@ sensor: username: YOUR_USERNAME password: YOUR_PASSWORD search: FROM , SUBJECT - charset: utf-8 # Example configuration.yaml entry for Office 365 sensor: diff --git a/source/_integrations/imap_email_content.markdown b/source/_integrations/imap_email_content.markdown index 4c8908ecec5..c4bce26f23e 100644 --- a/source/_integrations/imap_email_content.markdown +++ b/source/_integrations/imap_email_content.markdown @@ -8,7 +8,7 @@ ha_iot_class: Cloud Push ha_release: 0.25 --- -The `imap_email_content` sensor platform will read emails from an IMAP email server and report them as a state change within Home Assistant. This is useful if you have a device that only reports its state via email. +The `imap_email_content` integration will read emails from an IMAP email server and report them as a state change within Home Assistant. This is useful if you have a device that only reports its state via email. ## Configuration @@ -20,9 +20,9 @@ sensor: - platform: imap_email_content server: imap.gmail.com port: 993 - username: USERNAME - password: PASSWORD - folder: + username: YOUR_USERNAME + password: YOUR_PASSWORD + folder: YOUR_FOLDER senders: - example@gmail.com ``` @@ -68,7 +68,7 @@ value_template: body: description: The body of the email. subject: - description: The subject of the email. + description: The subject of the email.git. date: description: The date and time the email was sent. {% endconfiguration %} @@ -97,4 +97,4 @@ sensor: ``` {% endraw %} -The same template structure can scan the date, body, or sender for matching text before setting the state of the sensor. +The same template structure can scan the date, body or sender for matching text before setting the state of the sensor. From 41755f483b0b7dcb1a6e35e5036f171bea2fb0d5 Mon Sep 17 00:00:00 2001 From: fwestenberg <47930023+fwestenberg@users.noreply.github.com> Date: Mon, 28 Oct 2019 07:55:00 +0100 Subject: [PATCH 08/56] Added new Xiaomi Air Quality Monitor (#11017) --- .../air_quality.xiaomi_miio.markdown | 54 +++++++++++++++++++ .../_integrations/sensor.xiaomi_miio.markdown | 4 +- 2 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 source/_integrations/air_quality.xiaomi_miio.markdown diff --git a/source/_integrations/air_quality.xiaomi_miio.markdown b/source/_integrations/air_quality.xiaomi_miio.markdown new file mode 100644 index 00000000000..4404e8ba3d1 --- /dev/null +++ b/source/_integrations/air_quality.xiaomi_miio.markdown @@ -0,0 +1,54 @@ +--- +title: "Xiaomi Air Quality Monitor" +description: "Instructions how to integrate your Xiaomi Mi Air Quality Monitor within Home Assistant." +logo: xiaomi.png +ha_category: + - Health +ha_iot_class: Local Polling +ha_release: 0.100.4 +--- + +The `xiaomi_miio` sensor platform is observing your Xiaomi Mi Air Quality Monitor and reporting the air quality values. + +Currently, the supported features are: + +- Particulate matter 2.5 +- Attributes + - carbon_dioxide_equivalent + - relative_humidity + - temperature + - total_volatile_organic_compounds + - manufacturer + - model + - sw_version + +Please follow the instructions on [Retrieving the Access Token](/integrations/vacuum.xiaomi_miio/#retrieving-the-access-token) to get the API token. + +## Configuration + +To add a Xiaomi Mi Air Quality Monitor to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +air_quality: + - platform: xiaomi_miio + name: Xiaomi Air Quality Monitor + host: 192.168.130.73 + token: YOUR_TOKEN +``` + +{% configuration %} +host: + description: The IP address of your miio device. + required: true + type: string +token: + description: The API token of your miio device. + required: true + type: string +name: + description: The name of your miio device. + required: false + type: string + default: Xiaomi Miio Air Quality Monitor +{% endconfiguration %} diff --git a/source/_integrations/sensor.xiaomi_miio.markdown b/source/_integrations/sensor.xiaomi_miio.markdown index 2c0fc265f9a..b56c4f8ebd4 100644 --- a/source/_integrations/sensor.xiaomi_miio.markdown +++ b/source/_integrations/sensor.xiaomi_miio.markdown @@ -1,6 +1,6 @@ --- -title: "Xiaomi Air Quality Monitor" -description: "Instructions how to integrate your Xiaomi Mi Air Quality Monitor within Home Assistant." +title: "Xiaomi Air Quality Index Monitor" +description: "Instructions how to integrate your Xiaomi Mi Air Quality Index Monitor within Home Assistant." logo: xiaomi.png ha_category: - Health From 74c7d237ebf46972386112bdcac5cfd33d0812c7 Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Mon, 28 Oct 2019 14:39:49 +0100 Subject: [PATCH 09/56] Revert "Added new Xiaomi Air Quality Monitor" (#11023) This reverts commit 41755f483b0b7dcb1a6e35e5036f171bea2fb0d5. --- .../air_quality.xiaomi_miio.markdown | 54 ------------------- .../_integrations/sensor.xiaomi_miio.markdown | 4 +- 2 files changed, 2 insertions(+), 56 deletions(-) delete mode 100644 source/_integrations/air_quality.xiaomi_miio.markdown diff --git a/source/_integrations/air_quality.xiaomi_miio.markdown b/source/_integrations/air_quality.xiaomi_miio.markdown deleted file mode 100644 index 4404e8ba3d1..00000000000 --- a/source/_integrations/air_quality.xiaomi_miio.markdown +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: "Xiaomi Air Quality Monitor" -description: "Instructions how to integrate your Xiaomi Mi Air Quality Monitor within Home Assistant." -logo: xiaomi.png -ha_category: - - Health -ha_iot_class: Local Polling -ha_release: 0.100.4 ---- - -The `xiaomi_miio` sensor platform is observing your Xiaomi Mi Air Quality Monitor and reporting the air quality values. - -Currently, the supported features are: - -- Particulate matter 2.5 -- Attributes - - carbon_dioxide_equivalent - - relative_humidity - - temperature - - total_volatile_organic_compounds - - manufacturer - - model - - sw_version - -Please follow the instructions on [Retrieving the Access Token](/integrations/vacuum.xiaomi_miio/#retrieving-the-access-token) to get the API token. - -## Configuration - -To add a Xiaomi Mi Air Quality Monitor to your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -air_quality: - - platform: xiaomi_miio - name: Xiaomi Air Quality Monitor - host: 192.168.130.73 - token: YOUR_TOKEN -``` - -{% configuration %} -host: - description: The IP address of your miio device. - required: true - type: string -token: - description: The API token of your miio device. - required: true - type: string -name: - description: The name of your miio device. - required: false - type: string - default: Xiaomi Miio Air Quality Monitor -{% endconfiguration %} diff --git a/source/_integrations/sensor.xiaomi_miio.markdown b/source/_integrations/sensor.xiaomi_miio.markdown index b56c4f8ebd4..2c0fc265f9a 100644 --- a/source/_integrations/sensor.xiaomi_miio.markdown +++ b/source/_integrations/sensor.xiaomi_miio.markdown @@ -1,6 +1,6 @@ --- -title: "Xiaomi Air Quality Index Monitor" -description: "Instructions how to integrate your Xiaomi Mi Air Quality Index Monitor within Home Assistant." +title: "Xiaomi Air Quality Monitor" +description: "Instructions how to integrate your Xiaomi Mi Air Quality Monitor within Home Assistant." logo: xiaomi.png ha_category: - Health From a3af31f20bd1633804f4d0fdec11472b6374085e Mon Sep 17 00:00:00 2001 From: Ian Richardson Date: Mon, 28 Oct 2019 13:25:11 -0500 Subject: [PATCH 10/56] Lovelace 0.101 (#10966) * Lovelace 0.101 * Update changelog.markdown * Update changelog.markdown * Update changelog.markdown * Update changelog.markdown * cleanup --- source/lovelace/changelog.markdown | 150 ++++++++++++++++++----------- 1 file changed, 93 insertions(+), 57 deletions(-) diff --git a/source/lovelace/changelog.markdown b/source/lovelace/changelog.markdown index e78645b89d5..a20db478d2e 100644 --- a/source/lovelace/changelog.markdown +++ b/source/lovelace/changelog.markdown @@ -2,30 +2,66 @@ title: "Lovelace Changelog" description: "Changelog of the Lovelace UI." --- +## Changes in 0.101.0 +- ❤️ [entities card]: Add actions on rows [#4023](https://github.com/home-assistant/home-assistant-polymer/pull/4023) @iantrich +- ❤️ [entities card]: New `icon` option for title [#4024](https://github.com/home-assistant/home-assistant-polymer/pull/4024) @iantrich +- ❤️ [views]: New `visible` option [#3811](https://github.com/home-assistant/home-assistant-polymer/pull/3811) @iantrich +- ❤️ [views]: Custom badges [#3867](https://github.com/home-assistant/home-assistant-polymer/pull/3867) @iantrich +- ❤️ [views]: New `entity-filter` badge [#3867](https://github.com/home-assistant/home-assistant-polymer/pull/3867) @iantrich +- ❤️ [views]: New `state-label` badge [#3867](https://github.com/home-assistant/home-assistant-polymer/pull/3867) @iantrich +- ❤️ [views]: Add actions to `state-label` badge [#4028](https://github.com/home-assistant/home-assistant-polymer/pull/4028) @iantrich +- ❤️ [shopping list card]: New `theme` option [#4057](https://github.com/home-assistant/home-assistant-polymer/pull/4057) @iantrich +- ❤️ [plant status card]: New `theme` option [#4057](https://github.com/home-assistant/home-assistant-polymer/pull/4057) @iantrich +- ❤️ [markdown card]: New `theme` option [#4057](https://github.com/home-assistant/home-assistant-polymer/pull/4057) @iantrich +- ❤️ [alarm panel card]: New `theme` option [#4057](https://github.com/home-assistant/home-assistant-polymer/pull/4057) @iantrich +- ❤️ [picture card]: New `theme` option [#4057](https://github.com/home-assistant/home-assistant-polymer/pull/4057) @iantrich +- ❤️ [picture elements card]: New `theme` option [#4057](https://github.com/home-assistant/home-assistant-polymer/pull/4057) @iantrich +- ❤️ [picture elements card]: Add actions to `state-badge` element [#4028](https://github.com/home-assistant/home-assistant-polymer/pull/4028) @iantrich +- ❤️ [picture entity card]: New `theme` option [#4057](https://github.com/home-assistant/home-assistant-polymer/pull/4057) @iantrich +- ❤️ [picture glance card]: New `theme` option [#4057](https://github.com/home-assistant/home-assistant-polymer/pull/4057) @iantrich +- ❤️ [picture glance card]: New `show_state` option for entities [#3937](https://github.com/home-assistant/home-assistant-polymer/pull/3937) @iantrich +- ❤️ [weather forecast card]: New `theme` option [#4057](https://github.com/home-assistant/home-assistant-polymer/pull/4057) @iantrich +- ❤️ [vertical stack card]: New `title` option [#3839](https://github.com/home-assistant/home-assistant-polymer/pull/3839) @iantrich +- ❤️ [horizontal stack card]: New `title` option [#3839](https://github.com/home-assistant/home-assistant-polymer/pull/3839) @iantrich +- ❤️ New `double_tap_action` option [#3879](https://github.com/home-assistant/home-assistant-polymer/pull/3879) @iantrich +- ❤️ New `confirmation` option for actions [#4006](https://github.com/home-assistant/home-assistant-polymer/pull/4006) @iantrich +- ❤️ Theming: New CSS switch sytle: `switch-checked-color` [#4017](https://github.com/home-assistant/home-assistant-polymer/pull/4017) @iantrich +- ❤️ Theming: New CSS switch sytle: `switch-unchecked-color` [#4017](https://github.com/home-assistant/home-assistant-polymer/pull/4017) @iantrich +- ❤️ Theming: New CSS switch sytle: `switch-unchecked-button-color` [#4017](https://github.com/home-assistant/home-assistant-polymer/pull/4017) @iantrich +- ❤️ Theming: New CSS switch sytle: `switch-unchecked-track-color` [#4017](https://github.com/home-assistant/home-assistant-polymer/pull/4017) @iantrich +- 📣 Upgrade MDI icons to 4.5.95 [#3977](https://github.com/home-assistant/home-assistant-polymer/pull/3977) @bonanitech +- 📣 Display card errors in YAML instead of JSON [#4018](https://github.com/home-assistant/home-assistant-polymer/pull/4018) @iantrich +- ⚠️ revert lovelace selectable text [#4095](https://github.com/home-assistant/home-assistant-polymer/pull/4095) @iantrich +- 🔧 [alarm panel card]: Visual accessibility changes [#3991](https://github.com/home-assistant/home-assistant-polymer/pull/3991) @mr-awk +- 🔧 [entities card]: Fix media row secondary info [#3957](https://github.com/home-assistant/home-assistant-polymer/pull/3957) @iantrich +- 🔧 [light card]: Fix name wrapping [#3972](https://github.com/home-assistant/home-assistant-polymer/pull/3972) @shbatm +- 🔧 [map card]: Fix zone icon visibility [#4085](https://github.com/home-assistant/home-assistant-polymer/pull/4085) @springstan +- 📣 [markdown card]: Add default text to card editor [#3960](https://github.com/home-assistant/home-assistant-polymer/pull/3960) @akargl + ## Changes in 0.100.0 -- 📣 [picture glance card]: New config `tap_action` and `hold_action` for `entities` (#3807) @iantrich -- 📣 [entities card]: New config `image` for `entities` (#3832) @iantrich -- 📣 [entity filter card]: Support for operators in `state_filter` and individual `state_filter` option for `entitites` (#3692) @iantrich -- 📣 [light card]: New config `icon` (#3771) @iantrich -- 📣 [picture entity card]: UI Editor (#3708) @iantrich -- 📣 [picture glance card]: UI Editor (#3709) @iantrich -- 📣 [history graph card]: UI Editor (#3782) @iantrich -- 📣 Add support for panels to cast (#3796) @bramkragten -- 📣 Allow for user text selection (Android Chrome not supported) (#3605) @iantrich -- 📣 add `state_filter` to picture cards (#3791) @iantrich -- 📣 Add a setting for vibration (#3813) @bramkragten -- 📣 Switch paper-toggle-button to mwc-switch (#3683) @iantrich -- 📣 New Action `url` (#3773) @iantrich -- 🔧 [map card]: Align background with tiles (#3858) @bramkragten -- 🔧 [map card]: Fix dark switch for map card editor (#3856) @bramkragten -- 🔧 [views]: Guard for null badges (#3841) @bramkragten +- ❤️ [picture glance card]: New config `tap_action` and `hold_action` for `entities` [#3807](https://github.com/home-assistant/home-assistant-polymer/pull/3807) @iantrich +- ❤️ [entities card]: New config `image` for `entities` [#3832](https://github.com/home-assistant/home-assistant-polymer/pull/3832) @iantrich +- ❤️ [entity filter card]: Support for operators in `state_filter` and individual `state_filter` option for `entitites` [#3692](https://github.com/home-assistant/home-assistant-polymer/pull/3692) @iantrich +- ❤️ [light card]: New config `icon` [#3771](https://github.com/home-assistant/home-assistant-polymer/pull/3771) @iantrich +- ❤️ [picture entity card]: UI Editor [#3708](https://github.com/home-assistant/home-assistant-polymer/pull/3708) @iantrich +- ❤️ [picture glance card]: UI Editor [#3709](https://github.com/home-assistant/home-assistant-polymer/pull/3709) @iantrich +- ❤️ [history graph card]: UI Editor [#3782](https://github.com/home-assistant/home-assistant-polymer/pull/3782) @iantrich +- ❤️ Add `state_filter` to picture cards [#3791](https://github.com/home-assistant/home-assistant-polymer/pull/3791) @iantrich +- ❤️ Add a setting for vibration [#3813](https://github.com/home-assistant/home-assistant-polymer/pull/3813) @bramkragten +- ❤️ New Action `url` [#3773](https://github.com/home-assistant/home-assistant-polymer/pull/3773) @iantrich +- 📣 Add support for panels to cast [#3796](https://github.com/home-assistant/home-assistant-polymer/pull/3796) @bramkragten +- 📣 Allow for user text selection (Android Chrome not supported) [#3605](https://github.com/home-assistant/home-assistant-polymer/pull/3605) @iantrich +- ⚠️ Switch paper-toggle-button to mwc-switch [#3683](https://github.com/home-assistant/home-assistant-polymer/pull/3683) @iantrich +- 🔧 [map card]: Align background with tiles [#3858](https://github.com/home-assistant/home-assistant-polymer/pull/3858) @bramkragten +- 🔧 [map card]: Fix dark switch for map card editor [#3856](https://github.com/home-assistant/home-assistant-polymer/pull/3856) @bramkragten +- 🔧 [views]: Guard for null badges [#3841](https://github.com/home-assistant/home-assistant-polymer/pull/3841) @bramkragten ## Changes in 0.99.0 -- 📣 [glance card]: New config `show_last_changed` for `entities` -- 📣 [glance card]: New config `image` for `entities` -- 📣 [views]: New config `image` for `badges` -- 📣 [views]: New config `icon` for `badges` -- 📣 [views]: New config `name` for `badges` +- ❤️ [glance card]: New config `show_last_changed` for `entities` +- ❤️ [glance card]: New config `image` for `entities` +- ❤️ [views]: New config `image` for `badges` +- ❤️ [views]: New config `icon` for `badges` +- ❤️ [views]: New config `name` for `badges` - 📣 Unused entities: Rewritten into a table view - 📣 Unused entities: Add entities to Lovelace cards - 📣 Lovelace background settings moved to theme `--lovelace-background` @@ -46,17 +82,17 @@ description: "Changelog of the Lovelace UI." - 🔧 Break long strings in notifications ## Changes in 0.88.0 +- ❤️ Theming: New CSS card style `ha-card-box-shadow` ([#2855](https://github.com/home-assistant/home-assistant-polymer/pull/2855)) - 📣 Disable toast notifications for successful operations ([#2700](https://github.com/home-assistant/home-assistant-polymer/pull/2822)) - 📣 Color Picker: Toggleable between segmented and continuous ([#2806](https://github.com/home-assistant/home-assistant-polymer/pull/2806)) -- 📣 Theming: New CSS card style `ha-card-box-shadow` ([#2855](https://github.com/home-assistant/home-assistant-polymer/pull/2855)) - 🔧 Fix login issue on Firefox ([#2860](https://github.com/home-assistant/home-assistant-polymer/pull/2860)) - 🔧 [light card]: Fix click events ([#2850](https://github.com/home-assistant/home-assistant-polymer/pull/2850)) ## Changes in 0.87.0 +- ❤️ Theming: New CSS card style `ha-card-border-radius` +- ❤️ Theming: New CSS card style `ha-card-background` +- ❤️ New system-health card in dev-info - 📣 MDI icons updated to [3.3.92](https://cdn.materialdesignicons.com/3.3.92/) -- 📣 Theming: New CSS card style `ha-card-border-radius` -- 📣 Theming: New CSS card style `ha-card-background` -- 📣 New system-health card in dev-info - 📣 UI Editor: YAML syntax support - 📣 UI Editor: Line numbers - 📣 UI Editor: Now supports columns on wide screens @@ -67,8 +103,8 @@ description: "Changelog of the Lovelace UI." - 🔧 Groups are now togglable ## Changes in 0.86.0 -- 📣 Lovelace is now the default UI for Home Assistant! -- 📣 New Lovelace [demos](https://demo.home-assistant.io/#/lovelace/0) page +- ❤️ Lovelace is now the default UI for Home Assistant! +- ❤️ New Lovelace [demos](https://demo.home-assistant.io/#/lovelace/0) page - 🔧 [thermostat card]: Fix sizing - 🔧 [gauge card]: Fix sizing - 🔧 [iframe card]: Fix card size @@ -80,23 +116,23 @@ description: "Changelog of the Lovelace UI." - 🔧 The [weblink row] opens links in new tabs ## Changes in 0.85.0 -- 📣 [map card]: New config `geo_location_sources` +- ❤️ [map card]: New config `geo_location_sources` +- ❤️ UI Editor for [picture card] +- ❤️ UI Editor for [weather forecast card] +- ❤️ UI Editor for [plant status card] +- ❤️ UI Editor for [media control card] +- ❤️ UI Editor for [iframe card] +- ❤️ UI Editor for [sensor card] +- ❤️ UI Editor for [shopping list card] +- ❤️ UI Editor for [light card] +- ❤️ UI Editor for [gauge card] +- ❤️ UI Editor for [markdown card] +- ❤️ UI Editor for [alarm panel card] +- ❤️ UI Editor for [thermostat card] +- ❤️ UI Editor for [entity button card] +- ❤️ UI Editor for [map card] - 📣 [alarm panel card]: Hide keypad if `code_format` attribute is not "Number" - 📣 [alarm panel card]: Hide code input field if `code_format` attribute is not set -- 📣 UI Editor for [picture card] -- 📣 UI Editor for [weather forecast card] -- 📣 UI Editor for [plant status card] -- 📣 UI Editor for [media control card] -- 📣 UI Editor for [iframe card] -- 📣 UI Editor for [sensor card] -- 📣 UI Editor for [shopping list card] -- 📣 UI Editor for [light card] -- 📣 UI Editor for [gauge card] -- 📣 UI Editor for [markdown card] -- 📣 UI Editor for [alarm panel card] -- 📣 UI Editor for [thermostat card] -- 📣 UI Editor for [entity button card] -- 📣 UI Editor for [map card] - 🔧 [thermostat card] Step logic updated to match more-info behavior - 🔧 [weather forecast card] Proper RTL support - 🔧 [thermostat card] Set minimum height of card @@ -122,11 +158,11 @@ description: "Changelog of the Lovelace UI." - ⚠️ [picture glance card]: `tap_action` and `hold_action` configurations changed. See docs. ### All Changes -- 📣 [weather forecast card]: New config `name` -- 📣 [thermostat card]: New config `name` -- 📣 [plant status card]: New config `name` +- ❤️ [weather forecast card]: New config `name` +- ❤️ [thermostat card]: New config `name` +- ❤️ [plant status card]: New config `name` +- ❤️ [picture elements card]: Added `state_image` and `camera_image` - 📣 [entities card]: Alert entity rows are now displayed as toggles -- 📣 [picture elements card]: Added `state_image` and `camera_image` - 📣 Ability to generate a Lovelace config if not present using available entities - 📣 UI Editor now in Beta with support for adding/removing views/cards - 🔧 [map card]: Fix `aspect_ratio` @@ -136,21 +172,21 @@ description: "Changelog of the Lovelace UI." - ❤️ New card type: `shopping-list` ## Changes in 0.82.0 -- 📣 New card type: `light` ❤️ -- 📣 Alpha release of UI Editor -- 📣 [entities card]: can be themed -- 📣 [gauge card]: can be themed -- 📣 [light card]: can be themed -- 📣 [thermostat card]: can be themed +- ❤️ New card type: `light` +- ❤️ Alpha release of UI Editor +- ❤️ [entities card]: New `theme` option +- ❤️ [gauge card]: New `theme` option +- ❤️ [light card]: New `theme` option +- ❤️ [thermostat card]: New `theme` option - 🔧 `!secret` and `!include` usage restored for manual editing, but are not supported with the UI editor ## Changes in 0.81.0 - ❤️ New card type: `alarm-panel` - ❤️ New card type: `thermostat` - ❤️ New card type: `entity-button` -- 📣 [glance card]: can be themed -- 📣 [glance card]: define columns within -- 📣 [entity button card]: can be themed +- ❤️ [glance card]: New `theme` option +- ❤️ [glance card]: New `columns` option +- ❤️ [entity button card]: New `theme` option - 📣 Long press is now supported - 📣 Update to allow the use of Custom UI. If you run into issues please disable Custom UI and test before reporting them. If the issue goes away without Custom UI please report this to the Custom UI developer as this is not officially supported. @@ -167,11 +203,11 @@ description: "Changelog of the Lovelace UI." - ⚠️ [glance card]: `turn-on` replaced with `call-service` ### All changes -- 📣 Add support for CSS imports - ❤️ New card type: `conditional-card` (Drop your [entity filter card] hacks) +- 📣 Add support for CSS imports - 📣 [picture glance card]: Add support for custom icons - 📣 [picture entity card]: Supports hiding name and/or state -- 📣 [glance card]: `turn-on` replaced with `call-service` +- ⚠️ [glance card]: `turn-on` replaced with `call-service` - 📣 [glance card]: Allow selectively empty names - 📣 [picture elements card]: `state-label` now supports prefix and suffix - 📣 [entities card]: Row dividers From 37ddc65f5c4f98058ca85ce019692517aa1a5600 Mon Sep 17 00:00:00 2001 From: Eliseo Martelli Date: Tue, 29 Oct 2019 11:09:21 +0100 Subject: [PATCH 11/56] Delete GTT Documentation (#11022) * Delete GTT Documentation * Removed GTT Redirects * Delete gtt.png --- source/_integrations/gtt.markdown | 34 ------------------------- source/_redirects | 2 -- source/images/supported_brands/gtt.png | Bin 20260 -> 0 bytes 3 files changed, 36 deletions(-) delete mode 100644 source/_integrations/gtt.markdown delete mode 100644 source/images/supported_brands/gtt.png diff --git a/source/_integrations/gtt.markdown b/source/_integrations/gtt.markdown deleted file mode 100644 index a4d5e7bb764..00000000000 --- a/source/_integrations/gtt.markdown +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: "GTT" -description: "Instructions on how to integrate timetable data for a GTT stop within Home Assistant." -ha_category: - - Transport -logo: gtt.png -ha_iot_class: Cloud Polling -ha_release: 0.85 ---- - - -The `gtt` sensor will give you the departure time of the next bus at the given stop. - -To enable this sensor, add the following lines to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -sensor: - - platform: gtt - stop: '1080' - bus_name: '58B' -``` -{% configuration %} -stop: - description: The name of the stop. - required: true - type: string -bus_name: - description: The name of the chosen bus. - required: false - type: string -{% endconfiguration %} - -The data is coming from the [gtt.to.it](http://www.gtt.to.it/cms/) website. diff --git a/source/_redirects b/source/_redirects index 59b2ef6626a..508361b8762 100644 --- a/source/_redirects +++ b/source/_redirects @@ -736,7 +736,6 @@ /components/sensor.gpsd /integrations/gpsd /components/sensor.greeneye_monitor /integrations/greeneye_monitor /components/sensor.gtfs /integrations/gtfs -/components/sensor.gtt /integrations/gtt /components/sensor.habitica /integrations/habitica /components/sensor.haveibeenpwned /integrations/haveibeenpwned /components/sensor.hddtemp /integrations/hddtemp @@ -1418,7 +1417,6 @@ /components/growatt_server /integrations/growatt_server /components/gstreamer /integrations/gstreamer /components/gtfs /integrations/gtfs -/components/gtt /integrations/gtt /components/habitica /integrations/habitica /components/hangouts /integrations/hangouts /components/harman_kardon_avr /integrations/harman_kardon_avr diff --git a/source/images/supported_brands/gtt.png b/source/images/supported_brands/gtt.png deleted file mode 100644 index 33f88ea524863392ab22697485faa1e240fe86fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20260 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Ð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 ximvt30Gk6MZmnIf=KEK_NB`Yoi|Jh6OuI|sMl From d69973657d91eca4b568370435421bda2e22ff04 Mon Sep 17 00:00:00 2001 From: thoscut Date: Wed, 30 Oct 2019 08:22:48 +0100 Subject: [PATCH 12/56] Update documentation on folder sensor attributes (#11044) --- source/_integrations/folder.markdown | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/_integrations/folder.markdown b/source/_integrations/folder.markdown index 23be9c142f3..27b52d18ebd 100644 --- a/source/_integrations/folder.markdown +++ b/source/_integrations/folder.markdown @@ -8,7 +8,8 @@ ha_iot_class: Local Polling ha_release: 0.64 --- -Sensor for monitoring the contents of a folder. Note that folder paths must be added to [whitelist_external_dirs](/docs/configuration/basic/). Optionally a [wildcard filter](https://docs.python.org/3.6/library/fnmatch.html) can be applied to the files considered within the folder. The state of the sensor is the size in MB of files within the folder that meet the filter criteria. The number of filtered files in the folder and total size in bytes of those files are exposed as attributes. +Sensor for monitoring the contents of a folder. Note that folder paths must be added to [whitelist_external_dirs](/docs/configuration/basic/). Optionally a [wildcard filter](https://docs.python.org/3.6/library/fnmatch.html) can be applied to the files considered within the folder. The state of the sensor is the size in MB of files within the folder that meet the filter criteria. +The sensor exposes the number of filtered files in the folder, total size in bytes of those files and a comma separated list of the file paths as attributes. ## Configuration From c90e2f0cb7f926b612a2835cb2622fa98e55f9b9 Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Wed, 30 Oct 2019 16:13:09 +0100 Subject: [PATCH 13/56] Add Xiaomi Air Quality Monitor (cgllc.airmonitor.b1) (#11027) --- .../air_quality.xiaomi_miio.markdown | 48 +++++++++++++++++++ .../_integrations/sensor.xiaomi_miio.markdown | 7 ++- 2 files changed, 51 insertions(+), 4 deletions(-) create mode 100644 source/_integrations/air_quality.xiaomi_miio.markdown diff --git a/source/_integrations/air_quality.xiaomi_miio.markdown b/source/_integrations/air_quality.xiaomi_miio.markdown new file mode 100644 index 00000000000..84ed346c516 --- /dev/null +++ b/source/_integrations/air_quality.xiaomi_miio.markdown @@ -0,0 +1,48 @@ +--- +title: "Xiaomi Air Quality Monitor" +description: "Instructions how to integrate your Xiaomi Mi Air Quality Monitor within Home Assistant." +logo: xiaomi.png +ha_category: + - Health +ha_iot_class: Local Polling +ha_release: 0.102 +--- + +The `xiaomi_miio` sensor platform is observing your Xiaomi Mi Air Quality Monitor and reporting the air quality values. + +Currently, the supported features are: + +- Particulate matter 2.5 +- Attributes + - carbon_dioxide_equivalent + - total_volatile_organic_compounds + +Please follow the instructions on [Retrieving the Access Token](/integrations/vacuum.xiaomi_miio/#retrieving-the-access-token) to get the API token. + +## Configuration + +To add a Xiaomi Mi Air Quality Monitor to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +air_quality: + - platform: xiaomi_miio + host: IP_ADDRESS + token: YOUR_TOKEN +``` + +{% configuration %} +host: + description: The IP address of your miio device. + required: true + type: string +token: + description: The API token of your miio device. + required: true + type: string +name: + description: The name of your miio device. + required: false + type: string + default: Xiaomi Miio Air Quality Monitor +{% endconfiguration %} diff --git a/source/_integrations/sensor.xiaomi_miio.markdown b/source/_integrations/sensor.xiaomi_miio.markdown index 2c0fc265f9a..04f18298eeb 100644 --- a/source/_integrations/sensor.xiaomi_miio.markdown +++ b/source/_integrations/sensor.xiaomi_miio.markdown @@ -1,6 +1,6 @@ --- -title: "Xiaomi Air Quality Monitor" -description: "Instructions how to integrate your Xiaomi Mi Air Quality Monitor within Home Assistant." +title: "Xiaomi Air Quality Index Monitor" +description: "Instructions how to integrate your Xiaomi Mi Air Quality Index Monitor within Home Assistant." logo: xiaomi.png ha_category: - Health @@ -29,8 +29,7 @@ To add a Xiaomi Mi Air Quality Monitor to your installation, add the following t # Example configuration.yaml entry sensor: - platform: xiaomi_miio - name: Xiaomi Air Quality Monitor - host: 192.168.130.73 + host: IP_ADDRESS token: YOUR_TOKEN ``` From 0228fc1f87861cac0a0ed42e2817c6bdc6cb66e2 Mon Sep 17 00:00:00 2001 From: springstan <46536646+springstan@users.noreply.github.com> Date: Fri, 1 Nov 2019 09:52:17 +0100 Subject: [PATCH 14/56] Updated decora switch documentation (#11051) --- source/_integrations/decora.markdown | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/source/_integrations/decora.markdown b/source/_integrations/decora.markdown index 8e3d4e932a8..5357de2a2c4 100644 --- a/source/_integrations/decora.markdown +++ b/source/_integrations/decora.markdown @@ -32,15 +32,17 @@ devices: mac_address: required: true description: The bluetooth address of the switch. - type: string - name: - description: The name to use in the frontend. - required: false - type: string - api_key: - description: The API key to access the device. - required: true - type: string + type: list + keys: + name: + description: The name to use in the frontend. + required: false + default: "`mac_address` of this switch" + type: string + api_key: + description: The API key to access the device. + required: true + type: string {% endconfiguration %}
From 3615cebb5d86c2b7fcb8e060c5e55dc0298ac616 Mon Sep 17 00:00:00 2001 From: SukramJ Date: Mon, 4 Nov 2019 09:55:37 +0100 Subject: [PATCH 15/56] Add dump config service to HomematicIP Cloud (#10999) --- source/_integrations/homematicip_cloud.markdown | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/source/_integrations/homematicip_cloud.markdown b/source/_integrations/homematicip_cloud.markdown index 800d3e9f9a1..f11252f64db 100644 --- a/source/_integrations/homematicip_cloud.markdown +++ b/source/_integrations/homematicip_cloud.markdown @@ -160,6 +160,7 @@ Within this delay the device registration should be completed in the App, otherw - `homematicip_cloud.deactivate_eco_mode`: Deactivates the eco mode immediately. - `homematicip_cloud.deactivate_vacation`: Deactivates the vacation mode immediately. - `homematicip_cloud.set_active_climate_profile`: Set the active climate profile index. +- `homematicip_cloud.dump_hap_config`: Dump the configuration of the Homematic IP Access Point(s). ### Service Examples @@ -234,6 +235,16 @@ action: climate_profile_index: 1 ``` +Dump the configuration of the Homematic IP Access Point(s). + +```yaml +... +action: + service: homematicip_cloud.dump_hap_config + data: + anonymize: True +``` + ## Additional info From a67e08d9f17bc8c7b6a3ef20d7c0ca5c58f0b656 Mon Sep 17 00:00:00 2001 From: Kevin McCormack Date: Mon, 4 Nov 2019 04:37:18 -0500 Subject: [PATCH 16/56] Update Vivotek integration (#10899) Make stream path optionally configurable. --- source/_integrations/vivotek.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_integrations/vivotek.markdown b/source/_integrations/vivotek.markdown index 6cf273bd8ab..63a479470d0 100644 --- a/source/_integrations/vivotek.markdown +++ b/source/_integrations/vivotek.markdown @@ -58,6 +58,11 @@ framerate: required: false default: 2 type: integer +stream_path: + description: This parameter allows you to override the stream path. + required: false + default: live.sdp + type: string {% endconfiguration %} ### Advanced configuration @@ -73,6 +78,7 @@ camera: password: !secret fd_camera_pwd verify_ssl: false framerate: 5 + stream_path: live2.sdp ``` ### Services From 3d995495988b94f3daef880946250d21a57069ec Mon Sep 17 00:00:00 2001 From: Santobert Date: Mon, 4 Nov 2019 11:34:53 +0100 Subject: [PATCH 17/56] Add scene.create service (#11030) * Add service scene.create * State is mandatory * Revert out of scope change * Update format --- source/_integrations/scene.markdown | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/source/_integrations/scene.markdown b/source/_integrations/scene.markdown index 2745e4825ef..0e52c743523 100644 --- a/source/_integrations/scene.markdown +++ b/source/_integrations/scene.markdown @@ -88,3 +88,29 @@ automation: ## Reloading scenes Whenever you make a change to your scene configuration, you can call the `scene.reload` service to reload the scenes. + +## Creating scenes on the fly + +Create a new scene without having to configure it by calling the `scene.create` service. This scene will be discarded after reloading the configuration. + +You need to pass a `scene_id` in lowercase and with underscores instead of spaces. You also need to specify the entities in the same format as when configuring the scene. + +```yaml +# Example automation +automation: + trigger: + platform: homeassistant + event: start + action: + service: scene.create + data: + scene_id: my_scene + entities: + light.tv_back_light: + state: on + brightness: 100 + light.ceiling: off + media_player.sony_bravia_tv: + state: on + source: HDMI 1 +``` From 50ca49be845d55674da994346308899e9c91a136 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Mon, 4 Nov 2019 22:25:37 +0200 Subject: [PATCH 18/56] =?UTF-8?q?Modernize=20Huawei=20LTE,=20add=20UI=20co?= =?UTF-8?q?nfig,=20unauthenticated=20mode,=20swi=E2=80=A6=20(#10380)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Modernize Huawei LTE, add config entry support, unauthenticated mode etc * Note Huawei LTE no longer using known_devices.yaml * Update info about enabled/disabled entities * Note Huawei LTE mobile data switch support * Support Huawei LTE SSDP discovery * Link to supported integrations from SSDP, tweak deCONZ spelling * Note mobile data switch is enabled by default * Remove comma * Minor changes * Clarify which are LTE signal sensors * Remove notify from config example * Remove username and password from config example Co-authored-by: Fabian Affolter --- source/_integrations/device_tracker.markdown | 2 +- source/_integrations/huawei_lte.markdown | 195 ++++++++----------- source/_integrations/ssdp.markdown | 5 +- 3 files changed, 80 insertions(+), 122 deletions(-) diff --git a/source/_integrations/device_tracker.markdown b/source/_integrations/device_tracker.markdown index ed6a3b95280..74fd82bb99e 100644 --- a/source/_integrations/device_tracker.markdown +++ b/source/_integrations/device_tracker.markdown @@ -64,7 +64,7 @@ Multiple device trackers can be used in parallel, such as [Owntracks](/integrati
-As of 0.94 `known_devices.yaml` is being phased out, and no longer used by all trackers. Depending on the integration you use this section may no longer apply. This includes the mobile app, OwnTracks, GeoFency, GPSLogger, and Locative. +As of 0.94 `known_devices.yaml` is being phased out and no longer used by all trackers. Depending on the integration you use this section may no longer apply. This includes the mobile app, OwnTracks, GeoFency, GPSLogger, Locative and Huawei LTE.
diff --git a/source/_integrations/huawei_lte.markdown b/source/_integrations/huawei_lte.markdown index 601d271afc7..4a8b8585f7c 100644 --- a/source/_integrations/huawei_lte.markdown +++ b/source/_integrations/huawei_lte.markdown @@ -1,28 +1,75 @@ --- -title: "Huawei LTE Routers" -description: "Instructions on how to integrate Huawei LTE routers with Home Assistant." +title: "Huawei LTE" +description: "Instructions on how to integrate Huawei LTE router and modem devices with Home Assistant." logo: huawei.svg ha_category: - Network - Presence Detection - Notifications - Sensor + - Switch ha_release: 0.79 ha_iot_class: Local Polling --- -The Huawei LTE router integration for Home Assistant allows you to observe and control [Huawei LTE routers](https://consumer.huawei.com/en/smart-home/). +The Huawei LTE router and modem integration for Home Assistant allows you to observe and control [Huawei LTE devices](https://consumer.huawei.com/en/smart-home/). -There is currently support for the following device types within Home Assistant: +There is currently support for the following platforms within Home Assistant: -- [Presence Detection](#presence-detection) - a device tracker for connected devices -- [Notifications](#notifications) -- [Sensor](#sensor) - with device, signal, and traffic information - -All platform requires you to have set up the [Huawei LTE component](#configuration). +- Presence detection - device tracker for connected devices +- Notifications - via SMS +- Sensors - device, signal, and traffic information +- Switch - mobile data on/off ## Configuration +The integration can be enabled in two ways, either using the frontend +or using YAML. Additionally, if the [SSDP integration](../ssdp/) is +enabled in Home Assistant, automatically discovered Huawei LTE devices +which support and have UPnP enabled are made available for further +optional configuration in the frontend. + +The integration can be run with or without +authentication. Authenticated mode enables all available integration +features and entities, but may interfere with accessing the device web +interface from another source such as a browser while the integration +is active or vice versa. The exact list of features requiring +authentication to work varies by device and firmware version. The +integration will try to use all configured ones and fail gracefully if +it detects one requiring authentication in unauthenticated mode. + +Only a subset of the entities provided by the target device by +default: + +- WAN IP address sensor +- LTE signal sensors RSRQ, RSRP, RSSI, and SINR +- mobile data switch +- device tracker entries + +The rest are added to the entity registry, but disabled by default. + +Support for different categories of information and thus available +entities varies by device model and firmware version. + +### Configuration via the frontend + +Menu: **Configuration** -> **Integrations**. + +Click on the `+` sign to add an integration and click on **Huawei +LTE**, and follow the configuration flow. After finishing, the Huawei +LTE integration will be available. + +To use unauthenticated mode, leave username and password empty. The +integration will then attempt to first use empty strings to +authenticate and fall back to unauthenticated mode in case that +fails. If this process does not yield desired results, the YAML +configuration (see below) is available for more fine grained control. + +Default list of notification recipient phone numbers can be set using +the integration's configuration options. + +### Configuration via YAML + To enable the component, add the following lines to your `configuration.yaml` file: @@ -30,132 +77,42 @@ To enable the component, add the following lines to your # Example configuration.yaml entry huawei_lte: - url: http://192.168.100.1/ - username: YOUR_USERNAME - password: YOUR_PASSWORD ``` +For routers configured via the UI, each configuration item for the +same router in YAML overrides and updates the values set in UI +whenever the YAML configuration values are introduced or updated. {% configuration %} url: - description: URL of the router web interface. + description: URL of the device web interface. Typically http://192.168.100.1/ or http://192.168.1.1/. required: true type: string username: - description: The username used for the router web interface. - required: true + description: The username used for the device web interface in authenticated mode. Typically `admin`, or empty string (`""`) for USB stick modems. To use unauthenticated mode, leave this variable out altogether. + required: false type: string password: - description: The password used for the router web interface. - required: true + description: The password used for the device web interface in authenticated mode. Typically empty string (`""`) for USB stick modems. To use unauthenticated mode, leave this variable out altogether. + required: false type: string +notify: + description: Enable notifications using SMS messages. To use notifications, please see the [getting started with automation page](/getting-started/automation/). + required: false + type: map + keys: + recipient: + description: The phone number of a default recipient or a list with multiple recipients. + required: false + type: [string, list] {% endconfiguration %} -### Tested routers +### Tested devices -Routers we know to be working with this integration based on the documentation of used libraries and reports by users: +Devices we know to be working with this integration based on the [documentation of used libraries](https://github.com/Salamek/huawei-lte-api/#huawei-lte-api) and reports by users: - Huawei B310s-22 - Huawei B525s-23a - Huawei E5186s-22a - Huawei B618 -This is not a complete list. The integration can probably connect to other Huawei LTE routers running similar firmware. - -## Presence Detection - -This platform offers presence detection by looking at connected devices to a [Huawei LTE router](https://consumer.huawei.com/en/smart-home/). - -To enable the sensor, add the following lines to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -device_tracker: - - platform: huawei_lte -``` - -See the [device tracker integration page](/integrations/device_tracker/) for instructions how to configure the people to be tracked. - -## Notifications - -The `huawei_lte` platform allows you to use a Huawei LTE router for notifications from Home Assistant. The messages will be sent as SMS text messages. - -```yaml -# Example configuration.yaml entry -notify: - - platform: huawei_lte - recipient: "+15105550123" -``` - -{% configuration %} -recipient: - description: The phone number of a default recipient or a list with multiple recipients. - required: true - type: [string, list] -name: - description: Setting the optional parameter `name` allows multiple notifiers to be created. The notifier will bind to the service `notify.NOTIFIER_NAME`. - required: false - default: notify - type: string -url: - description: The router to use. Not needed if you only have one. - required: false - type: string -{% endconfiguration %} - -To use notifications, please see the [getting started with automation page](/getting-started/automation/). - -## Sensor - -The `huawei_lte` sensor platform allows you to monitor Huawei LTE routers. - -The names for the item you want to monitor are dot separated paths to information returned by the router. The data set varies by router model. To see what your router provides, set logging level to debug and watch `homeassistant.components.huawei_lte` debug entries. The configuration variable description contains a few example paths just to illustrate the syntax. These may not be available on all routers or their semantics may differ, and there are quite likely many more that are not listed here. - -To enable the sensor, add the following lines to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -sensor: - - platform: huawei_lte - monitored_conditions: - - device_information.SoftwareVersion - - device_signal.rssi - - monitoring_traffic_statistics.CurrentDownloadRate - - monitoring_traffic_statistics.TotalConnectTime -``` - -{% configuration %} -monitored_conditions: - description: Defines the data to monitor as sensors. Defaults to a few generally available data items expected to be available on most boxes. - required: false - default: Below is indicated which conditions are the default. - type: list - keys: - device_information.SoftwareVersion: - description: Software version. - device_information.WanIPAddress: - description: WAN interface IPv4 address. - default: default - device_information.WanIPv6Address: - description: WAN interface IPv6 address. - device_signal.rsrq: - description: The signal RSRQ value. - default: default - device_signal.rsrp: - description: The signal RSRP value. - default: default - device_signal.rssi: - description: The signal RSSI value. - default: default - device_signal.sinr: - description: The signal SINR value. - default: default - monitoring_traffic_statistics.CurrentDownloadRate: - description: Current download rate, bytes/sec. - monitoring_traffic_statistics.CurrentUploadRate: - description: Current upload rate, bytes/sec. - monitoring_traffic_statistics.TotalUpload: - description: Total bytes uploaded since last reset. - monitoring_traffic_statistics.TotalDownload: - description: Total bytes downloaded since last reset. - monitoring_traffic_statistics.TotalConnectTime: - description: Total time connected since last reset. -{% endconfiguration %} +This is not a complete list. The integration can probably connect to other Huawei LTE devices running similar firmware. diff --git a/source/_integrations/ssdp.markdown b/source/_integrations/ssdp.markdown index 32704541803..7627c272b64 100644 --- a/source/_integrations/ssdp.markdown +++ b/source/_integrations/ssdp.markdown @@ -23,5 +23,6 @@ ssdp: The following integrations are automatically discovered by the SSDP integration: - - Deconz - - Philips Hue + - [deCONZ](../deconz/) + - [Huawei LTE](../huawei_lte/) + - [Philips Hue](../hue/) From a866289e58c87ad1775fbbb6fcc18aa60c736394 Mon Sep 17 00:00:00 2001 From: chriscla Date: Mon, 4 Nov 2019 13:03:38 -0800 Subject: [PATCH 19/56] Nzbget download event (#10838) * Add nzbget downloaded event. * Move raw tags outside the code block * Match event name to code --- source/_integrations/nzbget.markdown | 31 +++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/source/_integrations/nzbget.markdown b/source/_integrations/nzbget.markdown index 637acca2f3b..65a743d2198 100644 --- a/source/_integrations/nzbget.markdown +++ b/source/_integrations/nzbget.markdown @@ -66,6 +66,35 @@ This component will create these sensors: - `nzbget_uptime`: NZBGet server uptime. - `nzbget_size`: Amount of data downloaded since server start in MB. +## Event Automation + +The NZBGet integration continuously monitors nzbget's download history. When a download completes, an event usable for automation is triggered on the Home Assistant Bus. + +Possible events are: + +- `nzbget_download_complete` + +The event includes the name, category, and status of the downloaded nzb. + +Example automation to send a Telegram message on a completed download: +{% raw %} + +```yaml +- alias: Completed Torrent + trigger: + platform: event + event_type: nzbget_download_complete + - event_data: + category: tv + action: + service: notify.telegram_notifier + data_template: + title: "Download completed!" + message: "{{trigger.event.data.name}}" +``` + +{% endraw %} + ## Services Available services: @@ -76,6 +105,6 @@ Available services: ### Service `nzbget/set_speed` -| Service data attribute | Optional | Description | +| Service data attribute | Optional | Description | |------------------------|----------|-------------------------------------------------------------------------------------------------| | `speed` | yes | Sets the download speed limit, specified in Kb/s. 0 disables the speed limit. Defaults to 1000. | From c70899665a9eb9420a537e55eb863337902e80c7 Mon Sep 17 00:00:00 2001 From: Martin Date: Mon, 4 Nov 2019 22:07:11 +0100 Subject: [PATCH 20/56] Add ViCare heating_type (#10656) --- source/_integrations/vicare.markdown | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/_integrations/vicare.markdown b/source/_integrations/vicare.markdown index 4bb79f76745..9cbaf4b3d36 100644 --- a/source/_integrations/vicare.markdown +++ b/source/_integrations/vicare.markdown @@ -43,6 +43,11 @@ circuit: description: Heating circuit of your heating device if multiple exist required: false type: integer +heating_type: + description: One of `generic`, `gas` or `heatpump`. Specifying the heating_type provides additional attributes specific for the heating system. + required: false + type: string + default: generic {% endconfiguration %} Two components will be created: `climate.vicare_heating` and `water_heater.vicare_water` (for domestic hot water). From 00545e5c01f644c6082b18a808cf4d96e648e0ee Mon Sep 17 00:00:00 2001 From: Jesse Hills <3060199+jesserockz@users.noreply.github.com> Date: Wed, 6 Nov 2019 02:24:57 +1300 Subject: [PATCH 21/56] Update juicenet docs with switch (#10917) * Update juicenet docs with switch * Add switch category * Add car category --- source/_integrations/juicenet.markdown | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/source/_integrations/juicenet.markdown b/source/_integrations/juicenet.markdown index 0ff4e490a91..15fca05b5ac 100644 --- a/source/_integrations/juicenet.markdown +++ b/source/_integrations/juicenet.markdown @@ -3,12 +3,15 @@ title: "Juicenet" description: "Instructions on how to setup WiFi-equipped Juicenet charging stations with Home Assistant." logo: juicenet.png ha_category: + - Car - Energy - Sensor + - Switch +ha_iot_class: Cloud Polling ha_release: 0.47 --- -The `juicenet` sensor platform pulls data from a [JuiceNet](https://emotorwerks.com/products/juicenet/) charging station equipped with a wifi connection. It will access and make available all of the devices attached to your account. +The `juicenet` sensor platform pulls data from a [JuiceNet](https://emotorwerks.com/products/juicenet/) charging station equipped with a wifi connection. It will access and make available all of the devices attached to your account. It also exposes a switch allowing you to charge your car now instead of waiting for the pre-set schedule. ## Configuration @@ -41,4 +44,4 @@ These sensors will be added for each juicenet device in your account: - Amps - Watts - Charge time of session -- Energy added this session \ No newline at end of file +- Energy added this session From 9747e9afa266acde0c83b04d77d00c963612ff3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kevin=20K=C3=B6ck?= Date: Wed, 6 Nov 2019 13:51:11 +0100 Subject: [PATCH 22/56] fix missing climate temperature_low/high_state_tpl (#11072) --- source/_integrations/climate.mqtt.markdown | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/_integrations/climate.mqtt.markdown b/source/_integrations/climate.mqtt.markdown index 13695adc756..4242674bfc2 100644 --- a/source/_integrations/climate.mqtt.markdown +++ b/source/_integrations/climate.mqtt.markdown @@ -149,6 +149,10 @@ temperature_low_state_topic: description: The MQTT topic to subscribe for changes in the target low temperature. If this is not set, the target low temperature works in optimistic mode (see below). required: false type: string +temperature_low_state_template: + description: A template to render the value received on the `temperature_low_state_topic` with. + required: false + type: template temperature_high_command_topic: description: The MQTT topic to publish commands to change the high target temperature. required: false @@ -157,6 +161,10 @@ temperature_high_state_topic: description: The MQTT topic to subscribe for changes in the target high temperature. If this is not set, the target high temperature works in optimistic mode (see below). required: false type: string +temperature_high_state_template: + description: A template to render the value received on the `temperature_high_state_topic` with. + required: false + type: template precision: description: The desired precision for this device. Can be used to match your actual thermostat's precision. Supported values are `0.1`, `0.5` and `1.0`. required: false From c9e162a2c07786f5bd28944ee363ab924a1fa647 Mon Sep 17 00:00:00 2001 From: "J.P. Hutchins" <34154542+JPHutchins@users.noreply.github.com> Date: Wed, 6 Nov 2019 13:06:22 -0800 Subject: [PATCH 23/56] Add info about torrents that is accessible with templating (#10574) * Add documentation corresponding to PR #27111 https://github.com/home-assistant/home-assistant/pull/27111 * Add ```jinja2 to code tag. * Try ```raw to get passed liquid syntax error. * Add Jekyll {raw} and {endraw}. Still trying to pass jinja2 excerpt. * Update docs corresponding to removal of torrent_info sensor. * :pencil2: Tweaks --- source/_integrations/transmission.markdown | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/source/_integrations/transmission.markdown b/source/_integrations/transmission.markdown index c4e1f554849..8981e96f6fc 100644 --- a/source/_integrations/transmission.markdown +++ b/source/_integrations/transmission.markdown @@ -120,3 +120,21 @@ Adds a new torrent to download. It can either be a URL (http, https or ftp), mag | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | | `torrent` | no | Torrent to download + +## Templating + +### Sensor `started_torrents` + +The state attribute `torrent_info` contains information about the torrents that are currently downloading. You can see this information in **Developer Tools** -> **States** -> `sensor.transmission_started_torrents` -> **Attributes**, or by adding a Markdown Card to Lovelace. + +{% raw %} +```yaml +content: > + {% set payload = state_attr('sensor.transmission_started_torrents', 'torrent_info') %} + + {% for torrent in payload.items() %} {% set name = torrent[0] %} {% set data = torrent[1] %} + + {{ name|truncate(20) }} is {{ data.percent_done }}% complete, {{ data.eta }} remaining {% endfor %} +type: markdown +``` +{% endraw %} From f58f755ac123c9f38e29ab9ae6046ffc8671b428 Mon Sep 17 00:00:00 2001 From: Josh Bendavid Date: Wed, 6 Nov 2019 22:08:51 +0100 Subject: [PATCH 24/56] Update with added options for multiple event types and emulated key hold events. (#10836) * Update with added options for multiple event types and emulated key hold events. * Update keyboard_remote.markdown * Change delay and repeat settings to float --- source/_integrations/keyboard_remote.markdown | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/source/_integrations/keyboard_remote.markdown b/source/_integrations/keyboard_remote.markdown index 5ff4877008a..39a040962ca 100644 --- a/source/_integrations/keyboard_remote.markdown +++ b/source/_integrations/keyboard_remote.markdown @@ -22,10 +22,25 @@ keyboard_remote: {% configuration %} type: - description: Possible values are `key_up`, `key_down`, and `key_hold`. Be careful, `key_hold` will fire a lot of events. + description: Possible values are `key_up`, `key_down`, and `key_hold`. Be careful, `key_hold` will fire a lot of events. This can be a list of types. required: true type: string -device_description: +emulate_key_hold: + description: Emulate key hold events when key is held down. (Some input devices do not send these otherwise.) + required: false + type: boolean + default: false +emulate_key_hold_delay: + description: Number of milliseconds to wait before sending first emulated key hold event + required: false + type: float + default: 0.250 +emulate_key_hold_repeat: + description: Number of milliseconds to wait before sending subsequent emulated key hold event + required: false + type: float + default: 0.033 +device_descriptor: description: Path to the local event input device file that corresponds to the keyboard. required: false type: string @@ -45,9 +60,14 @@ A full configuration for two Keyboard Remotes could look like the one below: ```yaml keyboard_remote: - device_descriptor: '/dev/input/by-id/bluetooth-keyboard' - type: 'key_up' + type: 'key_down' + emulate_key_hold: true + emulate_key_hold_delay: 250 + emulate_key_hold_repeat: 33 - device_descriptor: '/dev/input/event0' - type: 'key_up' + type: + - 'key_up' + - 'key_down' ``` Or like the following for one keyboard: From 8f3640d27d8607d07d9b353f98e1afedf127dd1e Mon Sep 17 00:00:00 2001 From: Grodesh <4070488+Grodesh@users.noreply.github.com> Date: Wed, 6 Nov 2019 16:09:41 -0500 Subject: [PATCH 25/56] Update nextbus.markdown (#10839) Once the corresponding PR is merged, the configuration for the STOP_TAG will accept strings --- source/_integrations/nextbus.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/nextbus.markdown b/source/_integrations/nextbus.markdown index c05c001fd88..346ced63780 100644 --- a/source/_integrations/nextbus.markdown +++ b/source/_integrations/nextbus.markdown @@ -43,7 +43,7 @@ route: stop: description: The stop tag from NextBus. required: true - type: integer + type: string name: description: Name to use in the frontend. required: false From 4b997e3bfb8dc8ea60168160d0289c753c0efd2b Mon Sep 17 00:00:00 2001 From: Floris Van der krieken Date: Wed, 6 Nov 2019 22:11:17 +0100 Subject: [PATCH 26/56] Add documentation for Unifi LED integration (#10720) * Fixed configuration section Fixed marked issues The option "Id" is going to be removed in the integration, making a commit for that after this. Added . to end of line * Update source/_integrations/unifiled.markdown Co-Authored-By: Klaas Schoute * Update source/_integrations/unifiled.markdown Co-Authored-By: Klaas Schoute * Update unifiled.markdown * Small fixes * :pencil2: Tweaks Co-authored-by: Franck Nijhof --- source/_integrations/unifiled.markdown | 53 ++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 source/_integrations/unifiled.markdown diff --git a/source/_integrations/unifiled.markdown b/source/_integrations/unifiled.markdown new file mode 100644 index 00000000000..3ed773231c1 --- /dev/null +++ b/source/_integrations/unifiled.markdown @@ -0,0 +1,53 @@ +--- +title: "UniFi LED" +description: "Instructions on how to configure the UniFi LED integration with UniFi LED Controller by Ubiquiti." +logo: ubiquiti.png +ha_category: + - Light +ha_release: 0.102 +ha_iot_class: Local Polling +--- + +[UniFi LED](https://unifi-led.ui.com/) by [Ubiquiti Networks, inc.](https://www.ubnt.com/) is a system off controller managed led light panels and dimmers. + +There is currently support for the following device type within Home Assistant: + +- [Light](#light) + +## Configuration + +```yaml +# Example configuration.yaml entry +light: + - platform: unifiled + host: IP_ADDRESS + username: USERNAME + password: PASSWORD +``` + +{% configuration %} +host: + description: Ip address or hostname used to connect to the Unifi LED controller. + type: string + required: true + default: None +port: + description: Port used to connect to the Unifi LED controller. + type: string + required: false + default: 20443 +username: + description: Username used to log into the Unifi LED controller. + type: string + required: true + default: None +password: + description: Password used to log into the Unifi LED controller. + type: string + required: true + default: None +{% endconfiguration %} + +## Light + +The light panels output state and brightness are synchronized with home assistant. From 00727dc53ce72d7f8c06f07e34f4650672ea2395 Mon Sep 17 00:00:00 2001 From: ssenart <37013755+ssenart@users.noreply.github.com> Date: Wed, 6 Nov 2019 22:12:41 +0100 Subject: [PATCH 27/56] =?UTF-8?q?Add=20Presence=20Netatmo=20Camera=20servi?= =?UTF-8?q?ces=20(set=5Flight=5Fauto,=20set=5Fligh=E2=80=A6=20(#10907)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/_integrations/netatmo.markdown | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/source/_integrations/netatmo.markdown b/source/_integrations/netatmo.markdown index 6d6db350efc..5e4b34ffed7 100644 --- a/source/_integrations/netatmo.markdown +++ b/source/_integrations/netatmo.markdown @@ -251,6 +251,18 @@ camera: - camera_name2 ``` +### Services (only for camera) + +The services below permit to control whether the camera should monitor and alert on motion detection. Also, it allows to control the status of the flood light (only for Presence model). + +| Service | Description | +| ------- | ----------- | +| enable_motion_detection | Enable motion detection and alert. +| disable_motion_detection | Disable motion detection and alert. +| set_light_auto | Presence model only : Set flood light on automatic mode. +| set_light_on | Presence model only : Set flood light on. +| set_light_off | Presence model only : Set flood light off. + ## Climate The `netatmo` thermostat platform is consuming the information provided by a [Netatmo Smart Thermostat](https://www.netatmo.com/product/energy/thermostat) thermostat. This integration allows you to view the current temperature and setpoint. From c5775e19d86749ea39d12561c9342a17df8a0825 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Wed, 6 Nov 2019 23:56:36 +0100 Subject: [PATCH 28/56] Add WLED integration (#11103) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add WLED integration * Remove sensor & switch paltform * Adds HA QA Scale 🏆 * :pencil2: Tweak --- source/_integrations/wled.markdown | 45 ++++++++++++++++++++++++ source/images/supported_brands/wled.png | Bin 0 -> 2408 bytes 2 files changed, 45 insertions(+) create mode 100644 source/_integrations/wled.markdown create mode 100644 source/images/supported_brands/wled.png diff --git a/source/_integrations/wled.markdown b/source/_integrations/wled.markdown new file mode 100644 index 00000000000..3b092f9b488 --- /dev/null +++ b/source/_integrations/wled.markdown @@ -0,0 +1,45 @@ +--- +title: "WLED" +description: "Instructions on how to integrate WLED with Home Assistant." +logo: wled.png +ha_category: + - Light +ha_release: 0.102 +ha_iot_class: Local Polling +ha_qa_scale: platinum +--- + +[WLED](https://github.com/Aircoookie/WLED) is a fast and feature-rich +implementation of an ESP8266/ESP32 webserver to control +NeoPixel (WS2812B, WS2811, SK6812, APA102, and similar) LED's. + +## Configuration + +This integration can be configured using the integrations in the +Home Assistant frontend. + +Menu: **Configuration** -> **Integrations**. + +In most cases, the WLED devices will be automatically discovered by +Home Assistant. Those automatically discovered WLED devices are listed +on the integrations page. + +If for some reason (e.g., due to lack of mDNS support on your network), +the WLED device isn't discovered, it can be added manually. + +Click on the `+` sign to add an integration and click on **WLED**. +After completing the configuration flow, the WLED +integration will be available. + +## Lights + +This integration adds the WLED device as a light in Home Assistant. +Home Assistant threats every segment of the LED strip as a separate light +entity. + +Only native supported features of a light in Home Assistant are supported +(which includes effects). + +## Services + +This integration currently does not offer any additional services. diff --git a/source/images/supported_brands/wled.png b/source/images/supported_brands/wled.png new file mode 100644 index 0000000000000000000000000000000000000000..6e553ca7f55593827e40cf54a6cd2facfb28d1dd GIT binary patch literal 2408 zcmeAS@N?(olHy`uVBq!ia0y~yU;;9k7&zE~)R&4Yzkn1=x}&cn1H;CC?mvmFKt5-I zM`SSr1K%MKW)#)%Y5)pKl(rIsj|=o#vnrnpA{P3Cy! z>Eakt5%>10q2K`n2Ih?l+Vx?YjO*Wix^y>q13%D^p$tAWKaXo=R>+#$WW^}3)z5J* zLr2u|1%3=JYl8#S85UjBTp`R5_*&!&XTyq8u2(D$SFBh|nMRdU95NHOx@{C;P+1$S z!^+_KTEv^t;gZ$SAchHB{6>Xo5hkPQdBC!+#%KzsTlRLiCgnO>KGVPE8p=%opxbNS a%n=uM7dV_;mj-G&F?hQAxvX Date: Thu, 7 Nov 2019 10:30:44 +0000 Subject: [PATCH 29/56] Add switches (on/off) for geniushub outlets (#11095) * Update docs for https://github.com/home-assistant/home-assistant/pull/28182 * initial improvements * Update geniushub.markdown * Update geniushub.markdown * Update geniushub.markdown --- source/_integrations/geniushub.markdown | 39 ++++++++++++++++++------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/source/_integrations/geniushub.markdown b/source/_integrations/geniushub.markdown index afea22c9b81..488351ed483 100644 --- a/source/_integrations/geniushub.markdown +++ b/source/_integrations/geniushub.markdown @@ -7,24 +7,32 @@ ha_category: - Water Heater - Sensor - Binary Sensor + - Switch ha_release: 0.92 ha_iot_class: Local Polling --- The `geniushub` integration links Home Assistant with your Genius Hub CH/DHW system, including its zones, devices, and issues. -It uses the [geniushub](https://pypi.org/project/geniushub-client/) client library, which provides data compatible with the v1 API that _may not_ necessarily match that of the official Web App. +It uses the [geniushub](https://pypi.org/project/geniushub-client/) client library, which provides data compatible with the v1 API that _may not_ exactly match that of the official Web App. ### Zones Each zone controlled by your Genius Hub will be exposed as either a: -- `Climate` entity, for **Radiator** and **Wet Underfloor** Zones, and -- `Water Heater` entity, for **Hot Water Temperature** Zones +- `Climate` entity, for **Radiator** and **Wet Underfloor** zones, and +- `Water Heater` entity, for **Hot Water Temperature** zones and +- `Switch` entity, for **On/Off** zones -Other zone types, such as **On/Off** zones, are not currently supported (although see `Binary Sensor`s, below). +**Group** zones are not supported. -Each entity derived from a GH zone will report back its mode, setpoint and current temperature; other properties are available via its attributes (see below). The zone's mode can be changed as below. +Currently, there is no support for altering zone schedules, although entities can be switched to/from geniushub modes that utilize schedules. + +There are limitations due to the differences between the Genius Hub and Home Assisatnt schemas (e.g. HA has no **Footprint** mode) - see below for more details. + +### Climate and Water Heater Entities + +Climate and Water Heater entities will report their current temperature, setpoint and mode; other properties (e.g. occupied state) are available via their state attributes (see examples below). The Genius Hub mode will be reported as/set to: GH mode | HA Operation | HA Preset :---: | :---: | :---: @@ -33,18 +41,27 @@ GH mode | HA Operation | HA Preset **Override** | Heat | Boost **Footprint** | Heat | Activity +Note that `Boost` mode may + Note that **Footprint** mode is only available to **Radiator** zones that have room sensors. -Currently, there is no support for reading/altering zone schedules, although a zone can be switched to/from modes that utilize schedules. +### Switch Entities + +Switch entities will report back their state; other properties are available via their state attributes. Currently, HA switches do not have modes/presets, so the Home Assistant state will be reported as: + +- `On` for **Override** \ **On**, and +- `Off` otherwise (NB: the zone could still be 'on', e.g. with **Timer** mode) + +If you turn a Switch entity `Off` via HA, it will revert to **Timer** mode. ### Devices -Each Device controlled by your Genius hub will be exposed as either a: +Each Device controlled by your Genius Hub will be exposed as either a: - `Sensor` entity with a % battery, for any Device with a battery (e.g., a Genius Valve), or - `Binary Sensor` entity with on/off state for any Device that is a switch (e.g., Smart Plugs, DCRs) -Each such entity will report back its primary state and `assigned_zone`. If the Hub is directly polled using Option 1 (see below), then some additional attributes such as `last_comms` (last communications time) are also available. +Such entities will report back their primary state and `assigned_zone`. If the Hub is directly polled using Option 1 (see below), then some additional state attributes such as `last_comms` (last communications time) are also available. ### Issues @@ -89,7 +106,7 @@ This alert may be useful to see if the CH is being turned on whilst you're on a ## State Attributes -Many zone/device properties are available via each entity's state attributes. For example, in the case of **Radiator**-derived `Climate` entities (note 'status'): +Many zone/device properties are available via the corresponding entity's state attributes. For example, in the case of **Radiator**-derived `Climate` entities (note 'status'): ```json { @@ -148,9 +165,9 @@ This is the recommended option. - Requires your **username** & **password**, as used with [geniushub.co.uk/app](https://www.geniushub.co.uk/app). - Uses the v3 API - unofficial, but there are additional features (e.g., battery levels). - Polls the hub directly (so is faster, say ~1s response time). -- You have the option of specifying a MAC address. +- You have the option of specifying a MAC address (not recommended, see above). -The hub does not have to be in the same subnet as HA. +The hub does not have to be in the same subnet as your Home Assistant server. ### Option 2: hub token only From f174ad7c1dfb4065c727fd020cbc38459945ac66 Mon Sep 17 00:00:00 2001 From: Santobert Date: Thu, 7 Nov 2019 11:31:51 +0100 Subject: [PATCH 30/56] Improve scene.create service (#11099) * Improve scene.create service * Update scene.markdown --- source/_integrations/scene.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_integrations/scene.markdown b/source/_integrations/scene.markdown index 0e52c743523..feeb97158ae 100644 --- a/source/_integrations/scene.markdown +++ b/source/_integrations/scene.markdown @@ -95,6 +95,8 @@ Create a new scene without having to configure it by calling the `scene.create` You need to pass a `scene_id` in lowercase and with underscores instead of spaces. You also need to specify the entities in the same format as when configuring the scene. +If the scene was previously created by `scene.create`, it will be overwritten. If the scene was created by YAML, nothing happens but a warning in your log files. + ```yaml # Example automation automation: From 74335a57a81a46632eef1b6562cd173beca3908a Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk <11290930+bouwew@users.noreply.github.com> Date: Thu, 7 Nov 2019 11:32:55 +0100 Subject: [PATCH 31/56] Plugwise docs updated to match pull-request #28237 (#11004) * Updated to match pull-request #28237 * Updated according to review comments --- source/_integrations/plugwise.markdown | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/_integrations/plugwise.markdown b/source/_integrations/plugwise.markdown index 8f16749cfa7..6bbfcdf1149 100644 --- a/source/_integrations/plugwise.markdown +++ b/source/_integrations/plugwise.markdown @@ -26,6 +26,7 @@ climate: password: YOUR_SHORT_IP host: YOUR_SMILE_LOCAL_IP ``` +**Please note**: for a legacy Anna (firmware 1.8.x) an additional line is required, see below, this line is not needed for a more recent Anna (firmware 3.1.x). {% configuration %} password: @@ -51,6 +52,11 @@ port: required: false type: integer default: 80 +legacy_anna: + description: Indicate that the Anna is a legacy unit + required: false + type: boolean + default: false min_temp: description: If you want to adjust the lower boundary, the integration will not allow temperatures below the set value. required: false @@ -72,6 +78,7 @@ climate: password: YOUR_SHORT_ID host: YOUR_SMILE_LOCAL_IP port: YOUR_SMILE_PORT_NUMBER + legacy_anna: true min_temp: YOUR_MINIMAL_TARGET_TEMPERATURE max_temp: YOUR_MAXIMAL_TARGET_TEMPERATURE ``` From 214c813eb6aa22ba20d09f56147ca1f7c636678a Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Fri, 8 Nov 2019 11:58:44 +0100 Subject: [PATCH 32/56] Add switch platform to WLED integration (#11120) --- source/_integrations/wled.markdown | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/source/_integrations/wled.markdown b/source/_integrations/wled.markdown index 3b092f9b488..ffe203e35e4 100644 --- a/source/_integrations/wled.markdown +++ b/source/_integrations/wled.markdown @@ -4,6 +4,7 @@ description: "Instructions on how to integrate WLED with Home Assistant." logo: wled.png ha_category: - Light + - Switch ha_release: 0.102 ha_iot_class: Local Polling ha_qa_scale: platinum @@ -40,6 +41,14 @@ entity. Only native supported features of a light in Home Assistant are supported (which includes effects). +## Switches + +The integration will create a number of switches: + +- Nightlight. +- Sync Receive. +- Sync Send. + ## Services This integration currently does not offer any additional services. From acee460bf3248c63a05d1afbba9e93488221cb02 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sat, 9 Nov 2019 20:55:28 +0100 Subject: [PATCH 33/56] Add sensor platform to WLED integration (#11128) --- source/_integrations/wled.markdown | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/source/_integrations/wled.markdown b/source/_integrations/wled.markdown index ffe203e35e4..58d01125884 100644 --- a/source/_integrations/wled.markdown +++ b/source/_integrations/wled.markdown @@ -4,6 +4,7 @@ description: "Instructions on how to integrate WLED with Home Assistant." logo: wled.png ha_category: - Light + - Sensor - Switch ha_release: 0.102 ha_iot_class: Local Polling @@ -41,6 +42,14 @@ entity. Only native supported features of a light in Home Assistant are supported (which includes effects). +## Sensors + +This integration provides sensors for the following information from WLED: + +- Estimated current. +- Uptime. +- Free memory. + ## Switches The integration will create a number of switches: From 31d274a6e83ca96bdb05213bce28be8c29a90ddc Mon Sep 17 00:00:00 2001 From: Bertie Blackman Date: Sun, 10 Nov 2019 22:05:35 +0000 Subject: [PATCH 34/56] Update samsungtv.markdown (#11145) --- source/_integrations/samsungtv.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/samsungtv.markdown b/source/_integrations/samsungtv.markdown index 885e9e98d7f..1baf862dbe5 100644 --- a/source/_integrations/samsungtv.markdown +++ b/source/_integrations/samsungtv.markdown @@ -107,6 +107,7 @@ Currently tested but not working models: - JS8005 - State tracking working but unable to control (but port 8001 *is* open) - JS9000 - State is always "on" and unable to control (but port 8001 *is* open) - JS9500 - State is always "on" and unable to control (but port 8001 *is* open) +- JU6445K - State is always "on" and unable to control (but port 8001 *is* open) - JU6800 - Unable to see state and unable to control - JU7000 - Unable to see state and unable to control (but port 8001 *is* open) - JU7500 - Unable to see state and unable to control From c97381591932a2492200e705da9062d334aa5ee3 Mon Sep 17 00:00:00 2001 From: fredericvl <34839323+fredericvl@users.noreply.github.com> Date: Mon, 11 Nov 2019 05:02:36 +0100 Subject: [PATCH 35/56] =?UTF-8?q?Add=20optional=20name=20for=20clarity=20w?= =?UTF-8?q?hen=20using=20multiple=20SAJ=20solar=20in=E2=80=A6=20(#11121)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Added support for multiple SAJ solar inverters * Add text language flag to markdown * Remove unnecessary docs + update name description --- source/_integrations/saj.markdown | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/source/_integrations/saj.markdown b/source/_integrations/saj.markdown index c33aaae515d..98dc00e205e 100644 --- a/source/_integrations/saj.markdown +++ b/source/_integrations/saj.markdown @@ -31,6 +31,10 @@ host: description: "The IP address of the SAJ Solar Inverter." required: true type: string +name: + description: "An optional name for your SAJ Solar Inverter." + required: false + type: string type: description: "Type of connection module: 'ethernet' or 'wifi'" required: false @@ -57,7 +61,7 @@ Sensors available in the library: | today_time | h | Inverter's running time for today. | | today_max_current | W | Maximum current power for today. (only for connection via ethernet module) | | total_yield | kWh | Total kWh generated to date. | -| total_time | h | Total running time of the inverter . | +| total_time | h | Total running time of the inverter. | | total_co2_reduced | kg | Total CO2 in kg reduced. | | temperature | °C | Temperature of the inverter. | | state | N/A | Live state of the inverter. | @@ -67,6 +71,7 @@ Sensors available in the library: ```yaml sensor: - platform: saj + name: MY_INVERTER_NAME host: IP_ADDRESS_OF_DEVICE type: wifi username: USERNAME From 5326e18653a49a4e989087797ecc4b1445c0922e Mon Sep 17 00:00:00 2001 From: Shulyaka Date: Mon, 11 Nov 2019 07:27:27 +0300 Subject: [PATCH 36/56] new component: pcal9535a (#10336) * copy from mcp23017 Signed-off-by: Denis Shulyaka * HA version update * Apply suggestions from code review Co-Authored-By: Franck Nijhof * Apply suggestions from code review * HA release update * :pencil2: Tweaks Co-authored-by: Franck Nijhof --- source/_components/pcal9535a.markdown | 123 ++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 source/_components/pcal9535a.markdown diff --git a/source/_components/pcal9535a.markdown b/source/_components/pcal9535a.markdown new file mode 100644 index 00000000000..bbb206345a5 --- /dev/null +++ b/source/_components/pcal9535a.markdown @@ -0,0 +1,123 @@ +--- +title: "PCAL9535A I2C GPIO expander" +description: "Instructions on how to integrate the PCAL9535A GPIO pin expander with I2C interface into Home Assistant." +logo: raspberry-pi.png +ha_category: + - DIY + - Binary Sensor + - Switch +ha_release: 0.102 +ha_iot_class: Local Polling +--- + +The `pcal9535a` integration is the base for all related pcal9535a platforms in Home Assistant. There is no setup needed for the integration itself, for the platforms, please check their corresponding sections. + +One of the use cases is [Seeed studio Raspberry Pi Relay Board](http://wiki.seeedstudio.com/Raspberry_Pi_Relay_Board_v1.0/). + +For more details about the PCAL9535A I2C I/O port expander, you can find its datasheet here: [PCAL9535A](https://www.nxp.com/docs/en/data-sheet/PCAL9535A.pdf). + +## Binary Sensor + +The `pcal9535a` binary sensor platform allows you to read sensor values from the I/O pins of your [PCAL9535A I2C I/O expander](https://www.nxp.com/products/interfaces/ic-spi-serial-interface-devices/ic-general-purpose-i-o/low-voltage-16-bit-ic-bus-i-o-port-with-interrupt-and-agile-i-o:PCAL9535A). + +The pin numbers are from 0 to 15, where: 0-7 correspond to port P0 (P0_0 - P0_7) and 8-15 to port P1 (P1_0 - P1_7). + +### Configuration + +To use the I/O pins of an PCAL9535A connected to an I2C bus of your Raspberry Pi as binary sensors, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +binary_sensor: + - platform: pcal9535a + pins: + 0: PIR Office + 1: PIR Bedroom +``` + +{% configuration %} +i2c_bus: + description: i2c bus number of PCAL9535A chip. + required: false + type: integer + default: 1 +i2c_address: + description: i2c address of PCAL9535A chip. + required: false + type: integer + default: "`0x20`" +pins: + description: List of used pins. + required: true + type: map + keys: + "pin: name": + description: The pin numbers (from 0 to 15) and corresponding names. + required: true + type: [integer, string] +invert_logic: + description: If `true`, inverts the output logic to ACTIVE LOW. + required: false + type: boolean + default: "`false` (ACTIVE HIGH)" +pull_mode: + description: > + Type of internal pull resistor to use. + Options are `UP` - pull-up resistor, `DOWN` - pull-down resistor, `DISABLED` - resistors disconnected. + required: false + type: string + default: "`DISABLED`" +{% endconfiguration %} + +## Switch + +The `pcal9535a` switch platform allows you to write to the I/O pins of your [PCAL9535A I2C I/O expander](https://www.nxp.com/products/interfaces/ic-spi-serial-interface-devices/ic-general-purpose-i-o/low-voltage-16-bit-ic-bus-i-o-port-with-interrupt-and-agile-i-o:PCAL9535A). + +The pin numbers are from 0 to 15, where: 0-7 correspond to port P0 (P0_0 - P0_7) and 8-15 to port P1 (P1_0 - P1_7). + +### Configuration + +To use the I/O pins of a PCAL9535A connected to an I2C bus of your Raspberry Pi as switches, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +switch: + - platform: pcal9535a + pins: + 11: Fan Office + 12: Light Desk +``` + +{% configuration %} +i2c_bus: + description: i2c bus number of PCAL9535A chip. + required: false + type: integer + default: 1 +i2c_address: + description: i2c address of PCAL9535A chip. + required: false + type: integer + default: "`0x20`" +pins: + description: Array of used pins. + required: true + type: list + keys: + pin: + description: The pin numbers (from 0 to 15) and corresponding names. + required: true + type: [integer, string] +invert_logic: + description: If true, inverts the output logic to ACTIVE LOW. + required: false + default: false + type: boolean +strength: + description: > + Control the output drive level of the GPIO. Each GPIO can be configured independently to one of the four possible output current levels. By programming these bits, the user is changing the number of transistor pairs or ‘fingers’ that drive the I/O pad. + Options are `0.25`, `0.5`, `0.75`, `1.0`. + required: false + default: "`1.0`" + type: string +{% endconfiguration %} From 506d9ea5014432db124374183a38e34f1d15183f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Per=20Sandstr=C3=B6m?= Date: Mon, 11 Nov 2019 06:36:43 +0100 Subject: [PATCH 37/56] Add service documentation for verisure (#10703) --- source/_integrations/verisure.markdown | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/_integrations/verisure.markdown b/source/_integrations/verisure.markdown index 4e2e9eb9d29..88c7b4d2e13 100644 --- a/source/_integrations/verisure.markdown +++ b/source/_integrations/verisure.markdown @@ -117,3 +117,11 @@ automation: to {{ trigger.to_state.state }} by {{ trigger.to_state.attributes.changed_by }}{% endraw %} ``` + +## Services + +| Service | Description | +| ------- | ----------- | +| disable_autolock | Disables autolock function for a specific lock. | +| enable_autolock | Enables autolock function for a specific lock. | +| smartcam_capture | Capture a new image from a specific smartcam. | From 28ada04e44453b14bc551ef0a29512bac36822b1 Mon Sep 17 00:00:00 2001 From: Shulyaka Date: Mon, 11 Nov 2019 21:24:53 +0300 Subject: [PATCH 38/56] pcal9535a: move to integrations (#11154) --- source/{_components => _integrations}/pcal9535a.markdown | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename source/{_components => _integrations}/pcal9535a.markdown (100%) diff --git a/source/_components/pcal9535a.markdown b/source/_integrations/pcal9535a.markdown similarity index 100% rename from source/_components/pcal9535a.markdown rename to source/_integrations/pcal9535a.markdown From 2f40dddf949e4dd91bc3bb43408569a9c820a7d4 Mon Sep 17 00:00:00 2001 From: Heine Furubotten Date: Tue, 12 Nov 2019 13:46:34 +0100 Subject: [PATCH 39/56] Add azure servicebus documentation (#10756) * Add azure servicebus documentation * attemt to fixed links in note blocks * rename integration * bit too much auto formating * :pencil2: Tweaks * :tweak: Remove optional name, keeping example minimal --- .../_integrations/azure_service_bus.markdown | 107 ++++++++++++++++++ .../supported_brands/azure_service_bus.svg | 14 +++ 2 files changed, 121 insertions(+) create mode 100644 source/_integrations/azure_service_bus.markdown create mode 100644 source/images/supported_brands/azure_service_bus.svg diff --git a/source/_integrations/azure_service_bus.markdown b/source/_integrations/azure_service_bus.markdown new file mode 100644 index 00000000000..55e8467bdd5 --- /dev/null +++ b/source/_integrations/azure_service_bus.markdown @@ -0,0 +1,107 @@ +--- +title: "Azure Service Bus" +description: "Setup for Azure Service Bus integration" +logo: azure_service_bus.svg +ha_category: + - Notification +ha_release: 0.102 +--- + +The `Azure Service Bus` integration allows you to send messages to [Azure Service Bus](https://azure.microsoft.com/en-us/services/service-bus/) from within Home Assistant. + +## First-time setup + +This assumes you already have an Azure account. Otherwise, create a free account [here](https://azure.microsoft.com/en-us/free/). + +You need to create a Service Bus namespace; you can follow [this guide](https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-create-namespace-portal). + +You must then create a Shared Access Policy for the Service Bus with `Send` claims or use the RootManageAccessKey from your namespace (this key has additional claims, including managing the event hub and listening, which are not needed for this purpose), for more details on the security of Service Bus [go here](https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-authentication-and-authorization#shared-access-signature). Alternatively you can create a dedicated key for only one queue or topic, to restrict access to only that queue or topic. + +Once you have the connection string with `Send` policy, you can set up the integration itself. + +
+ +The queue or topic that you are sending to needs to exists with the service bus namespace before you use it within Home Assistant. See [here](https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-quickstart-portal) for how to set up a queue and [here](https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-quickstart-topics-subscriptions-portal) for setting up a topic and subscriptions. + +
+ +## Configuration + +Add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +notify: + - platform: azure_service_bus + connection_string: !secret servicebus_connection_string + topic: t-test + - platform: azure_service_bus + connection_string: !secret servicebus_connection_string + queue: q-test +``` + +{% configuration %} +name: + description: Setting the optional parameter `name` allows multiple notifiers to be created. The notifier will bind to the service `notify.NOTIFIER_NAME`. + required: false + type: string + default: notify +connection_string: + description: Connection string found in the Azure portal, with `send` claim in the key. + required: true + type: string +queue: + description: Which queue to send notifications on. + required: exclusive + type: string +topic: + description: Which topic to send notifications on. + required: exclusive + type: string +{% endconfiguration %} + +
+ +If you plan to send all state changes from one or more entities within Home Assistant, you should consider using the [Azure Event Hub](/integrations/azure_event_hub/) integration instead. + +
+ +## Usage + +The notification service will translate the data given to a JSON object on the service bus. The `message` field will always be set, but the fields `target` and `title` are optional and are only included in the service bus message if set. Any input given in the `data` section, will be flattened to the root of the JSON object and follow the structure given. All input given in the data section will be included in the message. + +See the example below for how an automation trigger translates to a message on the service bus. + +```yaml +automation: + - alias: Sunset Service Bus message + trigger: + platform: sun + event: sunset + action: + service: notify.test_queue + data: + message: "Sun is going down" + title: "Good evening" + data: + sun_direction: "Down" + custom_field: 123 + custom_object: + trigger_more: true + explain: "Its starting to get dark" +``` + +The message that can be retrieved from a queue or topic subscription: + +```json +{ + "message": "Sun is going down", + "title": "Good evening", + "sun_direction": "Down", + "custom_field": 123, + "custom_object": { + "trigger_more": true, + "explain": "Its starting to get dark" + } +} +``` diff --git a/source/images/supported_brands/azure_service_bus.svg b/source/images/supported_brands/azure_service_bus.svg new file mode 100644 index 00000000000..4b39746e62e --- /dev/null +++ b/source/images/supported_brands/azure_service_bus.svg @@ -0,0 +1,14 @@ + + + + + + + + From 8673d86f48e26a58a777cdb965b56345e2fdc44a Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 14 Nov 2019 14:52:27 +0100 Subject: [PATCH 40/56] 102 release draft --- _config.yml | 6 +- source/_posts/2019-11-20-release-102.markdown | 722 ++++++++++++++++++ 2 files changed, 725 insertions(+), 3 deletions(-) create mode 100644 source/_posts/2019-11-20-release-102.markdown diff --git a/_config.yml b/_config.yml index b61deb20e17..d1af9113949 100644 --- a/_config.yml +++ b/_config.yml @@ -100,9 +100,9 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 101 -current_patch_version: 3 -date_released: 2019-11-05 +current_minor_version: 102 +current_patch_version: 0 +date_released: 2019-11-20 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. diff --git a/source/_posts/2019-11-20-release-102.markdown b/source/_posts/2019-11-20-release-102.markdown new file mode 100644 index 00000000000..4d906f2c772 --- /dev/null +++ b/source/_posts/2019-11-20-release-102.markdown @@ -0,0 +1,722 @@ +--- +layout: post +title: "0.102: TBD - UPDATE DATE" +description: "TBD" +date: 2019-11-14 0:41:02 +date_formatted: "November 20, 2019" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +og_image: /images/blog/2019-10-0.102/components.png +--- + +Almond. Account linking. Mobile apps. WLED - platinum. + +## New Integrations + +- Add Unifi Led ([@florisvdk] - [#27475]) ([unifiled docs]) (new-integration) +- Add available state to unifiled integration ([@florisvdk] - [#28189]) ([unifiled docs]) (new-integration) +- Almond integration ([@balloob] - [#28282]) ([almond docs]) (new-integration) +- Speech to Text component ([@pvizeli] - [#28434]) ([demo docs]) ([stt docs]) (new-integration) +- Add WLED integration ([@frenck] - [#28542]) ([wled docs]) (new-integration) +- Add azure servicebus notify service ([@hfurubotten] - [#27566]) ([azure_servicebus docs]) (new-integration) +- Add pcal9535a integration ([@Shulyaka] - [#26563]) ([pcal9535a docs]) (new-integration) + +## New Platforms + +- Add Huawei LTE mobile data switch support ([@scop] - [#28188]) ([huawei_lte docs]) (new-platform) +- Add support for Xiaomi Air Quality Monitor (cgllc.airmonitor.b1) ([@fwestenberg] - [#27735]) ([xiaomi_miio docs]) (new-platform) +- Add switches (on/off zones) to geniushub ([@castaway] - [#28182]) ([geniushub docs]) (new-platform) +- Add config endpoint for scene ([@bramkragten] - [#28429]) ([config docs]) ([homeassistant docs]) (new-platform) +- Add override switch for juicenet ([@jesserockz] - [#28049]) ([juicenet docs]) (new-platform) +- Add additional support over NC ([@pvizeli] - [#28527]) ([cloud docs]) ([stt docs]) (new-platform) +- Add switch platform to WLED integration ([@frenck] - [#28606]) ([wled docs]) (new-platform) +- Add sensor platform to WLED integration ([@frenck] - [#28632]) ([wled docs]) (new-platform) + +## 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). + +## 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. + + + +## Breaking Changes + +- Modernize Huawei LTE ([@scop] - [#26675]) ([huawei_lte docs]) (breaking change) +- Removes unwanted tradfri battery sensor ([@ludeeus] - [#28181]) ([tradfri docs]) (breaking change) +- Show all UPNP/IGD sensors in one device ([@escoand] - [#27517]) ([upnp docs]) (breaking change) +- Change ps4 state off to state standby ([@ktnrg45] - [#28261]) ([ps4 docs]) (breaking change) +- SSDP matching improvements ([@scop] - [#28285]) ([ssdp docs]) (breaking change) +- Align attribute naming between light and switch for HomematicIP Cloud ([@SukramJ] - [#28271]) ([homematicip_cloud docs]) (breaking change) +- Update Plugwise ([@bouwew] - [#28237]) ([plugwise docs]) (breaking change) +- Use friendly app names for Fire TV sources ([@JeffLIrion] - [#28417]) ([androidtv docs]) (breaking change) +- Update Homekit climate.py to remap current mode ([@GaryOkie] - [#28625]) ([homekit_controller docs]) (breaking change) +- Correct openalpr_local config option name ([@HexF] - [#28746]) ([openalpr_local docs]) (breaking change) + +## Beta Fixes + +- Bump ZHA quirks to 0.0.28 ([@dmulcahey] - [#28750]) ([zha docs]) (beta fix) +- Updated frontend to 20191114.0 ([@bramkragten] - [#28768]) ([frontend docs]) (beta fix) +- Fix account link version check ([@balloob] - [#28770]) ([cloud docs]) (beta fix) + +## All changes + +- Cover all possible values for venstar operation_mode ([@iamtpage] - [#27949]) ([venstar docs]) +- Add onvif local datetime support ([@djpremier] - [#26656]) ([onvif docs]) +- Fix Venstar formatting to restore clean CI ([@kennedyshead] - [#28171]) ([venstar docs]) +- Add Unifi Led ([@florisvdk] - [#27475]) ([unifiled docs]) (new-integration) +- Modernize Huawei LTE ([@scop] - [#26675]) ([huawei_lte docs]) (breaking change) +- Use latest withings_api module ([@vangorra] - [#27817]) ([withings docs]) +- Tradfri config flow enhancements ([@ludeeus] - [#28179]) ([tradfri docs]) +- Add stop feature to tradfri covers ([@ludeeus] - [#28180]) ([tradfri docs]) +- Fix tzinfo type for onvif component ([@djpremier] - [#28178]) ([onvif docs]) +- Adding device_class to samsungtv ([@kennedyshead] - [#28168]) ([samsungtv docs]) +- Bump python-slugify to 4.0.0 ([@BKPepe] - [#28186]) +- Removes unwanted tradfri battery sensor ([@ludeeus] - [#28181]) ([tradfri docs]) (breaking change) +- Huawei LTE sensor metadata update ([@scop] - [#28187]) ([huawei_lte docs]) +- Add Samsung TV automatic protocol detection ([@escoand] - [#27492]) ([samsungtv docs]) +- [homematic]Pass channel to light color functions ([@guillempages] - [#27306]) ([homematic docs]) +- [homematic]Add support for HmIP-BSL LEDs ([@guillempages] - [#27307]) ([homematic docs]) +- move hass-frontend import back down ([@gngj] - [#28203]) ([frontend docs]) +- Address post-merge coolmaster config flow code review ([@OnFreund] - [#28163]) ([coolmaster docs]) +- Add presentation URL to SSDP discovery info ([@scop] - [#28196]) ([ssdp docs]) +- Change Alexa default display category based on media_player device_class ([@ochlocracy] - [#28191]) ([alexa docs]) +- Add device condition support for media_player ([@shmooey] - [#28161]) ([media_player docs]) +- Add device condition support for device_tracker ([@shmooey] - [#28190]) ([device_tracker docs]) +- Increased python-eq3bt version to latest (0.1.11) ([@Poeschl] - [#28175]) ([eq3btsmart docs]) +- Add support for supportedOperations to Alexa.PlaybackController ([@ochlocracy] - [#28212]) ([alexa docs]) +- Improved Alexa ThermostatController thermostatMode handling ([@ochlocracy] - [#28176]) ([alexa docs]) +- Add additional device conditions to cover ([@emontnemery] - [#27830]) ([cover docs]) +- Implement Alexa.PlaybackStateReporter Interface for alexa ([@ochlocracy] - [#28215]) ([alexa docs]) +- Add cloud account linking support ([@balloob] - [#28210]) ([cloud docs]) ([somfy docs]) +- Add Huawei LTE mobile data switch support ([@scop] - [#28188]) ([huawei_lte docs]) (new-platform) +- Upgrade speedtest-cli to 2.1.2 ([@fabaff] - [#28216]) +- Add available state to unifiled integration ([@florisvdk] - [#28189]) ([unifiled docs]) (new-integration) +- Update praw to 6.4.0 ([@fabaff] - [#27324]) ([reddit docs]) +- Suppress traceback (fixes #28243) ([@fabaff] - [#28262]) ([iss docs]) +- Add charset to imap component. ([@ZiroNL] - [#28258]) ([imap docs]) +- Reorg and test attributes for HomematicIP Cloud ([@SukramJ] - [#28234]) ([homematicip_cloud docs]) +- Add support for Xiaomi Air Quality Monitor (cgllc.airmonitor.b1) ([@fwestenberg] - [#27735]) ([xiaomi_miio docs]) (new-platform) +- Add transmission info about torrents that is accessible with templating ([@JPHutchins] - [#27111]) ([transmission docs]) +- More header cleanup for websocket proxy ([@pvizeli] - [#28288]) ([hassio docs]) +- Bump avea to 1.4 ([@pattyland] - [#28287]) ([avea docs]) +- Remove GTT component ([@eliseomartelli] - [#28286]) ([gtt docs]) +- Hue: Create new config flow when auth is lost ([@bramkragten] - [#28204]) ([hue docs]) +- Revert "More header cleanup for websocket proxy (#28288)" ([@pvizeli] - [#28293]) ([hassio docs]) +- Add support for Somfy Garage door Rollixo IO DiscreteGarageOpenerIOComponent in Tahoma component ([@yjajkiew] - [#28291]) ([tahoma docs]) +- Type hint improvements ([@scop] - [#28260]) +- Add more iaqualink entity properties, fix timeout issues ([@flz] - [#28236]) ([iaqualink docs]) +- Add keyboard_remote trigger on multiple event types and emulate key hold events ([@bendavid] - [#27761]) ([keyboard_remote docs]) +- Remove blocking I/O from the event loop ([@syssi] - [#28305]) ([xiaomi_miio docs]) +- Use dict[key] for required config keys ([@syssi] - [#28304]) ([xiaomi_miio docs]) +- Bump black to 19.10b0 ([@frenck] - [#28310]) ([androidtv docs]) ([envirophat docs]) ([hangouts docs]) ([here_travel_time docs]) +- Add source constants for all config entry discovery sources ([@frenck] - [#28311]) +- Almond integration ([@balloob] - [#28282]) ([almond docs]) (new-integration) +- Bump pre-commit to 1.20.0 ([@frenck] - [#28313]) +- Bump youtube_dl to 2019.10.29 ([@frenck] - [#28312]) ([media_extractor docs]) +- Add description for arlo.update service ([@PixelJonas] - [#28270]) +- Bump pytest to 5.2.2 ([@cgtobi] - [#28230]) +- Add services description for sabnzbd component ([@karouf] - [#28252]) +- Clean up Xiaomi Air Quality Monitor support (cgllc.airmonitor.b1) ([@syssi] - [#28301]) ([xiaomi_miio docs]) +- allow multiple heaters per incomfort gateway ([@zxdavb] - [#28324]) ([incomfort docs]) +- Add OAuth2 config flow scaffold ([@balloob] - [#28220]) +- Add services.yaml to local_file component. ([@ZiroNL] - [#28330]) +- Add device triggers to cover ([@emontnemery] - [#28063]) ([automation docs]) ([cover docs]) +- Flux log with debug instead of info ([@Santobert] - [#28352]) ([flux docs]) +- Add modelnumber for ecobee4 ([@marthoc] - [#28278]) ([ecobee docs]) +- Fill services.yaml for duckdns ([@gngj] - [#28248]) +- Implement Alexa.SeekController Interface for media_player in Alexa ([@ochlocracy] - [#28299]) ([alexa docs]) +- Don't set entity_id in ZHA entities ([@Adminiuga] - [#28362]) ([zha docs]) +- Update withings-api to avoid data parsing bugs. ([@vangorra] - [#28382]) ([withings docs]) +- Add services.yaml to onvif component ([@ZiroNL] - [#28349]) +- Fix ([@Anonym-tsk] - [#28369]) ([telegram_bot docs]) +- Fill services.yaml for squeezebox ([@gngj] - [#28247]) +- Add file list to attributes of folder sensor ([@thoscut] - [#28338]) ([folder docs]) +- Show all UPNP/IGD sensors in one device ([@escoand] - [#27517]) ([upnp docs]) (breaking change) +- fix feedreader handling unrecognized published date ([@exxamalte] - [#28225]) ([feedreader docs]) +- Introduce SUPPORT_COLOR_TEMP for flux_led component ([@yeralin] - [#26692]) ([flux_led docs]) +- Upgrade thingspeak to 1.0.0 ([@fabaff] - [#28424]) ([thingspeak docs]) +- Upgrade attrs to 19.3.0 ([@fabaff] - [#28421]) +- Add a Services YAML for the Dominos integration (#27289) ([@Schoonology] - [#28339]) +- Upgrade pysnmp to 4.4.12 ([@fabaff] - [#28428]) ([snmp docs]) +- Bump pyEight library to 0.1.2 to update API URL ([@mezz64] - [#28413]) ([eight_sleep docs]) +- Use defined device class constants for Homematic ([@SukramJ] - [#28438]) ([homematic docs]) +- Add improved scene support to the alarm_control_panel integration ([@Santobert] - [#28269]) ([alarm_control_panel docs]) +- Add improved scene support to the water_heater integration ([@Santobert] - [#28277]) ([demo docs]) ([water_heater docs]) +- deCONZ - Add Xiaomi Aqara Cube device trigger support ([@Kane610] - [#27548]) ([deconz docs]) +- deCONZ - Support creating battery sensor when reported ([@Kane610] - [#27538]) ([deconz docs]) +- deCONZ - Improve discovery logging ([@Kane610] - [#28452]) ([deconz docs]) +- Add scene.create service ([@Santobert] - [#28300]) ([homeassistant docs]) +- Update MQTT sensor test ([@fabaff] - [#28449]) +- Change ps4 state off to state standby ([@ktnrg45] - [#28261]) ([ps4 docs]) (breaking change) +- Fix inability to transition between specific presets in Venstar component ([@nkaminski] - [#28238]) ([venstar docs]) +- pre-commit: ship default and full configs ([@scop] - [#28463]) +- SSDP matching improvements ([@scop] - [#28285]) ([ssdp docs]) (breaking change) +- Bump env_canada to 0.0.30 ([@michaeldavie] - [#28487]) ([environment_canada docs]) +- Fixing #27722 Watson TTS platform (sdk upgrade) ([@rutkai] - [#28468]) ([watson_tts docs]) +- Use integration name in docstring ([@fabaff] - [#28445]) +- Handle Huawei LTE timeouts ([@scop] - [#28465]) ([huawei_lte docs]) +- Fix flaky Samsung TV tests ([@escoand] - [#28503]) +- Always provide brightness value ([@elupus] - [#28228]) ([google_assistant docs]) +- Fix flaky YesssSMS tests on debug messages ([@escoand] - [#28506]) +- Import CancelledError from asyncio, not .futures ([@scop] - [#28511]) ([bluesound docs]) +- Don't use deprecated encoding to json.loads ([@scop] - [#28509]) +- Update Vivotek component stream source ([@HarlemSquirrel] - [#27941]) ([vivotek docs]) +- Don't fail tox pylint if PYLINT_ARGS is not set ([@scop] - [#28403]) +- Upgrade pillow to 6.2.1 ([@fabaff] - [#28442]) ([image_processing docs]) ([proxy docs]) ([qrcode docs]) +- Add dump config service to HomematicIP Cloud ([@SukramJ] - [#28231]) ([homematicip_cloud docs]) +- Upgrade TwitterAPI to 2.5.10 ([@fabaff] - [#28401]) ([twitter docs]) +- Replace Netatmo CO2 sensor icon ([@tlrobinson] - [#28520]) ([netatmo docs]) +- Imports twitch ([@fabaff] - [#28517]) ([twitch docs]) +- Upgrade paho-mqtt to 1.5.0 ([@fabaff] - [#28423]) ([mqtt docs]) ([shiftr docs]) +- Upgrade jinja2 to >=2.10.3 ([@fabaff] - [#28422]) +- iaqualink: better handling of failures ([@flz] - [#28514]) ([iaqualink docs]) +- Add services description for ness alarm ([@tefinger] - [#28250]) +- Add information to IFTTT services.yaml ([@PixelJonas] - [#28385]) +- Expose set auto mode for all Dyson fans ([@soraxas] - [#28488]) ([dyson docs]) +- Add compatibility for other STBY Codes ([@soundstorm] - [#28478]) ([pioneer docs]) +- Remove legacy reproduce state ([@balloob] - [#28458]) +- Align attribute naming between light and switch for HomematicIP Cloud ([@SukramJ] - [#28271]) ([homematicip_cloud docs]) (breaking change) +- Enable transition time for HmIP-BSL - HomematicIP Cloud ([@SukramJ] - [#28201]) ([homematicip_cloud docs]) +- Speech to Text component ([@pvizeli] - [#28434]) ([demo docs]) ([stt docs]) (new-integration) +- Add switches (on/off zones) to geniushub ([@castaway] - [#28182]) ([geniushub docs]) (new-platform) +- Cleanup Device Registry on Z-Wave Node Removal ([@cgarwood] - [#28240]) ([zwave docs]) +- Support Huawei LTE SSDP discovery ([@scop] - [#28214]) ([huawei_lte docs]) +- Fire an event when nzbget download completes ([@chriscla] - [#27763]) ([nzbget docs]) +- Add heating_type for ViCare integration ([@crazyfx1] - [#27296]) ([vicare docs]) +- Bump version for asuswrt to 1.1.22 ([@kennedyshead] - [#28322]) ([asuswrt docs]) +- Add config endpoint for scene ([@bramkragten] - [#28429]) ([config docs]) ([homeassistant docs]) (new-platform) +- Update ephember library version ([@ttroy50] - [#28507]) ([ephember docs]) +- Checking state before actually sending a new state change. Some projectors return ERR if you try to turn off a projector that's already off. ([@mflage] - [#28529]) ([pjlink docs]) +- rate is a separate word ([@balloob] - [#28535]) ([demo docs]) ([stt docs]) +- Update Plugwise ([@bouwew] - [#28237]) ([plugwise docs]) (breaking change) +- Improve scene.create service ([@Santobert] - [#28533]) ([homeassistant docs]) +- Reduce test requirements duplication, sync flake8 and related ([@scop] - [#28538]) +- Avoid drawing image_processing font text inside the bow line ([@snowzach] - [#27796]) ([image_processing docs]) +- Add override switch for juicenet ([@jesserockz] - [#28049]) ([juicenet docs]) (new-platform) +- Move imports in samsungtv component ([@Quentame] - [#27775]) ([samsungtv docs]) +- Try fix tests ([@pvizeli] - [#28470]) +- Add additional support over NC ([@pvizeli] - [#28527]) ([cloud docs]) ([stt docs]) (new-platform) +- Bump pytile and re-order imports ([@bachya] - [#28570]) ([tile docs]) +- Update nextbus stop tag to accept strings ([@Grodesh] - [#27765]) ([nextbus docs]) +- Bump adb-shell to 0.0.8 ([@JeffLIrion] - [#28582]) +- Fix Doods error when detection labels are specified in list form ([@snowzach] - [#28574]) ([doods docs]) +- Upgrade youtube_dl to 2019.11.05 ([@BKPepe] - [#28578]) ([media_extractor docs]) +- Reset states when connection to MPC-HC is lost ([@temeteke] - [#27541]) ([mpchc docs]) +- Add mqtt temp_low/high_template in SCHEMA_BASE ([@kevinkk525] - [#28257]) ([mqtt docs]) +- Add Netatmo camera services ([@ssenart] - [#27970]) ([netatmo docs]) +- Fix token sent to Almond Web ([@balloob] - [#28584]) ([almond docs]) +- Update to latest Somfy changes ([@balloob] - [#28207]) ([somfy docs]) +- Always run flake8 through pre-commit, and with doctests ([@scop] - [#28490]) +- Handle exceptions from PyViCare library ([@oischinger] - [#28536]) ([vicare docs]) +- Add WLED integration ([@frenck] - [#28542]) ([wled docs]) (new-integration) +- update to latest integration library version ([@exxamalte] - [#28597]) ([geonetnz_quakes docs]) +- Upgrade greeneye_monitor to 1.0.1 ([@jkeljo] - [#28600]) ([greeneye_monitor docs]) +- Add device actions to vacuum ([@balloob] - [#28554]) ([device_automation docs]) ([vacuum docs]) +- Add device action to fan ([@balloob] - [#28550]) ([device_automation docs]) ([fan docs]) +- Add lock device triggers ([@balloob] - [#28547]) ([device_automation docs]) ([lock docs]) +- Add fan device trigger ([@balloob] - [#28545]) ([device_automation docs]) ([fan docs]) +- Fix simple typo: unhasable -> unhashable ([@timgates42] - [#28605]) +- Add device triggers to vacuum ([@balloob] - [#28548]) ([automation docs]) ([device_automation docs]) ([vacuum docs]) +- Fix demo TTS ([@bramkragten] - [#28608]) ([demo docs]) +- Add climate device actions ([@balloob] - [#28552]) ([climate docs]) ([device_automation docs]) +- Add azure servicebus notify service ([@hfurubotten] - [#27566]) ([azure_servicebus docs]) (new-integration) +- Add climate device triggers ([@balloob] - [#28544]) ([automation docs]) ([climate docs]) ([device_automation docs]) ([homekit docs]) +- Add fan device condition ([@balloob] - [#28549]) ([device_automation docs]) ([fan docs]) +- Add vacuum device conditions ([@balloob] - [#28551]) ([device_automation docs]) ([vacuum docs]) +- Add cool mode to HomematicIP climate ([@SukramJ] - [#28525]) ([homematicip_cloud docs]) +- Add device conditions to climate ([@balloob] - [#28553]) ([device_automation docs]) +- Add support for conversation ID ([@balloob] - [#28620]) ([almond docs]) ([conversation docs]) +- Match ALARM in NUT UPS status message ([@bwarden] - [#28591]) ([nut docs]) +- Use friendly app names for Fire TV sources ([@JeffLIrion] - [#28417]) ([androidtv docs]) (breaking change) +- Add Huawei LTE device registry support ([@scop] - [#28594]) ([huawei_lte docs]) +- Fix generic_thermostat too_hot/too_cold ([@akasma74] - [#27860]) ([generic_thermostat docs]) +- Add switch platform to WLED integration ([@frenck] - [#28606]) ([wled docs]) (new-platform) +- Add TT WS API ([@balloob] - [#28599]) ([cloud docs]) ([websocket_api docs]) +- Add turn_on/off to tfiac ([@fredrike] - [#27712]) ([tfiac docs]) +- Fix issue with multiple Netatmo home coach devices ([@cgtobi] - [#28407]) ([netatmo docs]) +- Add attribution and onboarding commands to conversation and Almond ([@bramkragten] - [#28621]) ([almond docs]) ([conversation docs]) +- Updated frontend to 20191108.0 ([@bramkragten] - [#28638]) ([frontend docs]) +- Bump ZHA quirks version ([@dmulcahey] - [#28636]) ([zha docs]) +- Move imports in xiaomi_miio ([@Misiu] - [#27773]) ([xiaomi_miio docs]) +- Added support for multiple SAJ solar inverters ([@fredericvl] - [#28612]) ([saj docs]) +- Add support for Heat Mode detection for ecobee Heat Pumps ([@arigit] - [#28273]) ([ecobee docs]) +- Fix unhandled exception when Swisscom Internet Box is not responsive ([@LeoCal] - [#28618]) ([swisscom docs]) +- Add pcal9535a integration ([@Shulyaka] - [#26563]) ([pcal9535a docs]) (new-integration) +- Add bluesound speaker group attribute ([@bluestripe] - [#28142]) ([bluesound docs]) +- Fix xiaomi vacuum tests ([@MartinHjelmare] - [#28658]) +- Add sensor platform to WLED integration ([@frenck] - [#28632]) ([wled docs]) (new-platform) +- Upgrade bimmer_connected to 0.6.2 ([@gerard33] - [#28651]) ([bmw_connected_drive docs]) +- verisure autolock service ([@persandstrom] - [#27366]) ([verisure docs]) +- Skip updating idle Plex clients ([@jjlawren] - [#28664]) ([plex docs]) +- Hue: store current sensor entities by bridge ([@bramkragten] - [#28679]) ([hue docs]) +- #28645: Bump up zm-py to 0.4.0 ([@rohankapoorcom] - [#28681]) ([zoneminder docs]) +- Add codeowner for lutron integration ([@JonGilmore] - [#28682]) ([lutron docs]) +- Add xiaomi_miio chuangmi.plug.hmi206 ([@rytilahti] - [#28688]) ([xiaomi_miio docs]) +- Add Lutron hybrid keypad raise/lower buttons ([@kevineriklee] - [#28674]) ([lutron docs]) +- Allow icons to be masked ([@bramkragten] - [#28692]) ([frontend docs]) +- fix typo in comments ([@basnijholt] - [#28694]) +- Add config flow tests for OwnTracks ([@Quentame] - [#28644]) ([owntracks docs]) +- Update Homekit climate.py to remap current mode ([@GaryOkie] - [#28625]) ([homekit_controller docs]) (breaking change) +- Bump up ZHA dependencies. ([@Adminiuga] - [#28711]) ([zha docs]) +- Ensure SimpliSafe alarm control panels can return from being offline ([@bachya] - [#28710]) ([simplisafe docs]) +- Bump plexapi to 3.3.0 ([@jjlawren] - [#28709]) ([plex docs]) +- Update binary_sensor.py ([@effelle] - [#28707]) ([mqtt docs]) +- Allow preset boost for Homematic IP Cloud power switches ([@SukramJ] - [#28713]) ([homematicip_cloud docs]) +- Upgrade discogs_client to 2.2.2 ([@fabaff] - [#28723]) ([discogs docs]) +- Fix Here Travel Time unable to find entity on startup ([@eifinger] - [#27237]) ([here_travel_time docs]) +- Use library method for season number ([@jjlawren] - [#28708]) ([plex docs]) +- Remove choice word when Almond has choices ([@balloob] - [#28725]) ([almond docs]) +- ESPHome fix missing state in certain circumstances ([@OttoWinter] - [#28729]) ([esphome docs]) +- Set up Almond Web to connect to HA ([@balloob] - [#28603]) ([almond docs]) +- version bump pypoint ([@fredrike] - [#28737]) ([point docs]) +- Upgrade async_upnp_client==0.14.12 ([@StevenLooman] - [#28733]) ([dlna_dmr docs]) ([upnp docs]) +- Add device classes to weather sensors. ([@davet2001] - [#28512]) ([yr docs]) +- Upgrade psutil to 5.6.5 ([@fabaff] - [#28717]) ([systemmonitor docs]) +- Travis and tox config improvements ([@scop] - [#28667]) +- Correct openalpr_local config option name ([@HexF] - [#28746]) ([openalpr_local docs]) (breaking change) +- Bump ZHA quirks to 0.0.28 ([@dmulcahey] - [#28750]) ([zha docs]) (beta fix) +- Updated frontend to 20191114.0 ([@bramkragten] - [#28768]) ([frontend docs]) (beta fix) +- Fix account link version check ([@balloob] - [#28770]) ([cloud docs]) (beta fix) + +[#26563]: https://github.com/home-assistant/home-assistant/pull/26563 +[#26656]: https://github.com/home-assistant/home-assistant/pull/26656 +[#26675]: https://github.com/home-assistant/home-assistant/pull/26675 +[#26692]: https://github.com/home-assistant/home-assistant/pull/26692 +[#27111]: https://github.com/home-assistant/home-assistant/pull/27111 +[#27237]: https://github.com/home-assistant/home-assistant/pull/27237 +[#27296]: https://github.com/home-assistant/home-assistant/pull/27296 +[#27306]: https://github.com/home-assistant/home-assistant/pull/27306 +[#27307]: https://github.com/home-assistant/home-assistant/pull/27307 +[#27324]: https://github.com/home-assistant/home-assistant/pull/27324 +[#27366]: https://github.com/home-assistant/home-assistant/pull/27366 +[#27475]: https://github.com/home-assistant/home-assistant/pull/27475 +[#27492]: https://github.com/home-assistant/home-assistant/pull/27492 +[#27517]: https://github.com/home-assistant/home-assistant/pull/27517 +[#27538]: https://github.com/home-assistant/home-assistant/pull/27538 +[#27541]: https://github.com/home-assistant/home-assistant/pull/27541 +[#27548]: https://github.com/home-assistant/home-assistant/pull/27548 +[#27566]: https://github.com/home-assistant/home-assistant/pull/27566 +[#27712]: https://github.com/home-assistant/home-assistant/pull/27712 +[#27735]: https://github.com/home-assistant/home-assistant/pull/27735 +[#27761]: https://github.com/home-assistant/home-assistant/pull/27761 +[#27763]: https://github.com/home-assistant/home-assistant/pull/27763 +[#27765]: https://github.com/home-assistant/home-assistant/pull/27765 +[#27773]: https://github.com/home-assistant/home-assistant/pull/27773 +[#27775]: https://github.com/home-assistant/home-assistant/pull/27775 +[#27796]: https://github.com/home-assistant/home-assistant/pull/27796 +[#27817]: https://github.com/home-assistant/home-assistant/pull/27817 +[#27830]: https://github.com/home-assistant/home-assistant/pull/27830 +[#27860]: https://github.com/home-assistant/home-assistant/pull/27860 +[#27941]: https://github.com/home-assistant/home-assistant/pull/27941 +[#27949]: https://github.com/home-assistant/home-assistant/pull/27949 +[#27970]: https://github.com/home-assistant/home-assistant/pull/27970 +[#28049]: https://github.com/home-assistant/home-assistant/pull/28049 +[#28063]: https://github.com/home-assistant/home-assistant/pull/28063 +[#28142]: https://github.com/home-assistant/home-assistant/pull/28142 +[#28161]: https://github.com/home-assistant/home-assistant/pull/28161 +[#28163]: https://github.com/home-assistant/home-assistant/pull/28163 +[#28168]: https://github.com/home-assistant/home-assistant/pull/28168 +[#28171]: https://github.com/home-assistant/home-assistant/pull/28171 +[#28175]: https://github.com/home-assistant/home-assistant/pull/28175 +[#28176]: https://github.com/home-assistant/home-assistant/pull/28176 +[#28178]: https://github.com/home-assistant/home-assistant/pull/28178 +[#28179]: https://github.com/home-assistant/home-assistant/pull/28179 +[#28180]: https://github.com/home-assistant/home-assistant/pull/28180 +[#28181]: https://github.com/home-assistant/home-assistant/pull/28181 +[#28182]: https://github.com/home-assistant/home-assistant/pull/28182 +[#28186]: https://github.com/home-assistant/home-assistant/pull/28186 +[#28187]: https://github.com/home-assistant/home-assistant/pull/28187 +[#28188]: https://github.com/home-assistant/home-assistant/pull/28188 +[#28189]: https://github.com/home-assistant/home-assistant/pull/28189 +[#28190]: https://github.com/home-assistant/home-assistant/pull/28190 +[#28191]: https://github.com/home-assistant/home-assistant/pull/28191 +[#28196]: https://github.com/home-assistant/home-assistant/pull/28196 +[#28201]: https://github.com/home-assistant/home-assistant/pull/28201 +[#28203]: https://github.com/home-assistant/home-assistant/pull/28203 +[#28204]: https://github.com/home-assistant/home-assistant/pull/28204 +[#28207]: https://github.com/home-assistant/home-assistant/pull/28207 +[#28210]: https://github.com/home-assistant/home-assistant/pull/28210 +[#28212]: https://github.com/home-assistant/home-assistant/pull/28212 +[#28214]: https://github.com/home-assistant/home-assistant/pull/28214 +[#28215]: https://github.com/home-assistant/home-assistant/pull/28215 +[#28216]: https://github.com/home-assistant/home-assistant/pull/28216 +[#28220]: https://github.com/home-assistant/home-assistant/pull/28220 +[#28225]: https://github.com/home-assistant/home-assistant/pull/28225 +[#28228]: https://github.com/home-assistant/home-assistant/pull/28228 +[#28230]: https://github.com/home-assistant/home-assistant/pull/28230 +[#28231]: https://github.com/home-assistant/home-assistant/pull/28231 +[#28234]: https://github.com/home-assistant/home-assistant/pull/28234 +[#28236]: https://github.com/home-assistant/home-assistant/pull/28236 +[#28237]: https://github.com/home-assistant/home-assistant/pull/28237 +[#28238]: https://github.com/home-assistant/home-assistant/pull/28238 +[#28240]: https://github.com/home-assistant/home-assistant/pull/28240 +[#28247]: https://github.com/home-assistant/home-assistant/pull/28247 +[#28248]: https://github.com/home-assistant/home-assistant/pull/28248 +[#28250]: https://github.com/home-assistant/home-assistant/pull/28250 +[#28252]: https://github.com/home-assistant/home-assistant/pull/28252 +[#28257]: https://github.com/home-assistant/home-assistant/pull/28257 +[#28258]: https://github.com/home-assistant/home-assistant/pull/28258 +[#28260]: https://github.com/home-assistant/home-assistant/pull/28260 +[#28261]: https://github.com/home-assistant/home-assistant/pull/28261 +[#28262]: https://github.com/home-assistant/home-assistant/pull/28262 +[#28269]: https://github.com/home-assistant/home-assistant/pull/28269 +[#28270]: https://github.com/home-assistant/home-assistant/pull/28270 +[#28271]: https://github.com/home-assistant/home-assistant/pull/28271 +[#28273]: https://github.com/home-assistant/home-assistant/pull/28273 +[#28277]: https://github.com/home-assistant/home-assistant/pull/28277 +[#28278]: https://github.com/home-assistant/home-assistant/pull/28278 +[#28282]: https://github.com/home-assistant/home-assistant/pull/28282 +[#28285]: https://github.com/home-assistant/home-assistant/pull/28285 +[#28286]: https://github.com/home-assistant/home-assistant/pull/28286 +[#28287]: https://github.com/home-assistant/home-assistant/pull/28287 +[#28288]: https://github.com/home-assistant/home-assistant/pull/28288 +[#28291]: https://github.com/home-assistant/home-assistant/pull/28291 +[#28293]: https://github.com/home-assistant/home-assistant/pull/28293 +[#28299]: https://github.com/home-assistant/home-assistant/pull/28299 +[#28300]: https://github.com/home-assistant/home-assistant/pull/28300 +[#28301]: https://github.com/home-assistant/home-assistant/pull/28301 +[#28304]: https://github.com/home-assistant/home-assistant/pull/28304 +[#28305]: https://github.com/home-assistant/home-assistant/pull/28305 +[#28310]: https://github.com/home-assistant/home-assistant/pull/28310 +[#28311]: https://github.com/home-assistant/home-assistant/pull/28311 +[#28312]: https://github.com/home-assistant/home-assistant/pull/28312 +[#28313]: https://github.com/home-assistant/home-assistant/pull/28313 +[#28322]: https://github.com/home-assistant/home-assistant/pull/28322 +[#28324]: https://github.com/home-assistant/home-assistant/pull/28324 +[#28330]: https://github.com/home-assistant/home-assistant/pull/28330 +[#28338]: https://github.com/home-assistant/home-assistant/pull/28338 +[#28339]: https://github.com/home-assistant/home-assistant/pull/28339 +[#28349]: https://github.com/home-assistant/home-assistant/pull/28349 +[#28352]: https://github.com/home-assistant/home-assistant/pull/28352 +[#28362]: https://github.com/home-assistant/home-assistant/pull/28362 +[#28369]: https://github.com/home-assistant/home-assistant/pull/28369 +[#28382]: https://github.com/home-assistant/home-assistant/pull/28382 +[#28385]: https://github.com/home-assistant/home-assistant/pull/28385 +[#28401]: https://github.com/home-assistant/home-assistant/pull/28401 +[#28403]: https://github.com/home-assistant/home-assistant/pull/28403 +[#28407]: https://github.com/home-assistant/home-assistant/pull/28407 +[#28413]: https://github.com/home-assistant/home-assistant/pull/28413 +[#28417]: https://github.com/home-assistant/home-assistant/pull/28417 +[#28421]: https://github.com/home-assistant/home-assistant/pull/28421 +[#28422]: https://github.com/home-assistant/home-assistant/pull/28422 +[#28423]: https://github.com/home-assistant/home-assistant/pull/28423 +[#28424]: https://github.com/home-assistant/home-assistant/pull/28424 +[#28428]: https://github.com/home-assistant/home-assistant/pull/28428 +[#28429]: https://github.com/home-assistant/home-assistant/pull/28429 +[#28434]: https://github.com/home-assistant/home-assistant/pull/28434 +[#28438]: https://github.com/home-assistant/home-assistant/pull/28438 +[#28442]: https://github.com/home-assistant/home-assistant/pull/28442 +[#28445]: https://github.com/home-assistant/home-assistant/pull/28445 +[#28449]: https://github.com/home-assistant/home-assistant/pull/28449 +[#28452]: https://github.com/home-assistant/home-assistant/pull/28452 +[#28458]: https://github.com/home-assistant/home-assistant/pull/28458 +[#28463]: https://github.com/home-assistant/home-assistant/pull/28463 +[#28465]: https://github.com/home-assistant/home-assistant/pull/28465 +[#28468]: https://github.com/home-assistant/home-assistant/pull/28468 +[#28470]: https://github.com/home-assistant/home-assistant/pull/28470 +[#28478]: https://github.com/home-assistant/home-assistant/pull/28478 +[#28487]: https://github.com/home-assistant/home-assistant/pull/28487 +[#28488]: https://github.com/home-assistant/home-assistant/pull/28488 +[#28490]: https://github.com/home-assistant/home-assistant/pull/28490 +[#28503]: https://github.com/home-assistant/home-assistant/pull/28503 +[#28506]: https://github.com/home-assistant/home-assistant/pull/28506 +[#28507]: https://github.com/home-assistant/home-assistant/pull/28507 +[#28509]: https://github.com/home-assistant/home-assistant/pull/28509 +[#28511]: https://github.com/home-assistant/home-assistant/pull/28511 +[#28512]: https://github.com/home-assistant/home-assistant/pull/28512 +[#28514]: https://github.com/home-assistant/home-assistant/pull/28514 +[#28517]: https://github.com/home-assistant/home-assistant/pull/28517 +[#28520]: https://github.com/home-assistant/home-assistant/pull/28520 +[#28525]: https://github.com/home-assistant/home-assistant/pull/28525 +[#28527]: https://github.com/home-assistant/home-assistant/pull/28527 +[#28529]: https://github.com/home-assistant/home-assistant/pull/28529 +[#28533]: https://github.com/home-assistant/home-assistant/pull/28533 +[#28535]: https://github.com/home-assistant/home-assistant/pull/28535 +[#28536]: https://github.com/home-assistant/home-assistant/pull/28536 +[#28538]: https://github.com/home-assistant/home-assistant/pull/28538 +[#28542]: https://github.com/home-assistant/home-assistant/pull/28542 +[#28544]: https://github.com/home-assistant/home-assistant/pull/28544 +[#28545]: https://github.com/home-assistant/home-assistant/pull/28545 +[#28547]: https://github.com/home-assistant/home-assistant/pull/28547 +[#28548]: https://github.com/home-assistant/home-assistant/pull/28548 +[#28549]: https://github.com/home-assistant/home-assistant/pull/28549 +[#28550]: https://github.com/home-assistant/home-assistant/pull/28550 +[#28551]: https://github.com/home-assistant/home-assistant/pull/28551 +[#28552]: https://github.com/home-assistant/home-assistant/pull/28552 +[#28553]: https://github.com/home-assistant/home-assistant/pull/28553 +[#28554]: https://github.com/home-assistant/home-assistant/pull/28554 +[#28570]: https://github.com/home-assistant/home-assistant/pull/28570 +[#28574]: https://github.com/home-assistant/home-assistant/pull/28574 +[#28578]: https://github.com/home-assistant/home-assistant/pull/28578 +[#28582]: https://github.com/home-assistant/home-assistant/pull/28582 +[#28584]: https://github.com/home-assistant/home-assistant/pull/28584 +[#28591]: https://github.com/home-assistant/home-assistant/pull/28591 +[#28594]: https://github.com/home-assistant/home-assistant/pull/28594 +[#28597]: https://github.com/home-assistant/home-assistant/pull/28597 +[#28599]: https://github.com/home-assistant/home-assistant/pull/28599 +[#28600]: https://github.com/home-assistant/home-assistant/pull/28600 +[#28603]: https://github.com/home-assistant/home-assistant/pull/28603 +[#28605]: https://github.com/home-assistant/home-assistant/pull/28605 +[#28606]: https://github.com/home-assistant/home-assistant/pull/28606 +[#28608]: https://github.com/home-assistant/home-assistant/pull/28608 +[#28612]: https://github.com/home-assistant/home-assistant/pull/28612 +[#28618]: https://github.com/home-assistant/home-assistant/pull/28618 +[#28620]: https://github.com/home-assistant/home-assistant/pull/28620 +[#28621]: https://github.com/home-assistant/home-assistant/pull/28621 +[#28625]: https://github.com/home-assistant/home-assistant/pull/28625 +[#28632]: https://github.com/home-assistant/home-assistant/pull/28632 +[#28636]: https://github.com/home-assistant/home-assistant/pull/28636 +[#28638]: https://github.com/home-assistant/home-assistant/pull/28638 +[#28644]: https://github.com/home-assistant/home-assistant/pull/28644 +[#28651]: https://github.com/home-assistant/home-assistant/pull/28651 +[#28658]: https://github.com/home-assistant/home-assistant/pull/28658 +[#28664]: https://github.com/home-assistant/home-assistant/pull/28664 +[#28667]: https://github.com/home-assistant/home-assistant/pull/28667 +[#28674]: https://github.com/home-assistant/home-assistant/pull/28674 +[#28679]: https://github.com/home-assistant/home-assistant/pull/28679 +[#28681]: https://github.com/home-assistant/home-assistant/pull/28681 +[#28682]: https://github.com/home-assistant/home-assistant/pull/28682 +[#28688]: https://github.com/home-assistant/home-assistant/pull/28688 +[#28692]: https://github.com/home-assistant/home-assistant/pull/28692 +[#28694]: https://github.com/home-assistant/home-assistant/pull/28694 +[#28707]: https://github.com/home-assistant/home-assistant/pull/28707 +[#28708]: https://github.com/home-assistant/home-assistant/pull/28708 +[#28709]: https://github.com/home-assistant/home-assistant/pull/28709 +[#28710]: https://github.com/home-assistant/home-assistant/pull/28710 +[#28711]: https://github.com/home-assistant/home-assistant/pull/28711 +[#28713]: https://github.com/home-assistant/home-assistant/pull/28713 +[#28717]: https://github.com/home-assistant/home-assistant/pull/28717 +[#28723]: https://github.com/home-assistant/home-assistant/pull/28723 +[#28725]: https://github.com/home-assistant/home-assistant/pull/28725 +[#28729]: https://github.com/home-assistant/home-assistant/pull/28729 +[#28733]: https://github.com/home-assistant/home-assistant/pull/28733 +[#28737]: https://github.com/home-assistant/home-assistant/pull/28737 +[#28746]: https://github.com/home-assistant/home-assistant/pull/28746 +[#28750]: https://github.com/home-assistant/home-assistant/pull/28750 +[#28768]: https://github.com/home-assistant/home-assistant/pull/28768 +[#28770]: https://github.com/home-assistant/home-assistant/pull/28770 +[@adminiuga]: https://github.com/Adminiuga +[@anonym-tsk]: https://github.com/Anonym-tsk +[@bkpepe]: https://github.com/BKPepe +[@garyokie]: https://github.com/GaryOkie +[@grodesh]: https://github.com/Grodesh +[@harlemsquirrel]: https://github.com/HarlemSquirrel +[@hexf]: https://github.com/HexF +[@jphutchins]: https://github.com/JPHutchins +[@jefflirion]: https://github.com/JeffLIrion +[@jongilmore]: https://github.com/JonGilmore +[@kane610]: https://github.com/Kane610 +[@leocal]: https://github.com/LeoCal +[@martinhjelmare]: https://github.com/MartinHjelmare +[@misiu]: https://github.com/Misiu +[@onfreund]: https://github.com/OnFreund +[@ottowinter]: https://github.com/OttoWinter +[@pixeljonas]: https://github.com/PixelJonas +[@poeschl]: https://github.com/Poeschl +[@quentame]: https://github.com/Quentame +[@santobert]: https://github.com/Santobert +[@schoonology]: https://github.com/Schoonology +[@shulyaka]: https://github.com/Shulyaka +[@stevenlooman]: https://github.com/StevenLooman +[@sukramj]: https://github.com/SukramJ +[@zironl]: https://github.com/ZiroNL +[@akasma74]: https://github.com/akasma74 +[@arigit]: https://github.com/arigit +[@bachya]: https://github.com/bachya +[@balloob]: https://github.com/balloob +[@basnijholt]: https://github.com/basnijholt +[@bendavid]: https://github.com/bendavid +[@bluestripe]: https://github.com/bluestripe +[@bouwew]: https://github.com/bouwew +[@bramkragten]: https://github.com/bramkragten +[@bwarden]: https://github.com/bwarden +[@castaway]: https://github.com/castaway +[@cgarwood]: https://github.com/cgarwood +[@cgtobi]: https://github.com/cgtobi +[@chriscla]: https://github.com/chriscla +[@crazyfx1]: https://github.com/crazyfx1 +[@davet2001]: https://github.com/davet2001 +[@djpremier]: https://github.com/djpremier +[@dmulcahey]: https://github.com/dmulcahey +[@effelle]: https://github.com/effelle +[@eifinger]: https://github.com/eifinger +[@eliseomartelli]: https://github.com/eliseomartelli +[@elupus]: https://github.com/elupus +[@emontnemery]: https://github.com/emontnemery +[@escoand]: https://github.com/escoand +[@exxamalte]: https://github.com/exxamalte +[@fabaff]: https://github.com/fabaff +[@florisvdk]: https://github.com/florisvdk +[@flz]: https://github.com/flz +[@fredericvl]: https://github.com/fredericvl +[@fredrike]: https://github.com/fredrike +[@frenck]: https://github.com/frenck +[@fwestenberg]: https://github.com/fwestenberg +[@gerard33]: https://github.com/gerard33 +[@gngj]: https://github.com/gngj +[@guillempages]: https://github.com/guillempages +[@hfurubotten]: https://github.com/hfurubotten +[@iamtpage]: https://github.com/iamtpage +[@jesserockz]: https://github.com/jesserockz +[@jjlawren]: https://github.com/jjlawren +[@jkeljo]: https://github.com/jkeljo +[@karouf]: https://github.com/karouf +[@kennedyshead]: https://github.com/kennedyshead +[@kevineriklee]: https://github.com/kevineriklee +[@kevinkk525]: https://github.com/kevinkk525 +[@ktnrg45]: https://github.com/ktnrg45 +[@ludeeus]: https://github.com/ludeeus +[@marthoc]: https://github.com/marthoc +[@mezz64]: https://github.com/mezz64 +[@mflage]: https://github.com/mflage +[@michaeldavie]: https://github.com/michaeldavie +[@nkaminski]: https://github.com/nkaminski +[@ochlocracy]: https://github.com/ochlocracy +[@oischinger]: https://github.com/oischinger +[@pattyland]: https://github.com/pattyland +[@persandstrom]: https://github.com/persandstrom +[@pvizeli]: https://github.com/pvizeli +[@rohankapoorcom]: https://github.com/rohankapoorcom +[@rutkai]: https://github.com/rutkai +[@rytilahti]: https://github.com/rytilahti +[@scop]: https://github.com/scop +[@shmooey]: https://github.com/shmooey +[@snowzach]: https://github.com/snowzach +[@soraxas]: https://github.com/soraxas +[@soundstorm]: https://github.com/soundstorm +[@ssenart]: https://github.com/ssenart +[@syssi]: https://github.com/syssi +[@tefinger]: https://github.com/tefinger +[@temeteke]: https://github.com/temeteke +[@thoscut]: https://github.com/thoscut +[@timgates42]: https://github.com/timgates42 +[@tlrobinson]: https://github.com/tlrobinson +[@ttroy50]: https://github.com/ttroy50 +[@vangorra]: https://github.com/vangorra +[@yeralin]: https://github.com/yeralin +[@yjajkiew]: https://github.com/yjajkiew +[@zxdavb]: https://github.com/zxdavb +[alarm_control_panel docs]: /integrations/alarm_control_panel/ +[alexa docs]: /integrations/alexa/ +[almond docs]: /integrations/almond/ +[androidtv docs]: /integrations/androidtv/ +[asuswrt docs]: /integrations/asuswrt/ +[automation docs]: /integrations/automation/ +[avea docs]: /integrations/avea/ +[azure_servicebus docs]: /integrations/azure_servicebus/ +[bluesound docs]: /integrations/bluesound/ +[bmw_connected_drive docs]: /integrations/bmw_connected_drive/ +[climate docs]: /integrations/climate/ +[cloud docs]: /integrations/cloud/ +[config docs]: /integrations/config/ +[conversation docs]: /integrations/conversation/ +[coolmaster docs]: /integrations/coolmaster/ +[cover docs]: /integrations/cover/ +[deconz docs]: /integrations/deconz/ +[demo docs]: /integrations/demo/ +[device_automation docs]: /integrations/device_automation/ +[device_tracker docs]: /integrations/device_tracker/ +[discogs docs]: /integrations/discogs/ +[dlna_dmr docs]: /integrations/dlna_dmr/ +[doods docs]: /integrations/doods/ +[dyson docs]: /integrations/dyson/ +[ecobee docs]: /integrations/ecobee/ +[eight_sleep docs]: /integrations/eight_sleep/ +[environment_canada docs]: /integrations/environment_canada/ +[envirophat docs]: /integrations/envirophat/ +[ephember docs]: /integrations/ephember/ +[eq3btsmart docs]: /integrations/eq3btsmart/ +[esphome docs]: /integrations/esphome/ +[fan docs]: /integrations/fan/ +[feedreader docs]: /integrations/feedreader/ +[flux docs]: /integrations/flux/ +[flux_led docs]: /integrations/flux_led/ +[folder docs]: /integrations/folder/ +[frontend docs]: /integrations/frontend/ +[generic_thermostat docs]: /integrations/generic_thermostat/ +[geniushub docs]: /integrations/geniushub/ +[geonetnz_quakes docs]: /integrations/geonetnz_quakes/ +[google_assistant docs]: /integrations/google_assistant/ +[greeneye_monitor docs]: /integrations/greeneye_monitor/ +[gtt docs]: /integrations/gtt/ +[hangouts docs]: /integrations/hangouts/ +[hassio docs]: /integrations/hassio/ +[here_travel_time docs]: /integrations/here_travel_time/ +[homeassistant docs]: /integrations/homeassistant/ +[homekit docs]: /integrations/homekit/ +[homekit_controller docs]: /integrations/homekit_controller/ +[homematic docs]: /integrations/homematic/ +[homematicip_cloud docs]: /integrations/homematicip_cloud/ +[huawei_lte docs]: /integrations/huawei_lte/ +[hue docs]: /integrations/hue/ +[iaqualink docs]: /integrations/iaqualink/ +[image_processing docs]: /integrations/image_processing/ +[imap docs]: /integrations/imap/ +[incomfort docs]: /integrations/incomfort/ +[iss docs]: /integrations/iss/ +[juicenet docs]: /integrations/juicenet/ +[keyboard_remote docs]: /integrations/keyboard_remote/ +[lock docs]: /integrations/lock/ +[lutron docs]: /integrations/lutron/ +[media_extractor docs]: /integrations/media_extractor/ +[media_player docs]: /integrations/media_player/ +[mpchc docs]: /integrations/mpchc/ +[mqtt docs]: /integrations/mqtt/ +[netatmo docs]: /integrations/netatmo/ +[nextbus docs]: /integrations/nextbus/ +[nut docs]: /integrations/nut/ +[nzbget docs]: /integrations/nzbget/ +[onvif docs]: /integrations/onvif/ +[openalpr_local docs]: /integrations/openalpr_local/ +[owntracks docs]: /integrations/owntracks/ +[pcal9535a docs]: /integrations/pcal9535a/ +[pioneer docs]: /integrations/pioneer/ +[pjlink docs]: /integrations/pjlink/ +[plex docs]: /integrations/plex/ +[plugwise docs]: /integrations/plugwise/ +[point docs]: /integrations/point/ +[proxy docs]: /integrations/proxy/ +[ps4 docs]: /integrations/ps4/ +[qrcode docs]: /integrations/qrcode/ +[reddit docs]: /integrations/reddit/ +[saj docs]: /integrations/saj/ +[samsungtv docs]: /integrations/samsungtv/ +[shiftr docs]: /integrations/shiftr/ +[simplisafe docs]: /integrations/simplisafe/ +[snmp docs]: /integrations/snmp/ +[somfy docs]: /integrations/somfy/ +[ssdp docs]: /integrations/ssdp/ +[stt docs]: /integrations/stt/ +[swisscom docs]: /integrations/swisscom/ +[systemmonitor docs]: /integrations/systemmonitor/ +[tahoma docs]: /integrations/tahoma/ +[telegram_bot docs]: /integrations/telegram_bot/ +[tfiac docs]: /integrations/tfiac/ +[thingspeak docs]: /integrations/thingspeak/ +[tile docs]: /integrations/tile/ +[tradfri docs]: /integrations/tradfri/ +[transmission docs]: /integrations/transmission/ +[twitch docs]: /integrations/twitch/ +[twitter docs]: /integrations/twitter/ +[unifiled docs]: /integrations/unifiled/ +[upnp docs]: /integrations/upnp/ +[vacuum docs]: /integrations/vacuum/ +[venstar docs]: /integrations/venstar/ +[verisure docs]: /integrations/verisure/ +[vicare docs]: /integrations/vicare/ +[vivotek docs]: /integrations/vivotek/ +[water_heater docs]: /integrations/water_heater/ +[watson_tts docs]: /integrations/watson_tts/ +[websocket_api docs]: /integrations/websocket_api/ +[withings docs]: /integrations/withings/ +[wled docs]: /integrations/wled/ +[xiaomi_miio docs]: /integrations/xiaomi_miio/ +[yr docs]: /integrations/yr/ +[zha docs]: /integrations/zha/ +[zoneminder docs]: /integrations/zoneminder/ +[zwave docs]: /integrations/zwave/ From caa66c7cd0a399981fe85584f785dcac8f7c0aa1 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 14 Nov 2019 14:53:21 +0100 Subject: [PATCH 41/56] Mention scene services --- source/_posts/2019-11-20-release-102.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_posts/2019-11-20-release-102.markdown b/source/_posts/2019-11-20-release-102.markdown index 4d906f2c772..6db733ab6bd 100644 --- a/source/_posts/2019-11-20-release-102.markdown +++ b/source/_posts/2019-11-20-release-102.markdown @@ -12,6 +12,7 @@ og_image: /images/blog/2019-10-0.102/components.png --- Almond. Account linking. Mobile apps. WLED - platinum. +Scene services + editor. ## New Integrations From e20fb1570ce639e148caf6b044df8b283cc01f17 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 18 Nov 2019 17:08:45 -0600 Subject: [PATCH 42/56] Update in other news --- source/_posts/2019-11-20-release-102.markdown | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/_posts/2019-11-20-release-102.markdown b/source/_posts/2019-11-20-release-102.markdown index 6db733ab6bd..a7b6dd0f2af 100644 --- a/source/_posts/2019-11-20-release-102.markdown +++ b/source/_posts/2019-11-20-release-102.markdown @@ -14,6 +14,11 @@ og_image: /images/blog/2019-10-0.102/components.png Almond. Account linking. Mobile apps. WLED - platinum. Scene services + editor. +## In other news + + + ## New Integrations - Add Unifi Led ([@florisvdk] - [#27475]) ([unifiled docs]) (new-integration) From 27c7553cbb421ec68c0b931f8fe54072edf2e2e2 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 19 Nov 2019 09:49:52 -0800 Subject: [PATCH 43/56] Mention apps --- source/_posts/2019-11-20-release-102.markdown | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/_posts/2019-11-20-release-102.markdown b/source/_posts/2019-11-20-release-102.markdown index a7b6dd0f2af..07290031204 100644 --- a/source/_posts/2019-11-20-release-102.markdown +++ b/source/_posts/2019-11-20-release-102.markdown @@ -13,12 +13,15 @@ og_image: /images/blog/2019-10-0.102/components.png Almond. Account linking. Mobile apps. WLED - platinum. Scene services + editor. +Android app. ## In other news +https://github.com/tuanha2000vn/hasskit/ + ## New Integrations - Add Unifi Led ([@florisvdk] - [#27475]) ([unifiled docs]) (new-integration) From 89b3e8b1450c63ed08ca206cabf9d2fefd772882 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 19 Nov 2019 17:48:07 -0800 Subject: [PATCH 44/56] Add Almond link --- source/_posts/2019-11-20-release-102.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_posts/2019-11-20-release-102.markdown b/source/_posts/2019-11-20-release-102.markdown index 07290031204..7d31edf49e3 100644 --- a/source/_posts/2019-11-20-release-102.markdown +++ b/source/_posts/2019-11-20-release-102.markdown @@ -12,6 +12,8 @@ og_image: /images/blog/2019-10-0.102/components.png --- Almond. Account linking. Mobile apps. WLED - platinum. +Submit new sentences for Almond: https://docs.google.com/forms/d/e/1FAIpQLSeStJfjvueNAiueRVmP47XALRaJlx7tttzJjRfVjX4J546-uA/viewform + Scene services + editor. Android app. From 7a89c5731dc1cc6b7b1ed0f2e4565e3afa7ae13e Mon Sep 17 00:00:00 2001 From: cogneato Date: Wed, 20 Nov 2019 08:57:42 -0700 Subject: [PATCH 45/56] Add breaking change descriptions (#11236) breaking change summaries added --- source/_posts/2019-11-20-release-102.markdown | 58 +++++++++++++++---- 1 file changed, 48 insertions(+), 10 deletions(-) diff --git a/source/_posts/2019-11-20-release-102.markdown b/source/_posts/2019-11-20-release-102.markdown index 7d31edf49e3..1c65cc66c95 100644 --- a/source/_posts/2019-11-20-release-102.markdown +++ b/source/_posts/2019-11-20-release-102.markdown @@ -57,16 +57,54 @@ Experiencing issues introduced by this release? Please report them in our [issue ## Breaking Changes -- Modernize Huawei LTE ([@scop] - [#26675]) ([huawei_lte docs]) (breaking change) -- Removes unwanted tradfri battery sensor ([@ludeeus] - [#28181]) ([tradfri docs]) (breaking change) -- Show all UPNP/IGD sensors in one device ([@escoand] - [#27517]) ([upnp docs]) (breaking change) -- Change ps4 state off to state standby ([@ktnrg45] - [#28261]) ([ps4 docs]) (breaking change) -- SSDP matching improvements ([@scop] - [#28285]) ([ssdp docs]) (breaking change) -- Align attribute naming between light and switch for HomematicIP Cloud ([@SukramJ] - [#28271]) ([homematicip_cloud docs]) (breaking change) -- Update Plugwise ([@bouwew] - [#28237]) ([plugwise docs]) (breaking change) -- Use friendly app names for Fire TV sources ([@JeffLIrion] - [#28417]) ([androidtv docs]) (breaking change) -- Update Homekit climate.py to remap current mode ([@GaryOkie] - [#28625]) ([homekit_controller docs]) (breaking change) -- Correct openalpr_local config option name ([@HexF] - [#28746]) ([openalpr_local docs]) (breaking change) +- __Huawei LTE__ - Configuration has been consolidated below `huawei_lte`. Device tracker no longer uses known_devices.yaml but entity registry. - ([@scop] - [#26675]) ([huawei_lte docs]) + + Example configuration yaml: + ```yaml + huawei_lte: + - url: http://192.168.100.1/ + username: admin + password: something + ``` + +- __Ikea Tradfri__ - This removes the battery sensor that was created for the signal repeater. The sensor would never have a state, and after some inspection, it does not look like that device present any valuable metrics. - ([@ludeeus] - [#28181]) ([tradfri docs]) + +- __UPNP/IGD__ - All UPNP/IGD sensors are now in one device. You have to remove and re-add the integration to get rid of the previous devices. ([@escoand] - [#27517]) ([upnp docs]) + +- __PS4__ - State `off` is now State `standby`. Affects user defined scripts, automations, etc. ([@ktnrg45] - [#28261]) ([ps4 docs]) + +- __SSDP__ - `ssdp` in manifest.json has changed; it is now a list of dicts, and as we now match using the UPnP device description fields directly, `device_type` has to be renamed to `deviceType`. No included integrations use it at the moment, nor are they broken by this change. If any custom integrations are using it, they need to adjust accordingly. ([@scop] - [#28285]) ([ssdp docs]) + +- __HomematicIP Cloud__ - The attribute naming between Homematic IP `HmIP-BSM` (light) and `HmIP-FSM/HmIP-PSM` (switch) was different and in case of light not correct. The attributes for `HmIP-BSM` have been renamed: + + * energy_counter_kwh --> today_energy_kwh + * power_consumption --> current_power_w + + Please check your automations, scripts, scenes, etc., if you are using the old attributes in templates, and replace them with the new ones. - ([@SukramJ] - [#28271]) ([homematicip_cloud docs]) + +- __Plugwise__ - Detection of a legacy Anna (firmware 1.8.x) is no longer automatic: owners of a legacy Anna have to provide info in configuration.yaml, the last line. This change was needed to be able to fix issue #26520. - ([@bouwew] - [#28237]) ([plugwise docs]) + + Example configuration yaml: + ```yaml + climate: + - platform: plugwise + name: your_device_name + password: your_password + host: your_anna_ip + legacy_anna: true + ``` + +- __Android TV__ - The `source` and `sources_list` attributes for Fire TV devices will use friendly app names instead of app IDs (e.g., "Netflix" instead of "com.netflix.ninja"). If you are using these attributes in automations, sensors, etc., you will need to update them. + * If you are currently checking that the `source` attribute of a Fire TV device is a particular app ID, you have two options: + * Check the `app_id` attribute instead + * Replace that app ID with the friendly name for the app. + * If you are currently checking the `sources_list` attribute, then you will need to check for friendly app names instead of app IDs. + + You can still use app IDs for the media_player.select_source service. - ([@JeffLIrion] - [#28417]) ([androidtv docs]) + +- __Homekit__ - Thermostats supported by the Homekit Controller component were reporting "off" for the running status when the HVAC was powered on but not actively heating or cooling. This `hvac_action` attribute will now properly return "idle" instead of off. Any logic that tests for the `hvac_action` condition of `off` will need to change to `idle`. There is no change to any other states. - ([@GaryOkie] - [#28625]) ([homekit_controller docs]) + +- __OpenALPR local__ - The "alp_bin" option has been corrected to "alpr_bin" as is outlined in the documentation. Users should check their config and update if necessary. ([@HexF] - [#28746]) ([openalpr_local docs]) ## Beta Fixes From 91afab4840bf2dd1cb142f9212ee6f12025aecdf Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Wed, 20 Nov 2019 19:38:59 +0100 Subject: [PATCH 46/56] Frontend release notes (#11237) * Frontend release notes * typos * Update 2019-11-20-release-102.markdown * Update 2019-11-20-release-102.markdown * Update source/_posts/2019-11-20-release-102.markdown Co-Authored-By: Franck Nijhof --- source/_posts/2019-11-20-release-102.markdown | 48 +++++++++++++++++- .../2019-11-0.102/thingtalk-automation.png | Bin 0 -> 101945 bytes 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 source/images/blog/2019-11-0.102/thingtalk-automation.png diff --git a/source/_posts/2019-11-20-release-102.markdown b/source/_posts/2019-11-20-release-102.markdown index 1c65cc66c95..712645ee0ff 100644 --- a/source/_posts/2019-11-20-release-102.markdown +++ b/source/_posts/2019-11-20-release-102.markdown @@ -14,8 +14,54 @@ og_image: /images/blog/2019-10-0.102/components.png Almond. Account linking. Mobile apps. WLED - platinum. Submit new sentences for Almond: https://docs.google.com/forms/d/e/1FAIpQLSeStJfjvueNAiueRVmP47XALRaJlx7tttzJjRfVjX4J546-uA/viewform -Scene services + editor. Android app. +Scene services. + +### Create automations with natural language + +As an experimental feature, we have added a new way to create automations. With the help of Almond, we can transform natural language into Home Assistant automations. + +

+Screenshot of the create automation dialog. +Screenshot of the create automation dialog. +

+ +When you click the **+** in the automation editor to add a new automation, you will see a new dialog where you can enter what you want your automation to do in natural language. Like: `Turn on the lights when I come home`. We will try to convert this into an automation. We will check if you need to specify devices or persons for this automation and ask you for them. You can then check the generated automation in the editor and save it. + +Be advised that not all devices are supported yet, and that Almond needs more training for better responses. Check the Almond part for how you can help make Almond better. + +### Scene editor + +

+Screenshot of the scene editor. +Screenshot of the scene editor. +

+ +We also introduce a [scene editor](/docs/scene/editor/). With the scene editor you can easily store the states of devices in a scene. +You simply select the devices (and/or entities if you are in advanced mode) you want to include in your scene and set the states to how you would like them when the scene activates. +Changes you do to the state of a device that is included in the scene you are editing are discarded when you exit the scene editor. + +To use the scene editor your scene config should be in the file `scenes.yaml` in your config directory and included in `configuration.yaml`. +Every scene should have a unique id for the editor to work. + +```yaml +# scenes.yaml +- id: my_unique_id # <-- Required for editor to work. + name: Romantic + entities: + light.tv_back_light: on + light.ceiling: + state: on + xy_color: [0.33, 0.66] + brightness: 200 +``` + +Then update your `configuration.yaml` to look like this: + +```yaml +# Configuration.yaml example +scene: !include scenes.yaml +``` ## In other news diff --git a/source/images/blog/2019-11-0.102/thingtalk-automation.png b/source/images/blog/2019-11-0.102/thingtalk-automation.png new file mode 100644 index 0000000000000000000000000000000000000000..a2b0ee53668f48bf21986c2bbbe2335b06084402 GIT binary patch literal 101945 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 ZbGqrL*8n#QLmV~K!xaWUnD0nP{2Kuutj_=d literal 0 HcmV?d00001 From d5c6a79d71923369eda8c48a319e26c9bf1788c0 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 20 Nov 2019 12:56:45 -0800 Subject: [PATCH 47/56] Add draft voice assistant --- ...0-privacy-focused-voice-assistant.markdown | 86 ++++++++++++++++++ source/_posts/2019-11-20-release-102.markdown | 53 ++++++----- .../blog/2019-voice-assistant/almond.png | Bin 0 -> 31657 bytes .../blog/2019-voice-assistant/overview.svg | 1 + 4 files changed, 116 insertions(+), 24 deletions(-) create mode 100644 source/_posts/2019-11-20-privacy-focused-voice-assistant.markdown create mode 100644 source/images/blog/2019-voice-assistant/almond.png create mode 100644 source/images/blog/2019-voice-assistant/overview.svg diff --git a/source/_posts/2019-11-20-privacy-focused-voice-assistant.markdown b/source/_posts/2019-11-20-privacy-focused-voice-assistant.markdown new file mode 100644 index 00000000000..388562f5957 --- /dev/null +++ b/source/_posts/2019-11-20-privacy-focused-voice-assistant.markdown @@ -0,0 +1,86 @@ +--- +layout: post +title: "Almond & Ada: Privacy focused voice assistant" +description: "Say Hi! to Almond, a privacy focused virtual assistant and Ada, a voice assistant powered by Home Assistant." +date: 2019-11-14 0:43:02 +date_formatted: "November 20, 2019" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Announcements +og_image: /images/blog/2019-voice-assistant/almond.png +--- + +TL; DR: + +- Teamed up with [Almond](https://almond.stanford.edu/), available in Home Assistant 0.102. +- Introducing [Ada](https://github.com/home-assistant/ada), voice assistant powered by Home Assistant integrations. Available as hass.io add-on. +- New beta speech-to-text and text-to-speech service for Home Assistant Cloud subscribers. + +--- + +Voice assistants are a great way to interact with your house, ask a quick question, set a timer or control your devices. The more an assistant know about you, your home and it's other inhabitants, the better it is able to help you. + +Todays available virtual assistants work great, but they have a big problem. They store your data in the cloud, don't provide APIs to allow other companies to build products on top and are run by companies whose core business is building profiles on their users to help serve ads and product suggestions. + +The backbone to our homes needs to be one that keeps data local and has APIs allowing other companies to build on top. Innovation happens when many different people, with many different backgrounds, do many different experiments until we find something that sticks. This cannot be left to a single company. + +Recently we got in touch with the [Open Virtual Assistant Lab at Stanford University](https://oval.cs.stanford.edu/). They have been working the last four years on a virtual assistant named Almond. And it's a perfect match for Home Assistant. + + + +## Almond + +[Almond](https://almond.stanford.edu/) is an open, privacy preserving virtual assistant that is open source. With Almond, you can run a virtual assistant at home that can tell you the news or control your house. It is powered by [LUInet](https://almond.stanford.edu/doc/genie-intro.md), a state-of-the-art neural network developed at Stanford. And it now works with Home Assistant. + +The Almond team has updated Almond to make it aware of all the different device types in Home Assistant and allow Almond to control them. In turn, we have upgraded the conversation integration in Home Assistant to support Almond, allowing users to converse with Almond via the frontend. + +

Screenshot showing Almond integration in Home Assistant.Screenshot showing Almond integration in Home Assistant.

+ +Almond will be available to users today in the Home Assistant 0.102 release. It requires Almond Server, which you can either install yourself, use the new Almond hass.io add-on or rely on Almond Web, a cloud version hosted by Stanford. By default, Almond Server will rely on a cloud version of LUInet, but it is possible to run it locally. + +Almond is set up in a way such that your privacy is still partially preserved even with LUInet running in the cloud. This is made possible because LUInet is only responsible for converting the text into a program, whose details are filled in locally by the Almond Server. For example, LUInet will convert "turn on the lights" into code that Almond Server understands. Only Almond Server will know which lights the user has, how to control them and the context of how the text was received. + +### Almond vs … + +You're probably wondering if Almond is as good as Alexa or Google. And it's not yet. However, it doesn't matter. + +If you want to have an assistant in your home that is to know everything about you, it needs to be one that cares about privacy. It needs to be one that is open. That's not negotionable. + +Almond has room for improvement. But it's open source, and with the Home Assistant community we'll work with the Almond team on making it better. And you can start helping right now: + +Almond is gathering sentences that you want to use to control the devices in your home. We already have a basic set of sentences, but the more the better. You can submit those sentences [here](https://docs.google.com/forms/d/e/1FAIpQLSeStJfjvueNAiueRVmP47XALRaJlx7tttzJjRfVjX4J546-uA/viewform). + +You are also able to help train LUInet directly by teaching it how to interpretet sentences [here](https://almond.stanford.edu/developers/train). + +## Ada + +Almond is not the full story. Almond only works with text input, and generates text as output. It doesn't handle speech-to-text to receive input nor text-to-speech to speak answers. Those technologies are out of scope for Almond. However, not out of scope for Home Assistant! Home Assistant already has a text-to-speech integration with different backends. In Home Assistant 0.102 we're introducing a new speech-to-text integration to complement this. + +Now we almost have all the pieces for a voice assistant built-in to Home Assistant, and so we decided to finish it off by introducing a new project called [Ada](https://github.com/home-assistant/ada). Ada integrates hotword detection and will route all data to the various integrations to provide a full voice assistant experience. + +Architectural overview of how all pieces fit together. + +Ada is still very much in the beginning. We'll be working on improving it. If you have expertise in this area and want to help, please get in touch. + +Ada will also be available as a [Hass.io](http://hass.io) add-on. This means that you can plug a microphone and speakers into your Raspberry Pi and turn Hass.io into a full, privacy focused, voice assistant. + +To make it easier to add speech-to-text and text-to-speech integrations to your system, Nabu Casa is introducing a new beta service offering speech-to-text and text-to-speech services to Home Assistant Cloud subscribers powered by Azure Cognitive Services. + +
+ +
+ +## Can a virtual assistant still be private if parts run in the cloud? + +With Home Assistant we care about privacy and local control. We want to be able to offer home automation that keeps working if there is no internet. Home automation that is fast and reliable. + +But we also want privacy to be accessible. A user should be able to get a private solution without running a big server at home. Privacy should not be something that is reserved for the rich. + +With the current approach, some things will still run in the cloud, but the home data and control stays local. We will bring more things local when faster technology becomes more accessible and/or new projects emerge that can help with this. + +We cannot wait until all the pieces are in place to run 100% locally. We need to help build the future we want to see. + +## What's next? + +With Almond and Ada we've put the building blocks in place to create voice assistants. It's now time to use it, improve it and surprise us by sharing the things you'll use it for. diff --git a/source/_posts/2019-11-20-release-102.markdown b/source/_posts/2019-11-20-release-102.markdown index 712645ee0ff..74a8ff711da 100644 --- a/source/_posts/2019-11-20-release-102.markdown +++ b/source/_posts/2019-11-20-release-102.markdown @@ -70,6 +70,8 @@ scene: !include scenes.yaml https://github.com/tuanha2000vn/hasskit/ +https://www.reddit.com/r/homeassistant/comments/dz1qsi/picture_elements_are_so_fun_i_made_a_bad_video/ + ## New Integrations - Add Unifi Led ([@florisvdk] - [#27475]) ([unifiled docs]) (new-integration) @@ -103,34 +105,36 @@ Experiencing issues introduced by this release? Please report them in our [issue ## Breaking Changes -- __Huawei LTE__ - Configuration has been consolidated below `huawei_lte`. Device tracker no longer uses known_devices.yaml but entity registry. - ([@scop] - [#26675]) ([huawei_lte docs]) - +- **Huawei LTE** - Configuration has been consolidated below `huawei_lte`. Device tracker no longer uses known_devices.yaml but entity registry. - ([@scop] - [#26675]) ([huawei_lte docs]) + Example configuration yaml: + ```yaml huawei_lte: - url: http://192.168.100.1/ username: admin password: something ``` - -- __Ikea Tradfri__ - This removes the battery sensor that was created for the signal repeater. The sensor would never have a state, and after some inspection, it does not look like that device present any valuable metrics. - ([@ludeeus] - [#28181]) ([tradfri docs]) -- __UPNP/IGD__ - All UPNP/IGD sensors are now in one device. You have to remove and re-add the integration to get rid of the previous devices. ([@escoand] - [#27517]) ([upnp docs]) +- **Ikea Tradfri** - This removes the battery sensor that was created for the signal repeater. The sensor would never have a state, and after some inspection, it does not look like that device present any valuable metrics. - ([@ludeeus] - [#28181]) ([tradfri docs]) -- __PS4__ - State `off` is now State `standby`. Affects user defined scripts, automations, etc. ([@ktnrg45] - [#28261]) ([ps4 docs]) +- **UPNP/IGD** - All UPNP/IGD sensors are now in one device. You have to remove and re-add the integration to get rid of the previous devices. ([@escoand] - [#27517]) ([upnp docs]) -- __SSDP__ - `ssdp` in manifest.json has changed; it is now a list of dicts, and as we now match using the UPnP device description fields directly, `device_type` has to be renamed to `deviceType`. No included integrations use it at the moment, nor are they broken by this change. If any custom integrations are using it, they need to adjust accordingly. ([@scop] - [#28285]) ([ssdp docs]) +- **PS4** - State `off` is now State `standby`. Affects user defined scripts, automations, etc. ([@ktnrg45] - [#28261]) ([ps4 docs]) -- __HomematicIP Cloud__ - The attribute naming between Homematic IP `HmIP-BSM` (light) and `HmIP-FSM/HmIP-PSM` (switch) was different and in case of light not correct. The attributes for `HmIP-BSM` have been renamed: - - * energy_counter_kwh --> today_energy_kwh - * power_consumption --> current_power_w +- **SSDP** - `ssdp` in manifest.json has changed; it is now a list of dicts, and as we now match using the UPnP device description fields directly, `device_type` has to be renamed to `deviceType`. No included integrations use it at the moment, nor are they broken by this change. If any custom integrations are using it, they need to adjust accordingly. ([@scop] - [#28285]) ([ssdp docs]) + +- **HomematicIP Cloud** - The attribute naming between Homematic IP `HmIP-BSM` (light) and `HmIP-FSM/HmIP-PSM` (switch) was different and in case of light not correct. The attributes for `HmIP-BSM` have been renamed: + + - energy_counter_kwh --> today_energy_kwh + - power_consumption --> current_power_w Please check your automations, scripts, scenes, etc., if you are using the old attributes in templates, and replace them with the new ones. - ([@SukramJ] - [#28271]) ([homematicip_cloud docs]) -- __Plugwise__ - Detection of a legacy Anna (firmware 1.8.x) is no longer automatic: owners of a legacy Anna have to provide info in configuration.yaml, the last line. This change was needed to be able to fix issue #26520. - ([@bouwew] - [#28237]) ([plugwise docs]) +- **Plugwise** - Detection of a legacy Anna (firmware 1.8.x) is no longer automatic: owners of a legacy Anna have to provide info in configuration.yaml, the last line. This change was needed to be able to fix issue #26520. - ([@bouwew] - [#28237]) ([plugwise docs]) Example configuration yaml: + ```yaml climate: - platform: plugwise @@ -138,19 +142,20 @@ Experiencing issues introduced by this release? Please report them in our [issue password: your_password host: your_anna_ip legacy_anna: true - ``` - -- __Android TV__ - The `source` and `sources_list` attributes for Fire TV devices will use friendly app names instead of app IDs (e.g., "Netflix" instead of "com.netflix.ninja"). If you are using these attributes in automations, sensors, etc., you will need to update them. - * If you are currently checking that the `source` attribute of a Fire TV device is a particular app ID, you have two options: - * Check the `app_id` attribute instead - * Replace that app ID with the friendly name for the app. - * If you are currently checking the `sources_list` attribute, then you will need to check for friendly app names instead of app IDs. - - You can still use app IDs for the media_player.select_source service. - ([@JeffLIrion] - [#28417]) ([androidtv docs]) - -- __Homekit__ - Thermostats supported by the Homekit Controller component were reporting "off" for the running status when the HVAC was powered on but not actively heating or cooling. This `hvac_action` attribute will now properly return "idle" instead of off. Any logic that tests for the `hvac_action` condition of `off` will need to change to `idle`. There is no change to any other states. - ([@GaryOkie] - [#28625]) ([homekit_controller docs]) + ``` -- __OpenALPR local__ - The "alp_bin" option has been corrected to "alpr_bin" as is outlined in the documentation. Users should check their config and update if necessary. ([@HexF] - [#28746]) ([openalpr_local docs]) +- **Android TV** - The `source` and `sources_list` attributes for Fire TV devices will use friendly app names instead of app IDs (e.g., "Netflix" instead of "com.netflix.ninja"). If you are using these attributes in automations, sensors, etc., you will need to update them. + + - If you are currently checking that the `source` attribute of a Fire TV device is a particular app ID, you have two options: + - Check the `app_id` attribute instead + - Replace that app ID with the friendly name for the app. + - If you are currently checking the `sources_list` attribute, then you will need to check for friendly app names instead of app IDs. + + You can still use app IDs for the media_player.select_source service. - ([@JeffLIrion] - [#28417]) ([androidtv docs]) + +- **Homekit** - Thermostats supported by the Homekit Controller component were reporting "off" for the running status when the HVAC was powered on but not actively heating or cooling. This `hvac_action` attribute will now properly return "idle" instead of off. Any logic that tests for the `hvac_action` condition of `off` will need to change to `idle`. There is no change to any other states. - ([@GaryOkie] - [#28625]) ([homekit_controller docs]) + +- **OpenALPR local** - The "alp_bin" option has been corrected to "alpr_bin" as is outlined in the documentation. Users should check their config and update if necessary. ([@HexF] - [#28746]) ([openalpr_local docs]) ## Beta Fixes diff --git a/source/images/blog/2019-voice-assistant/almond.png b/source/images/blog/2019-voice-assistant/almond.png new file mode 100644 index 0000000000000000000000000000000000000000..7f6fe69d02cc2bc8dd0f5f8b2b7f956695021297 GIT binary patch literal 31657 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 X^TS4yN6Y=+f!m6*sxswLrl0>0fc3=! literal 0 HcmV?d00001 diff --git a/source/images/blog/2019-voice-assistant/overview.svg b/source/images/blog/2019-voice-assistant/overview.svg new file mode 100644 index 00000000000..9862215b052 --- /dev/null +++ b/source/images/blog/2019-voice-assistant/overview.svg @@ -0,0 +1 @@ + From f03e37cca2b9027ac53435cbd8a6c3479f19b857 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Wed, 20 Nov 2019 22:18:48 +0100 Subject: [PATCH 48/56] Grammar updates for Almond/Ada blog post --- ...0-privacy-focused-voice-assistant.markdown | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/source/_posts/2019-11-20-privacy-focused-voice-assistant.markdown b/source/_posts/2019-11-20-privacy-focused-voice-assistant.markdown index 388562f5957..178a7a8bf10 100644 --- a/source/_posts/2019-11-20-privacy-focused-voice-assistant.markdown +++ b/source/_posts/2019-11-20-privacy-focused-voice-assistant.markdown @@ -1,7 +1,7 @@ --- layout: post -title: "Almond & Ada: Privacy focused voice assistant" -description: "Say Hi! to Almond, a privacy focused virtual assistant and Ada, a voice assistant powered by Home Assistant." +title: "Almond & Ada: A privacy-focused voice assistant" +description: "Say Hi! to Almond, a privacy-focused virtual assistant and Ada, a voice assistant powered by Home Assistant." date: 2019-11-14 0:43:02 date_formatted: "November 20, 2019" author: Paulus Schoutsen @@ -11,51 +11,51 @@ categories: Announcements og_image: /images/blog/2019-voice-assistant/almond.png --- -TL; DR: +TL;DR: - Teamed up with [Almond](https://almond.stanford.edu/), available in Home Assistant 0.102. -- Introducing [Ada](https://github.com/home-assistant/ada), voice assistant powered by Home Assistant integrations. Available as hass.io add-on. +- Introducing [Ada](https://github.com/home-assistant/ada), voice assistant powered by Home Assistant integrations. Available as Hass.io add-on. - New beta speech-to-text and text-to-speech service for Home Assistant Cloud subscribers. --- -Voice assistants are a great way to interact with your house, ask a quick question, set a timer or control your devices. The more an assistant know about you, your home and it's other inhabitants, the better it is able to help you. +Voice assistants are a great way to interact with your house, ask a quick question, set a timer or control your devices. The more an assistant knows about you, your home and it's other inhabitants, the better it is able to help you. -Todays available virtual assistants work great, but they have a big problem. They store your data in the cloud, don't provide APIs to allow other companies to build products on top and are run by companies whose core business is building profiles on their users to help serve ads and product suggestions. +Today's available virtual assistants work great, but they have a big problem: They store your data in the cloud, don't provide APIs to allow other companies to build products on top and are run by companies whose core business is building profiles on their users to help serve ads and product suggestions. The backbone to our homes needs to be one that keeps data local and has APIs allowing other companies to build on top. Innovation happens when many different people, with many different backgrounds, do many different experiments until we find something that sticks. This cannot be left to a single company. -Recently we got in touch with the [Open Virtual Assistant Lab at Stanford University](https://oval.cs.stanford.edu/). They have been working the last four years on a virtual assistant named Almond. And it's a perfect match for Home Assistant. +Recently we got in touch with the [Open Virtual Assistant Lab at Stanford University](https://oval.cs.stanford.edu/). In the last four years, they have been working on a virtual assistant named Almond. And it's a perfect match for Home Assistant. ## Almond -[Almond](https://almond.stanford.edu/) is an open, privacy preserving virtual assistant that is open source. With Almond, you can run a virtual assistant at home that can tell you the news or control your house. It is powered by [LUInet](https://almond.stanford.edu/doc/genie-intro.md), a state-of-the-art neural network developed at Stanford. And it now works with Home Assistant. +[Almond](https://almond.stanford.edu/) is an open, privacy-preserving virtual assistant that is open source. With Almond, you can run a virtual assistant at home, that can tell you the news or control your house. It is powered by [LUInet](https://almond.stanford.edu/doc/genie-intro.md), a state-of-the-art neural network developed at Stanford. And it now works with Home Assistant. The Almond team has updated Almond to make it aware of all the different device types in Home Assistant and allow Almond to control them. In turn, we have upgraded the conversation integration in Home Assistant to support Almond, allowing users to converse with Almond via the frontend.

Screenshot showing Almond integration in Home Assistant.Screenshot showing Almond integration in Home Assistant.

-Almond will be available to users today in the Home Assistant 0.102 release. It requires Almond Server, which you can either install yourself, use the new Almond hass.io add-on or rely on Almond Web, a cloud version hosted by Stanford. By default, Almond Server will rely on a cloud version of LUInet, but it is possible to run it locally. +Almond is available to users today in Home Assistant 0.102. It requires an Almond Server, which you can either install yourself, use the new Almond Hass.io add-on or rely on Almond Web, a cloud version hosted by Stanford. By default, Almond Server will rely on a cloud version of LUInet, but it is possible to run it locally. Almond is set up in a way such that your privacy is still partially preserved even with LUInet running in the cloud. This is made possible because LUInet is only responsible for converting the text into a program, whose details are filled in locally by the Almond Server. For example, LUInet will convert "turn on the lights" into code that Almond Server understands. Only Almond Server will know which lights the user has, how to control them and the context of how the text was received. -### Almond vs … +### Almond vs. … You're probably wondering if Almond is as good as Alexa or Google. And it's not yet. However, it doesn't matter. -If you want to have an assistant in your home that is to know everything about you, it needs to be one that cares about privacy. It needs to be one that is open. That's not negotionable. +If you want to have an assistant in your home that knows everything about you, it needs to be one that cares about privacy. It needs to be one that is open. That's not negotiable. -Almond has room for improvement. But it's open source, and with the Home Assistant community we'll work with the Almond team on making it better. And you can start helping right now: +Almond has room for improvement. But it's open source, and with the Home Assistant community, we'll work with the Almond team on making it better. You can start helping right now: -Almond is gathering sentences that you want to use to control the devices in your home. We already have a basic set of sentences, but the more the better. You can submit those sentences [here](https://docs.google.com/forms/d/e/1FAIpQLSeStJfjvueNAiueRVmP47XALRaJlx7tttzJjRfVjX4J546-uA/viewform). +Almond is gathering sentences that you want to use to control the devices in your home. We already have a basic set of sentences, but the more, the better. You can submit those sentences [using this form](https://docs.google.com/forms/d/e/1FAIpQLSeStJfjvueNAiueRVmP47XALRaJlx7tttzJjRfVjX4J546-uA/viewform). -You are also able to help train LUInet directly by teaching it how to interpretet sentences [here](https://almond.stanford.edu/developers/train). +You are also able to help train LUInet directly by teaching it how to interpret sentences [here](https://almond.stanford.edu/developers/train). ## Ada -Almond is not the full story. Almond only works with text input, and generates text as output. It doesn't handle speech-to-text to receive input nor text-to-speech to speak answers. Those technologies are out of scope for Almond. However, not out of scope for Home Assistant! Home Assistant already has a text-to-speech integration with different backends. In Home Assistant 0.102 we're introducing a new speech-to-text integration to complement this. +Almond is not the full story. Almond only works with text input, and generates text as output. It doesn't handle speech-to-text to receive input nor text-to-speech to speak answers. Those technologies are out of scope for Almond. However, not out of scope for Home Assistant! Home Assistant already has a text-to-speech integration with different backends. In Home Assistant 0.102, we're introducing a new speech-to-text integration to complement this. Now we almost have all the pieces for a voice assistant built-in to Home Assistant, and so we decided to finish it off by introducing a new project called [Ada](https://github.com/home-assistant/ada). Ada integrates hotword detection and will route all data to the various integrations to provide a full voice assistant experience. @@ -63,9 +63,9 @@ Now we almost have all the pieces for a voice assistant built-in to Home Assista Ada is still very much in the beginning. We'll be working on improving it. If you have expertise in this area and want to help, please get in touch. -Ada will also be available as a [Hass.io](http://hass.io) add-on. This means that you can plug a microphone and speakers into your Raspberry Pi and turn Hass.io into a full, privacy focused, voice assistant. +Ada is also available as a [Hass.io](http://hass.io) add-on. This means that you can plug a microphone and speakers into your Raspberry Pi and turn Hass.io into a full, privacy-focused, voice assistant. -To make it easier to add speech-to-text and text-to-speech integrations to your system, Nabu Casa is introducing a new beta service offering speech-to-text and text-to-speech services to Home Assistant Cloud subscribers powered by Azure Cognitive Services. +To make it easier to add speech-to-text and text-to-speech integrations to your system, Nabu Casa is introducing a new beta service offering speech-to-text and text-to-speech services to Home Assistant Cloud subscribers, powered by Azure Cognitive Services.
@@ -73,14 +73,14 @@ To make it easier to add speech-to-text and text-to-speech integrations to your ## Can a virtual assistant still be private if parts run in the cloud? -With Home Assistant we care about privacy and local control. We want to be able to offer home automation that keeps working if there is no internet. Home automation that is fast and reliable. +With Home Assistant we care about privacy and local control. We want to be able to offer home automation that keeps working if there is no internet. Home automation, that is fast and reliable. But we also want privacy to be accessible. A user should be able to get a private solution without running a big server at home. Privacy should not be something that is reserved for the rich. -With the current approach, some things will still run in the cloud, but the home data and control stays local. We will bring more things local when faster technology becomes more accessible and/or new projects emerge that can help with this. +With the current approach, some things will still run in the cloud, but the home data and control stays local. We will bring more things local when faster technology becomes more accessible or new projects emerge that can help with this. We cannot wait until all the pieces are in place to run 100% locally. We need to help build the future we want to see. ## What's next? -With Almond and Ada we've put the building blocks in place to create voice assistants. It's now time to use it, improve it and surprise us by sharing the things you'll use it for. +With Almond and Ada, we've put the building blocks in place to create voice assistants. It's now time to use it, improve it and surprise us by sharing the things you'll use it for. From 7cebe520738154fc681c0adc42299ffe6d8f04af Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 20 Nov 2019 15:44:39 -0800 Subject: [PATCH 49/56] more text --- source/_integrations/almond.markdown | 60 ++++++++++ source/_integrations/somfy.markdown | 56 ++++++--- ...0-privacy-focused-voice-assistant.markdown | 12 +- source/_posts/2019-11-20-release-102.markdown | 113 ++++++++++++++++-- .../blog/2019-voice-assistant/telegram.png | Bin 0 -> 66875 bytes .../almond/almond-architecture.svg | 1 + source/images/supported_brands/almond.png | Bin 0 -> 13791 bytes 7 files changed, 214 insertions(+), 28 deletions(-) create mode 100644 source/_integrations/almond.markdown create mode 100644 source/images/blog/2019-voice-assistant/telegram.png create mode 100644 source/images/integrations/almond/almond-architecture.svg create mode 100644 source/images/supported_brands/almond.png diff --git a/source/_integrations/almond.markdown b/source/_integrations/almond.markdown new file mode 100644 index 00000000000..3da27007a39 --- /dev/null +++ b/source/_integrations/almond.markdown @@ -0,0 +1,60 @@ +--- +title: "Almond" +description: "Instructions on how to setup Almond within Home Assistant." +logo: almond.png +ha_category: + - Voice +ha_iot_class: Local Polling +ha_release: "0.102" +--- + +[Almond](https://almond.stanford.edu/) is an open, privacy-preserving virtual assistant by [Stanford Open Virtual Assistant Lab](https://oval.cs.stanford.edu/). It allows you, among other things, to control Home Assistant using natural language. Once installed, it will be available on Lovelace via the microphone icon in the top right. + +Almond consists of three parts: + +- Almond Server: Knows about Home Assistant and your data. Executes your sentences. +- LUInet: Neural network that converts your sentences into Thingtalk programs. +- Thingpedia: Skills that provide the building blocks for Thingtalk programs. + +Architectural overview of how all pieces fit together. + +## Installation + +### Hass.io installation + +To install Almond Server on Hass.io, go to Hass.io App Store, search for Almond and click on Install. Once started, it will initiate a config flow to finish set up in Home Assistant. You can find it on the integrations page in the configuration panel. + +### Manual installation + +You can install Almond Server by following [the instructions in their README](https://github.com/stanford-oval/almond-server#running-almond-server). + +Before linking it to Home Assistant, you will need to visit the Almond UI once to create a password. It is by default available on port 3000. + +Once installed, configure Almond like this: + +```yaml +# Example configuration.yaml entry +almond: + type: local + host: http://127.0.0.1:3000 +``` + +The Almond integration does not update config entries yet. If you make a change to configuration.yaml, you will need to remove the config entry and then restart Home Assistant. + +### Almond Web + +Stanford offers a hosted version of Almond Server called Almond Web. To use this, go to the integrations page and add Almond using the add integration flow. + +### Almond Web - Manual installation + +It is possible to set up Almond Web manually. You will need to create your own client ID and secret in the web interface. + +```yaml +# Example configuration.yaml entry +almond: + type: oauth2 + client_id: AAAAAAAAAAAAA + client_secret: BBBBBBBBBBBBBBBBB +``` + +You can now go to the integrations page and start the configuration flow. diff --git a/source/_integrations/somfy.markdown b/source/_integrations/somfy.markdown index e90bdc2c553..a8b063187a1 100644 --- a/source/_integrations/somfy.markdown +++ b/source/_integrations/somfy.markdown @@ -10,18 +10,30 @@ ha_release: 0.95 The Somfy integration will allow users to integrate their Somfy devices into Home Assistant using the [official API](https://developer.somfy.com/somfy-open-api/apis), unlike the [tahoma](/integrations/tahoma/) component. -### Setting up developer account +## Installation -To connect Somfy, you need to set up a developer account. +Somfy is leveraging the new account linking service. This means that to set up Somfy, you only need to go to the integrations page and click on add new integration. + +
+ +
+ +## Installation with own developer account + +It is possible to create your own developer account and configure Somfy via that. + +### Setting up developer account 1. Visit [https://developer.somfy.com](https://developer.somfy.com). 2. Log in using your Somfy credentials. -3. Open the *My Apps* menu. +3. Open the _My Apps_ menu. 4. Add a new App: - - App Name: Home Assistant - - Callback URL: `/auth/external/callback` - - Description: Home Assistant instance - - Product: Somfy Open API + +- App Name: Home Assistant +- Callback URL: `/auth/external/callback` +- Description: Home Assistant instance +- Product: Somfy Open API + 5. Once Home Assistant restarted, go to Configuration>Integrations. 6. Select the Somfy integration. @@ -36,13 +48,13 @@ somfy: {% configuration %} client_id: - description: Your Somfy consumer key. - required: true - type: string +description: Your Somfy consumer key. +required: true +type: string client_secret: - description: Your Somfy consumer secret. - required: true - type: string +description: Your Somfy consumer secret. +required: true +type: string {% endconfiguration %} ### Potential duplicate with the Tahoma integration @@ -54,5 +66,21 @@ If you use the [tahoma](/integrations/tahoma) component, you will have to exclud tahoma: username: YOUR_USERNAME password: YOUR_PASSWORD - exclude: ['rts:RollerShutterRTSComponent','rts:CurtainRTSComponent','rts:BlindRTSComponent','rts:VenetianBlindRTSComponent','rts:DualCurtainRTSComponent','rts:ExteriorVenetianBlindRTSComponent','io:ExteriorVenetianBlindIOComponent','io:RollerShutterUnoIOComponent','io:RollerShutterWithLowSpeedManagementIOComponent','io:RollerShutterVeluxIOComponent','io:RollerShutterGenericIOComponent','io:WindowOpenerVeluxIOComponent','io:VerticalExteriorAwningIOComponent','io:HorizontalAwningIOComponent'] + exclude: + [ + "rts:RollerShutterRTSComponent", + "rts:CurtainRTSComponent", + "rts:BlindRTSComponent", + "rts:VenetianBlindRTSComponent", + "rts:DualCurtainRTSComponent", + "rts:ExteriorVenetianBlindRTSComponent", + "io:ExteriorVenetianBlindIOComponent", + "io:RollerShutterUnoIOComponent", + "io:RollerShutterWithLowSpeedManagementIOComponent", + "io:RollerShutterVeluxIOComponent", + "io:RollerShutterGenericIOComponent", + "io:WindowOpenerVeluxIOComponent", + "io:VerticalExteriorAwningIOComponent", + "io:HorizontalAwningIOComponent", + ] ``` diff --git a/source/_posts/2019-11-20-privacy-focused-voice-assistant.markdown b/source/_posts/2019-11-20-privacy-focused-voice-assistant.markdown index 178a7a8bf10..376a8c28cc6 100644 --- a/source/_posts/2019-11-20-privacy-focused-voice-assistant.markdown +++ b/source/_posts/2019-11-20-privacy-focused-voice-assistant.markdown @@ -1,6 +1,6 @@ --- layout: post -title: "Almond & Ada: A privacy-focused voice assistant" +title: "Almond & Ada: privacy-focused voice assistant" description: "Say Hi! to Almond, a privacy-focused virtual assistant and Ada, a voice assistant powered by Home Assistant." date: 2019-11-14 0:43:02 date_formatted: "November 20, 2019" @@ -41,9 +41,9 @@ Almond is available to users today in Home Assistant 0.102. It requires an Almon Almond is set up in a way such that your privacy is still partially preserved even with LUInet running in the cloud. This is made possible because LUInet is only responsible for converting the text into a program, whose details are filled in locally by the Almond Server. For example, LUInet will convert "turn on the lights" into code that Almond Server understands. Only Almond Server will know which lights the user has, how to control them and the context of how the text was received. -### Almond vs. … +### How Almond compares to Google/Alexa -You're probably wondering if Almond is as good as Alexa or Google. And it's not yet. However, it doesn't matter. +You're probably wondering if Almond is as good as Alexa or Google. And it's not yet as good. However, it doesn't matter. If you want to have an assistant in your home that knows everything about you, it needs to be one that cares about privacy. It needs to be one that is open. That's not negotiable. @@ -84,3 +84,9 @@ We cannot wait until all the pieces are in place to run 100% locally. We need to ## What's next? With Almond and Ada, we've put the building blocks in place to create voice assistants. It's now time to use it, improve it and surprise us by sharing the things you'll use it for. + +## Bonus + +I hacked together a quick prototype to allow you to talk to Almond via a Telegram Bot! It's available as a [custom component](https://gist.github.com/balloob/d59cae89d19a14bcec99ce1bde05bd44). + +

Screenshot of talking to Almond via Telegram.Screenshot of talking to Almond via Telegram.

diff --git a/source/_posts/2019-11-20-release-102.markdown b/source/_posts/2019-11-20-release-102.markdown index 74a8ff711da..e6df2de77d8 100644 --- a/source/_posts/2019-11-20-release-102.markdown +++ b/source/_posts/2019-11-20-release-102.markdown @@ -1,6 +1,6 @@ --- layout: post -title: "0.102: TBD - UPDATE DATE" +title: "0.102: Official Android App, Almond, Scene editor" description: "TBD" date: 2019-11-14 0:41:02 date_formatted: "November 20, 2019" @@ -11,13 +11,37 @@ categories: Release-Notes og_image: /images/blog/2019-10-0.102/components.png --- -Almond. Account linking. Mobile apps. WLED - platinum. -Submit new sentences for Almond: https://docs.google.com/forms/d/e/1FAIpQLSeStJfjvueNAiueRVmP47XALRaJlx7tttzJjRfVjX4J546-uA/viewform +Home Assistant 0.102 is here ! It's been quite the trip as we hosted our annual State of the Union last week, which took a lot of energy away from our release. This doesn't mean that we don't have anything to share, just that the notes might be a little less polished. -Android app. -Scene services. +First, we had our State of the Union! It was great. You can watch it back [on YouTube](https://youtu.be/tc17q1Zn0Xs?t=434) or keep an eye out for the blog post coming soon that will summarize all the announcements. -### Create automations with natural language +Alright, so what's new? A lot. + +## Android App released! + +At the State of the Union we announced that we have released the initial version of the official [Home Assistant Android app](https://play.google.com/store/apps/details?id=io.homeassistant.companion.android). It's still a work in progress, but the basic version already works. + +It's been developed by [@CedrickFlocon](https://github.com/CedrickFlocon) and the source is [available on GitHub](https://play.google.com/store/apps/details?id=io.homeassistant.companion.android). We've already seen some other developers step in, so that's great! Keep it coming. + +## Private Voice Assistant + +We teamed up with Stanford to tightly integrate their open, privacy-preserving virtual assistant Almond into Home Assistant. For more information, see the [separate blog post](/blog/2019/11/14/privacy-focused-voice-assistant/). + +## Account Linking + +Some companies only allow us to integrate with their products via cloud APIs. These cloud APIs often use [the OAuth2 specification](https://tools.ietf.org/html/rfc6749) to link accounts. The problem with this specification is that it cannot properly handle non-public or decentralized installations. + +So if you were to link an integration via OAuth2 before today, you would have to sign up for a developer account, configure Home Assistant and expose your instance publicly before you got to the part where you can link your account. That's not good! + +Home Assistant Cloud is introducing a new account linking service that will be freely available for everyone – no cloud account required. With this service, Home Assistant controls the developer account, and users will just need to link their accounts. + +
+ +
+ +The first integration to use this new service is [Somfy][somfy docs]. Manual installation is also still possible. This integration is built on top of our [new OAuth2 framework](https://developers.home-assistant.io/docs/en/config_entries_config_flow_handler.html#configuration-via-oauth2). We expect more integration developers to migrate OAuth2 integrations in the future. + +## Create automations with natural language As an experimental feature, we have added a new way to create automations. With the help of Almond, we can transform natural language into Home Assistant automations. @@ -30,7 +54,7 @@ When you click the **+** in the automation editor to add a new automation, you w Be advised that not all devices are supported yet, and that Almond needs more training for better responses. Check the Almond part for how you can help make Almond better. -### Scene editor +## Scene editor

Screenshot of the scene editor. @@ -75,7 +99,6 @@ https://www.reddit.com/r/homeassistant/comments/dz1qsi/picture_elements_are_so_f ## New Integrations - Add Unifi Led ([@florisvdk] - [#27475]) ([unifiled docs]) (new-integration) -- Add available state to unifiled integration ([@florisvdk] - [#28189]) ([unifiled docs]) (new-integration) - Almond integration ([@balloob] - [#28282]) ([almond docs]) (new-integration) - Speech to Text component ([@pvizeli] - [#28434]) ([demo docs]) ([stt docs]) (new-integration) - Add WLED integration ([@frenck] - [#28542]) ([wled docs]) (new-integration) @@ -89,9 +112,7 @@ https://www.reddit.com/r/homeassistant/comments/dz1qsi/picture_elements_are_so_f - Add switches (on/off zones) to geniushub ([@castaway] - [#28182]) ([geniushub docs]) (new-platform) - Add config endpoint for scene ([@bramkragten] - [#28429]) ([config docs]) ([homeassistant docs]) (new-platform) - Add override switch for juicenet ([@jesserockz] - [#28049]) ([juicenet docs]) (new-platform) -- Add additional support over NC ([@pvizeli] - [#28527]) ([cloud docs]) ([stt docs]) (new-platform) -- Add switch platform to WLED integration ([@frenck] - [#28606]) ([wled docs]) (new-platform) -- Add sensor platform to WLED integration ([@frenck] - [#28632]) ([wled docs]) (new-platform) +- Add SST/TTS support over NC ([@pvizeli] - [#28527]) ([cloud docs]) ([stt docs]) (new-platform) ## If you need help... @@ -162,6 +183,25 @@ Experiencing issues introduced by this release? Please report them in our [issue - Bump ZHA quirks to 0.0.28 ([@dmulcahey] - [#28750]) ([zha docs]) (beta fix) - Updated frontend to 20191114.0 ([@bramkragten] - [#28768]) ([frontend docs]) (beta fix) - Fix account link version check ([@balloob] - [#28770]) ([cloud docs]) (beta fix) +- Fix amazon dependency conflicts ([@bbrendon] - [#28217]) ([amazon_polly docs]) ([aws docs]) (beta fix) +- Change unique id for SAJ sensor based on device SN ([@fredericvl] - [#28663]) ([saj docs]) (breaking change) (beta fix) +- Fix changing venstar operation_mode ([@iamtpage] - [#28754]) ([venstar docs]) (beta fix) +- Fix Repetier integration entity indexing ([@MTrab] - [#28766]) ([repetier docs]) (beta fix) +- Fix HomematicIP Cloud Alarm Control Panel support for basic mode ([@SukramJ] - [#28778]) ([homematicip_cloud docs]) (beta fix) +- Fix Swisscom empty response received ([@LeoCal] - [#28782]) ([swisscom docs]) (beta fix) +- Fix broken postnl sensor ([@peternijssen] - [#28794]) ([postnl docs]) (beta fix) +- Updated frontend to 20191115.0 ([@bramkragten] - [#28797]) ([frontend docs]) (beta fix) +- Fix Comfoconnect errors during startup ([@michaelarnauts] - [#28802]) ([comfoconnect docs]) (beta fix) +- Fix miio air quality sensor ([@valkjsaaa] - [#28828]) ([xiaomi_miio docs]) (beta fix) +- Update pyatmo to 3.0.1 ([@cgtobi] - [#28829]) ([netatmo docs]) (beta fix) +- Updated frontend to 20191118.0 ([@bramkragten] - [#28852]) ([frontend docs]) (beta fix) +- Fix documentation URL in failed platform config check ([@frenck] - [#28814]) (beta fix) +- Fix Synology camera whitelist ([@h4de5] - [#28822]) ([synology docs]) (beta fix) +- Fix setting colors while reproducing a lights state ([@Santobert] - [#28871]) ([light docs]) (beta fix) +- Updated frontend to 20191119.0 ([@bramkragten] - [#28875]) ([frontend docs]) (beta fix) +- Updated frontend to 20191119.1 ([@bramkragten] - [#28881]) ([frontend docs]) (beta fix) +- Updated frontend to 20191119.2 ([@bramkragten] - [#28896]) ([frontend docs]) (beta fix) +- Fix Almond onboarding url when using cloud ([@bramkragten] - [#28908]) ([almond docs]) (beta fix) ## All changes @@ -382,6 +422,25 @@ Experiencing issues introduced by this release? Please report them in our [issue - Bump ZHA quirks to 0.0.28 ([@dmulcahey] - [#28750]) ([zha docs]) (beta fix) - Updated frontend to 20191114.0 ([@bramkragten] - [#28768]) ([frontend docs]) (beta fix) - Fix account link version check ([@balloob] - [#28770]) ([cloud docs]) (beta fix) +- Fix amazon dependency conflicts ([@bbrendon] - [#28217]) ([amazon_polly docs]) ([aws docs]) (beta fix) +- Change unique id for SAJ sensor based on device SN ([@fredericvl] - [#28663]) ([saj docs]) (breaking change) (beta fix) +- Fix changing venstar operation_mode ([@iamtpage] - [#28754]) ([venstar docs]) (beta fix) +- Fix Repetier integration entity indexing ([@MTrab] - [#28766]) ([repetier docs]) (beta fix) +- Fix HomematicIP Cloud Alarm Control Panel support for basic mode ([@SukramJ] - [#28778]) ([homematicip_cloud docs]) (beta fix) +- Fix Swisscom empty response received ([@LeoCal] - [#28782]) ([swisscom docs]) (beta fix) +- Fix broken postnl sensor ([@peternijssen] - [#28794]) ([postnl docs]) (beta fix) +- Updated frontend to 20191115.0 ([@bramkragten] - [#28797]) ([frontend docs]) (beta fix) +- Fix Comfoconnect errors during startup ([@michaelarnauts] - [#28802]) ([comfoconnect docs]) (beta fix) +- Fix miio air quality sensor ([@valkjsaaa] - [#28828]) ([xiaomi_miio docs]) (beta fix) +- Update pyatmo to 3.0.1 ([@cgtobi] - [#28829]) ([netatmo docs]) (beta fix) +- Updated frontend to 20191118.0 ([@bramkragten] - [#28852]) ([frontend docs]) (beta fix) +- Fix documentation URL in failed platform config check ([@frenck] - [#28814]) (beta fix) +- Fix Synology camera whitelist ([@h4de5] - [#28822]) ([synology docs]) (beta fix) +- Fix setting colors while reproducing a lights state ([@Santobert] - [#28871]) ([light docs]) (beta fix) +- Updated frontend to 20191119.0 ([@bramkragten] - [#28875]) ([frontend docs]) (beta fix) +- Updated frontend to 20191119.1 ([@bramkragten] - [#28881]) ([frontend docs]) (beta fix) +- Updated frontend to 20191119.2 ([@bramkragten] - [#28896]) ([frontend docs]) (beta fix) +- Fix Almond onboarding url when using cloud ([@bramkragten] - [#28908]) ([almond docs]) (beta fix) [#26563]: https://github.com/home-assistant/home-assistant/pull/26563 [#26656]: https://github.com/home-assistant/home-assistant/pull/26656 @@ -445,6 +504,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [#28214]: https://github.com/home-assistant/home-assistant/pull/28214 [#28215]: https://github.com/home-assistant/home-assistant/pull/28215 [#28216]: https://github.com/home-assistant/home-assistant/pull/28216 +[#28217]: https://github.com/home-assistant/home-assistant/pull/28217 [#28220]: https://github.com/home-assistant/home-assistant/pull/28220 [#28225]: https://github.com/home-assistant/home-assistant/pull/28225 [#28228]: https://github.com/home-assistant/home-assistant/pull/28228 @@ -575,6 +635,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [#28644]: https://github.com/home-assistant/home-assistant/pull/28644 [#28651]: https://github.com/home-assistant/home-assistant/pull/28651 [#28658]: https://github.com/home-assistant/home-assistant/pull/28658 +[#28663]: https://github.com/home-assistant/home-assistant/pull/28663 [#28664]: https://github.com/home-assistant/home-assistant/pull/28664 [#28667]: https://github.com/home-assistant/home-assistant/pull/28667 [#28674]: https://github.com/home-assistant/home-assistant/pull/28674 @@ -598,8 +659,25 @@ Experiencing issues introduced by this release? Please report them in our [issue [#28737]: https://github.com/home-assistant/home-assistant/pull/28737 [#28746]: https://github.com/home-assistant/home-assistant/pull/28746 [#28750]: https://github.com/home-assistant/home-assistant/pull/28750 +[#28754]: https://github.com/home-assistant/home-assistant/pull/28754 +[#28766]: https://github.com/home-assistant/home-assistant/pull/28766 [#28768]: https://github.com/home-assistant/home-assistant/pull/28768 [#28770]: https://github.com/home-assistant/home-assistant/pull/28770 +[#28778]: https://github.com/home-assistant/home-assistant/pull/28778 +[#28782]: https://github.com/home-assistant/home-assistant/pull/28782 +[#28794]: https://github.com/home-assistant/home-assistant/pull/28794 +[#28797]: https://github.com/home-assistant/home-assistant/pull/28797 +[#28802]: https://github.com/home-assistant/home-assistant/pull/28802 +[#28814]: https://github.com/home-assistant/home-assistant/pull/28814 +[#28822]: https://github.com/home-assistant/home-assistant/pull/28822 +[#28828]: https://github.com/home-assistant/home-assistant/pull/28828 +[#28829]: https://github.com/home-assistant/home-assistant/pull/28829 +[#28852]: https://github.com/home-assistant/home-assistant/pull/28852 +[#28871]: https://github.com/home-assistant/home-assistant/pull/28871 +[#28875]: https://github.com/home-assistant/home-assistant/pull/28875 +[#28881]: https://github.com/home-assistant/home-assistant/pull/28881 +[#28896]: https://github.com/home-assistant/home-assistant/pull/28896 +[#28908]: https://github.com/home-assistant/home-assistant/pull/28908 [@adminiuga]: https://github.com/Adminiuga [@anonym-tsk]: https://github.com/Anonym-tsk [@bkpepe]: https://github.com/BKPepe @@ -612,6 +690,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [@jongilmore]: https://github.com/JonGilmore [@kane610]: https://github.com/Kane610 [@leocal]: https://github.com/LeoCal +[@mtrab]: https://github.com/MTrab [@martinhjelmare]: https://github.com/MartinHjelmare [@misiu]: https://github.com/Misiu [@onfreund]: https://github.com/OnFreund @@ -630,6 +709,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [@bachya]: https://github.com/bachya [@balloob]: https://github.com/balloob [@basnijholt]: https://github.com/basnijholt +[@bbrendon]: https://github.com/bbrendon [@bendavid]: https://github.com/bendavid [@bluestripe]: https://github.com/bluestripe [@bouwew]: https://github.com/bouwew @@ -660,6 +740,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [@gerard33]: https://github.com/gerard33 [@gngj]: https://github.com/gngj [@guillempages]: https://github.com/guillempages +[@h4de5]: https://github.com/h4de5 [@hfurubotten]: https://github.com/hfurubotten [@iamtpage]: https://github.com/iamtpage [@jesserockz]: https://github.com/jesserockz @@ -674,12 +755,14 @@ Experiencing issues introduced by this release? Please report them in our [issue [@marthoc]: https://github.com/marthoc [@mezz64]: https://github.com/mezz64 [@mflage]: https://github.com/mflage +[@michaelarnauts]: https://github.com/michaelarnauts [@michaeldavie]: https://github.com/michaeldavie [@nkaminski]: https://github.com/nkaminski [@ochlocracy]: https://github.com/ochlocracy [@oischinger]: https://github.com/oischinger [@pattyland]: https://github.com/pattyland [@persandstrom]: https://github.com/persandstrom +[@peternijssen]: https://github.com/peternijssen [@pvizeli]: https://github.com/pvizeli [@rohankapoorcom]: https://github.com/rohankapoorcom [@rutkai]: https://github.com/rutkai @@ -697,6 +780,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [@timgates42]: https://github.com/timgates42 [@tlrobinson]: https://github.com/tlrobinson [@ttroy50]: https://github.com/ttroy50 +[@valkjsaaa]: https://github.com/valkjsaaa [@vangorra]: https://github.com/vangorra [@yeralin]: https://github.com/yeralin [@yjajkiew]: https://github.com/yjajkiew @@ -704,15 +788,18 @@ Experiencing issues introduced by this release? Please report them in our [issue [alarm_control_panel docs]: /integrations/alarm_control_panel/ [alexa docs]: /integrations/alexa/ [almond docs]: /integrations/almond/ +[amazon_polly docs]: /integrations/amazon_polly/ [androidtv docs]: /integrations/androidtv/ [asuswrt docs]: /integrations/asuswrt/ [automation docs]: /integrations/automation/ [avea docs]: /integrations/avea/ +[aws docs]: /integrations/aws/ [azure_servicebus docs]: /integrations/azure_servicebus/ [bluesound docs]: /integrations/bluesound/ [bmw_connected_drive docs]: /integrations/bmw_connected_drive/ [climate docs]: /integrations/climate/ [cloud docs]: /integrations/cloud/ +[comfoconnect docs]: /integrations/comfoconnect/ [config docs]: /integrations/config/ [conversation docs]: /integrations/conversation/ [coolmaster docs]: /integrations/coolmaster/ @@ -761,6 +848,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [iss docs]: /integrations/iss/ [juicenet docs]: /integrations/juicenet/ [keyboard_remote docs]: /integrations/keyboard_remote/ +[light docs]: /integrations/light/ [lock docs]: /integrations/lock/ [lutron docs]: /integrations/lutron/ [media_extractor docs]: /integrations/media_extractor/ @@ -780,10 +868,12 @@ Experiencing issues introduced by this release? Please report them in our [issue [plex docs]: /integrations/plex/ [plugwise docs]: /integrations/plugwise/ [point docs]: /integrations/point/ +[postnl docs]: /integrations/postnl/ [proxy docs]: /integrations/proxy/ [ps4 docs]: /integrations/ps4/ [qrcode docs]: /integrations/qrcode/ [reddit docs]: /integrations/reddit/ +[repetier docs]: /integrations/repetier/ [saj docs]: /integrations/saj/ [samsungtv docs]: /integrations/samsungtv/ [shiftr docs]: /integrations/shiftr/ @@ -793,6 +883,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [ssdp docs]: /integrations/ssdp/ [stt docs]: /integrations/stt/ [swisscom docs]: /integrations/swisscom/ +[synology docs]: /integrations/synology/ [systemmonitor docs]: /integrations/systemmonitor/ [tahoma docs]: /integrations/tahoma/ [telegram_bot docs]: /integrations/telegram_bot/ diff --git a/source/images/blog/2019-voice-assistant/telegram.png b/source/images/blog/2019-voice-assistant/telegram.png new file mode 100644 index 0000000000000000000000000000000000000000..dc0e012fde45d95719f44fb71b3a38cbe81d9683 GIT binary patch literal 66875 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

&q}_-<`yXfnx>%!6dr)j={ANu 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 literal 0 HcmV?d00001 diff --git a/source/images/integrations/almond/almond-architecture.svg b/source/images/integrations/almond/almond-architecture.svg new file mode 100644 index 00000000000..1d60a27fb34 --- /dev/null +++ b/source/images/integrations/almond/almond-architecture.svg @@ -0,0 +1 @@ + diff --git a/source/images/supported_brands/almond.png b/source/images/supported_brands/almond.png new file mode 100644 index 0000000000000000000000000000000000000000..dfad22dcda7d011b8d35f567a370fe439d383d58 GIT binary patch literal 13791 zcmYj&1yI#N7w`WDaOv*4bhmU}x};OOq(QnwxFFp~N_Uq?=cQFr0YySe1Zkv0cz)kE z^WK};nf;x!dp6EFv$JtFPDe`x7mErD003MyRYg4j0R4j?00#M&xz?K)008)}&Qk-W zf8^uA>Ergnrt!P$V@dZY46t>Rjh z%8zQfn^FIzVtG+Pq0I)BgASXAj{&Q7@(bBAJe*t`^-4b*6i2-HC*wrM!v$tjB>)iD zR)hLPgvg*j_hy|UKqK-o^vT#ufz4X=xi`}6{F19>3d=PJK0%4Exw6wqVgs&RTa{)X zqlMU6SkF*iq-+wy!MuWe9H+gGKbjPnxFz=AtFM)-EEXcZWJ!+u3IYJrW}Qk?N%>Zz z_C}@3#pcfMMyu5tmEC4#5)$I=xo^jv%HQ+kX*k5i1vyM~^?E(n2AW&#_2mFY2^?mz zU+)Zu-S}50XHQ#{OrIiV6Q#aXIqE9QOht?TZZ-Q-thm=E&&ws05u32tq_SG16y+=_ z!X?n>z;U>|=3;B#mu)qgB~L>|(@|aDlZF6@h5LOu7#SG$7FSlAT)mxL$BXQ$BM{$4 zKkamQJh!k~s!%Hnm3rlxFW=a6M zAT1+ry0_$K)JS!1VTi31fWwYX$%c!Ed)Vt4;O=Q<{LIfnc)EY6=uPI^q*N0%iPImO zZ7HVp@umf#2K7;h#PG-vZ{Lb2llL()J9Qe)2D}qJ10M@il04)l3lTqC5X~+E8G(Ag zYY`q=650sf#f+ybg$DgOO0g!wSym#Gg=WK<`n3_-K?b55%~qM33%&n*j?q_7OCPug zL$OZ7*Mj#hnFwrVL@5&*yyX_0%DMBNskiH8^bL<&*fuT$fZz)?MLC1OrJtsbPxWm` zUbSoGcU}daUtIWITaq_KqBrPqnR>2U7OUzcBE`V!^X$qQ>`+GDL`km^_Z6nb&QdSt zqdvR&>oxix$DvL0gk}%ljbB{LX{ZKI_gv-s3^Yy3a%P$~VD(0jbN-U$Bt^682&%ii z*cUzc0=24nq{cFE0r%?{4sbXH_Dv7$+-@ahi0o_)vQmNr}pcWV^GR^Uf4f1Z2 z!ojSY2~rR3xGNrN*dN+xI2y=I*3FZvce~Tppuj+oPzQ3oO%QaAor>zBev)#|3iw{M z@uEI~9Mn>y-)urbmOiL(jre3Y^!cY-M|jDo9U$app$DJ7A+$AYCs(K04mF9@pPv$&4x82w)2xtZ4MM%~X6PLUNblQlZx7QN^m2rQC zmCNEXR-LHyS^FiKY=~7Gqj8AiaDYlD(e{BSt@ckTi@!SGS3rocj@NidVGvW57*%_K zpv}kn4ttwTDM?qwbAM8+YOY>^^}yfjQCR{#IV)`(fg7sT`E?+5C?FSuFE`XR_=j~8 zB?o_HMMH_*`Yw$#4v>q7M-x_~IKPN#UgZ${V~M&6FJz$OW6uxQG1l2QmNz76IMq2$ z@m4R5Tl0XrkG+;x!4thXr^79ak*~80G95y`vCD8JDgM(4SF3Ezd3WsLF^&1np_{k2 z+d(Hu;q&)whu8Tkc_?<75IKriZdx57S__)Zuz`}JBmK3)s zA4bS?Hl}2d@EjG8cC*GorTe#XO-xc|jOg|CyTH&d$uG~s?20WS`GFfzb;NzZ-)pP! z#Fi2GL$3NsbJ4dlYA8i)G7N0+bXA0R#7h1&?^~aGa@&ZB@&)b32ZP>0pO^iUz%DSh zX++pejuJXZM2FL$|7E(a8cZ`x*}n|#`HI`_vM4?*HmcQ1cmppcl91jp);Acoq$ z7D@n;ItyG$Q`xHAH-Tg`o{M9x7vbb*`ysdqVUR|2&5ZiUP)Mq}Hk}aB{l3S@7$b<9 z;IRk?i3f*Blm$`*C#oMY^KA=-r;cZ zNrIqfjt81W<~Oh~W^*JJVjE4P-VG4R!v6x?M5my=H>ULs{?vgP`rW90Rs}s}y~0LspgEEuwUor)3JliKu2q0G%fjIIfq&7h zr#K4Tad{)6N#|HA#|CPi5OcAY%kLgFvQr{JC}^kbR5B(3E`a9gB}e0nXjZ@JY+!#C zfiabeRkCT1n3`t;BQbS;APF9;4~_MFs!T52W;dlt4K@6KUtE#tGMFnoFHZNS&=Hyv ze+sy=Kir7gRs*~z+h$b`_M@kAc7UwZz_3*6rH8N&p-N zur*!p@A?Czc*y;x<=Y-4vN&_V^Xy0bd88VKF6_{`1*cUX3*^E|MU0wFkMj3^%TS9cYQU=>qtwJrguca0G=E*%pMS-6a1|MSU>!xq?l+l7h!RB2%({l z04`m}ez-s5(wE|J)kW{EyV@Y|H3EYOK+iFlxsaG>KtevK!Thr;YI5V20Gen`u2tW- zR4{t>-2gptQ!82jgTnzma6^RZ4V?&-00J@j{e2e_3DHFqZ-}D#EG0TnE?dOwu}?4M zqi{epU|kF`rX>g_f(|f}_22wabMGl)z*28+l={ToHzYqr*qVwzC}})X0NMgkt=NfP z{D|f0L&uI-C*YU1^N=(DfH#Y8B~=rMxcD`{A@lWY^f!xw&SlmX$vTv?Qo0cZ#zRgU zY$0C}4onF>_ZW+ug;FS&&*WzrC`LyWotNm*fmucvNavC8U&P&QY&GB%ah?g zJ0=RmsQ2h*gFkCm>cyxNELE@M)u@jg%Uvotk`VZFUG6~28S`D$b!&CZ0u^!fn$ z_i8xPS!}=93M6hGq51lo3<^eaO$Xrk>)9T`prnF0l@12@IqiAn$})EeYOfV^A|xo< zJD$5#7Em)Go~;u^&P&xLe)^U7CdULPn4y;GLJ8;wyS%x$gxhAc)^7&Ka=wFA}7Qr?-(W>b3*iW4KA#?!Ri0K0{=&hP`oe*vtGyI2f zhFG(1`Vu7<(+BJ}M>PN)Z4-CoL;rMYQr@ zn|9(GYD926?#b)7LfGyVSX-TvdkKtK@evfGH9`*al3Rjr1>T;%S$wM&r=gcr(;%Sc z%%o-~>|U0|sj1NRH7b5He&M#56sp9v*}nmniCvHAERNWWV2qc1nEA*ov}cgQmp-}N zx3co`Y`^1v;PGa9W!^nJ2fV7{!h9j=XrhmtdExQ9!CrcX81Q92F$nLwBGQ^Rg?eIiR7ozmcr=KM#r6DIgHr zW*^Gt)jnL(c5VI1ed1IK(qeub3>P8*8ezTzGk;pE6CBhCOhAcvhS>fsPq=4KYwFOF z?~2#%KTlHxwowB|Bce-hLYeRyF~3Jd5=hpZKUBq~7j!9n34k%Lb_mn@bG zDx!8+#iZ6T0XXO2S$Cg8S`>?z>YTeP$CRJ^y6fWWdGcMZfK)e#?>NE07O9;Kl-(``l-`<`YBfmYFuWfa`5CBX zjf2!-HrD2J3DMgs;LPc!BNNwseKn^Qh>%qTc)~sK@7;x|l<Bca2eo} zKi9L#caYSkIxwQ7#xF}ob?8dJtBQnYrn1{H!SK}UK|{7WTS2%tJp|AUh*5(Y0r$S^{DA`3$E z4&3IvY@qmFO&%#Dz;m}j38@wtw|!BIU;l3P#1_T~whYUE8nIzjN`l(kK7t>B2x_Tn z8xUBwYLTae@+{cSLL%FHTYNg`%h<%PJoVxsr>~NaW0Ay-!JxH5u*pde8QVuvfFRw^ zAIML2A^?Pld6C%kW3pdGKD?AAA?B*?Apl5Yaf)YR*GAZOxS|E)hU zn5#2RHESj47+SptjdsC&X#Qndz$#46^v9jue9)2DIA4A?+ZLxfmD@Cf5f4rJo|>+3 z9hWINGBxa>HZ%>~bJ+4&$P77>kd{KAZ%khmnVr)H`M3i~&t;h36REz)tu$qKb6HI} znNYG#ikb-_yCX88_+Al!?>D@PQ_P5zk^OoPLM#Bl=3821dueX1M}q|g_0fG+>m_j} z_=N%%igB$eMjTmJQstMA3>WhFJA8Aa66SObM#ykAc=t-wpE7)9V>0A6Y;_?Y?Kadg zy&+2?0IEd;|5!>-fJ7m@FnnvKpXq39KxsNl7@z?~);Opz9RS|@S+%C434-RvI+_{$ zglVJVy-r~7&HxY+XE(RRDPka>)}1)V)lffz9@&k?Q@`tK8YvF7?GnH)C~M9Cjo509 z^ZE&_mf|yFEDBlMgM^U|2y^#Op=NyiP?9zp`t(H*PE}r(Op1_RgU?jNMEQ9CC>~bY zaH=)vC*XsA;2XalZBt(nL=Vh$*X()*u6qkYW-SHG&d^w}^~;wjbH}b6XK4aId<=&x zpkyKFTAkO~Q3XsSsFd2m^NT)vJX4BODc)0>aU6IQM0mBnYPCCj?Y64`(uAH0IiPHw z1D(9KVROx;2m0kfBp_rL7HhOdbSXt!9L1Wn09E1rW#o??#6SJ`{JSy9$7yb$oYKa! z6m({9r+s0+2r51l#VMZ(o`xVeSyyRbrr0-*KrjFtluIM#m1rDbG62#3iI`zod>i>! zN7&HJ>}QOMee*hY_0JN-cbn<%T&F$=?}CD>qil^>^TG0ul{H%0*Oz)FKbWm z`~<`~!_ucmKzH(ur*nFJzBLOwx}-d~A9HzhYi z9Ver^6<_FXBNS}UvT|i1i5Q&_|1>y2pdVAsZkj_T(Swde*_5Xa%!FCS*Fp%Kj)CD z;o(Hq@cG`$$Q>tk9m7g2XDI^)d>SF^7{nF?fNdxM6$7_>2o)vGCP2z4t1&)PoKZLr zjZD@*h<^m#j`0w{Znwebii!CcE3rPgm(;d2z&<*Vu@$U-DSa3rU~PL zo=$3f7LTcr_>78Y)uidm8~;)?bdPdd{tw|FUTKnLf$11Lc2|${e*)K^-5||DR>1Ez z9^Hit!DzEzH0u>_pDjO7Bj5dWyVP}r@1=<+P9gGR`@|@sX&+X*B$oi?uUod%$YVis z#U+EMx}TG#9wBg18Ep4wlP}}d8pU0O^{?>s1SszNyaNbsi703LX*`KQ&CRA>jK#qP z>#km<`0??!4Hh490Gs#raSee2e1U+yV}lzVwt^y#CABY;F9t(5bz%k5aoP`J~$U$W$w}b-A3r!j9(+&!ts{6Pf&^xS zKNWGP1>6ByR(A^$QUS|9XecGtcoKwr1}#w3*ipqWSQnL!mHqNM(t~M4@+tzn?lI

IBlcH3TC<^A+pQ!1PPU4@%hB`&4 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 literal 0 HcmV?d00001 From 0e7c0e77673dc515879f8383aa5b1f72e733d7ee Mon Sep 17 00:00:00 2001 From: Marc Randolph Date: Thu, 14 Nov 2019 14:52:01 -0600 Subject: [PATCH 50/56] PCAL9535A typo correction: binary_sensors are inputs (#11183) * Typo correction: binary_sensors are inputs * :pencil2: Tweak --- source/_integrations/pcal9535a.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/pcal9535a.markdown b/source/_integrations/pcal9535a.markdown index bbb206345a5..de26e82c9f9 100644 --- a/source/_integrations/pcal9535a.markdown +++ b/source/_integrations/pcal9535a.markdown @@ -56,7 +56,7 @@ pins: required: true type: [integer, string] invert_logic: - description: If `true`, inverts the output logic to ACTIVE LOW. + description: If `true`, inverts the input logic to ACTIVE LOW. required: false type: boolean default: "`false` (ACTIVE HIGH)" From b2771b6d4334427b96a4d702636e9737b3007e2a Mon Sep 17 00:00:00 2001 From: jvannoyx4 Date: Sat, 16 Nov 2019 10:55:04 -0800 Subject: [PATCH 51/56] Update wled.markdown (#11185) Spelling Error - Fixed Co-authored-by: Paulus Schoutsen --- source/_integrations/wled.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/wled.markdown b/source/_integrations/wled.markdown index 58d01125884..a1375465be6 100644 --- a/source/_integrations/wled.markdown +++ b/source/_integrations/wled.markdown @@ -36,7 +36,7 @@ integration will be available. ## Lights This integration adds the WLED device as a light in Home Assistant. -Home Assistant threats every segment of the LED strip as a separate light +Home Assistant treats every segment of the LED strip as a separate light entity. Only native supported features of a light in Home Assistant are supported From 18f940b7bb4dd87e5d4734d0e399a9242262cbd6 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Mon, 18 Nov 2019 18:51:48 +0100 Subject: [PATCH 52/56] Add docs for scene editor (#11222) * Add docs for scene editor * Comments --- ...{ecosystem.markdowm => ecosystem.markdown} | 0 source/_docs/scene.markdown | 88 +++++++ source/_docs/scene/editor.markdown | 77 ++++++ .../{ecosystem => scene}/scenegen.markdown | 0 source/_includes/asides/docs_navigation.html | 243 ++++++++++++++---- source/images/docs/scenes/editor.png | Bin 0 -> 119455 bytes 6 files changed, 357 insertions(+), 51 deletions(-) rename source/_docs/{ecosystem.markdowm => ecosystem.markdown} (100%) create mode 100644 source/_docs/scene.markdown create mode 100644 source/_docs/scene/editor.markdown rename source/_docs/{ecosystem => scene}/scenegen.markdown (100%) create mode 100644 source/images/docs/scenes/editor.png diff --git a/source/_docs/ecosystem.markdowm b/source/_docs/ecosystem.markdown similarity index 100% rename from source/_docs/ecosystem.markdowm rename to source/_docs/ecosystem.markdown diff --git a/source/_docs/scene.markdown b/source/_docs/scene.markdown new file mode 100644 index 00000000000..bd1e21f61c5 --- /dev/null +++ b/source/_docs/scene.markdown @@ -0,0 +1,88 @@ +--- +title: "Scenes" +description: "Instructions on how to setup scenes within Home Assistant." +--- + +You can create scenes that capture the states you want certain entities to be. For example, a scene can specify that light A should be turned on and light B should be bright red. + +```yaml +# Example configuration.yaml entry +scene: + - name: Romantic + entities: + light.tv_back_light: on + light.ceiling: + state: on + xy_color: [0.33, 0.66] + brightness: 200 + - name: Movies + entities: + light.tv_back_light: + state: on + brightness: 125 + light.ceiling: off + media_player.sony_bravia_tv: + state: on + source: HDMI 1 + state: on +``` + +{% configuration %} +name: + description: Friendly name of scene. + required: true + type: string +entities: + description: Entities to control and their desired state. + required: true + type: list +{% endconfiguration %} + +As you can see, there are two ways to define the states of each `entity_id`: + +- Define the `state` directly with the entity. Be aware, that `state` needs to be defined. +- Define a complex state with its attributes. You can see all attributes available for a particular entity under `developer-tools -> state`. + +Scenes can be activated using the service `scene.turn_on` (there is no 'scene.turn_off' service). + +```yaml +# Example automation +automation: + trigger: + platform: state + entity_id: device_tracker.sweetheart + from: "not_home" + to: "home" + action: + service: scene.turn_on + entity_id: scene.romantic +``` + +## Applying a scene without defining it + +With the `scene.apply` service you are able to apply a scene without first defining it via configuration. Instead, you pass the states as part of the service data. The format of the data is the same as the `entities` field in a configuration. + +```yaml +# Example automation +automation: + trigger: + platform: state + entity_id: device_tracker.sweetheart + from: "not_home" + to: "home" + action: + service: scene.apply + data: + entities: + light.tv_back_light: + state: on + brightness: 100 + light.ceiling: off + media_player.sony_bravia_tv: + state: on + source: HDMI 1 +``` + +## Reloading scenes + +Whenever you make a change to your scene configuration, you can call the `scene.reload` service to reload the scenes. diff --git a/source/_docs/scene/editor.markdown b/source/_docs/scene/editor.markdown new file mode 100644 index 00000000000..fefe1e41050 --- /dev/null +++ b/source/_docs/scene/editor.markdown @@ -0,0 +1,77 @@ +--- +title: "Scenes Editor" +description: "Instructions on how to use the scenes editor." +--- + +In Home Assistant 0.102 we introduced the first version of our scene editor. If you just created a new configuration with Home Assistant, then you're all set! Go to the UI and enjoy. + +From the UI choose **Configuration** which is located in the sidebar, then click on **Scenes** to go to the scene editor. Press the **+** sign in the lower right corner to get started. + +Choose a meaningful name for your scene. + +

+ +

+ +Select all the devices (and/or entities when in advanced mode) you want to include in your scene. +The state of your devices will be saved, so it can be restored when you are finished creating your scene. +Set the state of the devices to how you want them to be in your scene, this can be done by clicking on it and edit the state from the popup, or any other method that changes the state. +On the moment you save the scene, all the states of your devices are stored in the scene. +When you leave the editor the states of the devices are restored to the state from before you started editing. + +## Updating your configuration to use the editor + +First, check that you have activated the configuration editor. + +```yaml +# Activate the configuration editor +config: +``` + +The scene editor reads and writes to the file `scenes.yaml` in the root of your [configuration](/docs/configuration/) folder. +Currently, both the name of this file and its location are fixed. +Make sure that you have set up the scene integration to read from it: + +```yaml +# Configuration.yaml example +scene: !include scenes.yaml +``` + +If you still want to use your old scene section, add a label to the old entry: + +```yaml +scene old: + - name: ... +``` + +You can use the `scene:` and `scene old:` sections at the same time: + +- `scene old:` to keep your manual designed scenes +- `scene:` to save the scene created by the online editor + +```yaml +scene: !include scenes.yaml +scene old: !include_dir_merge_list scenes +``` + +## Migrating your scenes to `scenes.yaml` + +If you want to migrate your old scenes to use the editor, you'll have to copy them to `scenes.yaml`. Make sure that `scenes.yaml` remains a list! For each scene that you copy over, you'll have to add an `id`. This can be any string as long as it's unique. + +For example: + +```yaml +# Example scenes.yaml entry +- id: my_unique_id # <-- Required for editor to work. + name: Romantic + entities: + light.tv_back_light: on + light.ceiling: + state: on + xy_color: [0.33, 0.66] + brightness: 200 +``` + +
+Any comments in the YAML file will be lost and templates will be reformatted when you update an automation via the editor. +
diff --git a/source/_docs/ecosystem/scenegen.markdown b/source/_docs/scene/scenegen.markdown similarity index 100% rename from source/_docs/ecosystem/scenegen.markdown rename to source/_docs/scene/scenegen.markdown diff --git a/source/_includes/asides/docs_navigation.html b/source/_includes/asides/docs_navigation.html index 0ce9be273b6..8f54340183b 100644 --- a/source/_includes/asides/docs_navigation.html +++ b/source/_includes/asides/docs_navigation.html @@ -1,7 +1,7 @@
-
+

Topics

- +
  • + {% active_link /docs/scene/ Scenes %} +
      +
    • {% active_link /docs/scene/editor/ Editor %}
    • +
    • {% active_link /docs/scene/scenegen/ scenegen %}
    • +
    +
  • {% active_link /docs/tools/ Tools and Helpers %}
      @@ -102,21 +150,40 @@
    • {% active_link /docs/security/ Security %}
        -
      • {% active_link /docs/security/webserver/ Web server fingerprint %}
      • +
      • + {% active_link /docs/security/webserver/ Web server fingerprint %} +
      • {% active_link /docs/security/porosity/ Porosity %}
    • {% active_link /docs/z-wave/ Z-Wave %}
        -
      • {% active_link /docs/z-wave/installation/ Configuring the Z-Wave component %}
      • +
      • + {% active_link /docs/z-wave/installation/ Configuring the Z-Wave + component %} +
      • {% active_link /docs/z-wave/adding/ Adding devices %}
      • -
      • {% active_link /docs/z-wave/control-panel/ The Z-Wave control panel %}
      • +
      • + {% active_link /docs/z-wave/control-panel/ The Z-Wave control panel + %} +
      • {% active_link /docs/z-wave/controllers/ Controllers %}
      • -
      • {% active_link /docs/z-wave/devices/ Devices %} and {% active_link /docs/z-wave/entities/ Entities %}
      • -
      • {% active_link /docs/z-wave/query-stage/ Query Stages %} for devices
      • -
      • {% active_link /docs/z-wave/device-specific/ Device Specific %} configuration
      • -
      • {% active_link /docs/z-wave/events/ Events %} and {% active_link /docs/z-wave/services/ Services %}
      • +
      • + {% active_link /docs/z-wave/devices/ Devices %} and {% active_link + /docs/z-wave/entities/ Entities %} +
      • +
      • + {% active_link /docs/z-wave/query-stage/ Query Stages %} for devices +
      • +
      • + {% active_link /docs/z-wave/device-specific/ Device Specific %} + configuration +
      • +
      • + {% active_link /docs/z-wave/events/ Events %} and {% active_link + /docs/z-wave/services/ Services %} +
    • @@ -126,7 +193,10 @@
    • {% active_link /docs/mqtt/certificate/ Certificate %}
    • {% active_link /docs/mqtt/discovery/ Discovery %}
    • {% active_link /docs/mqtt/service/ Publish service %}
    • -
    • {% active_link /docs/mqtt/birth_will/ Birth and last will messages %}
    • +
    • + {% active_link /docs/mqtt/birth_will/ Birth and last will messages + %} +
    • {% active_link /docs/mqtt/testing/ Testing your setup %}
    • {% active_link /docs/mqtt/logging/ Logging %}
    • {% active_link /docs/mqtt/processing_json/ Processing JSON %}
    • @@ -135,21 +205,52 @@
    • {% active_link /docs/ecosystem/ios/ iOS %}
        -
      • {% active_link /docs/ecosystem/ios/notifications/basic/ Basic notifications %}
      • +
      • + {% active_link /docs/ecosystem/ios/notifications/basic/ Basic + notifications %} +
        • -
        • {% active_link /docs/ecosystem/ios/notifications/sounds/ Sounds %}
        • -
        • {% active_link /docs/ecosystem/ios/notifications/architecture/ Architecture %}
        • -
        • {% active_link /docs/ecosystem/ios/notifications/privacy_security_rate_limits/ Privacy, rate limiting and security %}
        • +
        • + {% active_link /docs/ecosystem/ios/notifications/sounds/ Sounds %} +
        • +
        • + {% active_link /docs/ecosystem/ios/notifications/architecture/ + Architecture %} +
        • +
        • + {% active_link + /docs/ecosystem/ios/notifications/privacy_security_rate_limits/ + Privacy, rate limiting and security %} +
      • Advanced notifications
        • -
        • {% active_link /docs/ecosystem/ios/notifications/attachments/ Attachments %}
        • -
        • {% active_link /docs/ecosystem/ios/notifications/content_extensions/ Dynamic content %}
        • -
        • {% active_link /docs/ecosystem/ios/notifications/actions/ Actionable notifications %}
        • -
        • {% active_link /docs/ecosystem/ios/notifications/requesting_location_updates/ Requesting location updates %}
        • +
        • + {% active_link /docs/ecosystem/ios/notifications/attachments/ + Attachments %} +
        • +
        • + {% active_link + /docs/ecosystem/ios/notifications/content_extensions/ Dynamic + content %} +
        • +
        • + {% active_link /docs/ecosystem/ios/notifications/actions/ + Actionable notifications %} +
        • +
        • + {% active_link + /docs/ecosystem/ios/notifications/requesting_location_updates/ + Requesting location updates %} +
        -
      • {% active_link /docs/ecosystem/ios/location/ Location Tracking %}
      • -
      • {% active_link /docs/ecosystem/ios/integration/ Integration with other apps %}
      • +
      • + {% active_link /docs/ecosystem/ios/location/ Location Tracking %} +
      • +
      • + {% active_link /docs/ecosystem/ios/integration/ Integration with + other apps %} +
    • @@ -158,8 +259,12 @@
    • {% active_link /docs/autostart/ Autostart %}
        -
      • {% active_link /docs/autostart/systemd/ systemd (Linux) %}
      • -
      • {% active_link /docs/autostart/upstart/ Upstart (Linux) %}
      • +
      • + {% active_link /docs/autostart/systemd/ systemd (Linux) %} +
      • +
      • + {% active_link /docs/autostart/upstart/ Upstart (Linux) %} +
      • {% active_link /docs/autostart/init.d/ init.d (Linux) %}
      • {% active_link /docs/autostart/macos/ macOS %}
      • {% active_link /docs/autostart/synology/ Synology NAS %}
      • @@ -175,11 +280,21 @@ {% active_link /docs/ecosystem/notebooks/ Notebooks %}
        • {% active_link /docs/ecosystem/notebooks/ Introduction %}
        • -
        • {% active_link /docs/ecosystem/notebooks/installation/ Installation %}
        • +
        • + {% active_link /docs/ecosystem/notebooks/installation/ + Installation %} +
        • {% active_link /docs/ecosystem/notebooks/graph/ Graph %}
        • -
        • {% active_link /docs/ecosystem/notebooks/api/ Home Assistant API %}
        • -
        • {% active_link /docs/ecosystem/notebooks/database/ Database %}
        • -
        • {% active_link /docs/ecosystem/notebooks/stats/ Statistics %}
        • +
        • + {% active_link /docs/ecosystem/notebooks/api/ Home Assistant API + %} +
        • +
        • + {% active_link /docs/ecosystem/notebooks/database/ Database %} +
        • +
        • + {% active_link /docs/ecosystem/notebooks/stats/ Statistics %} +
      • @@ -189,30 +304,56 @@
      • {% active_link /docs/ecosystem/caddy/ Caddy Server %}
      • {% active_link /docs/ecosystem/haproxy/ HAProxy %}
      • {% active_link /docs/ecosystem/nginx/ NGINX %}
      • -
      • {% active_link /docs/ecosystem/nginx_subdomain/ NGINX with subdomain%}
      • +
      • + {% active_link /docs/ecosystem/nginx_subdomain/ NGINX with + subdomain%} +
      • {% active_link /docs/ecosystem/tor/ Tor Onion Service %}
    • {% active_link /docs/ecosystem/certificates/ Certificates %}
        -
      • {% active_link /docs/ecosystem/certificates/tls_self_signed_certificate/ Self-signed certificate %}
      • -
      • {% active_link /docs/ecosystem/certificates/tls_domain_certificate/ Certificate domain owners %}
      • -
      • {% active_link /docs/ecosystem/certificates/lets_encrypt/ Let's Encrypt (detailed) %}
      • +
      • + {% active_link + /docs/ecosystem/certificates/tls_self_signed_certificate/ + Self-signed certificate %} +
      • +
      • + {% active_link + /docs/ecosystem/certificates/tls_domain_certificate/ Certificate + domain owners %} +
      • +
      • + {% active_link /docs/ecosystem/certificates/lets_encrypt/ Let's + Encrypt (detailed) %} +
    • Backup
        -
      • {% active_link /docs/ecosystem/backup/backup_github/ Backup to GitHub %}
      • -
      • {% active_link /docs/ecosystem/backup/backup_dropbox/ Backup to Dropbox %}
      • -
      • {% active_link /docs/ecosystem/backup/backup_usb/ Backup to USB device %}
      • +
      • + {% active_link /docs/ecosystem/backup/backup_github/ Backup to + GitHub %} +
      • +
      • + {% active_link /docs/ecosystem/backup/backup_dropbox/ Backup to + Dropbox %} +
      • +
      • + {% active_link /docs/ecosystem/backup/backup_usb/ Backup to USB + device %} +
    • -
    • {% active_link /docs/ecosystem/scenegen/ scenegen %}
    • {% active_link /docs/ecosystem/synology/ Synology %}
    • -
    • {% active_link /docs/ecosystem/hass-configurator/ HASS Configurator %}
    • +
    • + {% active_link /docs/ecosystem/hass-configurator/ HASS Configurator + %} +
    +
  • diff --git a/source/images/docs/scenes/editor.png b/source/images/docs/scenes/editor.png new file mode 100644 index 0000000000000000000000000000000000000000..168f48b012b44add3abb95e0d02f45a00f272886 GIT binary patch literal 119455 zcmdqJWmr^g+XhNWh?J@AH1&C%S*`KO2T))>`*kcV71u=XouHG}M%-&R;)IKtMqC@PWb;0s`U% z;4hb)6u8o4_mva)B6NJBEJu*vbps2W_?hWEG>1S4?gGc;1m_4Z5)hx>0{jvXUMD#B z&oKePBSOaiIetRO_3u4I1Ox$A1SJ37qX&GS{yYHwfT#ccCQc>%-x^bi{(Cp^LMrk9 z9Os@swk6jf4SZ3&dZ6n_KtM@<`bS6*pLi9hP1owFj*|{VRnpWB#%J=v?ztHs9QNw; zDFP5&5;%mJIhnA+VK%mol5lDEf9{Y3j!!T1v$Otli<7l9yADKyRo>3Qj8%kBnC~7t z_&h5sE6Cx6x#SZCrGFm>&ZOBbot$1t^7Fg8y7IXS@!2_8@C!&tNbuhi11X8zb)B1 z{yQvSfc&Q=`~rOU`2VMF;8D=&RY`RRD>IzpnvZC?b^TXfcQ@v|397i&q)8d z3Jeu|9>o7Y(*{1T`s21P0f8*RLxuZK;e^XcWUsXb2Fk>0eV@`PzPn6EIjlkV{$1@& zm&oC%%$Dns{OcIHeIfDRs8;lPT{)}eH!(J+2bYMj`$n-uKp$! zuCW`dGY(xN&MWhYOJlADwYyf&pwMI$$X#KTJLQ74o5x?b@?xaYHu`x=OO6X(KDp4Z zOGiui`v*Y^Rs?#6g^=)UhY9Jj zXh?4MEHxU2Q=M&$l?amjn#4WQhlJ$sy_7AWalJ2kwz1db!fr$t7a+%Uv;@D;4lry4 zURIXq|EGhq)FW{iGz9yJ=hvYMPs+v$J9C}?m;gdLE?zzbdupVtxaIQa`d;q*eTPO<3MTC{@{;9B63?c`Ga;f} zTvH}Iua}W$$nj$za#DmXV#|B7Xv<)kKy~@i-5y7-?rrkUH#6@2k6D7{-dd#9QdHZk zICz8GlBt!f0}BcWN8vj2ai7+E`WP5ZAFRN*a%z*-diVv49(kHlY`ygsSZiR2w+3%9 znt;E6V%$*-apLEGpGyQ@{xxQ;Shc=GgbPD26v78(Z;)bepla`7TR609Kh1W3t=5)9i~%-)l3tKWGD!9> zw~PL@n0=ece)Wrr`C$V!ujjiq!C>PHZxL^^MSIp7rVJL%h8jonm~AY1-b5W}tr|hA z?OX^c>k3tP^Mk#t%58^0wYA1t-!#v5*~Iqj^4T1AW>4$bAOPR|#p)in3w;vswSuiMgy+w6rU=4oPcB$ed2Fk-U?prNRj(2Sb(-jxHP*bIT`J&Bn zG>D%QypZlG6Fa4+fn@5u<1&hu7X;F4wQ`?fdzD!rk(`i6E2vV(B@P(OkYW=0>{&D^ z4RfMW=#98&exuc9b{NdLf8NQltV;Z(vn&s(>*3_2nc`!o8~@ExYtaOm1~XT@|Gkp! zpsCohkyo@b!_5#9VS7(BjIGrTIeFS8U$-Xu2gt#jx6Cd%>A*;p53nr1}#ay4HHeD$Hf+ zfbP5h{0)2WvLHv>V=wyXjA^Le2c@{{iV6;!K?QaQ*d^K|mCgsu!|EOS-gB|vwh)yu z0i%gwL$C|8Gf>{X*#lQKWf+D}dJpOrZ|NpEf^uSBY!(%nvBgkypWiGQoxDe12F>(( zjM8Bq^sh1IxO8wmtC@7_mJ;`{c`vm`iJFz8^*nK~M<~3%lIrTR<>jqnxSu--$>GyY z+j^y&`(JB2zb2cAZlgK5#f`pU%Ceq6sw=98eQLg^YQ8U4%r4Ip>Ta%!7_ul(<%Kl3 zmbuL7j&=_dMIU*TJdhgMUf(fO=l_^amy}Rx**a?53%>d)Ysjmn@&U2E66!R{WOPzC#r?~Ket6Md%u-FOo;!SWC>mD z-nEVMu5rtCN@;GKT!f)AsG~(&{f>@sJSy7W73@hvnPycTQ*rKsn3}<`QP~D27JhZc z1dUcva6!DdOsRUV)A;K_D~|T^;W}OZgrS3STy!SFoI7Dy!1C2W7i|3CxR#>5FJ!d* zp}Y+#!Izh&GI!Na;>tj^W}-<0^;-Cy9v7?8iXhq$8~qs5Q7-0fD*{jd*TFj)!0gqp-lRiYuwWFviP8jSeJrJzuUq~ zBnFJbGJ6xRer%VqEE=jZI%VHC-J{oaKV+6cEs0;!N)1>ET%u-@ygB%3sNa#4e;a+Es=F?&Pb~xo$1ifB7-)@8GW!No`-*FZ!l5Xr5(42A|uYsVfWfQiL z^Hdp$%L_16I-8eXrpw@Z^s{+~T)S3CLgoqtguCaaD`_)YmYqbXYrKh~ z>-V6siL8>T=Q`?Y!pY|Pd@FTbDRjZEt)S8cxeq?&E#WY=&ZxW;iZyh5-;j~c2h_Dr zwVhi`m5K@dy;mY>R>$wckhxm%7Mm!K5mI4Ov_3visrZ%XK~t2*z?%hOmX$s;jK{_WW>p-fm{|MzIvV zk8^P=jJhYW@kR(_9G2ybY3`#nX1Vi*(&c~-y5K5q)o}%Cn~Z$7oJ%<{S$~UeVb}-? zT_vh6L)-aD6V)pQd!{%r_33tJgy&?`BYlQx`HJTb*YC9V%@*)MGHqWFUyaVpv04G$ zFpI8e$OsS`crH(-x<-ZywTWKy58;9c(Sba*innUqvT5#3zN5XRT39-AfzQVL3q8Z? zh=8;3y5}sC5-Ec*nk2r$K>ac@6kX(nZ^>us`xM5fD$R>ySGvQ)YI6cIx36lh8Mcwz zoi;?p#o8vQF{8lJ;zc}$yK~>Rl1q1QZNBiaR>*Y93fdXP7$tMYwjKy?!a2G!y}z*= zuI+smCZ?$kTH;oAQRPtWU^%((hMyaq#irSIBH44lBv7o0?gSdbPY#{x-I~Hyt)Pcq zQgLf`30=bc`_5$~lgs7N8DuaaaZ=*^a*>6YSi>)I+s50`j+;F9ezg#cwp`g28C3`a z8^Df^61HQCf`iHQePE>DUGw;>K~>^Rrb3ig8*~g&xjiyx{PYFpnCQC8bnzMU+ zq1uKg@&|ce)m2Aq?SfnCOPv`p;`zRAP4%`vE)k9)NpN1GQWMukqr5{Q-h1_kJTKx( zDGZOwiPR?$lid$^yjybEwQ}K*6|~@r&70$~I?fV^lP1mNes+7`z8#N>QHe9!M~r6A z#|FO#=IoIXu-j6H8JlLf{dB#D@GPQO;HT1!aMwv7wz>JDs%Y-$ZFybYP3blChEqY* zc$X5zs-XT((JTpOxY`tjs@dY%nb(DxuB_)&sC4EY+c9d0*L(?jNsl*5e4OkbU+%G~ z)`>)NqGEKIkCi9ViLPwN9kdYq${pOXE4NvJ?gqfb4hqyuj$L5MXo2dwU3_0jap#4r z#*W9kg&qVxtdPjU8V3HzOV|h`^_c2H))|7K_}ThK-g%V5pMpDA`OK z`JH4bN~9B9T|54&!q}9+E!I~N9yUWP%vS2GUEnmjZtL1MM#LV~wW~KQEkt>R3WTj2 zy2omLX#|ZU6-V(a231zeQ%>o5*j0796bwX6`R=8;s(2x#&qn|^u(k#-c=Z*b=`NZ;q-87= zt2&zY?KxL{OqZHHbQ4yVIk$?mxoP#v3g3`ki@rb-rE6ra!{jkc;OpA*L0eaUj4UO? z?sk8z``d$;jAFWm=LYiV!q!-x^kVGG<~%(TL>dmr7VOleym44Xs0B@~qXf$m!wT2g z(2{`U-Q6BjNh!u^Cin#6Sl6hd<~i@8A*O2a8|X*yoo@a32U6CDg8DQ`eQu%yjNgx^ zwl=o585lBoA(z-6L2{qn>5tv^3U>>Zuw5{AA9gjhvv%n&4H?ZZ1>f6i;O^E8sy7%NLZ$wa$qF4(19X?Q zsc7nByIGTk+z#}q`Fs<8s0FVQYjz|OP*X2d%YLU*fX1T|(r6LxdjQoPR9QHyVl&iI zvxuZABdt~;UXkKy*BKE^utzJ_qD-SRpM$r&%55UOZJ{U**voBl`cSxUXOO-|n*N7i zJkKbVvzkwb4MR+O$I(FnO>{Mvcl#ylFi|sX!hzExhIkE`AJB(|L9<>M!5IDP&p&3b zgSi{JvKtH22D!W`i$X{FbMO|E~?krZqp>Yurni(lFvow8V9`b5wFwaYDPiGWOi@Qn`I^@Fw%UPA9$5x(? z0HdInUCM8HZ#UnvvZlxGJmX`?CvTv&``Da&V~DZpWEcUtu@17c%D3(<@>u&$rn$R1-su=01sXtxSalRzbgL;dIX{(Lt(d+( z!)ZSP{k$TVHvO>t=oiwh47q!(Uk(`>8Nkjx#Qe~yhpbbjyLWCm@ zyy(|C%3mhT#k(F5ZZ_RcXkjS;ryl>9tnYq28<%o#cKlH+l?tKdWNN40NQ)ge(n+)7 z_Nd1%nj%8FH|k%?Jx{!Da$9d~Ez6{>ox88VpPLn<-E1HEOeaM=U&oy(0;J9lCU%GYJ}m+7bU9w`juxJi?m2;@+vW632T!;eqMcO z#M`GSIi!HMq{sS{-|3cNF1|TJVw2LvY+bYjky)N>@UGePwezdU5L-%$i ze$ru{H+$4;=vRDK3$tvH1~bbq)mc+$%!iAjn#;=${Y9Ni-C4d7BBYm(7H_YNfmbYX zVit{+omHh@4Sdm~&~wTbZR#vs>T8lm9aDEv6k*31(PlZY@nZ=UnV-<@mfRUz79(>? z^oo|lWw#;=j$Hg@`WdnMs+&nB)jKD>2l}fxN0ygINBvN^&wg<*vgMh&b$j)&WO>#0 zJAdahI1tx)M9-BG%>HBhPvU)dr&s(iyNv9o9`>%s>?4o70q{Xu1c!3Ib_(r|jX1-0 zzP8zR+N)=2j@{j(xnI;NapuXoK;%y!R~DmFd(oEfV<)GFRBQo*k6qVBNrR-Er}Y7u zopALB+)H(&4Eh`5vWN7@l^sbT7u|C0+DsM{ryEQB{NdipXgZS^YY$Yfa5_?OgWqIzH&;Vmx1+c)9*Z z{W!Fn&olgBJJUt|a)Cz(<MC}cFA_`&I77%FjRHIqGCCUainjl%wzwO=0GD##MMNy zg@gyk)w*em8pjd(GO*|-C(lLA8`~!G#mcdW56i?Q~ zL;bRex0O%y?vJd?Z_w1t;_L=-Q$~+#*v(1<67ZX&H)UpN$4ID46q(@JBhty%{-4?! zTaR&O8|_b$Uw3XH%G!c?wctLe>z>`3<>Pj=eB$XYI-($Qc+qGly%9!b9Y zzZkzPmVC`4Nn5)3p|j8C=Ol0iAi%}Xd(ZD9xV%UCOIcRR-y6lRmLC<1iV}vONXgWX z;h_m%b>veSoZorW*{9PD@8=2ESlbd2cH=ZQ&E59KE~F>#>`iBWItN0-0i;-SG+#lmUU%T zM@sGaPH=puiY^f`O|KE?fZWl~TfVXtO>xBW8@oXjOCU(tYNAa~goG(A%_o<7)$@Fd zY);@W5DX8)EQ*eZcv;?-Ul#N6sg@-Ue-`s8ji{DSs*iSb%AA9fVqebL+2-g_jQbU( z?gPosA_w;z)e`x$vfw?N2da`k#Pqv9gPsm>8r=kKj0pCtfT}y_*?H?%owJMkj%y?- zOIcujDKLGAmydU2f$O({ zvuj)@3befe7stUTMTB1FQqD96R7KkiXca-NE-oy+Re!7a2m7)pg`gc9NzZv}!)Y|b z`w_Y*POQ&8+fJr{J9krQmM&fIbr5PRoYsC zeVi4+2NrB%KfN}*^vU9>Otz#wKLAu=_$hflqY2#BZ)iX z%Kmc-Fvp~46xHczD)Z^4BNMyN`Ip`LnxrcE&wcv;#gIyPMBW(iX^$uXRKp>NQCZ>B zUSKZISNgxqr)3k#qs9B(3{y)#?7e>Ft4RIg{)pmFYXERWKXpOjlv-DuN>tg>M5j!-9 zSEsPyoJ6NR1cV%C;4@gbV*CWyhhv-27m+oRO(*ZK2|ejfmga_WD@x^P{zcUeDiKJ7 z+%{&OKA~|}HR=}g7s2imenO|K#2i{02LHvrM6v>Nz)bB{Gq(!_V)5ekpY0Bn4zZaj z$*5B67~7il7Ga-b&)xXxW-vA_a?HcKkxHy$K9LFSI&4CQ0rBY@MOJVurv0(AWF!BX z-1I%5sti|**HC65M~VF?eJm7gJ;+l}O{j+2!XoJz+aHGxeZBMddD3`-2xUmhUh{T0vRiVaB^YJOA#4g{%8-#dN3!tb$Q|IeGGg$#7j?#NLoRxKyx}?{i~F6qR@C! z=On5OmVhd^!^BqR+Wkd+6p|u7tWMP_scbLERaXpsNnq1FyT?<5=(8dX$ELmJCM7I< z#k<_Z+*RG?Vqn+oX&x*l)-9E>g{Z-D^ zKI-^DI*z`_%1ovH;h4g#!MttS`H#Pnm3hBs=WMlQnvT;OSDs_@2wOy-FFoVv^z@UT zZX!Zn#wERZH#rC>YYQG$&To7=6utG7sY!oNbl;*|-$%e5|&*?r;Dz1m;X#|O9+rI71Ur;N2fHPhnKS`5Dt zUj+14(bUbR;!E9Jr4FIY}oVsq=u+R8WVn=Gc*Z>Bi)JxmD-s{%)A&~OwwH@qeU_cScceq+Da zVORsVj~6gia-WG%K9mQ^t!*LI)yJ!xRW81{p95D0%~M|Cd4*n^MK4#*Cm%nOA=M@y zlj4g2#i7bZPO){S{1~atu<|oyv)t>%yaV|m-oN0 zj$M&jt@xrIBs1}vxKCurAaVy~&Cd|{mc%4bw&KN5Ia1B$MVTnwH5U!CS@9>FzZ4Cd zHrW)aBlv%Ph$*o_XUUxCXz7b&a~vG@JR2tVEld!<`s#f}p>$}IkfZMiWsxVlz8Drh zRPBmORs-+9z!71|_v8@5;9-Rk%NVd?J$t@}Tk~1hTo#NNz(xKF8=M($S)Utzrh$s zM;khMbgK?9U(hmI{^d^wo>}}|4;x!-3kFDE8zHt$~O<_4%{vj{xz(y(dBPISG4;9HAXAduVA7NxsbCn!FMBIAA+UY(@kb zJ_X)y5_|4E*Aa(3+Qq1!<}m=ae0ziZ0PKZNtMfXjdX>(+p)`?Lh4$QpFk~c2xvJ^g z)jB`tJp?p;Eg1b!9X!}zSJZqZ+vnui)|LD@$_rP!+o#OpHRDSKkK5l`8sgtx9B5yn z>b<_gu9_VQ7Sve(PR3HPd!0rUZ99lSGM6FAeg!n7^Nd~Xi3PcR!+llr(6_Bjr-a(X ziNfNClzk@OcBYkE4|OfwZxDhoK?B#-!TU{aeXf3ZM!TBHG82BY(Q-RnMx@fU7BKz`h#&?MsYV-YTR?PGpH1|kHGFOD|D;P1@>enyWbsu)ksyxCndwb zo#-|f7nF@BS*9A55G-u4o?oq6%HINvg;XtIH}id0&TP}8lM4s2N}s7EVeX}s5ncgc}_Zsa%OT0(9!he^I+?iO>QjivSm zlz(;kVUIiwMBC6g%A=d^+sQ%wNy6IK0Ent)YjwxgmItm@Y}~P1diA05SRdybhROF# zs?9Pp;qsn&(o$(c=aRgIG+&GC)t?;UkbCRX$N_DmBvPvDGgDXTm=K=Je%*M_<;KWR zR~8e<>j5s06i~8_Ic=iP@qW<#b62;^vzKBFUE(}8ist(@)wdCWnrafaicG;}_r$+* zAFqv>$|OEtyJ^z^-S~b!qFa{ya6P{`fPi`Ps*VZjU~RGyX>`27P|hIbvmR`;cNBQ% z@Nq%tS?v~nixrWa{&>cbMBsCn`lr|8_1KIA&-tA@ni+e-xUW}lQWFNpT=^a(249=_ z9;L;`8OI(*#()SZRM43=QNCnBOhj)I3aLNdE*Srk3{fWW*>5*e!^LS|?G4FHD2rVU zEew@S81`*5dk1onKHi%?ruG00q#?;jiD>&tYH+IGZ-;l0b&JczJFmbe=}uJnTRlQD zC5hbVTHt#H6;tOKnp91?Nf*tp{E#_brwQ{0{K7H5Uu<<0TPd$KlvPc+i7EQk_0k+W zJ4lG;N&4E_ZAha@d%(;)GKZ5iDU)pkls2@BTiDVes7gW2#yd=8RyX&+*)#<9aAjE{ zX_^N`e0141;{Fwlxg8=1$0o*Pothq-2LIQlc_Pq_wHfxZICk%oquuJB>7+4o^To!- z8)%z+y7ynF%^!&*)Cd?RZVwi%Ut8$|qg_B#HC-Y2Y%+lk34kNpqT^87~S_VP_S`$QJnu?u%ud$3Y(;zZf~U`H@n0ybvA-s{t?eH3aSSlZv5 zuck8LKMHZrN^xjf55j*-{Hzw*6d(=n{F3s;Mo(G}MB-g`p=S6!br`r~#Ds;jL|;n^ z@T<=xyj#YfB8;9G`8Bo{TJ&3@WCzfXMt`c!>`AHRLf>F@P*I=~5qqRIoNl=P{hblN zuWgj;fn19BI7l8^pu~xiuv5DCuQI>d;E-$_6n_%!&d%CJR~D#2w9n2z)PG-+U3i05 zUHZaJTG}0QyP923+6r4YorkH@t$dS3#S)d7Wan2jj|h#9Rg7>Wsm)R_WD1zG5|o%Sg`u>vq#)nhI`S4 zkTi)Ag*nfEC2L)37hYdW3{Z}#2}IHQ&QQ|av(h@}#|JeedM+blOixrK8F5wa!#CYe z2}TSaKZIcxFLT^-fbBis_$iA{h{QL3)7Kl17d`RN4;UX zdl^x9J9OW9ohMw0$=Wo|=-JR2B?AdN#VT=b&%#erBUbmRae{B0*Qc86qT`&W$h8Ok z!oFeq_6hF?Sj0Dc++8G*Bnl7T_Et{3{q#^XD!gOvXY!D+kGKBEM)bjIb+=eta5g>@ z#kcrXqE(Ib;##T@x&0`tTuW5N@GXk>lC~}v?j|O=X2!WL4YtZ=jiFn-P}PJ#&RI^6 zsK6z144#G26;dUER{{olb-PQ}QvJo{JBp|e(jwJ1usFEM34W*^ztp7@95N)e;h;c% zk#>9XE&q!rf!Z!yVV(k7bsEP{S_BGT6Il34iIz=o+kgFZ(jrzDQHFZSjnf=%?;v!^ zITcWKGA=d!5(bfKv2%-6XL4HDRdN{z3#WR_AILW z()w^$1CiI<_`=pFi|%CXm}58OH0r}ObTts7x331Ks%}+Y621IIZMo4l_FEA1(%gtW zSWat)V{V$>&H2(9Fz$cNY+%nGYl8$0jSypCQN}fXJm7`6V){cMBhU4Or9SN9Fqk~} zQeL^irMU!!q(Bo;FS*i2Zwp|HPLZrd)jjibcUOciCqgi5_llt&2P@^S`olLukJl#? z9cC~Z=wr`hEkorK_ubVMV(J-FdhqHkHd5`w&r>Y;UBC{f1JMqLG!XYkxqZ&JfhL^= zZ3uv^EY{%oT6XrbIpFJC0qht9GQqA6`4q(w)p05;Ad**?O%fskykYawkwv5g^X*q`=R@_q8qhdPmn@4EmF zs?)DKnS0eOc9pZymoz6$d4=61ESPqw#KttR#99}P-$=es6JG&?*FBfI(7q4iL zu6K42pev72)&=RU%pM&FjhF0g%zedw^`x}(*MmZsrBTv-a5P=zR;?(athnsOk}LoR zC4+>_JJ!BaFE??5_D1T=yR(VyJC6x?B(6$0q{UP&8 zDBI$!Rc3}Po`1U$8LBKJT0DIn$fQ9}=N8mSG684?_8oWrtAm{}NA+F4X*X{?HuFft ziJnt+4RLLvx!h~+?x=u?EXZtz5`em}(SYWd0W!2#agW}a!Q9PMuHe!M?_gf1jxmKqY`e&hao z67VSqeizU*S`pc1Ah`<>E!Q__$iukkxTUY1=VzhL3>|7kZ!BC~eQ{5-`>-bO&X|UfsVg_~Jp;^0)Re%@A!S#QS?ng+`8@B7ElA#NDD$ zCzq-)+MOSzRk8;co^&KiAjv4cxfRh*b{z}?e$%6roUZr21)j6q$IR|7eXY~#OrB`3 zT|<6muc^Qori8e6-LgMj>o%EE=8iYo`KvP%vA7HOUikn>$NX$T)nblQPOTo_YB`Df zPX5A~7cE#*0P6sb*sf3tWRnHr5eo)S18oM{6!N-YzA7#+AW+;E3je;l?F$aIgO#)>|V`R)}7%QjQ`- zf;#LjT2FzEC|`&0BV1SF2|tkwY&$Yk`r~xsH~1i3K%%mt0f*pvyr~qk%OF_DEP)2b zM)ETf!|Cj27^u4O>~i5bx<{#~Jb+1F-dNqRs$M$xij5zjipFNe$KKa}O#2ztFX9Z6*nNfr?Y z^Mxxou$d(DrtoSe8JbWkZ_JK9)=HY;{um=}Ge?i8_}V$FBrm4xxSvAfAU!S_$XD4!jbDN^4kBA07Z;A##Gjd@Me1sTx@$+MT;1?QmD`b zCI6N4O93<$MoSd2N&7KT`|=MY)ArM-0?smpk@&5soi^ozeh9foV|3Q-{4d_21L|hte~_f+GiX>uHLT_GeQ!*fr>ZT`lsdB-HICN7qX|&W+}xjEp>$ z<0mueU5kr(Fuk&qfq^2v{g-+)&Pr%;^U>bQ-wnWP@~@PLZoUP>n7)A-DmyC?-NE>$ z?h|aAbg!=eF)08S*mITQ5+s$Quuv-%NvRyZhY8o@d?NY%^SVO7o;FGVe=F z!Dt?1VpDU0m!bdQ0>jl)Ul1|Th$BorbzJKPp6R;8oYd-Uz0!4+$G*Lpa=VU=(QiwxKh zcm>M}K;T~W9^;n^JU~))(^^2}03Q{pl~#H32O`Q!6cQ)<^PJ?;Pdb#4MVAxJDep3- z-$lJb;Pw=W6r& zc`yzrCUBWR1~&RNF-m>J<`r_2_wUde+LZ@iV{DGm-G zRpl*Gow~ki#&@M~sx0EKj2B1C3sPhNKyDRw+YmYSDfQ3g>lvo__##rg2JJ~Zc_V;^ zrOscR?Cy_5b*=br$~Ztk{! zB*XVEC)bP$M+no!g^=xD&HA&%nJmdSl1J=4?d|Pe7CU@~RTVwnKhkyl4N^HB$HQT`|4K8M)B31Bb7{(Aq%0UGs`IEf+v(X z@dD!nF}q}s_Mqv+klA4kTYx}Y_n>9oY4MitmpO~%(jqb*rp8fV42r7Mw8(8jfwTzw z2&SR0{62sa)>pfWPH^8^0Ngf|Vj@7ej*3N$0`_j)RP9<5IH5HnhSvF@+5OlzGud$3 zV`n-0&eqb;C(VBn*MngM_!#XlhECs53GyXzcJEDj;7vd2?o;0qCv#gy&TVU<7Ylg( zM;#gVBO8xhMb-WyiR?W(zg7i8fBet)PQ!0?2;Cc&e~ z?->3?Pb|I$95W`_XY_w|mc3Av$oV+FwDek<(|@H0(MR7l>yU1z!27SllI392(6(cV zl(oA_^S+AhUxlef7k;(i-TSG3mm<}iBnPjrXEVu%fEFKoGWfTxo(b|7KB`S_Hy8~p zUKIY@@qT(DwqFt(t|IxtCdnl30$e%N|2CdwK_VCE*m2^Q9dSGVf5TTURaWjF65ZaP z6-3pW@|GSGc^L-XssC?njznxV^05Var8ye`3esYRbN?zS*;;Br~IL>TA%xa{%u*9kLVDtQ}kT%nUliPGv>0-z~MGd5!uW9W7y?>H4i-Q%t z0Z@|%g0%>B?+J5(oF^R#(HQ@HO8P9`%?yY72~B;aw?THp!!}0Z^WeLIvYIz(F)QMH zMs+n4n9PheC9f<0v7dgUjal+(FWERe`1`f0GFzy7SPnb`xZz%$nr5N$}2tj(|FEOMo{~)#Cz$=S~PRy^=3-C#dtB!U?xy2|Z$mrx8PZMJp>h~1m zL2eG|8fiC}scM?uf|}D>or2`BQKU~36^=^>7@V)*i>_GhCtum{rvl`y*rmV8e-VGf zxtICJO8~|MFGQ3&!(bX@ZnQT2MF3=#34rMpJxYbMqfFbqq}VZK5;Q>7)NcLaF4z+> z`+TEyL4KIAb>ho!irSEec@3qRPeNhV8_z+0o$BGQ*@Vh5x>1S;0ZtF*DMV@;o z>pfMx|D}%h`Ny9b0haG}3QHjgqPF~Q983pAksP8kqpA`pt`|b0B);Nh)~m~Oks5hBajv>7C8P;NU8;uG)L^{lSotPSVwr!(8!_p9yYN4-@X zQ?~i!DJtz@_oGYvx$>64)YP@9>w^Gh@wJAm)_wcYsnNlxqp&@nd}(AAbT=GX3U8x2 zQE$Aqf;@lsi~+rQm_Oq>k0(9VC_0bpl*5?4&A8AY!rF0n| zwt8_$=>Nrj&%`&7@N;HjpmP(A)R7A5DNsgjS`FK0_A+ zUmx|WRBy5D46FHAvMBZ62a~371@o3LZfp31zegRYq)239NKjoZkNHz*kF=zPwuFdw zOvqZ{{+7N#c)L!r{C?B>2w!O&KxKoabWu*dfuX>kXGq?a!yt^AXPth-I}uMV0x7^3 z4M{G_y$$E*gZdmfGh9q#vs|q^SaoXWEl&fu$c}OZjKZ^u zh!X&|wP-8M=de+c_DvwZh|R_mh<=a&9yq~lk9PtRW->34K+^m{+4GxIPN`@q?`fk>fWhOd2LIDYChOxad z3AR;tfNT~Q>?v_xj~^)LJ7pNnVhraxl;2;ST#9cEWlEs+{5o<<(HUIr^NH=@bin{f zCN{r%)qzk7zGlqeRagfk(bSI9R+D$694%WwWtgE;bVv1vv;0VaZN~}Sqs=S4A!Po( zyjfZTz}b+YQmYHyO`~@8N%?j7mjz^>emTvMkTQTI z$GuJe&XRUxs@-FN{;$T&?_zvpR)8D=EbxCMb_lO7HbZR?gs}BQN4vte9+dK{+})SD zdF5E_Pl3S$=^xZYE{OmFWd)32$2vIyZhrOYMBGH&H8UZIB?Dnd(t4s0t36Q2nar^q z3uGltLA_TUQ#L)H{(7xM0{Hkcv9%kk)j0PP35(YV_uFcTv8Q^`~xmJM3{Sd_B zQ-nPRX^(XS#NMqW_*4*@A!sW#=l`bc$$|;J3;a2Mspk%qY7Nf32|^`8zI2VytS3^0 z>iKZly&2s<4c97hp7T-?^cN-Q86@a$GM@lZ>m<58PGf6Hnc3~8#hZH;Q`{EM`CS2z z-MuQvQe8|SMd(ws5MosnywxLLd3OLES z_c&_+Ir2X8WjSOev!M5q*nBgu`hMOfwPADE_}%=z&k62iRyECCdJSI>Q1<^1ZC@P~ z)%N}^A#nu(Q2~(<6jY>@99lu8R3sEBX({O$QUn1drE>t0l2oLJP&x+z=>eo0h8h^^ z-N!3_@9%p5eb-{m8o@bp&W>k4`}xF9Ab*agZJVQ7iV58i;26gUA^DNCwDlgNRbXPy zbcoI*w3yBSXnu3=ODhSPoe=!3H=}#~GQegoDo7IUz|#w&t4@%(n;pkt+IXwC6R}^Jk+EcMEc%v2M52t;*!84?jSNwwjdotxgt#m-G89SNM0M|c1+Yzc=7ORgKFsx`@?ymd^-3B! z6|QUihLPcQy!4JDPuay-R!7yVYRTBo4;qtYyiqD0k1SM0VPQFRjdB5+3DS%|i94@6 z#+T}91A_W*mA`Jks{vQS&YptsA|wL#0shWVqbA>T-@>N$CUT}$1vWp5?=5lLBGBE; ztQG8+;;^pNgMTI0w)}WYfMDht_MlsDv35w&ofuXF)!bcc%1r*cK85YwS{jPZbO4+9 zba1hSImXd#-%&->D11EjoN5ib;`#2cWsUu}wA-BY#WrU^?BA&8_4roSnfF=?cXvXk zLC%J-Z{>vU6T&V26W*?`XX3;Fe8ZVP1n!`}`N5kQp%A(u5}mF)oQacI&Fh7n580O`C%JlaT<~JgQB7^@xR9Plp9AJHgp6>^IDEEfrXaNFM zc$=)g#<4FXclUM-q6l$+*%VO*Zrk4!Tlz@h#X$9q3aPqSw*{Cs?ZS_Zc8+^ZQP$ap zfEcdr83hk!D|q-~;7r6+Z24LXSLO2C;_74QUa$;BR{>t$c42$q+4%~S;25$(;-1F|vDr5>+uK_ne*D8RMu)N0O6o!X(H> z^Q955Bg7^5Ii9ob72NW(y!+?ZWBOM&9+@Ui$)2JKd@hqYFdL+*WAX;JL$l^jf0KDU zy5_Tf`onH!1s^80G8%3r;I|}j{QTSC+cJC?NX+BejkQ#5QYD&Um9Nb){x0h|F6Y=z zxW=67=rK=^?v@m{R%2$AyG|lUeA=AsHlf<|fCx{zLO036YZ?>2ckVYI@?mAq9P%;6 zflNeUNQf($?M4}&ap#NToqME9Y>V#_5cxW%YYFox3i>l+l4{AYC@>8*r!$xajq$=4 z@MqZat10iXn#5`Zl^Tl)snwasXZ7V&aw1=FuTGZnhvbzgRxKVQ-N|GWf5(k)b+MBj z#<@vuyd_{olH=vYitSa&C_bEjUPJKuK#dp8nsXBDMOY$ID7*;RWAur3GO6AMVSM~& zV%ZZVh)Yc=lsY+Z)HLm%sH$iSf@WYXf~+!!fOX@EKp+{MEJI8=*K7g!iKInJ5snIu zq}LSI;{ueK81ygj@zpr5@CunpvmknRm<5j2IVuI<+WzJAaQ8NlbliSU^OqYni5vB$ z^E4NKY^GlE8GtyY5EqQj5PkvMKTa+m!FHM2*`GK#!ZcR^snJy?-_v;(@u)F4bdydYOVWoFNZoh3)Gz8yT}{;a0{$fm^|iDO1TiV2|f2j{qTJMmSyXT0GjA9gt>x+i~o#Hu%9NY55n$NXM#pXq|M4~FR^7LG3?!Xq6?z40+!xN6|J~Yc@Cx}ldpuCkf z8!Q48PQPtEZ753?Wk&b$>&fMa03lJfYc$56gOruLc#H(6un_{ZFRqNa#aN?{5fTO{ zm%qc9(K1pS|F~5zuf>L6eeX+M@7nHb?w>8|_g|Irht;Atf0~VmY?Ze%m$bs zj|}9`D_urASov@eot^wrtbc2l<|P+f*lvx9gOc~mPE9rovpsyAsd2Z}{so3OJ)T{_ z;ER2opA-G(3!TEUmf!$*fb(i z`ed8Xc*DFOU3qPzZS~1pm1G@~`&t5DT-yy_6PdeZd?FD40!Y;1O|*xUmfr@)tolMdzTt%B6`c%$5)rxWw8ykX5PiJWYc}h3?ygh`&p?7 z_Z|+_Cv0~4%MlBzty@j-;~E6zyxjWZDV0XkZHm2O0{Vb}prKE>uma{KaN&93)HA!2 z;&=jiNCS3sE_WkxyfNs zWtb~ceBrr4twfqc@Akw}ke8qAmO{nbsG=+5<7Bk`1yRi3T9}C_e5qrC(QTw7r=`b4 z>l!SRmt{8_ElHPIrm!)E*9nK<4W*jJDM@__I|Z@!_%^&-m2m&p<<)DzVo-e1e@pJU zeUcWN7acRNm^Tp(&>~EUZx6{k9!R`j>BrK=uXP9pGxayuXs9pU()qs{h#EZgSKIaMEg>#G;)G1!?u^2}M=WjYmhm&N zO|%K3H#Eb(slu}TxrwjnN)nT+B@cWKDyF9Ta?-YLTH7D4>s}vc=_3(ebYbI8V|VjH zdIyknl^o~y6ES)wu~jffXRH;{%6e>^;z#3khe3m}V+IkGygiC~?44&9&{*H6g0kmj z>PQTU>*$Gy$Phwtg^7z8dEJz=oAOCbRN^;z7Zzx&{BH_rq@Ki+v-eWlzgMx8Uo~Aw z9?_Cg(xd;J>}h#W1S(41fuyii10tFP_PQ~pWZk?%#O;a5r!=#|3(aMH8!WuSj414r zNm9%ADs@+P5Z~zv&-*v(wv1mfp?=lAeH&0m@{w|-f|p-JCt9R8uP5ANQDn+wUo;85 zNaDU`H72(0^CAca-!LZ{!k#NMU@fjmG#z%Tz-hMdPk2kat_;Xq?YPnBjETOk5yb_T zljj)DRE^P?QonW_qreyNYY#WVM-Wl;$9}|0-<+VFVHRNYCSZ(F^OcD=qvhzQcA}wT zH;Lg}ttof0{NiE4!533E?MCtGBkE#RE8kezglpZpcWy+A#Q)_?Ul#H**&=dME}3xo zOs$Tch{VLuIKj{D*an*2bnEe}p|bS3%G~&LuQPqL$J;cNWu5Fe@dc!g&#`^^)lgFY zW_fjZAI+#gr4Nzp3s{eg^yx6tw_T$`XAJQ?P72zSKhFOMDM(d@<&jAd^RN-UJ;f~5 zH7CgCzx9G3!@@Vb zucr&ENqO1zH%ZiHD@!#iJX*Ua4BOUcbmv66dRI=~dRREe48!(!DG(Y@9NhQC^$8Na zlpxj*5Kh1sgqRYerI5zGDzyQ-Uhb1A5>BfbA@A)yXBCGzVT+Ts)`NjHqMOet@6#X@;8oa!;!JE)b1(O!(8-sN#w%|a7p;t%n*?^TPgok81BVxv)_TBmQM!k zP&7jYFPk(gh~`0G_NHFdzj6#MZ+W(Ps^;a9J%iR|tL#F`m=0JSPN!5E#o3zAeTsT!A zwaC-siL|&mM_YXHm~FcfAt4(T!Rr}DReq%9;Dt`A7Cy3?2P7sm1u42hR6AzENCr?B zrh6)Ley3IiDK|dOd{4n6nNn6rRR|ClJECMM3T;=>pMpI)tzilYv>ytEms{r(vez3# zw-j7@LfZRjU~D!UyhzV+^JvuDvxqBV z);;K;{>GLq^GmkHOL~((nnFGleWx`}t;&oyRG!Z^ckO>U+l)?Pq5FCna5SWovOj&J zT{~zty;=Fa=&j~31MAnd6`9_=y{h}9bB{uVtxT-GoNU3qF2{cOB%eU}eU-ZKrdJ|f zVPMdth3%jzpea?7BpS} zs;7FUL)SDI@2j3)x5~Q{e_zP8E#K6tZ{U+HQjcRCQAOjHqiSN()RU#=eon}uv1Hgz z(Q{dD*xqKFdNr@GH}=MsQhadM(tX}W%lLuyCR$rtG<((QMzetO!kKRxRuk`@Y+T4o z9a-d;;y#Q+?bz=0y;{4;xPt&>+J9FdpPsrre;Su#pfpg=^~(QCeEnmCjs>|IDNICpyR99=HBsEj0aK_;TlGvIwI$;$P2) zu;r^itrQh6osdu{WjA_us!1_+FDU-m0}aH@qoi~g@`LQn`0Bf9w83t65M zcgm?&h4&X2R4t$V*6x})QFQmo45`ma7TxgcEkXlO&Gc&D@?GMo?yf(%Dbj`)AR(?k zq|~|Yu?MFcq5|qUv8f2PVaAT-B@}0{rn35_&MfcG@O-Yz7Pp?SGdHIQ_@Wu-QqAtM3MRi=864f&`y85pc0RQZ)fiUJqo+Zn_oWZs| z*NYIV656jz6u|Qf%ukk~);G~U7+saMrFb=lI$E&+&(Og@o ztIE)H?KfmvMBPL;W5j#9BJ>tZGPyp`GneJA@+Y9m;UF(<120#PTUTl9+zNLcBx3=@0c)OOC=G?+s`tQ)^z`t>ll^=5O)_wx#LCa) zJZu}ev(Z@2FZE_V{wG{1?S2WeOxRc~M5lw=e+H!0ja{EXt3n>WkOXSbEH$XBC6a6Z zO!hawZROCz5^*WXyb1c939mt#+-{wP-S%i6oj8({=d}=2<5W(@J}SRy6nF2k-n4u4=#dzHHnkh7GM$vzxMve? zY)Q5Ob_|2ZT>uCRlZ-0DI*Yf2hX&1v5xaX-S;BUX*qO;!Xn_4N`lX!zdSe{ZFeq8{ z)iv1qfXXCae6IY=shJyJ-zyyh%us*Hcy}=y;U8NvTx8y(i8f=F+0~in1V4AlW{+K|%MmW=>tr3a2H=&vL17p3m*8 z5BXfX@Td}ijqiZ6nIfjbIsf$5t)-Z&zx+$ULYh1qU-wbwJo_|iA;EDbuynlFr1Pz-0=DnRKfPxhQm@k6OWCe{$hk)~e_hDO($GhA+m=TIw0a8~DO zNH9$lMB{uAvnCVRw?$`FXnJ(*1R)Wrb=ZGl#`WJB{n1S z)iV5YZYj7akkO!R2w}^QLPQ)N2ORUR?t!8CVYphp`qInyzpeggj3ew39sd-vENUZ@0v4tj$NO+##BgTjdTUN}DSA_c;Kx3&6u^rf z-s6pLW~)&E+a}{tmxWviX@=_z*hRi_VEYwif?}itSRR?x?Q``P(Z`xTPL!WI!S>*9 zuL5Zz&YDp%;v3y9G-z(^UXQNxHpX+`vo!~e!j-QcT8}R^cn6DsE_A?Usb%14ctsc+ zKAufv8hE4@?3Yko2Gpb<`{WYcZnFn74Q2UZ#%PvN?{4T0e5n3Txn~fu1NBnpZSsPP z0kH;_F)gFl4|MBIbt>9Mtyn%6hkp-f>@D&oNl2nW^fqJt^gK5hSA!zv{_fhO3pGiO zlK%ESJQfu+)!6cG^l2?cV#le&+-pz_9Zt8D7!dn3W09@!>jP}}^vDXNPS{-kL1}WW z?=M^AzN@C1_D)6nDSlpOPpM#nnaz`2zH`!xmRp35i4Iz*35 z*`jFQKL&n}N0qi(a_Z4Ye?cbVMcwbk?%Iyy|Y#P6?vv2EA6AB6ZGY1J5S>%-AQ|@e)ax8$$#_&=YdPVb$#8pV2t^ z2dL%Rl;TvPen~5&o5@+94wU8^w|Yj9%DxpDp|E(9bTu%> zM?$ngp&`q{o-+HHyWd7Kt&_$6wp!{;CNraS@h;a9ILc<`gO9z7FVO$;(&5W-y7wU5 zNhSgn@SG2=%54D4D*>cwrn~>6p#;^-=sma94~?eZKd2*_52;npC+)#rjRVd_6N}?y zhPt{<{{}=(1;l&AP(-4zjqW)Z{5fRxp?Ry)XMPY%@w-rZ_a-Qj-qcsmJ(`ysge%pD z9{5_8gHUF~+96yG7aYgv*A^Fd0urUO-52C!Pe-*BW}8)_b0VfalLjqrbwUK&l7 z^WliA(Qxy{l_db?-+$Jf9;9la;Gg8WT*foVsT326-&~kk=y@~~l;JYplZEsIkfjPR zO~}591%co_z_scmmf)j+x)kpO@aUdw&HN1jTc!gUIz>f*WGA;t9|2Ol1;yW42 zglq{yzyV;{SkHY^J*ldyTSa_lV-sjG;9_4HZFT@;Ff(NyFBVJLS!AJ^PxtK*;*h!l z0rC?R`{e5kouhsH0qUs+UFk?*u zI7<4?F%qEA7w%y%7TOMjH9Y|d`ky#6fpDYzfiS096)njVBu{1e@uMd3R;L`@<`nhr_USn50NH117hTor zD+iE%R8&I#1csIlIAEy3Imj&Kf$9svF|QoVeoO5Jc>5CL#241|udW8at?+JL1T4av zF(2;!O54tH5u}GFfoCJ930Bwz2MIW&-~q~>o?ATFQi+BqVB^>$VowF*b|Lr{zwBHc z5Bx!x=+>Ym7~W1ZL!6$*;~IBbt|Evr7nB)T4;w-2SzhX~|~ zOJ&D^Ykp;~&3>Tm?0@70D@#%}ad#oz@-;atWgS$b2_r!4AbkQ>onn0I6B^wOllO za1fSgMdl+7{am}^ML(-}mv2Xol~@-1=wD*hM{KVnaVTrxXJ9rmCtQUMVq%XY)h-B3 zz*^3g)xf9CbuDs>;%0V$KF^AzTr=@en68&XImP6gLSwS%M&$XC%@WiUcRPJa&Vj@V zLUlb*@cnUfU%Pry=5sw=8ZI+j56^{@0hN$dK;CB#YG^WNmEI|jO0Yb-hdbnT(s~bG zHnR|3poV_92nZTVc8f4c+*)>3fQKSH@%_}Mx~5Li`n{rZmda4RPndY!)~5PsnJ4C! zjg&J#KDzcx@E`cI2b;CFGfXTSI!n1WhgEGU=1ruWZw#kcylZHV+U-(gnIel?kJpNc zD7n<6`Kv+NsJ&npt$n5Cm45vqr-_)pKPp^v)#Zlb2)DWESRN1=V1Q1hlgY8?{?Y|I z<6)PYxG|6CUZ(D5w}Po30~=5U?4S_7xbg$Ma~!Hxsl4E%zXiO z+L?K(a%(WV(qsuhyz<$V83mq`>@4OZj`_Uyp5;?NMv|-_l|S!&WU7PilO>N0h{=Zm%$-j6aoQv^DwlQZt+jqVH*CGy?j<=7Rg?TNFPjba zS|d3`-9pv|upzLIf09XxVFKixB?2dqE7@u@NvkN6MYR3yG!D>dNq6Gjo;m6?Rsy7@ zyamI6dOb+)KZyg9`=CV&J!*v0TC{xkn;!O!rUT%->p6GIkUFAWdJC^Ax=JVXC8_JL zE(19eCJ}H&-aOMDfe@7PrO`PR=Xv^8-7nKJ&jZ(LPm1Tbu7xKJw}dr?Ia6gb`U2Yx z59N$ELm;kepUa0EcDiO%^nH31#|tltH{PJYX;#jwFEy{U41hp1gg|Zy%xmAQf(AS^ z=6%VBlatC08oSj^v{ql%1*4@^qdj04rA%`~Tt=mJ!55NP@+9))w=_Q=jn9;9TWZrl zX^q0QG@djOQ8b`LVoY(Ey5NZ#pRZbfd{q+ZVc^IxU1$?4R_k(KuK7!yX@cLn?3~S4 z11*)n^;?&a8_>8e7^mekuq=ua_KRuTVtJ5sE4T8HAscP7bisC$w4~q-_cQ#f$asgp zrvP|WRM8)Pu~{t=G8~ESuw9F!{OSs z+dQIckK$I;Qr03p(mWYv(mY`^x2_HSJ*EaOu6iEcE4=r{wWaN9PtwTOvp>*X7LTl5 zy5o5)qu!tRIqtyFi!mmgIGhRIH;sOq4VN!8YMZ=V(KQqlGBo=Wo>y@s{Y z1nfkMp7ze&{IL5o&$Op*Yfkl+{T>;`FQEBV5QIEqO3kOb1b19%B8vnNKWtke(XbBwM56e1GFD@oTFY*@QTO%abNR{AzmHd z87^x#82^=^(mU8o?7yCiI)r!qIC#1t!=5duouM;r-c4oMpPiP#4Mw=Ip5Tkz0xk>jiV5!& zkHU}x@w`;oL9M3Pv8?Ame^+x?Ci!4xTGrUKU7967LCTrMSD45>;~+8PD{xQgqd?$% zg1l`Len!xrJfQ=$Y3yx+uC+23N<&W8YX^)TQqzlmd7fM zcPG3nsF5GgS;SutnCswU59?wIRX7RigzERsIh9#&*m22Vfq!Mf8D^(F%qDvp9Syq zn-4;(JaJtr!hnQ$6p|3NOGDl;gL0D%-IT^gQorwEj;6_Tt;;Ym?C&tDVNF;FCZ5D> zIG^~+!A4Q<kYjSvOlZbNzw+8R3wT^Im zhZsn{emwpwGXEW)f4*us5EjnMu$&vp&MSXr_{er7qrBy6_Gb|)e_9layIE;TliRDK zsrPqk1HIPVmDbmw+*k_~tb^E}#Tlh~pd8z72#J+Sa_vXndVsQ#lP1_BM7(8|bH6m} zp7r$Cg!{)uPJ2BP>_oIMj21ymzQJW-Jz$ge800NXeG#i3>WV{ z&V=)*k^cDr`h9=ZsrnO|wtKfYU5A8`@H zFtKCCw*?Du1Exuk*_5^s4}~37ptfPqjmINlWlb-`evhwzd^C!dP|!M=YN5S`huxJv zY5&hY1ix9J)tXMsW_c^E>bD!9_LhD&K#m)6lv)JS(w{t+2l6%1Jgc6gRdp()2Cx?TmZezEO)28b zix{~*>EGENwNK3+8U1B?*8Y)MdExnky%{NI5*lID56TK?l&!bM+5di)6RZW$960O- zs>4s(pp2LCpl@>fVcpY3&@2>Y&8L3Na{I`dPLY!8`48Dba{Hj}y$taGz2y(tdCxxZ z&QTmb$@Sbg>bC*bF{z@jKzxtEtVNY9_Ud`=XB`gw*tuIGGW72!17wRIGJ0SyAXd1) zkW<*P37h5bnt`*+SN=UnMCJ6&UhLZFxNm+RYCN>qpXu=V#NTQ9@~P3UzN|UVrk~9B zWL(#`+!!vG>Q*Y{*AsH}*W>YVl1IExWIdi1R#&V&IiS8zre`?%04X{BHNGZ`V>AXg&%e4?-2_U3~4ax@}+}fKm0kMuT?`Mvf7HS{m&_^ z!Ai*AshQlMr2c1YjM4*tiykcwnEpL9e!tC59ZyOOn$Yh`>ExseWbzfx%AJ=U*Z7q*M(sQEH#e6XxGmXQYql- zI3+(;%t)*ZfcnET3`E;q25xnhy4W3tVKA>Wa6_X9#Sqc3A_F#c1p{2}m{swogdK_h z96N2sgo60f#cOYp0ByIO=%7hK@{{YV9Lt~;*uG#uxCf{X#wk&R1jV}lo=O!DC9Wp# z!`01)RF3vR|A_js`p2OK!v(|T0U!2} zn8fa$0E#V@y|ifELDUQd4qHPX-CH>mxcgU2=57xc&ry}lB4-0v+mgjI+(+9F})QX5=DtA9>74zd0BPFK=q&P zbo4&bt0sqGmSS}+0ZnDZuohLE1PBKhZNND((f@%M&S&dowK(juFvNdOb_&AN&ThEo(jOB5b3ih;yItP16 z!p?H$qSsD8`)VMTXz}!E`MUj$5xG4dtWaDwUOxZdccC=`-GayFcTH!=t*;!1nvnqe z9$AAiMCG7^?^U8`Y)58E^%oMx&x>2pq#bH zRhPXUs3X7oBni$pr+>+(++0m;_ZqL&161KrHu3ubKw8m2;ShPv+bTP^c;3zADg`Aj zHcT|!jy^kTL(jJU3%aB{M$Oaii7| zWxX+Z97+Tr{b;^8AnrGWKUvuZf*(DczXI&t5GWB=xDHP+TQy6u>%?$58Yjf-7f1k* zx*{4ic}ZDn(`}$tx0eD3<+>fSLlLbls?v-l5 z*8dqOD=l2Na zHZQsiLB%gbYV~HWjU&*udE$WI*++38)~W!ONbMLXhaTDQpx3=OHo(KqurS9Vc$E@y zqMIX9_pvb<4kTU`HXiHoxz+&ZQJ&Ftag5cAoun{+Tf#S0Lb#jXA{D`}gNQVB6OXt* z#rx*u#Mh_D<}+@gvP8pC8r2~MC1?;%U^BDxO^tBp(<|J{m(w?N6! z^6k=;3ugG7MGn8Qe)CO-BQF40v_Xpqs-D~Wo5Yg2>H-f?JTJSixav8BU6eD#bSMEk zUt#aCl*e;fTE3!aREwYezxO5g!qs0(0ufEt?#-*gRKj(e~U?p8= z046vWLsj$u(?#?`B^I>?{NHp1_0wk5ORi%oS2jvl+*gJ$8|lJUSmT-~>#ijCtpUty zPGmpq2hbFnJC{^oauLapO8K)uGp)0q_;8AGDxF;H7j5Qs5KlA20nev=9W7No*GOFj zq>CfVI=B`T6lMF?(=~S{94}6Q^7#@^`RqFl`S0K4HgoRs5%8Ixs=awEbq^HlAL0C@ z_EI3^rw6F+jF%)`95wSRhNpO}zUnuXZZ!Sb3}?I!Z6tWOlr`SjF*H(Wlkj>+zCCzJ zhf1#O2;@hBxTy3^zf{13A$9a%tE55|l*cffQajCA>qQeItH8dZ%yncP*~hHX_+pCY z5RwK}PT$BkZ}wRAW^urkq21#&<7Ie4Ek?J%jTzu3Ii=@$ZHCO<5?dcbmaHAK zwfC#fkVgKQ6=)4Yd9>BI;S|3$V7#@ST_9h9jG4vq4Y+C}-?ouW8JoHtVnaL^=_gcO zy29hU%*#rg^F0B|WkYg>YO7*&f4SHPxd`P0yQ_Xu!-4&vHm3l_h5HIeMGvcXIV7FM z04Y?@JBi`o67ANOEIE2wmtpfCG>n z$55EHuIY#~vjel8Vn;T`6q(U_+=-}^=0?;E{EbS+xPabUk_QWt-073rY6 z^?1bQl-JA%?LuU2smUsOA$ls>wr$m;!yefkXwPi7iCRxw8J>SZvm#zOoQ>|(>_ECM z547-+zlg-gH}wPFM+KN_8Hkp?C-&{>LcJWvC0D(u93Zvr&`qz`p$b4pn;VENpAz{a z5D0mBYMCll^hETL@tr%){0yfhcoSp4#Qba*R?W5*$PzB^-h|bykU;TFVjD3|~+KMqEP*9==;Pp1VUPr2k2X7?v zs+On|X;8uGb_qz&cf#g63~Zq+O@k~ZlW*W70K;RH2te*Yr0seiQLWa>G})Me}wfy$xxhgMWBuDCNMlGzcY5Fo zGs=GvyiN{W2a!U5>_m=Y4sDC!j^Ky&2c6{zf!Utk{iV$s0k97+()>^f%edj>eNkKe4+L zkdaZEA+*kr>8debF}M7VMTZ1au2f*IAAcV0xUTxiNC?m-@)S=I}|o( z;Pp`#TDOg6#ioy&`2Q97SaIYy$u>9)0>Aw71dmx`coqGOwpEe3;A2d9I~hm#c`N|o z-L>)7qT)6%?}4@LA8T8XSL|yZ3`Zn;UWefOxlGHX1Nre!VFO zgzA9uV+^Sja@t6nm6hq8;*AOlhY$SH$911JT;dg+dDhQknIl^KJsk>^*$YLRX9bGP{aJx+|F zJnIwNXmsmkBY&6V_!`$G4_lIFh-wQ_VfHmj8@QZyRl5cEO6h&k>n02(#%%#J#!exn zV=}g;TU5@5$?^0Bb)e|roaDk%@d?p4BTUmtys6is&!^31)4cPQ*d;n|EqW&L%hH{d z<+Kt@WH*GbVmXo%bxUdc zLB?OkMtyGxxX9rv%6Iu!WXp?}<0=5fOZ(l6u`9`fbJV=p-~*Y&xy4{Q^)-+j?!Xea@P zCur*=oSPSJvq@6=LQF$Y1WP zhq{*R0E%Yc@*M?8e* zdx&sl2>!X?Up_a{FE@<(E9gguG`IJ+@b=2Hf#4|U5Kk1hAFpcu^;&^zxUKij`C5fi z6kRPdRTf_Sd$DM@bcVu;rDAPu4W6o&BB|=+C+0TJ6+@1J4!C?l6gMX?Z`t}K)qxF{ z!ER)4C0K54Xo&;u?XH=7c6u}SY;lX1ERK}5@KSR0t20HanKuayyr3l-&K{n;!t_1W zsCh-kjSxZp@0rP`NmeHt`zq@4#Pd>P*0ot(uq|7v97SG-jAM)X68U);a+hVCJrN9J zfnA98X~z(-`Haix^TtT7y$!j}9`hF6Z}fgpKnPKrw4N|?o$8}=Kr})28;1)v-O9pC zV7F*`gCTGS95IlVHVSy#aUSYhB4>B}WW>r{bQp<7B}SrNdjg_>WxjH1_o_W8L=MX2-VNJa3OC4+nf3qR15$~Q-vp&9y+M)ms-t19NsM03XGYU~t`+06f+;VWU%puP8 z6e@Q!+^6Wu99K}p8gU0Tz*BYKx1;Z0MG{VY zc~2(9AvheMa(K;=B_m?ucfRuX8)KOx9$hn znu*?^5>@3Nn8I-H6ps%pE~l6Q)8WJn=HLdhq@=gEJrG`qx0ORf68#j8?Tw|z8`@$W zuFF~T;YN2`S*Q7nPh-}$phX-55d=&!KiJP%=(%h@mcsoJHBNHI^biC z3W)bzM|X9*(X{i3$x7D*TkD-N*Ci~Dp%?Lh2{F=4t@L0_C?|F8t{y%#!y{_B+l%f1 z>;%=E>(6Ljx2Yn+fGrQ>++wAZ3KCNVm~i`r)w>OqqcMQd~_>y zPKbS=nSlr5@yi26Z+=Mz6sii=7WFK=an;mKAPkIA-B6`Z^hGaW>nG$Ar?T8?VH5aR zSivloitI0*)yP?&ATDU+eBK95y_p?R`tqM_}i}MTR(3B2!OrY8*c3B$F*y9i39v^I z&huFrPGI);M)*~BDG#nCXrEkB*8;Yh)+OKM8I|w;7XyJ>>j&8|&}!C+nCiQdZUQ~g z5Ntu$`O@k;^a?vA`##_vF9L8TyTfkhkFJBz2T&O=^*Z@j;`H)K=TfQl&)VhTNx^Pdop3MW?brGh=|eS5}U5yUe-!?}PyQ&^uaylq8ZS zWF%TB)WnB-Tnv?; zT>&F=fWm>?@V#nXWYeELekQOchklm+yTB&2H2thU!zRW-VXj*F=IjlNDTHa}2`p0e z=6`-R6dEm?$tA$@4kZpu6Dt&XD?huA5wY}JmHzOhr`}3vd6cHwbA!Z&ad21DB!t0isso+dcyAs%skSifB!%z|Ut_KtwqVAdO(g8Kx_M z75`s8qUz-T-Xnl#+@Xz$Y)p&B=9(ex6^HsBTjVZ}2kBwcHUm{x4YXIw)SM5^;R{ug@IWzglJboY&8D#-OTu7Ws30Btdm) zx$Y=ub?JjJo7d#mn&R&h<=(ntCL=(1t9P%9C)aK|qt+6s{cS-welaR?vA#?QX1e-st+ zRnvxxgx=q$)hy@!plhUmY1BcW7to;@j776}UdJ;L4)!(PNb|h-yPVZ_&FdT^zB)0h z0M0%Zd)57Tc&Y)#Bt(u}hSFa~dhX0OB#jUX)D`Mtn9+?;2CkgS)@ReU1q6GdIl}0@FHSV9$1EHfZVw*;C*JxrfC-FvT*Y{_vj0 z6670>d|2}poCcU1rxVG*%XK5{L8NogM=ZdMtXnEB2Q@?oV*!W)&@8ZJ>*pY?gLDQM zHRM{vGPJTpTr*b52(X`$Va)E`JgMkhPX3b`0|B&iElnCuX;)&^IdmEwp9fzXehvpB z2n+{%i#|j2tp@l#PrHwwq$nnK8qxocs<)17^8New--;4SDJoqeA>Ey#APthzNayGn zFhmqkVj|rjDKU`lR8q;|kQym4q{c=J2ES|X`~KYD&+k7UihJm;bJx!6d>+r^Woo`n z7dRKsvQE}QP@XOl2olsY#G&kS(*QrO;I8$ow=!23N7<0o=w6YZV*fx!p)cZ1{dF((ujlYxV&I-)HY?!+^{2UPxJ~IwFo4HL>4vzR?*=1j8xyfGrFdj zfWvQ3-?;dx&~p1>7ARxg_Yn|@SHP}umxd#6`N%F2({@D-7 zl@$g7YvY=!XKfmVQ&i)|OLp`nd?Ed~kxeFCy){0a}DnMAK9iknajC{gXi{ zkwGg1FCp%V-?jU=)RSK2)7b=^(m(Fx{i)AIq>+mv>l@*r9C^G*s22pXp3e@p0b`0I zP!}zb^>WqiGI=aa8HUbj-WP*^7wLbhz&oMNfEE2+3w+@QK!d+=%(-sw0V$)@09^`9 zHPL_KST%Dj-D~}Fr~A@9s7!A0i_U^{8OzlC2wy^Y8;?3qXH4DP`z!nlXod6FR159_Oo`ar7qFWmK8JO=@*?a5nq<=2gAYDfOGV9J`GMw{2v(!+x(5hNJH91=NHF z5Q+M7OX>I|-gfQz6s*l7aN#K&t@>sP8MrS%ap2kXsZLcgx;v>Mpg?A}|f<=Mjs zQQjrr5li752eK>#9=MiUl7LdcWN`Jh*6ye(_r`7GW;aHkF+O!OfFf?oMqd0e^!yBx zQRkwc;hGvTy;gQ>&V_Ic?)u$0Q#E&}GMIdbId5TP7k)^h)S%+G)Gdh)=N zI71I|%=bb`c0G#MK<^vgq{A=H^1;l(vV0y zftT(EWAUf&%iTcOI~z~C$(Mj8{}{3;kU)s}7vp1-^%Ps%`1?pTT29@-g-@u0!)MX z(W;mW++bN|W4nE(+G~c~+Gk|tro%tNW`qOihTdl1tv~jT|5%eJ1A5~s`eF2A=(V19 z4ekZN!adDZ7Vn)*+p#L&jLsIet4;OMB60P;0D3}*T)>>``S7ieG-#<~;I*YI{0x{) zyCu2c-Ty^a#AvIhHpRx`pkWEHaC+gS2douw6*2Eg2QoU=t$`@sldO~Mew%ByX5}T9 zQ%Y}~UgFW50hp=y>#M$ys?nDIXG}|T&lEk~;##Fei_31SksIt5glY5drmN-n&*?`L zN~KMSMX#GmIoc5zv!;#STK~bqxg>+fHGXqh@;LLPUae}@9U7bm{kyqIb@|pgzuCmO z7X|GF`|S|AU%1q+-K;NNIuq0WSy0st@D|Zr2})J%rl)4!jvfPEKReb?NY*t%)Y3G7 zBH3a=)5H^Ny89Fq{=|l(8ODc*vKIvoM4c=3Cdc<*+q*9Gt(v1li>yaxSgTEZs%#$D z%w3}$l*nZ7RDAv*57z>PxTStTUr_SsS!v~0=r#TCtq9ot3MbzvWmFaLqObfrAM^cZ zN5>zcNw%aU@#H9}sIbuqihC!30KVzRG0RDdI^#D)&rAUtNF8_b4&HJ%sNe~-ecI~O zS}zsE`-p|n!~FBP&=p$9lPwgGn*;!#BB^$uxY{uf3{shAn_o`-YFltV357J!A31ys z+7CsxQ=CQsEJH&tig0k2qyj`{wU41vls4ych&Dp5z6d;i&tw|eK3d!m400WSMha#U zw-R5*PY_s%pIV@gdtJdN1&s1aTPjp;@+F0GR6IrB(+d3wCJ+d!chNs|5L4!7 z-~8(IR33m7JZbL6bN&FxK9D~Uyd7oPfgImB_7Xn6^U5sy1O@IQ;nY#m_6n$)&T~B@ zls~v^@Pr#%<-h$l^n4Jq1}E~C?wP-BgRl!gXq+_ItI4YR1GtLU$j%ADawHUFYfeO-SYU1mvQFhIMnnVImpFXG05?~vf9p8Hmxe5G@ zp9dl@mlf?sKhoEb_W?77qkfXw6>HQiUY+G%wF(3U#wS<^SYs#hhtqT;tBL40hVdY~>4;Mii28 zm-}T(hm5z_U1or%W7$3ZfRTj_JMRoC!)rh1D{3ne8RQ$=gx}h1YZ5M%g5gTL3L_xE z&0w1_bf8hOhpl=iZ{_lXX~*Zr&bq~B*iX7QxDMOO2p4-M%Lp!YOA8>t+R54@Y(nPn zdjtWk1!VK4+8Lk|L89J{6OJ(kCN*z?-B>-lfdiqY2586+dj>wwiUe&Z1)$XdLUc;@ z-X&>{Eaw=&5h=p>2C99xjzCw(AkQm+{4*6hAg}<<{;+WZ&ham&X3}Kgyl|_)CPVuh zv0g7I)%|(5u*Pywe{msXYwlN!_pg17MgA(6Ql@n0abt}q&XrGen{Z;*hSf^G0}*SC zLb8cg%TG0-ia#*C?!=K){@6pA9+K*@z3OVq=8i5XC{ zpJg;If>6t#64C<~gxp!MTBYhEhKUoQq^&1vog%_0ibDfXLE;iX{m0`}&da4fnP(AD zm7*mvDHI8^Xo<~r9&#X$qId(mD#$hEcTj8~zmC##md;&I5F^(5Yv3i2sv7fcR)fNK z%1?9~>lA_QPjkzX;mj0fz)5Z|A=d!;RSk_9=-VPBA97GA)UPi|oka#k0xyD0D4CE&>i!v%U=JYr7cD*(OGFI=${5r9N8PLO*;T1Dwm=*H@EBpLaJub znUa&H1TY9$E>%2#1}RWPQEU%rGN(>5?i5{KUY4e>L4*}wIDyC;k2-zi!5e%wztJZH zhvlp(iQp*Px4<8}VxKbW(cr*>&sA+5SB=fsf`TN3Ov>1+@E?|$}EFVmI+P(Emhykk>!55_% zfVV4TUgs>!|L7*V!6!p_e<_;Gzc zXI*2edqqCAi)Zy!2M~?WV+U-t^e8iDP8zFm5x||({S0d`h_hCDEP|pqon%}(h&BNI zXxgzt?s4B#!+$fZl#(ILsvljGy_;i7rPBVX%qnGf`brrJ*7M%E0|R+g>QpFH_E;kbgULpsXk+|7`Fp7 zo4NyYN055K;>_Uw?o^FILI_s`c~~d%QH>RI2Y^sJPGXxcx9Mo(@z!KBLhNwcT z87(ARSw1jqAvs1sAs54lIF(yEOniXQ`y-xc-8EG*oxRr3U_rsMKL- z_Xg+w$0w#^0EXzEY+-HXYFi?8$uqqppAJM( zgYz$5379U579@k(!!--djgiv z!xVE%jO!vZvj>e7Zh#MB4=q1^-}!m;C&M{D2=I_Ghn(g_5OQBE4Y_BC5S6u(vgbmG zOQVj`*!*Lh;O+*xc8vxg;scUHkfntnp$0kKCroeAa{4Bn?MXvL^)ouaP5f?lY$Hi?dwUC+!m_4fnJXDgoxzj@9e@&g9 zPwVA0AQ=%hAwSOF7dO3n7CyY*+4Md-lVS29I~ji{Gx@}D`j`G0aFZU1rg_6m_v)nbb3Lu(PO zXxex0>Fhe&m@}v~_UQB4J4pwd2olwh`)r(leB5cPVNZW;>b4`(NB4jJl8tpXS5WNH z^ID%f=vPw`_e!_~{bezT3Ms^VCL*FBicW}ZK(vQ&GOeWv#@{6_xBcCMUbw1I?3DT% z3fyEC#~y3RIFOM;%_*zA;z`wb@Wq8nx%`m=%yeXX&H?*;Q6qfIbbjO^#CM|x*z&w2 zUJJqQm*vQ+Lm3XH^}=(DR7E62dJe?M4CJ?LZ6>&;rVMIrHZ_T(KCFDv#eLvhAXke# zyoh&}FQPZ{XVa52&+}?+DWII4>GC|R5}g~q9Q`W$*ia5Wc;ofPT6`cmhPjP&%EJ6A zk}9mAvEI*1Zvv#%#rb>YWZl$ea89=;U3ZKOJ=xy0T5MNbQDiHsfv-f$K$%U*RhzGq zs?s;w;7Mr_ZzK&BIg(&FmZDC~p0h&x(%OPQTfINu89GVeV-ZD4Vctw0u3H>esAz@| zVHP%o7RHMX4X2ci8UOaL6kdM~Mbd6-E0a!{!(ihPW%&!f38HVVB8ez**@v8Oo{t@e=CsYvwt1RHdJ0Uyf{+Sm z=_zqS-RQx`yh9QAOZt&YaWtd!Q5{%6H+(asDY$oC;`C3W|32^d8bLp@7s?gKv|+?d z$AV5_xo=bTP3$yeV#C-}_Fy(dIIU;exfb;BN#<1Orr5YJ(KFnw@87@HG2JGw6%}Qc zGaab4KVdogbEI6!IzUc^BU{6|C0(6wFrDRD?kk2-Y4o!&lHZgy!GDO{ZL$7dGM96S zrcg~SW6i1+wtJKj?-L=(LCuFxV;`*NZ#kiJKCx=&eu?~5qcd=?Y{~$~OB*FCv;>*y zJq-4SWLW2m$>^(Ci-t#gzSwk^<1ZVj#7MvIpCA0%Rlt7|CU(i^Ib6?-pt!2ANmYl1 zW1TJ2m<|>DFaHG7Rp5uJ{8Uv9v)|VoH7S12;?E1Cp*0a{Dcxuu*$C`xw)*X#mY2iZ zpEfrA?$ECvVv2nrMZUVtHSzshR+s0eK|ijBFT>9Va4mukXS)>_4n{Jo#Wj-tx;?FC z(4BMWy|e!Uv^Jvty_{tXs5;%SMrmsInNqCb-4zVsRmb$4y;bqJ}akfwjy zME+8b?T^NNI`=m!l}FPziAqE2r)q(WBzG8Sv`St$g6xF$y~G0|9!iFb_hAoB3l z400t;qhE_B+9vOEmkA$E)on$KEc>7j#8`Gkyxrr@y_ne~lbcgXiRO@x*+3D7{ z9Tr|yif;n>{v;0Hb>1<=p<_=@jso$WzkYf*q?p;3A6Z%~Re@I6pc}jKLXq+;MjPd( z-!-J*RvqGRX2?v!Gt6H3Pn%{l`A?{LhP0D_?wh)5dmYr7c6u`$YaFgQQpo&jovKN6 zpHD$`V^TGXV3>v%JpvpfDb`BDkNbLPqDB8!+G9DAsoo5ep2Kb@+s;k!-X6TaUa9we z#sru*VZapabG*Tw?*((GVU-@ScYMDCmngWpr&Je)%HkktFEm~Br15&}&8U8ulvv2u za%?Hq1o7iFqHn^b3_m!Zy>*-_XGI56JsSwAoEA>xKO2(xy&g!U^*f|l2Th7G;-+~5 zn{=~4R2>IaPwB|g@T_a8!n(X(Xi+Oc5}IiKe;?qFJ=jI}QM;RIB_qW7@mf(^mn(+5 zu0P_fS)`-1h$};FLN@rBX&1`ol<2BUf}nNW8tta3cU~R1ecXGznI_e41Mkd5%S!4? z*yaNKO*{{=I8krGjA3!iwmaLH3k`V|a<=*sxb1sx+P3 zCRDWXn%o28?Xe^C>0E7G@Ds73Ikqe>@&|fGSGwKg=_K9P@mrK2;amiIJf(j2FU4Poab&n0C1>mK&p4ONTRpi+|?FAemwX6Bt5?*N;vb8__JA*VWavDmBdCUQS z;kjGzQ~r?IP_JIfPQUk)qjt2)xlxX+yHw@vEwc+P)-%kV4*AH=y_J*r>uS00iNZ(R z?(2;pXtk#%f@TxfKdt~fMBSGye}Qw+pP@S)!=i{U&I;vFNv`e)VQUMp&Um3UdMoID znQs5a=2)DVNYP?rk%kNnYk-X`v;0>p=6B{lUu6c6H=YjbLF%dpzO-e=Z?o#p zLX;MC-xMj@JsE#n(B=N(`-l6?1=0{UK#b%VMMwJ)4|p2GQsn_HJR+=7VWp#GC}U9iQ{0tN;4P z^y669M$P@f=XUUR^;DAC*H(FL+$onRZiU6*4Z6>Gn!#-LKI#I-sLyW@3iKZB&FM*f zjB0s62S_hBN9t?ua|g@vY+rsIq5Xo$i!w#*7fCv2YSDXibkdrmN85!U>&@@fuZ)tS zs(Xq&@2cRnWi$AD-rwnWDWH;3Bq#H<^?iGiU-&co=T>2n`2D}`Vqt$nc@RKiFwaE< z%za0&fKNW9cQ|~A!5qk!{H<0j-V~Cm~Jb-muMNOa5C2v@qiS`7xB&7!Q$iqok+p;wriErW(Nt!j3^dISx}vfW0S|Ei$aei~6%`#Hw= zcJP!{ zD!*L>LkZS^pX(9-Mu}9Fi94W$ceKXRtxKGVL{C4J%|(W(Sbj~m;lbxH)~I4F+II5M zvo&F;9kY%LMQOXJeQA=xku~9k zF2(U>PEkbJ2P6%~T(}`Mx$|3At-$Uyh^V#PO?Qgr%~+s%vh z)UuJPhN&%e9I45O0ZXDH`n;MA7_TBkZ=65pW*XvM)(*T2G$=4N_u@xp7OwKGSD(MF zXBdl_-72X;Hzqf534G&IFUZG(NlT7YFGsxPzg%$Ha$ZakE6x$iCA+lDtZ!<@J~IB# z4&^1gEx$+AV6QztuuSux2~1o`Zkm&0zV_ljze(w0xCY;TLeC=ME&B03H&kzz>PSnB zsa#jnaC=zdW9q=`A7AmjHGs3nSk{p&)wDJFN$Ofhq|Zi8o7{t;BOiGUr{VOPvfF~M*0+PxcepBu^cW3a9mW?&PA-3snd%h;-AjeY1U%0L%m!kBzQ?$6I zp&v+}48toRQ!`yhPfEUkq4mC9{-2?1KJ-@~G0^=&$~9Tjwr%t@G^|;@#dD>)b93qG z_h4jNzV4Ln6ymHxPoy|5eDg0K-wNvuZ%prvak{PT|5IAX-Eitx9>04+?^4M?O8-cg z)=hsqjDkPLryu{x&enL_b5rUcPCt44qs%oQ^khCs#YmQo0#~XSyb{ej=q#H#Qsw8l z8PWZ~xclbzzC8X<*=TLpx$1-Dxj=cZPn1(e%vzVh=M!;=7a@B@f9x8_=c7iWwKs%d zs*Aj^^?6-h`(Q{|#HYM9@Tj3j+uAyG*JHMqk)p?VCz9+SR1(` z#St8mn_jc}7aC)SA2J>g#s^#GGKyA8*Oi=nS9l8+#XmCH3P3x9UNMK>QYXvj zTL?$9@uxCLBANdTC~^r3LrKC#%f9_DnBVj1ZY)W-1{qfb=@0hnK!aW$Je1m_MF;3a zBwiT3V*BX(Uq4EF=BEvN`Fz)!nuZk~v|M$8c zcVo5eCAZZA|MNTlML+RB0$$=a8Sn7_^z$F&Dl61_O!{%D|G%HD3cFGFEqufM=;p6k zg(BjaH=Grtt4ou1z_E?xiMyP&KHYeC0VXaK!Zpf1>iqJ+dI2Zop@=n4Ikqrs)sSi? zI~Dk{$qR23wO~lUIK$Sru|goOfM;XqKXeSWS=eXV=nSz7SOKOcjG6 zKHpQ1M!ZNe=%D4i(k^D+Y-tgV+0`oz{TN>A-u+#`8FKcZSx|LxlRLsu$uw*;D56yy z25l4U_*!r(__&+58y12_N!ho#=dmpP)P;gW`#zz*ivAgdyeJRM^Y7Kb|c`|2y6xp^RDu(;~uh}i}I)WPqgrCP)<|I2)<`G zR?Eb>+z#I+IH7if2vPleZn0=ty=Ex80$erUY*rW^Zg*4_zumw$05eAH22-1Q?lZ`o z|E>R*oLltt^2?UoZYmzo#?Igp43_qRDthTSp$rchZNS$uxpoLdF7==KEc(euTu+|0 zvtVs?K9}++kMfNfT$|GiN(5SHa)Ry`!Lq;Cw*R;CUK@O4Ai_C;8`Zr4YPkZ}_%C|* zQ`DT;)E0N|$Cd5=*!U2s=*MrtJ;}}+Pj#b`Lnp}kVj_d?58~Pet?9Y!u5iM|ZNq5) zem1I?#BlO2gd|!H05>dT$Sc(4SMTJi2rarz$ieF|Z0Z*TICh=>DRf7QKgcrrg8Y&7 z5&i_(ZRJ6D$J+@~r1n9Dy~%JOX!Y`u;4u{pr+ee@SdWRGKx?)CYe3j*S(}ro+g=qT zUmY%29=LeZkh=8ro8tN3X$7FSyqAZAmr1S__&+q|kv!g(mWN4O(6G0NIavd9rT-<3 z?+xtyhN7Z#r4e`#*ttEDDuxPR6J%;<9Zx3Esg z{U^9QcP!t3u}2&cBC}%)Zvs+MUGT9KQ{}l~k>NR&qa zP_3R1$~~YB!b!5^A7L-?Jb())$|f4SYCrP0(Y;UTE-_M_E;_dh&+aq_hBzEX6jf{( zoXZsZQD{=!*ilu;wQs5RYa$j#&lL1u79Tlm#ikDaDu6ek=hCVQ9vL+{as@EHKlCzZ#oNlTBqDSU`VB- zL2-tAa6Y`e{k|X|Mrn6&_Z_ZMCWhgXhf4|RtH3TGvzC=`73H^(F^&+efR)7HjM&;? zXIUM7)}iN}E!#SvITSQi1I8|Pegc$`+5jT1>^(I%Bif-=edc9eu6yb z*IpyWT2L7~IUA-XPsB%Ih> zb1i)(0BCkM|7MDMrj;MS!mRBq>e31D&T~JYDxZ6cgQK)8M1R~!vh!}e#O*W(N7;;a zcy6=sdTR6LG3m}_OZtR$wiNHR z#2sZxbX&}b*qwNkU@@6b8`PH9dyq-o?~ndc(D8~L&zWvHHTB7Wyd-t3>>4RY9~QDIXy1?q4R>P3 z$W{;7u7I|Ihe?XoxQ%j-BEi{}$hb1jI^nf9+@Ji%^DWy-zA>;L33!$YI zSH9*E(QiIx484c();Fh z-+tccB{bF~zm{mDhwFv%+cGhI+7@=0*+Ipo+@LD${1s50VhqL0HP88b=EL0=Fa@9h znIrU$Dr}i(cMjoP@srCj1KFyv9peLIRGA+W+PWRoI%?IH40y`GyJvuuy@>*+&84&{ zGoD$#*|)XHa3>mp^2epfU#UafLxKqOm2SHHzxt!vsk`M@HWoDaoS4fR=5qloJ@H|{ z7+vqa`_02q`%|S+*AO^_a?3+_uvVDv0vHhbi#c%C?q`e0vgCX{K!P+~E2KmNwbz<+ zpxBNi9wMF~s6E;M#&boW`^afU3HwE_@ml${hg41C#A$%NLvOCm^TgrE=?cIf+@er~ z>BB#FZoQ)n1?Ig6+MJD;&MjxHoK!h0R1$1xG7_iE>LyXdSYc{bN^$ZG`dk0P9V&)I z9#Kc*;d_3b)ch1@9ruVqgrs$@AS!9VWeE@xwOIi4g5d_E@Yz9_*`+2IQU9lDZuu25 zPh}li@NX0SF=1(S(;rv=!Zm>62tm-3xM*QQF5ExvU5E@aO=AYfY~vNtYxXZ&FNlwc zL&+(LWQk7M868EKQtX_@dj0}mr#1w~hs3_{VzEelnRVLwsmO{1oH#!I>SFxLBYG@3 z|6&~&G&15;+l46++U39I%!U&Y{l`%{42bkWTIclo7-Okuc`uCEmlrHH@%)WQulC(i zl=@{l@bky^oKyqyiX*UNxG6R}ic+?G7!ggJM7%1!J*|jZj)5lC0~uozZn$#4g0E;x z>2ghJ?(OwO?X7Yx`VY8TT>F=$#$bxm`lZyi`&IuCuK+o1DD?{YjSde+U zyEA?WZH_PY|C}xfZzlM=wRN7iEWRl_l&A^OiK{0};Askv<{g6tgj1_Vmm%K)tEP~C zZ*CcRxr;1ag&V(Y$#e+@pq}6VYJ><{zD5kng|jCP*osJos6~Xo=xk7GLK#+C=F~to zz$bDWQUmx^Gt@LeINqKcHTfyy+H^3Cu8N8_{92>F^|-y7Y{xN;;3qWx-+aPYUAl?%HRu>V)dXUoaC-0YL>+2m?} z*WR-G3$|S@@taI{{lH>c3j%Z!+_v$jrKU%d7Dvp4C2BQLnqbBf{pG}Ah|ULUSiPaR zNK`rNHz;_`1I{R;Mp<+@-jcgd(ze?om8RC|>jRT+SuH{c;`$klKxQF0TKaiwUy{b zRI1@^+n7%VR?Askpozd`57b6hXzeSoVn@lcrf&` zT#6@)Ts9oQ;90ONdj_Bz4U#+QlMQXylY33#_#VHC9LO>NASD`rQWC%%RgF6Y?T|@y z6YT+bSj$=z+GwEZNku+ip$5~Vn{;j&)UOveL?r9^D3<|0DBmQ4XEAQ-wvn25< zF7%l?{?S-D>%C^kB4b1mfiA56scDKJv)Z0jBC&(((KYxsWa}foNZx@LO0lV9*lMKU zWm6~7LH1LOt-G@R3cxDX2{4F;OzYiiun$0S|1igc`@wL%v<65ul58&X64nlJJt>!x zR_|m-z~u06bTKqrmE?#|6O79oqUWKt^FCICosn~>?X1);0JI2kl!fhd!I*t8_bP07 zvo9cZwiPz+(}V|Eo#;z$mr=-dU`_7sW?bS&-ux13XusUVeUYqzz>yCpU_T)*9N~Hn z4U$Dv#IPB_t9e;;85sSmtHim{5M&9(ARuqPZddP<&b8)yxH;mOd;9^do}1^BXxT4N z91h<%8t@sfDXH+)TcQ0J+~00hMu2lH6tO<|8LUd;avK){E7+1~Y2&aRgUwz6(^P;= zTSuqU_Hgenm!-_)5D~_e3$Gxqq2&KUkods(xZcSC?t~rP@+(SDX{(Q=Q^pM8c5Tbe zX7soi;k@pVsUX~NYg*GK_n;%?Xs%7>+8NXN&(fG3+csgrdPva4)&Dw~w7K-Ve_oE` z-XkUVM4cpIELXAnrk;to(8;m^!?mm1$y%A2X7fo9fayH2tCZ1wjayGqVr`6zh}d9yb$u*0QeqO8CLDz0`p;9hM7T5enm=^TtD z`EW8l<(YR&OES1^p^X3EkgD>SK+XQlUZVPu9dk)=1;~x7_Sg?+KV8yCrr93MP$g!o zN2PHv(H}v)EBOlQvRVv(eN6y29vP!R6w zP}*GDNs;~HjVou&DAV~h|7Ku*U2_BOgQOu#jgZiNP+`~`NsR5IrQOSzvf)*MhLI=U zVSWaKCYI6u@YEAXG$yWdV1g6NC6z49f^7;ObV7>Eeo(QUM?U08>Sh4Mcne27VyN33|-OVxBV;%8M^sq7q1y$ShL zVZ{hLF<)K0i?!*PS@X%*nU|l%MHV1~T~aUqC|Y<{jNATY_rxrGwZSW^YmMHdGWiWa zg!7t|yD;XEq~YajwAR3bkyIWee=m4Yt|^cPO4Er`D*mPB|AH9QiF~u<;w5XlcxBLt zOas?`R{SzM3&*LBkrcT~-6*PCC+VxOO0-KfZS*Xpoxhq&Lg#HXE8HJ}IGs1eq{lUC;)@8-U8 z^xD`w`$wDIstA`L{OtbQg8j4VijoZh-)lDO2_)T}4sDlJuyXKY!^JB7BUW~620Xm+ zZ`O&0;Zo)&3;a*ec_zNz@`9_ib9h$*S23aYqVeh$_Ksybj@4^w#SjZ3L;ufkl8H;2 zi}CXW%)EIwLRB2H8J<%kvUhNSZULTg5;qKvWD5K!9+jgr2IWgbr?Z#fX_2B`fgD$hJWLnN z7>-Ki?BLQMA31Q)7v4)Ta7~S@i7dWWUH~DdiGF@FN>`1{emDf3Qj|y>#YK%FBaTvh zMg3fzNLM8@qaq!%=Tj4U@4Fb2_K5J4;o{_y0n~0(r=-|Nhb>XHu0^G@JQ1gfDo=Wj z>s}5 zoSR6!ovz9PHfCn)Fv^kQ;c1Y=$3oH@Fzh|C$0bNd#TCw9)a>7ZgEevJU0nkDvL)%Q zGSs84b$6$m+p{In8snFI|h*71-9txmk{ zgd$D5xp96o;XEAww(o02frq`!IYII$oRE1&gP($q8k^Sa6WK&1uO-nX2I7p~rgNJR zEebXYUGi6+??%@2vJD))*~Ua(5=Wzxwy7+w577wQET$+LwND+#^!vn<#1u^qEvz47 zjLVEEW!9L@AR%=2#9hRV9q;z0{q#CS6{>&zlBpa1Dxv?1`rx%Jw~@kp?`*pKX^T?Q zNzdzy$P)R1>sGwvSYWot^m94ae}ocxJHeBKB5L2w6^ZJz$f<>@&u!>$AIEG+kK6Jk zqV0QLfAJp^`QtWW7Ekwf<2_s{*oVH@`8b)4+?n{DK6uWQo4Cz)$LuA!>~^KVdSNA4 zIIC)6Ik$u;$|!$5$+7qlg3`mq2lD)`etqfwqJ8Gp&45a1mlh4X2uz*a??B(&h(E%y9xo9sefs->iz6U&-#=@X3>Q>W+_6fbdDnvTqqFoGwQl zMQ}2g&lE|ta=b&DWeRd1RBl@K2w(2Y*c`H|sq=NK?vaUAx_A0l$x-iUPMi(6h}El` z2}M%gmF1Ul_UU?QbKOUmTk?bz29kwmtb7MkN<%oRTX2nx2(fw#-7nu{>L;iV{a;V5 zfB{C{(MQ+X(r{&!!S2EB6Uvd{{X7BY=!*yuRT6dQhu!M3%;mSmnzkO5DqaYB8=QnK zr{8$Qc8zR3ROG7BXWY5_ciAO!>F4Q#2BWrC;<&GWE!o74sMF%(MKq(8SFhV$V`kuq zmz*Lkz4PLurUaDa{2*7h6>E?3h6$)8&^0=b_%9k*kA=V!!fd|{@fYPx zl5Q@rf3mw9AmrH_KM-2mFDO5Pe#Ru7%<4ne>i}=v8>-Bs%9Rtg1xqqh$B!_ZCzOl% z{!~035*pD~B)#^Q=pjFho8gCepVnX_J|Wb*7DqJ|tYvWC^&i+6)*^rZ9D~h_ zIz4A%j*nHpSfOqc!w-sLGdNjcjiO3sYA<6|7l)&E@`V!_Wv1RTU#?~N^!>egv3fGn zI8u4GrG3lv&wU710AXWUxeom)s+9PcG2gqy%IOZ<)E)aA4jAhtA|p?Sq;l{3jn$x` z2=*G;wH!4P+7qb<84fCHPr?2seL3eG-CBDAmSqc6KH9XKA`jGxw=t`2>tQ}ZYuz7? z`miGr4-&83Wb>)F{KEz!0x6k#OfQ7KHTE_>p?@ruOX?3B^mu$(e+F8eBzOAo%pBHw z%BoU8unN06VOb;Xc@?{ZWLZx2UTInRh~V@r=SWJ5m}JSGD__4GED||+e0BO{bmKce zW;^O1DHjI*h1zWe=PZ`b@3SEbEv_BQE;(!;=~h1XJ}JsMjWtemoe;}X1<3_!#1t&k zJ2M>v)4f()!lqS}`>z0F%1Djks|p^2|L?V<|v0|96;O$^%jcHG9; zYqdiS(@WtUAKQL^`=^SIv8Rq%e_w_trL|2SD%-~sv%h&SDpGd^2(~z(uWiM?(LIbk zCAE4=d*&@zPE^Fs-ryqr@HC@TM|%5Cg#S}vv1@}xx4*501T(nA%8W!6d5}^*m3b0< zhqm z=!A{vs%tm4yd0N!Mo(?JKFZg$_4KvQaAx?_D{h9*j=`C%6lP;eiE1KP$1InWB=`I= z@~NZVe5%c8=c8@%qWaf6pX%;#Lpb2~=X0jLi;Je;{Jt&hw0q;U_Eqo&OKd+VWqTGL zl}Lsfm4LQzQk{xT5eGp`zxCf4Xnoou`Ye0!2@lEV>*|V@sc@8hx z(^QiFidNb#y2PIPkP|U&W*_}nqqQuWUCVOR6xqD?OM1-5Cb8iHbdVn%SNFZi0Nf`% zZdot=i&!~lTH}LKz(Y!eJ}8jkH;Vwo$E(G<;u+XCMi3zmeZf|KcC~irgLHcDyO~oT zQY7`}9W@e;?hQAQpLx0-Fe;{89rm%c?p)n%AiR@_8Qhm-C12))MV3=ppx)Yt$Dek7 zix6|PO}JsXJ}hw;K_=GcWOB9Ha!O@h-$p%8>i-ojG3cx{%jl z0t`o0(KI<*)H`Y*1dFj;OK`q54D^4Q~E~7x39mznWm+c{}EfHVjquX zqwxF2%mIvhy~&}t@T15;nIkG%dtur2hp>dS_5E)~a&K8WPo!7TIIbJS9O~ltfVEA{ zP!`X|eo?F1dM7X5Yr=LVRV^hs`c^X#|-fIoKP zr_T4CWP1`%6K$qUE$TMN!@n70>M&_mocz#oT}2@iHe{r3#%7%<5*ZiGp`F?GzWm*t zH{{t&$$7z+eA)>E>A$4L5EDg9&LuE{R9>Z~rG>P&o9$)!tp(lR;u4a5U+P9ize7lhqG4M_~w zA6xp7-emfFCLoghZs+w*!V$SD%(FCq%HWCBmiFgF;O?pVpf~DHt_1wuvz4u(LJw_{ zm}}jSojg;z)kg+JHb04qpaveS{M=9X8{dce4ajU{tx0LHz@yx+4Ti)>Z6>#kTh1Op ziNh0(!f#R~$^=~mwsN&L`NWcsXl>qQRxK{$=RX(%-CXkjA)>%SJMQdH119_2I6!2@-fdnZs$t}q{#5SE(a5Hf6LawLx?}d+bR|DGEusx1`LML z$d>vXUj2}u%Qac24-l&V;GT_SNn8_UfztbQCj~U_snzD9*s2;cB*^PzC%~_>($Oq(Hy`F~tisr(noad@Ff5 zk)tC#i3$>{`^^O&H9+D@-A2lTdixKzuBGPbWJXz7>^+p3WQB{%oq=+xjgoly`)HY0 z*=_oe)g&bf&N13o51$%Xep=VCvK=pf6yPX+M=&;gzI7ae-ue2Nf-W&J(?PR%0XJhKl{okQFiJ~c`fcMX!Qmcetf}egxd)fZZ8W3MdX+A3uwt+1L!~5y@W$u;dPSF0eF~4P~bc1!wgI z(Y=x$(pT^VOpZIM?`$QjfXQ3=o^OKhC65q-vRe%G^!JKRNTq4g#?dWWNN7r&-zbQh zc(z}6_%+7=dC!ML`aG=KYrk9ru8}8;U!Pfhk;C$jlkt-lF`fFcNJA~tFNjBwcP)qV zeS0E-X5Gj&?h76&1h-}R?f;Lx_Y7;Q>$*l2Q9z}MN|7D~6cmsSfgmj?O+=+im8Mjw z30*-@Ac%r=P-zyF-kZ{bbb?CnHFOBQ<*W^Of6x2e=g;|duIszrKMEw-*?X0_W*Kvg zy`YN?z6c_j14js<#YJaNorjvp5^*#;Ecp79#G9=mtbAD-4_>scp0%M!--}?Yh?iox zhhH+kls`K!)VnlKiRLO4eUn%hx8Mp-#DF}y zuf{66%|OYb`xl{xH6dXqjXzT|1#k6%c{0hzd)_8_G^|CMxs$O|qH-|di@NwX^XXb2 zI!rfdisf_41cvx@9yiRPlfFVTgoylcYksoNX`?kmYEORi-MOMcfwuEY&qs-o1*EoT zdYpHNNR-~sIFD279LTmA%i>xyrvCWosU_^`SH)T4H-rVO1RO>u>4sC1+ix86z4{cR zA&#R}s*bNaj%{E3aDy@Q=1zTZop`dVXVtKVIHhonViylT^V$m}qvie3yE4NK=qwEh z+F;KrO{L|b>e`>mXQ_N}5vXCLS*qtA#(6O~r+o+;cHM;fhCfS{ivBEFlFnv~@UL?w z-({%uQ`xX7@+<5ERl`QD&jgl#BstN9!gnP2BTnguzxCYohw(9FwMxjT=CpE8%QCH9 z7Fx>2N?3e;B0fUbB4ON^bPuIQOYJl3U>jaxSV>MDXOn#TS12QuCcO>20V?e^H6}+S z=LQ3w=R&BvOawhbl1iE0=JI;eG}9?Wfq{p^Fdb&Yh2BLzL`kOR#dSK2bd{OtQP+D8%F*`KBhLQarFhP%G!ddT+sYq;u1?8MkXOfiN*rmZ#TSSCAn-?pqFhwf{ z%8jYOTbyDLYgN~_joHKB1=L(j;}B4O`NhbftDL^>*K+mq5E zW;H2sv}DL<$$awuk>(Aw!Tci;<`+Nm9mCe(zs8$96E80=VW;Q~e_qE_uyOnOviL|u zFOGH3#n1&YJHq*3tm8sb4s(iaOoYSwymN~Ei)L)vnHR<}0#)5%aG3W7 zw!m;rnax1lu8#Joawhl8sVwPArU&v_0=%50r}57$yS_!mT^HuHOnG0HdMXh-QI+~e z_FSXPIB%mutWsrq)`PdOH5eN%yOoT-po*>XIzPrESH-Mj5$=7=`R9eChF8zK zPh@=g?$jPK0MnZ`Z0rubg8ne0MZhqp}r72P>4h$kU!u{8AH8-_cveJqp>PZn$UZV8q& zP|$26O2D2EMJZ4OlP~MY1z{|#V>gk-TPMTZfxMB4kAUcjH=@&hR2RA)MJ4cbDi3mA zQ?X!n+9i0dLIqI+FUgN`{yFUI7|UbwM*=DTyf!|*uJze^N${ME;i-C((CiX)NE0EA zERhTw;M+o`R`KDq+Eb6RQN|~Ul-$(Q^a)gOvlf!~MN>S+l@Gr=_G?aL(VDbRJ)}Hg z;L}Kt@4p4MH3KE-2r=^NGZy${vyTk%$EwCg?wVTBMrP=!T`wm7+jBdZJ?av>A1(5T zW(&7LpYcf7SJILgS#nc<@k|OuU)=2xNlVQ<_p3a-tAX`gl=iAaBEDtnl*28bcgswC z6~`gjot+bO3g{r+KU70rD}3j%rUbER&g z&*a=W=d2~J*VWVrcxL4H$G9nHV`;MUXZd^vU8Kxqx-3M{e{KbNl81>{xCfKWNN2f{ z*c%Qry4&z}sl1$5ktIovIYLYbc}XbXoagU*+(7Iwt|oGkBpw%UT>V;7OqnJdmOFDF z>@V31MRXI}Y& zaL+GX?g&SHVBP8Dra5#o6Rb{E6J-OST}C)SiPp?k7luZ{CV`DqyCHBx7Pk(}T4{3C@qSLgZxy%6day6nl-S&lz= z<}M%=w`_&TWKfJ>|06+Ty}x{4eXr*dI7`y6IHI&BVm1eDX>eHC!e~q-3tXyQ!XG?G zGFao`#*Jh|@-JBa(KF|l7TH3AS4^mBD}W;6Bz_&#>D&ynFq-H!NRB1`HzY{pFOIEU z`I+@bnr!i2X6KRDO!vT2@g-FfKbmxdZJ4`j`X<;p;14~D?4-6f`q?TydujIP3oC)$ z%}n$LboXiy&@K#7dnfv@#vq*HJ$Rwl7ed;=Uz*^R<)x)?+?Klv8 z^V#8ZUj?5p44JQ`n9=HITFqELm#*vHk9e}c8>TcI{^#p{B0$+Vk8VhYalH%3;)*R< zkI_sD=9g<0c^|GER~m4MXQt-Q;-th-=s(?0V3te<frwh;q?ORBrBkJ| z1P*GM;i~heIu-hIPSds?UR;)hpC-t|rBA3BJ5rSST!6Zg{!Z~<4+3$N{>9^CT6RNy zMKM&^=7irn4oeL&G%fz4?U=T%t8<$V@Ia<>X#M3nmFzj2eAH$)$(HaI(4yu6lo?Qbv1o~pF=~JMy#kci z38q3o5z3y5yO}G_=Jg(sbQKGG0&CHb7>{tqr$(hgDWR|ssCxnEploSf8TmV1Eh+y|-5Y{k{kb5NX2$DxjZhrYYX9?uiy3 zEQ*8m42|aLqeqc#WJmLvrI9+2S`Hqlq&A(W#q$Xh7OSb#MgHi(ya2wg6*d8p#wDWn zK5Lg>QHvG63{<-i4W>YmW6z~zGSLH9OK%jPUJk=W>Dv{@+W~0R%`%b`ZcT#N6rk@a zx!?o9X*VH_4ezU`S&jv*Lnt%+(4$Lw%%)y|{!c~Q5M@5k%+nYL+xR>6kZIdr1uXKi zelkH?Kh730L@J#Y`mhTqoH%UDmg-Pj5~fU8!VtN8)lI@LEe&(W3gX`Oq(BwpoFQNU zTt4ffuzS6c?+s8K$maVt8nX(J;Mc#FOn*lGV478p6TRAN`e^$YHT)GMBb|q3^%&E1 z!|`R;oUxw%^$8E5a?#C?4c`P1**`zNv+ow~+uMVs$sk8^a^*&qB9BmNJS_ndet4ld zXSBB*g<{$=31oQ-)?OiBL(Iw6APG#sutjTPf}*&b=bsGS?h~zHM()D_o12a!BR*|6 z$i_EPEKQ1ac0xTREE?czI>L5!A&i^5UsZ##VV1*SWXAIVpxIJW!%{9oNdX&c%lz_S{=S zh2cVbQ^{cy)X5{vLW+QDJFK-e0`?B2&O(dPp+2hKL(^%atz#0vR}wSQBD~q5fslq| zZo5x7Zr)ax$-V_=ImtY8I6;4JMERW)d69A-dy8U_f&Vg~CybFH#I%luF9Oa`$?TwB z@cnO*ML$P;k5MUu`MK}S#Uh9qvXI6Uw4%LXsCR=)6*cj;aTiWvxo6T8?`r^Dd@dT zf{%}bkXAv&yCz-BH*aII{BTF&|dnaqprgHVr(fE%$)#C!MFeXs!=QID$mIoL8 z-_QKtKL%~Qew+7r*#6mlq2wX-e7SPi5G_8uOdyekZ%I=VV3s_e8yE?0u<;_grEf=0c&>=9Tvqw?C(E5+?3zJ{k_L zo9{{Pqo7SVL;0v(+x^+aV0TKx@J%gZgr zGRgCb_LGr_o7P(|AE$h3%y?BRA(z;`Qae1+k`RX^G?roSn-6zTb*d_i8c8@= z;(?vpUR_aqReE3$Yr(F1;JM6qxKG~EQTU5ndbEmYr$~L(oIA&(yD)q(GDVE8hJ3=pWY;_~eN{VrhO^u|q`dx%rjB$aI)2Ns zX0n|`rVEp!5Uqb;>{P)i(E{gxd+T7!wndVjC!cdfO>Y_TZz^rg1Q27R0^*AL>a3Sv zs@!+^oOm;dV1wRCBdUiP5(e?vrRr*N6`Rq*CJnEH6;lwKV{fe2X1h@}%jo_jjaLg*?E(EZ4sbS?2Q7x; z7lTY{>_gDV%M_DB-a8w7TR{J#)fp(2tdTq8hG}r1<4LUrwgWV`Ggfv8t?7`=gJpwP zh%a5z&WQU+%?o_V%r_N#KwXUkEH81#(azUvtR%+W!GTOy<b27D3@DUSB%CH5 zn(U_XdtGMnT>OCtQXA@k3(#iG{$f3C)5a)GP0%RK9Qnvx;h>CKf}}_wA)t-w1_qHl z$UN!;IvZE~Y3YeLR_}27ZLKubn~;v<{OKWvc2*3!?WV(^*Sa~a4-hmk*ALgOapK*7 zlmw)#-vDZ|=FH&^CDuq9{@s1-y8NSK=n$7`;g zyRXBM{s4_n&0X{cy+t^v(N`f+$fBu!3GWQVQ7$YiZzlmc&b&W*k5kRx>RN=u4=qLu zINU&{!<(6-bBuXuwJ|E`UwBd+< zy;{$KPLKPyYvz+(HVCW-zHD3 z1_{-8NRl!|A`$zBMP~!4#`32@I8oAz)fA`dJ}IOA!5Gb^K2lA3e9agk{qR@gHTlgaCVzPOAgzx10!HAZ}L@RluX8dw?_l zggLDUP+CRejrPWka1g#79+`OE6Nvh$LV^uzX1_dvs7wP4FJ#%$g#XaN!FCv%u|TWU zF};T5|E$)k@P!v|xbL0%aj#WVyER4oN_kYnT@#*7VGcFDkpRnlkDG04?1}vr@5TKk zNfPiwAarHxfP8trqMwW4e=qdLa9{@rllz5wTC6sKU5LX-%@^@~WX!Gr;Wy!z8*Uc# zhFAj$=LS)U`Nr%s9^z?Ve1I6x&yo0mX$KJDAtk5YJwwmdK6T|g3sDVS#NNmdGHrS4 z6talTL)D;iBL|%14!pp3X2A86nz*Y&b1*fs^mN8~WoO2Iqerb{ME-m|ALL=Zy0bZI z-8VMgu_KYo`@X_hFkkVpj#@CAm_)OOx2v9A|5c~khE{eA^e@a}Hz9>@z97b83&(t@ z^A+VMrUb%X^vn*k_{cVhOx0BFE&U2X3L&YuOjXFzXKMu?3?FS)UIjKjDm{WQ zOqF#;3Ilft@eLeBxuo@AS3J(A_S)n&=NQ$zpG`H}lEFy6WjSKbd{EqemrKsKr7@su zo-6#fu*u{I*`Q5;o|=8JbjbD;8nlciSNE3OrZl6Z-ycyRdnkh4t^y z!qy+v<;u)*^h*t;t<{40yO7-G7GP72JTBS#!XD&9bn{@Z8Otrk5+XYpQ-KV%;<(Nt zWni?DGS;zc?(v14pujH7icNN4e^B*X#Zev~@hV4J?nHZPslN##=WCF`PQ0MPb!f1! zkeGcAUqD3~GfR1!_Baf}a2cgUe(CMDOk9n5fd*mnj{-XX<#t)OMoMw6ovJ>ww|VS! zFC`HYBZ{_wQ_YmxwY1qm^Cf1#B>d<1qsgCcz-%U3FPQH@;gE)XlE~xxrfhK;D=i=F zO_D>{wrePmu|X=9N1w)@>(h;4@fqmAF!0xkb}YjvT^qbGuxr)_j(r;oDO0o94Cb}| zt%Eh;ODc)^-gRr1GcQUPG&cV(ZBfzE9^h_9O&8p9hbhrlkS5&GZcS`W+P3Q1nKDX` zG%8S|VzP5o7o^G0h;F$u1(Glx`#~Y3PFbeh2XxouBJ#%H>Q89LLE4cGtsjJ3;@whm zc`j)6b?V!j_8$rO%LP#G?65lEeBT&(mr%BKoZjFSAT&p;mZiflT&bXG1uMjCMJlZ* z_vDUsdcs?J|76uL=`|h0B8=rYDxV3nGWMW^W-L3D$`{IJ)jF?Vuh>3tu28@vCAg{c zg&(+(?@B4|exScv(Z@8St<`T7IU&6+doSsczx!;>E!wcgUQ{ldik9JWLtamv)L6-V zdpaXNmqbxpy{+Y_%6N#yKMk-#AZ!7F06wSjS|e`?tjUqDs;*%^$i50hsq4<*q?iCt z7%PcU>}S|a)V*3?H{z)JY!Fb+JLz}^I7~#-5|+!yRIRD?L#EgqYiKvm+47w!Y?av_ zbIT#XJ%ikFgcbrWpgEd$5y-v^gC)AqI4%xoD~yDz4AWeU_T3)IXWyfzEwbI`gMzd7 zRB1hi{K#+sceK#_NHCEs_w9a;e2s3XpoKf}nMIFCa3tl7uw}#Td!g-k-bzoUl687) z`b{Cxj|x()=0c%fa;vkOgSeD&!#G#OxQDfY;P2911$1G(@XE4;ooV$Ir6dzZEvyNe zxVt{7*cshWQFBJ+;pheolU*(KGX{qsyGObkS^#`2yr(?D;<^+@C1{calDN$RSa%vL4_}S5_QcvRU?QXy;NL_(x4= zfPRAO{KFd|qky@dEd@H+@DRKa%XddR4g03f#F=kQ`8Rz6b+LB=B8 z!==CHyfS+tx6%4Nd)1k;<<&?XqrCG$ZSaQP#ns2bb#p1OhEU!B4^$r?oO^mSI8Si7 zs>-=+FBHEH|FQ?N^4B0=!y0H-w%+HoW8)%YE<~(_!1m3EJUD)2oNe;?4vfkx*-PIi zTQl#oWv2NEeK0H$95vFZEn8U_+bt2ujLOekMDHv|=W&!30ttW}<{fbGy`_IPs=MND zksvM@P_8;?<0D}H$U@6!f8R4OfpFmc@aKDnhxQa#mO~1oruXkn%arX*@nUqp-YPTt zQrD!kn`M5be9v6OLi!RN>bQ=#sh2ZBPiLE^Bgo-A#w=jNfnxxszEOHGIN?wZ^GQpp zNcchi$C=8Hf%4m}mDiM_YOQcjWhSX?y*8UZf8p&IUF(2V(aiIKU+%lK+O>zT1|%k< z>5}n5PnfYM37TFvbx;7=6agInu-A09B8Q2AYBhG!@gAw!HycwYlw>t!1Ptq-buVy+ ze1ml*+~NG!XNNof8AT0`gKmwIw|UWlOSFS=Rb zAjCSz=^R)jDR4q8c%I%LrNj9=7@^arKvpx$Sd{LsIX+xgpo+HutXMfg@b15^Ccp21eTd=qPb+zwVPz-g-Lg;X2{v)xvq7M9=|JMg9KNF4c@y;CH zrM&xYJu2ewl0O)i{l}mr4`CEa^IP~{es=1ZrNzmAeXlH+uecj&fAEceJw+A+Mc(5v z_~#*V^ecyh_}~nK329Hi6@!U;2Ig=gZAp7vT3H4Q&R8oSUcnCoyDiFaLTZ;vKh);* zuS&$L*zS-#uK;A(4;%fT$-1!?dtQ#zCa{9=$=hS+3buRx zG~)QY?Ux#|y25OQJdUl}7nb`?AkHo|N=9z4mZ4Aaj;@KZT65ZY>GwP~udH0-9FQeU z@jggiRPtW+jH|VtFw$sstO>PE79Z}^kGC*s-l?8&u(^EfT0ywwuK3P&>An9PtOp9d zC*;b*ZzJqdC7bu}7bTXU<(8gY%--3n86mxc?kO*dR&A{_ zBX{?Dg58fbCucf`R$bWqO|U(m9^)e|jinVU2p#b^vUiLP5Ft>IV`Lz*;ds)V>JJ&K@H`ii(+lKr}LH6Jy zO6D8(k@5J$WyqrZZa^Sfz(nr+R2Y0&c|eBHB*dcgDEQ*xwOL8D($&>E($rL-c(Eg0 zqxD0XH_4)){T zx5&gv61HthYa}A?y>sikTqt|ETYu2K%NB5*?do%Qm!9;Tw0xH^(L5u_ddhp%z39NO zf~}=R!cjB2*HA7(DrrJH@Jkj!a&~Ih_u<(?3m``O&W|SeS6d?+CB@E2huUg(#^Ke~ zIcVhKuda8B+i7o}otoqP#B%r%GFl!*bhkVC@W2hle4fL1f8)44fGn|0Y}g{AfQ8 zYLLAx@yR|nwLAKd@8A}`2XP26Q-;tUYkYaQxu1uB?=op>%=ovNIAaA&)c|S8z<+Gz z!+RdS_)eBhy=UTI^{M|0KV$4k=TrXIjx+oqooG!$Jbi5W`*6VKxCJblqHQ8PtY!

    tRUMcO#6A{woC6E{99D2W`%h?dZ0W&u`jEe#|~Dh z+-Y;cy2>uuJ+zARLGs4ejo)*%jy7bbLO5U(E_i2O%IM=CeQQ$l!ae&d_A6WG=Ur!kNc%r`=ZE3jgG$-e2u!1` zy-Cdln+@6JE2E;l3t!=(RktdiRL1O<_(*k}uDNgIxP5Zr3#<8-#dg=!)r>@>6sB>f z%CJAvn|Y~g?fm_^$LHPH@zsVgX?lv9y`LZTk(Gv99c{Fg2UTykUC%s)pU` zcG7$!wFRt&-UeaXh-;(kVi_Uy+u2{E3iAf7Dpfmq;5$sUU$(&z*xJD01;a*mFunqR z5ik(H*Bgat?*mv^*O|<|Fz4n1^S&pQnmYqk;0-DK>lawWmcOKPP*D-L$kDs*H=6u> zc-zQYn$8~1F@{@ql!NKKped{Ou*Ri^T})=g@k3j9TF9?taY9_i40}zIqnx!c^23!j z{r473e~kehkD{9@_5#A&^8<(GbIpJ)M>6fk4~Kb#=Lxc~_E5Ikgbv{b@8l`i%Ql-5q{P&s1vo$z`jfoMqwK>q*{@;@@~*+EZuS?a$nKOXV#ml{ zz_pZ+$CSxFkpn|^G~j< zCBnWQKA_}F-{eUa7fHU5{ci!N^L7r_)ccKSKVutD(el zRAI|FNt)W~#{Tsq|(Yo|MuKMjsWaK znC}~_bN_LN`#-+hrr>ESB{J(B`|qnU90i^mZ0Mri@&A5h${RT3^N7Gd|D*Z^-Ja4B z;31NWzqtP|7pf%5m!y2V^}Wb{Jr4l3$pTN5ME%3Pf4%bGHIjeE!k85Dwg3NnobSrq z0zP{?;fA#-vTRG~T_^u0`%n1USw~ZvO9bN9>Wgk=1ORvcHF=E>YcGm0G5$H5jcunv z9QJ;G6e)Kp<*2v3Mu3fbj-AAes1~n{F1wwVqv5{|-9_l9X z5M=?Lk-Fx&BXkHjpYq#i9VNaYZY)Q{gT?y`fP>M?m|J!*RDQL}zI7VH z{?i}a=lhC_P42FZ^f&_Fb%Z zTI4lEYa4rj>R18!vQ)>>x^bfCyaZ6<_SAD~7V+3KyX;X&G`i9zHGVRW`S2U5xMhHs#dq?st$Fz2t%Cr_t@)Is~a?Hb8aWv%pByi?0fdLvKASP3VKigie=)OvaB zr*%ub#HM>g#N|yQ5u%=p6}G;!1+w%>72Ev_7Jlles{5r4q6V%YL{seXJhTlDZoRV^ zV{g(x?5^-Be4_e50BK)kD4X@IU%O&Ca%DoSQlj1AN=M{9ESvU8?DhFfpWT@iz^=mc zwQRXTnj}FJZ4h!Rw{?nwvPk7x@x?iiI+i$1#GS_$DWR^Bqn6fXM_!j?V4*}S<@G8y zjCu&bU|oZ-EXDETO};@L`iUkF&#o|Os1oXG1z{Jvke-2T!y)lP zw&9;Sx{Q1A`;G2Y6Re=KcZe<=Qr>!W|TGW^YpW0^59kePDGYQ8Chl^T}3acRd z9KzFV6z+s2f!dulxPASHJu=o?4R6FX|KParJQ~H9?1FrBsv~2_Ahsu5i_}7Vqk!W` zO%vSawGtG`zw01hBo+X6+zBii?2h6cgw7t>+wn`+gg*btNK`bkPK{jlVfOByK0DQq zp5QAyI4+GD$lKUIysxf;L(+>*m_d*m#Ki%Wn&J~9lYn!}AJ?Ixi!(^fr9oA*Q@EhB zt;Sf#;;(^AJM3)CBzb4wj0>7ZTwWBUlwqWqHpy220kyGnT5`|i*{+?_$rU>(v$xs@XP5r<3UROFZwY!6Nuc6zGlK)#B$g@tjH-LwH{l zKfa|b9{lIPz{rAefH+L!+myQlcmg?^psJ0 zJ5WDX1&VFR90$sF51^7g@o5>7(DNWg2WjB~WG$ToEC;}Q`pS$SkUJ;d^Z`V4QQAAT z=Yt!7Y}XqNb+(P~WXnOSL3eGu0Gp9oAd9OGqewXr|5ODM=GyboLn!5%>y(PP+K;Q8 z6im#w*CDHhk2b^nY@J0udu=&|x;q4M`klX7`_v7hyG8f*4!i{t7aHU67qaOmsFs>X zNmrdAR^1LLqi%VvjpN5JSLWb#h-0~%3+sHIr;X$N8&DGnKSB&I>T)$@49rnA3&a%_ z{Ed>P3`sa%b}zrYU{HKSBjnpCn`tC|f^V_zgKbF0sLpD_r$9JAhTUAV7=o;#-b*Al z%K%ApI<3)U!RPO=k!!igx!@;}9R)CPT=uk-7L3u{;$n>EB8yv}U{qN9LxZtRz#Vrb z*eMaU0~X~Q_q07=2_K`o8x7yqN;t-tGA0~jUhh<7CEvznFAH$SS^nxq*27Xz21gt* zX4%E!)Zt=sL_nLP9A${MK0iY~4-11|cN4e`J*7z)S`eqs%6A{zL}DR1G!j34Y`;+E z%y4vXdt-5se!IC~iP&Xw&+3yn=3SwGv%=v49InCce<`_96$TL0(|f;UaQhWfdP8>; z@8=1ZmpR^1ix2tk!)A}}0CHJjL6VT*MUcB*lV4FXObN5bjMYwU0*K}_H^Xy#5nAd$ zwFV(J(lh`EkeaMLxsslUeuN=FmH0UzSc^)^q|<;4BB;ZzlA>cYG*V<-In|1DwxRP( zVb>9&UGA8Ovrk;tRmS89uq5gp8Gp3V?)ZZb07i#TNz27qFCkf6?iN&=k(04`I?OAZ z&`LAqik~NZ;ZLC-Z=l@==e4~jRqFMLgiW!aIrI)Q2(sxk#*bE$!(?KEtEH?QId+zB zES*cf0C&T*LB;ShTE891u{49>V?f^e!N4wn1JWBx!xoyCr(WpH)$n*RiZMBb$OVe0 z!^KGjFpNh9N2bwWzKjz|2B>qn8Y z5$1bfJte~8xWCy+8O(9~$mWxV=PbB@SKR7d7C!H;HONX%ztjg?k8qxgXu{ zBy1`CMDMYf{#Qb)D*MJ%5(Av@QS}$c4}%it6Mi%wgPiUQV4Gt_cdEU|wuP79*VN~sgQ6Cmi@<2c#->5xvxKh7y`*vY!hZ&aa#^eN+ zZA5~@Ib3y@;7T4wgxJm$Kv`M7nQ!UB@lz0$l_P#FG2bqt_4bA$quEJ!dsKvJd7-;k zfTE?WYB^hwJJ-DI$ojqW)%!aiKwd#9`9DV-3q8TM(Omeu7-V@F&9$aJXm&}=lF z{hnRo38NRHVG78frbiXV4md+k^!&{cV$3+v!X8CEQCTcj8VqYv963+sLin4LJnENY zQZrMhV;t%hPXsv7pQ+TeKgq>8-v*2Uguvif7UW%_8cTob{+b0Ya{a;}=22Ag6a)@# z?C8YTV<9lS!9e@4w+iwIl8y& zVp6KoUotgPF0|xODH`q)JK0|LULCe zd;jRchqD;l;Tz;5T;IZE1!9=sq0j8X(VB? z6=M2LHN!}7LD2^u$agn)45BVEn6lEt8fLLh-PyJL{*HW8=e?IyJ^e@7c=O))6p@Er z{Zbd0jM)ciff8#}WBq3Wgp3$LZE1Kfzp(~KU!&&FQq5%QxM8D;KYX)+?3kPp>Zoce zDZX9=h?Y7a7(XBdO?L+FK{`akEseSpmBq3O`dQ%SL7M9yVViB)IlXqJ;{>NF3hpt2 z3*^&*Xax~Wj6QzD05U`Skr4w?1M<{6peBVx(@3KIj@a^WWn`gW4KJ?;ryCwaQm&#A zU%OwN1#JlQN0kI!9bpHW1NsC$(B=bPPzw{FL)Biy$r758 zjFG$|_(-(`Y9lC~0=DCk=!MQJmken1@B!tv7Xa@Ekjzmt!&`o=6KXXG2X>QgfHj7^&V0rE&58h5zq05 z;hwq6%Fj34l|1u6kK{rq7Y_0;PJ9)#>erfJ*6~^uvj-Fiu%$dNo%nBOH%#`sgZ$Jl(hyB{FZarVl8vFyh(LKFvaEYxZ149bZJN2Yi4sAz9s>y4C=e*3l*j8lqOW<;cU`Z+N z7O&!K#n}MM+~;aA;@(z(Z9yoGy#eoFd=?G-$@v#8^+K?oA|A0-8&SEAdQs~On}c9y zp&oH{?8T_j%mWF6>7PP1!l=4>_nI&E7smbAtYiGX&mP-fuXda?#K(PZXs4RsqVn3A z=UMZt#Dx=8Z#55tf~VwdN95vhI&vF=oGqdX9=Rv(x3k zoNMIvo>Qx|m_}sf*lU&L+)1d|<9)mb!f&Wcul|B7CVhIloBv>f-kKAE8HTpmxHU1# z$QzY-Pc{+Yv@{H@!j_pqfyw%fny7BgU2C&&-)Z*gd+T9@bCaK0=d<@W7x(w_4}}`( zQ9kVBPNZJ!c_D`-!dJ3fG?b}+BUAR0BflT`>?(Ki*mZpg=h6YdOh?I zJfchLd7}Krv3I%Z;i-q!nw2EkkPn;}dv{Nxi7M?0f~dEPQ18UTW6RpL)VF$9__+!} zTg0Sgp-GR;Babg46D(5@$36~#6r*$!65uh*EgziuXtZAv?h^zKT$t08po8$l1HW&w zY_VVNec3<0vvj~At6x13MKjM^7HP1Z)2;2!i;7j+pPwEi)El7H*X!n;cUVz-B^!0d zcuNd6Hhy+(YSwsqy5y5_3U*M0CUloT*0MeEzxe*ByxzRdi&#Off5 z)Z-p{{728y@*g14KWR|eUZ~~Z`5pNKr{wSy1Q%lW`vWqg`v3cx{~d$>T?hXk_QJ|7 zhH+N7@T1-Nsp^QQnezhpVl}c2k_PDm!z9$WR zln*pDtl#=u5-?UKZ%WdqAUKZVx*YQ-lrH^}k8b@k67qEP%x&7vpI1h^po>L1Q_MSc#jcju zHSx7H7FFLZqc<1IWNJ@R36vYB`7`=i{h1%R4UW?R8|L%g`rOl~xp)buoaStKVKZO& zEu_~*#Q5dvxH)7@T)@l$EpcPMXJ)p1U(A8Oq{&aA)_&R7 zl>`6_RG87AUW{!&7dE04Va`odW@9-6=r1np$@jP4ZtXCGzBM`2ml{av3fXxb4!gXv zuVrIQj?8+uWrv87B>#i$tz8^ll$ThjzFVU(YMo`-vae1*-E!{w`W%=mOI-oJC@B$0(Bfy2_y3Hso7F7&^}#pyQQJ#_ImAb@>fFo(+Kd_uFN6 zfo@1Wb`_13##{NG!X8xLtPlW^v>o&4@8K^=!QOKvJFpawq)*om+gTSzrC-HG%&n=K zajUf?kLiBbU`XP!U2G6`$xP@tW|{Ej+wREZoz#o;@FXL z4==rd($MqSUCr(CnuxK?VNfI;rTH4d-kK;aWq*@R?wsS!yj!IdIIW!|<|(-2Uwtc{ zh%F1-cmQzPAaYzu_Y9$wNuktd?qu1dZ3(=-_z8Q8Lv8Xq1P`~k>KQTwVBin*K#~@x zr6K*>Omx-+HfwSLNmdQDq_U#M!aY@`KZJBAZ^^AdQHg}zM)7_D&u{IF!%Ghj)FZV+ zpXU+9*r&PQLS4D@yB;N@UnYT8)zz3fH6yNOuM8&LZ}%Okmt=hGF4=&7)6f_JLA8FT zbmvwwVrAY0t4HcNu>s-Wp8U6_6BEl@5%0PEr1lTvw(DTp8>dux4iDw;oTOK7yzp3jK7-5k*-&IE z+`DhRC#1p8+2Ta1)cvJ(r`YMt=$x7MP5i*%gYe_%jQPY-%3V& zVTh~Ilb@HYK|Mnmpw~V0Z1aETh+F>JS*a8VF8vgCnrLzcF@=Q(R58*6YyD5jT;2S&?+Y z8=UZI`MoZ)yE{N1s=?K03m0Wk8OY`>u1Vhz45LiOhpcHW04XT$&R}<-WM#{G!*W`N z#4F(3{d&=?L2VS%S7WuvKD)^i=!+IMG#yXf*7lKER?%_ z<7QznCsV+T9gy9gj`f92JyZJlkJEPRrnLRQQWR2=T@e4sIc$)# zxKb=dl8hG`4VveZ$|Wq0=0n+pU7+ft0hKh*H$Dxff#R$UKJTqY-vn6Yi^=-CyI9;3Hz0_xuQ|b=H?F6B!Y)>m0RG3lAu5& zk?QIFh7N5MWfVBT1oSAxpUUX9maQI!=Xv3>tT3aGb==wu5^Pdm&!jkgK37M$xMq00 zLC;$iAoTIfpU!TTr#w=*4N?+XKdO0PKZEY2<&Dzhf?K$Jeg{hzeb)2utvQbGCUnjoh}`cbW>m?uQgzat*@i(s$; z5hMUnrWCkZIpV4K^2<5EY!HLo>(qPvRoEJrk_W0*X;8o}!QXH;xR#?nrbJy*X~8i= zHca2O+nn&h$=Pt|sg}&*L4LAF4!~XujDH0kp4bs|vcK*>eQQ}CrSJ1h*kn`<*QZOJ zy40xMdJm!h^L^=>iE2dxvSSJG>FvI48mM!GsCYv1L$5^l7azb~>ALoUN zkKNe(`G(emnT1-jF!~JJl3BR;NcagQK_TBQlgtcDXBnD9YOZGhX3Ykdzj_E|yLg*6 z==i`}Bl~B0RgVW=%}eZ!343SWdWiX|grR@gK`(ocvq-Pjs|7Kyu2NyWkT?COckJCT zjb}I+Y(Uk1vVT(F_TE)1AY(81l6>6746%#X=m2&p(p1q&sYzFO?ge*Z{i*b&5b=(F z$DluV`Yc)vD}vanqO3SxbyE+s!Zv968`R?WBxnC1*I=3T>3Qb>ts6YCgBrOPic=^$ z=&@vg`_=V#KP&w554uB%@hGWerrrguP_D|^ck&%8g>0`9x2rRAXnbg2W{-CCaeofS zPqHeBK^8t9-M`dT&;YJahgGN@WyCMT)YFYlZ43Y2oz3gE9>BJBGhvIo!t zuRS(d!zf|7y6)~>&K${Q*JV;UPg4@KdB*`OLlWaTMLx7UD{iy&!YvlrSMmTeW73tJ zSb8@T2~aWy&KCvlux(4c`$3=ilGpb7NXywx2adH-K!XJNb*Dj2+sk1`^?=s~;3aSP zxDIwL{cLeX1$N%DyM}1Q&&5z&;{CReapCPq#b4@;g7EVXBdP!Z&c<_13ZB zP9FY|rJbGkzoq(pmV%8^fOQi?EO`IYL|(lfn&=)bvu1{dV^xDKUlO4b7`)oIDAk=C za{#M6fdt3Fvr)@Oe?81cqzrQjMxlM``Yx+^D;D~xx`R7trb=8-WYw2gma_X_W0z&t zvjcGvQMTcOUh2!o8$bR&O*za_b;eJ^tS+SNj$~_8R`bA&|16PO2B=_xy!36@twM@GU}w47f&2c59WJ>Nr;L z^&SvRLxy2u1^rNLT3T_dc7v+H@Y=JP8;^VyZVU3h$=nTGNk z!wS>oBR$IS>*VBAbE_+mR&7s=YJ2q~O-3#FQk#$b+`qO)P$D@~m}_XP0hHVsCXS0TMK2<6EtcgTxPlI+BgTRTy$iYuGcQ0 z^Wd_gH36K1TUqod1!+e7WG+ZVr9s>zoB5CTEAyKlRKtC&-|SQ+xm9VgGVBLVAr>S% zK*Vt>d6W1`U2TthROt4#9Wto>_$Tdu^_s|9X;X%Nj(mN;$GKx=rLr6rnsD9a2j>&= zrCTX2-Fq+cM*j4sE!}&@Ra(p5@-yoB-5_lRUN&a$BAQgkCPF9g*StGarw}9l0lYb@BLGzb2lX-FVc@~BP5B|SfI6iXGw7$tK-+p{1N!`_jR$aH6 zzkvlC^o!>6Fuh}gZ4E_b1?Giz9qRvK?ybY3+TQnJK~xZ>yF&q$FaYULLZwW)k&>2f z21HTHprj>5x`!A#lz{>1uA#d-erpq+^Ev1I^M3z&&*Ac#i#_bU*WPPA>xuimAE=b- z2C9z}*QWg(R?XJ{A%|VTp4B|Q6uG7o$bsh!<#Si_?30pL{e;@K?164R4N%RP%U(*& zqjYTLuW+LYT^@ioPzG2fA#kT{y?&oS^`tIhV3E>GwChHUYI<#7S{%tB6P3{;AG9WK zbXRzmTHAH+XV+&3_{Rz_e37tZg$y7s&d#&=AO?ao6}`&NE#;&6PBO_=tR40mPn0ZFuWzboo&4%d zEpt*9bHnzfPE9Tq%H!mm7l^g#v4p;ypxCaoM2h(}W@LjxVW7D-*02&M@7=6+f4v)x z)YiYDd>W{|0@g{x*Q`^}7vUoh`?zwWpi(N*jqO!Jr>gXjqdUx#)iy<5lRI_bJ+OAf z&oH7^ESDMIkCxI8`yG?U;{$*j7rzjsrgMVO(PelnWVo>VjO?s??osg!mcam+7fO*V zxTj^RlbBu%lQ{~Q|AZKw*;CHTpCcOL0DwuF{OjK7u)t<<^kx8h4~%!(uzTm9s7+A( z0t2fx&iVMyY~amSkOY$6p)5F&>H6bxUTGl(RZR`6aQ1}LmvZ{Iel`Fm`N{2V`d{i0 zC;1GUb0D($&*4Nt*^_OvYvGs(4ho(VQvGQb1O)cM6+l*^_o?kUC$*ce{>9yqV#cT` z0?%@}QO)plZ#c?*fK2`r1?D^zf8a%aPr57pr+7sQnB83}DGIvO6Sjd7HOy|nnsmxc z@G8}5jhGIWQ(3WAVkcKQTNJH;D5)BK{go!-Xtvgzl0LqAiL4}R34^)71^WnGjq{8{E z;+Us2UN5jG9X(P&SzX8k{6kZxx$OEQydW0;ffwOqyE1IBXma55$y+=x3n(42BTGw{T$9 z1<*!Fw(;XaPMIPgn#kvTLLK!lZlwq2zqfo5^%vY z)QfAiPLG;S)zj9nW-j|Y&B~=8Nfb?dMW(nTJzbq?&Ri8?#;hS+`qjP0Bt+pW=Z2n4 zufg=AlB@U|yN`(NoPE_o7*_x|(5-2My5~Ekm9XN+K!TKC!F>aO=AfcCyQDbs>ogn1xI`=Ov2``W|TE;~yII z`OuG8(exF&)8zW|Wph+h&3B=}`I#@*!wuM(G~>+@(%+qHzFoTJ>)I+AS*%4vOt-5q z0yKbnm^6&zWz~iPg?zN|ajE@R7&R!%-PG}KR7ZFdCP%Zn!I!iw^M-*SL2a;AL)H?0 z`MDG=b+^4)D<*SO=F&2M%K}2OT|%;Pw*6&D#89%oSc}*CdO zPB+?RPpspVB_{SV!2}>_$+$cc{XjoLt4Zp6vhOI*VLie?iNs{<)lVppWcU%gogKK| za^X?q*2xOPV|{#anP8HbMRv+qf~`?-4@*_(=%|&~ak9(BRwjiKK|OMEal5<35V@;nYm= z^-T@XgQ$4kyZyvz0NDBAgGbU1{mv;*i-sPNl1`;RzT3EG}pK5$c{qXfav)Ki2E|}F!71J_J zZu2`$L@UHnFD~11b7=dD?SFh5s`kJNkJc%uQggU7J!0=c-_>^Mpw;tv=96iCC zOxQL1yanlskN&?CF0`|lCv2ZyToWJ+{O2kV!`#2(@qm6Vck)v(=6`Z0^2A~_n5Qp# z)!qm=)dE-}8;ATt8E7#Q_p)7mmflCjeb<)Ej*ap3AvrhwG|~Q^#kaTen2i4IO$&p& zF++1@5x>RPJgD(f}-qhh2(Q`2{EjH{5XkX z;H(Y0U+y^j*Y{8U5GEo97{d7K61L+1{40srO=7?}-tT%W{O2lvKK$P=7n_5>Ca&@4 zM1MX^p|MuB_ihU}zPyd3+4MfE(z09i;yL}Fp$JHLgd(cQ%kW6sy}uS0`wJruHGC8$ zeLb+(v@xd|fy1Ji;tbMmK4z==-gn3zhvlJO)=<2b|Sa8-*r@Ady zU+y{bl4Sb?6zNxKOjpTPrGevd?YmkE~1^CHZS(c&H>?G+tAR!RzpoiWjfcL zUGR$~BCo&D_`c!7`|*YQ(hXn47O{E8PhLCBP0E9u&eQjvW(XO(G6DMSCCVJxQe1WU z&&{hz%eT-MchFoGK)?o4oWb#+Ef1(TzX3>RkjUBS>kCmc?@4<7vpKNkS%$INPC7Rj zKH}Y(%?c>3B4P-?3(^2cbHuu$TF%RdNY{7H!*DCKDUeUift|fjmq%@y1q1Z8Z*rSC z(U0z9B9b*J^JPwEof9_fc?$wuWMkM1zZYOh3>8GSUy@`438`R+*-;2+3!UdLQM9b+ zj&1i}Y`tIH*6LSeJ=qI-tm}aSLkYxwcoNH{n)j2lXpG1i;GX7zf>GWry*i3Pj02sx ztJdU;@H0sZKr*QcNR^gLlqvfT;~YY=rFI}S+Y2x~wCG5C=kN{S*w(vg0+~_{%&5J@ zjIUi!W?Y z@N}sYpA(owux~g&18Yc5Nyd!yc%{P3Sw5Bx_XAO-CoQ^7S7|^jy-|6Az8m7FIJnHD zB=`PejWLCAUB2JP$EN{ZA_w3|nhSu0Ls&*Tz5Dd5z%3I6I)&Nwk|{bs`|)K+Pfg85 z2a1ZY@B>OkoETT*D%Vh9yp;ck61c4sAYt6S^hDTcZOUlB{<9pdv0Cp_ zRxUW!kkhueKH;LGYsNN!;+q3-*9Qo1%(0MUJfIm+0L||fI!rhEk!UDaE;%AcBU+wJ z8ZzlPGdrucpiie1R&bYw3(>auw)2Po$!cK09FSrlH3oiv_QNkMwZ)m`2Rl+6TcNDv?^QOy1@DSU`2w~`%9FStR)65eieOd@q?E! zF`-J=@f~qzV=pzZL|0_L19CUNfNmFQbupxmRBzP!xo&oK&3Is~J`llPU|d$EhYD^8 z4H=o2MO!{}2jWVg^rUE#()E?BbK2A>rf{Igsi*8J$0Qqa)loIz8X8c33W2h4dw|H! z)Yk9XdM~GaW5Ikb$ZF6sR_wpo1%d|U+@6fq&S#*qYw{$)I(oSgOMMV$ns1$g@Bq$c z^KEgN6Pxf$%GCJP#%9v81V@)%gN9XfUI4dQ_*>T*H6Rt+?O)mVu@k&fe|l#Px<%ct zz@7p{`EbqwdwDwPB9{l<0B|e(BQd6SW^LmW-+;w08oQs;6|U`G$?H4&ky>pd)$a<` zht>of-OMD9joF^&2gyAE7B2t-Ldp8_AFEd2$*&J}l!@rn{lr-vD7~khtFy73EZ~n` z#bf(;KtE|>n59!L;8A9uQ)b16d+sWWy`eGh_CwdrhlgIn>|BK$qy^F4xm+uDTkxOF zuZ)xwW5U!@Wnqw9+t``StPjmvt{is()P1Xa+~hw=R$67aYH`|t-W|Ofprg$L!c8{F zaj}1puVYyNrJCOe5k-oF1TG`L{JK$DQK59T?S~4gm|yU21z3T|9ppkwdVC0({oeOd z*f(FmW_cBl4@t!2<)Nv{Kruv0$zlT`-+P&y?^Eajmpc4rLBy@aNIlPDfY%%nS$?mO zH|FcFjG|wu^80o+!o1j+WTrHsn9p!Uq|R(~UCbRwxpDM?l6#ytAc&dg02n$uit?i( znsWi3ai{PMJ-4=BBAt?56)1TU?A~(SS#y|&mw`H!D7yUYPL1^0b4SL46{b`DmhxVd z;oG5PT%>fY^&zvI7B&W#V_$P~{#T$#jz4Qv9rpt0IpB^XIJ#$-I9XP~U6?*2iUw9x(QnNxFgpnbnmr>GcVwkhAw?(?pM~&_!5#+xOs? z$bO5~T|E;=r|Ke83!{Wywv!E>sbwGQY2i3jKjR&KLo9!@=I%Wj@hQ9Mw5) zHH6XGq%Z$VG$#8F1ZCl6esz(OXh$CAK8>@UtH{XfweFH2E=ijPG zWN3*pvpL~A2pgV;9uL(D$XJJud?AO;aXBbAX+&D%&2ll3={PoAORmYD5P92+Q&QWF zWT3M*$Bc8B&+iK8wCR=E2Bl~Rl6B>DoSTg5Ac6ZNG8c=$EZ)KbY?OPJFh14<#XXAO zb)pM7i!zmt1yEh!NhE~S$TnMY6Lw&^`IUM!a+s!P(_{|%n216x@qDe5 zUAOq-87`4Gfa%#1RvYEAK3k*d8UU{yL+QQF#EZbwLUhL@W%yb#Q@%s+!{qhv~EOvEJMLkjf1f_F8J;olkixG^qOMv4}bUXdgLM6s1 zR|rml(`or(IR%zWyox=wdwiIs6h#jV{qB+tL-1XPiqCBql4y+=~4X9X3wcA!(V)nPjH;%#4~XdKV$XojGph!1EBF}4wc>G z&*}*zD)uuk?4&>L7b(;4#cUaNwE5>J;@}6QU{K*IgU*R(L&q zC0UG^8AMzsmMMPk)q5LJ)t7~;P&8Xz9~6#K3(W3k4#QdVuDD{3W${c1+x=0;{A6G5 zx*dG7V(aGla%H1*RGzCQUGzBzvEk|Ad!@=nABd0ckBuG#F)P{6AD$XcLmar#{h!%^ zmes`#i$EAM5S^a={SF=V?*+y2r($epF`6VS{S;WWU(gBKnUX9hcjBa2`Vn3oWovG8 zQnNw;ArB#2y}(aVduZE)+NCE|qOx#hyXA#xgnyabs=XckT^mgEL%OG&bV{bP^AFpI z>o2?$_d3t9`nziPX&O!K`=g!FCcp#BX>#jY;mM3ybHw!FuHiPH_Evl)L4&lqr6;IY z28y;e&cL;cYmxeyNH%%zF{DWu$0s_U*EY&$Uc+z8@cQfA94KO$r)1u=FsbL{b)9fz z5oXR1e3RHUFB6d8dDywr^2u6cL|r;M2O(gP|2e+~Vaf`SHY8wY@2uuB*pUDX{GT6S=dFHV0 zZW$r#ZEGuekr*M4CTSNn&#s3NIDX$aC$1~Fj$g{_m^DbZtpeP!mZ#??_gwfnb~KaR zKWY~^;JXE&Uw2IFCw0}KOEr&u3>qwWbHZl$Q~iRgaw(<49Gbw_*C5Q7KK1n}FvyD= zFQJsJJbi^VKM)ive^5dBdhC{zIPG?xbCo4HU{F^v?APdhznSMF%#|ukX5=nzJ^mZDyG5uvR}he&O%JemY-g;T>u>wNh+2gg5sPeO2j*kn z4Vh!glAuQCxW?UPZv?E9i2dE6!vY9i6LQ}%VS85V@Ku>SpZTiUWlkcE*gLrVv)RPJ z{cU91u{xZnug6fI#hFGj)NA7H(tW7iF0z@mwE#4jZ27cJzg)v~%NcL-Jv^bMim>!B zeNhgs0j`eo48NBU0H4G3C%iG(~He z9C^Cxl5v(i(Vp|qVs@U>kfWSN;fbre098bKjuD*>Q67JKQkK`hQ>hUin))4&4xdgl zM(s?qMmy-bR90P$-ovW7KAuZ??#G zw)HCbuAmo54#Zd5030rUd74RjeC1rB%kU}UQksShobG;GQMtwGr>T5%Q`I%^iP81v zMaWzLzst|nn^vZlF!GtI=7wiHt1zn2DG?se9mmrESL$YvB-s! zi0Kbw|AU(?h6@X!*v!x=vx4yph7<_=@wnr%BQH;hK-zuK#W>)#0ik_ zx&h7I6z;tWtL&>GD|A3@Cz#Zj<@{o?0|+#pv&9|$$#C&dK>1s8T5E^MhTjEU#9H3LO&9w(N5 zK0S;BP}q2*r~*=5xv7C61t<>v}e zfuXM~1ohdVC__vdd&~9BE?arQdGZZ2xgp{<{d=q{!r3|+JuGzLF8Y(=i{#}uW}o$( z&O{9?hqTrEG|b&uWlXO%OzrY$gX-_J#YA8mHPr3%lcpc2j!g3z(CgHPS+p{32o3gm z`7$kw3=W`s$dcrmIV@uAN{s4AiR>+E%+&5n&v1rZm=&0>*pY>U_#uvz7Q-Eg57*C* z&zqX`g@oc2wyf=_TUMU41I4jk5GvDg%#`96Woc@vOgkDjgt#%b$haCkST#O!t$Jl* zmwKLE7v0qG6m@=-c*9<3)pcoa^gh?7+RUbw^K4uuSNUGfFV8{E*N=_@O)#eYk7q_d zkuylpa?$%tKc8CBt=zs>DXqG)G+On}3cuz{w9A;)$jmrgnZxBbBfeEF<|OvCW5YLD zOwRd*&V~IYw?xO**FqxxzTTvJ51VrpMA#=>u2gb-3A{oV#*L>Vzw~~fV4t2|uRIr(IEyXY82UCZk~?}|chV@?cXutEY@#FkXzGV}48`wj zKK~(9t`sUT6ft_W#ksBHsTveef*q}&XL7g%ScGgIl0H!Kq8||1``fpF0I-c-R#gDU8?|izIDR2&bPXb zy;PIyIdZG;2ZnXdLTB+n9);Vu{}41Cq8eygX16q1lP2PkPS8&_7K(Oz!dgv1FwDL@ z@uekknjdQOQ&UjT?hb)M&tfs9^m4YC-ErcuAOnfjvvL9y{~+ z9p2aJH@$?32R^ZoPMUFOO&@PdB9CHk)Wynx|J~QL!gY^-=>$+(Yth!zA*^Mg_GQe% zDw!(_=bN*&ZMH{`6!o1aEzq8B6^QbAvDmHSXeML$(H?ZAkpU_4`LNq9U&`{DAN{ zcW|_}m53j3OlfF@hL$tUtQF@U=fb8aFw)=uzGdEU^)!Y%zSz;f`k)t|refrE*%PPX zuM3M|2}psQwO)VFY4Y&z#~MJP50S?ABJ9K=`|Bov3HJleT0Q()=zkmw0$^|_6{{aN zPoKwWVjXf0D8S59^tsN7S^C=$m|AXur$&oTQvZ)*kAddYlzweW z)!%Ralbwi$%-gfmw_TVa?t(IwGYIrW?q+hvp`G^?Tw{uy%>Rf&Ev24r>VYY{>Rm| z2MomRQ?~%M&lv5MAL+s4TH`}_l%oa$CI+jM&4n6vJ+(PKY3$RVJ|6tf+c=63*2poT zGsK!RN=GU^f8PE5NxUi8#|uEKfnF$=1Jb|JB$LYh`VZ}2^?o?|lfR#2%@%WjvjyYB z1L?@S+}zz@YbK&3e)pgpY*AnzqVrX>8SUpO%hbYNSNPXDiFGGdW&|Ar?e+EbX?#VT z){G(myE~E_Z$!j)rk!n&aB7d_zb05F@su4bpie-rQN_Uj)+DGNWYD^8jqut`J*F0M zamb5P_~TPO#*zS5woLBkL;00fWhXm77!tBa9|6{J0ik&buH z(|>oEV4V4}$)k}xC@T|bA7)e_->458>fx6U7BzgLU;X?18Do0P=rG%uaiO1X?uFMzKc%;Pywu<+xYMc4V8 zv<><4dpge8&o*K zY*R)FH%Y6;VV_!Bn20n3ilZ&;4$?sNZMKSt;db3k3{wZgpKl!gEO;0TratYk|9a$2 z*Bu*YDB%whpS++gi++vcv;3XY5+GAc7tWa1O+)jqruve59?foh=XB(0MupxvC>b#l zh#KWNP~}P3PvhCzvDoms8_pHeQOtn#BXBT?x_IcFQg1qKG)XD+Mp%~ntKY6?1h^zV0wOwSpaxg{5FXN)sY zSYLwsrLVZoiBo39EBZ0ERPjoDF1$Xb7EHc zJh{6A?dS1mx}TPquW_*D9c2K(oNx{Cz+JeyO4he}SUfZcAHJ6A{_@i}b$HtNSBCx@ zcQdnJh!h5x*)^hg9oDjj*Xh#cNAA1ZU#MZzjoh|w9ZvmC&=nQeF%;|&qdU|$UT;i| z%#Z2B!9C>r-6$N&I@sO z8Vif;{?B!wSG`Y1#uX_wM=kN#Xh2wkbi;b_-M8)^?Jz*n##g51b+lMGi0wK-_N8kj z;J#3ZEqk@ki-KwAz!>I?=Tr?#tI?a@?;K?+ zY#~c>;4q+>Nx!>oQ{u3!D+o}h^VRs(OI`#JrR^u?h}_aj+fM6>a{eUfVVMhPo_Pt$ znymyz)W*a0G?FyCMPXv@$5uXsF)K~9>vpn${V;w$DmbqHk1;`bi$#)f${z6U=5Nk5 z$wU|YSU<09r=2)H!BeBskD!0@m=jMI!K9a8lK!%-+41+F@bC-j!u6fX4q@y`f}sxB zCdr#oF1KZ0qkUJPJ7TuAG*a;L7g5RRhZ}Q%i4%qZO&kkA^POHG-Dd{6WF|r~IJ~&o zGYh@miaO*-x9Cd?Neiw_{#^>iKYm;n)z8n*F93g2UvQb?Cc_8SQEcz=yq6aRz4gfo zQkS|{ok}gX#l%J5;n7lkAy81mt*_{6Z+9THnw@l&xf00-(*1NmHN}n^lsj*4+Z=mj zS?n-Q;whwJJo8_sMIqMlR~}_^nZB)kV_^gBD~@tL<);xGzmaS7m+5L8L?V$HPmSB? zjEJTNvgg8mdmx8}e=<_fe!w;~`wF|K>(X$g9cW|O17uf}oIzNA=~Lr2!0!J%06Cvt z-ab=3z4`!uOxH@!a~q%wlr*96tM>0~qZ)ACCvHGxB);1X`2F*s6;U?SZS>*`EG{## zy;1o?$d==u1+^F*l3eA;hxZ*85u2vnSvpqT!=NY>=K$)yr3eu9Z#3MG4RWUU-jjSFhY)bfI;ak*CBl{#FyM8*B{M{24bb#_j!4d*%t$fu~s zx24bS$k9KP)@Mh%<L9lI>^}vA*Y`sK^4@2b<8iHs%wo{p05%rElyDd?j8V& zl`*8J6E7LzIm+|?s@ocV#uT>OCYiP`u3)5PzG3N(qMDh$76?W!-@-?NQg;tvmr?Kb zc9j``hMu_)O%Mxz@A)ao|-f|$A z(+w!Mbdt9h(4iW3DyGzA)^9}UF(4wM1a7H&n2&eRR<$(lj8)+-n3%WRv@3AWbnODD zhSaBkyBPFXTi+|;>p+MSB@fbD)VFjc_I_5>V~bq5`Ft2qaMbp)mOybubfuzIVF{n< zYIvN{(JmZ{^-_E>G*lys?AQf^tq}cW_#V-*<-zF1A$!)aC@ZaZMN-FdQ}c77IP<&O z^E@gqN;D&%QQ9(Iu^Nz)jRy4FCpNkIiq`npPb7Fahp;xX8T5DzT(%m&-iha-+_Yz( z#frf;1IyBautauCN;`)ih}Y#4PWf14V(voHRe1u|vb*2=yh_TL*9L;=LakeiUQl)I zL9Evg)+-}Vp$@!#AfY+**5vnd;t;FF*%wM0`oN_%Cz*__Eji=MZ@Yrtx&7P&A0M2P zo)p`X5l&rdp_gzHHjqFOFNrVHNyb79blpDVN>>*|EM+Ey`e9FDR79zhk}X* zGycv^5UyM;wno<-fF{S%mGX4><{T5uq$fnc=*YhclwE zOE`|j)i%q~*w&lvu3Q@*Kq1u=IP2J+1Vm-P<& z)2Ymi5u(7HRywFmy;_9ByPohaT~{`2J|eLzyw+KjHaDNk(cqgupZR6#yH*H?AA+p! z^`748q%?HlAu~=JY3w`zVyeHx*5(g(7Xw3d$m6kJV&410-KFJ@fZEj-06kC%T!9dW z5GggySRpRr?1=MejVT}3ZK9LH_$Fx_jYJja?ulzECxv!|aF|aiFW?M@wEtMt=c5+o z?0*_C$t9GmcXX$)M6B@W1ew5m*1w_!S|$%TiibDd9r0_@KJSIRYV!=eGDZ3rJ>^rn z8b@@bQ)-Vxmg}CNv)XvYj5f@|SH|UCxFR<(W)x0S*n8p2*ew8iB++FSXee8VE8BU= zaF36;f)Ry-ZPs9Hrk+13ExRgyrqD8kj@dzk#nF26^{8;*;ukJ|=ICL?gR^*i6@W)c zgD#b2d9|w2hJMexw~UYBlBHeBA2+1Yp8bQ|&4xVq*Q4PIsui}Qx~>}9PJ2lmA;{PATnc(_Z7(N%PH$%ZC3 z=7`<-e!k5_y!ygtQBYy8F&qBK4#sCSDzW=Z!HtOZw%&$Se-mMJV{d@qX2QcSy5~bQ znbpBwX!n!xU5!;YC=O*Yz9r1`(W-l;=WnkwtGLvjGZ$jkkaU?f%I0(S0w3p?-&MmL z9s|$A2Bk8hS#P?1BC8)P*#e+ zki4KlhdqpbKTSa&NG)QLYTZa=2FZi^CPoY0H1xM-@vi>j@oOe)_!%$p?^|Dl(W@X# zF6R>zx))QdBc&w*biL{x&i$;;F;Bx+hz$(-b%8*HgrP-eCs}m=m$F+xL9t|cNv5-D z?9o#c`-;6(8NAE3>9}Cq-?rB^cpW~Oo2Sn*7Zg^Mh>+ZfUK8TmVrtsDEllCmZ2L^+ z*ocKFc+?As*6@?bzG14u_0=yt*Gq66P3e57aA=n4ZlBZf9RGc8e%o7FGfNAt(wg(G z1_`b+AGlQX+rZt@H`_!n^MWWFb!HdFYDhz5 z)O8-TEopkz_JrEqknM}s6FOsrZ#FS>W?lfmksrpc_4~^J>w#wy%l233E5?uWhCGPxntFFy zS+x}Cr!bh)I6+tU{lYqxmL?ThN8j~`wBJ`yDJ2oLj%l~^h@Ujb5Qg9zJYcnywfrqd z{7&l=PSF{uNb*h@VYAEa3jFv&OJaGEXomMZ``_Nt#8x9u%xm*5D(tDv^L-s4>|g)nJR@o9bXjO{ z-IIV&xzfcWLiWpWlNTqghF&*oe3Cn4#kL15lA%g}0~?Q^VbjTCP*jsHoeo++yen_&=J*))c4lgxRYd{f!~R<;U-yScB~ zPmk<^p}9jdqNzm9i@G>FZHky#6V;dI2*=@Y;-{Ot1tF5fc|vvH> z_O9Bf$=SV~QjUwF8xeGc!uaI(gunditN7t}`3D}So^a;-SD#K2Dr*z|tbkBughXQ#ZIn=QW=vU9TKX!&2A47~#ww9B;vG=+h`tLsPmpR_N$@ zG1%-%vCOE+E^i!JPkn)YwDaB_8%?7dI+g^}7f<#9sMdRC^y5tfWIo!WHb3F8!!OIu zN+Vz}w50TP-a~z8ri*D^Y58&A;eJ>R3DS{d5)r#udcLJo^0M5*79#f7tGLq}cEoh- z&!~RP&pyLZPLTX3;|)SA#dA&p7mTf)hBzY-hO~~<)q-Nm1GRxpiqsucCqBWH1y&dh z3bC{mM(5r{T(^FgY$o&M#CcM&FUU8i!rr3%1=C5}s!`s&n*}VJH$7hkoO~lFR4li| z*%9}J@#*$fh@JOJd~rY{SYmOYOCkN=89K?>7r0JJ-`H$KLW35rw_aEJccQeA0AxHh zO^qDZ;zA!SavU18pW-?H$|u7(8CudYX{|I>Dg*PMMAW~(pflJKhF@;U{%P=BsIugL zR|ACbUL8@Yc*46wvSE8eX&=645Ks&2YT*w5~QJDd@I-_8#kSWQBpr^8=DZh-N-D;T%)65VcPhH zTW+-U797!qoJS-dlsqZ<_Zb^xV`V~AOfCV@yB~hS2OC5sD=FTU>4-|Id)2JvPYeT_ zjk3Opzv;TrwGrE6mdG&7THd7{h)^+PY)Eo@Y@sAn)DrDfIQZ&5rN6}Wzl`jkT%#C0 z>tj1y0ng%s>n3+5?)KI;a}|^~zsjo~%qU#;0%-j?DK#P#K2FGb_=Lh)@t8g}+*LbN zJgym1hm_aW4aFJLX2hEI)Yv58d)7$hzN?jMR*n6yZ|!kNbYc^QQFMa3nZ@ZyE zmOdya)y3McjIxy+Spl(f<_eknMOrjFv=X+;C(EW+ELOd_FXy67uRr*vj6d(H_gOsB!*zh7$Tt+j0#Sq^&^8A#mkUDNci zx+qD%>!);lzb?wL;rX8#W+aHANw8NB=le4sK>WHiX%eE+8sSyHZRK33Pv>R+8xtjA z)h1$^MXi8$NYc7$^8C3>+2oEUVxTPD=rq0*Ujzsd-TU2R`JmsgtXn)QpK9RttPM+x(s=`Em*m-E=)|A?)N4=9QEuhFs#Zk zQ4%friP!zo<1!9Y)J`m8RGs4G9@D9(M?(PO&al5@AZ@ilHW+@^mhw09IS{a5WRh^YdJ$!Q-P z9L#If5*y~X|Mu-$vKvk_Zdh{DJMv9_TT*w5T=+5=*h9oN zgw~b#BpTh>mb(t$$ZMWmHdB3(z0$fPG{3TvG}-3bto3Tv*mZXLVxVwYdLQ@U%0}C2 zkd}kGGV3Ic+vSVRg?4j}!gATSFV2FH&PlU?u0G^(TB$?aPx@xHvF9?+Rn3bPJgd-E ze1O>DR;End#+|_Ius!D-t!ov@MRpNs%3-0?t2<8WD}x*>Eo^Js+2$_G%Ba#?af-BP z;~O%Z9d{Bapj))M#kBp5LTj!YsXeRj6iM$qP~-dnd0jR%`bJ1JoLixIaq@c`@>;%J zTaLm~PB&Ml`6y0p!<8~&#|JUzxpI}&v#pHPF1*>K6s8-?JRf&;aUm zXk09TX^Jyk=fuz^4h4pRD`}XcPHeV%xBnB z&uLjxn=Oi~^l@*&MFqLY>%XHH$_6S}$V+1<=c^g&sPB34YNRl!Hd$OETjzS4*lVX= z!czL+W}mZ&pPW{wer7JMlG~|AgT&g?$G9QDMSyK9QG{zfv~lHpp33~pL!|`g-qxrt zSIN%t!c2)x(6iI$7|o83wMU7!}a+mb^ z%?&Q|=Oz&uie?s#X@wets=CyHKXP7FIZflvdh&&?m(p~p9=UmdF?S#H08_l{>ZP3# z(KEIxM+-7m1{O$d0Y}5RHY|Ex9;(9{rdy_Z|p`>2ki=yny*sfaU{;!XMtD_ocuRMdRj#y-J zy&0F}wLb~24}?=6CSQeO+fW6vSzu?(ZZkAGUK8`nRqXvynZN(3*0GO?MpxLKQ~77P z$W4=V#`(_-Gqd-d1Rfn2;A6i2%Wtsp6jLgdu!-Yu_*3nD{6;Jk$7bf9HgjH&PMuvR z-;h!8BSDk->(mrUukecpz>YS=;CHv)H|qWHSQFmOKZg0wMh!cVij_I%bdh*OgPeVA z_HFj~Y^Ex$>}-?aeW8WL$S-^f?~lP=|FZ+eiV{xo!tmN-YvcQzBO4GNIsHAj9#fD1 z?cHe+Vz(99S{Mv2CA5n$X@8eI zm8(1dCdgk{Jyz*Wf#Rz4zsag%SWc9%@ryP)USq*a^ZH7PO(%rAznyjJ1y(P>^u7pe zS3bQtSRB@huxpy?Z^au=Padrk3(T+iyJp?Q!`M*5q?76)0W2DD+Qz5d6ikwPPs^@| z_h&}?V^YUSW{9Q`(^|0J)9E+QP~q!UE<|G9_r&k>pUB_})(4ywU8{#7yo--w3n_z% zPL7BzG7gXS7Z#~=ey}Bak-n8fxJ$58AecK?3$?fZ2O2X-s~iu5*m<#derEEO`CTzCr;gI*Col1>0hVwudt z<_pvH%P6~hn221g;8S9X69b03%JBHNT&-1S?alTpC$CF+1k0g}EaFZ6oy&jmu!FqBOsL?(<4UM-o>bxKT?y5gi{%P7 zQc?e2SyRMV*P%{$tOBjk@(eA>auJ=;?2k@&&_5Odd;nd_v;xExG=@roGA{nx3_v5C z3dKbDn+E+CQm@z_py~?0DN6qRlqa7bhl69ryaK1I>F-||fDnFtoOk$4PPG6Yr!t+c z*}pwtHaYM;ZtAE%2#mjm3Nwe&U}oQ6oaR~nZdHR=K&>U*ANBX&oqQH6gurmT?LQv; zhpBx881Y<9QilIy^N(L;Y##)^qki?`%3n2vKSN4{z;_1mcmDk1uMaI|0MJ)*Isf_} z@Ew~JLrgPu`No@oF=K`8dAYu}-nPMw8;GMyOZ5~|iU>Fp#~q4XFSgtC zK3}adw_6o_OqJDu7g*Y4k2pF4v5S_>qV$r-i5HKQZiOZ?j54h@hzN;X55Io#l zjjw?Cj~2|*0e<7fXXN-xC|q~v3+ENwcfOdxN8UmtYgIrE{Uv04@OtqsFR!Ykq&L6; zAUR8y?xm)u=R=K(Adg$#HOnYH3Z)Gw8=tm4FwUyVWLO_RErg#~v#nM0h0r2(=9sbS zW=Y5H*RrMRGfq9CJUqu~omegc%fgwR9VdW3N1B386xjgT6qjg%{c{6LVgV5UUJh;5 z-8KCkCwa>x<+jj4HNI#bL{bDba|344%H~=x^Bpw1(dOa7;$bfkfHbn4{voE7-QIQx zu_Wz)?pY5+Sx8kQ++Y0R_Cp<-l2grCPO)MZWW!%u@=U$GS)XiKy$_cZsINiyj$@XI zYKgD^q2zq>z!gvH225{@IUwnq4~VC~vfdD@=M{8bX;^wq5DBr}%>dP#!@RF{#mNb! zlh2}UW|3*)sA|uiaMr!G;3KWcA*eAxl@F7A;i&Y!Sq(t7-{X4?MB;i!Ykg%lViD{4 zcU^ydu)TNm24kzSoI-pBwFV;2Ih475<0;)O|>RX@3Cp&r2C)`Q?G^MIva04NNFFJK?eQQY$V zZkIhB*TOMkjOKqgoGiZr-%?mjnpW$xpUo{nCF>W4a0ySEtp{Qn3zn90BNmhQSx~zp zW{fDL?hw*2W_aDnNkq0EaI|vxz{5@1yc|~TgW6EZy?Vp7_Xn@=;49wk=UX-!w4+yB&r+T`cF;iX z)~xJpug(L3$t<90Fd(v7)Z7zVwssXXim8tila~05s=eYbuFWK%(N8?d6qK$u^nUX( zd*I||X>>t;I<8jpta00hgN9p1cV}CI?VXJ%F)h#!9cm~wcw0rLW8UI$CtjeB1FipRR0xk4$y17Cls>WE)a09S;cKcP|<$Ut&?xwhWh4o&__2P2?3f@ z7dzG$8*b?gNd9y5hg8vWQ z@c@7ed>#OV$PLi2wD#dVC<4&-0hw)60R9OaPc+6w+Aub40Q|&zS8bZDM>o=6O4C@q zxlF^?!p61VBIbyi1#DzLR|mjXM!&IxaBUEH0`P_OUdZ0QfCS?G~3ZOAC+Xr+kjHu1>o}@MJ z&QwLrS^)zTkvs&n58_J>fK+b2?9M&TlWm$!6h_L_;>fTx%(zv3Y*j4tYs|tLHXh4A(L--I90@5i|8m&^WoL2yVM7yKSEQ; zyN+N36VyDfg8cFI(4f1KR=r+tv+VXDFVps!6{u(#4XI|L!|W!=82W)62&5NMzjm$J z;ptJHF!ln$l5@u0tB7((b&I~Fq-jozlCv%&-sE$DW$ueV2*gL~oMxlTJ3@qrYPPcw zo-h~jF9dfD3@(?;hFxOOqEDN!zi_xo$x+|Q*L9m&L~p(MuzMyN&XjPO3sbqD@NZ=f zeO8aeU4R>~B7rR!_%B`Q2Sa!gyW;sKYdyOKqEz|vLGbC(oR>m}^zM6By8xU+yb85c zFziJ-{8I1_j&L0eymxnVX+uy_Sv)dKYsCqZL0eG!EBm~mqvklxOVe@lfW}`b5zOvs zGM}AUdsi4)6?m=vdA%5M!}Ui8ecfLqkSq|;RXq~225fPk6d)Gl#fS{aMZ<&J3=UY= z(PNV7AOUc=+2IaJ-mJIGnYZC6Bz%jNum)9zG~8rZ-i=X@r%_(vr@tizc0O6yXm;RT zM^;|)JXoTWr#$8z_5tiol1JyEp5|R8C8blbCBS8j-T)PrCcBd62ib|IkxBujdC2sko&9H&J+zvAH=W?hn=Mn}r zD!YGh1`x;wt|Klh`u=~l&T-IJwKqC!mDdcfF5J`_5bcRwc^Yq;NBo>jZq#|qcNpB9 z`f1!Y>%&T`kI)BI0@dd2XmBw4a|h69wy`N#)ozNFEKcAEDkoKFTh3r>`Vg)Kc_ex; zc@ggRV&rGpr7dim!qiepie)zcr-C3LhIljhB0(cTiJX+G3jFFtveMI<9)7BtfJo<9 zD3@vJoYtv?o$PIGW?Zl4^g8)7N7`bg$gf~GbciwL@ zD}mPXfW;5I7|$m?i&GS_#SJe&85+<11c~%U4EG9;QcicMJ*v#<;q>nT#zVZhr*4B! zth$MMIlXl0kq2ES!h&M?`Hi5l+_($zYXBBv`wM?iIEYbR{KUP|es(m|(4k_{a2}l? zs8CB)7;Bv9*(-MewB-hkK72~m&An9Bjc}Fj*ssepFWwJqw!QVgXd<03Q?BoKIzrvO zt{dtspuZbNto@U9?7%|f_=iLD@0Zr(MEAauwwB+fn{BK#i0BiN6%b+OTqpz_S52TP z>9D#Hv~aw&K{*)$M2%jUH@K_xmUNQ59?~Cvf_B?H5RCYU$KbEfQ-gJUk*{98@1@c) zOEdgg$$&Z0jJ~HjKY90LoRAdhym(_;(?C*Ek8B4P))jT8m^WzUh^_?(wYoV+MzIK}KBovYZzTtAJj@x!QQ@}CREOzz=?>iT!^dD`P>PRUI2ePNLv>bIU~F4xc@Hrm)y{ySGZSws zDptVCH@D;OBxsBirnT_~8F?cXu`z}DD#f{%U_iAE&n$xbx0`L_Pkd9YUrfTBuTnqU zFo|%sGCT9~<+h9>WEN0%6dH6Wo;XhOEeissjupLmPwvkf;KRltH!7Ny4G$?iSem0{ zc<}1&+_uL+ltfqnVBfCu>(#@$U<^NkGf0|HtW$sF%%PQj+_6zV+lrRMxbzm`K)(xb zQo9uoG58KZ_f@K%;SLO7K9YX9s`&K$cQWm>iDoj|md9&aR9|;t;oCT8lT1l35#dHQiLZTU~) zn{S<}W;&yb8^{foO-5=pA05s!VxKR&AT-85S(HU;!z>%Go08;!Y0rAsx<_!GD2#hp zGn^=lh5$E%M@!)#)Ci$@eza&l6w5VFAh1-2t;=-kHzjD31Mq1>&0hW|Y+r)z-p=wH z#T75?kN+-NCWvKC@v;ohCa{>^)gKjZ-nEr0YRk2>+UK7+QM3=jHamr?so0opL-+Q4 zW$+*HtV|55(q9vatraz&^$%Iis6CK$dp>(b>#L(tr)1@ptrWR5WGk#(*U!pl6;VTs z(Cra%;*UI7Tcou@ffDJXtc1N2DN5RF^NZ%F>K$j|oIlFyrIgo@TPNzHwNs<0$L*BK`(mC;4dAD^PV8-(ZWqE?qgGx-ZrcG(YEC;Oy>8ZqvnUOTp7Ls z;R?4o?)}&-GwN&`>%3nN800kzKBrgyycH^OyQrxDc^XE0-DQ`cgGNkqUI4FhML?r~ zN9@RlO0@50@QsebMklUuznTH-^<8Bz^8)wL8O^YyKwJw) zAHJMGoNLCDM##q2XeLP_D>+!FbIz4>C`wqM*7c;-a|nCz>L~}u0l=P2hc+s<39mLh z;NLYQ_Ni~>ibd5c$a3~2-L^9@C~$9#%}*4tkhCT>rO!`4iOzt5EE&0`;lwVoHpZ-H z03$O#!*1Cs{7s(Tu+zi|wBD?iQ{7VtPD{f0wHFd~Nl1*`K zdu-EgahO&p(NLBzH(GUki?ng??6S?P)l{$bYHZgZzJ2Iy>=fRApr-8GPYX+f{NZwt zK{JySP2%;IKfEDDcqUR#iw*cvnSax~#Or85`Ee_E=H$*V0b(ud{4uD?0O7)2oFGAS zFi35+hWr|#MR=0B_8&g@t1&^ChlBpJP&jlu8pp8(c! z0hS`vpv-K@Con$$}v^6wLt(v z5h+rjMT>zMdoc)lRXYlI;61U5?Tk>zsxR{Tnek7`MuEcNC-~uokS>t}pX&$yu0f-f zg)I^S-8JUjCz*n(h^YaGu9~jIf(_wkF01!`B)`0K^dV0^?i}MphkloUG#3eAg~P++ za~E0_NqPCZ8XbzZnjyc}F2AR#*Gf{j@Jh+!HMPt!B;#Aud_mX7WTSltgNJK*8l*gU zP;HCJuxILpdYqMfkU+Pow#(TG$5m>R(hCA(D~RjnXDzKZe+BszrhNL zxm^y)EO+#UX_7gG_ppDmeoyq}4_3z)md7%nDr=!XU4|?_SZB``ginMlJ|TndFW5Kg z(Op&R753SfE6CU70E5ef&F;#2@?gZFtH{lSH-kwI>9e^hl^B_`m_Z)6cXzJ|fB*nc=~VOpHnXytUwDIQL;xM=>Pa7}`GGlxn0Z|; ziGgfOqOXD8rXP_96T$t(>AoO=+QZPs{DjV4BS72BnNDSUby2lyH|z;4>kCijI~)q` zL%0u>2TK6@k(l3g70U;XShn#8`Blf=bOl|_r_|Zw+uz)6pO3H;Zl-!E-FAeKsM_`w z^=1|sGl=ODK>276&6nD6Ul}~vD4%nj$Gxa$t7mJh=Wnz2w~%j0DN{esp#4lpSi0NA zbd)<`r{}0Z;VE1LFXi&`XE--#oi}N?hsI8iXZ{z2hWj(9M7_jxY1CS&$AyXNPpQ^E z5ULvuI+7LFj7|uHF$qcX$F+e7gAlg-acnEu!IO#~hYex*nd(ULbb9hMrA*2vKycb` zIGMSy@1u0Os&f^XoU7`HsfN27YoCERg?WS1VA7Nz`vcF}sW;AB*b`t`VDHI^LMxPU zH_??~rr!1j`hc5BTnNc%U?@MCo2)b5zm`99cInNBXcOC*x<*~M=8xp>a#d#{V&PEE#Z07} zJIAoxeUYLIVR!H7!ody;*G?J)Z#^@fHx^wY=yeI8{XVV!zMjz?)zSnTOjlpk6tuOK zy75j0mEy)lK5O>Kp-`!Uzo^K$`Q;uRmb1zFGWM*2)f=s%U%xl0r+q3z(%YDUUj(;& zyU~7wExkF~so*e9YcD@c0E&oO_G() zJae|__kg^_Sk+dfewlF&peNcdIF{%gJxw)Dcek&Za@+k!*J}rseVtNGA&b=LezutmUf+R_J;0yvGC15z{@dugcF+U zZ5Ojq`w=XuePxpoy;Db<$Q$yg#9fW70+&kM!i3#!9zeGeS%`D0XC{F2aP|Gy%Czp* zT^lg*BE-YAUf<*7igctX=x$Cfpn6*hj^{Fl-EhZd8Jj+p#dBoCg#0uPWxE>$okt!K zw3$z-r3d+2gJKLD#v)ype()nN(<3)ZN=4aRm^?u^>st(zSv=!`=P zm(vsb*4jLJ7P=Q&m9_`#^d4OjsWUM=rk*Q>#Crmb7~qc$+cFJArcvA3o?axrG1t7b zE7uAmyX~1)7E-RuZ4-AB57=9@09a)PtfCqi2>=T2*nK`;pLE|`%v~clM87U);3Lkx z?B<*e5I;Wo^x22R_I(#Ixqh=XZY|k$t-C5GO#y0boSh~OOTGs6P8&)_hQW&5xmzmI6KrU;t7%67!Fj9gHCBVt?n1QVUOjb zYv?p6+~1F)^7m3JFN_zn&ka*6o2JOH@mxBu)6sr(`_t?(BpbV9Zgs}WKWo&Lv5S}7 zH|6>=aDJD-6&fZ<+ztgYCwKy#Wy= z^}z&ZAVA}8-3E9%&l?-D27r1`SFgsm38)lD9eoOjkfEeqBdlpEfJQ^PysV#yE?^yI z?h-=1_NIXeS0T#_5ts}I|99JV=OawOUF44mjura)HzQt*BrblsMrqFF)ibui+n@q< zBQSG9I@>%`%@LyVc~CBFc)>|1YtM^>68QZaE(S=ho&HnyjCE(vP(A@f7l zTM^d9u5p_|M+Ub_4ONSC3?1`d9cWd!d#k(dGAt03Z$f{N_WH#n{gR-1x$PNx^U;S% zom+=m2VV!^Wv{V>vkFSV&CJ`s95}T^m5zV%2A9eS&;I-TdvI!0@Ris z9dikd2|6ZPe2q2aBX;wvKO*-zyMJB6)11#lblE-}Qy{x2jm1B6MCzYUi6&QVI~P=} zIdEjjWRH-KB6`nZ+|6+rDlZs!jGoiYxQoB7ZnU*R!@OaYkjXWEW^i5e>qcUR!-#xP zDPV09CCs1;WIjC>H!QoolW2*xXZ$mbWWnP#K)Qm|YRQUs}N!FCmG zS1C_4wee=pU#A0NK9R_+PQ?uO6B`pc?-B~eGybcC4?tk3^3T7POmVI!-o~)0R@y~0 zQIy=~a3&qSCbhEWC0K?sO`?|D^l{IB$F}+Z(-{L96 z7{doTv^jy){FY0-2AC>5R}RvLX&UUGV^8&Q8fGYpKDYXy-y0sBKtc8q)6g(q zLb4-$9t)r2!fki{ua~W15YoGnet#Y7s0y#yYWl|t!{wGi+f?^H{8=#F5C%z}jj+c_ z%E0E*IeYvtqXqq<>##ZUdEPd-X2lSuO_jWLoK>%=whj>QO@8fZnJiB9=gs|dav=^A ztPBDcjCm)Uk%XyRQeQj0Ru|!pl1YO1z3e}+?SUuv>m53qvKylQZ z=1Cvh6gYN6%wk^x_i4I> zPVhJiBpm^Pu+LGtT{lbM^xC~KI50hz&{Oum2h>g1l%}@F8m{ngs~-{6^Y)zy=4~8V zc74gH4{pCHHe8lGF0|s!ptU)iZa4KXRr^0y9yA~9sza*Kknsz`Z4J*g5kBee{-krN z5uMgP>P(?DD=-TM4|@lvS&hR2@?L^PbdSs8uJGXV1H%5U$9`%OzFFI_ZGX=7ny&Sg zu?dh>muGYEw1;jF0RL0y|M;JV2rrR_J`VI2Zl^@{Fn#V)YGo|7%XnN>DskU(N-#~s z>b-3=YPiCp9ce46CI4#E-vyc*r!IIPrMYzsV*Qj-x^sxW{q`As8?Of9#nsry-^%m< z18jMUu?>4UI5e|r-j8je9dx~KWmFv@=;7LqAHAQfCRx_K1uywx_m{O52HSNc)fQIm zsxXfiXYfrQwBdA{pHB}qHn%`IjUP2lmKB~hb{j;|*T)Oci@vw{&pG*YJ~oO-Bd2=j zQcrTb>1)QlG1Aj?u&>8i)8M6ln<5AMhGgbV6lV9ONaNEi$S6Zm_sCGW}OkL^*@2xE|@9UM?T@7Q~ zTJ^1K1ddH-&TGYjFBtsXrUR8vmtFK6uY-I`+}_7x@j5?uew^TIa4NW}t?%~u{~)la zBuKFe=~N{SAWgcwqnkB)`PEz{&im*kN%y0=yemyEi!N3%S$Y_ap_iq5@m>K+t47ba zuSq9_J6fYmz0!lM?g=$OyPQ$)>JQnt21jgEO5d*eVn->L{`cz54iE(5@*{aOEC!>J z7yPE@0gOew)e50ze@S=r`H!)?RlemT?>eG+@Ul+JJL+%V0wkvMO^HFtOC({K{fy)u z*{N=V1+pYUMH;@`jQ)BE*$Tm@6r34|BdGJ%Uos1K6P_1g{2fUD&us8(aoPPr89=Iv^cJ{fp8;G}({@e-n;P~3x59(ImvlA-93W?MNo5vZ(CJY6hUnYEy zL|At4!U$VwRC>3G9unMMwN{8m6PxK5;WM%>t;V(Y!%XnY> z7w5{A$_KloNnb>4_{DFmBFV17(1^$g#elsgRMP`( zZB1AZT~Aw;*cAM3rbRl79!bdku3PhF)53Eus^%Jw%JMCUgh<~6(51HduwRqtUqPGw zEPh@SZ4Zxtnbe>Jbx7R;?dYF8?hj=Gus0Bf(rapsMp9fE-R^n)S??7qtm{^fsoufu zGn?umMqQ{zu&2u$+_@VI zYS>~0ry|=1idVb{C5+GtU;-iDe}p8M2)#TQSL*c5=S8?`PHW@iH#S2Z0XKGGWv3O` zn`+50{?+XHU+?(`I+$Ro-n=0DOkgRHOGM6?XmYo<0x56(;Iz_k9BrOojx%G|Dq#>;j5f?u6X z!j4ET!d|{`?H-5Tg4U^{rRMR>nRU&55LJUifx(2N;kG*Bx=YPMI4&8-sT%C zR7_2?=C?^Z#Rawr@UpQU>h>`m1sSyw_t`voR(x!Cz z2L|&WOUn=8tT-roY`L_@Zm0`gUJ!nzrMxw=SH4=KQqW<}SmhN}V>Da1+Nfe=t@Lzf zv_}SQqx-CGdL{u2msB0CDIGmkkFM#!QCjA8oYJv%z_ct6gL7?=&CawRpb->nF8?74 zg+ARVS&%!(z3af9vJCJ{~r1vMd`tOtuac1(Zd6PE7Bv9dRI@U!KPv*BB^IYx`P%A17#EzA99JM*z5 zUCo(lP@J#LM5bHqT5tUnWBBOhW(-5FVzYHxQL($r$-80TP9pFkX&!A*jI~EEUhq8xWRz&P6;~8{`e}DOLW=h;Eghvss)e z&X&3jw7`_ehOdo&jgd55*UT^nZNC&N&RDbF|(m&xtj%A`ql zNC9<$(2on6HNKzfvtZBSo%tQ*3yV4xjyBO9W^kgt+;8ubgoF6Qay6T*yBj!Zr_EAP zIk%F1Wi9?ZmVY37V=&*Tp~a~+NgVS&;v!E4izy=JU$@%H0qf5A*|hieS?1JC-KsDz zhD6D$$hzXn0D(*sYf06^-ZwTkWg~V(;|@DBbfsHu(@DxJwByNAVyynv2;@CnbxR?N zSaByTDlcnW&xiIGy?q>~uki53Q6|iXHj;~{Qu)YyEYnS9wZOAIcIAHQ)HadzofzFD zncBh{R{K&u>W8-nio}hVL5%+%!{|;H3@QZegXPGg6;20wG3I77H^+3Oc_na+BwW>s z6V~#HFXfjncfIis0gMx9Qy-%7H75IpH>3Guyj}0s$(AUaN+ad_tUOz1I!#j1jwy!j zFLplWk5Vf)u0|bQ?#k|4?N2!l>2{*-E39!|w}i8eKL>Z)JJm*Lt;gt`N};VVOuiO? z`PcCV@n(7NBOIxGI{SRzNtT%`#YVeVMy6~e#s>?`7s^U~9hjb#$Edt2r{$8IB;qv5iX&dXIvCFGQjV>TqY_}SvQqaWQ{%_X4DS&>3{_hCRP^_t!pi6m-0-EZKV*kq;O+G{ zw9DrP-J4Ys{(HVCijq=^hHb+gv(~1hZoeQY#T*Qd;a1CkPJrOToh)N!coI?}S-vl^ zR4Sckw8{I0XU&eQgm^`ZKKMc?Q?pLu5p%k3yP3H)VzQapv?UkC-$@IHYpg_JkbBCH zc%b_RiJNt9g_1WtePUrc-zM?G!RcK~+El@p?7k)k5}BT`b}fkSM*(^6_UUAv;Pvcjo`|t#p2bMQ z#d)Hn(MH&9H(GIgs8U5TZ>)(boGT9^i5=t3uKw0*%xvBrw%jZ`D#~YjY;wgMj#i>V z_E27(&OBtJ{Fh#5L1H8$kK>gDnX(p{4HsyfhX<_HpKg)9>oY@}nGm*E+HrZfz|gzS zjs;KcUmcN^L>eR~O8o1ly24rgO+kK`pIEgwdHEqFyU z&uG3%CtCQKIl>_c=Kqky1;>}zx7q`D0S!>BsTI3cB7FY$cmq$Odx!9|gA>*3Hu#fS z%4?MxMJHP?1-P7ZZSEe5AAeIig%F2B;lYYH7 z2%-%4OAtyc#K+$(9o3|ve3+j97#rS#L;5a~|Gl>Bg`msr{D5KC#GrjADG42vh2r4# z&dX~(L*-mE5aIC&MK^2j$A7Ijz>l&?cR5qh9C(F~96rQy->pBFzjj;Y4B|))7U^imjNlx~SYd6im7b#MoVvG;zxJvRoIc9Z} z4q@r0rNX1gpXBs{J}U+|(3M4+i7R8d$eL>q#^2-^ys6uQPT$K|>EoSoj82f*>Igy2 zHYMn5s#pBhyhS#{swF=bO8$)N-712|?ih95o=nt^kqx#xh;ssM*HimsaW6j1NrO(M zdvMgmpy%$@Gp@$*6Xr1sB(ms}J6A=eB8Zy62WueD*^y>v~YP#};chq8URAQsAf04_pBN;{ zN9?XGE~2MZ!~g63$a(=C{9|HrPHMX+JVdcK$tJzrN`d|k@ynizK;P9{YFo0gp667& z!Mo~su6OuL=^hbC2co>Q?y+Iwsfml6W|xb-P45zM#^#-hO8kOfI=%k%08TQ4$Hac`l2)cJK zo}naKE>J&SRy@*_S)Bj8IH!xw?#f=*9h^tn68^P7;3sJfe|VDi@25buhsp1~Rh5>` zdll#$Atn0UEH%GlS6sqjrD)mi@=Q;%uraaJLv2Pn;fbBSBg5d z-N6rfA0uR#jJx#H*UP!<_g$}=!mz({CVEN`w{LeCPIGRzn4aiu?`n`heeL`@*YLqZ zpX|Ti40%{m9*>x#%v37YVWaKfrEKkkBw4$tezQEM{_Kg`d(1E2YNgoN211rvzYtDq zCSxLq-@kAYDy-bFHXF!>qD`W{9F3`GYAn}wmNuKMJ8+v3o39e;8u=!>Ys#rqU4)%3 zk)c4(#l}4vg;jTdp*qv8J-HkRQgtI9koG%KLV9z~I(DmSBaq~iwS5;#N*pD{lTGZv z&YI1%@fBm%Qx6~R*}pf~=*}rj@A?|uS6GZ`h4Nb9v=1?Sa|}AJsdBTUWo_l}-+jq| zn*{d<%SsJgI6JRZdA2&oab2HB&!Frr);h}I1hibb{=(hgVh-7y;5=6?dK*4i(6Ep+ z9C})bd+XUe)iiy%VNGnmV`k{5HDMOFpJf{&_%%p*4{E>pwTD(qo(E>TONKr1C5lx$ z1^fNNrtRS&=&S0i)gX#d8qU)3rzVz%%+7{+1#n`o$iwpH3+Bv!CQH_5*r7qDgf0fd z{$i3Xuzf9h0SS%pQ)mZ4e%hA9Bf8cMWkn`1%8Ft~W;XJ&?do1vpX7{wq`!lm@!@8~ zQ+HQJtSDz5wfHhJukzjcUb84{t8M#sej#8U1}zU?Iv9Q<#Qrs~fU3$C3sg+!$~kFN z6rG^J&V=Olc)31sHl2o!HeKjiB`VyitT<+-+0Lwpi}D*;`XMpnu67O}d1k zNGuhIXLu4??BygR15;mo}Xn&hYTESbk0}8bq}HQt}}!*8&J2 zOvm}u=F+PP`~R%{v2S!idM6nGGzKy;KE6iWPs4ArGTH&~RyF|uzDK3_srziXmMy?t z`3{KBt)49!tAwdgCNgO3&sHQpnTav6u(0U);bIauPVCl}YBb0K-X#N{7}f$+W1i;Z z)km035z4be2A@crf$Q0x z!@~oHIk!?(GE*pE7PkbeZS34k1YTZVfS=Lu4FF=9C08@kU)T4~aZU=6+7y8~D74kL@*%z}J zbQ)XfZzMdrqC0WdbK#o#wfA#Jd(S8^f>PH}2jON}X0jUcUsaolzrXw@@@rZLqi$iV^Js3nfaSX-+;od2X7%`As z4k??NmHb+T=f`F3UrqY33>LsAQ>Ad`)d_w40;J%b?Sh>ha^U+HF7Iv1udf>0qlbik z?jesTve9WQC`-BDNG4Ca)L7y=<@`8L`Y|NgA;X8|jjTn>c*@oq>MUC5yA=ZT|Wg3=tT|7dNF@M#sl|cTl3DU0ik#gGQP) zb0n(C$c~o3;bF+SnGHBWK0$yQ$9A0`rOifzqS_eNX^Q5=~aJ02-1`IaOH-pI| zt?zFDl~BXM1lsj$qN}k7fMA%PpZ{Ll>)t`FQrBlFjdPMWI(zBKTwxfy6B)6V(|Ck% zKOv0Wa&f0WU7BJOaFVqf9?c&UGnr}^zE!HXBZG;s+pQ78N z%&JngV6<$WKKuxcSwD>2RJc505F~mdpe=-1)z#p zgjuuYAzDc6d82m=SYB=NoOl7+j+;j<$IHSdxoLICF%f3~7%=YLH2{_W=n4F;rD%)F zU~*0-4YYsO1jzD=0UF3`yL)?IR(@@^$EhA|mJlRS0~EmUVf0b@w2E8!tWJCfm;KjhbQNTut^F zowVNTEH?8Sz&51>Tss;E-2mEHT4P^N6kLZ^DG@*57W)%Wk#VvmdQoSgwFUq$LS0LnVP#0#KN4Fa%J`ceMJ)-(V< zYrBnjua!2{Mstsk56UEPHpK<5y~SiY#PwD?a$P# zfDZ%r7%oj|p% zx^L|mbsJGi;~s6I9ASJO4sTFvLuL_lIf^@XE3&@S;ZJ5JOxojDCN*w&8=l0n|J=e) z?f%)%0i1~+y`kACwbLo#KhBH-^0r@YV;X!{|9hiF3-so7KU{2@lsV-CED1GPrDX^Tb)QEFK;u>!)|!<;gmWB#ms1+Y zK&@-3N6>2Dg`>25Lp4=U5C!bTF5p>dy}oF^ZV1J*5`JUm14yPPx>& zo0u(<_iAo^ZdGsK!tsIt`jU}&PDsEF@B=7L;t*Q~m@{v00o(T`1d>H4C=f(KL{M?H z-v{SK5TR{wDk><7F99iwrr+mT*WIq{4d`ip9T>tMWE?mRo}n%H?2D%c_jzEz!*WI9 zW3`2VMg>h`TW9LlW;YLrui!w5>1gh2tS>+UlQkuSmiI&BuQ zHYp+SF3=&3pqGMJ_hc2iD}r@;js~SAPnb}n5+0A|XHpREeka+*X{7-)NT@3am*<<> zGGH+HZkrPrw2mWxdUL&d4sC4GaMztlyH-+fQZWXCZ^HNvRUrf-mv0g^*V%mi7}!A} zm&hBOTS*3s7Y^n~@Sw&v)yg2&R4nhJvl(JA%Ni;++MWrB8IcYkoz1FTbn!4YZq3?I z{tEiN1ERw;R@`0dwrszuhrBIc@Ic>PqPIEsrNhRHTka1yGa5EFRKAvHs(|2`ig(b+ zyNAjYwrxxr-_fG-l5V4u9-hB-!oL}~q|EVc{witbB2UM)FWGnd!M(`b>L%RWLi_D} zv)aVhf>?>mgZ)73Elx47(-!YJ)RyaoIW)*dU9AHp5S487VPfwvlzP|-HPx}bdS@({ zXY8QW+`d2N?hNob2XhHp%#>A(Ys2U`6V>kSFR{uPw*?D1NK%O^o`NRe5MV{r#b=vw zc=C#|Y~zIGCe}ndYP;5E*ZS3qDF;MDLAnh@Lu8(7g7xrNrEUFOmlg~4ScCTV_KmxH z%KgXOA{>rx1NQd8TClAzI~ASIv&caX7GTcSm7QZX<8-Cc8V`u$bu^sK3vQ`II*0x3 zaVyO4Xopu>A@GdSb{!h*m1dTf2>=1Tf#Z2?06ZJ!4(=r2eL#y_;_(Be<^?f8>umze zCqCVtZJq&y?B>L0Xb|j9IC@^(r>$RChs+z2xkOnunh-PxbClh<@@mwdt31A#V7xkF zTu?&H%usAyb$;ABdgy>tX6vHu)unKS)T;&})=SaMDX+^0$}eNMQsJe%VPuO+L86x_ zNH%y~OkedP9IkJ~{a#R@CZ;RY|x!O^VVBWR(0u_IPo@4>B zM@H1g4?Ve_n7^tvz@NJFV7c)7SD?)%swS6gYV@nKxhYdGG0jacorUuZ%D4p7#&X^W zSH2M8JlJD`QUl}08%Eq+2~B?U)B2B>fZRKX%5BwqF5tu;2d|5`6|F+E>0>)U`}zhr zU2U)__B^*it5aP-VGO;TS3Q2>I)SGHR0HN7#-lucvVHM`8aO&gg0b|S#iIH3?3jhm z32*|xA9B%JbrJNcgg^l6iw()_Oi!;WS>n`sK#^L@l9o#wN|%efbcLSnxnM#X|rfMI&eX3p*@X^vd$w_VLWUZ!Yh@_#AZ`n zhy+V|S6u+wY@aO^0*HgJ_itXWfc5^0U0|RgWt9+Ieb}Fn^~HW)_Yyx`dY;KUH;jn< zHyOlV$kLaW*Hs z$8*WNn5jkFHKVgAs|nxAr#|jV(#EZQsRiU!wYcwNDHs%ZSUjg=y;|EX2yXBp`aUIkfr{b>W>?B@C#}U zX6-a$mnJ7S%)2KeSM(2hBh#13N*S>T*~S7dp)H22r3Rs{}+0P`K_aM&SWcd)h{@;}9Fq=2JTQ zuEl(wDd?pyQ9Xk)&uZ5Uz!ui&jljX~02t?s99=KhNz6|gs@idonFXKXPB%{I#Rgw! zmxL%temZ%76VaGH#|eQU<53ug)2X#Olk1C;0Y`zAB2+UqJmNUTW`(^#w>(GZpw~6& z)HCp}%O_WtjKO2+&L3T;rG5!QWQ!~`$XM+XBpYO7MrT+grQ6ouI$Z5B*zb5iUOZ`5#shbB$3D%l0F+qwrfe__{naW!9hN>vyDOUJc&e zI@5LbB*8tVY(`)~HvLRXw(XGXjSX>QpMt}75vc1H-OgigxIFpiLHXz#ogQQQI$z1# zAh-!>NKSD?GY+G>F~O<%>4QbOvpsb>JAU=+o?g{^Evg~j_o>7>*`g48C~ zl6O2MUWI&EJ03lE*dlAF?;2S@{Infx{1L`_!#ID^<6a()i@y<2yC42N% z`Z>y^Ei}dZ(0aLZG@{8ib`}Q5>oyZmOJi5-=E5S9h zhVC9fxR;ja>?+dJq-Pb-h!`{AR2gdp5oN0NHn%fn6wl?Kury=Sk8#rV>%+oQr&4_+3| z`h&ZZ!S?mKg}Rv6Zi#er{SJwR+cV`P5RYn>_14=Zp(VpcitC{ov-p06S7YOd_A8!~ z7f#<0EeA(qdy=19FA-tw2S7N7W;Z+j6x$TUI*BEJ)P2}!}~z*)9%sErhw-xII58fw_gfz>CiKLxVTi z7;}dztd^)9&^RtjNsM!a;jYwkjG=SrY>yWPR~X+K_2~a1`gNgruT>zO1tEG~TkYFo zoqgc2g7!bn{z=(R;=F=3JvQ;*LtZ(GhVY;)FqD#X1@Geyi=cM$ad^ zY~#}uvQ&h^4FB%eu0p-i1xZi4?r?aI*?fJvzO?{G($H~0$RPvcYK|s@D#SCqmWbkq z{OH84ee;cP=MOcHxEh|kLh=t;a`1-rzn4tl?;xbmJaMbsdpFn|?dXI5l%Y4!sotc? z5BN7s(>qyS-tT*6%rkL!HKsLQ1=Q!S#pu+1j%Q(G;~H(->?z13E{RyJ`<|hYC6_?D z|Mx4~=_w5bqPo1il+9XrHsQ&mi5l@cAIS=ZmAtpSamk-ZP@$_ons?w93tyq(pL1!# zWgCi(oP+tHK{P0=3A9+XBUs>ES*a$T|Gfkp1i_xH!c=tcO_yBvjN6F+HKq^@Xw0A3 zxyPRP+Z0)}SLe}mSmw{TG;3V3A)8X0x3eYj1p*b=5@4YA{5yER5BKH`hb8g8ssXg_ z|GLDaK-QvF$fibkxhfZ~20QJ_h+oycC)vsbcH)m3Gwdisdgn6m_RF1V3Q4!W{^E6I zCOXx1XLTk@Y|md8PJ)FFHu|NldXQSpqobPmZh!WjQongT#G;z**S;tI)gccq!~(ME zd#m6g>%$jsZ<_i~cJ@#E9Tf`3AVlji1<{1G%3W%Kb&#Dga=**$+dHgMy7G7_4c^D* zO}PEr+sT*$flSmN=6?UafOr;Fii|ZxT$*8lmAiq-(Q=k{CF-6jfzDxRw8p;Z%+aD* zAL(NE)v)8AlGL9QAVYis57*#@5@53g%(hKyb-b{_cwx^ZCWGmUEmow9&l7pH|J05D z8p)?jC=?+{02RrBS%3Dh75`Lmu2i&xYOF*shV9RV|C~^~C#6amM7#=N!Kmd$CzzBE zg7M&@szLd`E*k!(SSsYY>W9kIiI{2<%ssjPXu*HO6sRdH`GZeC=0+y`_(c5o9QkXr z`1^b31xA)YruMS=Uo-EYf&S~3B!S=2hXf@5{ek{7@1K5TXoGzqIbe!!&gf$0fC9cG O-ph*ozpZmhXaWE{e+a_> literal 0 HcmV?d00001 From 0217bbb07f4fc4c2c249d3ca51467ebf7f10c47e Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 20 Nov 2019 15:59:27 -0800 Subject: [PATCH 53/56] More notes --- source/_posts/2019-11-20-release-102.markdown | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/source/_posts/2019-11-20-release-102.markdown b/source/_posts/2019-11-20-release-102.markdown index e6df2de77d8..c770ab824ee 100644 --- a/source/_posts/2019-11-20-release-102.markdown +++ b/source/_posts/2019-11-20-release-102.markdown @@ -36,7 +36,7 @@ So if you were to link an integration via OAuth2 before today, you would have to Home Assistant Cloud is introducing a new account linking service that will be freely available for everyone – no cloud account required. With this service, Home Assistant controls the developer account, and users will just need to link their accounts.

    The first integration to use this new service is [Somfy][somfy docs]. Manual installation is also still possible. This integration is built on top of our [new OAuth2 framework](https://developers.home-assistant.io/docs/en/config_entries_config_flow_handler.html#configuration-via-oauth2). We expect more integration developers to migrate OAuth2 integrations in the future. @@ -61,12 +61,9 @@ Be advised that not all devices are supported yet, and that Almond needs more tr Screenshot of the scene editor.

    -We also introduce a [scene editor](/docs/scene/editor/). With the scene editor you can easily store the states of devices in a scene. -You simply select the devices (and/or entities if you are in advanced mode) you want to include in your scene and set the states to how you would like them when the scene activates. -Changes you do to the state of a device that is included in the scene you are editing are discarded when you exit the scene editor. +We're also introducing a [scene editor](/docs/scene/editor/). With the scene editor you can easily store the states of devices in a scene. You simply select the devices (and/or entities if you are in advanced mode) you want to include in your scene and set the states to how you would like them when the scene activates. -To use the scene editor your scene config should be in the file `scenes.yaml` in your config directory and included in `configuration.yaml`. -Every scene should have a unique id for the editor to work. +To use the scene editor your scene config should be in the file `scenes.yaml` in your config directory and included in `configuration.yaml`. Every scene should have a unique id for the editor to work. ```yaml # scenes.yaml @@ -89,12 +86,23 @@ scene: !include scenes.yaml ## In other news +Andrew learned Swift and created a new mini-app for Mac: +
    -https://github.com/tuanha2000vn/hasskit/ +Our Android app is not the only new app on the block. [@tuanha2000vn](https://github.com/tuanha2000vn) has released [Hasskit](https://github.com/tuanha2000vn/hasskit/), a new app built with Flutter that can be used on both Android and iOS. -https://www.reddit.com/r/homeassistant/comments/dz1qsi/picture_elements_are_so_fun_i_made_a_bad_video/ +And finally, Brad posted a video on [Reddit](https://www.reddit.com/r/homeassistant/comments/dz1qsi/picture_elements_are_so_fun_i_made_a_bad_video/) showing his amazing usage of picture elements in Lovelace. Check it out: + +
    + +
    + +Users of Xiaomi Vacuum cleaners can now use this great custom Lovelace card: + + ## New Integrations From 0d0e0a761e4f6073774b0023a714df9691675720 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 20 Nov 2019 16:05:08 -0800 Subject: [PATCH 54/56] Final things --- source/_integrations/stt.markdown | 9 +++++++++ source/_posts/2019-11-20-release-102.markdown | 10 +++++----- 2 files changed, 14 insertions(+), 5 deletions(-) create mode 100644 source/_integrations/stt.markdown diff --git a/source/_integrations/stt.markdown b/source/_integrations/stt.markdown new file mode 100644 index 00000000000..89a6f3bc7bc --- /dev/null +++ b/source/_integrations/stt.markdown @@ -0,0 +1,9 @@ +--- +title: "Speech-to-Text (STT)" +description: "Instructions on how to set up Speech-to-Text (STT) with Home Assistant." +ha_release: "0.102" +--- + +Speech-to-Text (SST) allows you to stream speech data to the SST API and get text back. + +This is an integration that is a building block for other integrations or apps building on top of Home Assistant, like [Ada](https://github.com/home-assistant/ada). diff --git a/source/_posts/2019-11-20-release-102.markdown b/source/_posts/2019-11-20-release-102.markdown index c770ab824ee..fea910694f8 100644 --- a/source/_posts/2019-11-20-release-102.markdown +++ b/source/_posts/2019-11-20-release-102.markdown @@ -110,7 +110,7 @@ Users of Xiaomi Vacuum cleaners can now use this great custom Lovelace card: - Almond integration ([@balloob] - [#28282]) ([almond docs]) (new-integration) - Speech to Text component ([@pvizeli] - [#28434]) ([demo docs]) ([stt docs]) (new-integration) - Add WLED integration ([@frenck] - [#28542]) ([wled docs]) (new-integration) -- Add azure servicebus notify service ([@hfurubotten] - [#27566]) ([azure_servicebus docs]) (new-integration) +- Add azure servicebus notify service ([@hfurubotten] - [#27566]) ([azure_service_bus docs]) (new-integration) - Add pcal9535a integration ([@Shulyaka] - [#26563]) ([pcal9535a docs]) (new-integration) ## New Platforms @@ -252,7 +252,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Add transmission info about torrents that is accessible with templating ([@JPHutchins] - [#27111]) ([transmission docs]) - More header cleanup for websocket proxy ([@pvizeli] - [#28288]) ([hassio docs]) - Bump avea to 1.4 ([@pattyland] - [#28287]) ([avea docs]) -- Remove GTT component ([@eliseomartelli] - [#28286]) ([gtt docs]) +- Remove GTT component ([@eliseomartelli] - [#28286]) - Hue: Create new config flow when auth is lost ([@bramkragten] - [#28204]) ([hue docs]) - Revert "More header cleanup for websocket proxy (#28288)" ([@pvizeli] - [#28293]) ([hassio docs]) - Add support for Somfy Garage door Rollixo IO DiscreteGarageOpenerIOComponent in Tahoma component ([@yjajkiew] - [#28291]) ([tahoma docs]) @@ -281,7 +281,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Don't set entity_id in ZHA entities ([@Adminiuga] - [#28362]) ([zha docs]) - Update withings-api to avoid data parsing bugs. ([@vangorra] - [#28382]) ([withings docs]) - Add services.yaml to onvif component ([@ZiroNL] - [#28349]) -- Fix ([@Anonym-tsk] - [#28369]) ([telegram_bot docs]) +- Fix Telegram Bot ([@Anonym-tsk] - [#28369]) - Fill services.yaml for squeezebox ([@gngj] - [#28247]) - Add file list to attributes of folder sensor ([@thoscut] - [#28338]) ([folder docs]) - Show all UPNP/IGD sensors in one device ([@escoand] - [#27517]) ([upnp docs]) (breaking change) @@ -372,7 +372,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Add device triggers to vacuum ([@balloob] - [#28548]) ([automation docs]) ([device_automation docs]) ([vacuum docs]) - Fix demo TTS ([@bramkragten] - [#28608]) ([demo docs]) - Add climate device actions ([@balloob] - [#28552]) ([climate docs]) ([device_automation docs]) -- Add azure servicebus notify service ([@hfurubotten] - [#27566]) ([azure_servicebus docs]) (new-integration) +- Add azure servicebus notify service ([@hfurubotten] - [#27566]) ([azure_service_bus docs]) (new-integration) - Add climate device triggers ([@balloob] - [#28544]) ([automation docs]) ([climate docs]) ([device_automation docs]) ([homekit docs]) - Add fan device condition ([@balloob] - [#28549]) ([device_automation docs]) ([fan docs]) - Add vacuum device conditions ([@balloob] - [#28551]) ([device_automation docs]) ([vacuum docs]) @@ -802,7 +802,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [automation docs]: /integrations/automation/ [avea docs]: /integrations/avea/ [aws docs]: /integrations/aws/ -[azure_servicebus docs]: /integrations/azure_servicebus/ +[azure_service_bus docs]: /integrations/azure_service_bus/ [bluesound docs]: /integrations/bluesound/ [bmw_connected_drive docs]: /integrations/bmw_connected_drive/ [climate docs]: /integrations/climate/ From 9c983725948159a7f632dff511f43cc6fd233044 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 20 Nov 2019 16:19:24 -0800 Subject: [PATCH 55/56] More updates --- source/_integrations/almond.markdown | 8 ++++++++ ...-20-privacy-focused-voice-assistant.markdown | 16 ++++++++-------- source/_posts/2019-11-20-release-102.markdown | 4 ++-- source/images/blog/2019-11-0.102/components.png | Bin 0 -> 18176 bytes .../almond.png | Bin .../overview.svg | 0 .../telegram.png | Bin 7 files changed, 18 insertions(+), 10 deletions(-) create mode 100644 source/images/blog/2019-11-0.102/components.png rename source/images/blog/{2019-voice-assistant => 2019-11-voice-assistant}/almond.png (100%) rename source/images/blog/{2019-voice-assistant => 2019-11-voice-assistant}/overview.svg (100%) rename source/images/blog/{2019-voice-assistant => 2019-11-voice-assistant}/telegram.png (100%) diff --git a/source/_integrations/almond.markdown b/source/_integrations/almond.markdown index 3da27007a39..b436377e2bb 100644 --- a/source/_integrations/almond.markdown +++ b/source/_integrations/almond.markdown @@ -58,3 +58,11 @@ almond: ``` You can now go to the integrations page and start the configuration flow. + +## Language Support + +Almond is currently limited to the English language. This is not a technical limitation but requires specialized engineering effort. Almond has currently no public timeline for adding other languages. + +## Device Support + +Almond is constantly improving. It does not currently support all devices, but we're working with Almond on improving this. diff --git a/source/_posts/2019-11-20-privacy-focused-voice-assistant.markdown b/source/_posts/2019-11-20-privacy-focused-voice-assistant.markdown index 376a8c28cc6..8e90a1804d7 100644 --- a/source/_posts/2019-11-20-privacy-focused-voice-assistant.markdown +++ b/source/_posts/2019-11-20-privacy-focused-voice-assistant.markdown @@ -2,13 +2,13 @@ layout: post title: "Almond & Ada: privacy-focused voice assistant" description: "Say Hi! to Almond, a privacy-focused virtual assistant and Ada, a voice assistant powered by Home Assistant." -date: 2019-11-14 0:43:02 +date: 2019-11-20 0:43:02 date_formatted: "November 20, 2019" author: Paulus Schoutsen author_twitter: balloob comments: true categories: Announcements -og_image: /images/blog/2019-voice-assistant/almond.png +og_image: /images/blog/2019-11-voice-assistant/almond.png --- TL;DR: @@ -33,9 +33,9 @@ Recently we got in touch with the [Open Virtual Assistant Lab at Stanford Univer [Almond](https://almond.stanford.edu/) is an open, privacy-preserving virtual assistant that is open source. With Almond, you can run a virtual assistant at home, that can tell you the news or control your house. It is powered by [LUInet](https://almond.stanford.edu/doc/genie-intro.md), a state-of-the-art neural network developed at Stanford. And it now works with Home Assistant. -The Almond team has updated Almond to make it aware of all the different device types in Home Assistant and allow Almond to control them. In turn, we have upgraded the conversation integration in Home Assistant to support Almond, allowing users to converse with Almond via the frontend. +The Almond team has updated Almond to make it aware of the different device types in Home Assistant and allow Almond to control them. In turn, we have upgraded the conversation integration in Home Assistant to support Almond, allowing users to converse with Almond via the frontend. -

    Screenshot showing Almond integration in Home Assistant.Screenshot showing Almond integration in Home Assistant.

    +

    Screenshot showing Almond integration in Home Assistant.Screenshot showing Almond integration in Home Assistant.

    Almond is available to users today in Home Assistant 0.102. It requires an Almond Server, which you can either install yourself, use the new Almond Hass.io add-on or rely on Almond Web, a cloud version hosted by Stanford. By default, Almond Server will rely on a cloud version of LUInet, but it is possible to run it locally. @@ -51,7 +51,7 @@ Almond has room for improvement. But it's open source, and with the Home Assista Almond is gathering sentences that you want to use to control the devices in your home. We already have a basic set of sentences, but the more, the better. You can submit those sentences [using this form](https://docs.google.com/forms/d/e/1FAIpQLSeStJfjvueNAiueRVmP47XALRaJlx7tttzJjRfVjX4J546-uA/viewform). -You are also able to help train LUInet directly by teaching it how to interpret sentences [here](https://almond.stanford.edu/developers/train). +You are also able to help train LUInet directly by teaching it how to interpret sentences [in the training console](https://almond.stanford.edu/developers/train). ## Ada @@ -59,7 +59,7 @@ Almond is not the full story. Almond only works with text input, and generates t Now we almost have all the pieces for a voice assistant built-in to Home Assistant, and so we decided to finish it off by introducing a new project called [Ada](https://github.com/home-assistant/ada). Ada integrates hotword detection and will route all data to the various integrations to provide a full voice assistant experience. -Architectural overview of how all pieces fit together. +Architectural overview of how all pieces fit together. Ada is still very much in the beginning. We'll be working on improving it. If you have expertise in this area and want to help, please get in touch. @@ -79,7 +79,7 @@ But we also want privacy to be accessible. A user should be able to get a privat With the current approach, some things will still run in the cloud, but the home data and control stays local. We will bring more things local when faster technology becomes more accessible or new projects emerge that can help with this. -We cannot wait until all the pieces are in place to run 100% locally. We need to help build the future we want to see. +We don't want to wait with integrating this until all the pieces run 100% locally. We need to help build the future we want to see. ## What's next? @@ -89,4 +89,4 @@ With Almond and Ada, we've put the building blocks in place to create voice assi I hacked together a quick prototype to allow you to talk to Almond via a Telegram Bot! It's available as a [custom component](https://gist.github.com/balloob/d59cae89d19a14bcec99ce1bde05bd44). -

    Screenshot of talking to Almond via Telegram.Screenshot of talking to Almond via Telegram.

    +

    Screenshot of talking to Almond via Telegram.Screenshot of talking to Almond via Telegram.

    diff --git a/source/_posts/2019-11-20-release-102.markdown b/source/_posts/2019-11-20-release-102.markdown index fea910694f8..124d37999eb 100644 --- a/source/_posts/2019-11-20-release-102.markdown +++ b/source/_posts/2019-11-20-release-102.markdown @@ -1,8 +1,8 @@ --- layout: post title: "0.102: Official Android App, Almond, Scene editor" -description: "TBD" -date: 2019-11-14 0:41:02 +description: "Download the Android app, install a private voice assistant and easy OAuth2 account linking." +date: 2019-11-20 0:41:02 date_formatted: "November 20, 2019" author: Paulus Schoutsen author_twitter: balloob diff --git a/source/images/blog/2019-11-0.102/components.png b/source/images/blog/2019-11-0.102/components.png new file mode 100644 index 0000000000000000000000000000000000000000..f2bebd283007b611ba55b774bdfe2576e5593fe7 GIT binary patch literal 18176 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 Date: Wed, 20 Nov 2019 16:22:05 -0800 Subject: [PATCH 56/56] Move more --- source/_posts/2019-11-20-release-102.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_posts/2019-11-20-release-102.markdown b/source/_posts/2019-11-20-release-102.markdown index 124d37999eb..a0535006490 100644 --- a/source/_posts/2019-11-20-release-102.markdown +++ b/source/_posts/2019-11-20-release-102.markdown @@ -13,7 +13,7 @@ og_image: /images/blog/2019-10-0.102/components.png Home Assistant 0.102 is here ! It's been quite the trip as we hosted our annual State of the Union last week, which took a lot of energy away from our release. This doesn't mean that we don't have anything to share, just that the notes might be a little less polished. -First, we had our State of the Union! It was great. You can watch it back [on YouTube](https://youtu.be/tc17q1Zn0Xs?t=434) or keep an eye out for the blog post coming soon that will summarize all the announcements. +First, we had our State of the Union at the ING office in Amsterdam! It was great. You can watch it back [on YouTube](https://youtu.be/tc17q1Zn0Xs?t=434) or keep an eye out for the blog post coming soon that will summarize all the announcements. Alright, so what's new? A lot. @@ -23,6 +23,8 @@ At the State of the Union we announced that we have released the initial version It's been developed by [@CedrickFlocon](https://github.com/CedrickFlocon) and the source is [available on GitHub](https://play.google.com/store/apps/details?id=io.homeassistant.companion.android). We've already seen some other developers step in, so that's great! Keep it coming. + + ## Private Voice Assistant We teamed up with Stanford to tightly integrate their open, privacy-preserving virtual assistant Almond into Home Assistant. For more information, see the [separate blog post](/blog/2019/11/14/privacy-focused-voice-assistant/). @@ -130,8 +132,6 @@ Users of Xiaomi Vacuum cleaners can now use this great custom Lovelace card: 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. - - ## Breaking Changes - **Huawei LTE** - Configuration has been consolidated below `huawei_lte`. Device tracker no longer uses known_devices.yaml but entity registry. - ([@scop] - [#26675]) ([huawei_lte docs])