From c74ec2dd24541d2872589dc44dda478c1503bdea Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 29 Mar 2018 09:05:24 +0200 Subject: [PATCH 01/20] Add details for reporting issues (#5025) * Add details for reporting issues * Fixes --- source/help/index.markdown | 6 ++- source/help/reporting_issues.markdown | 72 +++++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 source/help/reporting_issues.markdown diff --git a/source/help/index.markdown b/source/help/index.markdown index 12e1dfde028..ab661f2508b 100644 --- a/source/help/index.markdown +++ b/source/help/index.markdown @@ -21,11 +21,13 @@ There are various ways to get in touch with the Home Assistant community. It doe ### {% linkable_title Bugs, Feature requests, and alike %} -Have you found an issue in your Home Assistant installation? Please report it. Reporting it makes it easy to track and ensures that it gets fixed. +Have you found an issue in your Home Assistant installation? Please report it. Reporting it makes it easy to track and ensures that it gets fixed. For more details please refer to [Reporting issues](help/reporting_issues/) page. - [Issue tracker Home Assistant](https://github.com/home-assistant/home-assistant/issues) - [Issue tracker home-assistant.io](https://github.com/home-assistant/home-assistant.io/issues) (Website and documentation) -- [Feature requests Home Assistant](https://community.home-assistant.io/c/feature-requests) +- [Issue tracker Frontend](https://github.com/home-assistant/home-assistant-polymer/issues) (Frontend) +- [Issue tracker Hass.io](https://github.com/home-assistant/hassio) +- [Feature requests Home Assistant](https://community.home-assistant.io/c/feature-requests) (Don't post feature requests in the issue trackers. Thanks.) ### {% linkable_title Videos, talks, workshops and alike %} diff --git a/source/help/reporting_issues.markdown b/source/help/reporting_issues.markdown new file mode 100644 index 00000000000..f3764c3d080 --- /dev/null +++ b/source/help/reporting_issues.markdown @@ -0,0 +1,72 @@ +--- +layout: page +title: "Reporting issues" +description: "Reporting issues about Home Assistant" +date: 2018-03-26 09:00 +sidebar: false +comments: false +sharing: true +footer: true +--- + +If you have an installation, a setup or a configuration issue please use our [Forum](https://community.home-assistant.io/) to get help. We have a big community which will help you if they can. + +If you found a bug then please report it in one of our [trackers](help/#bugs-feature-requests-and-alike). To help you and our developers to identify the issue quickly, please fill out the provided template. The "weird" content you will see is there to render your entry in a nice format after submitting. It's just [markddown](https://guides.github.com/features/mastering-markdown/). + +Use the command below to get the Home Assistant release you are running from a command-line. + +```bash +$ hass --version +``` + +Otherwise check the **About** page which is accessible in the **Developer tools** of the Home Assistant frontend. + +### {% linkable_title First Home Assistant release with the issue %} + +Please provide the release which contains the issue. + +### {% linkable_title Last working Home Assistant release (if known) %} + +If possible, provide the latest release of which you know that the component or platform was working. Home Assistant is evolving very fast and issues may already be addressed or be introduced by a recent change. + +### {% linkable_title Operating environment (Hass.io/Docker/Windows/etc.) %} + +There are many different ways to run Home Assistant. In this section please mention which you are using, e.g. manual installation, [Hass.io](/hassio/), Hasbian or as container (Docker). It can help if you mention which operating system you are using because not all are supported on the same level. + +### {% linkable_title Component/platform %} + +Please add the link to the documention of the component/platform in question. E.g., + +- issue with the `random` sensor: [https://www.home-assistant.io/components/sensor.random/](/components/sensor.random/) +- issue with the `hue` component: [https://www.home-assistant.io/components/hue/](/components/hue/) + +### {% linkable_title Description of problem %} + +Provide a summary of your issue and tell us what's wrong. + +There are components and platform which require additional steps (installing third-party tools, compilers, etc.) to get your setup working. Please describe the steps you took and the ones to reproduce the issue if needed. + +### {% linkable_title Problem-relevant `configuration.yaml` entries %} + +To exclude configuration issues and allow the developers to quickly test, and perhaps reproduce, your issue, add the relevant part of your `configuration.yaml` file. This file is located in your [configuration folder](/docs/configuration/). + +```yaml +sensor: + - platform: random +``` + +Make sure that you don't post your username, password, API key, access token or other [secrets](/docs/configuration/secrets/). + +### {% linkable_title Traceback (if applicable) %} + +If things go wrong there will be a so-called traceback or an error message in other words in your log. Please include this. It starts with **Traceback** and can contain informations where the error was triggered in the code. + +```bash +Traceback (most recent call last): +... +``` + +### {% linkable_title Additional information %} + +This section can contain additional details or other observation. Often the little things can help as well. + From 069a9f570ed670ec05c11366f5073a3fd7d96751 Mon Sep 17 00:00:00 2001 From: Marco Bakera Date: Thu, 29 Mar 2018 09:05:59 +0200 Subject: [PATCH 02/20] Fixed minor typo in the description of 'max'. (#5043) * Fixed minor typo in the description of 'max'. * Update link --- source/_docs/configuration/templating.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index d00a879b7bd..b8752c54ac5 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -83,10 +83,10 @@ Home Assistant adds extensions to allow templates to access all of the current s - Filter `timestamp_local` will convert an UNIX timestamp to local time/data. - Filter `timestamp_utc` will convert an UNIX timestamp to UTC time/data. - Filter `timestamp_custom(format_string, local_boolean)` will convert an UNIX timestamp to a custom format, the use of a local timestamp is default, supporting [Python format options](https://docs.python.org/3/library/time.html#time.strftime). -- Filter `max` will obtain the larget item in a sequence. +- Filter `max` will obtain the largest item in a sequence. - Filter `min` will obtain the smallest item in a sequence. -[strp-format]: https://docs.python.org/3.4/library/datetime.html#strftime-and-strptime-behavior +[strp-format]: https://docs.python.org/3.6/library/datetime.html#strftime-and-strptime-behavior

If your template uses an `entity_id` that begins with a number (example: `states.device_tracker.2008_gmc`) you must use a bracket syntax to avoid errors caused by rendering the `entity_id` improperly. In the example given, the correct syntax for the device tracker would be: `states.device_tracker['2008_gmc']` From 55871908661d8ceab9cc9b8f7cfff906c985fcc3 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Thu, 29 Mar 2018 08:23:20 +0100 Subject: [PATCH 03/20] Added note about venv upgrade (#5030) * Added note about venv upgrade Added a note that if you've upgraded Python you'll need to rebuild the venv. * Minor changes * Replace short version --- source/_docs/installation/virtualenv.markdown | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/source/_docs/installation/virtualenv.markdown b/source/_docs/installation/virtualenv.markdown index 386adbc7bf4..7c56772af73 100644 --- a/source/_docs/installation/virtualenv.markdown +++ b/source/_docs/installation/virtualenv.markdown @@ -17,7 +17,7 @@ It's recommended when installing Python packages that you use a [virtual environ _(If you're on a Debian based system, you will need to install Python virtual environment support using `apt-get install python3-pip python3-venv`.)_

-It is recommended to use the [advanced guide](/docs/installation/raspberry-pi/) which allows for the installation to run as a `homeassistant` user. The steps below may be shorter but some users find difficulty when applying updates and may run into issues. +It is recommended to use the [advanced guide](/docs/installation/raspberry-pi/) which allows for the installation to run as a `homeassistant` user. The steps below may be shorter but some users find difficulty when applying updates and may run into issues.

### {% linkable_title Install %} @@ -74,3 +74,12 @@ It is recommended to use the [advanced guide](/docs/installation/raspberry-pi/)

Looking for more advanced guides? Check our [Rasbian guide](/docs/installation/raspberry-pi/) or the [other installation guides](/docs/installation/).

+ +### {% linkable_title After upgrading Python %} + +If you've upgraded Python (for example, you were running 3.5.2 and now you've installed 3.5.4) then you'll need to build a new virtual environment. Simply rename your existing virtual environment directory: + +```bash +$ mv homeassistant homeassistant.old +``` +Then follow the [Install](/docs/installation/virtualenv/#install) steps again, being sure to use the newly installed version of Python. From 338eeb2295c1a8344fae3012d9f3152b9ae5b65d Mon Sep 17 00:00:00 2001 From: Nick Horvath Date: Thu, 29 Mar 2018 03:23:31 -0400 Subject: [PATCH 04/20] Add instructions on running MQTT ssl/nonssl simultaneously (#5027) * Add instructions on running MQTT ssl/nonssl simultaneously I wanted to be able to recieve MQTT from my cell phone over SSL, but wanted local things that have limited RAM to be able to connect without the burden of SSL code. * Tweaking * Add comma --- source/_addons/mosquitto.markdown | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/source/_addons/mosquitto.markdown b/source/_addons/mosquitto.markdown index de3df298949..f143d9ac34d 100644 --- a/source/_addons/mosquitto.markdown +++ b/source/_addons/mosquitto.markdown @@ -43,7 +43,7 @@ Configuration variables: ### {% linkable_title Home Assistant configuration %} -To use the Mosquitto as [broker](/docs/mqtt/broker/#run-your-own) add the following entry to the `configuration.yaml` file. +To use the Mosquitto as [broker](/docs/mqtt/broker/#run-your-own), add the following entry to the `configuration.yaml` file. ```yaml # Example configuration.yaml entry @@ -59,3 +59,20 @@ mqtt: username: YOUR_USERNAME password: YOUR_PASSWORD ``` + +### {% linkable_title Listening simultaneously on SSL/TLS (8883) and insecure (1883) ports %} + +1. Configure SSL/TLS as normal. +2. Set `customize` flag to `true` in your configuration. +3. Create a file in `/share/mosquitto` named `insecure.conf` with the following contents: + +```text +listener 1883 +protocol mqtt +``` + +4. Restart MQTT + +

+It's recommened that you only open your firewall to the SSL/TLS port (8883) and only use the insecure port (1883) for local devices. +

From f8393f0659298ae9de76e4002493dd0ded46114b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Thu, 29 Mar 2018 10:23:42 +0300 Subject: [PATCH 05/20] sensor.command_line: Round example CPU temperature value (#5032) * sensor.command_line: Round example CPU temperature value multiply returns a float, which is inexact and sometimes gets rendered with a lot of decimal places. Round additionally to get cleaner result. * Move raw --- source/_components/sensor.command_line.markdown | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/source/_components/sensor.command_line.markdown b/source/_components/sensor.command_line.markdown index 7b3662b1e1f..5cc0b4d9eaa 100644 --- a/source/_components/sensor.command_line.markdown +++ b/source/_components/sensor.command_line.markdown @@ -61,6 +61,7 @@ sensor: Thanks to the [`proc`](https://en.wikipedia.org/wiki/Procfs) file system, various details about a system can be retrieved. Here the CPU temperature is of interest. Add something similar to your `configuration.yaml` file: +{% raw %} ```yaml # Example configuration.yaml entry sensor: @@ -69,8 +70,9 @@ sensor: command: "cat /sys/class/thermal/thermal_zone0/temp" # If errors occur, remove degree symbol below unit_of_measurement: "°C" - value_template: '{% raw %}{{ value | multiply(0.001) }}{% endraw %}' + value_template: '{{ value | multiply(0.001) | round(1) }}' ``` +{% endraw %} ### {% linkable_title Monitoring failed login attempts on Home Assistant %} @@ -149,11 +151,13 @@ sensor: [Templates](/docs/configuration/templating/) are supported in the `command:` configuration variable. This could be used if you want to include the state of a specific sensor as an argument to your external script. +{% raw %} ```yaml # Example configuration.yaml entry sensor: - platform: command_line name: wind direction - command: 'sh /home/pi/.homeassistant/scripts/wind_direction.sh {% raw %}{{ states.sensor.wind_direction.state }}{% endraw %}' + command: 'sh /home/pi/.homeassistant/scripts/wind_direction.sh {{ states.sensor.wind_direction.state }}' unit_of_measurement: "Direction" ``` +{% endraw %} From ddbd6705479e98b4e8595cbc9fcc1757ee58ecff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Thu, 29 Mar 2018 10:24:18 +0300 Subject: [PATCH 06/20] Spelling and grammar fixes (#5031) * Spelling and grammar fixes * Minor changes --- source/_addons/nginx_proxy.markdown | 2 +- source/_addons/samba.markdown | 2 +- .../binary_sensor.hikvision.markdown | 73 ++++++++++--------- source/_components/foursquare.markdown | 4 +- source/_components/frontend.markdown | 2 +- source/_components/google_assistant.markdown | 2 +- ...age_processing.dlib_face_identify.markdown | 2 +- source/_components/knx.markdown | 2 +- .../_components/media_player.firetv.markdown | 2 +- source/_components/melissa.markdown | 2 +- source/_components/notify.gntp.markdown | 2 +- source/_components/sensor.rest.markdown | 2 +- source/_components/switch.fritzdect.markdown | 2 +- source/_components/switch.kankun.markdown | 2 +- source/_components/tellstick.markdown | 2 +- .../custom_panel_using_react.markdown | 2 +- source/_docs/installation/docker.markdown | 2 +- .../2018-03-24-new-release-schedule.markdown | 2 +- 18 files changed, 55 insertions(+), 54 deletions(-) diff --git a/source/_addons/nginx_proxy.markdown b/source/_addons/nginx_proxy.markdown index bc3be8cc44d..e1d8a5f01c8 100644 --- a/source/_addons/nginx_proxy.markdown +++ b/source/_addons/nginx_proxy.markdown @@ -11,7 +11,7 @@ footer: true Setup an SSL proxy with NGINX and redirect port 80 to 443. Make sure you have generated a certificate before you start this add-on. -In the `http` section of the `configuration.yaml` file remove `ssl_certificate` and `ssl_key` and don't enter the port in the `base_url` to avoid a HTTP 502 error. +In the `http` section of the `configuration.yaml` file remove `ssl_certificate` and `ssl_key` and don't enter the port in the `base_url` to avoid an HTTP 502 error. ```json { diff --git a/source/_addons/samba.markdown b/source/_addons/samba.markdown index a8cd931cbee..9d0f18923fb 100644 --- a/source/_addons/samba.markdown +++ b/source/_addons/samba.markdown @@ -35,7 +35,7 @@ Configuration variables: - **name** (*Optional*): Set netbios name of Hass.io device. Default is `hassio`. - **workgroup** (*Optional*): Set network workgroup name. Default is `WORKGROUP`. - **guest** (*Optional*): Allow login without a username or password. Default is `true`. -- **map** (*Optional*): Control which folders will be exposed. `config` shares the Home Assistant configuration folder. `addons` shares the local custom repositiory. `share` shares a folder that can be accessed by add-ons and Home Assistant. `backup` shares access to snapshot files. `ssl` shares certificate storage. Be careful with the `ssl` option! Defaults are all set to `true`, except for `ssl`. +- **map** (*Optional*): Control which folders will be exposed. `config` shares the Home Assistant configuration folder. `addons` shares the local custom repository. `share` shares a folder that can be accessed by add-ons and Home Assistant. `backup` shares access to snapshot files. `ssl` shares certificate storage. Be careful with the `ssl` option! Defaults are all set to `true`, except for `ssl`. - **username** (*Optional*): Username for logging in if guest login is not used. - **password** (*Optional*): Password for `username`. An empty password is not supported. - **interface** (*Optional*): Interface that will start the share. Normally this is `eth0` for ethernet wired connection and `wlan0` for wireless connection. diff --git a/source/_components/binary_sensor.hikvision.markdown b/source/_components/binary_sensor.hikvision.markdown index 803e8b40a2a..7e931302716 100644 --- a/source/_components/binary_sensor.hikvision.markdown +++ b/source/_components/binary_sensor.hikvision.markdown @@ -15,22 +15,22 @@ ha_iot_class: "Local Push" The Hikvision Binary Sensor is a platform that parses the event stream of a [Hikvision IP Camera or NVR](http://www.hikvision.com/) and presents the camera/nvr events to Home Assistant as binary sensors with either an "off" or "on" state. -The platform will automatically add all sensors to Home Assistant that are configured within the camera/nvr interface to "Notify the surveillance center" as a trigger. If you would like to hide a sensor type you can do so by either unchecking "Notify the surveillance center" in the camera configuration or by using the "ignored" customize option detailed below. +The platform will automatically add all sensors to Home Assistant that are configured within the camera/nvr interface to "Notify the surveillance center" as a trigger. If you would like to hide a sensor type you can do so by either unchecking "Notify the surveillance center" in the camera configuration or by using the "ignored" customize option detailed below.

-In order for the sensors to work the hikvision user must have the 'Remote: Notify Surveillance Center / Trigger Alarm Output' permission which can be enabled from the user managment section of the web interace. Also the 'WEB Authentication' needs to be set to 'digest/basic' in the security / authentication section. +In order for the sensors to work the hikvision user must have the 'Remote: Notify Surveillance Center/Trigger Alarm Output' permission which can be enabled from the user management section of the web interface. Also the 'WEB Authentication' needs to be set to 'digest/basic' in the security/authentication section.

For example, if you configure a camera with the name "Front Porch" that has motion detection and line crossing events enabled to notify the surveillance center the following binary sensors will be added to Home Assistant: -``` +```text binary_sensor.front_porch_motion binary_sensor.front_port_line_crossing ``` -When used with a NVR device the sensors will be appended with the channel number they represent. For example, if you configure an NVR with the name "Home" that supports 2 cameras with motion detection and line crossing events enabled to notify the surveillance center the following binary sensors will be added to Home Assistant: +When used with a NVR device the sensors will be appended with the channel number they represent. For example, if you configure an NVR with the name "Home" that supports 2 cameras with motion detection and line crossing events enabled to notify the surveillance center the following binary sensors will be added to Home Assistant: -``` +```text binary_sensor.home_motion_1 binary_sensor.home_motion_2 binary_sensor.home_line_crossing_1 @@ -38,35 +38,37 @@ binary_sensor.home_line_crossing_2 ``` This platform should work with all Hikvision cameras and nvrs, and has been confirmed to work with the following models: + - DS-2CD3132-I - DS-2CD2232-I5 - DS-2CD2032-I - DS-2CD2042WD-I - DS-2CD2142FWD-I -To enable this sensor, the following lines are required in your `configuration.yaml`: +To enable this sensor, the following lines are required in your `configuration.yaml` file: ```yaml binary_sensor: - platform: hikvision - host: IP_ADDRESS - username: user - password: pass + - platform: hikvision + host: IP_ADDRESS + username: user + password: pass ``` Configuration options for a Hikvision Sensor: -- **name** (*Optional*): The name you'd like to give the camera in Home Assistant, defaults to name defined in the camera. - **host** (*Required*): The IP address of the camera you would like to connect to. -- **port** (*Optional*): The port to connect to the camera on, defaults to 80. -- **ssl** (*Optional*): True if you want to connect with https. Be sure to set the port also. - **username** (*Required*): The username to authenticate with. - **password** (*Required*): The password to authenticate with. +- **name** (*Optional*): The name you'd like to give the camera in Home Assistant, defaults to name defined in the camera. +- **port** (*Optional*): The port to connect to the camera on, defaults to 80. +- **ssl** (*Optional*): True if you want to connect with https. Be sure to set the port also. - **customize** (*Optional*): This attribute contains sensor-specific override values. Only sensor name needs defined: - **ignored** (*Optional*): Ignore this sensor completely. It won't be shown in the Web Interface and no events are generated for it. - **delay** (*Optional*): Specify the delay to wait after a sensor event ends before notifying Home Assistant. This is useful to catch multiple quick trips in one window without the state toggling on and off. The default delay is 5 seconds. Supported sensor/event types are: + - Motion - Line Crossing - Field Detection @@ -84,37 +86,36 @@ Supported sensor/event types are: - Face Detection - Scene Change Detection - Example of a configuration in your `configuration.yaml` that utilizes the customize options for a camera: ```yaml binary_sensor: - platform: hikvision - host: 192.168.X.X - port: 80 - ssl: False - username: user - password: pass - customize: - motion: - delay: 30 - line_crossing: - ignored: True + - platform: hikvision + host: 192.168.X.X + port: 80 + ssl: False + username: user + password: pass + customize: + motion: + delay: 30 + line_crossing: + ignored: True ``` Example of a configuration in your `configuration.yaml` that utilizes the customize options for a nvr: ```yaml binary_sensor: - platform: hikvision - host: 192.168.X.X - port: 80 - ssl: False - username: user - password: pass - customize: - motion_1: - delay: 30 - field_detection_2: - ignored: True + - platform: hikvision + host: 192.168.X.X + port: 80 + ssl: False + username: user + password: pass + customize: + motion_1: + delay: 30 + field_detection_2: + ignored: True ``` diff --git a/source/_components/foursquare.markdown b/source/_components/foursquare.markdown index de70d056611..5ec302887eb 100644 --- a/source/_components/foursquare.markdown +++ b/source/_components/foursquare.markdown @@ -31,7 +31,7 @@ Configuration variables: #### Getting the access token #### After you have registered your APP on your [My Apps Page](https://foursquare.com/developers/apps) you get a `CLIENT_ID` and you have specified a -`REDIRECT_URL` which can be any URL you like, but since it will get your access token via a HTTP GET request, it should be a URL which will ignore the `access_token` HTTP GET variable. A good idea is to choose the URL of your Home Assistant. +`REDIRECT_URL` which can be any URL you like, but since it will get your access token via an HTTP GET request, it should be a URL which will ignore the `access_token` HTTP GET variable. A good idea is to choose the URL of your Home Assistant. Visit the following URL in your browser: ``` @@ -40,7 +40,7 @@ https://foursquare.com/oauth2/authenticate?client_id=CLIENT_ID&response_type=tok and change the `CLIENT_ID` and `YOUR_REGISTERED_REDIRECT_URL` to your actual values. You will receive an OAuth request landing page, asking you if you want to connect your Foursquare account to your newly created app. Say "Yes". -After that, you will get redirected to your `REDIRECT_URL` with the `access_token` as a HTTP GET variable. Copy everything after the = and paste it in your configuration.yaml as the `access_token`. +After that, you will get redirected to your `REDIRECT_URL` with the `access_token` as an HTTP GET variable. Copy everything after the = and paste it in your configuration.yaml as the `access_token`. ### {% linkable_title Real-Time API %} diff --git a/source/_components/frontend.markdown b/source/_components/frontend.markdown index 4ba9e004cd3..871db22f688 100644 --- a/source/_components/frontend.markdown +++ b/source/_components/frontend.markdown @@ -135,7 +135,7 @@ Those will be loaded via `` on a ### {% linkable_title Manual Language Selection %} -The browser language is automatically detected. To use a different language, go to **General** in the Configuration panel and select a one from "Choose a Language". It will be applied immediately. +The browser language is automatically detected. To use a different language, go to **General** in the Configuration panel and select one from "Choose a Language". It will be applied immediately.

diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index b19e182e2ed..6fe9d5ff87a 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -67,7 +67,7 @@ agent_user_id: required: false type: string api_key: - description: An API Key generated for the project from [Google Console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview) which allows you to update devices without unlinking and relinking an account (see step 9 below). If not provided then the `google_assistant.request_sync` service is not exposed. It is recommended to set up this configuration key as it also allows the usage of the following command, "Ok Google, sync my devices". Once you have setup this componenet you will need to call this service (or command) each time you add a new device that you wish to control via the Google Assistant integration. + description: An API Key generated for the project from [Google Console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview) which allows you to update devices without unlinking and relinking an account (see step 9 below). If not provided then the `google_assistant.request_sync` service is not exposed. It is recommended to set up this configuration key as it also allows the usage of the following command, "Ok Google, sync my devices". Once you have setup this component you will need to call this service (or command) each time you add a new device that you wish to control via the Google Assistant integration. required: false type: string expose_by_default: diff --git a/source/_components/image_processing.dlib_face_identify.markdown b/source/_components/image_processing.dlib_face_identify.markdown index 5cac74b560f..34690d6b8fd 100644 --- a/source/_components/image_processing.dlib_face_identify.markdown +++ b/source/_components/image_processing.dlib_face_identify.markdown @@ -13,7 +13,7 @@ featured: false ha_release: 0.44 --- -The `dlib_face_identify` image processing platform allows you to use the [Dlib](http://www.dlib.net/) through Home Assistant. This platform allow you to identify persons on camera and fire a event with identify persons. +The `dlib_face_identify` image processing platform allows you to use the [Dlib](http://www.dlib.net/) through Home Assistant. This platform allow you to identify persons on camera and fire an event with identify persons. For using the result inside an automation rule, take a look at the [component](/components/image_processing/) page. diff --git a/source/_components/knx.markdown b/source/_components/knx.markdown index f27048d4e75..7acfae76761 100644 --- a/source/_components/knx.markdown +++ b/source/_components/knx.markdown @@ -116,7 +116,7 @@ knx: ``` * **type**: Type of the exposed value. Either time or datetime or any supported type of [KNX Sensor](/components/sensor.knx/) (e.g., "temperature" or "humidity"). -* **entity_id**: Entity id of the HASS component to be exposed. Not necessarry for types time and datetime. +* **entity_id**: Entity id of the HASS component to be exposed. Not necessary for types time and datetime. * **address**: KNX group address. diff --git a/source/_components/media_player.firetv.markdown b/source/_components/media_player.firetv.markdown index 96d9c48c0e8..0abf2b3dadc 100644 --- a/source/_components/media_player.firetv.markdown +++ b/source/_components/media_player.firetv.markdown @@ -16,7 +16,7 @@ ha_iot_class: "Local Polling" The `firetv` platform allows you to control a [Amazon Fire TV/stick](http://www.amazon.com/Amazon-DV83YW-Fire-TV/dp/B00U3FPN4U). -The python-firetv Python 2.x module with its helper script that exposes a HTTP server to fetch state and perform actions is used. +The python-firetv Python 2.x module with its helper script that exposes an HTTP server to fetch state and perform actions is used. Steps to configure your Amazon Fire TV stick with Home Assistant: diff --git a/source/_components/melissa.markdown b/source/_components/melissa.markdown index ed696574cc4..6c1017fdfde 100644 --- a/source/_components/melissa.markdown +++ b/source/_components/melissa.markdown @@ -21,7 +21,7 @@ To set the Melissa component up, add the following information to your `configur ```yaml # Example configuration.yaml entry melissa: - username: + username: password: ******** ``` diff --git a/source/_components/notify.gntp.markdown b/source/_components/notify.gntp.markdown index 29bda0c15ac..da4f718eb29 100644 --- a/source/_components/notify.gntp.markdown +++ b/source/_components/notify.gntp.markdown @@ -30,7 +30,7 @@ Configuration variables: - **name** (*Optional*): Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`. - **app_name** (*Optional*): The application name that will be displayed on every notification and will be registered with the server. -- **app_icon** (*Optional*): The icon that will be displayed on every notification. You can provide a HTTP URL or a `file://` URL. File URLs only work if Home Assistant and the GNTP server are running on the same machine. If no `app_icon` is set a local copy of the Home Assistant logo will be used. If you choose to use a HTTP URL please make the maximum image size 150 px by 150 px as Growl for Mac will sometimes timeout when registering. +- **app_icon** (*Optional*): The icon that will be displayed on every notification. You can provide an HTTP URL or a `file://` URL. File URLs only work if Home Assistant and the GNTP server are running on the same machine. If no `app_icon` is set a local copy of the Home Assistant logo will be used. If you choose to use an HTTP URL please make the maximum image size 150 px by 150 px as Growl for Mac will sometimes timeout when registering. - **hostname** (*Optional*): The hostname or IP address of the GNTP server to contact. - **password** (*Optional*): The password to authenticate to the GNTP server with. - **port** (*Optional*): The port that the GNTP server runs on. The specification states that servers should not allow users to use any port other than 23053 but `port` is provided here just in case. diff --git a/source/_components/sensor.rest.markdown b/source/_components/sensor.rest.markdown index a41ec48ab96..0c0cc9a7ab4 100644 --- a/source/_components/sensor.rest.markdown +++ b/source/_components/sensor.rest.markdown @@ -151,7 +151,7 @@ sensor: unit_of_measurement: "°C" ``` -### {% linkable_title Accessing a HTTP authentication protected endpoint %} +### {% linkable_title Accessing an HTTP authentication protected endpoint %} The REST sensor supports HTTP authentication and customized headers. diff --git a/source/_components/switch.fritzdect.markdown b/source/_components/switch.fritzdect.markdown index 49b5f3161af..cceeffaef37 100644 --- a/source/_components/switch.fritzdect.markdown +++ b/source/_components/switch.fritzdect.markdown @@ -41,7 +41,7 @@ Configuration variables: - **password** (*Required*): The password for your Fritz!Box. - **host** (*Optional*): The IP address/hostname of your Fritz!Box. Defaults to `fritz.box`. -It is recommened to create a dedicated user for Home Assistant and only allow access to "Smart Home". +It is recommended to create a dedicated user for Home Assistant and only allow access to "Smart Home".

If this component throws an error when starting home-assistant you should check if all actors are plugged in and connected to the FritzBox. Inactive actors that are not deleted from FritzBox configuration might lead to errors. diff --git a/source/_components/switch.kankun.markdown b/source/_components/switch.kankun.markdown index 03c5a217ed9..919b798f9d1 100644 --- a/source/_components/switch.kankun.markdown +++ b/source/_components/switch.kankun.markdown @@ -15,7 +15,7 @@ ha_iot_class: "Local Polling" The `kankun` switch platform allows you to toggle customized Kankun SP3 Wifi switches. Switches are modified to include the [json.cgi](https://github.com/homedash/kankun-json/blob/master/cgi-bin/json.cgi) -script to provide a HTTP API. Details of the necessary modifications can be found +script to provide an HTTP API. Details of the necessary modifications can be found [here](http://www.homeautomationforgeeks.com/openhab_http.shtml#kankun) (be sure to install the JSON version of the script as linked above). diff --git a/source/_components/tellstick.markdown b/source/_components/tellstick.markdown index 15431df445d..4f9e03870dd 100644 --- a/source/_components/tellstick.markdown +++ b/source/_components/tellstick.markdown @@ -30,6 +30,6 @@ tellstick: Configuration variables: - **signal_repetitions** (*Optional*): Because the tellstick sends its actions via radio and from most receivers it's impossible to know if the signal was received or not. Therefore you can configure the switch and light to try to send each signal repeatedly. -- **host** (*Optional*): If you run tellstick on a other server or with a hass.io add-on. +- **host** (*Optional*): If you run tellstick on another server or with a hass.io add-on. - **port** (*Optional*): If needed with host config option. Must be port pair, for example `[50800, 50801]`. diff --git a/source/_cookbook/custom_panel_using_react.markdown b/source/_cookbook/custom_panel_using_react.markdown index 800f2f3378d..e526487b0c5 100644 --- a/source/_cookbook/custom_panel_using_react.markdown +++ b/source/_cookbook/custom_panel_using_react.markdown @@ -20,7 +20,7 @@ This is a [React](https://facebook.github.io/react/) implementation of [TodoMVC] Download the source [here](https://github.com/home-assistant/example-custom-config/blob/master/panels/react.html). Copy the file to `/panels/` (you might have to create the directory if it doesn't exist). -Create a entry for the panel in your `configuration.yaml` file to enable it. +Create an entry for the panel in your `configuration.yaml` file to enable it. ```yaml panel_custom: diff --git a/source/_docs/installation/docker.markdown b/source/_docs/installation/docker.markdown index afd31d7e5f2..53ee1037841 100644 --- a/source/_docs/installation/docker.markdown +++ b/source/_docs/installation/docker.markdown @@ -80,7 +80,7 @@ If you want to use a USB Bluetooth adapter or Z-Wave USB Stick with Home Assista ### {% linkable_title QNAP NAS %} -As QNAP within QTS now supports Docker (with a neat UI), you can simply install Home Assistant using docker without the need for command-line. For details about the package (including compatability-information, if your NAS is supported), see https://www.qnap.com/solution/container_station/en/index.php +As QNAP within QTS now supports Docker (with a neat UI), you can simply install Home Assistant using docker without the need for command-line. For details about the package (including compatibility-information, if your NAS is supported), see https://www.qnap.com/solution/container_station/en/index.php The steps would be: diff --git a/source/_posts/2018-03-24-new-release-schedule.markdown b/source/_posts/2018-03-24-new-release-schedule.markdown index cf55f91c3af..d39d8d3633b 100644 --- a/source/_posts/2018-03-24-new-release-schedule.markdown +++ b/source/_posts/2018-03-24-new-release-schedule.markdown @@ -21,7 +21,7 @@ So this weekend we're going to shake things a little up. Instead of releasing a Diagram of the new release schedule

-The goal is to create a more stable first release without the need for a quick follow up hot fix. So if you want to be able to access the new features faster but don't mind the risk of running into the occassional bug, get yourself on the beta channel today: +The goal is to create a more stable first release without the need for a quick follow up hot fix. So if you want to be able to access the new features faster but don't mind the risk of running into the occasional bug, get yourself on the beta channel today: - Hass.io users will be able to enable the dev channel in the system settings. - For Docker users, the beta's will be published under the `rc` tag. From 6b61e2242300e3953096a86b161851ecdde1e6f0 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Thu, 29 Mar 2018 08:24:41 +0100 Subject: [PATCH 07/20] Fixing service name pt2 (#5036) * Fixing service name pt2 Missed one the first time around apparently * Add location --- source/_components/media_player.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/media_player.markdown b/source/_components/media_player.markdown index dfbe48ccc99..40b642dc0c2 100644 --- a/source/_components/media_player.markdown +++ b/source/_components/media_player.markdown @@ -9,7 +9,7 @@ sharing: true footer: true --- -Interacts with media players on your network. Please check the sidebar for a full list of supported devices. +Interacts with media players on your network. Please check the right sidebar for a full list of supported devices. ## {% linkable_title Services %} @@ -27,7 +27,7 @@ Available services: `turn_on`, `turn_off`, `toggle`, `volume_up`, `volume_down`, | `entity_id` | yes | Target a specific media player. Defaults to all. | | `is_volume_muted` | no | True/false for mute/unmute | -#### {% linkable_title Service `media_player/volume_set` %} +#### {% linkable_title Service `media_player.volume_set` %} | Service data attribute | Optional | Description | |------------------------|----------|--------------------------------------------------| From 3f6f8c4048c02ca777b7f216b327cd6de7a073f7 Mon Sep 17 00:00:00 2001 From: Martin Eberhardt Date: Thu, 29 Mar 2018 09:29:18 +0200 Subject: [PATCH 08/20] Fix ON/OFF being interpreted in binary_sensor.mqtt (#5042) * Fix ON/OFF being interpreted in binary_sensor.mqtt YAML interprets `ON` and `OFF` to `true` and `false`. This causes the site to show that instead of the actual default payloads. * Add header --- source/_components/binary_sensor.mqtt.markdown | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/_components/binary_sensor.mqtt.markdown b/source/_components/binary_sensor.mqtt.markdown index b49b21b3651..1c6a6d87eff 100644 --- a/source/_components/binary_sensor.mqtt.markdown +++ b/source/_components/binary_sensor.mqtt.markdown @@ -17,6 +17,8 @@ The `mqtt` binary sensor platform uses an MQTT message payload to set the binary The binary sensor state will be updated only after a new message is published on `state_topic` matching `payload_on` or `payload_off`. If these messages are published with the `retain` flag set, the binary sensor will receive an instant state update after subscription and Home Assistant will display the correct state on startup. Otherwise, the initial state displayed in Home Assistant will be `unknown`. +## {% linkable_title Configuration %} + The `mqtt` binary sensor platform optionally supports an `availability_topic` to receive online and offline messages (birth and LWT messages) from the MQTT device. During normal operation, if the MQTT cover device goes offline (i.e., publishes `payload_not_available` to `availability_topic`), Home Assistant will display the binary sensor as `unavailable`. If these messages are published with the `retain` flag set, the binary sensor will receive an instant update after subscription and Home Assistant will display the correct availability state of the binary sensor when Home Assistant starts up. If the `retain` flag is not set, Home Assistant will display the binary sensor as `unavailable` when Home Assistant starts up. If no `availability_topic` is defined, Home Assistant will consider the MQTT device to be available. To use an MQTT binary sensor in your installation, add the following to your `configuration.yaml` file: @@ -42,12 +44,12 @@ payload_on: description: The payload that represents the on state. required: false type: string - default: ON + default: "ON" payload_off: description: The payload that represents the off state. required: false type: string - default: OFF + default: "OFF" availability_topic: description: "The MQTT topic subscribed to receive birth and LWT messages from the MQTT device. If `availability_topic` is not defined, the binary sensor availability state will always be `available`. If `availability_topic` is defined, the binary sensor availability state will be `unavailable` by default." required: false From a1e51cc46bd696056d98e3e3e8dac14d8881345c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 29 Mar 2018 09:48:51 +0200 Subject: [PATCH 09/20] Update style and fix formatting (#5040) * Update style and fix formatting * Add platform * Be more precise --- source/_components/calendar.google.markdown | 53 ++++++++++----------- 1 file changed, 26 insertions(+), 27 deletions(-) diff --git a/source/_components/calendar.google.markdown b/source/_components/calendar.google.markdown index 4e7ea750b8c..d0463968357 100644 --- a/source/_components/calendar.google.markdown +++ b/source/_components/calendar.google.markdown @@ -14,7 +14,7 @@ ha_release: 0.33 --- -This platform allows you to connect to your [Google Calendars](https://calendar.google.com) and generate binary sensors. The sensors created can trigger based on any event on the calendar or only for matching events. When you first setup this component it will generate a new configuration file *google_calendars.yaml* that will contain information about all of the calendars you can see. +The `google` calendar platform allows you to connect to your [Google Calendars](https://calendar.google.com) and generate binary sensors. The sensors created can trigger based on any event on the calendar or only for matching events. When you first setup this component it will generate a new configuration file `google_calendars.yaml` that will contain information about all of the calendars you can see. ### {% linkable_title Prerequisites %} @@ -27,7 +27,7 @@ Generate a Client ID and Client Secret on [Google Developers Console](https://co 1. Save this page. You don't have to fill out anything else there. 1. Click 'Create credentials' -> OAuth client ID. 1. Set the Application type to 'Other' and give this credential set a name then click Create. -1. Save the client ID and secret as you will need to put these in your configuration.yaml file. +1. Save the client ID and secret as you will need to put these in your `configuration.yaml` file. 1. Click on "Library", search for "Google Calendar API" and enable it. ### {% linkable_title Basic Setup %} @@ -37,33 +37,43 @@ To integrate Google Calendar in Home Assistant, add the following section to you ```yaml # Example configuration.yaml entry google: - client_id: *Value_created_from_steps_above* - client_secret: *Value_created_from_steps_above* + client_id: YOUR_CLIENT_ID + client_secret: YOUR_CLIENT_SECRET ``` -Configuration variables: - -- **client_id** (*Required*): Use the value you generated in the Prerequisites stage. -- **client_secret** (*Required*): Use the value you generated in the Prerequisites stage. -- **track_new_calendar** (*Optional*): Will automatically generate a binary sensor when a new calendar is detected. The system scans for new calendars on startup. By default this is set to `True`. +{% configuration %} +client_id: + description: Use the value you generated in the Prerequisites stage. + required: true + type: string +minimum: + description: Use the value you generated in the Prerequisites stage. + required: true + type: string +track_new_calendar: + description: Will automatically generate a binary sensor when a new calendar is detected. The system scans for new calendars only on startup. + required: false + type: boolean + default: true +{% endconfiguration %} The next steps will require you to have Home Assistant running. After you have it running complete the Google authentication that pops up. It will give you a URL and a code to enter. This will grant your Home Assistant service access to all the Google Calendars that the account you authenticate with can read. This is a Read-Only view of these calendars. - ### {% linkable_title Calendar Configuration %} -Editing `google_calendars.yaml` + +Editing the `google_calendars.yaml` file. A basic entry for a single calendar looks like: ```yaml -- cal_id: "***************************@group.calendar.google.com" +- cal_id: "*****@group.calendar.google.com" entities: - device_id: test_everything name: Give me everything track: true -- cal_id: "***************************@group.calendar.google.com" +- cal_id: "*****@group.calendar.google.com" entities: - device_id: test_important name: Important Stuff @@ -79,38 +89,27 @@ A basic entry for a single calendar looks like: Variables: - **cal_id**: The Google generated unique id for this calendar. **DO NOT CHANGE** - - **entities**: Yes, you can have multiple sensors for a calendar! - - **device_id**: (*Required*): The name that all your automations/scripts will use to reference this device. - - **name**: (*Required*): What is the name of your sensor that you'll see in the frontend. - - **track**: (*Required*): Should we create a sensor `True` or ignore it `False`? - - **search**: (*Optional*): If set will only trigger for matched events. - - **offset**: (*Optional*): A set of characters that precede a number in the event title for designating a pre-trigger state change on the sensor. (Default: `!!`) From this we will end up with the binary sensors `calendar.test_unimportant` and `calendar.test_important` which will toggle themselves on/off based on events on the same calendar that match the search value set for each. You'll also have a sensor `calendar.test_everything` that will not filter events out and always show the next event available. But what if you only wanted it to toggle based on all events? Just leave out the *search* parameter. -**Note**: If you use a `#` sign for `search` then wrap the whole search term in quotes. Otherwise everything following the hash sign would be considered a YAML comment. - +

+If you use a `#` sign for `search` then wrap the whole search term in quotes. Otherwise everything following the hash sign would be considered a YAML comment. +

### {% linkable_title Sensor attributes %} - **offset_reached**: If set in the event title and parsed out will be `on`/`off` once the offset in the title in minutes is reached. So the title `Very important meeting #Important !!-10` would trigger this attribute to be `on` 10 minutes before the event starts. - - **all_day**: `True`/`False` if this is an all day event. Will be `False` if there is no event found. - - **message**: The event title with the `search` and `offset` values extracted. So in the above example for **offset_reached** the **message** would be set to `Very important meeting` - - **description**: The event description. - - **location**: The event Location. - - **start_time**: Start time of event. - - **end_time**: End time of event. From 41a1a06af13c76d960e6d8745939f27ba042ee2b Mon Sep 17 00:00:00 2001 From: Kane610 Date: Thu, 29 Mar 2018 09:49:03 +0200 Subject: [PATCH 10/20] deCONZ debug information (#5026) * Debug information * Minor changes --- source/_components/deconz.markdown | 56 ++++++++++++++++++++---------- 1 file changed, 37 insertions(+), 19 deletions(-) diff --git a/source/_components/deconz.markdown b/source/_components/deconz.markdown index abebcec8039..0be523adb55 100644 --- a/source/_components/deconz.markdown +++ b/source/_components/deconz.markdown @@ -17,19 +17,7 @@ ha_iot_class: "Local Push" [deCONZ REST API](http://dresden-elektronik.github.io/deconz-rest-doc/). -Home Assistant will automatically discover deCONZ presence on your network, if `discovery:` is present in your `configuration.yaml` file. - -If you don't have the API key, you can generate an API key for deCONZ by using the one-click functionality similar to Philips Hue. Go to Menu->Settings->Unlock Gateway in deCONZ and then use the deCONZ configurator in Home Assistant GUI to create an API key. When you've generated the API key from Home Assistant, the API key will be stored in deconz.conf inside the home-assistant folder. - -You can add the following to your configuration.yaml file if you are not using the `discovery:` component: - -```yaml -# Example configuration.yaml entry -deconz: - host: IP ADDRESS -``` - -#### {% linkable_title Supported Device types %} +### {% linkable_title Supported device types %} - [Zigbee Lights](/components/light.deconz/) - [Humidity Sensors](/components/sensor.deconz/) @@ -40,6 +28,20 @@ deconz: - [Switches (Remote Controls)](/components/sensor.deconz/) - [Temperature Sensors](/components/sensor.deconz/) +## {% linkable_title Configuration %} + +Home Assistant will automatically discover deCONZ presence on your network, if `discovery:` is present in your `configuration.yaml` file. + +If you don't have the API key, you can generate an API key for deCONZ by using the one-click functionality similar to Philips Hue. Go to **Menu** -> **Settings** -> **Unlock Gateway** in deCONZ and then use the deCONZ configurator in Home Assistant frontend to create an API key. When you've generated the API key from Home Assistant, the API key will be stored in `deconz.conf` inside the `.homeassistant` folder. + +You can add the following to your configuration.yaml file if you are not using the `discovery:` component: + +```yaml +# Example configuration.yaml entry +deconz: + host: IP_ADDRESS +``` + {% configuration %} host: description: The IP address of your deCONZ web server. @@ -66,10 +68,24 @@ deconz: port: 80 ``` +## {% linkable_title Debugging component %} + +If you have problems with deCONZ or the component you can add debug prints to the log. + +```yaml +logger: + default: info + logs: + pydeconz: debug +    homeassistant.components.deconz: debug +``` + ## {% linkable_title Device services %} + Available services: `configure`. -#### {% linkable_title Service `deconz/configure` %} +#### {% linkable_title Service `deconz.configure` %} + Set attribute of device in Deconz using [Rest API](http://dresden-elektronik.github.io/deconz-rest-doc/rest/). | Service data attribute | Optional | Description | @@ -86,7 +102,7 @@ Field and entity are exclusive, i.e you can only use one in a request. { "field": "/config", "data": {"permitjoin": 60} } -## {% linkable_title Remote control devices%} +## {% linkable_title Remote control devices %} Remote controls (ZHASwitch category) will be not be exposed as a regular entity, but as events named 'deconz_event' with a payload of 'id' and 'event'. Id will be the device name from deCONZ and Event will be the momentary state of the switch. However, a sensor entity will be created that shows the battery level of the switch as reported by deCONZ, named sensor.device_name_battery_level. @@ -107,6 +123,7 @@ For the IKEA Tradfri remote, 1 is the middle button, 2 is up, 3 is down, 4 is le ### {% linkable_title Step up and step down input number with wireless dimmer %} +{% raw %} ```yaml automation: - alias: 'Toggle lamp from dimmer' @@ -133,9 +150,9 @@ automation: - service: light.turn_on data_template: entity_id: light.lamp - brightness: {% raw %}> + brightness: > {% set bri = states.light.lamp.attributes.brightness | int %} - {{ [bri+30, 249] | min }}{% endraw %} + {{ [bri+30, 249] | min }} - alias: 'Decrease brightness of lamp from dimmer' initial_state: 'on' @@ -149,7 +166,8 @@ automation: - service: light.turn_on data_template: entity_id: light.lamp - brightness: {% raw %}> + brightness: > {% set bri = states.light.lamp.attributes.brightness | int %} - {{ [bri-30, 0] | max }}{% endraw %} + {{ [bri-30, 0] | max }} ``` +{% endraw %} From 2851b2a606598cffd87895eb3ad3216ffabb93cb Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 29 Mar 2018 10:02:47 +0200 Subject: [PATCH 11/20] Update configuration samples (#5041) * Update configuration samples * Minor changes --- source/_components/amcrest.markdown | 16 +++-- source/_components/arlo.markdown | 20 ++++-- source/_components/august.markdown | 38 +++++----- source/_components/camera.foscam.markdown | 7 +- source/_components/camera.synology.markdown | 12 ++-- source/_components/canary.markdown | 8 +-- source/_components/cover.garadget.markdown | 16 +++-- source/_components/cover.myq.markdown | 22 ++++-- .../device_tracker.huawei_router.markdown | 29 +++++--- .../device_tracker.trackr.markdown | 17 +++-- source/_components/doorbird.markdown | 4 +- source/_components/dyson.markdown | 28 ++++---- source/_components/eight_sleep.markdown | 26 +++++-- source/_components/goalfeed.markdown | 4 +- source/_components/light.avion.markdown | 2 - source/_components/light.decora_wifi.markdown | 19 +++-- source/_components/lock.nello.markdown | 21 ++++-- source/_components/lock.sesame.markdown | 20 ++++-- source/_components/lutron.markdown | 2 + source/_components/media_player.cmus.markdown | 8 +-- .../media_player.ue_smart_radio.markdown | 4 +- source/_components/melissa.markdown | 6 +- source/_components/mercedesme.markdown | 18 ++--- source/_components/mqtt_eventstream.markdown | 2 + source/_components/mqtt_statestream.markdown | 2 + source/_components/mychevy.markdown | 46 +++++-------- source/_components/neato.markdown | 20 ++++-- source/_components/notify.matrix.markdown | 6 +- source/_components/notify.rocketchat.markdown | 13 ++-- source/_components/nuheat.markdown | 8 +-- source/_components/rainbird.markdown | 19 +++-- source/_components/raincloud.markdown | 20 +++--- source/_components/ring.markdown | 18 +++-- source/_components/sensor.hp_ilo.markdown | 11 +-- source/_components/sensor.imap.markdown | 4 +- source/_components/sensor.mfi.markdown | 8 ++- source/_components/sensor.mopar.markdown | 26 ++++--- source/_components/sensor.random.markdown | 2 + source/_components/sensor.sma.markdown | 6 +- .../_components/sensor.synologydsm.markdown | 6 +- source/_components/shiftr.markdown | 20 ++++-- source/_components/skybell.markdown | 6 +- source/_components/sleepiq.markdown | 17 +++-- source/_components/switch.hook.markdown | 31 +++++++-- source/_components/switch.mfi.markdown | 8 ++- .../_components/switch.rainmachine.markdown | 69 ++++++++++--------- source/_components/tesla.markdown | 4 +- source/_components/volvooncall.markdown | 19 ++--- source/_components/waterfurnace.markdown | 43 +++++------- source/_components/zoneminder.markdown | 4 +- 50 files changed, 473 insertions(+), 312 deletions(-) diff --git a/source/_components/amcrest.markdown b/source/_components/amcrest.markdown index 379d601f219..fc62783afa0 100644 --- a/source/_components/amcrest.markdown +++ b/source/_components/amcrest.markdown @@ -13,23 +13,25 @@ ha_iot_class: "Local Polling" ha_release: 0.49 --- -The `amcrest` platform allows you to integrate your [Amcrest](https://amcrest.com/) IP camera in Home Assistant. +The `amcrest` camera platform allows you to integrate your [Amcrest](https://amcrest.com/) IP camera in Home Assistant. + +## {% linkable_title Configuration %} To enable your camera in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry amcrest: - - host: IP_ADDRESS - username: USERNAME - password: PASSWORD + - host: IP_ADDRESS_CAMERA_1 + username: YOUR_USERNAME + password: YOUR_PASSWORD sensors: - motion_detector - sdcard - - host: IP_ADDRESS - username: USERNAME - password: PASSWORD + - host: IP_ADDRESS_CAMERA_2 + username: YOUR_USERNAME + password: YOUR_PASSWORD resolution: low stream_source: snapshot sensors: diff --git a/source/_components/arlo.markdown b/source/_components/arlo.markdown index 479a7713293..e82ade68d13 100644 --- a/source/_components/arlo.markdown +++ b/source/_components/arlo.markdown @@ -15,19 +15,27 @@ ha_iot_class: "Cloud Polling" The `arlo` implementation allows you to integrate your [Arlo](https://arlo.netgear.com/) devices in Home Assistant. +## {% linkable_title Configuration %} + To enable device linked in your [Arlo](https://arlo.netgear.com/) account, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry arlo: - username: you@example.com - password: secret + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` -Configuration variables: - -- **username** (*Required*): The username for accessing your Arlo account. -- **password** (*Required*): The password for accessing your Arlo account. +{% configuration %} +username: + description: The username for accessing your Arlo account. + required: true + type: string +password: + description: The password for accessing your Arlo account. + required: true + type: string +{% endconfiguration %} It is recommended to create a dedicated user on Arlo website to be used within Home Assistant and then share your Arlo cameras. diff --git a/source/_components/august.markdown b/source/_components/august.markdown index cbac63c9357..a4df212e8bc 100644 --- a/source/_components/august.markdown +++ b/source/_components/august.markdown @@ -15,6 +15,8 @@ ha_iot_class: "Cloud Polling" The `august` component allows you to integrate your [August](http://august.com) devices in Home Assistant. Currently this component supports August Lock and Doorbell. +## {% linkable_title Configuration %} + You will need your August login information (username (either phone# or email), and password) to use this module. To set it up, add the following to your `configuration.yaml` file: @@ -24,27 +26,27 @@ To set it up, add the following to your `configuration.yaml` file: august: login_method: phone username: "+16041234567" - password: secret + password: YOUR_PASSWORD ``` {% configuration %} - login_method: - description: Method to login to your August account, either "email" or "phone". A verification code will be sent to your email or phone during setup. - required: true - type: string - username: - description: The username for accessing your August account. This depends on your login_method, if login_method is email, this will be your email of the account. Otherwise, this will be your phone number. - required: true - type: string - password: - description: The password for accessing your August account. - required: true - type: string - timeout: - description: Timeout to wait for connections. - required: false - type: int - default: 10 +login_method: + description: Method to login to your August account, either "email" or "phone". A verification code will be sent to your email or phone during setup. + required: true + type: string +username: + description: The username for accessing your August account. This depends on your login_method, if login_method is email, this will be your email of the account. Otherwise, this will be your phone number. + required: true + type: string +password: + description: The password for accessing your August account. + required: true + type: string +timeout: + description: Timeout to wait for connections. + required: false + type: int + default: 10 {% endconfiguration %} Once Home Assistant is started, a configurator will pop up asking you to enter verification code that is sent to your phone number or email. diff --git a/source/_components/camera.foscam.markdown b/source/_components/camera.foscam.markdown index 2003ecaa25b..c9d1aabd505 100644 --- a/source/_components/camera.foscam.markdown +++ b/source/_components/camera.foscam.markdown @@ -15,6 +15,8 @@ ha_iot_class: "Local Polling" The `foscam` platform allows you to watch the live stream of your [Foscam](http://www.foscam.com/) IP camera in Home Assistant. +## {% linkable_title Configuration %} + To enable your Foscam IP camera in your installation, add the following to your `configuration.yaml` file: ```yaml @@ -22,8 +24,8 @@ To enable your Foscam IP camera in your installation, add the following to your camera: - platform: foscam ip: IP_ADDRESS - username: USERNAME - password: PASSWORD + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` Configuration variables: @@ -39,4 +41,5 @@ There seems to be some issues within Foscam with lengthy passwords and passwords

### {% linkable_title Control Foscam PTZ (Pan/Tilt/Zoom) - Home/Away %} + Foscam Webcams which support CGI Commands can be controlled by Home Assistant ([Source](http://www.ipcamcontrol.net/files/Foscam%20IPCamera%20CGI%20User%20Guide-V1.0.4.pdf)). For an example of how this can be done, see the [Foscam IP Camera Pan, Tilt, Zoom Control](/cookbook/foscam_away_mode_PTZ/) Cookbook entry. diff --git a/source/_components/camera.synology.markdown b/source/_components/camera.synology.markdown index d8314358323..93a2e78ff36 100644 --- a/source/_components/camera.synology.markdown +++ b/source/_components/camera.synology.markdown @@ -14,7 +14,7 @@ ha_iot_class: "Local Polling" ---   -The `synology` platform allows you to watch the live streams of your [Synology](https://www.synology.com/) Surveillance Station based IP cameras in Home Assistant. +The `synology` camera platform allows you to watch the live streams of your [Synology](https://www.synology.com/) Surveillance Station based IP cameras in Home Assistant. To enable your Surveillance Station cameras in your installation, add the following to your `configuration.yaml` file: @@ -22,9 +22,9 @@ To enable your Surveillance Station cameras in your installation, add the follow # Minimum configuration.yaml entry camera: - platform: synology - url: SYNOLOGY_URL - username: USERNAME - password: PASSWORD + url: IP_ADDRESS_OF_SYNOLOGY_NAS + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` Configuration variables: @@ -43,8 +43,8 @@ A full sample configuration for the `synology` platform is shown below: camera: - platform: synology url: https://192.168.1.120:5001 - username: USERNAME - password: PASSWORD + username: YOUR_USERNAME + password: YOUR_PASSWORD timeout: 15 verify_ssl: False ``` diff --git a/source/_components/canary.markdown b/source/_components/canary.markdown index 425055f48a4..186d704e17e 100644 --- a/source/_components/canary.markdown +++ b/source/_components/canary.markdown @@ -15,6 +15,8 @@ ha_iot_class: "Cloud Polling" The `canary` component allows you to integrate your [Canary](https://canary.is) devices in Home Assistant. +## {% linkable_title Configuration %} + You will need your Canary login information (username, usually your email address, and password) to use this module. To set it up, add the following to your `configuration.yaml` file: @@ -22,8 +24,8 @@ To set it up, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry canary: - username: you@example.com - password: secret + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` {% configuration %} @@ -42,8 +44,6 @@ canary: default: 10 {% endconfiguration %} - - Once loaded, your front end will have the following components: * A camera image triggered by motion for each camera. diff --git a/source/_components/cover.garadget.markdown b/source/_components/cover.garadget.markdown index 04a8fcaa6c6..0a3b5de358e 100644 --- a/source/_components/cover.garadget.markdown +++ b/source/_components/cover.garadget.markdown @@ -16,6 +16,8 @@ ha_iot_class: "Cloud Polling" The `garadget` cover platform lets you control [Garadget](http://www.garadget.com/) garage door futurizers through Home Assistant. +## {% linkable_title Configuration %} + To enable Garadget Covers in your installation, add the following to your `configuration.yaml` file: ```yaml @@ -24,8 +26,8 @@ cover: - platform: garadget covers: 190028001947343412342341: - username: UseYourLogin@garadget.com - password: abc123 + username: YOUR_USERNAME + password: YOUR_PASSWORD 4c003f001151353432134214: access_token: df4cc785ff818f2b01396c44142342fccdef ``` @@ -44,12 +46,13 @@ Configuration variables: If provided, the **access_token** will be used, otherwise the **username** and **password** will be used to automatically generate an access token at start time. +## {% linkable_title Example %} -**Example with more detail:**

+{% raw %} ```yaml # Related configuration.yaml entry cover: @@ -64,13 +67,13 @@ sensor: sensors: garage_door_status: friendly_name: 'State of the door' - value_template: {% raw %}'{{ states.cover.garage_door.state }}'{% endraw %} + value_template: '{{ states.cover.garage_door.state }}' garage_door_time_in_state: friendly_name: 'Since' - value_template: {% raw %}'{{ states.cover.garage_door.attributes.time_in_state }}'{% endraw %} + value_template: '{{ states.cover.garage_door.attributes.time_in_state }}' garage_door_wifi_signal_strength: friendly_name: 'WiFi strength' - value_template: {% raw %}'{{ states.cover.garage_door.attributes.wifi_signal_strength }}'{% endraw %} + value_template: '{{ states.cover.garage_door.attributes.wifi_signal_strength }}' unit_of_measurement: 'dB' group: @@ -88,6 +91,7 @@ customize: sensor.garage_door_wifi_signal_strength: icon: mdi:wifi ``` +{% endraw %} Some of the Garadget sensors can create a lot of clutter in the logbook. Use this section of code in your `configuration.yaml` to exclude those entries. diff --git a/source/_components/cover.myq.markdown b/source/_components/cover.myq.markdown index 84335655d95..160b4f75f74 100644 --- a/source/_components/cover.myq.markdown +++ b/source/_components/cover.myq.markdown @@ -21,13 +21,23 @@ To use your MyQ cover in your installation, add the following to your `configura # Example configuration.yml entry cover: - platform: myq - username: email@email.com - password: password + username: YOUR_USERNAME + password: YOUR_PASSWORD type: chamberlain ``` -Configuration variables: +{% configuration %} +username: + description: Your MyQ account username. + required: true + type: string +password: + description: Your MyQ account password. + required: true + type: string +password: + description: "Your device type/brand. Supported types are `chamberlain`, `liftmaster`, `craftsman` and `merlin`." + required: true + type: string +{% endconfiguration %} -- **username** (*Required*): Your MyQ account username. -- **password** (*Required*): Your MyQ account password. -- **type** (*Required*): Your device type/brand. Supported types are `chamberlain`, `liftmaster`, `craftsman` and `merlin`. diff --git a/source/_components/device_tracker.huawei_router.markdown b/source/_components/device_tracker.huawei_router.markdown index 7ff3bc8e0bc..92ee5c62d47 100644 --- a/source/_components/device_tracker.huawei_router.markdown +++ b/source/_components/device_tracker.huawei_router.markdown @@ -12,9 +12,12 @@ 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). +The `huawei` device trakcer platform 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 and HG8247Q Smart Router (used by Vodafone Portugal). +## {% linkable_title Configuration %} + To use a Huawei router in your installation, add the following to your `configuration.yaml` file: ```yaml @@ -22,15 +25,23 @@ To use a Huawei router in your installation, add the following to your `configur device_tracker: - platform: huawei_router host: 192.168.1.1 - username: user - password: pass + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` -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. - +{% configuration %} +host: + description: The IP address of your router, e.g., 192.168.1.1. + required: true + type: string +username: + description: The username to login into the router (the same used trough the router's web interface). + required: true + type: string +password: + description: The password for the specified username. + required: true + type: string +{% endconfiguration %} See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. diff --git a/source/_components/device_tracker.trackr.markdown b/source/_components/device_tracker.trackr.markdown index 198203404ba..962300ed1ea 100644 --- a/source/_components/device_tracker.trackr.markdown +++ b/source/_components/device_tracker.trackr.markdown @@ -24,11 +24,18 @@ To integrate TrackR in Home Assistant, add the following section to your `config # Example configuration.yaml entry device_tracker: platform: trackr - username: USERNAME - password: PASSWORD + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` -Configuration variables: +{% configuration %} +username: + description: The email address for the TrackR account. + required: true + type: string +password: + description: The password for your given username. + required: true + type: string +{% endconfiguration %} -- **username** (*Required*): The email address for the TrackR account. -- **password** (*Required*): The password for your given username. diff --git a/source/_components/doorbird.markdown b/source/_components/doorbird.markdown index 4ce686ec640..bda3a36a7a1 100644 --- a/source/_components/doorbird.markdown +++ b/source/_components/doorbird.markdown @@ -21,8 +21,8 @@ To connect your device, add the following to your `configuration.yaml` file: # Example configuration.yaml entry doorbird: host: IP_OR_HOSTNAME - username: abcdef0001 - password: xxxxxxxxxx + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` Configuration variables: diff --git a/source/_components/dyson.markdown b/source/_components/dyson.markdown index a2171582769..c0908624217 100644 --- a/source/_components/dyson.markdown +++ b/source/_components/dyson.markdown @@ -15,29 +15,31 @@ ha_release: 0.47 The `dyson` component is the main component to integrate all [Dyson](https://dyson.com) related platforms: [Fans](/components/fan/dyson/) and [Robot vacuum](/components/vacuum/dyson/). +## {% linkable_title Configuration %} + To enable this component, add the following lines to your `configuration.yaml`: ```yaml +# Example configuration.yaml entry dyson: - username: - password: - language: + username: YOUR_DYSON_USERNAME + password: YOUR_DYSON_PASSWORD + language: YOUR_DYSON_ACCOUNT_LANGUGAGE devices: - - device_id: # eg: Pure Cool Link device - device_ip: - - device_id: # eg: Eye 360 robot vacuum - device_ip: - ... + - device_id: DEVICE_ID_1 # eg: Pure Cool Link device + device_ip: DEVICE_ID_1 + - device_id: DEVICE_ID_2 # eg: Eye 360 robot vacuum + device_ip: DEVICE_ID_2 ``` Configuration variables: -- **username** (*Required*): Dyson account username (email address) -- **password** (*Required*): Dyson account password +- **username** (*Required*): Dyson account username (email address). +- **password** (*Required*): Dyson account password. - **language** (*Required*): Dyson account language country code. Known working codes: `FR`, `NL`, `GB`, `AU`. But others codes should work. -- **devices** (*Optional*): List of devices - - **device_id** (*Required*): Device ID. Available in the mobiles applications (*Settings* page) - - **device_ip** (*Required*): Device IP address +- **devices** (*Optional*): List of devices. + - **device_id** (*Required*): Device ID. Available in the mobiles applications (*Settings* page). + - **device_ip** (*Required*): Device IP address. `devices` list is optional but you'll have to provide them if discovery is not working (warnings in the logs and the devices are not available in Home Assistant web interface). *If your are using a robot vacuum (Dyson 360 Eye), discovery is not yet supported so you have to provide `devices` list.* diff --git a/source/_components/eight_sleep.markdown b/source/_components/eight_sleep.markdown index 0d730e2f7ab..3a455d4ab50 100644 --- a/source/_components/eight_sleep.markdown +++ b/source/_components/eight_sleep.markdown @@ -15,6 +15,8 @@ ha_iot_class: "Cloud Polling" The `eight_sleep` component allows Home Assistant to fetch data from your [Eight Sleep](https://eightsleep.com/) smart cover or mattress. +## {% linkable_title Configuration %} + It's setup utilizing 'Sensor' components to convey the current state of your bed and results of your sleep sessions and a 'Binary Sensor' component to indicate your presence in the bed. A service is also provided to set the heating level and duration of the bed. You must have at least two sleep sessions recorded in the Eight Sleep app prior to setting up the Home Assistant component. @@ -24,15 +26,25 @@ To get started add the following information to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry eight_sleep: - username: "user@email.com" - password: "password" + username: YOUR_E_MAIL_ADDRESS + password: YOUR_PASSWORD ``` -Configuration variables: - -- **username** (*Required*): The email address associated with your Eight Sleep account. -- **password** (*Required*): The password associated with your Eight Sleep account. -- **partner** (*Optional*): Default is False. Defines if you'd like to fetch data for both sides of the bed. +{% configuration %} +username: + description: The email address associated with your Eight Sleep account. + required: true + type: string +password: + description: The password associated with your Eight Sleep account. + required: true + type: string +password: + description: Defines if you'd like to fetch data for both sides of the bed. + required: false + type: string + default: False +{% endconfiguration %} ### {% linkable_title Supported features %} diff --git a/source/_components/goalfeed.markdown b/source/_components/goalfeed.markdown index 0320a66d848..5632a8847d7 100644 --- a/source/_components/goalfeed.markdown +++ b/source/_components/goalfeed.markdown @@ -19,8 +19,8 @@ To use this component, enter your email address and password from your goalfeed. ```yaml # Example configuration.yaml entry goalfeed: - username: your_email@gmail.com - password: goalfeed_password + username: YOUR_E_MAIL_ADDRESS + password: YOUR_PASSWORD ``` {% configuration %} diff --git a/source/_components/light.avion.markdown b/source/_components/light.avion.markdown index 74260e93957..68c40b1aac4 100644 --- a/source/_components/light.avion.markdown +++ b/source/_components/light.avion.markdown @@ -21,8 +21,6 @@ To enable these lights, add the following lines to your `configuration.yaml` fil # Example configuration.yaml entry light: - platform: avion - username: testuser@fakedomain.com - password: foobar ``` Configuration variables: diff --git a/source/_components/light.decora_wifi.markdown b/source/_components/light.decora_wifi.markdown index cf2c5556266..7fc68d0dcf8 100644 --- a/source/_components/light.decora_wifi.markdown +++ b/source/_components/light.decora_wifi.markdown @@ -26,13 +26,18 @@ To enable these lights, add the following lines to your `configuration.yaml` fil # Example configuration.yaml entry light: - platform: decora_wifi - username: my_leviton_user_email@email.com - password: my_leviton_password + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` -Configuration variables: - -- **username** (*Required*): Your "My Leviton" app email address/user name. -- **password** (*Required*): Your "My Leviton" app password. - +{% configuration %} +username: + description: Your "My Leviton" app email address/user name. + required: true + type: string +password: + description: Your "My Leviton" app password. + required: true + type: string +{% endconfiguration %} diff --git a/source/_components/lock.nello.markdown b/source/_components/lock.nello.markdown index 53f2e26e79b..558f9098b96 100644 --- a/source/_components/lock.nello.markdown +++ b/source/_components/lock.nello.markdown @@ -16,6 +16,7 @@ ha_iot_class: "Cloud Polling" --- The `nello` platform allows you to control [Nello](https://nello.io) intercoms. + To get started you need to create a secondary Nello account and authorize it to access your lock(s).

@@ -24,18 +25,26 @@ Be aware that if you use your main account for Home Assistant you may not be abl ## {% linkable_title Configuration %} +To add your Nello locks to your installation, add the following to your `configuration.yaml` file: + ```yaml # Example configuration.yaml entry lock: - platform: nello - username: mail@example.com - password: mySecretPassword + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` -Configuration variables: - -- **username** (*Required*): The username of your Nello account. -- **password** (*Required*): The password of your Nello account. +{% configuration %} +username: + description: The username of your Nello account. + required: true + type: string +password: + description: The password of your Nello account. + required: true + type: string +{% endconfiguration %} ## {% linkable_title Events %} diff --git a/source/_components/lock.sesame.markdown b/source/_components/lock.sesame.markdown index 01d9910fdac..affd029f63a 100644 --- a/source/_components/lock.sesame.markdown +++ b/source/_components/lock.sesame.markdown @@ -15,18 +15,28 @@ ha_release: "0.47" The `sesame` platform allows you to control your [Sesame](https://candyhouse.co/) smart locks made by CANDY HOUSE, Inc. +## {% linkable_title Configuration %} + Your Sesame needs to be paired with a mobile device running the app in *virtual station* mode, or a standalone [Wi-Fi Access Point](https://candyhouse.co/collections/frontpage/products/wi-fi-access-point). Once you have remote access enabled using one of the above AND the Integration - cloud option enabled on the Sesame app for that lock settings, add the following to your `configuration.yaml` file: + ```yaml # Example configuration.yaml entry lock: - platform: sesame - email: abc@i-lovecandyhouse.co - password: super-strong-password + email: YOUR_E_MAIL_ADDRESS + password: YOUR_PASSWORD ``` -Configuration variables: +{% configuration %} +email: + description: The email address for your Sesame account. + required: true + type: string +password: + description: The password for your Sesame account. + required: true + type: string +{% endconfiguration %} -- **email** (*Required*): The email address for your Sesame account. -- **password** (*Required*): The password for your Sesame account. diff --git a/source/_components/lutron.markdown b/source/_components/lutron.markdown index 67bdb19dd91..6799e1feb55 100644 --- a/source/_components/lutron.markdown +++ b/source/_components/lutron.markdown @@ -18,6 +18,8 @@ ha_iot_class: "Local Polling" Presently, there's only support for communicating with the [RadioRA 2](http://www.lutron.com/en-US/Products/Pages/WholeHomeSystems/RadioRA2/Overview.aspx) Main Repeater and only handle light switches and dimmers. +## {% linkable_title Configuration %} + When configured, the `lutron` component will automatically discover the rooms and their associated switches/dimmers as configured by the RadioRA 2 software from Lutron. Each room will be treated as a separate group. To use Lutron RadioRA 2 devices in your installation, add the following to your `configuration.yaml` file using the IP address of your RadioRA 2 main repeater: diff --git a/source/_components/media_player.cmus.markdown b/source/_components/media_player.cmus.markdown index 6754b57c874..1415de1e547 100644 --- a/source/_components/media_player.cmus.markdown +++ b/source/_components/media_player.cmus.markdown @@ -23,19 +23,19 @@ media_player: - platform: cmus ``` -if cmus is running on a remote server: +If cmus is running on a remote server: ```yaml # Example configuration.yaml entry media_player: - platform: cmus - host: IP_ADDRESS - password: PASSWORD + host: IP_ADDRESS_OF_CMUS_PLAYER + password: YOUR_PASSWORD ``` Configuration variables: -- **host** (*Optional*): Hostname or IP address of the machine running cmus. Note if a remote cmus is configured that instance must be configured to listen to remote connections, which also requires a password to be set. +- **host** (*Optional*): Hostname or IP address of the machine running cmus. Note if a remote cmus is configured that instance must be configured to listen to remote connections, which also requires a password to be set. - **password** (*Required if host is set*): Password for your cmus player. - **port** (*Optional*): Port of the cmus socket, defaults to 3000. - **name** (*Optional*): The name you'd like to give the cmus player in Home Assistant diff --git a/source/_components/media_player.ue_smart_radio.markdown b/source/_components/media_player.ue_smart_radio.markdown index 217b625b8d5..0a250b6b860 100644 --- a/source/_components/media_player.ue_smart_radio.markdown +++ b/source/_components/media_player.ue_smart_radio.markdown @@ -22,8 +22,8 @@ To add your UE Smart Radio player to your installation, add the following to you # Example configuration.yaml entry media_player: - platform: ue_smart_radio - username: USERNAME - password: PASSWORD + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` {% configuration %} diff --git a/source/_components/melissa.markdown b/source/_components/melissa.markdown index 6c1017fdfde..46be358b61d 100644 --- a/source/_components/melissa.markdown +++ b/source/_components/melissa.markdown @@ -16,13 +16,15 @@ ha_iot_class: "Cloud Polling" The `Melissa` component is the main component to connect to a [Melissa Climate](http://seemelissa.com/) A/C control. +## {% linkable_title Configuration %} + To set the Melissa component up, add the following information to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry melissa: - username: - password: ******** + username: YOUR_MELISSA_USERNAME + password: YOUR_PASSWORD ``` {% configuration %} diff --git a/source/_components/mercedesme.markdown b/source/_components/mercedesme.markdown index c85b54cd78e..82f8679f458 100644 --- a/source/_components/mercedesme.markdown +++ b/source/_components/mercedesme.markdown @@ -14,12 +14,13 @@ ha_iot_class: "Cloud Polling" --- -The `Mercedes me` component offers integration with the [Mercedes me](https://www.mercedes-benz.com/de/mercedes-me/) cloud service and provides presence detection as well as sensors such as doors, tires, windows, and service interval. +The `mercedesme` component offers integration with the [Mercedes me](https://www.mercedes-benz.com/de/mercedes-me/) cloud service and provides presence detection as well as sensors such as doors, tires, windows, and service interval. This component provides the following platforms: - - Binary Sensors - such as windows, tires, doors, lock - - Sensors - such as fuel status, service interval, remaining km... - - Device tracker - to track location of your car + + - Binary Sensors: Windows, tires, doors and lock. + - Sensors:Fuel status, service interval, remaining km, etc. + - Device tracker: To track location of your car.

The component can integrate cars from European and African markets only. @@ -30,8 +31,8 @@ To use Mercedes me in your installation, add the following to your `configuratio ```yaml # Example configuration.yaml entry mercedesme: - username: email - password: password + username: YOUR_E_MAIL_ADDRESS + password: YOUR_PASSWORD ``` {% configuration %} @@ -43,11 +44,6 @@ password: description: The password for your given Mercedes me account. required: true type: string -scan_interval: - description: API polling interval. The minimal value can't be less then 30 seconds. - required: true - default: 30 - type: int {% endconfiguration %}

diff --git a/source/_components/mqtt_eventstream.markdown b/source/_components/mqtt_eventstream.markdown index 11644dc5b32..4946433e630 100644 --- a/source/_components/mqtt_eventstream.markdown +++ b/source/_components/mqtt_eventstream.markdown @@ -15,6 +15,8 @@ ha_iot_class: depends The `mqtt_eventstream` component connects two Home Assistant instances via MQTT. +## {% linkable_title Configuration %} + To integrate MQTT Eventstream into Home Assistant, add the following section to your `configuration.yaml` file: ```yaml diff --git a/source/_components/mqtt_statestream.markdown b/source/_components/mqtt_statestream.markdown index 1a607624d3c..8b1afaa89d5 100644 --- a/source/_components/mqtt_statestream.markdown +++ b/source/_components/mqtt_statestream.markdown @@ -15,6 +15,8 @@ ha_iot_class: depends The `mqtt_statestream` component publishes state changes in Home Assistant to individual MQTT topics. +## {% linkable_title Configuration %} + To enable MQTT Statestream in Home Assistant, add the following section to your `configuration.yaml` file: ```yaml diff --git a/source/_components/mychevy.markdown b/source/_components/mychevy.markdown index 64584db11d9..15a6b88ff19 100644 --- a/source/_components/mychevy.markdown +++ b/source/_components/mychevy.markdown @@ -13,33 +13,31 @@ ha_release: 0.62 ha_iot_class: "Cloud Polling" --- -The `MyChevy` component communicates with the -[my.chevrolet](https://my.chevrolet.com) website using selenium to log -in as your user, and screen scrape the data provided. GM does not -make it easy to sign up for any official development program, so this -provides a workaround to get access to your data. +The `MyChevy` component communicates with the [my.chevrolet](https://my.chevrolet.com) website using selenium to log in as your user, and screen scrape the data provided. GM does not make it easy to sign up for any official development program, so this provides a workaround to get access to your data. This component provides the following platforms: - - Binary sensors - if the car is plugged in - - Sensors - such as Battery Level, Charge Mode, EST Range, Total - Distance Traveled + + - Binary sensors: if the car is plugged in + - Sensors: Battery Level, Charge Mode, EST Range, Total Distance Traveled + +## {% linkable_title Configuration %} To use MyChevy in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry mychevy: - username: email - password: password + username: YOUR_E_MAIL_ADDRESS + password: YOUR_PASSWORD ``` {% configuration %} username: - description: The email address associated with your my.chevrolet account + description: The email address associated with your my.chevrolet account. required: true type: string password: - description: The password for your given my.chevrolet account + description: The password for your given my.chevrolet account. required: true type: string {% endconfiguration %} @@ -47,27 +45,15 @@ password: #### {% linkable_title Installation %} -Because this uses selenium behind the scenes, installation is more -complicated than merely pip install. See the installation instructions -at https://github.com/sdague/mychevy. +Because this uses selenium behind the scenes, installation is more complicated than merely pip install. See the [installation instructions](https://github.com/sdague/mychevy). #### {% linkable_title Limitations %} -The architecture of the GM automotive networking imposes some -limitations on the functionality of the component. +The architecture of the GM automotive networking imposes some limitations on the functionality of the component. -The OnStar network link is very slow, and takes 1 - 3 minutes to get -information back from the car. As such the mychevy component only -polls every 30 minutes to not overwhelms that connection. +The OnStar network link is very slow, and takes 1 - 3 minutes to get information back from the car. As such the mychevy component only polls every 30 minutes to not overwhelms that connection. -The OnStar network (or more specifically the gateway used by the -my.chevrolet website) appears to suffer more than most networks when -the car is a) in a garage, and b) it's cold outside (like < 15 degrees -F). One of the provided sensors is a status sensor which indicates if -we got connectivity with the car on the last polling cycle or not. +The OnStar network (or more specifically the gateway used by the my.chevrolet website) appears to suffer more than most networks when the car is a) in a garage, and b) it's cold outside (like < 15 degrees F). One of the provided sensors is a status sensor which indicates if we got connectivity with the car on the last polling cycle or not. + +The "API" for this is written by web scraping. As such, it only currently is known to work if you have a Chevy Bolt EV, and only 1 Chevy car connected to OnStar. Patches for extended support should go to the https://github.com/sdague/mychevy project first, then Home Assistant can be extended. -The "API" for this is written by web scraping. As such, it only -currently is known to work if you have a Chevy Bolt EV, and only 1 -Chevy car connected to OnStar. Patches for extended support should go -to the https://github.com/sdague/mychevy project first, then -Home Assistant can be extended. diff --git a/source/_components/neato.markdown b/source/_components/neato.markdown index 316769ff7ce..82c36d9dfad 100644 --- a/source/_components/neato.markdown +++ b/source/_components/neato.markdown @@ -19,15 +19,21 @@ To enable `neato` in your installation, add the following to your `configuration ```yaml # Example configuration.yaml entry neato: - username: USERNAME - password: PASSWORD + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` -Configuration variables: - -- **username** (*Required*): Username for the Neato account. -- **password** (*Required*): Password for the Neato account. +{% configuration %} +username: + description: Username for the Neato account. + required: true + type: string +password: + description: v + required: true + type: string +{% endconfiguration %}

-After the update to firmware 4.0 (which adds cleaning maps) there is also support for displaying the maps of the Botvac D3 Connected and Botvac D5 Connected robots. The start/stop functionality does not work. More information on how to update here: https://support.neatorobotics.com/hc/en-us/articles/115004320694-Software-Update-4-0-for-Neato-Botvac-Connected-D3-D5- +After the update to firmware 4.0 (which adds cleaning maps) there is also support for displaying the maps of the Botvac D3 Connected and Botvac D5 Connected robots. The start/stop functionality does not work. More information on how to update can be found [here](https://support.neatorobotics.com/hc/en-us/articles/115004320694-Software-Update-4-0-for-Neato-Botvac-Connected-D3-D5-).

diff --git a/source/_components/notify.matrix.markdown b/source/_components/notify.matrix.markdown index c74b962e347..2d9aff6a04a 100644 --- a/source/_components/notify.matrix.markdown +++ b/source/_components/notify.matrix.markdown @@ -15,6 +15,8 @@ ha_release: 0.32 The `matrix` platform allows you to deliver notifications from Home Assistant to a [Matrix](http://matrix.org) room. Rooms can be both direct as well as group chats. +## {% linkable_title Configuration %} + To enable Matrix notifications in your installation, add the following to your `configuration.yaml` file: ```yaml @@ -23,8 +25,8 @@ notify: - name: NOTIFIER_NAME platform: matrix homeserver: HOMESERVER - username: USERNAME - password: PASSWORD + username: YOUR_USERNAME + password: YOUR_PASSWORD default_room: ROOM_ID_OR_ALIAS ``` diff --git a/source/_components/notify.rocketchat.markdown b/source/_components/notify.rocketchat.markdown index 2c014c30546..19d9c876d90 100644 --- a/source/_components/notify.rocketchat.markdown +++ b/source/_components/notify.rocketchat.markdown @@ -13,7 +13,9 @@ ha_release: 0.56 --- -The `rocketchat` platform allows you to send messages to your [Rocket.Chat](https://rocket.chat/) instance from Home Assistant. +The `rocketchat` notify platform allows you to send messages to your [Rocket.Chat](https://rocket.chat/) instance from Home Assistant. + +## {% linkable_title Configuration %} To add Rocket.Chat to your installation, add the following to your `configuration.yaml` file: @@ -23,9 +25,9 @@ notify: - platform: rocketchat name: NOTIFIER_NAME url: https://rocketchat.example.com - username: USERNAME - password: PASSWORD - room: my-awesome-room + username: YOUR_USERNAME + password: YOUR_PASSWORD + room: YOUR_ROOM_NAME ``` - **name** (*Optional*): Name displayed in the frontend. The notifier will bind to the service `notify.NOTIFIER_NAME`. @@ -49,8 +51,7 @@ rocketchat_notification: #### {% linkable_title Message variables %} - **message** (*Required*): Message to be displayed. -- **data** (*Optional*): Dictionary containing any of the variables defined in the - [Rocket.Chat docs](https://rocket.chat/docs/developer-guides/rest-api/chat/postmessage#message-object-example) +- **data** (*Optional*): Dictionary containing any of the variables defined in the [Rocket.Chat docs](https://rocket.chat/docs/developer-guides/rest-api/chat/postmessage#message-object-example) To use notifications, please see the [getting started with automation page](/getting-started/automation/). diff --git a/source/_components/nuheat.markdown b/source/_components/nuheat.markdown index 9169a5091e1..b3654ebbae3 100644 --- a/source/_components/nuheat.markdown +++ b/source/_components/nuheat.markdown @@ -22,14 +22,14 @@ Once you have the Thermostat ID(s), add the following information to your `confi ```yaml # Example configuration.yaml entry nuheat: - username: you@example.com - password: very-secure-password + username: YOUR_USERNAME + password: YOUR_PASSWORD devices: 12345 # Example configuration.yaml entry with multiple thermostats nuheat: - username: you@example.com - password: very-secure-password + username: YOUR_USERNAME + password: YOUR_PASSWORD devices: - 12345 - 67890 diff --git a/source/_components/rainbird.markdown b/source/_components/rainbird.markdown index 4257826b7d4..95c7b9b0d90 100644 --- a/source/_components/rainbird.markdown +++ b/source/_components/rainbird.markdown @@ -18,15 +18,22 @@ This `rainbird` component allows interacting with [LNK WiFi](http://www.rainbird To enable it, add the following to your `configuration.yaml` file: ```yaml +# Example configuration.yaml entry rainbird: - host: '1.1.1.1' - password: 'XXXXXXX' + host: IP_ADDRESS_OF_MODULE + password: YOUR_PASSWORD ``` -Configuration variables: - -- **host** (*Required*): The IP address of your LNK WiFi Module. -- **password** (*Required*): The password for accessing the module. +{% configuration %} +host: + description: v + required: true + type: string +password: + description: The password for accessing the module. + required: true + type: string +{% endconfiguration %} Finish its configuration by visiting the [Rain Bird sensor](/components/sensor.rainbird/) and [Rain Bird switch](/components/switch.rainbird/) documentation. diff --git a/source/_components/raincloud.markdown b/source/_components/raincloud.markdown index 6e4e3919a06..3eb377e0468 100644 --- a/source/_components/raincloud.markdown +++ b/source/_components/raincloud.markdown @@ -18,16 +18,20 @@ To enable it, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry - raincloud: - username: you@example.com - password: secret + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` -Configuration variables: - -- **username** (*Required*): The username for accessing your Melnor RainCloud account. -- **password** (*Required*): The password for accessing your Melnor RainCloud account. -- **scan_interval** (*Optional*): Defines the update interval of the sensor in seconds. Defaults to 20seconds. +{% configuration %} +username: + description: The username for accessing your Melnor RainCloud account. + required: true + type: string +password: + description: The password for accessing your Melnor RainCloud account. + required: true + type: string +{% endconfiguration %} Finish its configuration by visiting the [Raincloud binary sensor](/components/binary_sensor.raincloud/), [Raincloud sensor](/components/sensor.raincloud/) and [Raincloud switch](/components/switch.raincloud/) documentation. diff --git a/source/_components/ring.markdown b/source/_components/ring.markdown index 762810d6a70..4daf012653f 100644 --- a/source/_components/ring.markdown +++ b/source/_components/ring.markdown @@ -21,13 +21,19 @@ To enable device linked in your [Ring.com](https://ring.com/) account, add the f ```yaml # Example configuration.yaml entry ring: - username: you@example.com - password: secret + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` -Configuration variables: - -- **username** (*Required*): The username for accessing your Ring account. -- **password** (*Required*): The password for accessing your Ring account. +{% configuration %} +username: + description: The username for accessing your Ring account. + required: true + type: string +password: + description: The password for accessing your Ring account. + required: true + type: string +{% endconfiguration %} Finish its configuration by visiting the [Ring binary sensor](/components/binary_sensor.ring/) or [Ring sensor](/components/sensor.ring/) documentation. diff --git a/source/_components/sensor.hp_ilo.markdown b/source/_components/sensor.hp_ilo.markdown index 25d6ccb5e56..f242584b9db 100644 --- a/source/_components/sensor.hp_ilo.markdown +++ b/source/_components/sensor.hp_ilo.markdown @@ -23,6 +23,7 @@ Some more details about what can be retrieved from these sensors is available in

+## {% linkable_title Configuration %} To use this component in your installation, add the following to your `configuration.yaml` file: @@ -31,8 +32,8 @@ To use this component in your installation, add the following to your `configura sensor: - platform: hp_ilo host: IP_ADDRESS or HOSTNAME - username: USERNAME - password: PASSWORD + username: YOUR_USERNAME + password: YOUR_PASSWORD monitored_variables: - name: SENSOR NAME sensor_type: SENSOR TYPE @@ -63,7 +64,7 @@ Valid sensor_types: - **server_health**: Get server health information. - **network_settings**: Get the iLO network settings. -### Example +## {% linkable_title Example %} In order to get two sensors reporting CPU fan speed and Ambient Inlet Temperature, as well as a dump of `server_health` on a HP Microserver Gen8, you could use the following in your `configuration.yaml` file @@ -71,8 +72,8 @@ In order to get two sensors reporting CPU fan speed and Ambient Inlet Temperatur sensor: - platform: hp_ilo host: IP_ADDRESS or HOSTNAME - username: USERNAME - password: PASSWORD + username: YOUR_USERNAME + password: YOUR_PASSWORD monitored_variables: - name: CPU fanspeed sensor_type: server_health diff --git a/source/_components/sensor.imap.markdown b/source/_components/sensor.imap.markdown index f6e192bddaf..a3b9af23b29 100644 --- a/source/_components/sensor.imap.markdown +++ b/source/_components/sensor.imap.markdown @@ -24,8 +24,8 @@ sensor: - platform: imap server: imap.gmail.com port: 993 - username: USERNAME - password: PASSWORD + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` Configuration variables: diff --git a/source/_components/sensor.mfi.markdown b/source/_components/sensor.mfi.markdown index e7cc6787492..4498c4d3281 100644 --- a/source/_components/sensor.mfi.markdown +++ b/source/_components/sensor.mfi.markdown @@ -16,15 +16,17 @@ ha_release: 0.32 The `mfi` sensor platform to allow you to monitor [mFi mPort interface and sensors](https://www.ubnt.com/mfi/mport/). +## {% linkable_title Configuration %} + To add this platform to your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry sensor: - platform: mfi - host: IP_ADDRESS - username: USERNAME - password: PASSWORD + host: IP_ADDRESS_OF_SENSOR + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` Configuration variables: diff --git a/source/_components/sensor.mopar.markdown b/source/_components/sensor.mopar.markdown index 3357ae91939..65146841838 100644 --- a/source/_components/sensor.mopar.markdown +++ b/source/_components/sensor.mopar.markdown @@ -24,18 +24,28 @@ Be sure you have a [mopar.com](http://mopar.com) account with your vehicle(s) re To enable this sensor, add the following lines to your `configuration.yaml`. ```yaml +# Example configuration.yaml entry sensor: - platform: mopar - username: - password: - pin: + username: YOUR_USERNAME + password: YOUR_PASSWORD + pin: YOUR_UCONNECT_PIN ``` -Configuration options for the Mopar sensor: - -- **username** (*Required*): Your mopar.com username. -- **password** (*Required*): Your mopar.com password. -- **pin** (*Required*): Your uConnect pin. +{% configuration %} +username: + description: Your mopar.com username. + required: true + type: string +password: + description: Your mopar.com password. + required: true + type: string +pin: + description: v + required: true + type: string +{% endconfiguration %} ## {% linkable_title Service %} diff --git a/source/_components/sensor.random.markdown b/source/_components/sensor.random.markdown index e4fd1ec4476..cbe6049cf30 100644 --- a/source/_components/sensor.random.markdown +++ b/source/_components/sensor.random.markdown @@ -16,6 +16,8 @@ ha_release: 0.32 The `random` sensor platform is creating random sensor values (integers) out of a given range. Returned values form a [discrete uniform distribution](https://en.wikipedia.org/wiki/Discrete_uniform_distribution), meaning that each integer value in the range configured is equally likely to be drawn. This can be useful if you want to test automation rules. It generates a new value every time it is polled. +## {% linkable_title Configuration %} + To enable the random sensor, add the following lines to your `configuration.yaml`: ```yaml diff --git a/source/_components/sensor.sma.markdown b/source/_components/sensor.sma.markdown index b2c9bfdcd19..f3eb1665646 100644 --- a/source/_components/sensor.sma.markdown +++ b/source/_components/sensor.sma.markdown @@ -16,14 +16,16 @@ ha_release: 0.36 The `sma` sensor will poll a [SMA](http://www.sma-solar.com/) [(US)](http://www.sma-america.com/) solar inverter and present the values as sensors (or attributes of sensors) in Home Assistant. +## {% linkable_title Configuration %} + To enable this sensor, add the following lines to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry sensor sma: - platform: sma - host: 192.168.88.199 - password: !secret sma_password + host: IP_ADDRESS_OF_DEVICE + password: YOUR_SMA_PASSWORD sensors: current_consumption: [total_consumption] current_power: diff --git a/source/_components/sensor.synologydsm.markdown b/source/_components/sensor.synologydsm.markdown index a15727f86df..d9f4dddf510 100644 --- a/source/_components/sensor.synologydsm.markdown +++ b/source/_components/sensor.synologydsm.markdown @@ -14,7 +14,7 @@ ha_iot_class: "Local Polling" --- -This `synologydsm` sensor allows getting various statistics from your [Synology NAS](https://www.synology.com). +The `synologydsm` sensor platform allows getting various statistics from your [Synology NAS](https://www.synology.com). To use the `synologydsm` sensor in your installation, add the following to your `configuration.yaml` file: @@ -23,8 +23,8 @@ To use the `synologydsm` sensor in your installation, add the following to your sensor: - platform: synologydsm host: IP_ADDRESS_OF_SYNOLOGY_NAS - username: USERNAME - password: PASSWORD + username: YOUR_USERNAME + password: YOUR_PASSWORD monitored_conditions: - cpu_total_load - memory_real_usage diff --git a/source/_components/shiftr.markdown b/source/_components/shiftr.markdown index 16ae6a53f05..a3835347043 100644 --- a/source/_components/shiftr.markdown +++ b/source/_components/shiftr.markdown @@ -15,6 +15,8 @@ ha_release: 0.48 The `shiftr` component makes it possible to transfer details collected with Home Assistant to [Shiftr.io](https://shiftr.io) and visualize the flow of the information. Keep in mind that your details will be public! +## {% linkable_title Configuration %} + Create a new [namespace](https://shiftr.io/new) and generate a new token. You will need to use `Key (Username)` and `Secret (Password)` to setup the component. To use the `shiftr` component in your installation, add the following to your `configuration.yaml` file: @@ -22,12 +24,18 @@ To use the `shiftr` component in your installation, add the following to your `c ```yaml # Example configuration.yaml entry shiftr: - username: 63d8187f - password: 32fd92de6a59c3e2 + username: YOUR_NAMESPACE_USERNAME + password: YOUR_NAMESPACE_PASSWORD ``` -Configuration variables: - -- **username** (*Required*): Username for the namespace. -- **password** (*Required*): Password for the namespace. +{% configuration %} +username: + description: Username for the Shiftr namespace. + required: true + type: string +password: + description: Password for the Shiftr namespace. + required: true + type: string +{% endconfiguration %} diff --git a/source/_components/skybell.markdown b/source/_components/skybell.markdown index 4a7a2cfdac6..189f3a1b999 100644 --- a/source/_components/skybell.markdown +++ b/source/_components/skybell.markdown @@ -17,13 +17,15 @@ The `skybell` implementation allows you to integrate your [Skybell.com](http://w Currently only the Skybell HD is supported by this platform. +## {% linkable_title Configuration %} + To enable devices set up with your [Skybell.com](http://www.skybell.com/) account, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry skybell: - username: you@example.com - password: secret + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` {% configuration %} diff --git a/source/_components/sleepiq.markdown b/source/_components/sleepiq.markdown index 6527c803f0e..a3efeaa0a0c 100644 --- a/source/_components/sleepiq.markdown +++ b/source/_components/sleepiq.markdown @@ -22,11 +22,18 @@ To set it up, add the following information to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry sleepiq: - username: you@example.com - password: omgsecure + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` -Configuration variables: +{% configuration %} +username: + description: Your SleepIQ username (usually an e-mail address). + required: true + type: string +password: + description: Your SleepIQ password. + required: true + type: string +{% endconfiguration %} -- **username** (*Required*): Your SleepIQ username (usually an email address). -- **password** (*Required*): Your SleepIQ password. diff --git a/source/_components/switch.hook.markdown b/source/_components/switch.hook.markdown index 3ba23b8c19a..fbfeef75b4b 100644 --- a/source/_components/switch.hook.markdown +++ b/source/_components/switch.hook.markdown @@ -20,23 +20,44 @@ In short, Hook is an RF to Wi-Fi bridge, controlling devices that receive comman Hook provides a simple [REST API](https://app.swaggerhub.com/api/rahilj/GetHook_RestAPI/v1). This Home Assistant component reads in devices that have been set up in the official app. +## {% linkable_title Configuration %} + Configure with either your username/password or your API token for the official app. +To enable this platform in your installation, add the following to your `configuration.yaml` file: + ```yaml # Example configuration.yaml entry switch: - - platform: hook - username: - password: !secret hook + - platform: hook + username: YOUR_E_MAIL_ADDRESS + password: YOUR_HOOK ``` + Or + ```yaml # Example configuration.yaml entry switch: - - platform: hook - token: + - platform: hook + token: YOUR_API_TOKEN ``` +{% configuration %} +username: + description: The email address associated with your Hook Smart Home Hub. + required: true + type: string +password: + description: The password for your Hook Smart Home Hub. + required: true + type: string +token: + description: The API token for your Hook Smart Home Hub. + required: true + type: string +{% endconfiguration %} + Extra debug logging is available, if you need it. ```yaml diff --git a/source/_components/switch.mfi.markdown b/source/_components/switch.mfi.markdown index 6d00c42a4b9..f82e5802579 100644 --- a/source/_components/switch.mfi.markdown +++ b/source/_components/switch.mfi.markdown @@ -15,15 +15,17 @@ ha_iot_class: "Local Polling" The `mfi` switch platform to allow you to control [mFi Controllable Power Outlets](https://www.ubnt.com/mfi/mpower/). +## {% linkable_title Configuration %} + To add this platform to your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry switch: - platform: mfi - host: IP_ADDRESS - username: USERNAME - password: PASSWORD + host: IP_ADDRESS_OF_SWITCH + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` Configuration variables: diff --git a/source/_components/switch.rainmachine.markdown b/source/_components/switch.rainmachine.markdown index 1b85b03aa42..26b73e0aa8f 100644 --- a/source/_components/switch.rainmachine.markdown +++ b/source/_components/switch.rainmachine.markdown @@ -13,23 +13,19 @@ ha_iot_class: "Cloud Polling" ha_release: 0.51 --- -The `rainmachine` switch platform allows you to control programs and zones within -a [RainMachine smart Wi-Fi sprinkler controller](http://www.rainmachine.com/). +The `rainmachine` switch platform allows you to control programs and zones within a [RainMachine smart Wi-Fi sprinkler controller](http://www.rainmachine.com/). ## {% linkable_title Configuring the Platform %} -The platform allows for either local (i.e., directly across the LAN) or remote -(i.e., through RainMachine's cloud API) access; the route you choose will -dictate what your configuration should look like. +The platform allows for either local (i.e., directly across the LAN) or remote (i.e., through RainMachine's cloud API) access; the route you choose will dictate what your configuration should look like. -For local access, specify the IP address/hostname of your RainMachine unit -, your RainMachine password, and optionally, the device's HTTP port: +For local access, specify the IP address/hostname of your RainMachine unit, your RainMachine password, and optionally, the device's HTTP port: ```yaml switch: platform: rainmachine ip_address: 192.168.1.100 - password: my_password_123 + password: YOUR_PASSWORD ``` For remote access, specify your RainMachine username/email and password: @@ -38,34 +34,48 @@ For remote access, specify your RainMachine username/email and password: switch: platform: rainmachine email: user@host.com - password: my_password_123 + password: YOUR_PASSWORD ``` -Configuration Variables: +{% configuration %} +password: + description: Your RainMachine password. + required: true + type: string +email: + description: "Your RainMachine username/email. Cannot be used with the `ip_address` parameter." + required: false + type: string +ip_address: + description: "The IP address of your RainMachine unit; cannot be used with the `email` parameter." + required: optional + type: string +port: + description: The TCP port used by your unit for the REST API. + required: false + type: int + default: 8080 +ssl: + description: Whether communication with the local device should occur over HTTPS. + required: false + type: boolean + default: true +zone_run_time: + description: The number of seconds that a zone should run when turned on. + required: false + type: int + default: 600 +{% endconfiguration %} -- **ip_address** (*Optional*): the IP address of your RainMachine unit; cannot be -used with the `email` parameter -- **email** (*Optional*): your RainMachine username/email; cannot be used with the -`ip_address` parameter -- **password** (*Required*): your RainMachine password -- **port** (*Optional*): the TCP port used by your unit for the REST API (default: 8080) -- **ssl** (*Optional*): whether communication with the local device should occur -over HTTPS (default: true) -- **zone_run_time** (*Optional*): the number of seconds that a zone should run when -turned on (default: 600) ## {% linkable_title Controlling Your Device %} -After Home Assistant loads, you will see new switches for every enabled program -and zone. These work as expected: +After Home Assistant loads, you will see new switches for every enabled program and zone. These work as expected: - Program On/Off: starts/stops a program -- Zone On/Off: starts/stops a zone (using the `zone_run_time` parameter to -determine how long to run for) +- Zone On/Off: starts/stops a zone (using the `zone_run_time` parameter to determine how long to run for) -Programs and zones are linked. If a program is running its final zone, you will -see both the program and zone switches turned on; turning either one off will -turn the other one off (just like in the web app). +Programs and zones are linked. If a program is running its final zone, you will see both the program and zone switches turned on; turning either one off will turn the other one off (just like in the web app). ## {% linkable_title Weblink %} @@ -83,7 +93,4 @@ You can find `` by logging into [https://my.rainmachine.com](htt ## {% linkable_title For Awareness %} -The remote RainMachine API currently has two broken operations (i.e., they return -error codes): starting a program and stopping a program. Please note that -starting/stopping programs with the remote API is disabled until RainMachine -can fix the issue. +The remote RainMachine API currently has two broken operations (i.e., they return error codes): starting a program and stopping a program. Please note that starting/stopping programs with the remote API is disabled until RainMachine can fix the issue. diff --git a/source/_components/tesla.markdown b/source/_components/tesla.markdown index 6580d26e31c..8673396fc68 100644 --- a/source/_components/tesla.markdown +++ b/source/_components/tesla.markdown @@ -29,8 +29,8 @@ To use Tesla in your installation, add the following to your `configuration.yaml ```yaml # Example configuration.yaml entry tesla: - username: email - password: password + username: YOUR_E_MAIL_ADDRESS + password: YOUR_PASSWORD ``` Configuration variables: diff --git a/source/_components/volvooncall.markdown b/source/_components/volvooncall.markdown index 09664ef231c..6482d372ccf 100644 --- a/source/_components/volvooncall.markdown +++ b/source/_components/volvooncall.markdown @@ -21,8 +21,8 @@ To use Volvo On Call in your installation, add the following to your `configurat ```yaml # Example configuration.yaml entry volvooncall: - username: username - password: password + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` Users registered with Volvo in North America or China will need to specify a region: @@ -30,15 +30,18 @@ Users registered with Volvo in North America or China will need to specify a reg ```yaml # North America volvooncall: - username: username - password: password + username: YOUR_USERNAME + password: YOUR_PASSWORD region: na ``` + +or + ```yaml # China volvooncall: - username: username - password: password + username: YOUR_USERNAME + password: YOUR_PASSWORD region: cn ``` @@ -47,8 +50,8 @@ A more advanced example for setting the vehicle name and selecting what resource ```yaml # Example configuration.yaml entry volvooncall: - username: username - password: password + username: YOUR_USERNAME + password: YOUR_PASSWORD name: abc123: 'Batmobile' resources: diff --git a/source/_components/waterfurnace.markdown b/source/_components/waterfurnace.markdown index 9bf884e0c29..2555b1fb804 100644 --- a/source/_components/waterfurnace.markdown +++ b/source/_components/waterfurnace.markdown @@ -13,12 +13,11 @@ ha_release: 0.62 ha_iot_class: "Cloud Polling" --- -The `waterfurnace` component communicates with the WaterFurnace -Symphony website's WebSocket to show you many of the sensors in your -system. While not an official API, this is the same backend the -Symphony website is based on, and should be reasonably stable. +The `waterfurnace` component communicates with the WaterFurnace Symphony website's WebSocket to show you many of the sensors in your +system. While not an official API, this is the same backend the Symphony website is based on, and should be reasonably stable. The sensors provided include: + - Thermostat Setpoint - Thermostat Current Temp - Leaving Air Temp @@ -28,41 +27,37 @@ The sensors provided include: - Total system power (in Watts) - Furnace Mode +## {% linkable_title Configuration %} + To use Waterfurnace in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry waterfurnace: - username: you@example.com - password: secr3tpassword + username: YOUR_USERNAME + password: YOUR_PASSWORD unit: 0123456789AB ``` {% configuration %} username: - description: The email address for your Symphony WaterFurnace account - required: true - type: string + description: The email address for your Symphony WaterFurnace account + required: true + type: string password: - description: The password for your Symphony WaterFurnace account - required: true - type: string + description: The password for your Symphony WaterFurnace account + required: true + type: string unit: - description: The unit serial number for your WaterFurnace - required: true - type: string + description: The unit serial number for your WaterFurnace + required: true + type: string {% endconfiguration %} #### {% linkable_title Limitations %} -The WebSocket interface used by this module requires active polling, -otherwise the server side shuts down the connection. By default, this -polling is happening every 10 seconds. All sensors are updated during -every polling cycle. +The WebSocket interface used by this module requires active polling, otherwise the server side shuts down the connection. By default, this polling is happening every 10 seconds. All sensors are updated during every polling cycle. + +While this is communicating with a thermostat, geothermal systems operate most efficiently when setbacks are not used, and the home is kept at a constant temperature. It remains useful to collect the data from the system to understand its performance, but a full climate interface won't be implemented. -While this is communicating with a thermostat, geothermal systems -operate most efficiently when setbacks are not used, and the home is -kept at a constant temperature. It remains useful to collect the data -from the system to understand its performance, but a full climate -interface won't be implemented. diff --git a/source/_components/zoneminder.markdown b/source/_components/zoneminder.markdown index 0f3bccbb945..0ebf5fbafc7 100644 --- a/source/_components/zoneminder.markdown +++ b/source/_components/zoneminder.markdown @@ -39,6 +39,6 @@ zoneminder: path: ZM_PATH path_zms: ZM_PATH_ZMS ssl: False - username: USERNAME - password: PASSWORD + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` From 80500b0d1cae71e0c5ab1e56bfdb96355ea7261e Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 29 Mar 2018 10:06:53 +0200 Subject: [PATCH 12/20] Fix service name --- source/_docs/configuration/customizing-devices.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/configuration/customizing-devices.markdown b/source/_docs/configuration/customizing-devices.markdown index 71b8a2f561a..c3cc8cc4415 100644 --- a/source/_docs/configuration/customizing-devices.markdown +++ b/source/_docs/configuration/customizing-devices.markdown @@ -78,7 +78,7 @@ Device class is currently supported by the following platforms: ### {% linkable_title Reloading customize %} -Home Assistant offers a service to reload the core configuration while Home Assistant is running called `homeassistant/reload_core_config`. This allows you to change your customize section and see it being applied without having to restart Home Assistant. To call this service, go to the service developer tool icon service developer tools, select the service `homeassistant/reload_core_config` and click "Call Service". +Home Assistant offers a service to reload the core configuration while Home Assistant is running called `homeassistant.reload_core_config`. This allows you to change your customize section and see it being applied without having to restart Home Assistant. To call this service, go to the service developer tool icon service developer tools, select the service `homeassistant.reload_core_config` and click "CALL SERVICE".

New customize information will be applied the next time the state of the entity gets updated. From 8dfd433f0628391db4c8974b7b08599c8946f161 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 29 Mar 2018 10:12:24 +0200 Subject: [PATCH 13/20] Fix link --- source/help/index.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/help/index.markdown b/source/help/index.markdown index ab661f2508b..2f39b725d7f 100644 --- a/source/help/index.markdown +++ b/source/help/index.markdown @@ -21,7 +21,7 @@ There are various ways to get in touch with the Home Assistant community. It doe ### {% linkable_title Bugs, Feature requests, and alike %} -Have you found an issue in your Home Assistant installation? Please report it. Reporting it makes it easy to track and ensures that it gets fixed. For more details please refer to [Reporting issues](help/reporting_issues/) page. +Have you found an issue in your Home Assistant installation? Please report it. Reporting it makes it easy to track and ensures that it gets fixed. For more details please refer to [Reporting issues](/help/reporting_issues/) page. - [Issue tracker Home Assistant](https://github.com/home-assistant/home-assistant/issues) - [Issue tracker home-assistant.io](https://github.com/home-assistant/home-assistant.io/issues) (Website and documentation) From efe4e284e801ee2632145a088f0ebb783937f948 Mon Sep 17 00:00:00 2001 From: Marc Forth Date: Thu, 29 Mar 2018 22:53:24 +0100 Subject: [PATCH 14/20] Fixed link to hassio issue tracker (#5049) --- source/help/index.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/help/index.markdown b/source/help/index.markdown index 2f39b725d7f..9852420f822 100644 --- a/source/help/index.markdown +++ b/source/help/index.markdown @@ -26,7 +26,7 @@ Have you found an issue in your Home Assistant installation? Please report it. R - [Issue tracker Home Assistant](https://github.com/home-assistant/home-assistant/issues) - [Issue tracker home-assistant.io](https://github.com/home-assistant/home-assistant.io/issues) (Website and documentation) - [Issue tracker Frontend](https://github.com/home-assistant/home-assistant-polymer/issues) (Frontend) -- [Issue tracker Hass.io](https://github.com/home-assistant/hassio) +- [Issue tracker Hass.io](https://github.com/home-assistant/hassio/issues) - [Feature requests Home Assistant](https://community.home-assistant.io/c/feature-requests) (Don't post feature requests in the issue trackers. Thanks.) ### {% linkable_title Videos, talks, workshops and alike %} From a90513b18843aa5fc3b88590399a6e1c34bbba4d Mon Sep 17 00:00:00 2001 From: Thomas Svedberg <36861881+ThomasSvedberg@users.noreply.github.com> Date: Fri, 23 Mar 2018 22:54:17 +0100 Subject: [PATCH 15/20] Update sensor.vasttrafik.markdown (#4986) * Update sensor.vasttrafik.markdown Add new config option "lines" and extend full example. * :pencil2: Tweaks --- source/_components/sensor.vasttrafik.markdown | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/source/_components/sensor.vasttrafik.markdown b/source/_components/sensor.vasttrafik.markdown index 0217a91c6ab..8f3862fdd84 100644 --- a/source/_components/sensor.vasttrafik.markdown +++ b/source/_components/sensor.vasttrafik.markdown @@ -13,7 +13,6 @@ ha_iot_class: "Cloud Polling" ha_release: "0.30" --- - The `vasttrafik` sensor will provide you traveling details for the larger Göteborg area in Sweden from the [Västtrafik](https://vasttrafik.se/) public transportation service. You must create an application [here](https://developer.vasttrafik.se/portal/#/applications) to obtain a `key` and a `secret`. @@ -34,10 +33,11 @@ Configuration variables: - **key** (*Required*): The API key to access your Västtrafik account. - **secret** (*Required*): The API secret to access your Västtrafik account. -- **departures** array (*Required*): List of traveling routes. +- **departures** array (*Required*): List of travel routes. - **name** (*Optional*): Name of the route. - **from** (*Required*): The start station. - **heading** (*Optional*): Direction of the traveling. + - **lines** (*Optional*): Only consider these lines. - **delay** (*Optional*): Delay in minutes. Defaults to 0. The data are coming from [Västtrafik](https://vasttrafik.se/). @@ -54,5 +54,8 @@ sensor: - name: Mot järntorget from: Musikvägen heading: Järntorget + lines: + - 7 + - GRÖN delay: 10 ``` From 7ccd3b98ef9444d473cb597d034bfc05ea5668b5 Mon Sep 17 00:00:00 2001 From: Brian Low Date: Fri, 30 Mar 2018 04:52:46 -0600 Subject: [PATCH 16/20] Arlo Q not supported (#5052) * Arlo Q not supported * It's a platform --- source/_components/sensor.arlo.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/sensor.arlo.markdown b/source/_components/sensor.arlo.markdown index 309795f7952..e5184d2ed06 100644 --- a/source/_components/sensor.arlo.markdown +++ b/source/_components/sensor.arlo.markdown @@ -15,6 +15,10 @@ ha_iot_class: "Cloud Polling" To get your [Arlo](https://arlo.netgear.com/) sensors working within Home Assistant, please follow the instructions for the general [Arlo component](/components/arlo). +This platform does not support Arlo Q. + +## {% linkable_title Configuration %} + Once you have enabled the [Arlo component](/components/arlo), add the following to your `configuration.yaml` file: ```yaml From a2f5a076533425d59b0c9b6d630cb01996971954 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 30 Mar 2018 13:20:03 +0200 Subject: [PATCH 17/20] Add blog post about using HA on a Fedora Atomic host (#5051) --- .../_posts/2018-03-29-fedora-atomic.markdown | 143 ++++++++++++++++++ .../blog/2018-03-fedora-atomic/social.png | Bin 0 -> 84461 bytes 2 files changed, 143 insertions(+) create mode 100644 source/_posts/2018-03-29-fedora-atomic.markdown create mode 100644 source/images/blog/2018-03-fedora-atomic/social.png diff --git a/source/_posts/2018-03-29-fedora-atomic.markdown b/source/_posts/2018-03-29-fedora-atomic.markdown new file mode 100644 index 00000000000..c1f1e2c9bae --- /dev/null +++ b/source/_posts/2018-03-29-fedora-atomic.markdown @@ -0,0 +1,143 @@ +--- +layout: post +title: "Using Fedora Atomic" +description: "Running Home Assistant on a Fedora Atomic host." +date: 2018-03-29 22:00:00 +date_formatted: "March 29, 2018" +author: Fabian Affolter +author_twitter: fabaff +comments: true +categories: Announcements +og_image: /images/blog/2018-03-fedora-atomic/social.png +--- + + +The Hackerspace [Eastermundigen](http://www.eastermundigen.ch/) is often my real-world playground for Home Assistant-related topics which sometimes more belong in the industrial automation area than in a home. Also, it gives me access to devices which I don't have like 3D printers, laser cutters, connected power strips and a like. In the past the local Home Assistant instance there was running on an old [CubieBoard2](http://cubieboard.org/) with [Fedora ARM](https://arm.fedoraproject.org/). It was one of several systems which were running 24/7. To reduce the electricity costs we decided to consolidate the physical systems to only two. One for storage and one for all other services. + + + +This blog post contains the details of the setup. They may be useful for others as well. Our new system is running Fedora 27 from [Project Atomic](http://www.projectatomic.io). We will not cover the setup of an Atomic host and the details of Project Atomic itself. For more details, have a look at [Benjamin Affolter](https://twitter.com/bliemli)'s [blog post](https://www.puzzle.ch/blog/articles/2017/09/28/atomic-host-basic-setup-and-usage) which also covers some of the basics. + +The installation process of an Atomic host is pretty much the same as for Fedora Server or Fedora Workstation. Either create a Live USB device or use PXE to get the installation going. E.g., lauch iPXE and chainload [netboot.yxz](https://netboot.xyz/) with `chain --autofree https://boot.netboot.xyz`. Then let `anaconda` guide you through the setup. + +After the first boot, copy the SSH keys, use `visudo` to add users and perform the usual steps you do for a new system. We only allow SSH with keys, are enforcing the usage of `sudo`, need special network settings and a couple of other things. But those configuration settings are irrelevant for a setup in a local network. + +If the system is up and running then check if you are using the latest release. + +```bash +$ sudo atomic host status +State: idle; auto updates disabled +Deployments: +● ostree://fedora-atomic:fedora/27/x86_64/atomic-host + Version: 27.100 (2018-03-13 17:19:44) + Commit: 326f62b93a5cc836c97d31e73a71b6b6b6955c0f225f7651b52a693718e6aa91 + GPGSignature: Valid signature by 860E19B0AFA800A1751881A6F55E7430F5282EE4 +``` + +The release is 27.100. The latest is 27.105. So, let's update the host and reboot it. + +```bash +$ sudo atomic host upgrade +$ sudo systemctl reboot +``` + +You can also see that Docker is already running. No installation needed. + +```bash +$ sudo systemctl status docker +● docker.service - Docker Application Container Engine + Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled) + Active: active (running) since Thu 2018-03-28 15:44:04 CEST; 35min ago +... +``` + +Further we will cover how it works for Home Assistant and [Mosquitto](https://mosquitto.org/). For a small setup using [kubernetes](https://kubernetes.io) seems a bit overkill. Thus, we decided to stick to `systemd`. + +Instead of `docker` we can use the command-line tool [`atomic`](http://www.projectatomic.io/docs/usr-bin-atomic/) to perform a lot of tasks. Download the images for the containers. We are pulling the images from [Docker Hub](https://hub.docker.com/). + +```bash +$ sudo atomic install docker.io/​homeassistant/home-assistant +$ sudo atomic install docker.io/eclipse-mosquitto +``` + +Both containers need additional directories for persistent storage. + +```bash +$ sudo mkdir -p /opt/home-assistant +$ sudo mkdir -p /opt/mosquitto/{config,data,log} +``` + +We need a copy of `mosquitto.conf`: + +```bash +$ sudo curl -o /opt/mosquitto/config/mosquitto.conf \ + https://raw.githubusercontent.com/eclipse/mosquitto/master/mosquitto.conf +``` + +To handle the containers we created service unit files for the [Home Assistant](https://hub.docker.com/r/homeassistant/home-assistant/) and the [Mosquitto](https://hub.docker.com/_/eclipse-mosquitto/) container. For Home Assistant the file can looks like the sample below. Further details about the `ExecStart` line can be found in the documentation about a [Docker](/docs/installation/docker/) setup. For Home Assistant + +```bash +$ su +# cat <<'EOF' >> /etc/systemd/system/home-assistant.service +[Unit] +Description=Home Assistant +Requires=docker.service +Wants=docker.service +After=docker.service + +[Service] +Restart=on-failure +RestartSec=10 +ExecStart=/usr/bin/docker run --rm --name %p -v /opt/home-assistant:/config:Z -v /etc/localtime:/etc/localtime:ro --network host homeassistant/home-assistant +ExecStop=-/usr/bin/docker stop -t 30 %p + +[Install] +WantedBy=multi-user.target +EOF +``` + +and for Mosquitto. + +```bash +# cat <<'EOF' >> /etc/systemd/system/mosquitto.service +[Unit] +Description=Mosquitto MQTT docker container +Requires=docker.service +Wants=docker.service +After=docker.service + +[Service] +Restart=on-failure +RestartSec=10 +ExecStart=/usr/bin/docker run --name %p -v mosquitto.conf:/opt/mosquitto/config/mosquitto.conf -v /opt/mosquitto/data:/opt/mosquitto/data -v /opt/mosquitto/log:/mosquitto/log -p 1883:1883 -p 9001:9001 eclipse-mosquitto +ExecStop=/usr/bin/docker stop -t 2 %p +ExecStopPost=/usr/bin/docker rm -f %p + +[Install] +WantedBy=multi-user.target +EOF +``` + +Exit to be not longer `root`. + +```bash +# exit +``` + +Reload `systemd` to make it aware of the new configurations. + +```bash +$ sudo systemctl daemon-reload +``` + +Now, both container can be controlled by `systemctl`. + +```bash +$ sudo systemctl enable home-assistant.service --now +$ sudo systemctl enable mosquitto.service --now +``` + +Check with `$ sudo systemctl status [name].service` if there are error or the services are running. + +The deployment of [NGINX](https://nginx.org/en/) as webserver for static content, [grafana](https://grafana.com/) and [InfluxBD](https://www.influxdata.com/) works the same way as for Home Assistant and Mosquitto. To get a proper [traefik](https://traefik.io/) setup additional reading and work is required. + diff --git a/source/images/blog/2018-03-fedora-atomic/social.png b/source/images/blog/2018-03-fedora-atomic/social.png new file mode 100644 index 0000000000000000000000000000000000000000..c6bf2a202b3f6a074834042b7a0506ffa6f66b1b GIT binary patch literal 84461 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 z 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 literal 0 HcmV?d00001 From a8bca0d0f875ffe7d6a49e9afdad5d842921302f Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 30 Mar 2018 14:34:50 +0200 Subject: [PATCH 18/20] Minor update --- source/_posts/2018-03-29-fedora-atomic.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_posts/2018-03-29-fedora-atomic.markdown b/source/_posts/2018-03-29-fedora-atomic.markdown index c1f1e2c9bae..76b37315146 100644 --- a/source/_posts/2018-03-29-fedora-atomic.markdown +++ b/source/_posts/2018-03-29-fedora-atomic.markdown @@ -1,6 +1,6 @@ --- layout: post -title: "Using Fedora Atomic" +title: "Using Fedora Atomic with Home Assistant" description: "Running Home Assistant on a Fedora Atomic host." date: 2018-03-29 22:00:00 date_formatted: "March 29, 2018" @@ -53,7 +53,7 @@ $ sudo systemctl status docker Further we will cover how it works for Home Assistant and [Mosquitto](https://mosquitto.org/). For a small setup using [kubernetes](https://kubernetes.io) seems a bit overkill. Thus, we decided to stick to `systemd`. -Instead of `docker` we can use the command-line tool [`atomic`](http://www.projectatomic.io/docs/usr-bin-atomic/) to perform a lot of tasks. Download the images for the containers. We are pulling the images from [Docker Hub](https://hub.docker.com/). +Instead of `docker` we can use the command-line tool [`atomic`](http://www.projectatomic.io/docs/usr-bin-atomic/) to perform a lot of tasks. Download the images for the containers. We are pulling the images from [Docker Hub](https://hub.docker.com/), thus we need to add the registry to use. ```bash $ sudo atomic install docker.io/​homeassistant/home-assistant From 58c5eb81a5d09eae0fc9c0f62f060fa72032b0f3 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 30 Mar 2018 14:36:42 +0200 Subject: [PATCH 19/20] Add missing service --- source/_posts/2018-03-29-fedora-atomic.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_posts/2018-03-29-fedora-atomic.markdown b/source/_posts/2018-03-29-fedora-atomic.markdown index 76b37315146..30750c6342d 100644 --- a/source/_posts/2018-03-29-fedora-atomic.markdown +++ b/source/_posts/2018-03-29-fedora-atomic.markdown @@ -67,14 +67,14 @@ $ sudo mkdir -p /opt/home-assistant $ sudo mkdir -p /opt/mosquitto/{config,data,log} ``` -We need a copy of `mosquitto.conf`: +We need a copy of `mosquitto.conf` to run Mosquitto later: ```bash $ sudo curl -o /opt/mosquitto/config/mosquitto.conf \ https://raw.githubusercontent.com/eclipse/mosquitto/master/mosquitto.conf ``` -To handle the containers we created service unit files for the [Home Assistant](https://hub.docker.com/r/homeassistant/home-assistant/) and the [Mosquitto](https://hub.docker.com/_/eclipse-mosquitto/) container. For Home Assistant the file can looks like the sample below. Further details about the `ExecStart` line can be found in the documentation about a [Docker](/docs/installation/docker/) setup. For Home Assistant +To handle the containers we created service unit files for the [Home Assistant](https://hub.docker.com/r/homeassistant/home-assistant/) and the [Mosquitto](https://hub.docker.com/_/eclipse-mosquitto/) container. For Home Assistant and Mosquitto the file can looks like the sample below. Further details about the `ExecStart` line can be found in the documentation about a [Docker](/docs/installation/docker/) setup. For Home Assistant ```bash $ su From e4d63479f128eae1060e8e3601b9657aed27cd27 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 30 Mar 2018 15:14:07 -0700 Subject: [PATCH 20/20] Add release 66 blog post --- _config.yml | 2 +- source/_components/homematicip.markdown | 3 +- source/_components/lock.homematic.markdown | 19 ++ .../_components/sensor.homematicip.markdown | 18 ++ ...arkdown => 2018-03-30-release-66.markdown} | 305 +++++++++++------- .../images/blog/2018-03-0.66/components.png | Bin 0 -> 30754 bytes 6 files changed, 229 insertions(+), 118 deletions(-) create mode 100644 source/_components/lock.homematic.markdown create mode 100644 source/_components/sensor.homematicip.markdown rename source/_posts/{2018-03-31-release-66.markdown => 2018-03-30-release-66.markdown} (64%) create mode 100644 source/images/blog/2018-03-0.66/components.png diff --git a/_config.yml b/_config.yml index 24306a17450..a4af2a187d1 100644 --- a/_config.yml +++ b/_config.yml @@ -141,7 +141,7 @@ social: current_major_version: 0 current_minor_version: 66 current_patch_version: 0 -date_released: 2018-03-31 +date_released: 2018-03-30 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. diff --git a/source/_components/homematicip.markdown b/source/_components/homematicip.markdown index c6e374ee099..631720114ce 100644 --- a/source/_components/homematicip.markdown +++ b/source/_components/homematicip.markdown @@ -7,14 +7,13 @@ sidebar: true comments: false sharing: true footer: true -logo: homematicip.png ha_category: Hub ha_iot_class: "Cloud Polling" ha_release: 0.66 featured: false --- -The [HomematicIP](http://www.homematicip.com/) component platform is used as an interface to the cloud server. +The [HomematicIP](http://www.homematicip.com/) component platform is used as an interface to the cloud server. For for communication [homematicip-rest-api](https://github.com/coreGreenberet/homematicip-rest-api) is used. To set up the component: diff --git a/source/_components/lock.homematic.markdown b/source/_components/lock.homematic.markdown new file mode 100644 index 00000000000..cf51b178481 --- /dev/null +++ b/source/_components/lock.homematic.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "Homematic Lock" +description: "Instructions on how to integrate Homematic locks within Home Assistant." +date: 2016-06-28 08:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: homematic.png +ha_category: Lock +ha_release: 0.66 +ha_iot_class: "Local Push" +--- + + +The `homematic` lock platform lets you control [Homematic](http://www.homematic.com/) locks through Home Assistant. + +Devices will be configured automatically. Please refer to the [component](/components/homematic/) configuration on how to setup Homematic. \ No newline at end of file diff --git a/source/_components/sensor.homematicip.markdown b/source/_components/sensor.homematicip.markdown new file mode 100644 index 00000000000..65350fc6023 --- /dev/null +++ b/source/_components/sensor.homematicip.markdown @@ -0,0 +1,18 @@ +--- +layout: page +title: "HomematicIP Sensor" +description: "Instructions on how to integrate Homematic sensors within Home Assistant." +date: 2016-06-28 08:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: homematic.png +ha_category: Sensor +ha_release: 0.66 +ha_iot_class: "Local Push" +--- + +The `homematicip` sensor platform lets you control [Homematic](http://www.homematic.com/) sensors through Home Assistant. + +Devices will be configured automatically. Please refer to the [component](/components/homematicip/) configuration on how to setup Homematic. diff --git a/source/_posts/2018-03-31-release-66.markdown b/source/_posts/2018-03-30-release-66.markdown similarity index 64% rename from source/_posts/2018-03-31-release-66.markdown rename to source/_posts/2018-03-30-release-66.markdown index ebcabd3abd2..3f75c8cf6e8 100644 --- a/source/_posts/2018-03-31-release-66.markdown +++ b/source/_posts/2018-03-30-release-66.markdown @@ -1,9 +1,9 @@ --- layout: post -title: "0.66: TBD - also update date attribute!" -description: "TBD" -date: 2018-03-09 00:01:00 -date_formatted: "March 31, 2018" +title: "0.66: ...." +description: "...." +date: 2018-03-30 00:01:00 +date_formatted: "March 30, 2018" author: Paulus Schoutsen author_twitter: balloob comments: true @@ -13,6 +13,12 @@ og_image: /images/blog/2018-03-0.66/components.png +This is the first release with our new release schedule. During the extra week we had a total of 4 beta releases with a total of [26 fixes](https://github.com/home-assistant/home-assistant/milestone/128?closed=1). So this should be the most stable release yet! + +It's also a release that is full of goodies. 80 people contributed over 223 fixes, improvements and new integrations during the last 2 weeks of this release 😎 I want to highlight the work of two people who are doing an amazing job: [@NovapaX] has been doing a great job triaging and fixing weird quirks and bugs in the frontend. And I want to give a shout out to [@armills] who has enabled backend translations. This means that a bunch of things that did not have translations yet, will now soon be translatable. We're planning some cool things with this! + +A quick note if you are using Philips Hue and a Hue custom component: it will no longer work due to the internal changes to the Hue platform. Remove the custom component to ensure that your Hue lights keep working. + ## New Platforms - Add new platform for VeSync switches ([@markperdue] - [#13000]) ([switch.vesync docs]) (new-platform) @@ -28,17 +34,7 @@ og_image: /images/blog/2018-03-0.66/components.png - Zigbee fan ([@igorbernstein2] - [#12289]) ([zha docs]) ([fan.zha docs]) (new-platform) - Adding a discoverable Samsung Syncthru Printer sensor platform ([@nielstron] - [#13134]) ([sensor.syncthru docs]) (new-platform) - Add trafikverket_weatherstation sensor platform ([@Qxlkdr] - [#12115]) ([sensor.trafikverket_weatherstation docs]) (new-platform) - -## Breaking Changes - -- Remove Z-Wave old/new entity_id attributes ([@armills] - [#12652]) ([zwave docs]) (breaking change) -- Python Spotcrime sensor requires API key, fixes include/exclude ([@jcconnell] - [#12926]) ([sensor.spotcrime docs]) (breaking change) -- Fixed SI units for current consumption ([@vandenberghev] - [#13190]) ([sensor.smappee docs]) (breaking change) -- Report swap in MiB ([@DanNixon] - [#13148]) ([sensor.systemmonitor docs]) (breaking change) -- HomeKit Restructure (new config options) ([@cdce8p] - [#12997]) ([homekit docs]) (breaking change) (new-platform) -- Tibber use appNickname as name ([@clementhk] - [#13231]) ([sensor.tibber docs]) (breaking change) -- Refactor Hue: phue -> aiohue ([@balloob] - [#13043]) ([hue docs]) ([light.hue docs]) (breaking change) -- Fix incorrect unit of measurement for precip_intensity. ([@cgtobi] - [#13415]) ([sensor.darksky docs]) (breaking change) +- Security fix & lock for HomeMatic ([@PH89] - [#11980]) ([homematic docs]) ([lock docs]) ([lock.homematic docs]) (breaking change) (new-platform) ## {% linkable_title If you need help... %} @@ -49,6 +45,18 @@ og_image: /images/blog/2018-03-0.66/components.png Experiencing issues introduced by this release? Please report them in our [issue tracker](https://github.com/home-assistant/home-assistant/issues). Make sure to fill in all fields of the issue template. +## Breaking Changes + +- Refactor Hue: If you specify a bridge in your config, the `host` key is now required and needs to be a valid ip address. Option `allow_in_emulated_hue` has been removed. Exclude the lights via the emulated hue config. Due to the internal changes of how the Hue integration works, any Hue custom component will no longer work. ([@balloob] - [#13043]) ([hue docs]) ([light.hue docs]) (breaking change) +- Z-Wave: In version 0.47, the opt-in `new_entity_ids` configuration was added to Z-Wave to smooth the transition through the change. Support for old entity IDs is now removed, and the configuration is no longer necessary. If you are migrating from 0.63 or higher, your entity IDs will already be stored in the Entity Registry and no changes are required. If not, [entity IDs can now be manually configured using the Entity Registry](/docs/configuration/entity-registry/) if necessary. ([@armills] - [#12652]) ([zwave docs]) (breaking change) +- Spotcrime sensor: This update changes the sensor to require a user supplied API key as a configuration entry. The default key has been removed from the Spotcrime package and has also been modified to accept a user supplied API key.([@jcconnell] - [#12926]) ([sensor.spotcrime docs]) (breaking change) +- Smappee sensor: Fixed SI units for current consumption. Total consumption should be in kWh. not kW. ([@vandenberghev] - [#13190]) ([sensor.smappee docs]) (breaking change) +- System monitor sensor: Used and available swap space reported by the system monitor component is now measured in MiB instead of GiB. ([@DanNixon] - [#13148]) ([sensor.systemmonitor docs]) (breaking change) +- HomeKit: The `pincode` parameter is deprecated, since the `HomeKit` component will now generate one for you and display it as a persistence notification during setup. Additionally the default `port` changed to `51827` to avoid potential conflicts with `homebridge`. Lastly to fix a major bug, we needed to change the way accessory ids are generated. This means that in turn all previous accessory settings will need to be repeated. To avoid future conflicts, it is highly recommended to remove the `Home Assistant Bridge` from the `Home` app and repeat the setup process. ([HomeKit Setup](/components/homekit/#setup)) ([@cdce8p] - [#12997]) ([homekit docs]) (breaking change) (new-platform) +- Tibber: The name and the entity id for the Tibber sensor will now be the same as the nickname from the app. Default nick name is the address. So if you have not changed the nickname in the app, everything should be as before. ([@clementhk] - [#13231]) ([sensor.tibber docs]) (breaking change) +- Darsky sensor: Fix the incorrect unit of measurement for the 'Precip Intensity' and 'Daily Max Precip Intensity' for IS units according to the dark sky api documentation.([@cgtobi] - [#13415]) ([sensor.darksky docs]) (breaking change) +- HomeMatic: Locks are now under the lock component ([@PH89] - [#11980]) ([homematic docs]) ([lock docs]) ([lock.homematic docs]) (breaking change) (new-platform) + ## All changes - New lazytox.py script ([@kellerza] - [#12862]) @@ -183,8 +191,34 @@ Experiencing issues introduced by this release? Please report them in our [issue - Fix current_cover_position ([@cdce8p] - [#13135]) ([cover.template docs]) - Switched values to downcase. ([@diminishedprime] - [#13406]) - Cast Integration Cleanup ([@OttoWinter] - [#13275]) ([media_player.cast docs]) +- Security fix & lock for HomeMatic ([@PH89] - [#11980]) ([homematic docs]) ([lock docs]) ([lock.homematic docs]) (breaking change) (new-platform) +- Log invalid templates in script delays ([@amelchio] - [#13423]) +- LimitlessLED hs_color fixes ([@amelchio] - [#13425]) ([light.limitlessled docs]) +- Hyperion: fix typo ([@a-andre] - [#13429]) ([light.hyperion docs]) +- HomeKit: Bugfix & improved logging ([@cdce8p] - [#13431]) ([homekit docs]) +- Improve detection of entity names in templates ([@amelchio] - [#13432]) +- Add version bump script ([@balloob] - [#13447]) +- Add extra check for ESSID field in case there's a wired connection ([@Zepheus] - [#13459]) ([device_tracker docs]) +- Fix encoding errors in mikrotik device tracker ([@bdurrer] - [#13464]) ([device_tracker docs]) +- Hue: Convert XY to HS color if HS not present ([@balloob] - [#13465]) ([light.hue docs]) +- Fix ID (fixes #13444) ([@fabaff] - [#13471]) ([media_player.mpchc docs]) +- Upgrade aiohue and fix race condition ([@balloob] - [#13475]) ([hue docs]) +- version should contain just 'b' not 'beta' ([@balloob] - [#13476]) +- Fix Google Calendar caching when offline ([@PhilRW] - [#13375]) ([calendar.google docs]) +- Homekit: Bugfix Thermostat Fahrenheit support ([@cdce8p] - [#13477]) ([homekit docs]) +- Validate basic customize entries ([@cdce8p] - [#13478]) +- Homekit: Fix security systems ([@cdce8p] - [#13499]) ([homekit docs]) +- python-miio version bumped (Closes: 13449) ([@syssi] - [#13511]) ([fan.xiaomi_miio docs]) ([light.xiaomi_miio docs]) ([remote.xiaomi_miio docs]) ([sensor.xiaomi_miio docs]) ([switch.xiaomi_miio docs]) ([vacuum.xiaomi_miio docs]) +- Fix mysensors light supported features ([@MartinHjelmare] - [#13512]) ([light.mysensors docs]) +- Fix Insteon Leak Sensor ([@teharris1] - [#13515]) +- HomeKit: Fix setting light brightness ([@cdce8p] - [#13518]) ([homekit docs]) +- Construct version pinned ([@syssi] - [#13528]) ([climate.eq3btsmart docs]) ([fan.xiaomi_miio docs]) ([light.xiaomi_miio docs]) ([remote.xiaomi_miio docs]) ([sensor.eddystone_temperature docs]) ([sensor.xiaomi_miio docs]) ([switch.xiaomi_miio docs]) ([vacuum.xiaomi_miio docs]) +- Don't add Falsy items to list #13412 ([@kellerza] - [#13536]) +- Check whitelisted paths #13107 ([@kellerza] - [#13154]) +- Fix FLUX_LED error when no color is set ([@dramamoose] - [#13527]) ([light.flux_led docs]) [#11288]: https://github.com/home-assistant/home-assistant/pull/11288 +[#11980]: https://github.com/home-assistant/home-assistant/pull/11980 [#12115]: https://github.com/home-assistant/home-assistant/pull/12115 [#12157]: https://github.com/home-assistant/home-assistant/pull/12157 [#12289]: https://github.com/home-assistant/home-assistant/pull/12289 @@ -238,6 +272,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [#13148]: https://github.com/home-assistant/home-assistant/pull/13148 [#13150]: https://github.com/home-assistant/home-assistant/pull/13150 [#13151]: https://github.com/home-assistant/home-assistant/pull/13151 +[#13154]: https://github.com/home-assistant/home-assistant/pull/13154 [#13156]: https://github.com/home-assistant/home-assistant/pull/13156 [#13163]: https://github.com/home-assistant/home-assistant/pull/13163 [#13164]: https://github.com/home-assistant/home-assistant/pull/13164 @@ -305,6 +340,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [#13365]: https://github.com/home-assistant/home-assistant/pull/13365 [#13367]: https://github.com/home-assistant/home-assistant/pull/13367 [#13370]: https://github.com/home-assistant/home-assistant/pull/13370 +[#13375]: https://github.com/home-assistant/home-assistant/pull/13375 [#13376]: https://github.com/home-assistant/home-assistant/pull/13376 [#13379]: https://github.com/home-assistant/home-assistant/pull/13379 [#13380]: https://github.com/home-assistant/home-assistant/pull/13380 @@ -316,6 +352,28 @@ Experiencing issues introduced by this release? Please report them in our [issue [#13404]: https://github.com/home-assistant/home-assistant/pull/13404 [#13406]: https://github.com/home-assistant/home-assistant/pull/13406 [#13415]: https://github.com/home-assistant/home-assistant/pull/13415 +[#13423]: https://github.com/home-assistant/home-assistant/pull/13423 +[#13425]: https://github.com/home-assistant/home-assistant/pull/13425 +[#13429]: https://github.com/home-assistant/home-assistant/pull/13429 +[#13431]: https://github.com/home-assistant/home-assistant/pull/13431 +[#13432]: https://github.com/home-assistant/home-assistant/pull/13432 +[#13447]: https://github.com/home-assistant/home-assistant/pull/13447 +[#13459]: https://github.com/home-assistant/home-assistant/pull/13459 +[#13464]: https://github.com/home-assistant/home-assistant/pull/13464 +[#13465]: https://github.com/home-assistant/home-assistant/pull/13465 +[#13471]: https://github.com/home-assistant/home-assistant/pull/13471 +[#13475]: https://github.com/home-assistant/home-assistant/pull/13475 +[#13476]: https://github.com/home-assistant/home-assistant/pull/13476 +[#13477]: https://github.com/home-assistant/home-assistant/pull/13477 +[#13478]: https://github.com/home-assistant/home-assistant/pull/13478 +[#13499]: https://github.com/home-assistant/home-assistant/pull/13499 +[#13511]: https://github.com/home-assistant/home-assistant/pull/13511 +[#13512]: https://github.com/home-assistant/home-assistant/pull/13512 +[#13515]: https://github.com/home-assistant/home-assistant/pull/13515 +[#13518]: https://github.com/home-assistant/home-assistant/pull/13518 +[#13527]: https://github.com/home-assistant/home-assistant/pull/13527 +[#13528]: https://github.com/home-assistant/home-assistant/pull/13528 +[#13536]: https://github.com/home-assistant/home-assistant/pull/13536 [@BioSehnsucht]: https://github.com/BioSehnsucht [@DanNixon]: https://github.com/DanNixon [@FezVrasta]: https://github.com/FezVrasta @@ -324,15 +382,19 @@ Experiencing issues introduced by this release? Please report them in our [issue [@Kane610]: https://github.com/Kane610 [@MartinHjelmare]: https://github.com/MartinHjelmare [@OttoWinter]: https://github.com/OttoWinter +[@PH89]: https://github.com/PH89 [@PhilRW]: https://github.com/PhilRW [@Qxlkdr]: https://github.com/Qxlkdr [@ThomasSvedberg]: https://github.com/ThomasSvedberg +[@Zepheus]: https://github.com/Zepheus +[@a-andre]: https://github.com/a-andre [@a-wolter]: https://github.com/a-wolter [@amelchio]: https://github.com/amelchio [@andreipop2005]: https://github.com/andreipop2005 [@andrey-git]: https://github.com/andrey-git [@armills]: https://github.com/armills [@balloob]: https://github.com/balloob +[@bdurrer]: https://github.com/bdurrer [@c727]: https://github.com/c727 [@cburgess]: https://github.com/cburgess [@cdce8p]: https://github.com/cdce8p @@ -343,6 +405,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [@danielperna84]: https://github.com/danielperna84 [@dgomes]: https://github.com/dgomes [@diminishedprime]: https://github.com/diminishedprime +[@dramamoose]: https://github.com/dramamoose [@engrbm87]: https://github.com/engrbm87 [@fabaff]: https://github.com/fabaff [@gerard33]: https://github.com/gerard33 @@ -372,109 +435,121 @@ Experiencing issues introduced by this release? Please report them in our [issue [@sjvc]: https://github.com/sjvc [@smurfix]: https://github.com/smurfix [@syssi]: https://github.com/syssi +[@teharris1]: https://github.com/teharris1 [@the-glu]: https://github.com/the-glu [@thrawnarn]: https://github.com/thrawnarn [@timmo001]: https://github.com/timmo001 [@turbokongen]: https://github.com/turbokongen [@uchagani]: https://github.com/uchagani [@vandenberghev]: https://github.com/vandenberghev -[alarm_control_panel.ifttt docs]: https://rc.home-assistant.io/components/alarm_control_panel.ifttt/ -[binary_sensor.bmw_connected_drive docs]: https://rc.home-assistant.io/components/binary_sensor.bmw_connected_drive/ -[binary_sensor.deconz docs]: https://rc.home-assistant.io/components/binary_sensor.deconz/ -[binary_sensor.mysensors docs]: https://rc.home-assistant.io/components/binary_sensor.mysensors/ -[binary_sensor.trend docs]: https://rc.home-assistant.io/components/binary_sensor.trend/ -[binary_sensor.workday docs]: https://rc.home-assistant.io/components/binary_sensor.workday/ -[bmw_connected_drive docs]: https://rc.home-assistant.io/components/bmw_connected_drive/ -[calendar.caldav docs]: https://rc.home-assistant.io/components/calendar.caldav/ -[calendar.todoist docs]: https://rc.home-assistant.io/components/calendar.todoist/ -[camera.onvif docs]: https://rc.home-assistant.io/components/camera.onvif/ -[camera.xeoma docs]: https://rc.home-assistant.io/components/camera.xeoma/ -[climate.ecobee docs]: https://rc.home-assistant.io/components/climate.ecobee/ -[climate.sensibo docs]: https://rc.home-assistant.io/components/climate.sensibo/ -[cloud docs]: https://rc.home-assistant.io/components/cloud/ -[cover.group docs]: https://rc.home-assistant.io/components/cover.group/ -[cover.template docs]: https://rc.home-assistant.io/components/cover.template/ -[deconz docs]: https://rc.home-assistant.io/components/deconz/ -[doorbird docs]: https://rc.home-assistant.io/components/doorbird/ -[downloader docs]: https://rc.home-assistant.io/components/downloader/ -[ecobee docs]: https://rc.home-assistant.io/components/ecobee/ -[fan.xiaomi_miio docs]: https://rc.home-assistant.io/components/fan.xiaomi_miio/ -[fan.zha docs]: https://rc.home-assistant.io/components/fan.zha/ -[hassio docs]: https://rc.home-assistant.io/components/hassio/ -[history docs]: https://rc.home-assistant.io/components/history/ -[homekit docs]: https://rc.home-assistant.io/components/homekit/ -[homematic docs]: https://rc.home-assistant.io/components/homematic/ -[homematicip docs]: https://rc.home-assistant.io/components/homematicip/ -[homematicip_cloud docs]: https://rc.home-assistant.io/components/homematicip_cloud/ -[http docs]: https://rc.home-assistant.io/components/http/ -[hue docs]: https://rc.home-assistant.io/components/hue/ -[image_processing.opencv docs]: https://rc.home-assistant.io/components/image_processing.opencv/ -[light docs]: https://rc.home-assistant.io/components/light/ -[light.deconz docs]: https://rc.home-assistant.io/components/light.deconz/ -[light.hue docs]: https://rc.home-assistant.io/components/light.hue/ -[light.iglo docs]: https://rc.home-assistant.io/components/light.iglo/ -[light.mysensors docs]: https://rc.home-assistant.io/components/light.mysensors/ -[light.mystrom docs]: https://rc.home-assistant.io/components/light.mystrom/ -[light.xiaomi_miio docs]: https://rc.home-assistant.io/components/light.xiaomi_miio/ -[light.zha docs]: https://rc.home-assistant.io/components/light.zha/ -[lock.bmw_connected_drive docs]: https://rc.home-assistant.io/components/lock.bmw_connected_drive/ -[lock.mqtt docs]: https://rc.home-assistant.io/components/lock.mqtt/ -[logbook docs]: https://rc.home-assistant.io/components/logbook/ -[media_extractor docs]: https://rc.home-assistant.io/components/media_extractor/ -[media_player.bluesound docs]: https://rc.home-assistant.io/components/media_player.bluesound/ -[media_player.cast docs]: https://rc.home-assistant.io/components/media_player.cast/ -[media_player.channels docs]: https://rc.home-assistant.io/components/media_player.channels/ -[media_player.kodi docs]: https://rc.home-assistant.io/components/media_player.kodi/ -[media_player.mediaroom docs]: https://rc.home-assistant.io/components/media_player.mediaroom/ -[media_player.philips_js docs]: https://rc.home-assistant.io/components/media_player.philips_js/ -[media_player.plex docs]: https://rc.home-assistant.io/components/media_player.plex/ -[media_player.songpal docs]: https://rc.home-assistant.io/components/media_player.songpal/ -[media_player.sonos docs]: https://rc.home-assistant.io/components/media_player.sonos/ -[media_player.spotify docs]: https://rc.home-assistant.io/components/media_player.spotify/ -[mqtt docs]: https://rc.home-assistant.io/components/mqtt/ -[mysensors docs]: https://rc.home-assistant.io/components/mysensors/ -[nest docs]: https://rc.home-assistant.io/components/nest/ -[notify docs]: https://rc.home-assistant.io/components/notify/ -[remote.xiaomi_miio docs]: https://rc.home-assistant.io/components/remote.xiaomi_miio/ -[scene.deconz docs]: https://rc.home-assistant.io/components/scene.deconz/ -[sensor.bmw_connected_drive docs]: https://rc.home-assistant.io/components/sensor.bmw_connected_drive/ -[sensor.crimereports docs]: https://rc.home-assistant.io/components/sensor.crimereports/ -[sensor.darksky docs]: https://rc.home-assistant.io/components/sensor.darksky/ -[sensor.deconz docs]: https://rc.home-assistant.io/components/sensor.deconz/ -[sensor.deutsche_bahn docs]: https://rc.home-assistant.io/components/sensor.deutsche_bahn/ -[sensor.filter docs]: https://rc.home-assistant.io/components/sensor.filter/ -[sensor.foobot docs]: https://rc.home-assistant.io/components/sensor.foobot/ -[sensor.glances docs]: https://rc.home-assistant.io/components/sensor.glances/ -[sensor.homematic docs]: https://rc.home-assistant.io/components/sensor.homematic/ -[sensor.homematicip docs]: https://rc.home-assistant.io/components/sensor.homematicip/ -[sensor.homematicip_cloud docs]: https://rc.home-assistant.io/components/sensor.homematicip_cloud/ -[sensor.lacrosse docs]: https://rc.home-assistant.io/components/sensor.lacrosse/ -[sensor.mqtt docs]: https://rc.home-assistant.io/components/sensor.mqtt/ -[sensor.mysensors docs]: https://rc.home-assistant.io/components/sensor.mysensors/ -[sensor.plex docs]: https://rc.home-assistant.io/components/sensor.plex/ -[sensor.smappee docs]: https://rc.home-assistant.io/components/sensor.smappee/ -[sensor.spotcrime docs]: https://rc.home-assistant.io/components/sensor.spotcrime/ -[sensor.sql docs]: https://rc.home-assistant.io/components/sensor.sql/ -[sensor.syncthru docs]: https://rc.home-assistant.io/components/sensor.syncthru/ -[sensor.systemmonitor docs]: https://rc.home-assistant.io/components/sensor.systemmonitor/ -[sensor.template docs]: https://rc.home-assistant.io/components/sensor.template/ -[sensor.tibber docs]: https://rc.home-assistant.io/components/sensor.tibber/ -[sensor.trafikverket_weatherstation docs]: https://rc.home-assistant.io/components/sensor.trafikverket_weatherstation/ -[sensor.vasttrafik docs]: https://rc.home-assistant.io/components/sensor.vasttrafik/ -[sensor.wunderground docs]: https://rc.home-assistant.io/components/sensor.wunderground/ -[sensor.xiaomi_miio docs]: https://rc.home-assistant.io/components/sensor.xiaomi_miio/ -[spc docs]: https://rc.home-assistant.io/components/spc/ -[switch.doorbird docs]: https://rc.home-assistant.io/components/switch.doorbird/ -[switch.edimax docs]: https://rc.home-assistant.io/components/switch.edimax/ -[switch.mqtt docs]: https://rc.home-assistant.io/components/switch.mqtt/ -[switch.vesync docs]: https://rc.home-assistant.io/components/switch.vesync/ -[switch.xiaomi_miio docs]: https://rc.home-assistant.io/components/switch.xiaomi_miio/ -[switch.zha docs]: https://rc.home-assistant.io/components/switch.zha/ -[telegram_bot docs]: https://rc.home-assistant.io/components/telegram_bot/ -[upcloud docs]: https://rc.home-assistant.io/components/upcloud/ -[vacuum.xiaomi_miio docs]: https://rc.home-assistant.io/components/vacuum.xiaomi_miio/ -[weather.darksky docs]: https://rc.home-assistant.io/components/weather.darksky/ -[websocket_api docs]: https://rc.home-assistant.io/components/websocket_api/ -[zeroconf docs]: https://rc.home-assistant.io/components/zeroconf/ -[zha docs]: https://rc.home-assistant.io/components/zha/ -[zwave docs]: https://rc.home-assistant.io/components/zwave/ +[alarm_control_panel.ifttt docs]: /components/alarm_control_panel.ifttt/ +[binary_sensor.bmw_connected_drive docs]: /components/binary_sensor.bmw_connected_drive/ +[binary_sensor.deconz docs]: /components/binary_sensor.deconz/ +[binary_sensor.mysensors docs]: /components/binary_sensor.mysensors/ +[binary_sensor.trend docs]: /components/binary_sensor.trend/ +[binary_sensor.workday docs]: /components/binary_sensor.workday/ +[bmw_connected_drive docs]: /components/bmw_connected_drive/ +[calendar.caldav docs]: /components/calendar.caldav/ +[calendar.google docs]: /components/calendar.google/ +[calendar.todoist docs]: /components/calendar.todoist/ +[camera.onvif docs]: /components/camera.onvif/ +[camera.xeoma docs]: /components/camera.xeoma/ +[climate.ecobee docs]: /components/climate.ecobee/ +[climate.eq3btsmart docs]: /components/climate.eq3btsmart/ +[climate.sensibo docs]: /components/climate.sensibo/ +[cloud docs]: /components/cloud/ +[cover.group docs]: /components/cover.group/ +[cover.template docs]: /components/cover.template/ +[deconz docs]: /components/deconz/ +[device_tracker docs]: /components/device_tracker/ +[doorbird docs]: /components/doorbird/ +[downloader docs]: /components/downloader/ +[ecobee docs]: /components/ecobee/ +[fan.xiaomi_miio docs]: /components/fan.xiaomi_miio/ +[fan.zha docs]: /components/fan.zha/ +[hassio docs]: /components/hassio/ +[history docs]: /components/history/ +[homekit docs]: /components/homekit/ +[homematic docs]: /components/homematic/ +[homematicip docs]: /components/homematicip/ +[homematicip_cloud docs]: /components/homematicip_cloud/ +[http docs]: /components/http/ +[hue docs]: /components/hue/ +[image_processing.opencv docs]: /components/image_processing.opencv/ +[light docs]: /components/light/ +[light.deconz docs]: /components/light.deconz/ +[light.flux_led docs]: /components/light.flux_led/ +[light.hue docs]: /components/light.hue/ +[light.hyperion docs]: /components/light.hyperion/ +[light.iglo docs]: /components/light.iglo/ +[light.limitlessled docs]: /components/light.limitlessled/ +[light.mysensors docs]: /components/light.mysensors/ +[light.mystrom docs]: /components/light.mystrom/ +[light.xiaomi_miio docs]: /components/light.xiaomi_miio/ +[light.zha docs]: /components/light.zha/ +[lock docs]: /components/lock/ +[lock.bmw_connected_drive docs]: /components/lock.bmw_connected_drive/ +[lock.homematic docs]: /components/lock.homematic/ +[lock.mqtt docs]: /components/lock.mqtt/ +[logbook docs]: /components/logbook/ +[media_extractor docs]: /components/media_extractor/ +[media_player.bluesound docs]: /components/media_player.bluesound/ +[media_player.cast docs]: /components/media_player.cast/ +[media_player.channels docs]: /components/media_player.channels/ +[media_player.kodi docs]: /components/media_player.kodi/ +[@NovapaX]: https://github.com/NovapaX +[media_player.mediaroom docs]: /components/media_player.mediaroom/ +[media_player.mpchc docs]: /components/media_player.mpchc/ +[media_player.philips_js docs]: /components/media_player.philips_js/ +[media_player.plex docs]: /components/media_player.plex/ +[media_player.songpal docs]: /components/media_player.songpal/ +[media_player.sonos docs]: /components/media_player.sonos/ +[media_player.spotify docs]: /components/media_player.spotify/ +[mqtt docs]: /components/mqtt/ +[mysensors docs]: /components/mysensors/ +[nest docs]: /components/nest/ +[notify docs]: /components/notify/ +[remote.xiaomi_miio docs]: /components/remote.xiaomi_miio/ +[scene.deconz docs]: /components/scene.deconz/ +[sensor.bmw_connected_drive docs]: /components/sensor.bmw_connected_drive/ +[sensor.crimereports docs]: /components/sensor.crimereports/ +[sensor.darksky docs]: /components/sensor.darksky/ +[sensor.deconz docs]: /components/sensor.deconz/ +[sensor.deutsche_bahn docs]: /components/sensor.deutsche_bahn/ +[sensor.eddystone_temperature docs]: /components/sensor.eddystone_temperature/ +[sensor.filter docs]: /components/sensor.filter/ +[sensor.foobot docs]: /components/sensor.foobot/ +[sensor.glances docs]: /components/sensor.glances/ +[sensor.homematic docs]: /components/sensor.homematic/ +[sensor.homematicip docs]: /components/sensor.homematicip/ +[sensor.homematicip_cloud docs]: /components/sensor.homematicip_cloud/ +[sensor.lacrosse docs]: /components/sensor.lacrosse/ +[sensor.mqtt docs]: /components/sensor.mqtt/ +[sensor.mysensors docs]: /components/sensor.mysensors/ +[sensor.plex docs]: /components/sensor.plex/ +[sensor.smappee docs]: /components/sensor.smappee/ +[sensor.spotcrime docs]: /components/sensor.spotcrime/ +[sensor.sql docs]: /components/sensor.sql/ +[sensor.syncthru docs]: /components/sensor.syncthru/ +[sensor.systemmonitor docs]: /components/sensor.systemmonitor/ +[sensor.template docs]: /components/sensor.template/ +[sensor.tibber docs]: /components/sensor.tibber/ +[sensor.trafikverket_weatherstation docs]: /components/sensor.trafikverket_weatherstation/ +[sensor.vasttrafik docs]: /components/sensor.vasttrafik/ +[sensor.wunderground docs]: /components/sensor.wunderground/ +[sensor.xiaomi_miio docs]: /components/sensor.xiaomi_miio/ +[spc docs]: /components/spc/ +[switch.doorbird docs]: /components/switch.doorbird/ +[switch.edimax docs]: /components/switch.edimax/ +[switch.mqtt docs]: /components/switch.mqtt/ +[switch.vesync docs]: /components/switch.vesync/ +[switch.xiaomi_miio docs]: /components/switch.xiaomi_miio/ +[switch.zha docs]: /components/switch.zha/ +[telegram_bot docs]: /components/telegram_bot/ +[upcloud docs]: /components/upcloud/ +[vacuum.xiaomi_miio docs]: /components/vacuum.xiaomi_miio/ +[weather.darksky docs]: /components/weather.darksky/ +[websocket_api docs]: /components/websocket_api/ +[zeroconf docs]: /components/zeroconf/ +[zha docs]: /components/zha/ +[zwave docs]: /components/zwave/ diff --git a/source/images/blog/2018-03-0.66/components.png b/source/images/blog/2018-03-0.66/components.png new file mode 100644 index 0000000000000000000000000000000000000000..890a4b8512f8d0ddf9d4cb1e69c61ef999cbdec5 GIT binary patch literal 30754 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

sAS~wy95#987Yuf3~J~q6E8^I?f(pN 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 Y;jGN+&IC`srsM!9%WKG0$yfyce?DTV!~g&Q literal 0 HcmV?d00001