From 6bfd606ebaf66bc6857d3b6103a5bfac5ca8ed3e Mon Sep 17 00:00:00 2001 From: Luca Adrian Lindhorst Date: Wed, 7 Mar 2018 03:55:24 +0100 Subject: [PATCH 001/371] - Updated howto for google_assistant setup, the process is now easier, so some steps could be removed. --- source/_components/google_assistant.markdown | 76 +++++++------------- 1 file changed, 25 insertions(+), 51 deletions(-) diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index 50c311a624..910008678d 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -135,58 +135,32 @@ If you're not using Linux, you can use sites such as [this one](https://www.brow ### {% linkable_title Setup %} -1. Download the [gactions CLI](https://developers.google.com/actions/tools/gactions-cli) to be used later. You can download and run this anywhere and on any machine. Just remember where you put it for later and don't forget to run `chmod +x gactions` to make it executable on Mac or Linux. -2. Create a new file named `project.json` (in the same directory you downloaded `gactions` to) and replace the `[YOUR HOME ASSISTANT URL:PORT]` below with the URL you use to access Home Assistant. - Note: This must be an HTTPS URL to work. Don't forget to include the port number if you're not using port 443. - -```json -{ - "actions": [{ - "name": "actions.devices", - "deviceControl": { - }, - "fulfillment": { - "conversationName": "automation" - } - }], - "conversations": { - "automation": - { - "name": "automation", - "url": "https://[YOUR HOME ASSISTANT URL:PORT]/api/google_assistant" - } - } -} -``` - -3. Create a new project in the [developer console](https://console.actions.google.com/). +1. Create a new project in the [developer console](https://console.actions.google.com/). a. Add/Import project - b. Go to Build under the Actions SDK box - c. Copy the command that looks like: - - `gactions update --action_package PACKAGE_NAME --project doctest-2d0b8` -4. Replace `PACKAGE_NAME` with `project.json` and run that command in a console from the same directory you saved `project.json` in (you'll need to put `./` before `gactions` so that it reads `./gactions` if you're running it on Linux or Windows). It should output a URL like `https://console.actions.google.com/project/doctest-2d0b8/overview` - go there. -5. You'll need to fill out most of the information on that page, but none of it really matters since you won't be addressing the App directly, only through the Smart Home functionality built into Google Assistant. -6. The final item on that page `Account linking` is required for your app to interact with Home Assistant. - 1. Grant type: `Implicit` - 2. Client ID: The `client_id` from your Home Assistant configuration above - 3. Authorization URL (replace with your actual URL): `https://[YOUR HOME ASSISTANT URL]/api/google_assistant/auth`. If you have set `api_password:` add this password to the URL `https://[YOUR HOME ASSISTANT URL]/api/google_assistant/auth?api_password=[YOUR API PASSWORD]`) - 4. Configure your client. Add scopes for `email` and `name`. - 5. Testing instructions: Enter anything. It doesn't matter since you won't submit this app. -7. Back on the main app draft page. Click `Test Draft`. That will take you to the simulator (which won't work so just close that window). -8. If you haven't already added the component configuration to `configuration.yaml` and restarted Home Assistant, you'll be unable to continue until you have. -8. Open the Google Assistant app and go into `Settings > Home Control` -9. Click the `+` sign, and near the bottom, you should have `[test] your app name`. Selecting that should lead to you the screen where you can set rooms for your devices or nicknames for your devices. -10. If you want to allow other household users to control the devices: - 1. Go to the developer console using the address from point 4. - 2. Under the gear icon, click `Permissions` - 3. Click `Add`, type the new user's e-mail address and choose `Project -> Editor` role - 4. Have the new user go to [developer console](https://console.actions.google.com/) and repeat steps starting from point 7. -11. If you want to use the `google_assistant.request_sync` service, to update devices without unlinking and relinking, in Home Assistant, then enable Homegraph API for your project: - 1. Go to the [cloud console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview) - 2. Select your project and click Enable Homegraph API - 3. Go to Credentials and select API Key from Create Credentials - 4. Note down the generated API Key and use this in the configuration + b. Click on `BUILD` on the `Smart home` card + c. Type in your home assistant url: `https://[YOUR HOME ASSISTANT URL:PORT]/api/google_assistant`, replace the `[YOUR HOME ASSISTANT URL:PORT]` with the domain / ip address and the port under which your Home Assistant is reachable. + d. Click `Done` +2. You'll need to fill out most of the information on that page, but none of it really matters since you won't be addressing the App directly, only through the Smart Home functionality built into Google Assistant. +3. The final item on that page `Account linking` is required for your app to interact with Home Assistant. + a. Grant type: `Implicit` + b. Client ID: The `client_id` from your Home Assistant configuration above + c. Authorization URL (replace with your actual URL): `https://[YOUR HOME ASSISTANT URL]/api/google_assistant/auth`. If you have set `api_password:` add this password to the URL `https://[YOUR HOME ASSISTANT URL]/api/google_assistant/auth?api_password=[YOUR API PASSWORD]`) + d. Configure your client. Add scopes for `email` and `name`. + e. Testing instructions: Enter anything. It doesn't matter since you won't submit this app. +4. Back on the main app draft page. Click `Test Draft`. That will take you to the simulator (which won't work so just close that window). +5. If you haven't already added the component configuration to `configuration.yaml` and restarted Home Assistant, you'll be unable to continue until you have. +6. Open the Google Assistant app and go into `Settings > Home Control` +7. Click the `+` sign, and near the bottom, you should have `[test] your app name`. Selecting that should lead you the screen where you can set rooms for your devices or nicknames for your devices. +8. If you want to allow other household users to control the devices: + a. Go to the developer console using the address from point 4. + b. Under the gear icon, click `Permissions` + c. Click `Add`, type the new user's e-mail address and choose `Project -> Editor` role + d. Have the new user go to [developer console](https://console.actions.google.com/) and repeat steps starting from point +9. If you want to use the `google_assistant.request_sync` service, to update devices without unlinking and relinking, in Home Assistant, then enable Homegraph API for your project: + a. Go to the [cloud console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview) + b. Select your project and click Enable Homegraph API + c. Go to Credentials and select API Key from Create Credentials + d. Note down the generated API Key and use this in the configuration ### {% linkable_title Troubleshooting the request_sync service %} From fdcf17802dac8d047d28fbdff1f51a41b6bcae1f Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Fri, 9 Mar 2018 19:05:29 +0100 Subject: [PATCH 002/371] Xiaomi MiIO Light: Flag the device as unavailable if not reachable (#4699) * Configuration key "model" and "xiaomi_miio_set_delayed_turn_off" service added. * Service parameter renamed. * New device model (philips.light.zyceiling) added. * Service parameter updated. * Format of the services updated. Configuration schema added. * Missing supported device added. --- source/_components/light.xiaomi_miio.markdown | 35 +++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/source/_components/light.xiaomi_miio.markdown b/source/_components/light.xiaomi_miio.markdown index b1428017a5..3af241a04e 100644 --- a/source/_components/light.xiaomi_miio.markdown +++ b/source/_components/light.xiaomi_miio.markdown @@ -13,7 +13,7 @@ ha_version: 0.53 ha_iot_class: "Local Polling" --- -The `xiaomi_miio` platform allows you to control the state of your Xiaomi Philips LED Ball Lamp and Xiaomi Philips LED Ceiling Lamp. +The `xiaomi_miio` platform allows you to control the state of your Xiaomi Philips LED Ball Lamp, Xiaomi Philips LED Ceiling Lamp and Xiaomi Philips Eyecare Lamp 2. Currently, the supported features are `on`, `off`, `set_cct` (colortemp) , `set_bright` (brightness). @@ -28,12 +28,34 @@ light: name: Xiaomi Philips Smart LED Ball host: 192.168.130.67 token: YOUR_TOKEN + model: philips.light.bulb ``` Configuration variables: - **host** (*Required*): The IP of your light. - **token** (*Required*): The API token of your light. - **name** (*Optional*): The name of your light. +- **model** (*Optional*): The model of your light. Valid values are `philips.light.bulb`, `philips.light.sread1`, `philips.light.ceiling` and `philips.light.zyceiling`. This setting can be used to bypass the device model detection and is recommended if your device isn't always available. + +{% configuration %} +host: + description: The IP address of your device. + required: true + type: string +token: + description: The API token of your device. + required: true + type: string +name: + description: The name of your device. + required: false + type: string + default: Xiaomi Philips Light +model: + description: The model of your device. + required: false + type: string +{% endconfiguration %} ## {% linkable_title Platform Services %} @@ -43,5 +65,14 @@ Set one of the 4 available fixed scenes. | Service data attribute | Optional | Description | |---------------------------|----------|-------------------------------------------------------| -| `entity_id` | yes | Only act on specific light. Else targets all. | +| `entity_id` | yes | Only act on a specific light. Else targets all. | | `scene` | no | Scene, between 1 and 4. | + +### {% linkable_title Service `light.xiaomi_miio_set_delayed_turn_off` %} + +Delayed turn off. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-------------------------------------------------------| +| `entity_id` | yes | Only act on a specific light. Else targets all. | +| `time_period` | no | Time period for the delayed turn off. | From 82398a9bc9b75bc0207b441edb57962ba56fc1fe Mon Sep 17 00:00:00 2001 From: Bertbert <7685189+bertbert72@users.noreply.github.com> Date: Fri, 9 Mar 2018 18:07:09 +0000 Subject: [PATCH 003/371] =?UTF-8?q?Add=20=E2=80=98unit=5Fsystem=E2=80=99?= =?UTF-8?q?=20configuration=20variable=20(#4469)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add ‘unit_system’ configuration variable * Update sensor.fitbit.markdown --- source/_components/sensor.fitbit.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/sensor.fitbit.markdown b/source/_components/sensor.fitbit.markdown index 1da5a51836..4ea3e71cd4 100644 --- a/source/_components/sensor.fitbit.markdown +++ b/source/_components/sensor.fitbit.markdown @@ -36,6 +36,7 @@ Configuration variables: - **monitored_resources** (*Optional*): Resource to monitor. Defaults to `activities/steps`. - **clock_format** (*Optional*): Format to use for `sleep/startTime` resource. Accepts `12H` or `24H`. Defaults to `24H`. +- **unit_system** (*Optional*): Unit system to use for measurements. Accepts `default`, `metric`, `en_US` or `en_GB`. Defaults to `default`. Below is the list of resources that you can add to `monitored_resources`. One sensor is exposed for every resource. From 19001f9e242cc9982192e83ea483c4d89e40d863 Mon Sep 17 00:00:00 2001 From: karlkar Date: Fri, 9 Mar 2018 19:07:41 +0100 Subject: [PATCH 004/371] Added support for multiple onvif profiles (#4445) * Added support for multiple onvif profiles Related to pull request https://github.com/home-assistant/home-assistant/pull/11651 * :pencil2: Spelling & grammar fixes * Removed info about profile data in attribute Removed information about profile data in attributes, as it is not going to be implemented. --- source/_components/camera.onvif.markdown | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/source/_components/camera.onvif.markdown b/source/_components/camera.onvif.markdown index f4281405bc..6b772dfda6 100644 --- a/source/_components/camera.onvif.markdown +++ b/source/_components/camera.onvif.markdown @@ -30,9 +30,12 @@ Configuration variables: - **name** (*Optional*): Override the name of your camera. - **username** (*Optional*): The username for the camera. - **password** (*Optional*): The password for the camera. -- **port** (*Optional*): The port for the camera. This defaults to 5000 +- **port** (*Optional*): The port for the camera. This defaults to 5000. +- **profile** (*Optional*): Video profile that will be used to obtain the stream. This defaults to 0. More details below. - **extra_arguments** (*Optional*): Extra options to pass to `ffmpeg`, e.g. image quality or video filter options. More details in [FFmpeg component](/components/ffmpeg). +Most of the Onvif cameras support more than one audio/video Profile. Each profile provides different image quality. Usually, the first profile has the highest quality, and it is the profile used by default. However, you may want to use a lower quality image. One of the reasons may be that your hardware isn't able to render the highest quality image in real-time - especially when running on Raspberry Pi. Therefore you can choose which profile do you want to use by setting in config `profile` variable. + ### {% linkable_title Service `camera.onvif_ptz` %} If your ONVIF camera supports PTZ, you will be able to pan, tilt or zoom your camera. From 6536b74aa4b50de4c76a246c6139d051e67d7657 Mon Sep 17 00:00:00 2001 From: Jeroen ter Heerdt Date: Fri, 9 Mar 2018 19:09:31 +0100 Subject: [PATCH 005/371] Redesign of Egardia component and platform. (#4803) * Updating docs related to PR #11994. * Update binary_sensor.egardia.markdown * Update binary_sensor.egardia.markdown * Update egardia.markdown * Update egardia.markdown --- .../alarm_control_panel.egardia.markdown | 56 +--------------- .../binary_sensor.egardia.markdown | 19 ++++++ source/_components/egardia.markdown | 67 +++++++++++++++++++ 3 files changed, 88 insertions(+), 54 deletions(-) create mode 100644 source/_components/binary_sensor.egardia.markdown create mode 100644 source/_components/egardia.markdown diff --git a/source/_components/alarm_control_panel.egardia.markdown b/source/_components/alarm_control_panel.egardia.markdown index 3fdd4d5753..314a1fcd11 100644 --- a/source/_components/alarm_control_panel.egardia.markdown +++ b/source/_components/alarm_control_panel.egardia.markdown @@ -12,57 +12,5 @@ ha_release: 0.51 ha_category: Alarm --- -The `egardia` platform enables the ability to control an [Egardia](http://egardia.com/)/[Woonveilig](http://woonveilig.nl) control panel. These alarm panels are known under different brand names across the world, including Woonveilig in the Netherlands. This was tested on the GATE-01, GATE-02 and GATE-03 versions of the Egardia/Woonveilig platform. - -You will need to know the IP of your alarm panel on your local network. Test if you can login to the panel by browsing to the IP address and log in using your Egardia/Woonveilig account. - -To enable the integration with your alarm panel, add the following lines to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -alarm_control_panel: - - platform: egardia - host: YOUR_HOST - username: YOUR_USERNAME - password: YOUR_PASSWORD -``` - -Configuration variables: - -- **host** (*Required*): The local IP address of the Egardia/Woonveilig alarm panel. -- **username** (*Required*): Username for the Egardia/Woonveilig account. -- **password** (*Required*): Password for Egardia/Woonveilig account. -- **version** (*Optional*): The version of the Egardia system. `GATE-01`, `GATE-02` and `GATE-03` are currently supported. Defaults to `GATE-01`. -- **port** (*Optional*): The port of the alarm panel. Defaults to 80. -- **name** (*Optional*): Name to use for the alarm panel. Defaults to `Egardia`. -- **report_server_enabled** (*Optional*): Enable reporting by server. Defaults to `False`. -- **report_server_port** (*Optional*): Port of the Egardia server. Defaults to 52010. -- **report_server_codes** list (*Optional*): List of codes for the different states. - -Note that this basic configuration will only enable you to read the armed/armed away/disarmed status of your alarm and will **not** update the status if the alarm is triggered. This is because of how Egardia built their system. The alarm triggers normally go through their servers. -You can change this, however, using the following procedure. This is a more advanced configuration. - -1. Log in into your alarm system's control panel. You will need to access http://[IP of your control panel]. You know this already since you need it in the basic configuration from above. Log in to the control panel with your Egardia/Woonveilig username and password. -1. Once logged in, go to *System Settings*, *Report* and change the Server Address for your primary server to the IP or hostname of your Home Assistant machine. You can leave the port number set to 52010 or change it to anything you like. **Make sure to change the settings of the primary server otherwise the messages will not come through. Note that this will limit (or fully stop) the number of alarm messages you will get through Egardia's / Woonveilig services.** Maybe, that is just what you want. Make sure to save your settings by selecting 'OK'. -1. On your Home Assistant machine run `$ sudo python3 egardiaserver.py`. Refer to the [python-egardia repository](https://github.com/jeroenterheerdt/python-egardia) for detailed documentation on parameters. This will receive status codes from your alarm control panel and display them. You will need the codes to include in your configuration.yaml. Make sure to change the status of your alarm to all states (disarm, arm, home) by all means possible (all users, remotes, web login, app) as well as trigger the alarm in all ways possible to get 100% coverage. **Before triggering the alarm it might be good to disable the siren temporarily (can be done in Panel Settings).** -1. Once you have the codes, update your `configuration.yaml`: - ```yaml - # Example configuration.yaml entry - alarm_control_panel: -  - platform: egardia -   host: YOUR_HOST -   username: YOUR_USERNAME -   password: YOUR_PASSWORD - report_server_enabled: True - report_server_port: PORT_OF_EGARDIASERVER (optional, defaults to 52010) - report_server_codes: - arm: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX - disarm: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX - home: XXXXXXXXXXXXXXXX - triggered: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX - ignore: XXXXXXXXXXXXXXXX - ``` - -Note that for *triggered*, *arm* and *disarm* multiple codes can be entered since each sensor triggers with a different code and each user of the system has its own arm and disarm codes. Also note that your system will do regular system checks which will be reported as well. Since Home Assistant provides no way of handling them properly, you can enter those codes as *ignore* (again, multiple codes can be used here). The egardia component will ignore these codes and continue returning the old status if it receives any of the codes that are listed as ignore. This is useful for example when you have armed your alarm at night: normally a system check will occur at least once during the night and if that code is not specified anywhere Home Assistant will set the status of the alarm to its default, which is unarmed. This is in fact wrong. Listing the code as ignore changes this behavior and Home Assistant will continue to show the status the alarm is in (disarm, arm, home, triggered) even when system checks occur. - -5. Test your setup and enjoy. The component will update if the alarm status changes, including triggers. You can use this to build your own automations and send notifications as you wish. *Note*: previous versions required a separate egardiaserver to be set up. This is no longer necessary and corresponding system services can be removed (using systemctl). +The `egardia` platform allows you to integrate your [Egardia](http://www.egardia.com)/[Woonveilig](http://www.woonveilig.nl) alarm control panel in Home Assistant. +You will need to set up your [Egardia hub](/components/egardia/). diff --git a/source/_components/binary_sensor.egardia.markdown b/source/_components/binary_sensor.egardia.markdown new file mode 100644 index 0000000000..8df482bf5b --- /dev/null +++ b/source/_components/binary_sensor.egardia.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "Egardia Binary Sensor" +description: "Instructions how to integrate Egardia / Woonveilig binary sensors into Home Assistant." +date: 2018-03-02 09:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: egardia.png +ha_release: 0.65 +ha_category: Binary Sensor +ha_iot_class: "Polling" +--- + +The `egardia` platform allows you to get data from your [Egardia](http://www.egardia.com)/[Woonveilig](http://www.woonveilig.nl) binary sensors from within Home Assistant. +Currently only door contacts are supported. IR sensors are not supported and will probably never be since their status cannot be read outside of the alarm control panel. Smoke sensors and others might be added but currently are not supported. + +You will need to set up your [Egardia hub](/components/egardia/). diff --git a/source/_components/egardia.markdown b/source/_components/egardia.markdown new file mode 100644 index 0000000000..068920b8ab --- /dev/null +++ b/source/_components/egardia.markdown @@ -0,0 +1,67 @@ +--- +layout: page +title: "Egardia" +description: "Instructions how to setup Egardia / Woonveilig within Home Assistant." +date: 2018-03-02 09:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Hub +ha_release: 0.65 +logo: egardia.png +--- + +The `egardia` platform enables the ability to control an [Egardia](http://egardia.com/)/[Woonveilig](http://woonveilig.nl) control panel. These alarm panels are known under different brand names across the world, including Woonveilig in the Netherlands. This was tested on the WL-1716, GATE-01, GATE-02 and GATE-03 versions of the Egardia/Woonveilig platform. Not only will you integrate your alarm control panel, supported sensors (door contacts at this moment) will be added automatically (hidden by default). + +You will need to know the IP of your alarm panel on your local network. Test if you can login to the panel by browsing to the IP address and log in using your Egardia/Woonveilig account. + +To enable the integration with your alarm panel, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +egardia: + host: YOUR_HOST + username: YOUR_USERNAME + password: YOUR_PASSWORD +``` + +Configuration variables: + +- **host** (*Required*): The local IP address of the Egardia/Woonveilig alarm panel. +- **username** (*Required*): Username for the Egardia/Woonveilig account. +- **password** (*Required*): Password for Egardia/Woonveilig account. +- **version** (*Optional*): The version of the Egardia system. `GATE-01`, `GATE-02` and `GATE-03` are currently supported. Defaults to `GATE-01`. +- **port** (*Optional*): The port of the alarm panel. Defaults to 80. +- **report_server_enabled** (*Optional*): Enable reporting by server. Defaults to `False`. +- **report_server_port** (*Optional*): Port of the Egardia server. Defaults to 52010. +- **report_server_codes** list (*Optional*): List of codes for the different states. + +Note that this basic configuration will only enable you to read the armed/armed away/disarmed status of your alarm and will **not** update the status if the alarm is triggered. This is because of how Egardia built their system. The alarm triggers normally go through their servers. +You can change this, however, using the following procedure. This is a more advanced configuration. + +1. Log in to your alarm system's control panel. You will need to access http://[IP of your control panel]. You know this already since you need it in the basic configuration from above. Log in to the control panel with your Egardia/Woonveilig username and password. +2. Once logged in, go to *System Settings*, *Report* and change the Server Address for your primary server to the IP or hostname of your Home Assistant machine. You can leave the port number set to 52010 or change it to anything you like. **Make sure to change the settings of the primary server otherwise the messages will not come through. Note that this will limit (or fully stop) the number of alarm messages you will get through Egardia's / Woonveilig services.** Maybe, that is just what you want. Make sure to save your settings by selecting 'OK'. +3. The Egardia component relies on capturing the status codes that your alarm emits when something happens (status change or trigger). These codes will be unique for every situation - i.e. the code emitted by the alarm when a sensor is triggered is unique to that sensor. Also, if you have multiple users or remotes, each remote has unique codes that are emitted by the alarm when status is changed using that remote or by that user. For the Egardia component to work correctly you will need to capture the codes. To do this, on your Home Assistant machine run `$ sudo python3 egardiaserver.py`. Refer to the [python-egardia repository](https://github.com/jeroenterheerdt/python-egardia) for detailed documentation on parameters. This will receive status codes from your alarm control panel and display them. Record the codes shown as well as the status they relate to (see step 4 below). Make sure to change the status of your alarm to all states (disarm, arm, home) by all means possible (all users, remotes, web login, app) as well as trigger the alarm in all ways possible to get 100% coverage of all the codes the alarm system generates. You will need to run this script once and stop it once you have captured all the possible codes. Also, if you ever add users, remotes or sensors to your alarm system, make sure to re-run the script to capture the extra codes so you can update your configuration (see step 4 below). **For comfort, before triggering the alarm it might be good to disable the siren temporarily (can be done in Panel Settings).** +4. Once you have the codes, update your `configuration.yaml`: + ```yaml + # Example configuration.yaml entry + egardia: +   host: YOUR_HOST +   username: YOUR_USERNAME +   password: YOUR_PASSWORD + report_server_enabled: True + report_server_port: PORT_OF_EGARDIASERVER (optional, defaults to 52010) + report_server_codes: + arm: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX + disarm: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX + armhome: XXXXXXXXXXXXXXXX + triggered: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX + ignore: XXXXXXXXXXXXXXXX + ``` + +Note that for all code groups (*arm*,*disarm*, etc) multiple codes can be entered since each sensor triggers with a different code and each user of the system has its own arm and disarm codes. Also note that your system will do regular system checks which will be reported as well. Since Home Assistant provides no way of handling them properly, you can enter those codes as *ignore* (again, multiple codes can be used here). The egardia component will ignore these codes and continue returning the old status if it receives any of the codes that are listed as ignore. This is useful for example when you have armed your alarm at night: normally a system check will occur at least once during the night and if that code is not specified anywhere Home Assistant will set the status of the alarm to its default, which is unarmed. This is in fact wrong. Listing the code as ignore changes this behavior and Home Assistant will continue to show the status the alarm is in (disarm, arm, home, triggered) even when system checks occur. + +5. Test your setup and enjoy. The component will update if the alarm status changes, including triggers. You can use this to build your own automations and send notifications as you wish. *Note*: previous versions required a separate egardiaserver to be set up. This is no longer necessary and corresponding system services can be removed (using systemctl). + + From 086811ddcf46ffb9ec2edac0ad46f544e2759059 Mon Sep 17 00:00:00 2001 From: Teemu R Date: Fri, 9 Mar 2018 19:28:40 +0100 Subject: [PATCH 006/371] Add sony songpal docs (#4570) * add sony songpal docs * use configuration, add a title for configuration section * remove oxford comma, add link to media_player's services * add entity_id desc for service * be more descriptive which devices are supported * Update songpal supported devices + bump version * discoverY * Update media_player.songpal.markdown * Fix invalid syntax --- .../_components/media_player.songpal.markdown | 68 ++++++++++++++++++ source/images/supported_brands/sony.png | Bin 0 -> 7152 bytes 2 files changed, 68 insertions(+) create mode 100644 source/_components/media_player.songpal.markdown create mode 100644 source/images/supported_brands/sony.png diff --git a/source/_components/media_player.songpal.markdown b/source/_components/media_player.songpal.markdown new file mode 100644 index 0000000000..65874f99b2 --- /dev/null +++ b/source/_components/media_player.songpal.markdown @@ -0,0 +1,68 @@ +--- +layout: page +title: "Sony SongPal compatible devices" +description: "Instructions how to integrate Sony Songpal devices into Home Assistant." +date: 2018-02-03 09:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: sony.png +ha_category: Media Player +ha_iot_class: "Local Polling" +ha_release: 0.65 +--- + +The `songpal` platform allows you to control Sony's Songpal ("[Audio Control API](https://developer.sony.com/develop/audio-control-api/)") compatible devices such as soundbars, AV receivers and wireless speakers from Home Assistant. + +Even when the API officially supports only a few devices (HT-ST5000, HT-MT500, HT-CT800, SRS-ZR5 and STR-DN1080), it has also been confirmed to work on others. [The list of supported devices](http://vssupport.sony.net/en_ww/device.html) from Sony's Songpal website lists devices which are likely to be compatible with this platform. + +If the platform works with your non-listed device, or you encounter bugs, please feel free to [report them upstream](https://github.com/rytilahti/python-songpal). + +A few notes: + +- The quick start-up mode has to be enabled in order to turn the device on. +- Supports currently only one output terminal, i.e. the volume control works only on the first volume controller as reported by the backend library. +- Some devices, e.g. HT-XT3, do not support decreasing the volume step-by-step correctly. +- Feel free to improve the available services! + +## {% linkable_title Configuration %} + +The platform will be loaded automatically by discovery component. If you want to manually configure it, add the following to your `configuration.yaml` file: + +```yaml +media_player: + - platform: songpal + name: my soundbar + endpoint: http://IP_ADDRESS:10000/sony +``` + +{% configuration %} +name: + description: The name to display for this device. + required: false + type: string +endpoint: + description: API endpoint of the device. + required: true + type: string +{% endconfiguration %} + +See [python-songpal's documentation](https://github.com/rytilahti/python-songpal#locating-the-endpoint) how to get your API endpoint. + +## {% linkable_title Services %} + +In addition to the general [media player services](https://home-assistant.io/components/media_player/#services), the following services are provided: + +### {% linkable_title Service `media_player/songpal_set_sound_setting` %} + +For a list of available settings and their values use [`songpal sound`](https://github.com/rytilahti/python-songpal#sound-settings) command. + +| Service data attribute | Optional | Description | +|------------------------|----------|--------------------------------------------------| +| `entity_id` | yes | Target entity, leave unset for all devices | +| `name` | no | Configuration variable, e.g. `nightmode` | +| `value` | no | New configuration value, e.g. `on` | + + + diff --git a/source/images/supported_brands/sony.png b/source/images/supported_brands/sony.png new file mode 100644 index 0000000000000000000000000000000000000000..78a8e8440b1a2c18c03bf7c2791ac9de0f673b1d GIT binary patch literal 7152 zcmV004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 mI4v+aR4_F Date: Fri, 9 Mar 2018 10:33:56 -0800 Subject: [PATCH 007/371] Add Camera Proxy documentation (#4863) * Add Camera Proxy documentation * Minor typos * Update camera.proxy.markdown --- source/_components/camera.proxy.markdown | 61 ++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 source/_components/camera.proxy.markdown diff --git a/source/_components/camera.proxy.markdown b/source/_components/camera.proxy.markdown new file mode 100644 index 0000000000..41719935d3 --- /dev/null +++ b/source/_components/camera.proxy.markdown @@ -0,0 +1,61 @@ +--- +layout: page +title: "Camera Proxy" +description: "Instructions how to integrate a camera proxy within Home Assistant." +date: 2018-03-08 19:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Camera +ha_release: 0.65 +--- + + +The `proxy` camera platform allows you to pass another camera's output through post-processing routines and generate a new camera with the post-processed output. + +The current post-processing supports resizing the image/MJPEG as well as limiting the maximum refresh rate. + +The current proxy capabilities are intended to reduce the camera bandwidth for slower internet connections. + +To enable this camera in your installation, you must first have an existing working camera configured in Home Assistant. Next, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +camera: + - platform: proxy + entity_id: camera. + max_stream_width: 360 + max_image_width: 720 +``` + +Configuration variables: + +- **entity_id** (*Required*): The ID of another Home Assistant camera to post-process. +- **name** (*Optional*): This parameter allows you to override the name of your camera. +- **max_image_width** (*Optional*): The maximum width of single images taken from the camera (aspect ratio will be maintained). +- **max_stream_width** (*Optional*): The maximum width of the MJPEG stream from the camera (aspect ratio will be maintained). +- **image_quality** (*Optional*): The quality level used for resulting JPEG for snapshots (default: 75). +- **stream_quality** (*Optional*): The quality level used for resulting MJPEG streams (default: 75). +- **image_refresh_rate** (*Optional*): The minimum time in seconds between generating successive image snapshots. +- **force_resize** (*Optional*): Resize the image even if the resulting image would take up more bandwidth than the original. +- **cache_images** (*Optional*): Preserve the last image and re-send in the case the camera is not responding. + + +## {% linkable_title Examples %} + +Example of using a Camera proxy along with a Foscam camera: + +```yaml +camera: + - platform: foscam + ip: 192.168.1.10 + username: foscam_camera + password: camera_password + name: mycamera + - platform: proxy + entity_id: camera.mycamera + max_stream_width: 360 + max_image_width: 480 + image_refresh_rate: 5.0 +``` From 074bc50664aaf2e344989472f6fda24a38179e7b Mon Sep 17 00:00:00 2001 From: Timmo <28114703+timmo001@users.noreply.github.com> Date: Sat, 10 Mar 2018 17:12:36 +0000 Subject: [PATCH 008/371] Added three new sensors (#4873) New sensor documentation for https://github.com/home-assistant/home-assistant/pull/13026 --- source/_components/sensor.glances.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_components/sensor.glances.markdown b/source/_components/sensor.glances.markdown index 03b25369a7..77b8701146 100644 --- a/source/_components/sensor.glances.markdown +++ b/source/_components/sensor.glances.markdown @@ -58,6 +58,9 @@ sensor: - 'process_thread' - 'process_sleeping' - 'cpu_temp' + - 'docker_active' + - 'docker_cpu_use' + - 'docker_memory_use' ``` Configuration variables: @@ -81,5 +84,8 @@ Configuration variables: - **process_thread**: Number of threads - **process_sleeping**: Number of sleeping processes - **cpu_temp**: CPU Temperature (may not available on all platforms) + - **docker_active**: Count of active Docker containers + - **docker_cpu_use**: Total CPU usage in percent of Docker containers + - **docker_memory_use**: Total memory used of Docker containers Not all platforms are able to provide all metrics. For instance `cpu_temp` is requires installing and configuring `lmsensors` in Ubuntu, and may not be available at all in other platforms. From 80a42eb899c60f2a458de51f4b98e66a6e62c561 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 11 Mar 2018 15:37:02 -0700 Subject: [PATCH 009/371] Update the used Ruby version --- .ruby-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ruby-version b/.ruby-version index 58073ef8d7..35cee72dcb 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -2.4.1 \ No newline at end of file +2.4.3 From 91b5ca95119e48e74566ecddf78c6a20675850fb Mon Sep 17 00:00:00 2001 From: c727 Date: Mon, 12 Mar 2018 11:54:41 +0100 Subject: [PATCH 010/371] Added instructions for custom UIs to show up in the HA dev info panel (#4903) * Update frontend_creating_custom_ui.markdown Added instructions for custom UIs to show up in the HA dev info panel https://github.com/home-assistant/home-assistant-polymer/pull/981 * Use note class * Update frontend_creating_custom_ui.markdown --- .../frontend_creating_custom_ui.markdown | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/source/developers/frontend_creating_custom_ui.markdown b/source/developers/frontend_creating_custom_ui.markdown index c9da0cf1e2..d28623e8da 100644 --- a/source/developers/frontend_creating_custom_ui.markdown +++ b/source/developers/frontend_creating_custom_ui.markdown @@ -53,6 +53,20 @@ frontend: ``` +

+Some browsers don't support latest ECMAScript standards, these require a separate ES5 compatible file (`extra_html_url_es5`). +

For more possibilities, see the [Custom UI section](/cookbook/#user-interface) on our Examples page. From 0dbbfb785dfa5b773bfbdff89abb9f12344cc35c Mon Sep 17 00:00:00 2001 From: Federico Zivolo Date: Mon, 12 Mar 2018 20:33:13 +0100 Subject: [PATCH 011/371] docs: Added api_version doc for philips_js (#4904) * docs: Added api_version doc for philips_js * Update media_player.philips_js.markdown --- source/_components/media_player.philips_js.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/media_player.philips_js.markdown b/source/_components/media_player.philips_js.markdown index 2db2fe8ded..e776db61a3 100644 --- a/source/_components/media_player.philips_js.markdown +++ b/source/_components/media_player.philips_js.markdown @@ -30,3 +30,4 @@ Configuration variables: - **host** (*Required*): IP address of TV. - **name** (*Optional*): The name you would like to give to the Philips TV. - **turn_on_action** (*Optional*): A script that will be executed to turn on the TV (can be used with wol). +- **api_version** (*Optional*): The JointSpace API version of your Philips TV, defaults to `1`. This is an experimental option and not all the functionalities are guaranteed to work with API versions different from `1`. From fec18d3a8f43dbb0908982609842a1b09c794006 Mon Sep 17 00:00:00 2001 From: themanieldaniel Date: Tue, 13 Mar 2018 16:38:31 -0400 Subject: [PATCH 012/371] Update backup_usb.markdown (#4634) * Update backup_usb.markdown * :pencil2: Minor improvements --- .../ecosystem/backup/backup_usb.markdown | 50 ++++++++++--------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/source/_docs/ecosystem/backup/backup_usb.markdown b/source/_docs/ecosystem/backup/backup_usb.markdown index 6bd6276883..182c5b44c4 100644 --- a/source/_docs/ecosystem/backup/backup_usb.markdown +++ b/source/_docs/ecosystem/backup/backup_usb.markdown @@ -9,11 +9,12 @@ sharing: true footer: true --- -Backing up your Home Assistant configuration to USB drive. A good plus side is that you don't need to mask all your passwords since the backup is locally at your home/residence. +This will step you through the process of setting up a backup of your Home Assistant configuration to a USB device. This is a good method if you don't want to mask all of your passwords since the backup is kept locally at your home/residence. ### {% linkable_title Requirements %} -First you need a USB drive. Once you have one you need to prepare it to be used on your device. -Once connected you want to format/work with the drive. To know what path it is in, you can check with `dmesg`. + +First, you need a USB drive. It should be formatted properly for your device and connected to your device before beginning. Any type of partition will work, but Linux filesystems are preferred so that you can set permissions. +Once connected you want to mount the drive. To find the path where it is located, you can use the `dmesg` command. ```bash # dmesg | grep sd @@ -32,16 +33,17 @@ Once connected you want to format/work with the drive. To know what path it is i [726259.209004] sd 0:0:0:0: [sda] Attached SCSI removable disk ``` -Here we see we have a drive on `/dev/sda1`. We assume you created a partition on the drive to start with. This can be any type of partition. Preferred is a Linux filesystem type so you can set permissions! +The device here is `sda` and our partition is `sda1`. So our partition is located here `/dev/sda1`. Mount the drive (as root) to `/media` ```bash -# mount /dev/sda1 /media/ +# sudo mount /dev/sda1 /media/ ``` -### {% linkable_title Prepare USB Stick %} -Change into it and create a folder called `hassbackup` and change the ownership to the user that runs Home Assistant. In my case group and user are both `homeassistant`. +### {% linkable_title Prepare the USB Device %} + +Change to the `/media` directory and create a folder called `hassbackup`. Change the ownership to the user that runs Home Assistant. In this example case, the user and group are both `homeassistant`. ```bash # cd /media/ @@ -54,11 +56,10 @@ drwxr-xr-x 22 root root 4096 Mar 22 18:37 .. drwxr-xr-x 2 homeassistant homeassistant 4096 Apr 29 10:36 hassbackup drwx------ 2 root root 16384 Apr 29 10:18 lost+found ``` -You can ignore 'lost+found'. ### {% linkable_title Install Dependency %} -In order to preserve space on your drive we use zip. Install that too. +The script in the next section uses zip to preserve space on your drive. So we will install zip next. ```bash /media# apt-get install zip @@ -68,9 +69,9 @@ Building dependency tree Setting up zip (3.0-8) ... ``` -### {% linkable_title Install and run script %} +### {% linkable_title Download and Run Script %} -Become the `homeassistant` user and place the following [script](https://gist.github.com/riemers/041c6a386a2eab95c55ba3ccaa10e7b0) to a place of your liking. +Become the `homeassistant` user (or whatever user runs Home Assistant). Change to whatever directory you would like the [script](https://gist.github.com/riemers/041c6a386a2eab95c55ba3ccaa10e7b0) placed into and run the following command. ```bash # wget https://gist.githubusercontent.com/riemers/041c6a386a2eab95c55ba3ccaa10e7b0/raw/86727d4e72e9757da4f68f1c9d784720e72d0e99/usb_backup.sh @@ -82,7 +83,7 @@ Make the downloaded script executable. # chmod +x usb_backup.sh ``` -Open up the file and change the paths you want to use, then simply run the `./usb_backup.sh`. +Edit the script file using your preferred text editor (use nano if you are not advanced). Change the paths to reflect your configuration, then simply run `./usb_backup.sh`. ```bash $ .homeassistant/extraconfig/shell_code/usb_backup.sh @@ -91,26 +92,27 @@ $ .homeassistant/extraconfig/shell_code/usb_backup.sh [i] Keeping all files no prunning set ``` -### {% linkable_title Crontab %} -In order for this to automatically make a backup every night at 3 am, you can add a crontab for it as the `homeassistant` user. -Change below path to where you placed the `usb_backup.sh` and run the following line. +### {% linkable_title Set Up Crontab %} + +To automatically backup your configuration on a schedule, you can add a crontab for it as the `homeassistant` user. +Change the path below to the directory where you placed the `usb_backup.sh` and run the following line. This will backup every night at 3 am. ```bash (crontab -l 2>/dev/null; echo "0 3 * * * /home/homeassistant/.homeassistant/extraconfig/shell_code/usb_backup.sh") | crontab - ``` -### {% linkable_title Auto mount %} +### {% linkable_title Auto Mount the USB Device %} -This does not automatically mount your USB drive at boot. You need to do that manually or add a line to your `/etc/fstab` file. +NOTE: This does not automatically mount your USB drive at boot. You will need to manually mount your drive after each boot or add a line to your `/etc/fstab` file. -If your drive is on `/dev/sda1`, you could add an entry to your `/etc/fstab` like so: - -```text -/dev/sda1 /media ext4 defaults,noatime 0 1 -``` - -Manual step to mount the USB drive: +To manually mount a USB drive located at `/dev/sda1`, run the following line: ```bash # mount /dev/sda1 /media ``` + +Alternatively, auto-mount the drive by adding the following entry to your `/etc/fstab`: + +```text +/dev/sda1 /media ext4 defaults,noatime 0 1 +``` From 5a5d9c8d4e99178f8990915df895bfabc86792a3 Mon Sep 17 00:00:00 2001 From: Adam Mills Date: Tue, 13 Mar 2018 17:24:17 -0400 Subject: [PATCH 013/371] Remove Z-Wave old entity IDs (#4749) --- source/_docs/z-wave/control-panel.markdown | 2 -- source/_docs/z-wave/installation.markdown | 5 ----- 2 files changed, 7 deletions(-) diff --git a/source/_docs/z-wave/control-panel.markdown b/source/_docs/z-wave/control-panel.markdown index 400a6b6d4c..8550f12679 100644 --- a/source/_docs/z-wave/control-panel.markdown +++ b/source/_docs/z-wave/control-panel.markdown @@ -82,10 +82,8 @@ This will display the Z-Wave related information about the node: * **lastResponseRTT** The Round Trip Time of the response to the last request * **manufacturer_name** The name of the manufacturer, as supplied by OpenZWave * **max_baud_rate** The maximum bandwidth the device supports, most modern devices will support 40,000 or higher -* **new_entity_id** In 0.47, Home Assistant introduced a new naming convention for entities, this shows the new naming convention * **node_id** The unique node ID of this node * **node_name** The base name of this node, this is used to build the entity ID of all entities of this node -* **old_entity_id** If `new_entity_ids: false` has been configured, then this is the entity_id that will be used. Support for this will be removed in the future * **product_name** The product name of the device, as supplied by OpenZWave * **query_stage** The query stage for this device (see [here](/docs/z-wave/query-stage/) for details) * **receivedCnt** The number of messages received from the device diff --git a/source/_docs/z-wave/installation.markdown b/source/_docs/z-wave/installation.markdown index 5974c16a20..3223208b9f 100644 --- a/source/_docs/z-wave/installation.markdown +++ b/source/_docs/z-wave/installation.markdown @@ -77,11 +77,6 @@ debug: required: false type: boolean default: False -new_entity_ids: - description: Switch to new entity_id generation. - required: false - type: boolean - default: True device_config / device_config_domain / device_config_glob: description: This attribute contains node-specific override values. (For releases prior to 0.39 this variable is called **customize**) See [Customizing devices and services](/docs/configuration/customizing-devices/) for the format. required: false From 6ee7e31359a9bc9f4d6f0a782194c10b0baa7753 Mon Sep 17 00:00:00 2001 From: JC Connell Date: Wed, 14 Mar 2018 03:18:08 -0400 Subject: [PATCH 014/371] Update sensor.spotcrime.markdown (#4840) * Update sensor.spotcrime.markdown Changes the documentation to reflect the user supplied API key requirement. * Change description and sample Added optional keys to description and removed optional keys from sample --- source/_components/sensor.spotcrime.markdown | 48 +++++++++++++------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/source/_components/sensor.spotcrime.markdown b/source/_components/sensor.spotcrime.markdown index 98e2b7ee40..b36d01b4b4 100644 --- a/source/_components/sensor.spotcrime.markdown +++ b/source/_components/sensor.spotcrime.markdown @@ -8,13 +8,13 @@ comments: false sharing: true footer: true ha_category: Sensor -ha_release: 0.64 +ha_release: 0.65 ha_iot_class: "Cloud Polling" --- The `spotcrime` sensor allows one to track reported incidents occurring in a given area. Incidents include anything reported to [Spot Crime](http://spotcrime.com). Your regional emergency services may or may not report data. The sensor defaults to counting incidents within one day, but can be customized via configuration.yaml. -## Configuration +You will need to request an API key from [Spotcrime](mailto:pyrrhus@spotcrime.com). To enable this sensor, add the following lines to your `configuration.yaml`. Your `radius` should be of sufficient size to capture incidents in your area. 0.01 = 1 mile. @@ -23,23 +23,39 @@ sensor: - platform: spotcrime name: radius: - days: + api_key: <"your_api_key_here"> ``` -Configuration options for the Crime Reports Sensor: +{% configuration %} +name: + description: Name the sensor what you'd like. + required: true + type: string +radius: + description: Radius you'd like to search within. 0.01 = 1 mile. + required: true + type: float +api_key: + description: The API key to access the service. + required: true + type: string +days: + description: Number of days you'd like see to crime statistics for. + required: false + type: int +include: + description: Event types you want statistics for. + required: false + type: list +exclude: + description: Event types to ignore statistics for. + required: false + type: list +{% endconfiguration %} -- **name** (*Required*): Name the sensor whatever you want. -- **radius** (*Required*): Radius in miles. -- **days** (*Optional*): Defaults to 1 day. -- **latitude** (*Optional*): Defaults to your home zone latitude. -- **longitude** (*Optional*): Defaults to your home zone longitude. -- **include** (*Optional*): List of incident types to include. -- **exclude** (*Optional*): List of incident types to exclude. +## {% linkable_title Notes %} - -## Notes - -### Incident Types +### {% linkable_title Incident Types %} You can explicitly include or exclude incident types. Specifying `include`s restricts the incidents to those types. Specifying `exclude`s will return all incident types except those specified. @@ -55,6 +71,6 @@ These incident types are available: - Vandalism - Other -### Events +### {% linkable_title Events %} The `crimealerts` sensor fires a `crimealerts_incident` event when a new incident is detected, including the type, time, and location of the incident. From 3ddfa61ad5fcca01bf5879c8182304245395f9ae Mon Sep 17 00:00:00 2001 From: Mark Perdue Date: Wed, 14 Mar 2018 07:36:12 -0400 Subject: [PATCH 015/371] Add VeSync documentation and image (#4864) * Add VeSync documentation and image * Adds fix for TravisCI error endconfiguration * :pencil2: Tiny updates --- source/_components/switch.vesync.markdown | 36 ++++++++++++++++++++++ source/images/supported_brands/vesync.png | Bin 0 -> 52019 bytes 2 files changed, 36 insertions(+) create mode 100644 source/_components/switch.vesync.markdown create mode 100644 source/images/supported_brands/vesync.png diff --git a/source/_components/switch.vesync.markdown b/source/_components/switch.vesync.markdown new file mode 100644 index 0000000000..d3b5971636 --- /dev/null +++ b/source/_components/switch.vesync.markdown @@ -0,0 +1,36 @@ +--- +layout: page +title: "VeSync Switch" +description: "Instructions on how to set up Etekcity VeSync switches within Home Assistant." +date: 2018-03-09 02:11 +sidebar: true +comments: false +sharing: true +footer: true +logo: vesync.png +ha_category: Switch +ha_release: 0.66 +--- + +The `vesync` switch platform enabled integration with Etekcity VeSync smart switches. + +To use your VeSync switches, you must first register your switches with the VeSync app. Once registration is complete you must add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +switch: + - platform: vesync + username: username + password: password +``` + +{% configuration %} +username: + description: Username needed to log in to VeSync. + required: true + type: string +password: + description: Password needed to log in to VeSync. + required: true + type: string +{% endconfiguration %} diff --git a/source/images/supported_brands/vesync.png b/source/images/supported_brands/vesync.png new file mode 100644 index 0000000000000000000000000000000000000000..72aba904138e7c78967e93f0dfaefd5b9de896e6 GIT binary patch literal 52019 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 Date: Thu, 15 Mar 2018 01:04:01 +0200 Subject: [PATCH 016/371] Update downloader.markdown (#4916) * Update downloader.markdown Add description for new events that are emitted when download is requested. * :pencil2: Small fixes --- source/_components/downloader.markdown | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/source/_components/downloader.markdown b/source/_components/downloader.markdown index 53063587d6..469c13d2b7 100644 --- a/source/_components/downloader.markdown +++ b/source/_components/downloader.markdown @@ -42,3 +42,29 @@ This will download the file from the given URL. | `subdir` | yes | Download into subdirectory of **download_dir** | | `filename` | yes | Determine the filename. | | `overwrite` | yes | Whether to overwrite the file or not, defaults to `false`. | + +### {% linkable_title Download Status Events %} + +When a download finished successfully, Home Assistant will emit a 'downloader_download_completed' event to the event bus which you can use to write automations against. +In case download failed another event 'downloader_download_failed' is emitted to indicate that the download did not complete successfully. + +Along with the event the following payload parameters are available: + +| Parameter | Description | +|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `url` | The `url` that was requested.| +| `filename` | The `name` of the file that was being downloaded.| + +#### Example Automation: + +```yaml +- alias: Download Failed Notification + trigger: + platform: event + event_type: downloader_download_failed + action: + service: persistent_notification.create + data_template: + message: "{{trigger.event.data.filename}} download failed" + title: "Download Failed" + ``` From 9c20af02fac6aa5cf795507d80a2b6ae60efbfe9 Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Thu, 15 Mar 2018 03:16:30 +0100 Subject: [PATCH 017/371] Homekit: Updated docs for Restructure PR (#4915) * Homekit: Updated docs for Restructure PR * Added considerations * Removed QR Code --- source/_components/homekit.markdown | 147 +++++++++++++++++++++++++--- 1 file changed, 131 insertions(+), 16 deletions(-) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index ebb4b6ccd4..4ed321f4bb 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -12,7 +12,7 @@ ha_release: 0.64 logo: apple-homekit.png --- -The `HomeKit` component allows you to forward entities from Home Assistant to Apple `HomeKit`, so they could be controlled from Apple `Home` app and `Siri`. +The `HomeKit` component allows you to forward entities from Home Assistant to Apple `HomeKit`, so they could be controlled from Apple `Home` app and `Siri`. Please make sure that you have read the [considerations](#considerations) listed below to save you some trouble later. {% configuration %} homekit: @@ -20,18 +20,55 @@ The `HomeKit` component allows you to forward entities from Home Assistant to Ap required: true type: map keys: - pincode: - description: Pin code required during setup of HomeKit Home Assistant accessory. The format needs to be 'XXX-XX-XXX' where X is a number between 0 and 9. + auto_start: + description: Flag if the HomeKit Server should start automatically after the Home Assistant Core Setup is done. ([Disable Auto Start](#disable-auto-start)) required: false - type: string - default: '"123-45-678"' + type: boolean + default: true port: description: Port for the HomeKit extension. required: false type: int - default: 51826 + default: 51827 + filter: + description: Filter entities to available in the `Home` app. ([Configure Filter](#configure-filter)) + required: false + type: map + keys: + include_domains: + description: Domains to be included. + required: false + type: list + include_entities: + description: Entities to be included. + required: false + type: list + exclude_domains: + description: Domains to be excluded. + required: false + type: list + exclude_entities: + description: Entities to be excluded. + required: false + type: list + entity_config: + description: Configuration for specific entities. All subordinate keys are the corresponding entity ids to the domains, e.g. `alarm_control_panel.alarm`. + required: false + type: map + keys: + alarm_control_panel: + description: Additional options for `alarm_control_panel` entities. + required: false + type: map + keys: + code: + description: Code to arm or disarm the alarm in the frontend. + required: false + type: string + default: '' {% endconfiguration %} + ## {% linkable_title Setup %} To enable the `HomeKit` component in Home Assistant, add the following to your configuration file: @@ -39,18 +76,78 @@ To enable the `HomeKit` component in Home Assistant, add the following to your c ```yaml # Example for HomeKit setup homekit: - pincode: '123-45-678' ``` -

It is not recommended to choose '123-45-678' as your pin code!

- -After Home Assistant has started, all supported entities (see the [list](#supported-components) below which components are already integrated) will be exposed to `HomeKit`. To add them: -1. Open the `Home` App. -2. Choose `Add Accessory` and then `Don't Have a Code or Can't Scan?`. -3. The `Home Assistant` Bridge should be listed there. Select it and follow the instructions to complete setup. +After Home Assistant has started, the entities specified by the filter are exposed to `HomeKit` if the are [supported](#supported-components). To add them: +1. Open the Home Assistant frontend. A new card will display the `pin code`. +1. Open the `Home` app. +2. Choose `Add Accessory`, than select `Don't Have a Code or Can't Scan?` and enter the `pin code`. +4. Confirm the you are adding an `Uncertified Accessory` by clicking on `Add Anyway`. +5. Follow the setup be clicking on `Next` and lastly `Done` in the top right hand corner. +6. The `Home Assistant` Bridge and the Accessories should now be listed in the `Home` app. After the setup is completed you should be able to control your Home Assistant components through `Home` and `Siri`. + +## {% linkable_title Considerations %} + + +### {% linkable_title Accessory ID %} + +Currently this component uses the `entity_id` to generate a unique `accessory id (aid)` for `HomeKit`. The `aid` is used to identify a device and save all configurations made for it. This however means that if you decide to change an `entity_id` all configurations for this accessory made in the `Home` app will be lost. + +### {% linkable_title Persistence Storage %} + +Unfortunately `HomeKit` doesn't support any kind of persistence storage, only the configuration for accessories that are added to the `Home Assistant Bridge` are kept. To avoid problems it is recommended to use an automation to always start `HomeKit` with at least the same entities setup. If for some reason some entities are not setup, their config will be deleted. (State unknown or similar will not cause any issues.) + +A common situation might be if you decide to disable parts of the configuration for testing. Please make sure to disable `auto start` and `turn off` the `Start HomeKit` automation (if you have one). + + +## {% linkable_title Disable Auto Start %} + +Depending on your individual setup, it might be necessary to disable `Auto Start` for all accessories to be available for `HomeKit`. Only those entities that are fully setup when the `HomeKit` component is started, can be added. To start `HomeKit` when `auto_start: False`, you can call the service `homekit.start`. + +This can be automated using an `automation`. + +{% raw %} +```yaml +# Example for Z-Wave +homekit: + auto_start: False + +automation: + - alias: 'Start HomeKit' + trigger: + - platform: event + event_type: zwave.network_ready + action: + - service: homekit.start +``` +{% endraw %} + +{% raw %} +```yaml +# Example using a delay after start of Home Assistant +homekit: + auto_start: False + +automation: + - alias: 'Start HomeKit' + trigger: + - platform: homeassistant + event: start + action: + - delay: 00:05 # Waits 5 minutes + - service: homekit.start +``` +{% endraw %} + + +## {% linkable_title Configure Filter %} + +To limit which entities are being exposed to `HomeKit`, you can use the `filter` parameter. By default no entity will be excluded. Keep in mind though that only supported components can be added. + + ## {% linkable_title Supported Components %} The following components are currently supported: @@ -59,8 +156,26 @@ The following components are currently supported: | --------- | --------- | ----------- | | alarm_control_panel | SecuritySystem | All security systems. | | climate | Thermostat | All climate devices. | -| cover | Window | All covers that support `set_cover_position`. | +| cover | WindowCovering | All covers that support `set_cover_position`. | | sensor | TemperatureSensor | All sensors that have `Celsius` and `Fahrenheit` as their `unit_of_measurement`. | -| switch/remote | Switch | All switches or remotes (represented as switches). | +| switch / remote | Switch | All switches or remotes (represented as switches). | -

Currently only devices that are setup when Home Assistant is starting can be exposed to `HomeKit`. This means that especially `Z-Wave` components are currently not supported, since they will be setup afterwards. We are working on a solution for this problem.

+ +## {% linkable_title Error reporting %} + +If you encounter any issues or bug and want to report them on `GitHub`, please follow these steps to make it easier for others to help and get your issue solved. + +1. Enable debugging mode: +```yaml +logger: + default: warning + logs: + homeassistant.components.homekit: debug +``` +2. Reproduce the bug / problem you have encountered. +3. Stop Home Assistant and copy the log from the log file. That is necessary since some errors only get logged, when Home Assistant is being shutdown. +4. Follow this link: [home-assistant/issues/new](https://github.com/home-assistant/home-assistant/issues/new?labels=component: homekit) and open a new issue. +5. Fill out all fields and especially include the following information: + - The configuration entries for `homekit` and the `component` that is causing the issue. + - The log / traceback you have generated before. + - Screenshots of the failing entity in the `states` panel. From e050bcaa61844388b570f9e4ceff32860ca4015a Mon Sep 17 00:00:00 2001 From: Kane610 Date: Thu, 15 Mar 2018 04:07:56 +0100 Subject: [PATCH 018/371] Document support for consumption and power sensors (#4917) --- source/_components/deconz.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/deconz.markdown b/source/_components/deconz.markdown index abebcec803..184e553f19 100644 --- a/source/_components/deconz.markdown +++ b/source/_components/deconz.markdown @@ -32,9 +32,11 @@ deconz: #### {% linkable_title Supported Device types %} - [Zigbee Lights](/components/light.deconz/) +- [Consumption Sensors](/components/sensor.deconz/) - [Humidity Sensors](/components/sensor.deconz/) - [Light Level Sensors](/components/sensor.deconz/) - [OpenClose Detectors](/components/binary_sensor.deconz/) +- [Power Sensors](/components/sensor.deconz/) - [Presence Detectors](/components/binary_sensor.deconz/) - [Pressure Sensors](/components/sensor.deconz/) - [Switches (Remote Controls)](/components/sensor.deconz/) From fd27ef1749b3fef072db6d77cc7909a62edf033f Mon Sep 17 00:00:00 2001 From: PhracturedBlue Date: Wed, 14 Mar 2018 20:41:03 -0700 Subject: [PATCH 019/371] Use configuration template (#4920) --- source/_components/camera.proxy.markdown | 51 +++++++++++++++++++----- 1 file changed, 40 insertions(+), 11 deletions(-) diff --git a/source/_components/camera.proxy.markdown b/source/_components/camera.proxy.markdown index 41719935d3..c5e92bc3d2 100644 --- a/source/_components/camera.proxy.markdown +++ b/source/_components/camera.proxy.markdown @@ -29,17 +29,46 @@ camera: max_image_width: 720 ``` -Configuration variables: - -- **entity_id** (*Required*): The ID of another Home Assistant camera to post-process. -- **name** (*Optional*): This parameter allows you to override the name of your camera. -- **max_image_width** (*Optional*): The maximum width of single images taken from the camera (aspect ratio will be maintained). -- **max_stream_width** (*Optional*): The maximum width of the MJPEG stream from the camera (aspect ratio will be maintained). -- **image_quality** (*Optional*): The quality level used for resulting JPEG for snapshots (default: 75). -- **stream_quality** (*Optional*): The quality level used for resulting MJPEG streams (default: 75). -- **image_refresh_rate** (*Optional*): The minimum time in seconds between generating successive image snapshots. -- **force_resize** (*Optional*): Resize the image even if the resulting image would take up more bandwidth than the original. -- **cache_images** (*Optional*): Preserve the last image and re-send in the case the camera is not responding. +{% configuration %} + entity_id: + description: The ID of another Home Assistant camera to post-process. + required: true + type: string + name: + description: This parameter allows you to override the name of your camera. + required: false + type: string + max_image_width: + description: The maximum width of single images taken from the camera (aspect ratio will be maintained). + required: false + type: integer + max_stream_width: + description: The maximum width of the MJPEG stream from the camera (aspect ratio will be maintained). + required: false + type: integer + image_quality: + description: The quality level used for resulting JPEG for snapshots. + required: false + type: integer + default: 75 + stream_quality: + description: The quality level used for resulting MJPEG streams. + required: false + type: integer + default: 75 + image_refresh_rate: + description: The minimum time in seconds between generating successive image snapshots. + required: false + type: float + force_resize: + description: Resize the image even if the resulting image would take up more bandwidth than the original. + required: false + type: boolean + cache_images: + description: Preserve the last image and re-send in the case the camera is not responding. + required: false + type: boolean +{% endconfiguration %} ## {% linkable_title Examples %} From 33e7be6bc313d99f6dd925bc08284cbb2fc7bdcb Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Thu, 15 Mar 2018 21:57:38 +0100 Subject: [PATCH 020/371] Added cover group platform (#4638) * Added doc for MultiCover * Added parameter description * entity_id_regex * Removed winter protection * Changed to 'group' platform * Changed 'Group Cover' to 'Cover Group' * :pencil2: Small grammar fix * :arrow_up: Updated ha_release. --- source/_components/cover.group.markdown | 43 +++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 source/_components/cover.group.markdown diff --git a/source/_components/cover.group.markdown b/source/_components/cover.group.markdown new file mode 100644 index 0000000000..c29b4b46a1 --- /dev/null +++ b/source/_components/cover.group.markdown @@ -0,0 +1,43 @@ +--- +layout: page +title: "Cover Group" +description: "Instructions how to setup grouped covers in Home Assistant." +date: 2018-02-11 10:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Cover +ha_release: 0.66 +ha_iot_class: "Local Push" +logo: home-assistant.png +--- + +The `group` platform can create a cover that combines several cover entities into one. + +To enable `Cover Groups` in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +cover: + - platform: group + entities: + - cover.hall_window + - cover.living_room_window +``` + +{% configuration %} + name: + description: Name to use in the frontend. + required: false + type: string + default: "Cover Group" + entities: + description: List of all cover entities you want to control. + required: true + type: [string | list] +{% endconfiguration %} + +## {% linkable_title Functionality %} + +It works best if you group covers with the same supported features together (like support for `open`/`close`/`stop`/`position`/`tilt controls`), but is not limited to it. In case you have bundled covers with different features together, the controls will only affect those covers that support the actions. From e23f5de59017a29738eecd710d5a84c38890f132 Mon Sep 17 00:00:00 2001 From: Gerard Date: Thu, 15 Mar 2018 23:24:57 +0100 Subject: [PATCH 021/371] Documentation for extra sensors BMW Connected Drive (#4733) * Documentation for extra sensors BMW Connected Drive * Updates to logo, category and HA release * :arrow_up: ha_release * :arrow_up: ha_release --- ...binary_sensor.bmw_connected_drive.markdown | 20 +++++++++++++++++++ .../lock.bmw_connected_drive.markdown | 20 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100755 source/_components/binary_sensor.bmw_connected_drive.markdown create mode 100755 source/_components/lock.bmw_connected_drive.markdown diff --git a/source/_components/binary_sensor.bmw_connected_drive.markdown b/source/_components/binary_sensor.bmw_connected_drive.markdown new file mode 100755 index 0000000000..6c38dc813e --- /dev/null +++ b/source/_components/binary_sensor.bmw_connected_drive.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "BMW connected drive" +description: "Instructions on how to setup your BMW connected drive account with Home Assistant." +date: 2018-02-22 23:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: bmw.png +ha_category: Binary Sensor +ha_release: 0.66 +--- + + +The `bmw_connected_drive` platform allows you to import data on your BMW into Home Assistant. + +The binary sensors will be automatically configured if 'bmw_connected_drive' component is configured. + +For more configuration information see the [bmw_connected_drive component](/components/bmw_connected_drive/) documentation. diff --git a/source/_components/lock.bmw_connected_drive.markdown b/source/_components/lock.bmw_connected_drive.markdown new file mode 100755 index 0000000000..2a7f670812 --- /dev/null +++ b/source/_components/lock.bmw_connected_drive.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "BMW connected drive" +description: "Instructions on how to setup your BMW connected drive account with Home Assistant." +date: 2018-02-22 23:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: bmw.png +ha_category: Lock +ha_release: 0.66 +--- + + +The `bmw_connected_drive` platform allows you to import data on your BMW into Home Assistant. + +The lock will be automatically configured if 'bmw_connected_drive' component is configured. + +For more configuration information see the [bmw_connected_drive component](/components/bmw_connected_drive/) documentation. From f8cdbdf880f55e9bb56ec11c0b1a91c6ebb6a83d Mon Sep 17 00:00:00 2001 From: Fabien Piuzzi Date: Fri, 16 Mar 2018 03:51:29 +0100 Subject: [PATCH 022/371] Foobot (#4670) * Foobot sensor device documentation * Tweaked documentation * :pencil2: Minor changes --- source/_components/sensor.foobot.markdown | 51 ++++++++++++++++++++++ source/images/supported_brands/foobot.png | Bin 0 -> 48418 bytes 2 files changed, 51 insertions(+) create mode 100644 source/_components/sensor.foobot.markdown create mode 100644 source/images/supported_brands/foobot.png diff --git a/source/_components/sensor.foobot.markdown b/source/_components/sensor.foobot.markdown new file mode 100644 index 0000000000..cf300fa7ac --- /dev/null +++ b/source/_components/sensor.foobot.markdown @@ -0,0 +1,51 @@ +--- +layout: page +title: "Foobot Air Quality Monitor" +description: "Instructions on how to setup Foobot Air Quality sensor in Home Assistant." +date: 2018-02-14 06:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: foobot.png +ha_category: Health +ha_release: 0.66 +ha_iot_class: "Cloud Polling" +--- + +The `foobot` sensor platform will fetch air quality data from your or yours [Foobot device(s)](https://foobot.io/features/). + +This sensor requires an API token. Please obtain one at [Foobot API site](https://api.foobot.io/apidoc/index.html). + +## {% linkable_title Configuring the Platform %} + +To enable this sensor, add the following lines to your `configuration.yaml` file: + +```yaml +sensor: + - platform: foobot + token: FOOBOT_SECRET_KEY + username: FOOBOT_USERNAME +``` + +{% configuration %} + token: + description: The token for the Foobot API. + required: true + type: string + username: + description: Your Foobot username, used to fetch devices associated with an account. + required: true + type: string +{% endconfiguration %} + +## {% linkable_title Available Metrics %} + +Every ten minutes, it'll fetch the last ten minutes average of the following measurements: + + * Temperature + * Humidity + * Co2 + * VOC + * PM2.5 + * [Index](https://help.foobot.io/hc/en-us/articles/204814371-What-does-central-number-mean-) diff --git a/source/images/supported_brands/foobot.png b/source/images/supported_brands/foobot.png new file mode 100644 index 0000000000000000000000000000000000000000..2d502c2cdac4a110bdbaa30a0a1b7f023c33a241 GIT binary patch literal 48418 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 nw*UL$|8d~|I}W^VBhlW|{PWR1Z|n Date: Fri, 16 Mar 2018 05:56:05 -0500 Subject: [PATCH 023/371] Added Stride notification component (#4921) * Added Stride notification component * :pencil2: Implement configuration tags --- source/_components/notify.stride.markdown | 63 ++++++++++++++++++++++ source/images/supported_brands/stride.png | Bin 0 -> 8776 bytes 2 files changed, 63 insertions(+) create mode 100644 source/_components/notify.stride.markdown create mode 100644 source/images/supported_brands/stride.png diff --git a/source/_components/notify.stride.markdown b/source/_components/notify.stride.markdown new file mode 100644 index 0000000000..0c79c44667 --- /dev/null +++ b/source/_components/notify.stride.markdown @@ -0,0 +1,63 @@ +--- +layout: page +title: "Stride" +description: "Instructions how to add Stride notifications to Home Assistant." +date: 2018-03-14 15:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: stride.png +ha_category: Notifications +ha_release: 0.66 +--- + +The `stride` platform allows you to send notifications from Home Assistant to [Stride](https://stride.com/). + +You need to obtain a [Stride API token](https://developer.atlassian.com/cloud/stride/security/authentication/#using-room-tokens) to be able to send notifications. When creating the token, you'll see a section labeled "Use this conversation URL to post messages" - it will look something like "https://api.atlassian.com/site/55872e9f-047e-a619-b32c-19d37fbc6038/conversation/26c98c26-0ffd-a11e-3a55-1b397cb71fe0/message". The first set of numbers and letters (`55872e9f-047e-a619-b32c-19d37fbc6038`) is the Cloud ID, and the second set (`26c98c26-0ffd-a11e-3a55-1b397cb71fe0`) is the Room ID. + +To enable the Stride notification in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +notify: + - platform: stride + cloudid: CLOUD-ID + token: TOKEN + room: ROOM-ID +``` + +{% configuration %} +name: + description: Setting the optional parameter `name` allows multiple notifiers to be created. The notifier will bind to the service `notify.NOTIFIER_NAME`. + required: false + default: notify + type: string +cloudid: + description: The Stride Cloud ID to use for sending Stride notification. + required: true + type: string +token: + description: The Stride API token to use for sending Stride notifications. + required: true + type: string +room: + description: The default room to post to if no room is explicitly specified when sending the notification. + required: true + type: string +panel: + description: Setting panel will override the default panel type (`None`) for the notification. By default not setting this will post to Stride without using a panel type. Valid options are 'None', 'info', 'note', 'tip', 'warning'. + required: false + type: string +{% endconfiguration %} + +### {% linkable_title Stride service data %} + +The following attributes can be placed `data` for extended functionality. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `room` | yes | (int) Same usage as in configuration.yaml. Overrides any setting set in configuration.yaml. +| `panel` | yes | (str) Same usage as in configuration.yaml. Overrides any setting set in configuration.yaml. + +To use notifications, please see the [getting started with automation page](/getting-started/automation/). diff --git a/source/images/supported_brands/stride.png b/source/images/supported_brands/stride.png new file mode 100644 index 0000000000000000000000000000000000000000..ec9825c808c58e63a594a22cf6d03b21f0ea644c GIT binary patch literal 8776 zcmX9^cRZWl_m3Srwo<$HXsJDl5PQ`sLG2l(oE_l z;f*p-&o&4EU={rDMWk!yNUa&`dQ-*1S@TIz7Z@qfS6t}`@5V-V#06XpvWTkS0M1f&lKNZ zPx4-YQsoHW<|fz6$4NF~=AubrTmjrMQvIBK%rH0zY%M%q0eArjkqU#+c1guJ421-c zc)d!x5{116{X;Ti8H21KyQ$NCe<)m#(5p!rTy4W z>1I%i)Xu1QUyl1k*q8FtV11zO@}tLG^cUPP`QY%-0g$Jk>W+m(^(`nGsILw{6UnYs zM0?UU)d)JOWQHpvdVZ1ID-0EYeR|t_`Vh%La8*wt*7_}R)vHTMPw(=Ac=7ou1GrX4j|c+g($J-9Ox0|9OtLQ)^GFi=fp1@6TRNS^RB`~oOV z^^sg~l`+#})}Ox1fmFIsjQl1)mDxW4ic+cbZR%$gQc}HdVzM}NkGrH{v`%MWC8a3U zsqzr28NI?9V~4D1v@>=TRg5PI{x=_jQhpTV;!nS zx>T5PS}%=;r|Qo0Sx&vg4ZZU|8SWFZ{|lSbCSCCu+7lnW7#;oZ_h8DGV+`RD{`V>k z78_uK)u~i*TFh{_Wt+o20l14Xi}2}!Oygr%p2C|SxA>K)NxOx?uU3a+ zz^_1!dSelVn>ad=9?JgQ_5bD&KHYr}?c@rPj?66MX|iR4uY#$&W8X>)1EgM1O7n~C z#$N>d>HU#mjC6!fAF=otlM=a5@+t8ijw|0H#nQy|UZUXa{OAV}m+bVriwceDDmxw+ z%0{tG60HF-QY=t|WUxt_9w7UU_0?;Ds|>qp^Nsw+uw5lz)#Eqb!S>j;Sk^yZy&-Is zhMd6wCsL=>dM3YO#aPdc@e^5)c3}0;BNC6Y4*oR;UnW5M&WI!_8U-OL%UHWVUYxO$6iv1v@p2IO39t9@FfR;#wB;yJ6?Dkt#1gyKqY0WreHRkuNK*jojrDO=NdEqQ6gXhoc zg5BBC#^ZYjCw5DNqgL5+6q^U3GkdJvX{Q1$e#@G47^(YYpomj5LLnIq?BVirZAUN~w+D zjPtAh+#@dAq;w>me6x|xd901JpuUPD08QO`oK%8M@qbyAZ1p->IR*wh zYi(7E?kv;1y3O0aT$1eN_Q9HNOsG@6BhmRNh@6vxXQbRDp@nzhNK&PRf(i^55{OO zwN_Ys@F!unMPWaAp%D%MrlAmQ0t;-#vc8|qx8ZAMetA7rG9QyIbyuEEl_PWv*Fe2Q zySkBsNT7z5hfFHYw|YnBcC_*ylA zBXVML%9E>mYf&=ZKb(Thh{f}rSI0{#fGHH1#)pQ3Ji(GhH<;+?bHmT_Zb`jvQbx1# zB}=RnRC2+`xBgxF-3q<1gJ2ln`bkSSNJ=sK2HZK8o1CpfsRh`kiO($LnH;F^wZmKl z##<01sc|f5OT`q%PoXlfSPDu@v?q%u2$R~a?)oV4R3y&qkR~84t@*8+p(Spja3ccE z_^D_xel9w}EwfHzHB6u}HYgPfSs*;Fs{hShH(Dkr z7jCc}I{D8R5E@Aq?UUHmqYe(-^qxI?oKu|`;XaF)m)q&myt@I>dlwo>>h$!zdi@Tk zvz=^ETN8n_P_X?HZdoVy1MtsW97RgBr)R1ktuClV?5e1{udt631tnH^0D{ZbdzjRk zh#J24J~&LuvNG|qC5sm((^9lG-Vl}&rNRaA#~r_asdaw!7!z+&$CV32e({Fe{Q!;S z=L8>Wpt^at6eY2~cQ(?~<50~tJW!OKV@O7i>1&BdtB79u%frdjE2)8!wam*ecq|WqVmUiaqt@#2T&%U+@GX$aB^e!n;;fk>ec#y z`-CkOhL1o$IElY8r!ZqkKKlZ>nnt{FB#oR-zI~=vuEe5jO4f~(@+fn-$>6zXb)I1A&b5A!keh%iw64XUO0NHe9I3H&Wf!?Yh!vUro=al!?<1al zWdG$SI{x$nl1hfPoLRd1RZ^rU%O@ME?nLI*&uQzdS$0%8Pb{QN+N|a~8{iHQr}kmL z^l?)p<+4Qm=MU`=?L{8(dC=4ln~uDVk#82By!(QQba-}8qe^!UD9KyIvA z8t{Isa8Jk`+6@Abr;M66Q?e4H6g25!w4-T|+je!p-pG~ht`RGqPyyffQnk&#qKjmf|%)#Ps@y!b3 z^4cLQbGC&nUVmVtsyru?jjiq(H-ALmxKyXlEwF045SEyS)_#q20aJn1BKbsP9%9vITP|G;%Zj=!WL4^6LvjN15Q5 zt-zO7*Jh0%MOR!GD{&>3Gic?Pvtef1cQWWCV{uRJVQ%`d)Q5R`gK@ef+~0?3N{*ht z;Du#2)Np8FoofPKZ>#f!P_)~Ep1Q06>J4#F|H@V^+C6dRfaem}V@WI*p?UGJ0WmH+ zO_|_73tT~9WYwpv)*IP*D6U*8Oi^hqpHu1%IjdTKF378Zs@@$T$FNuzlIf)K?G#a4 z=|$J{P1Ta_NS(Mdo;P%3K6&aD1tY;03!!qT%X?L;zXby2C8WeDdL!$H5^I9i<8W**ss}*40lC^<3%I|QrMF*kk#PmLT&)rRZtRA6Dt!eX`P~2XqK7=az-?yZIfb*Zw z{L2q{B$yk(`R+sS(AoKSOg{%N1_aJ6y?^$l|JXe*9xeBD(1{H?`?VKYH70@un!GV@ zV4+Cd*1M4?arf{F0aoqW`a?WZs?g%joQg0O*c6XS2yYly}$?P|OP~)h(G~uxVFeln?nd4X+e0X2jDeEPY+HPcN@#{ppf&qp+ zo2Hi zVL~zF-wvM1{T?_VX7f!?QQn>x=ay2%vicl(v>=J~Ls}x$F0viBG@VYt>Wva>{E^BP z+2H}p|Mf0Aq+IE}xTa@%Fgud2v_#4#Dq=?ztKB%z%gV0Z=8)zF&&1`=kNY&b&pT?H z;1TTZg3pWImK2@T)^-xDK|+S41D>Q6q;C`EB2YCkIQ9E3boRnx(6(1`P&FJ(qJYA&z*NmO5tU+PkMnCVvuPT+0dya84nUej*Y^#*|w zkjTvXsZAP;4F;(Z;Sso!59~lRZbYr)$w^g-YJ+~~CME|a7}JXHs|b?leM?tFUMbsA|)2VBf}Bn7{`cn~2v6G2Fw7kzoc6h;1h#7n$2 zZGKe;=oSP%okrirc))#fTF1GGU^yxSP+JN!8qBl5$y~E080%E|x-L!b6PcWwioTEXHcGSL=3Dht!Od(oHz@&g40i)p zo)yS!$w{?ZzlrnFRIZ>nU0feDtMgx$CrBIZdS0&|)nM@Bl0zZ01$wjZYpIgy+*o0Y z|EMR{J)^HS&hg-qHA0qXk~sR_w|S8gb&d!Li40t42=qY{SMGOHNoOUEMY&Jafm%y{ z(2c%Ll!YJu@Y*;>^TS^sGY!>QW5YWiUX-5N72NcMw~s_G&x^uCEi~GwVxdk&S*+p= zwaJp=BR;lvS({uzYwzlj&bwDb68_6%Rj@w5vOFPk=;AC&DZ-A0KbP<)YAqVNsBRDz zIRsxsvKVlt!P2p~AKA%)#E=0TuM2u`=kH+D)eI3HV~u;d+EAxR>LIO4+p~}ND`&F{ z)K1m@juL6$IHYwN!T`5#JuOc2CDLGHh`P%s)YDHc{gD=MmX70*?QB2v5{pp*tppR< zlhg>nXUIW|K8Uopv?*1-hC{9wjVwJa--#+BK2;?xt>*cN+vPPH0{LLfu*Gxn3>@GE zIQggT^>8xD^_SORZM`)!DgHI$S;iK}cbjS^=d*j!fj54t*GuuIG`@BwHEYbi7T@Gv zSS(MY-A>5BM(`xk~vjZY*vfSQ=THo}atn z-ZZ(y937B;(UKRv8llV#YeRU-@4+but$dPr+4dksTn$HR zwQIsgau_~oTWUxSk%)gyslB#%l)-b;Yxv>YzimLXJ4Tz(Y|j^~ef9bIGj!%u0;^`` zBFYT) zXw=Dt-C<*JL(&2v8=b7dv!gBOWt)dSFR1!BBw;1bTz=I#=zf=xeV@3DzjurNqV!|0 ze2nmA!|#iL(gVlvPq&*DRdrLJ+OL-(*L^EyVnX@e8_-pYu|KWn>y1^HSlv`d66O@?#e?Y-eYq&tJVu9v1yMVN>!la#8${ zA5zSoQXF@gew^CqrssI(H~@J}%` z!0#!Jlt-`)^Peq=}JQ!>vX*N*RZh*5^*ez2JYtiB-|x{NgtQ% z{XnDPD+Bnao@mojN%PpC(jtL12=!x>8d-az{g#inZdSu1f1BcshMlE=QtNbF5)sk+ z=_fbWzn+(cy)$Nh(D3yw8%m|fMm$Gv6yH&w+Q{0EVR|9?@Orr4S;Z1Mt8Jv-xVolr zvr*kyne+K?`pFWJ;yvUqZwK+aH0_!ODRE3ibp5%k_!yMIS7x?O%DG%%Aap{_Q!WiLWx$0C(TVdNdYaaxjLvTg{TSYQ6wvYDr{Lm?aW~G#0 znu{eKwjI6qd=xOWaF>5CBa*g{ek$|qABf7Rg5ata`L5XTKwGy>;GMg5Qu5Hms|9OK ztn;+&avNi<{9azjHdx-%SY=A%;Z5V_#i7A&y5-JWPYgxV#xf5>bk1 zV~KI^%yN&eK*X<}UtjjORgrL!Txh(Hm8MZMAeaUS345{n%9kP9ACFjL;il80c=YDB2G}%uz&@4%Y;)q%MBb^i}q1AF40!Wyk{<} z6RS*73~N=pe(lfE@a#OT-@=Zc%%_+Q!Pny0Z!^Y z`=)uu5u-rZx%e4RDLG%|kHE_l8m^K}%l=xLuo?sMR7{}x_oerDP=~HUA8&+)n@>wq6ix`N2ko#fd=USP@CY)M2H?%H(~9!qI253(DeG zUi3_Wi$pbr#$TLk##!NmK7NnB+V2^tH^t7$1j~jEq+7M?dJ!1Fu82K5LEhZ;1NhxKlgsd2%=~i{ z(vA5fSa5eLHlo*4JsXbG89&yGf;@nW!99(5q;8(1zsHlJE8V^I0zfWi4_qZ(e6u2BY?B_J95~h} zDKtJUe|NDpH)6e-paP5haHWsQnPwNpRxyMr*?!*@7xUkCfk7K??=Rm))j@{-*v-;K z@KjwWsH=@N(1#FM#rrSXN1O`B)y!Bhzl^4lExXB>RZs-{pB=t`*Z=<=G-}aFJF1+x?5 z%o;8iDa)i}dx5RS(3O8eyxXTyrU6CrO%>9#OndLk|NNthUwSMX_|C>1n&tZL*8W^7%*~s@k|?cHr-hp*e&esU?(1YUNd2PrSG4f6#0X6k(Ejw+-=QWBtI?0 z1$Z>1ni#NpzLrx`oJ;A%1GaC!5a+2}yqd}g7V11X@b1R7k{lvc@x-c|69jV!^ek8j zXwg7+wZBIAD36pR2z0K8nJhq54lPG@H5jX!%sXvC0f6mXBb6k%i?5KR3dE9hQ5yAh9%3T9;cE$dA$l8Midf}#5q zMT&3fqebS7m;p(DmwEIwp+_ich@INFe}&K#;V1xSf@U=Q7#c*k`l<2<+Ga++N^kr^ zXp*DouanS5p62Zw=H-hA0H;H8W#Gw1rDCU?a@Nhq#A)4d_S$ea&qMNUa~e6>wswXX z6Q^5}3e=3^;-=%3f%kacKnnYPTN8b&U#tc*EGsH#4)zPhXl$ek^l&1kUm=76cP*mc>`>lW#D9nk(*0?slJp4BS9mlaMpvyjH%yoP4FAFhL#bg-3RN+ c4{p@I`sh#3IK*ocj)nmAAtu^i!A^1i0}nasAOHXW literal 0 HcmV?d00001 From 9b8feb64b5d90b88436b15b8f666e26ec7cb9771 Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Fri, 16 Mar 2018 12:09:12 +0100 Subject: [PATCH 024/371] Added additional supported devices (#4925) --- source/_components/homekit.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index 4ed321f4bb..f9e8e84b9e 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -157,8 +157,10 @@ The following components are currently supported: | alarm_control_panel | SecuritySystem | All security systems. | | climate | Thermostat | All climate devices. | | cover | WindowCovering | All covers that support `set_cover_position`. | +| light | Light | Support for `on / off`, `brightness` and `rgb_color`. | | sensor | TemperatureSensor | All sensors that have `Celsius` and `Fahrenheit` as their `unit_of_measurement`. | -| switch / remote | Switch | All switches or remotes (represented as switches). | +| sensor | HumiditySensor | All sensors that have `%` as their `unit_of_measurement` | +| switch / remote / input_boolean / script | Switch | All represented as switches. | ## {% linkable_title Error reporting %} From 434f6f25107e0b0de041f304283fba254b87b3e7 Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Fri, 16 Mar 2018 15:50:56 +0100 Subject: [PATCH 025/371] Xiaomi Miio Fan: Undocumented service (fan.set_speed) added (#4928) * Undocumented service (fan.set_speed) added. * :pencil2: Micro change --- source/_components/fan.xiaomi_miio.markdown | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/source/_components/fan.xiaomi_miio.markdown b/source/_components/fan.xiaomi_miio.markdown index 99adf8ff4e..20cc457350 100644 --- a/source/_components/fan.xiaomi_miio.markdown +++ b/source/_components/fan.xiaomi_miio.markdown @@ -71,6 +71,15 @@ name: ## {% linkable_title Platform Services %} +### {% linkable_title Service `fan.set_speed` %} + +Set the fan speed/operation mode. + +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------------------| +| `entity_id` | yes | Only act on a specific air purifier. Else targets all. | +| `speed` | no | Fan speed. Valid values are 'Auto', 'Silent', 'Favorite' and 'Idle' | + ### {% linkable_title Service `fan.xiaomi_miio_set_buzzer_on` %} Turn the buzzer on. From 041553ed86bd74a9628db71fa77ec2f099064381 Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Fri, 16 Mar 2018 21:47:45 +0100 Subject: [PATCH 026/371] Xiaomi Power Strip services added. (#4931) --- .../_components/switch.xiaomi_miio.markdown | 70 +++++++++++++++++-- 1 file changed, 66 insertions(+), 4 deletions(-) diff --git a/source/_components/switch.xiaomi_miio.markdown b/source/_components/switch.xiaomi_miio.markdown index 7212a74287..21cd7d4eba 100644 --- a/source/_components/switch.xiaomi_miio.markdown +++ b/source/_components/switch.xiaomi_miio.markdown @@ -13,12 +13,38 @@ ha_version: 0.56 ha_iot_class: "Local Polling" --- -The `xiaomi_miio` switch platform allows you to control the state of your Xiaomi Smart WiFi Socket aka Plug or Xiaomi Smart Power Strip. - -Currently, the supported features are `on`, `off`. If the device provides the current load, it will be reported. +The `xiaomi_miio` switch platform allows you to control the state of your Xiaomi Smart WiFi Socket aka Plug, Xiaomi Smart Power Strip and Xiaomi Chuangmi Plug V1. Please follow the instructions on [Retrieving the Access Token](/components/vacuum.xiaomi_miio/#retrieving-the-access-token) to get the API token to use in the `configuration.yaml` file. +## Features + +### Xiaomi Smart WiFi Socket + +* Power (on, off) +* Attributes + - Temperature + +### Xiaomi Chuangmi Plug V1 + +* Power (on, off) +* USB (on, off) +* Attributes + - Temperature + +### Xiaomi Smart Power Strip + +* Power (on, off) +* Wifi LED (on, off) +* Power Price (0...999) +* Power Mode (green, normal) (Power Strip V1 only) +* Attributes + - Temperature + - Current + - Load power + - Wifi LED + - Mode (Power Strip V1 only) + To add a plug to your installation, add the following to your `configuration.yaml` file: ```yaml @@ -35,7 +61,7 @@ Configuration variables: - **host** (*Required*): The IP of your miio device. - **token** (*Required*): The API token of your miio device. - **name** (*Optional*): The name of your miio device. -- **model** (*Optional*): The model of your miio device. Valid values are chuangmi.plug.v1`, `qmi.powerstrip.v1`, `zimi.powerstrip.v2`, `chuangmi.plug.m1` and `chuangmi.plug.v2`. This setting can be used to bypass the device model detection and is recommended if your device isn't always available. +- **model** (*Optional*): The model of your miio device. Valid values are `chuangmi.plug.v1`, `qmi.powerstrip.v1`, `zimi.powerstrip.v2`, `chuangmi.plug.m1` and `chuangmi.plug.v2`. This setting can be used to bypass the device model detection and is recommended if your device isn't always available. {% configuration %} host: @@ -56,3 +82,39 @@ model: required: false type: string {% endconfiguration %} + +## {% linkable_title Platform Services %} + +### {% linkable_title Service `switch.xiaomi_miio_set_wifi_led_on` %} (Power Strip only) + +Turn the wifi led on. + +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific air purifier. Else targets all. | + +### {% linkable_title Service `switch.xiaomi_miio_set_wifi_led_off` %} (Power Strip only) + +Turn the wifi led off. + +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific air purifier. Else targets all. | + +### {% linkable_title Service `switch.xiaomi_miio_set_power_price` %} (Power Strip) + +Set the power price. + +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------| +| `entity_id` | yes | Only act on a specific air purifier. Else targets all. | +| `price` | no | Power price, between 0 and 999. | + +### {% linkable_title Service `switch.xiaomi_miio_set_power_mode` %} (Power Strip V1 only) + +Set the power mode. + +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------------| +| `entity_id` | yes | Only act on a specific xiaomi miio entity. Else targets all. | +| `mode` | no | Power mode, valid values are 'normal' and 'green' | From bc95183753df95030496c9129c3029601bc11eca Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Fri, 16 Mar 2018 22:14:40 +0100 Subject: [PATCH 027/371] Xiaomi MiIO Sensor: Xiaomi Air Quality Monitor (PM2.5) integration (#4780) * Xiaomi MiIO Sensor: Xiaomi Air Quality Monitor (PM2.5) integration. * Turn on/off service removed. * :arrow_up: Updates ha_release --- .../_components/sensor.xiaomi_miio.markdown | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 source/_components/sensor.xiaomi_miio.markdown diff --git a/source/_components/sensor.xiaomi_miio.markdown b/source/_components/sensor.xiaomi_miio.markdown new file mode 100644 index 0000000000..3e30131fff --- /dev/null +++ b/source/_components/sensor.xiaomi_miio.markdown @@ -0,0 +1,55 @@ +--- +layout: page +title: "Xiaomi Air Quality Monitor" +description: "Instructions how to integrate your Xiaomi Mi Air Quality Monitor within Home Assistant." +date: 2018-02-28 08:35 +sidebar: true +comments: false +sharing: true +footer: true +logo: xiaomi.png +ha_category: Sensor +ha_version: 0.66 +ha_iot_class: "Local Polling" +--- + +The `xiaomi_miio` sensor platform is observing your Xiaomi Mi Air Quality Monitor (PM2.5) and reporting the air quality index. + +Currently, the supported features are: + +* Air Quality Index (AQI) +* Attributes + - power + - charging + - battery + - time_stat + +Please follow the instructions on [Retrieving the Access Token](/components/vacuum.xiaomi_miio/#retrieving-the-access-token) to get the API token. + +To add a Xiaomi Mi Air Quality Monitor to your installation, add the following to your `configuration.yaml` file: + +```yaml +sensor: +# Example configuration.yaml entry +sensor: + - platform: xiaomi_miio + name: Xiaomi Air Quality Monitor + host: 192.168.130.73 + token: YOUR_TOKEN +``` + +{% configuration %} +host: + description: The IP address of your miio device. + required: true + type: string +token: + description: The API token of your miio device. + required: true + type: string +name: + description: The name of your miio device. + required: false + type: string + default: Xiaomi Miio Sensor +{% endconfiguration %} From cdbdfea05d061e3ac53ecd664224b7371db8f782 Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Sat, 17 Mar 2018 20:30:05 +0100 Subject: [PATCH 028/371] Xiaomi MiIO light: Philips Eyecare Smart Lamp 2 integration (#4825) * Xiaomi Philips Eyecare Smart Lamp 2 features added. * New device added. * Marker removed --- source/_components/light.xiaomi_miio.markdown | 99 ++++++++++++++++++- 1 file changed, 96 insertions(+), 3 deletions(-) diff --git a/source/_components/light.xiaomi_miio.markdown b/source/_components/light.xiaomi_miio.markdown index 3af241a04e..d73600c868 100644 --- a/source/_components/light.xiaomi_miio.markdown +++ b/source/_components/light.xiaomi_miio.markdown @@ -13,9 +13,54 @@ ha_version: 0.53 ha_iot_class: "Local Polling" --- -The `xiaomi_miio` platform allows you to control the state of your Xiaomi Philips LED Ball Lamp, Xiaomi Philips LED Ceiling Lamp and Xiaomi Philips Eyecare Lamp 2. +The `xiaomi_miio` platform allows you to control the state of your Xiaomi Philips LED Ball Lamp, Xiaomi Philips Zhirui LED Bulb E14 Candle Lamp, Xiaomi Philips LED Ceiling Lamp and Xiaomi Philips Eyecare Lamp 2. -Currently, the supported features are `on`, `off`, `set_cct` (colortemp) , `set_bright` (brightness). +## Features + +### Philips LED Ball Lamp and Philips Zhirui LED Candle Lamp + +* Power (on, off) +* Brightness +* Color temperature (175...333 mireds) +* Scene (1, 2, 3, 4) +* Delayed turn off (Resolution in seconds) +* Attributes + - model + - scene + - delayed_turn_off + +### Philips LED Ceiling Lamp + +* Power (on, off) +* Brightness +* Color temperature (175...370 mireds) +* Scene (1, 2, 3, 4) +* Night light mode (on, off) +* Delayed turn off (Resolution in seconds) +* Attributes + - model + - scene + - delayed_turn_off + - night_light_mode + - automatic_color_temperature + +### Philips Eyecare Smart Lamp 2 + +* Eyecare light (on, off) +* Ambient light (on, off) +* Brightness (of each light) +* Scene (1, 2, 3, 4) +* Night light mode (on, off) +* Delayed turn off (Resolution in seconds) +* Eye fatigue reminder / notification (on, off) +* Eyecare mode (on, off) +* Attributes + - model + - scene + - delayed_turn_off + - night_light_mode + - reminder + - eyecare_mode Please follow the instructions on [Retrieving the Access Token](/components/vacuum.xiaomi_miio/#retrieving-the-access-token) to get the API token to use in the `configuration.yaml` file. @@ -35,7 +80,7 @@ Configuration variables: - **host** (*Required*): The IP of your light. - **token** (*Required*): The API token of your light. - **name** (*Optional*): The name of your light. -- **model** (*Optional*): The model of your light. Valid values are `philips.light.bulb`, `philips.light.sread1`, `philips.light.ceiling` and `philips.light.zyceiling`. This setting can be used to bypass the device model detection and is recommended if your device isn't always available. +- **model** (*Optional*): The model of your light. Valid values are `philips.light.bulb`, `philips.light.candle2`, `philips.light.sread1`, `philips.light.ceiling` and `philips.light.zyceiling`. This setting can be used to bypass the device model detection and is recommended if your device isn't always available. {% configuration %} host: @@ -76,3 +121,51 @@ Delayed turn off. |---------------------------|----------|-------------------------------------------------------| | `entity_id` | yes | Only act on a specific light. Else targets all. | | `time_period` | no | Time period for the delayed turn off. | + +### {% linkable_title Service `light.xiaomi_miio_reminder_on` %} (Eyecare Smart Lamp 2 only) + +Enable the eye fatigue reminder/notification. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-------------------------------------------------------| +| `entity_id` | yes | Only act on a specific light. Else targets all. | + +### {% linkable_title Service `light.xiaomi_miio_reminder_off` %} (Eyecare Smart Lamp 2 only) + +Disable the eye fatigue reminder/notification. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-------------------------------------------------------| +| `entity_id` | yes | Only act on a specific light. Else targets all. | + +### {% linkable_title Service `light.xiaomi_miio_night_light_mode_on` %} (Eyecare Smart Lamp 2 only) + +Turn the smart night light mode on. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-------------------------------------------------------| +| `entity_id` | yes | Only act on a specific light. Else targets all. | + +### {% linkable_title Service `light.xiaomi_miio_night_light_mode_off` %} (Eyecare Smart Lamp 2 only) + +Turn the smart night light mode off. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-------------------------------------------------------| +| `entity_id` | yes | Only act on a specific light. Else targets all. | + +### {% linkable_title Service `light.xiaomi_miio_eyecare_mode_on` %} (Eyecare Smart Lamp 2 only) + +Turn the eyecare mode on. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-------------------------------------------------------| +| `entity_id` | yes | Only act on a specific light. Else targets all. | + +### {% linkable_title Service `light.xiaomi_miio_eyecare_mode_off` %} (Eyecare Smart Lamp 2 only) + +Turn the eyecare mode off. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-------------------------------------------------------| +| `entity_id` | yes | Only act on a specific light. Else targets all. | From 2a440b16b4a0f9543bdadbaaca94b5cd252b680b Mon Sep 17 00:00:00 2001 From: Igor Bernstein Date: Sun, 18 Mar 2018 12:18:19 -0400 Subject: [PATCH 029/371] add doc for zha fans (#4626) * add doc for zha fans * add ha_release --- source/_components/fan.zha.markdown | 16 ++++++++++++++++ source/_components/zha.markdown | 1 + 2 files changed, 17 insertions(+) create mode 100644 source/_components/fan.zha.markdown diff --git a/source/_components/fan.zha.markdown b/source/_components/fan.zha.markdown new file mode 100644 index 0000000000..536d9c78bd --- /dev/null +++ b/source/_components/fan.zha.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "ZigBee Home Automation Fan" +description: "Instructions how to setup ZigBee Home Automation fans within Home Assistant." +date: 2018-02-10 00:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: zigbee.png +ha_category: Fan +ha_iot_class: "Local Polling" +ha_release: 0.66 +--- + +To get your ZigBee fans working with Home Assistant, follow the instructions for the general [ZigBee Home Automation component](/components/zha/). diff --git a/source/_components/zha.markdown b/source/_components/zha.markdown index 2a6b6355f2..11667fc8d7 100644 --- a/source/_components/zha.markdown +++ b/source/_components/zha.markdown @@ -22,6 +22,7 @@ There is currently support for the following device types within Home Assistant: - [Sensor](../sensor.zha) (e.g. temperature sensors) - [Light](../light.zha) - [Switch](../switch.zha) +- [Fan](../fan.zha) Known working ZigBee radios: From d44266b2bb9c8cfb4fdd1532c9a956b9191a7761 Mon Sep 17 00:00:00 2001 From: maxclaey Date: Sun, 18 Mar 2018 18:30:29 +0100 Subject: [PATCH 030/371] Documentation for IFTTT alarm control panel (#4878) * Documentation for IFTTT alarm control panel * Update alarm_control_panel.ifttt.markdown * Call service instead of direct state change * Update alarm_control_panel.ifttt.markdown * HAS -> HASS * Update alarm_control_panel.ifttt.markdown * :ambulance: Adds ha_release tag * :pencil2: Minor changes --- .../alarm_control_panel.ifttt.markdown | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 source/_components/alarm_control_panel.ifttt.markdown diff --git a/source/_components/alarm_control_panel.ifttt.markdown b/source/_components/alarm_control_panel.ifttt.markdown new file mode 100644 index 0000000000..13f67bafc5 --- /dev/null +++ b/source/_components/alarm_control_panel.ifttt.markdown @@ -0,0 +1,64 @@ +--- +layout: page +title: "IFTTT Alarm Control Panel" +description: "Instructions on how to integrate IFTTT-controlled security systems into Home Assistant." +date: 2018-03-10 21:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: ifttt.png +ha_category: Alarm +ha_release: 0.66 +--- + +The `ifttt` platform allows you to integrate security systems that have no open API but can be controlled through [IFTTT](https://ifttt.com/discover). + +This platform depends on the [IFTTT](https://home-assistant.io/components/ifttt/) Home Assistant component. See the component's documentation to set it up. + +

+It is important to note that this platform fully relies on IFTTT to receive updates when the security system's state changes. Therefore, this platform shows an assumed state. +

+ +To enable this, setup the required IFTTT applets as listed below and add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +ifttt: + key: YOUR_WEBHOOK_KEY + +alarm_control_panel: + - platform: ifttt + name: YOUR_ALARM_NAME + code: YOUR_ALARM_CODE +``` + +

+It is strongly discouraged to use this platform when you don't use encryption; otherwise, your API password will be send unprotected through the IFTTT Webhooks. It is adviced to [setup encryption using Let's Encrypt](https://home-assistant.io/blog/2017/09/27/effortless-encryption-with-lets-encrypt-and-duckdns/). +

+ +{% linkable_title Required IFTTT applets %} + +This platform supports the services `alarm_disarm`, `alarm_arm_away`, `alarm_arm_home` and `alarm_arm_night`. For each of these services, an IFTTT webhook will be triggered. + +For this system to operate correctly, the following IFTTT applets have to be setup. Obviously, if your alarm device does not support some states, no applets have to be provided for those. +* **IF** Webhook event `alarm_disarm` is called, **THEN** disarm the alarm system. +* **IF** Webhook event `alarm_arm_home` is called, **THEN** set the alarm system to armed home. +* **IF** Webhook event `alarm_arm_away` is called, **THEN** set the alarm system to armed away. +* **IF** Webhook event `alarm_arm_night` is called, **THEN** set the alarm system to armed night. +* **IF** the alarm system was disarmed, **THEN** perform a Webhook `POST` web request to url `https://HASS_URL/api/services/alarm_control_panel/ifttt_push_alarm_state?api_password=API_PASSWORD` with content type `application/json` and body `{"entity_id": "alarm_control_panel.DEVICE_NAME", "state": "disarmed"}`. +* **IF** the alarm system state changed to armed home, **THEN** perform a Webhook `POST` web request to url `https://HASS_URL/api/services/alarm_control_panel/ifttt_push_alarm_state?api_password=API_PASSWORD` with content type `application/json` and body `{"entity_id": "alarm_control_panel.DEVICE_NAME", "state": "armed_home"}`. +* **IF** the alarm system state changed to armed away, **THEN** perform a Webhook `POST` web request to url `https://HASS_URL/api/services/alarm_control_panel/ifttt_push_alarm_state?api_password=API_PASSWORD` with content type `application/json` and body `{"entity_id": "alarm_control_panel.DEVICE_NAME", "state": "armed_away"}`. +* **IF** the alarm system state changed to armed night, **THEN** perform a Webhook `POST` web request to url `https://HASS_URL/api/services/alarm_control_panel/ifttt_push_alarm_state?api_password=API_PASSWORD` with content type `application/json` and body `{"entity_id": "alarm_control_panel.DEVICE_NAME", "state": "armed_night"}`. + + +{% configuration %} + name: + description: The name of your Home Assistant alarm control panel. + required: false + type: string + code: + description: The code for the alarm control panel. + required: false + type: string +{% endconfiguration %} From 084d69cd98cc312c364833c361a90eb251474a84 Mon Sep 17 00:00:00 2001 From: Mattias Welponer Date: Sun, 18 Mar 2018 18:42:00 +0100 Subject: [PATCH 031/371] Add initial support fo HomematicIP components (#4850) * Add initial support fo HomematicIP components * :pencil2: Spelling updates --- source/_components/homematicip.markdown | 43 +++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 source/_components/homematicip.markdown diff --git a/source/_components/homematicip.markdown b/source/_components/homematicip.markdown new file mode 100644 index 0000000000..c6e374ee09 --- /dev/null +++ b/source/_components/homematicip.markdown @@ -0,0 +1,43 @@ +--- +layout: page +title: "HomematicIP" +description: "Instructions for integrating HomematicIP into Home Assistant." +date: 2018-03-06 20:40 +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. +For for communication [homematicip-rest-api](https://github.com/coreGreenberet/homematicip-rest-api) is used. + +To set up the component: + +- **generate the authentication token**: +```yaml +generate_auth_token.py +``` + +- ** add the information to your `configuration.yaml` file: + +```yaml +homematicip: + - name: NAME + accesspoint: IDENTIFIER + authtoken: AUTHTOKEN +``` + +Configuration variables (global): + +- **name** (*Required*): Name to identify your access point, this will be + used to prefix your device names. +- **accesspoint** (*Required*): This is the access point id (SGTIN) +- **authtoken** (*Required*): Authentification token generated with +`generate_auth_token.py`. + From df4739885a98911b3ff7d2bb6fe6a7c26c5a8219 Mon Sep 17 00:00:00 2001 From: Diogo Gomes Date: Sun, 18 Mar 2018 17:54:38 +0000 Subject: [PATCH 032/371] Added Time SMA (#4926) * Added Time SMA * bump version * update * :pencil2: Minor tweaks * :ambulance: Fixes/Restores ha_release tag * :ambulance: Corrected type --- source/_components/sensor.filter.markdown | 31 +++++++++++++++++------ 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/source/_components/sensor.filter.markdown b/source/_components/sensor.filter.markdown index 07f5b33e3a..5ce3132af1 100644 --- a/source/_components/sensor.filter.markdown +++ b/source/_components/sensor.filter.markdown @@ -15,7 +15,7 @@ logo: home-assistant.png The `filter` platform enables sensors that process the states of other entities. -`filter` applies a signal processing algorithm to a sensor, previous and current states, and generates a `new state` given the chosen algorithm. +`filter` applies a signal processing algorithm to a sensor, previous and current states, and generates a `new state` given the chosen algorithm. The next image depicts an original sensor and the filter sensor of that same sensor using the [History Graph]({{site_roor}}/components/history_graph/) component.

@@ -37,6 +37,9 @@ sensor: - filter: lowpass time_constant: 10 precision: 2 + - filter: time_simple_moving_average + window_size: 00:05 + precision: 2 ``` Filters can be chained and are applied according to the order present in the configuration file. @@ -53,17 +56,17 @@ name: filters: description: Filters to be used. required: true - type: map + type: list keys: filter: - description: Algorithm to be used to filter data. Available filters are `lowpass`, `outlier` and `throttle`. + description: Algorithm to be used to filter data. Available filters are `lowpass`, `outlier`, `throttle` and `time_simple_moving_average`. required: true type: string window_size: - description: Size of the window of previous states. + description: Size of the window of previous states. Time based filters such as `time_simple_moving_average` will require a time period (size in time), while other filters such as `outlier` will require an integer (size in number of states) required: false - type: int - default: 5 + type: [int, time] + default: 1 precision: description: See [_lowpass_](#low-pass) filter. Defines the precision of the filtered state, through the argument of round(). required: false @@ -78,14 +81,19 @@ filters: description: See [_outlier_](#outlier) filter. Band radius from median of previous states. required: false type: float - default: 2.0 + default: 2.0 + type: + description: See [_time_simple_moving_average_](#time-simple-moving-average) filter. Defines the type of Simple Moving Average. + required: false + type: string + default: last {% endconfiguration %} ## {% linkable_title Filters %} ### {% linkable_title Low-pass %} -The Low-pass filter (`lowpass`) is one of signal processing most common filters, as it smooths data by shortcuting peaks and valleys. +The Low-pass filter (`lowpass`) is one of signal processing most common filters, as it smooths data by shortcutting peaks and valleys. The included Low-pass filter is very basic and is based on a moving average, in which the previous data point is weighted with the new data point. @@ -120,3 +128,10 @@ To adjust the rate you need to set the window_size. To throttle a sensor down to This filter is relevant when you have a sensor which produces states at a very high-rate, which you might want to throttle down for storing or visualization purposes. +### {% linkable_title Time Simple Moving Average %} + +The Time SMA filter (`time_simple_moving_average`) is based on the paper [Algorithms for Unevenly Spaced Time Series: Moving Averages and Other Rolling Operators](http://www.eckner.com/papers/Algorithms%20for%20Unevenly%20Spaced%20Time%20Series.pdf) by Andreas Eckner. + +The paper defines three types/versions of the Simple Moving Average (SMA): *last*, *next* and *linear*. Currently only *last* is implemented. + +Theta, as described in the paper, is the `window_size` parameter, and can be expressed using time notation (e.g., 00:05 for a five minutes time window). From 40602962f4f5aab59c5c6b6c44f33b2d2b0d071b Mon Sep 17 00:00:00 2001 From: Adam Mills Date: Mon, 19 Mar 2018 08:14:44 -0400 Subject: [PATCH 033/371] New hue/sat field on light.turn_on schema (#4881) * New hue/sat field on light.turn_on schema * :pencil2: Small language corrections --- source/_components/light.markdown | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/source/_components/light.markdown b/source/_components/light.markdown index 4370674890..39ace8da60 100644 --- a/source/_components/light.markdown +++ b/source/_components/light.markdown @@ -19,26 +19,27 @@ The light component supports multiple entries in configuration.yaml Turns one light on or multiple lights on using [groups]({{site_root}}/components/group/). -Most lights do not support all attributes. You can check the platform documentation of your particular light for hints but in general you will have to try things out and see what works. +Most lights do not support all attributes. You can check the platform documentation of your particular light for hints, but in general, you will have to try things out and see what works. | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | | `entity_id` | no | String or list of strings that point at `entity_id`s of lights. Else targets all. | `transition` | yes | Number that represents the time (in seconds) the light should take to transition to the new state. -| `profile` | yes | String with the name of one of the [built-in profiles](https://github.com/home-assistant/home-assistant/blob/master/homeassistant/components/light/light_profiles.csv) (relax, energize, concentrate, reading) or one of the custom profiles defined in `light_profiles.csv` in the current working directory. Light profiles define a xy color and a brightness. If a profile is given and a brightness then the profile brightness will be overwritten. -| `xy_color` | yes | A list containing two floats representing the xy color you want the light to be. Two comma separated floats that represent the color in XY. -| `rgb_color` | yes | A list containing three integers representing the rgb color you want the light to be. Three comma separated integers that represent the color in RGB. You can find a great chart here: [Hue Color Chart](http://www.developers.meethue.com/documentation/hue-xy-values) +| `profile` | yes | String with the name of one of the [built-in profiles](https://github.com/home-assistant/home-assistant/blob/master/homeassistant/components/light/light_profiles.csv) (relax, energize, concentrate, reading) or one of the custom profiles defined in `light_profiles.csv` in the current working directory. Light profiles define an xy color and a brightness. If a profile is given and a brightness then the profile brightness will be overwritten. +| `hs_color` | yes | A list containing two floats representing the hue and saturation of the color you want the light to be. Hue is scaled 0-360, and saturation is scaled 0-100. +| `xy_color` | yes | A list containing two floats representing the xy color you want the light to be. Two comma-separated floats that represent the color in XY. You can find a great chart here: [Hue Color Chart](https://developers.meethue.com/documentation/core-concepts#color_gets_more_complicated). +| `rgb_color` | yes | A list containing three integers between 0 and 255 representing the RGB color you want the light to be. Three comma-separated integers that represent the color in RGB. Note that the specified RGB value will not change the light brightness, only the color. | `white_value` | yes | Integer between 0 and 255 for how bright a dedicated white LED should be. | `color_temp` | yes | An integer in mireds representing the color temperature you want the light to be. | `kelvin` | yes | Alternatively, you can specify the color temperature in Kelvin. -| `color_name` | yes | A human readable string of a color name, such as `blue` or `goldenrod`. All [CSS3 color names](https://www.w3.org/TR/2010/PR-css3-color-20101028/#svg-color) are supported. +| `color_name` | yes | A human-readable string of a color name, such as `blue` or `goldenrod`. All [CSS3 color names](https://www.w3.org/TR/2010/PR-css3-color-20101028/#svg-color) are supported. | `brightness` | yes | Integer between 0 and 255 for how bright the color should be. | `brightness_pct`| yes | Alternatively, you can specify brightness in percent (a number between 0 and 100). | `flash` | yes | Tell light to flash, can be either value `short` or `long`. | `effect`| yes | Applies an effect such as `colorloop` or `random`.

-In order to apply attributes to an entity you will need to add `data:` to the configuration. See example below +In order to apply attributes to an entity, you will need to add `data:` to the configuration. See example below

```yaml From 13ac22cb087c230fd5a449ed54cf3bfb2a32372e Mon Sep 17 00:00:00 2001 From: nielstron Date: Mon, 19 Mar 2018 13:25:51 +0100 Subject: [PATCH 034/371] Syncthru Printer description (#4707) * Added syncthru platform description * Spelling * Cleaned up the code * Clarified configuration entry * Updated version, removed logo * :art: Added existing logo * :pencil2: Small fixes * :arrow_up: Sets ha_release * Add description for every single key * :ambulance: Removed duplicate endconfiguration tag --- source/_components/sensor.syncthru.markdown | 89 +++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 source/_components/sensor.syncthru.markdown diff --git a/source/_components/sensor.syncthru.markdown b/source/_components/sensor.syncthru.markdown new file mode 100644 index 0000000000..19b2e5d139 --- /dev/null +++ b/source/_components/sensor.syncthru.markdown @@ -0,0 +1,89 @@ +--- +layout: page +title: "Samsung SyncThru Printer" +description: "Instructions on how to integrate a Samsung printer providing SyncThru within Home Assistant." +date: 2018-02-19 23:33 +sidebar: true +comments: false +sharing: true +footer: true +logo: samsung.png +ha_category: Sensor +ha_iot_class: "Local Polling" +ha_release: 0.66 +--- + +The Samsung SyncThru Printer platform allows you to read current data from your local Samsung printer. + +It usually provides information about the device's state, the left amount of ink or toner and the state of paper trays. +The platform automatically monitors every supported part. + +If you wish not to include certain monitored values specify the values that you would like to see in the front-end via the `monitored_conditions` setting. + +```yaml +# Example configuration.yaml entry +sensor: + - platform: syncthru + resource: http://my-printer.address + name: My Awesome Printer + monitored_conditions: + - toner_black + - output_tray_0 +``` + +{% configuration %} + resource: + description: The address for connecting to the printer. Equal to the SyncThru Webservice address. + required: true + default: false + type: url + name: + description: A user specified name for the printer. Defaults to "Samsung Printer" and the friendly name will be the name of the printer model. + required: false + default: Samsung Printer + type: string + monitored_conditions: + description: Conditions to display in the frontend. + required: false + default: all values + type: list + keys: + toner_black: + description: Black toner fill level + toner_cyan: + description: Cyan toner fill level + toner_magenta: + description: Magenta toner fill level + toner_yellow: + description: Yellow toner fill level + drum_black: + description: Black drum state + drum_cyan: + description: Cyan drum state + drum_magenta: + description: Magenta drum state + drum_yellow: + description: Yellow drum state + tray_1: + description: First paper input tray state + tray_2: + description: Second paper input tray state + tray_3: + description: Third paper input tray state + tray_4: + description: Fourth paper input tray state + tray_5: + description: Fifth paper input tray state + output_tray_0: + description: First paper output tray state + output_tray_1: + description: Second paper output tray state + output_tray_2: + description: Third paper output tray state + output_tray_3: + description: Fourth paper output tray state + output_tray_4: + description: Fifth paper output tray state + output_tray_5: + description: Sixth paper output tray state +{% endconfiguration %} From c5f2f5770f52e34cdfddecf00ee0ecfd402ab3fc Mon Sep 17 00:00:00 2001 From: Qxlkdr <33372537+Qxlkdr@users.noreply.github.com> Date: Mon, 19 Mar 2018 22:08:38 +0100 Subject: [PATCH 035/371] Add Trafikverket WeatherStation documentation (#4562) * Create sensor.trafikverket_weatherstation.markdown.markdown * Add trafikverket.png trafikverket.png used for trafikverket_weatherstation sensor platform. * api_key Updated from api to api_key due to CONF_API_KEY. * Removed text Removed text which I used on GitHub for the custom component. Now needed to have for the official release. * Example picture Added an example picture to better understand how to get the weather station. * Added example picture Added an example picture to better understand how to get the weather station. What the user needs to copy and add to the YAML file. * Added usage information Added examples of the usage (why needing the data). * linkable_title Changed from normal titles to linkable_title in order to follow the documentation standards. * Updated based on feedback Done - Rewrote "Usage" into "Potential use cases" - Linked to Trafikverket homepage - Description instead of static links * Configuration variables Updated to use "{% configuration %}" instead of "Configuration variables" as plain text. * HA release 0.64.0 Updated ha_release to 0.64.0 instead. * HA release 0.65.0 Updated ha_release to 0.65.0 since it wasn't merged in 0.64.0 release. * :pencil2: Tiny improvements * ha_release and note Updated ha_release to 0.66.0 and removed a note about using secrets.yaml for all your API keys, usernames and passwords. --- ...ensor.trafikverket_weatherstation.markdown | 86 ++++++++++++++++++ ...t_trafikverket_weather_station_example.png | Bin 0 -> 159671 bytes .../images/supported_brands/trafikverket.png | Bin 0 -> 30431 bytes 3 files changed, 86 insertions(+) create mode 100644 source/_components/sensor.trafikverket_weatherstation.markdown create mode 100644 source/images/screenshots/get_trafikverket_weather_station_example.png create mode 100644 source/images/supported_brands/trafikverket.png diff --git a/source/_components/sensor.trafikverket_weatherstation.markdown b/source/_components/sensor.trafikverket_weatherstation.markdown new file mode 100644 index 0000000000..76885964f3 --- /dev/null +++ b/source/_components/sensor.trafikverket_weatherstation.markdown @@ -0,0 +1,86 @@ +--- +layout: page +title: "Trafikverket WeatherStation" +description: "Instructions how to integrate Trafikverket WeatherStation within Home Assistant." +date: 2018-02-01 12:06 +sidebar: true +comments: false +sharing: true +footer: true +logo: trafikverket.png +ha_category: Sensor +ha_release: 0.66.0 +--- + +Showing weather information for air and road temperature provided by [Trafikverket](https://www.trafikverket.se/) in Sweden. + +Potential use cases: +- Get weather data in general +- You live near a weather station and want to know the current temperature at home +- Setup automations for your car heating system. If the road is frozen along the way to work, you might want the car heating system to start earlier. + +##### {% linkable_title Configuration %} + +To enable this sensor, add the following lines to your `configuration.yaml`. + +```yaml +sensor: + - platform: trafikverket_weatherstations + name: Trafikverket Road WeatherStation Kungälv + api_key: eXXcbXXXacXXXXc39XX3aXXX4aXX46XX + station: Kungälv + type: road +``` + +{% configuration %} +name: + description: Unique name of the device in the frontend. + required: true + type: string +api_key: + description: API key from Trafikverket. + required: true + type: string +station: + description: Name of the weather station. + required: true + type: string +type: + description: Defines which temperature you want (`air` or `road`). + required: true + type: string +scan_interval: + description: How frequently to query for new data (in seconds). + required: false + type: int + default: 300 +{% endconfiguration %} + +##### {% linkable_title Obtaining API key %} + +Please click [here](https://api.trafikinfo.trafikverket.se/) and register to obtain the API key. + +##### {% linkable_title Weather stations %} + +Click [here](https://www.trafikverket.se/trafikinformation/vag/?TrafficType=personalTraffic&map=1/606442.17/6886316.22/&Layers=RoadWeather%2b) to get a map of valid weather stations. Once a station is found, copy the name according to the below picture and paste it in your `configuration.yaml` file as the `station` variable. + +

+ +

+ +##### {% linkable_title Examples %} + +```yaml +sensor: + - platform: trafikverket_weatherstations + name: Trafikverket Road WeatherStation Kungälv + api_key: eXXcbXXXacXXXXc39XX3aXXX4aXX46XX + station: Kungälv + type: road + - platform: trafikverket_weatherstations + name: Trafikverket Air WeatherStation Lanna + api_key: eXXcbXXXacXXXXc39XX3aXXX4aXX46XX + station: Lanna + type: air + scan_interval: 600 +``` diff --git a/source/images/screenshots/get_trafikverket_weather_station_example.png b/source/images/screenshots/get_trafikverket_weather_station_example.png new file mode 100644 index 0000000000000000000000000000000000000000..fd0d7535fe13afd5f1286efaf4d6c2bab31d1d71 GIT binary patch literal 159671 zcmV+9KpVe_P)00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf|D{PpK~#8N?41XA z9mUm#k9zOTvL(6qZey^)#x}iUis_v|3Q0(V{3M}-kPsk&gboS4V~S0$25e(v8~5HV zxk<8m@A~&W_l~r>zLKtFxsmJi6G9=M`);f5;y}5fODLF}EqoUouF7Q07R;`i= zM~&3$vg!ss;+NK|ucRkNN<(#pG`{_3_4iNhFF$^JjXeG6Ls}n4GIkc%%GzDUGOkyw zL|VTa&mI>Zs9~S2%~OAKeK5c~F?h&`HtUt&tFW{};-bPkR5rihF!^Tgd|9$|sr2sE zQ~l071i_r7Nno2#k2GSFUch%GrejC@VmNgr<$$96V-D)1hd-nMk<+^LG()hi4 z_162gcTZs6Pu|5oDb4RL-*#nXxpeQI-c(=a+w7MRyiZ)fx8@6Y#;-OMXgVNTXRa}FL&K8ms~haMvojWDb{^9eej$-HfxTYGNQMf^rPR(KmYZZ z+;-co^6sqn-KnhlEi9BPF1|n>efl|>I%SGP$0y0o?OXJnnt1d`dF8G5<<8r0m(0ve zS+;Dc#Kpx)e0+jTo^-6-dG|fiGb2OVeHvaC96wfAc$8L#-QNKJ%pI9c73Gb%K~+VO zk}L6ZE8L!~U|?!Xa`c8xTee6{Y+TdJ?v~iEb$Y5$lAVDGE!6aA#T76 zIDGhU{U8^7ze0%tB7@A$2M}U4T#zohkzW6D`utkauQ%qy*h( zuoF?x>~)9c;U3E z`OIl;lQ%ESvK6b{SE8*vl|v=)^6;{nmnvs>mXath0YKty3y^q__2RY#Ubgm7Sy8G# zmK_O+Y2qIcu4UMq-%{%4MKUg`cCYk_X^^P{<6B4-kq-e=UXiIr84Qgm0;VeiCnmAE~>MFSf8{Uuhu z&DJDrzE{YVI`3*A83Ux_pZ@g6vVQG4sZVrqU~zd%0T!aR17g4H|9&f#bpbMC)`xE2 zW`qUS>v7uYC#n1Sjo0dXRa9Ie<+Xm|Z%D(FJj^wP0$g)5DyOipK;81y>-7brB_1?< zT$40PJZt|7-hgL3eM#fuWqod)+s6e6n-^(JMzlJJ zANcx$X6?!GNunb^>Z`SU@ek-TM$eNgb7b4bHF|y|gZi{TuaWMk^VUAv1Bp=Uy)cdK zfr62|>B@qYOBbm$%tu;o-5YWze8Avg(#=hfIeW5|M3As6YwDHAkDWMC)bOn0$>?tc&xdhxNo_I=sOH+pVpU+i(G?+Z`Xl=ZW`ee(F z9GUs?7qZ1Fd#|(<^)mtiQu?^DN6G1@OqPe9ct&1-d#21=@U7NUd2N8k)w|FFlYk?n zgG1uR50(eqh-+GG$Qu23S$T!(uWPDnGz_(gNy|9}tFoy z65vD3&dE}hi*a-r8|o@mGQpXTm6s7cTZ#LHNQsY@p2@M2922Hehj~VHqC5vbsL7u? z;M)E|bG>21YKe)7k%0qUADK6pd~rx!99u*Eu#@!ISX(Kl4@%Wu%;5^^!u$?xf$p{; zYU-Jnn8p$UZwsWubrrZTLPmCe{yxNXAb`FZ)dhM?bkPtnh>eME@$rI?@Nku)E}DL! z>dAe9A@S?TH(ldvJ1nCb$H<25@^T8J?)+4QF z?k-S2!aQ3;h}#!w400!)e%z%6ZeJI2a|~$)l%XL4fL1!pS>&p zed1wl#c2Kb;3yXa4*1Yfvm~bW)W&J|?j1_nG(w66~C}2K#y2S0NO}6E^#s<0){I4X8h_xx-Wq0fpd-c{Esy{A1^r%qd3OwPBZTlSoA0tcwS^hK0O*f{z4Sf}L3?{o z?CCv0!@j@7jo`*_-Ih8NxZVk?K`m^_CHn(-gu%vz%Ur!@uGLkRN<;286$-fq2z0y) z4?J+6^zGYE%Z>1><1TUWdTt+2fPZNG>BTX2$9IyMORug%UBI-n&$z2^zy8v@cOQv~ z43*WZ*GSgRJ#yx0Cs;2~ylmUHT}F=@DLXQ^%ZztFkiGc@5{jB+KtEZvcB3T5gv-V) z+oi0c$|`xI#C6M%%xzn&?&4Vz85JYz)~}b*!-rZ@dh;mr-s(`Pu)2)CA}y*x>T0e0 z-KefNltFIL`jTK)+3~`Ik#NT4PqlgrK})FPCR~soORY&Qc_wjxjDOZ)V;p0 zR&sK(B|W{TL`KI+NkOjlF~vwJlDvPU_}5oSP*AWmG}cR4RIJt2ERY>LcZz>#w3HSX zNMvk+_yq(>jz#u~F_97<7p>1dZ{D{uY0`1li(4htRb`six|zE~E;Q!vl*VF9GP8c% zhd=#ZPCC(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⪻zrGky4lRqjEo4^O=_CV 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 _bacQtbhc~-PGV(3oHGy876 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

@@ -42,10 +46,10 @@ It is strongly discouraged to use this platform when you don't use encryption; o This platform supports the services `alarm_disarm`, `alarm_arm_away`, `alarm_arm_home` and `alarm_arm_night`. For each of these services, an IFTTT webhook will be triggered. For this system to operate correctly, the following IFTTT applets have to be setup. Obviously, if your alarm device does not support some states, no applets have to be provided for those. -* **IF** Webhook event `alarm_disarm` is called, **THEN** disarm the alarm system. -* **IF** Webhook event `alarm_arm_home` is called, **THEN** set the alarm system to armed home. -* **IF** Webhook event `alarm_arm_away` is called, **THEN** set the alarm system to armed away. -* **IF** Webhook event `alarm_arm_night` is called, **THEN** set the alarm system to armed night. +* **IF** Webhook event `YOUR_DISARM_EVENT` is called, **THEN** disarm the alarm system. +* **IF** Webhook event `YOUR_ARM_HOME_EVENT` is called, **THEN** set the alarm system to armed home. +* **IF** Webhook event `YOUR_ARM_NIGHT_EVENT` is called, **THEN** set the alarm system to armed away. +* **IF** Webhook event `YOUR_DISARM_EVENT` is called, **THEN** set the alarm system to armed night. * **IF** the alarm system was disarmed, **THEN** perform a Webhook `POST` web request to url `https://HASS_URL/api/services/alarm_control_panel/ifttt_push_alarm_state?api_password=API_PASSWORD` with content type `application/json` and body `{"entity_id": "alarm_control_panel.DEVICE_NAME", "state": "disarmed"}`. * **IF** the alarm system state changed to armed home, **THEN** perform a Webhook `POST` web request to url `https://HASS_URL/api/services/alarm_control_panel/ifttt_push_alarm_state?api_password=API_PASSWORD` with content type `application/json` and body `{"entity_id": "alarm_control_panel.DEVICE_NAME", "state": "armed_home"}`. * **IF** the alarm system state changed to armed away, **THEN** perform a Webhook `POST` web request to url `https://HASS_URL/api/services/alarm_control_panel/ifttt_push_alarm_state?api_password=API_PASSWORD` with content type `application/json` and body `{"entity_id": "alarm_control_panel.DEVICE_NAME", "state": "armed_away"}`. @@ -61,4 +65,29 @@ For this system to operate correctly, the following IFTTT applets have to be set description: The code for the alarm control panel. required: false type: string + event_arm_away: + description: IFTTT webhook event to call when the state is set to armed away. + required: false + type: string + default: alarm_arm_away + event_arm_home: + description: IFTTT webhook event to call when the state is set to armed home. + required: false + type: string + default: alarm_arm_home + event_arm_night: + description: IFTTT webhook event to call when the state is set to armed night. + required: false + type: string + default: alarm_arm_night + event_disarm: + description: IFTTT webhook event to call when the state is set to disarmed. + required: false + type: string + default: alarm_disarm + optimistic: + description: Specify if the state will be updated by a ifttt_push_alarm_state call (false) or can be set immediately (true). + required: false + type: boolean + default: false {% endconfiguration %} From 5e73866af081e60b9e737bf38d4b3737f8712cc7 Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Thu, 22 Mar 2018 08:35:11 +0100 Subject: [PATCH 039/371] Typo fixed (#4975) --- source/_components/switch.xiaomi_miio.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/_components/switch.xiaomi_miio.markdown b/source/_components/switch.xiaomi_miio.markdown index 21cd7d4eba..6334c41d2b 100644 --- a/source/_components/switch.xiaomi_miio.markdown +++ b/source/_components/switch.xiaomi_miio.markdown @@ -91,7 +91,7 @@ Turn the wifi led on. | Service data attribute | Optional | Description | |---------------------------|----------|---------------------------------------------------------| -| `entity_id` | yes | Only act on a specific air purifier. Else targets all. | +| `entity_id` | yes | Only act on a specific xiaomi miio switch entity. Else targets all. | ### {% linkable_title Service `switch.xiaomi_miio_set_wifi_led_off` %} (Power Strip only) @@ -99,7 +99,7 @@ Turn the wifi led off. | Service data attribute | Optional | Description | |---------------------------|----------|---------------------------------------------------------| -| `entity_id` | yes | Only act on a specific air purifier. Else targets all. | +| `entity_id` | yes | Only act on a specific xiaomi miio switch entity. Else targets all. | ### {% linkable_title Service `switch.xiaomi_miio_set_power_price` %} (Power Strip) @@ -107,7 +107,7 @@ Set the power price. | Service data attribute | Optional | Description | |---------------------------|----------|---------------------------------------------------------| -| `entity_id` | yes | Only act on a specific air purifier. Else targets all. | +| `entity_id` | yes | Only act on a specific xiaomi miio switch entity. Else targets all. | | `price` | no | Power price, between 0 and 999. | ### {% linkable_title Service `switch.xiaomi_miio_set_power_mode` %} (Power Strip V1 only) @@ -116,5 +116,5 @@ Set the power mode. | Service data attribute | Optional | Description | |---------------------------|----------|---------------------------------------------------------------| -| `entity_id` | yes | Only act on a specific xiaomi miio entity. Else targets all. | +| `entity_id` | yes | Only act on a specific xiaomi miio switch entity. Else targets all. | | `mode` | no | Power mode, valid values are 'normal' and 'green' | From 2781c1f89aa5e5f86d4099b42b781041c485e970 Mon Sep 17 00:00:00 2001 From: cgtobi Date: Thu, 22 Mar 2018 20:01:43 +0100 Subject: [PATCH 040/371] Add language parameter to darksky sensor. (#4955) * Add language parameter to darksky sensor. * Add language codes rather than link to the API docs. This is a shameless copy of @syssi's PR #4982. --- source/_components/sensor.darksky.markdown | 40 ++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/source/_components/sensor.darksky.markdown b/source/_components/sensor.darksky.markdown index aebe2326e4..6b110a6c72 100644 --- a/source/_components/sensor.darksky.markdown +++ b/source/_components/sensor.darksky.markdown @@ -41,6 +41,46 @@ Configuration variables: - **api_key** (*Required*): Your API key. - **name** (*Optional*): Additional name for the sensors. Default to platform name. - **forecast** array (*Optional*): List of days in the 7 day forecast you would like to receive data on, starting with tomorrow as day 1. Any `monitored_condition` with a daily forecast by DarkSky will generate a sensor tagged with `_`. +- **language** (*Optional*): The desired language of the summary properties. Valid options are + - `ar`: Arabic + - `az`: Azerbaijani + - `be`: Belarusian + - `bg`: Bulgarian + - `bs`: Bosnian + - `ca`: Catalan + - `cs`: Czech + - `da`: Danish + - `de`: German + - `el`: Greek + - `en`: English (which is the default) + - `es`: Spanish + - `et`: Estonian + - `fi`: Finnish + - `fr`: French + - `hr`: Croatian + - `hu`: Hungarian + - `id`: Indonesian + - `is`: Icelandic + - `it`: Italian + - `ja`: Japanese + - `ka`: Georgian + - `kw`: Cornish + - `nb`: Norwegian Bokmål + - `nl`: Dutch + - `pl`: Polish + - `pt`: Portuguese + - `ro`: Romanian + - `ru`: Russian + - `sk`: Slovak + - `sl`: Slovenian + - `sr`: Serbian + - `sv`: Swedish + - `tet`: Tetum + - `tr`: Turkish + - `uk`: Ukrainian + - `x-pig-latin`: Igpay Atinlay + - `zh`: simplified Chinese + - `zh-tw`: traditional Chinese - **latitude** (*Optional*): Latitude coordinate to monitor weather of (required if **longitude** is specified), defaults to coordinates defined in your `configuration.yaml` - **longitude** (*Optional*): Longitude coordinate to monitor weather of (required if **latitude** is specified), defaults to coordinates defined in your `configuration.yaml` - **monitored_conditions** array (*Required*): Conditions to display in the frontend. From cdda3de320b96da960526f0249c79ef136fbfb51 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Thu, 22 Mar 2018 22:12:05 +0000 Subject: [PATCH 041/371] Template corrections (#4990) * Template corrections Updated the templates to be standards compliant. * Fixes ;) * More changes to comply with standards --- source/_docs/scripts.markdown | 98 +++++++++++++++++++---------------- 1 file changed, 53 insertions(+), 45 deletions(-) diff --git a/source/_docs/scripts.markdown b/source/_docs/scripts.markdown index 06836372ad..2acea20bbe 100644 --- a/source/_docs/scripts.markdown +++ b/source/_docs/scripts.markdown @@ -21,7 +21,8 @@ script: sequence: # This is written using the Script Syntax - service: light.turn_on - entity_id: light.ceiling + data: + entity_id: light.ceiling - service: notify.notify data: message: 'Turned on the ceiling light!' @@ -32,11 +33,11 @@ script: The most important one is the action to call a service. This can be done in various ways. For all the different possibilities, have a look at the [service calls page]. ```yaml -alias: Bedroom lights on -service: light.turn_on -data: - entity_id: group.bedroom - brightness: 100 +- alias: Bedroom lights on + service: light.turn_on + data: + entity_id: group.bedroom + brightness: 100 ``` ### {% linkable_title Test a Condition %} @@ -44,9 +45,9 @@ data: While executing a script you can add a condition to stop further execution. When a condition does not return `true`, the script will finish. There are many different conditions which are documented at the [conditions page]. ```yaml -condition: state -entity_id: device_tracker.paulus -state: 'home' +- condition: state + entity_id: device_tracker.paulus + state: 'home' ``` ### {% linkable_title Delay %} @@ -55,46 +56,53 @@ Delays are useful for temporarily suspending your script and start it at a later ```yaml # Waits 1 hour -delay: 01:00 +- delay: '01:00' ``` ```yaml # Waits 1 minute, 30 seconds -delay: 00:01:30 +- delay: '00:01:30' ``` ```yaml # Waits 1 minute -delay: - # supports milliseconds, seconds, minutes, hours, days - minutes: 1 +- delay: + # supports milliseconds, seconds, minutes, hours, days + minutes: 1 ``` +{% raw %} ```yaml # Waits however many minutes input_number.minute_delay is set to # Valid formats include HH:MM and HH:MM:SS -delay: {% raw %}'00:{{ states.input_number.minute_delay.state | int }}:00'{% endraw %} +- delay: "00:{{ states('input_number.minute_delay')|int }}:00" ``` +{% endraw %} + ### {% linkable_title Wait %} Wait until some things are complete. We support at the moment `wait_template` for waiting until a condition is `true`, see also on [Template-Trigger](/docs/automation/trigger/#template-trigger). It is possible to set a timeout after which the script will abort its execution if the condition is not satisfied. Timeout has the same syntax as `delay`. +{% raw %} ```yaml # wait until media player have stop the playing -wait_template: {% raw %}"{{ states.media_player.floor.state == 'stop' }}"{% endraw %} +- wait_template: "{{ is_state('media_player.floor', 'stop') }}" ``` +{% endraw %} +{% raw %} ```yaml -# wait until a valve is < 10 or abort after 1 minutes. -wait_template: {% raw %}"{{ states.climate.kitchen.attributes.valve < 10 }}"{% endraw %} -timeout: 00:01:00 +# wait until a valve is < 10 or abort after 1 minute. +- wait_template: "{{ states.climate.kitchen.attributes.valve|int < 10 }}" + timeout: '00:01:00' ``` +{% endraw %} When using `wait_template` within an automation `trigger.entity_id` is supported for `state`, `numeric_state` and `template` triggers, see also [Available-Trigger-Data](/docs/automation/templating/#available-trigger-data). {% raw %} ```yaml -wait_template: "{{ is_state(trigger.entity_id, 'on') }}" +- wait_template: "{{ is_state(trigger.entity_id, 'on') }}" ``` {% endraw %} @@ -103,12 +111,12 @@ It is also possible to use dummy variables, e.g., in scripts, when using `wait_t {% raw %} ```yaml # Service call, e.g., from an automation. -service: script.do_something -data_template: - dummy: "{{ input_boolean.switch }}" +- service: script.do_something + data_template: + dummy: input_boolean.switch # Inside the script -wait_template: "{{ is_state(dummy, 'off') }}" +- wait_template: "{{ is_state(dummy, 'off') }}" ``` {% endraw %} @@ -117,12 +125,12 @@ wait_template: "{{ is_state(dummy, 'off') }}" This action allows you to fire an event. Events can be used for many things. It could trigger an automation or indicate to another component that something is happening. For instance, in the below example it is used to create an entry in the logbook. ```yaml -event: LOGBOOK_ENTRY -event_data: - name: Paulus - message: is waking up - entity_id: device_tracker.paulus - domain: light +- event: LOGBOOK_ENTRY + event_data: + name: Paulus + message: is waking up + entity_id: device_tracker.paulus + domain: light ``` You can also use event_data_template to fire an event with custom data. This could be used to pass data to another script awaiting @@ -130,10 +138,10 @@ an event trigger. {% raw %} ```yaml -event: MY_EVENT -event_data_template: - name: myEvent - customData: "{{ myCustomVariable }}" +- event: MY_EVENT + event_data_template: + name: myEvent + customData: "{{ myCustomVariable }}" ``` {% endraw %} @@ -145,13 +153,13 @@ The following automation shows how to raise a custom event called `event_light_s ```yaml - alias: Fire Event trigger: - platform: state - entity_id: switch.kitchen - to: 'on' + - platform: state + entity_id: switch.kitchen + to: 'on' action: - event: event_light_state_changed - event_data: - state: "on" + - event: event_light_state_changed + event_data: + state: 'on' ``` {% endraw %} @@ -161,12 +169,12 @@ The following automation shows how to capture the custom event `event_light_stat ```yaml - alias: Capture Event trigger: - platform: event - event_type: event_light_state_changed + - platform: event + event_type: event_light_state_changed action: - service: notify.notify - data_template: - message: "kitchen light is turned {{ trigger.event.data.state }}" + - service: notify.notify + data_template: + message: "kitchen light is turned {{ trigger.event.data.state }}" ``` {% endraw %} From 8c71e26851944ce84cddef76c05d61a868eb0d60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Fri, 23 Mar 2018 10:20:37 +0100 Subject: [PATCH 042/371] Changes to Hassbian documentation (#4992) * Changes to Hassbian documentation * Added info about suite to Let's Encrypt docs --- .../certificates/lets_encrypt.markdown | 118 +++++++++--------- .../hassbian/common-tasks.markdown | 12 +- .../hassbian/customization.markdown | 44 ++++--- .../hassbian/installation.markdown | 14 +-- .../installation/hassbian/upgrading.markdown | 5 +- 5 files changed, 100 insertions(+), 93 deletions(-) diff --git a/source/_docs/ecosystem/certificates/lets_encrypt.markdown b/source/_docs/ecosystem/certificates/lets_encrypt.markdown index e428509c77..d239394d25 100644 --- a/source/_docs/ecosystem/certificates/lets_encrypt.markdown +++ b/source/_docs/ecosystem/certificates/lets_encrypt.markdown @@ -10,7 +10,7 @@ footer: true ---

-If you are using Hass.io, do not use this guide. Instead, use the [DuckDNS add-on](/addons/duckdns/) to automatically maintain a subdomain including HTTPS certificates via Let's Encrypt. +If you are using Hass.io or Hassbian, do not use this guide. Instead, use the [DuckDNS add-on](/addons/duckdns/) for Hass.io or the [DuckDNS suite](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/duckdns.md) for Hassbian to automatically maintain a subdomain including HTTPS certificates via Let's Encrypt.

@@ -29,9 +29,9 @@ This guide was added by mf_social on 16/03/2017 and was valid at the time of wri * If you are not using Home Assistant on a Debian/Raspian/Hassbian system you will be able to convert any of the terminology I use in to the correct syntax for your system. * You understand that this is a 'guide' covering the general application of these things to the general masses and there are things outside of the scope of it, and it does not cover every eventuality (although I have made some notes where people may stumble). Also, I have used some turns of phrase to make it easier to understand for the novice reader which people of advanced knowledge may say is innacurate. My goal here is to get you through this guide with a satisfactory outcome and have a decent understanding of what you are doing and why, not to teach you advanced internet communication protocols. * Each step presumes you have fully completed the previous step successfully, so if you did an earlier step following a different guide, please ensure that you have not missed anything out that may affect the step you have jumped to, and ensure that you adapt any commands to take in to account different file placements from other guides. - + Steps we will take: - + - 0 - Gain a basic level of understanding around IP addresses, port numbers and port forwarding - 1 - Set your device to have a static IP address - 2 - Set up port forwarding without TLS/SSL and test connection @@ -42,48 +42,48 @@ Steps we will take: - 7 - Set up a sensor to monitor the expiry date of the certificate - 8 - Set up an automatic renewal of the TLS/SSL certificate - 9 - Set up an alert to warn us if something went wrong - + ### {% linkable_title 0 - Gain a basic level of understanding around IP addresses, port numbers and port forwarding %} - + An IP address is a bit like a phone number. When you access your Home Assistant instance you type something similar to 192.168.0.200:8123 in to your address bar of your browser. The bit before the colon is the IP address (in this case 192.168.0.200) and the bit after is the port number (in this case 8123). When you SSH in to the device running Home Assistant you will use the same IP address, and you will use port 22. You may not be aware that you are using port 22, but if you are using Putty look in the box next to where you type the IP address, you will see that it has already selected port 22 for you. - + So, if an IP address is like a phone number, a port number is like an extension number. An analogy would be if you phone your local doctors on 192-1680-200 and the receptionist answers, you ask to speak to Dr. Smith and she will put you through to extension 8123, which is the phone Dr. Smith is sitting at. The doctors surgery is the device your Home Assistant is running on, Dr. Smith is your Home Assistant. Thusly, your Home Assistant instance is 'waiting for your call' on port 8123, at the device IP 192.168.0.200 . - + Now, to speak to the outside world your connection goes through a router. Your router will have two IP addresses. One is the internal network number, most likely 192.168.0.1 in my example, and an external IP address that incoming traffic is sent to. In the example of calling the doctors, the external IP is your telephone number's area code. - + So, when we want to connect to our Home Assistant instance from outside our network we will need to call the correct extension number, at the correct phone number, in the correct area code. - + We will be looking for a system to run like this (in this example I will pretend our external IP is 12.12.12.12): - + ```text Outside world -> 12.12.12.12:8123 -> your router -> 192.168.0.200:8123 ``` Sounds simple? It really is except for two small, but easy to overcome, complications: - + * IP addresses are often dynamically allocated, so they can change. * Because of the way the internet works you cannot chain IP addresses together to get from where you are, to where you want to go. - + To get around the issue of changing IP addresses we must remember that there are two IP addresses affected. Your external one (which we will 'call' to get on to your network from the internet) and your internal one (192.168.0.200 in the example I am currently using). - + So, we can use a static IP to ensure that whenever our device running Home Assistant connects to our router it always uses the same address. This way our internal IP never changes. This is covered in step 1 below. - + We then have no control over our external IP, as our Service Provider will give us a new one at random intervals. To fix this we will use a service called DuckDNS which will give us a name for our connection (something like examplehome.duckdns.org) and behind the scenes will continue to update your external IP. So no matter how many times the IP address changes, typing examplehome.duckdns.org in to our browser will convert to the correct, up-to-date, IP address. This is covered in step 3 below. - + To get around the issue of not being able to chain the IP addresses together (I can't say I want to call 12:12:12:12 and be put through to 192.168.0.200, and then be put through to extension 8123) we use port forwarding. Port forwarding is the process of telling your router which device to allow the outside connection to speak to. In the doctors surgery example, port forwarding is the receptionist. This takes a call from outside, and forwards it to the correct extension number inside. It is important to note that port forwarding can forward an incoming request for one port to a different port on your internal network if you so choose, and we will be doing this later on. The end result being that when we have our TSL/SSL certificate our incoming call will be requesting port 443 (because that is the SSL port, like the SSH port is always 22), but our port forwarding rule will forward this to our HA instance on port 8123. When this guide is completed we will run something like this: - + ```text Outside world -> https://examplehome.duckdns.org -> 12.12.12.12:443 -> your router -> 192.168.0.200:8123 ``` So, let's make it happen... ### {% linkable_title 1 - Set your device to have a static IP address %} - + Whenever a device is connected to a network it has an IP address. This IP address is often dynamically assigned to the device on connection. This means there are occasions where the IP address you use to access Home Assistant, or SSH in to the device running Home Assistant, may change. Setting a static IP address means that the device will always be on the same address. - + SSH in to your system running Home Assistant and login. - + Type the following command to list your network interfaces: - + ```bash $ ifconfig ``` @@ -94,17 +94,17 @@ You will receive an output similar to the image below: Screenshot

- + Make a note of the interface name and the IP address you are currently on. In the picture it is the wireless connection that is highlighted, but with your setup it may be the wired one (eth0 or similar), make sure you get the correct information. - + Then type the following command to open the text file that controls your network connection: -```bash +```bash $ sudo nano /etc/dhcpcd.conf ``` At the bottom of the file add the following lines: - + ```text interface wlan0 <----- or the interface you just wrote down. @@ -255,7 +255,7 @@ $ sudo adduser hass sudo If you did not already log in as the user that currently runs Home Assistant, change to that user (usually `hass` or `homeassistant` - you may have used a command similar to this in the past): ```bash -$ sudo su -s /bin/bash hass +$ sudo su -s /bin/bash hass ``` Make sure you are in the home directory for the Home Assistant user: @@ -276,7 +276,7 @@ $ chmod a+x certbot-auto You might need to stop Home Assistant before continuing with the next step. You can do this via the Web-UI or use the following command if you are running on Hassbian: ```text -$ sudo systemctl stop home-assistant@homeassistant.service +$ sudo systemctl stop home-assistant@homeassistant.service ``` You can restart Home Assistant after the next step using the same command and replacing `stop` with `start`. @@ -340,7 +340,7 @@ http: ssl_key: /etc/letsencrypt/live/examplehome.duckdns.org/privkey.pem base_url: examplehome.duckdns.org ``` - + You may wish to set up other options for the [http](https://home-assistant.io/components/http/) component at this point, these extra options are beyond the scope of this guide. Save the changes to configuration.yaml. Restart Home Assistant. @@ -367,7 +367,7 @@ https://YOUR-HA-IP:8123 Some cases such as this are where your router does not allow 'loopback' or where there is a problem with incoming connections due to technical failure. In these cases you can still use your internal connection and safely ignore the warnings. -If you were previously using a webapp on your phone/tablet to access your Home Assistant you should delete the old one and create a new one with the new address. The old one will no longer work as it is not keyed to your new, secure URL. Instructions for creating your new webapp can be found here: +If you were previously using a webapp on your phone/tablet to access your Home Assistant you should delete the old one and create a new one with the new address. The old one will no longer work as it is not keyed to your new, secure URL. Instructions for creating your new webapp can be found here: ```text https://home-assistant.io/docs/frontend/mobile/ @@ -391,11 +391,11 @@ You are now part of one of two groups: * If you have BOTH rules you are able to set up auto renewals of your certificates using port 80 and the standard http challenge, as performed above. * If you only have one, you are still able to set up auto renewals of your certificates, but will have to specify additional options when renewing that will temporarily stop Home Assistant and use port 8123 for certificate renewal. - + Please remember whether you are a ONE-RULE person or a BOTH-RULE person for step 8! - + Let's Encrypt certificates only last for 90 days. When they have less than 30 days left they can be renewed. Renewal is a simple process. - + Move on to step 7 to see how to monitor your certificates expiry date, and be ready to renew your certificate when the time comes. ### {% linkable_title 7 - Set up a sensor to monitor the expiry date of the certificate %} @@ -406,9 +406,9 @@ Setting a sensor to read the number of days left on your TLS/SSL certificate bef * You can set automations based on the number of days left * You can set alerts to notify you if your certificate has not been renewed and is coming close to expiry. * If you cannot set up automatic renewals due to your ISP blocking port 80, you will have timely reminders to complete the process manually. - + If you do not wish to set up a sensor you can skip straight to step 8 to learn how to update your certificates. - + The sensor will rely on a command line program that needs to be installed on your device running Home Assistant. SSH in to the device and run the following commands: ```bash @@ -446,33 +446,33 @@ If you are a ONE-RULE person (from step 6), you can automatically renew your cer If you are a TWO-RULE person (from step 6), you can automatically renew your certificate using a `http-01` challenge and port 80. There are a number of options for automating the renewal process: - + #### Option 1: Your certificate can be renewed as a 'cron job' - cron jobs are background tasks run by the computer at specified intervals (and are totally independent of Home Assistant). Defining cron is outside of the scope of this guide but you will have had dealings with `crontab` when setting up DuckDNS in step 3 - + To set a cron job to run the script at regular intervals: - + * SSH in to your device running Home Assistant. * Change to your Home Assistant user (command similar to): - + ```bash $ sudo su -s /bin/bash hass ``` - + * Open the crontab: - + ```bash $ crontab -e ``` - + * If you are a TWO-RULE Person: Scroll to the bottom of the file and paste in the following line - + ```text 30 2 * * 1 ~/certbot/certbot-auto renew --quiet --no-self-upgrade --standalone --preferred-challenges http-01 ``` * If you are a ONE-RULE Person: Scroll to the bottom of the file and paste in the following line - + ```text 30 2 * * 1 ~/certbot/certbot-auto renew --quiet --no-self-upgrade --standalone --preferred-challenges tls-sni-01 --tls-sni-01-port 8123 --pre-hook "sudo systemctl stop home-assistant@homeassistant.service" --post-hook "sudo systemctl start home-assistant@homeassistant.service" ``` @@ -482,17 +482,17 @@ $ crontab -e 3. We define pre-hooks and post-hooks that stop our Home Assistant service before certbot runs, freeing port 8123 for certificate renewal, and restart Home Assistant after renewal is complete. * Save the file and exit - - + + #### Option 2: You can set an automation in Home Assistant to run the certbot renewal script. - + Add the following sections to your configuration.yaml if you are a TWO-RULE person -```yaml -shell_command: +```yaml +shell_command: renew_ssl: ~/certbot/certbot-auto renew --quiet --no-self-upgrade --standalone --preferred-challenges http-01 - + automation: - alias: 'Auto Renew SSL Cert' trigger: @@ -506,34 +506,34 @@ If you are a ONE-RULE person, replace the `certbot-auto` command above with `~/c #### Option 3: You can manually update the certificate when your certificate is less than 30 days to expiry. - -To manually update: - + +To manually update: + * SSH in to your device running Home Assistant. * Change to your Home Assistant user (command similar to): - + ```bash $ su - s /bin/bash hass ``` - + * Change to your certbot folder - + ```bash $ cd ~/certbot/ ``` * Run the renewal command - + ```bash $ ./certbot-auto renew --quiet --no-self-upgrade --standalone --preferred-challenges http-01 ``` * If you are a ONE-RULE person, replace the `certbot-auto` command above with `~/certbot/certbot-auto renew --quiet --no-self-upgrade --standalone --preferred-challenges tls-sni-01 --tls-sni-01-port 8123 --pre-hook "sudo systemctl stop home-assistant@homeassistant.service" --post-hook "sudo systemctl start home-assistant@homeassistant.service"` - + So, now were all set up. We have our secured, remotely accessible Home Assistant instance and we're on track for keeping our certificates up to date. But what if something goes wrong? What if the automation didn't fire? What if the cron job forgot to run? What if the dog ate my homework? Read on to set up an alert so you can be notified in plenty of time if you need to step in and sort out any failures. - + ### {% linkable_title 9 - Set up an alert to warn us if something went wrong. %} - + We set up our automatic renewal of our certificates and whatever method we used the certificate should be renewed on or around 30 days before it expires. But what if a week later it still hasn't been? This alert will go off if the expiry time on the certificate gets down to 21 days. This will give you 3 weeks to fix the problem, get your new certificate installed and get another 90 days of secure Home Assistant connections in play. In your `configuration.yaml` add the following automation, adding your preferred notification platform where appropriate: @@ -550,7 +550,7 @@ automation: data: message: 'Warning - SSL certificate expires in 21 days and has not been automatically renewed' ``` - + If you receive this warning notification, follow the steps for a manual update from step 8. Any error messages received at that point can be googled and resolved. If the manual update goes without a hitch there may be something wrong with your chosen method for automatic updates, and you can start troubleshooting from there. So, that's it. We've taken a Home Assistant instance that was only reachable on the local network, made it accessible from the internet, secured it, and set up a system to ensure that it always stays secure. Well done, go and treat yourself to a cookie! diff --git a/source/_docs/installation/hassbian/common-tasks.markdown b/source/_docs/installation/hassbian/common-tasks.markdown index 26d91a2abc..3016df41e0 100644 --- a/source/_docs/installation/hassbian/common-tasks.markdown +++ b/source/_docs/installation/hassbian/common-tasks.markdown @@ -11,7 +11,7 @@ redirect_from: /docs/hassbian/common-tasks/ --- ### {% linkable_title Login to the Raspberry Pi %} -To login to your Raspberry Pi running HASSbian you're going to be using a ssh client. Depending on your platform there are several alternatives for doing this. Linux and Max OS generally have a ssh client installed. Windows users are recommended to download and install the ssh client [Putty][ssh-putty]. +To login to your Raspberry Pi running Hassbian you're going to be using a ssh client. Depending on your platform there are several alternatives for doing this. Linux and Max OS generally have a ssh client installed. Windows users are recommended to download and install the ssh client [Putty][ssh-putty]. Connect to the Raspberry Pi over ssh. Default user name is `pi` and password is `raspberry`. Linux and Mac OS users execute the following command in a terminal. @@ -28,11 +28,11 @@ Optionally, starting with Windows 10 anniversary update, you can use the built-i Log in as the `pi` account and execute the following commands: ```bash -$ sudo systemctl stop home-assistant@homeassistant.service +$ sudo systemctl stop home-assistant@homeassistant.service ``` Replace `stop` with `start` or `restart` to get the desired functionality. -To get the current state of the `homeassistant.service` replace `stop` with `status`. +To get the current state of the `homeassistant.service` replace `stop` with `status`. ### {% linkable_title Update Home Assistant %} @@ -43,7 +43,7 @@ You can also use `hassbian-config` to automate the process by running `sudo hass Log in as the `pi` account and execute the following commands: ```bash -$ sudo systemctl stop home-assistant@homeassistant.service +$ sudo systemctl stop home-assistant@homeassistant.service $ sudo su -s /bin/bash homeassistant $ source /srv/homeassistant/bin/activate $ pip3 install --upgrade homeassistant @@ -53,12 +53,12 @@ $ sudo systemctl start home-assistant@homeassistant.service This will in order do the following: -- Stop the Home Assistant service running on HASSbian +- Stop the Home Assistant service running on Hassbian - Open a shell as the `homeassistant` user running the Homeassistant service and that has ownership over the Home Assistant installation. - Change into the virtual Python environment at `/srv/homeassistant/` containing the Home Assistant installation. - Upgrade the Home Assistant installation to the latest release. - Exit the shell and return to the `pi` user. -- Restart the Home Assistant service. +- Start the Home Assistant service. ### {% linkable_title Manually launch Home Assistant %} Log in as the `pi` account and execute the following commands: diff --git a/source/_docs/installation/hassbian/customization.markdown b/source/_docs/installation/hassbian/customization.markdown index adc479f6d4..e1c968a0c4 100644 --- a/source/_docs/installation/hassbian/customization.markdown +++ b/source/_docs/installation/hassbian/customization.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Customization" -description: "Instructions to flash the Home Assistant HASSbian image on a Raspberry Pi." +description: "Instructions to flash the Home Assistant Hassbian image on a Raspberry Pi." date: 2016-09-26 21:00 sidebar: true comments: false @@ -10,26 +10,34 @@ footer: true redirect_from: /docs/hassbian/customization/ --- -To allow you to customize your installation further, we have included a tool called `hassbian-config`. This tool comes with a set of packages that can easily be installed or upgraded for easier customization of your Home Assistant installation. -The tool is available by running `hassbian-config`. +To allow you to customize your installation further, we have included a tool called `hassbian-config`. This tool comes with a set of suites that can easily be installed or upgraded for easier customization of your Home Assistant installation. +The tool is available by running `hassbian-config`. ### Install scripts -To view the available packages run `hassbian-config show` and `sudo hassbian-config install PACKAGENAME`. - - Install Hue. Configures the Python executable to allow usage of low numbered ports for use with Emulated Hue component that's used with Amazon Echo, Google Home and Mycroft.ai. - - Install MariaDB. This script installs MariaDB and it's dependencies for use with the recorder component in Home Assistant. No database or database user is created during this setup and will need to be created manually. - - Install Mosquitto MQTT server. Installs the latest Mosquitto package and client tools from the Mosquitto projects official repository. Now includes websocket support. - - Install Libcec. Adds local [HDMI CEC support][cec]. *This scipt is currently brooken upstream since it currently doesn't build properly for Python >3.4* - - Install Samba. Allows anyone on your network to edit your configuration from any computer. This share is unsecured and it's usage is not recommended if you share your network with others. - - Install Tradfri. Installs dependencies for using IKEA Trådfri. - - Install Duck DNS auto renewal. This script adds a cron job to auto update the WAN IP address for the defined domain. Before running this script you should already have an Duck DNS account. During the installation you will be asked to supply your domain name and the token for your account. - - Install a web terminal for easy access to ssh in any web browser. This script installs a web terminal called 'shellinabox' on your system that gives you SSH access in your web browser. +To view the available suites run `hassbian-config show` or have a look at the [hassbian-scripts repository][hassbian-repo]. +These are some of the available suites: + - [AppDaemon](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/appdaemon.md) + - [Duck DNS](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/duckdns.md) _This can also be configured to generate Let's Encrypt SSL certificates_ + - [Homebridge](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/homebridge.md) + - [Mosquitto](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/mosquitto.md) + - [Samba](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/samba.md) + - [Webterminal](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/webterminal.md) + - Various database engines. + - [MariaDB](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/mariadb.md) + - [PostgreSQL](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/postgresql.md) + - [MS SQL](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/mssql.md) -#### Upgrade scripts -To view the available packages run `hassbian-config show` and `sudo hassbian-config upgrade PACKAGENAME`. -- Upgrade your Home Assistant installation. -- Upgrade your HASSbian installation. -- Upgrade HASSbian-scripts. -- Upgrade HASSbian-scripts from dev branch. + To install any of them simply run `sudo hassbian-config install SUITE`. + +### Upgrade scripts +To view the available suites run `hassbian-config show` or have a look at the [hassbian-scripts repository][hassbian-repo]. +These are some of the available suites: +- [AppDaemon](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/appdaemon.md) +- [Hassbian](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/hassbian.md) +- [Home Assistant](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/homeassistant.md) +- [hassbian-config (hassbian-sctipts)](https://github.com/home-assistant/hassbian-scripts/blob/master/docs/hassbian_config.md) + +To upgrade any of them simply run `sudo hassbian-config upgrade SUITE`. For more information about this tool have a look at the [hassbian-scripts repository][hassbian-repo]. diff --git a/source/_docs/installation/hassbian/installation.markdown b/source/_docs/installation/hassbian/installation.markdown index 96af9485be..c6e73879ef 100644 --- a/source/_docs/installation/hassbian/installation.markdown +++ b/source/_docs/installation/hassbian/installation.markdown @@ -14,18 +14,19 @@ One of the easiest ways to install Home Assistant on your Raspberry Pi Zero, 2 , 1. [Download the Hassbian image][image-download] 2. Use [Etcher][etcher] to flash the image to your SD card - 3. Ensure your Raspberry Pi has wired access to the internet for the entire process or configure your wireless network settings **before proceeding to step 4**. - 4. Insert SD card to Raspberry Pi and turn it on. Initial installation of Home Assistant will take about 5 minutes. + 3. Ensure your Raspberry Pi has wired access to the internet for the entire process or configure your [wireless network settings](#wireless-network) **before proceeding to step 4**. + 4. Insert SD card to Raspberry Pi and turn it on. Initial installation of Home Assistant will take about 10 minutes.

Please remember to ensure you're using an [appropriate power supply](https://www.raspberrypi.org/help/faqs/#powerReqs) with your Pi. Mobile chargers may not be suitable, since some are designed to only provide the full power with that manufacturer's handsets.

-These instructions are also available as a [video](https://www.youtube.com/watch?v=iIz6XqDwHEk). Additional information is available in this [video](https://www.youtube.com/watch?v=tCGlQSsQ-Mc). +These instructions are also available as a [video](https://www.youtube.com/watch?v=iIz6XqDwHEk). +Additional information is available in this [video](https://www.youtube.com/watch?v=tCGlQSsQ-Mc). -After initial boot an installer will run in the background and takes around 15 minutes to complete, after it has finished, you will be prompted to login: `hassbian login:`. Installation is complete at this point. The default username is `pi` and the password is `raspberry`. +After initial boot an installer will run in the background, this will download and install the newest version of [hassbian-config](https://github.com/home-assistant/hassbian-scripts) and Home-Assistant, this takes around 10 minutes to complete, after it has finished, you will be prompted to login: `hassbian login:`. Installation is complete at this point. The default username is `pi` and the password is `raspberry`. -Open a browser on a device that's connected to the same WiFi network as your Raspberry Pi and point it to Home Assistant at [http://hassbian.local:8123]. If you want to login via SSH, the default username is `pi` and password is `raspberry` (please change this by running `passwd`). The Home Assistant configuration is located at `/home/homeassistant/.homeassistant/`. +Open a browser on a device that's connected to the same network as your Raspberry Pi and point it to Home Assistant at [http://hassbian.local:8123]. If you want to login via SSH, the default username is `pi` and password is `raspberry` (please change this by running `passwd`). The Home Assistant configuration is located at `/home/homeassistant/.homeassistant/`. If you find that the web page is not reachable after 30 minutes or so, check that you have files in `/home/homeassistant/.homeassistant/`, if there are no files in this location then run the installer manually using this command: `sudo systemctl start install_homeassistant.service`. @@ -35,7 +36,7 @@ The following extras are included on the image: - GPIO pins are ready to use. - Bluetooth is ready to use (supported models only, no Bluetooth LE). - SSH server is enabled. - - A tool called [`hassbian-config`](https://github.com/home-assistant/hassbian-scripts#hassbian-config-hassbian-config). + - A tool called [`hassbian-config`](https://github.com/home-assistant/hassbian-scripts#hassbian-scripts). ### {% linkable_title Wireless Network %} @@ -63,4 +64,3 @@ You may need to adjust the country code depending upon where you are. A list of [etcher]: https://etcher.io/ [http://hassbian.local:8123]: http://hassbian.local:8123 [wifi-setup]: https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md - diff --git a/source/_docs/installation/hassbian/upgrading.markdown b/source/_docs/installation/hassbian/upgrading.markdown index 33b10c5028..d7e094c16a 100644 --- a/source/_docs/installation/hassbian/upgrading.markdown +++ b/source/_docs/installation/hassbian/upgrading.markdown @@ -10,7 +10,7 @@ footer: true redirect_from: /docs/hassbian/upgrading/ --- -HASSbian is based on Raspbian and uses the same repositories. Any changes to Raspbian will be reflected in HASSbian. To update and upgrade system packages and installed software (excluding Home Assistant) do the following. +Hassbian is based on Raspbian and uses the same repositories. Any changes to Raspbian will be reflected in Hassbian. To update and upgrade system packages and installed software (excluding Home Assistant) do the following. Log in as the `pi` account and execute the following commands: ```bash @@ -18,10 +18,9 @@ $ sudo apt-get update $ sudo apt-get -y upgrade ``` - #### {% linkable_title Updating Home Assistant %}

-You can also use `hassbian-config` to automate the process by running `sudo hassbian-config upgrade home-assistant` +You can use `hassbian-config` to automate the process by running `sudo hassbian-config upgrade homeassistant`

To update the Home Assistant installation execute the following command as the `pi` user. From c4edb9a6e165e913bf574a24dd013ec7ea1dd2f1 Mon Sep 17 00:00:00 2001 From: jackjohnsonuk <32000001+jackjohnsonuk@users.noreply.github.com> Date: Fri, 23 Mar 2018 09:23:53 +0000 Subject: [PATCH 043/371] Update backup_github.markdown (#4988) Added a not re: Hass.io steps --- source/_docs/ecosystem/backup/backup_github.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/ecosystem/backup/backup_github.markdown b/source/_docs/ecosystem/backup/backup_github.markdown index e1842f4721..e56833a2dc 100644 --- a/source/_docs/ecosystem/backup/backup_github.markdown +++ b/source/_docs/ecosystem/backup/backup_github.markdown @@ -35,7 +35,7 @@ Some best practices to consider before putting your configuration on GitHub: ### {% linkable_title Step 1: Installing and Initializing Git %} -In order to put your configuration on GitHub, you must install the git package on your Home Assistant server (instructions below will work on Raspberry Pi, Ubunutu, or any Debian-based system): +In order to put your configuration on GitHub, you must install the git package on your Home Assistant server (instructions below will work on Raspberry Pi, Ubunutu, or any Debian-based system) *note: this isn't required in Hass.io, it's included as default so proceed to step 2*: ```bash $ sudo apt-get update From 6a35c3515d8552dce58f5426586ae11098d57586 Mon Sep 17 00:00:00 2001 From: Robert Date: Fri, 23 Mar 2018 10:30:34 +0100 Subject: [PATCH 044/371] Automations file has fixed name and location (#4993) * automations file has fixed name and location The name and path of the automations file are fixed. Clarification for #13411 * :pencil2: Grammar --- source/_docs/automation/editor.markdown | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/source/_docs/automation/editor.markdown b/source/_docs/automation/editor.markdown index 3788800fd1..31bced2ddb 100644 --- a/source/_docs/automation/editor.markdown +++ b/source/_docs/automation/editor.markdown @@ -9,7 +9,7 @@ sharing: true footer: true --- -In Home Assistant 0.45 we introduced the first version of our automation editor. If you just created a new configuration with Home Assistant then you're all set! Go to the UI and enjoy. +In Home Assistant 0.45 we introduced the first version of our automation editor. If you just created a new configuration with Home Assistant, then you're all set! Go to the UI and enjoy. From the UI choose **Configuration** which is located in the sidebar, then click on **Automation** to go to the automation editor. Press the **+** sign in the lower right corner to get started. This example is based on the manual steps described in the [Getting started section](/getting-started/automation/) for a [`random` sensor](/components/sensor.random/). @@ -19,7 +19,7 @@ Choose a meaningful name for your automation rules.

-If the value of the sensor is greater than 10 then the automation rule should apply. +If the value of the sensor is greater than 10, then the automation rule should apply.

@@ -39,18 +39,20 @@ As "Service Data" we want a simple text that is shown as part of the notificatio } ``` -Don't forget to save your new automation rule. In order for your saved automation rule to come into effect you will need to go to the **Configuration** page and click on **Reload Automation**. +Don't forget to save your new automation rule. For your saved automation rule to come into effect, you will need to go to the **Configuration** page and click on **Reload Automation**. ## {% linkable_title Updating your configuration to use the editor %} -First check that you have activated the configuration editor. +First, check that you have activated the configuration editor. ```yaml # Activate the configuration editor config: ``` -The automation editor reads and writes to the file `automations.yaml` in your [configuration](/docs/configuration/) folder. Make sure that you have set up the automation component to read from it: +The automation editor reads and writes to the file `automations.yaml` in the root of your [configuration](/docs/configuration/) folder. +Currently, both the name of this file and its location are fixed. +Make sure that you have set up the automation component to read from it: ```yaml # Configuration.yaml example @@ -65,7 +67,7 @@ automation old: platform: ... ``` -You can use the `automation:` and `automation old:` sections in the same time: +You can use the `automation:` and `automation old:` sections at the same time: - `automation old:` to keep your manual designed automations - `automation:` to save the automation created by the online editor @@ -77,7 +79,7 @@ automation old: !include_dir_merge_list automations ## {% linkable_title Migrating your automations to `automations.yaml` %} -If you want to migrate your old automations to use the editor, you'll have to copy them to `automations.yaml`. Make sure that `automations.yaml` remains a list! For each automation that you copy over you'll have to add an `id`. This can be any string as long as it's unique. +If you want to migrate your old automations to use the editor, you'll have to copy them to `automations.yaml`. Make sure that `automations.yaml` remains a list! For each automation that you copy over, you'll have to add an `id`. This can be any string as long as it's unique. For example, the below automation will be triggered when the sun goes from below the horizon to above the horizon. Then, if the temperature is between 17 and 25 degrees, a light will be turned on. From 62985bd21ebe8f7f59bff3f7b769fcd2f850029f Mon Sep 17 00:00:00 2001 From: Gummientchen Date: Fri, 23 Mar 2018 11:27:04 +0100 Subject: [PATCH 045/371] Add example configuration to cookbook (#4991) --- .../configuration_yaml_by_gummientchen.markdown | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 source/_cookbook/configuration_yaml_by_gummientchen.markdown diff --git a/source/_cookbook/configuration_yaml_by_gummientchen.markdown b/source/_cookbook/configuration_yaml_by_gummientchen.markdown new file mode 100644 index 0000000000..3205562886 --- /dev/null +++ b/source/_cookbook/configuration_yaml_by_gummientchen.markdown @@ -0,0 +1,12 @@ +--- +layout: page +title: "Configuration.yaml by Gummientchen" +description: "" +date: 2018-03-23 09:13 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Example configuration.yaml +ha_external_link: https://github.com/Gummientchen/Home-AssistantConfig +--- From 77c282d62f1e6e1692f7373c41fd330d1f898f2f Mon Sep 17 00:00:00 2001 From: Erik Eriksson Date: Fri, 23 Mar 2018 11:31:35 +0100 Subject: [PATCH 046/371] Update sensor.mqtt.markdown (#4968) --- source/_components/sensor.mqtt.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/sensor.mqtt.markdown b/source/_components/sensor.mqtt.markdown index 174c27ee8b..dc835ac9d7 100644 --- a/source/_components/sensor.mqtt.markdown +++ b/source/_components/sensor.mqtt.markdown @@ -44,6 +44,10 @@ unit_of_measurement: description: Defines the units of measurement of the sensor, if any. required: false type: string +icon: + description: Icon for the sensor (e.g. `mdi:gauge`). + required: false + type: string expire_after: description: Defines the number of seconds after the value expires if it's not updated. required: false From 6800f2090870d87f7f60747381b565b111cffa32 Mon Sep 17 00:00:00 2001 From: Erik Eriksson Date: Fri, 23 Mar 2018 11:32:07 +0100 Subject: [PATCH 047/371] Update switch.mqtt.markdown (#4969) --- source/_components/switch.mqtt.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/switch.mqtt.markdown b/source/_components/switch.mqtt.markdown index c06e491ea6..d440902e7e 100644 --- a/source/_components/switch.mqtt.markdown +++ b/source/_components/switch.mqtt.markdown @@ -36,6 +36,10 @@ name: required: false type: string default: MQTT Switch +icon: + description: Icon for the switch (e.g. `mdi:radiator`). + required: false + type: string state_topic: description: The MQTT topic subscribed to receive state updates. required: false From 6ea9c2d7a82c47b85457d1cde670879a0a9419e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Fri, 23 Mar 2018 18:00:56 +0100 Subject: [PATCH 048/371] More hassbian docs (#4994) --- source/_docs/installation/hassbian.markdown | 2 +- source/_docs/installation/hassbian/common-tasks.markdown | 2 +- source/_docs/installation/updating.markdown | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/source/_docs/installation/hassbian.markdown b/source/_docs/installation/hassbian.markdown index 9559359870..bc20ad6359 100644 --- a/source/_docs/installation/hassbian.markdown +++ b/source/_docs/installation/hassbian.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Hassbian" -description: "Instructions to flash the Home Assistant HASSbian image on a Raspberry Pi." +description: "Instructions to flash the Home Assistant Hassbian image on a Raspberry Pi." date: 2016-09-26 21:00 sidebar: true comments: false diff --git a/source/_docs/installation/hassbian/common-tasks.markdown b/source/_docs/installation/hassbian/common-tasks.markdown index 3016df41e0..edf92d8ace 100644 --- a/source/_docs/installation/hassbian/common-tasks.markdown +++ b/source/_docs/installation/hassbian/common-tasks.markdown @@ -37,7 +37,7 @@ To get the current state of the `homeassistant.service` replace `stop` with `sta ### {% linkable_title Update Home Assistant %}

-You can also use `hassbian-config` to automate the process by running `sudo hassbian-config upgrade home-assistant` +You can use `hassbian-config` to automate the process by running `sudo hassbian-config upgrade homeassistant`

Log in as the `pi` account and execute the following commands: diff --git a/source/_docs/installation/updating.markdown b/source/_docs/installation/updating.markdown index 012a5a5c08..b3c7040b9a 100644 --- a/source/_docs/installation/updating.markdown +++ b/source/_docs/installation/updating.markdown @@ -11,7 +11,7 @@ redirect_from: /getting-started/updating/ ---

-The upgrade process differs depending on the installation you have, so please review the documentation that is specific to your install [Hass.io](/hassio/), [HASSbian](/docs/hassbian/common-tasks/#update-home-assistant), [Vagrant](/docs/installation/vagrant/), or [Virtualenv](/docs/installation/virtualenv/#upgrading-home-assistant). +The upgrade process differs depending on the installation you have, so please review the documentation that is specific to your install [Hass.io](/hassio/), [Hassbian](/docs/installation/hassbian/common-tasks/#update-home-assistant), [Vagrant](/docs/installation/vagrant/), or [Virtualenv](/docs/installation/virtualenv/#upgrading-home-assistant).

Check what's new in the latest version and potentially impacts your system in [Home Assistant release notes](https://github.com/home-assistant/home-assistant/releases). It is good practice to review these release notes and pay close attention to the **Breaking Changes** that are listed there. If you haven't done an update for a while, you should also check previous release notes as they can also contain relevant **Breaking Changes**. **Breaking Changes** may require configuration updates for your components. If you missed this and Home Assistant refuses to start, check `/home-assistant.log` for details about broken components. @@ -25,7 +25,7 @@ $ pip3 install --upgrade homeassistant After updating, you must restart Home Assistant for the changes to take effect. This means that you will have to restart `hass` itself or the [autostarting](/docs/autostart/) daemon (if applicable). Startup can take considerable amount of time (i.e. minutes) depending on your device. This is because all requirements are updated as well.

-To avoid permission errors, the upgrade must be run as the same user as the installation was completed, again review the documentation specific to your install [Hass.io](/hassio/), [HASSbian](/docs/hassbian/installation/), [Vagrant](/docs/installation/vagrant/), or [Virtualenv](/docs/installation/virtualenv). +To avoid permission errors, the upgrade must be run as the same user as the installation was completed, again review the documentation specific to your install [Hass.io](/hassio/), [Hassbian](/docs/hassbian/installation/), [Vagrant](/docs/installation/vagrant/), or [Virtualenv](/docs/installation/virtualenv).

[BRUH automation](http://www.bruhautomation.com) has created [a tutorial video](https://www.youtube.com/watch?v=tuG2rs1Cl2Y) explaining how to upgrade Home Assistant. @@ -40,7 +40,7 @@ $ pip3 install homeassistant==0.XX.X #### {% linkable_title Run the development version %} -If you want to stay on the bleeding-edge Home Assistant development branch, you can upgrade to `dev`. +If you want to stay on the bleeding-edge Home Assistant development branch, you can upgrade to `dev`.

The "dev" branch is likely to be unstable. Potential consequences include loss of data and instance corruption. From b4c71a2f549cdd90212a42ac5bc269278f649445 Mon Sep 17 00:00:00 2001 From: Philip Rosenberg-Watt Date: Fri, 23 Mar 2018 11:29:38 -0600 Subject: [PATCH 049/371] Fix incorrect syntax (#4995) Without quotes the example would not work. --- source/_docs/scripts.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/scripts.markdown b/source/_docs/scripts.markdown index 2acea20bbe..ef490f4de2 100644 --- a/source/_docs/scripts.markdown +++ b/source/_docs/scripts.markdown @@ -102,7 +102,7 @@ When using `wait_template` within an automation `trigger.entity_id` is supported {% raw %} ```yaml -- wait_template: "{{ is_state(trigger.entity_id, 'on') }}" +- wait_template: "{{ is_state('trigger.entity_id', 'on') }}" ``` {% endraw %} From 6f63554f8cba39e7887504c5563c622728e77668 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 23 Mar 2018 20:07:18 +0100 Subject: [PATCH 050/371] Add send_sticker and update the existing content (#4996) * Add send_sticker and update the existing content * :pencil2: Minor fixes --- source/_components/telegram_bot.markdown | 98 +++++++++++++++--------- 1 file changed, 60 insertions(+), 38 deletions(-) diff --git a/source/_components/telegram_bot.markdown b/source/_components/telegram_bot.markdown index 0c5ef3e502..32397d0fbe 100644 --- a/source/_components/telegram_bot.markdown +++ b/source/_components/telegram_bot.markdown @@ -19,10 +19,12 @@ This component creates notification services to send, or edit previously sent, m If you don't need to receive messages, you can use the [broadcast](/components/telegram_bot.broadcast/) platform instead. -### {% linkable_title Notification services %} -Available services: `send_message`, `send_photo`, `send_document`, `send_location`, `edit_message`, `edit_replymarkup`, `edit_caption`, `answer_callback_query`. +## {% linkable_title Notification services %} + +Available services: `send_message`, `send_photo`, `send_document`, `send_location`, `send_sticker`, `edit_message`, `edit_replymarkup`, `edit_caption` and `answer_callback_query`. + +### {% linkable_title Service `telegram_bot.send_message` %} -#### {% linkable_title Service `telegram_bot/send_message` %} Send a notification. | Service data attribute | Optional | Description | @@ -36,7 +38,8 @@ Send a notification. | `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. Example: `["/command1, /command2", "/command3"]` | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | -#### {% linkable_title Service `telegram_bot/send_photo` %} +### {% linkable_title Service `telegram_bot.send_photo` and `telegram_bot.send_sticker` %} + Send a photo. | Service data attribute | Optional | Description | @@ -44,16 +47,16 @@ Send a photo. | `url` | no | Remote path to an image. | | `file` | no | Local path to an image. | | `caption` | yes | The title of the image. | -| `username` | yes | Username for a URL which require HTTP basic authentication. | -| `password` | yes | Password for a URL which require HTTP basic authentication. | +| `username` | yes | Username for a URL which requires HTTP basic authentication. | +| `password` | yes | Password for a URL which requires HTTP basic authentication. | | `authentication` | yes | Define which authentication method to use. Set to `digest` to use HTTP digest authentication. Defaults to `basic`. | | `target` | yes | An array of pre-authorized chat_ids or user_ids to send the notification to. Defaults to the first allowed chat_id. | | `disable_notification` | yes | True/false for send the message silently. iOS users and web users will not receive a notification, Android users will receive a notification with no sound. Defaults to False. | | `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. Example: `["/command1, /command2", "/command3"]` | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | +### {% linkable_title Service `telegram_bot.send_video` %} -#### {% linkable_title Service `telegram_bot/send_video` %} Send a video. | Service data attribute | Optional | Description | @@ -69,7 +72,8 @@ Send a video. | `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. Example: `["/command1, /command2", "/command3"]` | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | -#### {% linkable_title Service `telegram_bot/send_document` %} +### {% linkable_title Service `telegram_bot.send_document` %} + Send a document. | Service data attribute | Optional | Description | @@ -77,15 +81,16 @@ Send a document. | `url` | no | Remote path to a document. | | `file` | no | Local path to a document. | | `caption` | yes | The title of the document. | -| `username` | yes | Username for a URL which require HTTP basic authentication. | -| `password` | yes | Password for a URL which require HTTP basic authentication. | +| `username` | yes | Username for a URL which requires HTTP basic authentication. | +| `password` | yes | Password for a URL which requires HTTP basic authentication. | | `authentication` | yes | Define which authentication method to use. Set to `digest` to use HTTP digest authentication. Defaults to `basic`. | | `target` | yes | An array of pre-authorized chat_ids or user_ids to send the notification to. Defaults to the first allowed chat_id. | | `disable_notification` | yes | True/false for send the message silently. iOS users and web users will not receive a notification, Android users will receive a notification with no sound. Defaults to False. | | `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. Example: `["/command1, /command2", "/command3"]` | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | -#### {% linkable_title Service `telegram_bot/send_location` %} +### {% linkable_title Service `telegram_bot.send_location` %} + Send a location. | Service data attribute | Optional | Description | @@ -97,7 +102,8 @@ Send a location. | `keyboard` | yes | List of rows of commands, comma-separated, to make a custom keyboard. Example: `["/command1, /command2", "/command3"]` | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | -#### {% linkable_title Service `telegram_bot/edit_message` %} +### {% linkable_title Service `telegram_bot.edit_message` %} + Edit a previously sent message in a conversation. | Service data attribute | Optional | Description | @@ -110,7 +116,8 @@ Edit a previously sent message in a conversation. | `disable_web_page_preview`| yes | True/false for disable link previews for links in the message. | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | -#### {% linkable_title Service `telegram_bot/edit_caption` %} +### {% linkable_title Service `telegram_bot.edit_caption` %} + Edit the caption of a previously sent message. | Service data attribute | Optional | Description | @@ -121,8 +128,9 @@ Edit the caption of a previously sent message. | `disable_web_page_preview`| yes | True/false for disable link previews for links in the message. | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | -#### {% linkable_title Service `telegram_bot/edit_replymarkup` %} -Edit the inline keyboard of a previusly sent message. +### {% linkable_title Service `telegram_bot.edit_replymarkup` %} + +Edit the inline keyboard of a previously sent message. | Service data attribute | Optional | Description | |---------------------------|----------|--------------------------------------------------| @@ -131,7 +139,8 @@ Edit the inline keyboard of a previusly sent message. | `disable_web_page_preview`| yes | True/false for disable link previews for links in the message. | | `inline_keyboard` | yes | List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. Example: `["/button1, /button2", "/button3"]` or `[[["Text btn1", "/button1"], ["Text btn2", "/button2"]], [["Text btn3", "/button3"]]]` | -#### {% linkable_title Service `telegram_bot/answer_callback_query` %} +### {% linkable_title Service `telegram_bot.answer_callback_query` %} + Respond to a callback query originated by clicking on an online keyboard button. The answer will be displayed to the user as a notification at the top of the chat screen or as an alert. | Service data attribute | Optional | Description | @@ -140,7 +149,7 @@ Respond to a callback query originated by clicking on an online keyboard button. | `callback_query_id` | no | Unique id of the callback response. In the `telegram_callback` event data: `{{ trigger.event.data.id }}` | | `show_alert` | yes | True/false for show a permanent notification. Defaults to False. | -#### {% linkable_title Service `telegram_bot/delete_message` %} +### {% linkable_title Service `telegram_bot.delete_message` %} Delete a previously sent message in a conversation. | Service data attribute | Optional | Description | @@ -148,12 +157,12 @@ Delete a previously sent message in a conversation. | `message_id` | no | Id of the message to delete. When answering a callback from a pressed button, the id of the origin message is in: `{{ trigger.event.data.message.message_id }}`. You can use `"last"` to refer to the last message sent to `chat_id`. | | `chat_id` | no | The chat_id where to delete the message. | -### {% linkable_title `Telegram` notification platform %} +## {% linkable_title `telegram` notification platform %} - -The [Telegram notification platform](/components/notify.telegram/) requires the `telegram_bot` component to work with, and it's designed to generate a customized shortcut (`notify.USERNAME`) to send notifications (messages, photos, documents and locations) to a particular `chat_id` with the old syntax, allowing backward compatibility. +The [`telegram` notification platform](/components/notify.telegram/) requires the `telegram_bot` component to work with, and it's designed to generate a customized shortcut (`notify.USERNAME`) to send notifications (messages, photos, documents and locations) to a particular `chat_id` with the old syntax, allowing backward compatibility. The required yaml configuration now reduces to: + ```yaml notify: - name: NOTIFIER_NAME @@ -161,8 +170,7 @@ notify: chat_id: USER_CHAT_ID ``` -### {% linkable_title Event triggering %} - +## {% linkable_title Event triggering %} A command looks like `/thecommand`, or `/othercommand with some args`. @@ -189,7 +197,7 @@ chat_id: "" chat: "" ``` -if the message is sent from a [press from an inline button](https://core.telegram.org/bots#inline-keyboards-and-on-the-fly-updating), for example, a callback query is received, and Home Assistant will fire a `telegram_callback` event with: +If the message is sent from a [press from an inline button](https://core.telegram.org/bots#inline-keyboards-and-on-the-fly-updating), for example, a callback query is received, and Home Assistant will fire a `telegram_callback` event with: ```yaml data: "" @@ -204,7 +212,6 @@ chat_id: "" ### {% linkable_title Configuration samples %} - Simple ping pong example. ```yaml @@ -221,7 +228,7 @@ action: message: 'pong' ``` -Example that show keyboard interaction with `notify.telegram` +An example that shows keyboard interaction with `notify.telegram` ```yaml trigger: @@ -256,8 +263,9 @@ action: entity_id: switch.vision_zm1601eu5_battery_operated_siren_switch_9_0 ``` -An example to show the use of event_data in the action: +An example to show the use of event_data in action: +{% raw %} ```yaml - alias: 'Kitchen Telegram Speak' trigger: @@ -269,17 +277,21 @@ An example to show the use of event_data in the action: - service: notify.kitchen_echo data_template: message: > - Message from {% raw %}{{ trigger.event.data["from_first"] }}. {% for state in trigger.event.data["args"] %} {{ state }} {% endfor %}{% endraw %} + Message from {{ trigger.event.data["from_first"] }}. {% for state in trigger.event.data["args"] %} {{ state }} {% endfor %} ``` +{% endraw %} ### {% linkable_title Sample automations with callback queries and inline keyboards %} -Quick example to show some of the callback capabilities of inline keyboards with a dumb automation consisting in a simple repeater of normal text that presents an inline keyboard with 3 buttons: 'EDIT', 'NO' and 'REMOVE BUTTON': +A quick example to show some of the callback capabilities of inline keyboards with a dumb automation consisting in a simple repeater of normal text that presents an inline keyboard with 3 buttons: 'EDIT', 'NO' and 'REMOVE BUTTON': + - Pressing 'EDIT' changes the sent message. - Pressing 'NO' only shows a brief notification (answering the callback query). - Pressing 'REMOVE BUTTON' changes the inline keyboard removing that button. Text repeater: + +{% raw %} ```yaml - alias: 'Telegram bot that repeats text' hide_entity: true @@ -290,15 +302,18 @@ Text repeater: - service: telegram_bot.send_message data_template: title: '*Dumb automation*' - target: {% raw %}'{{ trigger.event.data.user_id }}'{% endraw %} - message: 'You said: {% raw %}{{ trigger.event.data.text }}{% endraw %}' + target: '{{ trigger.event.data.user_id }}' + message: 'You said: {{ trigger.event.data.text }}' disable_notification: true inline_keyboard: - "Edit message:/edit_msg, Don't:/do_nothing" - "Remove this button:/remove button" ``` +{% endraw %} Message editor: + +{% raw %} ```yaml - alias: 'Telegram bot that edits the last sent message' hide_entity: true @@ -315,19 +330,22 @@ Message editor: show_alert: true - service: telegram_bot.edit_message data_template: - message_id: {% raw %}'{{ trigger.event.data.message.message_id }}'{% endraw %} - chat_id: {% raw %}'{{ trigger.event.data.chat_id }}'{% endraw %} + message_id: '{{ trigger.event.data.message.message_id }}' + chat_id: '{{ trigger.event.data.chat_id }}' title: '*Message edit*' inline_keyboard: - "Edit message:/edit_msg, Don't:/do_nothing" - "Remove this button:/remove button" message: > - {% raw %}Callback received from {% raw %}{{ trigger.event.data.from_first }}{% endraw %}. - Message id: {% raw %}{{ trigger.event.data.message.message_id }}{% endraw %}. - Data: {% raw %}{{ trigger.event.data.data }}{% endraw %} + Callback received from {{ trigger.event.data.from_first }}. + Message id: {{ trigger.event.data.message.message_id }}. + Data: {{ trigger.event.data.data }} ``` +{% endraw %} Keyboard editor: + +{% raw %} ```yaml - alias: 'Telegram bot that edits the keyboard' hide_entity: true @@ -339,17 +357,20 @@ Keyboard editor: action: - service: telegram_bot.answer_callback_query data_template: - callback_query_id: {% raw %}'{{ trigger.event.data.id }}'{% endraw %} + callback_query_id: '{{ trigger.event.data.id }}' message: 'Callback received for editing the inline keyboard!' - service: telegram_bot.edit_replymarkup data_template: message_id: 'last' - chat_id: {% raw %}'{{ trigger.event.data.chat_id }}'{% endraw %} + chat_id: '{{ trigger.event.data.chat_id }}' inline_keyboard: - "Edit message:/edit_msg, Don't:/do_nothing" ``` +{% endraw %} Only acknowledges the 'NO' answer: + +{% raw %} ```yaml - alias: 'Telegram bot that simply acknowledges' hide_entity: true @@ -361,9 +382,10 @@ Only acknowledges the 'NO' answer: action: - service: telegram_bot.answer_callback_query data_template: - callback_query_id: {% raw %}'{{ trigger.event.data.id }}'{% endraw %} + callback_query_id: '{{ trigger.event.data.id }}' message: 'OK, you said no!' ``` +{% endraw %} For a more complex usage of the `telegram_bot` capabilities, using [AppDaemon](/docs/ecosystem/appdaemon/tutorial/) is advised. From 3c45088ac3b2f7ba4a58fe12867180914bee3593 Mon Sep 17 00:00:00 2001 From: c727 Date: Fri, 23 Mar 2018 20:34:10 +0100 Subject: [PATCH 051/371] Fix code for custom UI version (#4945) * Fix code for custom UI version if you don't put the code in `{ }` `const`s are global * Update frontend_creating_custom_ui.markdown * Update frontend_creating_custom_ui.markdown * Update frontend_creating_custom_ui.markdown --- .../frontend_creating_custom_ui.markdown | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/source/developers/frontend_creating_custom_ui.markdown b/source/developers/frontend_creating_custom_ui.markdown index d28623e8da..3012f43e60 100644 --- a/source/developers/frontend_creating_custom_ui.markdown +++ b/source/developers/frontend_creating_custom_ui.markdown @@ -42,7 +42,22 @@ frontend: `www/custom_ui/state-card-my-custom-light.html`: -```javascript +```html + \ No newline at end of file diff --git a/source/demo/panels/ha-panel-dev-template.html b/source/demo/panels/ha-panel-dev-template.html index 22e214a759..5c7678632c 100644 --- a/source/demo/panels/ha-panel-dev-template.html +++ b/source/demo/panels/ha-panel-dev-template.html @@ -1,2 +1,2 @@

\ No newline at end of file + clear: both;white-space:pre-wrap}.rendered.error{color:red}
Templates
\ No newline at end of file diff --git a/source/developers/asyncio.markdown b/source/developers/asyncio.markdown index 3cbee37c1b..2a456794d6 100644 --- a/source/developers/asyncio.markdown +++ b/source/developers/asyncio.markdown @@ -23,5 +23,5 @@ The backwards compatible API works by scheduling a task from a different thread ### [Next step: asyncio 101 »](/developers/asyncio_101/) -[0.29]: https://home-assistant.io/blog/2016/09/29/async-sleepiq-emoncms-stocks/ +[0.29]: /blog/2016/09/29/async-sleepiq-emoncms-stocks/ [ben]: https://github.com/bbangert/ diff --git a/source/developers/cla.markdown b/source/developers/cla.markdown index f48588f5e1..731c5360d6 100644 --- a/source/developers/cla.markdown +++ b/source/developers/cla.markdown @@ -30,7 +30,7 @@ By making a contribution to this project, I certify that: (d) I understand and agree that this project and the contribution are public and that a record of the contribution (including all personal information I submit with it) is maintained indefinitely - and may be redistributed consistent with this project or the open + and may be redistributed consistent with this project or the open source license(s) involved. ``` @@ -47,4 +47,4 @@ If you have not signed the CLA and you submit a pull request to a repository und This Contributor License Agreement (CLA) was first announced on January 21st, 2017 in [this][cla-blog] blog post and adopted January 28th, 2017. -[cla-blog]: https://home-assistant.io/blog/2017/01/21/home-assistant-governance/ +[cla-blog]: /blog/2017/01/21/home-assistant-governance/ diff --git a/source/developers/development_checklist.markdown b/source/developers/development_checklist.markdown index 1a1fdb3def..3fe199b8ea 100644 --- a/source/developers/development_checklist.markdown +++ b/source/developers/development_checklist.markdown @@ -15,6 +15,6 @@ Before you commit any changes, check your work against these requirements: - All dependencies from [pypi](https://pypi.python.org/pypi) are included via the `REQUIREMENTS` variable in your platform or component and only imported inside functions that use them - New dependencies are added to `requirements_all.txt` (if applicable), using `script/gen_requirements_all.py` - The `.coveragerc` file is updated to exclude your platform if there are no tests available or your new code uses a third-party library for communication with the device, service, or sensor -- Documentation is developed for [home-assistant.io](https://home-assistant.io/) +- Documentation is developed for [home-assistant.io](/) * It's OK to start with adding a docstring with configuration details (for example, sample entry for `configuration.yaml` file) to the file header. Visit the [website documentation](/developers/documentation/) for more information about contributing to [home-assistant.io](https://github.com/home-assistant/home-assistant.github.io). diff --git a/source/developers/development_environment.markdown b/source/developers/development_environment.markdown index 46017c7f80..b198bebbbb 100644 --- a/source/developers/development_environment.markdown +++ b/source/developers/development_environment.markdown @@ -31,7 +31,7 @@ $ sudo apt-get install libssl-dev libxml2-dev libxslt1-dev libjpeg-dev libffi-de Different distributions have different package installation mechanisms and sometimes packages names as well. For example Centos would use: `sudo yum install epel-release && sudo yum install python34 python34-devel mysql-devel`

-Additional dependencies exist if you plan to perform Frontend Development, please read the [Frontend](https://home-assistant.io/developers/frontend/) section to learn more. +Additional dependencies exist if you plan to perform Frontend Development, please read the [Frontend](/developers/frontend/) section to learn more. #### {% linkable_title Developing on Windows %} @@ -83,7 +83,7 @@ $ cd home-assistant $ git remote add upstream https://github.com/home-assistant/home-assistant.git ``` -### {% linkable_title Setting up virtual environment %} +### {% linkable_title Setting up virtual environment %} To isolate your environment from the rest of the system, set up a [`venv`](https://docs.python.org/3/library/venv.html). Within the `home-assistant` directory, create and activate your virtual environment. diff --git a/source/developers/development_guidelines.markdown b/source/developers/development_guidelines.markdown index c8b384eb3e..edfabb9b26 100644 --- a/source/developers/development_guidelines.markdown +++ b/source/developers/development_guidelines.markdown @@ -27,7 +27,7 @@ Those points may require that you adjust your IDE or editor settings. ## {% linkable_title Our recommendations %} -For some cases [PEPs](https://www.python.org/dev/peps/) don't make a statement. This section covers our recommendations about the code style. Those points were collected from the existing code and based on what contributors and developers were using the most. This is basically a majority decision, thus you may not agree with it. But we would like to encourage you follow those recommendations to keep the code unified. +For some cases [PEPs](https://www.python.org/dev/peps/) don't make a statement. This section covers our recommendations about the code style. Those points were collected from the existing code and based on what contributors and developers were using the most. This is basically a majority decision, thus you may not agree with it. But we would like to encourage you follow those recommendations to keep the code unified. ### {% linkable_title Quotes %} @@ -43,7 +43,7 @@ SENSOR_TYPES = { ### {% linkable_title File headers %} -The docstring in the file header should contain a link to the documentation to make it easy to find further information, especially about the configuration or details which are not mentioned in the code. +The docstring in the file header should contain a link to the documentation to make it easy to find further information, especially about the configuration or details which are not mentioned in the code. ```python """ @@ -56,7 +56,7 @@ https://home-assistant.io/components/light.mqtt/ ### {% linkable_title Requirements %} -Please place [Platform requirements](/developers/code_review_platform/#1-requirements) right after the imports. +Please place [Platform requirements](/developers/code_review_platform/#1-requirements) right after the imports. ```python [...] diff --git a/source/developers/development_states.markdown b/source/developers/development_states.markdown index 6da9e5fbc9..e1161ffcca 100644 --- a/source/developers/development_states.markdown +++ b/source/developers/development_states.markdown @@ -137,4 +137,4 @@ def device_state_attributes(self): Entities also have a similar property `state_attributes`, which normally doesn't need to be defined by new platforms. This property is used by base components to add standard sets of attributes to a state. Example: The light component uses `state_attributes` to add brightness to the state dictionary. If you are designing a new component, you should define `state_attributes` instead.

-To get your component included in the Home Assistant releases, follow the steps described in the [Submit your work](https://home-assistant.io/developers/development_submitting/) section. Basically you only need to move your component in the `homeassistant/component/` directory of your fork and create a Pull Request. +To get your component included in the Home Assistant releases, follow the steps described in the [Submit your work](/developers/development_submitting/) section. Basically you only need to move your component in the `homeassistant/component/` directory of your fork and create a Pull Request. diff --git a/source/developers/documentation/index.markdown b/source/developers/documentation/index.markdown index 33dd22d859..50370c7802 100644 --- a/source/developers/documentation/index.markdown +++ b/source/developers/documentation/index.markdown @@ -10,7 +10,7 @@ footer: true redirect_from: /developers/website/ --- -The website you are reading now is the home of Home Assistant: [https://home-assistant.io](https://home-assistant.io). This is the place where we provide documentation and additional details about Home Assistant for end users and developers. +The website you are reading now is the home of Home Assistant: [https://www.home-assistant.io](/). This is the place where we provide documentation and additional details about Home Assistant for end users and developers. home-assistant.io is built using [Jekyll](http://github.com/mojombo/jekyll) and [these available dependencies](https://pages.github.com/versions/). The pages are written in [markdown](http://daringfireball.net/projects/markdown/). To add a page, you don't need to know about HTML. diff --git a/source/developers/hassio/addon_communication.markdown b/source/developers/hassio/addon_communication.markdown index e7ec413029..3a4f57fb8b 100644 --- a/source/developers/hassio/addon_communication.markdown +++ b/source/developers/hassio/addon_communication.markdown @@ -35,7 +35,7 @@ We have severals services for Hass.io inside Home Assistant to run tasks. To sen To enables calls to the [Hass.io API][hassio-api], add `hassio_api: true` to `config.json` and read the environment variable `HASSIO_TOKEN`. Now you can use the API over the URL: `http://hassio/`. Use the `HASSIO_TOKEN` with header `X-HASSIO-KEY`. -[hass-api]: https://home-assistant.io/developers/rest_api/ -[hass-websocket]: https://home-assistant.io/developers/websocket_api/ +[hass-api]: /developers/rest_api/ +[hass-websocket]: /developers/websocket_api/ [hassio-api]: https://github.com/home-assistant/hassio/blob/master/API.md [hassio-addon-api]: https://github.com/home-assistant/hassio/blob/dev/API.md#restful-for-api-addons diff --git a/source/help/trivia.markdown b/source/help/trivia.markdown index 6d033a243d..f4a91f4a66 100644 --- a/source/help/trivia.markdown +++ b/source/help/trivia.markdown @@ -17,7 +17,7 @@ Isn't it obvious? Home Assistant is the good soul that is assisting you in your ### {% linkable_title Website %} -The website [https://home-assistant.io](https://home-assistant.io) was launched on December 18, 2014 and contains documentation about the setup process, the platforms and components, and for the developers. +The website [https://www.home-assistant.io](/) was launched on December 18, 2014 and contains documentation about the setup process, the platforms and components, and for the developers. ### {% linkable_title Logo %} @@ -38,7 +38,7 @@ This sections just contains some random numbers of the Home Assistant eco-system | [Forum members](https://community.home-assistant.io/) | 92 | 3931 | 16663 | | [Github stars](https://github.com/home-assistant/home-assistant/stargazers) | 2519 | 5239 | 12074 | | [Github forks](https://github.com/home-assistant/home-assistant/network) | 374 | 1424 | 3474 | -| Page views [ha.io](https://home-assistant.io) | 600,372 | 6,614,343 | 23,727,481 | +| Page views [ha.io](/) | 600,372 | 6,614,343 | 23,727,481 | ### {% linkable_title Commit per year %} From 4bb87848f9befa992ff4b171a9c47e64897a3858 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 24 Mar 2018 22:25:22 -0700 Subject: [PATCH 074/371] clarify MQTT dev tool text --- source/_docs/tools/dev-tools.markdown | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/_docs/tools/dev-tools.markdown b/source/_docs/tools/dev-tools.markdown index c9cc6a4c28..99ce3e7cf7 100644 --- a/source/_docs/tools/dev-tools.markdown +++ b/source/_docs/tools/dev-tools.markdown @@ -94,7 +94,8 @@ For more information about jinja2, visit [jinja2 documentation](http://jinja.poc {% linkable_title mqtt %} -This section is only visible if the MQTT is configured. To configure MQTT, add `mqtt:` to the `configuration.yaml` file. For more information, refer to [mqtt](/components/mqtt/) +This section is only visible if the MQTT component is configured. To configure MQTT, add `mqtt:` to the `configuration.yaml` file. For more information, refer to the [mqtt](/components/mqtt/) component. + Even though MQTT in general provides deeper functionality, the developer tools section of MQTT is limited to publishing messages to a given topic. It supports templates for the payload. To publish a message, simply specify the topic name and the payload and click “PUBLISH” button. {% linkable_title Info %} From 330808127df8a577e1886d4105ab29df5e5c6f18 Mon Sep 17 00:00:00 2001 From: Patrick Hofmann Date: Sun, 25 Mar 2018 22:22:17 +0200 Subject: [PATCH 075/371] Documentation of new HomeMatic lock section. (#4537) * Documentation of new HomeMatic lock section. * :pencil2: Minor updates --- source/_components/lock.homematic.markdown | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 source/_components/lock.homematic.markdown diff --git a/source/_components/lock.homematic.markdown b/source/_components/lock.homematic.markdown new file mode 100644 index 0000000000..d536312e2e --- /dev/null +++ b/source/_components/lock.homematic.markdown @@ -0,0 +1,18 @@ +--- +layout: page +title: "Homematic Lock (KeyMatic)" +description: "Instructions how to integrate Homematic locks (KeyMatic) within Home Assistant." +date: 2018-01-28 03:00 +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 observe and control the state of the HomeMatic [Homematic](http://www.homematic.com/) KeyMatic lock through Home Assistant. + +Devices will be configured automatically. Please refer to the [component](/components/homematic/) configuration on how to setup Homematic. From 5146a3febcdbcf29727916dea58648a5d8327893 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Mon, 26 Mar 2018 00:57:33 +0300 Subject: [PATCH 076/371] nginx_proxy: Document hsts config variable (#5000) * nginx_proxy: Document hsts config variable * :rocket: Trigger rebuild --- source/_addons/nginx_proxy.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_addons/nginx_proxy.markdown b/source/_addons/nginx_proxy.markdown index f306fccbe5..bc3be8cc44 100644 --- a/source/_addons/nginx_proxy.markdown +++ b/source/_addons/nginx_proxy.markdown @@ -18,6 +18,7 @@ In the `http` section of the `configuration.yaml` file remove `ssl_certificate` "domain": "home.example.com", "certfile": "fullchain.pem", "keyfile": "privkey.pem", + "hsts": "max-age=31536000; includeSubDomains", "customize": { "active": false, "default": "nginx_proxy_default*.conf", @@ -31,6 +32,7 @@ Configuration variables: - **domain** (*Required*): Domain they will proxy run with it. - **certfile** (*Required*): Certificate file to use in the /ssl dir. - **keyfile** (*Required*): Private key file to use in the /ssl dir. +- **hsts** (*Optional*): Value for the [`Strict-Transport-Security`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security) HTTP header to send. If empty or `null`, the header is not sent. - **customize** (*Optional*): If true, additional NGINX configuration files for the default server and additional servers are read from files in the /share dir specified by the `default` and `servers` variables.

From 0687a6a3ea26406fa6daac21e428b65699d77fac Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 26 Mar 2018 07:15:52 +0100 Subject: [PATCH 077/371] Clarity updates (#5017) Added that you can reload some pieces without a restart. Added reference to ensuring you run the check config as the user you run Home Assistant as (so that the right configuration is found) --- source/_docs/configuration.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/configuration.markdown b/source/_docs/configuration.markdown index ae5349fe90..2d0dc0f027 100644 --- a/source/_docs/configuration.markdown +++ b/source/_docs/configuration.markdown @@ -26,12 +26,12 @@ If you want to use a different folder for configuration, use the config command Inside your configuration folder is the file `configuration.yaml`. This is the main file that contains components to be loaded with their configurations. Throughout the documentation you will find snippets that you can add to your configuration file to enable functionality.

- You will have to restart Home Assistant for changes to `configuration.yaml` to take effect. + You will have to restart Home Assistant for most changes to `configuration.yaml` to take effect. You can load changes to [automations](/docs/automation/), [customize](/docs/configuration/customizing-devices/), [groups](/components/group/), and [scripts](/components/script/) without restarting.

If you run into trouble while configuring Home Assistant, have a look at the [configuration troubleshooting page](/getting-started/troubleshooting-configuration/) and at the [configuration.yaml examples](/cookbook/#example-configurationyaml).

- Test any changes to your configuration files from the command line with `hass --script check_config`. This script allows you to test changes without the need to restart Home Assistant. + Test any changes to your configuration files from the command line with `hass --script check_config`. This script allows you to test changes without the need to restart Home Assistant. Remember to run this as the user you run Home Assistant as.

From 0f78e11a86b6351c10ef7f123ab59adb317dda4f Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 26 Mar 2018 07:16:45 +0100 Subject: [PATCH 078/371] Highlighting the hosting of files (#5015) The use of `www/` is hidden in the middle of the page, it's impossible to direct people to it, and trivial to overlook. It's also wrong for Hass.io ;) Updating to make it possible to link to it, and adding details on where to find it on Hass.io. Also adding a note about needing to restart after creating the folder (there's been lots and lots of feedback about needing to do so) --- source/_components/http.markdown | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/source/_components/http.markdown b/source/_components/http.markdown index 88da4c6738..458e10794e 100644 --- a/source/_components/http.markdown +++ b/source/_components/http.markdown @@ -75,8 +75,6 @@ To use those kind of [sensors](/components/sensor.http/) or [binary sensors](com All [requests](/developers/rest_api/#post-apistatesltentity_id) need to be sent to the endpoint of the device and must be **POST**. -If you want to use Home Assistant to host or serve static files then create a directory called `www` under the `.homeassistant` configuration path. The static files in `.homeassistant/www/` can be accessed by the following URL `http://your.domain:8123/local/`. - If you want to apply additional IP filtering, and automatically ban brute force attempts, set `ip_ban_enabled` to `True` and the maximum number of attempts. After the first ban, an `ip_bans.yaml` file will be created in the root configuration folder. It will have the banned IP address and time in UTC when it was added: ```yaml @@ -89,3 +87,11 @@ After a ban is added a Persistent Notification is populated to the Home Assistan

Please note, that sources from `trusted_networks` won't be banned automatically.

+ +## {% linkable_title Hosting files %} + +If you want to use Home Assistant to host or serve static files then create a directory called `www` under the configuration path (`/config` on Hass.io, `.homeassistant` elswhere). The static files in `www/` can be accessed by the following URL `http://your.domain:8123/local/`, for example `audio.mp3` would be accessed as `http://your.domain:8123/local/audio.mp3`. + +

+ If you've had to create the `www/` folder for the first time, you'll need to restart Home Assistant. +

From da03b58a3aad56355aa588a9001d75730eb59a78 Mon Sep 17 00:00:00 2001 From: Diogo Gomes Date: Mon, 26 Mar 2018 16:50:12 +0100 Subject: [PATCH 079/371] Improve documentation about Mediaroom (#5022) * Improve documentation * Add raw --- source/_components/media_player.mediaroom.markdown | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/source/_components/media_player.mediaroom.markdown b/source/_components/media_player.mediaroom.markdown index 47e79b74ba..39a417a5f3 100644 --- a/source/_components/media_player.mediaroom.markdown +++ b/source/_components/media_player.mediaroom.markdown @@ -47,7 +47,7 @@ Notice that all parameters are optional, and discovery should configure everythi The component has been developed for Portuguese TV operators currently using the Mediaroom platform, but should also work in other deployments in which the STB can be controlled remotely through a socket on port 8082. -In most cases (single STB) you just need to setup the *platform* and discovery will do the rest. In case you have more than one STB you are required to set the *host* in each one of the entries. +In most cases (single STB) you just need to setup the *platform* and discovery will do the rest. If the STB is on the same network segment as Home Assistant, it can determine whether the device is turned on or off. Without this, the component will fail to determine the Set-top box status, and you are required to add the *optimistic* configuration variable. @@ -55,8 +55,9 @@ If the STB is on the same network segment as Home Assistant, it can determine wh ### {% linkable_title Example `press_button` script %} -The `play_media` function can be used in scripts to change channels. +The `play_media` function can be used in scripts to change channels and emulate button pressing from a remote control. +{% raw %} ```yaml # Example play_media script # @@ -67,6 +68,8 @@ press_button: entity_id: media_player.mediaroom_stb media_content_id: "{{ value }}" media_content_type: "channel" +``` +{% endraw %} ### {% linkable_title Example configuration with 2 STB %} From 45617ed8680f0acb1f4203d9f0952c4c001d5683 Mon Sep 17 00:00:00 2001 From: Sacha Telgenhof Date: Tue, 27 Mar 2018 00:53:00 +0900 Subject: [PATCH 080/371] Added another implementation of MQTT JSON Lights: AiLight (#5024) * Added AiLight implementation of a MQTT JSON Light * Removed empty lines. --- source/_components/light.mqtt_json.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/light.mqtt_json.markdown b/source/_components/light.mqtt_json.markdown index 6313b71e3d..9455777285 100644 --- a/source/_components/light.mqtt_json.markdown +++ b/source/_components/light.mqtt_json.markdown @@ -228,3 +228,5 @@ Home Assistant will then convert its 8bit value in the message to and from the d - [MQTT JSON Light](https://github.com/mertenats/Open-Home-Automation/tree/master/ha_mqtt_rgbw_light_with_discovery) is another implementation for ESP8266 including [MQTT discovery](/docs/mqtt/discovery/). - [esphomelib](https://github.com/OttoWinter/esphomelib) is a library for ESP8266 and ESP32 boards that has many of Home Assistant's MQTT features (like [discovery](/docs/mqtt/discovery/)) pre-implemented and provides high-level abstractions for components such as lights or sensors. + +- [AiLight](https://github.com/stelgenhof/AiLight) is a custom firmware for the Ai-Thinker (and equivalent) RGBW WiFi light bulbs that has an ESP8266 onboard and controlled by the MY9291 LED driver. It implements the [MQTT JSON light](/components/light.mqtt_json/) platform and supports ON/OFF, RGBW colours, brightness, colour temperature, flashing and transitions. Also it includes [MQTT Auto Discovery](/docs/mqtt/discovery/)) and the MQTT Last Will and Testament is enabled as well. \ No newline at end of file From e54751230761acc544b1cdce2e8251a62fa1fe2d Mon Sep 17 00:00:00 2001 From: Dan Nixon Date: Mon, 26 Mar 2018 17:24:00 +0100 Subject: [PATCH 081/371] Update optionality of Telnet Switch config (#5007) State command and value template are optional parameters. --- source/_components/switch.telnet.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/switch.telnet.markdown b/source/_components/switch.telnet.markdown index 858a0b21b6..ef1345cd5b 100644 --- a/source/_components/switch.telnet.markdown +++ b/source/_components/switch.telnet.markdown @@ -39,6 +39,6 @@ Configuration variables: - **port** (*Optional*): Port to connect to. Default is 23 if not defined. - **command_on** (*Required*): Command to turn device on. - **command_off** (*Required*): Command to turn device off. - - **command_state** (*Required*): Command to determine the state of the switch. If not defined the switch will assume successful state changes. - - **value_template** (*Required*): The template evaluating to `true` will indicate that the switch is on. + - **command_state** (*Optional*): Command to determine the state of the switch. If not defined the switch will assume successful state changes. + - **value_template** (*Optional*): The template evaluating to `true` will indicate that the switch is on. - **name** (*Optional*): The name used to display the switch in the frontend. From 50b20f06da39c44ef71fad232633b20efa9197d7 Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Tue, 27 Mar 2018 20:30:16 +0200 Subject: [PATCH 082/371] yeelight: Operation mode service added (#4964) --- source/_components/light.yeelight.markdown | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/source/_components/light.yeelight.markdown b/source/_components/light.yeelight.markdown index e3fc28821f..b9808e7760 100644 --- a/source/_components/light.yeelight.markdown +++ b/source/_components/light.yeelight.markdown @@ -63,3 +63,14 @@ This component is tested to work with the following models. If you have a differ - **YLDD02YL**: Lightstrip (Color) - **MJCTD01YL**: Xiaomi Mijia Bedside Lamp - WIFI Version! - **MJTD01YL**: Xiaomi Mijia Smart LED Desk Lamp (autodiscovery isn't possible because the device doesn't support mDNS due to the small amount of RAM) + +## {% linkable_title Platform Services %} + +### {% linkable_title Service `light.yeelight_set_mode` %} + +Set a operation mode. + +| Service data attribute | Optional | Description | +|---------------------------|----------|---------------------------------------------------------------------------------------------| +| `entity_id` | yes | Only act on a specific yeelight. Else targets all. | +| `mode` | no | Operation mode. Valid values are 'last', 'normal', 'rgb', 'hsv', 'color_flow', 'moonlight'. | From 88c8cc2ff102f0ddc7823bde8a34016fd633786d Mon Sep 17 00:00:00 2001 From: Mikael Svensson Date: Wed, 28 Mar 2018 09:04:48 +0200 Subject: [PATCH 083/371] Template function state_attr to get attribute from a state (#4981) * Adds docs for https://github.com/home-assistant/home-assistant/pull/13378 * :ambulance: Fixes build error --- source/_docs/configuration/templating.markdown | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index d00a879b7b..5bd5d45789 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -68,6 +68,7 @@ Home Assistant adds extensions to allow templates to access all of the current s - `states.sensor.temperature` returns the state object for `sensor.temperature`. - `states('device_tracker.paulus')` will return the state string (not the object) of the given entity or `unknown` if it doesn't exist. - `is_state('device_tracker.paulus', 'home')` will test if the given entity is specified state. +- `state_attr('device_tracker.paulus', 'battery')` will return the value of the attribute or None if it doesn't exist. - `is_state_attr('device_tracker.paulus', 'battery', 40)` will test if the given entity is specified state. - `now()` will be rendered as current time in your time zone. - For specific values: `now().second`, `now().minute`, `now().hour`, `now().day`, `now().month`, `now().year`, `now().weekday()` and `now().isoweekday()` @@ -114,7 +115,7 @@ The next two statements result in same value if state exists. The second one wil ### {% linkable_title Attributes %} -Print an attribute if state is defined +Print an attribute if state is defined. Both will return the same thing but the last one you can specify entity_id from a variable. ```text {% raw %}{% if states.device_tracker.paulus %} @@ -124,6 +125,18 @@ Print an attribute if state is defined {% endif %}{% endraw %} ``` +With strings + +```text +{% raw %}{% set tracker_name = "paulus"%} + +{% if states("device_tracker." + tracker_name) != "unknown" %} + {{ state_attr("device_tracker." + tracker_name, "battery")}} +{% else %} + ?? +{% endif %}{% endraw %} +``` + ### {% linkable_title Sensor states %} Print out a list of all the sensor states. From 9cc2bce7614cb67c999f5372f1172b7d67d9ab21 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 28 Mar 2018 00:18:38 -0700 Subject: [PATCH 084/371] Make edit links GitHub aware (#5038) * Make edit links GitHub aware * Fix repo url * don't mutate existing string * Move comment * Fix url --- plugins/environment_variables.rb | 17 +++++++++++++++++ source/_includes/edit_github.html | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 plugins/environment_variables.rb diff --git a/plugins/environment_variables.rb b/plugins/environment_variables.rb new file mode 100644 index 0000000000..7d9203f164 --- /dev/null +++ b/plugins/environment_variables.rb @@ -0,0 +1,17 @@ +module Jekyll + class EnvironmentVariablesGenerator < Generator + def generate(site) + # https://www.netlify.com/docs/continuous-deployment/#build-environment-variables + repo_url = ENV['REPOSITORY_URL'] || 'https://github.com/home-assistant/home-assistant.github.io' + + # Rewrite urls if repo url is the ssh format. + if repo_url.start_with? 'git@github.com:' + repo_url = repo_url.sub 'git@github.com:', 'https://github.com/' + end + + # These values will be available as {{ site.NLY_REPOSITORY_URL }} + site.config['NLY_REPOSITORY_URL'] = repo_url + site.config['NLY_HEAD'] = ENV['HEAD'] || 'current' + end + end +end diff --git a/source/_includes/edit_github.html b/source/_includes/edit_github.html index f599869c81..b5fa2329b8 100644 --- a/source/_includes/edit_github.html +++ b/source/_includes/edit_github.html @@ -1,4 +1,4 @@ {% assign url_parts = page.url | split: '/' %} {% if page.hide_github_edit != true %} - + {% endif %} From 2707746624c1513f704de5c08373ee830692dd88 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 28 Mar 2018 11:28:55 +0200 Subject: [PATCH 085/371] Add details for values if the user should replace it (fixes #4999) --- source/developers/documentation/standards.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/developers/documentation/standards.markdown b/source/developers/documentation/standards.markdown index 0a6d2fa7ad..adcc3bd521 100644 --- a/source/developers/documentation/standards.markdown +++ b/source/developers/documentation/standards.markdown @@ -28,6 +28,8 @@ To ensure that the documentation for Home Assistant is consistent and easy to fo * Use `[string, int]` for configuration variables that accept multiple types. * Use YAML sequence syntax in the sample code if it is supported. * All examples should be formatted to be included in `configuration.yaml` unless explicitly stated. + * Use capital letters and `_` to indicate that the value needs to be replaced. E.g., `api_key: YOUR_API_KEY` or `api_key: REPLACE_ME`. + * If you know that the API key or value contains [control characters](https://en.wikipedia.org/wiki/YAML#Syntax), e.g., `#`, `[`, `?`, etc., wrap it in quotes and add a note. * Component and platform names should be a link to their respective documentation pages. ## {% linkable_title Templates %} From c74ec2dd24541d2872589dc44dda478c1503bdea Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 29 Mar 2018 09:05:24 +0200 Subject: [PATCH 086/371] 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 12e1dfde02..ab661f2508 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 0000000000..f3764c3d08 --- /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 f0bff4278eb37274e654fa150278412c98fc304b Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Thu, 29 Mar 2018 09:05:42 +0200 Subject: [PATCH 087/371] Yeelight Smart LED Ceiling Light added to the list of supported devices (#5029) --- source/_components/light.yeelight.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_components/light.yeelight.markdown b/source/_components/light.yeelight.markdown index b9808e7760..002e20ff1f 100644 --- a/source/_components/light.yeelight.markdown +++ b/source/_components/light.yeelight.markdown @@ -35,7 +35,7 @@ light: Configuration variables: -- **ip** (*Required*): IP(s) of your wifi bulbs +- **ip** (*Required*): IP(s) of your Wifi bulbs - **name** (*Optional*): A friendly name for the device. - **transition** (*Optional*, default 350): Smooth transitions over time (in ms). - **use_music_mode** (*Optional*, default False): Enable music mode. @@ -63,6 +63,8 @@ This component is tested to work with the following models. If you have a differ - **YLDD02YL**: Lightstrip (Color) - **MJCTD01YL**: Xiaomi Mijia Bedside Lamp - WIFI Version! - **MJTD01YL**: Xiaomi Mijia Smart LED Desk Lamp (autodiscovery isn't possible because the device doesn't support mDNS due to the small amount of RAM) +- **YLXD01YL**: Yeelight Smart LED Ceiling Light - Youth Version + ## {% linkable_title Platform Services %} From 069a9f570ed670ec05c11366f5073a3fd7d96751 Mon Sep 17 00:00:00 2001 From: Marco Bakera Date: Thu, 29 Mar 2018 09:05:59 +0200 Subject: [PATCH 088/371] 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 d00a879b7b..b8752c54ac 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 cb0398bee5f34b13a3e376c661e292b891dab745 Mon Sep 17 00:00:00 2001 From: Diogo Gomes Date: Thu, 29 Mar 2018 08:06:18 +0100 Subject: [PATCH 089/371] clarify default db_url (#5021) * clarify default db_url * Update format --- source/_components/sensor.sql.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.sql.md b/source/_components/sensor.sql.md index 28ec379788..e676ca9d43 100644 --- a/source/_components/sensor.sql.md +++ b/source/_components/sensor.sql.md @@ -37,7 +37,7 @@ sensor: db_url: description: The URL which points to your database. See [supported engines](/components/recorder/#custom-database-engines). required: false - default: Defaults to the recorder db_url. + default: "Defaults to the default recorder `db_url` (not the current `db_url` of recorder)." type: string queries: description: List of your queries. From 55871908661d8ceab9cc9b8f7cfff906c985fcc3 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Thu, 29 Mar 2018 08:23:20 +0100 Subject: [PATCH 090/371] 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 386adbc7bf..7c56772af7 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 091/371] 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 de3df29894..f143d9ac34 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 092/371] 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 7b3662b1e1..5cc0b4d9ea 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 093/371] 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 bc3be8cc44..e1d8a5f01c 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 a8cd931cbe..9d0f18923f 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 803e8b40a2..7e93130271 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 de70d05661..5ec302887e 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 4ba9e004cd..871db22f68 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 b19e182e2e..6fe9d5ff87 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 5cac74b560..34690d6b8f 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 f27048d4e7..7acfae7676 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 96d9c48c0e..0abf2b3dad 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 ed696574cc..6c1017fdfd 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 29bda0c15a..da4f718eb2 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 a41ec48ab9..0c0cc9a7ab 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 49b5f3161a..cceeffaef3 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 03c5a217ed..919b798f9d 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 15431df445..4f9e03870d 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 800f2f3378..e526487b0c 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 afd31d7e5f..53ee103784 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 cf55f91c3a..d39d8d3633 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 094/371] 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 dfbe48ccc9..40b642dc0c 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 095/371] 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 b49b21b365..1c6a6d87ef 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 096/371] 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 4e7ea750b8..d046396835 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 097/371] 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 abebcec803..0be523adb5 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 098/371] 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 379d601f21..fc62783afa 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 479a771329..e82ade68d1 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 cbac63c935..a4df212e8b 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 2003ecaa25..c9d1aabd50 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 d831435832..93a2e78ff3 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 425055f48a..186d704e17 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 04a8fcaa6c..0a3b5de358 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 84335655d9..160b4f75f7 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 7ff3bc8e0b..92ee5c62d4 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 198203404b..962300ed1e 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 4ce686ec64..bda3a36a7a 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 a217158276..c090862421 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 0d730e2f7a..3a455d4ab5 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 0320a66d84..5632a8847d 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 74260e9395..68c40b1aac 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 cf2c555626..7fc68d0dcf 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 53f2e26e79..558f9098b9 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 01d9910fda..affd029f63 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 67bdb19dd9..6799e1feb5 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 6754b57c87..1415de1e54 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 217b625b8d..0a250b6b86 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 6c1017fdfd..46be358b61 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 c85b54cd78..82f8679f45 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 11644dc5b3..4946433e63 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 1a607624d3..8b1afaa89d 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 64584db11d..15a6b88ff1 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 316769ff7c..82c36d9dfa 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 c74b962e34..2d9aff6a04 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 2c014c3054..19d9c876d9 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 9169a5091e..b3654ebbae 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 4257826b7d..95c7b9b0d9 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 6e4e3919a0..3eb377e046 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 762810d6a7..4daf012653 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 25d6ccb5e5..f242584b9d 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 f6e192bdda..a3b9af23b2 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 e7cc678749..4498c4d328 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 3357ae9193..6514684183 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 e4fd1ec447..cbe6049cf3 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 b2c9bfdcd1..f3eb166564 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 a15727f86d..d9f4dddf51 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 16ae6a53f0..a383534704 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 4a7a2cfdac..189f3a1b99 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 6527c803f0..a3efeaa0a0 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 3ba23b8c19..fbfeef75b4 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 6d00c42a4b..f82e580257 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 1b85b03aa4..26b73e0aa8 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 6580d26e31..8673396fc6 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 09664ef231..6482d372cc 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 9bf884e0c2..2555b1fb80 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 0f3bccbb94..0ebf5fbafc 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 099/371] 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 71b8a2f561..c3cc8cc441 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 100/371] 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 ab661f2508..2f39b725d7 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 101/371] 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 2f39b725d7..9852420f82 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 102/371] 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 0217a91c6a..8f3862fdd8 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 0724d9f456b90313e5ddcf07404ce98c57c21cb3 Mon Sep 17 00:00:00 2001 From: Andy Castille Date: Thu, 29 Mar 2018 22:00:54 -0500 Subject: [PATCH 103/371] Add new Doorbird config option (#5047) --- source/_components/doorbird.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/doorbird.markdown b/source/_components/doorbird.markdown index 4ce686ec64..31b42ef729 100644 --- a/source/_components/doorbird.markdown +++ b/source/_components/doorbird.markdown @@ -31,6 +31,7 @@ Configuration variables: - **username** (*Required*): The username of a non-administrator user account on the device. - **password** (*Required*): The password for the user specified. - **doorbell_events** (*Optional*): Setting this to `true` this will register a callback URL with the device so that events can be published to the event bus when the doorbell rings. +- **hass_url_override** (*Optional*): If your DoorBird cannot connect to the machine running Home Assistant because you are using dynamic DNS or some other HTTP configuration, specify the LAN IP of the machine here to force a LAN connection.

Enabling `doorbell_events` will delete all other registered push notification services with the device every time Home Assistant starts. This will not affect notifications delivered by the DoorBird mobile app. From 7ccd3b98ef9444d473cb597d034bfc05ea5668b5 Mon Sep 17 00:00:00 2001 From: Brian Low Date: Fri, 30 Mar 2018 04:52:46 -0600 Subject: [PATCH 104/371] 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 309795f795..e5184d2ed0 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 105/371] 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 0000000000..c1f1e2c9ba --- /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 zcmd3OgXP>p#UiH3v9X`HLlP9}Ie+>eGkSQuW(||xOmp~wdURR00 zi24&hBk+UBTv`4ZtSl8TLr zYVsKbatEUL?5UQ|_{LO#KO-h!=42}=DZu3Bou`i#vM%?ZI8WunNhFWevXaZ#-CU_u>D36gBu@7#;Gz zjip}aJ$P=3K3W6u^yL{zb9QEdKt*d3zHG(|( zXyo7WTqTd&Ivf2IYz+=J26cYM_!Z|1S{2EPl-MX@JKyIUleG20H$C-{*YRSPw2kYw z^Bu$19G|;PBn$z`k*0flLUq4hS+&`aG(kpbx$j=ai>7B$y5F+AR(C^~2)XZUMRyl+ z=lrS}-i4UJVt6;{b&+E~n}#)QxWZ?4mohFtuO@($;uQ>mth|WqB2G^$%70|q6i`Mf zL^Y4DOYgh~3HJHVPCWA3AR_~*b7|u4Y^3W=`}b3?Kt4bT^}wx9h->R+G`#}t{#bJK zjjFh3?6-;Qv5M(lvdbZY1Ru_E;yu*kTie`*a(VIn{1@fN8ZGH8qjJ>LkUQxA5%0k= zU4!q+F#)%txPa$kZ+(KNT$a_j7X{IEOYo8-x5uFspC)6gy$>tlmO`_3r)8G;NR})Tb&w&%??1tqGCe z&fs^4v)dq0>m6A73T@e|r|0&kWNttcSg0Iy=EI)Mm!sRP?ZpH88(&!~OkU4o!eS39 z{LqD$?3QbtjBS@kRd@yt1mWILcw?EPqgXB}y3J<&EGR4EwYS8NS--M;N4gN=!y z&fa;MAk~C7RG%AKD6|{gZ46>6>M+Ak#y@%nEiDQDT(g*I*sQU6bxLFZ=~PhBZzb1D z=!;iHZdD)?i-N@X)Vj&R361bO+xP1oxSn{w<28#_7}mJjE2?`)$SakMzmI;Y9qrLS zKn4kRF3s&7l=ZfzacN?f0xst82=47^W~kwP;DNTFZzanL=m0-6vzm zO!k8Hrip9nyNy=&Psj79Y+?RkPQ9Z9t6&P4HS|Z3`alc@!=# zr>oiZ8uVnQj;cpu<{v&EZhwVaUwu;ytR1tfBl)$~`+l~cyhcpcXDLmi{_Wqu>42w% zICVg0>K;oP4=(rW$eg60PH64pBOLbpX39Ih;1h?AqtMoxvBcmydd&FmQpVfq$8jI5 z9$C${?HEgFu3w{6#MR0iL}hsZEvTm!BE=rP2A{yd2$hgg3D^dpEzi^M#q#REomMm# z>rNzrLm$JFbhw}~?l{dl0lZkIK}AEJW7IWlID`(vFA4vmvcs(dGB$InrfUunLV*t$ zdZp7PwFeH7>VD?$0zb6@Ep0L>hK&>h7uuR!U7L;`sx5MTnZ|%&sJ3T}1-k)*)#jK= z^JBb{7O*{;bp(*9*6BY76|>_aLB#SJu!+h=hk2C*!bsyisMNYceTn}aOQGeVMEV{+ zbpzh7J9{3gpDX{q`wNp^JWpMwfzks_U3XpWg*bV}$V71@rdnRTf>+eGcu+pmSC?fnRbN<7#N;n-Piq%dzG@I7FdprV zs_Si7JN5&SUjASS6M%KB;;-mGKwE-H84SIm{t1czuEqq~1;$-Di4R7sIuR zvW&Y>t4#vxn3+nR{HcJ=f;VAU#~|5loa{2E11z$IV)$nh7M;=hj;N#vr_Y#f%2^x3 zM4jB$S>JG$wmA*2<`gYU_~Ry0^?u%@xX^R!T7orpb$9P|%fQ8ZVYAf>yqV1;ne3Zn9Ssv%DX#v6?0(hcfn@rPSrj3to$y^Wi-&(#|O6ZWVtw%G=R1ZRi4`Rg0Z@8 z>*DBr4U`z-5&om1+$R>QU+JXJl^gG*cU6Ep!0iZRyTHXUF{Y#jrP(xQ$m^q;6Jg}#y@cc~c(yC!%08?5X=PGRjEVgcR zYew)(pQ-vt`Rng#TK+32eKy8&N9p29 zSGY%zfhU%Bs@T+ggR_?8nDAwIm{g?f%}l-W<3gACy@?r4yZW2Rqkz;@QtI_PWI0Su zUE`Cws4+p_ zw`k+-2?nPiD%b13L?gWh>X|>{KM-xXsQD|V=kbV)NTGa`DAVTZP*`Kfh&>tp&|`s3&3-D~|6?ywbG(XHGU z<**Gc#m{M94NuFFHhXDo>WECZ0#B;e+y36j`FvM_@-N#X9s42?@vMknFZ7*Lcq95Z zV&Ddadp{(*(|>}cpAAKiy4YOY z+K8`y_?P%!$1lFoea~KigQ#5YB51P-kUSi2){c$SAu3HEDrT1Cr-7Y)mFYI2Y84la z(QxjFi3(-S&++<9v!>pe=`#oO`92=^wA3$<3zye6Jn&~YlYL31SQA7{Qz}ZPZsW6Z z38$EG9~BJrL67m#fnU`FgXx4z6L9b65|3XF%gU2R^MpzW7!S(!3K0ty(HL#+@4ud$ zXrB%&UahZs&7=Ec1-2lk>n`1%6A zu$2Clm&^q9z4{mk0Z*G&!dXEweMJV+{Vsa;w0|J-26joI2zhlO=?v%VQX8wg)Kx^L z)kjgBudDw6e?h#le;J98BbTR)GhA8D{?QyDOM=C2)swWPNxAU1yegwaO2ig!f1RA# zLOu4I`xCQ0BT5(5d58?seq>SeM*urpT{VdExBJVv=Abw)mbGnwuERKW)OcqooDB%e zdv5KFX=dkeSL#?tdUM&7T1uPxZ~vq*_4n+;5RR8@U@leJ6x}e9l)#i#N_yt_l5PUS zX~M4lJ#j`~?C-%;mC3+v==MJOSQ0tE3(ccu98HKr#c_WkK3Yzt9<%vHCxJv^Ey@e z`Cz(zeNc@?R-pgL=hI{Tyzv|rEIok>hdCINY00< z3h$G@Ke+EZ^IE3v1nv-yDo7{YJsTAjlPqa)Pq@1Hcrb44^~0<{$;U74Zj@9i%->FF z;hLNkQjyQGSN&0kt85q?Z*g@=-<6pUO#*%{Vky$pwm4gNGO19WPwuGBiw<;^8myth z^tLR+Nq=oIJRs##!sD5yIWiZEsSk6fw~>)MW3k=&N5qwEvZkFCE~2GAEfT=<#$vM* zP+%8?R3Gk>v%?>#GVsre4&AJgrCvc?~1!s7QZU;iYDed>YrG@h!JUOL!pw z#2!_0xqatIYr0oG4kmAoS3cGxm`JBP=W$f#CW`C5{8wTq_XNi&5b|~#DSMzbOa%Zo!F}+yg{^S)G;VXgewPzqn2v5 zU#WKre?L5vBkF7CeRm+XG6W*XJc9p2SwCi{ZGF=A+0!3wY-_K!?CWkvV!Dwwg}tyr&B z@hu;!I0#G_7@L;n7nAnez@L6^riFZSz;3$ZT9ZXQ1EjBKrRMCN;PYZNE?rBu-Vffk1*X^=sifTXkwZ06{v{0M-V-VnML<~DDNvM{Cno^n|Hb2~h+ zJp$3TkrSDwCuGk!Q#VmP>TK~6*T$Xy@PSn%3iaJYZq!cyx}{a0I)i67V{-n_2bU03 zH`EbV%vzEjhyP?7(1gPp|4)! zMX%j0TusVcsv8NiK4h?GaS1BVyB7I* ze>ilHe52F$yOv|8v#m(#2=j9fChS7s+FQTR)yB*8rWPCDXKrEC+WI0tizr_ufUKBD zqU73aLPs&LZBu@~Emeg=xxV-NIL?U@IQ{nMsvOh!oMPi~;2%(`!<%epGDn3KXfCA- za&->_X|1%bO!aBM*PtEnmzyGd9xn@vo$&-pFmEO6ObQ2ucRT&3lqv`8cjrDIN0Wz_ zJrq9Bi#!q)Fm}+t>E$o1cU{g}a!@Nv`r7AIZoZL*E|?rk0~aDRGrzKs=ij6d$IF|i zfQ~Vb9An4cw6(onMwXM**E$@PQoh08atx(@`MK8TL?e=c<5_ALo8srkh6D4t#gt#9 zMPr6s>N#@HT0T}@xAidaTVaP3%H8sYK>CDxM2Jc>9={Jqv?(rKsv7{18?Hw3!**KV zXdmPN1C#2*zM6t*lpvd8?SKBz3-R->N3v>aH~0a5>cq%OGLzUV+w(#VAq#+!xULgI zToEYxnB)o9ttJ^m{um=xv9@3C_j`vfet+c(!`g>X>UC7bxD*oldG<>{nqGboGqvNn2+-{H;E(UcBA(9e8;2Rse{tl*2(x~Af!$$&=`jZ4QI*M z@vl`RgRSnjD|ksMX`^ru9cW3xWjRz+LGvYgh~7xlyTUXM+Z(Nh^JNV!JSI}rfBK$z z@&}__@}LCBD;9!)zgYs74>D!OnQR)-KorqHkNFGP7!Yp6z4|euD)pBb@G8hZi&$d9 zvZ&dr7h@{&NpI?2F1hKT*#2-`k)u6NM4w#GH_Fn|()sVBCIgNV9d!JXfBu4D_XzSD z3Z_F1fqa;jl@C{WAY0-sbz=GIdthLweK^QIcx>EbV{<(xHK8$aH~R@lYq&!n{ZKo3 zzbe@H;5skSh}S_4@Es-A?vO}U&21yE5xhyx@rX2%wET#^pPcaxd$UPqqgt-B8W*f> zI`D87$>TKq+s3gbCZ=eJEAy#g@1s0@yIRH-w|E7-AdPJsV0VYf0{GrPC3w|Aa3@l^Gkfb z&hBy1Gvt|gMJ<6)HDP0}sL?`D_W)zhqU66(M;0(Eu{BZBRG~*NvqN63snX-_Ga45u(Qt+EYGKWJcpxi8e3brap9uLedi9d) zbZ491%ND!SL`#WoKcR?4e~!K*_mCT@2wvXQap}0eO({Tn$`i}S)Y=#Vqb{s`{v;D0 zhEYqWrA8ye+jOR2(8E)Xew>_u+c7WBLFlXSc#MYueYO1pZRT`V1;;F><_#f!nh(U} zklN=NvuIEG>1>@_H)T)g6Uf_Mrd-nNUY0<}E*FS<6ctDY6m2pn+IgoVkTxD*AAp@Q zi@mf@-Zjfby$`%Lb3Xf)c{JYnxO{u;$>&saqi>QgQDh9(n$0WPzVc`Jk)$S2ft+(n zSDVj>w96Ae30I`BCEEK@r}2)ZyH=le+I*WoyapCHx^<({*C4Z zQA=~Cr0Y@BTwAWQt73Dx{Ex)HEGgA8`<)a&c8Qu0Xvpm`A<^TZ^mLIAgX5*z8`E6O z*%umN&Xi2ejXhbFtP@aOp8w3qbGu%~rj=rau;PVa>x@HQ0%qjvuL1GM z>v+eVQ_ZIt0}s8sOk(y^$HL4*K1!8v#C}T$AU3-)%2wXs;ln@>;fMyY0WEtANuO@0 z8?tyU z=}XPduk!4l9f2c);(be=(c*>Rd68I`(Y;xK2NIP1LL6L?_tA%+cDiU+M^X^o9Jx*t zeaS-OX`Z5K{@cTMO-XHK&(`&1OI~g1@KriFUw<3XOSHZz!T*3YKsxd%vd-dh(cE!7 zPGxX2^nH)E#gSCwz)igg=^?uIBf;FFA-Xyn!#DdC9lk=F?G03C_zO`xAkegWJC~fgSP54D{lksPft}72nFK% zT}A!wY8Yzd@OYsN@eQf!+L4$&h0mETidb8#F@llr{x(dCQiKCzRZHm>A(l6xmO?3bewty5R4U)7Ic z0Xd+#IIkKK;y$q+K3^q~ozq>1^+XSu?YEGlX5)68&5Q^1!lsTsL4GF< zQCD@S>6gwca{W9sq^Zm)8_j>;wr z!#+sZjo2I;c|mIXCbtti*HIq-({!dhk{cOse|?l0q@EY$rGbsgi6&U%mY9C;nS_D% z&CWFoZ!3#ZkM+^t$323nBWZbk>ZvYUI>kI*Vsgo?bSs3EQY zmcu~`Y_i_EFLJHY`sScnAIRURHn3n~$VW%|7)_Q-j(MoQlF#0!*NqGzD=X2lzIajZ z&0@5#r!GY8ZW=(n3@Fqz^fBhib;6ZM<F8R;6azl-7ti*GOUZ$ajKKayvy{OUBp@yThQ*h*Zfa zul;J6_Gg5ldz5ph=y;3}$dOIdkkyWIvaaAtSZQ7u^sAT0>jkC0`M=M!mz4>K5t06z zd-2@JP*%lj3NugUpP}{2ohVA2{L}r8C$(){0lUXdie{x=PQy(xg5vADjP!GMn$X)O z2a!4Ex4u3j?mh!La-CCuR_f6=;NIhZ##yBO+GBh5SM_du?j9W;$45EJgpuuY9`NlFzoDz)Xs55-v^Zf-ktVr^lcE@K zNZcB;JZsJIZM_>jwW=A`xFis9-6sbi8e9!0m0FtAqw~33mZqqD_4J24=P;qIm4@Q6 zYS;MWps%+uii-1DyB&g9suCxp?@0A^H@1Y$ceO#6L}K-7Q=A;h{sp#|s|kT{?y($q zGcEeiUko*fzftv>=@agYub%TSd7h3xMYO$`1Z8gCPMQqgWMGXwREoj2jM5gmjE->u zbm2N!YiFPkdv}~+@6ywXfujCOWF`|n%`jQrgZt33im9D_ogM+3lakr3$ogJ^y7pIe zK0HbV`uNAxnv+7wD^LN0Iyc$5Q(DAi34#LQ$W$GAS!AD#&11%Pef|5wV+zEZer4>` z8qbJdGB=3i99Xw=+my$}IiC|Z-@#@S+*$}Dx2BVvzX}y$Me+7Gz;jlyH><40kPXNP zjt`zQ3hTY)AXZA(v6uVsf?~~~&Rw4oWq&pBNVy zq}DP%qdwYF{gO{Xl?e8y_xl`A6va&0wDx-n02K24t z(kZr`r<{Oq6XS0Wv2#xs(|3mJF)=Du3Vn#*jhGHFRLb-P2Q%ym%5)6j=~eU2$sm!= zzGG6=HLSRB&rKG5G8169&OWmhpjyjO_e!!o12}%X^J;F}u4!D-%gCfJz~K^{(@I&l zRy19H@miNf_7cGWw50)NI2Qq-mWe%xfZd)|-N{wL!E|1|P2~(3UX{72_&`VM)m7(b zLTO&VF(@TRGhP?K605xNY-hPg&?N5tZ| z=Qk?$pJf{!=a-tD8F;N3Q|dUi`cEvyba45=NN<(r#|?Q`-D) zy9uApiY8e-cdxX^4S-{r>(dIrpEN(@RG;KrCO|&o;gDy!9oYorv-r!M7D^Jt+RLzuEi-W&OIeB;ccuX=$AvA?_IXyu6!P|7Hmj>Q< zx6~ZewQ4icqoCaJlY`50^jgPzG05D{Q}K~V^k{R;kAn>*kt@ZZLag>lOXc3ZSuoZ1 z!U(vIt;Sue4n3~aWKzm!uLBy4%2luYZ64@yew*<+QV8yi;#q%dqRc}nx28-th0aG$ z-0fRUAT^I%VhY$H6Ppr&Uvn}q4HC_m@z+!X_(xaO_Ns~JQuVQ}DTk1%j{I&E(54Ph zy?8|}bLc9p^bkno#QB>M19InHy(`HJ3HwP&SCqb9*wIIq`NPq=;XxNP2Tg}Y-g;^f zefgUaz?A?aTgheBMCGin`guL4`DSR~{b-%8!A93$3(ZsSaL_EaFOsk~e|Xv;J1_fY zmu$EAhtNSE_R+h!Pp6V^@2%4<%D`S9D~a_vzEywUlSqhTQ?(@!QB)GuXoId73=d-k zcEiSZoxXH0iOE%2GF=hw%jRrnOl5Hd*7be5oNF-dha0Hj{VLf!ENgSvd$n{@y9EIL z^hV@@G58x&jk6AH5Ph-(=SFx>*(3dc-Xf2|RvU264mJy4Bh&P1V}ytR5Q25Ro-06p z0*5+-{Hd*5UyE_0qKbAlpvs~Vd4*p)C;+wP#+nZgM~!s_mdn!m&m=T!UGC@qhwY8s zsi$x~(xgu#9)+ghQ++RK>bN@a(pVdWxTwa3BlqP^X(?eE#kNHowS@RxmBE_7O_f>u z*mnyxen zLBToY8E*b9+*2A`%W?Dxx!q2iZEP1+GXl?=c<6&_@{BNv_xAMSwJi{Yczh4LGZK*5 zk&{YLzAMrOmJR2=0#5VR{X5o1p_R-mDW=TzxtO{o>OQWTqvy+$AACUyGe6eC^e^BP1x&uWnPT$Zdo`-X30u%HQOc(iW1TkkHPp8KPs<`qlelGYLY$AN_)>gPdU z;m`I7&+9+Q2)N(gqtFo694n?V`aG^OZ2zbvgI80zPVP2E(Xf)ZT&AxL`eHmH+PRZf z`%-4owRUE_`Tg!F1A-0vd1V*Z5-@?55s@IlVV}%;4LsKKu2mV)PMnTl5!W5Ab5S;q zhkCLp)K+5BxUU>ft}1PmtJ5cr1!Q-Z7gICB^VZJ&8*-*3CvH3Nembk!E(5@L4c)&` zHgB<|qwZH#wADbpTuwg{6Fq7(CnZ4cWj z+S5+50kPimN}LWX%GjXUNaCLb5rT&y{td7KdS71;xab?pOQ6wGjYi8 z#w-H0H`YBSOlH#U9?`GRquqU6``fL#($cP_KqZba;L!G^#7@-aSlUqXaf6khiOw2e zGXW+SqI!VcpLePId-fZgO=8Dl&R^GmKWiar$evx@F#ym7w&VER)G^db(}hk=h)QZR z4l)89jz+|aRzZTkTf)KQ82a)Wb$h$y1O-g<;`C>Qq~(`{n6 z|2e;u0Du{j#`T6d!&Eq#*7qCqwS7zhMPSO>Ow6#^xY2G~wO%EJlq_3iU)D5y)$G+&^Q2#K{BEGl_SE|W*o~J+ zhVhg~YpPz((lu=WTITBDue=&`gB%&E?Guu$vnjVMigWx{ayf?kti zhV3XsyFXD0tvyzC%~8^434YwGF0L^y7`@a5S`Cbmhi`@OoqTsLUoI(ee)>Ukuihrk zD{|>{CHIU@WFgSjH9>tM)lo$PtzQ@qQ^I*WM!)K_Ga?yh&c6UEKP2aGUP^Dp|8E68$u0=6l1sh zYv98*8sEa>8TjUmMCB3-bjqQohB0z2bn+jse(H2l6oX~Yx&OsaY1Xh!SPNOVD%2w5 ze?6EklrfTHuy2!<(ih6H7<^3+Loqz?L$@Po zH2Nl9)6GvHq!|z2f8~$gj;PG}&Hztiby5vu(aIx=2z5{tmy^78*)0daCGN}XngfBtWd`URIqPH`V?YxJiDmEN6>qfwkAzZz>3(%#B! z?E-dlhWB!YbwjrnvWK#{yLCM7gH+}}5yY85Nd3No@eU+a9^eNEozhGHUglA-%r7jt zV?euv(TUGH@o9UV<)t?Y365xuQgPF3e5t(i^o#m(_z)? zDXRY>m;W+=roOx5@B1@H?Ry04<7dqK0=2;3AI^tSWZ$WX5Vy!eD*x-rgp7oOg4R9b zcHpyDn$5QNm*2(wC>OKy(7dc~93y0y2^m58s0Co!OMYu1d3C-=Qjdh!z4unxH96D| z!au%G6%d?4i3P$#R&Pm#*&>|RU5C;I9Ii=a8)xFNZ+A`f*t>!=)X=``;ma{B~G@ca3V!PkSJSz!5Jn6*4CPIZd}x2~z{tHu*{A8Bxu=w6|X z07N@U`@?x9{oXujy9M$7#m3)Sgx9J~<(nT?AgkagPSis^Ju+lxh_?9KJ$?+WZ(AN` z8wp-YWLUe$wO8<>%j0n#tbS*J%T(@(cX5*ZuxL0;sF;IR;aR0+W8zpH3MC?~YkUsv zDU8qIN+@Z?sR=}p6b1o8ov|XP%0Z{#vIghdS>OPdx?=Ld2^s`~NcQIY&9i##?W*~3 z0btbSs@LKCF*Xq}#(ehD()h4zP=r`naS_+=W8K1QCOj$kxkBP)41D0Y2wrVEF8mB7 z)LK?gt78MXz(HS;-MWXE*})HnR7;ubW~f@7z^~GuBf)_Zuy`hSDK(|rjIXQ1I~ zxn<=L>jE$BF}_FKM!3bZ{;|B|(Sk&^fM!XpeRg}+-5R7>X=?Lz&2TRB1#uYdhs{7&ZvetR$pNlscv4>lqgaNZ~j24)+b? zVBFsbVD8G4j`J%p2qI+FVYSUeFYh1EZQdvU9&84dz?2sPDw(V>o}l^5B@eNZr|@V_vVn9nod z0&?UvRsJ`tIGDA3w!%*T?&fOQFrz*X)3W*S+N9A5i>^a9$T>;ZEdH(QJ4m(;W#GI( zY#2VPnWwL+o5wMf59qp{Zq&iHqzKK*qFCEQyr9p*Ak;eDd7fbtAPg&o6tohFkJr>Z ziFMLDoE$&)lQy*u#=j-;B<^u71Tma0(8+F4?(x@r*#2EJmZ?`sT=TkC`G9KD{s+X# zh`o7_{Tn9Ye~NMgRShReuIHF8s>!~L^5LDpVd#S;!eK&0vOrWl^{}pCc;~5eXyVnP zf72`9Y-%pJp2NsCHFBAnR|{!9)?bLwQ`EFVj2V2x>dQ-hJiJn>gdQd>4^eXbxA71j zSu$>GvBvy3<><`*OXUH(x|<^$ELGChvXP|z;D(4e8Y z$oZ>oo<3CoV!Gg^X>%U?E8z;M1dFv~T1t|Ve=Fz$Dny_BiPe6){ zx8~HL;nK0g*xqp(ny0Igj8+ChuhM~;Ar1I>OBuQH zR}35UN|Z$9NaV*;gp|bO=+t*2qWLw3GNJQIX_}@>|EiG>Ud#`pL&6vo#N|R)M=low zX3TQz)A6WY2MO}Fp7xvL+p?@2tMqIj7-Yw3&b+=;ko}IMidhID0N&ElqiEC``YnP+ zDz~SPOxCy_g>@BB@pY)$#BWR#SYD`hPP^5)u@=8{Zf6!_9;B{V)l27E+4)$U{};O~ zeca$?9Ef9>&t+1@ zM6%d7^!VUh*6FOLilfwylGEs@&SVP)K((mu?%O-vec?Ej2SN2tl45EX;38JJlL!OKrsf@rEFArtm+HogP z{Ic_%cnCotTtc|2pn}-O^YVgj6Qf-RT8!pa>P%tC*3m0m<0?x>*M48=hp?KDG*Fyw z(Dx1?29@dKQnc@Alq9UXG2mHJvgz}7!We*v=4UV#zbD9zAD9PQVK-cdl0QiKTd}2b z5W%_mDQ~4!H~^p||1#bMK{W7D8O=HLgAnrPoymE6W3FZ+E(qgoP4ZDOOX#rSLT@7Q z@IqsMWMb8_B87~wVP{wxGbVk`V=R6i|H5=)eGDnVe12)sdm|^aAGbz;d`!U2?czRQ zE02asked`J&6i6_kl*tFZzW~3aZeGuN{vROVir@Rf^&D$9})1gP=(@6R}3)Gw~3k}J5a5OPDm zc*WWEFVO&ZO5}JOnb)Solj{v!%k|g`b-{$$ zoPW9${NggIpyw>8vAEH%HyJm_;$O!0192tR^mq#%Fe^$-a1-b(+70C2!lYk`k;!pYUCb1xn!#1y^=cw@wui;-^>;*mXqZ@_Lk2}(MRFZ`8A1YGkpgF zXCmqxdD>zRSHLT7B_I%0u#LeTW6V|IyyXE5-*xvhP4Qr*NO%|5_@SMFgfR7DZvJ@f z(oF7P&|%lL0;(G~it=GcZ`97)dRG}(j`@uPH@7Ud(@y8Cy3-za{&idCd1(ZYLtnV@)D)q5fF64XRWprp6IC_Dbg#OZ^QHKM0%oJatlcT3GD+w(sq}8t%^I;<8E01LUIaDs??fz! z<8q;G3UV>1n0QKsozP?FJhqtvMm;Kf4bT>J+l)BaGg(4}x$8ii_97?he1qKK@Fd76 zbL;d=y(2j>VxoPmi*IGYv3hKfp+iM+S)ntxd!|DihdolFakW z&>*)3V7=@)ff?Bwd$wt4E^@er?-ZSLu^D8yXL_3QZvTRoxR9aUuCO5SyxnDek0nq^ zcnO*_M}L#Z;3I?@-$dhOxLeMvRmiLT(If-K`<%8ZCX2b(Hs(yokaL-CQ8JT8NC8dHx?y@?Bdc`+Rn5ip`H5tI}B@MhDRTT9Xi<+sY1oGu+U>%&n< zITTT25Rh+5d0S1A^}|N<3WzX(#EcQ*>7sRtbIT^cXW6b_jmH2o zs;(zD9>&t2hXmy?9Rxjd7Viq#c$B?svo~3M7QxGOp>z_E!+nqhsk`Y_s!Bq!T2>(U z6TWw?T+(sqis>hhqr~XAgV9c2PW@h6`RQTRq(~AIsFFCY=_0Bg!QIXXDRSR-nmIwc zn;r(7o%No|8pHOtM5CB2=lX&MG1CWUPIUG52fdUxsRc@E<19cinyI7GNXP}cG&a`4 z$UHM{J24?uNisj)?z-Ayc^{V>0nVwFS~pykdt#ltBw#g^wgr~?!9)<<)YcX;SDVVI zoQ?enOC#OD{Jfn7eX8EHh-u4J1smIaeACI?07C{-Rl+;d?$nw2s-EV>vJ5Wju*Ns| z(u6f{)LCKL$>KqQ+pBv6>9NerFE1|kW!El1Y6oS53Dw_(ul-=kOb1Mbr~mpl~0zpoHV2c7@_i*ZA;9TYDaN z`#h3L(I!RF&fQ|;DURuEFd9ysnFk-PKy)84po{rtypt&p5$9Ez2hv$iE*BkC0WL2P z_DkzQ8Hwi$-X7ZwK}=I;yGu`j-03+zkxcn&T_0%nPy{Iu zFdcuW%H8p~s_BD3r;GlBU!vU0pAc)=x_gDDCrQvNA9Xy62g>zD&iW*vr=ijrmNO&T zXNK*{D^Qlx-s5rgpvF!LzM{362UXWyU-#ogcfFF3x-&P>R7&Vya!--Z8c40jlhaW3wL`vo&G_&^#y_;Rr<0gH9C(^Nx2P%MKl88L(LXNe8o zS$aFsDR>K$o?V#=zeVey3fp){5-#HEtHPb7M|MJSt4I?DB?c#@N4Fs!Rl{o4?ueAW z;-QhP$KSRN<1ez4$?GMCQ0F7Xt4A|OC1~6VF_jh<<6p8D;z4q~r*$m-dx`1Sy*J~g zvL=`h*|33!2k{JJRNc!K(D^CX_y(NU4bguor4+jOaN>KdfFKnjT>HE3hg_M~=waq! zblgp@ShscMP4Pl!5I3Fl-IT&(3S@*>7NoE_~K)Vb>KNKzRxSJ04lQZ`%#`eDc zWB6yW_o65&V1cQ?_*(JTK=a*iCcEX0*;6bqmHhMBUlV_pbeNku%lvQV^`chZ^oYdq z^K=n@<(>E?XcUagBhuiX>%KDHaMKszsG1bDg(&36eC*i|@!*&j9p78q(%U{TY#fg{ zSbU&ai(}ftI0S8fj;lG+&S-G9I!-}vXRr*n(xm_SBY*#|gE(%2Wn{N;clO1)F>VSM z0GndJ&^mKD{*i$CsiP}3ErNwf60_VSKt?6*MpRbXz7f@p&3QN(CH!bv{^Z!wtk7)7 zEbBaLuxvh{M!d1U#vE!GuN2r|V!9A3k{N~Ax&lG;?~-qtY#-?G8QWt0>ae^Gn~4{| zp1AH;8jN(vpBI`O@{xBPOI^D24EVSBd4Eumdl0?JtbeS6-QM~8iWAmG8vE#ds>p+` zV&t5AMIr%2VFxJ1OS3K7?#EdgK}!m(jzOltc)_n(tBH=F0Hrw zd6|%x2eR!Y&9wIl{SiO2yQ6B#h6EQCKx0eN)fr`%?lAWqXlic&&-Y!0q8;hQ%ur)!rgttN6^u>osm8g&swXi{Uk5iiI z{LUfej0Wrd5#w>(xx5Hc6y~%)_X*wGy%0ZB`u-{8!*yg-C7Yc=CC}Mnfk#I3!gXxM z?NJ5q4v)xtWFI`fbL5h^I6xQju{9Whb8|yU?+(nE zd4+{}uz?<=b|`0}QMS!+jLgn%Ztq<~Z^+i!E4+Gh{|`^!9NlLVZ5`X{FKXPRv2ELI zV>gX$+qP}nHk&kd8aKA@)AxS&TPuHNB{Oqo&e?mPJ@dF*quP`$2GzW`bzkjxsJWT= z`_-bb%)BN6(f7f#xU_f-@fLP@`;~y--k|5UJB00}H}i9oc+cJlUJ|O7JNai}9*$h9 zC!l~s#98_~qc6M1l1V>7O$=94?4^%B9~R~Rju_HcYkCBJB@u$pgK3t=q=HIZe6ykj zAFSQFK2Em6EXb+$p!=-~*{kNb@2q|A(|bnq+h`BU85`mZ(fl0j#oXVU5fIW(#;c(b zr`N3yQS&rAdFG|BCO$IR_J(Z_o^*&TJas%4eqgM(mzv zsD&5MjOj%3AQyI&Ox67HG)DDTQ=TqXehMa?3i@ZYl^T5IFruHl4vH#Dzn4#SUaNrb z`R|w2i*GAUPir$)uYX4GSf6`7I(6UXd#EXK<$Vk64TMMd?Q=|{-zfqNf-0NbuTc5R z5@I}w8x7COcF;GTt|-}VlLPQKy8*xjU9>ySFW}IIW841~?Y*>PSd@ ztsD2xi8SXPrn+uB{jarYH*fxx4HxfMsiF`GVK=@WpiTZUz{7TRm}4ZkURpzK;&rOA zRbnG>^%K~59~s_?0QWxpms?|AWQO?tO?T zh;_}$aiR~fO$GFPWmv<^aMmSw84vHanZWPS8@9awqxCL4_MiThz)1JKSh-Yc-h{r} zT(6lo?YorIG;^ExX z-hB%8qrtlEVJq-Hoq_KT7vL-cbUn(Zwyacgouy{p?-Gtz%UgjCf9o?EUqpH;zHeQ5 z<5KF*Z%%A^x{GbKJR#c{=z}4{={qe<`LSj?e^Yj$to^0R73v6&gVvN5>M}j)E-p1) zFW3J!COzp3sct{7R&yRb#biS;nqbOmeSg?vQC-d8c^AHs<7teKV9UoO88Zp?d-n5$ zz+ywsCH<2FG)zcg|0BoUWY0@U`ga3^8+<9$n4{{LkDk?6LYruv?{97Xrh1@`D^b3* zU#2H|;Bve;K2Fi^g-ZN+$qNPTs!i@i!e=y%E#Xy5ebS;>#?qX36b}2o3gP5#@?GM3 znq61YE8@D5J%7IIl&{P(f9I31k6doT7F;^+I`!BmS3$6jb#gpj=~1atP0V=zSmC)~ z^FAm-Ar8K`BPG_ylR6E#XrkQ#hxpuk3{9NGM`zFf<(b-t|0%1ryOO1 z#r*krboqr!wld63vdIhs<2dOc5e)T7A03JbHZIdT@$YldZAPLh1m;C&X2T4+`5UWq z`wp(b@aoRAn(IUV0Q%`gcEX$C->D?mi*ci%FpZ>_&ruX9{9qEbtRXp147fTP_bUPB zyTqX}-7=*J2#_(xTS`S&C)i3L&8$FQ-WYyg@c!2tWp1=4sorq7zhoGYR9qB7 zXbwr&T__WlRZojs_Rn0ICcib^?+U0ejnA_|fBQ~kq6HgEyyWjf@_P7!otARq*{K;C zK2-)jQECS#v)K6lu|4?9;xNs01*m^M1SNg1r)oj=!)gdj(Pf#Qg2i#neQz*xlg3^itrX+kl5$m53PH%0{RXS-}(f7UPpjX&*|O3##r(9;ei5TF2&u^byz!s|ZR_CBftNj)J`pXv_T*Av zeCUNxk7_$z_w>+WI8h*g-H>+o$zU$1N8I+x+U@F=R^E$VuZrYn5Fm*4Z1=dNb|#A`qA1_jU% z;V5TU)Pu{=dw^xH7QecBPcuEA5Y6jSdc0DNG5(|!nq)g77Rj?DwOU5wA{Wdy;$aBG zonw*nhMxk5zte>WAAwC9oJ_2c6pTyAo1@I5BR25U^Vc)T?W%f{)uf$##ts&~K1(iv zu3%1KV#k3oW`!kRaKrUSF{-Y89b^(1Rb{rx zuCRPUpzXf(i;R{m_8I$e^t%59a((yn|KY-yH29n$|LKeFQ-;f6w16A8%^(d}s{4hW zB+^6ig^Y(MZv22)0<_R9cRSYmG{#-*|yDcRSDqE7eb{Gy4v0VjoCEnOO8zb&Vwp`({QKDVudZ_Ivo z99e#KK5tr*ZheFggTE@gQ6=o$bbk+w3S>_owU2wn6o&Z|H-p1#LJLoRVJN~d+qu~F zL>TbQ34G!wTOFUyW%==KH2pB8wwHk{ceZ+^`U+FM>J7;!JB(L;49)H*Z?OJvyu`Vq z1jS=^s0zzdJLm3B?RZV0G!#TkD5j;d$xHL~OBscOjRrUTZ*_Z43VmzKUkW?Vx3q)k zd>-94o13yj4bGY<^sn!ZzoD5&8}xaU^TL4=5KE|T&mw%11$ z)C|=z-Oh%2 z{ocrq%?7Y=e5f0~a;VxVE_b;@1)3gbVX5El!eg(?H3(u3Sgd`?5A}{7j(+<1<7LZw z==}DU2#C}AB4mk)QHv0$7`_&tG|?A1=@AtC-PHVgqV%dZQ`+t#*4K?6Ue0?=Il&Gh zRaT3Jn$sj$n_G;Esh5UDwH2ADc`-LK2wbF=+O9qmvywl2Vt8*-x6epn{zoS|l#uG# zM^xjIEn84rO7`f)p~|b6ru)zU)#?u$lKne=H`w-z4<^@aPx$;`%DRJa8~y7Iji5x0 zhot$r+pLPd!q@d~)7`frEZA{@54CgxI71H)P`Q6UaT%lme*H3&DM1|#d3Z@z2}JaI z*9a-4$ag{ESs~J7HBnXTvXo4T>G$O;8l1DefY8sc4&Yi(B-40I0(40je z)WMms4x5b+sL9D55I95%G{&FIF?&b9EgzAgPf)X3cftK_w)-nN8A?l=jZ=vO6A4%G z@?O*GMdWoS}52q=i%(UK!P#S@10{y}D2!K)(j)2H41k0}z&?bXyG zHk|&c^A{+c}M^aR6;X)JAGC<{=b)$hNwt-G~mE{R>WkXc@U$oHSuVlYe-S^d3 zH&{(2Y5=v*S;qVx-~YG&kG}EqKqzO$vt(NAo$xH#M@^X%L19Yhe~SuMj><`2aQgh= z=;K|(V}d(nwh@^gpn##gIjcw17rf>JR{ewPE^}-SywhWB3H?mV#yjD}G4JfPL-FdV z=8x0b=@@75`*la-Qd`Ago_R@^xiWF6qXVRxkb!{&yKoq|{MR0r{_kWp*H=s+NW4z0 zFcWBXqO)uGXm@+bVWoCp!5j3%e+mvm^aOqbQWY0DmLmjMjbS7-O>7!TY?$~ym|H6* zl#uMqUQ`v_`DNR`1p7`&F8*@!tc7c&X}h~`&iNc7JdW@7BxTw9_QFMGNHGFa_k3M| zesRj&vt;X0_ZYvG@3{1K(;b7_^J*-9aQ2&~JFDeg7s`N=RT?2u5kb)^l!|_A4=%UY zvAD@IT71Rg{QQfNOP;7|bgG5U6Eh1`$x1$BFPl~8<~Cb2G&^kJ4YuuoT~KW6tXp{sfKQP*qm35y;J0P7V2AfoOY!fV5`<^&F`AiAzY~y3H>o{j+Ph$U5OzxO3F|#jJB?MWu zU7_Wp^HxHM__6uYufYP}6ZC}F z8n4`&Li!3o5QtZH{wTRC3$=_(c6JYJ@W5EUZwP1Cf(qKeYN9ttx8}_iWxM&YXsLE+7@GFy$bi;>u8jejfLe<>B*d)(>45>KTAU zy>E$QCKb;OsTSUK_mUWkEF|N)qJJoJOQ<$YD}*!cf%0g zaKj0Z@L-1%2<)=Rs&OSmovcHHtyfY%HJhq!lsjpuU6i8)s#<9H6Nf4YUq32d1=SdA zx1GIc552TAJ`dkeeecfK&+f9{DggVEcaw4m{$;3Sr-u*W3ynGV88;*1l&(rbf$K%M zQJ^utW1^}d5QAQoC1u5nQ96ZJ=7LH(HrOo5pOF5ezEyjHq_qgKt;6VbJE`Fc25t_S zW#d+&^;p#M@TKi$&pukF7tyN7HS>2s zCsmkPSO9HyT;mH5(wJ$nCF{OX@jB5#|IP*yU1aC0@#<-3loi$U!Y1n@ydlhNbcEXUo6kR#Hg_8VQPe>LsPGey!PVEO&B6^g_B5E z$TYn`(|&%SAPEd8Axl(+DbGZ&`|ZZ1ptX;HF&90W)?X-wC$Dn}C|paa+-ajcN< zM5;G#ErH%huqh}`3LY60YUdc@)TnT5p7U$=^RHTO>4D(bXgPGkJgnG-zix}tpSqxe zB6F}x_EG~GhvNwhlJaZd{E2^AAE64+vG{F=>EZmjNjbAa`_}CtBOYgd4EpxO*zV(y zRO_KqKvLOttr^Ipk@nxviZnhxXQx9$F9ln;Vhs4ad99viVmnc--Js#!LNSR*_EIYv z;)PfYz^v0WWU{ByJ25}fF=oX46tqb+dP@xMPK~Z3myq3)lz)k#a3Zd>kNm>P-H*o} z=yW?$X_J6KInnVqmaFY?RtN%zBrp*LX;7+@6wZGX%4eP#>n!nI^7kJe2C{{BXQ4%* zp~D{k1C~Kh2P*H)PfPDVIP?2QW1Ne69{HfF@=^ksYS&WzsEL=HC$>gS&NC;ckSrJ} zb@N%wK_n9J3Lw5CuwcB*+v7@ofqje)IPizPuKopNg$9h(WC_#<1d`?iZ%l;v!s4RI zCNq+)RgnjZH7gJOLPrkvpFnY!EnB~LcS5Z=O{S|+b zOB_?@?otFKN~**dfGB>!I=j?*{O%&}u>q`2w z5VQB_MOMf4doS6}xBO!dMFMkLpB z3ivfC|CUX3KXgt1^SOpS z!>)v(V3>;b!{=y+NJQ4*LxN?D-{|U9Zr&KRP_&|sMo8!fb8RG=$Rk|r@|3(sNIyZ5 z4zlE2swlU^j)M#RuDWWlz$1d z0q2T)dIZ1^kcWebc#6xG18%UM=lbo)_$D!q-WAUy4(-j{eop-t9>67`UtKW+;Ko1QiN zgQ!}w;wbR8ap=jhR|8TZk`dF$;1;}NbD#E>(SFsD6z1_*!l|PtnUODut3_vrvgKD3 zT1Hh8$SIeQ!1*)E9DmlErb3`ue|P>SRE$>2_s4jF=!);=f|@PpZYd|StjWf6_u~TK zq(^T9Gm{snne?>nkNi-dF4Qlr8uqW&aw#!?)Kt7*!`tGd%x`~zV{t$PfGB3&v7~%l z07;5}t*D7OQi-opM3-Ceu6C;e3gmYFoK+7n`mM?Cg@Ps2NG$;~dx&hEh%s4GV#o-Qq-(l~cHQULyQm#kQ zn~O?gh|_8=^quP8A2%<4heW-_TiPbwXIQY`X1XxNChneN@I!nBm zO$6*%hBz0 zA8Og5qAn1ULo+S;$M1$26`Bu0c~oYSztp`DK0}J?;*i)u?wZ)| zEiMP!PtAzN68*OdsN%Sbj0A_xQ~1Z*U@&_GI_QK6T!!U2vq*6@l;vb)39e#jPzDsT z@rpi^T);^`_B+ijiFYua%cHseg zUsNdRqGwtT@DmVVbYZtgps&^-93dsq6uE}C6dHyr3rw4v?%%RB^k|jK+ z0YzfJSwNkNFT0E;-3PKKH4K_zepwkI8a;R^woV5`4%|eDRKlhoeHNV4bxfA2)i$ZW zW(nt*;{JsGc%tY(A^^$QTO$2D3Oj-;`isk9XT^;`Yni&3P$vKcvx{+f)^$AySh4+w z7E(4gcC!=l`^VbH_?MlspJU^PDL(HNxGi#djQ0o9vQ_Q?BA3pEY6?+25b{R@3XKC) z2Puv}v@rpFz)HD68P;?hCKMr($@J^rk=4elXGwn}2T_Ta#OUeR;3*}-J*nv0Zy@nK zsSVfR>Du7w*yysvtMz>UFI6f|A2Cyk=XaMkCsnqD`CO)#?c!br=``*B% z#u2UmHCg+L5dc@s-qu%U_hL6%9Da3enAbHwsog(!@)!I(jp4jy{g69CIln1+Rx%^YkU~m#cVOY|lNmV8?WJwDG%&$h> zvL^(1$i%>?GxK(qZmA493=zFiRU6GE;gxIw%O~uoMiAp*jA!=lgPZZ0T2S2gS&o)n`x7 z!FDJZ4w=9`VjLbIHzO84xSa?V1kP*}n|kHqz*V{NKEY>+8cv;Vke)AUn$YpBPt5>&4_z<1!aoF8euiFs%%B0HAaJ1l_W0ddcrE4}T&40! zd|GYAmm);~X-JRt@Wgq-s6_-hs-$aremOY2t4BB>iI^6U8Mp?G$FoB-dvE8mEJ;t` z)Y2xhNp{r+&5&f{=58aYT%;~XS9(xU20VVyj?EFy0VTb_Yjwneb}R^?5s*Eg;%r)f zW+=8@DE-Sq??eHo4mLunjeFVV@8?x$XJOj_&)uE)>|0Q1IQ{!aXAgeB%tp#w6Y>@( zs%-L)T8u#GSl>HzgcX0rYP&!yMu!LL+SgJ;?s)%1?ix!kQCvv0+HIEILi@?wEZlLO zmE(rz#+cut@kTO<1xDX$Poj@Na-L|oqG-TS0)^g~4u$U@=XF1w=|=2)BFac`Qte*K zOZEAs)<2%W=iR7d|B-o({ldtHstsFR{7d(fW<8Iz%L@jwvVUzT*RdZ3)4-affv?QF zo)6ZKRidFwROaZz!eWk83vf|>*&;_M!o|~M>y_@wkepWiInHsY(YQ$PBCAyT$(v5_g-HUSi6iM1O+p_$`!O zz>{p8-{UfK5(XFxe(C^pwsdOEO*psfN&2C&PsXhYwaxG!rmN0_SL{sg(S7 zwc-Xsr*Y+NWu8rwBs%TmXMN$s^i9^ghvYp9Y5<^4R;gr+4a8GuG9JL@1G9Rch3pG$ zI+lutLuMZq2+cVU*16OK%B~D5d+wn~cCo<*-4~4pN*h+oUlt z5EPaX6i?!L@m64Qe>z%E9wnG*6ilVV@Xu)&ChId267c|@q`y!WhJ7M8@ts5hpPTL; z2frP0!uUsH;rb`P3?GZX%^ey$T5Zj{kT5lxOfN)bM;g7|QI=pon2rywG2|ciogSzP z;J?2Rp`B?bdCwd<=I!7g&h?VRRUEzxds3wgD()DX-%psMNK!d7wi?^<2P65)K)fO- zUL@60Q57tb^_BeTjxRbHuA`{1lk^pcxQqMc7u#DIfdUWo2yEf8>Ig7qx0Ce6*Z|NW zEu5Oo{7IzufOBCEN`guZczPX(zG>NG|I)UNJkeEu0z4A`$985ZX7%aO|dC z1VyT>{dZ(y?~2LucD{cyX{OhHSj;R<$cFWaPt!|)XMaComhHZY@vo6#V-C`sdA>b; z&bMFi+-Jp$g))GICew$;BHJzBr0L6`Fk>h&hSQqz#@(-8=lced?n~a2;iu@(BBWFy zubqMkE;S{75V9 zydiMr^o>{f(uwIdWh?KajHl{@SV!a~s)VGyttt{@Y`HlRWQ+j3GZemRv0| z5ZY0`Xmt5Ux#(DKar5ByKmU{$v^Ol&KV48#Md6BK+|TL(VZRWH1jG_slGZ@erc5$! zQRWRN=;ZxL&<6uFWJJjNSTZwVJP(!l3yxHQhG2@$%q5@s;#6m zOlnVh_YeSkY!{(<&kn1tT+^Kcrbx!zdqP4kx%_0dBfS)d26rKOv5*w&H#6IWlc(Vd@6Bj^j;=QAz z(&_g1tbywn=Vczi^mx(Qgx3VRwlFs5X3uLlWbn~)aqDn#Kaj`aG&|!C!PsSw;Y{3a zbdTAeWD6aF_c_k8pk+h%pyf=x>wX?kOA-(pZ?9Bc(8syE+Z&Z0~_#!5L$cUY(7QE zr8HedBQn;VU|SIQ6VsB}6cWc+y6U$5d9AjE$z2>!JRk3NNYPPJYST9a_$SA=)RiX; zZblGg964cvcYIx)XJ5IC6>Qyz}B@I@1})pjv&}f|Za; zD!XniHUtU@V%Py7^gWVa3-`u@W{(mq@2cw3VQK<>$zEU%rSRq1p$US++?wGl2q5eF zF)?8bxedwVEqhR@#nmNw!b*D?#r`Qvz@o*@wzt#*qnAzD`(Y_^+UC-oBQ&F?{twb2 zA2_B_Yal8ZZZuH}BP%Eyp+k{mcB0i%Ya_iwOvqC+Z+dW~Z2Xb;_zJKZQ*@?Dg7B;KkJ!dB z7e3w>HY@0KTRnvO2RL$9z>^?bj@+%qN(I3Gbhb%3hEng4%(S4@on@%h6eIfV( z0aEerC^Gm21&iyS{v!ck?_^6_8#hgwNM}yozjMU>NtINd_?Ne#NMQJq0OOIosDwP`P4FI?jR z9hRghKvE<~rk-!t8rZ=kCUO6^DxA=*fES1O`+e!Ly+zNxj_Ti=yW1Dc;aSH64IQE1`eCjRoPML-(l1T-GUK;S1*fJ4j?X_(89ouKaK zYwd=?()i4=J&OS}_u~C3hc;`4&%cP<~gMQkqZy)E^i2vQu2KK*c zj@-7n=l2uo_57ZVrpG)Jj%@Sp`t=6Xew$mrrAzA%AeWGGF$qUWp#}c1SMQ~^V}>GF zOsulg=bWDV4Cr{jX7T5lvj4yparT#A9Rk!*Miror!JAYg#^bA_mDDZ9PfXobOeP6< z%86n`mCTePvvEC;YQO!usYZ%JQIc-sB1^OR=`AP&;Il~g{;iEany{fcBDXa^=IoSL z!MRQ?mfThcwru)J|EQ8`aC5|Y&|l=#=hr`yMC|Lf2)C;7cuB-?Dt`+9RnC@S1mUl_ zEQJMtx=?Lr{-Y5e@LLYH1IoNa6((vY0@|cQPSu922FmUB9kV>7`e6$^ji`PzaB>tTfQGZBWd4WmNL`nVY>Yx^4O^%CyK+xh zMwry`d9A5?8t6#{e1!(g6z^@2D9P9b4%5giE)@nyaLcs%CIhfiP%2+@jkuK=rOHPm zshTbyubM$Jwz9>gS^tHDQQ^X<#o%v~8IZC)52h|#yuXd|{r>DtP2J;Id2HYA;{;#4 z_?m#1MjWb@M?7L#g$p^JX*ggKyi3r0e?ZP$)SK@z_9dSxcNoM6dti@+8+;gP7Hlh1{@pn|$s~d=kz1 z{qao-g%U^Cw&i#-u5=fKhL+?8d=r! z*JF(2*)P|_YmjU1+T7PgPx)G)PPCfnf-w;HSGV&J5^5$p&Czx=8f^fsuW7{quvLh`CM$7J#SRRtmD0vK8{zz4qT%C&XbFXy_;+j=GnKXC>L!(WCgUr$=g8f z4w4u_)Y3AnoFs!6SwNRkZI7A?iiI&47U#`htuQ`XAI&!naZwaBNY02);l_Psf3k{_ zmDnCd($~LuX<-79mY3uACypcci5wD8!-lE(b3Cfi!wi{9c@tNQ6giVu9?c`!${&~4x`UUO0JDziMax1JC3;ocybB%Jn;eBB((u0Az$t#`BzKaWzfeOrFOE)dw;pEp7uO5WN8 z;vo-cDZ@)hQKXX3fsuw1kd#2t0+vTcZpy^nWDmL`M*v&{Ov%(R0e3seK&yD*3|)zf zv+|>PvjjvMqn1GxV(hB7qGBd!b2~r^bB5F)6qm5#{pw6T#FU(S|7CDD(bql&s>jeX z&ESBCFbr1!C5+^VakF0OH|IAZWv(v?nWnV<#0W5SpT!K#SujMt#}b^qY+np?0Y*BY z3_l7iy?hsla--CN{^(aQdE4|L>cUR2=`pWHlj{E`Ke_jGa z7t(-}2-)b01waULn0CO)E1qA22s{cs_`)HK95qu~Y5U@Hxk;fn5??`tnOtVWF8g{& zam(+Vacqy*?M4#ryt=mNVZ(V3A<9wR2lNDIy3uq*M(E58Lo%`_EL62Gh`gieP<1}8 z*mBZ^4QpY;`m(Jo^(k7%Pq)jnVO^{+*Vz!atF^!s&LB8x@Fmwt;rePJ^^guH>wkX* zkMOTYL#=FuX$)a4w5%|0G5j58PAyZ}Tkp|n&B$ocQ_{9uc zKh@C@hFX7%5d9DbCQiDzc2`G5P4aUDTBdGb%4d4jp_<=iC~~MJM!9)u$NZ^prv4hK zY?gB|)911oIvWX|eho5${(~@;c5Mqq&d(?Icue)MS#0=-AhcXN)h9*dxmRG!T9~>;toNE4 zsaCMJ{GRdqAWam08l+U`I6Yu#a9rs)RX7%3!wl4VMG%P!Avqe&p5lg7&zwSN5FFR@!^?5izlRkLsYThV{cy5J!(L<}Z&&E` z@77(|`p-U?I9y<*XWjewidi7ihj?tz(|aCNEL(T5RQ7NAt{fiM_ygi~?wju36Ue-p zm$WQA(GvCoh8~Y$-XzX@1m` z94t=^J&KGqy>B(w|gj-x8wcU{-Cj;tV24o@2&Vg5^w&6Vnp*fVCiL&-efoE;ej;(>go)7MqcdTr|7r7F{ z-DZ#`johdvn`Ivi|FfptqcL(8W#cpiE!pWc(R zwr$p+-Nve!JlYPCfLMcJ(+6Yql*kpr~y%&#b#H1%=*KvZw{OxJgV3 z+_kUklsx&HcN}qOI`okg2e$VKY{m5M>L@iI8Z@szye3rplPN~No1HV6i09DVx?%y_ zVPxTCDN0Y0`IU}`q;=pBZGFc9j&>C~egN8k)MXjm2k~$+egP;95yn*hfeF>M)-r>E zA`m#xCI+PAqTvNJg=SU_llr_dOE7K?l;!x@!VQBpjI>CS{q-8wF~E%zjnrur(+mp^ zk*pmm4Vj)XRtDX1{W*!0XMQtSSpHppHzwG|aT z01edZ%>5?d3=L@M!n)k?x*pO6cX*S48W_?&%=bl(x^E7A$c+-n1Oo z9n;I0$y+|j*tp_+#*cA58H38-_=$F^W%H;MbxX?B2tBq#CmD_W$EuOUp&i})1<9Z1 zZ`gLUNB>f1fmK`x6bVGkGmw2hyhwe0&;zc`e7gAp5yYi!o2=fawE_lAxwZVD zPe~ixObhuRSW#m;82rLlZ->0uab$aGygoR<+^Fj)0Pr7)^(Z^!^*dO>O{l_q2$d8> zuXDMcHjIFobtCIDjkUlcj`y!-(F0|1QiHJUBwWh@kNT(>0U5D)_@Wkupt{ZIPFx&kj-}PQNDjH45Ix5ouEyBS09dDudGn3W6^vcvc@CT^V^Bp z$CuCFHo_tOiac_Sm)?|K)84L0`(si&{-{FXfB|lIRfNb_TsaU-qdK}H2%Us$`K`wR|BE?J=wHCw}BBJM0sVvu``)y+^DIKD6d8m%Buf^mBIM#Ne$ zl%kp`w^$5|6S|4h(AK|Mz`V|r=mS9&ZcnR0rc8$qB#-?A_5cFHf z-VyBQ^mo67KcQvz2U+%Xl*tmI)=?u+V3uQ>SD9Y`BkybA~SD0)hcmEVp}AwwX<;X+n^;np;Tr>qr#k$u>Yt@qd6SehbzJW4UxFx-bv*~ zNJTk%_LIzx%_e&H0pWI9k7zDh!dl?Ji-#$M@JFkE?;wZ#hBO3Fd`_qP&t)ET5e~YX zUOw4DTb{rZ--#LIti3#*9ldQt6_4Ahv+J+O%?Mp#V|#w=WRmgEMrkfth_-KvwVvvT zcBqRWDj4s3r&i`3spLrPgOB7Lspx?vn4kq_{i*b&U?IcIleyG&Vjikf%0*K;Fibs6 z&|ks{Qm`ov*++<(z1j0 z?SNHJw(Luo*0u)d8wAFm{>2(JX}iV{$!&^IZL;+%lwe&~K$v*XIWzqgKZ5ErArF)v z?Czi({~9MVz+>l7PpGU?p!qfc8H-26swTe|rjh@gi#c>gsoet(u{CAO^au8f9@zY# zD6gH4#Ea9`@Sin?bm|i02gth1SG}nfrq34_;;sX0a5X;oJ9joD?LV@<#yPTcPW)7= zyI?9^z5sC>N-m2}BWU_M#R;G%85sqV87L2xJF_gfHSAgCpY)plx*U<#B)}<@jREvv>u}7d@zX{J?b)YSw7B!zw}h)+JT0pzRO}1b{Xd?)AWRJ-`TGykX|ueXwUS z5*v}@Qgochj6=pq%td=B8=)n~&;Qp8!fF&}1LXGa`3(_<_ELgLBcbnO_bI1L$RPP6 zKV!NaU>YSslZYkVv<=!S%(-@N84&t|ciX6E}lx;8$vbA*W(L8Gzizsy(^U@GN5x;V_{ zzw_y{FwhGnVPi6WIvm?1hLA}iYqdm$a#_dB4rXT@E+ygb2cWgVJYPyW^?=Tje-Q^S znS1y)0)fj)q1L(_Sn0mzQZAun+5 z)P9%GKqh~7lCAbej=OK^WBYwQbH{!WxLT7H6u*Iz>*iN$sh8RS0dR#yU!)wvIm8@D zK%yTbmr#{q0OKOhUG7udNw(x0PMm`w9b!ske64GRrqen$HLoRErL6`(EpEFB^uF_A^p^vTPNn8)Tncc_#1k})l~f*^1Ks*;4+e%QqoMDgL9v5@xh2iYeCQW`cF-S3m65egPxKhWlMM}~ ztBW4}-Kw5+{>5~u4pky&yz%>Y1fWR>Lp*o~e08<(H5{dp6d}`8X!{&j$RNnr z6i!171*T?ldur#Z#7^IEl?b?)W;j{{LWhn=#_I>X=w()xfmkq&&}U;O*z>;kvB^o3 zF@vyJTtM43zG^PoAjwEXvV~0xLJ0(zh}oz%d#(nMC^>4D4*uuM$-WT+d9kI>K;Qk+)t}?EQ?(5Pmaj6T^Aq|(3?(UMVOSd#gcXxLyEg>M% z9Rd>4ptN*%^A7*#_kQ34UtrG6IeV|Y*V=1pcG8Kq@4%068b3>x z9%n3~7BuE-2}-HGpS-U)P?9Gbcb?!G7^ORG6>;y@1;B2?6i~SADg@Lij-fFx!^f?5 zk^s%Xie6OLlL`aEI+()V0f3Y%Z?csA03W^)-cl18$lUhr*@3AlO~%stjl8P;BnQy4 zGBkl|F-Mdex%?K zH;LxMp%2D>LI-r*@*VA13L#wjtdS0)5DsjnJkb!E1cU4963~Suxcy3q%Y|8;KY6Ma z@Pz1(`sF?N=K;ws$^puhG;V|_OO)#OZl0&k= z=-l#zc_b#hJyQ}JY+{k5FRk$a=8!z0=0ROmL`r7{a_6e#&ts<0C|cL7tpy6L7pH*o zqO-*=nRYSewmYvMj0XdkN6_3K0wi zG!DdmAi?uP#KLlxvAtA2znXpNUm>orCRLZ(MeNB51y6XL2zr#jNtp z>6Df9Hb(+xNjVQ~d2(iXj^*;GEvL7IZz*9FOzVE#Fjj=z>te2HWFF}vZxS~NnP4^} ztVgj{=ch=QHq4`WO~{6K5r|=LXMK8*s^)))$$UIn4NKE)yb#v$?klLfjh0z+{F}w7 zOYx+#8a3Hgo6T5q9_Uzf=o*36LeA=dgq05ii77GtCroksrq4vVZ~mI8ejm*!Q+7h`i6Jw-ba7l(m$FV_fGaS~ z{Kj@FhcYJ05V`Q-PB^TGmUH-(teY01uEdEGHO~MdVEwewl`Z1{!zPW1{~O1i5BT+B zs#srm#VdJTKLt}*s;s7T^_TjvBD%3BacUwL#F9Ebyp{KO0BP3X`=oqA$ZO6=toil) z*68OyvC$S!0Q4aI!QoL{PUF7T3VrzKH18OS_wRL~jybp&$?$&%d8ztikdz7c;~#}R z+K;3V(wPa>Ep1Iv4r+Lb*RPu^f}_SBOgsNrD{k&$rjVy6N?V2NOm1ZWtPn>u8Nenn zycP5&inXq1YhH#kSqd))S7y%If17=fsmso_0GAs9X>7E2WuvH5L0w zGv31lIqEqs<$K8RAs}=z^v@Wc;TQeO73kSo%we*fVsKlzHgr-dQMRK5R9+$Xjz;vB z_Hma*5Ao>b>QR@|O2R8{0kOceR)}Ep07w-~a7#0Gqfh{T!}*0c{5Y&vHh6jaNXkA( zzS+DjV4NcB8ka9NZyJQWYbcMcYkCnPB4%qUE31pH+(i~7)u#GIkI#6YpZ}u}x}KZu zoCRbcXq)^Q^o@rC`Wz46;|QW0r3`;)SpLZ;)sD&Z%GARJ0<6vJetW z!yAsvpFC~64=`EfgX`MoFFw~lFfj)9cx}G}Q~VaJJ`WlI62Qgtl0jLTRD6k)Y%Ux- z@=K?Ojo}QO?xu72Nfd0m` z7oWgnGonB3o`H4(@KI)pgqnW0dzrpB_@P=I90wfUu0^c{Dcj84p5e8>&SRY%IN$mP->8X zvlYZ(fhEHKc-?vXK8-OJ7V;`mN-5V3V=r9lvnTXGHpT0ZL-EaWIV+CK4YPv8U;_G5 z({~uPzB)RCJ<)y%#b`~LpB$0D3)+vLlv(fisk#q)_Wwyd;0b(K|5MGpiUqUSPRWx( z!&Tt-b_=?Axaw$&X4qWtMkwvGvOVSaZ$>;nZ*q1s2Uh`cJEJmr+V65Jbe-|#BtTAhT^kCxfE0%OOG9a9>17;D+EMvsp*f45GFh9639$a%t<8?519B z9cGfgu5f;j%!zon@+pWhb>SLM0|l$d8A>rYMfAS7{##4@9IPTR528q9Ivc?$S210> zo<~V4fg0~yZ)^$!INZGJ3YF&>wS%>*s*}axU6e8rP5U)?M9lMeQND*-i(Vje6&SUx)(T$m9Ly)<~PtS96BBMzu)_3=LcX*03izQs(B zBr3`piAGge90^v#!B)dV5W^^k{>bbIHic2c!%m8E!q<_M?Csrl^SIgKt+(=S-G834 zN~&8|RPmg+9J}$!zo z(Yhr5>-dC{{LnQRrb68VB8N+5>Dd*0Y8Jg6s%iglvY0{jeHUhjje^TmDCQLy~)_`s#a`mk!ZpYd+zwswYi-zhKCtGn+TyFaOoFCf!! zA0;$#GbOT2K`)6l;3V*ZG~B7sBqEMaersTR{1Xd4HJ{%8_6c`GG(}~vNr^b*?TPvC zUU_WJ3`%BC9zQdzr*!^V_)y*c(i4LZN$l=!J^s5w7od#ysys0Fe|z@(7s_C-jMK<< zG~b}JJrd~9A3o}KIFNcgo_iB7kU{_b&b%EeFf^cM+5cdAb0GHjBj#s^!cJiabOrs= zj&cl>GGAVAr3JVwcEf>cHoCfZ7AAID&|-Shj+(@79Whh0!QOa5q8Oi_Bb?@sW!dk?td$s@Vf z9PD9FFX1pQ>3PJw>WRA(%W8&p)8DPR?PcdN2c%3MF6?E|V-beQndrAzprJE8l_`^8 zJ&9-HW-ED6iTRSsC%!@Ey;dwOaSQ8XNP6IC^$)akLB-D{v?u7Q3);Q>UoadY{|$S zJ$LA`QNLC@5Ym%M#EwCG+$zvD&sFy;?h^Eyl6YDVbjQyz_`eCFOBJJn+VifPo%Is+ zQohx(($>9qc&S!cHl1&647;)s_~l5!mc$^ZQbl@vIkc2pPdzB>QbB?m-CYqi5Dsf- zvK_su%y;8Y!6s&P(6Rb9Y*E;A^$f9uYKXQelW$dWFq(lgwaUv{dTBCd9hfO$Zq-F@*e#?Jvh!10vVQr z|5n_e7@qZ+#+s}Tb-{8^ZQOFBh3MBk?aWV!dYb*+TMfN3_BWQo=l5(8Ci4(t~pN+Ju5CKu6y})(pMYG^37ok#eNiRi=MlLO1-q7m#A4gZw_0cVY`-w zLoGFv$~8X&TMe8ofzd#P;aWlxvq7Q&B2mCaOQ(IgXrSq-r|)6s8JxoZ4!q9iV~jz6 z%~1AoC?AAp(2x*>k2IFR9%@+Wky&PiCzh%-o3y?Z!^%GR3)AA7v@>xpp^7nm5Ru^xo5|_rK;D1U{b?B+ru*$^! zr-Qx27OCGrMZ!Y)(lKV6W$^RKHZ;)i&Rs0Gji6;1Jc+v=+4fm7{WH%7so0D_JuR|! zI$G1)ZwD`NJ0gA@caOX@9rw-{s~0KJMrO|uow2I=p8v?DpLlc*qxqK-@p_VXV3;+| z6q?AqKuZaHCB^d#F4JW|?BLoRl|&2bX$y#LGWI2u-$R`@?%HWY|8o{cy-&dJj}TZ4 z^g`JVgNQGKPkT_%aU1XEY}a4fJk^2%J2c_cv`u5T^#*t^{k69 zk$#7yD!Se}$auYA1yn1PvKVrTlrT1;zw(v)E2X|<^#@mVqBI=r5XLCeowLG0~LvbDwT@IzB&wSk%{+W zwREX*qJKz5s#|sp<5YJ@c6O?gNEhy>tE|^D#A+PhXayWQEL@9dYp0sF2^7a*iteE9 zsLJ5_gd$YKB(ccZ|3b4LNBgV*ax-5T4Ut=z(w20OqQ@X@?b;8g3|vRzKEiTt`@Ojl z8jR>1|1PejbFyKt02>*2km>Juw+9Z(nZE>uRkLGJCoQ>$e~}w-p6&iTSVvP-$lY(C zBsZ2Oic^EIo_Javmg$)9@(*PtBb6#r;BiG27K>-EhYF; zk&nWLAD^py0>Ds?nUFJ~Gcl`z0*jKTFl zTU#k!!9$YN4EJJhQ&M!lxxfp{+g8R7b>)u_Ammr!TWt&3*@ArkNI`sg3 z^Jw-LxqyV9w0$X#I1Nr%Md41be(c+Qfe#G;Jmtv%Kb-2CTMH0Vyy%U-u)&m_{oRTM zUd4~LD{Ag|hpt)K>;)fsKRqUL6 z@%$yV6VQQmG?WX=JtvumC5m^h<39D4DY|pt|3C(^lRL`v0`Yx2=>qAFy+67A9n`(m zSKhc?4~fxvT5P6h_Db8Fw-z~OX1?9M;vy<#zvnTzooI$`)pi99TM7EHmD=iDR*)C| zbE*`SJ$!1vh?pM&qw2Ve8(8e3adOQL!+u`^c5JMgxv1tkhEDRD?5)msWw_T>{_~k5 zG0i0Xhcds=zpAU`Zuh;uc%2tMoff~}H#U%v?bz+Q08fRD0p&p<7;aA+=)hz%(BAvI z(1xEpWr^6OkpZV`C43xrHDou~?``Wz^V1_g#>$=0PDG^_Q{9C2iO0|<{&OV?4~xy% zhp2!+-LwP|vmvDF`x&`Jsh!@{Z)_{^Tb(lRkBQB7Gau*S!Os`JWQCr1j8{_nnTo6b zB_UMb3-WT?VdR;_|5*C*1hJ8~A3-^{sNf(q3HMS9&`g^O?oYSh%q{n!!VtnSnl5%< zfxCBs+d~53>z7hv9o%XSzPX_+%oM;7c{&{1KkN~bG-FNZ zMf!D}5uPTlsJc?Lt=q&t9o>KfwpcS$`Z_ym=a%9IGM-`1zC=v+s*D}#O2KJ8eVa}w zr5-Ed(cw*}JwnOF_=l;5p9il1impvVRzd|{>i~X}*f2;0VH=q$MyB3ShgM=FjQ&mHuRvK*Dx`PRf!46*7$C_Q6rumu z0ysm6;LSnUM}e7}ADiW(nzZwxE-TaGjm_qW3M5Z-GiIKMQm=K87tTFA!*J7D7|XoJ(=?Vl(hPzJ>j1u>+2$3$4C9r%f3|FmL} z>AUf~?+Y`Ct?!GSjU@uh523%(nMhAVs=BB5U87*HKtS5k|ChF;Fd zo@OE!{J@y~KH5eEzK&viiWsewiUrnw93__Uty%o{FfhT4F5`M3WxbG$F$g=+RwYFH~SV<=e0s7M>j z!UtxmX~T_0ezmiil`jRp_oG(Bt;9e(eJ=YFi8~c&=1>7@GRB|H!`e~wA-HwdQbOH;OaC`2Q zCA-z5x%R@}7{x+2km~y?@@OwLJ8RjoX$q>fO|3~8AJ{Uxp?Z2W8_#zKaLf9`N3nUi z9i;u%xFTWm{1;^P38C=I1}tsE%ay2X>z>0KU$WOQI|zQGT73S*Ed}K!pu}uEAUWcf zD36DO=b(j3v_4Zi+2(Cy_x1khD&5d1?GJAh?O45EL6K4UEKK$ohs{#K^gYR^QJHFs zlNM^HMWF)ReaS1#a)I~IhuY4MF|yq5*?{O>H@rWZ8r#^Pegl|~>?mord~kkDYO6cT z8TYF)jlt|bXM2G)DB=yw&SQelso&qgCDEqcO5(kKnG508pApp~aM9PMZn#D@*Aj`p zyhs2bOl8HyaG#o6fs1gf@)L9o;bZapBD`KCx_hbsX4*9?Q`F@Yi*K?LE!pK`??2vf z_NvH24dFAd>A3VUD(KkS+~iFCTK%iSwEB?8nWB4*%o;A=z>3Wvv~+Usb{!2a;eIm; z1u0RrS_jZ*kp%7bKH=!Qs49WqXMAI*Zavi*itsD7UD&x7q2%}Ed(%%`rk>DHDv{9l zdo)1n?Zo;Sr8$pq$e&WHq`$Wq991v6SE=1Xzml%a#zkL`xF01-udxw!T|6CZm5B*V zwm3!}zl1n?I^|_d7CjKOX95tEzfR*@X5wD)R09)m^-beS5BNyT%1$)}hReX^yagu#- zV6|}mGz#&4VIyrWaNnlQyoy)(y@n2>jsiHeU;y{__?DZ%@Lr;k#4FjcKsQwpyv#$f z+Dv@+)h_YxC9_M8R?mpyoNvH|EXmPOURZv!FIcZz=sa?XrWo>=guraN1KXn6{8Uc` ztKbO$bct+C?b%Xd{P}1&ot*Egb^Fc6d<{&P9^nVmoT9z)g$na(QUZg4i1lm4M_pS^ z2H%)ue&5SuH^s5nA@%L{E z?s|kXmpq@~Fb3ba1>IoQdJ@s%k1fx&e*8T2O%=R?WcJ_< zetMg<+)8}MQUz2jFuEM@vqMGWe7pR2f{o-pr3X)v*lfBXa@|x$^)SwbW&oi~p9KE_ zr|Ny?+bd)9MIefD?fcx>qOy-AoOPGo9Y-n3nHrLQ0ex50Cd2SP)f`D($i;`)c+p07 ztB#aH?z_7BPyIw>oXgoJ=ZpJuaPph5*ZCB1@;VT_C*XDsU5h*?;IYC+{e{$+*X~q0 zPzU4R#0z6-a97`s7)G)#WFYBvgYP%7>W{YVNSaT0&xA5>df51E?MesLNLIpoC$+Yk z9Rusl;A4;8LN6VIxzK}-=Wm5&iVwCfCVg*Fq0!>-ai=7py2!t5vWyZ|nMJy0Yuvt0 z@0p>7OX5kGI-0aa9L&nMOyA5Et~+Y2L~I5FrJUm}zdkd42f%wQUT^>>Hzso|vcO*r z81Q=UW5voJ>yLql2 zUYW-)S3Hve4{`CU4LhWSMK@zHHc-UGXbn`NzH_^Ph}-i%qq{M#7$8uW@O~o=EBZ>0 z@lnd89BW|R0fO{>rdlO!(@$A}aLFiucxm<1`(7b*YbTseaX5ndohD)rsg`j_)nebm zTyA%ySYLDHW+-gTCW(@84D(w~I9&ISOXS)_>9-UZXfQ3wlH+j9uqd*Sg#l7i#zN<9 zFI#Idmx#vOw8GP>MO!aU(zRp>b54}62`$M)oIKKh!uj3sAt#26`Zy&+V@*!(8 zoRdY1N~c96FpRt*(xvU$VK z9Qz;ud8ZT=w|CETWQ@IOJ>8*Ei-8ViK`~bl9ZYV!eEBzaJ#2^0&J_VJj`mc`^5Y9y zhe7{sG7v9`f$U^#g$DgW0ntlL<&ed8S9G?A*69FT!AZOD5r>4ukf9I z(O^yyjb72a?AITF&whP+`6{$Xak4LCH1ZYBslRdSI8q?fxb#Xdk%xF=GrVIz)wbRX zE0KPWs9$m0b+#7TH|HXCVgAG`pC>+pM+3!)mo3LI#0mdASZS*+XfA6{eQ{m+8`oqv z&Z+f;3?gDlsNs|YyeTLnWmvlqRDqF6dbNG=RRR4oTxMtbB$!};FWA&Ct-(I!x?bGE zEQliVzB`wsXC?*9bbl3#>S|_nf4q4}8;1fELF^cuZV#W(-+e`&DoY{=3L&Htk*C3=O-D%RFA6PLTjx#Hfm2i~3N>^8tD-Ki(}MR|GdNADZ{!PQEHg8;-3t%T zljj|?{2hiQB{CByB2z)rORmx)oTkT!vmOO(XzO#95CI*j zP!njCxNA2OvC3XrNUa^u15=pG88D%Z(+HfjQK<|-&y3L@upDK@(L!AWns30GP4|By zC#|+-^MBEUAkmtZePoETeCV1&;ME3{M1juq>)^~vF;tnL45 zojms47}Jm}C6*dv=jBN(iTTe^`YnnvD&RXaF}5X+7A3L`!O?1xX-2KwE!XD{Z_fOT z!nP$6B&I2cs08gO-O+H$FX&KpB&Etpb|;CJ++UvR5dvp5f{T$WL$z_leTvl-A2u2L ze$xPB9#c#cKi=n=h>dlq*rGw*yCp|}-~40yCKeN$1Ah|Yv#atMoj;2&^=it=<1sIv zRMR*FFzKxl;2o0d6>F{F-QO zxbFD&%YJ>^Y6_f<-lh-gam#QkpF|lIZAo@#p73j7miuA_VNiolE%NM+C6^DBC4et@ zsE^f`d@pd;juutZz8ap4hbkS8#CxKR5I=*Fwn{3sJ2h2+YN%=joEh zTBgO;Zv}a5#xmdy8wQO)VWPLE2IiuknPO*W{j4VFUy8*(y7yb)f2xL-#d-}CQcitd z?9F-G4@U!SIvBg*+6VAbYCka0St(im6&XN{K>(J4fyvyI82;#s1ZX#@8t$FV=LBJG z2+B)PdK3J-XyO+(;Bkzd5lqo5m*d+}CLH>I7a3TloH`*uwR#r#e*n~O9 zsSQ0S>PNO5|7zqJi~(s_nvpEvBWW`|rhR6Cc=6wSA;rN8&2Ql-9e_rbPInH zs>`5(WIE3;YjD74TO3U=fA2Hd!W(ojYh?Jo)se;Q7Gn{OgUL^<&j@JgKEgVb zMr}8;CLWh*8?OD&btW;Pz!2_LASiw@ZR%R+oHoFiA9a>(rP^{ zFg9L>)3dV4-9*jdNz~hrK_O_xP<){Ud_$el!F9(JO9ebjL+NyWzkeI=WsnZ3goN^z zgycm)VE*E~Fe)CKPhvyfDs;JM;;}QMiiF_)^{p)*2_)ubbbPZI#`xG@XJ5b$_*i+< z&CG?U>SJYNdOs-?urD&;AvII2HWLh9U(sV+74f#eX>mB9h(U5EQG4rSsTs1;0F$(+ zQ0Vz9Y()smdtOj-n>A$aj~J;WHmfMGuZdcc5d>>w${`e$3&?`KZ-GY;GqI;`qhVSN z%cR)K0KNOVw?xHJ)#C4T1sw>AheWKBJ9c9iD%t=W=Dr(b7tDVIe`y-3Dehd3WhWBA zKUSf(PhZT)MeYx`?RUy={nc=W2w|N)w>9uIx|-H6s!&dyTYN$lXkMFik}c2%!b-gV z++3COJ8~5+J?ErsZa4LKlCN0!q5F$s)EQibHgNCTd_OWW{+{?sa~56BsPW>DtwpIq zDuyjAilY;1g~!~D4I;kbjZ?K)i}kH*FI2Ls0lQ}O=@dCLeQnW2)kUqV(U0*IDdlL~ z8@urb8uOFC0duK(J7($_z`APM`GN1`0d6Ut4}N=r0^oO2--WAz$t7(}!2?m0I$6N) zGO8qRL;1MH({SOVK}zCw2jRpD;&yxD%8{j@BPvZP9pyxJhh3*dq*TK@6?EyT@sN!WYL3*VG-Pyy?R(=7 z^_=EV-V`-3>6ARB$B1m(mC{xq`iutO+BKGZYtQ5qc<&z4H%(6~01g=H$Zn_!a#R_kw*Gq$Dh+?ATQbg`o)p?WzS zLl(}MD*HGBx!?J+v(WNm7R77$9MxG73u*ii>qDv9O zl6h@8MmsWR5m~=WIca?JG5FBIl$##FGy7Yc0yIx|CA!?dPpEN^@!gDc8?}MrVb?RO z0O#o9KIdY@4lBdpPIBY*@~7|mHBtc9K~it0juahJTcW}>N@0+jmDaK;T!z_}HA)O8P3)c`lq>8Ig|>O+XPs@|55a0k6Z@N2yLnrA3Dr2|w`j=){!!$lXj5 z!aD40$jNs5`FE!L@49EIq);)(OWZPIV2_{!HEehCu`~|QfuoAP*>G-)*((JFn#>M9 z0icXZIA>ZV8?;HY4cIXqrq5`+L|ir`@Y+_-T=#ot&*^?6lWyjO82Yhj zC+%ru1vrT0)sRFnny`~N9Q=R(j(~yomBAl6vMO-pOVvr{PhMd9`DDDgFj|?K-#uw4 zQmjmaf(7LM(|@Yl5u!M1nJ1bT`>2K{yO(_TmGps>m5tXR7uL5yO`%|K>f_b*^&D3(Q*~nBop6cja50}7^N?_`~lvwH&xj|$)H5n%o^>kEgcULVvUjw z^Lim-dIa|YPj7~fcG_QTA|Aj3a5`Pe*=DH?@#vbpkdAUNHR{-zbr&%h#+<|Xr+Tsek= zF!@3Qt-wa;CkC(4_+B~NeqKHs+(BMJD5-FB%m!$FDOHc-PY)uIK@_I9R-A=?LuLIJ2`JQ*Wqnh7Lvq2^! zOZ(xwh6t@CikS!3n;X7Q4wKl0YgL9R9DiTML)i~$l`Cwnbl>w)BbWsWdd?G=2LWnh5ef=l6nvg{*K%gIhW6%?lM0qCeBV5lt` z-8DH%*#GPqzjnh~!7K^Db*B>h(a-9+@0NyNE<-@PC2F&4POQHo17~I*=idJ%QQ<#0Wt5j%(H^*Rd!Uw+JHs z*A|AuV<$jIa}`1TV@tUE1+Tcq^vk_3HDwlF#IbSzJCt6lP;>U%Wk&(qDsIo>ht!J- z+^A@1Y|%~bXdX8KuydtwbP(2;?yhKK1d+XaXQLvc>AQ=0WkyoLtdrrLWQ%(NrT1$g zQhU6dB^u4s!B6I&DUztE+lj6;s*e3=+p&?wb15reXPMjBjqo5ql9G?3ga zn!gPP+$6Gsh?^B4z4xjuA2$b(2$FnJreR#AJM^Ie1SYT*Wn_$PNBuyX;wKD;M9wjv0p*HiIvq^w{yPR9${wF%salg(GtC5FmT^OMDJ-_%n<;KpnCn#q`p%_5to_wGgC3wJe?{0 zNltMquB@vKC%wmsAb89Y6x85Pi=Br5x(_2+z+twsko_5=YdJ>ic_P`Eax9uhIh^Q3 zthrc#wp^9k0HT!^K}fi0(fETxH-Sqfk>9L3BKePCm~eD1A^`SW16|1G?p$K`8IL&u zkvBDAKrEV%95)V1FH!cG@z|JZOFGe)$dkp!?sTDiRA^NuZrGHs3tVu9=$2RmH<94wS7eC&sB5+f_LnfOWar z0Sa}*y2xX<+A?r2t%dHt&P0VCjPXCH2MV070*eG*3C*8K!5B){w4@!*@3#CQU$S}) z$a2P1P9Wkp>3@qLh09h`dcD{8Me=t4IQ0_2RT?VY?TDA!UIvXoUD}IflhXem8nU^> z-`tWC|DghOh#N^=!%M#7CafR=QD$EESLg%{CX23QaEVKk*|rsN z_pdcO2^pozX1PH>DTfzgZ@M*w`5Q^i+)gXtnKL^R3Q;zFZQIcdYF@ zE)Z!S(O!YZIaasaPw@?Y-F*RpQ-BCBiGl>g%Rpbl!5qt!stksH+X~U-=6A;|fLDf? z4p&Mq&Y&}BnA&O0NNtVls1?4@Jvr zRRu2U#GddG+^OuJ9vDJ!`-RU;5FoD*9po6$T>g{SX@L3;QGv?wj$OGt_+Ly^CB~6S zfDeu1Vj424CzwgzegaXypO|e)+@K#!ia`|o-xCs|dp^O$lX)O*%DWm@ z(Le@u7Sb+Hy6;DjBsjbJM!qfwd%?Ut9a};r(*-pok~XLst86|~URZ~%RA8)7YrWg3 z_@Z^xj}bm6nNJU(JhepdziC=^5_;DS7-VArxz9&jK8iA8N}Hut7_naJ0m#6eQ||l7 zg*3|}bz-}YK-leHJhDa=#%TA;6IhiYfNL!ncWy2P!wCZIyOZc_|T0a2c zrmXWOl+-II7@CRuM%rBq6+dVb_`wh6tJ!B&(HGS2r#kN*Y=kf zgd9{W?0+}@jGg)El2uXYPCK=95NLSITqM!W8nk|{lLrUvHp_}Upi~ckWPj|%&fxz13FG2mFB&PbQiL~~y(471+y!0jc6 z(yrgF3skTxa{Y(|?9k{APl62Lzz}OA@1NFU;<7<^?3hMpCj= z@2U%+_}WCR3~3N2Jmy;vAEBm>68Z5Hki{bJm^BmBzHl3Z+2pI`P(Rx?)`lUxx3ZII zkFLP@Dl9`K4+HOon*HYWiN0&tMm3)oTrYRH*()d?6=tW4sJ}jM?)cE|jYEC&H+Y>` zPHNe=53v@z)`R0T#}PWJlp(IC_4h9|S$y$k>IG>NY3BnS_5hrce=xn(_-vn)TNqLA zhjfUO;vIGpwpySQJd=(|Skb6e&^+D;n_ns}>HXoc-QROX>jxjtm7=n7=E3m%eHfHo zRZavnUs?e0JO)#iwwR46KsI&9v|l3~^UU5F5?K&LLOpcwW&0M9O9yX-m`=DtX7SIbKp*2CiSWXQxFzA=2gf4ny@#81H-yqXT{MI6|VhS2GVM!3(%pe}mCZj~o@k!H; z{HyJyrlYbhNWTH@U>eR$D#})YF1P3Aa@Md&S;qK`@xwZ^4i_s>yjz4bMLM=c`&`vFLn?OBybL=?+T~?4Gtha#QNTU9dsZcy#GzuV zrl6!rJfr+TQ^U@s7tRo3_+|R!fDBUpTaP7?K@JcNR4bq=;?bTH0EQKKRj{xvN>-id zi!I4{!m@x#+~Ge#6La?K`DK!(Bku#5{Yo~VEmeOU%?XXi8vmhGUP7q%P+jSNeEY3$ zxHY7+{#iID`m*bXa#zO&mFN&a^2EngW?xqp=%H#V`PQ-RGi; zCh4avP#^;lmp^3Wa940}O~GOWTSoKESRa~1+qmBg##4Bq6%G)OFu*>i9)MV3@rVj& zm^pV(xogl+H{0OP1)Sy8jZ|CCyKd9Mm}wqG4EH`wURI_+t`dB#I%T}BajM&{NtmA> zSyX%LTYp55(shvoCk!riPwxHMtsf-3S>hyD2^~)CFg(xBK$lWM$|OT#HSv4ht1$cM zuiZc$&AVvOTTTx>g_SohYR99(5w$+A)UDhBk5KzXm$F97;PG zsOyBO0kL%L(34kGQgG<$>D<7~KEWbTH}(o!X(!LLTR6h zTU`C6CaMxGi9dI?BzD8xbpwso zvB=BmfRK7KiN&MFbk;_ar}Wm{kk>0-&-UyaQB0q$**R30y0})E881>#fSDcP&r z9JS5Re{rmS>CJ*@n7KQPw5hapFB;vmHP30v(~5oiJ~y_NpmPj?k?bg7fjy_PVvXQ{rg)AoFCnLR%@6r#$t3_hx#NXAlUcRLB66Tr8V)RS+WIr2JYxLQCimX9_6W9YY~ ze>@@)SH`^P+gq}0CpN(8jbsr54y6`r*qO{psZAwr!o0U? zm!rdA5Dmqv7ENN5o4B|J1`W7H@wBuvdrtI_0F;_^Sp}UCn`Zs7zGzv4#?byN8*rnd zlQJRXcy)}lbRx@qCDj60+DOsErab=W26a7OR?5_$jh-+G>|2iC%@sH>S2^JHSdI6wj&UhL2zZgJVtSARUG&qfYTzoFOt z1Rse)aR3EgYUTX;v^_;K4?Rcj*Na<)Ju0|F-Y%$&=E%*c7R5P$$<+3>cJ&#=BJRy- zilsm)CIdelI0S0?gZ&TeRxnr=iFfS^ywAn#e_RXwi_*?DJC>=H8Is$Xd%R+o>S<5- ztNL9;yC?v6&hMEEFZ>?PFCfR*9h7RWfA_FIn?T*=K+1xNP+#`NN#%vt9A(H~o0C!_ zIsa4bE}9e+5mjR$U(g7*V)IgcJn$F-e{*+_gaI3KS=HLDFnxyIyi;J@c!1$N8^G?F z`ag(8MERwE7rx8m`(VK*<+_4qfbcD??Ii!roLWDn0eR_lED;h-vQkuo+)&SFu$baU zG@AfNr3btK`s3F^AUyZVwMut1Q0n8Vrp zr2D&4=WAvot7c_%Bwl?uk|lMc4xNdjv$w|NUpb^mS9j$xO;e?5OrA~P%@0~1q5LiI( zy&j_8PpFP4HW#;;6wLKOYp8O%@3_W#`#YlvFd{8B%6uFupp21TJkpC7M3v_yD7VA6 z#L@rw2$nv6($zg`EcIaSxPRZTO`@iK)46k0(47m|uhnIVRDaR!EepLuOo2xHh%Mp%?m)8LiKyGUzq{9qfU+R+g~%PLsG8M^ zEXt+d3n#dJv#rN_(3a9_#iF-&OXOKG22t!V*sz9VmN&Q64+$FEL#|ER%kqs@z;D*> z<=c-D!LL8I36=h1eD;$2>4}=>S)_orcc3=eu2MFSSVXL3(d?9MJ_= zW83p%Zoa_C1Az=iQP7)^AI``*g`yqWOs3;cZSV($6Gr?urGPbFsN@PVd39!Vcg`ad z2B0O?uNHl+y(=`kP*7Ev6uj}D7K)aGV+%ejMoo!B-h~VXc>t_>teKa1&jx~wV`zzC zGj$EHC>I~Y^=T1-7m^K8$@-@O06;gC0MjNUqaZY3Oe2|?dQ}bx^J7~hBCuL_tLDHi zXUqh}$_oNePserdr$vl5AOwN_By_CuIkTk$wt57u_6i!AQtIr-$DZZ7y{eN4h)d9q z@rC3N?EQRWkG3(_gd*PevN1?v?XiYvIx-y|&E2yE5uUXYgCJ}wJ&7{upnMoAu=E)^5!{q=e)l>V{%{I;ht zB}}=>b&QGeqhuH|_Xkp-=-Vv6Ymxqk+oA>{R}i#(nFNU?7-gJFp9s7jCJ&CkLiXd^ zI3BZ9q3u!=Ycbn+j59;5%Z*rjOuR|8s)DX4B7Gu3-FFHzRLGjl*T+2;K#HjB%G=O_ zUQ-k{_i`Kae&)91bjDNdTw1%*(0(wX_0p0nO3RK`Y7ow}hCEi;R(DEM1W?7*cXf^- zKvFYdXnI|~v1cd8g8|&toulm5@bd%x+p}Z{Pmr$eX<|G|BIk4fA77e(!R4FKO5x{d z>>%r{8QeR;K)WTB*`w@_RmX&Vwfu1E$b&dAD9X5OluZY$07-hRE)9YREg5Ms@(N(B zKWe8l6uUZ_J7`2Rx$ZKnK}I)#hljl zgZGi|CdUgC=kNpnUx`@t3%#51uI6Uk>G6=|TIJuE!sNw%VE8}?kg47i28Lg*dZu-} zfQ&xbjcMf)V|)Y^&)K7Io;MRF!hn2(CexT2!jU?Rrk7QC}m}c0Cu8`+@Qk@xhFsy zb(MbXLd`Oe#3l_;3w^R#^zMh_@RIKxHlDpDW-x3wLF~9_gRh%YkA3N;;hGS)=-Ktu0#RN8l9QHo-)RFytfO`eGl`vK`#Y(FcdJ>G?%r?u zO`%;$o7l;WDzcyS$bw71KKNQ5BI2P@epC4nk|uHfIi)3$ZKHsl!UszdQP!kzuzxN4 zq_>w_vVL%(K7F*Bp@)@v6vB`@h$MUzh_@>euH@!Da}Z4ihlhOxM3(xmEC403 zHbUu-T8vnK6-_$WtN1?(EbHVS!d&fG`U0)Ky!y8J=hz@}`6Bnm~G+_(tNeQc=B7QWH=X zhsO&?cB`cOz}}$48Fj}e$FBNgK=GAxmsXF)tgU|KJe&Vb43roJTD*0n6(EEi0(m^3 zJ@`x8WHt9>zH%|5@JEVL>i6T*>8^KMn{yor;s=hu$zt+oh5z3eReN$S258Pdl2`~$ ztuptw$N8Yk&5zoo`2yuy%c9I1vlg}}nbAq9Nyiu)S2TVffDOD1onuGlT`fQJQk&2VVu||w{AM}rHv5BQOine5 zksorb)0wNcBg&d3S$LK8qI-wl4~lX_Por%|iFm=_4J#V(H5_006^2|^gr6Ayu8|K) zO#Q%mPBLk58rSungiWIm!i_)vO1K;TGYOi1R%$i)mk>aFlL?OVkp{ad|1b{@7Wps- zed!BD!KO0bcc`PWZy(XWKxttd23%jRN{iIJwql^wz!n$-H55zZPnS7PHa~HDy}k#O z1;a&%6oibMvNKvwd7= zoSO0H2r9v25^@>Pn3KYL;K4!$;KFM8XO~SM6c{@s4YCLh>Io(vGCWrcLlUpTjCnzo zFMP*AqjULsK4C?aLLo8S+_9YiswEO94B^g8!F?@Z%VQt+<^m_KKxNf5?k0%qR4Ri$ z`*ghyw1$NrZ_Ra4^SOC^%?(NodE4}cIH?jSx9g(Ef;a6M*c6@OWdb*?UuX%yv+doX z_YJt)-PC`>@qS~iXnBAv%<(KKTSUp}z)%{kBBPY0VzYf05Ar8r5e4Qo08Ei)`?6a4 zS$PA^BtPpG;g6f1R$(c>GE@nS&}x-TpKhFKOykZUD~Na->UrdWA!)_?32cY@x$4Omn{Pj|k<-X4l%H0DW&cy};ztV%N@%?7BtO(;zJkrmi+2tIw z2|;TR3Zw;%5f~_Q!;UHIZiD7f*C}Q-EH318>@rcxOb(5VT%y0aAwCiDj4%h%W_iX$ zvQ43^JQgKfPd|ct29IW}6RHNzr!Vh^M?x{-EvO-n=Rt=sh}~;iPLb9?og~o9K+^TK z;d`S@Z3A7d$MHzl&Z8nx6o4eqx7mOB1*Y`|bXn;-qpW))TMNGF15rA2jMELqf7{D9 z@>Vk|w)gU`%-gl0bX~cPLEH!x(w_~oB0F)ktzn3@Z6b;+3F`D?yt-kfnsx#kADF%613ruY1oAfBzMVvgIf0#8ip?t(Hnl{7rCpY8GfCPjO$+l zL0i9nS2~mQ-~xIVOopxZQ8; zzP3OjN_u=9k#c}~<;(!L$LJ`wQEj4$&Jfu#HKmaYg(M698Y;#(9!eFH&!YwmT(?X& z?ZwFPs6>TS=6BXzRCAJndu&9qTztpZ?eZaof6W|q9LF5@JpA$Nwh;jYs!x0jTlf`4 zY52t7_`1c8<9B&iyAtUQ?X%g1h#t2d<$>)Dp<|oIoSRWfDtR`31(v>C`i;g;2xZ>r za7E|yR_7pC_G(ykp~d@Y1<7!DhymIhZkQz7-v3GSZe9)xrp+62_BVYYoY~Vk} zg|Ba^n`?fBK5EMX`qAIN$Auy^kQTE*--zM7w0o<9T8@T+78WwyM3#^y7&h~#PjG=H zg3)IuSr-sdp@+GO7zn@L_cd$I|1@!UI|<~{z(a0hyLEO~p56@ExiGMzxbkW~b(mFfc&MLKY2I zwinIS>~`|G&{^mZ5f0O8k>?}QqUQd=5p%Z+)c_NU7{BsJfNuH*yjH0t(O@GnAlvL= zj9nQ@B@Ts3dqdH2pkHX!m#^IjR80@k65K@d=sCW9cg0<*fns>y76f zPe?+!mB4@|fiPF5l@+*s_BST!=y*#-{iMvdyG>gY4wJo{Ih+-5g|yLR3W>ijTHjP& za?f4Z4Eb7N*L9!2i&!Nn^wNA{86Pj~aPX|S`juSs2gA+&-}Y=M1RCj8bVVuN>{_Gc z1b5y)cNY#Lt;G3*Mn4qLA(agQgomK%cJz7(kc6i?`heqC35?aa&wu{&T=P)2D%D=b zng~M>v%mO``-?J++a}j@$G75bj}_-_7ny{?aYpFRYF6AyuM_dQS;013g}*vV_gz*Y z-}R>-H2xLH3g@ht>Ri$X<9`7u6(k(A0x&AHpzOo}T%n=8405ok@$uc`^I3@1uc6IT zNo@L}CJrj*moi<6)lj9kxB>Ppe+rnRz;PI*?1o_xo3mWk&`daVF;hukEdiAtVbjD< zztQEEI z(8BNRp5fnNEE9(ILoK1 zVEGL%S{i9u21o?T=UR9NZA)gp*+#9@zZ-u-{O-i!+dfH_@Mmf_t#OOPS;4DetsPU3jZ3QzqO*|H$vXdO`23F z(VD>U z>fZ$rEbj%GdH3T#GIe*I)J1`lBDAx`WpvWSBxdcr^y^{OeWER4>766}>*OJUINl_H&3q`qqrPWs@BLV2MeI^~k4RYvNhk zm4wLhSJahKa3ytXu#x^ifoX}D%p?z|+6hOs_t>E>qg+yu(UgI=q`{eG8|!-CBwZEs ztHtnXeu2t~xC`>wwh0;d6)3iWrbXZ;*)L;-*e+Zk0#~p>D<7lrf+ycw)?_AcRja*gQ|JEFSzFPzR zDcX>Tzna6269KWX*iw*9HlRzn5x4dNcq!+>32ExA8k@Fi|*~-0a5?TqIx_|6?O3vtVbcNqVUJpoU^9$a&Y>eD6 zl&&}07;+Sv&37!s$5X0rbYN&bUc_lVgGSuAvgd|xNJUGczZl#bZA0C>nE%bU44j#NbI|yOtB<;I0w0|1Z;7%KPBkqP<%oyjO>MV zAc^2F{Y1ogKY$0;(+e&GW3%kL=F))aj)x z-fLko|9!Z^6GNu?=J}Juz^lsUuSMM3`arWe-tgi@*}=17_cH=ptDHc_jkP3ApjF>$0<#Q@R_G*y5GX>{NJF`Uo3`n`gq ze;Tu~yhff=i^6L3=HRQk!=|k2ici+fqepU+nY<5c0Sj-;q&>jm(Z=QG_d!Ky5MuuD zqf!esru!v=5)jss;y}%S_;&0Wy>?69pGp`x{Nj@*wo_e8n_kMgw;%{*`us_#xvpk= zo5pkM6?|pmL4idggz`9|zf;oW@xy!6ncyqaz^8kp|-Me zrsNImwk5780hfDn*Pr++t}ogJ`eCiQ`>`kek+SpY$MZEGmkHHzQu}cw;L%o{3ycvr z?Y`g+AE^su+!i-wd|XJ}9RIu*V}~2?N(| zuK5`0W=I#l-GWr!J-gd1UuHyE-gmix7JX+uZOxR>6?Jo7I193pR(@}*M5 zO_4SS*q)?ca==0w>@w-)GylK>_f)N<2Cx+{;JU$KmxH4#T(OCj`uMhLVdA)j?eeKl zS)YxkK_2+j9T(oItA)_3)zLo7%}yK9&H6T;S`XzVCMEFqu^c!RAAprVxVDiq`(hG# zU0fKQ$2fw)30xu0;}K@}J~q7~PIkQ_C6L+tPYbZwmy=Ha^43~s=`oX@e>kn}xoLY` z${*38g<0@%5WQc~1Q#U4D15$CCci?$_x|<6I4;tXX=z>6Q;2r%rIB`?-X$WnAqZO% z5=%D7uV6(UgDhhT=NlHiLnwShpxHgz(diUz9Gjseyp9^1ILUnJ>n&`nT{`nC;_RVt zsCi$uM_%=_Ws2nI13wRJrnlc!-GVL&)OO*xe)IU3Jc759={~b=CrAQN1G?N(Ndt)d z_udRMQW!aG)L=^zsG$*mu}^jelUBbkkh0)hdTor(Anx-a;XsXlfx- z1`4p+eY=7^94&AJ*8;EBLW`HdyTUuhjDRF7WxKaxldt%4*pmY#UnmPjpDM8FzF@!2 zcao3-FL4H@k}?qlojJ{^cwj5ocf-B`T;#4{NVDcE-+pl7bfCKlXXzbE9RW7YdEs}B zZ2F@9PF~q{0rRW%$!z=XmnB$~vD0R|0TiPd2U>Om>k-k^C!YvOiW|?i_v8*$SK7OAhRRRZmJQzde6NbAj8)Q zZtOtuT@qdl{@$(HA2B}fuweEfB6`#$9vpOhW6%XqG9e@!-}&eojMNWxRH^5&5w6J?=)VJWdp44XL}dB=k_l95faT>WWJK}z$Td2X z^bFOqr=_TUxaQqP!}13EH8k{;ktjq)=@1&^(OWk3`=l`a@8hYo_`yhmI!V;*vd#C2 z+#g&J(05BfD$s{=!dwyD`-kf*mYwJ9a)#`89)^+g$em4x&&KN1)t51j19K;Dq`_yG zEg?K;q;}&z6S^#q-~9aN4PX77uD^G|4%h#9-jid>yV;8JIAiOR^*UQ!@1$1eR+{|r zE@*;IR0+SAg2O(;>GDA(r^$F|4)2ly^!aX;(2dp&>|DXsG{sBW3`?##*ab7d*Aayw zkG-Z>4QtSpR#v1G1&?NbA}U2g;4PLDtdS&|$KMfEVinobvm@ueu1iiB*O!Reh*j=g zwex|yogEvMiGML^ih8JTT+;{UpzF>rNF8?{&bYM~H@9c`;w3HJqp!*I2;v>w%kQ?W zqfOCwVzE*71lOW@gaXoJ4t2K!?h}}*a+dO?nF3% zsdIyyY~jlZhOANV&uZ1Ll6(D}P%*HUD4zbM!Ep8acknn3sL2#43;sYu(3Qbvw5uJk0O6;Lf(+ z+Zc@@o8h2jY}hiFH?JaOU)~sE#dALBqe;jw0`X$Fv})Wx>!;P^DU-c;BQ5kU%T!vB zX1G5TJq|KSF-m7we3(b4p?`1qNAOe1BH*W;IB&)FS(LFXTRyU)bvvJY849!ntDM$O zt}Nn((easPtTI#TE?WXF2}jeT>|qJ&?N57wu=9Qp#9P(Eis=0^N%b46_DtfpZgQJRoN z6nta1xLgSgw7GaK;z5VuO3ebgy0At>~#gdF(B<%w`-puM`@7XVlgAX~Yv}bu!3Zh}VYi zUDtW+a+#-)6z!SPYn?^ln)5?B}Dg>Z_+bX**43wsS>| zi9+vdG{6!hcC=>7{eJh3t@(Cw;g9%j+5Wy)mi2Z29hhDHD#3(q7OmQHJ4yd5)661(aLdd*{_t_)l>n!?io$4s+#O8S?kZ^g4m<9>mx~DR9N}qHs!_ zP+XR8Q+{}we#g(KdS1uz|*IGyKhWgn&Mc1AmR~nqa@#} zkWHU=yJBPB?|kbky$>F|Xjg^ze`%WBTrmsZnpX)Qy~sA>X- z8WJsjs7HhagVZPc`c3R!I*sKZy<=o00<-ZsZ_ah}`bS7ho3O{${k(EA+Q1AGDqs7b)A-cxBk_M<+`nf3A0w_K<5Q z%PC=QCS-zHpwGV#2wMZd2MSae!w*@`Orqlh*7L`lf)`)O8eX}q8#h<{sAov2<;IyQ z#5~<}SgqTp2wu3%83CU0_qmJkC_2~aN3@V>f0(I4S!%2x0^^NM+K|akx=#iQ#doy+ zKb4H>XF}KSM;9s@-n&F(5Tfl9SRLg}N71#AVSX@_rO*YJ2AX0&(>`P*`ZF4RM5ry1 z;|_+A(UF>&lLCp2x1YgGP*-RJBusr{$5^{Kg#{7}u zZf6(bM(yY{3;0*_7|nRHH<8-^3XIo}1OAQ0STHJapnP@w89Yu6>ID&cfNCoM&A10U z1MW6p&O8^fkLB;53v~uH;han76@zvwL74H~&Px!1FV}NKUEenYR03% z`lq;}Q@??Key49ObDaECXBCE?StgZp!Q%YGcB66)xx;&n)cZ4uhrzjo1yX$3?CbM^ zH{1D#dORsHAC!kjjm8Wq+x*^?r=u<}dUf|=s+#QYET47|7ar;5qBa@)TizRP@*}%L zPy?jXjNF{KNTi|+k(1%l%E;29d)L#kG5&i<$I}WfoML$3)LQ7tgXlPwER!@rI_Y$) zE6GckK%geb55fLy1YbDQYqG-GghYu_B*d;RwReVO|0+f?@nCes);%d{HAgCkdp@b5 zh~W_W${Iz^Nm>qBp;J&jmz)tnqXM>whi0I@r}Abkj8O0s?CL6tqB?DF)hBfXIgsg) z&;>SMZ3*#~ry=FoG$4=Ile_Sh`W|Yjy|^u7;~Zz?-*?2~me}H7l$V=#uGo<_Ho_q!0b{T5-M&6GMtL*Bd;Mk5(X>T8m60!_z)g$q`c1Ysckv~p-1 ziBW!X7wJRx(3(tqHm%EsnYzGIBD^O4a@C>~xF$Y)T(k<)hBP^+F=3F)n@zR<{Nm|U z7Bj4+%+pFd&2NQ}LO(~;=&V`JzBisY)_<+!pys++b4~WD`L_VJs6G) z9C;&F)wz0Tp+dF1A}D8Cam&)1LagaDL_NH4bmC+H^;49oRy&&nVQ+;ZjvLJ)$uH9Gny(g%$uJc# zXk2|J2-*!=2pO)Ezpe{qhd61Rg6}%nq|5y0HQoteVnL^f(Mx0z=(vq;eV%zNXDSCG z?c`rF96ynm2RDe3vMG&@A#!qwMquHW{rB^d@v_6DDV#1-2;fQ$Fn-S7QBIv?PBnBa z33cvYsdN5j<3xm*>3>S94=#SHk#Z`zs2mw}OgtWZXkCQJ(8W>_I4NVV`@Opq+n}kK z1Ncr2B(e-qe|DjDjARkRpTfoNAD@Q%;*4=Zfxjcd7Jl}s!>mU3bCq*#u8v+Z#?W@F z`t^hMuxAyAD62FHF^dgx?K;cu>CHOWH&k@x8aVb)RVDCJ-pgBbPIFb8M%xlIwyGI9 z%kJ8gr=s8#S|a!-z6E4LHQc}7Z=Al7sEac%_vdfJ733x!ACzrZ!(&S=O|($cX6bQ4 zS$Df)SSvnO06#=eohWxL{d$(8fs($pbiWVQjXCLBAw1z@g1IpL1a&phM=*M+p1tru ztO^)qDm`QjguH)kM^17NO9Dz||J;)G7;(WY`cp6hd9ZX-dT*9|YsF=LBu#QSrWAYV z(mg#nf!oB?vO|UL#y!5a)npAgnrN>+LxOC?ah^5sF86c3^2(heXzHuFSGFZVyvFp$mxo&5|L@f*jBu&~uL za%)W`K}Bxoo;e&Q{7hKei}Mj;b*F@dpU%SCBL^!-2#tywRvSq;i{olY39$b3d`qGj>(>@*VUNVzQmKumv)wpyY`QK)6VvW1(Cd{qFQaiVgRW5Zq ztmOs?o*$2w`yxF6N4BLFt40lZH^HI+qNhD6A1U?cq-U=??UW7)YGEJYLkoB{WIPTV z(o|oS4GO;>TIoPa*@U*%bFj*D5C>YwI*wE_6Dl7gZ$d97<>#6e!^Jo)utoet`PKin z06n42RGQop%yyi#qW)Z)06E7wLyM!YBNV13e=LmQp-G zCkma<`B3ZrU$o0gUW2OWz>#`=X?1wS>S>4{QMFfX2Itl!eSlE2Wj{oKEbW&- z=G{G`d_>UdB#B-Mrj3hsOVs`Fw0X%*-_^<*R&6T;RSWCnV%3s?m^aOSfF_Z>J=&=< zy_`Ft<~Fw)g^4DruMB4Y^rk1jZKsXV=ymqyYhX+BQ5CD|AKzh|o@7b^Q4Y-Z-&4~t zL04*+Ff%m+1LM|2#UZR_!v}XN2I5m8KRSAl7)-K9+$n^4prcmD-`uYE4f%~MBZk>v z9t?8dFp}%ojQQh_?(VM!b#Up|a6tzAC3&*o}52!{?*X9sA#Do`(GOzK_mxX&?scd{BAfcwVGD) zTUrYXEUKtSK^bW3;$^y}uu`5b9x=DA9=x$AQ6i4N2@wOEfV^Cvb+la=)9j|xPL|cy zh)2?Z%XjQ)Ce|~MvLddMC>UF}VMUSA$67*`+%l+8lEovn0pQ9fCMhYNEB_?>SNLVCQvm1Z$+s?QAsUCqHgFxw-KSzEs|0FNs3}vO?;Zy3Yd+0n%vvR|cW@0OrbXZ=4dX z;LmB*%R#l1PyYOW3_q9|!pz>AFfU{iq70BA`!(#o@q^EPE*EASbd&&e-uPuN zq7`*4+0;FA=M&*bsSVexJz@xhZ6QWy?jz0gQtXNnh*GETC%4o}!b%-v;7O2sP@ zz%F;KDast%*IP*w;e{m(%#py5Q{ko-8ekKkk^rwB=|60(Apb@2V}KQY6E^?0G8n8% zh(rM|)B-w*OxTZhM&(unBSvK{1h6z%)5`NL-P-!APH{=DE~PU;l_L)C>3)Gk_(WN# zfAjgE~z5HDp#+ z5*1x4XF1nd2<2+e3JI*%SU@j{Yqny_-2lDi9*kxU9DuPHSY>U{+W|1L(xhZNxW7bX z0NmXWVYapQ$GeWpUNvK84XdK3_F-Q+p>%Lk44VidTHW6;_&G&YsIlBx*$vD(;wlKn zHFG8;$dvzPv$F`%a9X!of(;YpEB&Nr5vu*sDT(qW2NWe0Q1G_fSLPNGy^L{b6D$KF z(oK3(szZ1#o~8!|dnz*u%aLm5gm<1J79}i)Q)qIa^;Oi0~x|Yde{{4LQ&rT*_P@TU@`EYx-Z3i zw~a^0FlsdC>eGCV3<~^Da}@WF;4ct3t*^ z4K}@ArK}#o$dC0WUkyDYcM&wGV3i)!S8a)A)X`qIx$(dTA>+{^Irba|5IU0a9I068 z9g1yn>y5Ms0>ShCpgK_78p(xg6Qc;$0XQ0`-5OKAxMH?(QC)@3kx}Xr+kY!@ag2u7 z5}temMzF#ZTL+AidPlKMd{PA&SPhTMBz%j&s$o(WXR;UvlJK7}+MidI{ho|M(6l~; zlGANo7;vTp#U(;9*7GSXtO{r;SR`?haJ77DG(8*o2s{1&sro_v9xcRkb(1;KChrsX z|9*3pP=fe-)68rp1F>X-QNe((h87kLXpAwVB~F1{xp`xpnvG$#gLdEcrWAQWh6G_b zoTTYub(AYAbj6Qg=FKaIyK`4(p%7ln{)5DiM&&RT>)~ep`0nek5k;xzc|$vx{~BK( zB9}xFROuJ&NH&~R#4Uu2obK!Ndv5=!{YZKrv$29=O` zqw181OyjrSj)W*E>s{BO>FxFvJSNt(e;u@Ox~U1;EOEMi59!;w+f(?8=o z09b5B$c*Nh6o4svlWkSaMxy;mzpBlM1v1AARm#X-NF|I)ueX`>wk)+o#5LLc-;je- z?6y=aSe@`YF~1$pH-(`$Tt4J7vj#2$H-ZaoU7bg|Co8T?g~(3g zamrCS0lxW{TC*1A(nqaL`%+re;@5Y60;CSOV?rS0~z3Y%BvpA{fu09~^D0uy;m za$@c83aasXa4SPBK}*gGO>`mQm_Ud!#yKFu!LC**%B?(nr06mO^ZI-Nvq&~7*S;J* z{$*`tT)6uWBe*9@?0NsE?{XL~By!11D`h?fK&>0KrU+!PokJ&S&YR@0$_zo#4x!Cq;B>DM{BZMk6!F%Bes`;S&G@=`bw46KYj=TeL zAHbw`qYeY<4-)&?SJhCtzJXnXn7--k11b$xbvkJtHMj=9vQ;tseioZ4!^}FYmp!-~u1|*=SOnX>egOfRq^GJF z>_>!i!TK2$DQ<(IVA*u1r%jM8{Y-{tP(e?0OR|Ub)vHwz!vWx|ZYaMzTgZ-lE_oP> zMXJx}1#l{~3DW;23lpCb}D0tJZRqp>U$CK6XG4IAuNlS&H2` zpQ_r9*RP8kp$jHf7pM2OqnSrxAQ^0g)Hasi?%DFrQO0P%wWl^d2i*xZ?g}?RtP-8v z=zIE=`kr{D=MH~dj930exZc>0M^ahu=dsk>@fvv7W!bLLAG0bbQPom4gwX>%$6$7O z+XTtL-*u9)F*bI9yv}QM@4LU?snnC{xf3v zh@I5=@RO>izJhubro@>E97SfnNX)GKmUg#ysb6*#8QhxHNC3JapRA=}2Dc4`zd5Ia zB><}E&Vix36+q@q@_8qtDgELyYh#D0RgpS%olj7rOv_6gV&BLODsrEM<4U|S(wHbt zS~bo78RUM#98kd)BlfDHkz^3JOW1CWK_^fxkxc4XD|#{v-G|7|&kJq>_tE(rbjCGuBnXAc`Tq!q;dN#d07iaVFuACHhnBDNQ3vkl(o!W;=6cr3Gb zOrbVUqP<=p$b4`1YN>1|JvNRc4Evyxokbbd9q|~h-XbnpGD;6c3aD&=)`K>)=@6Z7~^3*;v}H{rv*?!~o0vb}*15Aq_vRIXbq@~jl< zdMF*q)-uDi4RzA+fMa%@6EWMYu^~{OjOa?N_db94>%%)gS1Xi6tWQ#?j!u0^t4O$j z;PLx@SbiH9zp&|c&oYy}co2Pops*CeqRRfr+b=GXAV2+R5Mg|GR2rP=hGJL?+fg4Y zgBdTC5)t(XM3@h1=N9MYQ7nm{W#p>lf1;Q2yIR1Lq<&Nl`EXtj4bq}PeJXNS5_TI| zjlftC4RIH`AcyU)P|S#00@_Il2xh&21F*f{{h=d^zY!t7#fQhu4qN2UJH+Yn{V{O` zb%Oj^f50;g&*!!=LVGuN)(w6JlF|sf3u~#hx6u0$6je7fBU*FwtV~z;=aIXi{22td zXi-A9R7E-u&M{8a^{#o7M3WpQiWEsyXca&(*`T|+yfNhzDIU`GvBH{PydGwj28vujRqUsVj6Y!( zuRw2$6T`!uz%QmqfzOxU(d*4E`U3jb+aI{YjN`nRFy;c@xFOV95*s! zqLQEn#_JCz$uNWNWNVl&f|ktm;C%F5Qy0IH$CEUm70hqLr9h5X~uJmwj1KzXQ{=%iOnO zQPSvvdxdeO0*71XC}2tXb)R{Aja^N}KB*F!BBBI} z%j?jJvhJ{RZCb?=4kgU=hw4f%3PQ8r=22gY!8nEs9kkn|GMeN{!)#hpk$QA80_Z-F z!=@Fz`K`MllG$kqlHBaYX=vKlrVb!QyJ)(VT%PL1^;31bP$UkOF~~U+C^~d_)o<=X zaC5EacLP^a_s0vHn3$CnnnVuxIf@MKyuI=4HLb_*0cG|u7`-D#tW?+Z4GH$bjbwLG zWF*5YG94a_;n37AdLI`;_&HnKIZ%;j+-WGWVw(`GYJ8YFYH zNFn3J3KW7GHFE-*&cjr;qqEvM#gotfgjALcmuZM{@-7OGu#$wIptMj!7`id$mQg`EV%PN?4ZZbEH-`%U_lj_2E-O?xbgVIh4AL)6wjF!2fgP#`vM{)!ox zn~s8eNWF`QwnO1qtFC%p?;f*1G$d1aT61m>A+%v}E*2$6E&lUTwUwNL<0Ya_;uqfO z;H4Yu^@7cp@?4#UFG?1WfUq6&sIKxL>YFLi`I zVQ%wh2y>Y^Q38rxp;s6D{wp=?#iH=tCfE*Dc)_zF^*)2y4c_p=y)b2N?(0|XN3z0( z`@XUlnqklFw<_7gghpQw+rwS&xZ?r1>2)^Bxunp-@vC5+{U1LoyJR69zqtI1af^IJ z7pbP-w@6|t`57gy#cFr3piXiAli(l8OoU@H-G89A?WDIJL&q6J#ZaoXuy96m!E{BZqFjrHTg78SM;yaAe->W)BAt?`lImGh?fUM!mz_BbWH3eU6aRkQL=XV%^Wg zL}K~HL*L*!Ss=3Ts;@g>s)JvL(ZAOV(G(W5i*GkTORW8xx?1KPe(#kk`0HzW^JG|L z7p(QJq%$h^MThr!G%16?bVh#hA-G1FzXZIR^IDR1m7Byls2UTj&cO9e7C_9w;q*$! z8&v; z*?y1E0F^HwVbmws6qCYC`Z_W)u7a@f<0_ za*|+!wYX2=gnHI1(!G4jAqZWLGmNZ8Z{Xf^P|E?0x;nPy*zchz#qkDX$G|hBw$hK) zN~Iy{6O1Uf+Y}Fsc9PBP+fvn4VfgR+^Zo?uPPUyS@opF(ljb^%|GYTfKBxUR68=-# z9$;XQLC~iT^NAjj08Va!5X@`9wNU9^?La`46U-vjnB^lTtE_Tv^1IhI&g> z2|Ili?MdyC!&pFODEA|ufn2Bryx{(*e3g#1Hmpn{B_P>5LeaaBxQsd7rSh^)m86kfkCFj%ji$kj+?I@fnB| z5gU;qZaa+-Uz32kAC6lG#-At7sMo~WkYZc;FI(Ykz2?N+NEWi5Zu##60bw!86x&=9 zPr7rJxaKPg;T;RT6}?J&ta@dJ5M-VistmuKQVlB29D4FiJAflz`m)eISCX+D-xw@K zP&gwyM_%%uMD*&|vQSotfiZtH%Wtnbcs)lvuk)Ah=Kvh>OuX=e4vFGgjLQ-Z2RCy7 zq=vTEf6z4!6+|%TQc1j?6L?p#2hBuhD4>z=5;N3xa2hQc zFwM-`AHI6pbwqR(*ivHEu<6XGa+8gLcTdU{MMi^p!VfaC0ZCP#OnZ&ECIPy6gpl+< zv@&!gT(@k#&{jZqU*T`&saDMZkX1E5HQ|*Y3cdiEhW)@4aRrZLTg@@Ap6rE>m7s$U zkFjS1@VdY%uiD3-4#f1&|KAqKr4mH4VS8<1e?bZHhGGB>){4ZMPEtQ$-2!sv7|fh< z?6K<+%?X&rH}3l+urMgSESw3S=0C zE5WSik2;Vw=Bea73NEk}8I_wC7*efyr?Fr@AYXWPXD@*AOwi@Na<0Q-+Q7wm{J3Vb z|DE-nSETmpf3OqFva_Zb`&q_FPBZa@*#5VPUAXHa^DyYFFSv2Dha;K*E9k-zLBhD; z8?zLQ+qYxXO|=680fJ7lbevbIV~037m}`;l3Q3l)S{2X(yv+X*?ufJRYnU_cBKWU& zkz)J05>lW+&xhAR!sDX{iyoakry?fh{=GDwT%%St7apZ8F%q8*9InFgN|>N|NK(Z? zyWU{SO7gvbefd8oxYx~}JEG`i(blv+VlZhVG!N}*EVvKLSbbCOjVZh3tiR(~m%cL} zY->QU7K7Q?3>22&STYuaof&i$*XeG2%yj}iY&RbC{|5HIUzvn{e>$Ss2y4n@{6liR z1J9ngqP^F6ldL%~+6zm*O$`VA(IFn>N*0387*U;9B+LnR9XcQk$BDXWxj>%$p|p35 z5vmdYB%1c0;?99uW68`o;jeo-kC0IX^h0 z*_|vV3%GRJ);>oexcuTR;e;hAus=GY! z3ti^wEVA4*J$k+9o!IpC+a7d#QFrVP61?o}JypE^^P~Flmtp^Tt{;xI{qykR;Qa%a z~348&+lKJ#j9R!1b8>2s7V@g4y*Jz1ORY-pSmTMOAy# zKVzM6mR-*s{J3M5eh;?O-sg_IaRCPJKe?~ZE|~UO!<#f}9uo|^@2CZWt!_gqHyvXX zj9)H%FpCY}e_l=rjAA20ccX$Y1j}kUkZOwFJ}1!SWq|exP7KO8jo0%i*iSOql_vu| z3#w6VYVv+BGf_b$`;e7Rl;Ij}U^^iqb_Fvjn|?AKBu_>(A6Q3JuiOX$3?nEo5e<;t zW!TZ{c{VN@LdOrtPNZ3@guhzpd%??I_+jJazV#o8`De;5Jutr`;lJN*n(jn(At7x3 z5p|+EggIY|7e>EYpj#^qnI*)gpSr*2rjXVgN}=0gO`mJ5dFr`0`YV~u+Hse==d5|; zCGI}B@CJRadVy!~JrQKC2p>z|?KJ)&>QC>fd9E?WgF~m=dO8mI9m%*BIeOK!bm;Z5 zwSSfa0Dk?FZ6=-$cr7bkesF+vU~@RlP&#|aMrzyvL3I`_s>KJ|1J-}CA^mXFv3O(p zBzvgE+xKuyM9!z*eR+w&_H{Wl`572Bpq; zfDbn9`ye!TceXlu#Hs77e;0lvvA3Y6eH|*|v>V@QNoLI`R)>1ce_bV)$ec_4%Q>3}oS@w;Eakg^AUacGISkY+Q<3w*yC ztY2S@c8DS&w1np5nx=mRDc>4FMk+)_jJ$^*!hrk}B z&(hr(!!I6B%lDpT?k+O+b12fBe>&+0+BPMJ9;X-W_{A!Fignw4xb7ZebtVo za8y?i2FRA=c4dzeR8ZFf1+d<}B z4BkJ(b|(^JOE4cu-uBOmO=4ox$>o{vq0VDAWK*!Y1^?r zFSk&CDXP~SCj0b0jw#cd+iDK!I+>Nt2TF6iUED>RkMNfnVI!t_xM2!PDNE!C;G7n^ zm3dL!)t{G-L5P=GwReB1q#+kSR}OmstF1emMH+TuYarsD9|*Z|H;hC6Di;N?ylaZ? zpbsdW0alK|3}#_`4MEV^YV{R*CNrf=V)#@@au|t zp@Xm0Z|$-CIG9n7!3Xm$g_3Sg>T46F!6-urwOONd1m5S~;^F%3h`_XvlLRpf1NXl9 zPuti%UXES)FeJhN^JvT-lYoEw<0qfE(-|_GY~U~98_zI%)+?7ChPMqqM=9PnhNu0HVsk&p zrHxMbuPv$kA>IQy{xfI3q0623Z$3I!?Hzo6n!wk-Z*Udkv-725U;sx(YZ}4Pt>&bD zyo=4^nzm@Ratbx7V-`K3KdtNUQ<$*ZJcR!6F z@nr2!Y~`O~xaG~siW%l@ZE8N(*#<x;)gw!Ytu9ks1%7G8aGFZUm&`<2c+n(aN9EmqHkt_U(F`zVur z9)VkI@2K`aWz^_MY}7tcOs90TRK+GFSP&xHuGtYJ6&62?^tbwCH@d;&Ja&!coR3Ey zc~{-+i1gL_p0&$9-%gFfDiRC10J)vvoczFqmqFLY+iq@*SLa83tqgAidsS|!g14aq zpiAk18QnaH<3Q9RgMs7kHDMsnVK)rlO6%t?(RbkKP%VY`>B;g3ja%|4dik7g6CPq4 z^1r<4JBkXjo5VX1ZXHMO&J~+%CrQH=a zQl_z(YDhaAdaht3_08Q}SGl%}Jg^#P{+f*zctI+hZE)i>n-*|6$Hm%lHycBcR+fDy z<#sLOLo#;1M%J=xtNk>bUG2wBM^0kT7%Yy&JVLj6aHq*b@5`B$HtL4g<&hJIshV8Q z>~xtVhu51qbD75bE7919j**mTr>09T1>z$Ks0NRbh!HM8qj~g;)bcw-ZSMc?>=4hs z-IvY{w1>VO+*EdU6%p_xax}W~rf9z$ZfwW+bGsalKIYqU)Xz1qBU95jeQ}ouIB;sL z$(9B0DZd+gA5R&Q_{Vt}_OpjILOCgdO~W9wV-;kGJPQ}eRy@{w0R)^ zJQc#faUh8V~umk@1gK$xHjvW!M0urk^9uU|sl@MYPFf1O@|`X*i^W>3FUf zU<|WpYkVecI_=7r{m&#XyK`Aluk4nqCA)5!YAs^h3-%x`mAz|k{x$9Sy5rBDSn~9Q z&B26Rly|q53nP=43w7Tm-7-=j+0u9yomh$i+s}))C%s0CH`S+`t4qs|`hU;XppcL1 zq;eXlRO#wF-aiu}oKLUt;2nj#C7t!kolu}AOdE_qjI?U&BM*c?cGYY6V8rZ%H^%ha z%V_<$E##0<27S_rfaxAu1Rz(SkztIJQ>0N;j+M4b3ApAhcz5D%=f;i?-FPWV7Xfbh zcQLL>#NJ}ARles*%ggcy1v_3X!wt9H)~Bf*O~?_ydEa?gh9!gYUS{?JS+t3`nTLf=JNbzFL-&}1RLn2|eNZf4ra zZZ!GZU+(s&q@Z%2fdP+Yz_cihELPS%Dimb0G-3WjLncKIPx)>=V?e$7IUVG<;Al;Z zpm{U-x0^CUy2i6Me^zF1mU`m_?8Gfc5&3v=&!Dqtai9NaxM$hh?}Mz1JuFlAW%>pP zE`EV$a)F2KeV~(v&qBYESJT~w`H6VH#UaBx%CyHnbF4wYwj@--qLX1tIEp=F@9vDF z=a5qT?Ar4WTrQKs?{hTyy(qdA(BIts!V9hlL%e*bjAgHDn8gaC>nIrVmL~%24!Ox| z$C_*%Gy*(fav&&Dl5)#;%r5nIJdZ(?WW=r17X#uM!Et0cz39qSGY#ohPw(c13(I2Y z^pzQzlMd0)yw=v&3Xe*g&c&;N9QXo)uZ}2ny((6!Ezc}oXXfv}Rrm4$x7E^@uES>;8(&|oI zr%44@`xrDx6sgre@vq|eI>XPaq$diG2CzrnnIfwOaAS`mTXK1aM~b$Mt)e5$&JQHk z}=+#;Yv4E#n83 z<_BMuDndcX9TLWd<-z{~*N=E{u5*mzX}UoW@9Rk77L2v|t~ov?#fWCJnx|}+em!Q{ zjQSYP@jU$04$dM2%Vjip=?{1x2hTW=oLEqBoqjF_*_d$0&9T2+15VDGt+V&Ybw^$3 zFWNQDQ{darWQ{m#B(at%qRr0L>Rn8p4{&f>-teJKj%Q!#C2fMZOaS3 z=az5=C=2lJ%Ih;Hgy?Fv{Z9x|nk0 z31T^;h>?a#cB6>p54^b*{6F><>T@0(1~cNH#Wl1*dm##;#+PwqI>sn)-%^>x}B)y_PrV-|bOIXOcKR{)t7 zsN?us48or2HCz7I7exX-2OU>Q5dEep9BSR8@^h8mS9#HU$6Hjt;VsdlxjAC$Ivn@+ zVAuk<(qz0jzmErI-7tt>=zGVbWSb!SDX>g{{6I#=lb~chyo|2_gM2RsTQOF{Dmcpy z87%n3T`f6rm3h^IqhFonq*-C)zMco_`}2D!MDS z+O>mO+6ex?C=9MlsS|sq=Mw><262#lihxf=D`fF*P_J#g+7GlH1xQY6-bS`JQuNs4 z)yAx2XeMet_I*_wC)oJya88_jK^%kM8KJ*S8A3iukX89^T(n3YV$nMwxho3*5m4X$4^F^^*&tcSl>Qb{sd$RNYN) zU@f%=p9vm&4{S4cAdJGRK52t9P(Gs$cqgNECCa~a1eb&GZ2V!?-YYiMFsm5xP+zL2 zA)Rbv@y_>2hX_0hSSMZ>sc)BDp!oPFCMMmydz`($HC%%5!oCB%uNSg8l(pGpfUKzk zz?_Pzc$Hz`vSqkyx9(4bi3d9FJql~C`;A)v>V^}wF^J+Ln_rk$S5AVVC#=+;dUGimlqC)y#M>?^*WOQTe&@kn1MSRYj=obPSvX zKBgM}&fHPy(iJxR77>FB9dKzG`V9!*_{*`{GtfE=)r4PD`%`AQ7xRY&vcVC#;}_#3 zVigTdCb;aD#hiw3oG+)@d-H&@{by}aYq}oGINz~Iem|+64l@PU;!BU{?}sqb_seTy zC#OKYf>CfidbBogNq__TZAU6@Pr`W(5ecrQIn>RPV)Pm;G0LI$e_Q|@K{czk+D!Kk z^_5gCa6@lI+uA+$9i(8t#Vk|db1j4O^09MwU+{tQ87EzPWGVsQJ(PdQ@H0jS~`PWNERQI*E7Js7UgFK< zXd(-&7Z;{f4#_Wx0T)Cr!sleD!P((L8Wj4XdR;?+^34nb?e8@)9)xh@Mk@)RFmsC# zMPgb~TmGq9oOv3-D-Z6cJdiH7fQ&r|kjd@|P_)l-rE>8h;g&h=G)N4yh>AgYA z81K)Jjrlut?e)Q=jaU}eS07XTVXVKEfGWwvTNpr5#~Zk_pr6J|vbmXW%AIVGgtuYg zR`0fDLrMhFYTXbfWTXRL&1y7y44^xMhrwu58l75}AiYFbnH!%ve!sO3*aL-sX7}JB zh^cC5O`vI%L|egkEz`SB0)CGK&d51?Rmk0 z`j+zK+9J~ObT{%%G2sw6=@`>$SiMHSkWArXh##2&1TXc{d-nq`K*V5CpHF(LJ&pFg z{(x2Zieq2Ka1_6bApI^0v_i4f&!qStE1_CC92Ua z;Ssc_L+@DZ#J%;P#>G@M_zKYGGk%d1`T^BoG}?!|szYr&RxXFA^q2v1Dhr zOjnh>MeAhZ9`=X8c0xvl%dc=;J9t3Pk2G~Pxs}?V5@A9pKwq7SBWYBw|2syfH?cn4 z?$d|s$Be2$_GU3C0swDKV0M%b1+{{EXm;j0)v?dDpeaUGUP|q=zp<$2t@u#b=8)jE z!n(s>%Kc*e+z5%Fz1g+ZSEnvDqsy$VZXB3uUi(AN;ThQL3UVkt-qlk`U?A&d5UiWW zX?v>(i-(&*;8xF4s2rcyDwGOK(tKjV4uDezAQO*q)q-wU4e)+P0>9$S>3P}nX8QOZ z=cs44HOaCs64nnrWmJkd zY&ajO%G$!{UVOj3pH--L>lJ>cxer^TwQ@j27K-}ywnzIz1#mgM9mhN`zs4Yyul3cw z^xV{<6z)roITGEj_3LFv>}SCNmpDm}YbKg@6Q`au>*-{Po$2P}guHprx(HOs?CvVm zO)A#<4v@NtbfYM&Ep?Ju0%&j9%Ai!TiA3eQpSw%5wlSFxi3Wi5;72(?{2t7r3R}7J zVt6Vgq~U}1&Lr7``}XSa*P~l|OCg(sZ+YjDTpz_KKLRcHha3*E^pFZh2TmG66`H7b zv!x>SGoueD*OPp{ij6nrhCEnIPIwn0gPOkE;MbmV9i1_SiOx*M}Ou! zjCD7`0ZdNgrA7=BPF1&tLIAN6$@4P@y%PeKOG{q4?Y=~>@RDa?Ri1zcgJU#i+}z(B z|fY3^?pb9ql%4?p`men~KHoZkPAL~}&_X_(~s*cI4z zeq;BuKD?!Ql=Iue9K>ALEgBs59!zQ% z8L>PBO@!bI?K?9?PyItDyi3#nqPa^{+7OMg5fzg$C~)iCGAjnTD^M@g*DU9dL6D_e zpwvXa(6-cdC=vzMUC2IL$|v6BQJ+5>f6$fr&eMy%0|I~1`QX-nHy-WR$KEdPN+TEx zIOP7Soz1^?XxbAT&mwQqd$`qWf)4Zr&Y=Pp@Xei>vqEVd!xX!YkvkE)h^sM8MPO|)$=GkoIb%W4kAc^dF7f{i~b$ur*| zH4k6kx8-cDy@!LrzPi;||6j~Qf$f*xJRC z1b9;T(*~;vZK5{D+|jd&G4iZW0tunT62DCawg7!9CUpK47s!SV5YWJYfaZJ8ML8$g zR1Q#nc$nMx)M@r=s?*kIKjmK?)aN11-j_FM@1zTh&qb3A{lgki^-~OmYERO@$OVPrNyXrSUd2=6qJg_Zy~2WDghRB00`ic^dIR2^es*!OYjr%>@w{r* z%q;cD_A1U=KJl>JQokwzN-vL{Y&Py=1udmYSMFKfD^D1r)>!s8_o6ytM-=^vYx&t* zpxm!ptl6P86td((7Y>Dsl69ToR(IXCB3i?pq!AZ1;`U6@Iy zF(+P~S@*Y$Ei(;w1|E1Q2|5g2F=`H7`!ez~Jjr)8zd-T~8%8c$<4Mh8JwN+u1C7@m z1rQ(c^+X1@as0ZxPb?$!G!+WZ}%m9MN1gzhf*{DI}})2w_?LA9$x;;e+} zD&`vco9nfDi*c6Ds1M{-tr0AN7qGCv1yD^yL3xuwIfin+j~Wy)$TOcvYwh@>>t~5y zVt>TNoj^l9!dl@%KU(d&@V!l2is^OI3%lf99|oVo#%0fxaVY;})m>%Z@F^MNMzggJ z@Ggqj?tL3SIg=PzyT~P2mA|CfJa*Ur^b#^kT(}H zNLYS_RFP@`rlDcdJX*0*6au+cR{KlQj)~mC{I1S2#+JgTvJ3(=?2o_WMKiW;^KymC z?_J)aC3{DMj7*kpwe@mK)L+L6W7>&??+tAF_t3&EROgTtJ=ykJBihs#vj0ua2SN!2 z0rZ3hn353`_azcq6$>sdA#Izl*`JuAlgWN}6RYpd@_&&R!XY`Efn~(*;^BR%-XH9j zc)KzyyOl%?H2Dsq`cV}Hh-^cr)9+Iq`~Ti*gu`w31$4l9hPIl!B-k7H5Q{--S>_n$ zPmSc^BeP&pW+t@kbJ!sA0UDaTwrE|%$amW6$O|rOm4czihxKNi$&DWV42f1z^9x z1c!VXz`>CT=$_u)9@N_qazGG6z-_*ce_|M$hS0!FC{O3~Qu>g4W zbXA9Ux#SBo*Bs`gd4i;*WY3EwvUUsAHb9je;XF;#iLC|_H!OTV^u2|=gUvP7WPZp} zej47)ZHob}*fKrzW!58Gmz@s#c`eoc{Yu!pZ8+aeB^Q207#ydyhpt9Hhy0nLe5KNI zh#MqrlnD;3%l#FFWI{6+>nDrk03V$uGvsTz%(dOFnden*Ze%tCqC`d($faHvCBns} zxVqa5+fod^vWIot8?=e`u&%|bfHQn>_$4-mkd}v!a+h@($NsXDY7e@sv1YB0=)h%G z`+FvOzT0u;Add^NKrF-CR~2s31UJnP47*$V@9#~3;}B`*O0^+(b!u6eJAI0As5EjZ 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 106/371] 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 c1f1e2c9ba..76b3731514 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 107/371] 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 76b3731514..30750c6342 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 8fcb7944a3202104727938036e49a68280e94f57 Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Fri, 30 Mar 2018 09:08:10 -0600 Subject: [PATCH 108/371] Added documentation around entity_picture_template for template switch --- source/_components/switch.template.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/switch.template.markdown b/source/_components/switch.template.markdown index 747364d080..cfcb54d092 100644 --- a/source/_components/switch.template.markdown +++ b/source/_components/switch.template.markdown @@ -75,6 +75,10 @@ switch: description: Defines a template for the icon of the switch. required: false type: template + entity_picture_template: + description: Defines a template for the picture of the switch. + required: false + type: template {% endconfiguration %} ## {% linkable_title Considerations %} From e4d63479f128eae1060e8e3601b9657aed27cd27 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 30 Mar 2018 15:14:07 -0700 Subject: [PATCH 109/371] 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 24306a1745..a4af2a187d 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 c6e374ee09..631720114c 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 0000000000..cf51b17848 --- /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 0000000000..65350fc602 --- /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 ebcabd3abd..3f75c8cf6e 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 From 88772ebf1c28c85f048a9c06ac51ae6fcde9aa8e Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 30 Mar 2018 15:22:05 -0700 Subject: [PATCH 110/371] Update title --- source/_posts/2018-03-30-release-66.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_posts/2018-03-30-release-66.markdown b/source/_posts/2018-03-30-release-66.markdown index 3f75c8cf6e..787e60b074 100644 --- a/source/_posts/2018-03-30-release-66.markdown +++ b/source/_posts/2018-03-30-release-66.markdown @@ -1,7 +1,7 @@ --- layout: post -title: "0.66: ...." -description: "...." +title: "0.66: VeSync switches, HomematicIP, and a group cover." +description: "Fabulous release 0.66 has landed! Tons of fixes, improvements and joy." date: 2018-03-30 00:01:00 date_formatted: "March 30, 2018" author: Paulus Schoutsen From 2dd0fee2356f8a73c114fcbdafc7fd0895e9fd29 Mon Sep 17 00:00:00 2001 From: Carlo Costanzo Date: Fri, 30 Mar 2018 20:03:05 -0400 Subject: [PATCH 111/371] Updated with 0.66 changes. allow_in_emulated_hue has been removed. --- source/_components/hue.markdown | 1 - 1 file changed, 1 deletion(-) diff --git a/source/_components/hue.markdown b/source/_components/hue.markdown index fb73a05824..c0bda3fa14 100644 --- a/source/_components/hue.markdown +++ b/source/_components/hue.markdown @@ -36,7 +36,6 @@ Configuration variables: - **host** (*Optional*): IP address of the device, eg. 192.168.1.10. Required if not using the `discovery` component to discover Hue bridges. - **allow_unreachable** (*Optional*): (true/false) This will allow unreachable bulbs to report their state correctly. - **filename** (*Optional*): Make this unique if specifying multiple Hue hubs. -- **allow_in_emulated_hue** (*Optional*): (true/false) Enable this to block all Hue entities from being added to the `emulated_hue` component. - **allow_hue_groups** (*Optional*): (true/false) Enable this to stop Home Assistant from importing the groups defined on the Hue bridge. ### {% linkable_title Migrating from older configuration %} From 477e77dfa15137d795603453d73794b4090b2216 Mon Sep 17 00:00:00 2001 From: eltoro81 <34924009+eltoro81@users.noreply.github.com> Date: Sat, 31 Mar 2018 09:52:53 +0200 Subject: [PATCH 112/371] Update sensor.trafikverket_weatherstation.markdown Sensor name incorrect. Should be singul not plural --- .../_components/sensor.trafikverket_weatherstation.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/sensor.trafikverket_weatherstation.markdown b/source/_components/sensor.trafikverket_weatherstation.markdown index 76885964f3..272c4e0994 100644 --- a/source/_components/sensor.trafikverket_weatherstation.markdown +++ b/source/_components/sensor.trafikverket_weatherstation.markdown @@ -25,7 +25,7 @@ To enable this sensor, add the following lines to your `configuration.yaml`. ```yaml sensor: - - platform: trafikverket_weatherstations + - platform: trafikverket_weatherstation name: Trafikverket Road WeatherStation Kungälv api_key: eXXcbXXXacXXXXc39XX3aXXX4aXX46XX station: Kungälv @@ -72,12 +72,12 @@ Click [here](https://www.trafikverket.se/trafikinformation/vag/?TrafficType=pers ```yaml sensor: - - platform: trafikverket_weatherstations + - platform: trafikverket_weatherstation name: Trafikverket Road WeatherStation Kungälv api_key: eXXcbXXXacXXXXc39XX3aXXX4aXX46XX station: Kungälv type: road - - platform: trafikverket_weatherstations + - platform: trafikverket_weatherstation name: Trafikverket Air WeatherStation Lanna api_key: eXXcbXXXacXXXXc39XX3aXXX4aXX46XX station: Lanna From 690bd22f8abb48d7e569bfbadaaa0fe4ff656b71 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 31 Mar 2018 11:04:59 +0200 Subject: [PATCH 113/371] Update --- source/_docs/frontend/browsers.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/frontend/browsers.markdown b/source/_docs/frontend/browsers.markdown index 611b8586ae..2454f5989a 100644 --- a/source/_docs/frontend/browsers.markdown +++ b/source/_docs/frontend/browsers.markdown @@ -37,7 +37,7 @@ We would appreciate if you help to keep this page up-to-date and add feedback. | Browser | Release | State | Comments | | :-------------------- |:---------------|:-----------|:-------------------------| -| [Firefox] | 57.0 | works | | +| [Firefox] | 59.0 | works | | | [Midori] | 0.5.11 | works | | | [Chromium] | 63.0.3239.108 | works | | | [Conkeror] | 1.0.2 | works | | From e2b5ee1364f5a6458c10693d1bedd64047a70568 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 31 Mar 2018 11:06:35 +0200 Subject: [PATCH 114/371] Update for 0.66 --- source/developers/credits.markdown | 156 +++++++++++++++-------------- 1 file changed, 79 insertions(+), 77 deletions(-) diff --git a/source/developers/credits.markdown b/source/developers/credits.markdown index b598247cb4..43a2ec0dea 100644 --- a/source/developers/credits.markdown +++ b/source/developers/credits.markdown @@ -2,7 +2,7 @@ layout: page title: "Credits" description: "Credits for the developers who contributed to Home Assistant." -date: 2018-03-22 07:54:30 +0000 +date: 2018-03-31 09:06:17 +0000 sidebar: true comments: false sharing: true @@ -13,13 +13,14 @@ This page contains a list of people who have contributed in one way or another t ### {% linkable_title Author %} -- [Paulus Schoutsen (@balloob)](https://github.com/balloob "6452 total commits to the home-assistant organization, 3798 commits to home-assistant, 1404 commits to home-assistant.github.io, 742 commits to home-assistant-polymer, 244 commits to home-assistant-js, 122 commits to netdisco, 46 commits to home-assistant-js-websocket, 28 commits to hass-release, 17 commits to LabelBot, 15 commits to home-assistant-assets, 8 commits to example-custom-config, 7 commits to micropython-home-assistant, 5 commits to hassio, 3 commits to hassio-addons, 2 commits to lambda-home-assistant-github, 2 commits to issue-bot, 2 commits to hassio-addons-example, 2 commits to hassio-build, 2 commits to home-assistant-iOS, 1 commit to warrant, 1 commit to home-assistant-notebooks, 1 commit to architecture") +- [Paulus Schoutsen (@balloob)](https://github.com/balloob "6522 total commits to the home-assistant organization, 3835 commits to home-assistant, 1426 commits to home-assistant.github.io, 750 commits to home-assistant-polymer, 244 commits to home-assistant-js, 122 commits to netdisco, 46 commits to home-assistant-js-websocket, 31 commits to hass-release, 17 commits to LabelBot, 15 commits to home-assistant-assets, 8 commits to example-custom-config, 7 commits to micropython-home-assistant, 5 commits to hassio, 3 commits to hassio-addons, 2 commits to issue-bot, 2 commits to hassio-build, 2 commits to hassio-addons-example, 2 commits to home-assistant-iOS, 2 commits to lambda-home-assistant-github, 1 commit to home-assistant-notebooks, 1 commit to warrant, 1 commit to architecture") ### {% linkable_title Contributors %} (in alphabetical order) - [7even (@hwikene)](https://github.com/hwikene "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [a-andre (@a-andre)](https://github.com/a-andre "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Aaron Bach (@bachya)](https://github.com/bachya "49 total commits to the home-assistant organization, 32 commits to home-assistant, 17 commits to home-assistant.github.io") - [Aaron Linville (@linville)](https://github.com/linville "2 total commits to the home-assistant organization, 2 commits to appdaemon") - [Abílio Costa (@abmantis)](https://github.com/abmantis "22 total commits to the home-assistant organization, 13 commits to home-assistant, 5 commits to home-assistant.github.io, 2 commits to home-assistant-polymer, 1 commit to home-assistant-js-websocket, 1 commit to netdisco") @@ -27,7 +28,7 @@ This page contains a list of people who have contributed in one way or another t - [Adam Baxter (@voltagex)](https://github.com/voltagex "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Adam Cooper (@GenericStudent)](https://github.com/GenericStudent "11 total commits to the home-assistant organization, 8 commits to home-assistant, 3 commits to home-assistant.github.io") - [Adam Dullage (@Dullage)](https://github.com/Dullage "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Adam Mills (@armills)](https://github.com/armills "314 total commits to the home-assistant organization, 163 commits to home-assistant, 90 commits to home-assistant-polymer, 57 commits to home-assistant.github.io, 3 commits to home-assistant-js, 1 commit to homebridge-homeassistant") +- [Adam Mills (@armills)](https://github.com/armills "315 total commits to the home-assistant organization, 164 commits to home-assistant, 90 commits to home-assistant-polymer, 57 commits to home-assistant.github.io, 3 commits to home-assistant-js, 1 commit to homebridge-homeassistant") - [Adrian Popa (@mad-ady)](https://github.com/mad-ady "5 total commits to the home-assistant organization, 4 commits to appdaemon, 1 commit to home-assistant-polymer") - [Adrien Ball (@adrienball)](https://github.com/adrienball "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Adrien Brault (@adrienbrault)](https://github.com/adrienbrault "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -36,10 +37,10 @@ This page contains a list of people who have contributed in one way or another t - [akloeckner (@akloeckner)](https://github.com/akloeckner "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Alan Bowman (@alanbowman)](https://github.com/alanbowman "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Alan Fischer (@alanfischer)](https://github.com/alanfischer "20 total commits to the home-assistant organization, 16 commits to home-assistant, 4 commits to home-assistant.github.io") -- [Alan Tse (@alandtse)](https://github.com/alandtse "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Alan Tse (@alandtse)](https://github.com/alandtse "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") - [Alasdair Nicol (@alasdairnicol)](https://github.com/alasdairnicol "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Albatross (@DyingAlbatross)](https://github.com/DyingAlbatross "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Albert Lee (@trisk)](https://github.com/trisk "15 total commits to the home-assistant organization, 10 commits to home-assistant, 5 commits to home-assistant.github.io") +- [Albert Lee (@trisk)](https://github.com/trisk "16 total commits to the home-assistant organization, 11 commits to home-assistant, 5 commits to home-assistant.github.io") - [Alberto Arias Maestro (@albertoarias)](https://github.com/albertoarias "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Alessandro Mogavero (@alexmogavero)](https://github.com/alexmogavero "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Alex (@asbach)](https://github.com/asbach "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") @@ -54,10 +55,10 @@ This page contains a list of people who have contributed in one way or another t - [Alexis Iglauer (@ax42)](https://github.com/ax42 "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Alfie Day (@Azelphur)](https://github.com/Azelphur "12 total commits to the home-assistant organization, 12 commits to home-assistant") - [Aliaksandr (@minchik)](https://github.com/minchik "7 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to appdaemon, 2 commits to home-assistant") -- [Alok Saboo (@arsaboo)](https://github.com/arsaboo "140 total commits to the home-assistant organization, 81 commits to home-assistant.github.io, 53 commits to home-assistant, 4 commits to home-assistant-polymer, 1 commit to pi-gen, 1 commit to hassio-addons") +- [Alok Saboo (@arsaboo)](https://github.com/arsaboo "141 total commits to the home-assistant organization, 82 commits to home-assistant.github.io, 53 commits to home-assistant, 4 commits to home-assistant-polymer, 1 commit to pi-gen, 1 commit to hassio-addons") - [amorsillo (@AndrewMorsillo)](https://github.com/AndrewMorsillo "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Anders Fogh Eriksen (@Fogh)](https://github.com/Fogh "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Anders Melchiorsen (@amelchio)](https://github.com/amelchio "198 total commits to the home-assistant organization, 155 commits to home-assistant, 41 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") +- [Anders Melchiorsen (@amelchio)](https://github.com/amelchio "208 total commits to the home-assistant organization, 165 commits to home-assistant, 41 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") - [andig (@andig)](https://github.com/andig "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Andrea Campi (@andreacampi)](https://github.com/andreacampi "8 total commits to the home-assistant organization, 6 commits to home-assistant, 2 commits to home-assistant.github.io") - [Andrea Falcone (@asfalcone)](https://github.com/asfalcone "5 total commits to the home-assistant organization, 5 commits to issue-bot") @@ -70,17 +71,17 @@ This page contains a list of people who have contributed in one way or another t - [Andrej Friesen (@ajfriesen)](https://github.com/ajfriesen "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Andrew (@aneisch)](https://github.com/aneisch "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Andrew (@aoakeson)](https://github.com/aoakeson "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Andrew Cockburn (@acockburn)](https://github.com/acockburn "795 total commits to the home-assistant organization, 660 commits to appdaemon, 88 commits to hadashboard, 25 commits to scenegen, 22 commits to home-assistant.github.io") +- [Andrew Cockburn (@acockburn)](https://github.com/acockburn "802 total commits to the home-assistant organization, 667 commits to appdaemon, 88 commits to hadashboard, 25 commits to scenegen, 22 commits to home-assistant.github.io") - [Andrew Smith (@andrewmichaelsmith)](https://github.com/andrewmichaelsmith "2 total commits to the home-assistant organization, 2 commits to pi-gen") - [Andrew Stock (@watchforstock)](https://github.com/watchforstock "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Andrew Thigpen (@andythigpen)](https://github.com/andythigpen "33 total commits to the home-assistant organization, 32 commits to home-assistant, 1 commit to home-assistant-js") - [Andrew Wedgbury (@sconemad)](https://github.com/sconemad "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [andrew-curtis (@andrew-curtis)](https://github.com/andrew-curtis "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") -- [Andrey (@andrey-git)](https://github.com/andrey-git "293 total commits to the home-assistant organization, 134 commits to home-assistant-polymer, 121 commits to home-assistant, 37 commits to home-assistant.github.io, 1 commit to home-assistant-js-websocket") +- [Andrey (@andrey-git)](https://github.com/andrey-git "294 total commits to the home-assistant organization, 134 commits to home-assistant-polymer, 122 commits to home-assistant, 37 commits to home-assistant.github.io, 1 commit to home-assistant-js-websocket") - [Andrey Kupreychik (@foxel)](https://github.com/foxel "9 total commits to the home-assistant organization, 6 commits to home-assistant, 3 commits to home-assistant.github.io") - [Andrzej (@andriej)](https://github.com/andriej "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Andréas Lundgren (@adevade)](https://github.com/adevade "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Andy Castille (@Klikini)](https://github.com/Klikini "12 total commits to the home-assistant organization, 8 commits to home-assistant, 4 commits to home-assistant.github.io") +- [Andy Castille (@Klikini)](https://github.com/Klikini "14 total commits to the home-assistant organization, 9 commits to home-assistant, 5 commits to home-assistant.github.io") - [anotherthomas (@anotherthomas)](https://github.com/anotherthomas "1 total commits to the home-assistant organization, 1 commit to hassio-addons") - [Anthony Arnaud (@aarnaud)](https://github.com/aarnaud "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Anthony Hughes (@tony2nite)](https://github.com/tony2nite "1 total commits to the home-assistant organization, 1 commit to netdisco") @@ -115,7 +116,7 @@ This page contains a list of people who have contributed in one way or another t - [bastshoes (@bastshoes)](https://github.com/bastshoes "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [battistaar (@battistaar)](https://github.com/battistaar "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") - [bcl1713 (@bcl1713)](https://github.com/bcl1713 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Beat (@bdurrer)](https://github.com/bdurrer "11 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [Beat (@bdurrer)](https://github.com/bdurrer "14 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [Ben (@unixben)](https://github.com/unixben "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Ben Bangert (@bbangert)](https://github.com/bbangert "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Ben Doerr (@bendoerr)](https://github.com/bendoerr "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") @@ -164,19 +165,21 @@ This page contains a list of people who have contributed in one way or another t - [Bruno Adele (@badele)](https://github.com/badele "22 total commits to the home-assistant organization, 22 commits to home-assistant") - [Bruno Binet (@bbinet)](https://github.com/bbinet "1 total commits to the home-assistant organization, 1 commit to hassio-build") - [Bryce Edwards (@hoopty)](https://github.com/hoopty "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") -- [c727 (@c727)](https://github.com/c727 "57 total commits to the home-assistant organization, 39 commits to home-assistant-polymer, 12 commits to home-assistant.github.io, 4 commits to home-assistant, 2 commits to hassio") +- [bvansambeek (@bvansambeek)](https://github.com/bvansambeek "1 total commits to the home-assistant organization, 1 commit to hassio-build") +- [c727 (@c727)](https://github.com/c727 "61 total commits to the home-assistant organization, 41 commits to home-assistant-polymer, 13 commits to home-assistant.github.io, 5 commits to home-assistant, 2 commits to hassio") - [Caius Cioran (@caiuspb)](https://github.com/caiuspb "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Caleb (@finish06)](https://github.com/finish06 "7 total commits to the home-assistant organization, 7 commits to home-assistant") - [Cameron Bulock (@cbulock)](https://github.com/cbulock "5 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to netdisco") - [Cameron Moore (@moorereason)](https://github.com/moorereason "3 total commits to the home-assistant organization, 3 commits to hassio-cli") -- [Carlo Costanzo (@CCOSTAN)](https://github.com/CCOSTAN "95 total commits to the home-assistant organization, 87 commits to home-assistant.github.io, 5 commits to home-assistant, 1 commit to hassbian-scripts, 1 commit to homebridge-homeassistant, 1 commit to fabric-home-assistant") +- [Carlo Costanzo (@CCOSTAN)](https://github.com/CCOSTAN "96 total commits to the home-assistant organization, 88 commits to home-assistant.github.io, 5 commits to home-assistant, 1 commit to fabric-home-assistant, 1 commit to homebridge-homeassistant, 1 commit to hassbian-scripts") - [carlosmgr (@carlosmgr)](https://github.com/carlosmgr "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Carter (@BluGeni)](https://github.com/BluGeni "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [cdce8p (@cdce8p)](https://github.com/cdce8p "56 total commits to the home-assistant organization, 31 commits to home-assistant, 21 commits to home-assistant.github.io, 4 commits to home-assistant-polymer") +- [cdce8p (@cdce8p)](https://github.com/cdce8p "69 total commits to the home-assistant organization, 43 commits to home-assistant, 22 commits to home-assistant.github.io, 4 commits to home-assistant-polymer") - [Cecron (@Cecron)](https://github.com/Cecron "1 total commits to the home-assistant organization, 1 commit to appdaemon") +- [Cedric Van Goethem (@Zepheus)](https://github.com/Zepheus "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Cenk Gündoğan (@cgundogan)](https://github.com/cgundogan "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Cezar Sá Espinola (@cezarsa)](https://github.com/cezarsa "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [cgtobi (@cgtobi)](https://github.com/cgtobi "23 total commits to the home-assistant organization, 14 commits to home-assistant, 9 commits to home-assistant.github.io") +- [cgtobi (@cgtobi)](https://github.com/cgtobi "26 total commits to the home-assistant organization, 16 commits to home-assistant, 10 commits to home-assistant.github.io") - [chanders (@chanders)](https://github.com/chanders "2 total commits to the home-assistant organization, 2 commits to hadashboard") - [Charles Blonde (@CharlesBlonde)](https://github.com/CharlesBlonde "19 total commits to the home-assistant organization, 12 commits to home-assistant, 7 commits to home-assistant.github.io") - [Charles Garwood (@cgarwood)](https://github.com/cgarwood "17 total commits to the home-assistant organization, 11 commits to home-assistant.github.io, 6 commits to home-assistant") @@ -197,7 +200,7 @@ This page contains a list of people who have contributed in one way or another t - [Christian Brædstrup (@LinuxChristian)](https://github.com/LinuxChristian "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Christian Lasarczyk (@ChrisLasar)](https://github.com/ChrisLasar "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Christian Studer (@cstuder)](https://github.com/cstuder "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [ChristianKuehnel (@ChristianKuehnel)](https://github.com/ChristianKuehnel "30 total commits to the home-assistant organization, 18 commits to home-assistant, 12 commits to home-assistant.github.io") +- [ChristianKuehnel (@ChristianKuehnel)](https://github.com/ChristianKuehnel "33 total commits to the home-assistant organization, 20 commits to home-assistant, 13 commits to home-assistant.github.io") - [Christoffer Kylvåg (@christoe)](https://github.com/christoe "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Christoph Wagner (@Christoph-Wagner)](https://github.com/Christoph-Wagner "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Christopher Vella (@chrisvella)](https://github.com/chrisvella "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") @@ -211,7 +214,7 @@ This page contains a list of people who have contributed in one way or another t - [Claus F. Strasburger (@cfstras)](https://github.com/cfstras "5 total commits to the home-assistant organization, 5 commits to pi-gen") - [cogneato (@cogneato)](https://github.com/cogneato "15 total commits to the home-assistant organization, 15 commits to home-assistant.github.io") - [Colin Dunn (@colindunn)](https://github.com/colindunn "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Colin O'Dell (@colinodell)](https://github.com/colinodell "24 total commits to the home-assistant organization, 13 commits to home-assistant, 11 commits to home-assistant.github.io") +- [Colin O'Dell (@colinodell)](https://github.com/colinodell "26 total commits to the home-assistant organization, 15 commits to home-assistant, 11 commits to home-assistant.github.io") - [Colin Teubner (@netopiax)](https://github.com/netopiax "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Conrad Juhl Andersen (@cnrd)](https://github.com/cnrd "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [Constantine Grantcharov (@conz27)](https://github.com/conz27 "1 total commits to the home-assistant organization, 1 commit to libcoap") @@ -222,13 +225,13 @@ This page contains a list of people who have contributed in one way or another t - [Craig J. Ward (@wardcraigj)](https://github.com/wardcraigj "27 total commits to the home-assistant organization, 20 commits to home-assistant, 7 commits to home-assistant.github.io") - [CTLS (@CTLS)](https://github.com/CTLS "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [CV (@dagobert)](https://github.com/dagobert "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [cxlwill (@cxlwill)](https://github.com/cxlwill "2 total commits to the home-assistant organization, 2 commits to home-assistant-polymer") -- [Dale Higgs (@dale3h)](https://github.com/dale3h "34 total commits to the home-assistant organization, 22 commits to home-assistant.github.io, 10 commits to home-assistant, 1 commit to hassbot, 1 commit to homebridge-homeassistant") +- [cxlwill (@cxlwill)](https://github.com/cxlwill "3 total commits to the home-assistant organization, 2 commits to home-assistant-polymer, 1 commit to hassbian-scripts") +- [Dale Higgs (@dale3h)](https://github.com/dale3h "35 total commits to the home-assistant organization, 23 commits to home-assistant.github.io, 10 commits to home-assistant, 1 commit to hassbot, 1 commit to homebridge-homeassistant") - [Dan (@danieljkemp)](https://github.com/danieljkemp "23 total commits to the home-assistant organization, 16 commits to home-assistant, 7 commits to home-assistant.github.io") - [Dan Chen (@djchen)](https://github.com/djchen "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Dan Cinnamon (@Cinntax)](https://github.com/Cinntax "17 total commits to the home-assistant organization, 14 commits to home-assistant, 3 commits to home-assistant.github.io") - [Dan Faulknor (@danielfaulknor)](https://github.com/danielfaulknor "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Dan Nixon (@DanNixon)](https://github.com/DanNixon "23 total commits to the home-assistant organization, 18 commits to home-assistant, 5 commits to home-assistant.github.io") +- [Dan Nixon (@DanNixon)](https://github.com/DanNixon "25 total commits to the home-assistant organization, 19 commits to home-assistant, 6 commits to home-assistant.github.io") - [Dan Ports (@drkp)](https://github.com/drkp "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Dan Sarginson (@dansarginson)](https://github.com/dansarginson "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Dan Smith (@kk7ds)](https://github.com/kk7ds "84 total commits to the home-assistant organization, 68 commits to home-assistant, 14 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") @@ -258,7 +261,7 @@ This page contains a list of people who have contributed in one way or another t - [David De Sloovere (@DavidDeSloovere)](https://github.com/DavidDeSloovere "16 total commits to the home-assistant organization, 16 commits to home-assistant.github.io") - [David Fiel (@dfiel)](https://github.com/dfiel "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [David Grant (@davegravy)](https://github.com/davegravy "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") -- [David McNett (@nugget)](https://github.com/nugget "10 total commits to the home-assistant organization, 5 commits to home-assistant, 5 commits to home-assistant.github.io") +- [David McNett (@nugget)](https://github.com/nugget "10 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 5 commits to home-assistant") - [David Ohayon (@ohayon)](https://github.com/ohayon "3 total commits to the home-assistant organization, 3 commits to issue-bot") - [David Straub (@DavidMStraub)](https://github.com/DavidMStraub "9 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io") - [David Wang (@dcwangmit01)](https://github.com/dcwangmit01 "2 total commits to the home-assistant organization, 2 commits to pi-gen") @@ -278,13 +281,13 @@ This page contains a list of people who have contributed in one way or another t - [dersger (@dersger)](https://github.com/dersger "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [devdelay (@devdelay)](https://github.com/devdelay "16 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 5 commits to home-assistant, 4 commits to homebridge-homeassistant") - [Devon Peet (@dpeet)](https://github.com/dpeet "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Diogo Gomes (@dgomes)](https://github.com/dgomes "38 total commits to the home-assistant organization, 23 commits to home-assistant, 15 commits to home-assistant.github.io") +- [Diogo Gomes (@dgomes)](https://github.com/dgomes "41 total commits to the home-assistant organization, 23 commits to home-assistant, 18 commits to home-assistant.github.io") - [DoloresHA (@DoloresHA)](https://github.com/DoloresHA "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Domantas (@Dohxis)](https://github.com/Dohxis "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Dougal Matthews (@d0ugal)](https://github.com/d0ugal "5 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io") -- [dramamoose (@dramamoose)](https://github.com/dramamoose "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [dramamoose (@dramamoose)](https://github.com/dramamoose "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [DrewSK (@dzsquared)](https://github.com/dzsquared "8 total commits to the home-assistant organization, 8 commits to home-assistant.github.io") -- [DubhAd (@DubhAd)](https://github.com/DubhAd "195 total commits to the home-assistant organization, 195 commits to home-assistant.github.io") +- [DubhAd (@DubhAd)](https://github.com/DubhAd "217 total commits to the home-assistant organization, 217 commits to home-assistant.github.io") - [Duoxilian (@Duoxilian)](https://github.com/Duoxilian "11 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 5 commits to home-assistant") - [ebpetway (@ebpetway)](https://github.com/ebpetway "55 total commits to the home-assistant organization, 55 commits to warrant") - [Edwin Smulders (@Dutchy-)](https://github.com/Dutchy- "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") @@ -300,14 +303,15 @@ This page contains a list of people who have contributed in one way or another t - [Eric Oosting (@eoosting)](https://github.com/eoosting "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Eric Rolf (@xrolfex)](https://github.com/xrolfex "13 total commits to the home-assistant organization, 13 commits to home-assistant") - [Eric Thompson (@er0ck)](https://github.com/er0ck "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Erik Eriksson (@molobrakos)](https://github.com/molobrakos "112 total commits to the home-assistant organization, 98 commits to home-assistant, 11 commits to home-assistant.github.io, 3 commits to netdisco") +- [Erik Eriksson (@molobrakos)](https://github.com/molobrakos "115 total commits to the home-assistant organization, 99 commits to home-assistant, 13 commits to home-assistant.github.io, 3 commits to netdisco") - [Erik-jan Riemers (@riemers)](https://github.com/riemers "14 total commits to the home-assistant organization, 13 commits to home-assistant.github.io, 1 commit to hassbian-scripts") - [escoand (@escoand)](https://github.com/escoand "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [Ettienne Gous (@ettiennegous)](https://github.com/ettiennegous "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [ettisan (@ettisan)](https://github.com/ettisan "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Eu (@covrig)](https://github.com/covrig "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Eugenio Panadero (@azogue)](https://github.com/azogue "76 total commits to the home-assistant organization, 45 commits to home-assistant, 25 commits to home-assistant.github.io, 3 commits to home-assistant-polymer, 3 commits to homebridge-homeassistant") +- [Eugenio Panadero (@azogue)](https://github.com/azogue "76 total commits to the home-assistant organization, 45 commits to home-assistant, 25 commits to home-assistant.github.io, 3 commits to homebridge-homeassistant, 3 commits to home-assistant-polymer") - [Ezra Bowden (@bn0)](https://github.com/bn0 "2 total commits to the home-assistant organization, 2 commits to warrant") -- [Fabian Affolter (@fabaff)](https://github.com/fabaff "4570 total commits to the home-assistant organization, 2927 commits to home-assistant.github.io, 1536 commits to home-assistant, 32 commits to home-assistant-assets, 31 commits to home-assistant-notebooks, 11 commits to home-assistant-polymer, 11 commits to hassio-build, 8 commits to netdisco, 5 commits to hassio-addons, 4 commits to hassio, 3 commits to development-docs, 1 commit to home-assistant-js-websocket, 1 commit to example-custom-config") +- [Fabian Affolter (@fabaff)](https://github.com/fabaff "4590 total commits to the home-assistant organization, 2938 commits to home-assistant.github.io, 1545 commits to home-assistant, 32 commits to home-assistant-assets, 31 commits to home-assistant-notebooks, 11 commits to hassio-build, 11 commits to home-assistant-polymer, 8 commits to netdisco, 5 commits to hassio-addons, 4 commits to hassio, 3 commits to development-docs, 1 commit to example-custom-config, 1 commit to home-assistant-js-websocket") - [Fabian Heredia Montiel (@fabianhjr)](https://github.com/fabianhjr "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Fabien Piuzzi (@reefab)](https://github.com/reefab "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Fabrizio Furnari (@fabfurnari)](https://github.com/fabfurnari "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") @@ -317,46 +321,43 @@ This page contains a list of people who have contributed in one way or another t - [Felix (@xifle)](https://github.com/xifle "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Felix Krause (@KrauseFx)](https://github.com/KrauseFx "27 total commits to the home-assistant organization, 27 commits to issue-bot") - [Ferry van Zeelst (@StaticCube)](https://github.com/StaticCube "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Filip Bednárik (@drndos)](https://github.com/drndos "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Finbarr Brady (@fbradyirl)](https://github.com/fbradyirl "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Florian Holzapfel (@florianholzapfel)](https://github.com/florianholzapfel "11 total commits to the home-assistant organization, 4 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to netdisco") - [Florian Klien (@flowolf)](https://github.com/flowolf "17 total commits to the home-assistant organization, 14 commits to home-assistant.github.io, 3 commits to home-assistant") - [florianj1 (@florianj1)](https://github.com/florianj1 "1 total commits to the home-assistant organization, 1 commit to hassio") - [florincosta (@florincosta)](https://github.com/florincosta "6 total commits to the home-assistant organization, 3 commits to home-assistant, 3 commits to home-assistant.github.io") - [Fonta (@f0nt4)](https://github.com/f0nt4 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Franck Nijhof (@frenck)](https://github.com/frenck "29 total commits to the home-assistant organization, 20 commits to home-assistant.github.io, 5 commits to hassio, 2 commits to home-assistant-polymer, 1 commit to appdaemon, 1 commit to hassio-cli") +- [Franck Nijhof (@frenck)](https://github.com/frenck "30 total commits to the home-assistant organization, 21 commits to home-assistant.github.io, 5 commits to hassio, 2 commits to home-assistant-polymer, 1 commit to appdaemon, 1 commit to hassio-cli") - [Frank (@syphernl)](https://github.com/syphernl "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Frantz (@rofrantz)](https://github.com/rofrantz "16 total commits to the home-assistant organization, 9 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to netdisco") - [Frederic Hemberger (@fhemberger)](https://github.com/fhemberger "93 total commits to the home-assistant organization, 93 commits to home-assistant.github.io") -- [Frederik Bolding (@FrederikBolding)](https://github.com/FrederikBolding "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Frederik Bolding (@FrederikBolding)](https://github.com/FrederikBolding "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Fredrik Fjeld (@fredrikfjeld)](https://github.com/fredrikfjeld "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Fredrik Lindqvist (@Landrash)](https://github.com/Landrash "190 total commits to the home-assistant organization, 81 commits to hassbian-scripts, 70 commits to home-assistant.github.io, 34 commits to pi-gen, 4 commits to home-assistant, 1 commit to home-assistant-polymer") +- [Fredrik Lindqvist (@Landrash)](https://github.com/Landrash "207 total commits to the home-assistant organization, 95 commits to hassbian-scripts, 73 commits to home-assistant.github.io, 34 commits to pi-gen, 4 commits to home-assistant, 1 commit to home-assistant-polymer") - [freol35241 (@freol35241)](https://github.com/freol35241 "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [fuga2136 (@fuga2136)](https://github.com/fuga2136 "13 total commits to the home-assistant organization, 13 commits to home-assistant.github.io") - [Gabor SZOLLOSI (@szogi)](https://github.com/szogi "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to appdaemon") - [GadgetReactor (@GadgetReactor)](https://github.com/GadgetReactor "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Gavin Mogan (@halkeye)](https://github.com/halkeye "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Geoff Norton (@kangaroo)](https://github.com/kangaroo "14 total commits to the home-assistant organization, 14 commits to home-assistant") - [George.M (@nodinosaur)](https://github.com/nodinosaur "8 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 2 commits to home-assistant") - [Georgi Kirichkov (@kirichkov)](https://github.com/kirichkov "17 total commits to the home-assistant organization, 11 commits to home-assistant.github.io, 5 commits to home-assistant, 1 commit to appdaemon") - [Georgi Yanev (@jumpalottahigh)](https://github.com/jumpalottahigh "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") - [Georgii Staroselskii (@staroselskii)](https://github.com/staroselskii "1 total commits to the home-assistant organization, 1 commit to pi-gen") -- [Gerard (@gerard33)](https://github.com/gerard33 "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Gerard (@gerard33)](https://github.com/gerard33 "7 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 3 commits to home-assistant") - [Gergely Imreh (@imrehg)](https://github.com/imrehg "16 total commits to the home-assistant organization, 11 commits to home-assistant, 5 commits to home-assistant.github.io") - [Gianluca Barbaro (@MrMep)](https://github.com/MrMep "24 total commits to the home-assistant organization, 16 commits to home-assistant, 8 commits to home-assistant.github.io") -- [Gianpaolo Macario (@gmacario)](https://github.com/gmacario "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Giel Janssens (@gieljnssns)](https://github.com/gieljnssns "6 total commits to the home-assistant organization, 4 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Giel Janssens (@gieljnssns)](https://github.com/gieljnssns "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [githubbuh (@githubbuh)](https://github.com/githubbuh "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [gitmopp (@gitmopp)](https://github.com/gitmopp "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Giuseppe (@glpatcern)](https://github.com/glpatcern "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [GMFalka (@GMFalka)](https://github.com/GMFalka "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Gopal Kildoliya (@gopalkildoliya)](https://github.com/gopalkildoliya "6 total commits to the home-assistant organization, 4 commits to home-assistant, 2 commits to home-assistant.github.io") -- [Graeme Smith (@Instagraeme)](https://github.com/Instagraeme "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [Gopal Kildoliya (@gopalkildoliya)](https://github.com/gopalkildoliya "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Grant McConnaughey (@grantmcconnaughey)](https://github.com/grantmcconnaughey "8 total commits to the home-assistant organization, 8 commits to warrant") - [GreenTurtwig (@GreenTurtwig)](https://github.com/GreenTurtwig "80 total commits to the home-assistant organization, 75 commits to home-assistant.github.io, 5 commits to home-assistant") - [Greg Dowling (@pavoni)](https://github.com/pavoni "255 total commits to the home-assistant organization, 228 commits to home-assistant, 25 commits to home-assistant.github.io, 2 commits to netdisco") - [Greg Laabs (@OverloadUT)](https://github.com/OverloadUT "14 total commits to the home-assistant organization, 11 commits to home-assistant, 3 commits to home-assistant.github.io") - [Greg MacLellan (@gregmac)](https://github.com/gregmac "1 total commits to the home-assistant organization, 1 commit to pi-gen") -- [Greg Stengel (@theCMack)](https://github.com/theCMack "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Greg Stevenson (@gstevenson)](https://github.com/gstevenson "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Greg. A. (@gautric)](https://github.com/gautric "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [GTH (@gunnarhelgason)](https://github.com/gunnarhelgason "2 total commits to the home-assistant organization, 2 commits to appdaemon") @@ -405,7 +406,7 @@ This page contains a list of people who have contributed in one way or another t - [James Marsh (@doctorjames)](https://github.com/doctorjames "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [James Ruan (@jamesruan)](https://github.com/jamesruan "2 total commits to the home-assistant organization, 2 commits to pi-gen") - [Jamie van Dyke (@fearoffish)](https://github.com/fearoffish "1 total commits to the home-assistant organization, 1 commit to home-assistant-iOS") -- [JammyDodger231 (@JammyDodger231)](https://github.com/JammyDodger231 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [JammyDodger231 (@JammyDodger231)](https://github.com/JammyDodger231 "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Jan Almeroth (@jalmeroth)](https://github.com/jalmeroth "6 total commits to the home-assistant organization, 5 commits to home-assistant, 1 commit to home-assistant-polymer") - [Jan Harkes (@jaharkes)](https://github.com/jaharkes "110 total commits to the home-assistant organization, 100 commits to home-assistant, 10 commits to netdisco") - [Jan Losinski (@janLo)](https://github.com/janLo "21 total commits to the home-assistant organization, 16 commits to home-assistant, 5 commits to home-assistant.github.io") @@ -429,11 +430,11 @@ This page contains a list of people who have contributed in one way or another t - [Jeffrey Lin (@linjef)](https://github.com/linjef "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Jens (@jhoepken)](https://github.com/jhoepken "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Jens Østergaard Nielsen (@dingusdk)](https://github.com/dingusdk "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") -- [Jerad Meisner (@jeradM)](https://github.com/jeradM "5 total commits to the home-assistant organization, 5 commits to home-assistant") +- [Jerad Meisner (@jeradM)](https://github.com/jeradM "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Jeremiah Wuenschel (@jer)](https://github.com/jer "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Jeremy Williams (@jwillaz)](https://github.com/jwillaz "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [jeremysv (@jeremysv)](https://github.com/jeremysv "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Jeroen ter Heerdt (@jeroenterheerdt)](https://github.com/jeroenterheerdt "35 total commits to the home-assistant organization, 19 commits to home-assistant, 16 commits to home-assistant.github.io") +- [Jeroen ter Heerdt (@jeroenterheerdt)](https://github.com/jeroenterheerdt "36 total commits to the home-assistant organization, 20 commits to home-assistant, 16 commits to home-assistant.github.io") - [Jerold Albertson (@jeroldalbertson-wf)](https://github.com/jeroldalbertson-wf "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Jerry Workman (@JerryWorkman)](https://github.com/JerryWorkman "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [Jesse Hills (@jesserockz)](https://github.com/jesserockz "9 total commits to the home-assistant organization, 9 commits to home-assistant") @@ -443,17 +444,17 @@ This page contains a list of people who have contributed in one way or another t - [jiafengwang (@jiafengwang)](https://github.com/jiafengwang "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [jimbob1001 (@jimbob1001)](https://github.com/jimbob1001 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Joakim Nohlgård (@gebart)](https://github.com/gebart "2 total commits to the home-assistant organization, 2 commits to libcoap") -- [Joakim Sørensen (@ludeeus)](https://github.com/ludeeus "71 total commits to the home-assistant organization, 56 commits to hassbian-scripts, 15 commits to home-assistant.github.io") +- [Joakim Sørensen (@ludeeus)](https://github.com/ludeeus "103 total commits to the home-assistant organization, 85 commits to hassbian-scripts, 18 commits to home-assistant.github.io") - [Job (@jmvermeulen)](https://github.com/jmvermeulen "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [jodur (@jodur)](https://github.com/jodur "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Joe Lu (@snjoetw)](https://github.com/snjoetw "22 total commits to the home-assistant organization, 17 commits to home-assistant, 5 commits to home-assistant.github.io") +- [Joe Lu (@snjoetw)](https://github.com/snjoetw "24 total commits to the home-assistant organization, 18 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to appdaemon") - [Joe McMonagle (@joemcmonagle)](https://github.com/joemcmonagle "13 total commits to the home-assistant organization, 13 commits to home-assistant.github.io") - [joe248 (@joe248)](https://github.com/joe248 "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Joeboyc2 (@Joeboyc2)](https://github.com/Joeboyc2 "15 total commits to the home-assistant organization, 15 commits to home-assistant.github.io") - [Johan Bloemberg (@aequitas)](https://github.com/aequitas "43 total commits to the home-assistant organization, 35 commits to home-assistant, 7 commits to home-assistant.github.io, 1 commit to netdisco") - [Johan Haals (@jhaals)](https://github.com/jhaals "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Johan van der Kuijl (@Rubyan)](https://github.com/Rubyan "4 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 1 commit to appdaemon") -- [Johann Kellerman (@kellerza)](https://github.com/kellerza "163 total commits to the home-assistant organization, 133 commits to home-assistant, 30 commits to home-assistant.github.io") +- [Johann Kellerman (@kellerza)](https://github.com/kellerza "169 total commits to the home-assistant organization, 139 commits to home-assistant, 30 commits to home-assistant.github.io") - [Johannes K. (@roadrash2108)](https://github.com/roadrash2108 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [John (@J-C-B)](https://github.com/J-C-B "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [John Allen (@jra3)](https://github.com/jra3 "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -487,10 +488,10 @@ This page contains a list of people who have contributed in one way or another t - [Julius Mittenzwei (@Julius2342)](https://github.com/Julius2342 "31 total commits to the home-assistant organization, 24 commits to home-assistant, 7 commits to home-assistant.github.io") - [jumpkick (@jumpkick)](https://github.com/jumpkick "15 total commits to the home-assistant organization, 12 commits to home-assistant, 3 commits to home-assistant.github.io") - [Justin Dray (@justin8)](https://github.com/justin8 "9 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 2 commits to home-assistant") -- [Justin Hayes (@GussyH)](https://github.com/GussyH "7 total commits to the home-assistant organization, 7 commits to hadashboard") +- [Justin Hayes (@GussyH)](https://github.com/GussyH "8 total commits to the home-assistant organization, 7 commits to hadashboard, 1 commit to appdaemon") - [Justin Weberg (@justweb1)](https://github.com/justweb1 "26 total commits to the home-assistant organization, 13 commits to home-assistant-polymer, 7 commits to hassbot, 4 commits to home-assistant, 1 commit to home-assistant-js, 1 commit to hassio") - [Justyn Shull (@justyns)](https://github.com/justyns "5 total commits to the home-assistant organization, 5 commits to home-assistant") -- [Kane610 (@Kane610)](https://github.com/Kane610 "32 total commits to the home-assistant organization, 17 commits to home-assistant, 13 commits to home-assistant.github.io, 1 commit to netdisco, 1 commit to home-assistant-polymer") +- [Kane610 (@Kane610)](https://github.com/Kane610 "34 total commits to the home-assistant organization, 18 commits to home-assistant, 14 commits to home-assistant.github.io, 1 commit to netdisco, 1 commit to home-assistant-polymer") - [Karen Goode (@kfgoode)](https://github.com/kfgoode "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [karlkar (@karlkar)](https://github.com/karlkar "14 total commits to the home-assistant organization, 9 commits to home-assistant, 5 commits to home-assistant.github.io") - [Keaton Taylor (@keatontaylor)](https://github.com/keatontaylor "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") @@ -509,6 +510,7 @@ This page contains a list of people who have contributed in one way or another t - [kireyeu (@kireyeu)](https://github.com/kireyeu "4 total commits to the home-assistant organization, 4 commits to home-assistant-notebooks") - [Klaas Hoekema (@KlaasH)](https://github.com/KlaasH "12 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 5 commits to home-assistant, 2 commits to home-assistant-polymer") - [Klaus (@k-laus)](https://github.com/k-laus "1 total commits to the home-assistant organization, 1 commit to appdaemon") +- [Kory Prince (@korylprince)](https://github.com/korylprince "4 total commits to the home-assistant organization, 4 commits to home-assistant-polymer") - [Krasimir Chariyski (@Chariyski)](https://github.com/Chariyski "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Krasimir Zhelev (@zhelev)](https://github.com/zhelev "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to netdisco") - [kroimon (@kroimon)](https://github.com/kroimon "1 total commits to the home-assistant organization, 1 commit to netdisco") @@ -519,9 +521,9 @@ This page contains a list of people who have contributed in one way or another t - [Leon99 (@Leon99)](https://github.com/Leon99 "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Leonardo Saraiva (@vyper)](https://github.com/vyper "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Lev Aronsky (@aronsky)](https://github.com/aronsky "14 total commits to the home-assistant organization, 11 commits to home-assistant, 3 commits to home-assistant.github.io") -- [Lewis Juggins (@lwis)](https://github.com/lwis "65 total commits to the home-assistant organization, 52 commits to home-assistant, 12 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [Lewis Juggins (@lwis)](https://github.com/lwis "66 total commits to the home-assistant organization, 53 commits to home-assistant, 12 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [lichtteil (@lichtteil)](https://github.com/lichtteil "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Lindsay Ward (@lindsaymarkward)](https://github.com/lindsaymarkward "17 total commits to the home-assistant organization, 13 commits to home-assistant.github.io, 4 commits to home-assistant") +- [Lindsay Ward (@lindsaymarkward)](https://github.com/lindsaymarkward "18 total commits to the home-assistant organization, 13 commits to home-assistant.github.io, 5 commits to home-assistant") - [linuxlurak (@linuxlurak)](https://github.com/linuxlurak "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to hadashboard") - [linvinus (@linvinus)](https://github.com/linvinus "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [lrmate (@lrmate)](https://github.com/lrmate "3 total commits to the home-assistant organization, 3 commits to home-assistant") @@ -549,7 +551,8 @@ This page contains a list of people who have contributed in one way or another t - [Maikel Wever (@maikelwever)](https://github.com/maikelwever "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [makemeasandwich (@makemeasandwich)](https://github.com/makemeasandwich "12 total commits to the home-assistant organization, 12 commits to home-assistant") - [Marc Egli (@frog32)](https://github.com/frog32 "11 total commits to the home-assistant organization, 8 commits to home-assistant, 3 commits to home-assistant.github.io") -- [Marc Forth (@mf-social)](https://github.com/mf-social "23 total commits to the home-assistant organization, 22 commits to home-assistant.github.io, 1 commit to fabric-home-assistant") +- [Marc Forth (@mf-social)](https://github.com/mf-social "25 total commits to the home-assistant organization, 24 commits to home-assistant.github.io, 1 commit to fabric-home-assistant") +- [Marc Khouri (@ubnt-marc-khouri)](https://github.com/ubnt-marc-khouri "2 total commits to the home-assistant organization, 2 commits to home-assistant-polymer") - [Marc Pabst (@mxtra)](https://github.com/mxtra "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Marc Plano-Lesay (@Kernald)](https://github.com/Kernald "12 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 2 commits to home-assistant") - [Marcel030nl (@Marcel030nl)](https://github.com/Marcel030nl "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") @@ -570,15 +573,15 @@ This page contains a list of people who have contributed in one way or another t - [Markus Stenberg (@fingon)](https://github.com/fingon "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Martin Berg (@mbrrg)](https://github.com/mbrrg "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [Martin Donlon (@wickerwaka)](https://github.com/wickerwaka "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Martin Eberhardt (@DarkFox)](https://github.com/DarkFox "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Martin Hjelmare (@MartinHjelmare)](https://github.com/MartinHjelmare "146 total commits to the home-assistant organization, 117 commits to home-assistant, 29 commits to home-assistant.github.io") +- [Martin Eberhardt (@DarkFox)](https://github.com/DarkFox "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") +- [Martin Hjelmare (@MartinHjelmare)](https://github.com/MartinHjelmare "150 total commits to the home-assistant organization, 121 commits to home-assistant, 29 commits to home-assistant.github.io") - [Martin Rowan (@shortbloke)](https://github.com/shortbloke "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Martin Vacula (@MatoKafkac)](https://github.com/MatoKafkac "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Martin Weinelt (@mweinelt)](https://github.com/mweinelt "17 total commits to the home-assistant organization, 9 commits to home-assistant, 7 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Martokk (@martokk)](https://github.com/martokk "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Mateusz Drab (@mateuszdrab)](https://github.com/mateuszdrab "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Mathew Peterson (@mathewpeterson)](https://github.com/mathewpeterson "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") -- [Matt N. (@mnoorenberghe)](https://github.com/mnoorenberghe "53 total commits to the home-assistant organization, 25 commits to home-assistant-iOS, 17 commits to home-assistant.github.io, 9 commits to home-assistant, 1 commit to home-assistant-polymer, 1 commit to homebridge-homeassistant") +- [Matt N. (@mnoorenberghe)](https://github.com/mnoorenberghe "53 total commits to the home-assistant organization, 25 commits to home-assistant-iOS, 17 commits to home-assistant.github.io, 9 commits to home-assistant, 1 commit to homebridge-homeassistant, 1 commit to home-assistant-polymer") - [Matt Rogers (@rogersmj)](https://github.com/rogersmj "20 total commits to the home-assistant organization, 20 commits to hadashboard") - [Matt Schmitt (@schmittx)](https://github.com/schmittx "66 total commits to the home-assistant organization, 52 commits to homebridge-homeassistant, 7 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to home-assistant-polymer") - [Matt White (@mw-white)](https://github.com/mw-white "10 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 5 commits to home-assistant") @@ -588,6 +591,7 @@ This page contains a list of people who have contributed in one way or another t - [Matthew Schick (@mattsch)](https://github.com/mattsch "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Matthew Treinish (@mtreinish)](https://github.com/mtreinish "20 total commits to the home-assistant organization, 13 commits to home-assistant, 7 commits to home-assistant.github.io") - [Matthias Dötsch (@brainexe)](https://github.com/brainexe "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [Mattias Welponer (@mxworm)](https://github.com/mxworm "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [mattie47 (@mattie47)](https://github.com/mattie47 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [mauriciobonani (@mauriciobonani)](https://github.com/mauriciobonani "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") - [Max Prokhorov (@mcspr)](https://github.com/mcspr "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") @@ -595,21 +599,19 @@ This page contains a list of people who have contributed in one way or another t - [maxclaey (@maxclaey)](https://github.com/maxclaey "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.github.io") - [maxlaverse (@maxlaverse)](https://github.com/maxlaverse "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [mboeru (@mboeru)](https://github.com/mboeru "1 total commits to the home-assistant organization, 1 commit to home-assistant-iOS") +- [mcfrojd (@mcfrojd)](https://github.com/mcfrojd "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Menno Blom (@b10m)](https://github.com/b10m "6 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant, 1 commit to netdisco") - [mertenats (@mertenats)](https://github.com/mertenats "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Micha LaQua (@milaq)](https://github.com/milaq "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Michael (@hartmms)](https://github.com/hartmms "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Michael (@hartmms)](https://github.com/hartmms "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Michael Auchter (@auchter)](https://github.com/auchter "13 total commits to the home-assistant organization, 13 commits to home-assistant") -- [Michael Fester (@michaelfester)](https://github.com/michaelfester "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Michael Fester (@michaelfester)](https://github.com/michaelfester "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Michael Furtak (@mfurtak)](https://github.com/mfurtak "5 total commits to the home-assistant organization, 5 commits to issue-bot") - [Michael Gilbert (@Zyell)](https://github.com/Zyell "8 total commits to the home-assistant organization, 8 commits to home-assistant") -- [Michael Heinemann (@heinemml)](https://github.com/heinemml "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Michael Kutý (@michaelkuty)](https://github.com/michaelkuty "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Michael Luggen (@l00mi)](https://github.com/l00mi "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Michael Prokop (@mika)](https://github.com/mika "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Michael Requeny (@requenym)](https://github.com/requenym "14 total commits to the home-assistant organization, 14 commits to home-assistant.github.io") - [Michael Shim (@shimeez)](https://github.com/shimeez "1 total commits to the home-assistant organization, 1 commit to fabric-home-assistant") -- [Michaël Arnauts (@michaelarnauts)](https://github.com/michaelarnauts "62 total commits to the home-assistant organization, 32 commits to home-assistant, 26 commits to home-assistant.github.io, 3 commits to home-assistant-polymer, 1 commit to netdisco") +- [Michaël Arnauts (@michaelarnauts)](https://github.com/michaelarnauts "63 total commits to the home-assistant organization, 33 commits to home-assistant, 26 commits to home-assistant.github.io, 3 commits to home-assistant-polymer, 1 commit to netdisco") - [Michel Settembrino (@Michel-Settembrino)](https://github.com/Michel-Settembrino "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [micw (@micw)](https://github.com/micw "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.github.io") - [Mike Christianson (@MikeChristianson)](https://github.com/MikeChristianson "6 total commits to the home-assistant organization, 6 commits to home-assistant") @@ -627,35 +629,32 @@ This page contains a list of people who have contributed in one way or another t - [mjj4791 (@mjj4791)](https://github.com/mjj4791 "23 total commits to the home-assistant organization, 15 commits to home-assistant.github.io, 8 commits to home-assistant") - [mmmmmtasty (@mmmmmtasty)](https://github.com/mmmmmtasty "8 total commits to the home-assistant organization, 8 commits to appdaemon") - [Molodax (@Molodax)](https://github.com/Molodax "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") -- [Moon Shot (@moonshot)](https://github.com/moonshot "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [moskovskiy82 (@moskovskiy82)](https://github.com/moskovskiy82 "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [motir (@motir)](https://github.com/motir "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [mradziwo (@mradziwo)](https://github.com/mradziwo "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [mukundv (@mukundv)](https://github.com/mukundv "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Mārtiņš Grunskis (@grunskis)](https://github.com/grunskis "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Nash Kaminski (@nkaminski)](https://github.com/nkaminski "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Nate (@BillyNate)](https://github.com/BillyNate "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Nathan Flynn (@eperdeme)](https://github.com/eperdeme "1 total commits to the home-assistant organization, 1 commit to hassio-addons") - [Nathan Henrie (@n8henrie)](https://github.com/n8henrie "19 total commits to the home-assistant organization, 9 commits to home-assistant, 6 commits to home-assistant.github.io, 2 commits to homebridge-homeassistant, 1 commit to appdaemon, 1 commit to home-assistant-polymer") -- [Neil Lathwood (@laf)](https://github.com/laf "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Neil Lathwood (@laf)](https://github.com/laf "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Nelis Willers (@NelisW)](https://github.com/NelisW "1 total commits to the home-assistant organization, 1 commit to fabric-home-assistant") - [NeLLyMerC (@NeLLyMerC)](https://github.com/NeLLyMerC "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [neonbunny (@neonbunny)](https://github.com/neonbunny "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Nicholas Amadori (@namadori)](https://github.com/namadori "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Nicholas Griffin (@nicholasgriffintn)](https://github.com/nicholasgriffintn "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") -- [Nicholas Sielicki (@sielicki)](https://github.com/sielicki "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Nick Touran (@partofthething)](https://github.com/partofthething "38 total commits to the home-assistant organization, 25 commits to home-assistant, 13 commits to home-assistant.github.io") - [Nicko van Someren (@nickovs)](https://github.com/nickovs "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Nicolas Graziano (@ngraziano)](https://github.com/ngraziano "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Nicolas Martignoni (@martignoni)](https://github.com/martignoni "1 total commits to the home-assistant organization, 1 commit to pi-gen") -- [nielstron (@nielstron)](https://github.com/nielstron "1 total commits to the home-assistant organization, 1 commit to netdisco") +- [nielstron (@nielstron)](https://github.com/nielstron "2 total commits to the home-assistant organization, 2 commits to netdisco") - [Nigel Rook (@NigelRook)](https://github.com/NigelRook "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Niklas (@niklaswa)](https://github.com/niklaswa "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Niklas Wagner (@Skaronator)](https://github.com/Skaronator "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Nolan Gilley (@nkgilley)](https://github.com/nkgilley "123 total commits to the home-assistant organization, 95 commits to home-assistant, 28 commits to home-assistant.github.io") - [nordlead2005 (@nordlead2005)](https://github.com/nordlead2005 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [NotoriousBDG (@notoriousbdg)](https://github.com/notoriousbdg "3 total commits to the home-assistant organization, 3 commits to hassio-addons") -- [NovapaX (@NovapaX)](https://github.com/NovapaX "27 total commits to the home-assistant organization, 21 commits to home-assistant-polymer, 5 commits to home-assistant, 1 commit to home-assistant-assets") +- [NovapaX (@NovapaX)](https://github.com/NovapaX "35 total commits to the home-assistant organization, 29 commits to home-assistant-polymer, 5 commits to home-assistant, 1 commit to home-assistant-assets") - [ntalekt (@ntalekt)](https://github.com/ntalekt "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [Nuno Sousa (@nunofgs)](https://github.com/nunofgs "5 total commits to the home-assistant organization, 4 commits to home-assistant, 1 commit to homebridge-homeassistant") - [obgm (@obgm)](https://github.com/obgm "480 total commits to the home-assistant organization, 480 commits to libcoap") @@ -666,12 +665,12 @@ This page contains a list of people who have contributed in one way or another t - [Oliver (@scarface-4711)](https://github.com/scarface-4711 "27 total commits to the home-assistant organization, 17 commits to home-assistant, 9 commits to home-assistant.github.io, 1 commit to netdisco") - [Oliver van Porten (@mcdeck)](https://github.com/mcdeck "10 total commits to the home-assistant organization, 10 commits to home-assistant") - [Open Home Automation (@open-homeautomation)](https://github.com/open-homeautomation "41 total commits to the home-assistant organization, 29 commits to home-assistant, 12 commits to home-assistant.github.io") -- [Otto Winter (@OttoWinter)](https://github.com/OttoWinter "45 total commits to the home-assistant organization, 39 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [Otto Winter (@OttoWinter)](https://github.com/OttoWinter "47 total commits to the home-assistant organization, 40 commits to home-assistant, 6 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [oznu (@oznu)](https://github.com/oznu "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") - [Parker Moore (@parkr)](https://github.com/parkr "60 total commits to the home-assistant organization, 60 commits to home-assistant.github.io") - [pascal (@passie)](https://github.com/passie "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [Pascal Bach (@bachp)](https://github.com/bachp "10 total commits to the home-assistant organization, 9 commits to home-assistant, 1 commit to netdisco") -- [Pascal Vizeli (@pvizeli)](https://github.com/pvizeli "2606 total commits to the home-assistant organization, 1041 commits to hassio, 461 commits to home-assistant, 364 commits to hassio-build, 331 commits to hassio-addons, 311 commits to home-assistant.github.io, 67 commits to hassio-os, 16 commits to hassio-addons-example, 13 commits to hassio-cli, 1 commit to home-assistant-js-websocket, 1 commit to netdisco") +- [Pascal Vizeli (@pvizeli)](https://github.com/pvizeli "2684 total commits to the home-assistant organization, 1055 commits to hassio, 461 commits to home-assistant, 369 commits to hassio-build, 338 commits to hassio-addons, 312 commits to home-assistant.github.io, 118 commits to hassio-os, 16 commits to hassio-addons-example, 13 commits to hassio-cli, 1 commit to home-assistant-js-websocket, 1 commit to netdisco") - [Pat Thoyts (@patthoyts)](https://github.com/patthoyts "2 total commits to the home-assistant organization, 2 commits to netdisco") - [Patrick Aikens (@duckpuppy)](https://github.com/duckpuppy "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Patrick Easters (@patrickeasters)](https://github.com/patrickeasters "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") @@ -688,7 +687,7 @@ This page contains a list of people who have contributed in one way or another t - [Per Osbäck (@perosb)](https://github.com/perosb "18 total commits to the home-assistant organization, 18 commits to home-assistant") - [Per Sandström (@persandstrom)](https://github.com/persandstrom "124 total commits to the home-assistant organization, 98 commits to home-assistant, 14 commits to home-assistant.github.io, 12 commits to home-assistant-polymer") - [Pete Peterson (@petey)](https://github.com/petey "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [PeteBa (@PeteBa)](https://github.com/PeteBa "7 total commits to the home-assistant organization, 5 commits to home-assistant, 2 commits to home-assistant-polymer") +- [PeteBa (@PeteBa)](https://github.com/PeteBa "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant-polymer") - [Peter Epley (@epleypa)](https://github.com/epleypa "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [Petr Vraník (@konikvranik)](https://github.com/konikvranik "11 total commits to the home-assistant organization, 6 commits to home-assistant, 5 commits to home-assistant.github.io") - [pezinek (@pezinek)](https://github.com/pezinek "8 total commits to the home-assistant organization, 8 commits to home-assistant") @@ -702,11 +701,11 @@ This page contains a list of people who have contributed in one way or another t - [Philip Howard (@Gadgetoid)](https://github.com/Gadgetoid "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Philip Kleimeyer (@philklei)](https://github.com/philklei "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Philip Lundrigan (@philipbl)](https://github.com/philipbl "65 total commits to the home-assistant organization, 56 commits to home-assistant, 9 commits to home-assistant.github.io") -- [Philip Rosenberg-Watt (@PhilRW)](https://github.com/PhilRW "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [Philip Rosenberg-Watt (@PhilRW)](https://github.com/PhilRW "10 total commits to the home-assistant organization, 7 commits to home-assistant, 3 commits to home-assistant.github.io") - [Philipp Hellmich (@runningman84)](https://github.com/runningman84 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Philipp Schmitt (@pschmitt)](https://github.com/pschmitt "37 total commits to the home-assistant organization, 24 commits to home-assistant, 11 commits to home-assistant.github.io, 1 commit to appdaemon, 1 commit to hassio-build") - [Phill Price (@phillprice)](https://github.com/phillprice "11 total commits to the home-assistant organization, 11 commits to home-assistant.github.io") -- [PhracturedBlue (@PhracturedBlue)](https://github.com/PhracturedBlue "31 total commits to the home-assistant organization, 18 commits to home-assistant, 12 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [PhracturedBlue (@PhracturedBlue)](https://github.com/PhracturedBlue "33 total commits to the home-assistant organization, 20 commits to home-assistant, 12 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Pierre Ståhl (@postlund)](https://github.com/postlund "49 total commits to the home-assistant organization, 32 commits to home-assistant, 11 commits to home-assistant.github.io, 4 commits to netdisco, 2 commits to home-assistant-polymer") - [Piratonym (@Piratonym)](https://github.com/Piratonym "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [pkonnekermetametrics (@pkonnekermetametrics)](https://github.com/pkonnekermetametrics "5 total commits to the home-assistant organization, 5 commits to warrant") @@ -730,9 +729,10 @@ This page contains a list of people who have contributed in one way or another t - [rkabadi (@rkabadi)](https://github.com/rkabadi "17 total commits to the home-assistant organization, 17 commits to home-assistant") - [Rob Capellini (@capellini)](https://github.com/capellini "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Rob Slifka (@rslifka)](https://github.com/rslifka "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Robbie Trencheny (@robbiet480)](https://github.com/robbiet480 "1317 total commits to the home-assistant organization, 646 commits to home-assistant-iOS, 259 commits to home-assistant, 249 commits to home-assistant.github.io, 92 commits to homebridge-homeassistant, 15 commits to home-assistant-polymer, 9 commits to hubot-home-assistant, 8 commits to Analytics-Receiver, 6 commits to netdisco, 3 commits to organization, 3 commits to hassbot, 3 commits to scenegen, 3 commits to hadashboard, 3 commits to appdaemon, 3 commits to home-assistant-js-websocket, 3 commits to home-assistant-js, 2 commits to lambda-home-assistant-github, 2 commits to LabelBot, 2 commits to home-assistant-notebooks, 2 commits to fabric-home-assistant, 2 commits to micropython-home-assistant, 2 commits to home-assistant-assets") -- [Robert Schütz (@dotlambda)](https://github.com/dotlambda "2 total commits to the home-assistant organization, 1 commit to netdisco, 1 commit to appdaemon") -- [Robin (@robmarkcole)](https://github.com/robmarkcole "29 total commits to the home-assistant organization, 19 commits to home-assistant.github.io, 9 commits to home-assistant, 1 commit to home-assistant-assets") +- [Robbie Trencheny (@robbiet480)](https://github.com/robbiet480 "1317 total commits to the home-assistant organization, 646 commits to home-assistant-iOS, 259 commits to home-assistant, 249 commits to home-assistant.github.io, 92 commits to homebridge-homeassistant, 15 commits to home-assistant-polymer, 9 commits to hubot-home-assistant, 8 commits to Analytics-Receiver, 6 commits to netdisco, 3 commits to home-assistant-js, 3 commits to organization, 3 commits to hassbot, 3 commits to appdaemon, 3 commits to hadashboard, 3 commits to scenegen, 3 commits to home-assistant-js-websocket, 2 commits to LabelBot, 2 commits to fabric-home-assistant, 2 commits to home-assistant-notebooks, 2 commits to lambda-home-assistant-github, 2 commits to home-assistant-assets, 2 commits to micropython-home-assistant") +- [Robert (@metbril)](https://github.com/metbril "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Robert Schütz (@dotlambda)](https://github.com/dotlambda "2 total commits to the home-assistant organization, 1 commit to appdaemon, 1 commit to netdisco") +- [Robin (@robmarkcole)](https://github.com/robmarkcole "30 total commits to the home-assistant organization, 20 commits to home-assistant.github.io, 9 commits to home-assistant, 1 commit to home-assistant-assets") - [Robin Laurén (@llauren)](https://github.com/llauren "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Roddie Hasan (@eiddor)](https://github.com/eiddor "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [Roi Dayan (@roidayan)](https://github.com/roidayan "6 total commits to the home-assistant organization, 6 commits to home-assistant") @@ -755,6 +755,7 @@ This page contains a list of people who have contributed in one way or another t - [Ryan McLean (@ryanm101)](https://github.com/ryanm101 "92 total commits to the home-assistant organization, 70 commits to hassio-cli, 16 commits to home-assistant, 6 commits to home-assistant.github.io") - [Ryan Turner (@turnrye)](https://github.com/turnrye "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Sabesto (@Sabesto)](https://github.com/Sabesto "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Sacha Telgenhof (@stelgenhof)](https://github.com/stelgenhof "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Sam Holmes (@sam3d)](https://github.com/sam3d "4 total commits to the home-assistant organization, 4 commits to pi-gen") - [sam-io (@sam-io)](https://github.com/sam-io "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [sander76 (@sander76)](https://github.com/sander76 "41 total commits to the home-assistant organization, 37 commits to home-assistant, 4 commits to home-assistant.github.io") @@ -767,7 +768,7 @@ This page contains a list of people who have contributed in one way or another t - [Sean Wilson (@swilson)](https://github.com/swilson "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [Sebastian (@sebk-666)](https://github.com/sebk-666 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Sebastian (@sgso)](https://github.com/sgso "3 total commits to the home-assistant organization, 3 commits to libcoap") -- [Sebastian Muszynski (@syssi)](https://github.com/syssi "84 total commits to the home-assistant organization, 50 commits to home-assistant, 32 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") +- [Sebastian Muszynski (@syssi)](https://github.com/syssi "97 total commits to the home-assistant organization, 58 commits to home-assistant, 36 commits to home-assistant.github.io, 2 commits to home-assistant-polymer, 1 commit to netdisco") - [Sebastian von Minckwitz (@teodoc)](https://github.com/teodoc "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Semir Patel (@analogue)](https://github.com/analogue "2 total commits to the home-assistant organization, 2 commits to appdaemon") - [Sergey Isachenko (@zabuldon)](https://github.com/zabuldon "9 total commits to the home-assistant organization, 9 commits to home-assistant") @@ -802,7 +803,7 @@ This page contains a list of people who have contributed in one way or another t - [Ted Drain (@TD22057)](https://github.com/TD22057 "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [tedstriker (@tedstriker)](https://github.com/tedstriker "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Teemu Mikkonen (@T3m3z)](https://github.com/T3m3z "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Teemu R. (@rytilahti)](https://github.com/rytilahti "52 total commits to the home-assistant organization, 39 commits to home-assistant, 9 commits to home-assistant.github.io, 4 commits to netdisco") +- [Teemu R. (@rytilahti)](https://github.com/rytilahti "53 total commits to the home-assistant organization, 40 commits to home-assistant, 9 commits to home-assistant.github.io, 4 commits to netdisco") - [Teguh Sobirin (@tjstyle)](https://github.com/tjstyle "2 total commits to the home-assistant organization, 2 commits to pi-gen") - [Tentoe (@Tentoe)](https://github.com/Tentoe "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Theb-1 (@Theb-1)](https://github.com/Theb-1 "5 total commits to the home-assistant organization, 5 commits to home-assistant") @@ -829,10 +830,11 @@ This page contains a list of people who have contributed in one way or another t - [tleegaard (@tleegaard)](https://github.com/tleegaard "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Tobie Booth (@tobiebooth)](https://github.com/tobiebooth "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [Toby Gray (@tobygray)](https://github.com/tobygray "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Tod Schmidt (@tschmidty69)](https://github.com/tschmidty69 "20 total commits to the home-assistant organization, 16 commits to home-assistant, 3 commits to home-assistant.github.io, 1 commit to hassio-addons") +- [Tod Schmidt (@tschmidty69)](https://github.com/tschmidty69 "22 total commits to the home-assistant organization, 17 commits to home-assistant, 4 commits to home-assistant.github.io, 1 commit to hassio-addons") - [toddeye (@toddeye)](https://github.com/toddeye "20 total commits to the home-assistant organization, 20 commits to home-assistant") - [Tom Dickman (@tdickman)](https://github.com/tdickman "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Tom Duijf (@tomduijf)](https://github.com/tomduijf "70 total commits to the home-assistant organization, 53 commits to home-assistant, 9 commits to home-assistant.github.io, 6 commits to home-assistant-polymer, 2 commits to netdisco") +- [Tom Harris (@teharris1)](https://github.com/teharris1 "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Tom Hoover (@tomhoover)](https://github.com/tomhoover "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Tom Matheussen (@Tommatheussen)](https://github.com/Tommatheussen "13 total commits to the home-assistant organization, 6 commits to home-assistant, 4 commits to home-assistant-polymer, 3 commits to home-assistant.github.io") - [Tom Usher (@tomusher)](https://github.com/tomusher "1 total commits to the home-assistant organization, 1 commit to netdisco") @@ -860,7 +862,7 @@ This page contains a list of people who have contributed in one way or another t - [Victor Cerutti (@victorcerutti)](https://github.com/victorcerutti "3 total commits to the home-assistant organization, 3 commits to home-assistant-polymer") - [Viet Dzung (@dzungpv)](https://github.com/dzungpv "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Vignesh Venkat (@vickyg3)](https://github.com/vickyg3 "9 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io") -- [Ville Skyttä (@scop)](https://github.com/scop "32 total commits to the home-assistant organization, 17 commits to home-assistant, 6 commits to home-assistant.github.io, 4 commits to netdisco, 2 commits to home-assistant-polymer, 2 commits to hassio-build, 1 commit to hassio-addons") +- [Ville Skyttä (@scop)](https://github.com/scop "38 total commits to the home-assistant organization, 18 commits to home-assistant, 9 commits to home-assistant.github.io, 4 commits to netdisco, 3 commits to hassio-addons, 2 commits to home-assistant-polymer, 2 commits to hassio-build") - [viswa-swami (@viswa-swami)](https://github.com/viswa-swami "9 total commits to the home-assistant organization, 9 commits to home-assistant") - [Vlad Korniev (@vkorn)](https://github.com/vkorn "1 total commits to the home-assistant organization, 1 commit to hassio-build") - [vllungu (@vllungu)](https://github.com/vllungu "3 total commits to the home-assistant organization, 3 commits to libcoap") @@ -887,9 +889,9 @@ This page contains a list of people who have contributed in one way or another t - [Zhao Lu (@zlu)](https://github.com/zlu "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Zio Tibia (@ziotibia81)](https://github.com/ziotibia81 "12 total commits to the home-assistant organization, 7 commits to home-assistant.github.io, 5 commits to home-assistant") - [Zorks (@Zorks)](https://github.com/Zorks "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Åskar Andersson (@olskar)](https://github.com/olskar "6 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 1 commit to hassbian-scripts") +- [Åskar Andersson (@olskar)](https://github.com/olskar "9 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 3 commits to home-assistant, 1 commit to hassbian-scripts") This page is irregularly updated using the [`credits_generator` tool](https://github.com/home-assistant/home-assistant.github.io/tree/next/credits_generator). If you think that you are missing, please let us know. -This page was last updated Thursday, March 22nd 2018, 7:54:30 am UTC. +This page was last updated Saturday, March 31st 2018, 9:06:17 am UTC. From 3a94dc98c47ebd2af88e882bf74f35433fa9a5a4 Mon Sep 17 00:00:00 2001 From: Albert Lee Date: Sat, 31 Mar 2018 04:08:15 -0500 Subject: [PATCH 115/371] Escape special characters in credits (#5064) --- credits_generator/update_credits.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/credits_generator/update_credits.js b/credits_generator/update_credits.js index d850ccaee9..3cfab7a9e2 100644 --- a/credits_generator/update_credits.js +++ b/credits_generator/update_credits.js @@ -58,7 +58,12 @@ github.repos.getForOrg({ cb(err); return; } - if(userInfo.login == 'RubenKelevra') userInfo.name = 'RubenKelevra'; // ugh, because his name is `@RubenKelevra` + if (userInfo.name) { + userInfo.name = userInfo.name.replace(/^@/, '') + .replace(//g, '>') + .replace(/[\\`*_{}[\]()#+-.!~|]/g, '\\$&'); + } usersMap[login].info.name = userInfo.name || userInfo.login; usersMap[login].info.username = userInfo.login; cb(); From 0bdaf10a387eda2753cd0c993ac08edd0b918608 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 31 Mar 2018 12:09:14 +0200 Subject: [PATCH 116/371] Update --- source/developers/credits.markdown | 78 +++++++++++++++--------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/source/developers/credits.markdown b/source/developers/credits.markdown index 43a2ec0dea..0fa372b00f 100644 --- a/source/developers/credits.markdown +++ b/source/developers/credits.markdown @@ -2,7 +2,7 @@ layout: page title: "Credits" description: "Credits for the developers who contributed to Home Assistant." -date: 2018-03-31 09:06:17 +0000 +date: 2018-03-31 09:09:02 +0000 sidebar: true comments: false sharing: true @@ -13,7 +13,7 @@ This page contains a list of people who have contributed in one way or another t ### {% linkable_title Author %} -- [Paulus Schoutsen (@balloob)](https://github.com/balloob "6522 total commits to the home-assistant organization, 3835 commits to home-assistant, 1426 commits to home-assistant.github.io, 750 commits to home-assistant-polymer, 244 commits to home-assistant-js, 122 commits to netdisco, 46 commits to home-assistant-js-websocket, 31 commits to hass-release, 17 commits to LabelBot, 15 commits to home-assistant-assets, 8 commits to example-custom-config, 7 commits to micropython-home-assistant, 5 commits to hassio, 3 commits to hassio-addons, 2 commits to issue-bot, 2 commits to hassio-build, 2 commits to hassio-addons-example, 2 commits to home-assistant-iOS, 2 commits to lambda-home-assistant-github, 1 commit to home-assistant-notebooks, 1 commit to warrant, 1 commit to architecture") +- [Paulus Schoutsen (@balloob)](https://github.com/balloob "6522 total commits to the home-assistant organization, 3835 commits to home-assistant, 1426 commits to home-assistant.github.io, 750 commits to home-assistant-polymer, 244 commits to home-assistant-js, 122 commits to netdisco, 46 commits to home-assistant-js-websocket, 31 commits to hass-release, 17 commits to LabelBot, 15 commits to home-assistant-assets, 8 commits to example-custom-config, 7 commits to micropython-home-assistant, 5 commits to hassio, 3 commits to hassio-addons, 2 commits to hassio-addons-example, 2 commits to hassio-build, 2 commits to issue-bot, 2 commits to lambda-home-assistant-github, 2 commits to home-assistant-iOS, 1 commit to architecture, 1 commit to home-assistant-notebooks, 1 commit to warrant") ### {% linkable_title Contributors %} @@ -37,7 +37,7 @@ This page contains a list of people who have contributed in one way or another t - [akloeckner (@akloeckner)](https://github.com/akloeckner "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Alan Bowman (@alanbowman)](https://github.com/alanbowman "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Alan Fischer (@alanfischer)](https://github.com/alanfischer "20 total commits to the home-assistant organization, 16 commits to home-assistant, 4 commits to home-assistant.github.io") -- [Alan Tse (@alandtse)](https://github.com/alandtse "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Alan Tse (@alandtse)](https://github.com/alandtse "4 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 2 commits to home-assistant") - [Alasdair Nicol (@alasdairnicol)](https://github.com/alasdairnicol "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Albatross (@DyingAlbatross)](https://github.com/DyingAlbatross "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Albert Lee (@trisk)](https://github.com/trisk "16 total commits to the home-assistant organization, 11 commits to home-assistant, 5 commits to home-assistant.github.io") @@ -66,7 +66,7 @@ This page contains a list of people who have contributed in one way or another t - [Andreas Jacobsen (@andreasjacobsen93)](https://github.com/andreasjacobsen93 "8 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 2 commits to hassio-addons") - [Andreas Rammhold (@andir)](https://github.com/andir "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Andreas Renberg (@IQAndreas)](https://github.com/IQAndreas "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") -- [Andreea-Daniela Ene (@AndreeaEne)](https://github.com/AndreeaEne "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") +- [Andreea\-Daniela Ene (@AndreeaEne)](https://github.com/AndreeaEne "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Andrei Pop (@andreipop2005)](https://github.com/andreipop2005 "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Andrej Friesen (@ajfriesen)](https://github.com/ajfriesen "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Andrew (@aneisch)](https://github.com/aneisch "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") @@ -85,14 +85,14 @@ This page contains a list of people who have contributed in one way or another t - [anotherthomas (@anotherthomas)](https://github.com/anotherthomas "1 total commits to the home-assistant organization, 1 commit to hassio-addons") - [Anthony Arnaud (@aarnaud)](https://github.com/aarnaud "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Anthony Hughes (@tony2nite)](https://github.com/tony2nite "1 total commits to the home-assistant organization, 1 commit to netdisco") -- [Antoine Bertin (@Diaoul)](https://github.com/Diaoul "5 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [Antoine Bertin (@Diaoul)](https://github.com/Diaoul "5 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 2 commits to home-assistant, 1 commit to home-assistant-polymer") - [Anton Glukhov (@toxxin)](https://github.com/toxxin "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Anton Lundin (@glance-)](https://github.com/glance- "8 total commits to the home-assistant organization, 7 commits to home-assistant, 1 commit to netdisco") - [Anton Sarukhanov (@antsar)](https://github.com/antsar "6 total commits to the home-assistant organization, 3 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Antoni K (@Antoni-K)](https://github.com/Antoni-K "1 total commits to the home-assistant organization, 1 commit to hassbian-scripts") - [apo-mak (@apo-mak)](https://github.com/apo-mak "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [arcsur (@arcsur)](https://github.com/arcsur "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Ardetus (@Ardetus)](https://github.com/Ardetus "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") +- [Ardetus (@Ardetus)](https://github.com/Ardetus "4 total commits to the home-assistant organization, 2 commits to home-assistant.github.io, 2 commits to home-assistant") - [Ardi Mehist (@omgapuppy)](https://github.com/omgapuppy "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Ari Lotter (@arilotter)](https://github.com/arilotter "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [arjenfvellinga (@arjenfvellinga)](https://github.com/arjenfvellinga "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") @@ -171,7 +171,7 @@ This page contains a list of people who have contributed in one way or another t - [Caleb (@finish06)](https://github.com/finish06 "7 total commits to the home-assistant organization, 7 commits to home-assistant") - [Cameron Bulock (@cbulock)](https://github.com/cbulock "5 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io, 1 commit to netdisco") - [Cameron Moore (@moorereason)](https://github.com/moorereason "3 total commits to the home-assistant organization, 3 commits to hassio-cli") -- [Carlo Costanzo (@CCOSTAN)](https://github.com/CCOSTAN "96 total commits to the home-assistant organization, 88 commits to home-assistant.github.io, 5 commits to home-assistant, 1 commit to fabric-home-assistant, 1 commit to homebridge-homeassistant, 1 commit to hassbian-scripts") +- [Carlo Costanzo (@CCOSTAN)](https://github.com/CCOSTAN "96 total commits to the home-assistant organization, 88 commits to home-assistant.github.io, 5 commits to home-assistant, 1 commit to fabric-home-assistant, 1 commit to hassbian-scripts, 1 commit to homebridge-homeassistant") - [carlosmgr (@carlosmgr)](https://github.com/carlosmgr "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Carter (@BluGeni)](https://github.com/BluGeni "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [cdce8p (@cdce8p)](https://github.com/cdce8p "69 total commits to the home-assistant organization, 43 commits to home-assistant, 22 commits to home-assistant.github.io, 4 commits to home-assistant-polymer") @@ -185,8 +185,8 @@ This page contains a list of people who have contributed in one way or another t - [Charles Garwood (@cgarwood)](https://github.com/cgarwood "17 total commits to the home-assistant organization, 11 commits to home-assistant.github.io, 6 commits to home-assistant") - [Charles Spirakis (@srcLurker)](https://github.com/srcLurker "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.github.io") - [Chayoung You (@yous)](https://github.com/yous "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Check your git settings! (@invalid-email-address)](https://github.com/invalid-email-address "1 total commits to the home-assistant organization, 1 commit to libcoap") -- [Chia-liang Kao (@clkao)](https://github.com/clkao "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Check your git settings\! (@invalid-email-address)](https://github.com/invalid-email-address "1 total commits to the home-assistant organization, 1 commit to libcoap") +- [Chia\-liang Kao (@clkao)](https://github.com/clkao "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Chris (@chennin)](https://github.com/chennin "15 total commits to the home-assistant organization, 11 commits to home-assistant.github.io, 4 commits to home-assistant") - [Chris Aloi (@ctaloi)](https://github.com/ctaloi "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Chris Crowe (@chriscrowe)](https://github.com/chriscrowe "3 total commits to the home-assistant organization, 3 commits to homebridge-homeassistant") @@ -211,7 +211,7 @@ This page contains a list of people who have contributed in one way or another t - [Ciquattro (@CiquattroFPV)](https://github.com/CiquattroFPV "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [citruz (@citruz)](https://github.com/citruz "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [clach04 (@clach04)](https://github.com/clach04 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Claus F. Strasburger (@cfstras)](https://github.com/cfstras "5 total commits to the home-assistant organization, 5 commits to pi-gen") +- [Claus F\. Strasburger (@cfstras)](https://github.com/cfstras "5 total commits to the home-assistant organization, 5 commits to pi-gen") - [cogneato (@cogneato)](https://github.com/cogneato "15 total commits to the home-assistant organization, 15 commits to home-assistant.github.io") - [Colin Dunn (@colindunn)](https://github.com/colindunn "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Colin O'Dell (@colinodell)](https://github.com/colinodell "26 total commits to the home-assistant organization, 15 commits to home-assistant, 11 commits to home-assistant.github.io") @@ -222,7 +222,7 @@ This page contains a list of people who have contributed in one way or another t - [Corban Mailloux (@corbanmailloux)](https://github.com/corbanmailloux "18 total commits to the home-assistant organization, 18 commits to home-assistant.github.io") - [Corey Pauley (@devspacenine)](https://github.com/devspacenine "5 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 2 commits to home-assistant") - [corneyl (@corneyl)](https://github.com/corneyl "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Craig J. Ward (@wardcraigj)](https://github.com/wardcraigj "27 total commits to the home-assistant organization, 20 commits to home-assistant, 7 commits to home-assistant.github.io") +- [Craig J\. Ward (@wardcraigj)](https://github.com/wardcraigj "27 total commits to the home-assistant organization, 20 commits to home-assistant, 7 commits to home-assistant.github.io") - [CTLS (@CTLS)](https://github.com/CTLS "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [CV (@dagobert)](https://github.com/dagobert "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [cxlwill (@cxlwill)](https://github.com/cxlwill "3 total commits to the home-assistant organization, 2 commits to home-assistant-polymer, 1 commit to hassbian-scripts") @@ -257,7 +257,7 @@ This page contains a list of people who have contributed in one way or another t - [Dave J (@kxtcd950)](https://github.com/kxtcd950 "3 total commits to the home-assistant organization, 3 commits to hassbian-scripts") - [DaveSergeant (@dethpickle)](https://github.com/dethpickle "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [David (@fanaticDavid)](https://github.com/fanaticDavid "16 total commits to the home-assistant organization, 12 commits to home-assistant.github.io, 3 commits to home-assistant, 1 commit to home-assistant-polymer") -- [David (Drew) Jackson (@David-Jackson)](https://github.com/David-Jackson "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") +- [David \(Drew\) Jackson (@David-Jackson)](https://github.com/David-Jackson "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [David De Sloovere (@DavidDeSloovere)](https://github.com/DavidDeSloovere "16 total commits to the home-assistant organization, 16 commits to home-assistant.github.io") - [David Fiel (@dfiel)](https://github.com/dfiel "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [David Grant (@davegravy)](https://github.com/davegravy "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") @@ -265,7 +265,7 @@ This page contains a list of people who have contributed in one way or another t - [David Ohayon (@ohayon)](https://github.com/ohayon "3 total commits to the home-assistant organization, 3 commits to issue-bot") - [David Straub (@DavidMStraub)](https://github.com/DavidMStraub "9 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io") - [David Wang (@dcwangmit01)](https://github.com/dcwangmit01 "2 total commits to the home-assistant organization, 2 commits to pi-gen") -- [David-Leon Pohl (@DavidLP)](https://github.com/DavidLP "15 total commits to the home-assistant organization, 13 commits to home-assistant, 2 commits to home-assistant.github.io") +- [David\-Leon Pohl (@DavidLP)](https://github.com/DavidLP "15 total commits to the home-assistant organization, 13 commits to home-assistant, 2 commits to home-assistant.github.io") - [davidedmundson (@davidedmundson)](https://github.com/davidedmundson "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [Dawid Wróbel (@wrobelda)](https://github.com/wrobelda "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Dean Camera (@abcminiuser)](https://github.com/abcminiuser "4 total commits to the home-assistant organization, 2 commits to home-assistant, 2 commits to home-assistant.github.io") @@ -304,7 +304,7 @@ This page contains a list of people who have contributed in one way or another t - [Eric Rolf (@xrolfex)](https://github.com/xrolfex "13 total commits to the home-assistant organization, 13 commits to home-assistant") - [Eric Thompson (@er0ck)](https://github.com/er0ck "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Erik Eriksson (@molobrakos)](https://github.com/molobrakos "115 total commits to the home-assistant organization, 99 commits to home-assistant, 13 commits to home-assistant.github.io, 3 commits to netdisco") -- [Erik-jan Riemers (@riemers)](https://github.com/riemers "14 total commits to the home-assistant organization, 13 commits to home-assistant.github.io, 1 commit to hassbian-scripts") +- [Erik\-jan Riemers (@riemers)](https://github.com/riemers "14 total commits to the home-assistant organization, 13 commits to home-assistant.github.io, 1 commit to hassbian-scripts") - [escoand (@escoand)](https://github.com/escoand "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Ettienne Gous (@ettiennegous)](https://github.com/ettiennegous "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [ettisan (@ettisan)](https://github.com/ettisan "8 total commits to the home-assistant organization, 8 commits to home-assistant") @@ -323,12 +323,12 @@ This page contains a list of people who have contributed in one way or another t - [Ferry van Zeelst (@StaticCube)](https://github.com/StaticCube "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant") - [Filip Bednárik (@drndos)](https://github.com/drndos "2 total commits to the home-assistant organization, 2 commits to home-assistant.github.io") - [Finbarr Brady (@fbradyirl)](https://github.com/fbradyirl "8 total commits to the home-assistant organization, 8 commits to home-assistant") -- [Florian Holzapfel (@florianholzapfel)](https://github.com/florianholzapfel "11 total commits to the home-assistant organization, 4 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to netdisco") +- [Florian Holzapfel (@florianholzapfel)](https://github.com/florianholzapfel "11 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 4 commits to home-assistant, 3 commits to netdisco") - [Florian Klien (@flowolf)](https://github.com/flowolf "17 total commits to the home-assistant organization, 14 commits to home-assistant.github.io, 3 commits to home-assistant") - [florianj1 (@florianj1)](https://github.com/florianj1 "1 total commits to the home-assistant organization, 1 commit to hassio") -- [florincosta (@florincosta)](https://github.com/florincosta "6 total commits to the home-assistant organization, 3 commits to home-assistant, 3 commits to home-assistant.github.io") +- [florincosta (@florincosta)](https://github.com/florincosta "6 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 3 commits to home-assistant") - [Fonta (@f0nt4)](https://github.com/f0nt4 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") -- [Franck Nijhof (@frenck)](https://github.com/frenck "30 total commits to the home-assistant organization, 21 commits to home-assistant.github.io, 5 commits to hassio, 2 commits to home-assistant-polymer, 1 commit to appdaemon, 1 commit to hassio-cli") +- [Franck Nijhof (@frenck)](https://github.com/frenck "30 total commits to the home-assistant organization, 21 commits to home-assistant.github.io, 5 commits to hassio, 2 commits to home-assistant-polymer, 1 commit to hassio-cli, 1 commit to appdaemon") - [Frank (@syphernl)](https://github.com/syphernl "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Frantz (@rofrantz)](https://github.com/rofrantz "16 total commits to the home-assistant organization, 9 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to netdisco") - [Frederic Hemberger (@fhemberger)](https://github.com/fhemberger "93 total commits to the home-assistant organization, 93 commits to home-assistant.github.io") @@ -340,7 +340,7 @@ This page contains a list of people who have contributed in one way or another t - [Gabor SZOLLOSI (@szogi)](https://github.com/szogi "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to appdaemon") - [GadgetReactor (@GadgetReactor)](https://github.com/GadgetReactor "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Geoff Norton (@kangaroo)](https://github.com/kangaroo "14 total commits to the home-assistant organization, 14 commits to home-assistant") -- [George.M (@nodinosaur)](https://github.com/nodinosaur "8 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 2 commits to home-assistant") +- [George\.M (@nodinosaur)](https://github.com/nodinosaur "8 total commits to the home-assistant organization, 6 commits to home-assistant.github.io, 2 commits to home-assistant") - [Georgi Kirichkov (@kirichkov)](https://github.com/kirichkov "17 total commits to the home-assistant organization, 11 commits to home-assistant.github.io, 5 commits to home-assistant, 1 commit to appdaemon") - [Georgi Yanev (@jumpalottahigh)](https://github.com/jumpalottahigh "6 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 2 commits to home-assistant-polymer") - [Georgii Staroselskii (@staroselskii)](https://github.com/staroselskii "1 total commits to the home-assistant organization, 1 commit to pi-gen") @@ -359,7 +359,7 @@ This page contains a list of people who have contributed in one way or another t - [Greg Laabs (@OverloadUT)](https://github.com/OverloadUT "14 total commits to the home-assistant organization, 11 commits to home-assistant, 3 commits to home-assistant.github.io") - [Greg MacLellan (@gregmac)](https://github.com/gregmac "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Greg Stevenson (@gstevenson)](https://github.com/gstevenson "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Greg. A. (@gautric)](https://github.com/gautric "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Greg\. A\. (@gautric)](https://github.com/gautric "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [GTH (@gunnarhelgason)](https://github.com/gunnarhelgason "2 total commits to the home-assistant organization, 2 commits to appdaemon") - [Guillaume Rischard (@grischard)](https://github.com/grischard "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Gustav Ahlberg (@Gyran)](https://github.com/Gyran "20 total commits to the home-assistant organization, 20 commits to home-assistant") @@ -386,7 +386,7 @@ This page contains a list of people who have contributed in one way or another t - [Hydreliox (@HydrelioxGitHub)](https://github.com/HydrelioxGitHub "46 total commits to the home-assistant organization, 34 commits to home-assistant, 12 commits to home-assistant.github.io") - [Ian Copp (@icopp)](https://github.com/icopp "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [ianj001 (@ianj001)](https://github.com/ianj001 "7 total commits to the home-assistant organization, 7 commits to home-assistant.github.io") -- [icovada (@icovada)](https://github.com/icovada "6 total commits to the home-assistant organization, 3 commits to home-assistant, 3 commits to home-assistant.github.io") +- [icovada (@icovada)](https://github.com/icovada "6 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 3 commits to home-assistant") - [Igor Bernstein (@igorbernstein2)](https://github.com/igorbernstein2 "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Igor Shults (@ishults)](https://github.com/ishults "12 total commits to the home-assistant organization, 6 commits to home-assistant, 5 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [Ioan Loosley (@ioangogo)](https://github.com/ioangogo "10 total commits to the home-assistant organization, 10 commits to home-assistant.github.io") @@ -414,7 +414,7 @@ This page contains a list of people who have contributed in one way or another t - [Jan Willhaus (@janwh)](https://github.com/janwh "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Janne Grunau (@jannau)](https://github.com/jannau "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Jared Beckham (@jtbeckha)](https://github.com/jtbeckha "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Jared J. (@jjensn)](https://github.com/jjensn "1 total commits to the home-assistant organization, 1 commit to netdisco") +- [Jared J\. (@jjensn)](https://github.com/jjensn "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Jason Carter (@JasonCarter80)](https://github.com/JasonCarter80 "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [Jason Hite (@jasonmhite)](https://github.com/jasonmhite "6 total commits to the home-assistant organization, 6 commits to appdaemon") - [Javier González Calleja (@gonzalezcalleja)](https://github.com/gonzalezcalleja "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -422,8 +422,8 @@ This page contains a list of people who have contributed in one way or another t - [JAYMAN-ATX (@JAYMAN-ATX)](https://github.com/JAYMAN-ATX "2 total commits to the home-assistant organization, 2 commits to homebridge-homeassistant") - [JC Connell (@jcconnell)](https://github.com/jcconnell "7 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 3 commits to home-assistant") - [Jean Regisser (@jeanregisser)](https://github.com/jeanregisser "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [Jean-Michel Julien (@KurdyMalloy)](https://github.com/KurdyMalloy "1 total commits to the home-assistant organization, 1 commit to libcoap") -- [Jean-Philippe Bouillot (@Jypy)](https://github.com/Jypy "2 total commits to the home-assistant organization, 2 commits to home-assistant") +- [Jean\-Michel Julien (@KurdyMalloy)](https://github.com/KurdyMalloy "1 total commits to the home-assistant organization, 1 commit to libcoap") +- [Jean\-Philippe Bouillot (@Jypy)](https://github.com/Jypy "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Jeff McGehee (@jlmcgehee21)](https://github.com/jlmcgehee21 "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Jeff Schroeder (@SEJeff)](https://github.com/SEJeff "17 total commits to the home-assistant organization, 17 commits to home-assistant") - [Jeff Wilson (@jawilson)](https://github.com/jawilson "24 total commits to the home-assistant organization, 19 commits to home-assistant, 5 commits to home-assistant.github.io") @@ -455,7 +455,7 @@ This page contains a list of people who have contributed in one way or another t - [Johan Haals (@jhaals)](https://github.com/jhaals "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Johan van der Kuijl (@Rubyan)](https://github.com/Rubyan "4 total commits to the home-assistant organization, 3 commits to home-assistant.github.io, 1 commit to appdaemon") - [Johann Kellerman (@kellerza)](https://github.com/kellerza "169 total commits to the home-assistant organization, 139 commits to home-assistant, 30 commits to home-assistant.github.io") -- [Johannes K. (@roadrash2108)](https://github.com/roadrash2108 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [Johannes K\. (@roadrash2108)](https://github.com/roadrash2108 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [John (@J-C-B)](https://github.com/J-C-B "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [John Allen (@jra3)](https://github.com/jra3 "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [John Arild Berentsen (@turbokongen)](https://github.com/turbokongen "202 total commits to the home-assistant organization, 150 commits to home-assistant, 37 commits to home-assistant.github.io, 15 commits to home-assistant-polymer") @@ -554,7 +554,7 @@ This page contains a list of people who have contributed in one way or another t - [Marc Forth (@mf-social)](https://github.com/mf-social "25 total commits to the home-assistant organization, 24 commits to home-assistant.github.io, 1 commit to fabric-home-assistant") - [Marc Khouri (@ubnt-marc-khouri)](https://github.com/ubnt-marc-khouri "2 total commits to the home-assistant organization, 2 commits to home-assistant-polymer") - [Marc Pabst (@mxtra)](https://github.com/mxtra "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Marc Plano-Lesay (@Kernald)](https://github.com/Kernald "12 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 2 commits to home-assistant") +- [Marc Plano\-Lesay (@Kernald)](https://github.com/Kernald "12 total commits to the home-assistant organization, 10 commits to home-assistant.github.io, 2 commits to home-assistant") - [Marcel030nl (@Marcel030nl)](https://github.com/Marcel030nl "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") - [Marcelo Moreira de Mello (@tchellomello)](https://github.com/tchellomello "140 total commits to the home-assistant organization, 77 commits to home-assistant, 61 commits to home-assistant.github.io, 1 commit to home-assistant-assets, 1 commit to home-assistant-polymer") - [Marcin Jaworski (@yawor)](https://github.com/yawor "12 total commits to the home-assistant organization, 12 commits to appdaemon") @@ -581,7 +581,7 @@ This page contains a list of people who have contributed in one way or another t - [Martokk (@martokk)](https://github.com/martokk "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Mateusz Drab (@mateuszdrab)](https://github.com/mateuszdrab "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Mathew Peterson (@mathewpeterson)](https://github.com/mathewpeterson "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") -- [Matt N. (@mnoorenberghe)](https://github.com/mnoorenberghe "53 total commits to the home-assistant organization, 25 commits to home-assistant-iOS, 17 commits to home-assistant.github.io, 9 commits to home-assistant, 1 commit to homebridge-homeassistant, 1 commit to home-assistant-polymer") +- [Matt N\. (@mnoorenberghe)](https://github.com/mnoorenberghe "53 total commits to the home-assistant organization, 25 commits to home-assistant-iOS, 17 commits to home-assistant.github.io, 9 commits to home-assistant, 1 commit to homebridge-homeassistant, 1 commit to home-assistant-polymer") - [Matt Rogers (@rogersmj)](https://github.com/rogersmj "20 total commits to the home-assistant organization, 20 commits to hadashboard") - [Matt Schmitt (@schmittx)](https://github.com/schmittx "66 total commits to the home-assistant organization, 52 commits to homebridge-homeassistant, 7 commits to home-assistant, 4 commits to home-assistant.github.io, 3 commits to home-assistant-polymer") - [Matt White (@mw-white)](https://github.com/mw-white "10 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 5 commits to home-assistant") @@ -620,7 +620,7 @@ This page contains a list of people who have contributed in one way or another t - [Mike O'Driscoll (@mikeodr)](https://github.com/mikeodr "8 total commits to the home-assistant organization, 5 commits to home-assistant.github.io, 3 commits to home-assistant") - [Mike Roberts (@m-roberts)](https://github.com/m-roberts "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Mikkel Høgh (@mikl)](https://github.com/mikl "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") -- [Milan V. (@milanvo)](https://github.com/milanvo "18 total commits to the home-assistant organization, 10 commits to home-assistant, 7 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") +- [Milan V\. (@milanvo)](https://github.com/milanvo "18 total commits to the home-assistant organization, 10 commits to home-assistant, 7 commits to home-assistant.github.io, 1 commit to home-assistant-polymer") - [miniconfig (@miniconfig)](https://github.com/miniconfig "27 total commits to the home-assistant organization, 20 commits to home-assistant, 7 commits to home-assistant.github.io") - [Minims (@Minims)](https://github.com/Minims "3 total commits to the home-assistant organization, 3 commits to homebridge-homeassistant") - [Mister Wil (@MisterWil)](https://github.com/MisterWil "17 total commits to the home-assistant organization, 11 commits to home-assistant, 6 commits to home-assistant.github.io") @@ -658,8 +658,8 @@ This page contains a list of people who have contributed in one way or another t - [ntalekt (@ntalekt)](https://github.com/ntalekt "6 total commits to the home-assistant organization, 6 commits to home-assistant.github.io") - [Nuno Sousa (@nunofgs)](https://github.com/nunofgs "5 total commits to the home-assistant organization, 4 commits to home-assistant, 1 commit to homebridge-homeassistant") - [obgm (@obgm)](https://github.com/obgm "480 total commits to the home-assistant organization, 480 commits to libcoap") -- [OLD PROFILE! Go to /dennisreimann (@dbloete)](https://github.com/dbloete "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Ole-Kenneth (@olekenneth)](https://github.com/olekenneth "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") +- [OLD PROFILE\! Go to /dennisreimann (@dbloete)](https://github.com/dbloete "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") +- [Ole\-Kenneth (@olekenneth)](https://github.com/olekenneth "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") - [Oleksii Serdiuk (@leppa)](https://github.com/leppa "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Oliv3rDog (@Oliv3rDog)](https://github.com/Oliv3rDog "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Oliver (@scarface-4711)](https://github.com/scarface-4711 "27 total commits to the home-assistant organization, 17 commits to home-assistant, 9 commits to home-assistant.github.io, 1 commit to netdisco") @@ -701,7 +701,7 @@ This page contains a list of people who have contributed in one way or another t - [Philip Howard (@Gadgetoid)](https://github.com/Gadgetoid "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Philip Kleimeyer (@philklei)](https://github.com/philklei "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Philip Lundrigan (@philipbl)](https://github.com/philipbl "65 total commits to the home-assistant organization, 56 commits to home-assistant, 9 commits to home-assistant.github.io") -- [Philip Rosenberg-Watt (@PhilRW)](https://github.com/PhilRW "10 total commits to the home-assistant organization, 7 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Philip Rosenberg\-Watt (@PhilRW)](https://github.com/PhilRW "10 total commits to the home-assistant organization, 7 commits to home-assistant, 3 commits to home-assistant.github.io") - [Philipp Hellmich (@runningman84)](https://github.com/runningman84 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [Philipp Schmitt (@pschmitt)](https://github.com/pschmitt "37 total commits to the home-assistant organization, 24 commits to home-assistant, 11 commits to home-assistant.github.io, 1 commit to appdaemon, 1 commit to hassio-build") - [Phill Price (@phillprice)](https://github.com/phillprice "11 total commits to the home-assistant organization, 11 commits to home-assistant.github.io") @@ -729,7 +729,7 @@ This page contains a list of people who have contributed in one way or another t - [rkabadi (@rkabadi)](https://github.com/rkabadi "17 total commits to the home-assistant organization, 17 commits to home-assistant") - [Rob Capellini (@capellini)](https://github.com/capellini "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Rob Slifka (@rslifka)](https://github.com/rslifka "5 total commits to the home-assistant organization, 5 commits to home-assistant.github.io") -- [Robbie Trencheny (@robbiet480)](https://github.com/robbiet480 "1317 total commits to the home-assistant organization, 646 commits to home-assistant-iOS, 259 commits to home-assistant, 249 commits to home-assistant.github.io, 92 commits to homebridge-homeassistant, 15 commits to home-assistant-polymer, 9 commits to hubot-home-assistant, 8 commits to Analytics-Receiver, 6 commits to netdisco, 3 commits to home-assistant-js, 3 commits to organization, 3 commits to hassbot, 3 commits to appdaemon, 3 commits to hadashboard, 3 commits to scenegen, 3 commits to home-assistant-js-websocket, 2 commits to LabelBot, 2 commits to fabric-home-assistant, 2 commits to home-assistant-notebooks, 2 commits to lambda-home-assistant-github, 2 commits to home-assistant-assets, 2 commits to micropython-home-assistant") +- [Robbie Trencheny (@robbiet480)](https://github.com/robbiet480 "1317 total commits to the home-assistant organization, 646 commits to home-assistant-iOS, 259 commits to home-assistant, 249 commits to home-assistant.github.io, 92 commits to homebridge-homeassistant, 15 commits to home-assistant-polymer, 9 commits to hubot-home-assistant, 8 commits to Analytics-Receiver, 6 commits to netdisco, 3 commits to scenegen, 3 commits to hadashboard, 3 commits to appdaemon, 3 commits to home-assistant-js, 3 commits to organization, 3 commits to home-assistant-js-websocket, 3 commits to hassbot, 2 commits to LabelBot, 2 commits to micropython-home-assistant, 2 commits to fabric-home-assistant, 2 commits to home-assistant-notebooks, 2 commits to lambda-home-assistant-github, 2 commits to home-assistant-assets") - [Robert (@metbril)](https://github.com/metbril "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Robert Schütz (@dotlambda)](https://github.com/dotlambda "2 total commits to the home-assistant organization, 1 commit to appdaemon, 1 commit to netdisco") - [Robin (@robmarkcole)](https://github.com/robmarkcole "30 total commits to the home-assistant organization, 20 commits to home-assistant.github.io, 9 commits to home-assistant, 1 commit to home-assistant-assets") @@ -782,7 +782,7 @@ This page contains a list of people who have contributed in one way or another t - [Sjors Spoorendonk (@sjorsjes)](https://github.com/sjorsjes "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [sjoshi10 (@sjoshi10)](https://github.com/sjoshi10 "1 total commits to the home-assistant organization, 1 commit to warrant") - [snizzleorg (@snizzleorg)](https://github.com/snizzleorg "5 total commits to the home-assistant organization, 5 commits to hadashboard") -- [St. John Johnson (@stjohnjohnson)](https://github.com/stjohnjohnson "9 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io") +- [St\. John Johnson (@stjohnjohnson)](https://github.com/stjohnjohnson "9 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io") - [Stefan Jonasson (@stefan-jonasson)](https://github.com/stefan-jonasson "12 total commits to the home-assistant organization, 8 commits to home-assistant, 4 commits to home-assistant.github.io") - [Stefano Scipioni (@scipioni)](https://github.com/scipioni "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Steltek (@Steltek)](https://github.com/Steltek "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") @@ -803,7 +803,7 @@ This page contains a list of people who have contributed in one way or another t - [Ted Drain (@TD22057)](https://github.com/TD22057 "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [tedstriker (@tedstriker)](https://github.com/tedstriker "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Teemu Mikkonen (@T3m3z)](https://github.com/T3m3z "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Teemu R. (@rytilahti)](https://github.com/rytilahti "53 total commits to the home-assistant organization, 40 commits to home-assistant, 9 commits to home-assistant.github.io, 4 commits to netdisco") +- [Teemu R\. (@rytilahti)](https://github.com/rytilahti "53 total commits to the home-assistant organization, 40 commits to home-assistant, 9 commits to home-assistant.github.io, 4 commits to netdisco") - [Teguh Sobirin (@tjstyle)](https://github.com/tjstyle "2 total commits to the home-assistant organization, 2 commits to pi-gen") - [Tentoe (@Tentoe)](https://github.com/Tentoe "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Theb-1 (@Theb-1)](https://github.com/Theb-1 "5 total commits to the home-assistant organization, 5 commits to home-assistant") @@ -821,7 +821,7 @@ This page contains a list of people who have contributed in one way or another t - [Thomas Purchas (@thomaspurchas)](https://github.com/thomaspurchas "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") - [Thomas Pötsch (@thp-comnets)](https://github.com/thp-comnets "7 total commits to the home-assistant organization, 7 commits to libcoap") - [thrawnarn (@thrawnarn)](https://github.com/thrawnarn "8 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io, 1 commit to netdisco") -- [ThUnD3r|Gr33n (@thundergreen)](https://github.com/thundergreen "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") +- [ThUnD3r\|Gr33n (@thundergreen)](https://github.com/thundergreen "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [tijuca (@tijuca)](https://github.com/tijuca "106 total commits to the home-assistant organization, 106 commits to libcoap") - [Tim Wilbrink (@TWilb)](https://github.com/TWilb "15 total commits to the home-assistant organization, 15 commits to home-assistant-iOS") - [Timo (@timotk)](https://github.com/timotk "1 total commits to the home-assistant organization, 1 commit to netdisco") @@ -862,7 +862,7 @@ This page contains a list of people who have contributed in one way or another t - [Victor Cerutti (@victorcerutti)](https://github.com/victorcerutti "3 total commits to the home-assistant organization, 3 commits to home-assistant-polymer") - [Viet Dzung (@dzungpv)](https://github.com/dzungpv "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Vignesh Venkat (@vickyg3)](https://github.com/vickyg3 "9 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.github.io") -- [Ville Skyttä (@scop)](https://github.com/scop "38 total commits to the home-assistant organization, 18 commits to home-assistant, 9 commits to home-assistant.github.io, 4 commits to netdisco, 3 commits to hassio-addons, 2 commits to home-assistant-polymer, 2 commits to hassio-build") +- [Ville Skyttä (@scop)](https://github.com/scop "38 total commits to the home-assistant organization, 18 commits to home-assistant, 9 commits to home-assistant.github.io, 4 commits to netdisco, 3 commits to hassio-addons, 2 commits to hassio-build, 2 commits to home-assistant-polymer") - [viswa-swami (@viswa-swami)](https://github.com/viswa-swami "9 total commits to the home-assistant organization, 9 commits to home-assistant") - [Vlad Korniev (@vkorn)](https://github.com/vkorn "1 total commits to the home-assistant organization, 1 commit to hassio-build") - [vllungu (@vllungu)](https://github.com/vllungu "3 total commits to the home-assistant organization, 3 commits to libcoap") @@ -871,18 +871,18 @@ This page contains a list of people who have contributed in one way or another t - [Wesley Young (@wesdyoung)](https://github.com/wesdyoung "1 total commits to the home-assistant organization, 1 commit to warrant") - [Wilco Land (@Wilco89)](https://github.com/Wilco89 "3 total commits to the home-assistant organization, 3 commits to home-assistant.github.io") - [Will Heid (@bassclarinetl2)](https://github.com/bassclarinetl2 "20 total commits to the home-assistant organization, 19 commits to home-assistant.github.io, 1 commit to fabric-home-assistant") -- [Will W. (@tiktok7)](https://github.com/tiktok7 "4 total commits to the home-assistant organization, 4 commits to home-assistant") +- [Will W\. (@tiktok7)](https://github.com/tiktok7 "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Willems Davy (@joyrider3774)](https://github.com/joyrider3774 "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [William Johansson (@radhus)](https://github.com/radhus "1 total commits to the home-assistant organization, 1 commit to hassio") - [William Scanlon (@w1ll1am23)](https://github.com/w1ll1am23 "111 total commits to the home-assistant organization, 76 commits to home-assistant, 33 commits to home-assistant.github.io, 2 commits to netdisco") - [williamlehman (@williamlehman)](https://github.com/williamlehman "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [wind-rider (@wind-rider)](https://github.com/wind-rider "5 total commits to the home-assistant organization, 5 commits to home-assistant") - [wokar (@wokar)](https://github.com/wokar "12 total commits to the home-assistant organization, 8 commits to home-assistant, 4 commits to home-assistant.github.io") -- [Wolf-Bastian Pöttner (@BastianPoe)](https://github.com/BastianPoe "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") +- [Wolf\-Bastian Pöttner (@BastianPoe)](https://github.com/BastianPoe "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.github.io") - [Wolfgang Malgadey (@wmalgadey)](https://github.com/wmalgadey "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [XECDesign (@XECDesign)](https://github.com/XECDesign "138 total commits to the home-assistant organization, 138 commits to pi-gen") - [Xorso (@Xorso)](https://github.com/Xorso "22 total commits to the home-assistant organization, 21 commits to home-assistant, 1 commit to hassio-addons") -- [Yannick POLLART (@ypollart)](https://github.com/ypollart "8 total commits to the home-assistant organization, 4 commits to home-assistant, 4 commits to home-assistant.github.io") +- [Yannick POLLART (@ypollart)](https://github.com/ypollart "8 total commits to the home-assistant organization, 4 commits to home-assistant.github.io, 4 commits to home-assistant") - [Yasin Soliman (@yasinS)](https://github.com/yasinS "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") - [yingzong (@yingzong)](https://github.com/yingzong "1 total commits to the home-assistant organization, 1 commit to warrant") - [Zen Tormey (@xehn)](https://github.com/xehn "4 total commits to the home-assistant organization, 4 commits to home-assistant.github.io") @@ -894,4 +894,4 @@ This page contains a list of people who have contributed in one way or another t This page is irregularly updated using the [`credits_generator` tool](https://github.com/home-assistant/home-assistant.github.io/tree/next/credits_generator). If you think that you are missing, please let us know. -This page was last updated Saturday, March 31st 2018, 9:06:17 am UTC. +This page was last updated Saturday, March 31st 2018, 9:09:02 am UTC. From 1987571074bf544ca0ee47388fdbc23068aad6fb Mon Sep 17 00:00:00 2001 From: Beat <508289+bdurrer@users.noreply.github.com> Date: Sat, 31 Mar 2018 13:07:31 +0200 Subject: [PATCH 117/371] Add FreeDNS component (#5046) * Add FreeDNS component * Move the instructions up --- source/_components/freedns.markdown | 49 +++++++++++++++++++ .../development_guidelines.markdown | 2 +- 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 source/_components/freedns.markdown diff --git a/source/_components/freedns.markdown b/source/_components/freedns.markdown new file mode 100644 index 0000000000..960d1411d9 --- /dev/null +++ b/source/_components/freedns.markdown @@ -0,0 +1,49 @@ +--- +layout: page +title: "freedns.afraid.org" +description: "Keep your DNS record up to date with FreeDNS." +date: 2018-03-27 21:30 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Utility +ha_release: 0.67 +--- + +With the `freedns` component you can keep your [FreeDNS](https://freedns.afraid.org) record up to date. + +## {% linkable_title Configuration %} + +You need to determine your update URL or your access token. + +1. Head over to the [FreeDNS](https://freedns.afraid.org) website and login to your account. +2. Select the menu "Dynamic DNS" +3. You should now see your update candiates in a table at the bottom of the page. +4. Copy the link target of the "Direct URL". +5. The access token is the part at the end of the link: `https://freedns.afraid.org/dynamic/update.php?YOUR_UPDATE_TOKEN` +6. Either put the token as `access_token` _or_ the whole URL into the `url` attribute. + +To use the component in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +freedns: + access_token: YOUR_TOKEN +``` + +{% configuration %} + access_token: + description: Your access token. This is exclusive to `url`. + required: false + type: string + url: + description: The full update URL. This is exclusive to `access_token`. + required: false + type: string + update_interval: + description: How often to call the update service. + required: false + type: time period + default: 10 minutes +{% endconfiguration %} diff --git a/source/developers/development_guidelines.markdown b/source/developers/development_guidelines.markdown index edfabb9b26..7e4088249c 100644 --- a/source/developers/development_guidelines.markdown +++ b/source/developers/development_guidelines.markdown @@ -78,4 +78,4 @@ _LOGGER.error("No route to device: %s", self._resource) ``` Don't print out wrong API keys, tokens, usernames, or passwords. - +Also note that `_LOGGER.info` is reserved for the core, use `_LOGGER.debug` in anything else. From 17bae0c2718b712869574ad79d31ac90bae2996b Mon Sep 17 00:00:00 2001 From: Albert Lee Date: Sat, 31 Mar 2018 06:09:15 -0500 Subject: [PATCH 118/371] Update README.md for credits_generator (#5065) --- credits_generator/README.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/credits_generator/README.md b/credits_generator/README.md index ee89f67817..986f0b4785 100644 --- a/credits_generator/README.md +++ b/credits_generator/README.md @@ -1,11 +1,12 @@ credits_generator ================= -This tool can be used to update the [Home Assistant's Credits page](https://home-assistant.io/developers/credits/). +This tool can be used to update the [Credits page for Home Assistant](https://home-assistant.io/developers/credits/). Setup ----- +Fetch the dependencies with `npm`. ```bash $ cd credits_generator $ npm install @@ -13,8 +14,11 @@ $ npm install Usage ----- +Go to https://github.com/settings/tokens/new and generate a new GitHub personal access token. +Give the token any name and select the `public_repo` and `read:user` scopes. -Set your personal GitHub access token as environmental variable. + +Set the environment variable `GITHUB_TOKEN` to the new token. ```bash $ export GITHUB_TOKEN= @@ -23,7 +27,6 @@ $ export GITHUB_TOKEN= Run the script. ```bash -$ cd credits_generator $ node update_credits.js ``` From 308fe9eea19bea8a2e49eca9963c94ea88ed1f1c Mon Sep 17 00:00:00 2001 From: Jonas Pedersen Date: Sat, 31 Mar 2018 13:10:00 +0200 Subject: [PATCH 119/371] Minor syntax correction. (#5066) --- source/_docs/ecosystem/appdaemon/api.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/ecosystem/appdaemon/api.markdown b/source/_docs/ecosystem/appdaemon/api.markdown index 2f8e38c162..923505b262 100755 --- a/source/_docs/ecosystem/appdaemon/api.markdown +++ b/source/_docs/ecosystem/appdaemon/api.markdown @@ -1422,7 +1422,7 @@ Name of the event to subscribe to. Can be a standard Home Assistant event such a One or more keyword value pairs representing App specific parameters to supply to the callback. If the keywords match values within the event data, they will act as filters, meaning that if they don't match the values, the callback will not fire. -As an example of this, a Minimote controller when activated will generate an event called `zwave.scene_activated`, along with 2 pieces of data that are specific to the event - `entity_id` and `scene`. If you include keyword values for either of those, the values supplied to the `listen_event()1 call must match the values in the event or it will not fire. If the keywords do not match any of the data in the event they are simply ignored. +As an example of this, a Minimote controller when activated will generate an event called `zwave.scene_activated`, along with 2 pieces of data that are specific to the event - `entity_id` and `scene`. If you include keyword values for either of those, the values supplied to the `listen_event()` call must match the values in the event or it will not fire. If the keywords do not match any of the data in the event they are simply ignored. Filtering will work with any event type, but it will be necessary to figure out the data associated with the event to understand what values can be filtered on. This can be achieved by examining Home Assistant's logfiles when the event fires. From 69f0361c999591f21f84fa4af189d64d75cebae4 Mon Sep 17 00:00:00 2001 From: Rene Nulsch <33263735+ReneNulschDE@users.noreply.github.com> Date: Sat, 31 Mar 2018 15:23:13 +0200 Subject: [PATCH 120/371] Add removal note (#5053) --- source/_components/mercedesme.markdown | 26 +------------------------- 1 file changed, 1 insertion(+), 25 deletions(-) diff --git a/source/_components/mercedesme.markdown b/source/_components/mercedesme.markdown index 82f8679f45..db5774c518 100644 --- a/source/_components/mercedesme.markdown +++ b/source/_components/mercedesme.markdown @@ -23,29 +23,5 @@ This component provides the following platforms: - Device tracker: To track location of your car.

- The component can integrate cars from European and African markets only. -

- -To use Mercedes me in your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -mercedesme: - username: YOUR_E_MAIL_ADDRESS - password: YOUR_PASSWORD -``` - -{% configuration %} -username: - description: The email address associated with your Mercedes me account. - required: true - type: string -password: - description: The password for your given Mercedes me account. - required: true - type: string -{% endconfiguration %} - -

-The requirement `lxml` has to be [installed](http://lxml.de/installation.html) manually `pip install lxml` on some devices. + The component was removed. The vendor disabled the API endpoint and a new API is not available currently.

From a835ff4172f6d365e1f9c10009f4a4ff2099d737 Mon Sep 17 00:00:00 2001 From: brubaked <37672083+brubaked@users.noreply.github.com> Date: Sat, 31 Mar 2018 13:48:56 -0500 Subject: [PATCH 121/371] Added a link to the text 'this site' (#5069) This text: SQLite databases do not support native dates. That's why all the dates are saved in seconds since the UNIX epoch. Convert them manually using this site or in Python: should have a link where it says "this text" It now reads: SQLite databases do not support native dates. That's why all the dates are saved in seconds since the UNIX epoch. Convert them manually using [this site](https://www.epochconverter.com/) or in Python: --- source/_components/history.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/history.markdown b/source/_components/history.markdown index 459ac4b2a8..206678c510 100644 --- a/source/_components/history.markdown +++ b/source/_components/history.markdown @@ -120,7 +120,7 @@ When the `history` component queries the states table it only selects states whe #### {% linkable_title On dates %} -SQLite databases do not support native dates. That's why all the dates are saved in seconds since the UNIX epoch. Convert them manually using this site or in Python: +SQLite databases do not support native dates. That's why all the dates are saved in seconds since the UNIX epoch. Convert them manually using [this site](https://www.epochconverter.com/) or in Python: ```python from datetime import datetime From cf6818f0d77dd7282a8eca09d3d0ff95326d0bb7 Mon Sep 17 00:00:00 2001 From: Niklas Wagner Date: Sat, 31 Mar 2018 20:49:38 +0200 Subject: [PATCH 122/371] Update Link to w3.org (#5070) --- source/_components/light.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/light.markdown b/source/_components/light.markdown index a7db18e98e..5eb3083f2d 100644 --- a/source/_components/light.markdown +++ b/source/_components/light.markdown @@ -32,7 +32,7 @@ Most lights do not support all attributes. You can check the platform documentat | `white_value` | yes | Integer between 0 and 255 for how bright a dedicated white LED should be. | `color_temp` | yes | An integer in mireds representing the color temperature you want the light to be. | `kelvin` | yes | Alternatively, you can specify the color temperature in Kelvin. -| `color_name` | yes | A human-readable string of a color name, such as `blue` or `goldenrod`. All [CSS3 color names](https://www.w3.org/TR/2010/PR-css3-color-20101028/#svg-color) are supported. +| `color_name` | yes | A human-readable string of a color name, such as `blue` or `goldenrod`. All [CSS3 color names](https://www.w3.org/TR/css-color-3/#svg-color) are supported. | `brightness` | yes | Integer between 0 and 255 for how bright the color should be. | `brightness_pct`| yes | Alternatively, you can specify brightness in percent (a number between 0 and 100). | `flash` | yes | Tell light to flash, can be either value `short` or `long`. From e0540d27dc45a2bff7b64238d32353a0d51c42cc Mon Sep 17 00:00:00 2001 From: Myrddyn Date: Sat, 31 Mar 2018 17:01:15 -0400 Subject: [PATCH 123/371] Added "Waze travel time" sensor documentation (#4498) * Added Waze Travel Time documentation * Added Waze Travel Time documentation * Added Waze Travel Time documentation Fixed commit remarks from frenck * * Added Waze Travel Time documentation Fixed commit remarks from frenck * :pencil2: Tweaks * Multiple fixes * Update --- .../sensor.waze_travel_time.markdown | 51 ++++++++++++++++++ source/images/supported_brands/waze.png | Bin 0 -> 21843 bytes 2 files changed, 51 insertions(+) create mode 100644 source/_components/sensor.waze_travel_time.markdown create mode 100755 source/images/supported_brands/waze.png diff --git a/source/_components/sensor.waze_travel_time.markdown b/source/_components/sensor.waze_travel_time.markdown new file mode 100644 index 0000000000..2440930b9f --- /dev/null +++ b/source/_components/sensor.waze_travel_time.markdown @@ -0,0 +1,51 @@ +--- +layout: page +title: "Waze Travel Time" +description: "Instructions on how to add Waze travel time to Home Assistant." +date: 2018-01-23 00:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: waze.png +ha_category: Transport +ha_iot_class: "Cloud Polling" +ha_release: 0.67 +--- + +The `waze_travel_time` sensor provides travel time from the [Waze](https://www.waze.com/). + +Unit system is set to metric system. + +## {% linkable_title Configuration %} + +To use this sensor in your installation, add the following `abode` section to your `configuration.yaml` file: + +```yaml +# Example entry for configuration.yaml +sensor: + - platform: waze_travel_time + origin: Montréal, QC + destination: Québec, QC + region: 'US' +``` + +{% configuration %} +origin: + description: Enter the starting address or the GPS coordinates of the location (GPS coordinates has to be separated by a comma). + required: true + type: string +destination: + description: Enter the destination address or the GPS coordinates of the location (GPS coordinates has to be separated by a comma). + required: true + type: string +region: + description: Choose one of the available regions from 'EU', 'US', 'NA' (equivalent to 'US') or 'IL'. + required: true + type: string +name: + description: A name to display on the sensor. + required: false + default: "Waze Travel Time" + type: string +{% endconfiguration %} diff --git a/source/images/supported_brands/waze.png b/source/images/supported_brands/waze.png new file mode 100755 index 0000000000000000000000000000000000000000..927614e0c880fb95f819095acb379d531e1e7879 GIT binary patch literal 21843 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 Geg8jp{X)?I literal 0 HcmV?d00001 From 69635dc1c87b782b9dc58f3436aedbf568a00dd6 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 31 Mar 2018 23:14:26 +0200 Subject: [PATCH 124/371] Update zestimate docs --- source/_components/sensor.zestimate.markdown | 13 ++++++++----- source/images/supported_brands/zillow.png | Bin 0 -> 9212 bytes 2 files changed, 8 insertions(+), 5 deletions(-) create mode 100644 source/images/supported_brands/zillow.png diff --git a/source/_components/sensor.zestimate.markdown b/source/_components/sensor.zestimate.markdown index c791cd7b73..ca9547e404 100644 --- a/source/_components/sensor.zestimate.markdown +++ b/source/_components/sensor.zestimate.markdown @@ -8,25 +8,28 @@ comments: false sharing: true footer: true ha_category: Sensor +logo: zillow.png ha_release: 0.65 ha_iot_class: "Cloud Polling" --- The `zestimate` sensor allows one to track the Zestimate value of properties using the [Zillow API](https://www.zillow.com/howto/api/APIOverview.htm). +## {% linkable_title Configuration %} + You will need to sign up for the Zillow API at the following link [Zillow API](https://www.zillow.com/howto/api/APIOverview.htm). You will also need the Zillow property ID for each property you'd like to track. This information is available from the URL of a property you are interested in. -For example, the White House zpid is 84074482 and can be found in it's Zillow URL: https://www.zillow.com/homedetails/1600-Pennsylvania-Ave-NW-Washington-DC-20006/84074482_zpid/ +For example, the White House zpid is 84074482 and can be found in it's Zillow URL: [https://www.zillow.com/homedetails/1600-Pennsylvania-Ave-NW-Washington-DC-20006/84074482_zpid/](https://www.zillow.com/homedetails/1600-Pennsylvania-Ave-NW-Washington-DC-20006/84074482_zpid/) To enable this sensor, add the following lines to your `configuration.yaml`. ```yaml sensor: - platform: zestimate - api_key: API_KEY + api_key: YOUR_API_KEY zpid: - - - - + - YOUR_ZPID_1 + - YOUR_ZPID_2 ``` {% configuration %} @@ -40,7 +43,7 @@ zpid: type: list {% endconfiguration %} -### Additional Attributes +### {% linkable_title Additional Attributes %} The following additional attributes are also available via the sensor. diff --git a/source/images/supported_brands/zillow.png b/source/images/supported_brands/zillow.png new file mode 100644 index 0000000000000000000000000000000000000000..49a3147b78a34bc431160eee6a4a640bb23ad917 GIT binary patch literal 9212 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 literal 0 HcmV?d00001 From ce94c3bc6d8f4b554c004c5fb57e3f90f299d687 Mon Sep 17 00:00:00 2001 From: Andrew Date: Sat, 31 Mar 2018 23:15:32 +0200 Subject: [PATCH 125/371] Updated Amcrest component documentation to include support for switches (#4862) * Updated Amcrest component documentation to include support for switches * :pencil2: Tweaks * Update release --- source/_components/amcrest.markdown | 6 ++++++ source/_components/switch.amcrest.markdown | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 source/_components/switch.amcrest.markdown diff --git a/source/_components/amcrest.markdown b/source/_components/amcrest.markdown index fc62783afa..74c76e70dd 100644 --- a/source/_components/amcrest.markdown +++ b/source/_components/amcrest.markdown @@ -28,6 +28,9 @@ amcrest: sensors: - motion_detector - sdcard + switches: + - motion_detection + - motion_recording - host: IP_ADDRESS_CAMERA_2 username: YOUR_USERNAME @@ -54,6 +57,9 @@ Configuration variables: - **motion_detector**: Return True/False when a motion is detected - **sdcard**: Return the SD card usage by reporting the total and used space - **ptz_preset**: Return the number of PTZ preset positions configured for the given camera +- **switches** array (*Optional*): Switches to display in the frontend. By default, *none* of the switches are shown. The following switches can be monitored. + - **motion_detection**: Enable/disable motion detection setting + - **motion_recording**: Enable/disable recording on motion detection setting **Note:** Amcrest cameras with newer firmware no longer have the ability to stream `high` definition video with MJPEG encoding. You may need to use `low` resolution stream or the `snapshot` stream source instead. If the quality seems too poor, lower the `Frame Rate (FPS)` and max out the `Bit Rate` settings in your camera's configuration manager. If you defined the *stream_source* to **mjpeg**, make sure your camera supports *Basic* HTTP authentication. Newer Amcrest firmware may not work, then **rtsp** is recommended instead. diff --git a/source/_components/switch.amcrest.markdown b/source/_components/switch.amcrest.markdown new file mode 100644 index 0000000000..d9ed4564b2 --- /dev/null +++ b/source/_components/switch.amcrest.markdown @@ -0,0 +1,18 @@ +--- +layout: page +title: "Amcrest IP Camera Settings" +description: "Instructions on how to integrate settings for Amcrest IP Camera as switches within Home Assistant." +date: 2018-03-08 00:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: amcrest.png +ha_category: Switch +ha_release: 0.67 +ha_iot_class: "Local Polling" +--- + +The `amcrest` switch platform lets you control settings of [Amcrest IP Camera](https://home-assistant.io/components/camera.amcrest/) through Home Assistant. + +Switches will be configured automatically. Please refer to the [component](/components/amcrest/) configuration on how to setup. From 3f1357125198e4815951303a07636810bdc4e551 Mon Sep 17 00:00:00 2001 From: Niklas Wagner Date: Sat, 31 Mar 2018 23:19:30 +0200 Subject: [PATCH 126/371] Properly quote things so ON/OFF don't become True/False (#5072) --- source/_components/light.mqtt.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/light.mqtt.markdown b/source/_components/light.mqtt.markdown index 0034abc209..ed1536ecef 100644 --- a/source/_components/light.mqtt.markdown +++ b/source/_components/light.mqtt.markdown @@ -95,12 +95,12 @@ payload_on: description: The payload that represents enabled state. required: false type: string - default: ON + default: "ON" payload_off: description: The payload that represents disabled state. required: false type: string - default: OFF + default: "OFF" qos: description: The maximum QoS level of the state topic. required: false From 9caa6eb53f9ca646e0545bfe9d575b5e2de50535 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 31 Mar 2018 23:21:15 +0200 Subject: [PATCH 127/371] Add mastodon docs (#5010) --- source/_components/notify.mastodon.markdown | 52 ++++++++++++++++++++ source/images/supported_brands/mastodon.png | Bin 0 -> 7492 bytes 2 files changed, 52 insertions(+) create mode 100644 source/_components/notify.mastodon.markdown create mode 100644 source/images/supported_brands/mastodon.png diff --git a/source/_components/notify.mastodon.markdown b/source/_components/notify.mastodon.markdown new file mode 100644 index 0000000000..2e8327f4c2 --- /dev/null +++ b/source/_components/notify.mastodon.markdown @@ -0,0 +1,52 @@ +--- +layout: page +title: "Mastodon" +description: "Instructions on how to add Instapush notifications to Home Assistant." +date: 2018-03-25 18:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: mastodon.png +ha_category: Notifications +ha_release: 0.67 +--- + + +The `mastodon` platform uses [MAstodon](https://joinmastodon.org/) to delivery notifications from Home Assistant. + +Go to **Preferences** in the Mastodon web interface, then to **Development** and create a new application. + +To add Mastodon to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +notify: + - name: NOTIFIER_NAME + platform: mastodon + access_token: !secret mastodon_access_token + client_id: !secret mastodon_client_id + client_secret: !secret mastodon_client_secret +``` + +{% configuration %} +access_token: + description: Your Mastodon access token. + required: true + type: string +client_id: + description: Your Mastodon client ID + required: true + type: string +client_secret: + description: Your Mastodon client secret. + required: true + type: string +base_url: + description: URL of the Mastodon instance to use. + required: false + type: string + default: https://mastodon.social +{% endconfiguration %} + +To use notifications, please see the [getting started with automation page](/getting-started/automation/). diff --git a/source/images/supported_brands/mastodon.png b/source/images/supported_brands/mastodon.png new file mode 100644 index 0000000000000000000000000000000000000000..7a156e5b817ac0cf4008accf5d232a73405bbc47 GIT binary patch literal 7492 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 Date: Sat, 31 Mar 2018 23:23:26 +0200 Subject: [PATCH 128/371] Added request_rssi configuration variable to docs (#4684) * Added request_rssi configuration variable to docs * Used configuration tags * Removed extra configuration variable header --- .../_components/device_tracker.bluetooth_tracker.markdown | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/_components/device_tracker.bluetooth_tracker.markdown b/source/_components/device_tracker.bluetooth_tracker.markdown index 0a2a2d0632..45bd09eae3 100644 --- a/source/_components/device_tracker.bluetooth_tracker.markdown +++ b/source/_components/device_tracker.bluetooth_tracker.markdown @@ -27,6 +27,14 @@ device_tracker: - platform: bluetooth_tracker ``` +{% configuration %} +request_rssi: + description: Performs a request for the "Received signal strength indication" (RSSI) of each tracked device + required: false + type: boolean + default: False +{% endconfiguration %} + In some cases it can be that your device is not discovered. In that case let your phone scan for Bluetooth devices while you restart Home Assistant. Just hit `Scan` on your phone all the time until Home Assistant is fully restarted and the device should appear in `known_devices.yaml`. For additional configuration variables check the [Device tracker page](/components/device_tracker/). From 76a5c07b04e7e0dfb578e250a73e770c508ca764 Mon Sep 17 00:00:00 2001 From: Niklas Wagner Date: Sun, 1 Apr 2018 00:44:51 +0200 Subject: [PATCH 129/371] Match current code --- source/_components/light.mqtt.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/light.mqtt.markdown b/source/_components/light.mqtt.markdown index ed1536ecef..42ed49b457 100644 --- a/source/_components/light.mqtt.markdown +++ b/source/_components/light.mqtt.markdown @@ -55,7 +55,7 @@ brightness_value_template: required: false type: string color_temp_command_topic: - description: The MQTT topic to publish commands to change the light’s color temperature state. The color temperature command slider has a range of 157 to 500 mireds (micro reciprocal degrees). + description: The MQTT topic to publish commands to change the light’s color temperature state. The color temperature command slider has a range of 154 to 500 mireds (micro reciprocal degrees). required: false type: string color_temp_state_topic: From f79c3ed719c60fa0e21c7097bf0bd85d5b978835 Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Sun, 1 Apr 2018 19:30:21 +1000 Subject: [PATCH 130/371] Confusing as it uses a non-default TTS platform --- source/_cookbook/sonos_say.markdown | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/source/_cookbook/sonos_say.markdown b/source/_cookbook/sonos_say.markdown index cfc7a76b3f..e17db1e4a7 100644 --- a/source/_cookbook/sonos_say.markdown +++ b/source/_cookbook/sonos_say.markdown @@ -54,3 +54,14 @@ automation: message: 'Your husband coming home!' delay: '00:00:05' ``` +Note that this example uses the `voicerss` text-to-speech platform. There are many platforms that can be used. The one installed by default with Home Assistant is Google TTS. This appears in your `configuration.yaml` file as: + +``` + tts: + - platform: google +``` + +If you want to use this TTS engine, change the line above to +``` +- service: tts.google_say +``` From 7a22ffe8a50c728bd80f3b20b3aca0d5f0d6a59c Mon Sep 17 00:00:00 2001 From: Chris Jones Date: Sun, 1 Apr 2018 19:36:24 +1000 Subject: [PATCH 131/371] Update sonos_say.markdown --- source/_cookbook/sonos_say.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_cookbook/sonos_say.markdown b/source/_cookbook/sonos_say.markdown index e17db1e4a7..fd4b04b402 100644 --- a/source/_cookbook/sonos_say.markdown +++ b/source/_cookbook/sonos_say.markdown @@ -61,7 +61,7 @@ Note that this example uses the `voicerss` text-to-speech platform. There are ma - platform: google ``` -If you want to use this TTS engine, change the line above to +If you want to use this TTS engine, change the line in the example provided to: ``` - service: tts.google_say ``` From f2a22d38a042495f315d5fba22401a75a5fa6a39 Mon Sep 17 00:00:00 2001 From: sveip Date: Sun, 1 Apr 2018 18:41:16 +0200 Subject: [PATCH 132/371] Update debugging.markdown Hassio supervisor container name corrected. --- source/developers/hassio/debugging.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/hassio/debugging.markdown b/source/developers/hassio/debugging.markdown index d9030069a8..8dde1fbaa8 100644 --- a/source/developers/hassio/debugging.markdown +++ b/source/developers/hassio/debugging.markdown @@ -46,7 +46,7 @@ ssh root@hassio.local -p 22222 journalctl -f -u resin-supervisor.service # Hass.io supervisor logs -docker logs hassio_supervisor +docker logs resin_supervisor # Home Assistant logs docker logs homeassistant From 882aa7b4350783a0652b9d89a3efd4b7d453506c Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 1 Apr 2018 11:47:24 -0700 Subject: [PATCH 133/371] Release 0.66.1 --- _config.yml | 6 +++--- source/_posts/2018-03-30-release-66.markdown | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/_config.yml b/_config.yml index a4af2a187d..a7b16a6bf6 100644 --- a/_config.yml +++ b/_config.yml @@ -140,13 +140,13 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 66 -current_patch_version: 0 -date_released: 2018-03-30 +current_patch_version: 1 +date_released: 2018-04-01 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. # Major release: -patch_version_notes: "#" +patch_version_notes: "#release-0661---april-1" # Minor release (Example #release-0431---april-25): # Date we moved to Discourse for comments diff --git a/source/_posts/2018-03-30-release-66.markdown b/source/_posts/2018-03-30-release-66.markdown index 787e60b074..3cb379af26 100644 --- a/source/_posts/2018-03-30-release-66.markdown +++ b/source/_posts/2018-03-30-release-66.markdown @@ -36,6 +36,13 @@ A quick note if you are using Philips Hue and a Hue custom component: it will no - Add trafikverket_weatherstation sensor platform ([@Qxlkdr] - [#12115]) ([sensor.trafikverket_weatherstation docs]) (new-platform) - Security fix & lock for HomeMatic ([@PH89] - [#11980]) ([homematic docs]) ([lock docs]) ([lock.homematic docs]) (breaking change) (new-platform) +## {% linkable_title Release 0.66.1 - April 1 %} + +- Update frontend to fix climate and chart issues ([@NovapaX] & [@c727]) +- Fix mqtt_json color commands ([@armills] - [#13617]) ([light.mqtt_json docs]) +- Add pincode fallback ([@cdce8p] - [#13587]) ([homekit docs]) +- Fix mysensors sensor type lookup ([@MartinHjelmare] - [#13574]) ([sensor.mysensors docs]) + ## {% linkable_title If you need help... %} ...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. @@ -553,3 +560,12 @@ Experiencing issues introduced by this release? Please report them in our [issue [zeroconf docs]: /components/zeroconf/ [zha docs]: /components/zha/ [zwave docs]: /components/zwave/ +[#13574]: https://github.com/home-assistant/home-assistant/pull/13574 +[#13587]: https://github.com/home-assistant/home-assistant/pull/13587 +[#13617]: https://github.com/home-assistant/home-assistant/pull/13617 +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@armills]: https://github.com/armills +[@cdce8p]: https://github.com/cdce8p +[homekit docs]: https://www.home-assistant.io/components/homekit/ +[light.mqtt_json docs]: https://www.home-assistant.io/components/light.mqtt_json/ +[sensor.mysensors docs]: https://www.home-assistant.io/components/sensor.mysensors/ From bc9e59bb967f4d9ec3365451df5b15ce330b3b18 Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Sun, 1 Apr 2018 21:19:45 +0200 Subject: [PATCH 134/371] Duplicate configuration line removed --- source/_components/sensor.xiaomi_miio.markdown | 1 - 1 file changed, 1 deletion(-) diff --git a/source/_components/sensor.xiaomi_miio.markdown b/source/_components/sensor.xiaomi_miio.markdown index 3e30131fff..65d1f3780f 100644 --- a/source/_components/sensor.xiaomi_miio.markdown +++ b/source/_components/sensor.xiaomi_miio.markdown @@ -29,7 +29,6 @@ Please follow the instructions on [Retrieving the Access Token](/components/vacu To add a Xiaomi Mi Air Quality Monitor to your installation, add the following to your `configuration.yaml` file: ```yaml -sensor: # Example configuration.yaml entry sensor: - platform: xiaomi_miio From b42f23d438fae301f7edac1523ff23679eadf28e Mon Sep 17 00:00:00 2001 From: Dale Higgs Date: Sun, 1 Apr 2018 16:37:06 -0500 Subject: [PATCH 135/371] Add quote explanation and examples --- .../documentation/standards.markdown | 58 +++++++++++++++++-- 1 file changed, 54 insertions(+), 4 deletions(-) diff --git a/source/developers/documentation/standards.markdown b/source/developers/documentation/standards.markdown index adcc3bd521..05b1223cc6 100644 --- a/source/developers/documentation/standards.markdown +++ b/source/developers/documentation/standards.markdown @@ -25,25 +25,25 @@ To ensure that the documentation for Home Assistant is consistent and easy to fo * Configuration variables must document the requirement status. * Configuration variables must document the default value, if any. * Configuration variables must document the accepted value types. - * Use `[string, int]` for configuration variables that accept multiple types. + * For configuration variables that accept multiple types, separate the types with a comma (i.e. `string, int`). * Use YAML sequence syntax in the sample code if it is supported. * All examples should be formatted to be included in `configuration.yaml` unless explicitly stated. * Use capital letters and `_` to indicate that the value needs to be replaced. E.g., `api_key: YOUR_API_KEY` or `api_key: REPLACE_ME`. - * If you know that the API key or value contains [control characters](https://en.wikipedia.org/wiki/YAML#Syntax), e.g., `#`, `[`, `?`, etc., wrap it in quotes and add a note. + * If you know that the API key or value contains [control characters](https://en.wikipedia.org/wiki/YAML#Syntax), e.g., `#`, `[`, `?`, etc., wrap it in quotes and add a note. * Component and platform names should be a link to their respective documentation pages. ## {% linkable_title Templates %} * All examples containing Jinja2 templates should be wrapped **outside** of the code markdown with the {% raw %}`{% raw %}`{% endraw %} tag. * Do not use `states.switch.source.state` in templates. Instead use `states()` and `is_state()`. -* Use double quotes (`"`) for: +* Use double quotes (`"`) for ([more information](#single-vs-double-quotation-marks)): * `friendly_name` * Single-line templates: * `value_template` * `level_template` * `icon_template` * Children of `data_template` -* Use single quotes (`'`) for: +* Use single quotes (`'`) for ([more information](#single-vs-double-quotation-marks): * Strings inside of templates: * States * Entity IDs @@ -69,3 +69,53 @@ redirect_from: /getting-started/android/ ``` Adding a redirect also applies if you move content around in the [documentation](/docs/). + +## {% linkable_title Single vs. Double Quotation Marks %} + +Use single quotes (`'`) for strings inside of a template. It is more obvious to escape a single quote when necessary (i.e. `name` is a possessive noun), because the single quotes that wrap the string are closer in position to the apostrophe inside the string. Use double quotes (`"`) outside of a template (unless it is a multi-line template, in which case outside quotes are not required). + +### {% linkable_title Examples %} + +#### {% linkable_title Double Quotes Outside, Single Quotes Inside (Valid) %} + +{% raw %} +```yaml +automation: + ... + action: + - service: notify.notify + data_template: + message: "{% if trigger.to_state.name == 'Dale\'s Bedroom' %}Someone's in your base, killing your noobs!{% else %}It's just another door.{% endif %}" +``` +{% endraw %} + +#### {% linkable_title Single Quotes Outside, Double Quotes Inside (Invalid) %} + +{% raw %} +```yaml +automation: + ... + action: + - service: notify.notify + data_template: + message: '{% if trigger.to_state.name == "Dale's Bedroom" %}Someone's in your base, killing your noobs!{% else %}It's just another door.{% endif %}' +``` +{% endraw %} + +#### {% linkable_title Multi-Line Template (Valid) %} + +{% raw %} +```yaml +automation: + ... + action: + - service: notify.notify + data_template: + message: >- + {% if trigger.to_state.name == 'Dale\'s Bedroom' %} + Someone's in your base, killing your noobs! + {% else %} + It's just another door. + {% endif %} +``` +{% endraw %} From d599de84c2e91d08ca28c249e2acde289c782636 Mon Sep 17 00:00:00 2001 From: JohnnyCAPSLOCK <23089193+JohnnyCAPSLOCK@users.noreply.github.com> Date: Sun, 1 Apr 2018 19:18:55 -0700 Subject: [PATCH 136/371] Update google_assistant.markdown Proposing changes to steps 8a and 8d. I looked back at previous versions and I don't think these steps were updated when the other steps it was originally referencing were moved/changed. --- source/_components/google_assistant.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index b30eee33f4..d1096fd88c 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -148,10 +148,10 @@ If you're not using Linux, you can use sites such as [this one](https://www.brow 6. Open the Google Assistant app and go into `Settings > Home Control` 7. Click the `+` sign, and near the bottom, you should have `[test] your app name`. Selecting that should lead you the screen where you can set rooms for your devices or nicknames for your devices. 8. If you want to allow other household users to control the devices: - a. Go to the developer console using the address from point 4. + a. Go to the settings for the project you created in point 1 in the developer console. b. Under the gear icon, click `Permissions` c. Click `Add`, type the new user's e-mail address and choose `Project -> Editor` role - d. Have the new user go to [developer console](https://console.actions.google.com/) and repeat steps starting from point + d. Have the new user go to [developer console](https://console.actions.google.com/) and repeat steps starting from point 4 9. If you want to use the `google_assistant.request_sync` service, to update devices without unlinking and relinking, in Home Assistant, then enable Homegraph API for your project: a. Go to the [cloud console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview) b. Select your project and click Enable Homegraph API From d707f1a2cd4aa89e3a6c483610c7be3d5cdbae7a Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 2 Apr 2018 10:48:06 +0200 Subject: [PATCH 137/371] Remove not needed raw's --- source/_components/sensor.speedtest.markdown | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/source/_components/sensor.speedtest.markdown b/source/_components/sensor.speedtest.markdown index f3fe80903d..fb95a0cdff 100644 --- a/source/_components/sensor.speedtest.markdown +++ b/source/_components/sensor.speedtest.markdown @@ -16,13 +16,14 @@ ha_iot_class: "Cloud Polling" The `speedtest` sensor component uses the [Speedtest.net](https://speedtest.net/) web service to measure network bandwidth performance. +## {% linkable_title Configuration %} + By default, it will run every hour. The user can change the update frequency in the configuration by defining the minute, hour, and day for a speed test to run. For the `server_id` check the list of [available servers](https://www.speedtest.net/speedtest-servers.php). To add a Speedtest.net sensor to your installation, add the following to your `configuration.yaml` file: Once per hour, on the hour (default): -{% raw %} ```yaml # Example configuration.yaml entry sensor: @@ -32,7 +33,6 @@ sensor: - download - upload ``` -{% endraw %} {% configuration %} monitored_conditions: @@ -79,7 +79,6 @@ This component uses [speedtest-cli](https://github.com/sivel/speedtest-cli) to g When Home Assistant first starts up, the values of the speed test will show as `Unknown`. You can use the service `sensor.update_speedtest` to run a manual speed test and populate the data or just wait for the next regularly scheduled test. You can turn on manual mode to disable the scheduled speed tests. - ## {% linkable_title Examples %} In this section, you find some real-life examples of how to use this sensor. @@ -88,7 +87,6 @@ In this section, you find some real-life examples of how to use this sensor. Every half hour of every day: -{% raw %} ```yaml # Example configuration.yaml entry sensor: @@ -101,13 +99,11 @@ sensor: - download - upload ``` -{% endraw %} ### {% linkable_title Run at a specific time %} Everyday at 12:30AM, 6:30AM, 12:30PM, 6:30PM: -{% raw %} ```yaml # Example configuration.yaml entry sensor: @@ -123,7 +119,6 @@ sensor: - download - upload ``` -{% endraw %} ### {% linkable_title Using as a trigger in an automation %} @@ -150,6 +145,7 @@ automation: ## {% linkable_title Notes %} - When running on Raspberry Pi, just note that the maximum speed is limited by its 100 Mbit/s LAN adapter. +- Running this platform can have negative effects on the system's performance as it requires a fair amount of memory. - Entries under `monitored_conditions` only control what entities are available in Home Assistant, it does not disable the condition from running. - If ran frequently, this component has the ability to use a considerable amount of data. Frequent updates should be avoided on bandwidth-capped connections. - While running, your network capacity is fully utilized. This may have a negative effect on other devices in use the network such as gaming consoles or streaming boxes. From d6b487434317b69c3cd58d3a2aef0ba140793f08 Mon Sep 17 00:00:00 2001 From: VdkaShaker <26205899+VdkaShaker@users.noreply.github.com> Date: Mon, 2 Apr 2018 04:59:54 -0700 Subject: [PATCH 138/371] Update configure filter section (#5071) Adding detail to Configure Filter section. --- source/_components/homekit.markdown | 32 ++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index 6a24a49a09..88a0691aec 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -150,7 +150,37 @@ automation: ## {% linkable_title Configure Filter %} -To limit which entities are being exposed to `HomeKit`, you can use the `filter` parameter. By default no entity will be excluded. Keep in mind though that only supported components can be added. +By default no entity will be excluded. To limit which entities are being exposed to `HomeKit`, you can use the `filter` parameter. Keep in mind only [supported components](#supported-components) can be added. + +{% raw %} +```yaml +# Example filter to include specified domains and exclude specified entities +homekit: + filter: + include_domains: + - alarm_control_panel + - light + exclude_entities: + - light.kitchen_light +``` +{% endraw %} + +Filters are applied as follows: + +1. No includes or excludes - pass all entities +2. Includes, no excludes - only include specified entities +3. Excludes, no includes - only exclude specified entities +4. Both includes and excludes: + * Include domain specified + - if domain is included, and entity not excluded, pass + - if domain is not included, and entity not included, fail + * Exclude domain specified + - if domain is excluded, and entity not included, fail + - if domain is not excluded, and entity not excluded, pass + - if both include and exclude domains specified, the exclude domains are ignored + * Neither include or exclude domain specified + - if entity is included, pass (as #2 above) + - if entity include and exclude, the entity exclude is ignored ## {% linkable_title Supported Components %} From 481fb147c7ae8f83a76646cd7cfc7fc3b622870d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Arnauts?= Date: Mon, 2 Apr 2018 16:36:28 +0200 Subject: [PATCH 139/371] New Component: Add docs for Google Maps Location Sharing (#4646) * Add docs for Google Maps Location Sharing * Typo * :pencil2: Small updates * :pencil2: Migrated to configuration tags and ups HA version --- .../device_tracker.google_maps.markdown | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 source/_components/device_tracker.google_maps.markdown diff --git a/source/_components/device_tracker.google_maps.markdown b/source/_components/device_tracker.google_maps.markdown new file mode 100644 index 0000000000..6f2175a604 --- /dev/null +++ b/source/_components/device_tracker.google_maps.markdown @@ -0,0 +1,46 @@ +--- +layout: page +title: "Google Maps Location Sharing" +description: "Instructions how to use Google Maps Location Sharing to track devices in Home Assistant." +date: 2017-02-12 10:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: google_maps.png +ha_release: 0.67 +ha_category: Presence Detection +ha_iot_class: "Cloud Polling" +--- + +The `google_maps` platform allows you to detect presence using the unofficial API of [Google Maps Location Sharing](https://myaccount.google.com/locationsharing). + +You first need to create an additional Google account and share your location with that account. This platform will use that account to fetch the location of your device(s). You have to setup sharing through the Google Maps app on your mobile phone. You can find more information [here](https://support.google.com/accounts?p=location_sharing). + +This platform will create a file named `google_maps_location_sharing.conf` where it caches your login session. + +

+Since this platform is using an official API with the help of [locationsharinglib](https://github.com/costastf/locationsharinglib), Google seems to block access to your data the first time you've logged in with this component. +This issue can be fixed by logging in with your new account and approving your login on the [Device Activity](https://myaccount.google.com/device-activity) page. +

+ +To integrate Google Maps Location Sharing in Home Assistant, add the following section to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +device_tracker: + platform: google_maps + username: example@gmail.com + password: password +``` + +{% configuration %} +username: + description: The email address for the Google account that has access to your shared location. + required: true + type: string +password: + description: The password for your given username. + required: true + type: string +{% endconfiguration %} From 7dbed031cba045313aff5756bce6db0b0fa3dc97 Mon Sep 17 00:00:00 2001 From: Robin Date: Mon, 2 Apr 2018 15:37:58 +0100 Subject: [PATCH 140/371] Adds docs for folder_watcher component (#4885) * Create folder_watcher.markdown * Adds posting file * Update folder_watcher.markdown * :pencil2: Markdownlint fixes * :pencil2: Escapes jinja code in example * :pencil2: Build fix part 2 * :ambulance: Fixes build * :arrow_up: Ups ha_release to 0.67 --- source/_components/folder_watcher.markdown | 77 ++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 source/_components/folder_watcher.markdown diff --git a/source/_components/folder_watcher.markdown b/source/_components/folder_watcher.markdown new file mode 100644 index 0000000000..2e842114f7 --- /dev/null +++ b/source/_components/folder_watcher.markdown @@ -0,0 +1,77 @@ +--- +layout: page +title: "folder watcher" +description: "Component for monitoring changes within the filesystem." +date: 2018-03-11 14:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_category: System Monitor +ha_iot_class: "Local Polling" +ha_release: 0.67 +--- + +This component adds [Watchdog](https://pythonhosted.org/watchdog/) file system monitoring, publishing events on the Home-Assistant bus on the creation/deletion/modification of files. + +To configure the `folder_watcher` component add to you `configuration.yaml` file: + +```yaml +{% raw %} +folder_watcher: + watchers: + - folder: /config +{% endraw %} +``` + +{% configuration %} +folder: + description: The folder path + required: true + type: string +patterns: + description: Pattern matching to apply + required: false + default: "*" + type: string +{% endconfiguration %} + +## Patterns + +Pattern matching using [fnmatch](https://docs.python.org/3.6/library/fnmatch.html) can be used to limit filesystem monitoring to only files which match the configured patterns. The following example shows the configuration required to only monitor filetypes `.yaml` and `.txt`. + +```yaml +{% raw %} +folder_watcher: + watchers: + - folder: /config + patterns: + - '*.yaml' + - '*.txt' +{% raw %} +``` + +## Automations + +Automations can be triggered on filesystem event data using a data_template. The following automation will send a notification with the name and folder of new files added to that folder: + +```yaml +{% raw %} +- action: + - data_template: + message: 'Created {{trigger.event.data.file}} in {{trigger.event.data.folder}}' + title: New image captured! + data: + file: "{{trigger.event.data.path}}" + service: notify.pushbullet + alias: New file alert + condition: [] + id: '1520092824697' + trigger: + - event_data: {"event_type":"created"} + event_type: folder_watcher + platform: event +{% endraw %} +``` + From 3aa3be14397a3b11de455db4c36151c711ca3b11 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 2 Apr 2018 17:22:12 +0200 Subject: [PATCH 141/371] Minor changes (#5084) --- source/_components/binary_sensor.workday.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/binary_sensor.workday.markdown b/source/_components/binary_sensor.workday.markdown index 0d4782bc12..edc34b5a37 100644 --- a/source/_components/binary_sensor.workday.markdown +++ b/source/_components/binary_sensor.workday.markdown @@ -15,6 +15,10 @@ ha_release: 0.41 The `workday` binary sensor indicates, whether the current day is a workday or not. It allows specifying, which days of the week counts as workdays and also uses the python module [holidays](https://pypi.python.org/pypi/holidays) to incorporate information about region-specific public holidays. +## {% linkable_title Configuration %} + +Check the [country list](https://github.com/dr-prodigy/python-holidays#available-countries) for available province. + To enable the `workday` sensor in your installation, add the following to your `configuration.yaml` file: ```yaml From c5743e462164dea887b4a99a3df219782009583c Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Mon, 2 Apr 2018 17:35:11 +0200 Subject: [PATCH 142/371] Added upgrade note (#5087) * Added upgrade note * Minor changes --- source/_components/homekit.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index 88a0691aec..079849af30 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -19,6 +19,10 @@ The `HomeKit` component allows you to forward entities from Home Assistant to Ap `$ sudo apt-get install libavahi-compat-libdnssd-dev`

+

+ If you are upgrading Home Assistant from `0.65.x` and have used the HomeKit component, some accessories may not respond or may behave unusually. To fix these problems, you will need to remove the Home Assistant Bridge from your Home, stop Home Assistant and delete the `.homekit.state` file in your configuration folder and follow the Homekit [setup](#setup) steps again. +

+ {% configuration %} homekit: description: HomeKit configuration. From e2e349c30d10e317d400e37fad4fc1de6a1847a6 Mon Sep 17 00:00:00 2001 From: Johann Kellerman Date: Mon, 2 Apr 2018 17:35:46 +0200 Subject: [PATCH 143/371] Qwikswitch refactor & sensors (#5045) * Qwikswitch refactor & sensors PR: https://github.com/home-assistant/home-assistant/pull/13509 * :pencil2: Some minor tweaks --- source/_components/qwikswitch.markdown | 38 ++++++++++++++++++-------- 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/source/_components/qwikswitch.markdown b/source/_components/qwikswitch.markdown index cb4d6f3695..516658404a 100644 --- a/source/_components/qwikswitch.markdown +++ b/source/_components/qwikswitch.markdown @@ -13,12 +13,9 @@ featured: false ha_release: "0.20" --- +The `qwikswitch` component is the main component to integrate various [QwikSwitch](http://www.qwikswitch.co.za/) devices with Home Assistant. The integration requires the QSUSB Modem device and connects to the QS Mobile application. -The `qwikswitch` component is the main component to integrate various [QwikSwitch](http://www.qwikswitch.co.za/) devices with Home Assistant. - -Loading the `qwikswitch` component automatically adds all devices from the QS Mobile application. QS Mobile controls the QSUSB Modem device. - -Currently QwikSwitch relays and LED dimmers are supported (tested). QwikSwitch relay devices can be [switches](/components/switch.qwikswitch/) or [lights](/components/light.qwikswitch/) in Home-Assistant. If the device name in the QSUSB app ends with ` Switch` it will be created as a switch, otherwise as a light. +The `qwikswitch` component discovers all devices from QS Mobile. Currently, Relays and LED dimmers are discovered in Home Assistant. Relay devices are [lights](/components/light.qwikswitch/) by default, and can be configured as [switches](/components/switch.qwikswitch/). Example configuration: @@ -31,28 +28,45 @@ qwikswitch: Configuration variables: - **url** (*Required*): The URL including the port of your QwikSwitch hub. -- **dimmer_adjust** (*Optional*): A decimal value to adjust the brightness of the dimmer exponentially. Increasing this value allows dimmers that reaches full brightness with low values in QS Mobile to appear more linear in Home Assistant. Recommended values between 1 and 2 and the default is 1. -- **button_events** (*Optional*): A comma separated list of button types that will generate events. Details below. +- **dimmer_adjust** (*Optional*): A decimal value to adjust the brightness of the dimmer exponentially. Increasing this value allows dimmers that reach full brightness with low values in QS Mobile to appear more linear in Home Assistant. Recommended values between 1 and 2 and the default is 1. +- **button_events** (*Optional*): A comma-separated list of button types that will generate events. See [QwikSwitch Events] for detail. +- **switches** (*Optional*): A list of device QS_id's that should be switches, and not lights (i.e. `['@0dev01', '@0dev02']`) +- **sensors** (*Optional*): A dictionary of sensors. In the format of {entity_id: QS_id}. (i.e. `{door_sensor: '@0dev03'}`) -### {% linkable_title QwikSwitch Buttons %} +### {% linkable_title QwikSwitch Events %} -QwikSwitch devices (i.e. transmitter buttons) will fire events on the Home Assistant bus. These events can then be used as triggers for any `automation` action, as follows: +QwikSwitch devices (i.e., transmitter buttons) will fire events on the Home Assistant bus. These events can then be used as triggers for any `automation` action, as follows: ```yaml automation: - - alias: Action - Respond to button press + - alias: Action - Respond to A button press trigger: platform: event event_type: qwikswitch.button.@12df34 ``` -`event_type` names should be in the format **qwikswitch.button.@__ID__**. where **@__ID__** will be captured in the Home Assistant log when pressing the button. Alternatively, you can also get the device ID from the QS Mobile application or using the listen API call by browsing to `http://127.0.0.1:2020/&listen` and then pressing the button. +`event_type` names should be in the format **qwikswitch.button.@_QS_id_**. where **@_QS_id_** will be captured in the Home Assistant log when pressing the button. Alternatively, you can also get the device ID from the QS Mobile application or by using the listen API call by browsing to `http://127.0.0.1:2020/&listen` and then pressing the button. + +The full packet from the QSUSB API will be passed as `data` By default events will be fired if the value in the command (cmd) field of the listen packet equals: - `TOGGLE` - Normal QwikSwitch Transmitter button - `SCENE EXE` - QwikSwitch Scene Transmitter buttons - `LEVEL` - QwikSwitch OFF Transmitter buttons -The list of recognized commands can be extended for Keyfobs, door sensors, and PIR transmitters with the **button_events** configuration option. **button_events** contain a comma separated list of commands that will fire Home Assistant events. By default it is: TOGGLE,SCENE EXE,LEVEL. +The list of recognized commands can be extended for Keyfobs, door sensors, and PIR transmitters with the **button_events** configuration option. **button_events** can be a list or comma separated list of additional commands that will fire Home Assistant events. By default, it is: TOGGLE,SCENE EXE,LEVEL. On some QS Mobile servers button events are only generated for switches added to the QS Mobile application, so it might be best to test button presses through the `/&listen` API + +### {% linkable_title Qwikswitch Sensors %} + +Some Qwikswith devices might support more than one channel per device (i.e. ipmod). The channel can be specified by appending a number to the QS_id. Example sensors configuration: + +```yaml +qwikswitch: + ... + sensors: + door_sensor: '@0dev01' + door2_sensor: '@0dev02.1' + door3_sensor: '@0dev02.2' +``` From f6954ccb79197991630d87de2cb30c3b89e7291b Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 2 Apr 2018 16:44:36 +0100 Subject: [PATCH 144/371] Added note about broadcast group (#5080) Thanks to turbokongen commenting in https://github.com/home-assistant/home-assistant/issues/11823 Added a note about how to remove the broadcast group association --- source/_docs/z-wave/control-panel.markdown | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/source/_docs/z-wave/control-panel.markdown b/source/_docs/z-wave/control-panel.markdown index cb90f5f52e..601137c2cb 100644 --- a/source/_docs/z-wave/control-panel.markdown +++ b/source/_docs/z-wave/control-panel.markdown @@ -108,6 +108,16 @@ You can use this to enable one device to directly control another. This is prima There may be multiple groups, that are used for different purposes. The manual of your device will explain what each group is for. +#### {% linkable_title Broadcast group %} + +Some Z-Wave devices may associate themselves with the broadcast group (group 255). You'll be able to tell if this has happened if opening a door (or triggering a motion sensor) causes lights to come on, and closing the door (or the motion sensor going clear) causes lights to run off. There's no way to clear this from the control panel, but you can use the `zwave.change_association` service: + +```json +{"association": "remove", "node_id": 3, "group": 1, "target_node_id": 255} +``` + +That would remove the broadcast group from association group 1 of the device with node_id 3. + ### {% linkable_title Node config options %} You can set the *wakeup* interval (in seconds) of the device, this is shown for all devices that can be battery powered, even if they are currently mains powered. The wakeup interval only applies when those devices are battery powered. From c16b6e2ef5a7a2258990c2482dba17878e0c4ce8 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Mon, 2 Apr 2018 18:29:59 +0200 Subject: [PATCH 145/371] Update hue.markdown - Removed the "(Optional)" tag from the host-Parameter, because it is mandatory now - Added another configuration example to clarify how to specify multiple configuration variables; the examples in the "multiple bridges..." section do show this already, but this section might be skipped by the majority of users owning only a single bridge. --- source/_components/hue.markdown | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/source/_components/hue.markdown b/source/_components/hue.markdown index c0bda3fa14..f172c6b0ff 100644 --- a/source/_components/hue.markdown +++ b/source/_components/hue.markdown @@ -33,11 +33,20 @@ hue: Configuration variables: -- **host** (*Optional*): IP address of the device, eg. 192.168.1.10. Required if not using the `discovery` component to discover Hue bridges. +- **host**: IP address of the device, eg. 192.168.1.10. Required if not using the `discovery` component to discover Hue bridges. - **allow_unreachable** (*Optional*): (true/false) This will allow unreachable bulbs to report their state correctly. - **filename** (*Optional*): Make this unique if specifying multiple Hue hubs. - **allow_hue_groups** (*Optional*): (true/false) Enable this to stop Home Assistant from importing the groups defined on the Hue bridge. +```yaml +# Example configuration.yaml entry specifying optional parameters +hue: + bridges: + - host: DEVICE_IP_ADDRESS + allow_unreachable: true + allow_hue_groups: true +``` + ### {% linkable_title Migrating from older configuration %} In previous versions of the Hue component the configuration looked different: From 5869b00342653c30fb29b3a870c275f0608161bd Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Mon, 2 Apr 2018 19:45:36 +0200 Subject: [PATCH 146/371] Xiaomi Mi WiFi Repeater 2 integration as device tracker (#5077) --- .../device_tracker.xiaomi_miio.markdown | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 source/_components/device_tracker.xiaomi_miio.markdown diff --git a/source/_components/device_tracker.xiaomi_miio.markdown b/source/_components/device_tracker.xiaomi_miio.markdown new file mode 100644 index 0000000000..dad5feef5d --- /dev/null +++ b/source/_components/device_tracker.xiaomi_miio.markdown @@ -0,0 +1,38 @@ +--- +layout: page +title: "Xiaomi Mi WiFi Repeater 2" +description: "Instructions how to integrate your Xiaomi Mi WiFi Repeater 2 within Home Assistant." +date: 2018-04-01 21:06 +sidebar: true +comments: false +sharing: true +footer: true +logo: xiaomi.png +ha_category: Sensor +ha_version: 0.67 +ha_iot_class: "Local Polling" +--- + +The `xiaomi_miio` device tracker platform is observing your Xiaomi Mi WiFi Repeater 2 and reporting all associated WiFi clients. + +Please follow the instructions on [Retrieving the Access Token](/components/vacuum.xiaomi_miio/#retrieving-the-access-token) to get the API token. + +To add a Xiaomi Mi Air Quality Monitor to your installation, add the following to your `configuration.yaml` file: + +```yaml +device_tracker: + - platform: xiaomi_miio + host: 192.168.130.73 + token: YOUR_TOKEN +``` + +{% configuration %} +host: + description: The IP address of your miio device. + required: true + type: string +token: + description: The API token of your miio device. + required: true + type: string +{% endconfiguration %} From 59be0ec41b66ed6f97afa616bb75a3c3b442ea0c Mon Sep 17 00:00:00 2001 From: ChristianKuehnel Date: Mon, 2 Apr 2018 19:47:59 +0200 Subject: [PATCH 147/371] bmw_connected_drive - updated repo url (#5044) * updated repo url * :ambulance: Fixes incorrect Markdown linking --- source/_components/bmw_connected_drive.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/bmw_connected_drive.markdown b/source/_components/bmw_connected_drive.markdown index 21e7e04ecf..e560ced3c6 100644 --- a/source/_components/bmw_connected_drive.markdown +++ b/source/_components/bmw_connected_drive.markdown @@ -14,7 +14,7 @@ ha_release: 0.64 This component lets you retrieve data on your BMW vehicle from the BMW Connected Drive portal. You need to have a working BMW Connected Drive account and a Connected Drive enabled vehicle for this to work. -For compatibility with your BMW vehicle check the (bimmer_connected page)[https://github.com/ChristianKuehnel/bimmer_connected] on github. +For compatibility with your BMW vehicle check the [bimmer_connected page](https://github.com/m1n3rva/bimmer_connected) on github. To enable this component in your installation, add the following to your `configuration.yaml` file: From d42f6dfacff2c8ccba728cc1f29952c9bf8ad7bb Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 2 Apr 2018 22:57:57 +0200 Subject: [PATCH 148/371] Some fixes (#5091) * Some fixes (missing logo and links) * Add header --- .../alarm_control_panel.ifttt.markdown | 2 +- source/_components/asterisk_mbox.markdown | 11 ++++++----- source/_components/dominos.markdown | 5 ++++- .../_components/mailbox.asterisk_mbox.markdown | 3 ++- source/images/supported_brands/asterisk.png | Bin 0 -> 15406 bytes 5 files changed, 13 insertions(+), 8 deletions(-) create mode 100644 source/images/supported_brands/asterisk.png diff --git a/source/_components/alarm_control_panel.ifttt.markdown b/source/_components/alarm_control_panel.ifttt.markdown index 9fcd58e2d3..9dcf52521f 100644 --- a/source/_components/alarm_control_panel.ifttt.markdown +++ b/source/_components/alarm_control_panel.ifttt.markdown @@ -14,7 +14,7 @@ ha_release: 0.66 The `ifttt` platform allows you to integrate security systems that have no open API but can be controlled through [IFTTT](https://ifttt.com/discover). -This platform depends on the [IFTTT](https://home-assistant.io/components/ifttt/) Home Assistant component. See the component's documentation to set it up. +This platform depends on the [IFTTT](/components/ifttt/) Home Assistant component. See the component's documentation to set it up.

It is important to note that this platform fully relies on IFTTT to receive updates when the security system's state changes. Therefore, this platform shows an assumed state. diff --git a/source/_components/asterisk_mbox.markdown b/source/_components/asterisk_mbox.markdown index bfc30400f6..2361dfe0c9 100644 --- a/source/_components/asterisk_mbox.markdown +++ b/source/_components/asterisk_mbox.markdown @@ -7,25 +7,26 @@ sidebar: true comments: false sharing: true footer: true +logo: asterisk.png ha_category: Other ha_version: 0.51 ha_iot_class: "Local Push" --- -The Asterisk Voicemail integration for Home Assistant allows you to view, listen to, and delete voicemails from an Asterisk voicemail mailbox. The component includes a panel on the frontend that provides caller-id and speech-to-text transcription (using Google's API) of messages in addition to playback and message deletion. There is also an included sensor that indicates of the number of available messages. There is no requirement that the Asterisk PBX and Home Assistant are running on the same machine. +The `asterisk_mbox `Asterisk Voicemail integration for Home Assistant allows you to view, listen to, and delete voicemails from an Asterisk voicemail mailbox. The component includes a panel on the frontend that provides caller-id and speech-to-text transcription (using Google's API) of messages in addition to playback and message deletion. There is also an included sensor that indicates of the number of available messages. There is no requirement that the Asterisk PBX and Home Assistant are running on the same machine. To enable the component, a configuration is required in both Home Assistant as well as on the Asterisk server. -First follow the [Asterisk PBX configuration guide](/docs/asterisk_mbox) to setup the necessary server on the Asterisk PBX server (this is needed even if Asterisk and Home Assistant are running on the same server) +First follow the [Asterisk PBX configuration guide](/docs/asterisk_mbox/) to setup the necessary server on the Asterisk PBX server (this is needed even if Asterisk and Home Assistant are running on the same server) Once that is complete, add the following entry `configuration.yaml` file: ```yaml # Example configuration.yaml entry asterisk_mbox: - password: ASTERISK_PBX_PASSWORD - host: ASTERISK_PBX_SERVER_IP_ADDRESS - port: ASTERISK_PBX_SERVER_PORT + password: ASTERISK_PBX_PASSWORD + host: ASTERISK_PBX_SERVER_IP_ADDRESS + port: ASTERISK_PBX_SERVER_PORT ``` This will add a new 'Mailbox' side-panel, as well as a sensor to indicate # of messages available. diff --git a/source/_components/dominos.markdown b/source/_components/dominos.markdown index 062c0fbfea..d6849d738f 100644 --- a/source/_components/dominos.markdown +++ b/source/_components/dominos.markdown @@ -10,12 +10,15 @@ footer: true logo: dominos.png ha_category: Other ha_version: 0.59 +ha_iot_class: "Cloud Polling" --- -The `Dominos` component allows you to order Dominos Pizza from within your Home Assistant scripts and automations. +The `dominos` component allows you to order Dominos Pizza from within your Home Assistant scripts and automations. At present, this component only supports ordering within Canada and the US. +## {% linkable_title Configuration %} + To enable the component, you need to set up your customer information and define some orders. Orders are a group of product codes. You can get these product codes by inspecting an order request from the Dominos web app, or you can [add this custom panel by following this readme](https://github.com/wardcraigj/hass-dominos-panel) to see the available product codes in a separate panel in your install. diff --git a/source/_components/mailbox.asterisk_mbox.markdown b/source/_components/mailbox.asterisk_mbox.markdown index bc25b5b10b..15d5ec455f 100644 --- a/source/_components/mailbox.asterisk_mbox.markdown +++ b/source/_components/mailbox.asterisk_mbox.markdown @@ -7,9 +7,10 @@ sidebar: true comments: false sharing: true footer: true +logo: asterisk.png ha_category: Mailbox ha_version: 0.51 --- -The Asterisk Voicemail Mailbox provides visual and audio access to voicemail on the Asterisk PBX server. This mailbox is enabled automatically through the [Asterisk Voicemail component](/components/asterisk_mbox) configuration. +The Asterisk Voicemail Mailbox provides visual and audio access to voicemail on the Asterisk PBX server. This mailbox is enabled automatically through the [Asterisk Voicemail component](/components/asterisk_mbox/) configuration. diff --git a/source/images/supported_brands/asterisk.png b/source/images/supported_brands/asterisk.png new file mode 100644 index 0000000000000000000000000000000000000000..b8d8a1a123e7e7634c303bca0574ec5fd43223b3 GIT binary patch literal 15406 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 Yg}0w9j;TKK0x+QR;uZ9pqD9#M0EAYwlK=n! literal 0 HcmV?d00001 From 81ad15e9beb84bd64ff67ea536aed8b4fa2569be Mon Sep 17 00:00:00 2001 From: JudgeDredd <5932122+JudgeDreddKLC@users.noreply.github.com> Date: Tue, 3 Apr 2018 02:02:51 -0400 Subject: [PATCH 149/371] minor grammar changes to improve readability (#5092) minor grammar changes to improve readability --- source/_docs/configuration/packages.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/_docs/configuration/packages.markdown b/source/_docs/configuration/packages.markdown index bb66ed8230..7c95fa719e 100644 --- a/source/_docs/configuration/packages.markdown +++ b/source/_docs/configuration/packages.markdown @@ -10,9 +10,9 @@ footer: true redirect_from: /topics/packages/ --- -Packages in Home Assistant provides a way to bundle different component's configuration together. We were already introduced to the two configuration styles (specifying platforms entries together or individually) on the [adding devices](/docs/configuration/devices/) page. Both of these configuration methods require you to create the component key in the main `configuration.yaml` file. With packages we have a way to include different components, or parts of configuration using any of the `!include` directives introduced in [splitting the configuration](/docs/configuration/splitting_configuration). +Packages in Home Assistant provides a way to bundle different component's configuration together. We already learned about the two configuration styles (specifying platforms entries together or individually) on the [adding devices](/docs/configuration/devices/) page. Both of these configuration methods require you to create the component key in the main `configuration.yaml` file. With packages we have a way to include different components, or different configuration parts using any of the `!include` directives introduced in [splitting the configuration](/docs/configuration/splitting_configuration). -Packages are configured under the core `homeassistant/packages` in the configuration and take the format of a packages name (no spaces, all lower case) followed by a dictionary with the package config. For example, package `pack_1` would be created as: +Packages are configured under the core `homeassistant/packages` in the configuration and take the format of a package name (no spaces, all lower case) followed by a dictionary with the package config. For example, package `pack_1` would be created as: ```yaml homeassistant: @@ -22,7 +22,7 @@ homeassistant: ...package configuration here... ``` -The package configuration can include: `switch`, `light`, `automation`, `groups` or the majority of the Home Assistant components. +The package configuration can include: `switch`, `light`, `automation`, `groups`, or most other Home Assistant components. It can be specified inline or in a separate YAML file using `!include`. @@ -81,7 +81,7 @@ Components inside packages can only specify platform entries using configuration ### {% linkable_title Create a packages folder %} -One way to organize packages would be to create a folder named "packages" in your Home Assistant configuration directory. In the packages directory you can store any number of packages in a YAML file. This entry in your `configuration.yaml` will load all packages: +One way to organize packages is to create a folder named "packages" in your Home Assistant configuration directory. In the packages directory you can store any number of packages in a YAML file. This entry in your `configuration.yaml` will load all packages: ```yaml homeassistant: From 796ef7a3fbb4581816de5198b9f41c8a333bb267 Mon Sep 17 00:00:00 2001 From: Mattias Welponer Date: Tue, 3 Apr 2018 09:51:36 +0200 Subject: [PATCH 150/371] Rename and fix naming in homematicip_cloud (#5088) * Rename homematicip to homematicip_cloud * Fix homematicip_cloud naming * Update link and formating --- ...ip.markdown => homematicip_cloud.markdown} | 14 ++++++------- .../_components/sensor.homematicip.markdown | 18 ---------------- .../sensor.homematicip_cloud.markdown | 21 +++++++++++++++++++ 3 files changed, 28 insertions(+), 25 deletions(-) rename source/_components/{homematicip.markdown => homematicip_cloud.markdown} (72%) delete mode 100644 source/_components/sensor.homematicip.markdown create mode 100644 source/_components/sensor.homematicip_cloud.markdown diff --git a/source/_components/homematicip.markdown b/source/_components/homematicip_cloud.markdown similarity index 72% rename from source/_components/homematicip.markdown rename to source/_components/homematicip_cloud.markdown index 631720114c..c2f5320aa7 100644 --- a/source/_components/homematicip.markdown +++ b/source/_components/homematicip_cloud.markdown @@ -1,8 +1,8 @@ --- layout: page -title: "HomematicIP" +title: "HomematicIP Cloud" description: "Instructions for integrating HomematicIP into Home Assistant." -date: 2018-03-06 20:40 +date: 2018-04-02 13:40 sidebar: true comments: false sharing: true @@ -13,20 +13,20 @@ 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.homematic-ip.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: -- **generate the authentication token**: +- generate the authentication token: ```yaml generate_auth_token.py ``` -- ** add the information to your `configuration.yaml` file: +- add the information to your `configuration.yaml` file: ```yaml -homematicip: +homematicip_cloud: - name: NAME accesspoint: IDENTIFIER authtoken: AUTHTOKEN @@ -34,7 +34,7 @@ homematicip: Configuration variables (global): -- **name** (*Required*): Name to identify your access point, this will be +- **name** (*Optional*): Name to identify your access point, this will be used to prefix your device names. - **accesspoint** (*Required*): This is the access point id (SGTIN) - **authtoken** (*Required*): Authentification token generated with diff --git a/source/_components/sensor.homematicip.markdown b/source/_components/sensor.homematicip.markdown deleted file mode 100644 index 65350fc602..0000000000 --- a/source/_components/sensor.homematicip.markdown +++ /dev/null @@ -1,18 +0,0 @@ ---- -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/_components/sensor.homematicip_cloud.markdown b/source/_components/sensor.homematicip_cloud.markdown new file mode 100644 index 0000000000..bfb8449890 --- /dev/null +++ b/source/_components/sensor.homematicip_cloud.markdown @@ -0,0 +1,21 @@ +--- +layout: page +title: "HomematicIP Cloud Sensor" +description: "Instructions on how to integrate HomematIP sensors within Home Assistant." +date: 2018-04-02 13:40 +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_cloud` sensor platform allows you to control +[HomematicIP](http://www.homematicip.de) sensors through Home Assistant. + +Devices will be configured automatically. Please refer to the +[component](/components/homematicip_cloud/) configuration on how to setup +HomematicIP Cloud. From d31e48d4c045bd1334340e2e1ba2fe53e4efccef Mon Sep 17 00:00:00 2001 From: Carlo Costanzo Date: Tue, 3 Apr 2018 14:10:26 -0400 Subject: [PATCH 151/371] Added title field into example (#5095) Added based on feedback from @Stringyb92 in Chat. Examples were unclear/inconsistent. --- source/_docs/ecosystem/ios/notifications/basic.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_docs/ecosystem/ios/notifications/basic.markdown b/source/_docs/ecosystem/ios/notifications/basic.markdown index 3a2c534407..7e0a5e9288 100644 --- a/source/_docs/ecosystem/ios/notifications/basic.markdown +++ b/source/_docs/ecosystem/ios/notifications/basic.markdown @@ -36,6 +36,7 @@ automation: action: service: notify.ios_ data: + title: "Smart Home Alerts" message: "Something happened at home!" data: push: @@ -53,6 +54,7 @@ automation action: service: notify.ios_ data: + title: "Smart Home Alerts" message: "Something happened at home!" data: subtitle: "Subtitle goes here" From 0413edeaa918d55031d62adba1806f68d6ae2709 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 4 Apr 2018 08:27:33 +0200 Subject: [PATCH 152/371] Add more details --- source/_docs/tools/check_config.markdown | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/source/_docs/tools/check_config.markdown b/source/_docs/tools/check_config.markdown index f9a31e0374..b09ea5b17c 100644 --- a/source/_docs/tools/check_config.markdown +++ b/source/_docs/tools/check_config.markdown @@ -15,3 +15,23 @@ Test any changes to your `configuration.yaml` file before launching Home Assista $ hass --script check_config ``` +The script has further options like checking configuration files which are not located in the default directory or showing your secrets for debugging. + +```bash +$ hass --script check_config -h +usage: hass [-h] [--script {check_config}] [-c CONFIG] [-i [INFO]] [-f] [-s] + +Check Home Assistant configuration. + +optional arguments: + -h, --help show this help message and exit + --script {check_config} + -c CONFIG, --config CONFIG + Directory that contains the Home Assistant + configuration + -i [INFO], --info [INFO] + Show a portion of the config + -f, --files Show used configuration files + -s, --secrets Show secret information +``` + From 211467de37a3523f0b05205957bf5f371c3f1e49 Mon Sep 17 00:00:00 2001 From: Max von Webel Date: Wed, 4 Apr 2018 00:19:51 -0700 Subject: [PATCH 153/371] Update troubleshooting.markdown (#5097) * Update troubleshooting.markdown By default the check_config script only search `~/.homeassistent` for a configuration. * Fix typo * Add link --- source/_docs/configuration/troubleshooting.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/configuration/troubleshooting.markdown b/source/_docs/configuration/troubleshooting.markdown index f1b88fe876..0d867a2622 100644 --- a/source/_docs/configuration/troubleshooting.markdown +++ b/source/_docs/configuration/troubleshooting.markdown @@ -20,7 +20,7 @@ Whenever a component or configuration option results in a warning, it will be st When a component does not show up, many different things can be the case. Before you try any of these steps, make sure to look at the `home-assistant.log` file and see if there are any errors related to your component you are trying to set up. -If you have incorrect entries in your configuration files you can use the `check_config` script to assist in identifying them: `hass --script check_config`. +If you have incorrect entries in your configuration files you can use the [`check_config`](/docs/tools/check_config/) script to assist in identifying them: `hass --script check_config`. If you need to provide the path for your configuration you can do this using the `-c` argument like this: `hass --script check_config -c /path/to/your/config/dir`. #### {% linkable_title Problems with the configuration %} From 9e5c5c827cf2ef67c76bdc2a02019cb286c768e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patryk=20Ga=C5=82czy=C5=84ski?= Date: Wed, 4 Apr 2018 09:21:02 +0200 Subject: [PATCH 154/371] Extend development 101 (#5099) * extend development 101 with configuration.yaml entry and runtime example. * being more descriptive, change quote marks to follow standards * Minor changes --- source/developers/development_101.markdown | 19 ++++++++++++++++++ .../screenshots/hello-world-state-card.png | Bin 0 -> 22208 bytes 2 files changed, 19 insertions(+) create mode 100644 source/images/screenshots/hello-world-state-card.png diff --git a/source/developers/development_101.markdown b/source/developers/development_101.markdown index 851888479f..5db0cdf128 100644 --- a/source/developers/development_101.markdown +++ b/source/developers/development_101.markdown @@ -35,4 +35,23 @@ def setup(hass, config): return True ``` +Last step is to add `hello_world:` entry to your `configuration.yaml` file. + +```yaml +# Hello World component +hello_world: +``` + +After running `hass`, we should see log entries stating that `hello_world` component was loaded. What is more, additional state card shall appear within main panel. + +```log +2018-04-03 21:44:20 INFO (MainThread) [homeassistant.loader] Loaded hello_world from custom_components.hello_world +2018-04-03 21:44:20 INFO (MainThread) [homeassistant.setup] Setting up hello_world +``` + +

+ +State card showing that Hello World component is working as intended. +

+ [architecture]: /developers/architecture/ diff --git a/source/images/screenshots/hello-world-state-card.png b/source/images/screenshots/hello-world-state-card.png new file mode 100644 index 0000000000000000000000000000000000000000..9b1f5cbc0ab4830d57d502a38dba68b1c43adc7e GIT binary patch literal 22208 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 literal 0 HcmV?d00001 From 74c9fb5155a851aff90d3c5fb30cba7fccf40b0c Mon Sep 17 00:00:00 2001 From: Niklas Wagner Date: Wed, 4 Apr 2018 16:30:00 +0200 Subject: [PATCH 155/371] Match code (again) (#5106) --- source/_components/light.mqtt.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/light.mqtt.markdown b/source/_components/light.mqtt.markdown index 42ed49b457..eae91d0553 100644 --- a/source/_components/light.mqtt.markdown +++ b/source/_components/light.mqtt.markdown @@ -55,7 +55,7 @@ brightness_value_template: required: false type: string color_temp_command_topic: - description: The MQTT topic to publish commands to change the light’s color temperature state. The color temperature command slider has a range of 154 to 500 mireds (micro reciprocal degrees). + description: The MQTT topic to publish commands to change the light’s color temperature state. The color temperature command slider has a range of 153 to 500 mireds (micro reciprocal degrees). required: false type: string color_temp_state_topic: From 9f2e1b3343cf97640406172b2b8f9dd62b6fa35c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Dam=20Pedersen?= Date: Wed, 4 Apr 2018 16:30:49 +0200 Subject: [PATCH 156/371] Fixed link to target sensor.mqtt (#5104) --- source/_components/plant.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/plant.markdown b/source/_components/plant.markdown index 80fccc281d..6beaa00557 100644 --- a/source/_components/plant.markdown +++ b/source/_components/plant.markdown @@ -59,7 +59,7 @@ If the sensor data is within the min/max values the status will be `ok`, if not ## Data Source -The main sources of the data will usually be a [MiFlora sensor](/components/sensor.miflora/) or a [MQTT sensor](/components/sensor.miflora/) receiving the data from a [PlantGateway](https://github.com/ChristianKuehnel/plantgateway). +The main sources of the data will usually be a [MiFlora sensor](/components/sensor.miflora/) or a [MQTT sensor](/components/sensor.mqtt/) receiving the data from a [PlantGateway](https://github.com/ChristianKuehnel/plantgateway). If you want to get the date via a PlantGateway, this is a typical configuration for the MQTT sensors: From 66714881d7efdea6edb6279a56196f1890cb280e Mon Sep 17 00:00:00 2001 From: Robin Date: Wed, 4 Apr 2018 18:49:40 +0100 Subject: [PATCH 157/371] Remove ref to watchers (#5108) `watchers` is not required, was in an earlier version --- source/_components/folder_watcher.markdown | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/source/_components/folder_watcher.markdown b/source/_components/folder_watcher.markdown index 2e842114f7..ba97e44c63 100644 --- a/source/_components/folder_watcher.markdown +++ b/source/_components/folder_watcher.markdown @@ -20,8 +20,7 @@ To configure the `folder_watcher` component add to you `configuration.yaml` file ```yaml {% raw %} folder_watcher: - watchers: - - folder: /config + - folder: /config {% endraw %} ``` @@ -44,11 +43,10 @@ Pattern matching using [fnmatch](https://docs.python.org/3.6/library/fnmatch.htm ```yaml {% raw %} folder_watcher: - watchers: - - folder: /config - patterns: - - '*.yaml' - - '*.txt' + - folder: /config + patterns: + - '*.yaml' + - '*.txt' {% raw %} ``` From 460fce6a1030b27d963fdb5ed5e4c465f75d4428 Mon Sep 17 00:00:00 2001 From: Charles Garwood Date: Wed, 4 Apr 2018 14:42:56 -0400 Subject: [PATCH 158/371] Remove reference to old_entity_id and new_entity_id attributes (#5110) Remove references to old_entity_id and new_entity_id attributes as they were removed in https://github.com/home-assistant/home-assistant/pull/12652 --- source/_docs/z-wave/control-panel.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/z-wave/control-panel.markdown b/source/_docs/z-wave/control-panel.markdown index 601137c2cb..ee08d772d8 100644 --- a/source/_docs/z-wave/control-panel.markdown +++ b/source/_docs/z-wave/control-panel.markdown @@ -33,7 +33,7 @@ Here is where you [include and exclude](/docs/z-wave/adding/) Z-Wave devices fro ## {% linkable_title Z-Wave Node Management %}

-Since 0.63 and the new experimental [entity registry](/docs/configuration/entity-registry/) **Rename Node** no longer changes the entity id for anything other than the `zwave.` entity for the node (it does change, the default *friendly_name* and *old_entity_id* and *new_entity_id* attributes for all the entities). See [this issue](https://github.com/home-assistant/home-assistant/issues/12430). +Since 0.63 and the new experimental [entity registry](/docs/configuration/entity-registry/) **Rename Node** no longer changes the entity id for anything other than the `zwave.` entity for the node (it does change the default *friendly_name* attribute for all the entities). See [this issue](https://github.com/home-assistant/home-assistant/issues/12430).

* **Refresh Node** refreshes the information on the node and its entities. If used on a battery powered device, the device will first need to wake for this to work. From 4a1255889f73409e821ce886ebbaf3cc9f7e7036 Mon Sep 17 00:00:00 2001 From: mountainsandcode Date: Wed, 4 Apr 2018 20:53:54 +0200 Subject: [PATCH 159/371] Update templating.markdown (#5085) --- source/_docs/configuration/templating.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index 631804b6ae..6b3c34b0a0 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -86,6 +86,10 @@ Home Assistant adds extensions to allow templates to access all of the current s - 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 largest item in a sequence. - Filter `min` will obtain the smallest item in a sequence. +- Filter `regex_match(string, find, ignorecase=FALSE)` will match the find expression at the beginning of the string using regex. +- Filter `regex_search(string, find, ignorecase=FALSE)` will match the find expression anywhere in the string using regex. +- Filter `regex_replace(string, find='', replace='', ignorecase=False)` will replace the find expression with the replace string using regex. +- Filter `regex_findall_index(string, find='', index=0, ignorecase=False)` will find all regex matches of find in string and return the match at index (findall returns an array of matches). [strp-format]: https://docs.python.org/3.6/library/datetime.html#strftime-and-strptime-behavior From 1c1025546efc991fa2553a9004b2db215516149f Mon Sep 17 00:00:00 2001 From: Oleg Date: Wed, 4 Apr 2018 21:54:33 +0300 Subject: [PATCH 160/371] Added headers configuration variable to notify.rest component (#5103) --- source/_components/notify.rest.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/notify.rest.markdown b/source/_components/notify.rest.markdown index c20e4bc2f5..4d1d83c581 100644 --- a/source/_components/notify.rest.markdown +++ b/source/_components/notify.rest.markdown @@ -30,6 +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`. - **resource** (*Required*): The resource or endpoint that will receive the value. - **method** (*Optional*): The method of the request. Default is GET. +- **headers** (*Optional*): The headers for the request. - **message_param_name** (*Optional*): Parameter name for the message. Defaults to `message`. - **title_param_name** (*Optional*): Parameter name for the title. Defaults to none. - **target_param_name** (*Optional*): Parameter name for the target. Defaults to none. From f4220b5c10ebf2989dee704e53272d0cfaada0e5 Mon Sep 17 00:00:00 2001 From: Phil Cole Date: Wed, 4 Apr 2018 21:12:30 +0100 Subject: [PATCH 161/371] Update Debian Stabel python version --- source/developers/asyncio_misc.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/asyncio_misc.markdown b/source/developers/asyncio_misc.markdown index 695b26e3e0..3fbc923c6f 100644 --- a/source/developers/asyncio_misc.markdown +++ b/source/developers/asyncio_misc.markdown @@ -10,7 +10,7 @@ footer: true --- ## {% linkable_title What about ‘async’ and ‘await’ syntax? %} -Python 3.5 introduced new syntax to formalize the asynchronous pattern. This is however not compatible with Python 3.4. The minimum required Python version for Home Assistant is based on the Python version shipped with Debian stable, which is currently 3.4.2. +Python 3.5 introduced new syntax to formalize the asynchronous pattern. This is however not compatible with Python 3.4. The minimum required Python version for Home Assistant is based on the Python version shipped with Debian stable, which is currently 3.5.3. For more information, Brett Cannon wrote [an excellent breakdown][brett] on 'async' and 'await' syntax and how asynchronous programming works. From a94c49d0ded6eeabe74165e96e5be84d32889e4f Mon Sep 17 00:00:00 2001 From: Leandro Date: Thu, 5 Apr 2018 07:18:46 -0300 Subject: [PATCH 162/371] Update camera.yi.markdown (#5098) * Update camera.yi.markdown Added a session specifying for Hassbian users. * Update camera.yi.markdown * :rocket: Trigger build --- source/_components/camera.yi.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/camera.yi.markdown b/source/_components/camera.yi.markdown index 61576a4772..cb8975a86c 100644 --- a/source/_components/camera.yi.markdown +++ b/source/_components/camera.yi.markdown @@ -34,6 +34,10 @@ Once installed, please ensure that you have enabled FTP and Telnet on your devic Currently, version 0.1.4-beta2 of the custom firmware is the highest supported. Firmwares higher than this version use [Pure-FTPd](https://www.pureftpd.org/project/pure-ftpd), which has a bug that prevents FFmpeg from correctly rendering video files.

+

+Hassbian users: don't forget to install ffmpeg support on your platform, otherwise, you'll not see video. +

+

Some alternative Yi firmwares enable an experimental RTSP server, which will allow you to connect to your camera via other Home Assistant camera platforms. However, this RTSP server disables the ability to use the supremely-useful Yi Home app. In order to maintain both Home Assistant compatibility _and_ the native app, this platform retrieves videos via FTP.

From 4a1cae880641b28040c47acad72033446751d91f Mon Sep 17 00:00:00 2001 From: joshua stein Date: Thu, 5 Apr 2018 11:41:46 -0500 Subject: [PATCH 163/371] Pushover: update webpage with clone URL (#5116) * Pushover: update webpage with clone URL Hi, Pushover developer here. I was notified that your app has a Pushover plugins, so I've listed it on our [apps page](https://pushover.net/apps) and enabled cloning for it. Instead of users having to upload an icon and fill in all the fields, users can be directed to https://pushover.net/apps/clone/home_assistant which pre-fills those fields and copies the icon. I'm not sure if the `date` field in this markdown page needs to be bumped when it's updated, or if it's a creation date. * Add some other minor changes --- source/_components/notify.pushover.markdown | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/source/_components/notify.pushover.markdown b/source/_components/notify.pushover.markdown index df11cea4ea..7e7680db7e 100644 --- a/source/_components/notify.pushover.markdown +++ b/source/_components/notify.pushover.markdown @@ -15,7 +15,9 @@ ha_release: pre 0.7 The [Pushover service](https://pushover.net/) is a platform for the notify component. This allows components to send messages to the user using Pushover. -In order to get an API key you need to go to the [Pushover website](https://pushover.net) and register a new application. From the website you can also retrieve your user key. +## {% linkable_title Configuration %} + +In order to get an API key you need to [register an application](https://pushover.net/apps/clone/home_assistant) on the Pushover website. Your Pushover user key can be found on the [Pushover dashboard](https://pushover.net/dashboard). To use Pushover notifications, add the following to your `configuration.yaml` file: @@ -35,6 +37,7 @@ Configuration variables: - **user_key** (*Required*): Your user key for Pushover. Example Automation: + ```yaml - service: notify.entity_id data: @@ -45,22 +48,16 @@ Example Automation: sound: pianobar priority: 0 ``` + Component specific values in the nested `data` section are optional. -This is a quote from the Pushover website regarding free/open source apps: - -
- If you are creating a client-side library, application, or open source project that will be redistributed and installed by end-users, you may want to require each of your users to register their own application rather than including your own API token with the software. -
- -When setting up the application you can use this [icon](/images/favicon-192x192.png). - To use notifications, please see the [getting started with automation page](/getting-started/automation/). When sending a notification, optional parameters can also be set as per the pushover [API documentation](https://pushover.net/api). Example notification triggered from the Alexa component for an intents is shown below which also uses [Automation Templating](/getting-started/automation-templating/) for the message: +{% raw %} ```yaml # Example configuration.yaml entries alexa: @@ -69,7 +66,7 @@ alexa: action: service: notify.notify data_template: - message: "The location of {% raw %}{{ User }}{% endraw %} has been queried via Alexa." + message: "The location of {{ User }} has been queried via Alexa." data: title: "Home Assistant" data: @@ -77,3 +74,4 @@ alexa: device: pixel url: "https://www.home-assistant.io/" ``` +{% endraw %} From a6ade458c70b8c05aa65e3c5dbf8fe14258735cb Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 5 Apr 2018 18:45:20 +0200 Subject: [PATCH 164/371] Add new configuration variable (#5117) --- .../device_tracker.asuswrt.markdown | 49 +++++++++++++++---- 1 file changed, 40 insertions(+), 9 deletions(-) diff --git a/source/_components/device_tracker.asuswrt.markdown b/source/_components/device_tracker.asuswrt.markdown index 4d809108e9..7889253ce9 100644 --- a/source/_components/device_tracker.asuswrt.markdown +++ b/source/_components/device_tracker.asuswrt.markdown @@ -19,6 +19,8 @@ The `asuswrt` platform offers presence detection by looking at connected devices This platform is **NOT** available for [Microsoft Windows installations](http://pexpect.readthedocs.io/en/stable/overview.html#pexpect-on-windows).

+### {% linkable_title Configuration %} + To use an ASUSWRT router in your installation, add the following to your `configuration.yaml` file: ```yaml @@ -29,15 +31,44 @@ device_tracker: username: YOUR_ADMIN_USERNAME ``` -Configuration variables: - -- **host** (*Required*): The IP address of your router, eg. `192.168.1.1`. -- **username** (*Required*: The username of an user with administrative privileges, usually `admin`. -- **password** (*Optional*): The password for your given admin account (use this if no SSH key is given). -- **protocol** (*Optional*): The protocol (`ssh` or `telnet`) to use. Defaults to `ssh`. -- **port** (*Optional*): SSH port to use. Defaults to `22`. -- **mode** (*Optional*): The operating mode of the router (`router` or `ap`). Defaults to `router`. -- **ssh_key** (*Optional*): The path to your SSH private key file associated with your given admin account (instead of password). +{% configuration %} +host: + description: "The IP address of your router, eg. `192.168.1.1`." + required: true + type: string +username: + description: "The username of an user with administrative privileges, usually `admin`." + required: true + type: string +password: + description: "The password for your given admin account (use this if no SSH key is given)." + required: false + type: string +protocol: + description: "The protocol (`ssh` or `telnet`) to use." + required: false + type: string + default: ssh +port: + description: SSH port to use. + required: false + type: int + default: 22 +mode: + description: "The operating mode of the router (`router` or `ap`)." + required: false + type: string + default: router +ssh_key: + description: The path to your SSH private key file associated with your given admin account (instead of password). + required: false + type: string +require_ip: + description: If the router is in access point mode. + required: false + type: boolean + default: true +{% endconfiguration %}

You need to [enable telnet](https://www.asus.com/support/faq/1005449/) on your router if you choose to use `protocol: telnet`. From a620408dbd1789805bcaad218fda5f6d276280d2 Mon Sep 17 00:00:00 2001 From: cpgifford <37760961+cpgifford@users.noreply.github.com> Date: Thu, 5 Apr 2018 11:46:11 -0500 Subject: [PATCH 165/371] add supporting info for 2nd gen august lock (#5115) * add supporting info for 2nd gen august lock 2nd Gen August Lock needs to have the August Connect Module to be able to talk to home-assistant. If you have Doorbell then you don't need to have Connect. Just trying to help people troubleshoot in case they don't know whats going wrong. * Update syntax --- source/_components/august.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/august.markdown b/source/_components/august.markdown index a4df212e8b..818002e14c 100644 --- a/source/_components/august.markdown +++ b/source/_components/august.markdown @@ -15,6 +15,10 @@ 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. +

+August Lock 2nd Gen will need either August Connect or Doorbell to connect to Home Assistant. +

+ ## {% linkable_title Configuration %} You will need your August login information (username (either phone# or email), and password) to use this module. From b0e5093b02d45859e1b4f895e5811465774c4736 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 5 Apr 2018 20:39:21 +0200 Subject: [PATCH 166/371] Add Tahoma switches docs (#5118) --- source/_components/switch.tahoma.markdown | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 source/_components/switch.tahoma.markdown diff --git a/source/_components/switch.tahoma.markdown b/source/_components/switch.tahoma.markdown new file mode 100644 index 0000000000..a7c3338fee --- /dev/null +++ b/source/_components/switch.tahoma.markdown @@ -0,0 +1,17 @@ +--- +layout: page +title: "Tahoma Switch" +description: "Instructions on how to integrate Tahoma switches into Home Assistant." +date: 2017-07-18 12:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: tahoma.png +ha_category: Sensor +ha_release: 0.59 +--- + +The `tahoma` switch platform lets you see switches added to your Tahoma Box in Home Assistant. + +Switches will be added automatically. Please refer to the [component](/components/tahoma/) configuration on how to setup Tahoma. From 4eecf3fc877710ebe7020c8c88180ecbd19302ea Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Thu, 5 Apr 2018 22:21:51 +0200 Subject: [PATCH 167/371] Ceiling Light 4 (Jiaoyue 650) added to the list of supported devices (#5119) --- source/_components/light.yeelight.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/light.yeelight.markdown b/source/_components/light.yeelight.markdown index e3fc28821f..b217309753 100644 --- a/source/_components/light.yeelight.markdown +++ b/source/_components/light.yeelight.markdown @@ -63,3 +63,4 @@ This component is tested to work with the following models. If you have a differ - **YLDD02YL**: Lightstrip (Color) - **MJCTD01YL**: Xiaomi Mijia Bedside Lamp - WIFI Version! - **MJTD01YL**: Xiaomi Mijia Smart LED Desk Lamp (autodiscovery isn't possible because the device doesn't support mDNS due to the small amount of RAM) +- **YLXD02YL**: Yeelight Ceiling Light 4 (Jiaoyue 650) From 0814d5c531daf1316dc7848c0b70dc567dcedee9 Mon Sep 17 00:00:00 2001 From: jmtatsch Date: Fri, 6 Apr 2018 06:11:42 +0200 Subject: [PATCH 168/371] Harmonised topic name and mention enabled autodiscovery (#5120) * Harmonised topic name and mention enabled autodiscovery * image shall not be the state of entity --- source/_docs/mqtt/discovery.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_docs/mqtt/discovery.markdown b/source/_docs/mqtt/discovery.markdown index 60974c428b..aaa295dc4b 100644 --- a/source/_docs/mqtt/discovery.markdown +++ b/source/_docs/mqtt/discovery.markdown @@ -15,6 +15,7 @@ The discovery of MQTT devices will enable one to use MQTT devices with only mini Supported by MQTT discovery: - [Binary sensors](/components/binary_sensor.mqtt/) +- [Cameras](/components/camera.mqtt/) - [Covers](/components/cover.mqtt/) - [Fans](/components/fan.mqtt/) - [Lights](/components/light.mqtt/) From 572f001f5bd085d5abe31ae798ce4f9cccc05537 Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Fri, 6 Apr 2018 09:16:35 +0200 Subject: [PATCH 169/371] Added description for markdown in persistent notifications (#5124) * Added markdown description for persistent_notification * Minor change --- .../persistent_notification.markdown | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/source/_components/persistent_notification.markdown b/source/_components/persistent_notification.markdown index 6e84078f3d..9fac3ddc0c 100644 --- a/source/_components/persistent_notification.markdown +++ b/source/_components/persistent_notification.markdown @@ -55,6 +55,26 @@ action: notification_id: "1234" ``` + +### {% linkable_title Markdown support %} + +The message attribute supports the [Markdown formatting syntax](https://daringfireball.net/projects/markdown/syntax). Some examples are: + +| Type | Message | +| ---- | ------- | +| Headline 1 | `# Headline` | +| Headline 2 | `## Headline` | +| Newline | `\n` | +| Bold | `**My bold text**` | +| Cursive | `*My cursive text*` | +| Link | `[Link](https://home-assistant.io/)` | +| Image | `![image](/local/my_image.jpg)` | + +

+ `/local/` in this context refers to the `.homeassistant/www/` folder. +

+ + ### {% linkable_title Create a persistent notification %} Choose service developer tool icon **Services** from the **Developer Tools** to call the `persistent_notification` service. Select `persistent_notification/create` from the list of **Available services:** and enter something like the sample below into the **Service Data** field and hit **CALL SERVICE**. From 6ff1b3be2dcbbd92459ffe82ce80bc54eb80cf7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Fri, 6 Apr 2018 11:38:46 +0300 Subject: [PATCH 170/371] getting-started: Soften note about Pi 3 being 2.4GHz WiFi only (#5125) * getting-started: Soften note about Pi 3 being 2.4GHz WiFi only The (currently unsupported) B+ has 5GHz support. * Add space --- source/getting-started/index.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/getting-started/index.markdown b/source/getting-started/index.markdown index 6781f28ab5..41382d7f35 100644 --- a/source/getting-started/index.markdown +++ b/source/getting-started/index.markdown @@ -18,14 +18,14 @@ Follow this guide if you want to easily get started with Home Assistant, or if y We will need a few things to get started with installing Home Assistant. Links below are linking to Amazon US. If you're not in the US, you should be able to find these items in web stores in your country. - [Raspberry Pi 3 model B](http://a.co/gEfMqL4) + [Power Supply](https://www.raspberrypi.org/help/faqs/#powerReqs) (at least 2.5A) -- [Micro SD Card](http://a.co/gslOydD). Get one that is Class 10 as they are more reliable. Size 32GB or bigger recommended. +- [Micro SD Card](http://a.co/gslOydD). Get one that is Class 10 as they are more reliable. Size 32 GB or bigger recommended. - SD Card reader. Part of most laptops, and also available as [standalone USB sticks](http://a.co/5FCyb0N) (the brand doesn't matter, just pick the cheapest) - Ethernet cable (optional, Hass.io can work with WiFi too)

Support for the Raspberry Pi 3 model B+ is available in the alternative installation method [Hassbian](/docs/hassbian/installation/). - The recently released Raspberry Pi 3 model B+ is not yet supported by Hass.io + The recently released Raspberry Pi 3 model B+ is not yet supported by Hass.io.

### {% linkable_title Software requirements %} @@ -41,7 +41,7 @@ We will need a few things to get started with installing Home Assistant. Links b 1. Put the SD card in your SD card reader. 1. Open Etcher, select the Hass.io image and flash it to the SD card. -1. WiFi setup only: open the file `system-connections/resin-sample` (from the `resin-boot` volume on the SD card) with a text editor. Change `ssid` to be your network name and `psk` to be your password. Note that the Raspberry Pi 3 is a 2.4GHz WiFi device, so do not try to connect it to a 5GHz network. +1. WiFi setup only: open the file `system-connections/resin-sample` (from the `resin-boot` volume on the SD card) with a text editor. Change `ssid` to be your network name and `psk` to be your password. Note: When connecting to a 5 GHz-only network, make sure your device supports that. If you don't know what that means, then you probably have nothing to worry about. 1. Unmount the SD card and remove it from your SD card reader. 1. Insert the SD card into your Raspberry Pi 3. If you are going to use an Ethernet cable, connect that too. 1. Connect your Raspberry Pi to the power supply so it turns on. From 6347774428d606d8b35b35902b1319535bd7e9dc Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Fri, 6 Apr 2018 11:02:04 +0200 Subject: [PATCH 171/371] Added additional log settings (#5123) --- source/_components/homekit.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index 079849af30..5313a8428a 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -212,6 +212,7 @@ logger: default: warning logs: homeassistant.components.homekit: debug + pyhap: debug ``` 2. Reproduce the bug / problem you have encountered. 3. Stop Home Assistant and copy the log from the log file. That is necessary since some errors only get logged, when Home Assistant is being shutdown. From ccba1ffd3367159a17e92fecc92526c04e468ba5 Mon Sep 17 00:00:00 2001 From: Marco Orovecchia Date: Fri, 6 Apr 2018 15:35:27 +0200 Subject: [PATCH 172/371] Added Nanoleaf Aurora Light documentation (#5018) * Added Nanoleaf Aurora Light documentation * :pencil2: Tweaks --- .../light.nanoleaf_aurora.markdown | 52 ++++++++++++++++++ .../nanoleaf_aurora_light.png | Bin 0 -> 70366 bytes 2 files changed, 52 insertions(+) create mode 100644 source/_components/light.nanoleaf_aurora.markdown create mode 100644 source/images/supported_brands/nanoleaf_aurora_light.png diff --git a/source/_components/light.nanoleaf_aurora.markdown b/source/_components/light.nanoleaf_aurora.markdown new file mode 100644 index 0000000000..074bd1c77f --- /dev/null +++ b/source/_components/light.nanoleaf_aurora.markdown @@ -0,0 +1,52 @@ +--- +layout: page +title: "Nanoleaf Aurora Light Panel" +description: "Instructions how to integrate Nanoleaf Aurora Light Panels into Home Assistant." +date: 2018-01-04 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: nanoleaf_aurora_light.png +ha_category: Light +ha_iot_class: "Local Polling" +featured: false +ha_release: 0.67 +--- + +### {% linkable_title Configuration Sample %} + +To enable the Aurora lights, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +light: + - platform: aurora + host: 192.168.1.10 + token: xxxxxxxxxxxxxxxxxxxxx +``` + +{% configuration %} +host: + description: IP address or host-name of the device, e.g., 192.168.1.10. + required: true + type: string +token: + description: The *auth* token that you get via *POST* to */api/v1/new* + required: true + type: string +name: + description: Name of the component, make this unique if you have multiple Light Panels + required: false + type: string + default: Aurora +{% endconfiguration %} + +### {% linkable_title Getting The Auth Token %} + +1. Make sure that your Nanoleaf Aurora Panel is fully patched (as of the time of writing the latest version was 2.2.0) +2. Hold down the *ON* button on the Panel for 5 seconds; the LED will start flashing +3. Issue a *POST* request to the API endpoint, e.g., via `$ curl -i -X POST http://192.168.1.155:16021/api/v1/new` +4. The output should include the auth token like *{"auth_token":"xxxxxxxxxxxxxxxxxxxxx"}*, copy the resulting token into your configuration + +If you get a 403 Forbidden message, you probably did not press the *ON* button long enough. The time-frame to get a valid token is only 30 seconds, so you have to be quick to issue the curl request. diff --git a/source/images/supported_brands/nanoleaf_aurora_light.png b/source/images/supported_brands/nanoleaf_aurora_light.png new file mode 100644 index 0000000000000000000000000000000000000000..fb14d4752f1fe396210b8289f0d113d2f9b28584 GIT binary patch literal 70366 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 literal 0 HcmV?d00001 From 8aaf1547d265cf566d4088ae8c518795c47181b1 Mon Sep 17 00:00:00 2001 From: David Broadfoot Date: Fri, 6 Apr 2018 23:53:31 +1000 Subject: [PATCH 173/371] Added documentation for gogogate2 (#5023) * Add gogogate2 image * Added gogogate2 documentation * PR Feedback * Remove blank line * Add period --- source/_components/cover.gogogate2.markdown | 49 +++++++++++++++++++ source/images/supported_brands/gogogate2.png | Bin 0 -> 11962 bytes 2 files changed, 49 insertions(+) create mode 100644 source/_components/cover.gogogate2.markdown create mode 100644 source/images/supported_brands/gogogate2.png diff --git a/source/_components/cover.gogogate2.markdown b/source/_components/cover.gogogate2.markdown new file mode 100644 index 0000000000..bf6d62d37b --- /dev/null +++ b/source/_components/cover.gogogate2.markdown @@ -0,0 +1,49 @@ +--- +layout: page +title: "Gogogate2 Cover" +description: "Instructions on how to integrate Gogogate2-Enabled garage door covers into Home Assistant." +date: 2018-03-26 20:02 +sidebar: true +comments: false +sharing: true +footer: true +logo: gogogate2.png +ha_category: Cover +ha_release: 0.67 +ha_iot_class: Local Polling +--- + +The `gogogate2` cover platform lets you control Gogogate2-Enabled garage doors through Home Assistant. Device names in Home Assistant are generated based on the names defined in your Gogogate2 mobile app. + +## {% linkable_title Configuration %} + +To use your Gogogate2 cover in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yml entry +cover: + - platform: gogogate2 + username: email@email.com + password: password + ip_address: 192.168.1.200 +``` + +{% configuration %} +username: + description: Your Gogogate2 account username. + required: true + type: string +password: + description: Your Gogogate2 account password. + required: true + type: string +ip_address: + description: The IP Address of your Gogogate2 device. + required: true + type: string +name: + description: Allows you to override the default name. + default: gogogate2 + required: false + type: string +{% endconfiguration %} diff --git a/source/images/supported_brands/gogogate2.png b/source/images/supported_brands/gogogate2.png new file mode 100644 index 0000000000000000000000000000000000000000..551043f64a53cec259a53fb71382fff754c4f348 GIT binary patch literal 11962 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 M07*qoM6N<$f^0pk4FCWD literal 0 HcmV?d00001 From 18881f59c3e7d609e6bf96299687d5f07486c223 Mon Sep 17 00:00:00 2001 From: phithor Date: Fri, 6 Apr 2018 15:54:14 +0200 Subject: [PATCH 174/371] Added max range switch note (#5126) --- source/_components/switch.tesla.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/switch.tesla.markdown b/source/_components/switch.tesla.markdown index a8c63ede4e..2ded4d7d10 100644 --- a/source/_components/switch.tesla.markdown +++ b/source/_components/switch.tesla.markdown @@ -13,7 +13,7 @@ ha_iot_class: "Cloud Push" ha_release: 0.54 --- -The `Tesla` platform allows you to control your [Tesla](https://www.tesla.com/) charger (enable/disable charging) from within Home Assistant. +The `Tesla` platform allows you to control your [Tesla](https://www.tesla.com/) charger (enable/disable charging, max range switch) from within Home Assistant. The switch platform will be automatically configured if Tesla component is configured. From 8255351d694103382705e899f52d2d3ede703f87 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 6 Apr 2018 10:29:01 -0400 Subject: [PATCH 175/371] Bump version to 0.67.0b0 --- _config.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/_config.yml b/_config.yml index a7b16a6bf6..401cd89fce 100644 --- a/_config.yml +++ b/_config.yml @@ -139,14 +139,14 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 66 -current_patch_version: 1 -date_released: 2018-04-01 +current_minor_version: 67 +current_patch_version: 0 +date_released: 2018-04-14 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. # Major release: -patch_version_notes: "#release-0661---april-1" +patch_version_notes: "#" # Minor release (Example #release-0431---april-25): # Date we moved to Discourse for comments From 4974ac5990994e0584f1e912c6f3ce4b51fe525b Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 6 Apr 2018 10:33:47 -0400 Subject: [PATCH 176/371] Add blog post for release 67 --- source/_posts/2018-04-14-release-67.markdown | 378 +++++++++++++++++++ 1 file changed, 378 insertions(+) create mode 100644 source/_posts/2018-04-14-release-67.markdown diff --git a/source/_posts/2018-04-14-release-67.markdown b/source/_posts/2018-04-14-release-67.markdown new file mode 100644 index 0000000000..ee6134e9da --- /dev/null +++ b/source/_posts/2018-04-14-release-67.markdown @@ -0,0 +1,378 @@ +--- +layout: post +title: "0.67: TBD - ALSO UPDATE DATE" +description: "TBD" +date: 2018-04-06 00:01:00 +date_formatted: "April 14, 2018" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +og_image: /images/blog/2018-04-0.67/components.png +--- + + + +## {% linkable_title New Platforms %} + +- Qwikswitch async refactor & sensor ([@kellerza] - [#13509]) ([qwikswitch docs]) ([light.qwikswitch docs]) ([sensor.qwikswitch docs]) ([switch.qwikswitch docs]) (new-platform) +- Adds folder_watcher component ([@robmarkcole] - [#12918]) ([watchdog_file_watcher docs]) (new-platform) +- Add FreeDNS component ([@bdurrer] - [#13526]) ([freedns docs]) (new-platform) +- Google Maps location sharing device tracker ([@michaelarnauts] - [#12301]) ([device_tracker.google_maps docs]) (new-platform) +- Added Waze travel time sensor ([@Myrddyn1] - [#12387]) ([sensor.waze_travel_time docs]) (new-platform) +- Added switch component to Amcrest IP Camera. ([@adpriebe] - [#12992]) ([amcrest docs]) ([switch.amcrest docs]) (new-platform) +- Add mastodon ([@fabaff] - [#13441]) ([notify docs]) (new-platform) +- Tahoma switches ([@ikucuze] - [#13636]) ([tahoma docs]) ([switch.tahoma docs]) (new-platform) +- Add support for Nanoleaf Aurora Light Panels ([@Oro] - [#13456]) ([light.aurora docs]) (new-platform) + +## {% linkable_title If you need help... %} + +...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. + +## {% linkable_title Reporting Issues %} + +Experiencing issues introduced by this release? Please report them in our [issue tracker](https://github.com/home-assistant/home-assistant/issues). Make sure to fill in all fields of the issue template. + + +## {% linkable_title Breaking Changes %} + +- Updates default Pilight port number ([@frenck] - [#13419]) ([pilight docs]) (breaking change) +- Update to new "b2vapi" of BMW ConnectedDrive ([@ChristianKuehnel] - [#13305]) ([bmw_connected_drive docs]) ([binary_sensor.bmw_connected_drive docs]) ([lock.bmw_connected_drive docs]) ([sensor.bmw_connected_drive docs]) (breaking change) +- Remove MercedesME component ([@ReneNulschDE] - [#13538]) ([device_tracker docs]) ([mercedesme docs]) ([binary_sensor.mercedesme docs]) ([sensor.mercedesme docs]) (breaking change) +- Channel up and down for webostv ([@stephanerosi] - [#13624]) ([media_player.webostv docs]) (breaking change) +- Add media type separation for video/movie ([@Tadly] - [#13612]) (breaking change) +- Added ENTITY_ID_FORMAT import and set entity_id in __init__ ([@timmo001] - [#13642]) ([switch.broadlink docs]) (breaking change) + +## {% linkable_title All changes %} + +- Updates default Pilight port number ([@frenck] - [#13419]) ([pilight docs]) (breaking change) +- Upgrade mypy to 0.580 ([@fabaff] - [#13420]) +- Update to new "b2vapi" of BMW ConnectedDrive ([@ChristianKuehnel] - [#13305]) ([bmw_connected_drive docs]) ([binary_sensor.bmw_connected_drive docs]) ([lock.bmw_connected_drive docs]) ([sensor.bmw_connected_drive docs]) (breaking change) +- Add code owner for Manual Alarm with MQTT Control ([@colinodell] - [#13438]) +- QNAP updates ([@colinodell] - [#13435]) ([sensor.qnap docs]) +- Xiaomi MiIO Fan: Xiaomi Air Humidifier integration ([@syssi] - [#12627]) ([fan.xiaomi_miio docs]) +- Bump songpal version, fixes lots of issues mentioned in #13022 ([@rytilahti] - [#13440]) ([media_player.songpal docs]) +- Removed the google home warning from emulated_hue ([@mf-social] - [#13436]) +- Fixing odometer to display km ([@alandtse] - [#13427]) ([sensor.tesla docs]) +- Upgrade keyring to 12.0.0 and keyrings.alt to 3.0 ([@fabaff] - [#13452]) +- Upgrade aiohttp to 3.1.0 ([@fabaff] - [#13451]) +- Qwikswitch async & updates ([@kellerza] - [#12641]) ([qwikswitch docs]) ([light.qwikswitch docs]) ([switch.qwikswitch docs]) +- Make Telnet Switch value template optional ([@DanNixon] - [#13433]) ([switch.telnet docs]) +- Update yeelightsunflower to 0.0.10 ([@lindsaymarkwawrd] - [#13448]) +- Add more info to issue template ([@c727] - [#12955]) +- [RFC] Update issue template ([@amelchio] - [#12989]) +- Update total_connect_client to 0.17 for Honeywell L5100-WiFi Support ([@phileaton] - [#13473]) ([alarm_control_panel.totalconnect docs]) +- Upgrade python-mystrom to 0.4.2 ([@fabaff] - [#13485]) ([light.mystrom docs]) ([switch.mystrom docs]) +- New service added to control the power mode of the yeelight ([@syssi] - [#13267]) ([light.yeelight docs]) +- Upgrade slacker to 0.9.65 ([@fabaff] - [#13496]) ([notify docs]) +- Adds template function state_attr to get attribute from a state ([@Nossnevs] - [#13378]) +- Upgrade aiohttp to 3.1.1 ([@fabaff] - [#13510]) +- Update tradfri v5 ([@lwis] - [#11187]) ([tradfri docs]) ([light.tradfri docs]) ([sensor.tradfri docs]) +- Fix typos and update link (fixes #13520) ([@fabaff] - [#13529]) +- Tradfri - unique_id's and color_temp support for rgb-bulbs ([@NovapaX] - [#13531]) ([light.tradfri docs]) +- Qwikswitch async refactor & sensor ([@kellerza] - [#13509]) ([qwikswitch docs]) ([light.qwikswitch docs]) ([sensor.qwikswitch docs]) ([switch.qwikswitch docs]) (new-platform) +- Adds folder_watcher component ([@robmarkcole] - [#12918]) ([watchdog_file_watcher docs]) (new-platform) +- Update rflink to 0.0.37 ([@olskar] - [#12603]) ([rflink docs]) +- Added file path validity checks to file sensor ([@FrederikBolding] - [#12505]) ([sensor.file docs]) +- Allow for overriding the DoorBird push notification URL in configuration ([@Klikini] - [#13268]) ([doorbird docs]) +- Convert Hue to always use config entries ([@balloob] - [#13034]) ([hue docs]) +- Implement thermostat support for Alexa ([@trisk] - [#13340]) ([alexa docs]) +- deCONZ config entry ([@Kane610] - [#13402]) ([deconz docs]) +- Remove andrey-git from requirements monitoring ([@andrey-git] - [#13547]) +- Fix BMW device tracker toggling state if vehicle tracking is disabled ([@ChristianKuehnel] - [#12999]) ([device_tracker.bmw_connected_drive docs]) +- Xiaomi MiIO Switch: Support for the Xiaomi Chuangmi Plug V3 ([@syssi] - [#13271]) ([switch.xiaomi_miio docs]) +- Add FreeDNS component ([@bdurrer] - [#13526]) ([freedns docs]) (new-platform) +- Update pylint to 1.8.3 ([@scop] - [#13544]) +- Google Maps location sharing device tracker ([@michaelarnauts] - [#12301]) ([device_tracker.google_maps docs]) (new-platform) +- Check_config: Handle numbers correctly when printing config ([@hAmpzter] - [#13377]) +- Add support for Canary Flex ([@snjoetw] - [#13280]) ([canary docs]) ([sensor.canary docs]) +- Fixes #12758. Try other cameras even if one fails to initialize ([@PhracturedBlue] - [#13276]) ([amcrest docs]) +- Added HassOpenCover and HassCloseCover intents ([@tschmidty69] - [#13372]) ([conversation docs]) ([cover docs]) +- rfxtrx lib 0.22.0 ([@danielhiversen] - [#13576]) ([rfxtrx docs]) +- xiaomi lib upgrade ([@danielhiversen] - [#13577]) ([xiaomi_aqara docs]) +- Remove MercedesME component ([@ReneNulschDE] - [#13538]) ([device_tracker docs]) ([mercedesme docs]) ([binary_sensor.mercedesme docs]) ([sensor.mercedesme docs]) (breaking change) +- Added Waze travel time sensor ([@Myrddyn1] - [#12387]) ([sensor.waze_travel_time docs]) (new-platform) +- Added switch component to Amcrest IP Camera. ([@adpriebe] - [#12992]) ([amcrest docs]) ([switch.amcrest docs]) (new-platform) +- Upgrade pyhydroquebec 2.2.1 ([@titilambert] - [#13586]) ([sensor.hydroquebec docs]) +- Add mastodon ([@fabaff] - [#13441]) ([notify docs]) (new-platform) +- Added support for requesting RSSI values from Bluetooth devices ([@FrederikBolding] - [#12458]) ([device_tracker.bluetooth_tracker docs]) +- Fix mysensors update callback ([@MartinHjelmare] - [#13602]) ([mysensors docs]) +- Broadlink ([@danielhiversen] - [#13585]) ([sensor.broadlink docs]) ([switch.broadlink docs]) +- Fix IMAP email message_data ([@zhaokoh] - [#13606]) ([sensor.imap_email_content docs]) +- Re-add group polling as a fallback for observation ([@lwis] - [#13613]) ([light.tradfri docs]) +- Unflake folder watcher test ([@balloob] - [#13569]) +- Make mysensors updates and platform setup async ([@MartinHjelmare] - [#13603]) +- Use 0/1 for raspberry pi cover GPIO writes rather than true/false ([@fezfox] - [#13610]) ([cover.rpi_gpio docs]) +- Fix Hue error logging ([@balloob] - [#13616]) ([hue docs]) +- Bugfix for tradfri to correctly execute Command. ([@lwis] - [#13618]) ([light.tradfri docs]) +- Hue mireds value is actually 153 not 154 ([@Skaronator] - [#13601]) ([light docs]) +- changed PyTado version ([@wmalgadey] - [#13626]) ([tado docs]) +- Upgrade py-cpuinfo to 4.0.0 ([@fabaff] - [#13629]) ([sensor.cpuspeed docs]) +- Add Switzerland ([@fabaff] - [#13630]) ([binary_sensor.workday docs]) +- Xiaomi Mi WiFi Repeater 2 integration as device tracker ([@syssi] - [#13521]) +- Upgrade youtube_dl to 2018.04.03 ([@fabaff] - [#13647]) ([media_extractor docs]) +- Update plex.py ([@chronm] - [#13659]) ([sensor.plex docs]) +- Always enable config entries & remove config_entry_example ([@balloob] - [#13663]) ([config docs]) ([config_entry_example docs]) +- Add missing service docs for hs_color ([@armills] - [#13667]) +- Add regex functions as templating helpers ([@mountainsandcode] - [#13631]) +- Channel up and down for webostv ([@stephanerosi] - [#13624]) ([media_player.webostv docs]) (breaking change) +- Added headers configuration variable to notify.rest component ([@5LICK] - [#13674]) ([notify docs]) +- Spelling fixes ([@scop] - [#13681]) ([device_tracker docs]) ([smappee docs]) ([alarm_control_panel.ifttt docs]) ([climate.nest docs]) ([remote.xiaomi_miio docs]) +- Xiaomi MiIO Light: White Philips Candle Light support ([@syssi] - [#13682]) ([light.xiaomi_miio docs]) +- Bugfixes HomeKit covers, lights ([@cdce8p] - [#13689]) ([homekit docs]) +- Minor style changes, cleanup ([@cdce8p] - [#13654]) ([homekit docs]) +- Bugfix: Zwave Print_node to logfile instead of console ([@turbokongen] - [#13302]) ([zwave docs]) +- Update HAP-python to 1.1.8 ([@cdce8p] - [#13563]) ([homekit docs]) +- Update ha-philips_js to 0.0.3 ([@danielperna84] - [#13702]) ([media_player.philips_js docs]) +- Coverage & Codeowners ([@kellerza] - [#13700]) +- Bump insteonplm to 0.8.6 to fix sensor message handling ([@teharris1] - [#13691]) ([insteon_plm docs]) +- Fix asuswrt ap mode failure ([@shuaiger] - [#13693]) ([device_tracker docs]) +- Support color temperature in Homekit ([@morberg] - [#13658]) ([homekit docs]) +- Remove unused CONF_WATCHERS ([@robmarkcole] - [#13678]) ([folder_watcher docs]) +- Add media type separation for video/movie ([@Tadly] - [#13612]) (breaking change) +- Adding configration to disable ip address as a requirement Fixes: #13399 ([@PlanetJ] - [#13692]) ([device_tracker docs]) +- Tahoma switches ([@ikucuze] - [#13636]) ([tahoma docs]) ([switch.tahoma docs]) (new-platform) +- Send XY color for non-osram hue bulbs ([@armills] - [#13665]) ([light.hue docs]) +- Update AbodePy version to 0.12.3 ([@MisterWil] - [#13709]) ([abode docs]) +- Enable autodiscovery for mqtt cameras ([@jmtatsch] - [#13697]) ([mqtt docs]) ([camera.mqtt docs]) +- Added ENTITY_ID_FORMAT import and set entity_id in __init__ ([@timmo001] - [#13642]) ([switch.broadlink docs]) (breaking change) +- Fix #10175 ([@pschmitt] - [#13713]) ([media_player.liveboxplaytv docs]) +- Add support for Nanoleaf Aurora Light Panels ([@Oro] - [#13456]) ([light.aurora docs]) (new-platform) +- Added gogogate2 cover ([@dlbroadfoot] - [#13467]) + +[#11187]: https://github.com/home-assistant/home-assistant/pull/11187 +[#12301]: https://github.com/home-assistant/home-assistant/pull/12301 +[#12387]: https://github.com/home-assistant/home-assistant/pull/12387 +[#12458]: https://github.com/home-assistant/home-assistant/pull/12458 +[#12505]: https://github.com/home-assistant/home-assistant/pull/12505 +[#12603]: https://github.com/home-assistant/home-assistant/pull/12603 +[#12627]: https://github.com/home-assistant/home-assistant/pull/12627 +[#12641]: https://github.com/home-assistant/home-assistant/pull/12641 +[#12918]: https://github.com/home-assistant/home-assistant/pull/12918 +[#12955]: https://github.com/home-assistant/home-assistant/pull/12955 +[#12989]: https://github.com/home-assistant/home-assistant/pull/12989 +[#12992]: https://github.com/home-assistant/home-assistant/pull/12992 +[#12999]: https://github.com/home-assistant/home-assistant/pull/12999 +[#13034]: https://github.com/home-assistant/home-assistant/pull/13034 +[#13267]: https://github.com/home-assistant/home-assistant/pull/13267 +[#13268]: https://github.com/home-assistant/home-assistant/pull/13268 +[#13271]: https://github.com/home-assistant/home-assistant/pull/13271 +[#13276]: https://github.com/home-assistant/home-assistant/pull/13276 +[#13280]: https://github.com/home-assistant/home-assistant/pull/13280 +[#13302]: https://github.com/home-assistant/home-assistant/pull/13302 +[#13305]: https://github.com/home-assistant/home-assistant/pull/13305 +[#13340]: https://github.com/home-assistant/home-assistant/pull/13340 +[#13372]: https://github.com/home-assistant/home-assistant/pull/13372 +[#13377]: https://github.com/home-assistant/home-assistant/pull/13377 +[#13378]: https://github.com/home-assistant/home-assistant/pull/13378 +[#13402]: https://github.com/home-assistant/home-assistant/pull/13402 +[#13419]: https://github.com/home-assistant/home-assistant/pull/13419 +[#13420]: https://github.com/home-assistant/home-assistant/pull/13420 +[#13427]: https://github.com/home-assistant/home-assistant/pull/13427 +[#13433]: https://github.com/home-assistant/home-assistant/pull/13433 +[#13435]: https://github.com/home-assistant/home-assistant/pull/13435 +[#13436]: https://github.com/home-assistant/home-assistant/pull/13436 +[#13438]: https://github.com/home-assistant/home-assistant/pull/13438 +[#13440]: https://github.com/home-assistant/home-assistant/pull/13440 +[#13441]: https://github.com/home-assistant/home-assistant/pull/13441 +[#13448]: https://github.com/home-assistant/home-assistant/pull/13448 +[#13451]: https://github.com/home-assistant/home-assistant/pull/13451 +[#13452]: https://github.com/home-assistant/home-assistant/pull/13452 +[#13456]: https://github.com/home-assistant/home-assistant/pull/13456 +[#13467]: https://github.com/home-assistant/home-assistant/pull/13467 +[#13473]: https://github.com/home-assistant/home-assistant/pull/13473 +[#13485]: https://github.com/home-assistant/home-assistant/pull/13485 +[#13496]: https://github.com/home-assistant/home-assistant/pull/13496 +[#13509]: https://github.com/home-assistant/home-assistant/pull/13509 +[#13510]: https://github.com/home-assistant/home-assistant/pull/13510 +[#13521]: https://github.com/home-assistant/home-assistant/pull/13521 +[#13526]: https://github.com/home-assistant/home-assistant/pull/13526 +[#13529]: https://github.com/home-assistant/home-assistant/pull/13529 +[#13531]: https://github.com/home-assistant/home-assistant/pull/13531 +[#13538]: https://github.com/home-assistant/home-assistant/pull/13538 +[#13544]: https://github.com/home-assistant/home-assistant/pull/13544 +[#13547]: https://github.com/home-assistant/home-assistant/pull/13547 +[#13563]: https://github.com/home-assistant/home-assistant/pull/13563 +[#13569]: https://github.com/home-assistant/home-assistant/pull/13569 +[#13576]: https://github.com/home-assistant/home-assistant/pull/13576 +[#13577]: https://github.com/home-assistant/home-assistant/pull/13577 +[#13585]: https://github.com/home-assistant/home-assistant/pull/13585 +[#13586]: https://github.com/home-assistant/home-assistant/pull/13586 +[#13601]: https://github.com/home-assistant/home-assistant/pull/13601 +[#13602]: https://github.com/home-assistant/home-assistant/pull/13602 +[#13603]: https://github.com/home-assistant/home-assistant/pull/13603 +[#13606]: https://github.com/home-assistant/home-assistant/pull/13606 +[#13610]: https://github.com/home-assistant/home-assistant/pull/13610 +[#13612]: https://github.com/home-assistant/home-assistant/pull/13612 +[#13613]: https://github.com/home-assistant/home-assistant/pull/13613 +[#13616]: https://github.com/home-assistant/home-assistant/pull/13616 +[#13618]: https://github.com/home-assistant/home-assistant/pull/13618 +[#13624]: https://github.com/home-assistant/home-assistant/pull/13624 +[#13626]: https://github.com/home-assistant/home-assistant/pull/13626 +[#13629]: https://github.com/home-assistant/home-assistant/pull/13629 +[#13630]: https://github.com/home-assistant/home-assistant/pull/13630 +[#13631]: https://github.com/home-assistant/home-assistant/pull/13631 +[#13636]: https://github.com/home-assistant/home-assistant/pull/13636 +[#13642]: https://github.com/home-assistant/home-assistant/pull/13642 +[#13647]: https://github.com/home-assistant/home-assistant/pull/13647 +[#13654]: https://github.com/home-assistant/home-assistant/pull/13654 +[#13658]: https://github.com/home-assistant/home-assistant/pull/13658 +[#13659]: https://github.com/home-assistant/home-assistant/pull/13659 +[#13663]: https://github.com/home-assistant/home-assistant/pull/13663 +[#13665]: https://github.com/home-assistant/home-assistant/pull/13665 +[#13667]: https://github.com/home-assistant/home-assistant/pull/13667 +[#13674]: https://github.com/home-assistant/home-assistant/pull/13674 +[#13678]: https://github.com/home-assistant/home-assistant/pull/13678 +[#13681]: https://github.com/home-assistant/home-assistant/pull/13681 +[#13682]: https://github.com/home-assistant/home-assistant/pull/13682 +[#13689]: https://github.com/home-assistant/home-assistant/pull/13689 +[#13691]: https://github.com/home-assistant/home-assistant/pull/13691 +[#13692]: https://github.com/home-assistant/home-assistant/pull/13692 +[#13693]: https://github.com/home-assistant/home-assistant/pull/13693 +[#13697]: https://github.com/home-assistant/home-assistant/pull/13697 +[#13700]: https://github.com/home-assistant/home-assistant/pull/13700 +[#13702]: https://github.com/home-assistant/home-assistant/pull/13702 +[#13709]: https://github.com/home-assistant/home-assistant/pull/13709 +[#13713]: https://github.com/home-assistant/home-assistant/pull/13713 +[@5LICK]: https://github.com/5LICK +[@ChristianKuehnel]: https://github.com/ChristianKuehnel +[@DanNixon]: https://github.com/DanNixon +[@FrederikBolding]: https://github.com/FrederikBolding +[@Kane610]: https://github.com/Kane610 +[@Klikini]: https://github.com/Klikini +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@MisterWil]: https://github.com/MisterWil +[@Myrddyn1]: https://github.com/Myrddyn1 +[@Nossnevs]: https://github.com/Nossnevs +[@NovapaX]: https://github.com/NovapaX +[@Oro]: https://github.com/Oro +[@PhracturedBlue]: https://github.com/PhracturedBlue +[@PlanetJ]: https://github.com/PlanetJ +[@ReneNulschDE]: https://github.com/ReneNulschDE +[@Skaronator]: https://github.com/Skaronator +[@Tadly]: https://github.com/Tadly +[@adpriebe]: https://github.com/adpriebe +[@alandtse]: https://github.com/alandtse +[@amelchio]: https://github.com/amelchio +[@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 +[@cdce8p]: https://github.com/cdce8p +[@chronm]: https://github.com/chronm +[@colinodell]: https://github.com/colinodell +[@danielhiversen]: https://github.com/danielhiversen +[@danielperna84]: https://github.com/danielperna84 +[@dlbroadfoot]: https://github.com/dlbroadfoot +[@fabaff]: https://github.com/fabaff +[@fezfox]: https://github.com/fezfox +[@frenck]: https://github.com/frenck +[@hAmpzter]: https://github.com/hAmpzter +[@ikucuze]: https://github.com/ikucuze +[@jmtatsch]: https://github.com/jmtatsch +[@kellerza]: https://github.com/kellerza +[@lindsaymarkwawrd]: https://github.com/lindsaymarkwawrd +[@lwis]: https://github.com/lwis +[@mf-social]: https://github.com/mf-social +[@michaelarnauts]: https://github.com/michaelarnauts +[@morberg]: https://github.com/morberg +[@mountainsandcode]: https://github.com/mountainsandcode +[@olskar]: https://github.com/olskar +[@phileaton]: https://github.com/phileaton +[@pschmitt]: https://github.com/pschmitt +[@robmarkcole]: https://github.com/robmarkcole +[@rytilahti]: https://github.com/rytilahti +[@scop]: https://github.com/scop +[@shuaiger]: https://github.com/shuaiger +[@snjoetw]: https://github.com/snjoetw +[@stephanerosi]: https://github.com/stephanerosi +[@syssi]: https://github.com/syssi +[@teharris1]: https://github.com/teharris1 +[@timmo001]: https://github.com/timmo001 +[@titilambert]: https://github.com/titilambert +[@trisk]: https://github.com/trisk +[@tschmidty69]: https://github.com/tschmidty69 +[@turbokongen]: https://github.com/turbokongen +[@wmalgadey]: https://github.com/wmalgadey +[@zhaokoh]: https://github.com/zhaokoh +[abode docs]: https://www.home-assistant.io/components/abode/ +[alarm_control_panel.ifttt docs]: https://www.home-assistant.io/components/alarm_control_panel.ifttt/ +[alarm_control_panel.totalconnect docs]: https://www.home-assistant.io/components/alarm_control_panel.totalconnect/ +[alexa docs]: https://www.home-assistant.io/components/alexa/ +[amcrest docs]: https://www.home-assistant.io/components/amcrest/ +[binary_sensor.bmw_connected_drive docs]: https://www.home-assistant.io/components/binary_sensor.bmw_connected_drive/ +[binary_sensor.mercedesme docs]: https://www.home-assistant.io/components/binary_sensor.mercedesme/ +[binary_sensor.workday docs]: https://www.home-assistant.io/components/binary_sensor.workday/ +[bmw_connected_drive docs]: https://www.home-assistant.io/components/bmw_connected_drive/ +[camera.mqtt docs]: https://www.home-assistant.io/components/camera.mqtt/ +[canary docs]: https://www.home-assistant.io/components/canary/ +[climate.nest docs]: https://www.home-assistant.io/components/climate.nest/ +[config docs]: https://www.home-assistant.io/components/config/ +[config_entry_example docs]: https://www.home-assistant.io/components/config_entry_example/ +[conversation docs]: https://www.home-assistant.io/components/conversation/ +[cover docs]: https://www.home-assistant.io/components/cover/ +[cover.rpi_gpio docs]: https://www.home-assistant.io/components/cover.rpi_gpio/ +[deconz docs]: https://www.home-assistant.io/components/deconz/ +[device_tracker docs]: https://www.home-assistant.io/components/device_tracker/ +[device_tracker.bluetooth_tracker docs]: https://www.home-assistant.io/components/device_tracker.bluetooth_tracker/ +[device_tracker.bmw_connected_drive docs]: https://www.home-assistant.io/components/device_tracker.bmw_connected_drive/ +[device_tracker.google_maps docs]: https://www.home-assistant.io/components/device_tracker.google_maps/ +[doorbird docs]: https://www.home-assistant.io/components/doorbird/ +[fan.xiaomi_miio docs]: https://www.home-assistant.io/components/fan.xiaomi_miio/ +[folder_watcher docs]: https://www.home-assistant.io/components/folder_watcher/ +[freedns docs]: https://www.home-assistant.io/components/freedns/ +[homekit docs]: https://www.home-assistant.io/components/homekit/ +[hue docs]: https://www.home-assistant.io/components/hue/ +[insteon_plm docs]: https://www.home-assistant.io/components/insteon_plm/ +[light docs]: https://www.home-assistant.io/components/light/ +[light.aurora docs]: https://www.home-assistant.io/components/light.aurora/ +[light.hue docs]: https://www.home-assistant.io/components/light.hue/ +[light.mystrom docs]: https://www.home-assistant.io/components/light.mystrom/ +[light.qwikswitch docs]: https://www.home-assistant.io/components/light.qwikswitch/ +[light.tradfri docs]: https://www.home-assistant.io/components/light.tradfri/ +[light.xiaomi_miio docs]: https://www.home-assistant.io/components/light.xiaomi_miio/ +[light.yeelight docs]: https://www.home-assistant.io/components/light.yeelight/ +[lock.bmw_connected_drive docs]: https://www.home-assistant.io/components/lock.bmw_connected_drive/ +[media_extractor docs]: https://www.home-assistant.io/components/media_extractor/ +[media_player.liveboxplaytv docs]: https://www.home-assistant.io/components/media_player.liveboxplaytv/ +[media_player.philips_js docs]: https://www.home-assistant.io/components/media_player.philips_js/ +[media_player.songpal docs]: https://www.home-assistant.io/components/media_player.songpal/ +[media_player.webostv docs]: https://www.home-assistant.io/components/media_player.webostv/ +[mercedesme docs]: https://www.home-assistant.io/components/mercedesme/ +[mqtt docs]: https://www.home-assistant.io/components/mqtt/ +[mysensors docs]: https://www.home-assistant.io/components/mysensors/ +[notify docs]: https://www.home-assistant.io/components/notify/ +[pilight docs]: https://www.home-assistant.io/components/pilight/ +[qwikswitch docs]: https://www.home-assistant.io/components/qwikswitch/ +[remote.xiaomi_miio docs]: https://www.home-assistant.io/components/remote.xiaomi_miio/ +[rflink docs]: https://www.home-assistant.io/components/rflink/ +[rfxtrx docs]: https://www.home-assistant.io/components/rfxtrx/ +[sensor.bmw_connected_drive docs]: https://www.home-assistant.io/components/sensor.bmw_connected_drive/ +[sensor.broadlink docs]: https://www.home-assistant.io/components/sensor.broadlink/ +[sensor.canary docs]: https://www.home-assistant.io/components/sensor.canary/ +[sensor.cpuspeed docs]: https://www.home-assistant.io/components/sensor.cpuspeed/ +[sensor.file docs]: https://www.home-assistant.io/components/sensor.file/ +[sensor.hydroquebec docs]: https://www.home-assistant.io/components/sensor.hydroquebec/ +[sensor.imap_email_content docs]: https://www.home-assistant.io/components/sensor.imap_email_content/ +[sensor.mercedesme docs]: https://www.home-assistant.io/components/sensor.mercedesme/ +[sensor.plex docs]: https://www.home-assistant.io/components/sensor.plex/ +[sensor.qnap docs]: https://www.home-assistant.io/components/sensor.qnap/ +[sensor.qwikswitch docs]: https://www.home-assistant.io/components/sensor.qwikswitch/ +[sensor.tesla docs]: https://www.home-assistant.io/components/sensor.tesla/ +[sensor.tradfri docs]: https://www.home-assistant.io/components/sensor.tradfri/ +[sensor.waze_travel_time docs]: https://www.home-assistant.io/components/sensor.waze_travel_time/ +[smappee docs]: https://www.home-assistant.io/components/smappee/ +[switch.amcrest docs]: https://www.home-assistant.io/components/switch.amcrest/ +[switch.broadlink docs]: https://www.home-assistant.io/components/switch.broadlink/ +[switch.mystrom docs]: https://www.home-assistant.io/components/switch.mystrom/ +[switch.qwikswitch docs]: https://www.home-assistant.io/components/switch.qwikswitch/ +[switch.tahoma docs]: https://www.home-assistant.io/components/switch.tahoma/ +[switch.telnet docs]: https://www.home-assistant.io/components/switch.telnet/ +[switch.xiaomi_miio docs]: https://www.home-assistant.io/components/switch.xiaomi_miio/ +[tado docs]: https://www.home-assistant.io/components/tado/ +[tahoma docs]: https://www.home-assistant.io/components/tahoma/ +[tradfri docs]: https://www.home-assistant.io/components/tradfri/ +[watchdog_file_watcher docs]: https://www.home-assistant.io/components/watchdog_file_watcher/ +[xiaomi_aqara docs]: https://www.home-assistant.io/components/xiaomi_aqara/ +[zwave docs]: https://www.home-assistant.io/components/zwave/ From e4deae0cd2262d19d8699281a2e5258b0e44f3ae Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 6 Apr 2018 18:33:27 +0200 Subject: [PATCH 177/371] Fix list --- source/_docs/mqtt/discovery.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/mqtt/discovery.markdown b/source/_docs/mqtt/discovery.markdown index 60974c428b..1e7f28c627 100644 --- a/source/_docs/mqtt/discovery.markdown +++ b/source/_docs/mqtt/discovery.markdown @@ -42,8 +42,8 @@ The discovery topic need to follow a specific format: ``` - ``: One of the supported components, eg. `binary_sensor`. -- ``: (*Optional*) id of the node providing the topic. -- ``: "The ID of the device. This is only to allow for separate topics for each device and is not used for the `entity_id`." +- `` (*Optional*): ID of the node providing the topic. +- ``: The ID of the device. This is only to allow for separate topics for each device and is not used for the `entity_id`. - `<>`: The topic `config` or `state` which defines the current action. The payload will be checked like an entry in your `configuration.yaml` file if a new device is added. This means that missing variables will be filled with the platform's default values. All configuration variables which are *required* must be present in the initial payload send to `/config`. From 38ee7392c490a5ff86d6c55405fbaef5ea8e30ce Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 6 Apr 2018 18:44:40 +0200 Subject: [PATCH 178/371] Add iOS page (fixes #4972) (#5127) --- source/_components/ios.markdown | 17 +++++++++++++++++ source/_docs/ecosystem/ios.markdown | 7 +++---- 2 files changed, 20 insertions(+), 4 deletions(-) create mode 100644 source/_components/ios.markdown diff --git a/source/_components/ios.markdown b/source/_components/ios.markdown new file mode 100644 index 0000000000..3c734ea302 --- /dev/null +++ b/source/_components/ios.markdown @@ -0,0 +1,17 @@ +--- +layout: page +title: "iOS" +description: "Instructions on how to use the iOS companion app with Home Assistant." +date: 2018-04-06 08:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: apple.png +ha_category: Hub +featured: true +ha_release: 0.31 +ha_iot_class: depends +--- + +The `ios` component is the Home Assistant part for using the iOS companion app. For further details please check the [iOS section](/docs/ecosystem/ios/) in the documentation for further details. diff --git a/source/_docs/ecosystem/ios.markdown b/source/_docs/ecosystem/ios.markdown index 82ba667eec..027fe50323 100644 --- a/source/_docs/ecosystem/ios.markdown +++ b/source/_docs/ecosystem/ios.markdown @@ -8,7 +8,6 @@ comments: false sharing: true footer: true redirect_from: /ecosystem/ios/ -redirect_from: /components/ios/ --- The Home Assistant for iOS app offers a companion app for iOS which is deeply integrated into both Home Assistant and iOS. Its basic features include: @@ -22,7 +21,7 @@ The app is available on the iOS App Store in every country that Apple supports.

-## Basic requirements +## {% linkable_title Basic requirements %} * iOS device running at least iOS 9, but iOS 10 is greatly preferred. * Home Assistant 0.42.4 or higher for push notification support. @@ -34,7 +33,7 @@ Loading the `ios` component will also load the [`device_tracker`][device-tracker ## {% linkable_title Setup %} -### Automated Setup +### {% linkable_title Automated Setup %} The `ios` component will automatically be loaded under the following circumstances: @@ -45,7 +44,7 @@ Automated discovery and component loading only happens at first install of the a After the first automated setup you need to add `ios:` to your configuration so that the component loads by default even after restarting Home Assistant. -### Manual Setup +### {% linkable_title Manual Setup %} You may also manually load the `ios` component by adding the following to your configuration: From d2c7a2fe772c5209cac8b446fc02cdb5d35ed010 Mon Sep 17 00:00:00 2001 From: Alexis Iglauer Date: Fri, 6 Apr 2018 19:50:23 +0200 Subject: [PATCH 179/371] Update sensor.mqtt.markdown to add initial slashes for ESPEasy (#4757) * Update sensor.mqtt.markdown The sensors topic required the initial slashes to function in my installation. * Make it more clear * Remove tab --- source/_components/sensor.mqtt.markdown | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/source/_components/sensor.mqtt.markdown b/source/_components/sensor.mqtt.markdown index dc835ac9d7..f84296bd86 100644 --- a/source/_components/sensor.mqtt.markdown +++ b/source/_components/sensor.mqtt.markdown @@ -167,7 +167,12 @@ sensor: ### {% linkable_title Get sensor value from a device with ESPEasy %} -Assuming that you have flashed your ESP8266 unit with [ESPEasy](https://github.com/letscontrolit/ESPEasy). Under "Config" set a name ("Unit Name:") for your device (here it's "bathroom"). A "Controller" for MQTT with the protocol "OpenHAB MQTT" is present and the entries ("Controller Subscribe:" and "Controller Publish:") are adjusted to match your needs. In this example the topics are prefixed with "home". Also, add a sensor in the "Devices" tap with the name "analog" and "brightness" as value. +Assuming that you have flashed your ESP8266 unit with [ESPEasy](https://github.com/letscontrolit/ESPEasy). Under "Config" set a name ("Unit Name:") for your device (here it's "bathroom"). A "Controller" for MQTT with the protocol "OpenHAB MQTT" is present and the entries ("Controller Subscribe:" and "Controller Publish:") are adjusted to match your needs. In this example the topics are prefixed with "home". Please keep in mind that the ESPEasy default topics start with a `/` and only contain the name when writing your entry for the `configuration.yaml` file. + +- **Controller Subscribe**: `home/%sysname%/#` (instead of `/%sysname%/#`) +- **Controller Publish**: `home/%sysname%/%tskname%/%valname%` (instead of `/%sysname%/%tskname%/%valname%`) + +Also, add a sensor in the "Devices" tap with the name "analog" and "brightness" as value. As soon as the unit is online, you will get the state of the sensor. @@ -188,5 +193,3 @@ sensor: name: Brightness ``` {% endraw %} - - From 243f02dc3eb25b58bd329b59cb74a3911dc76c10 Mon Sep 17 00:00:00 2001 From: Jerry Workman Date: Fri, 6 Apr 2018 14:07:52 -0400 Subject: [PATCH 180/371] HA version 0.64.0 voluptuous config check. (#4773) * HA version 0.64.0 voluptuous config check. * Update --- source/developers/development_validation.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/developers/development_validation.markdown b/source/developers/development_validation.markdown index 51fef2d39b..b629dcbe64 100644 --- a/source/developers/development_validation.markdown +++ b/source/developers/development_validation.markdown @@ -28,6 +28,7 @@ Some things to keep in mind: - Use the constants defined in `const.py` - Import `PLATFORM_SCHEMA` from the parent component and extend it - Preferred order is `required` first and `optional` second +- Starting with Home Assistant 0.64 `voluptuous` requires default values for optional configuration keys to be valid values. Don't use a default which is `None` like `vol.Optional(CONF_SOMETHING, default=None): cv.string`, set the default to `default=""` if required. ### {% linkable_title Snippets %} From 086960a502281d2b3ddfe25574adeb610bcd81bd Mon Sep 17 00:00:00 2001 From: cgtobi Date: Fri, 6 Apr 2018 21:49:47 +0200 Subject: [PATCH 181/371] Docs for transparency feature google calendar component (#5101) * Add transparency feature to google calendar component * Set default behaviour to ignore the availability. This reflects the old behaviour and does not break current workflows. --- source/_components/calendar.google.markdown | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/_components/calendar.google.markdown b/source/_components/calendar.google.markdown index d046396835..5999dc48ac 100644 --- a/source/_components/calendar.google.markdown +++ b/source/_components/calendar.google.markdown @@ -95,7 +95,8 @@ Variables: - **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: `!!`) - +  - **ignore_availablilty**: (*Optional*): Should we respect `free`/`busy` flags? (Defaults to `true`) +   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. From 5c47c159a9f0653cf988cf421f0f4c6eed6d4d5a Mon Sep 17 00:00:00 2001 From: Juggels Date: Fri, 6 Apr 2018 22:24:10 +0200 Subject: [PATCH 182/371] Allow TodoistAPI date_string in service call (#4923) * Update docs to reflect changes * Match docs to latest component update * Missed renamed parameters in example --- source/_components/calendar.todoist.markdown | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/source/_components/calendar.todoist.markdown b/source/_components/calendar.todoist.markdown index d3ad45c8c4..c416ddb50d 100644 --- a/source/_components/calendar.todoist.markdown +++ b/source/_components/calendar.todoist.markdown @@ -111,7 +111,7 @@ Home Assistant does its best to determine what task in each project is "most" im Todoist also comes with access to a service, `calendar.todoist_new_task`. This service can be used to create a new Todoist task. You can specify labels and a project, or you can leave them blank, and the task will go to your "Inbox" project. -Here's an example JSON payload: +Here are two example JSON payloads resulting in the same task: ```json { @@ -123,6 +123,17 @@ Here's an example JSON payload: } ``` +```json +{ + "content": "Pick up the mail", + "project": "Errands", + "labels":"Homework,School", + "priority":3, + "due_date_string":"tomorrow at 14:00", + "due_date_lang":"en" +} +``` + - **content** (*Required*): The name of the task you want to create. - **project** (*Optional*): The project to put the task in. @@ -131,6 +142,11 @@ Here's an example JSON payload: - **priority** (*Optional*): The priority of the task, from 1-4. Again, 1 means least important, and 4 means most important. -- **due_date** (*Optional*): When the task should be due, in either YYYY-MM-DD format or YYYY-MM-DD HH:MM format. +- **due_date_string** (*Optional*): When the task should be due, in [natural language](https://support.todoist.com/hc/en-us/articles/205325931-Dates-and-Times). Mutually exclusive with `due_date` + +- **due_date_lang** (*Optional*): When `due_date_string` is set, it is posisble to set the language. + Valid languages are: `en`, `da`, `pl`, `zh`, `ko`, `de`, `pt`, `ja`, `it`, `fr`, `sv`, `ru`, `es`, `nl` + +- **due_date** (*Optional*): When the task should be due, in either YYYY-MM-DD format or YYYY-MM-DD HH:MM format. Mutually exclusive with `due_date_string`. Note that there's (currently) no way to mark tasks as done through Home Assistant; task names do not necessarily have to be unique, so you could find yourself in a situation where you close the wrong task. From 5d0eb6b5a61a2de83b67b0298195f4f01d0209b2 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 6 Apr 2018 23:05:55 +0200 Subject: [PATCH 183/371] Remove periods --- .../_docs/installation/hassbian/integrations.markdown | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/_docs/installation/hassbian/integrations.markdown b/source/_docs/installation/hassbian/integrations.markdown index 5658ce712e..d6f7a3fd0c 100644 --- a/source/_docs/installation/hassbian/integrations.markdown +++ b/source/_docs/installation/hassbian/integrations.markdown @@ -26,11 +26,11 @@ For more details about the GPIO layout, visit the [documentation](https://www.ra Permission have been given to the `homeassistant` user to use the GPIO pins and all of the following components should require no underlying changes to work. Just follow the component pages for each on how to add them to your Home Assistant installation. - - [DHT Sensor](/components/sensor.dht/). - - [Raspberry Pi Cover](/components/cover.rpi_gpio/). - - [Raspberry Pi GPIO Binary Sensor](/components/binary_sensor.rpi_gpio/). - - [Raspberry Pi GPIO Switch](/components/switch.rpi_gpio/). - - [Raspberry Pi RF Switch](/components/switch.rpi_rf/). + - [DHT Sensor](/components/sensor.dht/) + - [Raspberry Pi Cover](/components/cover.rpi_gpio/) + - [Raspberry Pi GPIO Binary Sensor](/components/binary_sensor.rpi_gpio/) + - [Raspberry Pi GPIO Switch](/components/switch.rpi_gpio/) + - [Raspberry Pi RF Switch](/components/switch.rpi_rf/) ### {% linkable_title Raspberry Pi Camera %} From 690fa13130c8995ad7046c54a28dde6aaa0129a3 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 6 Apr 2018 23:13:40 +0200 Subject: [PATCH 184/371] Update layout --- source/_components/smappee.markdown | 33 +++++++++++++++-------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/source/_components/smappee.markdown b/source/_components/smappee.markdown index 5e35f4866f..ce56987f72 100644 --- a/source/_components/smappee.markdown +++ b/source/_components/smappee.markdown @@ -12,41 +12,42 @@ ha_release: "0.64" ha_category: Hub --- -[Smappee](https://www.smappee.com/) controller for energy monitoring and Comport plug switches. +The `smappee` component adds support for the [Smappee](https://www.smappee.com/) controller for energy monitoring and Comport plug switches. Switches and Sensors are supported - and will be automatically added when you connect to the Smappee controller. -The smappee component gets information from [Smappee API](https://smappee.atlassian.net/wiki/display/DEVAPI/API+Methods) using the [smappy](https://github.com/EnergieID/smappy) pypy module +The smappee component gets information from [Smappee API](https://smappee.atlassian.net/wiki/display/DEVAPI/API+Methods). -

-Info on how to get api access is described in the [smappy wiki](https://github.com/EnergieID/smappy/wiki) -

+## {% linkable_title Configuration %} + +Info on how to get API access is described in the [smappy wiki](https://github.com/EnergieID/smappy/wiki). + +To use the `smappee` component in your installation, add the following to your `configuration.yaml` file: -# Configuration ```yaml # Example configuration.yaml entry smappee: - host: 10.0.0.5 - client_id: YOUR_CLIENT_ID - client_secret: YOUR_CLIENT_SECRET - username: YOUR_MYSMAPPEE_USERNAME - password: YOUR_MYSMAPPEE_PASSWORD + host: 10.0.0.5 + client_id: YOUR_CLIENT_ID + client_secret: YOUR_CLIENT_SECRET + username: YOUR_MYSMAPPEE_USERNAME + password: YOUR_MYSMAPPEE_PASSWORD ``` ```yaml # Minimal example configuration.yaml entry smappee: - host: 10.0.0.5 + host: 10.0.0.5 ``` ```yaml # Cloud only example configuration.yaml entry smappee: - client_id: YOUR_CLIENT_ID - client_secret: YOUR_CLIENT_SECRET - username: YOUR_MYSMAPPEE_USERNAME - password: YOUR_MYSMAPPEE_PASSWORD + client_id: YOUR_CLIENT_ID + client_secret: YOUR_CLIENT_SECRET + username: YOUR_MYSMAPPEE_USERNAME + password: YOUR_MYSMAPPEE_PASSWORD ``` Configuration variables: From 42e0e4f477ffce814f236aad982078076a5edf36 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 7 Apr 2018 10:20:34 +0200 Subject: [PATCH 185/371] Fix link --- source/help/reporting_issues.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/help/reporting_issues.markdown b/source/help/reporting_issues.markdown index f3764c3d08..d2290788c5 100644 --- a/source/help/reporting_issues.markdown +++ b/source/help/reporting_issues.markdown @@ -11,7 +11,7 @@ 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/). +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. From 0c7780681bdfe73b07184b79bdcd5adf38fd24a7 Mon Sep 17 00:00:00 2001 From: Otto Winter Date: Sun, 8 Apr 2018 04:32:01 +0200 Subject: [PATCH 186/371] MQTT Sensor Unique ID feature (#5131) --- source/_components/sensor.mqtt.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/sensor.mqtt.markdown b/source/_components/sensor.mqtt.markdown index dc835ac9d7..7076fc9b56 100644 --- a/source/_components/sensor.mqtt.markdown +++ b/source/_components/sensor.mqtt.markdown @@ -80,6 +80,10 @@ json_attributes: description: A list of keys to extract values from a JSON dictionary payload and then set as sensor attributes. reqired: false type: list, string +unique_id: + description: "An id that uniquely identifies this sensor. If 2 sensors have the same unique id, Home Assistant will raise an exception.**" + required: false + type: string {% endconfiguration %} ## {% linkable_title Examples %} From c427325a9ccb90c0d6e0ee0a3163da810ce754b1 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 8 Apr 2018 10:03:01 -0400 Subject: [PATCH 187/371] Remove domain prefix --- source/_posts/2018-04-14-release-67.markdown | 160 +++++++++---------- 1 file changed, 80 insertions(+), 80 deletions(-) diff --git a/source/_posts/2018-04-14-release-67.markdown b/source/_posts/2018-04-14-release-67.markdown index ee6134e9da..f6d3c285a6 100644 --- a/source/_posts/2018-04-14-release-67.markdown +++ b/source/_posts/2018-04-14-release-67.markdown @@ -296,83 +296,83 @@ Experiencing issues introduced by this release? Please report them in our [issue [@turbokongen]: https://github.com/turbokongen [@wmalgadey]: https://github.com/wmalgadey [@zhaokoh]: https://github.com/zhaokoh -[abode docs]: https://www.home-assistant.io/components/abode/ -[alarm_control_panel.ifttt docs]: https://www.home-assistant.io/components/alarm_control_panel.ifttt/ -[alarm_control_panel.totalconnect docs]: https://www.home-assistant.io/components/alarm_control_panel.totalconnect/ -[alexa docs]: https://www.home-assistant.io/components/alexa/ -[amcrest docs]: https://www.home-assistant.io/components/amcrest/ -[binary_sensor.bmw_connected_drive docs]: https://www.home-assistant.io/components/binary_sensor.bmw_connected_drive/ -[binary_sensor.mercedesme docs]: https://www.home-assistant.io/components/binary_sensor.mercedesme/ -[binary_sensor.workday docs]: https://www.home-assistant.io/components/binary_sensor.workday/ -[bmw_connected_drive docs]: https://www.home-assistant.io/components/bmw_connected_drive/ -[camera.mqtt docs]: https://www.home-assistant.io/components/camera.mqtt/ -[canary docs]: https://www.home-assistant.io/components/canary/ -[climate.nest docs]: https://www.home-assistant.io/components/climate.nest/ -[config docs]: https://www.home-assistant.io/components/config/ -[config_entry_example docs]: https://www.home-assistant.io/components/config_entry_example/ -[conversation docs]: https://www.home-assistant.io/components/conversation/ -[cover docs]: https://www.home-assistant.io/components/cover/ -[cover.rpi_gpio docs]: https://www.home-assistant.io/components/cover.rpi_gpio/ -[deconz docs]: https://www.home-assistant.io/components/deconz/ -[device_tracker docs]: https://www.home-assistant.io/components/device_tracker/ -[device_tracker.bluetooth_tracker docs]: https://www.home-assistant.io/components/device_tracker.bluetooth_tracker/ -[device_tracker.bmw_connected_drive docs]: https://www.home-assistant.io/components/device_tracker.bmw_connected_drive/ -[device_tracker.google_maps docs]: https://www.home-assistant.io/components/device_tracker.google_maps/ -[doorbird docs]: https://www.home-assistant.io/components/doorbird/ -[fan.xiaomi_miio docs]: https://www.home-assistant.io/components/fan.xiaomi_miio/ -[folder_watcher docs]: https://www.home-assistant.io/components/folder_watcher/ -[freedns docs]: https://www.home-assistant.io/components/freedns/ -[homekit docs]: https://www.home-assistant.io/components/homekit/ -[hue docs]: https://www.home-assistant.io/components/hue/ -[insteon_plm docs]: https://www.home-assistant.io/components/insteon_plm/ -[light docs]: https://www.home-assistant.io/components/light/ -[light.aurora docs]: https://www.home-assistant.io/components/light.aurora/ -[light.hue docs]: https://www.home-assistant.io/components/light.hue/ -[light.mystrom docs]: https://www.home-assistant.io/components/light.mystrom/ -[light.qwikswitch docs]: https://www.home-assistant.io/components/light.qwikswitch/ -[light.tradfri docs]: https://www.home-assistant.io/components/light.tradfri/ -[light.xiaomi_miio docs]: https://www.home-assistant.io/components/light.xiaomi_miio/ -[light.yeelight docs]: https://www.home-assistant.io/components/light.yeelight/ -[lock.bmw_connected_drive docs]: https://www.home-assistant.io/components/lock.bmw_connected_drive/ -[media_extractor docs]: https://www.home-assistant.io/components/media_extractor/ -[media_player.liveboxplaytv docs]: https://www.home-assistant.io/components/media_player.liveboxplaytv/ -[media_player.philips_js docs]: https://www.home-assistant.io/components/media_player.philips_js/ -[media_player.songpal docs]: https://www.home-assistant.io/components/media_player.songpal/ -[media_player.webostv docs]: https://www.home-assistant.io/components/media_player.webostv/ -[mercedesme docs]: https://www.home-assistant.io/components/mercedesme/ -[mqtt docs]: https://www.home-assistant.io/components/mqtt/ -[mysensors docs]: https://www.home-assistant.io/components/mysensors/ -[notify docs]: https://www.home-assistant.io/components/notify/ -[pilight docs]: https://www.home-assistant.io/components/pilight/ -[qwikswitch docs]: https://www.home-assistant.io/components/qwikswitch/ -[remote.xiaomi_miio docs]: https://www.home-assistant.io/components/remote.xiaomi_miio/ -[rflink docs]: https://www.home-assistant.io/components/rflink/ -[rfxtrx docs]: https://www.home-assistant.io/components/rfxtrx/ -[sensor.bmw_connected_drive docs]: https://www.home-assistant.io/components/sensor.bmw_connected_drive/ -[sensor.broadlink docs]: https://www.home-assistant.io/components/sensor.broadlink/ -[sensor.canary docs]: https://www.home-assistant.io/components/sensor.canary/ -[sensor.cpuspeed docs]: https://www.home-assistant.io/components/sensor.cpuspeed/ -[sensor.file docs]: https://www.home-assistant.io/components/sensor.file/ -[sensor.hydroquebec docs]: https://www.home-assistant.io/components/sensor.hydroquebec/ -[sensor.imap_email_content docs]: https://www.home-assistant.io/components/sensor.imap_email_content/ -[sensor.mercedesme docs]: https://www.home-assistant.io/components/sensor.mercedesme/ -[sensor.plex docs]: https://www.home-assistant.io/components/sensor.plex/ -[sensor.qnap docs]: https://www.home-assistant.io/components/sensor.qnap/ -[sensor.qwikswitch docs]: https://www.home-assistant.io/components/sensor.qwikswitch/ -[sensor.tesla docs]: https://www.home-assistant.io/components/sensor.tesla/ -[sensor.tradfri docs]: https://www.home-assistant.io/components/sensor.tradfri/ -[sensor.waze_travel_time docs]: https://www.home-assistant.io/components/sensor.waze_travel_time/ -[smappee docs]: https://www.home-assistant.io/components/smappee/ -[switch.amcrest docs]: https://www.home-assistant.io/components/switch.amcrest/ -[switch.broadlink docs]: https://www.home-assistant.io/components/switch.broadlink/ -[switch.mystrom docs]: https://www.home-assistant.io/components/switch.mystrom/ -[switch.qwikswitch docs]: https://www.home-assistant.io/components/switch.qwikswitch/ -[switch.tahoma docs]: https://www.home-assistant.io/components/switch.tahoma/ -[switch.telnet docs]: https://www.home-assistant.io/components/switch.telnet/ -[switch.xiaomi_miio docs]: https://www.home-assistant.io/components/switch.xiaomi_miio/ -[tado docs]: https://www.home-assistant.io/components/tado/ -[tahoma docs]: https://www.home-assistant.io/components/tahoma/ -[tradfri docs]: https://www.home-assistant.io/components/tradfri/ -[watchdog_file_watcher docs]: https://www.home-assistant.io/components/watchdog_file_watcher/ -[xiaomi_aqara docs]: https://www.home-assistant.io/components/xiaomi_aqara/ -[zwave docs]: https://www.home-assistant.io/components/zwave/ +[abode docs]: /components/abode/ +[alarm_control_panel.ifttt docs]: /components/alarm_control_panel.ifttt/ +[alarm_control_panel.totalconnect docs]: /components/alarm_control_panel.totalconnect/ +[alexa docs]: /components/alexa/ +[amcrest docs]: /components/amcrest/ +[binary_sensor.bmw_connected_drive docs]: /components/binary_sensor.bmw_connected_drive/ +[binary_sensor.mercedesme docs]: /components/binary_sensor.mercedesme/ +[binary_sensor.workday docs]: /components/binary_sensor.workday/ +[bmw_connected_drive docs]: /components/bmw_connected_drive/ +[camera.mqtt docs]: /components/camera.mqtt/ +[canary docs]: /components/canary/ +[climate.nest docs]: /components/climate.nest/ +[config docs]: /components/config/ +[config_entry_example docs]: /components/config_entry_example/ +[conversation docs]: /components/conversation/ +[cover docs]: /components/cover/ +[cover.rpi_gpio docs]: /components/cover.rpi_gpio/ +[deconz docs]: /components/deconz/ +[device_tracker docs]: /components/device_tracker/ +[device_tracker.bluetooth_tracker docs]: /components/device_tracker.bluetooth_tracker/ +[device_tracker.bmw_connected_drive docs]: /components/device_tracker.bmw_connected_drive/ +[device_tracker.google_maps docs]: /components/device_tracker.google_maps/ +[doorbird docs]: /components/doorbird/ +[fan.xiaomi_miio docs]: /components/fan.xiaomi_miio/ +[folder_watcher docs]: /components/folder_watcher/ +[freedns docs]: /components/freedns/ +[homekit docs]: /components/homekit/ +[hue docs]: /components/hue/ +[insteon_plm docs]: /components/insteon_plm/ +[light docs]: /components/light/ +[light.aurora docs]: /components/light.aurora/ +[light.hue docs]: /components/light.hue/ +[light.mystrom docs]: /components/light.mystrom/ +[light.qwikswitch docs]: /components/light.qwikswitch/ +[light.tradfri docs]: /components/light.tradfri/ +[light.xiaomi_miio docs]: /components/light.xiaomi_miio/ +[light.yeelight docs]: /components/light.yeelight/ +[lock.bmw_connected_drive docs]: /components/lock.bmw_connected_drive/ +[media_extractor docs]: /components/media_extractor/ +[media_player.liveboxplaytv docs]: /components/media_player.liveboxplaytv/ +[media_player.philips_js docs]: /components/media_player.philips_js/ +[media_player.songpal docs]: /components/media_player.songpal/ +[media_player.webostv docs]: /components/media_player.webostv/ +[mercedesme docs]: /components/mercedesme/ +[mqtt docs]: /components/mqtt/ +[mysensors docs]: /components/mysensors/ +[notify docs]: /components/notify/ +[pilight docs]: /components/pilight/ +[qwikswitch docs]: /components/qwikswitch/ +[remote.xiaomi_miio docs]: /components/remote.xiaomi_miio/ +[rflink docs]: /components/rflink/ +[rfxtrx docs]: /components/rfxtrx/ +[sensor.bmw_connected_drive docs]: /components/sensor.bmw_connected_drive/ +[sensor.broadlink docs]: /components/sensor.broadlink/ +[sensor.canary docs]: /components/sensor.canary/ +[sensor.cpuspeed docs]: /components/sensor.cpuspeed/ +[sensor.file docs]: /components/sensor.file/ +[sensor.hydroquebec docs]: /components/sensor.hydroquebec/ +[sensor.imap_email_content docs]: /components/sensor.imap_email_content/ +[sensor.mercedesme docs]: /components/sensor.mercedesme/ +[sensor.plex docs]: /components/sensor.plex/ +[sensor.qnap docs]: /components/sensor.qnap/ +[sensor.qwikswitch docs]: /components/sensor.qwikswitch/ +[sensor.tesla docs]: /components/sensor.tesla/ +[sensor.tradfri docs]: /components/sensor.tradfri/ +[sensor.waze_travel_time docs]: /components/sensor.waze_travel_time/ +[smappee docs]: /components/smappee/ +[switch.amcrest docs]: /components/switch.amcrest/ +[switch.broadlink docs]: /components/switch.broadlink/ +[switch.mystrom docs]: /components/switch.mystrom/ +[switch.qwikswitch docs]: /components/switch.qwikswitch/ +[switch.tahoma docs]: /components/switch.tahoma/ +[switch.telnet docs]: /components/switch.telnet/ +[switch.xiaomi_miio docs]: /components/switch.xiaomi_miio/ +[tado docs]: /components/tado/ +[tahoma docs]: /components/tahoma/ +[tradfri docs]: /components/tradfri/ +[watchdog_file_watcher docs]: /components/watchdog_file_watcher/ +[xiaomi_aqara docs]: /components/xiaomi_aqara/ +[zwave docs]: /components/zwave/ From 2abdd0d46550f05737bd918ef7921fcce7fa55cc Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 8 Apr 2018 10:09:41 -0400 Subject: [PATCH 188/371] remove some absolute urls in favor of relative --- source/_posts/2018-03-30-release-66.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_posts/2018-03-30-release-66.markdown b/source/_posts/2018-03-30-release-66.markdown index 3cb379af26..26aba182be 100644 --- a/source/_posts/2018-03-30-release-66.markdown +++ b/source/_posts/2018-03-30-release-66.markdown @@ -566,6 +566,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [@MartinHjelmare]: https://github.com/MartinHjelmare [@armills]: https://github.com/armills [@cdce8p]: https://github.com/cdce8p -[homekit docs]: https://www.home-assistant.io/components/homekit/ -[light.mqtt_json docs]: https://www.home-assistant.io/components/light.mqtt_json/ -[sensor.mysensors docs]: https://www.home-assistant.io/components/sensor.mysensors/ +[homekit docs]: /components/homekit/ +[light.mqtt_json docs]: /components/light.mqtt_json/ +[sensor.mysensors docs]: /components/sensor.mysensors/ From a151bb7ff22768b241268eb24ae9f37dafbf9c02 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 8 Apr 2018 17:42:40 +0200 Subject: [PATCH 189/371] It's ASL 2.0 and no longer MIT --- source/developers/development.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/development.markdown b/source/developers/development.markdown index f2f79b70c4..8bc614295d 100644 --- a/source/developers/development.markdown +++ b/source/developers/development.markdown @@ -11,7 +11,7 @@ footer: true Home Assistant is built from the ground up to be easily extensible using components. Home Assistant uses [Python 3](https://www.python.org/) for the backend and [Polymer (Web components)](https://www.polymer-project.org/) for the frontend. -Home Assistant is open-source and MIT-licensed. Here are links to the source: +Home Assistant is open-source and licensed under [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0). Here are links to the source: - [home-assistant](https://github.com/home-assistant/home-assistant): Python server backend. - [home-assistant-polymer](https://github.com/home-assistant/home-assistant-polymer): Polymer UI. From 2667e63bab3292e04a411914c815985b725a787e Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 8 Apr 2018 17:44:11 +0200 Subject: [PATCH 190/371] Fix typo --- source/_components/http.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/http.markdown b/source/_components/http.markdown index 458e10794e..8fddcfd5d9 100644 --- a/source/_components/http.markdown +++ b/source/_components/http.markdown @@ -90,7 +90,7 @@ Please note, that sources from `trusted_networks` won't be banned automatically. ## {% linkable_title Hosting files %} -If you want to use Home Assistant to host or serve static files then create a directory called `www` under the configuration path (`/config` on Hass.io, `.homeassistant` elswhere). The static files in `www/` can be accessed by the following URL `http://your.domain:8123/local/`, for example `audio.mp3` would be accessed as `http://your.domain:8123/local/audio.mp3`. +If you want to use Home Assistant to host or serve static files then create a directory called `www` under the configuration path (`/config` on Hass.io, `.homeassistant` elsewhere). The static files in `www/` can be accessed by the following URL `http://your.domain:8123/local/`, for example `audio.mp3` would be accessed as `http://your.domain:8123/local/audio.mp3`.

If you've had to create the `www/` folder for the first time, you'll need to restart Home Assistant. From 3ca5ab88cea13f4c0664ad055132f46be9d46ef1 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 8 Apr 2018 21:31:54 +0200 Subject: [PATCH 191/371] Remove feature --- source/_components/ios.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/ios.markdown b/source/_components/ios.markdown index 3c734ea302..44ac2fa88e 100644 --- a/source/_components/ios.markdown +++ b/source/_components/ios.markdown @@ -9,7 +9,7 @@ sharing: true footer: true logo: apple.png ha_category: Hub -featured: true +featured: false ha_release: 0.31 ha_iot_class: depends --- From 0691f3253d6800cc58907c3121830c1e0ee9f5fd Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Sun, 8 Apr 2018 22:33:52 +0200 Subject: [PATCH 192/371] Added light color_temp HomeKit (#5122) * Added light color_temp support --- source/_components/homekit.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index 5313a8428a..5ca13b0f2b 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -196,7 +196,7 @@ The following components are currently supported: | alarm_control_panel | SecuritySystem | All security systems. | | climate | Thermostat | All climate devices. | | cover | WindowCovering | All covers that support `set_cover_position`. | -| light | Light | Support for `on / off`, `brightness` and `rgb_color`. | +| light | Light | Support for `on / off`, `brightness`, `color_temp` and `rgb_color`. | | sensor | TemperatureSensor | All sensors that have `Celsius` and `Fahrenheit` as their `unit_of_measurement`. | | sensor | HumiditySensor | All sensors that have `%` as their `unit_of_measurement` | | switch / remote / input_boolean / script | Switch | All represented as switches. | From 46f89afa140075da462dabd710bce07cfe4113ea Mon Sep 17 00:00:00 2001 From: Tim Hordern Date: Mon, 9 Apr 2018 17:38:28 +1000 Subject: [PATCH 193/371] Fix markdown link in Docker Installation docs (#5140) --- source/_docs/installation/docker.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation/docker.markdown b/source/_docs/installation/docker.markdown index 53ee103784..20ccb53943 100644 --- a/source/_docs/installation/docker.markdown +++ b/source/_docs/installation/docker.markdown @@ -28,7 +28,7 @@ If you wish to browse directly to `http://localhost:8123` from your macOS host, $ docker run -d --name="home-assistant" -v /path/to/your/config:/config -e "TZ=America/Los_Angeles" -p 8123:8123 homeassistant/home-assistant ``` -Alternatively, `docker-compose` works with any recent release of `docker-ce` on macOS. Note that (further down this page) we provide an example `docker-compose.yml` however it differs from the `docker run` example above. To make the .yml directives match, you would need to make _two_ changes: first add the equivalent `ports:` directive, then _remove_ the `network_mode: host` section. This is because `Port mapping is incompatible with network_mode: host:`. More details can be found at [Docker networking docs] (https://docs.docker.com/engine/userguide/networking/#default-networks). Note also the `/dev/tty*` device name used by your Arduino etc. devices will differ from the Linux example, so the compose `mount:` may require updates. +Alternatively, `docker-compose` works with any recent release of `docker-ce` on macOS. Note that (further down this page) we provide an example `docker-compose.yml` however it differs from the `docker run` example above. To make the .yml directives match, you would need to make _two_ changes: first add the equivalent `ports:` directive, then _remove_ the `network_mode: host` section. This is because `Port mapping is incompatible with network_mode: host:`. More details can be found at [Docker networking docs](https://docs.docker.com/engine/userguide/networking/#default-networks). Note also the `/dev/tty*` device name used by your Arduino etc. devices will differ from the Linux example, so the compose `mount:` may require updates. ### {% linkable_title Windows %} From 17ccbcce243cd901af6e6cd61a0ade1dee8d5300 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 9 Apr 2018 16:04:39 +0200 Subject: [PATCH 194/371] Various fixes --- source/_docs/installation/docker.markdown | 51 ++++++++++------------- 1 file changed, 23 insertions(+), 28 deletions(-) diff --git a/source/_docs/installation/docker.markdown b/source/_docs/installation/docker.markdown index 20ccb53943..d8e6ed3ff4 100644 --- a/source/_docs/installation/docker.markdown +++ b/source/_docs/installation/docker.markdown @@ -10,7 +10,7 @@ footer: true redirect_from: /getting-started/installation-docker/ --- -Installation with Docker is straightforward. Adjust the following command so that `/path/to/your/config/` points at the folder where you want to store your config and run it: +Installation with Docker is straightforward. Adjust the following command so that `/path/to/your/config/` points at the folder where you want to store your configuration and run it: ### {% linkable_title Linux %} @@ -20,7 +20,7 @@ $ docker run -d --name="home-assistant" -v /path/to/your/config:/config -v /etc/ ### {% linkable_title macOS %} -When using `docker-ce` (or `boot2docker`) on macOS, you are unable to map the local timezone to your Docker container ([Docker issue](https://github.com/docker/for-mac/issues/44)). Instead of `-v /etc/localtime:/etc/localtime:ro`, just pass in the timezone environment variable when you launch the container, ex: `-e "TZ=America/Los_Angeles"`. Replace "America/Los_Angeles" with [your timezone](http://en.wikipedia.org/wiki/List_of_tz_database_time_zones). +When using `docker-ce` (or `boot2docker`) on macOS, you are unable to map the local timezone to your Docker container ([Docker issue](https://github.com/docker/for-mac/issues/44)). Instead of `-v /etc/localtime:/etc/localtime:ro`, just pass in the timezone environment variable when you launch the container, e.g, `-e "TZ=America/Los_Angeles"`. Replace "America/Los_Angeles" with [your timezone](http://en.wikipedia.org/wiki/List_of_tz_database_time_zones). If you wish to browse directly to `http://localhost:8123` from your macOS host, meaning forward ports directly to the container, replace the `--net=host` switch with `-p 8123:8123`. More detail can be found in [the docker forums](https://forums.docker.com/t/should-docker-run-net-host-work/14215/10). @@ -84,31 +84,24 @@ As QNAP within QTS now supports Docker (with a neat UI), you can simply install The steps would be: - - Install “Container Station” package on your Qnap NAS - - Launch Container Station and move to “Create Container”-section - - Search image “homeassistant/home-assistant” with - docker hub and click on “Install” + - Install "Container Station" package on your Qnap NAS + - Launch Container Station and move to "Create Container"-section + - Search image "homeassistant/home-assistant" with Docker hub and click on "Install" - Choose "latest" version and click next - - Choose a container-name you want (e.g. - “homeassistant”) - - Click on “Advanced Settings” - - Within “Shared Folders” click on "Volume from host" > "Add" and - choose either an existing folder or add a new folder. The “mount - point” has to be “/config”, so that Home Assistant will use it for - the configs and logs. - - Within “Network” and select Network Mode to “Host” - - To ensure that Home Assistant displays the correct - timezone go to the “Environment” tab and click the plus sign then add - `variable` = `TZ` & `value` = `Europe/London` choosing [your correct timezone](http://en.wikipedia.org/wiki/List_of_tz_database_time_zones) - - Click on “Create” + - Choose a container-name you want (e.g., "homeassistant") + - Click on "Advanced Settings" + - Within "Shared Folders" click on "Volume from host" > "Add" and choose either an existing folder or add a new folder. The "mount point has to be `/config`, so that Home Assistant will use it for the configuration and logs. + - Within "Network" and select Network Mode to "Host" + - To ensure that Home Assistant displays the correct timezone go to the "Environment" tab and click the plus sign then add `variable` = `TZ` & `value` = `Europe/London` choosing [your correct timezone](http://en.wikipedia.org/wiki/List_of_tz_database_time_zones) + - Click on "Create" - Wait for some time until your NAS has created the container - Your Home Assistant within Docker should now run and will serve the web interface from port 8123 on your Docker host (this will be your Qnap NAS IP address - for example `http://192.xxx.xxx.xxx:8123`) -Remark: to update your Home Assistant on your Docker within Qnap NAS, you just remove container and image and do steps again (Don't remove "config" folder) +Remark: To update your Home Assistant on your Docker within Qnap NAS, you just remove container and image and do steps again (Don't remove "config" folder). -If you want to use a USB Bluetooth adapter or Z-Wave USB Stick with Home Assistant on Qnap Docker, Fallow this step: +If you want to use a USB Bluetooth adapter or Z-Wave USB stick with Home Assistant on Qnap Docker, follow those steps: -**Z-wave:** +#### {% linkable_title Z-Wave %} - Connect to your NAS over SSH - Load cdc-acm kernel module(when nas restart need to run this command) @@ -123,16 +116,16 @@ If you want to use a USB Bluetooth adapter or Z-Wave USB Stick with Home Assista `-v` is your config path `-e` is set timezone - - Edit configuration.yaml + - Edit `configuration.yaml` -``` +```yaml zwave: usb_path: /dev/ttyACM0 ``` That will tell Home Assistant where to look for our Z-wave radio. -**Bluetooth:** +#### {% linkable_title Bluetooth %} - Connect to your NAS over SSH - Run Docker command: @@ -141,9 +134,9 @@ That will tell Home Assistant where to look for our Z-wave radio. First `-v` is your config path `-e` is set timezone - - Edit configuration.yaml + - Edit the `configuration.yaml` file -``` +```yaml device_tracker: - platform: bluetooth_tracker ``` @@ -180,10 +173,12 @@ $ docker-compose up -d ### {% linkable_title Exposing Devices %} -In order to use z-wave, zigbee or other components that require access to devices, you need to map the appropriate device into the container. Ensure the user that is running the container has the correct privileges to access the `/dev/tty*` file, then add the device mapping to your docker command: +In order to use Z-Wave, ZigBbee or other components that require access to devices, you need to map the appropriate device into the container. Ensure the user that is running the container has the correct privileges to access the `/dev/tty*` file, then add the device mapping to your docker command: ```bash -$ docker run -d --name="home-assistant" -v /path/to/your/config:/config -v /etc/localtime:/etc/localtime:ro --device /dev/ttyUSB0:/dev/ttyUSB0 --net=host homeassistant/home-assistant +$ docker run -d --name="home-assistant" -v /path/to/your/config:/config \ + -v /etc/localtime:/etc/localtime:ro --device /dev/ttyUSB0:/dev/ttyUSB0 \ + --net=host homeassistant/home-assistant ``` or in a `docker-compose.yml` file: From 9f70138ffcc8f077bd70014d746a512d5cf1e897 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 9 Apr 2018 16:04:53 +0200 Subject: [PATCH 195/371] Add container update --- source/_docs/installation/updating.markdown | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/source/_docs/installation/updating.markdown b/source/_docs/installation/updating.markdown index b3c7040b9a..dd5d6dc3ab 100644 --- a/source/_docs/installation/updating.markdown +++ b/source/_docs/installation/updating.markdown @@ -14,7 +14,7 @@ redirect_from: /getting-started/updating/ The upgrade process differs depending on the installation you have, so please review the documentation that is specific to your install [Hass.io](/hassio/), [Hassbian](/docs/installation/hassbian/common-tasks/#update-home-assistant), [Vagrant](/docs/installation/vagrant/), or [Virtualenv](/docs/installation/virtualenv/#upgrading-home-assistant).

-Check what's new in the latest version and potentially impacts your system in [Home Assistant release notes](https://github.com/home-assistant/home-assistant/releases). It is good practice to review these release notes and pay close attention to the **Breaking Changes** that are listed there. If you haven't done an update for a while, you should also check previous release notes as they can also contain relevant **Breaking Changes**. **Breaking Changes** may require configuration updates for your components. If you missed this and Home Assistant refuses to start, check `/home-assistant.log` for details about broken components. +Check what's new in the latest version and potentially impacts your system in [Home Assistant release notes](https://github.com/home-assistant/home-assistant/releases). It is good practice to review these release notes and pay close attention to the **Breaking Changes** that are listed there. If you haven't done an update for a while, you should also check previous release notes as they can also contain relevant **Breaking Changes**. **Breaking Changes** may require configuration updates for your components. If you missed this and Home Assistant refuses to start, check the log file in the [configuration](/docs/configuration/) directory, e.g., `.homeassistant/home-assistant.log`, for details about broken components. The default way to update Home Assistant to the latest release, when available, is: @@ -22,7 +22,13 @@ The default way to update Home Assistant to the latest release, when available, $ pip3 install --upgrade homeassistant ``` -After updating, you must restart Home Assistant for the changes to take effect. This means that you will have to restart `hass` itself or the [autostarting](/docs/autostart/) daemon (if applicable). Startup can take considerable amount of time (i.e. minutes) depending on your device. This is because all requirements are updated as well. +For a Docker container, simply pull the latest one: + +```bash +$ sudo docker pull homeassistant/home-assistant:latest +``` + +After updating, you must start/restart Home Assistant for the changes to take effect. This means that you will have to restart `hass` itself or the [autostarting](/docs/autostart/) daemon (if applicable). Startup can take considerable amount of time (i.e. minutes) depending on your device. This is because all requirements are updated as well.

To avoid permission errors, the upgrade must be run as the same user as the installation was completed, again review the documentation specific to your install [Hass.io](/hassio/), [Hassbian](/docs/hassbian/installation/), [Vagrant](/docs/installation/vagrant/), or [Virtualenv](/docs/installation/virtualenv). From 07203297935648138e6b040dbbbdc39d842ee8ee Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Mon, 9 Apr 2018 16:11:20 +0200 Subject: [PATCH 196/371] Added binary_sensor to supported types (#5143) --- source/_components/homekit.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index 5313a8428a..90bddcb515 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -194,6 +194,7 @@ The following components are currently supported: | Component | Type Name | Description | | --------- | --------- | ----------- | | alarm_control_panel | SecuritySystem | All security systems. | +| binary_sensor | Sensor | Support for `CO2`, `Gas`, `Moisture`, `Motion`, `Occupancy`, `Opening` and `Smoke` device classes. Defaults to the `Occupancy` device class for everything else. | | climate | Thermostat | All climate devices. | | cover | WindowCovering | All covers that support `set_cover_position`. | | light | Light | Support for `on / off`, `brightness` and `rgb_color`. | From 89f64dfbd82617b39545f6c7f12777653f53a300 Mon Sep 17 00:00:00 2001 From: Phil Kates Date: Mon, 9 Apr 2018 07:23:59 -0700 Subject: [PATCH 197/371] homekit/locks: Add locks (#5093) --- source/_components/homekit.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index 90bddcb515..d3ee4c773f 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -198,6 +198,7 @@ The following components are currently supported: | climate | Thermostat | All climate devices. | | cover | WindowCovering | All covers that support `set_cover_position`. | | light | Light | Support for `on / off`, `brightness` and `rgb_color`. | +| lock | DoorLock | Support for `lock / unlock`. | | sensor | TemperatureSensor | All sensors that have `Celsius` and `Fahrenheit` as their `unit_of_measurement`. | | sensor | HumiditySensor | All sensors that have `%` as their `unit_of_measurement` | | switch / remote / input_boolean / script | Switch | All represented as switches. | From bba777df3f6aece9c0e4ef33918de35e38a5c429 Mon Sep 17 00:00:00 2001 From: Elelabs-maintainer <37191432+Elelabs-maintainer@users.noreply.github.com> Date: Mon, 9 Apr 2018 20:37:27 +0300 Subject: [PATCH 198/371] Add 2 new supported hardware platforms (#5135) Raspberry Pi Shield and USB adapter, compatible with Home Assistant and `bellows` python library. Based on Silabs EM35X MCU, compatible with ezsp protocol. --- source/_components/zha.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_components/zha.markdown b/source/_components/zha.markdown index f751532e70..0e769fc6a4 100644 --- a/source/_components/zha.markdown +++ b/source/_components/zha.markdown @@ -26,8 +26,10 @@ There is currently support for the following device types within Home Assistant: Known working ZigBee radios: -- Nortek/GoControl Z-Wave & Zigbee USB Adaptor - Model HUSBZB-1 +- Nortek/GoControl Z-Wave & Zigbee USB Adapter - Model HUSBZB-1 - XBee Series 2C +- [Elelabs ZigBee USB Adapter](https://elelabs.com/products/elelabs_usb_adapter.html) +- [Elelabs ZigBee Raspberry Pi Shield](https://elelabs.com/products/elelabs_zigbee_shield.html) To configure the component, a `zha` section must be present in the `configuration.yaml`, and the path to the serial device for the radio and path to the database which will persist your network data is required. From 85be6ed99c896c16b970c686dc05610a63154151 Mon Sep 17 00:00:00 2001 From: Johann Kellerman Date: Mon, 9 Apr 2018 20:02:21 +0200 Subject: [PATCH 199/371] New Qwikswitch sensors (#5128) New config according to: home-assistant/pull/13622 --- source/_components/qwikswitch.markdown | 27 ++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/source/_components/qwikswitch.markdown b/source/_components/qwikswitch.markdown index 516658404a..8889e29fbc 100644 --- a/source/_components/qwikswitch.markdown +++ b/source/_components/qwikswitch.markdown @@ -60,13 +60,32 @@ On some QS Mobile servers button events are only generated for switches added to ### {% linkable_title Qwikswitch Sensors %} -Some Qwikswith devices might support more than one channel per device (i.e. ipmod). The channel can be specified by appending a number to the QS_id. Example sensors configuration: +The sensor configuration is a list of sensors. Each sensor is configured with the following parameters: + +- **name** (*Required*): The sensor name from which the entity_id will be derived. +- **id** (*Required*): A QS_Id +- **type** (*Required*): The Qwikswitch sensor type. These could include: + - imod (up to 6 channels) + - door (single channel) + - qwikcord (Channel1 = CTavg, Channel 2 = CTsum) +- **channel** (*Optional, default=1*): The channel of interest. Refer to type above. + + +Example sensor configuration: ```yaml qwikswitch: ... sensors: - door_sensor: '@0dev01' - door2_sensor: '@0dev02.1' - door3_sensor: '@0dev02.2' + - name: door sensor + id: "@id03" + type: door + - name: Imod 1 sensor + id: "@id02" + channel: 1 + type: imod + - name: Imod 2 sensor + id: "@id02" + channel: 2 + type: imod ``` From e3c6e65f19633b3292d64e1f80c4902fe3ee8d32 Mon Sep 17 00:00:00 2001 From: brkr19 Date: Mon, 9 Apr 2018 13:14:49 -0500 Subject: [PATCH 200/371] Add example file attachment parameters (#5134) --- source/_components/notify.pushover.markdown | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/_components/notify.pushover.markdown b/source/_components/notify.pushover.markdown index 7e7680db7e..0b4bc520bb 100644 --- a/source/_components/notify.pushover.markdown +++ b/source/_components/notify.pushover.markdown @@ -47,6 +47,11 @@ Example Automation: url: "https://www.home-assistant.io/" sound: pianobar priority: 0 + file: + url: !secret camera_still_image + auth: basic + username: !secret camera_username + password: !secret camera_password ``` Component specific values in the nested `data` section are optional. From 89406e3ea043d6862db0f7222f5f6baf2bb2459c Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 9 Apr 2018 19:15:34 +0100 Subject: [PATCH 201/371] Consistency update (#5136) It was pointed out that everywhere else `entity_id:` is in the `data:` section for `light.turn_on`. Updating the example here to be consistent with that. --- source/_docs/automation/action.markdown | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/source/_docs/automation/action.markdown b/source/_docs/automation/action.markdown index ce9d7c9e05..0df212be7c 100644 --- a/source/_docs/automation/action.markdown +++ b/source/_docs/automation/action.markdown @@ -22,13 +22,12 @@ automation: event: sunset action: service: light.turn_on - entity_id: - - light.kitchen - - light.living_room data: brightness: 150 rgb_color: [255, 0, 0] - + entity_id: + - light.kitchen + - light.living_room automation 2: # Notify me on my mobile phone of an event trigger: From bbb4af9c7b2af3f3deb8a29265f3fb83e477f0e1 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Tue, 10 Apr 2018 20:06:45 +0200 Subject: [PATCH 202/371] Revert "Consistency update (#5136)" This reverts commit 89406e3ea043d6862db0f7222f5f6baf2bb2459c. From a9569af0a42d64329d3eb92f3c236cfca9fb1ab4 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Tue, 10 Apr 2018 20:06:45 +0200 Subject: [PATCH 203/371] Revert "Add example file attachment parameters (#5134)" This reverts commit e3c6e65f19633b3292d64e1f80c4902fe3ee8d32. --- source/_components/notify.pushover.markdown | 5 ----- 1 file changed, 5 deletions(-) diff --git a/source/_components/notify.pushover.markdown b/source/_components/notify.pushover.markdown index 0b4bc520bb..7e7680db7e 100644 --- a/source/_components/notify.pushover.markdown +++ b/source/_components/notify.pushover.markdown @@ -47,11 +47,6 @@ Example Automation: url: "https://www.home-assistant.io/" sound: pianobar priority: 0 - file: - url: !secret camera_still_image - auth: basic - username: !secret camera_username - password: !secret camera_password ``` Component specific values in the nested `data` section are optional. From f147350ab457a8405dc4d7b5c5daf6080dacea79 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 10 Apr 2018 20:56:57 +0200 Subject: [PATCH 204/371] Update addon_config.markdown --- .../developers/hassio/addon_config.markdown | 62 ++++++++++--------- 1 file changed, 32 insertions(+), 30 deletions(-) diff --git a/source/developers/hassio/addon_config.markdown b/source/developers/hassio/addon_config.markdown index cf91e022b4..d249de967e 100644 --- a/source/developers/hassio/addon_config.markdown +++ b/source/developers/hassio/addon_config.markdown @@ -106,37 +106,39 @@ The config for an add-on is stored in `config.json`. } ``` -| Key | Required | Description | -| --- | -------- | ----------- | -| name | yes | Name of the add-on -| version | yes | Version of the add-on -| slug | yes | Slug of the add-on -| description | yes | Description of the add-on -| arch | no | List of supported arch: `armhf`, `aarch64`, `amd64`, `i386`. Default all. -| url | no | Homepage of the addon. Here you can explain the add-ons and options. -| startup | yes | `initialize` will start addon on setup of Hass.io. `system` is for things like databases and not dependent on other things. `services` will start before Home Assistant, while `application` is started afterwards. Finally `once` is for applications that don't run as a daemon. -| webui | no | A URL for web interface of this add-on. Like `http://[HOST]:[PORT:2839]/dashboard`, the port needs the internal port, which will be replaced with the effective port. It is also possible to bind the proto part to a config options with: `[PROTO:option_name]://[HOST]:[PORT:2839]/dashboard` and he lookup if they is True and going to `https`. -| boot | yes | `auto` by system and manual or only `manual` +| Key | Type | Required | Description | +| --- | ---- | -------- | ----------- | +| name | string | yes | Name of the add-on +| version | string | yes | Version of the add-on +| slug | string | yes | Slug of the add-on +| description | string | yes | Description of the add-on +| arch | array | no | List of supported arch: `armhf`, `aarch64`, `amd64`, `i386`. Default all. +| url | url | no | Homepage of the addon. Here you can explain the add-ons and options. +| startup | bool | yes | `initialize` will start addon on setup of Hass.io. `system` is for things like databases and not dependent on other things. `services` will start before Home Assistant, while `application` is started afterwards. Finally `once` is for applications that don't run as a daemon. +| webui | string | no | A URL for web interface of this add-on. Like `http://[HOST]:[PORT:2839]/dashboard`, the port needs the internal port, which will be replaced with the effective port. It is also possible to bind the proto part to a config options with: `[PROTO:option_name]://[HOST]:[PORT:2839]/dashboard` and he lookup if they is True and going to `https`. +| boot | string | yes | `auto` by system and manual or only `manual` | ports | no | Network ports to expose from the container. Format is `"container-port/type": host-port`. -| host_network | no | If that is True, the add-on run on host network. -| host_ipc | no | Default False. Allow to share the IPC namespace with others. -| host_dbus | no | Default False. Map Host dbus service into add-on. -| devices | no | Device list to map into the add-on. Format is: `::`. i.e. `/dev/ttyAMA0:/dev/ttyAMA0:rwm` -| auto_uart | no | Default False. Auto mapping all UART/Serial device from host into add-on. -| hassio_api | no | This add-on can access to Hass.io REST API. It set the host alias `hassio`. -| homeassistant_api | no | This add-on can access to Hass.io Home-Assistant REST API proxy. Use `http://hassio/homeassistant/api`. -| privileged | no | Privilege for access to hardware/system. Available access: `NET_ADMIN`, `SYS_ADMIN`, `SYS_RAWIO`, `SYS_TIME`, `SYS_NICE` -| map | no | List of maps for additional Hass.io folders. Possible values: `config`, `ssl`, `addons`, `backup`, `share`. Defaults to `ro`, which you can change by adding `:rw` to the end of the name. -| environment | no | A dict of environment variable to run add-on. -| audio | no | Boolean. Mark this add-on to use internal an audio system. The available environment variables are `ALSA_INPUT` and `ALSA_OUTPUT` which provide internal information to access alsa. -| gpio | no | Boolean. If this is set to True, `/sys/class/gpio` will map into add-on for access to GPIO interface from kernel. Some library need also `/dev/mem` and `SYS_RAWIO` for read/write access to this device. -| stdin | no | Boolean. If that is enable, you can use the STDIN with Hass.io API. -| legacy | no | Boolean. If the docker image have no hass.io labels, you can enable the legacy mode to use the config data. -| options | yes | Default options value of the add-on -| schema | yes | Schema for options value of the add-on. It can be `False` to disable schema validation and use custom options. -| image | no | For use with Docker Hub. -| timeout | no | Default 10 (second). The timeout to wait until the docker is done or will be killed. -| tmpfs | no | Mount a tmpfs file system in `/tmpfs`. Valide format for this option is : `size=XXXu,uid=N,rw`. Size is mandatory, valid units (`u`) are `k`, `m` and `g` and `XXX` has to be replaced by a number. `uid=N` (with `N` the uid number) and `rw` are optional. +| host_network | bool | no | If that is True, the add-on run on host network. +| host_ipc | bool | no | Default False. Allow to share the IPC namespace with others. +| host_dbus | bool | no | Default False. Map Host dbus service into add-on. +| devices | list | no | Device list to map into the add-on. Format is: `::`. i.e. `/dev/ttyAMA0:/dev/ttyAMA0:rwm` +| auto_uart | bool | no | Default False. Auto mapping all UART/Serial device from host into add-on. +| hassio_api | bool | no | This add-on can access to Hass.io REST API. It set the host alias `hassio`. +| homeassistant_api | bool | no | This add-on can access to Hass.io Home-Assistant REST API proxy. Use `http://hassio/homeassistant/api`. +| privileged | array | no | Privilege for access to hardware/system. Available access: `NET_ADMIN`, `SYS_ADMIN`, `SYS_RAWIO`, `SYS_TIME`, `SYS_NICE` +| apparmor | bool | no | Enable or disable AppArmor support. If it is enable, you can also use custom profiles. +| seccomp | bool | no | Enable or disable Seccomp support. If it is enable, you can also use custom profiles. +| map | list | no | List of maps for additional Hass.io folders. Possible values: `config`, `ssl`, `addons`, `backup`, `share`. Defaults to `ro`, which you can change by adding `:rw` to the end of the name. +| environment | dict | no | A dict of environment variable to run add-on. +| audio | bool | no | Boolean. Mark this add-on to use internal an audio system. The available environment variables are `ALSA_INPUT` and `ALSA_OUTPUT` which provide internal information to access alsa. +| gpio | bool | no | Boolean. If this is set to True, `/sys/class/gpio` will map into add-on for access to GPIO interface from kernel. Some library need also `/dev/mem` and `SYS_RAWIO` for read/write access to this device. +| stdin | bool | no | Boolean. If that is enable, you can use the STDIN with Hass.io API. +| legacy | bool | no | Boolean. If the docker image have no hass.io labels, you can enable the legacy mode to use the config data. +| options | dict | yes | Default options value of the add-on +| schema | dict | yes | Schema for options value of the add-on. It can be `False` to disable schema validation and use custom options. +| image | string | no | For use with Docker Hub. +| timeout | integer | no | Default 10 (second). The timeout to wait until the docker is done or will be killed. +| tmpfs | string | no | Mount a tmpfs file system in `/tmpfs`. Valide format for this option is : `size=XXXu,uid=N,rw`. Size is mandatory, valid units (`u`) are `k`, `m` and `g` and `XXX` has to be replaced by a number. `uid=N` (with `N` the uid number) and `rw` are optional. ### {% linkable_title Options / Schema %} From ffb528dbd64f0f80d03a4044ed44e078aa643d0e Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 10 Apr 2018 20:57:30 +0200 Subject: [PATCH 205/371] Update addon_config.markdown --- source/developers/hassio/addon_config.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/hassio/addon_config.markdown b/source/developers/hassio/addon_config.markdown index d249de967e..7cf813b63d 100644 --- a/source/developers/hassio/addon_config.markdown +++ b/source/developers/hassio/addon_config.markdown @@ -112,7 +112,7 @@ The config for an add-on is stored in `config.json`. | version | string | yes | Version of the add-on | slug | string | yes | Slug of the add-on | description | string | yes | Description of the add-on -| arch | array | no | List of supported arch: `armhf`, `aarch64`, `amd64`, `i386`. Default all. +| arch | list | no | List of supported arch: `armhf`, `aarch64`, `amd64`, `i386`. Default all. | url | url | no | Homepage of the addon. Here you can explain the add-ons and options. | startup | bool | yes | `initialize` will start addon on setup of Hass.io. `system` is for things like databases and not dependent on other things. `services` will start before Home Assistant, while `application` is started afterwards. Finally `once` is for applications that don't run as a daemon. | webui | string | no | A URL for web interface of this add-on. Like `http://[HOST]:[PORT:2839]/dashboard`, the port needs the internal port, which will be replaced with the effective port. It is also possible to bind the proto part to a config options with: `[PROTO:option_name]://[HOST]:[PORT:2839]/dashboard` and he lookup if they is True and going to `https`. From 061c9bdfa143f67b14eed589d984a5854dbbeebf Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 10 Apr 2018 20:58:36 +0200 Subject: [PATCH 206/371] Update addon_config.markdown --- source/developers/hassio/addon_config.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/developers/hassio/addon_config.markdown b/source/developers/hassio/addon_config.markdown index 7cf813b63d..47dc50ce43 100644 --- a/source/developers/hassio/addon_config.markdown +++ b/source/developers/hassio/addon_config.markdown @@ -117,7 +117,7 @@ The config for an add-on is stored in `config.json`. | startup | bool | yes | `initialize` will start addon on setup of Hass.io. `system` is for things like databases and not dependent on other things. `services` will start before Home Assistant, while `application` is started afterwards. Finally `once` is for applications that don't run as a daemon. | webui | string | no | A URL for web interface of this add-on. Like `http://[HOST]:[PORT:2839]/dashboard`, the port needs the internal port, which will be replaced with the effective port. It is also possible to bind the proto part to a config options with: `[PROTO:option_name]://[HOST]:[PORT:2839]/dashboard` and he lookup if they is True and going to `https`. | boot | string | yes | `auto` by system and manual or only `manual` -| ports | no | Network ports to expose from the container. Format is `"container-port/type": host-port`. +| ports | dict | no | Network ports to expose from the container. Format is `"container-port/type": host-port`. | host_network | bool | no | If that is True, the add-on run on host network. | host_ipc | bool | no | Default False. Allow to share the IPC namespace with others. | host_dbus | bool | no | Default False. Map Host dbus service into add-on. @@ -125,7 +125,7 @@ The config for an add-on is stored in `config.json`. | auto_uart | bool | no | Default False. Auto mapping all UART/Serial device from host into add-on. | hassio_api | bool | no | This add-on can access to Hass.io REST API. It set the host alias `hassio`. | homeassistant_api | bool | no | This add-on can access to Hass.io Home-Assistant REST API proxy. Use `http://hassio/homeassistant/api`. -| privileged | array | no | Privilege for access to hardware/system. Available access: `NET_ADMIN`, `SYS_ADMIN`, `SYS_RAWIO`, `SYS_TIME`, `SYS_NICE` +| privileged | list | no | Privilege for access to hardware/system. Available access: `NET_ADMIN`, `SYS_ADMIN`, `SYS_RAWIO`, `SYS_TIME`, `SYS_NICE` | apparmor | bool | no | Enable or disable AppArmor support. If it is enable, you can also use custom profiles. | seccomp | bool | no | Enable or disable Seccomp support. If it is enable, you can also use custom profiles. | map | list | no | List of maps for additional Hass.io folders. Possible values: `config`, `ssl`, `addons`, `backup`, `share`. Defaults to `ro`, which you can change by adding `:rw` to the end of the name. From 342b99221d6360e5625dd0018011c2526e06bef0 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 10 Apr 2018 21:04:35 +0200 Subject: [PATCH 207/371] Add security infos --- source/developers/hassio/addon_presentation.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/developers/hassio/addon_presentation.markdown b/source/developers/hassio/addon_presentation.markdown index 413dd0489d..e57270040a 100644 --- a/source/developers/hassio/addon_presentation.markdown +++ b/source/developers/hassio/addon_presentation.markdown @@ -47,3 +47,7 @@ A changelog is a file which contains a curated, chronologically ordered list of If you are in need of a guide on keeping a changelog, we would recommend checking the [keep a changelog](http://keepachangelog.com) website. They have developed a standard that is used by many opensource projects around the world. In future versions of Hass.io, the `CHANGELOG.md` file will be displayed in the Home Assistant frontend. + +## {% linkable_title Extended Security %} + +You can use own security profile for you Add-on with Seccomp or AppArmor. Default it is enabled and use the docker default profile. Put `apparmor` or `seccomp.json` file into your Add-on folder and it will load this file as primary profile. From b356bfcc451ff4ed6509da12e1e17ed73cea1a19 Mon Sep 17 00:00:00 2001 From: Matthew Garrett Date: Tue, 10 Apr 2018 19:24:31 -0700 Subject: [PATCH 208/371] Add docs for the Eufy component (#5145) * Add docs for the Eufy component * Update version * Update version * Update version --- source/_components/eufy.markdown | 54 ++++++++++++++++++++++++ source/_components/light.eufy.markdown | 19 +++++++++ source/_components/switch.eufy.markdown | 19 +++++++++ source/images/supported_brands/eufy.png | Bin 0 -> 9536 bytes 4 files changed, 92 insertions(+) create mode 100644 source/_components/eufy.markdown create mode 100644 source/_components/light.eufy.markdown create mode 100644 source/_components/switch.eufy.markdown create mode 100644 source/images/supported_brands/eufy.png diff --git a/source/_components/eufy.markdown b/source/_components/eufy.markdown new file mode 100644 index 0000000000..c11870e401 --- /dev/null +++ b/source/_components/eufy.markdown @@ -0,0 +1,54 @@ +--- +layout: page +title: "Eufy" +description: "Instructions on how to integrate Eufy devices into Home Assistant." +date: 2018-05-09 19:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: eufy.png +ha_category: Hub +ha_release: 0.68 +--- + +The `eufy` component is the main component to integrate various [eufy](http://https://www.eufylife.com/) devices with Home Assistant. + +Supported devices will be discovered after the `eufy` component is configured: + +```yaml +# Example configuration.yaml entry +eufy: + username: testuser@domain + password: p4ssw0rd +``` + +where username and password are the ones configured in the EufyHome app. Alternately, Eufy devices that are not discoverable can be statically configured. + +```yaml +eufy: + devices: + - address: 192.168.1.10 + access_token: 1234567890abcdef + type: T1012 + name: Smart Light + - address: 192.168.1.11 + access_token: abcdef1234567890 + type: T1201 + name: Smart Switch +``` + +access_token can be obtained by running: + +``` +curl -H "Content-Type: application/json" -d '{"client_id":"eufyhome-app", "client_Secret":"GQCpr9dSp3uQpsOMgJ4xQ", "email":"USERNAME", "password":"PASSWORD"}' https://home-api.eufylife.com/v1/user/email/login | jq +``` + +replacing USERNAME and PASSWORD with the Eufy username and password. This will give an access_token. Then run: + +``` +curl -H token:TOKEN -H category:Home https://home-api.eufylife.com/v1/device/list/devices-and-groups | jq +``` + +replacing TOKEN with the access_token from the previous command. This will provide the local_code for each device. + diff --git a/source/_components/light.eufy.markdown b/source/_components/light.eufy.markdown new file mode 100644 index 0000000000..773d99f4aa --- /dev/null +++ b/source/_components/light.eufy.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "EufyLights" +description: "Instructions on how to integrate Eufy LED lights into Home Assistant." +date: 2018-05-09 19:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: eufy.png +ha_category: Light +ha_iot_class: "Local Polling" +ha_release: 0.68 +--- + +The `eufy` platform allows you to control your [Eufy](http://www.eufylife.com) lights from within Home Assistant. + +They will be automatically discovered if the [Eufy](/components/eufy/) component is enabled. + diff --git a/source/_components/switch.eufy.markdown b/source/_components/switch.eufy.markdown new file mode 100644 index 0000000000..22e56ae38b --- /dev/null +++ b/source/_components/switch.eufy.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "EufySwitch" +description: "Instructions on how to integrate Eufy switches into Home Assistant." +date: 2018-05-09 19:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: eufy.png +ha_category: Switch +ha_iot_class: "Local Polling" +ha_release: 0.68 +--- + +The `eufy` platform allows you to control your [Eufy](http://www.eufylife.com) switches from within Home Assistant. + +They will be automatically discovered if the [Eufy](/components/eufy/) component is enabled. + diff --git a/source/images/supported_brands/eufy.png b/source/images/supported_brands/eufy.png new file mode 100644 index 0000000000000000000000000000000000000000..98d647b056864213ec35a89bd7619d1a7a829805 GIT binary patch literal 9536 zcmZ{qcQ~7G^#AQuR5b{yHG&|mQJYe$b}J=FZ55+-?Y&1)tC||E5u}91Y^wHXji!pK z2C*q6Rja64zvuJ){rmmqx{~M0mFK$eJLkF2Iq&nj&l9t|`fMzGEL2ofY=#E9_krto z;O)o60DL-QGiQMdU4XWs1rzX!WO7LbzVim^SqGZ?x(0?gJw{Qv`S^OHt_M7Pj6(SY zxcdff(ROK2Q3+BR>S|epzTAv*3s^QFcwrW9xvzw~1}~qTpa1zi`^rNkJk%ld8jc0? ztW4La@RA&+TnD2|?f6P=&1E&G6;F|I?2c`UkNiW=3f{i=fy0`X!InzLkqzue%^IiR z*iA1(_dS-Hr~CiS<_0D*+dtq`{zqNlZL<@}?Y-B~iORHEc^x|N|Q;GvUu!c~O zH!)s(IH1BK8Df~jL;tB!8!=JZOuwmGN}*!T7K|IDYlP|KpscaXBLT7kSx$uvpdS?0 zcXa`;Y3(!6_vM2Uu-;=qUdDgxISd7Lm!w|MjF0BHs-)`5 z+@T@`Y3vf_xPWPuZ`+YlF<{LtxBL;F)Fm*&F5xTtv2*Haoy7CeAOT3V77|p2V@WhH zQ{c*c7*nvh02n8{**jg?u;GEPOwn+|6JcPeVe zMbkr*9xMPwQHx!s(L^|#^p0;E?SLCV3%cK z#6-M@87S$d)K!))VW&9!!^-RHLZ@dFz@Fo|W2a=$#G3wt#s4M7JLG0aE4Js*c4l^F z;gPD=!m%0XNYF!efkVeJ%4tO}PA08^Sp=l#zuihvZF%3>d#x)b0acidIx@y<)b#*n z0NIg*h;o)EvqUOR?NUh=v2rS_ac0&&aQucYtLHx+T~foh&|GZlQpIa=W@s8KQBIbR z9!#%cp~w5*9a7(U=qfWRi?O_ouz5pkss-kBs?1@z7}~o7z~CI-#_&ARU5qXqtyc3K zVhC)KxGgQxz7TxJi1ps)1&p^1NbgA_Z0uXmc@(_qD}t+YOKbew#r98KO3B^-;@v&c z)uqjp*xcU{tzV#c3-LX2Pwh*U7Xl+EEzPc!>cJbzK}*ZesbY=WE8oP>en|kH2@m~r zM@16E(9DIm5T|X97<35ahZYan^v|Twp-VfPO%n*-V_!3?;qTbT5;>r@->-we>iE54 z%xk>)JzC3}MuddJP2ZI26h2do6HP5fA$N2F;&3?l1lLBZ7P;B|9c{X~69}0sEHx_6 zg~RoZ27!~QO~)OqTvd7O+l}i@FE5CH_8A>a@ zks}7wT6)%g=Lezasq!=Q!CCRekN$jJ;9Nf#cu)@f8JJsc_!IT>V$PN)8NIL%wg)FJkigVHJxwXNjL3 z&xKm72Zy+XqEq6&YXbCcHdf*S!T!PRBiO-q1P!N>cy$F|81)Ck>5+<7d=CLe*O>z6 z5M+u3x3Xi34};ShKZFY`#hmYnV^W94MVbA)_)&<(cWpNAg~2;&hH=4I*y#H7$nj^-+Ip!dF{IhR@RPG zhUfphdf}wKWRc{RoGEvi4*`cGxByd8Ca-Z?JAs$$u4y({<3pL_G0+PZLG)yTmJ7{h zIgK%F4~Z5@dzk2yD3f;SwFFD&DWz3sK5==Ao{FqVqKUlCg?a*$29~k}(E|@Ksb4In z{PDTHrkwR0m85LQA_iN2diADOhaXKA%qOgYn6m{)%AzpRq?V^cx2*WTG#g~4sY2w!l%nT z_;ukKN6t?i4sYuE$G1c6K?c%E)@(&st>QInU+sLNC|>O0jIEuMDsP|vuO^7vM(Z8> z759S`kmNWbqcLGD%s^@O~{xNUVIUElt?Q2o4f0QXdBme-Eh0+nq%W zSduPpuXc0tc0$t{9@NPeNjEU-R3MYFK6k_GyzNGewIuZ5p#1A-gQhF+mq3W@nFu^t z^)8&m{vP?2{a3-q+euonZ?|iIhB3nL=~f2T8~&V&FWS}e5Pi>Swc2C4$CJv;lB-ww z4tlK~Mwv|;53&=<3Y3cII)v{lI1(bI{=7)tsZ7d3aWujk#+Ov zcAo{~&`0gTOKvxw;`^3gNc*R(WnI_f=+&@VzvNUdgKmIbZp9xa%hMnbBE*0SBm>ER zPP87Xd6)!GJQ>VaU=zrE*faX}S%|1FOD+07V2rNL^X^lxxF6xejAuJzP(x0TUR;@H zy~zcFcW)!?XJNmm_^&0sdJEJO3@+Q1mk4oH!ELl~y_me8=#+|s<@``N+dtki^Wg%Y zBwX=R`Ps@o5L8O}H>L#)HBzPO=XIg!=r_fijDZ>H`qPXA&3~LRe_5yKlzNhSb(jDP z&D_Ji8mXZ%W?lO6=;@SKT!ha?D69%X)rjeqGo2(bj|4f{aC>#mXo5tpfw`S2<;G>ryn@278xCh%m|l1rO);FiFKgQmq}J^Ug9*obmjK3WXwu?C#vvwSgI62o?* zutW}%I!TM;uOEy8?`IIA%k=IGu>0BC`7D)sG8ouN5M*-A1@R=RQc0-_k7*LaySis~ zHT0yQ+k@+FKdqiN15aXwp8JC9ZQ(}5aW;w*hxPBRR%FkOj?r8k>@%@)O5YW{}2<7%7 zCgN~e(b!zb4)gc;hh&3X7x8*kqf6pmUu%o7b)I%CVemgwpEoIjiMOo~%9*reg1v(4 zUG`c$C3{UJ`lNl!)ZoC1E%uf!5M5a!XXb2$wxg5@Y)MuJ_X?ge37H)+Ry~qbANe>D zm~j;OWXd^iKN%UkSq?R>RpO_DP0IfU%V!&3i-Ty5TZCpN_$rYWUa=P+aRswKNA3R7 zmB^$apq$iq;X7WhsWw$z!oC>Lc`%S0ZyX?l>{8@SFNqFWl0Xay#6tKDFQ1otg^0b1 z?u}M za>zR+AOiNdsK-BcrMWIdSBP~|XDRjI+r_vbD@ES&Xc-$dvHIs89N5va3oSauwYo3^ zrpbt>>T(T$ruDXD**r>7m#$~l3B}Xe3Z`gzq~LHzpYkzkxoj^p21fTuZ!Ei+!)vkL zNADjc{dg2)@fZ;GcjB_iS`n;wDL4vra4_``P|#aAj*4HJaVK*FdF-wIa^+F>NKMVHis2HYjGV*2xhVtFLwvn4Z0jwjS@^2Usg!$s%xr=;umz6ACGJ$49c0` zRaX3?H0`X(pWBXncizxs&~5zWJp}$tB=dd zvxe;r6;D}5f)*!zeX|d}=;|w*eu)Yq-rCgVqJC?w9k+D0#_uH4&YPF!VSM@zN}xzLz4G#PNkdey_^;9;m@J>8zNX;blV2OAPCdleARUWk@FG!`bMD?9%Avn!AQ z{6`-pBSSm@S$%doumye^FI1%=>w--7-~%6N?6xZpZZtkm%Au0qmoHnCt)E6DLrmeM z{VzB4$1Rk(FFfuWo&OUO%k#2fQc*^yf8Rij`GU41pXwcI&lwnTg}L!3Meys7nti^Q z=<~Rb&QBo3tkw&>$(fXOy7}KefKYS1sI^}$^r$#)>+tfz0nTC~$U#N}{Zf@4P(eO? zy8bhs6v9AO8D;y{#bkfmsxZl7*4j)@_obB@c_2Za{*-6VW+;!IHTff99Ghb7$KZyCLW z3^sbLDQLZAq1l=+Nsm(JweAgsj9jqLZ;4ID_XSgLE&5%I&0u1;JkpfdP@CZYO`c5=9{7#r81yY@_=}~4@#2L) z@>1mZwN|qcm#yuUHl~nD3@j^+o2@T)bJFad{B$V$#Z5IOpeO^RM0UlL7AF44K_>k3 zumX{)F!`)%jV88Jc6tHvS4EJJKtS~z-dg!VTg~T~wi;T4t)$dluCqiWDL=_s`*`;N zj%J39$9mhm^ouB_UmB9~YH=yYZgza6IB*{dnMILIrb( zXGdq@(!nat-jzE<@zz(*kXZthwvNlV@Z@Gd8i7W&64Su;z8uNkQQ z#E!!N#~+1^JlLqE79a#&VZ@f{XxwDm(i{H+CkdS0GE^-A-%aJ^^0|4ktuz_-B}m}p zV3Qm0X(#f*UWE5tXc=xJ;kqbQvv76y7Ks=3IlPYbLki z3y`0$7Fa=NlGImb)X;8yd0`c`yBE_CT6#6V_!nhaN%H4EOJB#^l>nP(TVJ4Dv}Fd8 z1Y5r(K9orxo8N6W;Hm-TfwlpDe%dXPfotAcBN1RxQFtO}(_o<7?>7^Lt#NotZNl-y zpE1=5Su>+!(6MZvac`77LnJ#>Wg<%Men-Q`mEw2%t#GT(@;Y*kSME8Od~vQQuTM6 zj6@pEh`%FQk@d8Fs{71WeP6gq+PrN0^v0}IttH|q26|DQc8&#opHzxtA-fuJGUeQ} zZ=|F(+}T*I?>0@PLm=`6_s0Bgd0mlN*fmr5PCG@oo|yB~YGNl-Q~@Z;z#pRyhoVwT zo<0M?IkzCM6AOmj|CIK((9y09MP-{XS&S(L)CpgQe3`m5LV1VTdRhq`C9vMQr-wug zDkq_=n1(2RxKDO>uZ8&*=TBX1-z4a~xEuNBjZ2#jHWh+zIA1EE?wJj^a$MS@O_npA zaBT|9%a8U7gYy@F zcAAgreQ5OHWuE_@dAVL%I8LzKxIP=wD(1i-@K3`zOG|jgFzcv`pUFz9g}^o+a4}dC zg>-s9C%C3fI(0J-z}_iD4er^^7GtaHO=v~t)k^QZ+P_*HnbRZ%AdihLOAu;gQFS%( z7(R)25M37M|IK-oHg6zynzL1DwLaFA_Pdu~T)4FXXwyRqK^2=Nf9uQ`#GG z`NB61gQ3uCPqE%pkDg;wmse!!LA;7xuV1^+$jxVRuKV%N>?+o0=!CuR=6uDGRed3x z;WJ}1Pt?Up8$}njxQ|g%x$-*pR|@3@Hy80bHF)?}RX8@+O6mHe^9@#?Jz8PjFMqtsrzkOH~z!%k#V@<#Xi+RT4- z5J+u(DTQ+E7SckJ|ISG|Y=0&2EcDDHS2%P0)th3!&}pw;ff#P|rx#)Gp1mvjsGj1c z$tFy!zwYYdThM=(vz(#|AYcHwn1Y3*)6&7PP7vnw9{L9$pAB+<2{s55KX(VL9FOqH zNu~kes}!1I+lwY!xrIeHzZrf1`?XKLx}ALQT$hF^qO9|w=hz`#la0*6@m1JEtFpUo z?1pIB{_y|Ua9%K!$l~$k!M@M6dw`rN;|GH2Y7&1Vtu!;tFy4c&-DvYFM79vCHOL=Y zr?eRN;y40BTVn^Puhl)#-AK|)-CE1cVcnqQvp=-19qrcfI&;%mhn9oLFSppPZQVZS zPA!IGMEW)45vUFC{gU_2%tU&p(|XOY|J*b)!h8f@K1igII27?Br!-XIBw=LrBIM_Q z(1Y=xr<30NB&*B$t3LmlXp1`fp#6sc&zVZR_IU1*O&YGY-Wukw=^#klOSl2m&9%NJ z{`>2(?MFK_v%Fmr>gr*{Na)3t(@$sbvr#I~D%VstR%KLN9{-Tax#6~aI%WpCbL;UH zZVvLpI^4$Gvo4r%bDm-1{o?v*(HXhwv9kzU7HP4?2iPY=F02EDi+nB2Hr2;dSJEe1 zeF5dYV(I$9S}5)E%m|P58>L&GIA03?EqM>}W4Ksas!(e%gDGcuT{=rso?pjL!HO&}*zTBA*?{V!$@!sg;>HxWJPDBQ__bHA{-VTMwyHH{fTp65`&;usF@Wn0Z;Hcv%t)Q>liA=g z=}UBbKUjzp3?9LunuRzaCiPWWyrM>bKM|hL>XVI~ zy1T&q+V%U?%4z$t!xd}JNxe*(5>H#JIU;G*%n7!PaZ;p})dLZ$P z({3)Rhn#=dcIvlPMT6b6=DHkmimk?{Rba$pRZ^;v^UX@xK62&vUMSE zmCw|?9AA?FiYRpbJ2h91d$c+%!|qtb9cUNxE#yQ?bkwh87Z`=5W}jilzSVjr%L&Y+ zo`vivaCkkIfP>bD@*K+#bL_f_1RFVlgobw$rk`UyfO-cu9%)5vd$vC)r)e^0dk=uF z05;G2P(?}6z&BHF7cn@2%ArPiTs4O)delTYr=JWKh(#l(_aze_O?@M%g7Yxm5`~2I zVVz}2Pxxi$jyXXiPK%eP?QDk5$eSfaUo!O1Y7Ad2QAI^5XuX7(h!t0;5$LtG$M2_M zpa7M%O&QLMH#o_5$qs*$zwK?3o2N9EZq0K@yCfsRmUTyi?0h`;;t@tXU=FvYlA22g zzj8QIT%9h#R2@8x|J2B;GrkZp*A`L~HX&Y)`vrr~H)liQS4S8Oi>}H@>t0+qo}wv| z=>>2cd;#D$e~T|Xd)=TXaEDb*)={F;{ZVkH(KyHn^ss|@>Q`Rl(v~bCg~?+6aQk>x zzz6@j{yN3 z^DuA%^Fn{L+$6a7=;=EprIy0Goi1%wuKJrjPn}Pu&6}I3$Wg91Tz8{M3!e5=;E|OY z>EEE5FbNUG&fx=Jhr)k1E0M&V2FBxt} zs@mW~AcUk@2>*7dTQtirq*83O~I)hrsU5mrF4h|PHO{&W-lM^?!V zXm7aj-%t*1YaPbBE8f!#Y-<8niy(=SV%xW7=437lkQ?U$rDLo(iUk70YF=%A*BlUx zwj_;gdF))7Ykn~r#3nMun8WN+;OEclY13LV#F_A>R`SFBuT~RWddavdGenX&7bMUz z;jUL5t~D%hftl$V?O4t!d6o@3&a6&CnbwTdvt>h`?0sgUVwQ9ImxIA&+B=NPpCrV* zD$}ef_o(;202KZw!6A$!|1V~}Kf@XE9a{%&Nh3_XZRANsiumkrg__G8XE3x!Z@_F* zGnFcr?_32jt(R=aIf;I9P16mCeW}m--jsFsNm`cSML`uy&bOk!Y~(+FSAKHNKEfF} zwfOx508Q|(FPn%xMAP>k*;aJV6Xn?=+d5nm<{E)CRL@)qEsjZeal*zVM)+to=LwWQ zEx*@?UX*X0f7laLNA4jzHctmr*C$#KI&SwbQoTlXKl+F9++?PhrUkZkKL z)F;PQ`@NRoS%B+712Q{p_pcOkM_bx8pCOW@$MH8mQ~%UypR*|ss{AR@QGT}!$HJ;J zAjbN>OFOQy_TS#TG58#|H~5QD-ZZJ2ABd`23qS#!kwBH~bVbJAKH{{o7e>&-*|!K> z(k|uy2j84^i!-Cj(x=}0kXrC3IwJ6i?4q(FjMDynO#0*0SEDpcH^Am+63BbDGb7yA zZ%AscPony_xX4d8c`aI&rqM}5E*X>>X1v&CLP>OraA|2+Lo(_HCiL6ooN{F?v~0qt zYfV1vET$!kJy$n;{HopfqB1+pd|xQ2d#}ZI?K7>;vA2vP&_B@sUoU`_!rx-@-W7=u z#_wU`5##ER_GmHp!ZbKXx7_ctDoIbpE`?$cB95XiulhGtO(mk!(r*%kSo|<60Wdj` z_-6vH)@)*b=#z~$lk@?uHj3kgcLe^zNRZ=p!9jvG4yY$;nJ@-QHDa9N0-t}M~t%}5{mA4Tf_rm@n z6DZF$RvhNGzZX@krwz0Qr`e`V*ss02*(dZRCSw0y54#*2?Q*OHSmV);4)-K@4ho88 z9UqnDWvnV>`61Y{mOAEw{7hC<2Xl_sj+tKnl)o2UFKqSl%Lz@5W=7UfK<<1H zV{MrB%Eo$}M`=UA$?PO2La?;AQK&~`W(`U#w?!WZrwE32Sgln4&l2b>Gq!j>?!e0@ z1_bGv$A`f4KE6BTcWw8)>u&wGMB4Ef+1_8~rW5o`7sX7?7ggCK=ldpHSmzH*qn1i( zl7YFt2qwzVUY*}GY|gvy>hSsWHpDPq7qUwDut{@AD|SfPQ6p|^a%SOecI(K-7v+U( z%tEIC!AhTCfrB(Bmv<&i%n|Omepst1E#c!#y{^dK$W@E~8ih2dglCIUD!xqfG#&5C z=#cR63ycW!2yt?k&TZ!Z-&M4I#6m^Oa6 Date: Wed, 11 Apr 2018 06:06:53 -0400 Subject: [PATCH 209/371] Adds attributes table to VeSync wiki (#5151) --- source/_components/switch.vesync.markdown | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/source/_components/switch.vesync.markdown b/source/_components/switch.vesync.markdown index d3b5971636..83041ca78b 100644 --- a/source/_components/switch.vesync.markdown +++ b/source/_components/switch.vesync.markdown @@ -12,7 +12,9 @@ ha_category: Switch ha_release: 0.66 --- -The `vesync` switch platform enabled integration with Etekcity VeSync smart switches. +The `vesync` switch platform enables integration with Etekcity VeSync smart switches. + +VeSync switches are low-cost wifi smart plugs that offer energy monitoring and work with popular voice assistants. To use your VeSync switches, you must first register your switches with the VeSync app. Once registration is complete you must add the following to your `configuration.yaml` file: @@ -20,8 +22,8 @@ To use your VeSync switches, you must first register your switches with the VeSy # Example configuration.yaml entry switch: - platform: vesync - username: username - password: password + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` {% configuration %} @@ -34,3 +36,16 @@ password: required: true type: string {% endconfiguration %} + +### {% linkable_title Exposed Attributes %} + +VeSync switches will expose the following details. + +| Attribute | Description | Example | +| ------------------- | ------------------------------------------------------------------- | --------------- | +| `current_power_w` | The present power consumption of the switch in watts. | 100 | +| `today_energy_kwh` | The kilowatt hours used by the switch during the previous 24 hours. | 0.12 | +| `connection_status` | The connection status of the switch. | online | +| `connection_type` | The connection type of the switch. | wifi | +| `device_type` | The device type of the switch. | wifi-switch-1.3 | +| `model` | The model of the switch. | wifi-switch | From bc0b6a3f43cc2e2eb6664d9d78fcd9959e5eef1c Mon Sep 17 00:00:00 2001 From: Marco Orovecchia Date: Thu, 12 Apr 2018 09:27:08 +0200 Subject: [PATCH 210/371] Rename light platform from aurora to nanoleaf_aurora (#5158) --- source/_components/light.nanoleaf_aurora.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/light.nanoleaf_aurora.markdown b/source/_components/light.nanoleaf_aurora.markdown index 074bd1c77f..4f066dc7b2 100644 --- a/source/_components/light.nanoleaf_aurora.markdown +++ b/source/_components/light.nanoleaf_aurora.markdown @@ -21,7 +21,7 @@ To enable the Aurora lights, add the following lines to your `configuration.yaml ```yaml # Example configuration.yaml entry light: - - platform: aurora + - platform: nanoleaf_aurora host: 192.168.1.10 token: xxxxxxxxxxxxxxxxxxxxx ``` From 97525ba3eba6cb08d3478a12792bd346962205ae Mon Sep 17 00:00:00 2001 From: DubhAd Date: Thu, 12 Apr 2018 12:38:03 +0100 Subject: [PATCH 211/371] Moved the Python warning (#5157) Moved the Python version warning to the top of the page, and made it a warning --- source/_docs/installation/synology.markdown | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/source/_docs/installation/synology.markdown b/source/_docs/installation/synology.markdown index 808a4e77de..454dcd8858 100644 --- a/source/_docs/installation/synology.markdown +++ b/source/_docs/installation/synology.markdown @@ -10,6 +10,10 @@ footer: true redirect_from: /getting-started/installation-synology/ --- +

+Synology only provide Python 3.5.1, which is not compatible with Home Assistant 0.65.0 or later. Until Synology offer an updated version of Python, Home Assistant 0.64 is the most recent version that will be able to be installed. You can manually specify the version of Home Assistant to install, for example to install version 0.64.3 you would do `./python3 -m pip install homeassistant==0.64.3` +

+ There are 2 alternatives, when using Home Assistant on Synology NAS: 1. using Docker 2. directly running on DSM @@ -26,7 +30,7 @@ Running these commands will: Using the Synology webadmin: - - Install python3 using the Synology Package Center (be aware, this provides 3.5.1, which is not compatible with Home Assistant 0.65.0 or later) + - Install python3 using the Synology Package Center - Create homeassistant user and add to the "users" group SSH onto your synology & login as admin or root @@ -51,16 +55,12 @@ Install PIP (Python's package management system) # ./python3 -m ensurepip ``` -Use PIP to install Homeassistant package +Use PIP to install Homeassistant package 0.64.3 ```bash -# ./python3 -m pip install homeassistant +# ./python3 -m pip install homeassistant==0.64.3 ``` -

-Until Synology offer an updated version of Python, Home Assistant 0.64 is the most recent version that will be able to be installed. You can manually specify the version of Home Assistant to install, for example to install version 0.64.3 you would do `./python3 -m pip install homeassistant==0.64.3` -

- Create homeassistant config directory & switch to it ```bash From fe1ce5a19b92443c621619e14e6853c6631380d1 Mon Sep 17 00:00:00 2001 From: bvansambeek <35294853+bvansambeek@users.noreply.github.com> Date: Thu, 12 Apr 2018 13:38:42 +0200 Subject: [PATCH 212/371] Tip to use external broker for more stability (#5159) An external broker is more stable, this is something I did not know as a beginner. Especially because the embedded broker has a memory leak. It would have saved me a bunch of time and WAF trust issues if I would have had this piece of knowledge. Issue on memory leak: https://github.com/home-assistant/home-assistant/issues/11594 --- source/_components/mqtt.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/mqtt.markdown b/source/_components/mqtt.markdown index c3f4149342..275cac866e 100644 --- a/source/_components/mqtt.markdown +++ b/source/_components/mqtt.markdown @@ -33,6 +33,10 @@ mqtt: broker: IP_ADDRESS_BROKER ``` +

+The minimal setup uses the embedded MQTT broker, however a separate broker is advised for more stability. +

+ ## {% linkable_title Additional features %} - [Certificate](/docs/mqtt/certificate/) From 15aabd066cbf9e0edf85a8d657361c736aac36be Mon Sep 17 00:00:00 2001 From: Yonsm Date: Thu, 12 Apr 2018 21:02:03 +0800 Subject: [PATCH 213/371] Add CO2/PM2.5/Light sensors in HomeKit (#5146) * Add CO2/PM2.5/Light sensors in HomeKit * Added temperature and humidity device classes --- source/_components/homekit.markdown | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index d3ee4c773f..b752f52622 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -199,8 +199,11 @@ The following components are currently supported: | cover | WindowCovering | All covers that support `set_cover_position`. | | light | Light | Support for `on / off`, `brightness` and `rgb_color`. | | lock | DoorLock | Support for `lock / unlock`. | -| sensor | TemperatureSensor | All sensors that have `Celsius` and `Fahrenheit` as their `unit_of_measurement`. | -| sensor | HumiditySensor | All sensors that have `%` as their `unit_of_measurement` | +| sensor | TemperatureSensor | All sensors that have `Celsius` and `Fahrenheit` as their `unit_of_measurement` or `temperature` as their `device_class`. | +| sensor | HumiditySensor | All sensors that have `%` as their `unit_of_measurement` or `humidity` as their `device_class`. | +| sensor | AirQualitySensor | All sensors that have `pm25` as part of their `entity_id` or `pm25` as their `device_class` | +| sensor | CarbonDioxideSensor | All sensors that have `co2` as part of their `entity_id` or `co2` as their `device_class` | +| sensor | LightSensor | All sensors that have `lm`/`lux` as their `unit_of_measurement` or `light` as their `device_class` | | switch / remote / input_boolean / script | Switch | All represented as switches. | From ee8090a9e178c0cfea1a2ee73468a8ef49c7f070 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 12 Apr 2018 09:53:42 -0400 Subject: [PATCH 214/371] Add blog post about Ubiquiti --- ...04-12-ubiquiti-and-home-assistant.markdown | 37 ++++++++++++++++++ .../paulus.jpg | Bin 0 -> 73854 bytes 2 files changed, 37 insertions(+) create mode 100644 source/_posts/2018-04-12-ubiquiti-and-home-assistant.markdown create mode 100644 source/images/blog/2018-04-ubiquiti-and-home-assistant/paulus.jpg diff --git a/source/_posts/2018-04-12-ubiquiti-and-home-assistant.markdown b/source/_posts/2018-04-12-ubiquiti-and-home-assistant.markdown new file mode 100644 index 0000000000..045f30c196 --- /dev/null +++ b/source/_posts/2018-04-12-ubiquiti-and-home-assistant.markdown @@ -0,0 +1,37 @@ +--- +layout: post +title: "Home Assistant 🤝 Ubiquiti Networks" +description: "Ubiquiti Networks has hired Paulus Schoutsen, the founder of Home Assistant, to support Home Assistant’s goals of making Home Assistant easier to configure for users, improving the integration with device makers and making it easier to create, maintain and evolve integrations." +date: 2018-04-12 00:01:00 +date_formatted: "April 12, 2018" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Announcements +og_image: /images/blog/2018-04-ubiquiti-and-home-assistant/paulus.jpg +--- + +TL;DR: Ubiquiti Networks has hired Paulus Schoutsen, the founder of Home Assistant, to support Home Assistant’s goals of making Home Assistant easier to configure for users, improving the integration with device makers and making it easier to create, maintain and evolve integrations. + +Home Assistant is an open source project that thus far has been run by people in their spare time. In the last four and a half years it has grown from just me building a tiny framework with a handful of integrations to having our own operating system, over a 1000 integrations, superb performance, contributions by over 900 people, and our main Docker image has been pulled over 10 million times! + +Observing this growth and passionate community, Ubiquiti Networks approached us. + +Ubiquiti Networks currently focuses on 3 main technologies: high-capacity distributed Internet access, unified information technology, and next-gen consumer electronics for home and personal use. Their enterprise quality combined with their affordability has made them very popular among our users. They also share another passion of ours: trying to avoid clouds. Take for example their [UniFi Video] IP surveillance solution: it is a completely local hosted solution. + +They recognize great potential in Home Assistant becoming the defacto platform for the home: fast, open source and local. They also want to deepen the integration of Ubiquiti Networks products in Home Assistant and may even support hosting Home Assistant instances on their hardware. + +And so we have agreed that I (Paulus, founder Home Assistant) will join Ubiquiti Networks as a full time employee to focus on growing Home Assistant. I’ll now be able to devote my full energy to making Home Assistant easier to configure for users, improving the integration with device makers and making it easier to create, maintain and evolve integrations. + +Ubiquiti Networks will not acquire any ownership of Home Assistant. We will remain an independent and open source project, just improving faster than ever with the support of Ubiquiti Networks. + +I’m very excited about this opportunity and 2018 will be a really really great year for Home Assistant! + +

+ Photo of Paulus, the founder of Home Assistant, standing in front of a Ubiquiti Networks logo wearing a Home Assistant t-shirt. + Paulus Schoutsen, founder of Home Assistant, at the NYC Ubiquiti office. +

+ +[UniFi Video]: https://www.ubnt.com/unifi-video/unifi-video-camera-g3/#unifi-video-camera-hybrid-technology diff --git a/source/images/blog/2018-04-ubiquiti-and-home-assistant/paulus.jpg b/source/images/blog/2018-04-ubiquiti-and-home-assistant/paulus.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2a4e3d885f8c8cf7b70981ad5ec259f9f34d17a1 GIT binary patch literal 73854 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 Date: Thu, 12 Apr 2018 10:59:10 -0400 Subject: [PATCH 215/371] Updated spelling dedicate to dedicated Spelling mistake. --- source/_components/device_tracker.unifi.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/device_tracker.unifi.markdown b/source/_components/device_tracker.unifi.markdown index 5ef8d4edc7..e941066770 100644 --- a/source/_components/device_tracker.unifi.markdown +++ b/source/_components/device_tracker.unifi.markdown @@ -80,7 +80,7 @@ The Unifi controller allows you to create multiple users on it besides the main The Unifi controller can either be a dedicated hardware device (Unifi's cloud key), or as software any Linux system. If you run the the Unifi controller on the same operating system as Home Assistant there may be conflicts in ports if you have the MQTT component as well. -It is recommended that you run the Unifi controller in a dedicate virtual machine to avoid that situation. +It is recommended that you run the Unifi controller in a dedicated virtual machine to avoid that situation. ### {% linkable_title Troubleshooting and Time Synchronization %} From e4c97ce3226c3d94a924daf5bf7677ddeeb272db Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Thu, 12 Apr 2018 17:01:11 +0200 Subject: [PATCH 216/371] Update addon_config.markdown --- source/developers/hassio/addon_config.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/hassio/addon_config.markdown b/source/developers/hassio/addon_config.markdown index 47dc50ce43..bc4870f862 100644 --- a/source/developers/hassio/addon_config.markdown +++ b/source/developers/hassio/addon_config.markdown @@ -130,7 +130,7 @@ The config for an add-on is stored in `config.json`. | seccomp | bool | no | Enable or disable Seccomp support. If it is enable, you can also use custom profiles. | map | list | no | List of maps for additional Hass.io folders. Possible values: `config`, `ssl`, `addons`, `backup`, `share`. Defaults to `ro`, which you can change by adding `:rw` to the end of the name. | environment | dict | no | A dict of environment variable to run add-on. -| audio | bool | no | Boolean. Mark this add-on to use internal an audio system. The available environment variables are `ALSA_INPUT` and `ALSA_OUTPUT` which provide internal information to access alsa. +| audio | bool | no | Boolean. Mark this add-on to use internal an audio system. The ALSA configuration for this add-on will be mount automatic. | gpio | bool | no | Boolean. If this is set to True, `/sys/class/gpio` will map into add-on for access to GPIO interface from kernel. Some library need also `/dev/mem` and `SYS_RAWIO` for read/write access to this device. | stdin | bool | no | Boolean. If that is enable, you can use the STDIN with Hass.io API. | legacy | bool | no | Boolean. If the docker image have no hass.io labels, you can enable the legacy mode to use the config data. From 3876353d689cff79d1c81d8225272d5d23ade879 Mon Sep 17 00:00:00 2001 From: Matthew Rollings Date: Thu, 12 Apr 2018 17:07:56 +0100 Subject: [PATCH 217/371] Seconds should be milliseconds The documentation said seconds instead of milliseconds --- source/_components/vacuum.xiaomi_miio.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/vacuum.xiaomi_miio.markdown b/source/_components/vacuum.xiaomi_miio.markdown index 51fd5dd9c8..c8f9f7c872 100644 --- a/source/_components/vacuum.xiaomi_miio.markdown +++ b/source/_components/vacuum.xiaomi_miio.markdown @@ -81,7 +81,7 @@ Remote control the robot. Please ensure you first set it in remote control mode | `entity_id` | yes | Only act on specific robot; default targets all | | `velocity` | no | Speed: between -0.29 and 0.29 | | `rotation` | no | Rotation: between -179 degrees and 179 degrees | -| `duration` | no | The number of seconds that the robot should move for | +| `duration` | no | The number of milliseconds that the robot should move for | ### {% linkable_title Service `vacuum.xiaomi_remote_control_move_step` %} @@ -92,7 +92,7 @@ Enter remote control mode, make one move, stop, and exit remote control mode. | `entity_id` | yes | Only act on specific robot; default targets all | | `velocity` | no | Speed: between -0.29 and 0.29. | | `rotation` | no | Rotation: between -179 degrees and 179 degrees. | -| `duration` | no | The number of seconds that the robot should move for | +| `duration` | no | The number of milliseconds that the robot should move for | ## {% linkable_title Attributes %} From 96c997b7e19f1246192d2ad2b8f13a8f7fcaeece Mon Sep 17 00:00:00 2001 From: Mark Coombes Date: Thu, 12 Apr 2018 12:25:35 -0400 Subject: [PATCH 218/371] Add support for Garage Doors in HomeKit (#5155) --- source/_components/homekit.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index b752f52622..42b3180a00 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -196,6 +196,7 @@ The following components are currently supported: | alarm_control_panel | SecuritySystem | All security systems. | | binary_sensor | Sensor | Support for `CO2`, `Gas`, `Moisture`, `Motion`, `Occupancy`, `Opening` and `Smoke` device classes. Defaults to the `Occupancy` device class for everything else. | | climate | Thermostat | All climate devices. | +| cover | GarageDoorOpener | All covers that support `open` and `close` and have `garage` as their `device_class`. | | cover | WindowCovering | All covers that support `set_cover_position`. | | light | Light | Support for `on / off`, `brightness` and `rgb_color`. | | lock | DoorLock | Support for `lock / unlock`. | From b8870424cd425799e9c6c0a34754f982324cd2a0 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 12 Apr 2018 20:20:23 +0200 Subject: [PATCH 219/371] Update titles --- source/_components/vacuum.markdown | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/source/_components/vacuum.markdown b/source/_components/vacuum.markdown index 8ec0a442ac..c626a39934 100644 --- a/source/_components/vacuum.markdown +++ b/source/_components/vacuum.markdown @@ -27,7 +27,7 @@ Available services: `turn_on`, `turn_off`, `start_pause`, `stop`, `return_to_hom Before calling one of these services, make sure your botvac platform supports it. -#### {% linkable_title Service `vacuum/turn_on` %} +#### {% linkable_title Service `vacuum.turn_on` %} Start a new cleaning task. @@ -35,7 +35,7 @@ Start a new cleaning task. |---------------------------|----------|-------------------------------------------------------| | `entity_id` | yes | Only act on specific botvac. Else targets all. | -#### {% linkable_title Service `vacuum/turn_off` %} +#### {% linkable_title Service `vacuum.turn_off` %} Stop the current cleaning task and return to the dock. @@ -43,7 +43,7 @@ Stop the current cleaning task and return to the dock. |---------------------------|----------|-------------------------------------------------------| | `entity_id` | yes | Only act on specific botvac. Else targets all. | -#### {% linkable_title Service `vacuum/start_pause` %} +#### {% linkable_title Service `vacuum.start_pause` %} Start, pause or resume a cleaning task. @@ -51,7 +51,7 @@ Start, pause or resume a cleaning task. |---------------------------|----------|-------------------------------------------------------| | `entity_id` | yes | Only act on specific botvac. Else targets all. | -#### {% linkable_title Service `vacuum/stop` %} +#### {% linkable_title Service `vacuum.stop` %} Stop the current activity of the botvac. @@ -59,7 +59,7 @@ Stop the current activity of the botvac. |---------------------------|----------|-------------------------------------------------------| | `entity_id` | yes | Only act on specific botvac. Else targets all. | -#### {% linkable_title Service `vacuum/return_to_home` %} +#### {% linkable_title Service `vacuum.return_to_home` %} Tell the botvac to return home. @@ -67,7 +67,7 @@ Tell the botvac to return home. |---------------------------|----------|-------------------------------------------------------| | `entity_id` | yes | Only act on specific botvac. Else targets all. | -#### {% linkable_title Service `vacuum/locate` %} +#### {% linkable_title Service `vacuum.locate` %} Locate the vacuum cleaner robot. @@ -75,7 +75,7 @@ Locate the vacuum cleaner robot. |---------------------------|----------|-------------------------------------------------------| | `entity_id` | yes | Only act on specific botvac. Else targets all. | -#### {% linkable_title Service `vacuum/clean_spot` %} +#### {% linkable_title Service `vacuum.clean_spot` %} Tell the vacuum cleaner to do a spot clean-up. @@ -83,7 +83,7 @@ Tell the vacuum cleaner to do a spot clean-up. |---------------------------|----------|-------------------------------------------------------| | `entity_id` | yes | Only act on specific botvac. Else targets all. | -#### {% linkable_title Service `vacuum/set_fanspeed` %} +#### {% linkable_title Service `vacuum.set_fanspeed` %} Set the fan speed of the botvac. The `fanspeed` can be a label, as `balanced` or `turbo`, or be a number; it depends on the `vacuum` platform. @@ -92,7 +92,7 @@ Set the fan speed of the botvac. The `fanspeed` can be a label, as `balanced` or | `entity_id` | yes | Only act on specific botvac. Else targets all. | | `fanspeed` | no | Platform dependent vacuum cleaner fan speed, with speed steps, like 'medium', or by percentage, between 0 and 100. | -#### {% linkable_title Service `vacuum/send_command` %} +#### {% linkable_title Service `vacuum.send_command` %} Send a platform-specific command to the vacuum cleaner. From c962dee84d80da22715abaf2e9367e7ab2ff5fe1 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Thu, 12 Apr 2018 21:06:56 +0100 Subject: [PATCH 220/371] Added further notes about dialout group (#5163) Added note about checking the account is in the dialout group, and how to add it if not Added note about the device path being an example --- source/_docs/z-wave/installation.markdown | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/source/_docs/z-wave/installation.markdown b/source/_docs/z-wave/installation.markdown index b637ba981f..b3fc38d817 100644 --- a/source/_docs/z-wave/installation.markdown +++ b/source/_docs/z-wave/installation.markdown @@ -205,7 +205,7 @@ The first run after adding a device is when the `zwave` component will take time ### {% linkable_title Component could not be set up %} -Sometimes the device may not be accessible and you'll get an error message upon startup about not being able to set up Z-Wave. Run the following command for your device path: +Sometimes the device may not be accessible and you'll get an error message upon startup about not being able to set up Z-Wave. Run the following command for your device path (here we're using `/dev/ttyAMA0` for our Razberry board): ```bash $ ls -l /dev/ttyAMA0 @@ -224,6 +224,18 @@ $ sudo chgrp dialout /dev/ttyAMA0 $ sudo chmod g+rw /dev/ttyAMA0 ``` +Check too that the account you're running Home Assistant as is in the `dialout` group. For instance, if you're using `homeassistant`: + +```bash +$ groups homeassistant +``` + +That should include `dialout`, if it doesn't then: + +```bash +$ sudo usermod -G dialout homeassistant +``` + ### {% linkable_title Device path changes %} If your device path changes when you restart, see [this guide](http://hintshop.ludvig.co.nz/show/persistent-names-usb-serial-devices/) on fixing it. From 34a0ade3f7f2ef9014dc4d7d6fdb58c3381b509c Mon Sep 17 00:00:00 2001 From: Mark Coombes Date: Fri, 13 Apr 2018 03:02:59 -0400 Subject: [PATCH 221/371] Add deCONZ daylight sensor (#5028) * Add deCONZ daylight sensor * :pencil2: Minor changes * :ambulance: Fixes build issue * :ambulance: Fixes incorrect tag --- source/_components/sensor.deconz.markdown | 25 +++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/source/_components/sensor.deconz.markdown b/source/_components/sensor.deconz.markdown index 6844c88d83..46dad20c0e 100644 --- a/source/_components/sensor.deconz.markdown +++ b/source/_components/sensor.deconz.markdown @@ -43,3 +43,28 @@ Entity ids will be sensor.device_name, where device_name is defined in deCONZ. S - Xiaomi Smart Home Wireless Switch - Temperature Sensor - Xiaomi Temperature/Humidity Sensor + +#### {% linkable_title deCONZ Daylight Sensor %} + +The deCONZ Daylight sensor is a special sensor built into the deCONZ software since version 2.05.12. It is represented in Home Assistant as a sensor called sensor.daylight. The sensor's state value is a string corresponding to the phase of daylight (descriptions below taken from https://github.com/mourner/suncalc, on which the deCONZ implementation is based): + +| Sensor State | Description | +|--------------|-------------| +| sunrise_start | sunrise (top edge of the sun appears on the horizon) | +| sunrise_end | sunrise ends (bottom edge of the sun touches the horizon) | +| golden_hour_1 | morning golden hour (soft light, the best time for photography) | +| solar_noon | solar noon (sun is in the highest position) | +| golden_hour_2 | evening golden hour | +| sunset_start | sunset starts (bottom edge of the sun touches the horizon) | +| sunset_end | sunset (sun disappears below the horizon, evening civil twilight starts) | +| dusk | dusk (evening nautical twilight starts) | +| nautical_dusk | nautical dusk (evening astronomical twilight starts) | +| night_start | night starts (dark enough for astronomical observations) | +| nadir | nadir (darkest moment of the night, the sun is in the lowest position) | +| night_end | night ends (morning astronomical twilight starts) | +| nautical_dawn | nautical dawn (morning nautical twilight starts) | +| dawn | dawn (morning nautical twilight ends, morning civil twilight starts) | + +The sensor also has an attribute called "daylight" that has the value `true` when the sensor's state is `golden_hour_1`, `solar_noon`, or `golden_hour_2`, and `false` otherwise. + +These states can be used in automations as a trigger (e.g., trigger when a certain phase of daylight starts or ends) or condition (e.g., trigger only if in a certain phase of daylight). From ed630d4b84f7cdc8df4f0733c04dcaf928cfe2fd Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 13 Apr 2018 17:58:21 -0400 Subject: [PATCH 222/371] Release blog post for 0.67 --- source/_components/folder_watcher.markdown | 4 +- source/_components/sensor.qwikswitch.markdown | 18 +++++ source/_components/sensor.tradfri.markdown | 16 +++++ source/_posts/2018-04-14-release-67.markdown | 63 ++++++++++++------ .../images/blog/2018-04-0.67/components.png | Bin 0 -> 37575 bytes 5 files changed, 77 insertions(+), 24 deletions(-) create mode 100644 source/_components/sensor.qwikswitch.markdown create mode 100644 source/_components/sensor.tradfri.markdown create mode 100644 source/images/blog/2018-04-0.67/components.png diff --git a/source/_components/folder_watcher.markdown b/source/_components/folder_watcher.markdown index ba97e44c63..e7489514e8 100644 --- a/source/_components/folder_watcher.markdown +++ b/source/_components/folder_watcher.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "folder watcher" +title: "Folder Watcher" description: "Component for monitoring changes within the filesystem." date: 2018-03-11 14:00 sidebar: true @@ -32,7 +32,7 @@ folder: patterns: description: Pattern matching to apply required: false - default: "*" + default: "*" type: string {% endconfiguration %} diff --git a/source/_components/sensor.qwikswitch.markdown b/source/_components/sensor.qwikswitch.markdown new file mode 100644 index 0000000000..b2574cdb1d --- /dev/null +++ b/source/_components/sensor.qwikswitch.markdown @@ -0,0 +1,18 @@ +--- +layout: page +title: "QwikSwitch Sensor" +description: "Instructions on how to integrate Qwikswitch dimmers and relays as sensors into Home Assistant." +date: 2016-05-04 00:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: qwikswitch.png +ha_category: Sensor +ha_iot_class: "Local Push" +ha_release: "0.67" +--- + +The `qwikswitch` sensor platform allows you to control your [QwikSwitch](http://www.qwikswitch.co.za/) relays and dimmers as sensors from within Home Assistant. + +The platform is configured through the [QwikSwitch component](/components/qwikswitch/). diff --git a/source/_components/sensor.tradfri.markdown b/source/_components/sensor.tradfri.markdown new file mode 100644 index 0000000000..fb78480fb1 --- /dev/null +++ b/source/_components/sensor.tradfri.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "IKEA Trådfri sensors" +description: "Access and control your ZigBee-based IKEA Trådfri (Tradfri) Sensors." +date: 2017-04-12 22.04 +sidebar: true +comments: false +sharing: true +footer: true +logo: ikea.svg +ha_category: Sensor +ha_iot_class: "Local Polling" +ha_release: 0.67 +--- + +For installation instructions, see [the Trådfri component](/components/tradfri/). diff --git a/source/_posts/2018-04-14-release-67.markdown b/source/_posts/2018-04-14-release-67.markdown index f6d3c285a6..ec16c1d115 100644 --- a/source/_posts/2018-04-14-release-67.markdown +++ b/source/_posts/2018-04-14-release-67.markdown @@ -1,9 +1,9 @@ --- layout: post -title: "0.67: TBD - ALSO UPDATE DATE" -description: "TBD" -date: 2018-04-06 00:01:00 -date_formatted: "April 14, 2018" +title: "0.67: Mastodon, Tahoma switches, Nanoleaf Aurora Light Panels" +description: "Security fixes and performance improvements 😅" +date: 2018-04-13 00:01:00 +date_formatted: "April 13, 2018" author: Paulus Schoutsen author_twitter: balloob comments: true @@ -11,19 +11,22 @@ categories: Release-Notes og_image: /images/blog/2018-04-0.67/components.png --- - + + +Release 0.67 is here! In case you missed [the announcement from yesterday][ann-ubiquiti], Ubiquiti is paying me to write these release notes. Ooooooh yeah. With more time on my hands I'm going to be focusing on major improvements that we have been postponing for a while, first up will be a user system. + +This release includes a security fix. The error log was accessible via the API without requiring authentication in previous releases. Although not a leak on it's own, combined with a faulty component that would log sensitive information to the error log could lead to that being exposed (we don't know of any component that does this). Thanks to [Matt Hamilton](https://github.com/Eriner) for disclosing this issue to us. ## {% linkable_title New Platforms %} -- Qwikswitch async refactor & sensor ([@kellerza] - [#13509]) ([qwikswitch docs]) ([light.qwikswitch docs]) ([sensor.qwikswitch docs]) ([switch.qwikswitch docs]) (new-platform) -- Adds folder_watcher component ([@robmarkcole] - [#12918]) ([watchdog_file_watcher docs]) (new-platform) +- Adds folder_watcher component ([@robmarkcole] - [#12918]) ([folder_watcher docs]) (new-platform) - Add FreeDNS component ([@bdurrer] - [#13526]) ([freedns docs]) (new-platform) - Google Maps location sharing device tracker ([@michaelarnauts] - [#12301]) ([device_tracker.google_maps docs]) (new-platform) - Added Waze travel time sensor ([@Myrddyn1] - [#12387]) ([sensor.waze_travel_time docs]) (new-platform) - Added switch component to Amcrest IP Camera. ([@adpriebe] - [#12992]) ([amcrest docs]) ([switch.amcrest docs]) (new-platform) - Add mastodon ([@fabaff] - [#13441]) ([notify docs]) (new-platform) - Tahoma switches ([@ikucuze] - [#13636]) ([tahoma docs]) ([switch.tahoma docs]) (new-platform) -- Add support for Nanoleaf Aurora Light Panels ([@Oro] - [#13456]) ([light.aurora docs]) (new-platform) +- Add support for Nanoleaf Aurora Light Panels ([@Oro] - [#13456]) ([light.nanoleaf_aurora docs]) (new-platform) ## {% linkable_title If you need help... %} @@ -40,7 +43,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Update to new "b2vapi" of BMW ConnectedDrive ([@ChristianKuehnel] - [#13305]) ([bmw_connected_drive docs]) ([binary_sensor.bmw_connected_drive docs]) ([lock.bmw_connected_drive docs]) ([sensor.bmw_connected_drive docs]) (breaking change) - Remove MercedesME component ([@ReneNulschDE] - [#13538]) ([device_tracker docs]) ([mercedesme docs]) ([binary_sensor.mercedesme docs]) ([sensor.mercedesme docs]) (breaking change) - Channel up and down for webostv ([@stephanerosi] - [#13624]) ([media_player.webostv docs]) (breaking change) -- Add media type separation for video/movie ([@Tadly] - [#13612]) (breaking change) +- Add media type separation for video/movie ([@tadly] - [#13612]) (breaking change) - Added ENTITY_ID_FORMAT import and set entity_id in __init__ ([@timmo001] - [#13642]) ([switch.broadlink docs]) (breaking change) ## {% linkable_title All changes %} @@ -58,7 +61,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Upgrade aiohttp to 3.1.0 ([@fabaff] - [#13451]) - Qwikswitch async & updates ([@kellerza] - [#12641]) ([qwikswitch docs]) ([light.qwikswitch docs]) ([switch.qwikswitch docs]) - Make Telnet Switch value template optional ([@DanNixon] - [#13433]) ([switch.telnet docs]) -- Update yeelightsunflower to 0.0.10 ([@lindsaymarkwawrd] - [#13448]) +- Update yeelightsunflower to 0.0.10 ([@lindsaymarkward] - [#13448]) - Add more info to issue template ([@c727] - [#12955]) - [RFC] Update issue template ([@amelchio] - [#12989]) - Update total_connect_client to 0.17 for Honeywell L5100-WiFi Support ([@phileaton] - [#13473]) ([alarm_control_panel.totalconnect docs]) @@ -71,7 +74,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Fix typos and update link (fixes #13520) ([@fabaff] - [#13529]) - Tradfri - unique_id's and color_temp support for rgb-bulbs ([@NovapaX] - [#13531]) ([light.tradfri docs]) - Qwikswitch async refactor & sensor ([@kellerza] - [#13509]) ([qwikswitch docs]) ([light.qwikswitch docs]) ([sensor.qwikswitch docs]) ([switch.qwikswitch docs]) (new-platform) -- Adds folder_watcher component ([@robmarkcole] - [#12918]) ([watchdog_file_watcher docs]) (new-platform) +- Adds folder_watcher component ([@robmarkcole] - [#12918]) ([folder_watcher docs]) (new-platform) - Update rflink to 0.0.37 ([@olskar] - [#12603]) ([rflink docs]) - Added file path validity checks to file sensor ([@FrederikBolding] - [#12505]) ([sensor.file docs]) - Allow for overriding the DoorBird push notification URL in configuration ([@Klikini] - [#13268]) ([doorbird docs]) @@ -88,8 +91,8 @@ Experiencing issues introduced by this release? Please report them in our [issue - Add support for Canary Flex ([@snjoetw] - [#13280]) ([canary docs]) ([sensor.canary docs]) - Fixes #12758. Try other cameras even if one fails to initialize ([@PhracturedBlue] - [#13276]) ([amcrest docs]) - Added HassOpenCover and HassCloseCover intents ([@tschmidty69] - [#13372]) ([conversation docs]) ([cover docs]) -- rfxtrx lib 0.22.0 ([@danielhiversen] - [#13576]) ([rfxtrx docs]) -- xiaomi lib upgrade ([@danielhiversen] - [#13577]) ([xiaomi_aqara docs]) +- rfxtrx lib 0.22.0 ([@Danielhiversen] - [#13576]) ([rfxtrx docs]) +- xiaomi lib upgrade ([@Danielhiversen] - [#13577]) ([xiaomi_aqara docs]) - Remove MercedesME component ([@ReneNulschDE] - [#13538]) ([device_tracker docs]) ([mercedesme docs]) ([binary_sensor.mercedesme docs]) ([sensor.mercedesme docs]) (breaking change) - Added Waze travel time sensor ([@Myrddyn1] - [#12387]) ([sensor.waze_travel_time docs]) (new-platform) - Added switch component to Amcrest IP Camera. ([@adpriebe] - [#12992]) ([amcrest docs]) ([switch.amcrest docs]) (new-platform) @@ -97,7 +100,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Add mastodon ([@fabaff] - [#13441]) ([notify docs]) (new-platform) - Added support for requesting RSSI values from Bluetooth devices ([@FrederikBolding] - [#12458]) ([device_tracker.bluetooth_tracker docs]) - Fix mysensors update callback ([@MartinHjelmare] - [#13602]) ([mysensors docs]) -- Broadlink ([@danielhiversen] - [#13585]) ([sensor.broadlink docs]) ([switch.broadlink docs]) +- Broadlink ([@Danielhiversen] - [#13585]) ([sensor.broadlink docs]) ([switch.broadlink docs]) - Fix IMAP email message_data ([@zhaokoh] - [#13606]) ([sensor.imap_email_content docs]) - Re-add group polling as a fallback for observation ([@lwis] - [#13613]) ([light.tradfri docs]) - Unflake folder watcher test ([@balloob] - [#13569]) @@ -112,7 +115,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Xiaomi Mi WiFi Repeater 2 integration as device tracker ([@syssi] - [#13521]) - Upgrade youtube_dl to 2018.04.03 ([@fabaff] - [#13647]) ([media_extractor docs]) - Update plex.py ([@chronm] - [#13659]) ([sensor.plex docs]) -- Always enable config entries & remove config_entry_example ([@balloob] - [#13663]) ([config docs]) ([config_entry_example docs]) +- Always enable config entries & remove config_entry_example ([@balloob] - [#13663]) ([config docs]) - Add missing service docs for hs_color ([@armills] - [#13667]) - Add regex functions as templating helpers ([@mountainsandcode] - [#13631]) - Channel up and down for webostv ([@stephanerosi] - [#13624]) ([media_player.webostv docs]) (breaking change) @@ -129,7 +132,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Fix asuswrt ap mode failure ([@shuaiger] - [#13693]) ([device_tracker docs]) - Support color temperature in Homekit ([@morberg] - [#13658]) ([homekit docs]) - Remove unused CONF_WATCHERS ([@robmarkcole] - [#13678]) ([folder_watcher docs]) -- Add media type separation for video/movie ([@Tadly] - [#13612]) (breaking change) +- Add media type separation for video/movie ([@tadly] - [#13612]) (breaking change) - Adding configration to disable ip address as a requirement Fixes: #13399 ([@PlanetJ] - [#13692]) ([device_tracker docs]) - Tahoma switches ([@ikucuze] - [#13636]) ([tahoma docs]) ([switch.tahoma docs]) (new-platform) - Send XY color for non-osram hue bulbs ([@armills] - [#13665]) ([light.hue docs]) @@ -137,8 +140,14 @@ Experiencing issues introduced by this release? Please report them in our [issue - Enable autodiscovery for mqtt cameras ([@jmtatsch] - [#13697]) ([mqtt docs]) ([camera.mqtt docs]) - Added ENTITY_ID_FORMAT import and set entity_id in __init__ ([@timmo001] - [#13642]) ([switch.broadlink docs]) (breaking change) - Fix #10175 ([@pschmitt] - [#13713]) ([media_player.liveboxplaytv docs]) -- Add support for Nanoleaf Aurora Light Panels ([@Oro] - [#13456]) ([light.aurora docs]) (new-platform) +- Add support for Nanoleaf Aurora Light Panels ([@Oro] - [#13456]) ([light.nanoleaf_aurora docs]) (new-platform) - Added gogogate2 cover ([@dlbroadfoot] - [#13467]) +- Remove vendor lookup for mac addresses ([@balloob] - [#13788]) ([device_tracker docs]) +- iglo hs color fix ([@armills] - [#13808]) ([light.iglo docs]) +- Fix too green color conversion ([@amelchio] - [#13828]) +- Rename from aurora light to nanoleaf_aurora ([@Oro] - [#13831]) ([light.nanoleaf_aurora docs]) +- Channel up/down for LiveTV and next/previous for other apps ([@stephanerosi] - [#13829]) ([media_player.webostv docs]) +- Add authentication to error log endpoint ([@balloob] - [#13836]) ([api docs]) [#11187]: https://github.com/home-assistant/home-assistant/pull/11187 [#12301]: https://github.com/home-assistant/home-assistant/pull/12301 @@ -234,9 +243,16 @@ Experiencing issues introduced by this release? Please report them in our [issue [#13702]: https://github.com/home-assistant/home-assistant/pull/13702 [#13709]: https://github.com/home-assistant/home-assistant/pull/13709 [#13713]: https://github.com/home-assistant/home-assistant/pull/13713 +[#13788]: https://github.com/home-assistant/home-assistant/pull/13788 +[#13808]: https://github.com/home-assistant/home-assistant/pull/13808 +[#13828]: https://github.com/home-assistant/home-assistant/pull/13828 +[#13829]: https://github.com/home-assistant/home-assistant/pull/13829 +[#13831]: https://github.com/home-assistant/home-assistant/pull/13831 +[#13836]: https://github.com/home-assistant/home-assistant/pull/13836 [@5LICK]: https://github.com/5LICK [@ChristianKuehnel]: https://github.com/ChristianKuehnel [@DanNixon]: https://github.com/DanNixon +[@Danielhiversen]: https://github.com/Danielhiversen [@FrederikBolding]: https://github.com/FrederikBolding [@Kane610]: https://github.com/Kane610 [@Klikini]: https://github.com/Klikini @@ -250,7 +266,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [@PlanetJ]: https://github.com/PlanetJ [@ReneNulschDE]: https://github.com/ReneNulschDE [@Skaronator]: https://github.com/Skaronator -[@Tadly]: https://github.com/Tadly [@adpriebe]: https://github.com/adpriebe [@alandtse]: https://github.com/alandtse [@amelchio]: https://github.com/amelchio @@ -262,7 +277,6 @@ Experiencing issues introduced by this release? Please report them in our [issue [@cdce8p]: https://github.com/cdce8p [@chronm]: https://github.com/chronm [@colinodell]: https://github.com/colinodell -[@danielhiversen]: https://github.com/danielhiversen [@danielperna84]: https://github.com/danielperna84 [@dlbroadfoot]: https://github.com/dlbroadfoot [@fabaff]: https://github.com/fabaff @@ -272,7 +286,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [@ikucuze]: https://github.com/ikucuze [@jmtatsch]: https://github.com/jmtatsch [@kellerza]: https://github.com/kellerza -[@lindsaymarkwawrd]: https://github.com/lindsaymarkwawrd +[@lindsaymarkward]: https://github.com/lindsaymarkward [@lwis]: https://github.com/lwis [@mf-social]: https://github.com/mf-social [@michaelarnauts]: https://github.com/michaelarnauts @@ -288,6 +302,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [@snjoetw]: https://github.com/snjoetw [@stephanerosi]: https://github.com/stephanerosi [@syssi]: https://github.com/syssi +[@tadly]: https://github.com/tadly [@teharris1]: https://github.com/teharris1 [@timmo001]: https://github.com/timmo001 [@titilambert]: https://github.com/titilambert @@ -301,6 +316,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [alarm_control_panel.totalconnect docs]: /components/alarm_control_panel.totalconnect/ [alexa docs]: /components/alexa/ [amcrest docs]: /components/amcrest/ +[api docs]: /components/api/ [binary_sensor.bmw_connected_drive docs]: /components/binary_sensor.bmw_connected_drive/ [binary_sensor.mercedesme docs]: /components/binary_sensor.mercedesme/ [binary_sensor.workday docs]: /components/binary_sensor.workday/ @@ -326,9 +342,11 @@ Experiencing issues introduced by this release? Please report them in our [issue [hue docs]: /components/hue/ [insteon_plm docs]: /components/insteon_plm/ [light docs]: /components/light/ -[light.aurora docs]: /components/light.aurora/ +[light.nanoleaf_aurora docs]: /components/light.nanoleaf_aurora/ [light.hue docs]: /components/light.hue/ +[light.iglo docs]: /components/light.iglo/ [light.mystrom docs]: /components/light.mystrom/ +[light.nanoleaf_aurora docs]: /components/light.nanoleaf_aurora/ [light.qwikswitch docs]: /components/light.qwikswitch/ [light.tradfri docs]: /components/light.tradfri/ [light.xiaomi_miio docs]: /components/light.xiaomi_miio/ @@ -373,6 +391,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [tado docs]: /components/tado/ [tahoma docs]: /components/tahoma/ [tradfri docs]: /components/tradfri/ -[watchdog_file_watcher docs]: /components/watchdog_file_watcher/ +[folder_watcher docs]: /components/folder_watcher/ [xiaomi_aqara docs]: /components/xiaomi_aqara/ [zwave docs]: /components/zwave/ +[ann-ubiquiti]: /blog/2018/04/12/ubiquiti-and-home-assistant/ diff --git a/source/images/blog/2018-04-0.67/components.png b/source/images/blog/2018-04-0.67/components.png new file mode 100644 index 0000000000000000000000000000000000000000..798602b5c1c6536026f88526e17ba566c2ab6ce5 GIT binary patch literal 37575 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 Date: Fri, 13 Apr 2018 17:58:38 -0400 Subject: [PATCH 223/371] Fix release date --- _config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_config.yml b/_config.yml index 401cd89fce..38d26c045e 100644 --- a/_config.yml +++ b/_config.yml @@ -141,7 +141,7 @@ social: current_major_version: 0 current_minor_version: 67 current_patch_version: 0 -date_released: 2018-04-14 +date_released: 2018-04-13 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. From 4a9bd5e72020b3dc8efabada9b199622669315ac Mon Sep 17 00:00:00 2001 From: Mohamad Tarbin Date: Fri, 13 Apr 2018 22:03:57 -0400 Subject: [PATCH 224/371] Adding markdown and imagie for USCIS sensor (#5138) * Adding markdown and imagie for USCIS sensor * Update the markdown * Update sensor.uscis.markdown * Update sensor.uscis.markdown * Update sensor.uscis.markdown * Minor changes --- source/_components/sensor.uscis.markdown | 39 +++++++++++++++++++++++ source/images/supported_brands/uscis.png | Bin 0 -> 7836 bytes 2 files changed, 39 insertions(+) create mode 100644 source/_components/sensor.uscis.markdown create mode 100644 source/images/supported_brands/uscis.png diff --git a/source/_components/sensor.uscis.markdown b/source/_components/sensor.uscis.markdown new file mode 100644 index 0000000000..49d55b0416 --- /dev/null +++ b/source/_components/sensor.uscis.markdown @@ -0,0 +1,39 @@ +--- +layout: page +title: USCIS Sensor +description: "Instructions on how to set up USCIS within Home Assistant." +date: 2018-03-21 08:00 +sidebar: false +comments: false +sharing: true +footer: true +logo: uscis.jpg +ha_category: Sensor +ha_release: 0.68 +ha_iot_class: "Cloud Polling" +--- + +The `uscis` sensor component allows you get updates on your USCIS case using your case/receipt number. The sensor gets the case information from [USCIS Website]( https://egov.uscis.gov/casestatus/landing.do) + +## Example for `configuration.yaml` : + +```yaml +sensor: + - platform: uscis + case_id: YOUR_CASE_NUMBER + name: OPTIONAL_NAME +``` + +{% configuration %} +friendly_name: + description: Name of the sensor in Home Assistant. + required: false + default: USCIS + type: string +case_id: + description: Case/receipt number used to get the case details from USCIS web client. + required: true + type: string +{% endconfiguration %} + +All the data will be fetch from [USCIS](https://egov.uscis.gov/casestatus/mycasestatus.do). diff --git a/source/images/supported_brands/uscis.png b/source/images/supported_brands/uscis.png new file mode 100644 index 0000000000000000000000000000000000000000..2268fb48b11951cd12e73c43eba00c1981484bc2 GIT binary patch literal 7836 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 m7r Date: Sat, 14 Apr 2018 08:31:40 +0100 Subject: [PATCH 225/371] Moved the note up (#5166) It's easy for people to fail to notice the note, since it comes after the default upgrade instructions. Moved it up to make it harder to miss --- source/_docs/installation/updating.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/_docs/installation/updating.markdown b/source/_docs/installation/updating.markdown index dd5d6dc3ab..a9884322b6 100644 --- a/source/_docs/installation/updating.markdown +++ b/source/_docs/installation/updating.markdown @@ -16,6 +16,10 @@ The upgrade process differs depending on the installation you have, so please re Check what's new in the latest version and potentially impacts your system in [Home Assistant release notes](https://github.com/home-assistant/home-assistant/releases). It is good practice to review these release notes and pay close attention to the **Breaking Changes** that are listed there. If you haven't done an update for a while, you should also check previous release notes as they can also contain relevant **Breaking Changes**. **Breaking Changes** may require configuration updates for your components. If you missed this and Home Assistant refuses to start, check the log file in the [configuration](/docs/configuration/) directory, e.g., `.homeassistant/home-assistant.log`, for details about broken components. +

+To avoid permission errors, the upgrade must be run as the same user as the installation was completed, again review the documentation specific to your install [Hass.io](/hassio/), [Hassbian](/docs/hassbian/installation/), [Vagrant](/docs/installation/vagrant/), or [Virtualenv](/docs/installation/virtualenv). +

+ The default way to update Home Assistant to the latest release, when available, is: ```bash @@ -30,10 +34,6 @@ $ sudo docker pull homeassistant/home-assistant:latest After updating, you must start/restart Home Assistant for the changes to take effect. This means that you will have to restart `hass` itself or the [autostarting](/docs/autostart/) daemon (if applicable). Startup can take considerable amount of time (i.e. minutes) depending on your device. This is because all requirements are updated as well. -

-To avoid permission errors, the upgrade must be run as the same user as the installation was completed, again review the documentation specific to your install [Hass.io](/hassio/), [Hassbian](/docs/hassbian/installation/), [Vagrant](/docs/installation/vagrant/), or [Virtualenv](/docs/installation/virtualenv). -

- [BRUH automation](http://www.bruhautomation.com) has created [a tutorial video](https://www.youtube.com/watch?v=tuG2rs1Cl2Y) explaining how to upgrade Home Assistant. #### {% linkable_title Run a specific version %} From d6b1ac22628e368d65c449466aa2909da77fcd6a Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sat, 14 Apr 2018 08:38:26 +0100 Subject: [PATCH 226/371] Added dialout group (#5162) * Added dialout group Membership of the dialout group is required for Z-Wave and Zigbee sticks * Minor change --- source/_docs/installation/raspberry-pi.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/installation/raspberry-pi.markdown b/source/_docs/installation/raspberry-pi.markdown index b0cb1b8a4a..c272e97dbf 100644 --- a/source/_docs/installation/raspberry-pi.markdown +++ b/source/_docs/installation/raspberry-pi.markdown @@ -49,10 +49,10 @@ $ sudo apt-get install python3 python3-venv python3-pip ``` Add an account for Home Assistant called `homeassistant`. -Since this account is only for running Home Assistant the extra arguments of `-rm` is added to create a system account and create a home directory. +Since this account is only for running Home Assistant the extra arguments of `-rm` is added to create a system account and create a home directory. The arguments `-G dialout` adds the user to the `dialout` group. This is required for using Z-Wave and Zigbee controllers. ```bash -$ sudo useradd -rm homeassistant +$ sudo useradd -rm homeassistant -G dialout ``` Next we will create a directory for the installation of Home Assistant and change the owner to the `homeassistant` account. From 3f43547c0e464ca004ebf9805d6ea663e2689ec7 Mon Sep 17 00:00:00 2001 From: Robin Date: Sat, 14 Apr 2018 08:52:36 +0100 Subject: [PATCH 227/371] Correct errors in folder_watcher doc (#5168) * Correct errors Corrects errors identified by @dale3h in https://github.com/home-assistant/home-assistant.github.io/pull/4885 * Adds event_type info * Add info on recursive monitoring --- source/_components/folder_watcher.markdown | 41 +++++++++++++--------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/source/_components/folder_watcher.markdown b/source/_components/folder_watcher.markdown index e7489514e8..ccd934c1ad 100644 --- a/source/_components/folder_watcher.markdown +++ b/source/_components/folder_watcher.markdown @@ -13,16 +13,23 @@ ha_iot_class: "Local Polling" ha_release: 0.67 --- -This component adds [Watchdog](https://pythonhosted.org/watchdog/) file system monitoring, publishing events on the Home-Assistant bus on the creation/deletion/modification of files. +This component adds [Watchdog](https://pythonhosted.org/watchdog/) file system monitoring, publishing events on the Home Assistant bus on the creation/deletion/modification of files. The monitored `event_type` are: +* `created` +* `deleted` +* `modified` +* `moved` -To configure the `folder_watcher` component add to you `configuration.yaml` file: +Note that by default folder monitoring is recursive, meaning that the contents of sub-folders are also monitored. + +To enable the Folder Watcher component in your installation, add the following to your `configuration.yaml` file: -```yaml {% raw %} +```yaml folder_watcher: - - folder: /config -{% endraw %} + watchers: + - folder: /config ``` +{% endraw %} {% configuration %} folder: @@ -40,28 +47,29 @@ patterns: Pattern matching using [fnmatch](https://docs.python.org/3.6/library/fnmatch.html) can be used to limit filesystem monitoring to only files which match the configured patterns. The following example shows the configuration required to only monitor filetypes `.yaml` and `.txt`. +{% raw %} ```yaml -{% raw %} folder_watcher: - - folder: /config - patterns: - - '*.yaml' - - '*.txt' -{% raw %} + watchers: + - folder: /config + patterns: + - '*.yaml' + - '*.txt' ``` +{% endraw %} ## Automations -Automations can be triggered on filesystem event data using a data_template. The following automation will send a notification with the name and folder of new files added to that folder: +Automations can be triggered on filesystem event data using a `data_template`. The following automation will send a notification with the name and folder of new files added to that folder: -```yaml {% raw %} +```yaml - action: - data_template: - message: 'Created {{trigger.event.data.file}} in {{trigger.event.data.folder}}' + message: 'Created {{ trigger.event.data.file }} in {{ trigger.event.data.folder }}' title: New image captured! data: - file: "{{trigger.event.data.path}}" + file: " {{ trigger.event.data.path }} " service: notify.pushbullet alias: New file alert condition: [] @@ -70,6 +78,5 @@ Automations can be triggered on filesystem event data using a data_template. The - event_data: {"event_type":"created"} event_type: folder_watcher platform: event -{% endraw %} ``` - +{% endraw %} From c396e08e500ffc3241b3594300b252e0fce48bb1 Mon Sep 17 00:00:00 2001 From: xTCx Date: Sat, 14 Apr 2018 11:05:32 +0300 Subject: [PATCH 228/371] Clicksend multiple recipients (#5149) Updated doc to reflect new multiple-recipients feature. --- source/_components/notify.clicksend.markdown | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/source/_components/notify.clicksend.markdown b/source/_components/notify.clicksend.markdown index f334009e9a..a5f9d587fd 100644 --- a/source/_components/notify.clicksend.markdown +++ b/source/_components/notify.clicksend.markdown @@ -28,6 +28,14 @@ notify: username: CLICKSEND_USERNAME api_key: CLICKSEND_API_KEY recipient: PHONE_NO + +# Multiple recipients +notify: + - platform: clicksend + name: ClickSend + username: CLICKSEND_USERNAME + api_key: CLICKSEND_API_KEY + recipient: [PHONE_NO1, PHONE_NO2] ``` {% configuration %} @@ -44,9 +52,9 @@ api_key: required: true type: string recipient: - description: "Your phone number. This is where you want to send your notification SMS messages, e.g., `09171234567`." + description: "A single or multiple phone numbers. This is where you want to send your SMS notification messages, e.g., `09171234567` or `[09171234567, 09177654321]`." required: true - type: string + type: string or list sender: description: The name or number of the sender. required: false From 0d603c0a6ef4bc0000f39a64c0f3fdda5f0432f8 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sat, 14 Apr 2018 09:08:43 +0100 Subject: [PATCH 229/371] More words (#5164) * More words Added an explanation of what's going on, and that devices will function normally. * :pencil2: Language tweaks --- source/_docs/z-wave/query-stage.markdown | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/_docs/z-wave/query-stage.markdown b/source/_docs/z-wave/query-stage.markdown index 2037963e45..7112cd055b 100644 --- a/source/_docs/z-wave/query-stage.markdown +++ b/source/_docs/z-wave/query-stage.markdown @@ -9,6 +9,10 @@ sharing: true footer: true --- +When the Z-Wave mesh is first started, the controller will go through all the following stages for every device on the mesh. This is a slow process, and to complete requires that the devices be awake. While devices that are mains or USB powered are always awake, battery-powered devices spend most of their time asleep. Because of this, you can expect that after startup your battery powered devices will spend time in `Initializing (CacheLoad)` - how long depends on the device. + +Your devices will still function normally while marked as `Initializing`. + | Stage | Description | |------------------------|--------------------------------------------------------------------| | None | Query process hasn't started for this node | @@ -17,7 +21,7 @@ footer: true | WakeUp | Start wake up process if a sleeping node | | ManufacturerSpecific1 | Retrieve manufacturer name and product ids if ProtocolInfo lets us | | NodeInfo | Retrieve info about supported, controlled command classes | -| NodePlusInfo | Retrieve ZWave+ info and update device classes | +| NodePlusInfo | Retrieve Z-Wave+ info and update device classes | | SecurityReport | Retrieve a list of Command Classes that require Security | | ManufacturerSpecific2 | Retrieve manufacturer name and product ids | | Versions | Retrieve version information | From f3ad3f8ea28ba01df6f71f769ca6818894500ca8 Mon Sep 17 00:00:00 2001 From: Matthew Garrett Date: Sat, 14 Apr 2018 02:43:18 -0700 Subject: [PATCH 230/371] Add documentation for homekit controller component (#4966) * Add documentation for homekit controller component * Update docs to match the implementation * :arrow_up: ha_release * :pencil2: Language tweak * :arrow_up: ha_release * :arrow_up: ha_release --- source/_components/discovery.markdown | 9 ++++++ .../_components/homekit_controller.markdown | 31 +++++++++++++++++++ .../light.homekit_controller.markdown | 16 ++++++++++ .../switch.homekit_controller.markdown | 16 ++++++++++ 4 files changed, 72 insertions(+) create mode 100644 source/_components/homekit_controller.markdown create mode 100644 source/_components/light.homekit_controller.markdown create mode 100644 source/_components/switch.homekit_controller.markdown diff --git a/source/_components/discovery.markdown b/source/_components/discovery.markdown index 61ea8046b9..f369ce67c1 100644 --- a/source/_components/discovery.markdown +++ b/source/_components/discovery.markdown @@ -23,6 +23,7 @@ Home Assistant can discover and automatically configure [zeroconf](https://en.wi * [DirecTV receivers](/components/media_player.directv/) * [Frontier Silicon internet radios](/components/media_player.frontier_silicon/) * [Google Cast](/components/media_player.cast/) + * [HomeKit](/components/homekit_controller/) * [IKEA Trådfri (Tradfri)](/components/tradfri/) * [Linn / Openhome](/components/media_player.openhome/) * [Logitech Harmony Hub](/components/remote.harmony/) @@ -50,6 +51,8 @@ discovery: ignore: - sonos - samsung_tv + enable: + - homekit ``` Configuration variables: @@ -85,6 +88,12 @@ Valid values for ignore are: * `yamaha`: Yamaha media player * `yeelight`: Yeelight Sunflower bulb +- **enable** (*Optional*): A list of platforms not enabled by default that `discovery` should discover. + +Valid values for enable are: + + * `homekit`: HomeKit accessories +

Home Assistant must be on the same network as the devices for uPnP discovery to work. If running Home Assistant in a [Docker container](/docs/installation/docker/) use switch `--net=host` to put it on the host's network. diff --git a/source/_components/homekit_controller.markdown b/source/_components/homekit_controller.markdown new file mode 100644 index 0000000000..319f505ef1 --- /dev/null +++ b/source/_components/homekit_controller.markdown @@ -0,0 +1,31 @@ +--- +layout: page +title: "HomeKit controller support" +description: "Instructions how to integrate your HomeKit devices within Home Assistant." +date: 2018-03-19 21:04 +sidebar: true +comments: false +sharing: true +footer: true +logo: apple-homekit.png +ha_category: Hub +ha_release: 0.68 +ha_iot_class: "Local Polling" +--- + +[HomeKit](https://developer.apple.com/homekit/) controller integration for Home Assistant allows you to connect HomeKit accessories to Home Assistant. This component should not be confused with the [HomeKit](homekit) component, which allows you to control Home Assistant devices via HomeKit. + +There is currently support for the following device types within Home Assistant: + +- [Light](../light.homekit_controller) +- [Switch](../switch.homekit_controller) + +The component will be automatically configured if the [`discovery:`](components/discovery/) component is enabled and an enable entry added for HomeKit: + +```yaml +discovery: + enable: + - homekit +``` + +For each detected HomeKit accessory, a configuration prompt will appear in the web front end. Use this to provide the HomeKit PIN. diff --git a/source/_components/light.homekit_controller.markdown b/source/_components/light.homekit_controller.markdown new file mode 100644 index 0000000000..f3f7243a10 --- /dev/null +++ b/source/_components/light.homekit_controller.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "HomeKit Light" +description: "Instructions how to setup HomeKit lights within Home Assistant." +date: 2017-03-19 21:08 +sidebar: true +comments: false +sharing: true +footer: true +logo: apple-homekit.png +ha_category: Light +ha_iot_class: "Local Polling" +ha_release: 0.68 +--- + +To get your HomeKit lights working with Home Assistant, follow the instructions for the general [HomeKit controller component](/components/homekit_controller/). diff --git a/source/_components/switch.homekit_controller.markdown b/source/_components/switch.homekit_controller.markdown new file mode 100644 index 0000000000..205316bdf2 --- /dev/null +++ b/source/_components/switch.homekit_controller.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "HomeKit Light" +description: "Instructions how to setup HomeKit switches within Home Assistant." +date: 2017-03-19 21:08 +sidebar: true +comments: false +sharing: true +footer: true +logo: apple-homekit.png +ha_category: Light +ha_iot_class: "Local Polling" +ha_release: 0.68 +--- + +To get your HomeKit switches working with Home Assistant, follow the instructions for the general [HomeKit controller component](/components/homekit_controller/). From 17285ba293166cc09add20cf6471ace14ce8191e Mon Sep 17 00:00:00 2001 From: Robin Date: Sat, 14 Apr 2018 19:37:06 +0100 Subject: [PATCH 231/371] Remove refs to watcher (#5169) I accidentally reintroduced an old reference to `watchers`, removed in this PR --- source/_components/folder_watcher.markdown | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/source/_components/folder_watcher.markdown b/source/_components/folder_watcher.markdown index ccd934c1ad..88b19937e0 100644 --- a/source/_components/folder_watcher.markdown +++ b/source/_components/folder_watcher.markdown @@ -26,8 +26,7 @@ To enable the Folder Watcher component in your installation, add the following t {% raw %} ```yaml folder_watcher: - watchers: - - folder: /config + - folder: /config ``` {% endraw %} @@ -50,11 +49,10 @@ Pattern matching using [fnmatch](https://docs.python.org/3.6/library/fnmatch.htm {% raw %} ```yaml folder_watcher: - watchers: - - folder: /config - patterns: - - '*.yaml' - - '*.txt' + - folder: /config + patterns: + - '*.yaml' + - '*.txt' ``` {% endraw %} From 36a385b5b7b980e5fe20abd895b17926873a7029 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Sun, 15 Apr 2018 13:09:30 +0200 Subject: [PATCH 232/371] Added screenshot for binary_sensor device classes icons (#5182) * added screenshot Screenshot of binary_sensors device classes icons added * Added screenshot to docs Screenshot showing icons for binary_sensor device classes added. --- source/_components/binary_sensor.markdown | 5 +++++ .../screenshots/binary_sensor_classes_icons.png | Bin 0 -> 75176 bytes 2 files changed, 5 insertions(+) create mode 100644 source/images/screenshots/binary_sensor_classes_icons.png diff --git a/source/_components/binary_sensor.markdown b/source/_components/binary_sensor.markdown index 588b4df27f..5826f9c147 100644 --- a/source/_components/binary_sensor.markdown +++ b/source/_components/binary_sensor.markdown @@ -39,3 +39,8 @@ The way these sensors are displayed in the frontend can be modified in the [cust - **window**: `On` means open, `Off` means closed For analog sensors please check the [component overview](/components/#sensor). + +

+ +Example of various device classes icons in `On` and `Off` state. +

diff --git a/source/images/screenshots/binary_sensor_classes_icons.png b/source/images/screenshots/binary_sensor_classes_icons.png new file mode 100644 index 0000000000000000000000000000000000000000..53363bcb9906877803ee5ce4afe0cb47cd13aaf6 GIT binary patch literal 75176 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

iwe5xt{z@R*ltliv%V5X>(b;U7h~q5n0is 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 X4=(s1w3=AF4gM)yRh7-WY~uTWr3_w2 literal 0 HcmV?d00001 From fdef560c1ad994a87c5b84c3697b40daeddd57a0 Mon Sep 17 00:00:00 2001 From: ionred Date: Sun, 15 Apr 2018 06:17:29 -0500 Subject: [PATCH 233/371] config example update (#5179) The configuration didn't work as listed. Required addition of platform and switches lines, along with indent fixes. --- source/_components/switch.rainbird.markdown | 22 +++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/source/_components/switch.rainbird.markdown b/source/_components/switch.rainbird.markdown index eee1d471b9..6fba9a2f99 100644 --- a/source/_components/switch.rainbird.markdown +++ b/source/_components/switch.rainbird.markdown @@ -19,16 +19,18 @@ Once you have enabled the [Rain Bird component](/components/rainbird), add the f ```yaml switch: - sprinkler_1: - zone: 1 - friendly_name: "Front sprinklers" - trigger_time: 20 - scan_interval: 10 - sprinkler_2: - friendly_name: "Back sprinklers" - zone: 2 - trigger_time: 20 - scan_interval: 10 + - platform: rainbird + switches: + sprinkler_1: + zone: 1 + friendly_name: "Front sprinklers" + trigger_time: 10 + scan_interval: 10 + sprinkler_2: + friendly_name: "Back sprinklers" + zone: 2 + trigger_time: 20 + scan_interval: 10 ``` Configuration variables: From e2e44aeb337f5dbe62b265817f0eef9bcffb4f3a Mon Sep 17 00:00:00 2001 From: Gerard Date: Sun, 15 Apr 2018 13:18:12 +0200 Subject: [PATCH 234/371] Clarify titles of BMW Connected Drive components (#5178) * Update binary_sensor.bmw_connected_drive.markdown * Update bmw_connected_drive.markdown * Update device_tracker.bmw_connected_drive.markdown * Update lock.bmw_connected_drive.markdown * Update sensor.bmw_connected_drive.markdown * Update binary_sensor.bmw_connected_drive.markdown * Update bmw_connected_drive.markdown * Update device_tracker.bmw_connected_drive.markdown * Update lock.bmw_connected_drive.markdown * Update sensor.bmw_connected_drive.markdown * Update binary_sensor.bmw_connected_drive.markdown * Update lock.bmw_connected_drive.markdown --- .../binary_sensor.bmw_connected_drive.markdown | 8 ++++---- source/_components/bmw_connected_drive.markdown | 4 ++-- .../device_tracker.bmw_connected_drive.markdown | 4 ++-- source/_components/lock.bmw_connected_drive.markdown | 8 ++++---- source/_components/sensor.bmw_connected_drive.markdown | 4 ++-- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/source/_components/binary_sensor.bmw_connected_drive.markdown b/source/_components/binary_sensor.bmw_connected_drive.markdown index 6c38dc813e..74330ec563 100755 --- a/source/_components/binary_sensor.bmw_connected_drive.markdown +++ b/source/_components/binary_sensor.bmw_connected_drive.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "BMW connected drive" -description: "Instructions on how to setup your BMW connected drive account with Home Assistant." +title: "BMW Connected Drive Binary Sensor" +description: "Instructions on how to setup your BMW Connected Drive account with Home Assistant." date: 2018-02-22 23:00 sidebar: true comments: false @@ -15,6 +15,6 @@ ha_release: 0.66 The `bmw_connected_drive` platform allows you to import data on your BMW into Home Assistant. -The binary sensors will be automatically configured if 'bmw_connected_drive' component is configured. +The binary sensors will be automatically configured if `bmw_connected_drive` component is configured. -For more configuration information see the [bmw_connected_drive component](/components/bmw_connected_drive/) documentation. +For more configuration information see the [`bmw_connected_drive` component](/components/bmw_connected_drive/) documentation. diff --git a/source/_components/bmw_connected_drive.markdown b/source/_components/bmw_connected_drive.markdown index fe8cabc71a..52d223a9c2 100644 --- a/source/_components/bmw_connected_drive.markdown +++ b/source/_components/bmw_connected_drive.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "BMW connected drive" -description: "Instructions on how to setup your BMW connected drive account with Home Assistant." +title: "BMW Connected Drive" +description: "Instructions on how to setup your BMW Connected Drive account with Home Assistant." date: 2018-01-10 23:00 sidebar: true comments: false diff --git a/source/_components/device_tracker.bmw_connected_drive.markdown b/source/_components/device_tracker.bmw_connected_drive.markdown index d00d588b35..4f390c5fa3 100644 --- a/source/_components/device_tracker.bmw_connected_drive.markdown +++ b/source/_components/device_tracker.bmw_connected_drive.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "BMW connected drive" -description: "Instructions on how to setup your BMW connected drive account with Home Assistant." +title: "BMW Connected Drive Device Tracker" +description: "Instructions on how to setup your BMW Connected Drive account with Home Assistant." date: 2018-01-10 23:00 sidebar: true comments: false diff --git a/source/_components/lock.bmw_connected_drive.markdown b/source/_components/lock.bmw_connected_drive.markdown index 2a7f670812..4c6c7a2edc 100755 --- a/source/_components/lock.bmw_connected_drive.markdown +++ b/source/_components/lock.bmw_connected_drive.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "BMW connected drive" -description: "Instructions on how to setup your BMW connected drive account with Home Assistant." +title: "BMW Connected Drive Lock" +description: "Instructions on how to setup your BMW Connected Drive account with Home Assistant." date: 2018-02-22 23:00 sidebar: true comments: false @@ -15,6 +15,6 @@ ha_release: 0.66 The `bmw_connected_drive` platform allows you to import data on your BMW into Home Assistant. -The lock will be automatically configured if 'bmw_connected_drive' component is configured. +The lock will be automatically configured if `bmw_connected_drive` component is configured. -For more configuration information see the [bmw_connected_drive component](/components/bmw_connected_drive/) documentation. +For more configuration information see the [`bmw_connected_drive` component](/components/bmw_connected_drive/) documentation. diff --git a/source/_components/sensor.bmw_connected_drive.markdown b/source/_components/sensor.bmw_connected_drive.markdown index 394fd2c31e..083e5124a6 100644 --- a/source/_components/sensor.bmw_connected_drive.markdown +++ b/source/_components/sensor.bmw_connected_drive.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "BMW connected drive" -description: "Instructions on how to setup your BMW connected drive account with Home Assistant." +title: "BMW Connected Drive Sensor" +description: "Instructions on how to setup your BMW Connected Drive account with Home Assistant." date: 2018-01-10 23:00 sidebar: true comments: false From d0268f1e053fe456a31f88a2b0361b924f842ddd Mon Sep 17 00:00:00 2001 From: Norien Date: Sun, 15 Apr 2018 07:20:16 -0400 Subject: [PATCH 235/371] Update light.nanoleaf_aurora.markdown (#5175) in current build `- platform: aurora` is not found however `- platform: nanoleaf_aurora` works ok! --- source/_components/light.nanoleaf_aurora.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/light.nanoleaf_aurora.markdown b/source/_components/light.nanoleaf_aurora.markdown index 074bd1c77f..4f066dc7b2 100644 --- a/source/_components/light.nanoleaf_aurora.markdown +++ b/source/_components/light.nanoleaf_aurora.markdown @@ -21,7 +21,7 @@ To enable the Aurora lights, add the following lines to your `configuration.yaml ```yaml # Example configuration.yaml entry light: - - platform: aurora + - platform: nanoleaf_aurora host: 192.168.1.10 token: xxxxxxxxxxxxxxxxxxxxx ``` From 75520f8d642fa7342fd3aa2dd3b41d8b2d413ba1 Mon Sep 17 00:00:00 2001 From: stephanerosi Date: Sun, 15 Apr 2018 14:06:27 +0200 Subject: [PATCH 236/371] Media player webostv next/previous buttons (#5183) * Media player webostv next/previous buttons Description of the change visibles in https://github.com/home-assistant/home-assistant/pull/13829 * Fix formatting --- .../_components/media_player.webostv.markdown | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/source/_components/media_player.webostv.markdown b/source/_components/media_player.webostv.markdown index 707ef55a90..cb4fe0c757 100644 --- a/source/_components/media_player.webostv.markdown +++ b/source/_components/media_player.webostv.markdown @@ -19,7 +19,7 @@ The `webostv` platform allows you to control a [LG](http://www.lg.com/) webOS Sm To begin with enable *LG Connect Apps* feature in *Network* settings of the TV [instructions](http://www.lg.com/uk/support/product-help/CT00008334-1437131798537-others). -Once basic configuration is added to your `configuration.yaml` *Configuration* card should prompt on your HA's States. Follow the instructions and accept pairing request on your TV. +Once basic configuration is added to your `configuration.yaml` *Configuration* card should prompt on your Home Assistants's states. Follow the instructions and accept pairing request on your TV. Pairing information will be saved to the `filename:` provided in configuration; this process is IP sensitive, in case the IP address of your TV would change in future. @@ -42,10 +42,12 @@ Configuration variables: - **timeout** (*Optional*): The timeout for connections to the TV in seconds. - **filename** (*Optional*): The filename where the pairing key with the TV should be stored. This path is relative to Home Assistant's config directory. It defaults to `webostv.conf`. - **customize** array (*Optional*): List of options to customize. - - ***sources** array (*Optional*): List of hardware and webOS App inputs. + - **sources** array (*Optional*): List of hardware and webOS App inputs. If you do not specify `host:`, all LG webOS Smart TVs within your network will be auto-discovered. +### {% linkable_title Example %} + A full configuration example will look like the sample below: ```yaml @@ -67,15 +69,15 @@ media_player: - makotv - netflix ``` -** avoid using `[ ]` in the `name:` of your device. +Avoid using `[ ]` in the `name:` of your device. -*Turn On Action* +### {% linkable_title Turn on action %} Home Assistant is able to turn on a LG webOS Smart TV if you specify an action, like HDMI-CEC or WakeOnLan. Common for webOS 3.0 and higher would be to use WakeOnLan feature. -To use this feature your TV should be connected to your network via Ethernet rather than Wireless and you should enable *LG Connect Apps* feature in *Network* settings of the TV [instructions](http://www.lg.com/uk/support/product-help/CT00008334-1437131798537-others) (or *Mobile App* in *General* settings for older models) (*may vary by version). +To use this feature your TV should be connected to your network via Ethernet rather than Wireless and you should enable *LG Connect Apps* feature in *Network* settings of the TV [instructions](http://www.lg.com/uk/support/product-help/CT00008334-1437131798537-others) (or *Mobile App* in *General* settings for older models). ```yaml # Example configuration.yaml entry @@ -90,9 +92,16 @@ media_player: data: mac: B4:E6:2A:1E:11:0F ``` + Any other [actions](/docs/automation/action/) to power on the device can be configured. - -*Sources* +### {% linkable_title Sources %} To obtain complete list of available sources currently configured on the TV, once the webOS TV is configured and linked, while its powered on head to the **Developer Tools** > **States**, find your `media_player.` and use the sources listed in `source_list:` remembering to split them per line into your `sources:` configuration. + +### {% linkable_title Next/Previous buttons %} + +The behaviour of the next and previsous buttons is different depending on the active source: + + - if the source is 'LiveTV' (television): next/previous buttons act as channel up/down + - otherwise: next/previsous buttons act as next/previous track From 26c45c852b22c7e9ad3d9f5dab4f493fc2a19952 Mon Sep 17 00:00:00 2001 From: Darren Reynolds Date: Sun, 15 Apr 2018 22:06:40 +1000 Subject: [PATCH 237/371] Add Doorbell ring examples (#5180) * Add Doorbell ring examples Add Doorbell ring examples for SONOS media players and hass_url_override option explanation. * Fix typos --- source/_components/doorbird.markdown | 74 +++++++++++++++++++++++++++- 1 file changed, 72 insertions(+), 2 deletions(-) diff --git a/source/_components/doorbird.markdown b/source/_components/doorbird.markdown index 30cd891c00..9db3c71d86 100644 --- a/source/_components/doorbird.markdown +++ b/source/_components/doorbird.markdown @@ -20,9 +20,10 @@ To connect your device, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry doorbird: - host: IP_OR_HOSTNAME + host: DOORBIRD_IP_OR_HOSTNAME username: YOUR_USERNAME password: YOUR_PASSWORD + hass_url_override: HASS_IP ``` Configuration variables: @@ -31,8 +32,77 @@ Configuration variables: - **username** (*Required*): The username of a non-administrator user account on the device. - **password** (*Required*): The password for the user specified. - **doorbell_events** (*Optional*): Setting this to `true` this will register a callback URL with the device so that events can be published to the event bus when the doorbell rings. -- **hass_url_override** (*Optional*): If your DoorBird cannot connect to the machine running Home Assistant because you are using dynamic DNS or some other HTTP configuration, specify the LAN IP of the machine here to force a LAN connection. +- **hass_url_override** (*Optional*): If your DoorBird cannot connect to the machine running Home Assistant because you are using dynamic DNS or some other HTTP configuration (such as HTTPS), specify the LAN IP of the machine here to force a LAN connection.

Enabling `doorbell_events` will delete all other registered push notification services with the device every time Home Assistant starts. This will not affect notifications delivered by the DoorBird mobile app.

+ +### Doorbell Sound Examples + +You can create an automation that triggers on event `doorbird_doorbell` to play a doorbell sound when the Doorbird button is pressed. This should work with any media player. + +#### Example using SONOS + +[`SONOS`](http://www.sonos.com) players have features allowing for "snapshotting" the current state of some or all players so those state(s) can be "restored" at a later time. This feature is perfect for implementing a doorbell sound (from Doorbird or any other Doorbell setup for that matter). The [`media_player.sonos`](/components/media_player.sonos/) platform includes the [`SONOS_SNAPSHOT`](/components/media_player.sonos/#service-sonos_snapshot) and [`SONOS_RESTORE`](/components/media_player.sonos/#service-sonos_restore) features. The result of not using these features is any currently playing songs or media will not continue playing after the doorbell sound has played and you will be left with the doorbell sound queued as the last played song. This setup allows for seamless ringing of the doorbell and all SONOS devices continuing nicely on as if nothing had happened. + +The example script below takes a snapshot of three SONOS players that are not currently grouped together, joins the three players in a group (so the sound plays at the same time on all players), plays the doorbell MP3 sound, unjoins the players from the group and finally restores the players to their original state. When the players are grouped they are controlled by refering to the `master`. + +Automation file: + +```yaml +- alias: Doorbird ring + trigger: + platform: event + event_type: doorbird_doorbell + action: + service: script.turn_on + entity_id: script.doorbell +``` + +Script file: + +```yaml +doorbell: + alias: Ring Doorbell + sequence: + - service: media_player.sonos_snapshot + data: + entity_id: + - media_player.kitchen + - media_player.master_bedroom + - media_player.study + - service: media_player.sonos_join + data: + master: media_player.study + entity_id: + - media_player.kitchen + - media_player.master_bedroom + - media_player.study + - service: media_player.play_media + data: + entity_id: media_player.study # the group master + media_content_id: http://10.1.1.10/sounds/doorbell.mp3 # this is on a NAS but could be HASS local + media_content_type: music + - service: media_player.volume_set + data: + entity_id: # can still control the volume of grouped players indivdually + - media_player.study + - media_player.kitchen + - media_player.master_bedrom + volume_level: 0.50 + - delay: + seconds: 4 # wait while the sound plays + - service: media_player.sonos_unjoin + data: + entity_id: + - media_player.kitchen + - media_player.master_bedroom + - media_player.study + - service: media_player.sonos_restore + data: + entity_id: + - media_player.kitchen + - media_player.master_bedroom + - media_player.study +``` From 8bacd6162f7ef4c16ad8bfe53f9fbbd99571c699 Mon Sep 17 00:00:00 2001 From: Colin Frei Date: Sun, 15 Apr 2018 15:17:54 +0200 Subject: [PATCH 238/371] Link to correct holidays version (#5184) --- source/_components/binary_sensor.workday.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/binary_sensor.workday.markdown b/source/_components/binary_sensor.workday.markdown index edc34b5a37..b63d8f778d 100644 --- a/source/_components/binary_sensor.workday.markdown +++ b/source/_components/binary_sensor.workday.markdown @@ -32,8 +32,8 @@ binary_sensor: Configuration variables: - **name** (*Optional*): A name for this sensor. Defaults to *Workday Sensor* -- **country** (*Required*): Country code according to [holidays](https://pypi.python.org/pypi/holidays/0.9.3) notation. -- **province** (*Optional*): Province code according to [holidays](https://pypi.python.org/pypi/holidays/0.9.3) notation. Defaults to None. +- **country** (*Required*): Country code according to [holidays](https://pypi.python.org/pypi/holidays/0.9.4) notation. +- **province** (*Optional*): Province code according to [holidays](https://pypi.python.org/pypi/holidays/0.9.4) notation. Defaults to None. - **workdays** (*Optional*): List of workdays. Defaults to `mon`, `tue`, `wed`, `thu`, `fri`. - **excludes** (*Optional*): List of workday excludes. Defaults to `sat`, `sun`, `holiday`. - **days_offset** (*Optional*): Set days offset. Defaults to `0`. From 9d71a518737ed8744d2588413cee60d233d804c4 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 15 Apr 2018 17:16:18 +0200 Subject: [PATCH 239/371] Add details about conditions --- source/_components/weather.markdown | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/source/_components/weather.markdown b/source/_components/weather.markdown index 7babb6f8e9..dd9d634990 100644 --- a/source/_components/weather.markdown +++ b/source/_components/weather.markdown @@ -13,4 +13,22 @@ The `weather` platforms are gathering meteorological information from web servic Home Assistant currently supports free web services and such which require a registration. Please check the sidebar for a full list of supported `weather` platforms. +## {% linkable_title Condition mapping %} + +The `weather` platform only knows the below listed conditions. The reason for this is that for these conditions is an icon from [Material Design Icons](https://materialdesignicons.com/) available. + +- 'cloudy' +- 'fog' +- 'hail' +- 'lightning' +- 'lightning-rainy' +- 'partlycloudy' +- 'pouring' +- 'rainy' +- 'snowy' +- 'snowy-rainy' +- 'sunny' +- 'windy' +- 'windy-variant' +- 'exceptional': From a6795e584c0e1baa31972113140c250100fee69f Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 15 Apr 2018 17:24:14 +0200 Subject: [PATCH 240/371] Add link --- source/_components/weather.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/weather.markdown b/source/_components/weather.markdown index dd9d634990..c256cae2a8 100644 --- a/source/_components/weather.markdown +++ b/source/_components/weather.markdown @@ -15,7 +15,7 @@ Home Assistant currently supports free web services and such which require a reg ## {% linkable_title Condition mapping %} -The `weather` platform only knows the below listed conditions. The reason for this is that for these conditions is an icon from [Material Design Icons](https://materialdesignicons.com/) available. +The `weather` platform only knows the below listed conditions. The reason for this is that for these conditions is an icon from [Material Design Icons](https://materialdesignicons.com/) available and mapped in the [frontend](https://github.com/home-assistant/home-assistant-polymer/blob/master/src/cards/ha-weather-card.html#L77). - 'cloudy' - 'fog' From 424dc3013c3c74a76208b2349446fb86eb503d2e Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 15 Apr 2018 17:28:56 +0200 Subject: [PATCH 241/371] Minor updates --- source/_components/weather.bom.markdown | 3 +++ source/_components/weather.buienradar.markdown | 5 ++++- source/_components/weather.darksky.markdown | 13 +++++-------- source/_components/weather.metoffice.markdown | 3 +++ source/_components/weather.openweathermap.markdown | 2 ++ source/_components/weather.yweather.markdown | 2 ++ source/_components/weather.zamg.markdown | 2 ++ 7 files changed, 21 insertions(+), 9 deletions(-) diff --git a/source/_components/weather.bom.markdown b/source/_components/weather.bom.markdown index 3a9d64c81a..fe26c58337 100644 --- a/source/_components/weather.bom.markdown +++ b/source/_components/weather.bom.markdown @@ -15,9 +15,12 @@ ha_iot_class: "Cloud Polling" The `bom` weather platform uses the [Australian Bureau of Meteorology (BOM)](http://www.bom.gov.au) as a source for current (half-hourly) meteorological data. +## {% linkable_title Configuration %} + To add the BOM weather platform to your installation, add the following to your `configuration.yaml` file: ```yaml +# Example configuration.yaml entry weather: - platform: bom ``` diff --git a/source/_components/weather.buienradar.markdown b/source/_components/weather.buienradar.markdown index b2a42e7661..0b4ef3f0db 100644 --- a/source/_components/weather.buienradar.markdown +++ b/source/_components/weather.buienradar.markdown @@ -14,8 +14,11 @@ ha_iot_class: "Cloud Polling" --- The `buienradar` platform uses [buienradar.nl](http://buienradar.nl/) as a source for current meteorological data for your location. The weather forecast is delivered by Buienradar, who provides a web service that provides detailed weather information for users in The Netherlands. + The relevant weather station used will be automatically selected based on the location specified in the Home Assistant configuration (or in the Buienradar weather/sensor component). A map of all available weather stations can be found [here](https://www.google.com/maps/d/embed?mid=1NivHkTGQUOs0dwQTnTMZi8Uatj0). +## {% linkable_title Configuration %} + To add the Buienradar weather to your installation, add the following to your `configuration.yaml` file: ```yaml @@ -26,7 +29,7 @@ weather: Configuration variables: -- **name** (*Optional*): You can specify a name of the component, but do not have to. If you specify a name, the weather component will get an entity name of 'weather.[name]'; if no name is specified, it will try to set its name to 'weather.BR_[stationname]'. However at the moment in time, the entity is created, no data has been retrieved yet, so the entity will get named 'weather.BR_unknown_station'. Later the station name will be known and get updated, but the entity name remains. +- **name** (*Optional*): You can specify a name of the component, but do not have to. If you specify a name, the weather component will get an entity name of `weather.[name]`; if no name is specified, it will try to set its name to `weather.BR_[stationname]`. However at the moment in time, the entity is created, no data has been retrieved yet, so the entity will get named `weather.BR_unknown_station`. Later the station name will be known and get updated, but the entity name remains. - **latitude** (*Optional*): Latitude to use for selection of data source location. Longitude and latitude will be taken from Home Assistant configuration but can be overridden/changed in this component to select a different location for Buienradar. - **longitude**(*Optional*): Longitude to use for selection of data source location. Longitude and latitude will be taken from Home Assistant configuration but can be overridden/changed in this component to select a different location for Buienradar. - **forecast** (*Optional*): 'True' to add a temperature forecast, 'False' to suppress it. diff --git a/source/_components/weather.darksky.markdown b/source/_components/weather.darksky.markdown index 1d7c843b35..6a3b1ad138 100644 --- a/source/_components/weather.darksky.markdown +++ b/source/_components/weather.darksky.markdown @@ -14,17 +14,14 @@ ha_release: 0.61 ha_iot_class: "Cloud Polling" --- -The `darksky` platform uses the [Dark Sky](https://darksky.net/) web service as -a source for meteorological data for your location. +The `darksky` platform uses the [Dark Sky](https://darksky.net/) web service as a source for meteorological data for your location. -You need an API key which is free but requires -[registration](https://darksky.net/dev/register). The free tier allows up to -1000 calls per day, this platform updates at most every 3 minutes, using up to -480 of those calls. +## {% linkable_title Configuration %} + +You need an API key which is free but requires [registration](https://darksky.net/dev/register). The free tier allows up to 1000 calls per day, this platform updates at most every 3 minutes, using up to 480 of those calls.

-[Dark Sky](https://darksky.net/dev/) will charge you $0.0001 per API call if you -enter your credit card details and create more than 1000 calls per day. +[Dark Sky](https://darksky.net/dev/) will charge you $0.0001 per API call if you enter your credit card details and create more than 1000 calls per day.

To add Dark Sky to your installation, add the following to your `configuration.yaml` file: diff --git a/source/_components/weather.metoffice.markdown b/source/_components/weather.metoffice.markdown index 5875121806..df624d2a9c 100644 --- a/source/_components/weather.metoffice.markdown +++ b/source/_components/weather.metoffice.markdown @@ -15,9 +15,12 @@ ha_iot_class: "Cloud Polling" The `metoffice` weather platform uses the Met Office's [DataPoint API][datapoint] for weather data. +## {% linkable_title Configuration %} + To add the Met Office weather platform to your installation, you'll need to register for a free API key at the link above and then add the following to your `configuration.yaml` file: ```yaml +# Example configuration.yaml entry weather: - platform: metoffice api_key: YOUR_API_KEY diff --git a/source/_components/weather.openweathermap.markdown b/source/_components/weather.openweathermap.markdown index 0bb8d2bf9e..53f7e9a348 100644 --- a/source/_components/weather.openweathermap.markdown +++ b/source/_components/weather.openweathermap.markdown @@ -15,6 +15,8 @@ ha_iot_class: "Cloud Polling" The `openweathermap` weather platform uses [OpenWeatherMap](http://openweathermap.org/) as a source for current meteorological data for your location. +## {% linkable_title Configuration %} + You need an API key which is free but requires a [registration](http://home.openweathermap.org/users/sign_up). To add OpenWeatherMap to your installation, add the following to your `configuration.yaml` file: diff --git a/source/_components/weather.yweather.markdown b/source/_components/weather.yweather.markdown index af311a0030..27bbda8214 100644 --- a/source/_components/weather.yweather.markdown +++ b/source/_components/weather.yweather.markdown @@ -19,6 +19,8 @@ The `yweather` platform uses [Yahoo Weather](https://www.yahoo.com/news/weather/ Use of the Yahoo Weather API should not exceed reasonable request volume. Access is limited to 2000 signed calls per day.

+## {% linkable_title Configuration %} + The `woeid` (Where On Earth ID) for your location, as shown in the example below. You can find your WOEID by copying the numeric digits at the end of the URL for your location at [Yahoo Weather](https://www.yahoo.com/news/weather/). If you don't add a WOEID, it will be generated from Home Assistant's latitude and longitude. To add Yahoo Weather to your installation, add the following to your `configuration.yaml` file: diff --git a/source/_components/weather.zamg.markdown b/source/_components/weather.zamg.markdown index cf805fd3a4..b3112d97ea 100644 --- a/source/_components/weather.zamg.markdown +++ b/source/_components/weather.zamg.markdown @@ -17,6 +17,8 @@ The `zamg` platform uses meteorological details published by the Austrian weathe Only observations for capital cities are publicly available. You can check the list of stations in [CSV format](http://www.zamg.ac.at/ogd). +## {% linkable_title Configuration %} + To add ZAMG to your installation, add the following to your `configuration.yaml` file: ```yaml From 429040954a30d017d86efc47bb6329994da6d62a Mon Sep 17 00:00:00 2001 From: apastuszak Date: Sun, 15 Apr 2018 12:48:05 -0400 Subject: [PATCH 242/371] Change order or ProxyPass in first example (#5185) I was not able to login to Home Assistant till I change he Home Assistant config to place the Websocket reverse proxy info BEFORE the web UI info. In the other order it loads, but never lets me log in. If I reverse them, then I login just fine. --- source/_docs/ecosystem/apache.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/ecosystem/apache.markdown b/source/_docs/ecosystem/apache.markdown index ae0c192511..92c27eb51a 100644 --- a/source/_docs/ecosystem/apache.markdown +++ b/source/_docs/ecosystem/apache.markdown @@ -35,10 +35,10 @@ To be able to access to your Home Assistant instance by using https://home.examp ServerName home.example.org ProxyPreserveHost On ProxyRequests off - ProxyPass / http://localhost:8123/ - ProxyPassReverse / http://localhost:8123/ ProxyPass /api/websocket ws://localhost:8123/api/websocket ProxyPassReverse /api/websocket ws://localhost:8123/api/websocket + ProxyPass / http://localhost:8123/ + ProxyPassReverse / http://localhost:8123/ RewriteEngine on RewriteCond %{HTTP:Upgrade} =websocket [NC] From ce53c0e9f0e02d02ec827e3e83c1b9c03a3fe372 Mon Sep 17 00:00:00 2001 From: Benedict Aas Date: Sun, 15 Apr 2018 17:52:21 +0100 Subject: [PATCH 243/371] Add more math functions to templates (#5186) Document usage of `sin`, `cos`, `tan`, and `sqrt`, and the `e`, `pi`, and `tau` constants. --- source/_docs/configuration/templating.markdown | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index 6b3c34b0a0..9eafdece87 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -80,6 +80,13 @@ Home Assistant adds extensions to allow templates to access all of the current s - `float` will format the output as float. - `strptime(string, format)` will parse a string to a datetime based on a [format][strp-format]. - `log(value, base)` will take the logarithm of the input. When the base is omitted, it defaults to `e` - the natural logarithm. Can also be used as a filter. +- `sin(value)` will return the sine of the input. Can be used as a filter. +- `cos(value)` will return the cosine of the input. Can be used as a filter. +- `tan(value)` will return the tangent of the input. Can be used as a filter. +- `sqrt(value)` will return the square root of the input. Can be used as a filter. +- `e` mathematical constant, approximately 2.71828. +- `pi` mathematical constant, approximately 3.14159. +- `tau` mathematical constant, approximately 6.28318. - Filter `round(x)` will convert the input to a number and round it to `x` decimals. - Filter `timestamp_local` will convert an UNIX timestamp to local time/data. - Filter `timestamp_utc` will convert an UNIX timestamp to UTC time/data. @@ -274,6 +281,10 @@ The following overview contains a couple of options to get the needed values: {% raw %}{{ float(value_json) * (2**10) }}{% endraw %} {% raw %}{{ value_json | log }}{% endraw %} {% raw %}{{ log(1000, 10) }}{% endraw %} +{% raw %}{{ sin(pi / 2) }}{% endraw %} +{% raw %}{{ cos(tau) }}{% endraw %} +{% raw %}{{ tan(pi) }}{% endraw %} +{% raw %}{{ sqrt(e) }}{% endraw %} # Timestamps {% raw %}{{ value_json.tst | timestamp_local }}{% endraw %} From 0b5ee4d0c404e3f1f1d60fc945d878669eb88f18 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 15 Apr 2018 19:02:38 +0200 Subject: [PATCH 244/371] Move raw --- source/_components/light.mqtt.markdown | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/source/_components/light.mqtt.markdown b/source/_components/light.mqtt.markdown index eae91d0553..13e1cd9f86 100644 --- a/source/_components/light.mqtt.markdown +++ b/source/_components/light.mqtt.markdown @@ -204,6 +204,7 @@ In this section you will find some real life examples of how to use this sensor. To enable a light with brightness and RGB support in your installation, add the following to your `configuration.yaml` file: +{% raw %} ```yaml # Example configuration.yml entry light: @@ -215,14 +216,15 @@ light: brightness_command_topic: "office/rgb1/brightness/set" rgb_state_topic: "office/rgb1/rgb/status" rgb_command_topic: "office/rgb1/rgb/set" - state_value_template: "{% raw %}{{ value_json.state }}{% endraw %}" - brightness_value_template: "{% raw %}{{ value_json.brightness }}{% endraw %}" - rgb_value_template: "{% raw %}{{ value_json.rgb | join(',') }}{% endraw %}" + state_value_template: "{{ value_json.state }}" + brightness_value_template: "{{ value_json.brightness }}" + rgb_value_template: "{{ value_json.rgb | join(',') }}" qos: 0 payload_on: "ON" payload_off: "OFF" optimistic: false ``` +{% endraw %} ### {% linkable_title Brightness and no RGB support %} @@ -260,7 +262,6 @@ light: on_command_type: 'brightness' ``` - ### {% linkable_title Implementations %} - A [basic example](https://github.com/mertenats/open-home-automation/tree/master/ha_mqtt_light) using a nodeMCU board (ESP8266) to control its built-in LED (on/off). From 124a41c3bb84440ef7bb830211e6c6abe9861427 Mon Sep 17 00:00:00 2001 From: GaryOkie <37629938+GaryOkie@users.noreply.github.com> Date: Sun, 15 Apr 2018 13:34:29 -0500 Subject: [PATCH 245/371] Update cover.wink.markdown (#5187) * Update cover.wink.markdown I made a suggestion to W1ll1am to improving the doc to mention availability of the MyQ Cover. He said good call - go for it and edit it. * Remove whitespaces and empty lines --- source/_components/cover.wink.markdown | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/source/_components/cover.wink.markdown b/source/_components/cover.wink.markdown index 8e81d8ac79..8c82634187 100644 --- a/source/_components/cover.wink.markdown +++ b/source/_components/cover.wink.markdown @@ -13,24 +13,20 @@ ha_release: 0.13 ha_iot_class: "Cloud Polling" --- -Wink cover/garage door functionality depends on the product you're using. With GoControl/Linear Home Assistant can open, close, and view state. Chamberlain is currently limited to view only. Meaning Home Assistant will only show the current state of the door and control has been disabled (by Chamberlain). If you have a Chamberlain garage door, and would like to control it via Home Assistant, please contact Chamberlain and request that they re-enabled third-party control. +Wink Cover garage door functionality varies on the product. Home Assistant can open, close, and view state of GoControl/Linear openers. For Chamberlain MyQ-enabled openers, Home Assistant is limited to show current state (open or closed) only using this Wink cover. This restriction was imposed by Chamberlain for third party control. Wink suggests that MyQ customers should contact Chamberlain directly to inquire about expanding permissions. -The following quote is from Wink. - -> As part of our agreement with Chamberlain, third-party access to control Chamberlain garage doors has been restricted. Please contact Chamberlain directly to inquire about permissions. +The [MyQ Cover](/components/cover.myq/) does provide full functionality for opening and closing Chamberlain MyQ-enabled garage doors. If installed along with the Wink Component, a duplicate garage door entity may exist. In that case, the semi-functional Wink garage door entity can be hidden via customize.yaml. The requirement is that you have setup [Wink](/components/wink/). - ### {% linkable_title Supported cover devices %} - Bali window treatments - Lutron shades - Pella motorized blinds and shades - GoControl garage door opener -- Chamberlain (Limited functionality) (No Wink hub required) +- Chamberlain MyQ (Limited functionality) (No Wink hub required)

The above devices are confirmed to work, but others may work as well.

- From 9465ec0c1a9c50cc2651ca93df960a1c7da18d77 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 16 Apr 2018 07:39:23 +0100 Subject: [PATCH 246/371] Adding list of supported components (#5191) Only the blog post says what components are supported, making it confusing for people. Adding that information to the docs. --- source/_docs/configuration/entity-registry.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_docs/configuration/entity-registry.markdown b/source/_docs/configuration/entity-registry.markdown index e31e014c32..6c75ad8dfe 100644 --- a/source/_docs/configuration/entity-registry.markdown +++ b/source/_docs/configuration/entity-registry.markdown @@ -52,3 +52,7 @@ value to each entry. cause integrations to fail and might be removed in the future. _Added in Home Assistant 0.64._ + +{% linkable_title Supported Components %} + +At the moment, only the following components are supported: Z-Wave, Hue, Nest, LIFX, Sonos, Apple TV From 65d8d892e6e3f9e50e9256ff1b35c2e08d3eee3e Mon Sep 17 00:00:00 2001 From: shred86 <32663154+shred86@users.noreply.github.com> Date: Mon, 16 Apr 2018 01:40:23 -0500 Subject: [PATCH 247/371] Update to lights (#5190) You cannot currently change the light color with this component. The dimmer functionality is currently in the dev branch and will hopefully be in the next HA update, so I left that in for now. --- source/_components/abode.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/abode.markdown b/source/_components/abode.markdown index 34ceaada84..87b689230b 100644 --- a/source/_components/abode.markdown +++ b/source/_components/abode.markdown @@ -24,7 +24,7 @@ There is currently support for the following device types within Home Assistant: - [Camera](/components/camera.abode/): Reports on `Camera` devices and will download and show the latest captured still image. - [Cover](/components/cover.abode/): Reports on `Secure Barriers` and can be used to open and close the cover. - [Lock](/components/cover.abode/): Reports on `Door Locks` and can be used to lock and unlock the door. -- [Light](/components/light.abode/): Reports on `Dimmer` lights and can be used to dim, change color, or turn the light on and off. +- [Light](/components/light.abode/): Reports on `Dimmer` lights and can be used to dim or turn the light on and off. - [Switch](/components/switch.abode/): Reports on `Power Switch` devices and can be used to turn the power switch on and off. Also reports on `Automations` set up in the Abode system and allows you to activate or deactivate them. - [Sensor](/components/sensor.abode/): Reports on `Temperature`, `Humidity`, and `Light` sensors. From 64df5f785a76db9eaa952c8eac252801a9dd2171 Mon Sep 17 00:00:00 2001 From: Robin Date: Mon, 16 Apr 2018 08:50:03 +0100 Subject: [PATCH 248/371] Propose edits to DuckDNS docs (#5181) * Propose reorder of config variables I've found this docs horribly confusing. `lets_encrypt.accept_terms` should appear at the top of the list as it's the first entered variable. Also this should become `required` as typically `optional` config variables are not displayed in the example config, but it is here. * Update duckdns.markdown * Minor changes --- source/_addons/duckdns.markdown | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/_addons/duckdns.markdown b/source/_addons/duckdns.markdown index 9c9049a066..13c8991667 100644 --- a/source/_addons/duckdns.markdown +++ b/source/_addons/duckdns.markdown @@ -26,10 +26,10 @@ featured: true Configuration variables: +- **lets_encrypt.accept_terms** (*Optional*): If you accept the [Let's Encrypt Subscriber Agreement][le], it will generate and update Let's Enrypt certificates for your DuckDNS domain. - **token** (*Required*): Your Duck DNS API key. - **domains** (*Required*): A list of domains to update DNS. -- **seconds** (*Optional*): Seconds between updates to Duck DNS. -- **lets_encrypt.accept_terms** (*Optional*): If you accept the [Let's Encrypt Subscriber Agreement][le], it will generate & update Let's Enrypt certificates for your DuckDNS domain. +- **seconds** (*Required*): Seconds between updates to Duck DNS. [le]: https://letsencrypt.org/repository/ @@ -51,3 +51,5 @@ If you use a port other than `8123` or an SSL proxy, change the port number acco You'll need to forward the port you listed in your configuration (8123 in the example above) on your router to your Home Assistant system. You can find guides on how to do this on [Port Forward](https://portforward.com/) - noting that you'll only need to forward the TCP port. Ensure that you allocate the Home Assistant system a fixed IP on your network before you configure port forwarding. You can do this either on the computer itself (see the [install guide](/hassio/installation/) or via a static lease on your router. + +Restart Home Assistant for the configured changes to take effect. When you access the Home Assistant frontend you will now need to use `https`, even when accessing local instances, for example at `https://192.168.0.1:8123`. From e607d1bf398628643c56dc0dc6c549a7d039b352 Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Mon, 16 Apr 2018 09:50:43 +0200 Subject: [PATCH 249/371] HA category updated (#5194) --- source/_components/device_tracker.xiaomi_miio.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/device_tracker.xiaomi_miio.markdown b/source/_components/device_tracker.xiaomi_miio.markdown index dad5feef5d..ae60404393 100644 --- a/source/_components/device_tracker.xiaomi_miio.markdown +++ b/source/_components/device_tracker.xiaomi_miio.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: xiaomi.png -ha_category: Sensor +ha_category: Presence Detection ha_version: 0.67 ha_iot_class: "Local Polling" --- From 8fc39cb9db9dfbd67a8fd677c9640b376b79e297 Mon Sep 17 00:00:00 2001 From: Flavio Barisi Date: Mon, 16 Apr 2018 09:51:27 +0200 Subject: [PATCH 250/371] Update device_tracker.owntracks_http.markdown (#5172) * Update device_tracker.owntracks_http.markdown Show battery value reported by owntracks * Update device_tracker.owntracks_http.markdown Fix * Fix configuration sample --- .../device_tracker.owntracks_http.markdown | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/source/_components/device_tracker.owntracks_http.markdown b/source/_components/device_tracker.owntracks_http.markdown index a4aa847712..cadf1f4589 100644 --- a/source/_components/device_tracker.owntracks_http.markdown +++ b/source/_components/device_tracker.owntracks_http.markdown @@ -34,3 +34,30 @@ Open OwnTracks and go to Connection preferences: - Identification: Turn **Authentication** on, username `homeassistant` and password is your API password that you use to login to Home Assistant. Host example: If I host my Home Assistant at `https://example.duckdns.org`, my name is Paulus and my phone is a Pixel I would set the host to be `https://example.duckdns.org/api/owntracks/paulus/pixel`. This will result in an entity with an ID of `device_tracker.paulus_pixel`. You can pick any name for the user and the device. + +Since the battery data is available as an attribute of the device tracker entity, it can be tracked with a [`template` sensor](/components/sensor.template/). + +{% raw %} +```yaml +# Example configuration.yaml entry +sensor: + - platform: template + sensors: + pixel_battery: + friendly_name: Pixel of Paulus + unit_of_measurement: "%" + value_template: '{{ states.device_tracker.paulus_pixel.attributes.battery|int }}' + icon_template: >- + {% set battery_level = states.device_tracker.paulus_pixel.attributes.battery|default(0)|int %} + {% set battery_round = (battery_level / 10) |int * 10 %} + {% if battery_round >= 100 %} + mdi:battery + {% elif battery_round > 0 %} + mdi:battery-{{ battery_round }} + {% else %} + mdi:battery-alert + {% endif %} + entity_id: + - device_tracker.paulus_pixel +``` +{% endraw %} From cae7305fda3fb3db1d7a0b23a102061873276dfa Mon Sep 17 00:00:00 2001 From: Robin Date: Mon, 16 Apr 2018 14:27:36 +0100 Subject: [PATCH 251/371] Add info on whitelisting (#5197) Needs to be added as causing issues for users https://community.home-assistant.io/t/0-67-whitelisted-dir-issues/50305/5 --- source/_components/sensor.file.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.file.markdown b/source/_components/sensor.file.markdown index 2b541830ad..8ae7216a7d 100644 --- a/source/_components/sensor.file.markdown +++ b/source/_components/sensor.file.markdown @@ -14,7 +14,7 @@ ha_release: 0.45 --- -The `file` sensor platform reads the entries from a plain-text file and shows the found value. Only the last line of the file is used. This is similar to do `$ tail -n 1 sensor.txt` on the command-line. +The `file` sensor platform reads the entries from a plain-text file and shows the found value. Only the last line of the file is used. This is similar to do `$ tail -n 1 sensor.txt` on the command-line. Note that file paths must be added to [whitelist_external_dirs](/docs/configuration/basic/). To enable the `file` sensor, add the following lines to your `configuration.yaml`: From 6f7e6f5cdeb4f99ea4b5951a52e5f4397ed491b2 Mon Sep 17 00:00:00 2001 From: Kyle Niewiada Date: Mon, 16 Apr 2018 13:41:07 -0400 Subject: [PATCH 252/371] correct possible typo (#5176) --- source/_components/device_tracker.google_maps.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/device_tracker.google_maps.markdown b/source/_components/device_tracker.google_maps.markdown index 6f2175a604..5b16f3c785 100644 --- a/source/_components/device_tracker.google_maps.markdown +++ b/source/_components/device_tracker.google_maps.markdown @@ -20,7 +20,7 @@ You first need to create an additional Google account and share your location wi This platform will create a file named `google_maps_location_sharing.conf` where it caches your login session.

-Since this platform is using an official API with the help of [locationsharinglib](https://github.com/costastf/locationsharinglib), Google seems to block access to your data the first time you've logged in with this component. +Since this platform is using an unofficial API with the help of [locationsharinglib](https://github.com/costastf/locationsharinglib), Google seems to block access to your data the first time you've logged in with this component. This issue can be fixed by logging in with your new account and approving your login on the [Device Activity](https://myaccount.google.com/device-activity) page.

From 70af38b086588e2b4e1309de0241be3b2401ea34 Mon Sep 17 00:00:00 2001 From: Lincoln Kirchoff Date: Mon, 16 Apr 2018 13:34:50 -0500 Subject: [PATCH 253/371] Add climate.modbus module documentation (#4593) * Added climate.modbus module documentation * Update climate.modbus.markdown Updated IOT class Local Push to Local Polling. * Reviewed comments for changes Added configuration tags, removed optional configuration values, and set the correct release version. * Fixed formatting with the configuration settings * :arrow_up: ha_release -> 0.68 --- source/_components/climate.modbus.markdown | 70 ++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 source/_components/climate.modbus.markdown diff --git a/source/_components/climate.modbus.markdown b/source/_components/climate.modbus.markdown new file mode 100644 index 0000000000..f489d27a4b --- /dev/null +++ b/source/_components/climate.modbus.markdown @@ -0,0 +1,70 @@ +--- +layout: page +title: "Modbus" +description: "Instructions how to integrate a Modbus thermostat within Home Assistant." +date: 2018-01-29 9:35 +sidebar: true +comments: false +sharing: true +footer: true +logo: modbus.png +ha_category: Thermostat +ha_release: 0.68 +ha_iot_class: "Local Polling" +--- + + +The `modbus` thermostat allows you to use a sensor value (current temperature) +and target value (target temperature) from [Modbus](http://www.modbus.org/) +registers. + +To use your Modbus thermostat in your installation, add the following to your `configuration.yaml` file: + +```yaml +climate: + - platform: modbus + name: Watlow F4T + slave: 1 + target_temp_register: 2782 + current_temp_register: 27586 + +``` + +{% configuration %} +name: + description: Name of the device + required: true + type: string +slave: + description: The number of the slave (Optional for tcp and upd Modbus, use 1). + required: true + type: int +target_temp_register: + description: Register number for target temperature (Setpoint). + required: true + type: int +current_temp_register: + description: Register number for current temperature (Process value). + required: true + type: int +data_type: + description: Response representation (int, uint, float, custom). If float selected, value will converted to IEEE 754 floating point format. + Default float. + required: false + type: string +count: + description: Number of registers to read. + required: false + type: int +precision: + description: Number of valid decimals, default 0. + required: false + type: int +{% endconfiguration %} + + +### {% linkable_title Services %} + +| Service | Description | +| ------- | ----------- | +| set_temperature | Set Temperature. Requires `value` to be passed in, which is the desired target temperature. `value` should be in the same type as `data_type` | From 560108c659bbc1d89c28892ab1180c38917a947b Mon Sep 17 00:00:00 2001 From: Khole Date: Mon, 16 Apr 2018 20:01:43 +0100 Subject: [PATCH 254/371] Hive R3 update (#4974) * R3-Dev * R3 - Sensor Update --- source/_components/binary_sensor.hive.markdown | 2 +- source/_components/sensor.hive.markdown | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/source/_components/binary_sensor.hive.markdown b/source/_components/binary_sensor.hive.markdown index ef695f4601..ffba6e29d1 100644 --- a/source/_components/binary_sensor.hive.markdown +++ b/source/_components/binary_sensor.hive.markdown @@ -16,7 +16,7 @@ ha_iot_class: "Cloud Polling" The 'hive' binary sensor component integrates your Hive sensors into Home Assistant. -The Hive sensor component supports the following Hive products: +The Hive binary sensor component supports the following Hive products: - **Hive Window or Door Sensor** - **Hive Motion Sensor** diff --git a/source/_components/sensor.hive.markdown b/source/_components/sensor.hive.markdown index 3e7350e147..4fa0221f31 100644 --- a/source/_components/sensor.hive.markdown +++ b/source/_components/sensor.hive.markdown @@ -14,8 +14,11 @@ ha_iot_class: "Cloud Polling" --- -The 'hive' sensor component can expose as a sensor the current online status of your Hive Hub. +The 'hive' sensor component exposes hive data as a sensor. +The Hive sensor component exposes the following sensors: +- **Hive Hub Online Status** +- **Hive Outside Temperature**

Full configuration details can be found on the main [Hive component](/components/hive/) page. From d434247c54ea96678b3cc63a05bec5ed9b626121 Mon Sep 17 00:00:00 2001 From: Jonathan Weinberg Date: Mon, 16 Apr 2018 16:33:49 -0400 Subject: [PATCH 255/371] Spelling fix (#5198) `c` was missing. --- source/_addons/duckdns.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_addons/duckdns.markdown b/source/_addons/duckdns.markdown index 13c8991667..123e975e97 100644 --- a/source/_addons/duckdns.markdown +++ b/source/_addons/duckdns.markdown @@ -26,7 +26,7 @@ featured: true Configuration variables: -- **lets_encrypt.accept_terms** (*Optional*): If you accept the [Let's Encrypt Subscriber Agreement][le], it will generate and update Let's Enrypt certificates for your DuckDNS domain. +- **lets_encrypt.accept_terms** (*Optional*): If you accept the [Let's Encrypt Subscriber Agreement][le], it will generate and update Let's Encrypt certificates for your DuckDNS domain. - **token** (*Required*): Your Duck DNS API key. - **domains** (*Required*): A list of domains to update DNS. - **seconds** (*Required*): Seconds between updates to Duck DNS. From 078167bb033d76addaf27b8f406474604c07af6f Mon Sep 17 00:00:00 2001 From: Heiko Thiery Date: Tue, 17 Apr 2018 19:06:39 +0200 Subject: [PATCH 256/371] Add documentation for AVM fritzbox smarthome component (#4076) * Add documentation for fritzhome Signed-off-by: Heiko Thiery * change component name and configuration Signed-off-by: Heiko Thiery * followed review comments Signed-off-by: Heiko Thiery * another rename Signed-off-by: Heiko Thiery * remove default from host Signed-off-by: Heiko Thiery * add documentation for device attributes Signed-off-by: Heiko Thiery * bump to ha_release 0.65 Signed-off-by: Heiko Thiery * :pencil2: Some spelling and grammar fixes * :pencil2: Grammar and spelling updates * :pencil2: Small grammar & spelling changes * :arrow_up: ha_release -> 0.68 --- source/_components/climate.fritzbox.markdown | 28 ++++++++++ source/_components/fritzbox.markdown | 54 ++++++++++++++++++++ source/_components/switch.fritzbox.markdown | 31 +++++++++++ 3 files changed, 113 insertions(+) create mode 100644 source/_components/climate.fritzbox.markdown create mode 100644 source/_components/fritzbox.markdown create mode 100644 source/_components/switch.fritzbox.markdown diff --git a/source/_components/climate.fritzbox.markdown b/source/_components/climate.fritzbox.markdown new file mode 100644 index 0000000000..65975ca77c --- /dev/null +++ b/source/_components/climate.fritzbox.markdown @@ -0,0 +1,28 @@ +--- +layout: page +title: "Fritzbox Thermostat" +description: "Instructions on how to integrate the AVM Fritzbox thermostat." +date: 2017-11-12 17:10 +sidebar: true +comments: false +sharing: true +footer: true +logo: avm.png +ha_category: Climate +ha_release: 0.68 +ha_iot_class: "Local Polling" +--- + +

+To get AVM fritzbox thermostat follow the instructions for the general [Fritzbox](/components/fritzbox/). +

+ +### {% linkable_title Attributes %} + +The are several attributes that can be useful for automations and templates. + +| Attribute | Description | +| --------- | ----------- | +| `device_locked` | The state of the key lock at the device. +| `locked` | The state of the lock for configuring the device via the app or the Fritzbox web interface. +| `low_battery` | The low battery state indication. diff --git a/source/_components/fritzbox.markdown b/source/_components/fritzbox.markdown new file mode 100644 index 0000000000..8d601368eb --- /dev/null +++ b/source/_components/fritzbox.markdown @@ -0,0 +1,54 @@ +--- +layout: page +title: "Fritzbox" +description: "Instructions on how to integrate the AVM Fritzbox Smart Home components." +date: 2018-02-18 17:10 +sidebar: true +comments: false +sharing: true +footer: true +logo: avm.png +ha_category: Hub +ha_release: 0.68 +ha_iot_class: "Local Polling" +--- + +The [AVM](www.avm.de) Fritzbox component for Home Assistant allows you to integrate the switch and climate devices. + +#### {% linkable_title Tested Devices %} + +- [FRITZ!Box 6490 Cable](https://avm.de/produkte/fritzbox/fritzbox-6490-cable/) +- [FRITZ!DECT 200](https://avm.de/produkte/fritzdect/fritzdect-200/) +- [Eurotronic Comet DECT](https://www.eurotronic.org/produkte/comet-dect.html) + + +## {% linkable_title Setup %} + +```yaml +# Example configuration.yaml entry +fritzbox: + devices: + - host: fritz.box + username: YOUR_USERNAME + password: YOUR_PASSWORD +``` + +{% configuration %} + devices: + description: A list of Fritzbox devices. + required: true + type: map + keys: + host: + description: The hostname or IP address of the Fritzbox. + required: true + type: optional + username: + description: The username for Smart Home access. + required: true + type: string + password: + description: The password of the user. + required: true + type: string +{% endconfiguration %} diff --git a/source/_components/switch.fritzbox.markdown b/source/_components/switch.fritzbox.markdown new file mode 100644 index 0000000000..83657be0c8 --- /dev/null +++ b/source/_components/switch.fritzbox.markdown @@ -0,0 +1,31 @@ +--- +layout: page +title: "Fritzbox Switch" +description: "Instructions on how to integrate the AVM Fritzbox switch." +date: 2017-11-12 17:10 +sidebar: true +comments: false +sharing: true +footer: true +logo: avm.png +ha_category: Switch +ha_release: 0.68 +ha_iot_class: "Local Polling" +--- + +

+To get AVM Fritzbox switch follow the instructions for the general [Fritzbox](/components/fritzbox/). +

+ +### {% linkable_title Attributes %} + +The are several attributes that can be useful for automations and templates. + +| Attribute | Description | +| --------- | ----------- | +| `device_locked` | The state of the key lock at the device. +| `locked` | The state of the lock for configuring the device via the app or the Fritzbox web interface. +| `temperature_unit` | The unit of the temperature sensor (only available if the device support temperature sensor). +| `temperature` | The current temperature sensor reading (only available if the device supports temperature sensor). +| `total_consumption` | The total power consumption since the beginning of operation (only available if the device supports power meter function). +| `total_consumption_unit` | The unit of the total_consumption (only available if the device supports power meter function). From e1747451fce0a1fe71a49dc7200677087c6be2d8 Mon Sep 17 00:00:00 2001 From: ChristianKuehnel Date: Tue, 17 Apr 2018 19:10:16 +0200 Subject: [PATCH 257/371] bmw_connected_drive: added documentation for new services (#5055) * added documentation for the newly implemented services * added documentation for update_state service * improved documentation * :pencil2: Several improvements. --- .../_components/bmw_connected_drive.markdown | 34 ++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/source/_components/bmw_connected_drive.markdown b/source/_components/bmw_connected_drive.markdown index fe8cabc71a..fe2d698b94 100644 --- a/source/_components/bmw_connected_drive.markdown +++ b/source/_components/bmw_connected_drive.markdown @@ -12,7 +12,7 @@ ha_category: Hub ha_release: 0.64 --- -This component lets you retrieve data on your BMW vehicle from the BMW Connected Drive portal. You need to have a working BMW Connected Drive account and a Connected Drive enabled vehicle for this to work. +This component lets you retrieve data on your BMW vehicle from the BMW Connected Drive portal. You need to have a working BMW Connected Drive account, and a Connected Drive enabled vehicle for this to work. For compatibility with your BMW vehicle check the [bimmer_connected page](https://github.com/m1n3rva/bimmer_connected) on github. @@ -52,6 +52,38 @@ bmw_connected_drive: type: string {% endconfiguration %} +## {% linkable_title Services %} + +The `bmw_connected_drive` component offers several services. In case you need to provide the vehicle identification number (VIN) as a parameter, you can see the VIN in the attributes of the device tracker for the vehicle. The VIN is a 17 digit alphanumeric string, e.g., `WBANXXXXXX1234567`. + +Using these services will impact the state of your vehicle. So use these services with care! + +### {% linkable_title Locking and unlocking %} + +The vehicle can be locked and unlocked via the lock component that is created automatically for each vehicle. Before invoking these services, make sure it's safe to lock/unlock the vehicle in the current situation. + +### {% linkable_title Air condition %} + +The air condition of the vehicle can be activated with the service `bmw_connected_drive.activate_air_conditioning`. + +What exactly is started here depends on the type of vehicle. It might range from just ventilation over auxiliary heating to real air conditioning. If your vehicle is equipped with auxiliary heating, only trigger this service if the vehicle is parked in a location where it is safe to use it (e.g., not in an underground parking or closed garage). + +The vehicle is identified via the parameter `vin`. + +### {% linkable_title Sound the horn %} + +The service `bmw_connected_drive.sound_horn` sounds the horn of the vehicle. Use this feature responsibly, as it might annoy your neighbors. The vehicle is identified via the parameter `vin`. + +### {% linkable_title Flash the lights %} + +The service `bmw_connected_drive.light_flash' flashes the lights of the vehicle. The vehicle is identified via the parameter `vin`. + +### {% linkable_title Update the state %} + +The service `bmw_connected_drive.update_state`fetches the last state of the vehicles of all your accounts from the BMW server. This does *not* trigger an update from the vehicle; it gets the data from the BMW servers. So this service does *not* interact with your vehicles. + +This service does not require any attributes. + ## {% linkable_title Disclaimer %} This software is not affiliated with or endorsed by BMW Group. From 04560310f95a80d0d060192120ba914bf56902ea Mon Sep 17 00:00:00 2001 From: Robin Date: Tue, 17 Apr 2018 18:11:44 +0100 Subject: [PATCH 258/371] Adds Sigfox sensor docs (#5130) * Create sensor.sigfox.markdown * Adds name * Address reviewer comments * Update logo * Add files via upload * :pencil2: Markdown tweak --- source/_components/sensor.sigfox.markdown | 47 ++++++++++++++++++++++ source/images/supported_brands/sigfox.png | Bin 0 -> 334112 bytes 2 files changed, 47 insertions(+) create mode 100644 source/_components/sensor.sigfox.markdown create mode 100644 source/images/supported_brands/sigfox.png diff --git a/source/_components/sensor.sigfox.markdown b/source/_components/sensor.sigfox.markdown new file mode 100644 index 0000000000..f3f0bbb0ea --- /dev/null +++ b/source/_components/sensor.sigfox.markdown @@ -0,0 +1,47 @@ +--- +layout: page +title: "Sigfox Sensor" +description: "Display messages from Sigfox devices in Home Assistant." +date: 2018-04-07 12:10 +sidebar: true +comments: false +sharing: true +footer: true +logo: sigfox.png +ha_category: Sensor +ha_iot_class: "Local Polling" +ha_release: 0.68 +--- + +[SigFox](https://www.sigfox.com/en) component adding a sensor for each Sigfox device registered with your account. The default name of sensors is `sigfox_{DEVICE_ID}` where `DEVICE_ID` is the devices Sigfox ID. The state of an added Sigfox sensor is the payload of the last message published by that device. Additionally, there are attributes for the latitude and longitude coordinates of the device, as well as the signal-to-noise ratio ( [snr](https://en.wikipedia.org/wiki/Signal-to-noise_ratio)). + +```yaml +# Example configuration.yaml entry +sensor: + - platform: sigfox + api_login: your_api_login + api_password: your_api_password +``` + +{% configuration %} +api_login: + description: Your Sigfox API login. + required: true + type: string +api_password: + description: Your Sigfox API password. + required: true + type: string +name: + description: The name to prepend to the device ID. + required: false + default: "sigfox" + type: string +{% endconfiguration %} + +Note that `your_api_login` and `your_api_password` are your **API access credentials** which can be accessed by following: + +1. Log into [Sigfox backend](https://backend.sigfox.com) +1. Select `GROUP` +1. Select `API ACCESS` +1. Click on `new` and create new access entry diff --git a/source/images/supported_brands/sigfox.png b/source/images/supported_brands/sigfox.png new file mode 100644 index 0000000000000000000000000000000000000000..fdc7200ec810d5e80b21bfe53a70846eeb8b97f3 GIT binary patch literal 334112 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≷!sBkgW~`dmOAH#o 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 Z1LL6VkX_UjMC_$|MN;;+ Date: Wed, 18 Apr 2018 01:21:57 +0800 Subject: [PATCH 259/371] Enable broadcast of Facebook bot messages (#4688) * enable broadcast of FB bot messages this should go together with PR https://github.com/home-assistant/home-assistant/pull/12459 it enables FB messenger broadcast ability to send messages to all people who interacted with the bot previously and have the chat open. * fixes as per request from reviewer. fixes as per request from reviewer. FB -> Facebook fixed indents. (not sure what 2x for each level was), but I fixed it as per sample above. * Update notify.facebook.markdown * :pencil2: Tiny fixes * Update notify.facebook.markdown * Update notify.facebook.markdown * :rocket: Trigger rebuild --- source/_components/notify.facebook.markdown | 24 ++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/source/_components/notify.facebook.markdown b/source/_components/notify.facebook.markdown index beb539c559..5b4e497947 100644 --- a/source/_components/notify.facebook.markdown +++ b/source/_components/notify.facebook.markdown @@ -50,7 +50,7 @@ automation: - '+919784516314' ``` -You can also send messages to users that do not have stored their phone number with Facebook, but this requires a bit more work. The Messenger platform uses page specific user IDs instead of a global user ID. You will need to enable a webhook for the "messages" event in Facebook's developer console. Once a user writes a message to a page, that webhook will then receive the user's page specific ID as part of the webhook's payload. Below is a simple PHP script that reacts to the message "get my id" and sends a reply containing the user's ID: +You can also send messages to users that do not have stored their phone number on Facebook, but this requires a bit more work. The Messenger platform uses page-specific user IDs instead of a global user ID. You will need to enable a webhook for the "messages" event in Facebook's developer console. Once a user writes a message to a page, that webhook will then receive the user's page specific ID as part of the webhook's payload. Below is a simple PHP script that reacts to the message "get my id" and sends a reply containing the user's ID: ```php Date: Tue, 17 Apr 2018 19:39:59 +0200 Subject: [PATCH 260/371] Adds documentation for Kodi discovery (#5144) * describe discovery * :pencil2: Language tweaks --- source/_components/media_player.kodi.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_components/media_player.kodi.markdown b/source/_components/media_player.kodi.markdown index a59d19fe34..83689d4c1a 100644 --- a/source/_components/media_player.kodi.markdown +++ b/source/_components/media_player.kodi.markdown @@ -17,7 +17,9 @@ ha_iot_class: "Local Push" The `kodi` platform allows you to control a [Kodi](http://kodi.tv/) multimedia system from Home Assistant. -To add Kodi to your installation, add the following to your `configuration.yaml` file: +The preferred way to set up the Kodi platform is by enabling the [discovery component](https://www.home-assistant.io/components/discovery/) which requires enabled [web interface](https://kodi.wiki/view/Web_interface) on your Kodi installation. + +In case the discovery does not work, or you need specific configuration variables, you can add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry From 56f0a1a3c367fb955c271c679b68f1a026efbc97 Mon Sep 17 00:00:00 2001 From: Tod Schmidt Date: Tue, 17 Apr 2018 13:40:16 -0400 Subject: [PATCH 261/371] Added REST API for tts_get_url (#5173) * Added REST API for tts_get_url * :pencil2: Language tweaks --- source/_components/tts.markdown | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/source/_components/tts.markdown b/source/_components/tts.markdown index b1d1899135..5fc0d8de47 100644 --- a/source/_components/tts.markdown +++ b/source/_components/tts.markdown @@ -88,3 +88,33 @@ data_template: ## {% linkable_title Cache %} The component has two caches. Both caches can be controlled with the `cache` option in the platform configuration or the service call `say`. A long time cache will be located on the file system. The in-memory cache for fast responses to media players will be auto-cleaned after a short period. + +## {% linkable_title REST Api %} + +#### {% linkable_title POST /api/tts_get_url %} + +Returns an URL to the generated TTS file. Platform and message are required. + +```json +{ + "plaform": "amazon_polly", + "message": "I am speaking now" +} +``` + +The return code is 200 if the file is generated. The message body will contain a JSON object with the URL. + +```json +{ + "url": "http://127.0.0.1:8123/api/tts_proxy/265944c108cbb00b2a621be5930513e03a0bb2cd_en_-_demo.mp3" +} +``` + +Sample `curl` command: + +```bash +$ curl -X POST -H "x-ha-access: YOUR_PASSWORD" \ + -H "Content-Type: application/json" \ + -d '{"message": "I am speaking now", "platform": "amazon_polly"}' \ + http://localhost:8123/api/tts_get_url +``` From b794665e79cf7b9fb2d03ca879743ef39b899047 Mon Sep 17 00:00:00 2001 From: Jaydev Shiroya Date: Tue, 17 Apr 2018 23:10:53 +0530 Subject: [PATCH 262/371] Update development_validation.markdown (#5201) Spelling Mistake --- source/developers/development_validation.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/developers/development_validation.markdown b/source/developers/development_validation.markdown index b629dcbe64..30b3dc77a8 100644 --- a/source/developers/development_validation.markdown +++ b/source/developers/development_validation.markdown @@ -21,7 +21,7 @@ Besides [voluptuous](https://pypi.python.org/pypi/voluptuous) default types, man - Time: `time`, `time_zone` - Misc: `template`, `slug`, `temperature_unit`, `latitude`, `longitude`, `isfile`, `sun_event`, `ensure_list`, `port`, `url`, and `icon` -To validate plaforms using [MQTT](/components/mqtt/), `valid_subscribe_topic` and `valid_publish_topic` are available. +To validate platforms using [MQTT](/components/mqtt/), `valid_subscribe_topic` and `valid_publish_topic` are available. Some things to keep in mind: From 26a9b298544e0d6c9398c2d40cfdaef0d806667c Mon Sep 17 00:00:00 2001 From: jcrowegitHu8 Date: Tue, 17 Apr 2018 12:54:29 -0500 Subject: [PATCH 263/371] Update media_player.samsungtv.markdown (#5202) --- source/_components/media_player.samsungtv.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/media_player.samsungtv.markdown b/source/_components/media_player.samsungtv.markdown index 53954f6693..d944b2b3a7 100644 --- a/source/_components/media_player.samsungtv.markdown +++ b/source/_components/media_player.samsungtv.markdown @@ -50,6 +50,7 @@ Currently known supported models: - EH5600 - F6400AF - F6400 +- F8000BF - D6505 - D6300SF - U6000 (port must be set to 8001) From 8f52412ebe00d25b3d024d6e69dc43d37b573f12 Mon Sep 17 00:00:00 2001 From: stephanerosi Date: Tue, 17 Apr 2018 19:55:51 +0200 Subject: [PATCH 264/371] Add examples on changing channel through play_media service (#5200) * Add examples on changing channel service As per following merge request https://github.com/home-assistant/home-assistant/pull/13934 * :pencil2: Language tweak --- .../_components/media_player.webostv.markdown | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/source/_components/media_player.webostv.markdown b/source/_components/media_player.webostv.markdown index 707ef55a90..0b1823db00 100644 --- a/source/_components/media_player.webostv.markdown +++ b/source/_components/media_player.webostv.markdown @@ -96,3 +96,27 @@ Any other [actions](/docs/automation/action/) to power on the device can be conf *Sources* To obtain complete list of available sources currently configured on the TV, once the webOS TV is configured and linked, while its powered on head to the **Developer Tools** > **States**, find your `media_player.` and use the sources listed in `source_list:` remembering to split them per line into your `sources:` configuration. + +### {% linkable_title Change channel through play_media service %} + +The `play_media` service can be used in a script to switch to the specified tv channel. +It selects the best matching cannel according to the `media_content_id` parameter: + 1. Channel number *(i.e. '1' or '6')* + 2. Exact channel name *(i.e. 'France 2' or 'CNN')* + 3. Substring in channel name *(i.e. 'BFM' in 'BFM TV')* + +```yaml +# Example action entry in script to switch to channel number 1 +service: media_player.play_media +data: + entity_id: media_player.lg_webos_smart_tv + media_content_id: 1 + media_content_type: "channel" + +# Example action entry in script to switch to channel including 'TF1' in its name +service: media_player.play_media +data: + entity_id: media_player.lg_webos_smart_tv + media_content_id: "TF1" + media_content_type: "channel" +``` From b2104a977069fa1368b9af289571109252b909e8 Mon Sep 17 00:00:00 2001 From: Nick Whyte Date: Wed, 18 Apr 2018 22:40:53 +1000 Subject: [PATCH 265/371] Doc for covers that only support `open_cover` and `close_cover` HomeKit (#5203) * Documentation for covers that only support `open_cover` and `close_cover` --- source/_components/homekit.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index 3b9fb899d5..0d04e5cb23 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -198,6 +198,8 @@ The following components are currently supported: | climate | Thermostat | All climate devices. | | cover | GarageDoorOpener | All covers that support `open` and `close` and have `garage` as their `device_class`. | | cover | WindowCovering | All covers that support `set_cover_position`. | +| cover | WindowCovering | All covers that support `open_cover` and `close_cover` through value mapping. (`open` -> `>=50`; `close` -> `<50`) | +| cover | WindowCovering | All covers that support `open_cover`, `stop_cover` and `close_cover` through value mapping. (`open` -> `>70`; `close` -> `<30`; `stop` -> every value in between) | | light | Light | Support for `on / off`, `brightness` and `rgb_color`. | | lock | DoorLock | Support for `lock / unlock`. | | sensor | TemperatureSensor | All sensors that have `Celsius` and `Fahrenheit` as their `unit_of_measurement` or `temperature` as their `device_class`. | From 444030d09fa7d505fbc2057868c070e2b5234df5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20Fr=C3=BCh?= Date: Wed, 18 Apr 2018 19:35:03 +0200 Subject: [PATCH 266/371] Document the `headers` configuration parameter of the RESTful switch (#5196) * Document the `headers` configuration parameter of the RESTful switch * Fix indent --- source/_components/switch.rest.markdown | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/source/_components/switch.rest.markdown b/source/_components/switch.rest.markdown index db7b6e6e98..79388ff24b 100644 --- a/source/_components/switch.rest.markdown +++ b/source/_components/switch.rest.markdown @@ -66,6 +66,10 @@ password: description: The password for accessing the REST endpoint. required: false type: string +headers: + description: The headers for the request. + required: false + type: list, string {% endconfiguration %}

@@ -82,13 +86,17 @@ This example shows a switch that uses a [template](/topics/templating/) to allow {"is_active": "true"} ``` +{% raw %} ```yaml switch: - platform: rest resource: http://IP_ADDRESS/led_endpoint body_on: '{"active": "true"}' body_off: '{"active": "false"}' - is_on_template: '{% raw %}{{value_json.is_active}}{% endraw %}' + is_on_template: '{{value_json.is_active}}' + headers: + Content-Type: application/json ``` +{% endraw %} `body_on` and `body_off` can also depend on the state of the system. For example, to enable a remote temperature sensor tracking on a radio thermostat, one has to send the current value of the remote temperature sensor. This can be achieved by using the template `{% raw %}'{"rem_temp":{{states.sensor.bedroom_temp.state}}}'{% endraw %}`. From 12906f47afdb7954f82c2700330d6ab5522cc505 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 18 Apr 2018 22:30:17 -0400 Subject: [PATCH 267/371] Set published:true for Google Assistant docs --- source/cloud/google_assistant.markdown | 5 ----- 1 file changed, 5 deletions(-) diff --git a/source/cloud/google_assistant.markdown b/source/cloud/google_assistant.markdown index 155b2356a7..2e8661479c 100644 --- a/source/cloud/google_assistant.markdown +++ b/source/cloud/google_assistant.markdown @@ -7,7 +7,6 @@ sidebar: true comments: false sharing: true footer: true -published: false --- The Google Assistant integration allows users to control the entities via the Home Assistant Smart Home skill for Google Assistant. This means that you can say things like "Ok Google, turn on the kitchen light" to control your local Home Assistant. @@ -86,9 +85,5 @@ google_actions: description: Aliases that can also be used to refer to this entity required: false type: list - type: - description: Override the type of the entity in Google Assistant. [List of available types](https://developers.google.com/actions/smarthome/guides/) - required: false - type: string {% endconfiguration %} From 557867f26e44fdadc94f2eab92bedec465827f28 Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Thu, 19 Apr 2018 09:11:52 +0200 Subject: [PATCH 268/371] Support for multiple MAX!Cube LAN gateways (#5078) --- source/_components/maxcube.markdown | 32 +++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/source/_components/maxcube.markdown b/source/_components/maxcube.markdown index c9645e9fc5..69713a6469 100644 --- a/source/_components/maxcube.markdown +++ b/source/_components/maxcube.markdown @@ -25,13 +25,37 @@ Supported Devices: - MAX! Window Sensor (tested) - MAX! Wall Thermostat (tested) +### {% linkable_title One Gateway %} + A `maxcube` section must be present in the `configuration.yaml` file and contain the following options as required: ```yaml # Example configuration.yaml entry maxcube: - host: 192.168.0.20 + gateways: + - host: 192.168.0.20 ``` -Configuration variables: -- **host** (*Required*): The IP address of the eQ-3 MAX! Cube to use. -- **port** (*Optional*): The UDP port number. Defaults to `62910`. + +### {% linkable_title Multiple Gateways %} + +```yaml +# Example configuration.yaml entry +maxcube: + gateways: + - host: 192.168.0.20 + port: 62910 + - host: 192.168.0.21 + port: 62910 +``` + +{% configuration %} + host: + description: The IP address of the eQ-3 MAX! Cube to use. + required: true + type: string + port: + description: The UDP port number. + required: false + type: int + default: 62910 +{% endconfiguration %} From 7fd2f7da460ab5d3380c2e9b9393d44f3474de0f Mon Sep 17 00:00:00 2001 From: koolsb <14332595+koolsb@users.noreply.github.com> Date: Thu, 19 Apr 2018 04:32:07 -0500 Subject: [PATCH 269/371] Update onkyo media player (#5058) --- .../_components/media_player.onkyo.markdown | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/source/_components/media_player.onkyo.markdown b/source/_components/media_player.onkyo.markdown index ca277f7706..0c6dc4d2d3 100644 --- a/source/_components/media_player.onkyo.markdown +++ b/source/_components/media_player.onkyo.markdown @@ -28,11 +28,24 @@ media_player: pc: 'HTPC' ``` -Configuration variables: - -- **host** (*Optional*): IP address of the device. Example:`192.168.1.2`. If not specified, the platform will load any discovered receivers. -- **name** (*Required if host is specified*): Name of the device. -- **sources** (*Optional*): A list of mappings from source to source name. Valid sources can be found below. A default list will be used if no source mapping is specified. +{% configuration %} +host: + description: IP address of the device. Example:`192.168.1.2`. If not specified, the platform will load any discovered receivers. + required: false + type: string +name: + description: Name of the device. (*Required if host is specified*) + required: false + type: string +sources: + description: A list of mappings from source to source name. Valid sources can be found below. A default list will be used if no source mapping is specified. + required: false + type: list +zone2: + description: Enables control for the receiver's second zone. + required: false + type: bool +{% endconfiguration %} List of source names: From 574e2213ba439fa360163d60c777a6d7a1c520d9 Mon Sep 17 00:00:00 2001 From: koolsb <14332595+koolsb@users.noreply.github.com> Date: Thu, 19 Apr 2018 04:35:48 -0500 Subject: [PATCH 270/371] Add blackbird media player component (#5056) --- .../media_player.blackbird.markdown | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 source/_components/media_player.blackbird.markdown diff --git a/source/_components/media_player.blackbird.markdown b/source/_components/media_player.blackbird.markdown new file mode 100644 index 0000000000..99873f1cc0 --- /dev/null +++ b/source/_components/media_player.blackbird.markdown @@ -0,0 +1,70 @@ +--- +layout: page +title: "Blackbird 8x8 HDMI Matrix Switch" +description: "Instructions on how to integrate Monoprice Blackbird 4k 8x8 HDBaseT Matrix Switch into Home Assistant." +date: 2018-03-29 16:35 +sidebar: true +comments: false +sharing: true +footer: true +logo: monoprice.svg +ha_category: Media Player +ha_release: 0.68 +ha_iot_class: "Local Polling" +--- + +The `blackbird` platform allows you to control [Monoprice Blackbird Matrix Switch](https://www.monoprice.com/product?p_id=21819) using a serial connection. + +To add a Blackbird device to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +media_player: + - platform: blackbird + type: serial + port: /dev/ttyUSB0 + zones: + 1: + name: Living Room + sources: + 3: + name: BluRay +``` + +{% configuration %} +type: + description: The type of device connection - serial or socket + required: true + type: string +port: + description: The serial port to which Blackbird matrix switch is connected. Either port or host must be defined. + required: optional + type: string +host: + description: The IP address of the Blackbird matrix switch. Either port or host must be defined. + required: optional + type: string +zones: + description: This is the list of zones available. Valid zones are 1,2,3,4,5,6,7,8. Each zone must have a name assigned to it. + required: true + type: int + keys: + name: + description: The name of the zone. +sources: + description: The list of sources available. Valid source numbers are 1,2,3,4,5,6,7,8. Each source number corresponds to the input number on the Blackbird matrix switch. Similar to zones, each source must have a name assigned to it. + required: true + type: int + keys: + name: + description: The name of the source. +{% endconfiguration%} + +### {% linkable_title Service `BLACKBIRD_SETALLZONES` %} + +Set all zones to the same input source. This service allows you to immediately synchronize all the TVs in your home. Regardless of `entity_id` provided, all zones will be updated. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | yes | String that points at an `entity_id` of a zone. +| `source` | no | String of source name to activate. From 945fb9b69e0336d39cd5fe97771a2bee7ef958e3 Mon Sep 17 00:00:00 2001 From: Viorel Stirbu Date: Thu, 19 Apr 2018 12:38:02 +0300 Subject: [PATCH 271/371] Add docs for Sensirion SHT31 sensor (#4848) --- source/_components/sensor.sht31.markdown | 52 +++++++++++++++++++ source/images/supported_brands/sensirion.png | Bin 0 -> 6578 bytes 2 files changed, 52 insertions(+) create mode 100644 source/_components/sensor.sht31.markdown create mode 100644 source/images/supported_brands/sensirion.png diff --git a/source/_components/sensor.sht31.markdown b/source/_components/sensor.sht31.markdown new file mode 100644 index 0000000000..73660bbbdc --- /dev/null +++ b/source/_components/sensor.sht31.markdown @@ -0,0 +1,52 @@ +--- +layout: page +title: "Sensirion SHT31 Sensor" +description: "Instructions on how to integrate SHT31 sensors within Home Assistant." +date: 2018-03-06 19:15 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: DIY +ha_release: 0.68 +logo: sensirion.png +ha_iot_class: "Local Polling" +--- + +The `sht31` sensor platform allows you to get the current temperature and humidity from a Sensirion SHT31 device. + +To use your SHT31 sensor in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + platform: sht31 + name: Bedroom + i2c_address: 0x44 + monitored_conditions: + - temperature + - humidity +``` + +{% configuration %} + name: + description: The name of the sensor. Temperature and Humidity will be added to the name for the sensor name. + required: false + default: SHT31 + type: string + i2c_address: + description: I2C address of the sensor. + required: false + default: "`0x44`" + type: int + monitored_conditions: + description: Conditions to monitor. + required: false + default: All conditions + type: list + keys: + temperature: + description: The current temperature of the SHT31. + humidity: + description: The current humidity of the SHT31. +{% endconfiguration %} diff --git a/source/images/supported_brands/sensirion.png b/source/images/supported_brands/sensirion.png new file mode 100644 index 0000000000000000000000000000000000000000..4c0576cacdaad8b024683c2433ee5216762a8908 GIT binary patch literal 6578 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 Date: Thu, 19 Apr 2018 10:00:24 -0700 Subject: [PATCH 272/371] Update hass.markdown (#5193) --- source/_docs/tools/hass.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_docs/tools/hass.markdown b/source/_docs/tools/hass.markdown index 3ba0896f35..73e0bd68cd 100644 --- a/source/_docs/tools/hass.markdown +++ b/source/_docs/tools/hass.markdown @@ -39,6 +39,7 @@ optional arguments: specified days --log-file LOG_FILE Log file to write to. If not set, CONFIG/home- assistant.log is used + --log-no-color Disable color logs --runner On restart exit with code 100 --script ... Run one of the embedded scripts --daemon Run Home Assistant as daemon From b8627d6285213f43ab45498319721407432947bc Mon Sep 17 00:00:00 2001 From: Mark Perdue Date: Fri, 20 Apr 2018 08:16:37 -0400 Subject: [PATCH 273/371] Update attributes table to reflect closed PR (#5206) The PR https://github.com/home-assistant/home-assistant/pull/13816 has been withdrawn since it exposed static attributes which are not supported. Updating wiki to reflect current state --- source/_components/switch.vesync.markdown | 4 ---- 1 file changed, 4 deletions(-) diff --git a/source/_components/switch.vesync.markdown b/source/_components/switch.vesync.markdown index 83041ca78b..b02f476e93 100644 --- a/source/_components/switch.vesync.markdown +++ b/source/_components/switch.vesync.markdown @@ -45,7 +45,3 @@ VeSync switches will expose the following details. | ------------------- | ------------------------------------------------------------------- | --------------- | | `current_power_w` | The present power consumption of the switch in watts. | 100 | | `today_energy_kwh` | The kilowatt hours used by the switch during the previous 24 hours. | 0.12 | -| `connection_status` | The connection status of the switch. | online | -| `connection_type` | The connection type of the switch. | wifi | -| `device_type` | The device type of the switch. | wifi-switch-1.3 | -| `model` | The model of the switch. | wifi-switch | From 952aaf8aa0389e5bbfa540dd0f86a27484695c19 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 20 Apr 2018 14:36:47 -0400 Subject: [PATCH 274/371] Add release blog post --- source/_posts/2018-04-27-release-68.markdown | 489 +++++++++++++++++++ 1 file changed, 489 insertions(+) create mode 100644 source/_posts/2018-04-27-release-68.markdown diff --git a/source/_posts/2018-04-27-release-68.markdown b/source/_posts/2018-04-27-release-68.markdown new file mode 100644 index 0000000000..788e068c7e --- /dev/null +++ b/source/_posts/2018-04-27-release-68.markdown @@ -0,0 +1,489 @@ +--- +layout: post +title: "0.68: UPDATE DATE" +description: "UPDATE DATE" +date: 2018-04-20 00:01:00 +date_formatted: "April 27, 2018" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +og_image: /images/blog/2018-04-0.68/components.png +--- + + + +Highlights: + +- Ability to _control_ HomeKit +- Eufy bulbs + +## New Platforms + +- Add support for Eufy bulbs and switches ([@mjg59] - [#13773]) ([eufy docs]) ([light.eufy docs]) ([switch.eufy docs]) (new-platform) +- Add support for controlling homekit lights and switches ([@mjg59] - [#13346]) ([homekit_controller docs]) ([light.homekit_controller docs]) (new-platform) +- Adding USCIS component ([@meauxt] - [#13764]) ([sensor.uscis docs]) (new-platform) +- Add support for new platform: climate.modbus ([@Kirchoff] - [#12224]) ([climate.modbus docs]) (new-platform) +- Add AVM fritzbox smarthome component ([@hthiery] - [#10688]) ([fritzbox docs]) ([climate.fritzbox docs]) ([switch.fritzbox docs]) (new-platform) +- Adds SigFox sensor ([@robmarkcole] - [#13731]) ([sensor.sigfox docs]) (new-platform) +- Add blackbird media player component ([@koolsb] - [#13549]) ([media_player.blackbird docs]) (new-platform) +- Add support for Sensirion SHT31 temperature/humidity sensor ([@viorels] - [#12952]) ([sensor.sht31 docs]) (new-platform) +- Upgraded miflora library to version 0.4.0 ([@ChristianKuehnel] - [#14005]) ([sensor.lmsensor docs]) ([sensor.miflora docs]) (new-platform) + +## New Features + +- Support binary_sensor and device_tracker in HomeKit ([@Yonsm] - [#13735]) ([homekit docs]) (new-feature) +- Add Homekit locks support ([@philk] - [#13625]) ([homekit docs]) (new-feature) +- Support CO2/PM2.5/Light sensors in HomeKit ([@Yonsm] - [#13804]) ([homekit docs]) (new-feature) +- Support Garage Doors in HomeKit ([@marthoc] - [#13796]) ([homekit docs]) (new-feature) +- Support basic covers with open/close/stop services HomeKit ([@nickw444] - [#13819]) ([homekit docs]) (new-feature) + +## {% linkable_title If you need help... %} + +...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. + +## {% linkable_title Reporting Issues %} + +Experiencing issues introduced by this release? Please report them in our [issue tracker](https://github.com/home-assistant/home-assistant/issues). Make sure to fill in all fields of the issue template. + + +## Breaking Changes + +- Support for multiple MAX!Cube LAN gateways added ([@syssi] - [#13517]) ([maxcube docs]) ([binary_sensor.maxcube docs]) ([climate.maxcube docs]) (breaking change) +- Disable ebox requirement ([@balloob] - [#14003]) ([sensor.ebox docs]) (breaking change) + +## Beta Fixes + +- Fix Gogogate2 'available' attribute ([@dlbroadfoot] - [#13728]) (beta fix) +- Fix so it is possible to ignore discovered config entry handlers ([@Kane610] - [#13741]) (beta fix) +- Prevent vesync doing I/O in event loop ([@balloob] - [#13862]) ([switch.vesync docs]) (beta fix) +- Missing property decorator added ([@syssi] - [#13889]) ([fan.xiaomi_miio docs]) (beta fix) +- Fix race condition for component loaded before listening ([@balloob] - [#13887]) ([config docs]) (beta fix) +- Fix #13846 Double underscore in bluetooth address ([@aav7fl] - [#13884]) ([device_tracker docs]) (beta fix) +- Import operation modes from air humidifier ([@syssi] - [#13908]) ([fan.xiaomi_miio docs]) (beta fix) +- Update pyhydroquebec to 2.2.2 ([@titilambert] - [#13946]) ([sensor.hydroquebec docs]) (beta fix) +- Upgrade somecomfort to 0.5.2 ([@balloob] - [#13940]) ([climate.honeywell docs]) (beta fix) +- Fix call to parent broadlink switch ([@Danielhiversen] - [#13906]) ([switch.broadlink docs]) (beta fix) +- Fix Gogogate2 'available' attribute ([@dlbroadfoot] - [#13728]) (beta fix) +- Fix so it is possible to ignore discovered config entry handlers ([@Kane610] - [#13741]) (beta fix) +- Prevent vesync doing I/O in event loop ([@balloob] - [#13862]) ([switch.vesync docs]) (beta fix) +- Fix #13846 Double underscore in bluetooth address ([@aav7fl] - [#13884]) ([device_tracker docs]) (beta fix) +- Fix race condition for component loaded before listening ([@balloob] - [#13887]) ([config docs]) (beta fix) +- Missing property decorator added ([@syssi] - [#13889]) ([fan.xiaomi_miio docs]) (beta fix) +- Fix call to parent broadlink switch ([@Danielhiversen] - [#13906]) ([switch.broadlink docs]) (beta fix) +- Import operation modes from air humidifier ([@syssi] - [#13908]) ([fan.xiaomi_miio docs]) (beta fix) +- Upgrade somecomfort to 0.5.2 ([@balloob] - [#13940]) ([climate.honeywell docs]) (beta fix) +- Update pyhydroquebec to 2.2.2 ([@titilambert] - [#13946]) ([sensor.hydroquebec docs]) (beta fix) + +## All changes + +- Update Homekit to 1.1.9 ([@cdce8p] - [#13716]) ([homekit docs]) +- Update docstrings ([@fabaff] - [#13720]) ([ihc docs]) ([cover.opengarage docs]) ([cover.tahoma docs]) ([light.aurora docs]) ([sensor.trafikverket_weatherstation docs]) +- Add option to ignore availability in google calendar events ([@cgtobi] - [#13714]) ([google docs]) ([calendar.google docs]) +- Allow use of date_string in service call ([@Juggels] - [#13256]) ([calendar.todoist docs]) +- Add timeout / debounce (for brightness and others) ([@cdce8p] - [#13534]) ([homekit docs]) +- added support for smappee water sensors ([@hmn] - [#12831]) ([smappee docs]) ([sensor.smappee docs]) +- Initialise filter_sensor with historical values ([@dgomes] - [#13075]) ([sensor.filter docs]) +- Fix Gogogate2 'available' attribute ([@dlbroadfoot] - [#13728]) (beta fix) +- Bluesound bugfix status 595 and await ([@thrawnarn] - [#13727]) ([media_player.bluesound docs]) +- Upgrade aiohttp to 3.1.2 ([@fabaff] - [#13732]) +- Upgrade sqlalchemy to 1.2.6 ([@fabaff] - [#13733]) ([sensor.sql docs]) +- Brightness conversion for Abode dimmers ([@shred86] - [#13711]) ([light.abode docs]) +- Update CODEOWNERS (sensor.filter, sensor.upnp) ([@dgomes] - [#13736]) +- Reset permission ([@fabaff] - [#13743]) ([light.abode docs]) +- Throw an error when invalid device_mode is given ([@dangyuluo] - [#13739]) +- Fix so it is possible to ignore discovered config entry handlers ([@Kane610] - [#13741]) (beta fix) +- Upgrade netdisco to 1.3.1 ([@fabaff] - [#13744]) +- Add MQTT Sensor unique_id ([@OttoWinter] - [#13318]) ([sensor.mqtt docs]) +- Prepare entity component for config entries ([@balloob] - [#13730]) +- Check valid file on get_size ([@robmarkcole] - [#13756]) ([sensor.folder docs]) +- Qwikswitch sensors ([@kellerza] - [#13622]) ([sensor.qwikswitch docs]) +- Device type mapping introduced to avoid breaking change ([@syssi] - [#13765]) ([light.yeelight docs]) +- Only flag media position as updated when it really has ([@molobrakos] - [#13737]) ([media_player.squeezebox docs]) +- Support binary_sensor and device_tracker in HomeKit ([@Yonsm] - [#13735]) ([homekit docs]) (new-feature) +- Use config entry to setup platforms ([@balloob] - [#13752]) ([hue docs]) ([light docs]) ([light.hue docs]) +- Add Homekit locks support ([@philk] - [#13625]) ([homekit docs]) (new-feature) +- Snips sounds ([@tschmidty69] - [#13746]) ([snips docs]) +- Add missing DISCHRG state ([@swilson] - [#13787]) ([sensor.nut docs]) +- Improved upgradeability HomeKit security_systems ([@cdce8p] - [#13783]) ([homekit docs]) +- Qwikswitch Entity Register ([@kellerza] - [#13791]) ([qwikswitch docs]) ([sensor.qwikswitch docs]) +- Updated beacontools to 1.2.3 ([@citruz] - [#13792]) ([sensor.eddystone_temperature docs]) +- script/lazytox: Ensure Flake8 passes for tests/ ([@kellerza] - [#13794]) +- Fix bad metrics format for short metrics. ([@michaelkuty] - [#13778]) ([prometheus docs]) +- Update bellows to 0.5.2 ([@rcloran] - [#13800]) ([zha docs]) +- device_tracker.ubus: Handle devices not running DHCP ([@tobygray] - [#13579]) ([device_tracker docs]) +- Update yweather.py ([@wiuwiu] - [#13802]) ([weather.yweather docs]) +- Tibber lib update ([@Danielhiversen] - [#13811]) ([sensor.tibber docs]) +- Update pyhomematic to 0.1.41 ([@danielperna84] - [#13814]) ([homematic docs]) +- Add support for Eufy bulbs and switches ([@mjg59] - [#13773]) ([eufy docs]) ([light.eufy docs]) ([switch.eufy docs]) (new-platform) +- Homekit refactor ([@cdce8p] - [#13707]) ([homekit docs]) +- HomeKit type_cover fix ([@cdce8p] - [#13832]) ([homekit docs]) +- Allow platform unloading ([@balloob] - [#13784]) ([hue docs]) ([light docs]) +- Support CO2/PM2.5/Light sensors in HomeKit ([@Yonsm] - [#13804]) ([homekit docs]) (new-feature) +- Clicksend: Added support for multiple recipients ([@xTCx] - [#13812]) ([notify docs]) +- Support Garage Doors in HomeKit ([@marthoc] - [#13796]) ([homekit docs]) (new-feature) +- Abode better events ([@MisterWil] - [#13809]) ([abode docs]) +- UPnP async ([@dgomes] - [#13666]) ([upnp docs]) ([sensor.upnp docs]) +- Update example (fixes #13834) ([@fabaff] - [#13839]) +- Add support for deCONZ daylight sensor ([@marthoc] - [#13479]) ([deconz docs]) ([sensor.deconz docs]) +- initialize queue before filtering ([@dgomes] - [#13842]) ([sensor.filter docs]) +- Extract config flow to own module ([@balloob] - [#13840]) ([config docs]) ([deconz docs]) ([hue docs]) +- Add support for controlling homekit lights and switches ([@mjg59] - [#13346]) ([homekit_controller docs]) ([light.homekit_controller docs]) (new-platform) +- bump python-ecobee-api version to 0.0.18 ([@geekofweek] - [#13854]) ([ecobee docs]) +- Adding USCIS component ([@meauxt] - [#13764]) ([sensor.uscis docs]) (new-platform) +- Avoid unnecessary cast state updates ([@dersger] - [#13770]) ([media_player.cast docs]) +- Prevent vesync doing I/O in event loop ([@balloob] - [#13862]) ([switch.vesync docs]) (beta fix) +- Update yweather.py ([@TheCellMC] - [#13851]) ([weather.yweather docs]) +- add support for Kodi discovery ([@escoand] - [#13790]) ([media_player.kodi docs]) +- Further untangle data entry flow ([@balloob] - [#13855]) +- Missing property decorator added ([@syssi] - [#13889]) ([fan.xiaomi_miio docs]) (beta fix) +- Fix race condition for component loaded before listening ([@balloob] - [#13887]) ([config docs]) (beta fix) +- Added snips service descriptions ([@tschmidty69] - [#13883]) +- Add unique_id for BMW ConnectedDrive ([@gerard33] - [#13888]) ([binary_sensor.bmw_connected_drive docs]) ([lock.bmw_connected_drive docs]) ([sensor.bmw_connected_drive docs]) +- Revert "Update yweather.py" ([@pvizeli] - [#13900]) ([weather.yweather docs]) +- Eufy colour bulb updates ([@mjg59] - [#13895]) ([eufy docs]) ([light.eufy docs]) +- Fix #13846 Double underscore in bluetooth address ([@aav7fl] - [#13884]) ([device_tracker docs]) (beta fix) +- Import operation modes from air humidifier ([@syssi] - [#13908]) ([fan.xiaomi_miio docs]) (beta fix) +- Fritzbox netmonitor name ([@escoand] - [#13903]) ([sensor.fritzbox_netmonitor docs]) +- Restore typeerror check for units sans energy tracking ([@andersonshatch] - [#13824]) ([switch.edimax docs]) +- Add more math functions to templates ([@Shou] - [#13915]) +- Upgrade pyqwikswitch to 0.71 ([@kellerza] - [#13920]) ([qwikswitch docs]) +- Add extra attributes for device scanner, Nmap and Unifi (IP, SSID, etc.) ([@stephanerosi] - [#13673]) ([device_tracker docs]) +- Fixed Capsman data not being used ([@Marco98] - [#13917]) ([device_tracker docs]) +- Broadlink Sensor - switch to connection-less mode ([@Paxy] - [#13761]) ([sensor.broadlink docs]) +- Add support for new platform: climate.modbus ([@Kirchoff] - [#12224]) ([climate.modbus docs]) (new-platform) +- Hive R3 update ([@KJonline] - [#13357]) ([hive docs]) ([binary_sensor.hive docs]) ([climate.hive docs]) ([light.hive docs]) ([sensor.hive docs]) ([switch.hive docs]) +- Updated foobot_async package version ([@reefab] - [#13942]) ([sensor.foobot docs]) +- Update pyhydroquebec to 2.2.2 ([@titilambert] - [#13946]) ([sensor.hydroquebec docs]) (beta fix) +- Upgrade alpha_vantage to 2.0.0 ([@fabaff] - [#13943]) ([sensor.alpha_vantage docs]) +- Cleanup on exit ([@dgomes] - [#13918]) ([media_player.mediaroom docs]) +- Upgrade somecomfort to 0.5.2 ([@balloob] - [#13940]) ([climate.honeywell docs]) (beta fix) +- Add data entry flow helper ([@balloob] - [#13935]) ([config docs]) +- Xiaomi MiIO Device Tracker: Unused variable removed ([@syssi] - [#13948]) ([device_tracker docs]) +- Implement play media to set a channel based on (by priority): ([@stephanerosi] - [#13934]) ([media_player.webostv docs]) +- Update of python-mpd2 ([@karlkar] - [#13921]) ([media_player.mpd docs]) +- Add AVM fritzbox smarthome component ([@hthiery] - [#10688]) ([fritzbox docs]) ([climate.fritzbox docs]) ([switch.fritzbox docs]) (new-platform) +- Adds SigFox sensor ([@robmarkcole] - [#13731]) ([sensor.sigfox docs]) (new-platform) +- Upgrade aiohttp to 3.1.3 ([@fabaff] - [#13938]) +- Upgrade youtube_dl to 2018.04.16 ([@fabaff] - [#13937]) ([media_extractor docs]) +- Added FB messenger broadcast api to notify.facebook component ([@B1tMaster] - [#12459]) ([notify.facebook docs]) +- Added web view for TTS to get url ([@tschmidty69] - [#13882]) ([tts docs]) +- Add services for bmw_connected_drive ([@ChristianKuehnel] - [#13497]) ([bmw_connected_drive docs]) ([device_tracker docs]) +- Fix call to parent broadlink switch ([@Danielhiversen] - [#13906]) ([switch.broadlink docs]) (beta fix) +- Bump deCONZ requirement to v36 ([@Kane610] - [#13960]) ([deconz docs]) +- Fix Gogogate2 'available' attribute ([@dlbroadfoot] - [#13728]) (beta fix) +- Fix so it is possible to ignore discovered config entry handlers ([@Kane610] - [#13741]) (beta fix) +- Prevent vesync doing I/O in event loop ([@balloob] - [#13862]) ([switch.vesync docs]) (beta fix) +- Fix #13846 Double underscore in bluetooth address ([@aav7fl] - [#13884]) ([device_tracker docs]) (beta fix) +- Fix race condition for component loaded before listening ([@balloob] - [#13887]) ([config docs]) (beta fix) +- Missing property decorator added ([@syssi] - [#13889]) ([fan.xiaomi_miio docs]) (beta fix) +- Fix call to parent broadlink switch ([@Danielhiversen] - [#13906]) ([switch.broadlink docs]) (beta fix) +- Import operation modes from air humidifier ([@syssi] - [#13908]) ([fan.xiaomi_miio docs]) (beta fix) +- Upgrade pyqwikswitch to 0.71 ([@kellerza] - [#13920]) ([qwikswitch docs]) +- Upgrade somecomfort to 0.5.2 ([@balloob] - [#13940]) ([climate.honeywell docs]) (beta fix) +- Update pyhydroquebec to 2.2.2 ([@titilambert] - [#13946]) ([sensor.hydroquebec docs]) (beta fix) +- Revert "Upgrade pyqwikswitch to 0.71 ([@balloob] - [#13920]) ([qwikswitch docs]) +- Bump skybellpy version to 0.1.2 ([@MisterWil] - [#13974]) ([skybell docs]) +- Fix typo an coding style ([@stephanerosi] - [#13970]) ([device_tracker docs]) +- Params of the send command can be a list now ([@syssi] - [#13905]) ([vacuum docs]) +- Support basic covers with open/close/stop services HomeKit ([@nickw444] - [#13819]) ([homekit docs]) (new-feature) +- Colorlog windows fix ([@veleek] - [#13929]) ([notify docs]) +- deCONZ migrate setup fully to config entry ([@Kane610] - [#13679]) ([deconz docs]) +- Alexa thermostat fails to properly parse 'value' field for climate ([@no2chem] - [#13958]) ([alexa docs]) +- renaming icons ([@NovapaX] - [#13982]) ([hdmi_cec docs]) ([vacuum docs]) ([vacuum.dyson docs]) ([vacuum.neato docs]) ([vacuum.roomba docs]) ([vacuum.xiaomi_miio docs]) +- Fix for Lokalise backend misinterpretation of keys ([@armills] - [#13986]) +- Bump locationsharinglib to 1.2.1 ([@thelittlefireman] - [#13980]) ([device_tracker docs]) +- Support for multiple MAX!Cube LAN gateways added ([@syssi] - [#13517]) ([maxcube docs]) ([binary_sensor.maxcube docs]) ([climate.maxcube docs]) (breaking change) +- Add additional receiver for Onkyo zone 2 ([@koolsb] - [#13551]) ([media_player.onkyo docs]) +- Add blackbird media player component ([@koolsb] - [#13549]) ([media_player.blackbird docs]) (new-platform) +- Add support for Sensirion SHT31 temperature/humidity sensor ([@viorels] - [#12952]) ([sensor.sht31 docs]) (new-platform) +- Useless code removed ([@syssi] - [#13996]) ([maxcube docs]) +- Add Homematic HmIP-SWO-PR weather sensor support ([@pascalhahn] - [#13904]) ([homematic docs]) +- Disable ebox requirement ([@balloob] - [#14003]) ([sensor.ebox docs]) (breaking change) +- Upgraded miflora library to version 0.4.0 ([@ChristianKuehnel] - [#14005]) ([sensor.lmsensor docs]) ([sensor.miflora docs]) (new-platform) +- Log an error instead of raising an exception ([@syssi] - [#14006]) ([sensor.sht31 docs]) +- Tibber available ([@Danielhiversen] - [#13865]) ([sensor.tibber docs]) +- Upgrade pylutron-caseta to 0.5.0 to reestablish connections ([@rohankapoorcom] - [#14013]) ([lutron_caseta docs]) +- Add sensor device classes ([@balloob] - [#14010]) ([sensor docs]) ([sensor.ecobee docs]) ([sensor.linux_battery docs]) ([sensor.nest docs]) + +[#10688]: https://github.com/home-assistant/home-assistant/pull/10688 +[#12224]: https://github.com/home-assistant/home-assistant/pull/12224 +[#12459]: https://github.com/home-assistant/home-assistant/pull/12459 +[#12831]: https://github.com/home-assistant/home-assistant/pull/12831 +[#12952]: https://github.com/home-assistant/home-assistant/pull/12952 +[#13075]: https://github.com/home-assistant/home-assistant/pull/13075 +[#13256]: https://github.com/home-assistant/home-assistant/pull/13256 +[#13318]: https://github.com/home-assistant/home-assistant/pull/13318 +[#13346]: https://github.com/home-assistant/home-assistant/pull/13346 +[#13357]: https://github.com/home-assistant/home-assistant/pull/13357 +[#13479]: https://github.com/home-assistant/home-assistant/pull/13479 +[#13497]: https://github.com/home-assistant/home-assistant/pull/13497 +[#13517]: https://github.com/home-assistant/home-assistant/pull/13517 +[#13534]: https://github.com/home-assistant/home-assistant/pull/13534 +[#13549]: https://github.com/home-assistant/home-assistant/pull/13549 +[#13551]: https://github.com/home-assistant/home-assistant/pull/13551 +[#13579]: https://github.com/home-assistant/home-assistant/pull/13579 +[#13622]: https://github.com/home-assistant/home-assistant/pull/13622 +[#13625]: https://github.com/home-assistant/home-assistant/pull/13625 +[#13666]: https://github.com/home-assistant/home-assistant/pull/13666 +[#13673]: https://github.com/home-assistant/home-assistant/pull/13673 +[#13679]: https://github.com/home-assistant/home-assistant/pull/13679 +[#13707]: https://github.com/home-assistant/home-assistant/pull/13707 +[#13711]: https://github.com/home-assistant/home-assistant/pull/13711 +[#13714]: https://github.com/home-assistant/home-assistant/pull/13714 +[#13716]: https://github.com/home-assistant/home-assistant/pull/13716 +[#13720]: https://github.com/home-assistant/home-assistant/pull/13720 +[#13727]: https://github.com/home-assistant/home-assistant/pull/13727 +[#13728]: https://github.com/home-assistant/home-assistant/pull/13728 +[#13730]: https://github.com/home-assistant/home-assistant/pull/13730 +[#13731]: https://github.com/home-assistant/home-assistant/pull/13731 +[#13732]: https://github.com/home-assistant/home-assistant/pull/13732 +[#13733]: https://github.com/home-assistant/home-assistant/pull/13733 +[#13735]: https://github.com/home-assistant/home-assistant/pull/13735 +[#13736]: https://github.com/home-assistant/home-assistant/pull/13736 +[#13737]: https://github.com/home-assistant/home-assistant/pull/13737 +[#13739]: https://github.com/home-assistant/home-assistant/pull/13739 +[#13741]: https://github.com/home-assistant/home-assistant/pull/13741 +[#13743]: https://github.com/home-assistant/home-assistant/pull/13743 +[#13744]: https://github.com/home-assistant/home-assistant/pull/13744 +[#13746]: https://github.com/home-assistant/home-assistant/pull/13746 +[#13752]: https://github.com/home-assistant/home-assistant/pull/13752 +[#13756]: https://github.com/home-assistant/home-assistant/pull/13756 +[#13761]: https://github.com/home-assistant/home-assistant/pull/13761 +[#13764]: https://github.com/home-assistant/home-assistant/pull/13764 +[#13765]: https://github.com/home-assistant/home-assistant/pull/13765 +[#13770]: https://github.com/home-assistant/home-assistant/pull/13770 +[#13773]: https://github.com/home-assistant/home-assistant/pull/13773 +[#13778]: https://github.com/home-assistant/home-assistant/pull/13778 +[#13783]: https://github.com/home-assistant/home-assistant/pull/13783 +[#13784]: https://github.com/home-assistant/home-assistant/pull/13784 +[#13787]: https://github.com/home-assistant/home-assistant/pull/13787 +[#13790]: https://github.com/home-assistant/home-assistant/pull/13790 +[#13791]: https://github.com/home-assistant/home-assistant/pull/13791 +[#13792]: https://github.com/home-assistant/home-assistant/pull/13792 +[#13794]: https://github.com/home-assistant/home-assistant/pull/13794 +[#13796]: https://github.com/home-assistant/home-assistant/pull/13796 +[#13800]: https://github.com/home-assistant/home-assistant/pull/13800 +[#13802]: https://github.com/home-assistant/home-assistant/pull/13802 +[#13804]: https://github.com/home-assistant/home-assistant/pull/13804 +[#13809]: https://github.com/home-assistant/home-assistant/pull/13809 +[#13811]: https://github.com/home-assistant/home-assistant/pull/13811 +[#13812]: https://github.com/home-assistant/home-assistant/pull/13812 +[#13814]: https://github.com/home-assistant/home-assistant/pull/13814 +[#13819]: https://github.com/home-assistant/home-assistant/pull/13819 +[#13824]: https://github.com/home-assistant/home-assistant/pull/13824 +[#13832]: https://github.com/home-assistant/home-assistant/pull/13832 +[#13839]: https://github.com/home-assistant/home-assistant/pull/13839 +[#13840]: https://github.com/home-assistant/home-assistant/pull/13840 +[#13842]: https://github.com/home-assistant/home-assistant/pull/13842 +[#13851]: https://github.com/home-assistant/home-assistant/pull/13851 +[#13854]: https://github.com/home-assistant/home-assistant/pull/13854 +[#13855]: https://github.com/home-assistant/home-assistant/pull/13855 +[#13862]: https://github.com/home-assistant/home-assistant/pull/13862 +[#13865]: https://github.com/home-assistant/home-assistant/pull/13865 +[#13882]: https://github.com/home-assistant/home-assistant/pull/13882 +[#13883]: https://github.com/home-assistant/home-assistant/pull/13883 +[#13884]: https://github.com/home-assistant/home-assistant/pull/13884 +[#13887]: https://github.com/home-assistant/home-assistant/pull/13887 +[#13888]: https://github.com/home-assistant/home-assistant/pull/13888 +[#13889]: https://github.com/home-assistant/home-assistant/pull/13889 +[#13895]: https://github.com/home-assistant/home-assistant/pull/13895 +[#13900]: https://github.com/home-assistant/home-assistant/pull/13900 +[#13903]: https://github.com/home-assistant/home-assistant/pull/13903 +[#13904]: https://github.com/home-assistant/home-assistant/pull/13904 +[#13905]: https://github.com/home-assistant/home-assistant/pull/13905 +[#13906]: https://github.com/home-assistant/home-assistant/pull/13906 +[#13908]: https://github.com/home-assistant/home-assistant/pull/13908 +[#13915]: https://github.com/home-assistant/home-assistant/pull/13915 +[#13917]: https://github.com/home-assistant/home-assistant/pull/13917 +[#13918]: https://github.com/home-assistant/home-assistant/pull/13918 +[#13920]: https://github.com/home-assistant/home-assistant/pull/13920 +[#13921]: https://github.com/home-assistant/home-assistant/pull/13921 +[#13929]: https://github.com/home-assistant/home-assistant/pull/13929 +[#13934]: https://github.com/home-assistant/home-assistant/pull/13934 +[#13935]: https://github.com/home-assistant/home-assistant/pull/13935 +[#13937]: https://github.com/home-assistant/home-assistant/pull/13937 +[#13938]: https://github.com/home-assistant/home-assistant/pull/13938 +[#13940]: https://github.com/home-assistant/home-assistant/pull/13940 +[#13942]: https://github.com/home-assistant/home-assistant/pull/13942 +[#13943]: https://github.com/home-assistant/home-assistant/pull/13943 +[#13946]: https://github.com/home-assistant/home-assistant/pull/13946 +[#13948]: https://github.com/home-assistant/home-assistant/pull/13948 +[#13958]: https://github.com/home-assistant/home-assistant/pull/13958 +[#13960]: https://github.com/home-assistant/home-assistant/pull/13960 +[#13970]: https://github.com/home-assistant/home-assistant/pull/13970 +[#13974]: https://github.com/home-assistant/home-assistant/pull/13974 +[#13980]: https://github.com/home-assistant/home-assistant/pull/13980 +[#13982]: https://github.com/home-assistant/home-assistant/pull/13982 +[#13986]: https://github.com/home-assistant/home-assistant/pull/13986 +[#13996]: https://github.com/home-assistant/home-assistant/pull/13996 +[#14003]: https://github.com/home-assistant/home-assistant/pull/14003 +[#14005]: https://github.com/home-assistant/home-assistant/pull/14005 +[#14006]: https://github.com/home-assistant/home-assistant/pull/14006 +[#14010]: https://github.com/home-assistant/home-assistant/pull/14010 +[#14013]: https://github.com/home-assistant/home-assistant/pull/14013 +[@B1tMaster]: https://github.com/B1tMaster +[@ChristianKuehnel]: https://github.com/ChristianKuehnel +[@Danielhiversen]: https://github.com/Danielhiversen +[@Juggels]: https://github.com/Juggels +[@KJonline]: https://github.com/KJonline +[@Kane610]: https://github.com/Kane610 +[@Kirchoff]: https://github.com/Kirchoff +[@Marco98]: https://github.com/Marco98 +[@MisterWil]: https://github.com/MisterWil +[@NovapaX]: https://github.com/NovapaX +[@OttoWinter]: https://github.com/OttoWinter +[@Paxy]: https://github.com/Paxy +[@Shou]: https://github.com/Shou +[@TheCellMC]: https://github.com/TheCellMC +[@Yonsm]: https://github.com/Yonsm +[@aav7fl]: https://github.com/aav7fl +[@andersonshatch]: https://github.com/andersonshatch +[@armills]: https://github.com/armills +[@balloob]: https://github.com/balloob +[@cdce8p]: https://github.com/cdce8p +[@cgtobi]: https://github.com/cgtobi +[@citruz]: https://github.com/citruz +[@dangyuluo]: https://github.com/dangyuluo +[@danielperna84]: https://github.com/danielperna84 +[@dersger]: https://github.com/dersger +[@dgomes]: https://github.com/dgomes +[@dlbroadfoot]: https://github.com/dlbroadfoot +[@escoand]: https://github.com/escoand +[@fabaff]: https://github.com/fabaff +[@geekofweek]: https://github.com/geekofweek +[@gerard33]: https://github.com/gerard33 +[@hmn]: https://github.com/hmn +[@hthiery]: https://github.com/hthiery +[@karlkar]: https://github.com/karlkar +[@kellerza]: https://github.com/kellerza +[@koolsb]: https://github.com/koolsb +[@marthoc]: https://github.com/marthoc +[@meauxt]: https://github.com/meauxt +[@michaelkuty]: https://github.com/michaelkuty +[@mjg59]: https://github.com/mjg59 +[@molobrakos]: https://github.com/molobrakos +[@nickw444]: https://github.com/nickw444 +[@no2chem]: https://github.com/no2chem +[@pascalhahn]: https://github.com/pascalhahn +[@philk]: https://github.com/philk +[@pvizeli]: https://github.com/pvizeli +[@rcloran]: https://github.com/rcloran +[@reefab]: https://github.com/reefab +[@robmarkcole]: https://github.com/robmarkcole +[@rohankapoorcom]: https://github.com/rohankapoorcom +[@shred86]: https://github.com/shred86 +[@stephanerosi]: https://github.com/stephanerosi +[@swilson]: https://github.com/swilson +[@syssi]: https://github.com/syssi +[@thelittlefireman]: https://github.com/thelittlefireman +[@thrawnarn]: https://github.com/thrawnarn +[@titilambert]: https://github.com/titilambert +[@tobygray]: https://github.com/tobygray +[@tschmidty69]: https://github.com/tschmidty69 +[@veleek]: https://github.com/veleek +[@viorels]: https://github.com/viorels +[@wiuwiu]: https://github.com/wiuwiu +[@xTCx]: https://github.com/xTCx +[abode docs]: /components/abode/ +[alexa docs]: /components/alexa/ +[binary_sensor.bmw_connected_drive docs]: /components/binary_sensor.bmw_connected_drive/ +[binary_sensor.hive docs]: /components/binary_sensor.hive/ +[binary_sensor.maxcube docs]: /components/binary_sensor.maxcube/ +[bmw_connected_drive docs]: /components/bmw_connected_drive/ +[calendar.google docs]: /components/calendar.google/ +[calendar.todoist docs]: /components/calendar.todoist/ +[climate.fritzbox docs]: /components/climate.fritzbox/ +[climate.hive docs]: /components/climate.hive/ +[climate.honeywell docs]: /components/climate.honeywell/ +[climate.maxcube docs]: /components/climate.maxcube/ +[climate.modbus docs]: /components/climate.modbus/ +[config docs]: /components/config/ +[cover.opengarage docs]: /components/cover.opengarage/ +[cover.tahoma docs]: /components/cover.tahoma/ +[deconz docs]: /components/deconz/ +[device_tracker docs]: /components/device_tracker/ +[ecobee docs]: /components/ecobee/ +[eufy docs]: /components/eufy/ +[fan.xiaomi_miio docs]: /components/fan.xiaomi_miio/ +[fritzbox docs]: /components/fritzbox/ +[google docs]: /components/google/ +[hdmi_cec docs]: /components/hdmi_cec/ +[hive docs]: /components/hive/ +[homekit docs]: /components/homekit/ +[homekit_controller docs]: /components/homekit_controller/ +[homematic docs]: /components/homematic/ +[hue docs]: /components/hue/ +[ihc docs]: /components/ihc/ +[light docs]: /components/light/ +[light.abode docs]: /components/light.abode/ +[light.aurora docs]: /components/light.aurora/ +[light.eufy docs]: /components/light.eufy/ +[light.hive docs]: /components/light.hive/ +[light.homekit_controller docs]: /components/light.homekit_controller/ +[light.hue docs]: /components/light.hue/ +[light.yeelight docs]: /components/light.yeelight/ +[lock.bmw_connected_drive docs]: /components/lock.bmw_connected_drive/ +[lutron_caseta docs]: /components/lutron_caseta/ +[maxcube docs]: /components/maxcube/ +[media_extractor docs]: /components/media_extractor/ +[media_player.blackbird docs]: /components/media_player.blackbird/ +[media_player.bluesound docs]: /components/media_player.bluesound/ +[media_player.cast docs]: /components/media_player.cast/ +[media_player.kodi docs]: /components/media_player.kodi/ +[media_player.mediaroom docs]: /components/media_player.mediaroom/ +[media_player.mpd docs]: /components/media_player.mpd/ +[media_player.onkyo docs]: /components/media_player.onkyo/ +[media_player.squeezebox docs]: /components/media_player.squeezebox/ +[media_player.webostv docs]: /components/media_player.webostv/ +[notify docs]: /components/notify/ +[notify.facebook docs]: /components/notify.facebook/ +[prometheus docs]: /components/prometheus/ +[qwikswitch docs]: /components/qwikswitch/ +[sensor docs]: /components/sensor/ +[sensor.alpha_vantage docs]: /components/sensor.alpha_vantage/ +[sensor.bmw_connected_drive docs]: /components/sensor.bmw_connected_drive/ +[sensor.broadlink docs]: /components/sensor.broadlink/ +[sensor.deconz docs]: /components/sensor.deconz/ +[sensor.ebox docs]: /components/sensor.ebox/ +[sensor.ecobee docs]: /components/sensor.ecobee/ +[sensor.eddystone_temperature docs]: /components/sensor.eddystone_temperature/ +[sensor.filter docs]: /components/sensor.filter/ +[sensor.folder docs]: /components/sensor.folder/ +[sensor.foobot docs]: /components/sensor.foobot/ +[sensor.fritzbox_netmonitor docs]: /components/sensor.fritzbox_netmonitor/ +[sensor.hive docs]: /components/sensor.hive/ +[sensor.hydroquebec docs]: /components/sensor.hydroquebec/ +[sensor.linux_battery docs]: /components/sensor.linux_battery/ +[sensor.lmsensor docs]: /components/sensor.lmsensor/ +[sensor.miflora docs]: /components/sensor.miflora/ +[sensor.mqtt docs]: /components/sensor.mqtt/ +[sensor.nest docs]: /components/sensor.nest/ +[sensor.nut docs]: /components/sensor.nut/ +[sensor.qwikswitch docs]: /components/sensor.qwikswitch/ +[sensor.sht31 docs]: /components/sensor.sht31/ +[sensor.sigfox docs]: /components/sensor.sigfox/ +[sensor.smappee docs]: /components/sensor.smappee/ +[sensor.sql docs]: /components/sensor.sql/ +[sensor.tibber docs]: /components/sensor.tibber/ +[sensor.trafikverket_weatherstation docs]: /components/sensor.trafikverket_weatherstation/ +[sensor.upnp docs]: /components/sensor.upnp/ +[sensor.uscis docs]: /components/sensor.uscis/ +[skybell docs]: /components/skybell/ +[smappee docs]: /components/smappee/ +[snips docs]: /components/snips/ +[switch.broadlink docs]: /components/switch.broadlink/ +[switch.edimax docs]: /components/switch.edimax/ +[switch.eufy docs]: /components/switch.eufy/ +[switch.fritzbox docs]: /components/switch.fritzbox/ +[switch.hive docs]: /components/switch.hive/ +[switch.vesync docs]: /components/switch.vesync/ +[tts docs]: /components/tts/ +[upnp docs]: /components/upnp/ +[vacuum docs]: /components/vacuum/ +[vacuum.dyson docs]: /components/vacuum.dyson/ +[vacuum.neato docs]: /components/vacuum.neato/ +[vacuum.roomba docs]: /components/vacuum.roomba/ +[vacuum.xiaomi_miio docs]: /components/vacuum.xiaomi_miio/ +[weather.yweather docs]: /components/weather.yweather/ +[zha docs]: /components/zha/ From 329393788f24ece40c83a027653fb3d488fd4392 Mon Sep 17 00:00:00 2001 From: Rob Cranfill Date: Fri, 20 Apr 2018 14:28:16 -0700 Subject: [PATCH 275/371] Fix typo homekit.markdown (#5209) Fixed very minor typo ("if the are supported"' -> "if they are supported"). --- source/_components/homekit.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index 5ca13b0f2b..fe0ff4c05e 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -87,7 +87,7 @@ To enable the `HomeKit` component in Home Assistant, add the following to your c homekit: ``` -After Home Assistant has started, the entities specified by the filter are exposed to `HomeKit` if the are [supported](#supported-components). To add them: +After Home Assistant has started, the entities specified by the filter are exposed to `HomeKit` if they are [supported](#supported-components). To add them: 1. Open the Home Assistant frontend. A new card will display the `pin code`. 1. Open the `Home` app. 2. Choose `Add Accessory`, than select `Don't Have a Code or Can't Scan?` and enter the `pin code`. From 6c90dedce57b873c4387a3c5613af1b98cd01047 Mon Sep 17 00:00:00 2001 From: Rob Cranfill Date: Fri, 20 Apr 2018 14:30:06 -0700 Subject: [PATCH 276/371] Update homekit.markdown (#5207) Minor grammar fixes. (Thanks for a great product!) --- source/_components/homekit.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index fe0ff4c05e..68ac4cb460 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -12,7 +12,7 @@ ha_release: 0.64 logo: apple-homekit.png --- -The `HomeKit` component allows you to forward entities from Home Assistant to Apple `HomeKit`, so they could be controlled from Apple `Home` app and `Siri`. Please make sure that you have read the [considerations](#considerations) listed below to save you some trouble later. +The `HomeKit` component allows you to forward entities from Home Assistant to Apple `HomeKit`, so they can be controlled from Apple's `Home` app and `Siri`. Please make sure that you have read the [considerations](#considerations) listed below to save you some trouble later.

It might be necessary to install an additional package: @@ -107,7 +107,7 @@ Currently this component uses the `entity_id` to generate a unique `accessory id ### {% linkable_title Persistence Storage %} -Unfortunately `HomeKit` doesn't support any kind of persistence storage, only the configuration for accessories that are added to the `Home Assistant Bridge` are kept. To avoid problems it is recommended to use an automation to always start `HomeKit` with at least the same entities setup. If for some reason some entities are not setup, their config will be deleted. (State unknown or similar will not cause any issues.) +Unfortunately `HomeKit` doesn't support any kind of persistent storage - only the configuration for accessories that are added to the `Home Assistant Bridge` are kept. To avoid problems it is recommended to use an automation to always start `HomeKit` with at least the same entities setup. If for some reason some entities are not setup, their config will be deleted. (State unknown or similar will not cause any issues.) A common situation might be if you decide to disable parts of the configuration for testing. Please make sure to disable `auto start` and `turn off` the `Start HomeKit` automation (if you have one). From 21ed92fb92b7b298c08a139842771032b133d46c Mon Sep 17 00:00:00 2001 From: Brian Hanifin Date: Sat, 21 Apr 2018 17:06:31 -0700 Subject: [PATCH 277/371] Change Page Title to "Homekit Switch" (#5222) * Change Page Title to "Homekit Switch" It was left titled "Homekit Light" when first published. * Minor cleanup --- source/_components/switch.homekit_controller.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/switch.homekit_controller.markdown b/source/_components/switch.homekit_controller.markdown index 205316bdf2..43bf3be57b 100644 --- a/source/_components/switch.homekit_controller.markdown +++ b/source/_components/switch.homekit_controller.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "HomeKit Light" -description: "Instructions how to setup HomeKit switches within Home Assistant." +title: "HomeKit Switch" +description: "Instructions on how to setup HomeKit switches within Home Assistant." date: 2017-03-19 21:08 sidebar: true comments: false From 8eae78cb349ee3a71a739f73f242ff3c07baf6fc Mon Sep 17 00:00:00 2001 From: Ben Lebherz Date: Sun, 22 Apr 2018 21:42:21 +0200 Subject: [PATCH 278/371] fix link to the TTN sensor page (#5218) --- source/_components/thethingsnetwork.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/thethingsnetwork.markdown b/source/_components/thethingsnetwork.markdown index 65211c241d..328022f6cc 100644 --- a/source/_components/thethingsnetwork.markdown +++ b/source/_components/thethingsnetwork.markdown @@ -20,7 +20,7 @@ The Things network support various integrations to make the data available: | The Things Network Integration | Home Assistant platform | |---|---| | [MQTT](https://www.thethingsnetwork.org/docs/applications/mqtt/) | | -| [Storage](https://www.thethingsnetwork.org/docs/applications/storage/) | [`thethingsnetwork`](/component/sensor.thethingsnetwork/) | +| [Storage](https://www.thethingsnetwork.org/docs/applications/storage/) | [`thethingsnetwork`](/components/sensor.thethingsnetwork/) | | [HTTP](https://www.thethingsnetwork.org/docs/applications/http/) | | ### {% linkable_title Setup %} From 00d950773e8a8c5ba365f9f7c599df5c21e9e9f2 Mon Sep 17 00:00:00 2001 From: Marcelo Moreira de Mello Date: Sun, 22 Apr 2018 15:49:27 -0400 Subject: [PATCH 279/371] Updated watering_minutes with the allowed values (#5225) --- source/_components/switch.raincloud.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/switch.raincloud.markdown b/source/_components/switch.raincloud.markdown index e5cbc2d070..2e2af72de8 100644 --- a/source/_components/switch.raincloud.markdown +++ b/source/_components/switch.raincloud.markdown @@ -25,7 +25,7 @@ switch: Configuration variables: -- **watering_minutes** (*Optional*): Value in minutes to watering your garden via frontend. Defaults to 15. +- **watering_minutes** (*Optional*): Value in minutes to watering your garden via frontend. Defaults to 15. The values allowed are: 5, 10, 15, 30, 45, 60. - **monitored_conditions** array (*Optional*): Conditions to display in the frontend. If not specified, all conditions below will be enabled by default. The following conditions can be monitored. - **auto_watering**: Toggle the watering scheduled per zone. - **manual_watering**: Toggle manually the watering per zone. It will inherent the value in minutes specified on the RainCloud hub component. From 10db3b3f9e7348af37776d67ff4f8ce9c9a0b84e Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Sun, 22 Apr 2018 22:26:58 +0200 Subject: [PATCH 280/371] Blogpost Hass.io 2018 (#5233) * Create 2018-04-22-hassio-2018.markdown * Update 2018-04-22-hassio-2018.markdown * Update 2018-04-22-hassio-2018.markdown * Create test * Add files via upload * Delete test * Update 2018-04-22-hassio-2018.markdown * Delete blogpost.png * Create test * Add files via upload * Delete test * Update 2018-04-22-hassio-2018.markdown * Update 2018-04-22-hassio-2018.markdown * Update 2018-04-22-hassio-2018.markdown * Update 2018-04-22-hassio-2018.markdown * Update 2018-04-22-hassio-2018.markdown --- source/_posts/2018-04-22-hassio-2018.markdown | 64 ++++++++++++++++++ .../blog/2018-04-hassio-2018/blogpost.png | Bin 0 -> 42047 bytes 2 files changed, 64 insertions(+) create mode 100644 source/_posts/2018-04-22-hassio-2018.markdown create mode 100644 source/images/blog/2018-04-hassio-2018/blogpost.png diff --git a/source/_posts/2018-04-22-hassio-2018.markdown b/source/_posts/2018-04-22-hassio-2018.markdown new file mode 100644 index 0000000000..2562d41772 --- /dev/null +++ b/source/_posts/2018-04-22-hassio-2018.markdown @@ -0,0 +1,64 @@ +--- +layout: post +title: "Hass.io 2018" +description: "We want to clarify how Hass.io relates to Home Assistant and talk about the roadmap for Hass.io in 2018." +date: 2018-04-22 00:00:00 +date_formatted: "April 22, 2018" +author: Pascal Vizeli +author_twitter: pvizeli +comments: true +categories: Announcements +og_image: /images/blog/2018-04-hassio-2018/blogpost.png +--- + +We noticed that there is some confusion in the community about how Hass.io relates to Home Assistant and what impact the upcoming Hass.io changes will have. We will try to clarify it all in this blog post. + +## {% linkable_title What is Hass.io %} +Hass.io is a complete solution to run Home Assistant, by the authors of Home Assistant. The goal of Hass.io is to provide an easy to use and secure system, entirely managed from within the Home Assistant user interface. + +Hass.io is a complete solution, which means that it comes with its own highly secure and optimized operating system, a supervisor application to maintain and configure that system, and of course Home Assistant itself. + +When using Hass.io, you'll see a new Hass.io panel inside the Home Assistant UI. From here users can configure the system and install Home Assistant updates with a simple click of a button. Users are also able to make snapshots of their system, making it easy to migrate all their configuration to a new system or restore their system to a previous state. + +We wanted to be able to provide the convenience of seamless updates and configuration via the UI to other applications too, and so we introduced Hass.io add-ons. Any application can be packaged up as a Hass.io add-on, allowing any user to install and manage it easily. Since the introduction, we’ve seen an amazing growth in users sharing their add-ons with the community. It’s now possible to install an adblocker for your network, an MQTT broker or Tor with a single click. + +## {% linkable_title Upcoming changes to Hass.io %} +We’ve introduced Hass.io [last July]. Since then, we’ve noticed some room for improvements in making Hass.io easier to use, lighter to maintain and easier to integrate with other host systems. + +Note that the descriptions of upcoming improvements can get quite technical. Feel free to jump to [the conclusion]. + +### {% linkable_title Automatic add-on configuration %} +Home Assistant has recently introduced configuration entries. We’re going to hook into this new functionality and allow add-ons to configure their related integration in Home Assistant automatically. For example, if a user installs the MQTT broker add-on, we will automatically set up Home Assistant to connect to it. + +### {% linkable_title Host management %} +To control the host system, we currently use a custom service called HostControl. This allows the user to manage here host and restart/shutdown the computer from within Home Assistant. Instead of relying on our own system, we’re going to change to use D-Bus. D-Bus is a standardized mechanism for services and applications to communicate. Using a defined standard means that all parts of the host can now be remotely configured: sound, network, etc, etc. We will be extending the Hass.io panel in Home Assistant with controls to configure various parts of the host. + +### {% linkable_title Hass.io OS %} +Hass.io is currently using a forked version of ResinOS as our operating system. ResinOS has been designed to run a minimal environment for Docker, simple over the air updates and connect to the ResinIO cloud. Our fork removed the ResinIO logic. Over time, ResinOS has been evolving but not in a direction that is aligned with our goals, resulting in the maintenance of our fork to take up a lot of time. + +The ResinOS build system is based on the Yocto Project. This is a very powerful system, but also requires specific support for each hardware platform need to be specifically added and maintained (like each version of Raspberry Pi), which caused long build and development times for Hass.io. + +All these factors made us decide to build our own, custom, operating system. We’re obviously not starting from scratch, but instead, are basing it off [Buildroot] as the foundation and use [RAUC] for over the air updates. + +Some things that the new operating system will be able to do: +- Adding support for new hardware will be easy. Creating new builds for, e.g., a new Raspberry Pi model should be a matter of days, not months. +- Updating will be atomic and has a Fail-safe. If a system fails to boot after an OS upgrade, it will fallback, by booting the previous working version. +- Updates are required to be securely signed by the Home Assistant team, adding a whole new level of security. +- Compressing the root file system, making it faster on SD cards and slow IO-Interfaces. +- Compressing parts of the memory so that we can store more information. + +## {% linkable_title What Hass.io users should do to prepare for these updates %} +At this moment: Nothing. + +The new Hass.io supervisor still supports the old ResinOS builds (our official downloads for Raspberry Pi and Intel NUC) and generic Linux installations. If you’re using a generic Linux installation on SUSE Linux or Ubuntu, you have to update your local AppArmor profile if you want to use the new functionality (instructions will be provided upon release). + +Once our new installation images with HassioOS are released, you have to reflash your device once. You can do this without losing any configuration by using our Snapshot feature: +- Create a snapshot of your current installation and download it to your PC. +- Flash the SD card with the new Hass.io OS image. +- Restore your snapshot. +- Enjoy a new and improved Hass.io + +[last July]: https://www.home-assistant.io/blog/2017/07/25/introducing-hassio/ +[the conclusion]: #what-hassio-users-should-do-to-prepare-for-these-updates +[Buildroot]: https://buildroot.org/ +[RAUC]: https://www.rauc.io/ diff --git a/source/images/blog/2018-04-hassio-2018/blogpost.png b/source/images/blog/2018-04-hassio-2018/blogpost.png new file mode 100644 index 0000000000000000000000000000000000000000..443fb8a540b6d7572ef2a63e4177cd5224b842ac GIT binary patch literal 42047 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°A%*{k7-z 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 literal 0 HcmV?d00001 From e6adf8ca0b4c380e785210dbe157ccf66864ba2e Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 22 Apr 2018 18:08:03 -0400 Subject: [PATCH 281/371] remove confusion about build times to support new hardware --- source/_posts/2018-04-22-hassio-2018.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_posts/2018-04-22-hassio-2018.markdown b/source/_posts/2018-04-22-hassio-2018.markdown index 2562d41772..9050605355 100644 --- a/source/_posts/2018-04-22-hassio-2018.markdown +++ b/source/_posts/2018-04-22-hassio-2018.markdown @@ -14,7 +14,7 @@ og_image: /images/blog/2018-04-hassio-2018/blogpost.png We noticed that there is some confusion in the community about how Hass.io relates to Home Assistant and what impact the upcoming Hass.io changes will have. We will try to clarify it all in this blog post. ## {% linkable_title What is Hass.io %} -Hass.io is a complete solution to run Home Assistant, by the authors of Home Assistant. The goal of Hass.io is to provide an easy to use and secure system, entirely managed from within the Home Assistant user interface. +Hass.io is a complete solution to run Home Assistant, by the authors of Home Assistant. The goal of Hass.io is to provide an easy to use and secure system, entirely managed from within the Home Assistant user interface. Hass.io is a complete solution, which means that it comes with its own highly secure and optimized operating system, a supervisor application to maintain and configure that system, and of course Home Assistant itself. @@ -34,14 +34,14 @@ Home Assistant has recently introduced configuration entries. We’re going to h To control the host system, we currently use a custom service called HostControl. This allows the user to manage here host and restart/shutdown the computer from within Home Assistant. Instead of relying on our own system, we’re going to change to use D-Bus. D-Bus is a standardized mechanism for services and applications to communicate. Using a defined standard means that all parts of the host can now be remotely configured: sound, network, etc, etc. We will be extending the Hass.io panel in Home Assistant with controls to configure various parts of the host. ### {% linkable_title Hass.io OS %} -Hass.io is currently using a forked version of ResinOS as our operating system. ResinOS has been designed to run a minimal environment for Docker, simple over the air updates and connect to the ResinIO cloud. Our fork removed the ResinIO logic. Over time, ResinOS has been evolving but not in a direction that is aligned with our goals, resulting in the maintenance of our fork to take up a lot of time. +Hass.io is currently using a forked version of ResinOS as our operating system. ResinOS has been designed to run a minimal environment for Docker, simple over the air updates and connect to the ResinIO cloud. Our fork removed the ResinIO logic. Over time, ResinOS has been evolving but not in a direction that is aligned with our goals, resulting in the maintenance of our fork to take up a lot of time. The ResinOS build system is based on the Yocto Project. This is a very powerful system, but also requires specific support for each hardware platform need to be specifically added and maintained (like each version of Raspberry Pi), which caused long build and development times for Hass.io. All these factors made us decide to build our own, custom, operating system. We’re obviously not starting from scratch, but instead, are basing it off [Buildroot] as the foundation and use [RAUC] for over the air updates. Some things that the new operating system will be able to do: -- Adding support for new hardware will be easy. Creating new builds for, e.g., a new Raspberry Pi model should be a matter of days, not months. +- Easier to add support for new hardware. - Updating will be atomic and has a Fail-safe. If a system fails to boot after an OS upgrade, it will fallback, by booting the previous working version. - Updates are required to be securely signed by the Home Assistant team, adding a whole new level of security. - Compressing the root file system, making it faster on SD cards and slow IO-Interfaces. From c66272aa851b6e10cde38dd5514b1a677c3f9100 Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Mon, 23 Apr 2018 17:34:20 +0200 Subject: [PATCH 282/371] Fix release notes 0.68.0b0 (#5212) --- source/_posts/2018-04-27-release-68.markdown | 53 ++------------------ 1 file changed, 4 insertions(+), 49 deletions(-) diff --git a/source/_posts/2018-04-27-release-68.markdown b/source/_posts/2018-04-27-release-68.markdown index 788e068c7e..167a264a2a 100644 --- a/source/_posts/2018-04-27-release-68.markdown +++ b/source/_posts/2018-04-27-release-68.markdown @@ -18,7 +18,7 @@ Highlights: - Ability to _control_ HomeKit - Eufy bulbs -## New Platforms +## {% linkable_title New Platforms %} - Add support for Eufy bulbs and switches ([@mjg59] - [#13773]) ([eufy docs]) ([light.eufy docs]) ([switch.eufy docs]) (new-platform) - Add support for controlling homekit lights and switches ([@mjg59] - [#13346]) ([homekit_controller docs]) ([light.homekit_controller docs]) (new-platform) @@ -30,7 +30,7 @@ Highlights: - Add support for Sensirion SHT31 temperature/humidity sensor ([@viorels] - [#12952]) ([sensor.sht31 docs]) (new-platform) - Upgraded miflora library to version 0.4.0 ([@ChristianKuehnel] - [#14005]) ([sensor.lmsensor docs]) ([sensor.miflora docs]) (new-platform) -## New Features +## {% linkable_title New Features %} - Support binary_sensor and device_tracker in HomeKit ([@Yonsm] - [#13735]) ([homekit docs]) (new-feature) - Add Homekit locks support ([@philk] - [#13625]) ([homekit docs]) (new-feature) @@ -47,35 +47,12 @@ Highlights: 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 +## {% linkable_title Breaking Changes %} - Support for multiple MAX!Cube LAN gateways added ([@syssi] - [#13517]) ([maxcube docs]) ([binary_sensor.maxcube docs]) ([climate.maxcube docs]) (breaking change) - Disable ebox requirement ([@balloob] - [#14003]) ([sensor.ebox docs]) (breaking change) -## Beta Fixes - -- Fix Gogogate2 'available' attribute ([@dlbroadfoot] - [#13728]) (beta fix) -- Fix so it is possible to ignore discovered config entry handlers ([@Kane610] - [#13741]) (beta fix) -- Prevent vesync doing I/O in event loop ([@balloob] - [#13862]) ([switch.vesync docs]) (beta fix) -- Missing property decorator added ([@syssi] - [#13889]) ([fan.xiaomi_miio docs]) (beta fix) -- Fix race condition for component loaded before listening ([@balloob] - [#13887]) ([config docs]) (beta fix) -- Fix #13846 Double underscore in bluetooth address ([@aav7fl] - [#13884]) ([device_tracker docs]) (beta fix) -- Import operation modes from air humidifier ([@syssi] - [#13908]) ([fan.xiaomi_miio docs]) (beta fix) -- Update pyhydroquebec to 2.2.2 ([@titilambert] - [#13946]) ([sensor.hydroquebec docs]) (beta fix) -- Upgrade somecomfort to 0.5.2 ([@balloob] - [#13940]) ([climate.honeywell docs]) (beta fix) -- Fix call to parent broadlink switch ([@Danielhiversen] - [#13906]) ([switch.broadlink docs]) (beta fix) -- Fix Gogogate2 'available' attribute ([@dlbroadfoot] - [#13728]) (beta fix) -- Fix so it is possible to ignore discovered config entry handlers ([@Kane610] - [#13741]) (beta fix) -- Prevent vesync doing I/O in event loop ([@balloob] - [#13862]) ([switch.vesync docs]) (beta fix) -- Fix #13846 Double underscore in bluetooth address ([@aav7fl] - [#13884]) ([device_tracker docs]) (beta fix) -- Fix race condition for component loaded before listening ([@balloob] - [#13887]) ([config docs]) (beta fix) -- Missing property decorator added ([@syssi] - [#13889]) ([fan.xiaomi_miio docs]) (beta fix) -- Fix call to parent broadlink switch ([@Danielhiversen] - [#13906]) ([switch.broadlink docs]) (beta fix) -- Import operation modes from air humidifier ([@syssi] - [#13908]) ([fan.xiaomi_miio docs]) (beta fix) -- Upgrade somecomfort to 0.5.2 ([@balloob] - [#13940]) ([climate.honeywell docs]) (beta fix) -- Update pyhydroquebec to 2.2.2 ([@titilambert] - [#13946]) ([sensor.hydroquebec docs]) (beta fix) - -## All changes +## {% linkable_title All changes %} - Update Homekit to 1.1.9 ([@cdce8p] - [#13716]) ([homekit docs]) - Update docstrings ([@fabaff] - [#13720]) ([ihc docs]) ([cover.opengarage docs]) ([cover.tahoma docs]) ([light.aurora docs]) ([sensor.trafikverket_weatherstation docs]) @@ -84,7 +61,6 @@ Experiencing issues introduced by this release? Please report them in our [issue - Add timeout / debounce (for brightness and others) ([@cdce8p] - [#13534]) ([homekit docs]) - added support for smappee water sensors ([@hmn] - [#12831]) ([smappee docs]) ([sensor.smappee docs]) - Initialise filter_sensor with historical values ([@dgomes] - [#13075]) ([sensor.filter docs]) -- Fix Gogogate2 'available' attribute ([@dlbroadfoot] - [#13728]) (beta fix) - Bluesound bugfix status 595 and await ([@thrawnarn] - [#13727]) ([media_player.bluesound docs]) - Upgrade aiohttp to 3.1.2 ([@fabaff] - [#13732]) - Upgrade sqlalchemy to 1.2.6 ([@fabaff] - [#13733]) ([sensor.sql docs]) @@ -92,7 +68,6 @@ Experiencing issues introduced by this release? Please report them in our [issue - Update CODEOWNERS (sensor.filter, sensor.upnp) ([@dgomes] - [#13736]) - Reset permission ([@fabaff] - [#13743]) ([light.abode docs]) - Throw an error when invalid device_mode is given ([@dangyuluo] - [#13739]) -- Fix so it is possible to ignore discovered config entry handlers ([@Kane610] - [#13741]) (beta fix) - Upgrade netdisco to 1.3.1 ([@fabaff] - [#13744]) - Add MQTT Sensor unique_id ([@OttoWinter] - [#13318]) ([sensor.mqtt docs]) - Prepare entity component for config entries ([@balloob] - [#13730]) @@ -132,18 +107,13 @@ Experiencing issues introduced by this release? Please report them in our [issue - bump python-ecobee-api version to 0.0.18 ([@geekofweek] - [#13854]) ([ecobee docs]) - Adding USCIS component ([@meauxt] - [#13764]) ([sensor.uscis docs]) (new-platform) - Avoid unnecessary cast state updates ([@dersger] - [#13770]) ([media_player.cast docs]) -- Prevent vesync doing I/O in event loop ([@balloob] - [#13862]) ([switch.vesync docs]) (beta fix) - Update yweather.py ([@TheCellMC] - [#13851]) ([weather.yweather docs]) - add support for Kodi discovery ([@escoand] - [#13790]) ([media_player.kodi docs]) - Further untangle data entry flow ([@balloob] - [#13855]) -- Missing property decorator added ([@syssi] - [#13889]) ([fan.xiaomi_miio docs]) (beta fix) -- Fix race condition for component loaded before listening ([@balloob] - [#13887]) ([config docs]) (beta fix) - Added snips service descriptions ([@tschmidty69] - [#13883]) - Add unique_id for BMW ConnectedDrive ([@gerard33] - [#13888]) ([binary_sensor.bmw_connected_drive docs]) ([lock.bmw_connected_drive docs]) ([sensor.bmw_connected_drive docs]) - Revert "Update yweather.py" ([@pvizeli] - [#13900]) ([weather.yweather docs]) - Eufy colour bulb updates ([@mjg59] - [#13895]) ([eufy docs]) ([light.eufy docs]) -- Fix #13846 Double underscore in bluetooth address ([@aav7fl] - [#13884]) ([device_tracker docs]) (beta fix) -- Import operation modes from air humidifier ([@syssi] - [#13908]) ([fan.xiaomi_miio docs]) (beta fix) - Fritzbox netmonitor name ([@escoand] - [#13903]) ([sensor.fritzbox_netmonitor docs]) - Restore typeerror check for units sans energy tracking ([@andersonshatch] - [#13824]) ([switch.edimax docs]) - Add more math functions to templates ([@Shou] - [#13915]) @@ -154,10 +124,8 @@ Experiencing issues introduced by this release? Please report them in our [issue - Add support for new platform: climate.modbus ([@Kirchoff] - [#12224]) ([climate.modbus docs]) (new-platform) - Hive R3 update ([@KJonline] - [#13357]) ([hive docs]) ([binary_sensor.hive docs]) ([climate.hive docs]) ([light.hive docs]) ([sensor.hive docs]) ([switch.hive docs]) - Updated foobot_async package version ([@reefab] - [#13942]) ([sensor.foobot docs]) -- Update pyhydroquebec to 2.2.2 ([@titilambert] - [#13946]) ([sensor.hydroquebec docs]) (beta fix) - Upgrade alpha_vantage to 2.0.0 ([@fabaff] - [#13943]) ([sensor.alpha_vantage docs]) - Cleanup on exit ([@dgomes] - [#13918]) ([media_player.mediaroom docs]) -- Upgrade somecomfort to 0.5.2 ([@balloob] - [#13940]) ([climate.honeywell docs]) (beta fix) - Add data entry flow helper ([@balloob] - [#13935]) ([config docs]) - Xiaomi MiIO Device Tracker: Unused variable removed ([@syssi] - [#13948]) ([device_tracker docs]) - Implement play media to set a channel based on (by priority): ([@stephanerosi] - [#13934]) ([media_player.webostv docs]) @@ -169,20 +137,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Added FB messenger broadcast api to notify.facebook component ([@B1tMaster] - [#12459]) ([notify.facebook docs]) - Added web view for TTS to get url ([@tschmidty69] - [#13882]) ([tts docs]) - Add services for bmw_connected_drive ([@ChristianKuehnel] - [#13497]) ([bmw_connected_drive docs]) ([device_tracker docs]) -- Fix call to parent broadlink switch ([@Danielhiversen] - [#13906]) ([switch.broadlink docs]) (beta fix) - Bump deCONZ requirement to v36 ([@Kane610] - [#13960]) ([deconz docs]) -- Fix Gogogate2 'available' attribute ([@dlbroadfoot] - [#13728]) (beta fix) -- Fix so it is possible to ignore discovered config entry handlers ([@Kane610] - [#13741]) (beta fix) -- Prevent vesync doing I/O in event loop ([@balloob] - [#13862]) ([switch.vesync docs]) (beta fix) -- Fix #13846 Double underscore in bluetooth address ([@aav7fl] - [#13884]) ([device_tracker docs]) (beta fix) -- Fix race condition for component loaded before listening ([@balloob] - [#13887]) ([config docs]) (beta fix) -- Missing property decorator added ([@syssi] - [#13889]) ([fan.xiaomi_miio docs]) (beta fix) -- Fix call to parent broadlink switch ([@Danielhiversen] - [#13906]) ([switch.broadlink docs]) (beta fix) -- Import operation modes from air humidifier ([@syssi] - [#13908]) ([fan.xiaomi_miio docs]) (beta fix) -- Upgrade pyqwikswitch to 0.71 ([@kellerza] - [#13920]) ([qwikswitch docs]) -- Upgrade somecomfort to 0.5.2 ([@balloob] - [#13940]) ([climate.honeywell docs]) (beta fix) -- Update pyhydroquebec to 2.2.2 ([@titilambert] - [#13946]) ([sensor.hydroquebec docs]) (beta fix) -- Revert "Upgrade pyqwikswitch to 0.71 ([@balloob] - [#13920]) ([qwikswitch docs]) - Bump skybellpy version to 0.1.2 ([@MisterWil] - [#13974]) ([skybell docs]) - Fix typo an coding style ([@stephanerosi] - [#13970]) ([device_tracker docs]) - Params of the send command can be a list now ([@syssi] - [#13905]) ([vacuum docs]) From 0cfcbf254b4a741ea9d140e3cf29f73fcc433326 Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Mon, 23 Apr 2018 17:58:46 +0200 Subject: [PATCH 283/371] Added release notes for 0.67.1 (#5211) * Added notes for 0.67.1 * Updated _config.yml --- _config.yml | 4 +- source/_posts/2018-04-14-release-67.markdown | 49 ++++++++++++++++++++ 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/_config.yml b/_config.yml index 38d26c045e..292d32752f 100644 --- a/_config.yml +++ b/_config.yml @@ -140,8 +140,8 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 67 -current_patch_version: 0 -date_released: 2018-04-13 +current_patch_version: 1 +date_released: 2018-04-17 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. diff --git a/source/_posts/2018-04-14-release-67.markdown b/source/_posts/2018-04-14-release-67.markdown index ec16c1d115..843cce88e6 100644 --- a/source/_posts/2018-04-14-release-67.markdown +++ b/source/_posts/2018-04-14-release-67.markdown @@ -28,6 +28,23 @@ This release includes a security fix. The error log was accessible via the API w - Tahoma switches ([@ikucuze] - [#13636]) ([tahoma docs]) ([switch.tahoma docs]) (new-platform) - Add support for Nanoleaf Aurora Light Panels ([@Oro] - [#13456]) ([light.nanoleaf_aurora docs]) (new-platform) +## {% linkable_title Release 0.67.1 - April 17 %} + +- Fix Gogogate2 'available' attribute ([@dlbroadfoot] - [#13728]) +- Fix so it is possible to ignore discovered config entry handlers ([@Kane610] - [#13741]) +- Prevent vesync doing I/O in event loop ([@balloob] - [#13862]) ([switch.vesync docs]) +- Fix #13846 Double underscore in bluetooth address ([@aav7fl] - [#13884]) ([device_tracker docs]) +- Fix race condition for component loaded before listening ([@balloob] - [#13887]) ([config docs]) +- Missing property decorator added ([@syssi] - [#13889]) ([fan.xiaomi_miio docs]) +- Fix call to parent broadlink switch ([@Danielhiversen] - [#13906]) ([switch.broadlink docs]) +- Import operation modes from air humidifier ([@syssi] - [#13908]) ([fan.xiaomi_miio docs]) +- Upgrade pyqwikswitch to 0.71 ([@kellerza] - [#13920]) ([qwikswitch docs]) +- Upgrade somecomfort to 0.5.2 ([@balloob] - [#13940]) ([climate.honeywell docs]) +- Update pyhydroquebec to 2.2.2 ([@titilambert] - [#13946]) ([sensor.hydroquebec docs]) +- Update pyfido to 2.1.1 ([@titilambert] - [#13947]) ([sensor.fido docs]) +- Bumped pypollencom to 1.1.2 ([@bachya] - [#13959]) ([sensor.pollen docs]) +- Revert "Upgrade pyqwikswitch to 0.71 ([@balloob] - [#13920]) ([qwikswitch docs]) + ## {% linkable_title If you need help... %} ...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. @@ -395,3 +412,35 @@ Experiencing issues introduced by this release? Please report them in our [issue [xiaomi_aqara docs]: /components/xiaomi_aqara/ [zwave docs]: /components/zwave/ [ann-ubiquiti]: /blog/2018/04/12/ubiquiti-and-home-assistant/ +[#13728]: https://github.com/home-assistant/home-assistant/pull/13728 +[#13741]: https://github.com/home-assistant/home-assistant/pull/13741 +[#13862]: https://github.com/home-assistant/home-assistant/pull/13862 +[#13884]: https://github.com/home-assistant/home-assistant/pull/13884 +[#13887]: https://github.com/home-assistant/home-assistant/pull/13887 +[#13889]: https://github.com/home-assistant/home-assistant/pull/13889 +[#13906]: https://github.com/home-assistant/home-assistant/pull/13906 +[#13908]: https://github.com/home-assistant/home-assistant/pull/13908 +[#13920]: https://github.com/home-assistant/home-assistant/pull/13920 +[#13940]: https://github.com/home-assistant/home-assistant/pull/13940 +[#13946]: https://github.com/home-assistant/home-assistant/pull/13946 +[#13947]: https://github.com/home-assistant/home-assistant/pull/13947 +[#13959]: https://github.com/home-assistant/home-assistant/pull/13959 +[@Danielhiversen]: https://github.com/Danielhiversen +[@Kane610]: https://github.com/Kane610 +[@aav7fl]: https://github.com/aav7fl +[@bachya]: https://github.com/bachya +[@balloob]: https://github.com/balloob +[@dlbroadfoot]: https://github.com/dlbroadfoot +[@kellerza]: https://github.com/kellerza +[@syssi]: https://github.com/syssi +[@titilambert]: https://github.com/titilambert +[climate.honeywell docs]: /components/climate.honeywell/ +[config docs]: /components/config/ +[device_tracker docs]: /components/device_tracker/ +[fan.xiaomi_miio docs]: /components/fan.xiaomi_miio/ +[qwikswitch docs]: /components/qwikswitch/ +[sensor.fido docs]: /components/sensor.fido/ +[sensor.hydroquebec docs]: /components/sensor.hydroquebec/ +[sensor.pollen docs]: /components/sensor.pollen/ +[switch.broadlink docs]: /components/switch.broadlink/ +[switch.vesync docs]: /components/switch.vesync/ From b455d059c8aa664d3e7164d683cfc545becd240e Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 23 Apr 2018 13:42:55 -0400 Subject: [PATCH 284/371] Update 2018-04-27-release-68.markdown --- source/_posts/2018-04-27-release-68.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_posts/2018-04-27-release-68.markdown b/source/_posts/2018-04-27-release-68.markdown index 167a264a2a..e8934b6296 100644 --- a/source/_posts/2018-04-27-release-68.markdown +++ b/source/_posts/2018-04-27-release-68.markdown @@ -17,6 +17,7 @@ Highlights: - Ability to _control_ HomeKit - Eufy bulbs +- Breaking MDI icons? ## {% linkable_title New Platforms %} From 033028b8819940641163f65fa7223cf903ef7866 Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Mon, 23 Apr 2018 23:39:04 +0200 Subject: [PATCH 285/371] Fix release version (#5236) --- _config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_config.yml b/_config.yml index 38d26c045e..36d6b34978 100644 --- a/_config.yml +++ b/_config.yml @@ -139,9 +139,9 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 67 +current_minor_version: 68 current_patch_version: 0 -date_released: 2018-04-13 +date_released: 2018-04-27 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. From 193ae8a0d01b7f00b74ea83a3d9ea7a300a09ccb Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Mon, 23 Apr 2018 23:39:18 +0200 Subject: [PATCH 286/371] Fix release not anchor link (#5235) --- _config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_config.yml b/_config.yml index 292d32752f..b707c0d52d 100644 --- a/_config.yml +++ b/_config.yml @@ -146,7 +146,7 @@ date_released: 2018-04-17 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. # Major release: -patch_version_notes: "#" +patch_version_notes: "#release-0671---april-17" # Minor release (Example #release-0431---april-25): # Date we moved to Discourse for comments From b03e6e0ba4aa15d260b8fb769b4401685baad05d Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 24 Apr 2018 13:35:25 -0400 Subject: [PATCH 287/371] =?UTF-8?q?Google=20Assistant=20=F0=9F=8E=89=20(#5?= =?UTF-8?q?244)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add blog post * Add video * Update link --- source/_components/google_assistant.markdown | 6 ++- ...4-launch-google-assistant-support.markdown | 44 ++++++++++++++++++ source/cloud/google_assistant.markdown | 1 - source/cloud/index.markdown | 9 ++-- .../google-assistant-home-assistant.png | Bin 0 -> 132675 bytes source/index.html | 8 ++++ 6 files changed, 60 insertions(+), 8 deletions(-) create mode 100644 source/_posts/2018-04-24-launch-google-assistant-support.markdown create mode 100644 source/images/blog/2018-04-google-assistant/google-assistant-home-assistant.png diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index d1096fd88c..40b0417758 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -13,6 +13,10 @@ featured: true ha_release: 0.56 --- +

+ Use [Home Assistant Cloud](/components/cloud/) to integrate with Google Assistant without any effort. +

+ The `google_assistant` component allows you to control things via Google Assistant (on your mobile or tablet) or a Google Home device. The Google Assistant component requires a bit more setup than most due to the way Google requires Assistant Apps to be set up. @@ -134,7 +138,7 @@ If you're not using Linux, you can use sites such as [this one](https://www.brow 1. Create a new project in the [developer console](https://console.actions.google.com/). a. Add/Import project b. Click on `BUILD` on the `Smart home` card - c. Type in your home assistant url: `https://[YOUR HOME ASSISTANT URL:PORT]/api/google_assistant`, replace the `[YOUR HOME ASSISTANT URL:PORT]` with the domain / ip address and the port under which your Home Assistant is reachable. + c. Type in your home assistant url: `https://[YOUR HOME ASSISTANT URL:PORT]/api/google_assistant`, replace the `[YOUR HOME ASSISTANT URL:PORT]` with the domain / ip address and the port under which your Home Assistant is reachable. d. Click `Done`. Then click on `Overview`, which will lead you to the app details screen. 2. You'll need to fill out most of the information on that page, but none of it really matters since you won't be addressing the App directly, only through the Smart Home functionality built into Google Assistant. 3. The final item on that page `Account linking` is required for your app to interact with Home Assistant. diff --git a/source/_posts/2018-04-24-launch-google-assistant-support.markdown b/source/_posts/2018-04-24-launch-google-assistant-support.markdown new file mode 100644 index 0000000000..edf50f2d09 --- /dev/null +++ b/source/_posts/2018-04-24-launch-google-assistant-support.markdown @@ -0,0 +1,44 @@ +--- +layout: post +title: "Our Google Assistant skill is live!" +description: "The Google Assistant integration for Home Assistant Cloud is now available to all." +date: 2018-04-24 00:01:00 +date_formatted: "April 24, 2018" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Announcement +og_image: /images/blog/2018-04-google-assistant/google-assistant-home-assistant.png +--- + +

+ Home Assistant logo and the Works with the Google Assistant badge +

+ +Guess what? Yep, our Google Assistant Smart Home skill is live! It's a mouthful but it means that you can now control your Home Assistant devices via any Google Assistant enabled device by simply saying things like "Ok Google, turn on the lights". + +To get started: + + - [Enable Home Assistant Cloud](/cloud/#enabling-the-cloud) + - Install our skill for Google Assistant. As of this writing, the link is not live yet: you can find it by opening the Google Home app -> Home Control, tap on the blue + at the bottom right and find Hass.io in the list. + - Optional: [Tweak the devices](/cloud/google_assistant/) that are getting exposed to Google Assistant. + +Things to note: + + - The skill is called Hass.io, but will work with normal Home Assistant too. The name was necessary to avoid confusion between Home Assistant, Google Assistant and Google Home. + - Works with Home Assistant 0.65 or later. + - All message handling is done local and is [open source](https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/components/google_assistant/trait.py). + - If you have an Android device with Google Assistant, you can control your devices too. + - Home Assistant 0.68 will introduce a button to the Cloud config panel to trigger a sync of available devices. + +Home Assistant Cloud is still in open beta and free to use. Open beta period has been extended to June 1. Many thanks to [Quadflight] for providing the Raspberry Pis that Google used for physical testing and thanks to [Arsaboo] for helping with testing. + +
+ +
+ +[Quadflight]: https://github.com/quadflight +[Arsaboo]: https://github.com/arsaboo diff --git a/source/cloud/google_assistant.markdown b/source/cloud/google_assistant.markdown index 155b2356a7..b438e8482c 100644 --- a/source/cloud/google_assistant.markdown +++ b/source/cloud/google_assistant.markdown @@ -7,7 +7,6 @@ sidebar: true comments: false sharing: true footer: true -published: false --- The Google Assistant integration allows users to control the entities via the Home Assistant Smart Home skill for Google Assistant. This means that you can say things like "Ok Google, turn on the kitchen light" to control your local Home Assistant. diff --git a/source/cloud/index.markdown b/source/cloud/index.markdown index 449294d890..24f5cf76aa 100644 --- a/source/cloud/index.markdown +++ b/source/cloud/index.markdown @@ -15,19 +15,16 @@ ha_iot_class: "Cloud Push"

The Home Assistant Cloud is currently free and will become part of the upcoming Community Support Package. [Learn more](/blog/2017/12/17/introducing-home-assistant-cloud/)

-The Home Assistant Cloud allows you to quickly integrate your local Home Assistant with various cloud services like Amazon Alexa. - -The following integrations are currently available: +The Home Assistant Cloud allows you to quickly integrate your local Home Assistant with various cloud services. The following integrations are currently available: - [Amazon Alexa (Amazon Echo)](/cloud/alexa/) - - + - [Google Assistant (Google Home)](/cloud/google_assistant/) ### {% linkable_title How does it work? %} The Home Assistant Cloud has been designed with security in mind. When you activate the Cloud component, your instance will create a secure connection to the Home Assistant Cloud. There is no need for any further configuration or to expose your instance to the internet. -Integrations like Alexa will deliver messages to our cloud which we will forward to your local instance for processing. We just forward the response back to Alexa. This means that we do not have to store the state of your house in our cloud, we’re just the messenger! +Integrations like Alexa or Google will deliver messages to our cloud which we will forward to your local instance for processing. We just forward the response back. This means that we do not have to store the state of your house in our cloud, we’re just the messenger! You can find a list of frequently asked questions (and their answers) in [this blog post](/blog/2017/12/17/introducing-home-assistant-cloud/#faq). diff --git a/source/images/blog/2018-04-google-assistant/google-assistant-home-assistant.png b/source/images/blog/2018-04-google-assistant/google-assistant-home-assistant.png new file mode 100644 index 0000000000000000000000000000000000000000..a7ec721fbccef043d8040ad7f55e167f67715a5a GIT binary patch literal 132675 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 NuN5^ED&);W{|5uRj0*q& literal 0 HcmV?d00001 diff --git a/source/index.html b/source/index.html index 11729ac796..234bf17108 100644 --- a/source/index.html +++ b/source/index.html @@ -41,6 +41,14 @@ description: Open-source home automation platform running on Python 3. Track and LEARN MORE +

+

Ok Google, turn on the AC

+ Use Google Assistant to control Home Assistant. + + +
Read our founder's vision for the perfect home automation From 386307868d5b9b59e92abe993a23b492cf82b65a Mon Sep 17 00:00:00 2001 From: Matthew Rollings Date: Tue, 24 Apr 2018 19:18:25 +0100 Subject: [PATCH 288/371] Dyson instructions unclear about Device ID / Serial Number (#5243) Modified text to explain the device_id needs the serial number for the device, not the name of the device as given in the example. --- source/_components/dyson.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/dyson.markdown b/source/_components/dyson.markdown index c090862421..7c0e1ca2f3 100644 --- a/source/_components/dyson.markdown +++ b/source/_components/dyson.markdown @@ -26,9 +26,9 @@ dyson: password: YOUR_DYSON_PASSWORD language: YOUR_DYSON_ACCOUNT_LANGUGAGE devices: - - device_id: DEVICE_ID_1 # eg: Pure Cool Link device + - device_id: DEVICE_ID_1 # eg. Serial number: XXX-XX-XXXXXXXX device_ip: DEVICE_ID_1 - - device_id: DEVICE_ID_2 # eg: Eye 360 robot vacuum + - device_id: DEVICE_ID_2 device_ip: DEVICE_ID_2 ``` @@ -38,7 +38,7 @@ Configuration variables: - **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_id** (*Required*): Device ID. The Serial Number of the device. Found in the mobiles applications device 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). From f5cfc55087f52fde54e370aab8fb2ef371dbf34f Mon Sep 17 00:00:00 2001 From: Jeremy Klein Date: Tue, 24 Apr 2018 11:40:44 -0700 Subject: [PATCH 289/371] Update google_assistant.markdown (#5241) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since RoomHints are now live in the Google Assistant API, I’m removing the “not yet” disclaimer. --- source/_components/google_assistant.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index 40b0417758..9c92c77e77 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -106,7 +106,7 @@ entity_config: required: false type: list room: - description: Allows for associating this device to a Room in Google Assistant. This is currently non-functional, but will be enabled in the near future. + description: Allows for associating this device to a Room in Google Assistant. required: false type: string {% endconfiguration %} From e6c69b0a48936e63be87c920ca5ae9a6663aefa1 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 24 Apr 2018 14:52:46 -0400 Subject: [PATCH 290/371] Update google_assistant.markdown --- source/cloud/google_assistant.markdown | 5 ----- 1 file changed, 5 deletions(-) diff --git a/source/cloud/google_assistant.markdown b/source/cloud/google_assistant.markdown index b438e8482c..1cdced7984 100644 --- a/source/cloud/google_assistant.markdown +++ b/source/cloud/google_assistant.markdown @@ -37,7 +37,6 @@ cloud: aliases: - bright lights - entry lights - type: 'action.devices.types.LIGHT' ``` {% configuration cloud %} @@ -85,9 +84,5 @@ google_actions: description: Aliases that can also be used to refer to this entity required: false type: list - type: - description: Override the type of the entity in Google Assistant. [List of available types](https://developers.google.com/actions/smarthome/guides/) - required: false - type: string {% endconfiguration %} From ea74a32b400f4c3c5de24e56ffe51e41cb5f1b28 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 24 Apr 2018 14:53:25 -0400 Subject: [PATCH 291/371] Update google_assistant.markdown --- source/_components/google_assistant.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index 9c92c77e77..f196288c7a 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -14,7 +14,7 @@ ha_release: 0.56 ---

- Use [Home Assistant Cloud](/components/cloud/) to integrate with Google Assistant without any effort. + Use [Home Assistant Cloud](/cloud/) to integrate with Google Assistant without any effort.

The `google_assistant` component allows you to control things via Google Assistant (on your mobile or tablet) or a Google Home device. From 7bfe31cbac81b23764066ed41a8d988384a78f01 Mon Sep 17 00:00:00 2001 From: Matt Farmer Date: Tue, 24 Apr 2018 12:00:05 -0700 Subject: [PATCH 292/371] Fix typo in sabnzbd documentation (#5230) --- source/_components/sensor.sabnzbd.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.sabnzbd.markdown b/source/_components/sensor.sabnzbd.markdown index 840eb5cd08..27766435fd 100644 --- a/source/_components/sensor.sabnzbd.markdown +++ b/source/_components/sensor.sabnzbd.markdown @@ -68,7 +68,7 @@ Note that this will create the following sensors: - sensor.sabnzbd_left - sensor.sabnzbd_disk - sensor.sabnzbd_disk_free - - sensor.sabnzdb_queue_count + - sensor.sabnzbd_queue_count ``` As always, you can determine the names of sensors by looking at the dev-state page `< >` in the web interface. From 5f7f542f680f5e194b156482a8ca54eaca34d687 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 24 Apr 2018 23:30:23 -0400 Subject: [PATCH 293/371] Eufy update dates --- source/_components/eufy.markdown | 2 +- source/_components/light.eufy.markdown | 2 +- source/_components/switch.eufy.markdown | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/eufy.markdown b/source/_components/eufy.markdown index c11870e401..294dd26902 100644 --- a/source/_components/eufy.markdown +++ b/source/_components/eufy.markdown @@ -2,7 +2,7 @@ layout: page title: "Eufy" description: "Instructions on how to integrate Eufy devices into Home Assistant." -date: 2018-05-09 19:00 +date: 2018-04-09 19:00 sidebar: true comments: false sharing: true diff --git a/source/_components/light.eufy.markdown b/source/_components/light.eufy.markdown index 773d99f4aa..872526e1ed 100644 --- a/source/_components/light.eufy.markdown +++ b/source/_components/light.eufy.markdown @@ -2,7 +2,7 @@ layout: page title: "EufyLights" description: "Instructions on how to integrate Eufy LED lights into Home Assistant." -date: 2018-05-09 19:00 +date: 2018-04-09 19:00 sidebar: true comments: false sharing: true diff --git a/source/_components/switch.eufy.markdown b/source/_components/switch.eufy.markdown index 22e56ae38b..0bfbae81e5 100644 --- a/source/_components/switch.eufy.markdown +++ b/source/_components/switch.eufy.markdown @@ -2,7 +2,7 @@ layout: page title: "EufySwitch" description: "Instructions on how to integrate Eufy switches into Home Assistant." -date: 2018-05-09 19:00 +date: 2018-04-09 19:00 sidebar: true comments: false sharing: true From 0b2a94385de4b4cae7c7ac4ed80506327d0366ba Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Wed, 25 Apr 2018 07:05:12 +0200 Subject: [PATCH 294/371] Air Conditioning Companion V3 (acpartner.v3) support added (#5083) --- source/_components/xiaomi_aqara.markdown | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/_components/xiaomi_aqara.markdown b/source/_components/xiaomi_aqara.markdown index 2bf6fdb5e3..28f40d3f8c 100644 --- a/source/_components/xiaomi_aqara.markdown +++ b/source/_components/xiaomi_aqara.markdown @@ -18,6 +18,8 @@ The `xiaomi_aqara` component allows you to integrate [Xiaomi](http://www.mi.com/ #### {% linkable_title Supported Devices %} +- Xiaomi Aqara Gateway (lumi.gateway.v2, lumi.gateway.v3) +- Aqara Air Conditioning Companion (lumi.acpartner.v3) - Temperature and Humidity Sensor (1st and 2nd generation) - Motion Sensor (1st and 2nd generation) - Door and Window Sensor (1st and 2nd generation) @@ -42,8 +44,8 @@ The `xiaomi_aqara` component allows you to integrate [Xiaomi](http://www.mi.com/ - Gateway Radio - Gateway Button -- Aqara Air Conditioning Companion -- Aqara Intelligent Air Conditioner Controller Hub +- Xiaomi Mi Air Conditioning Companion (lumi.acpartner.v2) +- Aqara Intelligent Air Conditioner Controller Hub (lumi.acpartner.v1) - Decoupled mode of the Aqara Wall Switches (Single & Double) - Additional alarm events of the Gas and Smoke Detector: Analog alarm, battery fault alarm (smoke detector only), sensitivity fault alarm, I2C communication failure From 0b948617b99cde82cabd88611b1c0119e692c6ef Mon Sep 17 00:00:00 2001 From: cdce8p <30130371+cdce8p@users.noreply.github.com> Date: Wed, 25 Apr 2018 08:48:57 +0200 Subject: [PATCH 295/371] Updated release blog post for 0.68.0b1 (rc) (#5246) --- source/_posts/2018-04-27-release-68.markdown | 35 ++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/source/_posts/2018-04-27-release-68.markdown b/source/_posts/2018-04-27-release-68.markdown index e8934b6296..cc616913a5 100644 --- a/source/_posts/2018-04-27-release-68.markdown +++ b/source/_posts/2018-04-27-release-68.markdown @@ -30,6 +30,7 @@ Highlights: - Add blackbird media player component ([@koolsb] - [#13549]) ([media_player.blackbird docs]) (new-platform) - Add support for Sensirion SHT31 temperature/humidity sensor ([@viorels] - [#12952]) ([sensor.sht31 docs]) (new-platform) - Upgraded miflora library to version 0.4.0 ([@ChristianKuehnel] - [#14005]) ([sensor.lmsensor docs]) ([sensor.miflora docs]) (new-platform) +- Qwikswitch binary sensors ([@kellerza] - [#14008]) ([qwikswitch docs]) ([binary_sensor.qwikswitch docs]) ([sensor.qwikswitch docs]) (beta fix) (new-platform) ## {% linkable_title New Features %} @@ -39,6 +40,15 @@ Highlights: - Support Garage Doors in HomeKit ([@marthoc] - [#13796]) ([homekit docs]) (new-feature) - Support basic covers with open/close/stop services HomeKit ([@nickw444] - [#13819]) ([homekit docs]) (new-feature) +## {% linkable_title Beta Fixes %} + +- Qwikswitch binary sensors ([@kellerza] - [#14008]) ([qwikswitch docs]) ([binary_sensor.qwikswitch docs]) ([sensor.qwikswitch docs]) (beta fix) (new-platform) +- Order the output of the automation editor ([@balloob] - [#14019]) ([config docs]) (beta fix) +- HomeKit Alarm Control Panel Code Exception Fix ([@schmittx] - [#14025]) ([homekit docs]) (beta fix) +- Revert cast platform polling mode ([@OttoWinter] - [#14027]) ([media_player.cast docs]) (beta fix) +- Handle HomeKit configuration failure more cleanly ([@mjg59] - [#14041]) ([homekit_controller docs]) (beta fix) +- Update device classes for contact sensor HomeKit ([@marthoc] - [#14051]) ([homekit docs]) (beta fix) + ## {% linkable_title If you need help... %} ...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. @@ -161,6 +171,12 @@ Experiencing issues introduced by this release? Please report them in our [issue - Tibber available ([@Danielhiversen] - [#13865]) ([sensor.tibber docs]) - Upgrade pylutron-caseta to 0.5.0 to reestablish connections ([@rohankapoorcom] - [#14013]) ([lutron_caseta docs]) - Add sensor device classes ([@balloob] - [#14010]) ([sensor docs]) ([sensor.ecobee docs]) ([sensor.linux_battery docs]) ([sensor.nest docs]) +- Qwikswitch binary sensors ([@kellerza] - [#14008]) ([qwikswitch docs]) ([binary_sensor.qwikswitch docs]) ([sensor.qwikswitch docs]) (beta fix) (new-platform) +- Order the output of the automation editor ([@balloob] - [#14019]) ([config docs]) (beta fix) +- HomeKit Alarm Control Panel Code Exception Fix ([@schmittx] - [#14025]) ([homekit docs]) (beta fix) +- Revert cast platform polling mode ([@OttoWinter] - [#14027]) ([media_player.cast docs]) (beta fix) +- Handle HomeKit configuration failure more cleanly ([@mjg59] - [#14041]) ([homekit_controller docs]) (beta fix) +- Update device classes for contact sensor HomeKit ([@marthoc] - [#14051]) ([homekit docs]) (beta fix) [#10688]: https://github.com/home-assistant/home-assistant/pull/10688 [#12224]: https://github.com/home-assistant/home-assistant/pull/12224 @@ -443,3 +459,22 @@ Experiencing issues introduced by this release? Please report them in our [issue [vacuum.xiaomi_miio docs]: /components/vacuum.xiaomi_miio/ [weather.yweather docs]: /components/weather.yweather/ [zha docs]: /components/zha/ +[#14008]: https://github.com/home-assistant/home-assistant/pull/14008 +[#14019]: https://github.com/home-assistant/home-assistant/pull/14019 +[#14025]: https://github.com/home-assistant/home-assistant/pull/14025 +[#14027]: https://github.com/home-assistant/home-assistant/pull/14027 +[#14041]: https://github.com/home-assistant/home-assistant/pull/14041 +[#14051]: https://github.com/home-assistant/home-assistant/pull/14051 +[@OttoWinter]: https://github.com/OttoWinter +[@balloob]: https://github.com/balloob +[@kellerza]: https://github.com/kellerza +[@marthoc]: https://github.com/marthoc +[@mjg59]: https://github.com/mjg59 +[@schmittx]: https://github.com/schmittx +[binary_sensor.qwikswitch docs]: /components/binary_sensor.qwikswitch/ +[config docs]: /components/config/ +[homekit docs]: /components/homekit/ +[homekit_controller docs]: /components/homekit_controller/ +[media_player.cast docs]: /components/media_player.cast/ +[qwikswitch docs]: /components/qwikswitch/ +[sensor.qwikswitch docs]: /components/sensor.qwikswitch/ From d771d839f3eec247993ad40ebb4c6296d56e981b Mon Sep 17 00:00:00 2001 From: Mitko Masarliev Date: Wed, 25 Apr 2018 21:03:51 +0300 Subject: [PATCH 296/371] domain expiry (#5242) * domain expiry * config * config --- .../_components/sensor.domain_expiry.markdown | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 source/_components/sensor.domain_expiry.markdown diff --git a/source/_components/sensor.domain_expiry.markdown b/source/_components/sensor.domain_expiry.markdown new file mode 100644 index 0000000000..a70306909a --- /dev/null +++ b/source/_components/sensor.domain_expiry.markdown @@ -0,0 +1,37 @@ +--- +layout: page +title: "Domain Expiry" +description: "Instructions on how to set up Domain expiry sensors within Home Assistant." +date: 2018-04-24 14:14 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_category: System Monitor +ha_release: 0.69 +ha_iot_class: "depends" +--- + +The `domain_expiry` sensor gets whois information about domain and displays the expiry in days. + +To add the Domain Expiry sensor to your installation, add these options to `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: domain_expiry + domain: home-assistant.io +``` + +{% configuration %} +domain: + description: Domain name to track + required: true + type: string +name: + description: The friendly name for the certificate. + required: false + type: string + default: Domain Expiry +{% endconfiguration %} \ No newline at end of file From a83fd1d874b57f8ad35ab2453510747bbd52ebc8 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 26 Apr 2018 09:11:56 -0400 Subject: [PATCH 297/371] Update 2018-04-24-launch-google-assistant-support.markdown --- .../_posts/2018-04-24-launch-google-assistant-support.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2018-04-24-launch-google-assistant-support.markdown b/source/_posts/2018-04-24-launch-google-assistant-support.markdown index edf50f2d09..7a263f9682 100644 --- a/source/_posts/2018-04-24-launch-google-assistant-support.markdown +++ b/source/_posts/2018-04-24-launch-google-assistant-support.markdown @@ -29,7 +29,7 @@ To get started: Things to note: - The skill is called Hass.io, but will work with normal Home Assistant too. The name was necessary to avoid confusion between Home Assistant, Google Assistant and Google Home. - - Works with Home Assistant 0.65 or later. + - Works with Home Assistant 0.65.6 or later. - All message handling is done local and is [open source](https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/components/google_assistant/trait.py). - If you have an Android device with Google Assistant, you can control your devices too. - Home Assistant 0.68 will introduce a button to the Cloud config panel to trigger a sync of available devices. From 80b268cd65cbf6da6defd860f0c4b2ead0d573b9 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 26 Apr 2018 11:14:55 -0400 Subject: [PATCH 298/371] Extract developer site (#5249) * Extract developer site * Fix title in sidebar * Update dev section reference * Update edit in github link on help page --- sass/custom/_paulus.scss | 32 +- .../asides/developers_navigation.html | 142 ----- source/_includes/asides/help_navigation.html | 33 ++ source/_includes/custom/footer.html | 32 +- source/_includes/custom/navigation.html | 1 - source/_includes/site/sidebar.html | 4 +- source/_layouts/page.html | 1 + source/developers/add_new_platform.markdown | 27 +- source/developers/api.markdown | 13 +- source/developers/architecture.markdown | 32 +- .../architecture_components.markdown | 58 +- source/developers/asyncio.markdown | 19 +- source/developers/asyncio_101.markdown | 12 +- .../asyncio_categorizing_functions.markdown | 71 +-- source/developers/asyncio_misc.markdown | 14 +- .../asyncio_working_with_async.markdown | 120 +--- .../developers/code_review_component.markdown | 28 +- .../developers/code_review_platform.markdown | 70 +-- .../component_deps_and_reqs.markdown | 35 +- .../developers/component_discovery.markdown | 52 +- source/developers/component_events.markdown | 4 +- .../component_generic_discovery.markdown | 69 +-- source/developers/component_loading.markdown | 17 +- source/developers/component_states.markdown | 14 +- .../developers/component_visibility.markdown | 13 +- .../developers/creating_components.markdown | 19 +- source/developers/development.markdown | 23 +- source/developers/development_101.markdown | 49 +- .../development_catching_up.markdown | 33 +- .../developers/development_checklist.markdown | 12 +- source/developers/development_config.markdown | 27 +- .../development_environment.markdown | 102 +--- source/developers/development_events.markdown | 54 +- .../development_guidelines.markdown | 73 +-- .../development_hass_object.markdown | 29 +- .../developers/development_services.markdown | 47 +- source/developers/development_states.markdown | 132 +---- .../development_submitting.markdown | 39 +- .../developers/development_testing.markdown | 68 +-- .../development_validation.markdown | 79 +-- source/developers/frontend.markdown | 94 +--- source/developers/frontend_add_card.markdown | 20 +- .../frontend_add_more_info.markdown | 15 +- .../frontend_creating_custom_panels.markdown | 81 +-- .../frontend_creating_custom_ui.markdown | 88 +-- .../hassio/addon_communication.markdown | 32 +- .../developers/hassio/addon_config.markdown | 198 +------ .../hassio/addon_development.markdown | 14 +- .../hassio/addon_presentation.markdown | 45 +- .../hassio/addon_publishing.markdown | 56 +- .../hassio/addon_repository.markdown | 28 +- .../developers/hassio/addon_testing.markdown | 28 +- .../developers/hassio/addon_tutorial.markdown | 199 +------ .../developers/hassio/architecture.markdown | 30 +- source/developers/hassio/debugging.markdown | 46 +- source/developers/helpers.markdown | 18 +- source/developers/index.markdown | 17 +- .../developers/intent/conversation.markdown | 19 +- source/developers/intent/firing.markdown | 51 +- source/developers/intent/handling.markdown | 41 +- source/developers/intent/index.markdown | 29 +- .../backend_localization.markdown | 42 +- .../custom_component_localization.markdown | 11 +- .../internationalization/index.markdown | 10 +- .../internationalization/translation.markdown | 43 +- source/developers/maintenance.markdown | 44 +- source/developers/multiple_instances.markdown | 37 +- .../platform_example_light.markdown | 116 +--- .../platform_example_sensor.markdown | 58 +- source/developers/python_api.markdown | 228 +------- source/developers/releasing.markdown | 66 +-- source/developers/rest_api.markdown | 522 +----------------- source/developers/server_sent_events.markdown | 65 +-- source/developers/websocket_api.markdown | 350 +----------- source/help/index.markdown | 8 +- 75 files changed, 282 insertions(+), 4166 deletions(-) delete mode 100644 source/_includes/asides/developers_navigation.html create mode 100644 source/_includes/asides/help_navigation.html diff --git a/sass/custom/_paulus.scss b/sass/custom/_paulus.scss index 2a9e1fb4eb..c64bdb7da2 100644 --- a/sass/custom/_paulus.scss +++ b/sass/custom/_paulus.scss @@ -4,6 +4,10 @@ $primary-color: #049cdb; .site-header { position: relative; + + .site-title { + font-weight: normal; + } } .search-container { @@ -377,18 +381,26 @@ p.note { } .copyright { - text-align: center; + text-align: left; - i { - font-size: 3em; - margin-right: 8px; - position: relative; - top: -5px; + .company { + .title { + font-size: 1.5em; + } + + img { + vertical-align: middle; + } + + i { + font-size: 2em; + padding: 0 5px; + } } - .credit { - text-align: left; - display: inline-block; - font-size: .8em; + + ul { + margin: 0; + list-style: none; } } diff --git a/source/_includes/asides/developers_navigation.html b/source/_includes/asides/developers_navigation.html deleted file mode 100644 index 2d770cb7a1..0000000000 --- a/source/_includes/asides/developers_navigation.html +++ /dev/null @@ -1,142 +0,0 @@ -
- {% include edit_github.html %} - -
-

Development Guide

- -
-
diff --git a/source/_includes/asides/help_navigation.html b/source/_includes/asides/help_navigation.html new file mode 100644 index 0000000000..458a6a9385 --- /dev/null +++ b/source/_includes/asides/help_navigation.html @@ -0,0 +1,33 @@ +
+ {% include edit_github.html %} + +
+

 

+
+
+
diff --git a/source/_includes/custom/footer.html b/source/_includes/custom/footer.html index b07ee5bcf8..1a2e590320 100644 --- a/source/_includes/custom/footer.html +++ b/source/_includes/custom/footer.html @@ -1,13 +1,27 @@ -

!pTVx{mvwIq&2Qby>rYI%7d0@Mag|3@A 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
JOF)ekKyPgT#kr;+BsdJ>NO7 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
IYM>#^z51JbzE#Su~JX3*0VCRaz-{H4yB#By`b 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 literal 0 HcmV?d00001 From 48d08be9078667d31eaa83a3672f7edfa23678ef Mon Sep 17 00:00:00 2001 From: Ryan McLean Date: Mon, 19 Mar 2018 21:26:22 +0000 Subject: [PATCH 036/371] Add Documentation for plex client cleanup options (#4907) * Add Documentation for plex client cleanup options * Added removal option --- source/_components/media_player.plex.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/media_player.plex.markdown b/source/_components/media_player.plex.markdown index ddaf3a611b..ba255c2e1e 100644 --- a/source/_components/media_player.plex.markdown +++ b/source/_components/media_player.plex.markdown @@ -69,6 +69,8 @@ media_player: show_all_controls: false use_custom_entity_ids: true use_episode_art: true + remove_unavailable_clients: true + client_remove_interval: 600 ``` - **entity_namespace** (*Optional*): Prefix for entity ID's. Defaults to `null`. Useful when using overlapping components (ex. Apple TV and Plex components when you have Apple TV's you use as Plex clients). Go from _media_player.playroom2_ to _media_player.plex_playroom_ - **include_non_clients** (*Optional*): Display non-recontrollable clients (ex. remote clients, PlexConnect Apple TV's). Defaults to `false`. @@ -76,6 +78,8 @@ media_player: - **show_all_controls** (*Optional*): Forces all controls to display. Defaults to `false`. Ignores dynamic controls (ex. show volume controls for client A but not for client B) based on detected client capabilities. This option allows you to override this detection if you suspect it to be incorrect. - **use_custom_entity_ids** (*Optional*): Name Entity ID's by client ID's instead of friendly names. Defaults to `false`. HA assigns entity ID's on a first come first serve basis. When you have identically named devices connecting (ex. media_player.plex_web_safari, media_player.plex_web_safari2), you can't reliably distinguish and or predict which device is which. This option avoids this issue by using unique client ID's (ex. media_player.dy4hdna2drhn). - **use_episode_art** (*Optional*): Display TV episode art instead of TV show art. Defaults to `false`. +- **remove_unavailable_clients** (*Optional*): Remove stale plex clients from UI after interval. Defaults to `true`. +- **client_remove_interval** (*Optional*): How long a client is to be unavailable for before it is cleaned up. Defaults to `600 seconds (10min)`. ### {% linkable_title Service `play_media` %} From 58a304401d939ac1fc3ae3b2f44a80081fa563a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=B8yer=20Iversen?= Date: Tue, 20 Mar 2018 09:35:38 +0100 Subject: [PATCH 037/371] Update sensor.tibber.markdown (#4948) * Update sensor.tibber.markdown * :pencil2: Removed some newlines and small other stuff * Update sensor.tibber.markdown * Add raw --- source/_components/sensor.tibber.markdown | 31 +++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/source/_components/sensor.tibber.markdown b/source/_components/sensor.tibber.markdown index 6ebcc84bcf..81d11c7ac2 100644 --- a/source/_components/sensor.tibber.markdown +++ b/source/_components/sensor.tibber.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Tibber" -description: "Instructions how to integrate Tibber within Home Assistant." +description: "Instructions on how to integrate Tibber within Home Assistant." date: 2017-10-03 17:00 sidebar: true comments: false @@ -13,7 +13,6 @@ ha_release: 0.55 ha_iot_class: "Cloud Polling" --- - The `tibber` sensor provides the current electricity price if you are a [Tibber](https://tibber.com/) customer. To add Tibber to your installation, add the following to your `configuration.yaml` file: @@ -31,3 +30,31 @@ sensor: required: true type: string {% endconfiguration %} + +## {% linkable_title Examples %} + +In this section, you will find some real-life examples of how to use this sensor. + +### {% linkable_title Electricity price %} + +The electricity price can be used to make automations. The sensor has a `max_price` and `min_price` attribute, with max and min price for the current day. Here is an example to get a notification when the price is above 90% of the maximum price for the day: + +{% raw %} +```yaml +- alias: "Electricity price" + trigger: + platform: time + # Matches every hour at 1 minutes past whole + minutes: 1 + seconds: 00 + condition: + condition: template + value_template: '{{ float(states.sensor.electricity_price_hamretunet_10.state) > 0.9 * float(states.sensor.electricity_price_hamretunet_10.attributes.max_price) }}' + action: + - service: notify.pushbullet + data: + title: "Electricity price" + target: "device/daniel_telefon_cat" + message: "The electricity price is now {{ states.sensor.electricity_price_hamretunet_10.state }}" +``` +{% endraw %} From aba21eeca68d02b6b8bd52fbe7fcc3eaeabc415a Mon Sep 17 00:00:00 2001 From: maxclaey Date: Wed, 21 Mar 2018 20:41:45 +0100 Subject: [PATCH 038/371] Update alarm_control_panel.ifttt.markdown (#4970) * Update alarm_control_panel.ifttt.markdown * Update alarm_control_panel.ifttt.markdown --- .../alarm_control_panel.ifttt.markdown | 37 +++++++++++++++++-- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/source/_components/alarm_control_panel.ifttt.markdown b/source/_components/alarm_control_panel.ifttt.markdown index 13f67bafc5..9fcd58e2d3 100644 --- a/source/_components/alarm_control_panel.ifttt.markdown +++ b/source/_components/alarm_control_panel.ifttt.markdown @@ -31,6 +31,10 @@ alarm_control_panel: - platform: ifttt name: YOUR_ALARM_NAME code: YOUR_ALARM_CODE + event_arm_away: YOUR_ARM_AWAY_EVENT + event_arm_home: YOUR_ARM_HOME_EVENT + event_arm_night: YOUR_ARM_NIGHT_EVENT + event_disarm: YOUR_DISARM_EVENT ```