From b5eafe8b2f9af5a1ffa648e8118845e9963b44fd Mon Sep 17 00:00:00 2001 From: gngj Date: Thu, 31 Oct 2019 11:59:53 +0200 Subject: [PATCH 01/72] Add description for undocumented service in duckdns (#11006) * Add description for undocumented service in duckdns * Apply suggestions from code review Co-Authored-By: Fabian Affolter * Add missing table element --- source/_integrations/duckdns.markdown | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/source/_integrations/duckdns.markdown b/source/_integrations/duckdns.markdown index cabe4677fcd..2d1344aa704 100644 --- a/source/_integrations/duckdns.markdown +++ b/source/_integrations/duckdns.markdown @@ -31,6 +31,15 @@ duckdns: type: string {% endconfiguration %} +## Service `set_txt` + +Set the TXT record of your DuckDNS subdomain. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `txt` | no | Payload for the TXT record. | + +
If you are running the Hass.io [DuckDNS add-on](/addons/duckdns/) this integration is not required. The add-on will keep your IP updated with DuckDNS. From 4385b35de186006a4bc93123c56cd6a999d7f4df Mon Sep 17 00:00:00 2001 From: Eric Miller Date: Thu, 31 Oct 2019 06:03:12 -0700 Subject: [PATCH 02/72] Add YouTube example. (#11054) Added a YouTube example, it's not too easy to find info on it. --- source/_integrations/roku.markdown | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/_integrations/roku.markdown b/source/_integrations/roku.markdown index 578e5054dda..e52267ae9d5 100644 --- a/source/_integrations/roku.markdown +++ b/source/_integrations/roku.markdown @@ -95,6 +95,9 @@ The api calls are like this: ```txt GET http:// ROKU_IP:8060/query/apps POST http://ROKU_IP:8060/launch/APP_ID + +YouTube example: +POST http://YOUR_ROKU_IP:8060/launch/837?contentID=YOUR_YOUTUBE_VIDEOS_CONTENT_ID&MediaType=live ``` More details can be found on the [Roku dev pages](https://developer.roku.com/docs/developer-program/discovery/external-control-api.md) From 1fa7786567aba2e10a25406086652e0b915430c4 Mon Sep 17 00:00:00 2001 From: Mauricio Bonani Date: Thu, 31 Oct 2019 12:22:15 -0400 Subject: [PATCH 03/72] Small text improvement (#11060) --- source/_lovelace/entities.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_lovelace/entities.markdown b/source/_lovelace/entities.markdown index 9f352854c81..23c614811b4 100644 --- a/source/_lovelace/entities.markdown +++ b/source/_lovelace/entities.markdown @@ -311,5 +311,5 @@ entities: ```
-Please be aware that the entity types divider and weblink aren't yet support by the UI editor and a warning about `Expected a value of type...` is shown. You can ignore the warning and save your edits to verify. +Please be aware that the entity types divider and weblink aren't yet supported by the UI editor and a warning about `Expected a value of type...` is shown. You can ignore the warning and save your edits to verify.
From 186b9f57c3f7183975a6d597d4b599d6b7226db4 Mon Sep 17 00:00:00 2001 From: Santobert Date: Thu, 31 Oct 2019 19:12:57 +0100 Subject: [PATCH 04/72] Add a note about scenes (#11062) * Add a note about scenes * typo Co-Authored-By: Daniel Shokouhi * Update 2019-10-20-release-101.markdown --- source/_posts/2019-10-20-release-101.markdown | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/_posts/2019-10-20-release-101.markdown b/source/_posts/2019-10-20-release-101.markdown index e2faf8480aa..f2b61e33004 100644 --- a/source/_posts/2019-10-20-release-101.markdown +++ b/source/_posts/2019-10-20-release-101.markdown @@ -148,11 +148,12 @@ Experiencing issues introduced by this release? Please report them in our [issue ## Breaking Changes - __Removed__ - The following integrations have been removed: - - __Direct authentication via trusted networks or API password__ - It is no longer possible to make authenticated requests using trusted networks or by appending ?api_password=X to the URL. You will now first need to get an authentication token and use that token to make requests. - ([@balloob] - [#27656]) ([auth docs]) ([http docs]) ([websocket_api docs]) + - __Direct authentication via trusted networks or API password__ - It is no longer possible to make authenticated requests using trusted networks or by appending ?api_password=X to the URL. You will now first need to get an authentication token and use that token to make requests. Auth providers for trusted networks and API passwords are still available. - ([@balloob] - [#27656]) ([auth docs]) ([http docs]) ([websocket_api docs]) - __Stride__ - The Stride notification integration was discontinued in February 2019 due to a take over by Slack. - ([@hmmbob] - [#27934]) ([stride docs]) - __Hipchat__ - The Hipchat notification integration was discontinued in February 2019, also due to a take over by Slack. - ([@fabaff] - [#27399]) ([hipchat docs]) - __Deprecated__ - Python 3.6 support is deprecated (to be removed completely by December 2019), as version 3.8.0 is now out - ([@scop] - [#27680]) +- __Scene__ - Scenes have to be configured more strictly from now on. Each entity must be configured with a valid state. Furthermore, the attributes that can be used must be `device state attributes`. This means that they should be listed under _developer-tools -> states_. - ([scene docs]) - __Ecobee__ - Adds `turn_on` method to ecobee climate platform. Previously, calling `climate.turn_on` would cause the ecobee thermostat to turn on in heat mode, regardless of the mode when the thermostat was turned off. Now, the thermostat will turn on to the last "active" HVAC mode (i.e., "heat", "cool", or "auto") (or, if the thermostat was "off" when Home Assistant started, to "auto"). - ([@marthoc] - [#27103]) ([ecobee docs]) - __Genius Hub__ - This addresses an issue that requires the `unique_id` of **climate** and **water_heater** entities to be changed. After upgrading HA with this change, users will have stale entities in the entity registry that they may wish to clear out. - ([@zxdavb] - [#27916]) ([geniushub docs]) - __Abode__ - The configuration variables were removed: `name`, `exclude` and `lights`, which were all previously optional. Existing users of the abode integration that use these configuration variables will have to remove them from the `configuration.yaml` file. Entities that users wish to disable can be done from the Entity Registry in the Configuration UI. - ([@shred86] - [#26699]) ([abode docs]) From 858d29c6714c9cf38135604acd7a4b6eab6084c1 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 31 Oct 2019 12:20:17 -0700 Subject: [PATCH 05/72] Bump to 101.1 --- _config.yml | 4 +-- source/_posts/2019-10-20-release-101.markdown | 33 +++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/_config.yml b/_config.yml index 9dd6542d0d9..bdf51da15d3 100644 --- a/_config.yml +++ b/_config.yml @@ -101,8 +101,8 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 101 -current_patch_version: 0 -date_released: 2019-10-30 +current_patch_version: 1 +date_released: 2019-10-31 # 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-10-20-release-101.markdown b/source/_posts/2019-10-20-release-101.markdown index f2b61e33004..dd80cf5b201 100644 --- a/source/_posts/2019-10-20-release-101.markdown +++ b/source/_posts/2019-10-20-release-101.markdown @@ -135,6 +135,39 @@ Screenshot of the device picker. - Add sensor platform to Airly integration ([@bieniu] - [#27717]) ([airly docs]) (new-platform) - Move imports in mqtt component ([@exxamalte] - [#27835]) ([mqtt docs]) (new-platform) +## Release 0.101.1 - October 31 + +- Bump songpal to fix a regression ([@rytilahti] - [#28115]) ([songpal docs]) +- Bump pymyq to 2.0.1 ([@bachya] - [#28348]) ([myq docs]) +- Bump pysaj to v0.0.13 (fix for sensor date) ([@fredericvl] - [#28351]) ([saj docs]) +- Bump env_canada to fixed 0.0.29 version ([@shmick] - [#28360]) ([environment_canada docs]) +- Fix Airly asyncio timeout error ([@bieniu] - [#28387]) ([airly docs]) +- Fix hdate spamming homeassistant log ([@tsvi] - [#28392]) ([jewish_calendar docs]) +- Fix check config ([@balloob] - [#28393]) +- Check for import errors before validating config ([@balloob] - [#28395]) + +[#28115]: https://github.com/home-assistant/home-assistant/pull/28115 +[#28348]: https://github.com/home-assistant/home-assistant/pull/28348 +[#28351]: https://github.com/home-assistant/home-assistant/pull/28351 +[#28360]: https://github.com/home-assistant/home-assistant/pull/28360 +[#28387]: https://github.com/home-assistant/home-assistant/pull/28387 +[#28392]: https://github.com/home-assistant/home-assistant/pull/28392 +[#28393]: https://github.com/home-assistant/home-assistant/pull/28393 +[#28395]: https://github.com/home-assistant/home-assistant/pull/28395 +[@bachya]: https://github.com/bachya +[@balloob]: https://github.com/balloob +[@bieniu]: https://github.com/bieniu +[@fredericvl]: https://github.com/fredericvl +[@rytilahti]: https://github.com/rytilahti +[@shmick]: https://github.com/shmick +[@tsvi]: https://github.com/tsvi +[airly docs]: /integrations/airly/ +[environment_canada docs]: /integrations/environment_canada/ +[jewish_calendar docs]: /integrations/jewish_calendar/ +[myq docs]: /integrations/myq/ +[saj docs]: /integrations/saj/ +[songpal docs]: /integrations/songpal/ + ## 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). From 30dbb4a0de0101cff358934fb2f10dfee3cad0bb Mon Sep 17 00:00:00 2001 From: Dubh Ad Date: Fri, 1 Nov 2019 07:56:11 +0000 Subject: [PATCH 06/72] Python 3.7 (#11067) Updated the Python versions to 3.7 --- source/_docs/installation.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/installation.markdown b/source/_docs/installation.markdown index f91c3aa9a2b..717099a8f08 100644 --- a/source/_docs/installation.markdown +++ b/source/_docs/installation.markdown @@ -63,8 +63,8 @@ If you use these install methods, we assume that you know how to manage and admi **Method**|**You have**|**Recommended for** :-----|:-----|:----- -[venv
(as another user)](/docs/installation/raspberry-pi/)|Any Linux, Python 3.6 or later|Those familiar with their operating system -[venv
(as your user)](/docs/installation/virtualenv/)|Any Python 3.6 or later|Developers +[venv
(as another user)](/docs/installation/raspberry-pi/)|Any Linux, Python 3.7 or later|Those familiar with their operating system +[venv
(as your user)](/docs/installation/virtualenv/)|Any Python 3.7 or later|Developers ## Community provided guides From d1c663f8ff7be475dd1e78deb759585f3bc2ef78 Mon Sep 17 00:00:00 2001 From: Dubh Ad Date: Fri, 1 Nov 2019 07:56:49 +0000 Subject: [PATCH 07/72] Python 3.7 (#11068) Updating the version to 3.7 --- source/_docs/installation/raspberry-pi.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation/raspberry-pi.markdown b/source/_docs/installation/raspberry-pi.markdown index 485b30c93ef..c1799b53744 100644 --- a/source/_docs/installation/raspberry-pi.markdown +++ b/source/_docs/installation/raspberry-pi.markdown @@ -6,7 +6,7 @@ redirect_from: /getting-started/installation-raspberry-pi/ This installation of Home Assistant requires the Raspberry Pi to run [Raspbian Lite](https://www.raspberrypi.org/downloads/raspbian/). The installation will be installed in a [Virtual Environment](/docs/installation/virtualenv) with minimal overhead. Instructions assume this is a new installation of Raspbian Lite. -You must have Python 3.6 or later installed (including the package `python3-dev`) which is *not* the case for Raspbian Stretch. +You must have Python 3.7 or later installed (including the package `python3-dev`) which is *not* the case for Raspbian Stretch.
Although these installation steps specifically mention a Raspberry Pi, you can go ahead and proceed on any Linux install as well. This guide is also referred to as the "Advanced Guide" for a virtual environment install. From 808703c2d32c09798d38caf8110d6ee300f93ad1 Mon Sep 17 00:00:00 2001 From: Dubh Ad Date: Fri, 1 Nov 2019 07:57:40 +0000 Subject: [PATCH 08/72] Python 3.7 (#11069) Also updating the version here ;) --- source/_docs/installation/macos.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation/macos.markdown b/source/_docs/installation/macos.markdown index 58c4a215f2e..76c5bf0db4a 100644 --- a/source/_docs/installation/macos.markdown +++ b/source/_docs/installation/macos.markdown @@ -5,7 +5,7 @@ description: "Installation of Home Assistant on your macOS system." [macOS](http://www.apple.com/macos/) is available by default on Apple computer. If you run a different operating system, please refer to the other section of the documentation. -To run Home Assistant on macOS, you need to install Python first. Download Python 3.6 or later (at this time, we recommend Python 3.7) from [https://www.python.org/downloads/mac-osx/](https://www.python.org/downloads/mac-osx/) and follow the instructions of the installer. +To run Home Assistant on macOS, you need to install Python first. Download Python 3.7 or later from [https://www.python.org/downloads/mac-osx/](https://www.python.org/downloads/mac-osx/) and follow the instructions of the installer. Open a terminal and install Home Assistant in a virtual environment: From 0aba3a8b9452f1907a3b62d601301ec7462f87a3 Mon Sep 17 00:00:00 2001 From: Dubh Ad Date: Fri, 1 Nov 2019 07:57:48 +0000 Subject: [PATCH 09/72] Python 3.7 again (#11070) Hopefully last one ;) --- source/_docs/installation/virtualenv.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/installation/virtualenv.markdown b/source/_docs/installation/virtualenv.markdown index e420e890ff7..c3b46fdb6c2 100644 --- a/source/_docs/installation/virtualenv.markdown +++ b/source/_docs/installation/virtualenv.markdown @@ -4,9 +4,9 @@ description: "How to install Home Assistant in a Python virtual environment." redirect_from: /getting-started/installation-virtualenv/ --- -If you already have Python 3.6 or later installed (we suggest 3.7 or later), you can easily give Home Assistant a spin. +If you already have Python 3.7 or later installed, you can easily give Home Assistant a spin. -It's recommended when installing Python packages that you use a [virtual environment](https://docs.python.org/3.6/library/venv.html#module-venv). This will make sure that your Python installation and Home Assistant installation won't impact one another. The following steps will work on most UNIX like systems. +It's recommended when installing Python packages that you use a [virtual environment](https://docs.python.org/3.7/library/venv.html#module-venv). This will make sure that your Python installation and Home Assistant installation won't impact one another. The following steps will work on most UNIX like systems.
From a7a1a016120a715b0747f7aa91657c4ed88339f6 Mon Sep 17 00:00:00 2001 From: Jonas Janz Date: Fri, 1 Nov 2019 09:14:25 +0100 Subject: [PATCH 10/72] update facebox docs (#11014) * update facebox docs - Add example for `docker-compose,yaml` - Add hint to Account page for `MB_KEY` * :pencil2: Tweak * add information about machinebox/facebox_noavx * Minor changes --- source/_integrations/facebox.markdown | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/source/_integrations/facebox.markdown b/source/_integrations/facebox.markdown index f8d96596bf5..4674ac2fa37 100644 --- a/source/_integrations/facebox.markdown +++ b/source/_integrations/facebox.markdown @@ -18,9 +18,30 @@ MB_KEY="INSERT-YOUR-KEY-HERE" sudo docker run --name=facebox --restart=always -p 8080:8080 -e "MB_KEY=$MB_KEY" machinebox/facebox ``` + +or using `docker-compose`: + +```yaml +version: '3' +services: + facebox: + image: machinebox/facebox + container_name: facebox + restart: unless-stopped + ports: + - 8080:8080 + environment: + - MB_KEY=${MB_KEY} + - MB_FACEBOX_DISABLE_RECOGNITION=false +``` + You can run Facebox with a username and password by adding `-e "MB_BASICAUTH_USER=my_username" -e "MB_BASICAUTH_PASS=my_password"` but bear in mind that the integration does not encrypt these credentials and this approach does not guarantee security on an unsecured network. -If you only require face detection (number of faces) you can disable face recognition by adding `-e "MB_FACEBOX_DISABLE_RECOGNITION=true"` to the `docker run` command. +After you created an account at [Machinebox](https://machinebox.io/account), you can grab your `MB_KEY` at [your Account page](https://developer.veritone.com/machinebox/overview). + +If you only require face detection (number of faces) you can disable face recognition by adding `-e "MB_FACEBOX_DISABLE_RECOGNITION=true"` in the `docker run` command. + +If your host machine does not support [AVX](https://en.wikipedia.org/wiki/Advanced_Vector_Extensions) and you experience issues running the `machinebox/facebox` image there is an alternative image without AVX support available at `machinebox/facebox_noavx`(*HINT*: This image is currently not supported by machinebox and should only be used if necessary) ## Configuration From 313081df5047e14fb5bcaf1b07608fcb5debf632 Mon Sep 17 00:00:00 2001 From: Nephiel Date: Fri, 1 Nov 2019 09:32:11 +0100 Subject: [PATCH 11/72] Update remote.xiaomi_miio.markdown (#11064) * Update remote.xiaomi_miio.markdown * Remove links to third-party repo --- source/_integrations/remote.xiaomi_miio.markdown | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/source/_integrations/remote.xiaomi_miio.markdown b/source/_integrations/remote.xiaomi_miio.markdown index 4479502a8b9..c76556ec499 100644 --- a/source/_integrations/remote.xiaomi_miio.markdown +++ b/source/_integrations/remote.xiaomi_miio.markdown @@ -125,6 +125,15 @@ A pronto hex code is defined as in the following example: with an optional last parameter of repeats (required by some devices): `pronto:0000 006C 0022 0002 015B 00AD 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0016 0016 0016 0016 0041 0016 0016 0016 0041 0016 0016 0016 0016 0016 0016 0016 0016 0016 0041 0016 0016 0016 0041 0016 0016 0016 0041 0016 0041 0016 0041 0016 0041 0016 0623 015B 0057 0016 0E6E:2` +Note there are at least 4 versions of the Xiaomi IR Remote (ChuangmiIr) which can be recognized by their default hostname: + +* `chuangmi.ir.v2` +* `chuangmi.remote.h102a03` +* `chuangmi.remote.v2` +* `chuangmi.remote.h102c01` + +For now, pronto hex codes only work on the first version (`chuangmi.ir.v2`). + ## Platform Services The Xiaomi IR Remote Platform registers two services. From a1534708983f05ba76d29d9592c36816ea8cacb3 Mon Sep 17 00:00:00 2001 From: Liran BG Date: Fri, 1 Nov 2019 10:51:22 +0200 Subject: [PATCH 12/72] Update python logger link (#11052) Refer to python 3.7 (instead of 3.4) logger documentation --- source/_integrations/python_script.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/python_script.markdown b/source/_integrations/python_script.markdown index 477c6bb1e67..e3c14101919 100644 --- a/source/_integrations/python_script.markdown +++ b/source/_integrations/python_script.markdown @@ -17,7 +17,7 @@ This integration allows you to write Python scripts that are exposed as services | `logger` | A logger to allow you to log messages: `logger.info()`, `logger.warning()`, `logger.error()`. [API reference][logger-api] [hass-api]: /developers/development_hass_object/ -[logger-api]: https://docs.python.org/3.4/library/logging.html#logger-objects +[logger-api]: https://docs.python.org/3.7/library/logging.html#logger-objects
From c1795650aeb8dce132eeb429501b843b4a86fb5c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 1 Nov 2019 12:06:37 +0100 Subject: [PATCH 13/72] Add heading (#11073) --- .../_integrations/remote.xiaomi_miio.markdown | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/source/_integrations/remote.xiaomi_miio.markdown b/source/_integrations/remote.xiaomi_miio.markdown index c76556ec499..eb40c0a70b6 100644 --- a/source/_integrations/remote.xiaomi_miio.markdown +++ b/source/_integrations/remote.xiaomi_miio.markdown @@ -10,11 +10,13 @@ ha_iot_class: Local Polling The `xiaomi miio` remote platform allows you to send IR commands from your Xiaomi IR Remote (ChuangmiIr). +## Setup + Please follow the instructions on [Retrieving the Access Token](/integrations/vacuum.xiaomi_miio/#retrieving-the-access-token) to get the API token to use in the `configuration.yaml` file. ## Configuring the Platform -To add a Xiaomi IR Remote to your installation, add the following to your configuration.yaml file: +To add a Xiaomi IR Remote to your installation, add the following to your `configuration.yaml` file: ```yaml remote: - platform: xiaomi_miio @@ -112,18 +114,32 @@ The Xiaomi IR Remote Platform currently supports two different formats for IR co A raw command is a command learned from [`remote.xiaomi_miio_learn_command`](/integrations/remote.xiaomi_miio/#remotexiaomi_miio_learn_command). A raw command is defined as in the following example: -`raw:Z6UFANEAAAAjAQAAAwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQIAE=` + +```bash +raw:Z6UFANEAAAAjAQAAAwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQIAE= +``` + with an optional last parameter of frequency: -`raw:Z6UFANEAAAAjAQAAAwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQIAE=:38400` + +```bash +raw:Z6UFANEAAAAjAQAAAwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQIAE=:38400 +``` ### Pronto Hex Code A pronto hex code is a hex code often supplied by the device manufacturer. A pronto hex code is defined as in the following example: -`pronto:0000 006C 0022 0002 015B 00AD 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0016 0016 0016 0016 0041 0016 0016 0016 0041 0016 0016 0016 0016 0016 0016 0016 0016 0016 0041 0016 0016 0016 0041 0016 0016 0016 0041 0016 0041 0016 0041 0016 0041 0016 0623 015B 0057 0016 0E6E` + +```bash +pronto:0000 006C 0022 0002 015B 00AD 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0016 0016 0016 0016 0041 0016 0016 0016 0041 0016 0016 0016 0016 0016 0016 0016 0016 0016 0041 0016 0016 0016 0041 0016 0016 0016 0041 0016 0041 0016 0041 0016 0041 0016 0623 015B 0057 0016 0E6E +``` + with an optional last parameter of repeats (required by some devices): -`pronto:0000 006C 0022 0002 015B 00AD 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0016 0016 0016 0016 0041 0016 0016 0016 0041 0016 0016 0016 0016 0016 0016 0016 0016 0016 0041 0016 0016 0016 0041 0016 0016 0016 0041 0016 0041 0016 0041 0016 0041 0016 0623 015B 0057 0016 0E6E:2` + +```bash +pronto:0000 006C 0022 0002 015B 00AD 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0041 0016 0016 0016 0016 0016 0041 0016 0016 0016 0041 0016 0016 0016 0016 0016 0016 0016 0016 0016 0041 0016 0016 0016 0041 0016 0016 0016 0041 0016 0041 0016 0041 0016 0041 0016 0623 015B 0057 0016 0E6E:2 +``` Note there are at least 4 versions of the Xiaomi IR Remote (ChuangmiIr) which can be recognized by their default hostname: From a99ce047941c03445ca1993783c90271fa72bab4 Mon Sep 17 00:00:00 2001 From: cgtobi Date: Fri, 1 Nov 2019 12:11:18 +0100 Subject: [PATCH 14/72] Delete double entry (#11074) --- source/_posts/2019-10-20-release-101.markdown | 3 --- 1 file changed, 3 deletions(-) diff --git a/source/_posts/2019-10-20-release-101.markdown b/source/_posts/2019-10-20-release-101.markdown index dd80cf5b201..ed8972577fa 100644 --- a/source/_posts/2019-10-20-release-101.markdown +++ b/source/_posts/2019-10-20-release-101.markdown @@ -110,9 +110,6 @@ Screenshot of the device picker. - - From 7a7f23aa9e8386793cd6b1aa613b0a92feff72c1 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 1 Nov 2019 12:19:48 -0700 Subject: [PATCH 15/72] Add placeholder --- source/android/index.markdown | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 source/android/index.markdown diff --git a/source/android/index.markdown b/source/android/index.markdown new file mode 100644 index 00000000000..cce4541db9a --- /dev/null +++ b/source/android/index.markdown @@ -0,0 +1,10 @@ +--- +title: "Home Assistant Android" +description: "Landing page for Home Assistant Android app." +--- + + + +Nothing to see yet :) + + From 171921a568745a4c8ad2d438d5669087159960b8 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 1 Nov 2019 13:25:20 -0700 Subject: [PATCH 16/72] Update the callback url for Somfy (#10840) --- source/_integrations/somfy.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/somfy.markdown b/source/_integrations/somfy.markdown index 5843a9e06cc..e90bdc2c553 100644 --- a/source/_integrations/somfy.markdown +++ b/source/_integrations/somfy.markdown @@ -19,7 +19,7 @@ To connect Somfy, you need to set up a developer account. 3. Open the *My Apps* menu. 4. Add a new App: - App Name: Home Assistant - - Callback URL: `/auth/somfy/callback` + - Callback URL: `/auth/external/callback` - Description: Home Assistant instance - Product: Somfy Open API 5. Once Home Assistant restarted, go to Configuration>Integrations. From 514d2c80fdeb2c6fd44b7c36d1a636a365eb14e4 Mon Sep 17 00:00:00 2001 From: Ian Richardson Date: Fri, 1 Nov 2019 15:32:18 -0500 Subject: [PATCH 17/72] add link to lovelace changelog (#11077) --- source/_posts/2019-10-20-release-101.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_posts/2019-10-20-release-101.markdown b/source/_posts/2019-10-20-release-101.markdown index ed8972577fa..83c08bb3354 100644 --- a/source/_posts/2019-10-20-release-101.markdown +++ b/source/_posts/2019-10-20-release-101.markdown @@ -103,6 +103,10 @@ Screenshot of the device picker. [mdonoughe](https://github.com/mdonoughe) added support the activate scene action in the automation editor. +## Lovelace + +Check the [Lovelace changelog](https://www.home-assistant.io/lovelace/changelog/) for all changes. + ## In other news From 54bd13f57f755652af7373b1a829b70797df6881 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 1 Nov 2019 17:34:57 -0700 Subject: [PATCH 18/72] 101.2 --- _config.yml | 4 ++-- ...rkdown => 2019-10-30-release-101.markdown} | 23 +++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) rename source/_posts/{2019-10-20-release-101.markdown => 2019-10-30-release-101.markdown} (99%) diff --git a/_config.yml b/_config.yml index bdf51da15d3..d44eec29d90 100644 --- a/_config.yml +++ b/_config.yml @@ -101,8 +101,8 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 101 -current_patch_version: 1 -date_released: 2019-10-31 +current_patch_version: 2 +date_released: 2019-11-01 # 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-10-20-release-101.markdown b/source/_posts/2019-10-30-release-101.markdown similarity index 99% rename from source/_posts/2019-10-20-release-101.markdown rename to source/_posts/2019-10-30-release-101.markdown index 83c08bb3354..752f3f5289d 100644 --- a/source/_posts/2019-10-20-release-101.markdown +++ b/source/_posts/2019-10-30-release-101.markdown @@ -169,6 +169,29 @@ Check the [Lovelace changelog](https://www.home-assistant.io/lovelace/changelog/ [saj docs]: /integrations/saj/ [songpal docs]: /integrations/songpal/ +## Release 0.101.2 - November 1 + +- Prevent TypeError when KNX RGB(W) light value contains None ([@phispi] - [#28358]) ([knx docs]) +- Change Abode cache file path, add cache path to config flow ([@MisterWil] - [#28389]) ([abode docs]) +- SNMP switch fix integer support ([@rfpronk] - [#28425]) ([snmp docs]) +- Use server-specific unique_ids for Plex media_players ([@jjlawren] - [#28447]) ([plex docs]) +- Also install after_deps ([@balloob] - [#28453]) + +[#28358]: https://github.com/home-assistant/home-assistant/pull/28358 +[#28389]: https://github.com/home-assistant/home-assistant/pull/28389 +[#28425]: https://github.com/home-assistant/home-assistant/pull/28425 +[#28447]: https://github.com/home-assistant/home-assistant/pull/28447 +[#28453]: https://github.com/home-assistant/home-assistant/pull/28453 +[@MisterWil]: https://github.com/MisterWil +[@balloob]: https://github.com/balloob +[@jjlawren]: https://github.com/jjlawren +[@phispi]: https://github.com/phispi +[@rfpronk]: https://github.com/rfpronk +[abode docs]: /integrations/abode/ +[knx docs]: /integrations/knx/ +[plex docs]: /integrations/plex/ +[snmp docs]: /integrations/snmp/ + ## 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). From 163556559a57f20bd394801ba9461fff6808d747 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 2 Nov 2019 09:54:58 +0100 Subject: [PATCH 19/72] Replace api_password with a generic example (#11078) --- source/_docs/tools/keyring.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_docs/tools/keyring.markdown b/source/_docs/tools/keyring.markdown index 8c0e77191f4..048d60d1426 100644 --- a/source/_docs/tools/keyring.markdown +++ b/source/_docs/tools/keyring.markdown @@ -12,14 +12,14 @@ $ hass --script keyring --help To store a password in keyring, replace your password or API key with `!secret` and an identifier in `configuration.yaml` file. ```yaml -http: - api_password: !secret http_password +integration1: + api_key: !secret integration1_key ``` Create an entry in your keyring. ```bash -$ hass --script keyring set http_password +$ hass --script keyring set integration1_key ``` If you launch Home Assistant now, you will be prompted for the keyring password to unlock your keyring. From 11e653f6f2516c276bab65720340035561c0e78e Mon Sep 17 00:00:00 2001 From: radinsky Date: Sat, 2 Nov 2019 10:55:16 +0200 Subject: [PATCH 20/72] Updated example scene (#11080) Updated example scene according to 0.101 breaking change. --- source/_integrations/scene.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/scene.markdown b/source/_integrations/scene.markdown index 2745e4825ef..ff101466ac8 100644 --- a/source/_integrations/scene.markdown +++ b/source/_integrations/scene.markdown @@ -28,6 +28,7 @@ scene: light.ceiling: off media_player.sony_bravia_tv: source: HDMI 1 + state: on ``` {% configuration %} From 52abf7dd56fadf98033715470bbbc37e617b0432 Mon Sep 17 00:00:00 2001 From: Gedde Date: Sun, 3 Nov 2019 11:20:10 +0100 Subject: [PATCH 21/72] Update backup_github.markdown (#11088) Just added a missing '>' --- source/_docs/ecosystem/backup/backup_github.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/ecosystem/backup/backup_github.markdown b/source/_docs/ecosystem/backup/backup_github.markdown index 967585395f0..5f3111cb540 100644 --- a/source/_docs/ecosystem/backup/backup_github.markdown +++ b/source/_docs/ecosystem/backup/backup_github.markdown @@ -46,7 +46,7 @@ Before creating and pushing your Home Assistant configuration to GitHub, please
-Creating a `.gitignore` file in your repository will tell Git which files NOT to push to the GitHub server. This should be used to prevent publishing sensitive files to the public. It should contain a list of filenames and pattern matches. This list should include at least your [`secrets.yaml`](/docs/configuration/secrets/) file, device configuration files, and the Home Assistant database/directory structure. The `.gitignore` file should be placed in the root of your Home Assistant configuration directory: `/.gitignore`.
From a4c8bf4fdb35091f9785f7b2d33b9d27a26e917f Mon Sep 17 00:00:00 2001 From: Filip van Hoeckel Date: Sun, 3 Nov 2019 11:20:59 +0100 Subject: [PATCH 22/72] Update ios.markdown (#11084) --- source/_docs/ecosystem/ios.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/ecosystem/ios.markdown b/source/_docs/ecosystem/ios.markdown index 15b293692b8..ff229cad5c3 100644 --- a/source/_docs/ecosystem/ios.markdown +++ b/source/_docs/ecosystem/ios.markdown @@ -31,7 +31,7 @@ The Home Assistant for iOS app supports the new authentication system introduced ### Automated Setup -The `ios` integration will automatically be loaded under the following circumstances: +The `ios` integration may or may not be automatically loaded under the following circumstances: 1. The [`discovery`](/integrations/discovery) integration is enabled. 2. You have just installed the app and are at the getting started screen. From a500d7eb997ae8f1d4e2cbfaba7f7d0c7af2361a Mon Sep 17 00:00:00 2001 From: JW Date: Sun, 3 Nov 2019 11:21:30 +0100 Subject: [PATCH 23/72] Clarify supported devices (#11087) --- source/_integrations/lg_soundbar.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/lg_soundbar.markdown b/source/_integrations/lg_soundbar.markdown index fb780a26e16..53d251a50ae 100644 --- a/source/_integrations/lg_soundbar.markdown +++ b/source/_integrations/lg_soundbar.markdown @@ -12,7 +12,7 @@ The `lg_soundbar` platform allows you to control [LG Soundbars](https://www.lg.c Supported devices: -- The SK range +- Devices in the SK range with Ethernet and/or Wi-Fi Compatible devices will be automatically added if the [`discovery`](/integrations/discovery/) integration is enabled. From 434b47b9c49cd3e600f8bbcf6386369e733e22c9 Mon Sep 17 00:00:00 2001 From: Dave T <17680170+davet2001@users.noreply.github.com> Date: Sun, 3 Nov 2019 10:21:54 +0000 Subject: [PATCH 24/72] Update based on latest lovelace UI (#11086) Notifications are now in bottom left. --- source/_integrations/homekit.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/homekit.markdown b/source/_integrations/homekit.markdown index 888745f30ab..20acf947f03 100644 --- a/source/_integrations/homekit.markdown +++ b/source/_integrations/homekit.markdown @@ -163,7 +163,7 @@ homekit: After Home Assistant has started, the entities specified by the filter are exposed to HomeKit if they are [supported](#supported-components). To add them: -1. Open the Home Assistant frontend. A new card will display the `pin code`. Note: If pin code is not displayed, check "Notifications" (the bell icon) in the upper-right of the Home Assistant UI. +1. Open the Home Assistant frontend. A new card will display the `pin code`. Note: If pin code is not displayed, check "Notifications" (the bell icon) in the lower-left of the Home Assistant UI. 2. Open the `Home` app. 3. Click `Add Accessory`, then select `Don't Have a Code or Can't Scan?` and choose the `Home Assistant Bridge`. 4. Confirm that you are adding an `Uncertified Accessory` by clicking on `Add Anyway`. From 07a3cbf02e2c4b554e8e309cafd7b7fed34a117f Mon Sep 17 00:00:00 2001 From: Eric Hiller Date: Sun, 3 Nov 2019 05:54:46 -0700 Subject: [PATCH 25/72] Fixed misplaced double quotation. (#11089) --- source/_integrations/snmp.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/snmp.markdown b/source/_integrations/snmp.markdown index 1eb624e3e64..649c77bfbff 100644 --- a/source/_integrations/snmp.markdown +++ b/source/_integrations/snmp.markdown @@ -82,7 +82,7 @@ baseoid: required: true type: string auth_key: - description: A"uthentication key for SNMPv3. Variable `priv_key` must also be set." + description: "Authentication key for SNMPv3. Variable `priv_key` must also be set." required: inclusive type: string priv_key: From 446bfbf3b5f1a4e9642f88b51546efb1a84e39cd Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sun, 3 Nov 2019 14:17:31 +0100 Subject: [PATCH 26/72] Revert "Update ios.markdown (#11084)" (#11090) This reverts commit a4c8bf4fdb35091f9785f7b2d33b9d27a26e917f. --- source/_docs/ecosystem/ios.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/ecosystem/ios.markdown b/source/_docs/ecosystem/ios.markdown index ff229cad5c3..15b293692b8 100644 --- a/source/_docs/ecosystem/ios.markdown +++ b/source/_docs/ecosystem/ios.markdown @@ -31,7 +31,7 @@ The Home Assistant for iOS app supports the new authentication system introduced ### Automated Setup -The `ios` integration may or may not be automatically loaded under the following circumstances: +The `ios` integration will automatically be loaded under the following circumstances: 1. The [`discovery`](/integrations/discovery) integration is enabled. 2. You have just installed the app and are at the getting started screen. From aa4ea0af93207ddcd6d0fc5aeaa2a74dee4dad82 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 3 Nov 2019 11:47:03 -0800 Subject: [PATCH 27/72] Update providers.markdown --- source/_docs/authentication/providers.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_docs/authentication/providers.markdown b/source/_docs/authentication/providers.markdown index 74aa2347258..3e5aca59414 100644 --- a/source/_docs/authentication/providers.markdown +++ b/source/_docs/authentication/providers.markdown @@ -31,6 +31,7 @@ homeassistant: auth_providers: - type: homeassistant - type: legacy_api_password + api_password: !secret http_password ``` ## Available auth providers From 8a437b21921b0018a1b119d61303cc26baf73a3f Mon Sep 17 00:00:00 2001 From: Jeff Irion Date: Sun, 3 Nov 2019 13:09:17 -0800 Subject: [PATCH 28/72] Fix a couple typos (#11092) --- source/_integrations/google_assistant.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_integrations/google_assistant.markdown b/source/_integrations/google_assistant.markdown index 669600b83d1..c15c3b123e4 100644 --- a/source/_integrations/google_assistant.markdown +++ b/source/_integrations/google_assistant.markdown @@ -72,7 +72,7 @@ If you've added Home Assistant to the home screen, you have to first remove it f 5. From the Role list, select Service Accounts > Service Account Token Creator. 6. For the Key type, select the JSON option. 7. Click Create. A JSON file that contains your key downloads to your computer. - 8. Use the information in this file or the file directly to add to the `service_account`key in the configuration. + 8. Use the information in this file or the file directly to add to the `service_account` key in the configuration. 3. If you didn't specify a service account and want to use the `google_assistant.request_sync` service, to update devices without unlinking and relinking, in Home Assistant, then enable Homegraph API for your project: 1. Go to the [Google API Console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview). 2. Select your project and click Enable Homegraph API. @@ -127,7 +127,7 @@ service_account: keys: private_key: description: Private key in PEM format - requried: true + required: true type: string client_email: description: Service email address From 7e7e06aae9fd37bbe0217f25df3509f146c92981 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 3 Nov 2019 21:07:24 -0800 Subject: [PATCH 29/72] Add promo state of the union --- source/images/frontpage/hacktoberfest.png | Bin 37266 -> 0 bytes source/index.html | 14 ++++---------- source/state-of-the-union/index.markdown | 20 ++++++++++++++++++++ 3 files changed, 24 insertions(+), 10 deletions(-) delete mode 100644 source/images/frontpage/hacktoberfest.png create mode 100644 source/state-of-the-union/index.markdown diff --git a/source/images/frontpage/hacktoberfest.png b/source/images/frontpage/hacktoberfest.png deleted file mode 100644 index 8726d7087c57b855de9b3c91ae110d37594a9294..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37266 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
- - -

Alexa, turn on the lights

Use Alexa to control Home Assistant. @@ -95,15 +88,16 @@ description: Open source home automation that puts local control and privacy fir
- Watch the State of the Union 2018 + Soon! Nov 13, 2019: State of the Union 2019
- Learn about the origin of Home Assistant and where we're heading. + We'll talk what we've been up to and what's next. Click for more + info including live stream.
diff --git a/source/state-of-the-union/index.markdown b/source/state-of-the-union/index.markdown new file mode 100644 index 00000000000..796ba0c47ac --- /dev/null +++ b/source/state-of-the-union/index.markdown @@ -0,0 +1,20 @@ +--- +show_title: true +sidebar: false +title: State of the Union +hide_github_edit: true +description: Join us on November 13, 2019 for the Home Assistant State of the Union. +--- + +Home Assistant is proud to present the State of the Union 2019. It will take place on November 13, 2019 in Amsterdam. Tickets have already been sold out (in 24h!) but we're having a live stream. + +This years presenters are: + +- Paulus Schoutsen (founder Home Assistant) +- Pascal Vizeli (founder Hass.io) + +[See last year's edition.](/blog/2018/11/16/state-of-the-union/) + +## Livestream + +Info coming soon! From a70761176fb435148b6d37b14e81e7699103afaa Mon Sep 17 00:00:00 2001 From: shred86 <32663154+shred86@users.noreply.github.com> Date: Mon, 4 Nov 2019 01:31:59 -0800 Subject: [PATCH 30/72] Add two missing fields to events in Abode (#11094) Two new fields were added to events based on this PR: https://github.com/home-assistant/home-assistant/pull/28124 @libots If you could double check that these descriptions make sense, that would be much appreciated. I just based it off your description in the PR you made. :) --- source/_integrations/abode.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_integrations/abode.markdown b/source/_integrations/abode.markdown index 8d4f2ca3483..e39cfcbc33b 100644 --- a/source/_integrations/abode.markdown +++ b/source/_integrations/abode.markdown @@ -90,6 +90,8 @@ Field | Description `event_type` | The type of the event. `event_utc` | The UTC timestamp of the event. `user_name` | The Abode user that triggered the event, if applicable. +`app_type` | The Abode app that triggered the event (e.g. web app, iOS app, etc.). +`event_by` | The keypad user that triggered the event. `date` | The date of the event in the format `MM/DD/YYYY`. `time` | The time of the event in the format `HH:MM AM`. From e5db5ba0f3c4ff971ecb856073f7c57fa9fe6d06 Mon Sep 17 00:00:00 2001 From: Antoni K Date: Mon, 4 Nov 2019 17:35:43 +0800 Subject: [PATCH 31/72] Slightly restructure page and improve grammar (#11011) --- source/_docs/configuration/yaml.markdown | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/source/_docs/configuration/yaml.markdown b/source/_docs/configuration/yaml.markdown index ea218828c3b..435e9f38fef 100644 --- a/source/_docs/configuration/yaml.markdown +++ b/source/_docs/configuration/yaml.markdown @@ -6,8 +6,9 @@ redirect_from: /getting-started/yaml/ Home Assistant uses the [YAML](https://yaml.org/) syntax for configuration. YAML might take a while to get used to but is really powerful in allowing you to express complex configurations. -For each integration that you want to use in Home Assistant, you add code in your `configuration.yaml` file to specify its settings. -The following example entry specifies that you want to use the [notify component](/integrations/notify) with the [pushbullet platform](/integrations/pushbullet). +For integrations that you want to use in Home Assistant, you add code in your `configuration.yaml` file to specify its settings. This especially applies to integrations that are not yet available to configure through the UI. + +The following example entry assumes that you would like to set up the [notify component](/integrations/notify) with the [pushbullet platform](/integrations/pushbullet). ```yaml @@ -30,14 +31,14 @@ You can use the online service [YAMLLint](http://www.yamllint.com/) to check if
-Please pay attention on not storing private data (passwords, API keys, etc.) directly in your `configuration.yaml` file. Private data can be stored in a [separate file](/docs/configuration/secrets/) or in [environmental variables](/docs/configuration/yaml/#using-environment-variables), which circumvents this problem of security. +Please pay attention to not storing private data (passwords, API keys, etc.) directly in your `configuration.yaml` file. Private data can be stored in either a [separate file](/docs/configuration/secrets/) or in [environmental variables](/docs/configuration/yaml/#using-environment-variables), which circumvents this security problem.
-Text following a `#` are comments and are ignored by the system. +Strings of text following a `#` are comments and are ignored by the system. -The next example shows an [input_select](/integrations/input_select) integration that uses a block collection for the options values. -The other properties (like name) are specified using mappings. Note that the second line just has `threat:` with no value on the same line. Here threat is the name of the input_select and the values for it are everything nested below it. +The next example shows an [input_select](/integrations/input_select) integration that uses a block collection for the values of options. +The other properties (like `name:`) are specified using mappings. Note that the second line just has `threat:` with no value on the same line. Here threat is the name of the input_select and the values for it are everything nested below it. ```yaml input_select: @@ -62,16 +63,17 @@ sensor: state_topic: sensor2/topic ``` -## Using Environment Variables +## Including values -You can include values from your system's environment variables with `!env_var`. +### Environmental variables +You can include values from your system's environment variables with `!env_var`. Note that this will only work in a scenario where it is possible to specify these. Hass.io users are recommended to use `!include` statements instead. ```yaml http: api_password: !env_var PASSWORD ``` -### Default Value +#### Default value If an environment variable is not set, you can fallback to a default value. @@ -80,7 +82,7 @@ http: api_password: !env_var PASSWORD default_password ``` -### Including Separate Files +### Including entire files To improve readability, you can source out certain domains from your main configuration file with the `!include`-syntax. From caa6c0e83a42e93bc9029b84272b4ab12d848069 Mon Sep 17 00:00:00 2001 From: Tom Matheussen Date: Mon, 4 Nov 2019 11:21:18 +0100 Subject: [PATCH 32/72] Improved doorbird setup documentation (#11091) * Improved doorbird setup documentation * :pencil2: Made link relative --- source/_integrations/doorbird.markdown | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/source/_integrations/doorbird.markdown b/source/_integrations/doorbird.markdown index 30f830c00fe..5f21c87d629 100644 --- a/source/_integrations/doorbird.markdown +++ b/source/_integrations/doorbird.markdown @@ -19,7 +19,13 @@ There is currently support for the following device types within Home Assistant: ## Setup -The user, which you are going to use with Home Assistant, needs the "API-Operator" permission enabled. +It is recommended to set up a new account on your Doorbird for use with Home Assistant. This can be added via the Doorbird App by choosing Administration -> (User) Add. This user, needs specific permissions enabled, depending on what functionality you want: + +- Live view -> Watch Always +- Last motion -> Motion + History +- Last ring -> History + +In addition, the "API-Operator" permission needs to be enabled as well. ## Configuration @@ -47,7 +53,7 @@ devices: required: true type: string username: - description: The username of a non-administrator user account on the device. This user needs the "API-Operator" permission enabled on Doorbird. It is recommended to set up a new account on your Doorbird for use with Home Assistant. This can be added via the Doorbird App by choosing Administration -> (User) Add. When the new account is created, you will need to enable the permission "API-Operator" in the "permissions" option. + description: The username of a non-administrator user account on the device ([User setup](/integrations/doorbird/#setup)) required: true type: string password: From 9dacff49bae812494a9260874fbe48e46981630d Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Mon, 4 Nov 2019 11:21:42 +0100 Subject: [PATCH 33/72] Bump nokogiri from 1.10.4 to 1.10.5 (#11075) Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.10.4 to 1.10.5. - [Release notes](https://github.com/sparklemotion/nokogiri/releases) - [Changelog](https://github.com/sparklemotion/nokogiri/blob/master/CHANGELOG.md) - [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.10.4...v1.10.5) Signed-off-by: dependabot-preview[bot] --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 584f2fa3a3b..bbf536f7cd2 100644 --- a/Gemfile +++ b/Gemfile @@ -19,4 +19,4 @@ group :jekyll_plugins do end gem 'sinatra', '2.0.7' -gem 'nokogiri', '1.10.4' +gem 'nokogiri', '1.10.5' diff --git a/Gemfile.lock b/Gemfile.lock index 61322e42c0b..b2f48bd2a57 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -70,7 +70,7 @@ GEM mini_portile2 (2.4.0) multi_json (1.13.1) mustermann (1.0.3) - nokogiri (1.10.4) + nokogiri (1.10.5) mini_portile2 (~> 2.4.0) pathutil (0.16.2) forwardable-extended (~> 2.6) @@ -114,7 +114,7 @@ DEPENDENCIES jekyll-redirect-from (= 0.15.0) jekyll-sitemap (= 1.3.1) jekyll-time-to-read (= 0.1.2) - nokogiri (= 1.10.4) + nokogiri (= 1.10.5) rake (= 13.0.0) sass-globbing (= 1.1.5) sinatra (= 2.0.7) From 703e3610bfdbcbd70f156c2983cb0ef2e5d9aa15 Mon Sep 17 00:00:00 2001 From: ktnrg45 <38207570+ktnrg45@users.noreply.github.com> Date: Mon, 4 Nov 2019 03:39:31 -0700 Subject: [PATCH 34/72] Update ps4 docs (#11056) * Add editing of games file * Add url * More updates * :pencil2: Tweaks --- source/_integrations/ps4.markdown | 77 +++++++++++++++++++++++++++---- 1 file changed, 68 insertions(+), 9 deletions(-) diff --git a/source/_integrations/ps4.markdown b/source/_integrations/ps4.markdown index bb6795a2e1b..2e11d10cd3a 100644 --- a/source/_integrations/ps4.markdown +++ b/source/_integrations/ps4.markdown @@ -34,24 +34,26 @@ The `ps4` integration allows you to control a ## Granting Port Access -The PlayStation 4 integration requires the use of privileged ports to work correctly, specifically UDP port 987 and TCP port 997. Depending on your OS of your Home Assistant instance you may need to allow usage of privileged ports manually. +The PlayStation 4 integration requires the use of privileged ports to work correctly, specifically UDP port 987 and TCP port 997. Depending on your OS of your Home Assistant instance, you may need to allow usage of privileged ports manually.
Do not run your Home Assistant instance itself as root or with root/sudo privileges to accomplish this. This would create a security risk for your host system.
-There are varying methods to perform this, dependent on your OS that is running Home Assistant. Specifically, your *Python Interpreter* which runs your Home Assistant instance needs access to the mentioned ports. +There are varying methods to perform this, dependent on your OS that is running Home Assistant. Specifically, your *Python Interpreter*, which runs your Home Assistant instance, needs access to the mentioned ports.
- If your Home Assistant device is running Hass.io on HassOS, it does not require additional configuration. + +If your Home Assistant device is running **Hass.io** on **HassOS**, it does not require additional configuration. +
### Debian-based + 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 +- Raspbian - Armbian - Ubuntu @@ -64,13 +66,14 @@ sudo setcap 'cap_net_bind_service=+ep' Replace `` with your **system path** to Python that is running Home Assistant and/or your virtual environment if used. The path **should not** be a **symlink** or be **inside of a virtual environment**. Example: + ```bash sudo setcap 'cap_net_bind_service=+ep' /usr/bin/python3.5 ``` To find your system Python path: -- Add the [System Health](/integrations/system_health/) integration to your `configuration.yaml`. In a web browser access your frontend and navigate to the about/logs page "http:///developer-tools/info). In the System Health box locate the item **python_version** and note the value that is displayed. Then in terminal run: +- Add the [System Health](/integrations/system_health/) integration to your `configuration.yaml`. In a web browser, access your frontend and navigate to the about/logs page "http:///developer-tools/info). In the System Health box, locate the item **python_version** and note the value that is displayed. Then in a terminal run: ```bash whereis python @@ -111,7 +114,7 @@ When running Home Assistant using Docker, make sure that the Home Assistant cont ## Regions -Some titles will have different SKUs in the PlayStation Store database depending on your region. You must select your specific region in the setup in order to retrieve the cover art for such titles correctly. The integration will attempt to search other databases for the correct title if it cannot be found, although it will take longer to do so and may fetch an incorrect cover. +Some titles will have different SKUs in the PlayStation Store database, depending on your [region](https://www.playstation.com/country-selector/index.html). You must select your specific region in the setup in order to retrieve the cover art for such titles correctly. The integration will attempt to search other databases for the correct title if it cannot be found, although it will take longer to do so and may fetch an incorrect cover. | Available Regions | Unavailable Regions | | --------------------------------------------------------------------------- | -------------------------- | @@ -126,11 +129,67 @@ Some titles will have different SKUs in the PlayStation Store database depending | Thailand, Turkey, United Arab Emirates, United Kingdom, United States | |
- The regions which are unavailable have no database or have formatting in the database which can not be used by the component. + The regions which are unavailable have no database or have formatting in the database, which can not be used by the component.
+## Media Data + +The PlayStation 4 integration will fetch information about the game or app that is currently running from your region's [PlayStation Store](https://store.playstation.com) database. + +Occasionally, the integration may fail to get the data at all, or may get incorrect data. To correct this issue, the integration allows for manual editing via any text editor. + +### Formatting + +When the integration retrieves data from the PlayStation Store, it stores it in a JSON file named `.ps4-games.json` in the same directory as where your `configuration.yaml` file is located. The first line in the file will be `{` and the last line will be `}`. Between these lines, there will be indented entries for each game or app the integration finds. See the following example and table: + +```json +{ + "CUSA00129": { + "locked": true, + "media_content_type": "app", + "media_image_url": "http://localhost:8123/local/image.jpg", + "media_title": "Some App" + }, + "CUSA00123": { + "locked": false, + "media_content_type": "game", + "media_image_url": "https://somerandomurl.com/image.jpg", + "media_title": "Some Game" + } +} +``` + +| Field | Value | Description | +| ----- | ----- | ----------- | +| `locked` | boolean | Must be `true` or `false` +| `media_content_type` | string | Must be `game` or `app` +| `media_image_url` | string | Any valid url for an image +| `media_title` | string | The title of the game or app + +The data in the example shows 2 entries. + +Each entry will begin with the SKU ID of the title, e.g., `CUSA00000` and will have a field named `locked` with a value of `true` or `false` associated with it. The default value will be `false` for each entry. If `locked` is `true`, the integration will not overwrite the data pertaining to that game or app. + +The `media_image_url` value can be any valid URL. This includes the `local directory` of your Home Assistant instance. The first entry in the example directs to a file named `image.jpg` located in the `config/www/` directory. + +### Editing with Text Editor +
+ Backup a copy of your .ps4-games.json file before continuing. If there are errors in the formatting, your file may be deleted. +
+ +To edit, simply open the file in a text editor, find the game or app you would like to edit, and edit the value(s) you wish to change and then save the file. The changes will appear the next time you play the game or app on your console. + ## Services +### Service `select_source` + +Opens new application/game and closes currently running application/game. The game/app must be in the entity's source list. Games will be added automatically when you open them normally. + +| Service data attribute | Optional | Example | Description | +| ---------------------- | -------- | ---------------------------- | ------------------------------------- | +| `entity_id` | No | `media_player.playstation_4` | The entity id for your PlayStation 4. | +| `source` | No | `Some Game` or `CUSA00123` | The game/app you want to open. You can use the title or SKU ID. Using the SKU ID will be the most reliable.| + ### Service `send_command` Emulate button press on PlayStation 4. This emulates the commands available for the PS4 Second Screen App. This is not to be confused with DualShock 4 controller buttons. @@ -158,7 +217,7 @@ Full list of supported commands. ## Troubleshooting ### Cover Art Issues -If you are running a game/title on your PS4 that does not display a cover or displays the incorrect cover, post an issue [here](https://github.com/ktnrg45/pyps4-homeassistant/issues). +If you are running a game/title on your PS4 that does not display a cover or displays the incorrect cover, post an issue [here](https://github.com/ktnrg45/pyps4-2ndscreen/issues). Be sure to include the following information: - Your Country From 0ffc37acad5fbe9fba61537a713d52088deb8354 Mon Sep 17 00:00:00 2001 From: Jay <49540618+Tediore@users.noreply.github.com> Date: Mon, 4 Nov 2019 04:45:10 -0600 Subject: [PATCH 35/72] Edit nomenclature (#11025) Change "hass.io image" to "HassOS image" since there is no such thing has a hass.io image. Other small edits --- source/getting-started/index.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/getting-started/index.markdown b/source/getting-started/index.markdown index 37ee3eec285..8e9e072f396 100644 --- a/source/getting-started/index.markdown +++ b/source/getting-started/index.markdown @@ -38,19 +38,19 @@ We will need a few things to get started with installing Home Assistant. The Ras - [Raspberry Pi 3 Model B+](https://amzn.to/2IAyNl0) + [Power Supply](https://www.raspberrypi.org/help/faqs/#powerReqs) (at least 2.5A) - [Micro SD Card](https://amzn.to/2X0Z2di). Ideally get one that is [Application Class 2](https://www.sdcard.org/developers/overview/application/index.html) as they handle small I/O much more consistently than cards not optimized to host applications. A 32 GB or bigger card is recommended. - SD Card reader. This is already part of most laptops, but you can purchase a [standalone USB adapter](https://amzn.to/2WWxntY) if you don't have one. The brand doesn't matter, just pick the cheapest. -- Ethernet cable. Hass.io can work with Wi-Fi, but an Ethernet connection would be more reliable. +- Ethernet cable. Home Assistant can work with Wi-Fi, but an Ethernet connection would be more reliable. ### Software requirements -- Download the Hass.io image for [your device](/hassio/installation/) +- Download the HassOS image for [your device](/hassio/installation/) - Download [balenaEtcher] to write the image to an SD card [balenaEtcher]: https://www.balena.io/etcher -### Installing Hass.io +### Installation 1. Put the SD card in your card reader. -2. Open balenaEtcher, select the Hass.io image and flash it to the SD card. +2. Open balenaEtcher, select the HassOS image and flash it to the SD card. 3. Unmount the SD card and remove it from your card reader. 4. Follow this step if you want to configure Wi-Fi or a static IP address (this step requires a USB stick). Otherwise, move to step 5. - Format a USB stick to FAT32 with the volume name `CONFIG`. From c18e9a3eced313022d91cd7f7490e01f307665b4 Mon Sep 17 00:00:00 2001 From: Jeff Irion Date: Mon, 4 Nov 2019 08:18:38 -0800 Subject: [PATCH 36/72] Fix list indentation (#11098) --- source/_integrations/google_assistant.markdown | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/source/_integrations/google_assistant.markdown b/source/_integrations/google_assistant.markdown index c15c3b123e4..f49c2e84a0c 100644 --- a/source/_integrations/google_assistant.markdown +++ b/source/_integrations/google_assistant.markdown @@ -65,14 +65,14 @@ If you've added Home Assistant to the home screen, you have to first remove it f 3. When the new user opens the link with their own Google account, it will enable your draft test app under their account. 3. Have the new user go to their `Google Assistant` app to add `[test] your app name` to their account. 2. If you want to support actively reporting of state to Google's server (config option `report_state`) and support `google_assistant.request_sync`, you need to generate a service account. - 1. In the GCP Console, go to the [Create Service account key](https://console.cloud.google.com/apis/credentials/serviceaccountkey) page. - 2. From the Service account list, select New service account. - 3. In the Service account name field, enter a name. - 4. In the Service account ID field, enter an ID. - 5. From the Role list, select Service Accounts > Service Account Token Creator. - 6. For the Key type, select the JSON option. - 7. Click Create. A JSON file that contains your key downloads to your computer. - 8. Use the information in this file or the file directly to add to the `service_account` key in the configuration. + 1. In the GCP Console, go to the [Create Service account key](https://console.cloud.google.com/apis/credentials/serviceaccountkey) page. + 2. From the Service account list, select New service account. + 3. In the Service account name field, enter a name. + 4. In the Service account ID field, enter an ID. + 5. From the Role list, select Service Accounts > Service Account Token Creator. + 6. For the Key type, select the JSON option. + 7. Click Create. A JSON file that contains your key downloads to your computer. + 8. Use the information in this file or the file directly to add to the `service_account` key in the configuration. 3. If you didn't specify a service account and want to use the `google_assistant.request_sync` service, to update devices without unlinking and relinking, in Home Assistant, then enable Homegraph API for your project: 1. Go to the [Google API Console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview). 2. Select your project and click Enable Homegraph API. From 78209050b7e6e6a4e8ed05825373d4be925fe1ca Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 4 Nov 2019 12:35:23 -0800 Subject: [PATCH 37/72] Update SotU picture frontpage --- source/images/frontpage/sotu2019.png | Bin 0 -> 48338 bytes source/index.html | 11 +---------- 2 files changed, 1 insertion(+), 10 deletions(-) create mode 100644 source/images/frontpage/sotu2019.png diff --git a/source/images/frontpage/sotu2019.png b/source/images/frontpage/sotu2019.png new file mode 100644 index 0000000000000000000000000000000000000000..a53990a5fa5ac167c6c1662849097b7f295c220f GIT binary patch literal 48338 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 literal 0 HcmV?d00001 diff --git a/source/index.html b/source/index.html index 42a9e2c069c..4c8c60bdb78 100644 --- a/source/index.html +++ b/source/index.html @@ -89,17 +89,8 @@ description: Open source home automation that puts local control and privacy fir -
-
- Soon! Nov 13, 2019: State of the Union 2019 -
-
- We'll talk what we've been up to and what's next. Click for more - info including live stream. -
-
Date: Tue, 5 Nov 2019 03:12:58 -0800 Subject: [PATCH 38/72] Adding a small tip about DNS propagation. (#11101) I recently had to redo the setup for Google Assistant. Everything was correct (URLs in Google, ports, port forwarding, certs, etc.) but the process was failing when trying to connect with Google Assistant via the app to add the devices. While doing many troubleshooting steps, after some time, it would randomly work once, then not again for some time. More troubleshooting with failures, then randomly work. I had updated my DNS about 12-15 hours prior, which I thought was enough time, but it looks like it needed longer. Simply waiting was sufficient. I am hoping that this tip might save others some time pulling their hair out. :) --- source/_integrations/google_assistant.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/google_assistant.markdown b/source/_integrations/google_assistant.markdown index f49c2e84a0c..a96ea5a33f6 100644 --- a/source/_integrations/google_assistant.markdown +++ b/source/_integrations/google_assistant.markdown @@ -22,7 +22,7 @@ The Google Assistant integration requires a bit more setup than most due to the
-To use Google Assistant, your Home Assistant configuration has to be [externally accessible with a hostname and SSL certificate](/docs/configuration/remote/). If you haven't already configured that, you should do so before continuing. +To use Google Assistant, your Home Assistant configuration has to be [externally accessible with a hostname and SSL certificate](/docs/configuration/remote/). If you haven't already configured that, you should do so before continuing. If you make DNS changes to accomplish this, please ensure you have allowed up to the full 48 hours for DNS changes to propogate, otherwise Google may not be able to reach your server.
From e31d02acd76a0ae60ed56a01f0229bebfd5dfc78 Mon Sep 17 00:00:00 2001 From: Santobert Date: Tue, 5 Nov 2019 15:43:33 +0100 Subject: [PATCH 39/72] Improve scene docs (#11063) * Improve scene docs * Improve examples --- source/_integrations/scene.markdown | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/source/_integrations/scene.markdown b/source/_integrations/scene.markdown index ff101466ac8..3b0e34fcd96 100644 --- a/source/_integrations/scene.markdown +++ b/source/_integrations/scene.markdown @@ -24,9 +24,10 @@ scene: entities: light.tv_back_light: state: on - brightness: 100 + brightness: 125 light.ceiling: off media_player.sony_bravia_tv: + state: on source: HDMI 1 state: on ``` @@ -37,15 +38,15 @@ name: required: true type: string entities: - description: Entities to control. + 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. -- Define a complex state with its attributes. +- 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). @@ -83,6 +84,7 @@ automation: brightness: 100 light.ceiling: off media_player.sony_bravia_tv: + state: on source: HDMI 1 ``` From 038201ebf4627899c97733b86d421e092ee643b3 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 5 Nov 2019 10:57:51 -0800 Subject: [PATCH 40/72] 101.3 --- _config.yml | 4 ++-- source/_posts/2019-10-30-release-101.markdown | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/_config.yml b/_config.yml index d44eec29d90..b61deb20e17 100644 --- a/_config.yml +++ b/_config.yml @@ -101,8 +101,8 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 101 -current_patch_version: 2 -date_released: 2019-11-01 +current_patch_version: 3 +date_released: 2019-11-05 # 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-10-30-release-101.markdown b/source/_posts/2019-10-30-release-101.markdown index 752f3f5289d..d6b40c0afa8 100644 --- a/source/_posts/2019-10-30-release-101.markdown +++ b/source/_posts/2019-10-30-release-101.markdown @@ -192,6 +192,22 @@ Check the [Lovelace changelog](https://www.home-assistant.io/lovelace/changelog/ [plex docs]: /integrations/plex/ [snmp docs]: /integrations/snmp/ +## Release 0.101.3 - November 5 + +- Fix missing import ([@timmccor] - [#28460]) ([sonos docs]) +- Fix Airly if more than one config entry ([@bieniu] - [#28498]) ([airly docs]) +- Add deprecated attributes to light.reproduce_state ([@Santobert] - [#28557]) ([light docs]) + +[#28460]: https://github.com/home-assistant/home-assistant/pull/28460 +[#28498]: https://github.com/home-assistant/home-assistant/pull/28498 +[#28557]: https://github.com/home-assistant/home-assistant/pull/28557 +[@Santobert]: https://github.com/Santobert +[@bieniu]: https://github.com/bieniu +[@timmccor]: https://github.com/timmccor +[airly docs]: /integrations/airly/ +[light docs]: /integrations/light/ +[sonos docs]: /integrations/sonos/ + ## 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). From b421d7ed57e9ccf439345a71ab86568138cbfcfb Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 5 Nov 2019 22:35:58 -0800 Subject: [PATCH 41/72] Update index.markdown --- source/state-of-the-union/index.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/state-of-the-union/index.markdown b/source/state-of-the-union/index.markdown index 796ba0c47ac..dc4e473cd86 100644 --- a/source/state-of-the-union/index.markdown +++ b/source/state-of-the-union/index.markdown @@ -6,7 +6,9 @@ hide_github_edit: true description: Join us on November 13, 2019 for the Home Assistant State of the Union. --- -Home Assistant is proud to present the State of the Union 2019. It will take place on November 13, 2019 in Amsterdam. Tickets have already been sold out (in 24h!) but we're having a live stream. +Home Assistant is proud to present the State of the Union 2019. We're going to discuss all things Home Assistant: the platform, our goals, our achievements and a sneak peek at what we have planned for the home automation ecosystem. + +It will take place on November 13, 2019 in Amsterdam. Tickets have already been sold out (in 24h!) but we're having a live stream (see below). This years presenters are: From ff12e5240a600b20026885f36d604d8b36fffc0e Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 5 Nov 2019 22:37:19 -0800 Subject: [PATCH 42/72] Update index.markdown --- source/state-of-the-union/index.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/state-of-the-union/index.markdown b/source/state-of-the-union/index.markdown index dc4e473cd86..2657451c3b3 100644 --- a/source/state-of-the-union/index.markdown +++ b/source/state-of-the-union/index.markdown @@ -4,6 +4,7 @@ sidebar: false title: State of the Union hide_github_edit: true description: Join us on November 13, 2019 for the Home Assistant State of the Union. +og_image: /images/frontpage/sotu2019.png --- Home Assistant is proud to present the State of the Union 2019. We're going to discuss all things Home Assistant: the platform, our goals, our achievements and a sneak peek at what we have planned for the home automation ecosystem. From fce820b4865d587f0a46c47f61b01236da9b1c71 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 5 Nov 2019 22:55:53 -0800 Subject: [PATCH 43/72] Update index.markdown --- source/state-of-the-union/index.markdown | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/source/state-of-the-union/index.markdown b/source/state-of-the-union/index.markdown index 2657451c3b3..ac53831d708 100644 --- a/source/state-of-the-union/index.markdown +++ b/source/state-of-the-union/index.markdown @@ -20,4 +20,11 @@ This years presenters are: ## Livestream -Info coming soon! +The presentation is going to start at: + + - 9.30 AM in PST + - 12.30 PM in EST + - 18:30 in CET + - [Other time zones](https://www.timeanddate.com/worldclock/converter.html?iso=20191113T173000&p1=137&p2=179&p3=16) + +URL of live stream coming soon! From 7a658470fdf500c11621c8d331cbbe804599cd13 Mon Sep 17 00:00:00 2001 From: cgtobi Date: Wed, 6 Nov 2019 09:54:39 +0100 Subject: [PATCH 44/72] Update index.markdown (#11111) --- source/state-of-the-union/index.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/state-of-the-union/index.markdown b/source/state-of-the-union/index.markdown index ac53831d708..ce24269ad39 100644 --- a/source/state-of-the-union/index.markdown +++ b/source/state-of-the-union/index.markdown @@ -28,3 +28,7 @@ The presentation is going to start at: - [Other time zones](https://www.timeanddate.com/worldclock/converter.html?iso=20191113T173000&p1=137&p2=179&p3=16) URL of live stream coming soon! + +## Local Meet-Ups + + - [Rhein-Main Area](https://www.meetup.com/de-DE/Home-Assistant-Meetup-Rhein-Main-Neckar/events/265920456/) From b1d6c55b8368440bd55395a2421210409a4f4fad Mon Sep 17 00:00:00 2001 From: Max Rosin Date: Wed, 6 Nov 2019 17:37:15 +0100 Subject: [PATCH 45/72] Add livestream meetup in Berlin to state of the union page (#11113) --- source/state-of-the-union/index.markdown | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/source/state-of-the-union/index.markdown b/source/state-of-the-union/index.markdown index ce24269ad39..da6234cfbfb 100644 --- a/source/state-of-the-union/index.markdown +++ b/source/state-of-the-union/index.markdown @@ -29,6 +29,9 @@ The presentation is going to start at: URL of live stream coming soon! -## Local Meet-Ups +## Local Meetups +If you would like to meet other Home Assistant users and watch the livestream together, check out the following local meetups: + + - [Berlin](https://www.meetup.com/Berlin-Home-Assistant/events/265634883/) - [Rhein-Main Area](https://www.meetup.com/de-DE/Home-Assistant-Meetup-Rhein-Main-Neckar/events/265920456/) From a84f072356e36925c5034c2d7e2f7cd900683130 Mon Sep 17 00:00:00 2001 From: Jon Gilmore <7232986+JonGilmore@users.noreply.github.com> Date: Thu, 7 Nov 2019 04:27:41 -0600 Subject: [PATCH 46/72] Automation example for Lutron integration (#11115) * added automation example * added space, removed template --- source/_integrations/lutron.markdown | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/source/_integrations/lutron.markdown b/source/_integrations/lutron.markdown index 7fff4ee7543..e1c8c7b65b8 100644 --- a/source/_integrations/lutron.markdown +++ b/source/_integrations/lutron.markdown @@ -73,3 +73,19 @@ After setup, scenes will appear in Home Assistant using the area, keypad and but ## Occupancy Sensors Any configured Powr Savr occuancy sensors will be added as occupancy binary sensors. Lutron reports occupancy for an area, rather than reporting individual sensors. Sensitivity and timeouts are controlled on the sensors themselves, not in software. + +## Example Automations + +``` yaml +- alias: "keypad button pressed notification" + trigger: + - platform: event + event_type: lutron_event + event_data: + id: office_pico_on + action: single + action: + - service: notify.telegram + data: + message: "pico just turned on!" +``` From 125f4626bbcc4315004bd827e1247fda296330bd Mon Sep 17 00:00:00 2001 From: SukramJ Date: Thu, 7 Nov 2019 11:28:28 +0100 Subject: [PATCH 47/72] Precise some config details for HomematicIP Cloud (#10998) * Precise some config details for HomematicIP Cloud * Update source/_integrations/homematicip_cloud.markdown Co-Authored-By: Franck Nijhof --- source/_integrations/homematicip_cloud.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/homematicip_cloud.markdown b/source/_integrations/homematicip_cloud.markdown index 800d3e9f9a1..66a5ded1c78 100644 --- a/source/_integrations/homematicip_cloud.markdown +++ b/source/_integrations/homematicip_cloud.markdown @@ -36,6 +36,7 @@ Fill the form: * Your **access point ID** (SGTIN) * Optional a **name** to identify your access point, this will be used to prefix your device names. +* The **PIN**, mandatory if one is used in the native HomematicIP App. The authentification token will be generated and stored internally. From 7c81578d98570246ccafb0e5972e98db8a4b6984 Mon Sep 17 00:00:00 2001 From: Jason Lachowsky Date: Thu, 7 Nov 2019 04:29:10 -0600 Subject: [PATCH 48/72] Update automation.markdown (#11105) Menu item correction --- source/getting-started/automation.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/getting-started/automation.markdown b/source/getting-started/automation.markdown index 2884514121c..348de945934 100644 --- a/source/getting-started/automation.markdown +++ b/source/getting-started/automation.markdown @@ -8,7 +8,7 @@ redirect_from: When your devices are set up, it's time to put the cherry on the pie: automation. In this guide we're going to create a simple automation rule to **turn on the lights when the sun sets**. -In Home Assistant, open the menu by clicking on the top-left icon and click on configuration. Now click on automations. This is the automation screen from which you can manage all the automations in Home Assistant. +In Home Assistant, open the menu by clicking on the top-left icon and click on configuration. Now click on automation. This is the automation screen from which you can manage all the automations in Home Assistant. Click on the orange button at the bottom right to create a new automation. You are presented with a blank automation screen. From 61baec6c8ebda1d99f0716c70968f06b7c2775a9 Mon Sep 17 00:00:00 2001 From: Chris Colohan Date: Thu, 7 Nov 2019 02:40:43 -0800 Subject: [PATCH 49/72] Clarify how to connect to Elk over serial port (#10604) * Update docs to use the default Elk Baud rate of 115200 for serial connections. * Use /dev/ttyUSB0, which is the serial device used by USB-to-serial converters by default. * Don't use a username and password over a serial connection, as Elk doesn't require them over a hardwired serial connection. * Give example of liberal use of exclusions, showing users how to avoid Entity registry spam caused by Elk. --- source/_integrations/elkm1.markdown | 35 +++++++++++++++++++---------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/source/_integrations/elkm1.markdown b/source/_integrations/elkm1.markdown index 15cc998b1a4..c56d4f3231a 100644 --- a/source/_integrations/elkm1.markdown +++ b/source/_integrations/elkm1.markdown @@ -43,7 +43,7 @@ elkm1: {% configuration %} host: - description: Connection string to Elk of the form `://
[:port]`. `` is `elk` for non-secure connection, `elks` for secure connection, and `serial` for serial port connection. `
` is IP address or domain or for `serial` the serial port that the Elk is connected to. Optional `` is the port to connect to on the Elk, defaulting to 2101 for `elk` and 2601 for `elks`. For `serial` method, _address_ is the path to the tty _/dev/ttyS1_ for example and `[:baud]` is the baud rate to connect with. You may have multiple host sections for connecting multiple controllers. + description: Connection string to Elk of the form `://
[:port]`. `` is `elk` for non-secure connection, `elks` for secure connection, and `serial` for serial port connection. `
` is IP address or domain or for `serial` the serial port that the Elk is connected to. Optional `` is the port to connect to on the Elk, defaulting to 2101 for `elk` and 2601 for `elks`. For `serial` method, _address_ is the path to the tty _/dev/ttyS1_ for example and `[:baud]` is the baud rate to connect with (Elk systems default to 115200 baud, but this can be changed during Elk system configuration). You may have multiple host sections for connecting multiple controllers. required: true type: string username: @@ -270,18 +270,29 @@ elkm1: exclude: [b12-d5] ``` -Example for a serial port instance on /dev/ttyS1 at 9600 baud: +Example for a serial port instance on /dev/ttyUSB0 at 115200 baud: ```yaml elkm1: - host: serial://dev/ttyS1:9600 - username: USERNAME - password: PASSWORD - area: - exclude: [5-8] - zone: - exclude: [11-16, 19-192, 199-208] - plc: - include: [a1-d16, 192] - exclude: [b12-d5] + - host: serial:///dev/ttyUSB0:115200 + # Elk doesn't know which areas/zones/etc are unused, so it can generate + # many unwanted Home Assistant Entities. Be liberal in excluding them: + area: + exclude: [2-8] + zone: + exclude: [17-192, 195-208] + plc: + enabled: false + task: + enabled: false + counter: + exclude: [1-64] + keypad: + exclude: [3-16] + setting: + exclude: [1-20] + output: + enabled: false + thermostat: + enabled: false ``` From 20b1afb346eef82d045f785d83751506728fd3ed Mon Sep 17 00:00:00 2001 From: Georgi Kirichkov Date: Thu, 7 Nov 2019 12:56:58 +0200 Subject: [PATCH 50/72] Updates proximity documentation (#10531) Documents the 'nearest' attribute --- source/_integrations/proximity.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_integrations/proximity.markdown b/source/_integrations/proximity.markdown index 4e5d7900faa..41ab3fe76e9 100644 --- a/source/_integrations/proximity.markdown +++ b/source/_integrations/proximity.markdown @@ -33,6 +33,7 @@ The Proximity entity which is created has the following values: - 'm' - 'mi' - 'ft' +- `nearest`: The device which is nearest to the zone To enable this integration in your installation, add the following to your `configuration.yaml` file: From 3a1bef98c65d2edb4154d27b43597829cc2c2b4c Mon Sep 17 00:00:00 2001 From: Alec Rust Date: Thu, 7 Nov 2019 21:28:33 +0000 Subject: [PATCH 51/72] Fix Owntracks link (#11125) Points to a heading that doesn't exist. --- source/_integrations/device_tracker.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/device_tracker.markdown b/source/_integrations/device_tracker.markdown index ed6a3b95280..c96e3227e24 100644 --- a/source/_integrations/device_tracker.markdown +++ b/source/_integrations/device_tracker.markdown @@ -58,7 +58,7 @@ device_tracker: track_new_devices: true ``` -Multiple device trackers can be used in parallel, such as [Owntracks](/integrations/owntracks/#using-owntracks-with-other-device-trackers) and [Nmap](/integrations/nmap_tracker/). The state of the device will be determined by the source that reported last. +Multiple device trackers can be used in parallel, such as [Owntracks](/integrations/owntracks/) and [Nmap](/integrations/nmap_tracker/). The state of the device will be determined by the source that reported last. ## `known_devices.yaml` From 75f956c87fe7d88971e7f4487870ca47786bf363 Mon Sep 17 00:00:00 2001 From: Jeff Cutsinger Date: Fri, 8 Nov 2019 04:01:26 -0600 Subject: [PATCH 52/72] Fix quoting in examples (#11127) --- source/_integrations/harmony.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_integrations/harmony.markdown b/source/_integrations/harmony.markdown index c587e6cd221..3c9f71aadc8 100644 --- a/source/_integrations/harmony.markdown +++ b/source/_integrations/harmony.markdown @@ -218,10 +218,10 @@ sensor: - platform: template sensors: family_room: - value_template: '{{ state_attr('remote.family_room', 'current_activity') }}' + value_template: '{{ state_attr("remote.family_room", "current_activity") }}' friendly_name: 'Family Room' bedroom: - value_template: '{{ state_attr('remote.bedroom', 'current_activity') }}' + value_template: '{{ state_attr("remote.bedroom", "current_activity") }}' friendly_name: 'bedroom' ``` {% endraw %} From c7bbaa6d310946d826a49e3d33360c7ccc7431d4 Mon Sep 17 00:00:00 2001 From: Mike <7278201+mike391@users.noreply.github.com> Date: Fri, 8 Nov 2019 05:02:39 -0500 Subject: [PATCH 53/72] Update shell_command.markdown (#11126) Nested single quotes should be double quotes. --- source/_integrations/shell_command.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/shell_command.markdown b/source/_integrations/shell_command.markdown index c1072695ae7..6eab549b7b2 100644 --- a/source/_integrations/shell_command.markdown +++ b/source/_integrations/shell_command.markdown @@ -55,6 +55,6 @@ input_number: {% raw %} shell_command: - set_ac_to_slider: 'irsend SEND_ONCE DELONGHI AC_{{ states('input_number.ac_temperature') }}_AUTO' + set_ac_to_slider: 'irsend SEND_ONCE DELONGHI AC_{{ states("input_number.ac_temperature") }}_AUTO' {% endraw %} ``` From 6f9176a09c9386c1b39e7421fe8bbd8487433843 Mon Sep 17 00:00:00 2001 From: Alpha Tango <53234819+alphatangoalpha@users.noreply.github.com> Date: Fri, 8 Nov 2019 05:45:42 -0500 Subject: [PATCH 54/72] Update for new veto_files option (#10852) * Update for new veto_files option * Update samba.markdown --- source/_addons/samba.markdown | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/source/_addons/samba.markdown b/source/_addons/samba.markdown index 5b21c892f7a..3aa6f3eff87 100644 --- a/source/_addons/samba.markdown +++ b/source/_addons/samba.markdown @@ -28,6 +28,13 @@ Sometimes shares will not show up under network in Windows. Then you could open "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16" + ], + "veto_files": [ + "._*", + ".DS_Store", + "Thumbs.db", + "icon?", + ".Trashes" ] } ``` @@ -55,4 +62,9 @@ allow_hosts: required: false default: '`["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"]`' type: list +veto_files: + description: List of files that are neither visible nor accessible. Useful to stop clients from littering the share with temporary hidden files (e.g. macOS .DS_Store, Windows Thumbs.db) + required: false + default: '`["._*", ".DS_Store", "Thumbs.db", "icon?", ".Trashes"]`' + type: list {% endconfiguration %} From 6400d0475db9008b08961c97e82732a6f40e0efe Mon Sep 17 00:00:00 2001 From: Vitaly Bogdanov Date: Fri, 8 Nov 2019 17:54:42 +0300 Subject: [PATCH 55/72] Fix `nmap` command to scan UDP port. (#11129) --- source/_integrations/xiaomi_aqara.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/xiaomi_aqara.markdown b/source/_integrations/xiaomi_aqara.markdown index 6714f6e0fae..a299ddfeec1 100644 --- a/source/_integrations/xiaomi_aqara.markdown +++ b/source/_integrations/xiaomi_aqara.markdown @@ -273,7 +273,7 @@ That means that Home Assistant is not getting any response from your Xiaomi gate - You should generate the key again using an Android Phone or alternatively an emulator such as [bluestacks](https://www.bluestacks.com). In some instances, there is an issue with keys being generated using the iOS application. - You need to make sure to have multicast support on your network. If you are running Home Assistant in a virtual machine (like Proxmox), try `echo 0 >/sys/class/net/vmbr0/bridge/multicast_snooping` on the host and restart the service or reboot the host. - If the required library "PyXiaomiGateway" cannot be installed you will need to install some missing system dependencies `python3-dev`, `libssl-dev`, `libffi-dev` manually (e.g., `$ sudo apt-get install python3-dev libssl-dev libffi-dev`). -- If your gateway's MAC address starts with `04:CF:8C`, there is a good chance that the required port `9898` is closed on your gateway (you can check it with the Nmap utility, using the command `sudo nmap - sU {gateway_ip} -p 9898`). To fix that issue, you need to do these steps: +- If your gateway's MAC address starts with `04:CF:8C`, there is a good chance that the required port `9898` is closed on your gateway (you can check it with the Nmap utility, using the command `sudo nmap -sU {gateway_ip} -p 9898`). To fix that issue, you need to do these steps: - Find a specific screw bit (like a fork) to open the gateway case. - Find a USB-UART cable/module and connect it to your computer. - Solder 3 wires - RX, TX and GND like [here](https://cs5-3.4pda.to/14176168/IMG_20181020_201150.jpg). From e49a8ed371e7ae910cf5b8a6b89e72539a924aa9 Mon Sep 17 00:00:00 2001 From: Bas Nijholt Date: Sat, 9 Nov 2019 17:01:04 +0100 Subject: [PATCH 56/72] change packages to monofont (#11138) --- source/hassio/installation.markdown | 36 ++++++++++++++--------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/source/hassio/installation.markdown b/source/hassio/installation.markdown index 6de69a83fd1..e068a530c59 100644 --- a/source/hassio/installation.markdown +++ b/source/hassio/installation.markdown @@ -101,19 +101,19 @@ The packages you need to have available on your system that will run Hass.io may ### Debian/Ubuntu - - apparmor-utils - - apt-transport-https - - avahi-daemon - - ca-certificates - - curl - - dbus - - jq - - socat - - software-properties-common + - `apparmor-utils` + - `apt-transport-https` + - `avahi-daemon` + - `ca-certificates` + - `curl` + - `dbus` + - `jq` + - `socat` + - `software-properties-common` Optional: - - network-manager + - `network-manager`
@@ -123,14 +123,14 @@ Optional: ### Arch Linux - - apparmor - - avahi - - ca-certificates - - curl - - dbus - - docker - - jq - - socat + - `apparmor` + - `avahi` + - `ca-certificates` + - `curl` + - `dbus` + - `docker` + - `jq` + - `socat` You also need to have Docker-CE installed. There are well-documented procedures for installing Docker on Ubuntu at [Docker.com](https://docs.docker.com/install/linux/docker-ce/ubuntu/), you can find installation steps for your Linux distribution in the menu on the left. From c166d79f09161276fbc5260158ade5ba86452b76 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Sun, 10 Nov 2019 19:28:00 +0100 Subject: [PATCH 57/72] Add SotU 2019 YouTube details (#11146) --- source/state-of-the-union/index.markdown | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/source/state-of-the-union/index.markdown b/source/state-of-the-union/index.markdown index da6234cfbfb..2b38ff97d0f 100644 --- a/source/state-of-the-union/index.markdown +++ b/source/state-of-the-union/index.markdown @@ -20,14 +20,21 @@ This years presenters are: ## Livestream -The presentation is going to start at: +This year, the Home Assistant State of the Union will be live streamed to YouTube! - - 9.30 AM in PST - - 12.30 PM in EST - - 18:30 in CET - - [Other time zones](https://www.timeanddate.com/worldclock/converter.html?iso=20191113T173000&p1=137&p2=179&p3=16) + -URL of live stream coming soon! +Direct YouTube URL: + +πŸ”” Don't forget to go to the above URL to hit the "Set reminder" bell! +Doing that, ensures you'll get a notification from YouTube, when the stream starts. + +The presentation is going to start on 13 November at: + +- 9.30 AM in PST +- 12.30 PM in EST +- 18:30 in CET +- [Other time zones](https://www.timeanddate.com/worldclock/converter.html?iso=20191113T173000&p1=137&p2=179&p3=16) ## Local Meetups From 6254c40eb648b2bc403e1fb0814d5f54cc208ed2 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 10 Nov 2019 11:02:11 -0800 Subject: [PATCH 58/72] Fix SotU frame --- source/state-of-the-union/index.markdown | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/source/state-of-the-union/index.markdown b/source/state-of-the-union/index.markdown index 2b38ff97d0f..c5a29f3ba3f 100644 --- a/source/state-of-the-union/index.markdown +++ b/source/state-of-the-union/index.markdown @@ -22,7 +22,9 @@ This years presenters are: This year, the Home Assistant State of the Union will be live streamed to YouTube! - +
+ +
Direct YouTube URL: @@ -40,5 +42,5 @@ The presentation is going to start on 13 November at: If you would like to meet other Home Assistant users and watch the livestream together, check out the following local meetups: - - [Berlin](https://www.meetup.com/Berlin-Home-Assistant/events/265634883/) - - [Rhein-Main Area](https://www.meetup.com/de-DE/Home-Assistant-Meetup-Rhein-Main-Neckar/events/265920456/) +- [Berlin](https://www.meetup.com/Berlin-Home-Assistant/events/265634883/) +- [Rhein-Main Area](https://www.meetup.com/de-DE/Home-Assistant-Meetup-Rhein-Main-Neckar/events/265920456/) From 482c79c0ac6c792518dc6976ae735d85afb20b3b Mon Sep 17 00:00:00 2001 From: Jon Travis Date: Sun, 10 Nov 2019 20:34:45 -0800 Subject: [PATCH 59/72] Add location of installed macos configs (#11148) --- source/_docs/autostart/macos.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_docs/autostart/macos.markdown b/source/_docs/autostart/macos.markdown index 1c270cec1fd..8dc41a3fc8f 100644 --- a/source/_docs/autostart/macos.markdown +++ b/source/_docs/autostart/macos.markdown @@ -17,6 +17,8 @@ Home Assistant has been installed. Open it here: http://localhost:8123 Home Assistant will log to `~/Library/Logs/homeassistant.log` +Configuration is kept in `~/.homeassistant` + To uninstall the service, run: ```bash From d20ea42e16c064a1449b9ea04e89509429560d2f Mon Sep 17 00:00:00 2001 From: Greg Schwartz Date: Sun, 10 Nov 2019 20:35:27 -0800 Subject: [PATCH 60/72] Update slack.markdown (#11143) Clarifying steps to create Slack app and get OAuth token --- source/_integrations/slack.markdown | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/source/_integrations/slack.markdown b/source/_integrations/slack.markdown index 7f68b1cc36e..819cd9367dd 100644 --- a/source/_integrations/slack.markdown +++ b/source/_integrations/slack.markdown @@ -12,7 +12,13 @@ The `slack` platform allows you to deliver notifications from Home Assistant to ## Setup -If you are planning to use Slack as yourself then you'll need to create a [new app](https://api.slack.com/apps) under your Slack.com account. After creating the app, access the OAuth & Permissions link under the Features heading in the sidebar. Your OAuth Access Token should be located there. This is the key that you'll use in your `configuration.yaml` file. +### Bot posting as you + +1. Create a [new app](https://api.slack.com/apps) under your Slack.com account +2. Click the `OAuth & Permissions` link in the sidebar, under the Features heading +2. In the Scopes section, add the `chat:write:user` scope, `Send messages as user` +3. Scroll up to `OAuth Tokens & Redirect URLs` and click `Install App` +4. Copy your `OAuth Access Token` and put that key into your `configuration.yaml` file -- see below
@@ -20,8 +26,7 @@ There is an app credential Verification Token on the Basic Settings of your app.
-You will also need to ensure that you have added the appropriate scope when configuring your app. In this case, in the Scopes section, add the `Send messages as user` scope, e.g., (chat:write:user). - +### Bot posting as its own user It is also possible to use Slack bots as users. Just create a new bot at https://[YOUR_TEAM].slack.com/apps/build/custom-integration and use the provided token for that. You can add an icon from the frontend for Home Assistant and give the bot a meaningful name. Don't forget to invite the bot to the room where you want to get the notifications. From fa277980f66a788d96c41386d62b2c392e75351b Mon Sep 17 00:00:00 2001 From: Fredrik <944065+fohlsso2@users.noreply.github.com> Date: Mon, 11 Nov 2019 05:36:55 +0100 Subject: [PATCH 61/72] Update testing.markdown (#11144) matches the new MQTT tab in developer tools --- source/_docs/mqtt/testing.markdown | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/source/_docs/mqtt/testing.markdown b/source/_docs/mqtt/testing.markdown index f294ba83610..7e686e550b3 100644 --- a/source/_docs/mqtt/testing.markdown +++ b/source/_docs/mqtt/testing.markdown @@ -16,19 +16,26 @@ If you are using the embedded MQTT broker, the command looks a little different $ mosquitto_pub -V mqttv311 -u homeassistant -P -t "hello" -m world ``` -Another way to send MQTT messages by hand is to use the "Developer Tools" in the Frontend. Choose "Call Service" and then `mqtt.publish` under "Available Services". Enter something similar to the example below into the "Service Data" field. - -```json -{ - "topic":"home-assistant/switch/1/on", - "payload":"Switch is ON" -} -``` - -The message should appear on the bus: +Another way to send MQTT messages by hand is to use the "Developer Tools" in the Frontend. Choose the "MQTT" tab. Enter something similar to the example below into the "Topic" field. ```bash -... [homeassistant] Bus:Handling + home-assistant/switch/1/power + ``` + and in the Payload field + ```bash + ON +``` +In the "Listen to a topic" field, type # to see everything, or "home-assistant/switch/#" to just follow the published topic. Press "Start Listening" and then press "Publish". The result should appear similar to the text below + +```bash +Message 23 received on home-assistant/switch/1/power/stat/POWER at 12:16 PM: +ON +QoS: 0 - Retain: false +Message 22 received on home-assistant/switch/1/power/stat/RESULT at 12:16 PM: +{ + "POWER": "ON" +} +QoS: 0 - Retain: false ``` For reading all messages sent on the topic `home-assistant` to a broker running on localhost: From 54a78b5faa62b47a8f38578b4e069a6804c20145 Mon Sep 17 00:00:00 2001 From: Jeff Irion Date: Sun, 10 Nov 2019 20:43:06 -0800 Subject: [PATCH 62/72] Add another custom state detection example (#11141) --- source/_integrations/androidtv.markdown | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/source/_integrations/androidtv.markdown b/source/_integrations/androidtv.markdown index d2f856283c2..948c4a2f2a4 100644 --- a/source/_integrations/androidtv.markdown +++ b/source/_integrations/androidtv.markdown @@ -124,12 +124,21 @@ media_player: 'com.ellation.vrv': - 'audio_state' 'com.plexapp.android': - - 'playing': - 'media_session_state': 3 # this indentation is important! - 'wake_lock_size': 3 # this indentation is important! - 'paused': 'media_session_state': 3 # this indentation is important! 'wake_lock_size': 1 # this indentation is important! + - 'playing': + 'media_session_state': 3 # this indentation is important! + - 'standby' + 'com.amazon.tv.launcher': + - 'playing': + 'wake_lock_size': 4 # this indentation is important! + - 'playing': + 'wake_lock_size': 3 # this indentation is important! + - 'paused': + 'wake_lock_size': 2 # this indentation is important! + - 'paused': + 'wake_lock_size': 1 # this indentation is important! - 'standby' # Use an ADB server to setup a Fire TV device and don't get the running apps. From 6ed7b41f102318c8b11bbe35547b4322acf1d544 Mon Sep 17 00:00:00 2001 From: Harrison Pace Date: Mon, 11 Nov 2019 15:57:33 +1100 Subject: [PATCH 63/72] =?UTF-8?q?MODBUS=20Component:=20Fix=20write=5Fregis?= =?UTF-8?q?ter=20service=20attribute=20(name=20-=E2=80=A6=20(#11136)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit hub is the actual attribute used. name is incorrect. --- source/_integrations/modbus.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/modbus.markdown b/source/_integrations/modbus.markdown index 9027a1fdfa9..33617d0fc2d 100644 --- a/source/_integrations/modbus.markdown +++ b/source/_integrations/modbus.markdown @@ -141,7 +141,7 @@ modbus: | Attribute | Description | | --------- | ----------- | -| name | Hub name (defaults to 'default' when omitted) | +| hub | Hub name (defaults to 'default' when omitted) | | unit | Slave address (set to 255 you talk to Modbus via TCP) | | address | Address of the Register (e.g., 138) | | value | A single value or an array of 16-bit values. Single value will call modbus function code 6. Array will call modbus function code 16. Array might need reverse ordering. E.g., to set 0x0004 you might need to set `[4,0]` | From 5bd9471e805ca62afbef93af54c23ae057325858 Mon Sep 17 00:00:00 2001 From: sndcr Date: Mon, 11 Nov 2019 06:02:13 +0100 Subject: [PATCH 64/72] Update deconz.markdown (#11134) Add subsection "Finding your events": A short description on how to find remote button events for deCONZ. --- source/_integrations/deconz.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_integrations/deconz.markdown b/source/_integrations/deconz.markdown index c7771e14040..2fb4a435c8d 100644 --- a/source/_integrations/deconz.markdown +++ b/source/_integrations/deconz.markdown @@ -118,6 +118,10 @@ Where for example on a Philips Hue Dimmer, 2001 would be holding the dim up butt For the IKEA Tradfri remote the first digit equals, 1 for the middle button, 2 for up, 3 for down, 4 for left, and 5 for right (e.g., "event: 1002" for middle button short release). +### Finding your events + +Navigate to **Developer tools->Events**. In the section **Listen to events** add `deconz_event` and press **START LISTENING**. All events from deCONZ will now be shown and by pushing your remote button while monitoring the log it should be fairly easy to find the events you are looking for. + ### Device triggers To simplify using remote control devices in automations deCONZ integration exposes them as device triggers. This will expose all possible variations of button presses and rotations. Note that this is a manually curated list and will not initially be as complete as what deCONZ supports. From 5c33bd37b72fd5a3f3b42d60faa8e29decc20636 Mon Sep 17 00:00:00 2001 From: bastien Date: Mon, 11 Nov 2019 06:11:56 +0100 Subject: [PATCH 65/72] direct link to api_version (#11140) * direct link to api_version direct link http://mafreebox.freebox.fr/api_version * :pencil2: Tweak Co-authored-by: Franck Nijhof --- source/_integrations/freebox.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/freebox.markdown b/source/_integrations/freebox.markdown index b097eabb356..163d8dc2c5d 100644 --- a/source/_integrations/freebox.markdown +++ b/source/_integrations/freebox.markdown @@ -42,7 +42,7 @@ port: type: string {% endconfiguration %} -You can find out your Freebox host and port by opening the address mafreebox.freebox.fr/api_version in your browser. The +You can find out your Freebox host and port by opening the address in your browser. The returned json should contain an api_domain (`host`) and a https_port (`port`). Please consult the [api documentation](https://dev.freebox.fr/sdk/os/) for more information. From aaa9eeb906311e743132e2e36449d505ab16830c Mon Sep 17 00:00:00 2001 From: Villhellm Date: Sun, 10 Nov 2019 21:12:51 -0800 Subject: [PATCH 66/72] clarified setup instructions for Spotify (#11131) --- source/_integrations/spotify.markdown | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/source/_integrations/spotify.markdown b/source/_integrations/spotify.markdown index 90e61862333..919555b5d1f 100644 --- a/source/_integrations/spotify.markdown +++ b/source/_integrations/spotify.markdown @@ -33,12 +33,9 @@ To create the required Spotify application: If you are using SSL: `https://:/api/spotify` - The URL is whatever you use to access Home Assistant from outside your network - (including port if applicable). - - Click **Save** after adding the URI. -You will likely also need to set the `base_url` attribute of the [HTTP Component](/integrations/http/). This should be set using the same base URL as the redirect URI, e.g., if you used a domain name (not local IP) in the redirect, then use the same domain name in your `base_url`. +If you are using an externally accessible address you will likely also need to set the `base_url` attribute of the [HTTP Component](/integrations/http/). This should be set using the same base URL as the redirect URI, e.g., if you used a domain name (not local IP) in the redirect, then use the same domain name in your `base_url`. ## Configuration From 51a5e2bf3ae81d02b4916a1afa38b8d323023e82 Mon Sep 17 00:00:00 2001 From: Stephen Coogan Date: Mon, 11 Nov 2019 05:29:14 +0000 Subject: [PATCH 67/72] fix: allow docs to build on Win platform (#10580) * fix: allow docs to build on Win platform * fix: remove unecessary Sass causing Win fails --- Gemfile | 14 +++++++++++-- Gemfile.lock | 34 +++++++++++++++++++++---------- sass/oscailte/_oscailte.scss | 4 +--- sass/oscailte/custom/_README.scss | 6 ------ 4 files changed, 36 insertions(+), 22 deletions(-) delete mode 100644 sass/oscailte/custom/_README.scss diff --git a/Gemfile b/Gemfile index bbf536f7cd2..91344cefdb0 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,6 @@ -source "https://rubygems.org" +source 'https://rubygems.org' -ruby "> 2.5.0" +ruby '> 2.5.0' group :development do gem 'rake', '13.0.0' @@ -20,3 +20,13 @@ end gem 'sinatra', '2.0.7' gem 'nokogiri', '1.10.5' + +# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem +# and associated library +install_if -> { RUBY_PLATFORM =~ %r!mingw|mswin|java! } do + gem 'tzinfo', '~> 1.2' + gem 'tzinfo-data' +end + +# Performance-booster for watching directories on Windows +gem "wdm", "~> 0.1.0" if Gem.win_platform? diff --git a/Gemfile.lock b/Gemfile.lock index b2f48bd2a57..22b5698c20a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -24,10 +24,12 @@ GEM eventmachine (>= 0.12.9) http_parser.rb (~> 0.6.0) eventmachine (1.2.7) + eventmachine (1.2.7-x64-mingw32) ffi (1.11.1) + ffi (1.11.1-x64-mingw32) forwardable-extended (2.6.0) http_parser.rb (0.6.0) - i18n (1.6.0) + i18n (1.7.0) concurrent-ruby (~> 1.0) jekyll (4.0.0) addressable (~> 2.4) @@ -50,7 +52,7 @@ GEM jekyll-paginate (1.1.0) jekyll-redirect-from (0.15.0) jekyll (>= 3.3, < 5.0) - jekyll-sass-converter (2.0.0) + jekyll-sass-converter (2.0.1) sassc (> 2.0.1, < 3.0) jekyll-sitemap (1.3.1) jekyll (>= 3.7, < 5.0) @@ -62,16 +64,17 @@ GEM kramdown-parser-gfm (1.1.0) kramdown (~> 2.0) liquid (4.0.3) - listen (3.1.5) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - ruby_dep (~> 1.2) + listen (3.2.0) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) mercenary (0.3.6) mini_portile2 (2.4.0) - multi_json (1.13.1) + multi_json (1.14.1) mustermann (1.0.3) nokogiri (1.10.5) mini_portile2 (~> 2.4.0) + nokogiri (1.10.5-x64-mingw32) + mini_portile2 (~> 2.4.0) pathutil (0.16.2) forwardable-extended (~> 2.6) public_suffix (4.0.1) @@ -82,15 +85,16 @@ GEM rb-fsevent (0.10.3) rb-inotify (0.10.0) ffi (~> 1.0) - rouge (3.9.0) + rouge (3.12.0) ruby-enum (0.7.2) i18n - ruby_dep (1.5.0) safe_yaml (1.0.5) sass (3.4.25) sass-globbing (1.1.5) sass (>= 3.1) - sassc (2.2.0) + sassc (2.2.1) + ffi (~> 1.9) + sassc (2.2.1-x64-mingw32) ffi (~> 1.9) sinatra (2.0.7) mustermann (~> 1.0) @@ -100,11 +104,17 @@ GEM stringex (2.8.5) terminal-table (1.8.0) unicode-display_width (~> 1.1, >= 1.1.1) - tilt (2.0.9) + thread_safe (0.3.6) + tilt (2.0.10) + tzinfo (1.2.5) + thread_safe (~> 0.1) + tzinfo-data (1.2019.3) + tzinfo (>= 1.0.0) unicode-display_width (1.6.0) PLATFORMS ruby + x64-mingw32 DEPENDENCIES compass (= 1.0.3) @@ -119,6 +129,8 @@ DEPENDENCIES sass-globbing (= 1.1.5) sinatra (= 2.0.7) stringex (= 2.8.5) + tzinfo (~> 1.2) + tzinfo-data RUBY VERSION ruby 2.6.2p47 diff --git a/sass/oscailte/_oscailte.scss b/sass/oscailte/_oscailte.scss index 972226c6fad..29a22ffcda7 100644 --- a/sass/oscailte/_oscailte.scss +++ b/sass/oscailte/_oscailte.scss @@ -23,6 +23,4 @@ @import "homepage/hero_unit"; @import "helpers/classes"; -@import "helpers/grid-fix"; - -@import "custom/**/*" +@import "helpers/grid-fix"; \ No newline at end of file diff --git a/sass/oscailte/custom/_README.scss b/sass/oscailte/custom/_README.scss deleted file mode 100644 index 8f1caadd6c0..00000000000 --- a/sass/oscailte/custom/_README.scss +++ /dev/null @@ -1,6 +0,0 @@ -// You can freely create SCSS files within this Custom directory -// and they will be imported into the end of the theme's output CSS. -// The directory is loaded to increase abstraction and reduce the amount of -// changes to be made to the Oscailte theme itself. - -// THESE FILES AREA LOADED ALPHABETICALLY \ No newline at end of file From ef3278a73f3f2518263de132e7d25c799b5e259e Mon Sep 17 00:00:00 2001 From: Zotz <3913859+datdamnzotz@users.noreply.github.com> Date: Sun, 10 Nov 2019 23:11:01 -0700 Subject: [PATCH 68/72] Remove host/netsh commands from docker directives (#11133) * Remove host/netsh commands from docker directives Added -p 8123:8123 to the Windows docker command line. Seems more reliable and easier for users. Add ports to docker-compose.yaml files for easier launches.. * revert requested items. * :pencil2: Tweaks --- source/_docs/installation/docker.markdown | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/source/_docs/installation/docker.markdown b/source/_docs/installation/docker.markdown index 027ae1c2fd8..780244d65ee 100644 --- a/source/_docs/installation/docker.markdown +++ b/source/_docs/installation/docker.markdown @@ -40,10 +40,23 @@ Alternatively, `docker-compose` works with any recent release of `docker-ce` on ### Windows +Docker containers are completely isolated from its Windows host system. So when you delete a container, all the changes you made to that container are also removed. If you want to have configuration files or other assets remain persistent, try mounting Windows folders on containers. + +Before proceeding, make sure you have shared out a drive for docker to mount to. This will allow the saving of config files to persist on the local machine rather than in the docker container (which may be destroyed when upgraded). + + + + ```powershell $ docker run --init -d --name="home-assistant" -e "TZ=America/Los_Angeles" -v /PATH_TO_YOUR_CONFIG:/config --net=host homeassistant/home-assistant:stable ``` +It’s easier to understand the trick when put into practice. Here we would like to mount a current working directory (something like `C:\Users\\homeassistant` make sure this exists first) into the `homeassistant/home-assistant:stable` image at the `/config` location in the container. We would do that as so: + +```powershell +$ docker run --init -d --name="home-assistant" -e "TZ=America/Los_Angeles" -v //c/Users//homeassistant:/config --net=host homeassistant/home-assistant:stable +``` + When running Home Assistant in Docker on Windows, you may have some difficulty getting ports to map for routing (since the `--net=host` switch actually applies to the hypervisor's network interface). To get around this, you will need to add port proxy ipv4 rules to your local Windows machine, like so (Replacing '192.168.1.10' with whatever your Windows IP is, and '10.0.50.2' with whatever your Docker container's IP is): ```bash From d1732f888080ab5bdf08ebd8b9854dd9651d79aa Mon Sep 17 00:00:00 2001 From: Jeff Irion Date: Sun, 10 Nov 2019 22:32:42 -0800 Subject: [PATCH 69/72] Fix custom state detection example (#11150) --- source/_integrations/androidtv.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_integrations/androidtv.markdown b/source/_integrations/androidtv.markdown index 948c4a2f2a4..6dff3b129b8 100644 --- a/source/_integrations/androidtv.markdown +++ b/source/_integrations/androidtv.markdown @@ -130,7 +130,7 @@ media_player: - 'playing': 'media_session_state': 3 # this indentation is important! - 'standby' - 'com.amazon.tv.launcher': + 'com.amazon.avod': - 'playing': 'wake_lock_size': 4 # this indentation is important! - 'playing': From 66fddef70f848bb270001a62f2fd9fcb0215325b Mon Sep 17 00:00:00 2001 From: James Goodhouse Date: Mon, 11 Nov 2019 23:28:43 -0800 Subject: [PATCH 70/72] Add iOS/macOS certificate requirements (#11157) --- .../tls_self_signed_certificate.markdown | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/source/_docs/ecosystem/certificates/tls_self_signed_certificate.markdown b/source/_docs/ecosystem/certificates/tls_self_signed_certificate.markdown index 5554734520d..e352481dd5b 100644 --- a/source/_docs/ecosystem/certificates/tls_self_signed_certificate.markdown +++ b/source/_docs/ecosystem/certificates/tls_self_signed_certificate.markdown @@ -14,12 +14,6 @@ Change to your Home Assistant [configuration directory](/getting-started/configu The certificate **must** be `.pem` extension. -If you are going to use this certificate with the iOS app, you need to ensure you complete **all** fields during the certificate creation process, then: - -* Send **only** the `certificate.pem` file to the iOS device, using airdrop or other transfer method. -* Open the `.pem` file on the iOS device, follow the prompts to trust and install it. -* If you are using iOS 10.3 or newer then [additional steps](https://support.apple.com/en-us/HT204477) are needed. - ```bash openssl req -sha256 -newkey rsa:4096 -nodes -keyout privkey.pem -x509 -days 730 -out certificate.pem ``` @@ -46,3 +40,23 @@ sudo chmod 755 certificate.pem privkey.pem ``` A tutorial "[Working with SSL Certificates, Private Keys and CSRs](https://www.digitalocean.com/community/tutorials/openssl-essentials-working-with-ssl-certificates-private-keys-and-csrs)" could give you some insight about special cases. + +### iOS and macOS Specific Requirements + +#### iOS +If you are going to use this certificate with the iOS app, you need to ensure you complete **all** fields during the certificate creation process, then: + +* Send **only** the `certificate.pem` file to the iOS device, using airdrop or other transfer method. +* Open the `.pem` file on the iOS device, follow the prompts to trust and install it. +* If you are using iOS 10.3 or newer then [additional steps](https://support.apple.com/en-us/HT204477) are needed. + +#### iOS 13 and macOS 10.15 + +There are [new security requirements](https://support.apple.com/en-us/HT210176) for TLS server certificates in iOS 13 and macOS 10.15. To summarize: + +* The key size must be greater than or equal to 2048 bits. +* A hash algorithm from the SHA-2 family is required. SHA-1 signed certificates are no longer trusted for TLS. +* The DNS name of the server must be included in the Subject Alternative Name extension of the certificate. +* For certificates issued after July 1, 2019: + * Certificates must contain an ExtendedKeyUsage (EKU) extension containing the id-kp-serverAuth OID. + * Certificates must have a validity period of 825 days or fewer. From 933a080a720dd9e8d9b5d797dcd5bfd70176d0d8 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 12 Nov 2019 09:44:11 +0100 Subject: [PATCH 71/72] Minimize configuration sample (#11161) --- source/_integrations/season.markdown | 1 - 1 file changed, 1 deletion(-) diff --git a/source/_integrations/season.markdown b/source/_integrations/season.markdown index 3ae0d44bcc9..428f89b560e 100644 --- a/source/_integrations/season.markdown +++ b/source/_integrations/season.markdown @@ -29,7 +29,6 @@ To enable the sensor, add the following lines to your `configuration.yaml` file: # Example configuration.yaml entry sensor: - platform: season - type: astronomical ``` {% configuration %} From d4989b0ff9da7e7d58ed0db4da648e41af3c9e63 Mon Sep 17 00:00:00 2001 From: "dependabot-preview[bot]" <27856297+dependabot-preview[bot]@users.noreply.github.com> Date: Tue, 12 Nov 2019 13:39:01 +0100 Subject: [PATCH 72/72] Bump rake from 13.0.0 to 13.0.1 (#11164) Bumps [rake](https://github.com/ruby/rake) from 13.0.0 to 13.0.1. - [Release notes](https://github.com/ruby/rake/releases) - [Changelog](https://github.com/ruby/rake/blob/master/History.rdoc) - [Commits](https://github.com/ruby/rake/compare/v13.0.0...v13.0.1) Signed-off-by: dependabot-preview[bot] --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 91344cefdb0..4c86a237eba 100644 --- a/Gemfile +++ b/Gemfile @@ -3,7 +3,7 @@ source 'https://rubygems.org' ruby '> 2.5.0' group :development do - gem 'rake', '13.0.0' + gem 'rake', '13.0.1' gem 'jekyll', '4.0.0' gem 'compass', '1.0.3' gem 'sass-globbing', '1.1.5' diff --git a/Gemfile.lock b/Gemfile.lock index 22b5698c20a..0bd8ccada10 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -81,7 +81,7 @@ GEM rack (2.0.7) rack-protection (2.0.7) rack - rake (13.0.0) + rake (13.0.1) rb-fsevent (0.10.3) rb-inotify (0.10.0) ffi (~> 1.0) @@ -125,7 +125,7 @@ DEPENDENCIES jekyll-sitemap (= 1.3.1) jekyll-time-to-read (= 0.1.2) nokogiri (= 1.10.5) - rake (= 13.0.0) + rake (= 13.0.1) sass-globbing (= 1.1.5) sinatra (= 2.0.7) stringex (= 2.8.5)