From a3184658af58bf6805aba9671860d168d4641759 Mon Sep 17 00:00:00 2001
From: vrs01
Date: Tue, 1 Aug 2017 18:09:41 +0200
Subject: [PATCH 01/57] Typo
---
source/_components/sensor.scrape.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_components/sensor.scrape.markdown b/source/_components/sensor.scrape.markdown
index 4dd2bc3ea7f..e752a521ce2 100644
--- a/source/_components/sensor.scrape.markdown
+++ b/source/_components/sensor.scrape.markdown
@@ -14,7 +14,7 @@ ha_iot_class: "Cloud Polling"
---
-The `scrape` sensor platform is scraping information from websites. The sensor loads a HTML page and gives you the option to search and split out a value. As this is not a full-blown web scraper like [scrapy](https://scrapy.org/). It will most likely only work with simple webpages and it can be time-consuming to get the right section.
+The `scrape` sensor platform is scraping information from websites. The sensor loads a HTML page and gives you the option to search and split out a value. As this is not a full-blown web scraper like [scrapy](https://scrapy.org/), it will most likely only work with simple webpages and it can be time-consuming to get the right section.
To enable this sensor, add the following lines to your `configuration.yaml` file:
From d1c4d14ab54ebb11dffd560ae2ce730a21dc2b13 Mon Sep 17 00:00:00 2001
From: Ken Davidson
Date: Tue, 1 Aug 2017 14:21:44 -0400
Subject: [PATCH 02/57] Update appdaemon.markdown (#3116)
Fix typos and punctuation.
---
source/_docs/ecosystem/appdaemon.markdown | 25 +++++++++++------------
1 file changed, 12 insertions(+), 13 deletions(-)
diff --git a/source/_docs/ecosystem/appdaemon.markdown b/source/_docs/ecosystem/appdaemon.markdown
index 51f27fe4447..5e3d6bb1c32 100755
--- a/source/_docs/ecosystem/appdaemon.markdown
+++ b/source/_docs/ecosystem/appdaemon.markdown
@@ -16,15 +16,15 @@ AppDaemon is a loosely coupled, multithreaded, sandboxed python execution enviro
AppDaemon is not meant to replace Home Assistant Automations and Scripts, rather complement them. For a lot of things, automations work well and can be very succinct. However, there is a class of more complex automations for which they become harder to use, and appdeamon then comes into its own. It brings quite a few things to the table:
-- New paradigm - Some problems require a procedural and/or iterative approach, and `AppDaemon` Apps are a much more natural fit for this. Recent enhancements to Home Assistant scripts and templates have made huge strides, but for the most complex scenarios, apps can do things that automations can't.
-- Ease of use - AppDaemon's API is full of helper functions that make programming as easy and natural as possible. The functions and their operation are as "Pythonic" as possible, experienced Python programmers should feel right at home.
-- Reuse - write a piece of code once and instantiate it as an app as many times as you need with different parameters e.g. a motion light program that you can use in 5 different places around your home. The code stays the same, you just dynamically add new instances of it in the config file.
-- Dynamic - AppDaemon has been designed from the start to enable the user to make changes without requiring a restart of Home Assistant, thanks to it's loose coupling. However, it is better than that - the user can make changes to code and AppDaemon will automatically reload the code, figure out which Apps were using it and restart them to use the new code with out the need to restart `AppDaemon` itself. It is also possible to change parameters for an individual or multiple apps and have them picked up dynamically, and for a final trick, removing or adding apps is also picked up dynamically. Testing cycles become a lot more efficient as a result.
-- Complex logic - Python's If/Else constructs are clearer and easier to code for arbitrarily complex nested logic
+- New paradigm - Some problems require a procedural and/or iterative approach, and `AppDaemon` Apps are a much more natural fit for this. Recent enhancements to Home Assistant scripts and templates have made huge strides, but for the most complex scenarios, Apps can do things that automations can't.
+- Ease of use - AppDaemon's API is full of helper functions that make programming as easy and natural as possible. The functions and their operation are as "Pythonic" as possible; experienced Python programmers should feel right at home.
+- Reuse - write a piece of code once and instantiate it as an App as many times as you need with different parameters; e.g., a motion light program that you can use in five different places around your home. The code stays the same, you just dynamically add new instances of it in the config file.
+- Dynamic - AppDaemon has been designed from the start to enable the user to make changes without requiring a restart of Home Assistant, thanks to its loose coupling. However, it is better than that - the user can make changes to code and AppDaemon will automatically reload the code, figure out which Apps were using it, and restart them to use the new code without the need to restart `AppDaemon` itself. It is also possible to change parameters for an individual or multiple Apps and have them picked up dynamically. For a final trick, removing or adding Apps is also picked up dynamically. Testing cycles become a lot more efficient as a result.
+- Complex logic - Python's If/Else constructs are clearer and easier to code for arbitrarily complex nested logic.
- Durable variables and state - Variables can be kept between events to keep track of things like the number of times a motion sensor has been activated, or how long it has been since a door opened.
-- All the power of Python - use any of Python's libraries, create your own modules, share variables, refactor and re-use code, create a single app to do everything, or multiple apps for individual tasks - nothing is off limits!
+- All the power of Python - use any of Python's libraries, create your own modules, share variables, refactor and re-use code, create a single App to do everything, or multiple Apps for individual tasks - nothing is off limits!
-It is in fact a testament to Home Assistant's open nature that a component like `AppDaemon` can be integrated so neatly and closely that it acts in all ways like an extension of the system, not a second class citizen. Part of the strength of Home Assistant's underlying design is that it makes no assumptions whatever about what it is controlling or reacting to, or reporting state on. This is made achievable in part by the great flexibility of Python as a programming environment for Home Assistant, and carrying that forward has enabled me to use the same philosophy for `AppDaemon` - it took surprisingly little code to be able to respond to basic events and call services in a completely open ended manner - the bulk of the work after that was adding additonal functions to make things that were already possible easier.
+It is in fact a testament to Home Assistant's open nature that a component like `AppDaemon` can be integrated so neatly and closely that it acts in all ways like an extension of the system, not a second class citizen. Part of the strength of Home Assistant's underlying design is that it makes no assumptions whatsoever about what it is controlling, reacting to, or reporting state on. This is made achievable in part by the great flexibility of Python as a programming environment for Home Assistant, and carrying that forward has enabled me to use the same philosophy for `AppDaemon` - it took surprisingly little code to be able to respond to basic events and call services in a completely open ended manner. The bulk of the work after that was adding additonal functions to make things that were already possible easier.
# How it Works
@@ -32,7 +32,7 @@ The best way to show what AppDaemon does is through a few simple examples.
## Sunrise/Sunset Lighting
-Lets start with a simple App to turn a light on every night at sunset and off every morning at sunrise. Every App when first started will have its `initialize()` function called which gives it a chance to register a callback for AppDaemons's scheduler for a specific time. In this case we are using `run_at_sunrise()` and `run_at_sunset()` to register 2 separate callbacks. The argument `0` is the number of seconds offset from sunrise or sunset and can be negative or positive. For complex intervals it can be convenient to use Python's `datetime.timedelta` class for calculations. When sunrise or sunset occurs, the appropriate callback function, `sunrise_cb()` or `sunset_cb()` is called which then makes a call to Home Assistant to turn the porch light on or off by activating a scene. The variables `args["on_scene"]` and `args["off_scene"]` are passed through from the configuration of this particular App, and the same code could be reused to activate completely different scenes in a different version of the App.
+Let's start with a simple App to turn a light on every night at sunset and off every morning at sunrise. Every App when first started will have its `initialize()` function called, which gives it a chance to register a callback for AppDaemons's scheduler for a specific time. In this case, we are using `run_at_sunrise()` and `run_at_sunset()` to register two separate callbacks. The argument `0` is the number of seconds offset from sunrise or sunset and can be negative or positive. For complex intervals, it can be convenient to use Python's `datetime.timedelta` class for calculations. When sunrise or sunset occurs, the appropriate callback function, `sunrise_cb()` or `sunset_cb()`, is called, which then makes a call to Home Assistant to turn the porch light on or off by activating a scene. The variables `args["on_scene"]` and `args["off_scene"]` are passed through from the configuration of this particular App, and the same code could be reused to activate completely different scenes in a different version of the App.
```python
import homeassistant.appapi as appapi
@@ -74,9 +74,9 @@ class FlashyMotionLights(appapi.AppDaemon):
self.turn_off("light.drive")
```
-This is starting to get a little more complex in Home Assistant automations requiring an automation rule and two separate scripts.
+This is starting to get a little more complex in Home Assistant automations, requiring an automation rule and two separate scripts.
-Now lets extend this with a somewhat artificial example to show something that is simple in AppDaemon but very difficult if not impossible using automations. Lets warn someone inside the house that there has been motion outside by flashing a lamp on and off 10 times. We are reacting to the motion as before by turning on the light and setting a timer to turn it off again, but in addition, we set a 1 second timer to run `flash_warning()` which when called, toggles the inside light and sets another timer to call itself a second later. To avoid re-triggering forever, it keeps a count of how many times it has been activated and bales out after 10 iterations.
+Now let's extend this with a somewhat artificial example to show something that is simple in AppDaemon but very difficult if not impossible using automations. Let's warn someone inside the house that there has been motion outside by flashing a lamp on and off ten times. We are reacting to the motion as before by turning on the light and setting a timer to turn it off again, but in addition, we set a 1-second timer to run `flash_warning()`, which, when called, toggles the inside light and sets another timer to call itself a second later. To avoid re-triggering forever, it keeps a count of how many times it has been activated and bales out after ten iterations.
```python
import homeassistant.appapi as appapi
@@ -103,11 +103,10 @@ class MotionLights(appapi.AppDaemon):
self.run_in(self.flash_warning, 1)
```
-Of course if I wanted to make this App or its predecessor reusable I would have provide parameters for the sensor, the light to activate on motion, the warning light and even the number of flashes and delay between flashes.
+Of course, if I wanted to make this App or its predecessor reusable, I would have provide parameters for the sensor, the light to activate on motion, the warning light, and even the number of flashes and delay between flashes.
-In addition, Apps can write to `AppDaemon`'s logfiles, and there is a system of constraints that allows yout to control when and under what circumstances Apps and callbacks are active to keep the logic clean and simple.
+In addition, Apps can write to `AppDaemon`'s log files, and there is a system of constraints that allows you to control when and under what circumstances Apps and callbacks are active to keep the logic clean and simple.
For full installation instructions, see [README.md](https://github.com/home-assistant/appdaemon/blob/dev/README.rst) in the `AppDaemon` repository.
There is also full documentation for the API and associated configuration in [API.md](https://github.com/home-assistant/appdaemon/blob/dev/API.md).
-
From 14c13f1007320b80edb031cc1d78f72159c4e323 Mon Sep 17 00:00:00 2001
From: Robin
Date: Tue, 1 Aug 2017 19:22:09 +0100
Subject: [PATCH 03/57] Clarify get request (#3115)
As per a query on the forum I have clarified the instructions for checking valid bus directions
---
source/_components/sensor.uk_transport.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_components/sensor.uk_transport.markdown b/source/_components/sensor.uk_transport.markdown
index 62358de3f74..759f37f982d 100644
--- a/source/_components/sensor.uk_transport.markdown
+++ b/source/_components/sensor.uk_transport.markdown
@@ -81,7 +81,7 @@ stop you're interested in
3. Tick the 'map data' layer, and wait for clickable objects to load
4. Click the bus stop node to reveal its tags on the left
-The `destination` must be a valid location returned by the transportAPI query. Valid destinations can be checked by performing a GET query to `/uk/bus/stop/{atcocode}/live.json` in the [API reference webpage](https://developer.transportapi.com/docs?raml=https://transportapi.com/v3/raml/transportapi.raml##bus_information). A bus sensor is added in the following `configuration.yaml` file entry:
+The `destination` must be a valid location in the "direction" field returned by a GET query to `/uk/bus/stop/{atcocode}/live.json` as described in the [API reference webpage](https://developer.transportapi.com/docs?raml=https://transportapi.com/v3/raml/transportapi.raml##bus_information). A bus sensor is added in the following `configuration.yaml` file entry:
```yaml
# Example configuration.yaml entry for multiple sensors
From 60e19f1b63ecb26ec1b5780c052c060258244c94 Mon Sep 17 00:00:00 2001
From: cdce8p <30130371+cdce8p@users.noreply.github.com>
Date: Tue, 1 Aug 2017 20:22:54 +0200
Subject: [PATCH 04/57] Hassbian common tasks - Updated manual launch info
(#3110)
---
source/_docs/installation/hassbian/common-tasks.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_docs/installation/hassbian/common-tasks.markdown b/source/_docs/installation/hassbian/common-tasks.markdown
index ce294b5c1b9..5acc6a8667b 100644
--- a/source/_docs/installation/hassbian/common-tasks.markdown
+++ b/source/_docs/installation/hassbian/common-tasks.markdown
@@ -65,7 +65,7 @@ $ source /srv/homeassistant/bin/activate
$ hass
```
-This will start Home Assistant in your shell and output anything that ends up in the log and more into the console. This will fail if the Home Assistant service is already running so don't forget to [stop][stop-homeassistant] it first.
+This will start Home Assistant in your shell and output anything that ends up in the log and more into the console. This will fail if the Home Assistant service is already running so don't forget to [stop][stop-homeassistant] it first. If you want the log output to be colored, execute `hass --script check_config` first. This will install the `colorlog` module.
### {% linkable_title Check your configuration %}
Log in as the `pi` account and execute the following commands:
From 48727906d732d97882b31dd266dbbbe25a8395ca Mon Sep 17 00:00:00 2001
From: moskovskiy82
Date: Tue, 1 Aug 2017 21:24:42 +0300
Subject: [PATCH 05/57] Setpoint customisation (#3108)
As per https://community.home-assistant.io/t/mysensors-hvac-not-showing-up/22540/19
---
source/_components/climate.markdown | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/source/_components/climate.markdown b/source/_components/climate.markdown
index d20705eb3da..045b81a0372 100644
--- a/source/_components/climate.markdown
+++ b/source/_components/climate.markdown
@@ -222,3 +222,12 @@ automation:
entity_id: climate.kitchen
swing_mode: 1
```
+#### {% linkable_title Customization %}
+
+The step for the setpoint can be adjusted (default to 0,5 increments) by adding the following line into configuration
+
+'''yaml
+customize:
+ - entity_id
+ target_temp_step: 1
+'''
From 156edc6cff8a24dba4160413d3db5a1c5eb4f0ee Mon Sep 17 00:00:00 2001
From: Marcelo Moreira de Mello
Date: Tue, 1 Aug 2017 15:16:24 -0400
Subject: [PATCH 06/57] Added example of Arlo service
camera.enable_motion_detection (#3107)
---
source/_components/arlo.markdown | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/source/_components/arlo.markdown b/source/_components/arlo.markdown
index ec67022b6ad..6556ef17b71 100644
--- a/source/_components/arlo.markdown
+++ b/source/_components/arlo.markdown
@@ -32,3 +32,17 @@ Configuration variables:
It is recommended to create a dedicated user on Arlo website to be used within Home Assistant and then share your Arlo cameras.
Finish its configuration by visiting the [Arlo sensor page](/components/sensor.arlo/) or [Arlo camera page](/components/camera.arlo/).
+
+The Arlo component also provides a service to enable/disable the motion detection sensor. The example below enables the motion detection every time the Home Assistant service starts.
+
+```yaml
+#automation.yaml
+- alias: Enable Arlo upton HA start'
+ initial_state: 'on'
+ trigger:
+ platform: homeassitant
+ event: start
+ action:
+ service: camera.enable_motion_detection
+ entity_id: camera.arlo_frontdoor
+```
From a3359cb4216f78d78ec75f5d737b10df9db90b3c Mon Sep 17 00:00:00 2001
From: Phil Hawthorne
Date: Wed, 2 Aug 2017 17:16:31 +1000
Subject: [PATCH 07/57] Add blog post for Podcast Episode 5 (#3118)
Adds a blog post for Episode 5 of the Podcast
---
.../2017-08-01-hasspodcast-ep-5.markdown | 20 +++++++++++++++++++
1 file changed, 20 insertions(+)
create mode 100644 source/_posts/2017-08-01-hasspodcast-ep-5.markdown
diff --git a/source/_posts/2017-08-01-hasspodcast-ep-5.markdown b/source/_posts/2017-08-01-hasspodcast-ep-5.markdown
new file mode 100644
index 00000000000..9df9be08c7a
--- /dev/null
+++ b/source/_posts/2017-08-01-hasspodcast-ep-5.markdown
@@ -0,0 +1,20 @@
+---
+layout: post
+title: "Home Assistant Podcast #5"
+description: "We cover off AppDaemon/HADashboard and all the fun stuff introduced in 0.49 and 0.50"
+date: 2017-08-01 00:01:00 +0000
+date_formatted: "August 1, 2017"
+author: Phil Hawthorne
+author_twitter: philhawthorne
+comments: true
+categories: Media
+og_image: /images/hasspodcast.jpg
+---
+
+We cover off AppDaemon/HADashboard and all the fun stuff introduced in 0.49 and 0.50.
+
+Show notes available on the [Home Assistant Podcast Website](https://hasspodcast.io/ha005/)
+
+[Listen online][episode]
+
+[episode]: https://hasspodcast.io/ha005/
From 3caddc2bad68208a75549c2d9a0500913cfbc5d2 Mon Sep 17 00:00:00 2001
From: Fabian Affolter
Date: Wed, 2 Aug 2017 12:11:56 +0200
Subject: [PATCH 08/57] Add distinction between venv and non-venv
---
source/developers/component_deps_and_reqs.markdown | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/source/developers/component_deps_and_reqs.markdown b/source/developers/component_deps_and_reqs.markdown
index 039948ea7df..750f6b6c852 100644
--- a/source/developers/component_deps_and_reqs.markdown
+++ b/source/developers/component_deps_and_reqs.markdown
@@ -21,9 +21,9 @@ DEPENDENCIES = ['mqtt']
## {% linkable_title Requirements %}
-Requirements are Python libraries that you would normally install using `pip` for your component. Home Assistant will try to install the requirements into the `deps` subdirectory of the Home Assistant configuration directory (`.home-assistant` by default) or verify it is already installed at startup. If that fails, the component will fail to load.
+Requirements are Python libraries or modules that you would normally install using `pip` for your component. Home Assistant will try to install the requirements into the `deps` subdirectory of the Home Assistant [configuration directory](/docs/configuration/) if you are not using a `venv` or in something like `path/to/venv/lib/python3.6/site-packages` if you running in a virtual environment. This will make sure that all requirements are present at startup. If steps fails like missing packages for the compilation of a module or other install errors, the component will fail to load.
-Requirements is a list of strings. Each entry is a pip compatible string. For example, the media player Cast platform depends on the Python package PyChromecast v0.6.12:
+Requirements is a list of strings. Each entry is a `pip` compatible string. For example, the media player Cast platform depends on the Python package PyChromecast v0.6.12:
```python
REQUIREMENTS = ['pychromecast==0.6.12']
@@ -36,7 +36,7 @@ During development of a component, it can be useful to test against different ve
This will use the specified version, and prevent Home Assistant from trying to override it with what is currently in `REQUIREMENTS`.
-If you need to make changes to a requirement to support your component, it's also possible to pip install from a checkout of the requirement.
+If you need to make changes to a requirement to support your component, it's also possible to `pip install` from a checkout of the requirement.
* `git clone https://github.com/balloob/pychromecast.git`
* `pip install ./pychromecast`
From 2a936094592d5b63070e59b4c197a60d8e3bf994 Mon Sep 17 00:00:00 2001
From: Charles Garwood
Date: Wed, 2 Aug 2017 08:52:34 -0400
Subject: [PATCH 09/57] Minor grammatical tweaks for SmartCast Component
(#3123)
---
.../_components/media_player.vizio.markdown | 26 ++++++++++---------
1 file changed, 14 insertions(+), 12 deletions(-)
diff --git a/source/_components/media_player.vizio.markdown b/source/_components/media_player.vizio.markdown
index 80c83f4f7f5..989d37113d7 100644
--- a/source/_components/media_player.vizio.markdown
+++ b/source/_components/media_player.vizio.markdown
@@ -18,23 +18,24 @@ The `vizio` component will allow you to control [SmartCast](https://www.vizio.co
## Pairing
-Before adding TV to Home Assistant you'll need to pair it manually, to do so follow these steps:
+Before adding your TV to Home Assistant you'll need to pair it manually. To do so follow these steps:
-Install the command-line tool using pip (you can choose to download it manually):
+Install the command-line tool using pip (or you can choose to download it manually):
```bash
$ pip3 install git+https://github.com/vkorn/pyvizio.git@master
$ pip3 install -I .
```
-Make sure that your TV is on, as sometimes it won't show PIN code if it wasn't on during pairing initialization.
+Make sure that your TV is on before continuing.
+
If you don't know IP address of your TV run following command:
```bash
$ pyvizio --ip=0 --auth=0 discover
```
-Initiate pairing:
+Enter the following command to initiate pairing:
```bash
$ pyvizio --ip={ip} pair
@@ -44,20 +45,20 @@ Initiation will show you two different values:
| Value | Description |
|:----------------|:---------------------|
-| Challenge type | Usually it's should be `"1"`, if it's not the case for you, use additional parameter `--ch_type=your_type` in the next step |
+| Challenge type | Usually it should be `"1"`. If not, use the additional parameter `--ch_type=your_type` in the next step |
| Challenge token | Token required to finalize pairing in the next step |
-Finally, at this point PIN code should be displayed at the top of your TV. With all these values, you can now finish pairing:
+Finally, at this point a PIN code should be displayed at the top of your TV. With all these values, you can now finish pairing:
```bash
$ pyvizio --ip={ip} pair_finish --token={challenge_token} --pin={tv_pin}
```
-You will need authentication token returned by this command to configure Home Assistant.
+You will need the authentication token returned by this command to configure Home Assistant.
## Configuration
-To add your Vizio TV to your installation, add following to your `configuration.yaml` file:
+To add your Vizio TV to your installation, add the following to your `configuration.yaml` file:
```yaml
# Example configuration.yaml entry
@@ -70,13 +71,13 @@ media_player:
Configuration variables:
- **host** (*Required*): IP address of your TV.
-- **access_token** (*Required*): Authentication token you've received in last step of the pairing process.
+- **access_token** (*Required*): Authentication token you received in the last step of the pairing process.
## Notes and limitations
### Turning TV on
-If you do have `Power Mode` of your TV configured to be `Eco Mode`, turning device ON won't work.
+If the `Power Mode` of your TV is set to `Eco Mode`, turning the device ON won't work.
### Changing tracks
@@ -87,7 +88,8 @@ Changing tracks works like channels switching. If you have source other than reg
Source list shows all external devices connected to the TV through HDMI plus list of internal devices (TV mode, Chrome Cast, etc.).
-Vizio SmartCast service is accessible through HTTPS with self-signed certificate. It means that if you have low LOGLEVEL in your Home Assistant configuration, you'll see a lot of warnings like this `InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised.`
+Vizio SmartCast service is accessible through HTTPS with self-signed certificate. If you have low LOGLEVEL in your Home Assistant configuration, you'll see a lot of warnings like this:
+`InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised.`
-As an option, you could proxy all calls for example through NGINX.
+You can adjust the log level for `media_player` components with the [logger](https://home-assistant.io/components/logger/) component, or if you need to keep a low log level for `media_player` you could proxy calls to your TV through an NGINX reverse proxy.
From 5dab070debdb33f64438288ee9b335b28bb86128 Mon Sep 17 00:00:00 2001
From: Molodax
Date: Wed, 2 Aug 2017 14:53:12 +0200
Subject: [PATCH 10/57] Update snips.markdown (#3122)
The code has been updated according to the changes implemented in HASS v.0.50.X
---
source/_components/snips.markdown | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/source/_components/snips.markdown b/source/_components/snips.markdown
index 41fa358689b..ef4b7d04295 100644
--- a/source/_components/snips.markdown
+++ b/source/_components/snips.markdown
@@ -104,11 +104,12 @@ In Home Assistant, we trigger actions based on intents produced by Snips using t
```yaml
snips:
- intents:
- ActivateLightColor:
- action:
- - service: light.turn_on
- data_template:
- entity_id: light.{% raw %}{{ objectLocation | replace(" ","_") }}{% endraw %}
- color_name: {% raw %}{{ objectColor }}{% endraw %}
+
+intent_script:
+ ActivateLightColor:
+ action:
+ - service: light.turn_on
+ data_template:
+ entity_id: light.{% raw %}{{ objectLocation | replace(" ","_") }}{% endraw %}
+ color_name: {% raw %}{{ objectColor }}{% endraw %}
```
From e201b34f879f4ba9df2bf41f13c4e1e51ec07a4e Mon Sep 17 00:00:00 2001
From: Pascal Vizeli
Date: Thu, 3 Aug 2017 00:41:42 +0200
Subject: [PATCH 11/57] Update zwave.markdown
---
source/hassio/zwave.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/hassio/zwave.markdown b/source/hassio/zwave.markdown
index 047907c8398..ccd4b8b5a0f 100644
--- a/source/hassio/zwave.markdown
+++ b/source/hassio/zwave.markdown
@@ -25,7 +25,7 @@ For very special device, the `/dev/ttyAMA0` will not detect by udev and not mapp
```bash
$ curl -d '{"devices": ["ttyAMA0"]}' http://172.17.0.2/homeassistant/options
```
-After that you need change `usb_path` to `/dev/ttyACM0`.
+After that you need change `usb_path` to `/dev/ttyAMA0`.
### HUSBZB-1:
```yaml
From 89c11e0cb25d0f392c47c56d00f3d6409f9be177 Mon Sep 17 00:00:00 2001
From: Naren Salem
Date: Thu, 3 Aug 2017 02:35:25 -0500
Subject: [PATCH 12/57] Add note on using a static IP for the Bridge (#3126)
---
source/_components/light.hue.markdown | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/source/_components/light.hue.markdown b/source/_components/light.hue.markdown
index f5ee01556dd..3e3544bc94c 100644
--- a/source/_components/light.hue.markdown
+++ b/source/_components/light.hue.markdown
@@ -18,6 +18,8 @@ Philips Hue support is integrated into Home Assistant as a light platform. The p
Once discovered, if you have a custom default view, locate `configurator.philips_hue` in the entities list ( < > ) and add it to a group in `configuration.yaml`. Restart Home Assistant so that the configurator is visible in the Home Assistant dashboard. Once Home Assistant is restarted, locate and click on `configurator.philips_hue` to bring up the initiation dialog. This will prompt you to press the Hue button to register the Hue hub in home assistant. Once complete, the configurator entity isn't needed anymore and can be removed from any visible group in `configuration.yaml`.
+When you configure the Hue bridge from HA, it writes a token to a file in your HA configuration directory. That token authenticates the HA communication with the Hue bridge. This token uses the IP Address of the Hue Bridge. If the IP address for the Hue Bridge changes, you will need to register the Hue Bridge with home assistant again. TO avoid this you may set up DHCP registration for your Hue Bridge, so that it always has the same IP address.
+
Restarting Home Assistant once more should result in the Hue lights listed as "light" entities. Add these light entities to configuration.yaml and restart home assistant once more to complete the installation.
If you want to enable the component without relying on the [discovery component](/components/discovery/), add the following lines to your `configuration.yaml`:
@@ -31,7 +33,7 @@ light:
Configuration variables:
-- **host** (*Optional*): IP address of the device, eg. 192.168.1.10. Required if not using the `discovery` component to discover Hue bridges.
+- **host** (*Optional*): IP address of the device, eg. 192.168.1.10. Required if not using the `discovery` component to discover Hue bridges.
- **allow_unreachable** (*Optional*): (true/false) This will allow unreachable bulbs to report their state correctly.
- **filename** (*Optional*): Make this unique if specifying multiple Hue hubs.
From d9aed312dcabcfa7bbc67cf6bcd5c05eae042c5d Mon Sep 17 00:00:00 2001
From: Fabian Affolter
Date: Thu, 3 Aug 2017 09:42:42 +0200
Subject: [PATCH 13/57] Use Home Assistant instead of HA
---
source/_components/light.hue.markdown | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/source/_components/light.hue.markdown b/source/_components/light.hue.markdown
index 3e3544bc94c..8f5652e31a6 100644
--- a/source/_components/light.hue.markdown
+++ b/source/_components/light.hue.markdown
@@ -18,7 +18,7 @@ Philips Hue support is integrated into Home Assistant as a light platform. The p
Once discovered, if you have a custom default view, locate `configurator.philips_hue` in the entities list ( < > ) and add it to a group in `configuration.yaml`. Restart Home Assistant so that the configurator is visible in the Home Assistant dashboard. Once Home Assistant is restarted, locate and click on `configurator.philips_hue` to bring up the initiation dialog. This will prompt you to press the Hue button to register the Hue hub in home assistant. Once complete, the configurator entity isn't needed anymore and can be removed from any visible group in `configuration.yaml`.
-When you configure the Hue bridge from HA, it writes a token to a file in your HA configuration directory. That token authenticates the HA communication with the Hue bridge. This token uses the IP Address of the Hue Bridge. If the IP address for the Hue Bridge changes, you will need to register the Hue Bridge with home assistant again. TO avoid this you may set up DHCP registration for your Hue Bridge, so that it always has the same IP address.
+When you configure the Hue bridge from Home Assistant, it writes a token to a file in your Home Assistant [configuration directory](/docs/configuration/). That token authenticates the communication with the Hue bridge. This token uses the IP Address of the Hue Bridge. If the IP address for the Hue Bridge changes, you will need to register the Hue Bridge with Home Assistant again. To avoid this you may set up DHCP registration for your Hue Bridge, so that it always has the same IP address.
Restarting Home Assistant once more should result in the Hue lights listed as "light" entities. Add these light entities to configuration.yaml and restart home assistant once more to complete the installation.
@@ -33,8 +33,7 @@ light:
Configuration variables:
-- **host** (*Optional*): IP address of the device, eg. 192.168.1.10. Required if not using the `discovery` component to discover Hue bridges.
-
+- **host** (*Optional*): IP address of the device, eg. 192.168.1.10. Required if not using the `discovery` component to discover Hue bridges.
- **allow_unreachable** (*Optional*): (true/false) This will allow unreachable bulbs to report their state correctly.
- **filename** (*Optional*): Make this unique if specifying multiple Hue hubs.
- **allow_in_emulated_hue** (*Optional*): )true/false) Enable this to block all Hue entities from being added to the `emulated_hue` component.
@@ -102,8 +101,7 @@ script:
How do you find these names?
-The easiest way to do this is only use the scenes from the 2nd generation Hue app. That is organized by Room (Group) and Scene
-Name. Use the values of Room name and Scene name that you see in the app. You can test these work on the `dev-service` console of your Home Assistant instance.
+The easiest way to do this is only use the scenes from the 2nd generation Hue app. That is organized by Room (Group) and Scene Name. Use the values of Room name and Scene name that you see in the app. You can test these work on the `dev-service` console of your Home Assistant instance.
Alternatively, you can dump all rooms and scene names using this [gist](https://gist.github.com/sdague/5479b632e0fce931951c0636c39a9578). This does **not** tell you which groups and scenes work together but it's sufficient to get values that you can test in the `dev-service` console.
From 3a363b2e3dad1f0a360363f304ece297b31eb4f2 Mon Sep 17 00:00:00 2001
From: Variour
Date: Fri, 4 Aug 2017 08:34:20 +0200
Subject: [PATCH 14/57] Updated filename for iOS, added token description
(#3131)
The filename to extract the token from the iOS backup has the USERID in the front ({USERID}_mihome.sqlite). A file without the {USERID} existed as well, so i think the clarification is needed.
In addition i added a description of how the token looks so one knows what to look for.
---
source/_components/switch.xiaomi_vacuum.markdown | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/source/_components/switch.xiaomi_vacuum.markdown b/source/_components/switch.xiaomi_vacuum.markdown
index f0be339ee8d..c96b29b96c4 100644
--- a/source/_components/switch.xiaomi_vacuum.markdown
+++ b/source/_components/switch.xiaomi_vacuum.markdown
@@ -60,7 +60,7 @@ java.exe -jar ../android-backup-extractor/abe.jar unpack backup.ab backup.tar ""
1. Setup iOS device with the Mi-Home app.
2. Create an unencrypted backup of the device using iTunes.
3. Install iBackup Viewer from here: http://www.imactools.com/iphonebackupviewer/
-4. Extract this file /raw data/com.xiami.mihome/_mihome.sqlite to your computer
+4. Extract this file /raw data/com.xiami.mihome/{USERID}_mihome.sqlite to your computer
5. Open the file extracted using notepad. You will then see the list of all the device in your account with their token.
{% linkable_title Configuration %}
@@ -76,4 +76,4 @@ java.exe -jar ../android-backup-extractor/abe.jar unpack backup.ab backup.tar ""
Configuration variables:
- **name** (*Optional*): The name of your robot
- **host** (*Required*): The IP of your robot
-- **token** (*Required*): The token of your robot. Go to Getting started section to read more about how to get it
+- **token** (*Required*): The token of your robot. 32-characters consisting of digits and lowercase letters. Go to Getting started section to read more about how to get it
From 28388885795660a9edf4001f935550df20f18657 Mon Sep 17 00:00:00 2001
From: jwillaz
Date: Thu, 3 Aug 2017 23:35:47 -0700
Subject: [PATCH 15/57] Update light.yeelight.markdown - fix model bullets
(#3129)
---
source/_components/light.yeelight.markdown | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/source/_components/light.yeelight.markdown b/source/_components/light.yeelight.markdown
index cc6dd8b5ac0..603527e56e4 100644
--- a/source/_components/light.yeelight.markdown
+++ b/source/_components/light.yeelight.markdown
@@ -52,14 +52,15 @@ Determine your bulb ip (using router, software, ping ...)
-This component is tested to work with the following models:
+This component is tested to work with the following models. If you have a different model and it is working please let us know.
+
- **YLDP01YL**: LED Bulb (White)
- **YLDP02YL**: LED Bulb (Color)
- **YLDP03YL**: LED Bulb (Color) - E26
- **YLDD02YL**: Lightstrip (Color)
-If you have a different model and it is working please let us know.
-
+
+
From 07a95497cfafe2f3467c865ba9beb1a9e01e51ac Mon Sep 17 00:00:00 2001
From: Ken Davidson
Date: Fri, 4 Aug 2017 11:05:01 -0400
Subject: [PATCH 16/57] Update z-wave.markdown (#3133)
Minor changes to fix typos.
---
source/_docs/z-wave.markdown | 34 +++++++++++++++++-----------------
1 file changed, 17 insertions(+), 17 deletions(-)
diff --git a/source/_docs/z-wave.markdown b/source/_docs/z-wave.markdown
index 81ad7ae1f5f..ace82273a5f 100644
--- a/source/_docs/z-wave.markdown
+++ b/source/_docs/z-wave.markdown
@@ -12,7 +12,7 @@ redirect_from: /getting-started/z-wave/
[Z-Wave](http://www.z-wave.com/) integration for Home Assistant allows you to observe and control connected Z-Wave devices. Z-Wave support requires a [supported Z-Wave USB stick or module](https://github.com/OpenZWave/open-zwave/wiki/Controller-Compatibility-List) to be plugged into the host.
-There is currently support for climate, covers, lights, locks, sensors, switches and thermostats. All will be picked up automatically after configuring this platform.
+There is currently support for climate, covers, lights, locks, sensors, switches, and thermostats. All will be picked up automatically after configuring this platform.
### {% linkable_title Installation %}
@@ -35,7 +35,7 @@ zwave:
Configuration variables:
- **usb_path** (*Optional*): The port where your device is connected to your Home Assistant host.
-- **network_key** (*Optional*): The 16 byte network key in the form `"0x01,0x02..."` used in order to connect securely to compatible devices.
+- **network_key** (*Optional*): The 16-byte network key in the form `"0x01,0x02..."` used in order to connect securely to compatible devices.
- **config_path** (*Optional*): The path to the Python OpenZWave configuration files. Defaults to the 'config' that is installed by python-openzwave
- **autoheal** (*Optional*): Allows disabling auto Z-Wave heal at midnight. Defaults to True.
- **polling_interval** (*Optional*): The time period in milliseconds between polls of a nodes value. Be careful about using polling values below 30000 (30 seconds) as polling can flood the zwave network and cause problems.
@@ -54,7 +54,7 @@ To find the path of your Z-Wave USB stick or module, run:
$ ls /dev/ttyUSB*
```
-Or, if there is no result try to find detailed USB connection info with:
+Or, if there is no result, try to find detailed USB connection info with:
```bash
$ dmesg | grep USB
```
@@ -89,7 +89,7 @@ Depending on what's plugged into your USB ports, the name found above may change
To add a Z-Wave device to your system, go to the Z-Wave panel in the Home Assistant frontend and click the Add Node button in the Z-Wave Network Management card. This will place the controller in inclusion mode, after which you should activate your device to be included by following the instructions provided with the device.
-Some Z-Wave controllers like Aeotec ZW090 Z-Stick Gen5 have ability to add devices to the network using their own contol buttons. This method should be avoided as it is prone to errors. Devices added to the Z-Wave network using this method may not function well.
+Some Z-Wave controllers, like Aeotec ZW090 Z-Stick Gen5, have ability to add devices to the network using their own contol buttons. This method should be avoided as it is prone to errors. Devices added to the Z-Wave network using this method may not function well.
### {% linkable_title Adding Security Devices %}
@@ -105,7 +105,7 @@ cat /dev/urandom | tr -dc '0-9A-F' | fold -w 32 | head -n 1 | sed -e 's/\(..\)/0
#### {% linkable_title zwave.network_complete %}
-Home Assistant will trigger a event when the Z-Wave network is complete. Meaning all of the nodes on the network have been queried. This can take quite some time, depending on wakeup intervals on the battery powered devices on the network.
+Home Assistant will trigger an event when the Z-Wave network is complete, meaning all of the nodes on the network have been queried. This can take quite some time, depending on wakeup intervals on the battery-powered devices on the network.
```yaml
- alias: Z-Wave network is complete
@@ -116,7 +116,7 @@ Home Assistant will trigger a event when the Z-Wave network is complete. Meaning
#### {% linkable_title zwave.network_ready %}
-Home Assistant will trigger a event when the Z-Wave network is ready for use. Between `zwave.network_start` and `zwave.network_ready` Home Assistant will feel sluggish when trying to send commands to Z-Wave nodes. This is because the controller is requesting information from all of the nodes on the network. When this is triggered all awake nodes have been queried and sleeping nodes will be queried when they awake.
+Home Assistant will trigger an event when the Z-Wave network is ready for use. Between `zwave.network_start` and `zwave.network_ready` Home Assistant will feel sluggish when trying to send commands to Z-Wave nodes. This is because the controller is requesting information from all of the nodes on the network. When this is triggered, all awake nodes have been queried and sleeping nodes will be queried when they awake.
```yaml
- alias: Z-Wave network is ready
@@ -127,7 +127,7 @@ Home Assistant will trigger a event when the Z-Wave network is ready for use. Be
#### {% linkable_title zwave.network_start %}
-Home Assistant will trigger a event when the Z-Wave network is set up to be started.
+Home Assistant will trigger an event when the Z-Wave network is set up to be started.
```yaml
- alias: Z-Wave network is starting
@@ -138,7 +138,7 @@ Home Assistant will trigger a event when the Z-Wave network is set up to be star
#### {% linkable_title zwave.network_stop %}
-Home Assistant will trigger a event when the Z-Wave network stopping.
+Home Assistant will trigger an event when the Z-Wave network is stopping.
```yaml
- alias: Z-Wave network is stopping
@@ -148,7 +148,7 @@ Home Assistant will trigger a event when the Z-Wave network stopping.
```
#### {% linkable_title zwave.node_event %}
-Home Assistant will trigger a event when command_class_basic changes value on a node. This can be virtually anything, so tests have to be made to determine what value equals what. You can use this for automations.
+Home Assistant will trigger an event when command_class_basic changes value on a node. This can be virtually anything, so tests have to be made to determine what value equals what. You can use this for automations.
Example:
@@ -166,7 +166,7 @@ The *object_id* and *basic_level* of all triggered events can be seen in the con
#### {% linkable_title zwave.scene_activated %}
-Some devices can also trigger scene activation events, which can be used in automation scripts (for example the press of a button on a wall switch):
+Some devices can also trigger scene activation events, which can be used in automation scripts (for example, the press of a button on a wall switch):
```yaml
# Example configuration.yaml automation entry
@@ -190,7 +190,7 @@ The `zwave` component exposes multiple services to help maintain the network.
| ------- | ----------- |
| add_node | Put the Z-Wave controller in inclusion mode. Allows one to add a new device to the Z-Wave network.|
| add_node_secure | Put the Z-Wave controller in secure inclusion mode. Allows one to add a new device with secure communications to the Z-Wave network. |
-| cancel_command | Cancels a running Z-Wave command. If you have started a add_node or remove_node command, and decides you are not going to do it, then this must be used to stop the inclusion/exclusion command. |
+| cancel_command | Cancels a running Z-Wave command. If you have started a add_node or remove_node command, and decide you are not going to do it, then this must be used to stop the inclusion/exclusion command. |
| change_association | Add or remove an association in the Z-Wave network |
| heal_network | Tells the controller to "heal" the Z-Wave network. Basically asks the nodes to tell the controller all of their neighbors so the controller can refigure out optimal routing. |
| print_config_parameter | Prints Z-Wave node's config parameter value to the log. |
@@ -200,16 +200,16 @@ The `zwave` component exposes multiple services to help maintain the network.
| remove_node | Put the Z-Wave controller in exclusion mode. Allows one to remove a device from the Z-Wave network.|
| rename_node | Sets a node's name. Requires a `node_id` and `name` field. |
| rename_value | Sets a value's name. Requires a `node_id`, `value_id`, and `name` field. |
-| remove_failed_node | Remove a failed node from the network. The Node should be on the Controllers Failed Node List, otherwise this command will fail.|
-| replace_failed_node | Replace a failed device with another. If the node is not in the controller's failed nodes list, or the node responds, this command will fail.|
+| remove_failed_node | Remove a failed node from the network. The Node should be on the controller's Failed Node List, otherwise this command will fail.|
+| replace_failed_node | Replace a failed device with another. If the node is not in the controller's Failed Node List, or the node responds, this command will fail.|
| reset_node_meters | Reset a node's meter values. Only works if the node supports this. |
-| set_config_parameter | Let's the user set a config parameter to a node. NOTE: Use string for list values. For all others use integer. |
-| soft_reset | Tells the controller to do a "soft reset". This is not supposed to lose any data, but different controllers can behave differently to a "soft reset" command.|
+| set_config_parameter | Lets the user set a config parameter to a node. NOTE: Use string for list values. For all others use integer. |
+| soft_reset | Tells the controller to do a "soft reset." This is not supposed to lose any data, but different controllers can behave differently to a "soft reset" command.|
| start_network | Starts the Z-Wave network.|
| stop_network | Stops the Z-Wave network.|
-| test_network | Tells the controller to send no-op commands to each node and measure the time for a response. In theory, this can also bring back nodes which have been marked "presumed dead".|
+| test_network | Tells the controller to send no-op commands to each node and measure the time for a response. In theory, this can also bring back nodes which have been marked "presumed dead."|
-The `soft_reset` and `heal_network` commands can be used as part of an automation script to help keep a Z-Wave network running reliably as shown in the example below. By default, Home Assistant will run a `heal_network` at midnight. This is a configuration option for the `zwave` component, the option defaults to `true` but can be disabled by setting `autoheal` to false. Using the `soft_reset` function with some Z-Wave controllers can cause the Z-Wave network to hang. If you're having issues with your Z-Wave network try disabling this automation.
+The `soft_reset` and `heal_network` commands can be used as part of an automation script to help keep a Z-Wave network running reliably as shown in the example below. By default, Home Assistant will run a `heal_network` at midnight. This is a configuration option for the `zwave` component. The option defaults to `true` but can be disabled by setting `autoheal` to false. Using the `soft_reset` function with some Z-Wave controllers can cause the Z-Wave network to hang. If you're having issues with your Z-Wave network, try disabling this automation.
```yaml
# Example configuration.yaml automation entry
From bf118bf6b189dccf9c4fffd4027b076dccffd5b1 Mon Sep 17 00:00:00 2001
From: Paulus Schoutsen
Date: Fri, 4 Aug 2017 08:57:13 -0700
Subject: [PATCH 17/57] Update secrets.markdown
---
source/_docs/configuration/secrets.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/_docs/configuration/secrets.markdown b/source/_docs/configuration/secrets.markdown
index c07e3338fba..f28edd3433a 100644
--- a/source/_docs/configuration/secrets.markdown
+++ b/source/_docs/configuration/secrets.markdown
@@ -92,7 +92,7 @@ Please enter password for encrypted keyring:
If you are using the Python Keyring, [autostarting](/getting-started/autostart/) of Home Assistant will no longer work.
-### {% linkable_title Storing passwords in a keyring managed by your OS %}
+### {% linkable_title Storing passwords securely in AWS %}
Using [Credstash](https://github.com/fugue/credstash) is an alternative way to `secrets.yaml`. They can be managed from the command line via the credstash script.
From a9c4500c446116411ed08b84eaa76dbb33e5847b Mon Sep 17 00:00:00 2001
From: Fabian Affolter
Date: Fri, 4 Aug 2017 20:00:09 +0200
Subject: [PATCH 18/57] Add screenshot of first start
---
source/hassio/installation.markdown | 5 +++++
.../images/hassio/screenshots/first-start.png | Bin 0 -> 43097 bytes
2 files changed, 5 insertions(+)
create mode 100644 source/images/hassio/screenshots/first-start.png
diff --git a/source/hassio/installation.markdown b/source/hassio/installation.markdown
index a201a64793a..416c7794c69 100644
--- a/source/hassio/installation.markdown
+++ b/source/hassio/installation.markdown
@@ -20,6 +20,11 @@ Hass.io images are available for all available Raspberry Pi and Intel NUC platfo
- Optional - Setup the WiFi or static IP: On the SD-card, edit the `system-connections/resin-sample` file and follow the [ResinOS howto][resinos-network].
- Insert SD card to Raspberry Pi and turn it on. On first boot, it downloads the latest version of Home Assistant which takes ~20 minutes (slower/faster depending on the platform).
- You will be able to reach your installation at [http://hassio.local:8123][local].
+
+
+
+
+
- Enable either the [Samba add-on][samba] or the [SSH add-on][ssh] to manage your configuration.
diff --git a/source/images/hassio/screenshots/first-start.png b/source/images/hassio/screenshots/first-start.png
new file mode 100644
index 0000000000000000000000000000000000000000..a8166e119ccca00a1b51fb37e6f3a5aa8b274f20
GIT binary patch
literal 43097
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%0Dj~M8EFBc-`~7>SaiPG;k2l8NQkg>NgCXR
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