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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 Yf^RkscNJERvy$+~NS~sYr)wAbKmV>1R{#J2 literal 0 HcmV?d00001 From 5e00e31289bd8d6544dd0eb987681ba181c780e9 Mon Sep 17 00:00:00 2001 From: waxhell Date: Fri, 4 Aug 2017 11:57:54 -0700 Subject: [PATCH 19/57] Update device-specific.markdown (#3119) Use entity_ids for Minimote example rather than depreciated object_id --- source/_docs/z-wave/device-specific.markdown | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/source/_docs/z-wave/device-specific.markdown b/source/_docs/z-wave/device-specific.markdown index 5437d4b6014..bfff41a6d80 100644 --- a/source/_docs/z-wave/device-specific.markdown +++ b/source/_docs/z-wave/device-specific.markdown @@ -56,7 +56,7 @@ Here's a handy configuration for the Aeon Labs Minimote that defines all possibl platform: event event_type: zwave.scene_activated event_data: - object_id: aeon_labs_minimote_1 + entity_id: zwave.aeon_labs_minimote_1 scene_id: 1 - alias: Minimote Button 1 Held @@ -64,7 +64,7 @@ Here's a handy configuration for the Aeon Labs Minimote that defines all possibl platform: event event_type: zwave.scene_activated event_data: - object_id: aeon_labs_minimote_1 + entity_id: zwave.aeon_labs_minimote_1 scene_id: 2 - alias: Minimote Button 2 Pressed @@ -72,7 +72,7 @@ Here's a handy configuration for the Aeon Labs Minimote that defines all possibl platform: event event_type: zwave.scene_activated event_data: - object_id: aeon_labs_minimote_1 + entity_id: zwave.aeon_labs_minimote_1 scene_id: 3 - alias: Minimote Button 2 Held @@ -80,7 +80,7 @@ Here's a handy configuration for the Aeon Labs Minimote that defines all possibl platform: event event_type: zwave.scene_activated event_data: - object_id: aeon_labs_minimote_1 + entity_id: zwave.aeon_labs_minimote_1 scene_id: 4 - alias: Minimote Button 3 Pressed @@ -88,7 +88,7 @@ Here's a handy configuration for the Aeon Labs Minimote that defines all possibl platform: event event_type: zwave.scene_activated event_data: - object_id: aeon_labs_minimote_1 + entity_id: zwave.aeon_labs_minimote_1 scene_id: 5 - alias: Minimote Button 3 Held @@ -96,15 +96,15 @@ Here's a handy configuration for the Aeon Labs Minimote that defines all possibl platform: event event_type: zwave.scene_activated event_data: - object_id: aeon_labs_minimote_1 + entity_id: zwave.aeon_labs_minimote_1 scene_id: 6 - alias: Minimote Button 4 Pressed trigger: platform: event event_type: zwave.scene_activated - event_data: - object_id: aeon_labs_minimote_1 + entity_data: + entity_id: zwave.aeon_labs_minimote_1 scene_id: 7 - alias: Minimote Button 4 Held @@ -112,6 +112,6 @@ Here's a handy configuration for the Aeon Labs Minimote that defines all possibl platform: event event_type: zwave.scene_activated event_data: - object_id: aeon_labs_minimote_1 + entity_id: zwave.aeon_labs_minimote_1 scene_id: 8 ``` From 7e92e1a8c953cb9500b330ed2d6a19dc433ef1a9 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 4 Aug 2017 21:09:41 +0200 Subject: [PATCH 20/57] Add snips.ai article --- source/help/index.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/help/index.markdown b/source/help/index.markdown index 1adcefe874b..c8caa14fef9 100644 --- a/source/help/index.markdown +++ b/source/help/index.markdown @@ -48,6 +48,7 @@ Don't miss the regular [Home Assistant podcasts](https://hasspodcast.io/). - [Episode #122: Home Assistant: Pythonic Home Automation](https://talkpython.fm/episodes/show/122/home-assistant-pythonic-home-automation) - July 2017 - [Why can't we have the Internet of Nice Things?](https://opensource.com/article/17/7/home-automation-primer) - July 2017 +- [Integrating Snips with Home Assistant](https://medium.com/snips-ai/integrating-snips-with-home-assistant-314723645c77) - June 2017 - [Jupiter Broadcasting - No Privacy Compromise Home Automation](http://www.jupiterbroadcasting.com/115566/no-privacy-compromise-home-automation/) - June 2017 - [Castálio Podcast - Episódio 102: Marcelo Mello - Red Hat e Automação Residencial com Home Assistant](https://youtu.be/hZq8ucpzjCs) - May 2017 - [Paulus Schoutsen and Home Assistant - Episode 8](http://codepop.com/open-sourcecraft/episodes/paulus-schoutsen/) - March 2017 From 387b486865782c139aad5e01325ce7ba395e9510 Mon Sep 17 00:00:00 2001 From: Georgi Kirichkov Date: Sat, 5 Aug 2017 01:06:29 +0300 Subject: [PATCH 21/57] Updates xiaomi component page (#3138) Adds example of the usage of "interface" option Typo fixes --- source/_components/xiaomi.markdown | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/source/_components/xiaomi.markdown b/source/_components/xiaomi.markdown index 09e41b74706..d87d7167faa 100644 --- a/source/_components/xiaomi.markdown +++ b/source/_components/xiaomi.markdown @@ -61,7 +61,7 @@ xiaomi: ``` -Multiple Gateway +Multiple Gateways ```yaml # 12 characters mac can be obtained from the gateway. @@ -73,12 +73,26 @@ xiaomi: key: xxxxxxxxxxxxxxxx ``` + + +Search for gateways on specific interface + +```yaml +# 12 characters mac can be obtained from the gateway. +xiaomi: + interface: '192.168.0.1' + gateways: + - mac: xxxxxxxxxxxx + key: xxxxxxxxxxxxxxxx +``` + + Configuration variables: - **mac** (*Optional*): The MAC of your gateway. Required if you have more than one. - **key** (*Optional*): The key of your gateway. Required if you also want to control lights and switches; sensors and binary sensors will still work. - **discovery_retry** (*Optional*): Amount of times Home Assitant should try to reconnect to the Xiaomi Gateway. Default is 3. -- **interface** (*Optional*): Which network interface to use. Default to any. +- **interface** (*Optional*): Which network interface to use. Defaults to any. ## {% linkable_title Services %} From 298ece92c5663c29c040e494bdbd37d0935521f6 Mon Sep 17 00:00:00 2001 From: Leon99 Date: Sat, 5 Aug 2017 17:16:02 +1000 Subject: [PATCH 22/57] Fix spelling (#3140) --- source/_components/media_extractor.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/media_extractor.markdown b/source/_components/media_extractor.markdown index 3875579d3c0..0069c95ddab 100644 --- a/source/_components/media_extractor.markdown +++ b/source/_components/media_extractor.markdown @@ -13,7 +13,7 @@ ha_release: 0.49 --- -The `media_extractor` component gets an stream URL and send it to a media player entity. This component can extract entity specific streams if configured accordingly. +The `media_extractor` component gets a stream URL and sends it to a media player entity. This component can extract entity specific streams if configured accordingly.

Media extractor doesn't transcode streams, it just tries to find stream that match requested query.

From 053e6583077d058895bb50d2756b94488b9f9b8e Mon Sep 17 00:00:00 2001 From: Ludeeus Date: Sat, 5 Aug 2017 09:17:50 +0200 Subject: [PATCH 23/57] Changed name of the theme in automation example (#3139) It was a little confusing, when pink is used in automation example, and the theme_name is happy. --- source/_components/frontend.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/frontend.markdown b/source/_components/frontend.markdown index 47beb0a6f7e..d2273d950c9 100644 --- a/source/_components/frontend.markdown +++ b/source/_components/frontend.markdown @@ -48,5 +48,5 @@ automation: action: service: frontend.set_theme data: - name: pink + name: happy ``` From 5614baaa742f250d1f9a544b65b9887ab1919738 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 5 Aug 2017 09:21:29 +0200 Subject: [PATCH 24/57] Minor updates --- source/_components/frontend.markdown | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/source/_components/frontend.markdown b/source/_components/frontend.markdown index d2273d950c9..0fa79d15b31 100644 --- a/source/_components/frontend.markdown +++ b/source/_components/frontend.markdown @@ -18,11 +18,14 @@ This offers the official frontend to control Home Assistant. frontend: ``` -#### Themes +### {% linkable_title Themes %} + Starting with version 0.49 you can define themes: Example: + ```yaml +# Example configuration.yaml entry frontend: themes: happy: @@ -31,13 +34,15 @@ frontend: primary-color: blue ``` -The example above defined two themes named `happy` and `sad`. For each theme you can set values for CSS variables. For a partial list of variables used by the main frontend see [ha-style.html](https://github.com/home-assistant/home-assistant-polymer/blob/master/src/resources/ha-style.html) +The example above defined two themes named `happy` and `sad`. For each theme you can set values for CSS variables. For a partial list of variables used by the main frontend see [ha-style.html](https://github.com/home-assistant/home-assistant-polymer/blob/master/src/resources/ha-style.html). There are 2 themes-related services: - - `frontend.reload_themes` - reloads theme configuration from yaml. - - `frontend.set_theme(name)` - sets backend-preferred theme name. + + - `frontend.reload_themes`: reloads theme configuration from your `configuration.yaml` file. + - `frontend.set_theme(name)`: sets backend-preferred theme name. Example in automation: + ```yaml automation: - alias: 'Set theme at startup' From 3cdb28f31d741d58c8be657a6062890e091b3cb5 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 5 Aug 2017 11:48:10 +0200 Subject: [PATCH 25/57] Minimize configuration sample --- source/_components/sensor.vasttrafik.markdown | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/source/_components/sensor.vasttrafik.markdown b/source/_components/sensor.vasttrafik.markdown index 3f26d8ce5ab..787e5b237ae 100644 --- a/source/_components/sensor.vasttrafik.markdown +++ b/source/_components/sensor.vasttrafik.markdown @@ -27,10 +27,7 @@ sensor: key: XXXXXXXXXXXXXXXXXXX secret: YYYYYYYYYYYYYYYYY departures: - - name: Mot järntorget - from: Musikvägen - heading: Järntorget - delay: 10 + - from: Musikvägen ``` Configuration variables: @@ -41,6 +38,21 @@ Configuration variables: - **name** (*Optional*): Name of the route. - **from** (*Required*): The start station. - **heading** (*Optional*): Direction of the travelling. - - **delay** (*Optional*): Delay in minutes. + - **delay** (*Optional*): Delay in minutes. Defaults to 0. The data are coming from [Västtrafik](https://vasttrafik.se/). + +A full configuration example could look like this: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: vasttrafik + key: XXXXXXXXXXXXXXXXXXX + secret: YYYYYYYYYYYYYYYYY + departures: + - name: Mot järntorget + from: Musikvägen + heading: Järntorget + delay: 10 +``` From bc626e51d5a33751fb1c4f756926084c725e9ca7 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 5 Aug 2017 12:03:35 +0200 Subject: [PATCH 26/57] Aligh configuration sample with current preferred style --- source/_components/sensor.tcp.markdown | 32 +++++++++++++------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/source/_components/sensor.tcp.markdown b/source/_components/sensor.tcp.markdown index 96fb3f8e04b..0267007d9fa 100644 --- a/source/_components/sensor.tcp.markdown +++ b/source/_components/sensor.tcp.markdown @@ -55,14 +55,14 @@ You will notice that the output from the service is not just a single value (it ```yaml sensor: # Example configuration.yaml entry - platform: tcp - name: Central Heating Pressure - host: 10.0.0.127 - port: 8888 - timeout: 5 - payload: "r WaterPressure\n" - value_template: "{% raw %}{{ value.split(';')[0] }}{% endraw %}" - unit_of_measurement: Bar + - platform: tcp + name: Central Heating Pressure + host: 10.0.0.127 + port: 8888 + timeout: 5 + payload: "r WaterPressure\n" + value_template: "{% raw %}{{ value.split(';')[0] }}{% endraw %}" + unit_of_measurement: Bar ``` ### {% linkable_title hddtemp %} @@ -89,12 +89,12 @@ The entry for the `configuration.yaml` file for a `hddtemp` sensor could look li ```yaml sensor: # Example configuration.yaml entry - platform: tcp - name: HDD temperature - host: 127.0.0.1 - port: 7634 - timeout: 5 - payload: "\n" - value_template: "{% raw %}{{ value.split('|')[3] }}{% endraw %}" - unit_of_measurement: "°C" + - platform: tcp + name: HDD temperature + host: 127.0.0.1 + port: 7634 + timeout: 5 + payload: "\n" + value_template: "{% raw %}{{ value.split('|')[3] }}{% endraw %}" + unit_of_measurement: "°C" ``` From 94b1c99afad6335ec3e99c5a9c1d90c4f2d238d5 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 5 Aug 2017 13:30:10 +0200 Subject: [PATCH 27/57] Add setup details --- source/_components/sensor.supervisord.markdown | 14 ++++++++++++++ source/images/screenshots/supervisor.png | Bin 0 -> 38176 bytes 2 files changed, 14 insertions(+) create mode 100644 source/images/screenshots/supervisor.png diff --git a/source/_components/sensor.supervisord.markdown b/source/_components/sensor.supervisord.markdown index 940dfe0a0e1..4fcb8f24157 100644 --- a/source/_components/sensor.supervisord.markdown +++ b/source/_components/sensor.supervisord.markdown @@ -15,6 +15,20 @@ ha_iot_class: "Local Polling" The `supervisord` platform allows you to track the states of [Supervisord](http://supervisord.org/). +It required that you enable the HTTP feature in the `/etc/supervisord.conf` configuration file. + +```text +[inet_http_server] +port=127.0.0.1:9001 +``` + +After a restart of `supervisord` you should be able to access the web interface. If needed then this could be added as a [iFrame panel](/components/panel_iframe/). + +

+ +

+ + To use this sensor in your installation, add the following to your `configuration.yaml` file: ```yaml diff --git a/source/images/screenshots/supervisor.png b/source/images/screenshots/supervisor.png new file mode 100644 index 0000000000000000000000000000000000000000..36e71bc34e1918a4d087e89e2e4a669e8b80a467 GIT binary patch literal 38176 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 literal 0 HcmV?d00001 From 69f06bc8e2a9c337083cf5859448be155a9816dd Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 5 Aug 2017 16:06:14 +0200 Subject: [PATCH 28/57] Add intro --- source/_components/sensor.pocketcasts.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_components/sensor.pocketcasts.markdown b/source/_components/sensor.pocketcasts.markdown index 7b54f8da5b3..89d48c79f3c 100644 --- a/source/_components/sensor.pocketcasts.markdown +++ b/source/_components/sensor.pocketcasts.markdown @@ -13,6 +13,8 @@ ha_release: 0.39 ha_iot_class: "Cloud Polling" --- +The `pocketcasts` sensor platform let one monitor the podcasts at [Pocket Casts](https://play.pocketcasts.com/). + To enable this sensor, add the following lines to your `configuration.yaml`: ```yaml @@ -23,7 +25,7 @@ sensor: password: YOUR_PASSWORD ``` -Configuration options for the PocketCasts Sensor: +Configuration variables: - **username** (*Required*): The username to access the PocketCasts service. - **password** (*Required*): The password for the given username. From 6d88986c55d6afd2f5ec0b7067ba1d85ae5d599c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 5 Aug 2017 17:03:07 +0200 Subject: [PATCH 29/57] Update category --- .../_components/sensor.synologydsm.markdown | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/source/_components/sensor.synologydsm.markdown b/source/_components/sensor.synologydsm.markdown index 2953f4b016b..bf7a0af0d01 100644 --- a/source/_components/sensor.synologydsm.markdown +++ b/source/_components/sensor.synologydsm.markdown @@ -8,9 +8,9 @@ comments: false sharing: true footer: true logo: synology.png -ha_category: Sensor +ha_category: System Monitor ha_release: 0.32 -ha_iot_class: depends +ha_iot_class: "Local Polling" --- @@ -31,14 +31,6 @@ sensor: - network_up ``` -

-After booting Home Assistant it can take up to 15 minutes for the sensors to show up. This is due to the fact that sensors are created after Home Assistant has fully been initialized. -

- -

-This sensor will wake up your Synology NAS if it's in hibernation mode. -

- Configuration variables: - **host** (*Required*): The IP address of the Synology NAS to monitor @@ -79,7 +71,15 @@ Configuration variables: - **volume_disk_temp_avg**: Displays the average temperature of all disks in the volume (creates a new entry for each volume). - **volume_disk_temp_max**: Displays the maximum temperature of all disks in the volume (creates a new entry for each volume). -Separate User Configuration: +

+After booting Home Assistant it can take up to 15 minutes for the sensors to show up. This is due to the fact that sensors are created after Home Assistant has fully been initialized. +

+ +

+This sensor will wake up your Synology NAS if it's in hibernation mode. +

+ +## {% linkable_title Separate User Configuration %} Due to the nature of the Synology DSM API it is required to grant the user admin rights. This is related to the fact that utilization information is stored in the core module. From c8889d7872f5c048cdff1303af68f7a77145337e Mon Sep 17 00:00:00 2001 From: Rick Rubino Date: Sat, 5 Aug 2017 16:04:54 -0700 Subject: [PATCH 30/57] Update Docs (#3143) Fixed grammar for better readability --- source/_addons/lets_encrypt.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_addons/lets_encrypt.markdown b/source/_addons/lets_encrypt.markdown index b8004b9d2b2..976fbf43325 100644 --- a/source/_addons/lets_encrypt.markdown +++ b/source/_addons/lets_encrypt.markdown @@ -10,10 +10,10 @@ footer: true featured: true --- -Setup and manage a [Let's Encrypt](https://letsencrypt.org/) certificate. This will create a certificate on the first run and renew it if the certificate is expiring in the next 30 days. +Setup and manage a [Let's Encrypt](https://letsencrypt.org/) certificate. This will create a certificate on the first run and will auto-renew if the certificate is within 30 days of expiration.

-This add-on need port 80/443 to verify the certificate request, please stop all add-ons they use also this ports, otherwise you can not start this add-on. +This add-on need port 80/443 to verify the certificate request, please stop all add-ons that also use these ports, or you may not be able to start this add-on.

```json From d79d5855367adc83e6a34b71f648170945b1b41d Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 6 Aug 2017 10:09:13 +0200 Subject: [PATCH 31/57] Add note for Hass.io users (#3137) --- source/_components/device_tracker.nmap_tracker.markdown | 4 ++++ source/_components/ffmpeg.markdown | 6 +++++- source/_components/hdmi_cec.markdown | 6 +++++- source/_components/image_processing.openalpr_cloud.markdown | 1 + source/_components/image_processing.opencv.markdown | 2 -- source/_components/image_processing.seven_segments.markdown | 4 ++++ source/_components/tradfri.markdown | 4 ++++ 7 files changed, 23 insertions(+), 4 deletions(-) diff --git a/source/_components/device_tracker.nmap_tracker.markdown b/source/_components/device_tracker.nmap_tracker.markdown index 26e4a3fabd6..dcd5841edce 100644 --- a/source/_components/device_tracker.nmap_tracker.markdown +++ b/source/_components/device_tracker.nmap_tracker.markdown @@ -17,6 +17,10 @@ As an alternative to the router-based device tracking, it is possible to directl If you're on Debian or Ubuntu, you might have to install the packages for `arp` and `nmap`. Do so by running `$ sudo apt-get install net-tools nmap`. On a Fedora host run `$ sudo dnf -y install nmap`. +

+If you are using [Hass.io](/hassio/) then just move forward to the configuration as all requirements are already fullfilled. +

+ Host detection is done via Nmap's "fast scan" (`-F`) of the most frequently used 100 ports, with a host timeout of 5 seconds. To use this device tracker in your installation, add the following to your `configuration.yaml` file: diff --git a/source/_components/ffmpeg.markdown b/source/_components/ffmpeg.markdown index caa322b587b..e28669359a4 100644 --- a/source/_components/ffmpeg.markdown +++ b/source/_components/ffmpeg.markdown @@ -11,12 +11,16 @@ logo: ffmpeg.png ha_category: Hub --- -The FFmpeg component allows other Home Assistant components to process video and audio streams. This component supports all FFmpeg versions since 3.0.0; if you have a older version, please update. +The `ffmpeg` component allows other Home Assistant components to process video and audio streams. This component supports all FFmpeg versions since 3.0.0; if you have a older version, please update.

You need the `ffmpeg` binary in your system path. On Debian 8 or Raspbian (Jessie) you can install it from [debian-backports](https://backports.debian.org/Instructions/). If you want [hardware acceleration](https://trac.ffmpeg.org/wiki/HWAccelIntro) support on a Raspberry Pi, you will need to build from source by yourself. Windows binaries are available on the [FFmpeg](http://www.ffmpeg.org/) website.

+

+If you are using [Hass.io](/hassio/) then just move forward to the configuration as all requirements are already fullfilled. +

+ To set it up, add the following information to your `configuration.yaml` file: ```yaml diff --git a/source/_components/hdmi_cec.markdown b/source/_components/hdmi_cec.markdown index 18b4f7b12d9..0bb62b4ead4 100644 --- a/source/_components/hdmi_cec.markdown +++ b/source/_components/hdmi_cec.markdown @@ -13,7 +13,7 @@ ha_release: 0.23 ha_iot_class: "Local Push" --- -The HDMI CEC component provides services that allow selecting the active device, powering on all devices, setting all devices to standby and creates switch entites for HDMI devices. Devices are defined in the configuration file by associating HDMI port number and a device name. Connected devices that provide further HDMI ports, such as Soundbars and AVRs are also supported. Devices are listed from the perspective of the CEC-enabled Home Assistant device. Any connected device can be listed, regardless of whether it supports CEC. Ideally the HDMI port number on your device will map correctly the CEC physical address. If it does not, use `cec-client` (part of the `libcec` package) to listen to traffic on the CEC bus and discover the correct numbers. +The `hdmi_cec` component provides services that allow selecting the active device, powering on all devices, setting all devices to standby and creates switch entites for HDMI devices. Devices are defined in the configuration file by associating HDMI port number and a device name. Connected devices that provide further HDMI ports, such as Soundbars and AVRs are also supported. Devices are listed from the perspective of the CEC-enabled Home Assistant device. Any connected device can be listed, regardless of whether it supports CEC. Ideally the HDMI port number on your device will map correctly the CEC physical address. If it does not, use `cec-client` (part of the `libcec` package) to listen to traffic on the CEC bus and discover the correct numbers. ## {% linkable_title CEC Setup %} @@ -25,6 +25,10 @@ The computer running Home Assistant must support CEC, and of course be connected [libcec](https://github.com/Pulse-Eight/libcec) must be installed for this component to work. Follow the installation instructions for your environment, provided at the link. `libcec` installs Python 3 bindings by default as a system Python module. If you are running Home Assistant in a [Python virtual environment](/getting-started/installation-virtualenv/), make sure it can access the system module, by either symlinking it or using the `--system-site-packages` flag. +

+If you are using [Hass.io](/hassio/) then just move forward to the configuration as all requirements are already fullfilled. +

+ #### {% linkable_title Symlinking into virtual environment %} Create a symlink to the `cec` installation. Keep in mind different installation methods will result in different locations of cec. diff --git a/source/_components/image_processing.openalpr_cloud.markdown b/source/_components/image_processing.openalpr_cloud.markdown index 7049a3e0ed9..3a13097c872 100644 --- a/source/_components/image_processing.openalpr_cloud.markdown +++ b/source/_components/image_processing.openalpr_cloud.markdown @@ -28,6 +28,7 @@ image_processing: source: - entity_id: camera.garage ``` + Configuration variables: - **region** (*Required*): Country or region. List of supported [values](https://github.com/openalpr/openalpr/tree/master/runtime_data/config). diff --git a/source/_components/image_processing.opencv.markdown b/source/_components/image_processing.opencv.markdown index 286f5c87c9d..29df3a06d84 100644 --- a/source/_components/image_processing.opencv.markdown +++ b/source/_components/image_processing.opencv.markdown @@ -17,8 +17,6 @@ ha_release: 0.47 Some pre-defined classifiers can be found here: https://github.com/opencv/opencv/tree/master/data -### {% linkable_title Configuration %} - To setup OpenCV with Home Assistant, add the following section to your `configuration.yaml` file: ```yaml diff --git a/source/_components/image_processing.seven_segments.markdown b/source/_components/image_processing.seven_segments.markdown index e56eda3bdd5..35b286e0e12 100644 --- a/source/_components/image_processing.seven_segments.markdown +++ b/source/_components/image_processing.seven_segments.markdown @@ -17,6 +17,10 @@ ha_iot_class: "Local Polling" The `seven_segments` image processing platform allows you to read physical seven segments displays through Home Assistant. [`ssocr`](https://www.unix-ag.uni-kl.de/~auerswal/ssocr/) is used to extract the value shown on the display which is observed by a [camera](/components/camera/). `ssocr` need to be available on your system. Check the installation instruction for Fedora below or use `$ sudo apt-get install ssocr` on a Debian-based system: +

+If you are using [Hass.io](/hassio/) then just move forward to the configuration as all requirements are already fullfilled. +

+ ```bash $ sudo dnf -y install imlib2-devel $ git clone https://github.com/auerswal/ssocr.git diff --git a/source/_components/tradfri.markdown b/source/_components/tradfri.markdown index 7145cedc4f3..512a427eebb 100644 --- a/source/_components/tradfri.markdown +++ b/source/_components/tradfri.markdown @@ -18,6 +18,10 @@ The `tradfri` component supports for the IKEA Trådfri (Tradfri) gateway. The ga For this to work, you need to install a modified lib-coap library. +

+If you are using [Hass.io](/hassio/) then just move forward to the configuration as all requirements are already fullfilled. +

+ Linux: ```bash From a6037f35959da01902288b651cb98b4599ca394e Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 6 Aug 2017 12:17:28 -0700 Subject: [PATCH 32/57] Update sensor.wunderground.markdown --- source/_components/sensor.wunderground.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.wunderground.markdown b/source/_components/sensor.wunderground.markdown index 935badd31e5..e7017504e37 100644 --- a/source/_components/sensor.wunderground.markdown +++ b/source/_components/sensor.wunderground.markdown @@ -125,7 +125,7 @@ in the `_1h_` part of the sensor name with `1` to `36`. E.g. `weather_24h` will ```yaml sensor: - platform: wunderground - - api_key: your_api_key + api_key: your_api_key monitored_conditions: - weather_1d_metric - weather_1n_metric From 2e1d5d48eaa402ea5d0032e88ae80f7c5e0cad26 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 7 Aug 2017 00:03:54 +0200 Subject: [PATCH 33/57] Update title --- source/_components/sensor.fritzbox_callmonitor.markdown | 2 +- source/_components/sensor.fritzbox_netmonitor.markdown | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/sensor.fritzbox_callmonitor.markdown b/source/_components/sensor.fritzbox_callmonitor.markdown index 7266f9943fa..157e338e43b 100644 --- a/source/_components/sensor.fritzbox_callmonitor.markdown +++ b/source/_components/sensor.fritzbox_callmonitor.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "FRITZ!Box" +title: "FRITZ!Box Call Monitor" description: "Instructions how to integrate a phone call monitor for AVM FRITZ!Box routers into Home Assistant." date: 2016-08-13 15:00 sidebar: true diff --git a/source/_components/sensor.fritzbox_netmonitor.markdown b/source/_components/sensor.fritzbox_netmonitor.markdown index 24e37e62330..d6c8a3e9842 100644 --- a/source/_components/sensor.fritzbox_netmonitor.markdown +++ b/source/_components/sensor.fritzbox_netmonitor.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "FRITZ!Box" +title: "FRITZ!Box Net Monitor" description: "Instructions how to integrate an AVM FRITZ!Box monitor into Home Assistant." date: 2017-01-17 22:00 sidebar: true From 6942fba15934fc7e6ca9662369098ba969eff6ef Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 6 Aug 2017 21:19:14 -0700 Subject: [PATCH 34/57] Update wake_on_lan.markdown --- source/_components/wake_on_lan.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/wake_on_lan.markdown b/source/_components/wake_on_lan.markdown index e4a1e5a9f49..bcf59cd38b4 100644 --- a/source/_components/wake_on_lan.markdown +++ b/source/_components/wake_on_lan.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: ethernet.png -ha_category: Hub +ha_category: Utility ha_release: "0.49" ha_iot_class: "Local Push" --- From 7266f253216562d7f7b65449e0490ebb257cec33 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 6 Aug 2017 21:19:50 -0700 Subject: [PATCH 35/57] Update browser.markdown --- source/_components/browser.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/browser.markdown b/source/_components/browser.markdown index 78671687abd..c5fa4b424eb 100644 --- a/source/_components/browser.markdown +++ b/source/_components/browser.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: home-assistant.png -ha_category: Other +ha_category: Utility --- From 2e132f95f83e3086a87b8b9bb1b31b495a083288 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 6 Aug 2017 21:20:15 -0700 Subject: [PATCH 36/57] Update logger.markdown --- source/_components/logger.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/logger.markdown b/source/_components/logger.markdown index 09cb599aca5..e04e44511b0 100644 --- a/source/_components/logger.markdown +++ b/source/_components/logger.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: home-assistant.png -ha_category: "Other" +ha_category: "Utility" --- The logger component lets you define the level of logging activities in Home Assistant. From 75a829676a5f751a8c8ec2aa003bfbd3aed82326 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 6 Aug 2017 22:26:16 -0700 Subject: [PATCH 37/57] Update service-calls.markdown --- source/_docs/scripts/service-calls.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/scripts/service-calls.markdown b/source/_docs/scripts/service-calls.markdown index 58ee3b4b924..b1b18333403 100644 --- a/source/_docs/scripts/service-calls.markdown +++ b/source/_docs/scripts/service-calls.markdown @@ -47,7 +47,7 @@ You can use [templating] support to dynamically choose which service to call. Fo ```yaml service_template: > - {% raw %}{% if states.sensor.temperature | float > 15 %} + {% raw %}{% if states.sensor.temperature.state | float > 15 %} switch.turn_on {% else %} switch.turn_off From 333ab25a27f4b411868465ee459ae0cce08efc35 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 7 Aug 2017 23:07:29 -0700 Subject: [PATCH 38/57] Update scripts.markdown --- source/_docs/scripts.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/scripts.markdown b/source/_docs/scripts.markdown index d6d8ed508f5..e8688e04286 100644 --- a/source/_docs/scripts.markdown +++ b/source/_docs/scripts.markdown @@ -81,7 +81,7 @@ Wait until some things are complete. We support at the moment `wait_template` fo ```yaml # wait until media player have stop the playing -wait_template: {% raw %}"{{ states.media_player.floor.states == 'stop' }}"{% endraw %} +wait_template: {% raw %}"{{ states.media_player.floor.state == 'stop' }}"{% endraw %} ``` ```yaml From 414f6e7585340df51cf99b745b22cd0a9ea73655 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 8 Aug 2017 13:10:30 +0200 Subject: [PATCH 39/57] Make note a warning --- source/_components/media_player.denonavr.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/media_player.denonavr.markdown b/source/_components/media_player.denonavr.markdown index e88156d613f..5fba91daf5e 100644 --- a/source/_components/media_player.denonavr.markdown +++ b/source/_components/media_player.denonavr.markdown @@ -31,7 +31,7 @@ Supported devices: - Other Denon AVR receivers (untested) - Marantz receivers (experimental) -
+
 If you have something else using the IP controller for your Denon AVR 3808CI, such as your URC controller, it will not work! There is either a bug or security issue with some models where only one device could be controlling the IP functionality.
 
From 1f868359642a9b493f0334defb0d2586675cbe4d Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 8 Aug 2017 21:24:39 +0200 Subject: [PATCH 40/57] Update addon_config.markdown --- source/developers/hassio/addon_config.markdown | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/developers/hassio/addon_config.markdown b/source/developers/hassio/addon_config.markdown index be9876ffd0d..5de31e29c47 100644 --- a/source/developers/hassio/addon_config.markdown +++ b/source/developers/hassio/addon_config.markdown @@ -103,10 +103,12 @@ The config for an add-on is stored in `config.json`. | boot | yes | `auto` by system and manual or only `manual` | ports | no | Network ports to expose from the container. Format is `"container-port/type": host-port`. | host_network | no | If that is True, the add-on run on host network. -| devices | no | Device list to map into add-on. Format is: `::`. i.e. `/dev/ttyAMA0:/dev/ttyAMA0:rwm` -| privileged | no | Privilege for access to hardware/system. Available access: `NET_ADMIN`, `SYS_ADMIN` +| devices | no | Device list to map into add-on. Format is: `::`. i.e. `/dev/ttyAMA0:/dev/ttyAMA0:rwm` +| hassio_api | no | This add-on can access to hass.io REST API. It set the host alias `hassio`. +| privileged | no | Privilege for access to hardware/system. Available access: `NET_ADMIN`, `SYS_ADMIN`, `SYS_RAWIO` | map | no | List of maps for additional hass.io folders. Possible values: `config`, `ssl`, `addons`, `backup`, `share`. Default it map it `ro`, you can change that if you add a ":rw" at the end of name. | environment | no | A dict of environment variable to run add-on. +| audio | no | Mark this add-on to use internal audio system. Environment is `ALSA_INPUT` and `ALSA_OUTPUT` to access the internal information for alsa. | options | yes | Default options value of the add-on | schema | yes | Schema for options value of the add-on. It can be `False` to disable schema validation and use custom options. | image | no | For use dockerhub. From 25392d7779ea4436bf7f42f536ef7eeaf7675910 Mon Sep 17 00:00:00 2001 From: ashev Date: Tue, 8 Aug 2017 23:12:08 +0300 Subject: [PATCH 41/57] Misstyping in the title (#3152) --- source/_components/sensor.london_underground.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.london_underground.markdown b/source/_components/sensor.london_underground.markdown index ea849275426..45c7cce409b 100644 --- a/source/_components/sensor.london_underground.markdown +++ b/source/_components/sensor.london_underground.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "London Undergound" +title: "London Underground" description: "Display the current status of London underground & overground lines within Home Assistant." date: 2017-07-15 18:45 sidebar: true From 6eb14c27a4ac16e511587342fae5d8e8a57e913e Mon Sep 17 00:00:00 2001 From: Niklas Date: Tue, 8 Aug 2017 22:13:20 +0200 Subject: [PATCH 42/57] wrong quotes (#3153) fix "Error parsing JSON: SyntaxError: Unexpected token ' in JSON at position 1" (wrong quotes) --- source/_components/apple_tv.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/apple_tv.markdown b/source/_components/apple_tv.markdown index 2d01f193f42..4adef1bf14a 100644 --- a/source/_components/apple_tv.markdown +++ b/source/_components/apple_tv.markdown @@ -110,7 +110,7 @@ then device authentication is required. Press the icon in the upper left corner -Select `apple_tv` as domain, `apple_tv_authenticate` as service and enter `{'entity_id': 'XXX'}` into "Service Data", but replace XXX with the entity id of your device (e.g. `media_player.apple_tv`). Press the button and hopefully you are presented with an input dialog asking for a pin code: +Select `apple_tv` as domain, `apple_tv_authenticate` as service and enter `{"entity_id": "XXX"}` into "Service Data", but replace XXX with the entity id of your device (e.g. `media_player.apple_tv`). Press the button and hopefully you are presented with an input dialog asking for a pin code: From c0f41511e2eb7ce97f15ed3e21ca82f33033cf89 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 8 Aug 2017 13:51:17 +0200 Subject: [PATCH 43/57] Fix configuration sample --- source/_components/sensor.command_line.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/sensor.command_line.markdown b/source/_components/sensor.command_line.markdown index 6bf2172cfcb..9da2a67b6e2 100644 --- a/source/_components/sensor.command_line.markdown +++ b/source/_components/sensor.command_line.markdown @@ -63,6 +63,7 @@ Thanks to the [`proc`](https://en.wikipedia.org/wiki/Procfs) file system, variou ```yaml # Example configuration.yaml entry +sensor: - platform: command_line name: CPU Temperature command: "cat /sys/class/thermal/thermal_zone0/temp" From 7ecb20f180a5b6cf1780d0c0d93943da4d96ca02 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 9 Aug 2017 08:02:53 +0200 Subject: [PATCH 44/57] Revert "Add screenshot of first start" This reverts commit a9c4500c446116411ed08b84eaa76dbb33e5847b. --- source/hassio/installation.markdown | 5 ----- .../images/hassio/screenshots/first-start.png | Bin 43097 -> 0 bytes 2 files changed, 5 deletions(-) delete mode 100644 source/images/hassio/screenshots/first-start.png diff --git a/source/hassio/installation.markdown b/source/hassio/installation.markdown index 416c7794c69..a201a64793a 100644 --- a/source/hassio/installation.markdown +++ b/source/hassio/installation.markdown @@ -20,11 +20,6 @@ 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 deleted file mode 100644 index a8166e119ccca00a1b51fb37e6f3a5aa8b274f20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43097 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%0Dj~M8EFBc-`~7>SaiPG;k2l8NQkg>NgCXR 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 Yf^RkscNJERvy$+~NS~sYr)wAbKmV>1R{#J2 From 21b9881536a7f932deb39d1542445ce7f9e27b92 Mon Sep 17 00:00:00 2001 From: Andrew Cockburn Date: Wed, 9 Aug 2017 14:24:11 -0400 Subject: [PATCH 45/57] Update appdaemon.markdown --- source/_docs/ecosystem/appdaemon.markdown | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/source/_docs/ecosystem/appdaemon.markdown b/source/_docs/ecosystem/appdaemon.markdown index 5e3d6bb1c32..a0aa90daf57 100755 --- a/source/_docs/ecosystem/appdaemon.markdown +++ b/source/_docs/ecosystem/appdaemon.markdown @@ -107,6 +107,4 @@ Of course, if I wanted to make this App or its predecessor reusable, I would hav In addition, Apps can write to `AppDaemon`'s log files, and there is a system of constraints that allows you to control when and under what circumstances Apps and callbacks are active to keep the logic clean and simple. -For full installation instructions, see [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). +For full installation instructions, see the [AppDaemon Project Documentation pages](http://appdaemon.readthedocs.io/en/latest/). From 30c4ae88be3ac032a836681f07e8f5bead1a27e2 Mon Sep 17 00:00:00 2001 From: Andrew Cockburn Date: Wed, 9 Aug 2017 14:27:20 -0400 Subject: [PATCH 46/57] Update hadashboard.markdown --- source/_docs/ecosystem/hadashboard.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/ecosystem/hadashboard.markdown b/source/_docs/ecosystem/hadashboard.markdown index 0ce679e5eeb..ecd636ecc89 100755 --- a/source/_docs/ecosystem/hadashboard.markdown +++ b/source/_docs/ecosystem/hadashboard.markdown @@ -39,4 +39,4 @@ HADashboard is a modular, skinnable dashboard for [Home Assistant](https://home- -For full installation instructions see [DASHBOARD.md](https://github.com/home-assistant/appdaemon/blob/dev/DASHBOARD.md) in the AppDaemon Repository. +For full installation instructions see the HADashboard section in the [AppDaemon Project Documentation](http://appdaemon.readthedocs.io/en/latest/DASHBOARD/) From 8ab014ddc285d0009527cd519e3cc465e9400096 Mon Sep 17 00:00:00 2001 From: David De Sloovere Date: Thu, 10 Aug 2017 12:23:08 +0200 Subject: [PATCH 47/57] Update device_tracker.markdown (#3160) Clarify consider_home --- source/_components/device_tracker.markdown | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/_components/device_tracker.markdown b/source/_components/device_tracker.markdown index 45d58877d7a..105dec1e7f3 100644 --- a/source/_components/device_tracker.markdown +++ b/source/_components/device_tracker.markdown @@ -68,11 +68,11 @@ devicename: | Parameter | Default | Description | |----------------|-------------------------------|---------------------------------------------------------------------------------------------------------| -| `name` | Host name or "Unnamed Device" | The friendly name of the device | -| `mac` | None | The MAC address of the device. Add this if you are using a network device tracker like Nmap or SNMP | +| `name` | Host name or "Unnamed Device" | The friendly name of the device. | +| `mac` | None | The MAC address of the device. Add this if you are using a network device tracker like Nmap or SNMP. | | `picture` | None | A picture that you can use to easily identify the person or device. You can also save the image file in a folder "www" in the same location (can be obtained from developer tools) where you have your configuration.yaml file and just use `picture: /local/favicon-192x192.png`. | | `icon` | mdi:account | An icon for this device (use as an alternative to `picture`). | -| `gravatar` | None | An email address for the device's owner. If provided, it will override `picture` | -| `track` | [uses platform setting] | If `yes`/`on`/`true` then the device will be tracked. Otherwise its location and state will not update | -| `hide_if_away` | False | If `yes`/`on`/`true` then the device will be hidden if it is not at home | -| `consider_home` | [uses platform setting] | Allows you to override the global `consider_home` setting from the platform configuration on a per device level | +| `gravatar` | None | An email address for the device's owner. If provided, it will override `picture`. | +| `track` | [uses platform setting] | If `yes`/`on`/`true` then the device will be tracked. Otherwise its location and state will not update. | +| `hide_if_away` | False | If `yes`/`on`/`true` then the device will be hidden if it is not at home. | +| `consider_home` | [uses platform setting] | Seconds to wait till marking someone as not home after not being seen. Allows you to override the global `consider_home` setting from the platform configuration on a per device level. | From 4cefda70476c2bfbd984bfac74702e56226a5043 Mon Sep 17 00:00:00 2001 From: fedor1210 Date: Thu, 10 Aug 2017 18:48:44 +0300 Subject: [PATCH 48/57] Updated Safari in browsers.markdown (map CSS is corrupted) (#3158) * Updated Safari in browsers.markdown Map has corrupted CSS on Mac and iOS * Rewrote to a less controversial statement. --- source/_docs/frontend/browsers.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/frontend/browsers.markdown b/source/_docs/frontend/browsers.markdown index 8ddb3f805b4..0543c634d5e 100644 --- a/source/_docs/frontend/browsers.markdown +++ b/source/_docs/frontend/browsers.markdown @@ -29,7 +29,7 @@ We would appreciate if you help to keep this page up-to-date and add feedback. | Browser | Release | State | Comments | | :-------------------- |:---------------|:-----------|:-------------------------| -| [Safari] | | works | | +| [Safari] | | works | Some problems with the Map. | ## {% linkable_title Linux %} @@ -60,7 +60,7 @@ We would appreciate if you help to keep this page up-to-date and add feedback. | Browser | Release | State | Comments | | :-------------------- |:---------------|:-----------|:-------------------------| -| [Safari] | | works | Can also be added to desktop | +| [Safari] | | works | Can also be added to desktop. Some problems with the Map. | | [Chrome] | | works | | From 5642de96c8137adcb9965367183f44f7bbd46f4c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 10 Aug 2017 18:44:55 +0200 Subject: [PATCH 49/57] Fix typo --- source/_components/sensor.rest.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.rest.markdown b/source/_components/sensor.rest.markdown index 31069da6067..9f3da04c7ca 100644 --- a/source/_components/sensor.rest.markdown +++ b/source/_components/sensor.rest.markdown @@ -94,7 +94,7 @@ sensor: unit_of_measurement: MB ``` -### {% linkable_title Value for other Home Assistant instance %} +### {% linkable_title Value from another Home Assistant instance %} The Home Assistant [API](/developers/rest_api/) exposes the data from your attached sensors. If you are running multiple Home Assistant instances which are not [connected](/developers/architecture/#multiple-connected-instances) you can still get information from them. From 0f173286e9502fef3e818f3ae7b6c4a10d21d161 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 10 Aug 2017 20:59:14 +0200 Subject: [PATCH 50/57] Add details about multiple bridges (fixes #3159) (#3164) --- source/_components/light.hue.markdown | 38 ++++++++++++++++++++------- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/source/_components/light.hue.markdown b/source/_components/light.hue.markdown index 8f5652e31a6..f6e88086905 100644 --- a/source/_components/light.hue.markdown +++ b/source/_components/light.hue.markdown @@ -22,13 +22,13 @@ When you configure the Hue bridge from Home Assistant, it writes a token to a fi 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`: +If you want to enable the component without relying on the [discovery component](/components/discovery/), add the following lines to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry light: - platform: hue - host: DEVICE_IP_ADDRESS + - platform: hue + host: DEVICE_IP_ADDRESS ``` Configuration variables: @@ -39,6 +39,23 @@ Configuration variables: - **allow_in_emulated_hue** (*Optional*): )true/false) Enable this to block all Hue entities from being added to the `emulated_hue` component. - **allow_hue_groups** (*Optional*): (true/false) Enable this to stop Home Assistant from importing the groups defined on the Hue bridge. +### {% linkable_title Multiple Hue bridges %} + +If you use multiple Hue bridges then it's needed that you provide a configuration file for every bridge. The bridges can't share a single configuration file. + +Add `filename` to your Hue configuration entry in your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +light: + - platform: hue + host: BRIDGE1_IP_ADDRESS + filename: phue.conf + - platform: hue + host: BRIDGE2_IP_ADDRESS + filename: phue2.conf +``` + ### {% linkable_title Using Hue Groups in Home Assistant %} The Hue API allows you to group lights. Home Assistant also supports grouping of entities natively, but sometimes it can be usefull to use Hue Groups to group light bulbs. By doing so, Home Assistant only needs to send one API call to change the state of all the bulbs in those groups instead of one call for every light in the group. This causes all the bulbs to change state simultaniously. @@ -74,10 +91,11 @@ More information can be found on the [Philips Hue API documentation](https://www ### {% linkable_title Using Hue Scenes in Home Assistant %} -The Hue platform has it's own concept of Scenes for setting the colors of a group of lights at once. Hue Scenes are very cheap, get created by all kinds of apps (as it is the only way to have 2 or more lights change at the same time), and are rarely deleted. A typical Hue hub might have hundreds of scenes stored in them, many that you've never used, almost all very poorly named. +The Hue platform has it's own concept of scenes for setting the colors of a group of lights at once. Hue Scenes are very cheap, get created by all kinds of apps (as it is the only way to have 2 or more lights change at the same time), and are rarely deleted. A typical Hue hub might have hundreds of scenes stored in them, many that you've never used, almost all very poorly named. -To avoid user interface overload we don't expose Scenes directly. Instead there is a [light.hue_activate_scene](/components/light/#service-lighthue_activate_scene) service which can be used by `automation` or `script` components. +To avoid user interface overload we don't expose scenes directly. Instead there is a [light.hue_activate_scene](/components/light/#service-lighthue_activate_scene) service which can be used by `automation` or `script` components. This will have all the bulbs transitioned at once, instead of one at a time using standard scenes in Home Assistant. + For instance: ```yaml @@ -93,7 +111,7 @@ script: | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | | `group_name` | no | The group/room name of the lights. Find this in the Hue official app. -| `scene_name` | no | The name of the Scene. Find this in the Hue official app. +| `scene_name` | no | The name of the scene. Find this in the Hue official app. *Note*: `group_name` is not linked to Home Assistant group name. @@ -101,14 +119,14 @@ 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. *** Caveats *** -The Hue API doesn't activate Scenes directly, only on a Hue Group (typically Rooms, especially if using the 2nd gen app). But Hue Scenes don't actually reference their group. So heuristic matching is used. +The Hue API doesn't activate scenes directly, only on a Hue Group (typically rooms, especially if using the 2nd gen app). But Hue Scenes don't actually reference their group. So heuristic matching is used. -Neither Group names or Scene names are guaranteed unique in Hue. If you are getting non deterministic behavior, adjust your Hue scenes via the App to be more identifying. +Neither group names or scene names are guaranteed unique in Hue. If you are getting non deterministic behavior, adjust your Hue scenes via the App to be more identifying. -The Hue hub has limitted spaces for Scenes, and will delete Scenes if new ones get created that would overflow that space. The API docs say this is based on Least Recently Used. +The Hue hub has limitted spaces for scenes, and will delete scenes if new ones get created that would overflow that space. The API docs say this is based on "Least Recently Used". From a115c2922106047540846821323f5eb113bfb9f1 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 12 Aug 2017 12:50:09 -0700 Subject: [PATCH 51/57] Add blog post --- _config.yml | 6 +- .../alarm_control_panel.woonveilg.markdown | 15 - source/_posts/2017-08-12-release-51.markdown | 443 ++++++++++++++++++ .../images/blog/2017-08-0.51/components.png | Bin 0 -> 39175 bytes source/index.html | 1 - 5 files changed, 446 insertions(+), 19 deletions(-) delete mode 100644 source/_components/alarm_control_panel.woonveilg.markdown create mode 100644 source/_posts/2017-08-12-release-51.markdown create mode 100644 source/images/blog/2017-08-0.51/components.png diff --git a/_config.yml b/_config.yml index 6db1e155d4d..797c2c5d755 100644 --- a/_config.yml +++ b/_config.yml @@ -143,11 +143,11 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 50 -current_patch_version: 2 -date_released: 2017-07-31 +current_patch_version: 1 +date_released: 2017-08-12 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. # Major release: -patch_version_notes: "#release-0502---july-31" +patch_version_notes: "#" # Minor release (Example #release-0431---april-25): diff --git a/source/_components/alarm_control_panel.woonveilg.markdown b/source/_components/alarm_control_panel.woonveilg.markdown deleted file mode 100644 index 2c881f8e5c3..00000000000 --- a/source/_components/alarm_control_panel.woonveilg.markdown +++ /dev/null @@ -1,15 +0,0 @@ ---- -layout: page -title: "Woonveilig Alarm Control Panel" -description: "Instructions how to integrate Woonveilig into Home Assistant." -date: 2016-07-02 22:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: woonveilig.png -ha_release: 0.51 -ha_category: Alarm ---- - -For support for the Woonveilig alarm panel, see the [`egardia` platform](/components/alarm_control_panel.egardia/). Woonveilig is a brand name of Egardia, used in the Netherlands. The product is the same. diff --git a/source/_posts/2017-08-12-release-51.markdown b/source/_posts/2017-08-12-release-51.markdown new file mode 100644 index 00000000000..be882a5d154 --- /dev/null +++ b/source/_posts/2017-08-12-release-51.markdown @@ -0,0 +1,443 @@ +--- +layout: post +title: "0.51: Massive history speed up, finished automation editor and official vacuum cleaner support" +description: "Lots of frontend bugs have been squashed, the automation editor now supports all triggers and actions and vacuum cleaners are now an official component." +date: 2017-08-12 00:11:05 +date_formatted: "August 12, 2017" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +og_image: /images/blog/2017-08-0.51/components.png +--- + + + +

This release has to do a one time database migration which can take a long time on big databases (20 minutes). During this time the frontend will not work. Do not stop Home Assistant while it is in progress.

+ +Release 0.51 is around the corner and it contains some really great updates. + +## {% linkable_title Database speed up %} + +The first one is more amazing database updates [#8748] by [@OverloadUT]. Every query that has been tested executes in well under 1 second, even on a RPi using MySQL with 6 million rows and around 300 entities. This is true even when you're getting an unrealistically huge date range! + +Updating the database will take some time when you start Home Assistant. During that time, the Home Assistant frontend is not accessible. Please let it complete and do not turn Home Assistant off. + +## {% linkable_title Frontend update %} + +We have finished the migration of our frontend to be powered by Polymer 2. This has given us a big speed boost on Safari/iOS devices and has fixed a wide range of bugs. + +We have also finished the automation editor. All triggers and actions are now implemented and so are most conditions (missing are `and`, `or`). The automation editor is also no longer Chrome only, it can now also be used in Safari. + +Another change to the frontend is that we have reorganized the panels. The Z-Wave and automation configuration panels have been merged into the configuration panel. + +
+ +
+ +## {% linkable_title Vacuum cleaners %} + +As we have seen more vacuum cleaners land in Home Assistant, it was time to create an official component for them. That's why [@azogue] introduced the new vacuum cleaner component in [#8623]. This allows first class integration of vacuum cleaners in Home Assistant. Out of the box we will have Dyson, Xiamo and Roomba as supported platforms. + +## {% linkable_title New Platforms %} + +- Added Lutron Caseta Scene Support ([@809694+kfcook] - [#8690]) ([lutron_caseta docs]) ([scene.lutron_caseta docs]) (new-platform) +- New media_player platform for Russound devices using the RIO protocol ([@wickerwaka] - [#8448]) ([media_player.russound_rio docs]) (new-platform) +- New component: bluesound ([@thrawnarn] - [#7192]) ([media_player.bluesound docs]) (new-platform) +- Add mochad light component ([@mtreinish] - [#8476]) ([light.mochad docs]) (new-platform) +- geizhals sensor component ([@JulianKahnert] - [#8458]) ([sensor.geizhals docs]) (new-platform) +- Xiaomi vacuum as platform of new `vacuum` component derived from ToggleEntity, and services ([@azogue] - [#8623]) (breaking change) (new-platform) +- Wi-Fi enabled Roomba support ([@pschmitt] - [#8825]) ([vacuum.roomba docs]) (new-platform) +- Add support to Dyson 360 Eye robot vacuum using new vacuum platform ([@CharlesBlonde] - [#8852]) ([dyson docs]) ([vacuum docs]) ([fan.dyson docs]) ([sensor.dyson docs]) ([vacuum.dyson docs]) (new-platform) +- Add Initial Mailbox panel and sensor ([@PhracturedBlue] - [#8233]) ([asterisk_mbox docs]) (new-platform) +- Add Leviton Decora Smart WiFi Device Platform ([@tlyakhov] - [#8529]) ([light.decora_wifi docs]) (new-platform) +- Add RainMachine switch platform ([@bachya] - [#8827]) ([switch.rainmachine docs]) (new-platform) +- Add new device tracker for Huawei Routers. ([@abmantis] - [#8488]) ([device_tracker.huawei_router docs]) (new-platform) +- Add Shodan sensor ([@fabaff] - [#8902]) ([sensor.shodan docs]) (new-platform) + +## {% linkable_title If you need help... %} +...don't hesitate to use our very active [forums][forum] or join us for a little [chat][discord]. The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. + +## {% linkable_title Reporting Issues %} +Experiencing issues introduced by this release? Please report them in our [issue tracker][issue]. Make sure to fill in all fields of the issue template. + + +## {% linkable_title Breaking Changes %} + +- Efergy sensors: change units from KW to W ([@emlt] - [#8761]) ([sensor.efergy docs]) (breaking change) +- Xiaomi vacuum is now a platform of new `vacuum` component derived from ToggleEntity, and services ([@azogue] - [#8623]) (breaking change) (new-platform) + +```yaml +vacuum: +- platform: xiaomi + name: Vacuum cleaner + host: !secret xiaomi_vacuum_robot_ip + token: !secret xiaomi_vacuum_robot_token +``` + +## {% linkable_title All changes %} + +- Upgrade pushbullet.py to 0.11.0 ([@fabaff] - [#8691]) ([notify.pushbullet docs]) +- Upgrade mypy to 0.521 ([@fabaff] - [#8692]) +- Added Lutron Caseta Scene Support ([@809694+kfcook] - [#8690]) ([lutron_caseta docs]) ([scene.lutron_caseta docs]) (new-platform) +- Remove deprecated host and ssl logic from Kodi ([@armills] - [#8700]) ([media_player.kodi docs]) +- Remove deprecated substitute interfaces ([@armills] - [#8701]) ([binary_sensor docs]) ([media_player docs]) +- Remove deprecated sensor_class config options ([@armills] - [#8702]) +- directv: add configuration glue for Genie slaves ([@sielicki] - [#8713]) ([media_player.directv docs]) +- bump python-telegram-bot to 7.0.1 for fully support Bot API 3.2 ([@azogue] - [#8715]) ([telegram_bot docs]) +- Add proxy support for telegram_bot ([@azogue] - [#8717]) ([telegram_bot docs]) +- python-insteonplm module version bump ([@nugget] - [#8736]) ([insteon_plm docs]) +- New media_player platform for Russound devices using the RIO protocol ([@wickerwaka] - [#8448]) ([media_player.russound_rio docs]) (new-platform) +- Add toggle to remotes ([@alanfischer] - [#8483]) ([remote docs]) ([remote.apple_tv docs]) ([remote.harmony docs]) ([remote.itach docs]) +- added invert_state optional parameter ([@gwhiteCL] - [#8695]) ([cover.rpi_gpio docs]) +- buienradar dates tz-aware ([@mjj4791] - [#8767]) ([sensor.buienradar docs]) ([weather.buienradar docs]) +- Change units from KW to W ([@emlt] - [#8761]) ([sensor.efergy docs]) (breaking change) +- Clean up remote component ([@MartinHjelmare] - [#8728]) ([remote docs]) ([remote.apple_tv docs]) ([remote.demo docs]) ([remote.harmony docs]) ([remote.itach docs]) ([remote.kira docs]) +- Wink discovery ([@w1ll1am23] - [#8739]) ([wink docs]) +- Enable/Disable Motion detection for Foscam Cameras ([@viswa-swami] - [#8582]) ([camera.foscam docs]) +- Allow sonos to select playlists as a source ([@mcolyer] - [#8258]) ([media_player.sonos docs]) +- mpd improvements ([@StevenLooman] - [#8655]) ([media_player.mpd docs]) +- Add support for file attachments in pushbullet ([@tsvi] - [#8763]) ([notify.pushbullet docs]) +- Honeywell fixes and improvements ([@dansarginson] - [#8756]) ([climate.honeywell docs]) +- Catch exception (fixes #8724) ([@fabaff] - [#8731]) ([sensor.google_wifi docs]) +- use updated osram lightify 1.0.6 component, including bugfix allowing more than 27 devices ([@tfriedel] - [#8774]) ([light.osramlightify docs]) +- flux_led: support for property "available" ([@pezinek] - [#8764]) ([light.flux_led docs]) +- New component: bluesound ([@thrawnarn] - [#7192]) ([media_player.bluesound docs]) (new-platform) +- Add 'forecast' ability to yr weather sensor ([@tinloaf] - [#8650]) ([sensor.yr docs]) +- Feature alexa launch request ([@steverhoades] - [#8730]) ([alexa docs]) +- Fixes UnboundLocalError: local variable 'setting' referenced before assignment ([@syssi] - [#8782]) ([climate.tado docs]) +- Upgrade pyasn1 to 0.3.1 and pyasn1-modules to 0.0.10 ([@fabaff] - [#8787]) ([notify.xmpp docs]) +- Upgrade sphinx-autodoc-typehints to 1.2.1 ([@fabaff] - [#8783]) +- Improvements (configuration and validation) ([@fabaff] - [#8785]) ([sensor.yr docs]) +- Fix referencing unset variable in tado climate component (causes update to fail when tado zone is in manual mode) ([@luukd] - [#8723]) ([climate.tado docs]) +- mqtt switch: add voluptuous for availability topic ([@abmantis] - [#8797]) ([switch.mqtt docs]) +- Add mochad light component ([@mtreinish] - [#8476]) ([light.mochad docs]) (new-platform) +- Update numpy 1.13.1 ([@pvizeli] - [#8806]) ([image_processing.opencv docs]) +- Upgrade aiohttp to 2.2.4 ([@fabaff] - [#8805]) +- Catch divide by zero errors when a sleep type is 0 ([@mezz64] - [#8809]) ([sensor.eight_sleep docs]) +- InfluxDB component improvements ([@hageltech] - [#8633]) ([influxdb docs]) +- When Sonos gets a tts source - dont't show an image ([@andrey-git] - [#8777]) ([media_player.sonos docs]) +- Polymer 2 ([@balloob] - [#8815]) ([group docs]) +- geizhals sensor component ([@JulianKahnert] - [#8458]) ([sensor.geizhals docs]) (new-platform) +- Xiaomi vacuum as platform of new `vacuum` component derived from ToggleEntity, and services ([@azogue] - [#8623]) (breaking change) (new-platform) +- Update yweather.py ([@fanthos] - [#8820]) ([weather.yweather docs]) +- Make HA discover sabnzbd and add it to the Configurator ([@Hellowlol] - [#8634]) ([sensor.sabnzbd docs]) +- Fix Dyson sensors if devices are configured without standby monitoring. Fixes #8569 ([@CharlesBlonde] - [#8826]) ([dyson docs]) ([fan.dyson docs]) ([sensor.dyson docs]) +- Block dependencies that depend on enum34 ([@balloob] - [#8698]) +- Upgrade aiohttp to 2.2.5 ([@fabaff] - [#8828]) +- History query and schema optimizations for huge performance boost ([@OverloadUT] - [#8748]) ([history docs]) (breaking change) +- Update xiaomi vacuum tests and include in coverage ([@azogue] - [#8845]) ([vacuum docs]) ([vacuum.demo docs]) ([vacuum.xiaomi docs]) +- Egardia ([@jeroenterheerdt] - [#8389]) +- Do not call update() in constructor. ([@fabaff] - [#8837]) ([sensor.systemmonitor docs]) +- Upgrade sendgrid to 4.2.1 ([@fabaff] - [#8839]) +- Do not call update() in constructor ([@fabaff] - [#8840]) ([sensor.vasttrafik docs]) +- Make 'monitored_conditions' optional ([@fabaff] - [#8843]) ([sensor.radarr docs]) +- Do not call update() in constructor ([@fabaff] - [#8849]) ([sensor.synologydsm docs]) +- Make 'monitored_conditions' optional ([@fabaff] - [#8848]) ([sensor.sonarr docs]) +- Do not call update() in constructor ([@fabaff] - [#8847]) ([sensor.pocketcasts docs]) +- Catch ConnectionRefusedError ([@fabaff] - [#8844]) ([sensor.supervisord docs]) +- Upgrade sqlalchemy to 1.1.13 ([@fabaff] - [#8850]) ([recorder docs]) +- Upgrade pylast to 1.9.0 ([@fabaff] - [#8854]) ([sensor.lastfm docs]) +- Wi-Fi enabled Roomba support ([@pschmitt] - [#8825]) ([vacuum.roomba docs]) (new-platform) +- Add support to Dyson 360 Eye robot vacuum using new vacuum platform ([@CharlesBlonde] - [#8852]) ([dyson docs]) ([vacuum docs]) ([fan.dyson docs]) ([sensor.dyson docs]) ([vacuum.dyson docs]) (new-platform) +- Upgrade pyasn1 to 0.3.2 and pyasn1-modules to 0.0.11 ([@fabaff] - [#8856]) ([notify.xmpp docs]) +- Allow to set coordinates ([@fabaff] - [#8858]) ([sensor.zamg docs]) ([weather.zamg docs]) +- Added rounding to Google Wifi ([@fronzbot] - [#8866]) ([sensor.google_wifi docs]) +- Fix off_delay for zwave trigger sensors ([@turbokongen] - [#8864]) ([zwave docs]) ([binary_sensor.zwave docs]) +- Do not use pychromecast.Chromecast for Cast Groups ([@foxel] - [#8786]) ([media_player.cast docs]) +- Allow get local ip to work without internet ([@balloob] - [#8855]) +- Do not call update() in constructor ([@fabaff] - [#8859]) +- Add new service `clean_spot` to vacuums ([@azogue] - [#8862]) ([vacuum docs]) ([vacuum.demo docs]) ([vacuum.xiaomi docs]) +- Warn instead of raise on duplicate YAML key ([@balloob] - [#8834]) +- Add Initial Mailbox panel and sensor ([@PhracturedBlue] - [#8233]) ([asterisk_mbox docs]) (new-platform) +- Add Leviton Decora Smart WiFi Device Platform ([@tlyakhov] - [#8529]) ([light.decora_wifi docs]) (new-platform) +- Consolidate config panels ([@balloob] - [#8857]) ([automation docs]) ([zwave docs]) ([config.zwave docs]) +- Fix spelling error and update link ([@Klikini] - [#8869]) +- Implement Roomba fan speed ([@pschmitt] - [#8863]) ([vacuum.roomba docs]) +- Add nuki lock'n'go and unlatch services and add attributes ([@pschmitt] - [#8687]) ([lock.nuki docs]) +- RFLink: Add send_command service ([@leppa] - [#8876]) ([rflink docs]) +- Do not call update() in constructor ([@fabaff] - [#8881]) ([binary_sensor.rest docs]) ([sensor.rest docs]) +- Add RainMachine switch platform ([@bachya] - [#8827]) ([switch.rainmachine docs]) (new-platform) +- Allow usage of colorlog 3.0.1 ([@fabaff] - [#8885]) +- Change level ([@fabaff] - [#8883]) ([sensor.statistics docs]) +- Upgrade youtube_dl to 2017.8.6 ([@fabaff] - [#8880]) ([media_extractor docs]) +- Fix media_extractor for some sites ([@Spirit-X] - [#8887]) ([media_extractor docs]) +- Do not call update() in constructor ([@fabaff] - [#8878]) +- Do not call update() in constructor ([@fabaff] - [#8892]) ([binary_sensor.command_line docs]) ([sensor.command_line docs]) ([switch.command_line docs]) +- Changed Pi-hole graphs from stacked bar to line ([@bachya] - [#8896]) ([sensor.pi_hole docs]) +- Add longer text strings to mailbox demo to test string truncation ([@PhracturedBlue] - [#8893]) ([mailbox.demo docs]) ([mailbox.demo.txt docs]) +- added support for setting/getting position of lutron caseta covers ([@809694+kfcook] - [#8898]) ([cover.lutron_caseta docs]) +- Fix for Neato D3 Connected state obtaining ([@karlkar] - [#8817]) ([sensor.neato docs]) ([switch.neato docs]) +- Update simplisafe-python version ([@w1ll1am23] - [#8908]) ([alarm_control_panel.simplisafe docs]) +- LIFX: improve performance of multi-light transitions ([@amelchio] - [#8873]) ([light.lifx docs]) +- Support media position and media duration (will display progressbar in ui) ([@molobrakos] - [#8904]) ([media_player.squeezebox docs]) +- Add new device tracker for Huawei Routers. ([@abmantis] - [#8488]) ([device_tracker.huawei_router docs]) (new-platform) +- Add Shodan sensor ([@fabaff] - [#8902]) ([sensor.shodan docs]) (new-platform) +- Added possibilities to use template in the command_line sensor ([@mar-schmidt] - [#8505]) ([sensor.command_line docs]) +- Honor PEP8 naming convention ([@fabaff] - [#8909]) ([updater docs]) +- Remove not needed call to update ([@MartinHjelmare] - [#8930]) ([switch.rachio docs]) +- fixing emulated hue issue and testing it ([@cribbstechnologies] - [#8928]) ([emulated_hue docs]) +- Update roombapy to 1.3.1 to avoid installing all the mapping dependencies ([@pschmitt] - [#8925]) ([vacuum.roomba docs]) +- Update python-wink version to fix Dome water valve bug. ([@w1ll1am23] - [#8923]) ([wink docs]) ([switch.wink docs]) +- Fix SET_TEMPERATURE_SCHEMA in climate component ([@MartinHjelmare] - [#8879]) ([climate docs]) + +[#7192]: https://github.com/home-assistant/home-assistant/pull/7192 +[#8233]: https://github.com/home-assistant/home-assistant/pull/8233 +[#8258]: https://github.com/home-assistant/home-assistant/pull/8258 +[#8389]: https://github.com/home-assistant/home-assistant/pull/8389 +[#8448]: https://github.com/home-assistant/home-assistant/pull/8448 +[#8458]: https://github.com/home-assistant/home-assistant/pull/8458 +[#8476]: https://github.com/home-assistant/home-assistant/pull/8476 +[#8483]: https://github.com/home-assistant/home-assistant/pull/8483 +[#8488]: https://github.com/home-assistant/home-assistant/pull/8488 +[#8505]: https://github.com/home-assistant/home-assistant/pull/8505 +[#8529]: https://github.com/home-assistant/home-assistant/pull/8529 +[#8582]: https://github.com/home-assistant/home-assistant/pull/8582 +[#8623]: https://github.com/home-assistant/home-assistant/pull/8623 +[#8633]: https://github.com/home-assistant/home-assistant/pull/8633 +[#8634]: https://github.com/home-assistant/home-assistant/pull/8634 +[#8650]: https://github.com/home-assistant/home-assistant/pull/8650 +[#8655]: https://github.com/home-assistant/home-assistant/pull/8655 +[#8687]: https://github.com/home-assistant/home-assistant/pull/8687 +[#8690]: https://github.com/home-assistant/home-assistant/pull/8690 +[#8691]: https://github.com/home-assistant/home-assistant/pull/8691 +[#8692]: https://github.com/home-assistant/home-assistant/pull/8692 +[#8695]: https://github.com/home-assistant/home-assistant/pull/8695 +[#8698]: https://github.com/home-assistant/home-assistant/pull/8698 +[#8700]: https://github.com/home-assistant/home-assistant/pull/8700 +[#8701]: https://github.com/home-assistant/home-assistant/pull/8701 +[#8702]: https://github.com/home-assistant/home-assistant/pull/8702 +[#8713]: https://github.com/home-assistant/home-assistant/pull/8713 +[#8715]: https://github.com/home-assistant/home-assistant/pull/8715 +[#8717]: https://github.com/home-assistant/home-assistant/pull/8717 +[#8723]: https://github.com/home-assistant/home-assistant/pull/8723 +[#8728]: https://github.com/home-assistant/home-assistant/pull/8728 +[#8730]: https://github.com/home-assistant/home-assistant/pull/8730 +[#8731]: https://github.com/home-assistant/home-assistant/pull/8731 +[#8736]: https://github.com/home-assistant/home-assistant/pull/8736 +[#8739]: https://github.com/home-assistant/home-assistant/pull/8739 +[#8748]: https://github.com/home-assistant/home-assistant/pull/8748 +[#8756]: https://github.com/home-assistant/home-assistant/pull/8756 +[#8761]: https://github.com/home-assistant/home-assistant/pull/8761 +[#8763]: https://github.com/home-assistant/home-assistant/pull/8763 +[#8764]: https://github.com/home-assistant/home-assistant/pull/8764 +[#8767]: https://github.com/home-assistant/home-assistant/pull/8767 +[#8774]: https://github.com/home-assistant/home-assistant/pull/8774 +[#8777]: https://github.com/home-assistant/home-assistant/pull/8777 +[#8782]: https://github.com/home-assistant/home-assistant/pull/8782 +[#8783]: https://github.com/home-assistant/home-assistant/pull/8783 +[#8785]: https://github.com/home-assistant/home-assistant/pull/8785 +[#8786]: https://github.com/home-assistant/home-assistant/pull/8786 +[#8787]: https://github.com/home-assistant/home-assistant/pull/8787 +[#8797]: https://github.com/home-assistant/home-assistant/pull/8797 +[#8805]: https://github.com/home-assistant/home-assistant/pull/8805 +[#8806]: https://github.com/home-assistant/home-assistant/pull/8806 +[#8809]: https://github.com/home-assistant/home-assistant/pull/8809 +[#8815]: https://github.com/home-assistant/home-assistant/pull/8815 +[#8817]: https://github.com/home-assistant/home-assistant/pull/8817 +[#8820]: https://github.com/home-assistant/home-assistant/pull/8820 +[#8825]: https://github.com/home-assistant/home-assistant/pull/8825 +[#8826]: https://github.com/home-assistant/home-assistant/pull/8826 +[#8827]: https://github.com/home-assistant/home-assistant/pull/8827 +[#8828]: https://github.com/home-assistant/home-assistant/pull/8828 +[#8834]: https://github.com/home-assistant/home-assistant/pull/8834 +[#8837]: https://github.com/home-assistant/home-assistant/pull/8837 +[#8839]: https://github.com/home-assistant/home-assistant/pull/8839 +[#8840]: https://github.com/home-assistant/home-assistant/pull/8840 +[#8843]: https://github.com/home-assistant/home-assistant/pull/8843 +[#8844]: https://github.com/home-assistant/home-assistant/pull/8844 +[#8845]: https://github.com/home-assistant/home-assistant/pull/8845 +[#8847]: https://github.com/home-assistant/home-assistant/pull/8847 +[#8848]: https://github.com/home-assistant/home-assistant/pull/8848 +[#8849]: https://github.com/home-assistant/home-assistant/pull/8849 +[#8850]: https://github.com/home-assistant/home-assistant/pull/8850 +[#8852]: https://github.com/home-assistant/home-assistant/pull/8852 +[#8854]: https://github.com/home-assistant/home-assistant/pull/8854 +[#8855]: https://github.com/home-assistant/home-assistant/pull/8855 +[#8856]: https://github.com/home-assistant/home-assistant/pull/8856 +[#8857]: https://github.com/home-assistant/home-assistant/pull/8857 +[#8858]: https://github.com/home-assistant/home-assistant/pull/8858 +[#8859]: https://github.com/home-assistant/home-assistant/pull/8859 +[#8862]: https://github.com/home-assistant/home-assistant/pull/8862 +[#8863]: https://github.com/home-assistant/home-assistant/pull/8863 +[#8864]: https://github.com/home-assistant/home-assistant/pull/8864 +[#8866]: https://github.com/home-assistant/home-assistant/pull/8866 +[#8869]: https://github.com/home-assistant/home-assistant/pull/8869 +[#8873]: https://github.com/home-assistant/home-assistant/pull/8873 +[#8876]: https://github.com/home-assistant/home-assistant/pull/8876 +[#8878]: https://github.com/home-assistant/home-assistant/pull/8878 +[#8879]: https://github.com/home-assistant/home-assistant/pull/8879 +[#8880]: https://github.com/home-assistant/home-assistant/pull/8880 +[#8881]: https://github.com/home-assistant/home-assistant/pull/8881 +[#8883]: https://github.com/home-assistant/home-assistant/pull/8883 +[#8885]: https://github.com/home-assistant/home-assistant/pull/8885 +[#8887]: https://github.com/home-assistant/home-assistant/pull/8887 +[#8892]: https://github.com/home-assistant/home-assistant/pull/8892 +[#8893]: https://github.com/home-assistant/home-assistant/pull/8893 +[#8896]: https://github.com/home-assistant/home-assistant/pull/8896 +[#8898]: https://github.com/home-assistant/home-assistant/pull/8898 +[#8902]: https://github.com/home-assistant/home-assistant/pull/8902 +[#8904]: https://github.com/home-assistant/home-assistant/pull/8904 +[#8908]: https://github.com/home-assistant/home-assistant/pull/8908 +[#8909]: https://github.com/home-assistant/home-assistant/pull/8909 +[#8923]: https://github.com/home-assistant/home-assistant/pull/8923 +[#8925]: https://github.com/home-assistant/home-assistant/pull/8925 +[#8928]: https://github.com/home-assistant/home-assistant/pull/8928 +[#8930]: https://github.com/home-assistant/home-assistant/pull/8930 +[@809694+kfcook]: https://github.com/809694+kfcook +[@CharlesBlonde]: https://github.com/CharlesBlonde +[@Hellowlol]: https://github.com/Hellowlol +[@JulianKahnert]: https://github.com/JulianKahnert +[@Klikini]: https://github.com/Klikini +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@OverloadUT]: https://github.com/OverloadUT +[@PhracturedBlue]: https://github.com/PhracturedBlue +[@Spirit-X]: https://github.com/Spirit-X +[@StevenLooman]: https://github.com/StevenLooman +[@abmantis]: https://github.com/abmantis +[@alanfischer]: https://github.com/alanfischer +[@amelchio]: https://github.com/amelchio +[@andrey-git]: https://github.com/andrey-git +[@armills]: https://github.com/armills +[@azogue]: https://github.com/azogue +[@bachya]: https://github.com/bachya +[@balloob]: https://github.com/balloob +[@cribbstechnologies]: https://github.com/cribbstechnologies +[@dansarginson]: https://github.com/dansarginson +[@emlt]: https://github.com/emlt +[@fabaff]: https://github.com/fabaff +[@fanthos]: https://github.com/fanthos +[@foxel]: https://github.com/foxel +[@fronzbot]: https://github.com/fronzbot +[@gwhiteCL]: https://github.com/gwhiteCL +[@hageltech]: https://github.com/hageltech +[@jeroenterheerdt]: https://github.com/jeroenterheerdt +[@karlkar]: https://github.com/karlkar +[@leppa]: https://github.com/leppa +[@luukd]: https://github.com/luukd +[@mar-schmidt]: https://github.com/mar-schmidt +[@mcolyer]: https://github.com/mcolyer +[@mezz64]: https://github.com/mezz64 +[@mjj4791]: https://github.com/mjj4791 +[@molobrakos]: https://github.com/molobrakos +[@mtreinish]: https://github.com/mtreinish +[@nugget]: https://github.com/nugget +[@pezinek]: https://github.com/pezinek +[@pschmitt]: https://github.com/pschmitt +[@pvizeli]: https://github.com/pvizeli +[@sielicki]: https://github.com/sielicki +[@steverhoades]: https://github.com/steverhoades +[@syssi]: https://github.com/syssi +[@tfriedel]: https://github.com/tfriedel +[@thrawnarn]: https://github.com/thrawnarn +[@tinloaf]: https://github.com/tinloaf +[@tlyakhov]: https://github.com/tlyakhov +[@tsvi]: https://github.com/tsvi +[@turbokongen]: https://github.com/turbokongen +[@viswa-swami]: https://github.com/viswa-swami +[@w1ll1am23]: https://github.com/w1ll1am23 +[@wickerwaka]: https://github.com/wickerwaka +[alarm_control_panel.simplisafe docs]: https://home-assistant.io/components/alarm_control_panel.simplisafe/ +[alexa docs]: https://home-assistant.io/components/alexa/ +[asterisk_mbox docs]: https://home-assistant.io/components/asterisk_mbox/ +[automation docs]: https://home-assistant.io/components/automation/ +[binary_sensor docs]: https://home-assistant.io/components/binary_sensor/ +[binary_sensor.command_line docs]: https://home-assistant.io/components/binary_sensor.command_line/ +[binary_sensor.rest docs]: https://home-assistant.io/components/binary_sensor.rest/ +[binary_sensor.zwave docs]: https://home-assistant.io/components/binary_sensor.zwave/ +[camera.foscam docs]: https://home-assistant.io/components/camera.foscam/ +[climate docs]: https://home-assistant.io/components/climate/ +[climate.honeywell docs]: https://home-assistant.io/components/climate.honeywell/ +[climate.tado docs]: https://home-assistant.io/components/climate.tado/ +[config.zwave docs]: https://home-assistant.io/components/config.zwave/ +[cover.lutron_caseta docs]: https://home-assistant.io/components/cover.lutron_caseta/ +[cover.rpi_gpio docs]: https://home-assistant.io/components/cover.rpi_gpio/ +[device_tracker.huawei_router docs]: https://home-assistant.io/components/device_tracker.huawei_router/ +[dyson docs]: https://home-assistant.io/components/dyson/ +[emulated_hue docs]: https://home-assistant.io/components/emulated_hue/ +[fan.dyson docs]: https://home-assistant.io/components/fan.dyson/ +[group docs]: https://home-assistant.io/components/group/ +[history docs]: https://home-assistant.io/components/history/ +[image_processing.opencv docs]: https://home-assistant.io/components/image_processing.opencv/ +[influxdb docs]: https://home-assistant.io/components/influxdb/ +[insteon_plm docs]: https://home-assistant.io/components/insteon_plm/ +[light.decora_wifi docs]: https://home-assistant.io/components/light.decora_wifi/ +[light.flux_led docs]: https://home-assistant.io/components/light.flux_led/ +[light.lifx docs]: https://home-assistant.io/components/light.lifx/ +[light.mochad docs]: https://home-assistant.io/components/light.mochad/ +[light.osramlightify docs]: https://home-assistant.io/components/light.osramlightify/ +[lock.nuki docs]: https://home-assistant.io/components/lock.nuki/ +[lutron_caseta docs]: https://home-assistant.io/components/lutron_caseta/ +[mailbox.demo docs]: https://home-assistant.io/components/mailbox.demo/ +[mailbox.demo.txt docs]: https://home-assistant.io/components/mailbox.demo.txt/ +[media_extractor docs]: https://home-assistant.io/components/media_extractor/ +[media_player docs]: https://home-assistant.io/components/media_player/ +[media_player.bluesound docs]: https://home-assistant.io/components/media_player.bluesound/ +[media_player.cast docs]: https://home-assistant.io/components/media_player.cast/ +[media_player.directv docs]: https://home-assistant.io/components/media_player.directv/ +[media_player.kodi docs]: https://home-assistant.io/components/media_player.kodi/ +[media_player.mpd docs]: https://home-assistant.io/components/media_player.mpd/ +[media_player.russound_rio docs]: https://home-assistant.io/components/media_player.russound_rio/ +[media_player.sonos docs]: https://home-assistant.io/components/media_player.sonos/ +[media_player.squeezebox docs]: https://home-assistant.io/components/media_player.squeezebox/ +[notify.pushbullet docs]: https://home-assistant.io/components/notify.pushbullet/ +[notify.xmpp docs]: https://home-assistant.io/components/notify.xmpp/ +[recorder docs]: https://home-assistant.io/components/recorder/ +[recorder.migration docs]: https://home-assistant.io/components/recorder.migration/ +[recorder.models docs]: https://home-assistant.io/components/recorder.models/ +[recorder.purge docs]: https://home-assistant.io/components/recorder.purge/ +[recorder.util docs]: https://home-assistant.io/components/recorder.util/ +[remote docs]: https://home-assistant.io/components/remote/ +[remote.apple_tv docs]: https://home-assistant.io/components/remote.apple_tv/ +[remote.demo docs]: https://home-assistant.io/components/remote.demo/ +[remote.harmony docs]: https://home-assistant.io/components/remote.harmony/ +[remote.itach docs]: https://home-assistant.io/components/remote.itach/ +[remote.kira docs]: https://home-assistant.io/components/remote.kira/ +[rflink docs]: https://home-assistant.io/components/rflink/ +[scene.lutron_caseta docs]: https://home-assistant.io/components/scene.lutron_caseta/ +[sensor.asterisk_mbox docs]: https://home-assistant.io/components/sensor.asterisk_mbox/ +[sensor.buienradar docs]: https://home-assistant.io/components/sensor.buienradar/ +[sensor.command_line docs]: https://home-assistant.io/components/sensor.command_line/ +[sensor.dyson docs]: https://home-assistant.io/components/sensor.dyson/ +[sensor.efergy docs]: https://home-assistant.io/components/sensor.efergy/ +[sensor.eight_sleep docs]: https://home-assistant.io/components/sensor.eight_sleep/ +[sensor.geizhals docs]: https://home-assistant.io/components/sensor.geizhals/ +[sensor.google_wifi docs]: https://home-assistant.io/components/sensor.google_wifi/ +[sensor.lastfm docs]: https://home-assistant.io/components/sensor.lastfm/ +[sensor.neato docs]: https://home-assistant.io/components/sensor.neato/ +[sensor.pi_hole docs]: https://home-assistant.io/components/sensor.pi_hole/ +[sensor.pocketcasts docs]: https://home-assistant.io/components/sensor.pocketcasts/ +[sensor.radarr docs]: https://home-assistant.io/components/sensor.radarr/ +[sensor.rest docs]: https://home-assistant.io/components/sensor.rest/ +[sensor.sabnzbd docs]: https://home-assistant.io/components/sensor.sabnzbd/ +[sensor.shodan docs]: https://home-assistant.io/components/sensor.shodan/ +[sensor.sonarr docs]: https://home-assistant.io/components/sensor.sonarr/ +[sensor.statistics docs]: https://home-assistant.io/components/sensor.statistics/ +[sensor.supervisord docs]: https://home-assistant.io/components/sensor.supervisord/ +[sensor.synologydsm docs]: https://home-assistant.io/components/sensor.synologydsm/ +[sensor.systemmonitor docs]: https://home-assistant.io/components/sensor.systemmonitor/ +[sensor.vasttrafik docs]: https://home-assistant.io/components/sensor.vasttrafik/ +[sensor.yr docs]: https://home-assistant.io/components/sensor.yr/ +[sensor.zamg docs]: https://home-assistant.io/components/sensor.zamg/ +[switch.command_line docs]: https://home-assistant.io/components/switch.command_line/ +[switch.mqtt docs]: https://home-assistant.io/components/switch.mqtt/ +[switch.neato docs]: https://home-assistant.io/components/switch.neato/ +[switch.rachio docs]: https://home-assistant.io/components/switch.rachio/ +[switch.rainmachine docs]: https://home-assistant.io/components/switch.rainmachine/ +[switch.wink docs]: https://home-assistant.io/components/switch.wink/ +[switch.xiaomi_vacuum docs]: https://home-assistant.io/components/switch.xiaomi_vacuum/ +[telegram_bot docs]: https://home-assistant.io/components/telegram_bot/ +[updater docs]: https://home-assistant.io/components/updater/ +[vacuum docs]: https://home-assistant.io/components/vacuum/ +[vacuum.demo docs]: https://home-assistant.io/components/vacuum.demo/ +[vacuum.dyson docs]: https://home-assistant.io/components/vacuum.dyson/ +[vacuum.roomba docs]: https://home-assistant.io/components/vacuum.roomba/ +[vacuum.xiaomi docs]: https://home-assistant.io/components/vacuum.xiaomi/ +[weather.buienradar docs]: https://home-assistant.io/components/weather.buienradar/ +[weather.yweather docs]: https://home-assistant.io/components/weather.yweather/ +[weather.zamg docs]: https://home-assistant.io/components/weather.zamg/ +[wink docs]: https://home-assistant.io/components/wink/ +[zwave docs]: https://home-assistant.io/components/zwave/ +[forum]: https://community.home-assistant.io/ +[issue]: https://github.com/home-assistant/home-assistant/issues +[discord]: https://discord.gg/c5DvZ4e diff --git a/source/images/blog/2017-08-0.51/components.png b/source/images/blog/2017-08-0.51/components.png new file mode 100644 index 0000000000000000000000000000000000000000..511070a5fdcbf9528fd0babafa388c45cf554a98 GIT binary patch literal 39175 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 Date: Sat, 12 Aug 2017 12:48:39 -0700 Subject: [PATCH 52/57] Added documentation for new russound_rio platform (#2969) * Added documentation for new russound_rio platform * Remove port from example since it is optional --- .../media_player.russound_rio.markdown | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 source/_components/media_player.russound_rio.markdown diff --git a/source/_components/media_player.russound_rio.markdown b/source/_components/media_player.russound_rio.markdown new file mode 100644 index 00000000000..7a63ab7c666 --- /dev/null +++ b/source/_components/media_player.russound_rio.markdown @@ -0,0 +1,34 @@ +--- +layout: page +title: "Russound RIO" +description: "Instructions on how to integrate Russound RIO devices into Home Assistant." +date: 2017-07-12 22:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: russound.png +ha_category: Media Player +ha_release: 0.49 +ha_iot_class: "Local Push" +--- + +The `russound_rio` platform allows you to control Russound devices that make use of the RIO protocol. + +The platform automatically discovers all enabled zones and sources. Each zone is added as a media player device with the enabled sources available as inputs. Media information is supported if the selected source reports it. + +To add a device to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +media_player: + - platform: russound_rio + host: 192.168.1.10 + name: Russound +``` + +Configuration variables: + +- **host** (*Required*): The IP of the TCP gateway +- **port** (*Optional*): The port of the TCP gateway (default: 9621) +- **name** (*Required*): The name of the device From aea22b54707449747aa8483a6bb1f41be0744a02 Mon Sep 17 00:00:00 2001 From: thrawnarn Date: Sat, 12 Aug 2017 21:51:43 +0200 Subject: [PATCH 53/57] Added bluesound documentation (#2460) * Added bluesound documentation * Update media_player.bluesound.markdown * Update media_player.bluesound.markdown --- .../media_player.bluesound.markdown | 48 ++++++++++++++++++ source/images/supported_brands/bluesound.png | Bin 0 -> 8676 bytes 2 files changed, 48 insertions(+) create mode 100644 source/_components/media_player.bluesound.markdown create mode 100644 source/images/supported_brands/bluesound.png diff --git a/source/_components/media_player.bluesound.markdown b/source/_components/media_player.bluesound.markdown new file mode 100644 index 00000000000..71453b5137d --- /dev/null +++ b/source/_components/media_player.bluesound.markdown @@ -0,0 +1,48 @@ +--- +layout: page +title: "Bluesound" +description: "Instructions how to integrate Bluesound devices into Home Assistant." +date: 2017-04-21 19:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: bluesound.png +ha_category: Media Player +featured: true +ha_release: 0.46 +ha_iot_class: "Local Polling" +--- + +The `bluesound` platform allows you to control your [Bluesound](http://www.bluesound.com/) HiFi wireless speakers and audio components from Home Assistant. + +If you want to automatically discover new devices, just make sure you have discovery: in your configuration.yaml file. To manually add a Bluesound device to your installation, add the following to your configuration.yaml file: + + +```yaml +# Example configuration.yaml +media_player: + - platform: bluesound + hosts: + - host: 192.168.1.100 +``` + +Configuration variables: + +- **hosts** (*Optional*): List with your bluesound devices + - **host** (*Required*): IP-address or hostname of the player + - **name** (*Optional*): The name of the device used in the frontend + - **port** (*Optional*): Port of communication to the device (default: 11000) + +## Advanced configuration example + + ```yaml +# Example configuration.yaml entry with manually specified addresses +media_player: + - platform: bluesound + hosts: + - host: 192.168.1.100 + name: bluesound_kitchen + port: 11000 + - host: 192.168.1.131 +``` diff --git a/source/images/supported_brands/bluesound.png b/source/images/supported_brands/bluesound.png new file mode 100644 index 0000000000000000000000000000000000000000..6fe2bc494a042ff64e4c0970b8f6eae079972445 GIT binary patch literal 8676 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 Date: Sat, 12 Aug 2017 15:52:27 -0400 Subject: [PATCH 54/57] Add documentation for the mochad light component (#2976) * Add documentation for the mochad light component This commit adds docs for using x10 dimmers and lights via mochad. * Update light.mochad.markdown --- source/_components/light.mochad.markdown | 32 ++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 source/_components/light.mochad.markdown diff --git a/source/_components/light.mochad.markdown b/source/_components/light.mochad.markdown new file mode 100644 index 00000000000..0bf8b817fe6 --- /dev/null +++ b/source/_components/light.mochad.markdown @@ -0,0 +1,32 @@ +--- +layout: page +title: "Mochad Light" +description: "Instructions how to integrate X10 Mochad switches into Home Assistant." +date: 2017-07-14 11:29 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Light +ha_release: 0.51 +--- + +The `mochad` switch platform lets you control an X10 enabled dimmer/light +device. + +To enable this sensor, you first have to set up the [mochad component](/components/mochad/) and then add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yml entry +light: + - platform: mochad + devices: + - address: a1 + - address: a5 +``` + +Configuration variables: + +- **address** (*Required*): The X10 address of the light. +- **name** (*Optional*): The name of the switch. Default is: x10_light_dev_*address*. +- **comm_type** (*Optional*): pl (powerline) or rf (radio frequency). Default is pl. From c1d0873c76377cbe7ef3fd3442d7ac124b6b4c90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ab=C3=ADlio=20Costa?= Date: Sat, 12 Aug 2017 20:54:18 +0100 Subject: [PATCH 55/57] Create device_tracker.huawei_router.markdown (#2983) * Create device_tracker.huawei_router.markdown * Update device_tracker.huawei_router.markdown * add huawei logo * Update device_tracker.huawei_router.markdown * Update device_tracker.huawei_router.markdown --- .../device_tracker.huawei_router.markdown | 36 ++ source/images/supported_brands/huawei.svg | 475 ++++++++++++++++++ 2 files changed, 511 insertions(+) create mode 100644 source/_components/device_tracker.huawei_router.markdown create mode 100644 source/images/supported_brands/huawei.svg diff --git a/source/_components/device_tracker.huawei_router.markdown b/source/_components/device_tracker.huawei_router.markdown new file mode 100644 index 00000000000..42c7b22a4e4 --- /dev/null +++ b/source/_components/device_tracker.huawei_router.markdown @@ -0,0 +1,36 @@ +--- +layout: page +title: "Huawei Router" +description: "Instructions how to integrate Huawei Routers into Home Assistant." +date: 2017-07-16 01:40 +sidebar: true +comments: false +sharing: true +footer: true +logo: huawei.png +ha_category: Presence Detection +ha_release: 0.51 +--- + +This component offers presence detection by looking at connected devices to a [Huawei router](http://m.huawei.com/enmobile/enterprise/products/network/access/pon-one/hw-371813.htm). +Currently, this was only tested with the Huawei HG8247H (used by Vodafone Portugal). + +To use a Huawei router in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +device_tracker: + - platform: huawei_router + host: 192.168.1.1 + username: user + password: pass +``` + +Configuration variables: + +- **host** (*Required*): The IP address of your router, e.g. 192.168.1.1. +- **username** (*Required*): The username to login into the router (the same used trough the router's web interface). +- **password** (*Required*): The password for the specified username. + + +See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. diff --git a/source/images/supported_brands/huawei.svg b/source/images/supported_brands/huawei.svg new file mode 100644 index 00000000000..657e365869e --- /dev/null +++ b/source/images/supported_brands/huawei.svg @@ -0,0 +1,475 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 48ecc49872e460a9c9f06e2fd3cb5082c3e23765 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 12 Aug 2017 12:55:32 -0700 Subject: [PATCH 56/57] Fix links --- source/_components/media_player.bluesound.markdown | 2 +- source/_posts/2017-08-12-release-51.markdown | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/source/_components/media_player.bluesound.markdown b/source/_components/media_player.bluesound.markdown index 71453b5137d..ff387ec1775 100644 --- a/source/_components/media_player.bluesound.markdown +++ b/source/_components/media_player.bluesound.markdown @@ -10,7 +10,7 @@ footer: true logo: bluesound.png ha_category: Media Player featured: true -ha_release: 0.46 +ha_release: 0.51 ha_iot_class: "Local Polling" --- diff --git a/source/_posts/2017-08-12-release-51.markdown b/source/_posts/2017-08-12-release-51.markdown index be882a5d154..9ed257483ee 100644 --- a/source/_posts/2017-08-12-release-51.markdown +++ b/source/_posts/2017-08-12-release-51.markdown @@ -92,7 +92,7 @@ vacuum: - added invert_state optional parameter ([@gwhiteCL] - [#8695]) ([cover.rpi_gpio docs]) - buienradar dates tz-aware ([@mjj4791] - [#8767]) ([sensor.buienradar docs]) ([weather.buienradar docs]) - Change units from KW to W ([@emlt] - [#8761]) ([sensor.efergy docs]) (breaking change) -- Clean up remote component ([@MartinHjelmare] - [#8728]) ([remote docs]) ([remote.apple_tv docs]) ([remote.demo docs]) ([remote.harmony docs]) ([remote.itach docs]) ([remote.kira docs]) +- Clean up remote component ([@MartinHjelmare] - [#8728]) ([remote docs]) ([remote.apple_tv docs]) ([remote.harmony docs]) ([remote.itach docs]) ([remote.kira docs]) - Wink discovery ([@w1ll1am23] - [#8739]) ([wink docs]) - Enable/Disable Motion detection for Foscam Cameras ([@viswa-swami] - [#8582]) ([camera.foscam docs]) - Allow sonos to select playlists as a source ([@mcolyer] - [#8258]) ([media_player.sonos docs]) @@ -126,7 +126,7 @@ vacuum: - Block dependencies that depend on enum34 ([@balloob] - [#8698]) - Upgrade aiohttp to 2.2.5 ([@fabaff] - [#8828]) - History query and schema optimizations for huge performance boost ([@OverloadUT] - [#8748]) ([history docs]) (breaking change) -- Update xiaomi vacuum tests and include in coverage ([@azogue] - [#8845]) ([vacuum docs]) ([vacuum.demo docs]) ([vacuum.xiaomi docs]) +- Update xiaomi vacuum tests and include in coverage ([@azogue] - [#8845]) ([vacuum docs]) ([vacuum.xiaomi docs]) - Egardia ([@jeroenterheerdt] - [#8389]) - Do not call update() in constructor. ([@fabaff] - [#8837]) ([sensor.systemmonitor docs]) - Upgrade sendgrid to 4.2.1 ([@fabaff] - [#8839]) @@ -147,11 +147,11 @@ vacuum: - Do not use pychromecast.Chromecast for Cast Groups ([@foxel] - [#8786]) ([media_player.cast docs]) - Allow get local ip to work without internet ([@balloob] - [#8855]) - Do not call update() in constructor ([@fabaff] - [#8859]) -- Add new service `clean_spot` to vacuums ([@azogue] - [#8862]) ([vacuum docs]) ([vacuum.demo docs]) ([vacuum.xiaomi docs]) +- Add new service `clean_spot` to vacuums ([@azogue] - [#8862]) ([vacuum docs]) ([vacuum.xiaomi docs]) - Warn instead of raise on duplicate YAML key ([@balloob] - [#8834]) - Add Initial Mailbox panel and sensor ([@PhracturedBlue] - [#8233]) ([asterisk_mbox docs]) (new-platform) - Add Leviton Decora Smart WiFi Device Platform ([@tlyakhov] - [#8529]) ([light.decora_wifi docs]) (new-platform) -- Consolidate config panels ([@balloob] - [#8857]) ([automation docs]) ([zwave docs]) ([config.zwave docs]) +- Consolidate config panels ([@balloob] - [#8857]) ([automation docs]) ([zwave docs]) - Fix spelling error and update link ([@Klikini] - [#8869]) - Implement Roomba fan speed ([@pschmitt] - [#8863]) ([vacuum.roomba docs]) - Add nuki lock'n'go and unlatch services and add attributes ([@pschmitt] - [#8687]) ([lock.nuki docs]) From b935f564dd42dbf17182dc4b095322c1926ab2eb Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 12 Aug 2017 12:56:11 -0700 Subject: [PATCH 57/57] Upgrade version --- _config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_config.yml b/_config.yml index 797c2c5d755..9168c907acc 100644 --- a/_config.yml +++ b/_config.yml @@ -142,8 +142,8 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 50 -current_patch_version: 1 +current_minor_version: 51 +current_patch_version: 0 date_released: 2017-08-12 # Either # or the anchor link to latest release notes in the blog post.