From dc7b3458b36501e80eeaf177d57509d68ce27a2f Mon Sep 17 00:00:00 2001 From: Josh Nichols Date: Thu, 28 Dec 2017 04:00:06 -0500 Subject: [PATCH 01/35] Try to clarify acceptable component names in a package (#4284) I read this a few times, and thought the original language was confusing, or at least a little ambiguous. Hopefully this helps a little? --- source/_docs/configuration/packages.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/configuration/packages.markdown b/source/_docs/configuration/packages.markdown index 09feb26aabd..584014521f4 100644 --- a/source/_docs/configuration/packages.markdown +++ b/source/_docs/configuration/packages.markdown @@ -63,7 +63,7 @@ light: There are some rules for packages that will be merged: -1. Component names may only use the basic form (e.g. `switch` and `switch 1` or `switch aa` is not accepted). +1. Component names may only use the basic form (e.g. `switch`, but not `switch 1` or `switch aa`). 2. Platform based components (`light`, `switch`, etc) can always be merged. 3. Components where entities are identified by a key that will represent the entity_id (`{key: config}`) need to have unique 'keys' between packages and the main configuration file. From fb883ef41d533c786582dcb99498fb7073ea29c2 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 28 Dec 2017 10:33:21 +0100 Subject: [PATCH 02/35] 2017 blog post (#4290) * Add blog post for 2017 * Add feedback --- source/_posts/2017-12-28-thank-you.markdown | 44 +++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 source/_posts/2017-12-28-thank-you.markdown diff --git a/source/_posts/2017-12-28-thank-you.markdown b/source/_posts/2017-12-28-thank-you.markdown new file mode 100644 index 00000000000..0f3a762b962 --- /dev/null +++ b/source/_posts/2017-12-28-thank-you.markdown @@ -0,0 +1,44 @@ +--- +layout: post +title: "Thank You" +description: "Thanks to all our contributors, dependencies and companies that help make Home Assistant awesome." +date: 2017-12-28 22:00:00 UTC +date_formatted: "December 28, 2017" +author: Fabian affolter +author_twitter: fabaff +comments: true +categories: Community +og_image: +--- + +2017 is almost over and this means it's time to do a little recap of our 2017. This was a great year for Home Assistant. Again, we were able to stick to our bi-weekly release cycle. There were 25 releases over the year and each release included the work of around 60 contributors. + +We got 10.000 stars on [GitHub], reached 10.000 commits in the main repo (over 4300 were made in 2017), got a [Thomas-Krenn award], participated in [Hacktoberfest], we have now almost 1000 integrations (the exact number is 938), we [moved to Discord] and we are up to over 2 million pageviews per month on our forum. Beside that we announced the [Home Assistant cloud] and have regular [Home Assistant Podcasts]. + +We also do not want to forget to mention [Hass.io] and all the great Hass.io add-ons. + +Uff, what a year...Thank you, dear community for being so helpful, supportive and awesome 🙇. + +A very big thanks goes out to the developers of the Python language and all the open source libraries and tools that Home Assistant depends on. You are the foundation for our success and all of you can be proud of yourself. + +We would also like to thanks all the companies that offer their services for free to open source projects. Without these we would not be able to operate at our speed or scale. Thank you [GitHub], [TravisCI], [CloudFlare], [Disord] and [Discourse]! + +Some of us are taking a break and spending some quality time with family and loved ones. + +Stay tuned for more Home Assistant awesomeness in 2018. We will keep the pace but first: Happy New Year! + +-- Home Assistant Organization + +[CloudFlare]: https://CloudFlare.com +[Discord]: https://discordapp.com +[Discourse]: https://Discourse.com +[forum]: https://community.home-assistant.io +[GitHub]: https://GitHub.com +[Hacktoberfest]: /blog/2017/11/04/release-57/#hacktoberfest +[Hass.io]: https://home-assistant.io/hassio/ +[Home Assistant cloud]: /blog/2017/12/17/introducing-home-assistant-cloud/ +[Home Assistant Podcasts]: https://hasspodcast.io/ +[moved to Discord]: /blog/2017/07/03/home-assistant-is-moving-to-discord/ +[Thomas-Krenn award]: /blog/2017/04/01/thomas-krenn-award/ +[TravisCI]: https://Travis-ci.org + From 6e0ce3f41c4039dab992171161f978688888578c Mon Sep 17 00:00:00 2001 From: DubhAd Date: Thu, 28 Dec 2017 11:19:57 +0000 Subject: [PATCH 03/35] Update guide for clarity (#4249) * Update guide for clarity Recommends auto-starting by default, with manual starting as an option. Explicitly pull out the upgrade steps (since it also involves stopping HA first). Recommend install as a dedicated user. * Minor changes --- source/_docs/installation/virtualenv.markdown | 39 ++++++++++++++----- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/source/_docs/installation/virtualenv.markdown b/source/_docs/installation/virtualenv.markdown index d33e8eb6975..d6f26a0b063 100644 --- a/source/_docs/installation/virtualenv.markdown +++ b/source/_docs/installation/virtualenv.markdown @@ -12,36 +12,57 @@ redirect_from: /getting-started/installation-virtualenv/ If you already have Python 3.5 or later installed, you can easily give Home Assistant a spin. -It's recommended when installing Python packages that you use a virtual environment. This will make sure that your Python installation and Home Assistant installation won't impact one another. +It's recommended when installing Python packages that you use a [virtual environment](https://docs.python.org/3.5/library/venv.html#module-venv). This will make sure that your Python installation and Home Assistant installation won't impact one another. The following steps will work on most unix like systems. _(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`.)_ - 1. Create a virtual environment: +### {% linkable_title Install %} + + 1. Create a virtual environment in your current directory: ``` $ python3 -m venv homeassistant ``` - 2. Open virtual environment: + 2. Open the virtual environment: ``` $ cd homeassistant ``` - 3. Activate virtual environment: + 3. Activate the virtual environment: ``` $ source bin/activate ``` 4. Install Home Assistant: ``` - $ python3 -m pip install --upgrade homeassistant + $ python3 -m pip install homeassistant ``` - 5. Run Home Assistant: + 5. Configure it to [autostart](docs/autostart/) + 6. Or run Home Assistant manually: ``` $ hass --open-ui ``` + +### {% linkable_title Upgrade %} + + 1. Stop Home Assistant + + 2. Open the directory where the virtual environment is located: + ``` + $ cd homeassistant + ``` + 3. Activate the virtual environment: + ``` + $ source bin/activate + ``` + 4. Upgrade Home Assistant: + ``` + $ python3 -m pip install --upgrade homeassistant + ``` + 5. Start Home Assistant ### {% linkable_title Notes %} -- In the future, if you want to start Home Assistant again, follow step 2, 3 and 5. -- If you want to upgrade Home Assistant, follow step 2, 3 and 4. +- In the future, if you want to start Home Assistant manually again, follow step 2, 3 and 5. +- It's recommanded to run Home Assistant as a dedicated user.

-Looking for more advanced guides? Check our [Rasbian guide](/docs/installation/raspberry-pi/) or the [available installation guides](/docs/installation/]. For details about autostarting, refer to the [autostart section](/docs/autostart/) in the documentation. +Looking for more advanced guides? Check our [Rasbian guide](/docs/installation/raspberry-pi/) or the [other installation guides](/docs/installation/].

From a1d63321b85c14a6d9dcb175e3f1b9296f2d4b35 Mon Sep 17 00:00:00 2001 From: Matt N Date: Thu, 28 Dec 2017 15:19:49 -0500 Subject: [PATCH 04/35] light.template: Fix typo in device list key (#4297) "switches" should be "lights" --- source/_components/light.template.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/light.template.markdown b/source/_components/light.template.markdown index 69f0315c940..8c5d5ab1545 100755 --- a/source/_components/light.template.markdown +++ b/source/_components/light.template.markdown @@ -42,7 +42,7 @@ light: {% endraw %} {% configuration %} - switches: + lights: description: List of your lights. required: true type: map From 2e75312ad4a85bccaf3eb9a36d62b132e8a86c70 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Thu, 28 Dec 2017 20:20:48 +0000 Subject: [PATCH 05/35] Added note about config (#4292) A few people have got lost by not adding the config (since it isn't explicit when you need it by). Added a new step 8 to point out that you have to have it in by now or you can't continue. --- source/_components/google_assistant.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index bd0a9dadd40..95aee7b7974 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -129,6 +129,7 @@ Entity Customization Keys: 4. Configure your client. Add scopes for `email` and `name` 5. Testing instructions: 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 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 houshold users to control the devices: From 1f256d6272b32e0fd45004bb2a4c25f21aa39e8a Mon Sep 17 00:00:00 2001 From: Dan Nixon Date: Fri, 29 Dec 2017 08:14:06 +0000 Subject: [PATCH 06/35] Add TP-Link's new logo (#4298) --- source/images/supported_brands/tp-link.png | Bin 4805 -> 30005 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/source/images/supported_brands/tp-link.png b/source/images/supported_brands/tp-link.png index 1eced933fdc9f8d890bb58bf1b2f76d27bd94a5b..7e4197dcc324c156852925119bf42fef17491b1e 100644 GIT binary patch literal 30005 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 bxl?sY@O&xIG5{ From 9a09c675a35f75f40999981a616d6a6d0b90f2b5 Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 29 Dec 2017 21:45:44 +0100 Subject: [PATCH 07/35] Fix typo: MariDB to MariaDB (#4301) --- source/_components/recorder.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/recorder.markdown b/source/_components/recorder.markdown index 6531fdf71a0..ae8aae4a490 100644 --- a/source/_components/recorder.markdown +++ b/source/_components/recorder.markdown @@ -119,7 +119,7 @@ action: Not all Python bindings for the chosen database engine can be installed directly. This section contains additional details which should help you to get it working. -### {% linkable_title MariDB and MySQL %} +### {% linkable_title MariaDB and MySQL %} For MariaDB you may have to install a few dependencies. On the Python side we use the `mysqlclient`: From 359fec224aec2f24f03bc6d705ffe06a3937b816 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 29 Dec 2017 21:51:38 +0100 Subject: [PATCH 08/35] Fix typo --- source/_posts/2017-12-28-thank-you.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2017-12-28-thank-you.markdown b/source/_posts/2017-12-28-thank-you.markdown index 0f3a762b962..f5632f7d6fe 100644 --- a/source/_posts/2017-12-28-thank-you.markdown +++ b/source/_posts/2017-12-28-thank-you.markdown @@ -21,7 +21,7 @@ Uff, what a year...Thank you, dear community for being so helpful, supportive an A very big thanks goes out to the developers of the Python language and all the open source libraries and tools that Home Assistant depends on. You are the foundation for our success and all of you can be proud of yourself. -We would also like to thanks all the companies that offer their services for free to open source projects. Without these we would not be able to operate at our speed or scale. Thank you [GitHub], [TravisCI], [CloudFlare], [Disord] and [Discourse]! +We would also like to thanks all the companies that offer their services for free to open source projects. Without these we would not be able to operate at our speed or scale. Thank you [GitHub], [TravisCI], [CloudFlare], [Discord] and [Discourse]! Some of us are taking a break and spending some quality time with family and loved ones. From 899331a6c6d1d6d5db24d3aa01ff7a3dee880bef Mon Sep 17 00:00:00 2001 From: Daniel Date: Fri, 29 Dec 2017 22:47:51 +0100 Subject: [PATCH 09/35] Correct sentence (#4302) The sentence was missing the word _inside_. --- source/_components/notify.slack.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/notify.slack.markdown b/source/_components/notify.slack.markdown index 0445d1df821..17a2e479859 100644 --- a/source/_components/notify.slack.markdown +++ b/source/_components/notify.slack.markdown @@ -42,7 +42,7 @@ Configuration variables: ### {% linkable_title Slack service data %} -The following attributes can be placed `data` for extended functionality. +The following attributes can be placed inside `data` for extended functionality. | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | From d2fbd11c5e83d5d6d056a36bc37af032f99da137 Mon Sep 17 00:00:00 2001 From: gerard33 Date: Sat, 30 Dec 2017 09:58:25 +0100 Subject: [PATCH 10/35] Update cover.tahoma.markdown (#4304) Yaml code was not shown correctly --- source/_components/cover.tahoma.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/cover.tahoma.markdown b/source/_components/cover.tahoma.markdown index 9dfebff30f9..787b6fb126c 100644 --- a/source/_components/cover.tahoma.markdown +++ b/source/_components/cover.tahoma.markdown @@ -14,8 +14,8 @@ ha_release: 0.59 To use your tahoma covers in your installation, add the following to your `configuration.yaml` file: -``yaml +```yaml # Example configuration.yml entry cover: platform: tahoma -``` \ No newline at end of file +``` From 8653e434045d2e4446199b98c20525734ed6a197 Mon Sep 17 00:00:00 2001 From: Jon Griffith <32052562+arretx@users.noreply.github.com> Date: Sat, 30 Dec 2017 02:29:14 -0700 Subject: [PATCH 11/35] I was a little confused...and still may be... (#4031) * I was a little confused...and still may be... if I'm not mistaken, the comment I added should be true, but I was wondering if "devicename:" was actually something I was supposed to be using. * :pencil2: Corrected note styling --- source/_components/device_tracker.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/device_tracker.markdown b/source/_components/device_tracker.markdown index ece347286a7..25e29614980 100644 --- a/source/_components/device_tracker.markdown +++ b/source/_components/device_tracker.markdown @@ -70,6 +70,10 @@ devicename: hide_if_away: no ``` +

+ In the example above, `devicename` refers to the detected name of the device. For instance, `my_iphone`. +

+ | Parameter | Default | Description | |----------------|-------------------------------|---------------------------------------------------------------------------------------------------------| | `name` | Host name or "Unnamed Device" | The friendly name of the device. | From 50587be76ba4d7133c160a4b8ff38e52f39ae068 Mon Sep 17 00:00:00 2001 From: Benji Date: Sat, 30 Dec 2017 10:39:27 +0100 Subject: [PATCH 12/35] Add list of supported language variables. (#4220) * Add list of supported language variables. * Replace supported languages list Replaced list of supported language with a link to official list. * :pencil2: Improve link title --- source/_components/tts.google.markdown | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/_components/tts.google.markdown b/source/_components/tts.google.markdown index dfdd6b279c0..cbed90dadad 100644 --- a/source/_components/tts.google.markdown +++ b/source/_components/tts.google.markdown @@ -24,7 +24,8 @@ tts: Configuration variables: -- **language** (*Optional*): The language to use. Defaults to `en`. +- **language** (*Optional*): The language to use. Defaults to `en`. + - [Complete list of supported languages](https://cloud.google.com/speech/docs/languages). A full configuration sample: From 9ca5df951c0608e82449077e3369d5517e095b63 Mon Sep 17 00:00:00 2001 From: Stephen Foskett Date: Sat, 30 Dec 2017 06:07:01 -0500 Subject: [PATCH 13/35] Update camera.markdown (#4146) * Update camera.markdown Added an example for the new camera.snapshot service with a timestamped filename (seems to be a common request). * :pencil2: Updated PR with suggestions from arsaboo --- source/_components/camera.markdown | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/source/_components/camera.markdown b/source/_components/camera.markdown index e0dee527ad6..cd4314d5581 100644 --- a/source/_components/camera.markdown +++ b/source/_components/camera.markdown @@ -45,6 +45,16 @@ Take a snapshot from a camera. The path part of `filename` must be an entry in the `whitelist_external_dirs` in your [`homeassistant:`](/docs/configuration/basic/) section of your `configuration.yaml` file. +For example, the following action in an automation would take a snapshot from "yourcamera" and save it to /tmp with a timestamped filename. + +```yaml +action: + service: camera.snapshot + data: + entity_id: camera.yourcamera + filename: '/tmp/yourcamera_{{ now().strftime("%Y%m%d-%H%M%S") }}.jpg' +``` + ### {% linkable_title Test if it works %} A simple way to test if you have set up your `camera` platform correctly, is to use service developer tool icon **Services** from the **Developer Tools**. Choose your service from the dropdown menu **Service**, enter something like the sample below into the **Service Data** field, and hit **CALL SERVICE**. From 1fcc93c26f15c0a43dc7664e703853331afbb9ab Mon Sep 17 00:00:00 2001 From: tubalainen Date: Sat, 30 Dec 2017 12:22:21 +0100 Subject: [PATCH 14/35] Updated information on local API and compability (#4193) * Updated information on local API and compability As per requested by owner ;) * Put it in a box * :pencil2: Small grammar & typos fixes --- source/_components/tellduslive.markdown | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/source/_components/tellduslive.markdown b/source/_components/tellduslive.markdown index a93431825d2..735593a0b19 100644 --- a/source/_components/tellduslive.markdown +++ b/source/_components/tellduslive.markdown @@ -15,7 +15,13 @@ ha_release: 0.11 The `tellduslive` component let you connect to [Telldus Live](https://live.telldus.com). It's cloud platform that connects to your Tellstick Net or Tellstick ZNet connected gear at home. -Home Assistant will automatically discover the presence of a Tellstick Net or Tellstick ZNet on your local network if the [discovery]({{site_root}}/components/discovery/) component is enabled. To manually integrate your Telldus Live with Home Assistant, e.g. if your device is on another network or in another location, add the following section to your `configuration.yaml` file: +

+If you are upgrading from 0.58 or older, you need to remove all Telldus configuration from your `configuration.yaml` file before continuing. +

+ +Home Assistant will automatically discover the presence of a Tellstick Net or Tellstick ZNet on your local network if the [discovery]({{site_root}}/components/discovery/) component is enabled. When discovery and the key exchange with Telldus Live have been completed, you will be presented with an option to integrate with the cloud or local API for direct communication with your hardware in your LAN. Local API supports only one device at this stage. Local API is only supported with the Znet Lite products, the older hardware (such as Tellstick Net) does not support local API. + +To manually integrate your Telldus Live with Home Assistant, e.g. if your device is on another network or in another location, add the following section to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry From 7167ab1210839727627ebeb884bfb7aeb625195f Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sat, 30 Dec 2017 11:23:33 +0000 Subject: [PATCH 15/35] Update from forum post (#4305) https://community.home-assistant.io/t/aeotec-wallmote-quad-zw130/12100/14 provided details on the Scene data for the Aeotec Wallmote --- source/_docs/z-wave/device-specific.markdown | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/source/_docs/z-wave/device-specific.markdown b/source/_docs/z-wave/device-specific.markdown index 0aba503a710..22a4a6d89e8 100644 --- a/source/_docs/z-wave/device-specific.markdown +++ b/source/_docs/z-wave/device-specific.markdown @@ -208,10 +208,18 @@ Below is a table of the action/scenes for the Wallmote (as a reference for other **Action**|**scene\_id**|**scene\_data** :-----:|:-----:|:-----: -Button one single tap|1|TBC -Button two single tap|2|TBC -Button three single tap|3|TBC -Button four single tap|4|TBC +Button one single tap|1|0 +Button one hold|1|2 +Button one release|1|1 +Button two single tap|2|0 +Button two hold|2|2 +Button two release|2|1 +Button three single tap|3|0 +Button three hold|3|2 +Button three release|3|1 +Button four single tap|4|0 +Button four hold|4|2 +Button four release|4|1 ### {% linkable_title Zooz Toggle Switches %} From 1d575113f9f674194bde1decc1d56486143ffadb Mon Sep 17 00:00:00 2001 From: Scholli Date: Sat, 30 Dec 2017 21:22:16 +0100 Subject: [PATCH 16/35] Its the light's state which is changed. (#4308) --- 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 ba3041dde38..86e2c933a81 100644 --- a/source/_components/light.mqtt.markdown +++ b/source/_components/light.mqtt.markdown @@ -29,7 +29,7 @@ light: Configuration variables: -- **command_topic** (*Required*): The MQTT topic to publish commands to change the switch state. +- **command_topic** (*Required*): The MQTT topic to publish commands to change the light's state. - **brightness_command_topic** (*Optional*): The MQTT topic to publish commands to change the light's brightness. - **brightness_scale** (*Optional*): Defines the maximum brightness value (i.e. 100%) of the MQTT device (defaults to 255). - **brightness_state_topic** (*Optional*): The MQTT topic subscribed to receive brightness state updates. From 6f934570967c73ef10b9dc14592014e443ecdbb6 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 30 Dec 2017 22:05:57 +0100 Subject: [PATCH 17/35] Add missing configuration vairable --- source/_components/sensor.metoffice.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/sensor.metoffice.markdown b/source/_components/sensor.metoffice.markdown index fc47f5f5c9b..8a327524c0e 100644 --- a/source/_components/sensor.metoffice.markdown +++ b/source/_components/sensor.metoffice.markdown @@ -44,6 +44,7 @@ Your location will be detected from your home `latitude` and `longitude` setting Configuration variables: - **api_key** (*Required*): Your personal API key from the [Datapoint website][datapoint]. +- **name** (*Optional*): Name to use in the frontend, will be the prefix.

This sensor is an alternative to the [`metoffice`](/components/weather.metoffice/) weather platform. From 68c79e1d2cc9a3e2c3578a753ff4f6b2af2c4e70 Mon Sep 17 00:00:00 2001 From: Eamonn O'Connell Date: Sat, 30 Dec 2017 23:23:39 +0100 Subject: [PATCH 18/35] Improved zwave security network key description (#4309) * Improved zwave security network key description As someone adding a zwave device securely for the first time I found there were some gaps in the documentation. * :pencil2: Corrected small typo --- source/_docs/z-wave/adding.markdown | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/source/_docs/z-wave/adding.markdown b/source/_docs/z-wave/adding.markdown index 101fb4a6b27..2c1cef428ac 100644 --- a/source/_docs/z-wave/adding.markdown +++ b/source/_docs/z-wave/adding.markdown @@ -26,13 +26,19 @@ Don't use the OpenZWave control panel (OZWCP), **or the physical button on a con When you add a device, it may initially appear without a specific entity ID (eg `zwave.__`) and without other identifying information. Running a *Heal* should help speed this process up, and you'll need to run a *Heal* anyway so that all the devices in your Z-Wave network learn about the new device. You *might* need to restart Home Assistant (not reboot the system) to have the entity ID fully visible. -## {% linkable_title Adding Secure Devices %} +## {% linkable_title Network Key %} -Security Z-Wave devices require a network key. You must set the *network_key* configuration variable to use a network key before adding these devices. Some devices only expose their full capabilities when included this way, you should always read the manual for your device to find out the recommended inclusion method. Note, secure devices that had been connected to another hub/network in the past may have a "theft protection" feature which requires to first exclude the device successfully from the previous hub using the previous hub/Software setup before it can be enrolled in a new hub/network. To add (include) a secure Z-Wave device: +Security Z-Wave devices require a network key. Some devices only expose their full capabilities when included this way. You should always read the manual for your device to find out the recommended inclusion method. Note, secure devices that had been connected to another hub/network in the past may have a "theft protection" feature which requires to first exclude the device successfully from the previous hub using the previous hub/Software setup before it can be enrolled in a new hub/network. -1. Go to the [Z-Wave control panel](/docs/z-wave/control-panel/) in the Home Assistant frontend -2. Click the **Add Node Secure** button in the *Z-Wave Network Management* card - this will place the controller in inclusion mode -3. Activate your device to be included by following the instructions provided with the device +A valid network key will be a 16 byte value, defined in the zwave section of your configuration, such as the following example: + +``` +zwave: + usb_path: /dev/ttyACM0 + network_key: "0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F 0x10" +``` + +Each individual value in the defined key can be anywhere from 0x00 to 0xFF. Define your own key by making changes to the above example key or for additional security try one of the two scripts mentioned below. ### {% linkable_title Network Key %} @@ -50,6 +56,14 @@ cat /dev/urandom | LC_CTYPE=C tr -dc '0-9A-F' | fold -w 32 | head -n 1 | sed -e Ensure you keep a backup of this key. If you have to rebuild your system and don't have a backup of this key, you won't be able to reconnect to any security devices. This may mean you have to do a factory reset on those devices, and your controller, before rebuilding your Z-Wave network.

+## {% linkable_title Adding Secure Devices %} + +After defining your network key, follow these steps to add (include) a secure Z-Wave device: + +1. Go to the [Z-Wave control panel](/docs/z-wave/control-panel/) in the Home Assistant frontend +2. Click the **Add Node Secure** button in the *Z-Wave Network Management* card - this will place the controller in inclusion mode +3. Activate your device to be included by following the instructions provided with the device + ## {% linkable_title Removing Devices %} To remove (exclude) a Z-Wave device from your system: From 2bd74c8a330a6dbd2a79f5953ad78c79c40c8dbc Mon Sep 17 00:00:00 2001 From: Andrej Friesen Date: Sun, 31 Dec 2017 13:25:22 +0100 Subject: [PATCH 19/35] Add example for local image on HASS.IO (#4311) * Add example for local image on HASS.IO * Minor changes --- source/_components/camera.generic.markdown | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/source/_components/camera.generic.markdown b/source/_components/camera.generic.markdown index 32fa4917481..c6f41ac3376 100644 --- a/source/_components/camera.generic.markdown +++ b/source/_components/camera.generic.markdown @@ -57,3 +57,14 @@ camera: still_image_url: https://www.yr.no/place/Norway/Oslo/Oslo/Oslo/meteogram.svg content_type: 'image/svg+xml' ``` + +### {% linkable_title Local image with Hass.io %} + +You can show an static image with this platform. Just place the image here: `/config/www/your_image.png` + +```yaml +camera: + - platform: generic + name: Some Image + still_image_url: https://127.0.0.1:8123/local/your_image.png +``` From 6ce5db4ad3501435d754d69c53a0234d1544117a Mon Sep 17 00:00:00 2001 From: jorisc90 Date: Sun, 31 Dec 2017 13:28:06 +0100 Subject: [PATCH 20/35] Update neato.markdown (#4313) * Update neato.markdown * Update neato.markdown * Update neato.markdown --- source/_components/neato.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_components/neato.markdown b/source/_components/neato.markdown index 3a4c86cac01..46030f987d2 100644 --- a/source/_components/neato.markdown +++ b/source/_components/neato.markdown @@ -33,8 +33,10 @@ The Home Assistant Neato platform has not been tested with all models of Botvac. | BotVac Model | Tested | | --- | --- | | Botvac Connected | SUCCESS | + | Botvac D3 Connected (firmware 4.0+) | UNTESTED | + | Botvac D5 Connected (firmware 4.0+) | PARTIALLY WORKING | | Botvac D7 Connected | SUCCESS |

-There is no support for the Botvac D3 Connected and Botvac D5 Connected robots at this time. +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-

From 4685dbe5bad146f0145ac5716dd2002bf83ba4a1 Mon Sep 17 00:00:00 2001 From: Ana Paula Gomes Date: Mon, 1 Jan 2018 19:18:29 +0100 Subject: [PATCH 21/35] Add Samsung TV UEMU6199UXZG on media_player page (#4325) The Samsung TV UEMU6199UXZG is recognized by Home Assistant but it needs to use port 8001 to enable the On/Off, Forward/Backward and the Volume control. The Play button is not working (it doesn't appear on the screen). --- 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 a17ccb902c7..471ae8c6af8 100644 --- a/source/_components/media_player.samsungtv.markdown +++ b/source/_components/media_player.samsungtv.markdown @@ -59,6 +59,7 @@ Currently known supported models: - KS7502 (port must be set to 8001, and `pip3 install websocket-client` must be executed, turn on doesn't work, turn off works fine) - K5600AK (partially supported, turn on works but state is not updated) - UE65KS8005 (port must be set to 8001, On/Off, Forward/Backward, Volume are OK, but no Play button) +- UE6199UXZG (port must be set to 8001, On/Off, Forward/Backward, Volume control, but no Play button) Currently tested but not working models: From aa7c9192d0e6f07b41816863bce1ce739194c371 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 1 Jan 2018 18:19:17 +0000 Subject: [PATCH 22/35] Update to GHome warning (#4324) Made it clear that emulated Hue won't work for new GHome users, and to use GA instead --- source/_components/emulated_hue.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/emulated_hue.markdown b/source/_components/emulated_hue.markdown index 1079a0f96b6..0082534a2ad 100644 --- a/source/_components/emulated_hue.markdown +++ b/source/_components/emulated_hue.markdown @@ -13,8 +13,8 @@ ha_release: 0.27 ha_iot_class: "Local Push" --- -

-At this time `emulated_hue` doesn't appear to be working for new Google Home users. +

+Be aware that `emulated_hue` doesn't work for new **Google Home** users. If you're a new user of Google Home, use the [Google Assistant component](https://home-assistant.io/components/google_assistant/).

The `emulated_hue` component provides a virtual Philips Hue bridge, written entirely in software, that allows services that work with the Hue API to interact with Home Assistant From 3f14409ec37f22f77202dc7c1e4528059c18d05b Mon Sep 17 00:00:00 2001 From: DubhAd Date: Mon, 1 Jan 2018 18:19:55 +0000 Subject: [PATCH 23/35] Added link to securing checklist (#4323) Seems silly that we don't point out about setting passwords etc here, so put a link back to the securing checklist. --- source/_docs/configuration/remote.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/configuration/remote.markdown b/source/_docs/configuration/remote.markdown index 8bcc7420d71..bd0d0ba60b5 100644 --- a/source/_docs/configuration/remote.markdown +++ b/source/_docs/configuration/remote.markdown @@ -10,7 +10,7 @@ footer: true redirect_from: /getting-started/basic/#remote-access --- -If you're interested in logging in to Home Assistant while away, you'll have to make your instance remotely accessible. +If you're interested in logging in to Home Assistant while away, you'll have to make your instance remotely accessible. Remember to follow the [securing checklist](/docs/configuration/securing/) before doing this. The most common approach is to set up port forwarding from your router to port 8123 on the computer that is hosting Home Assistant. General instructions on how to do this can be found by searching ` port forwarding instructions`. From 63ac2f27fd8b79117036fc00d9ac37b93ae2ff65 Mon Sep 17 00:00:00 2001 From: fenner Date: Mon, 1 Jan 2018 13:24:12 -0500 Subject: [PATCH 24/35] Fix link to "other installation guides" (#4317) --- source/_docs/installation/virtualenv.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation/virtualenv.markdown b/source/_docs/installation/virtualenv.markdown index d6f26a0b063..022b8e9ea82 100644 --- a/source/_docs/installation/virtualenv.markdown +++ b/source/_docs/installation/virtualenv.markdown @@ -64,5 +64,5 @@ _(If you're on a Debian based system, you will need to install Python virtual en - It's recommanded to run Home Assistant as a dedicated user.

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

From a368fcb55aaea6a832e0da7a3f209ce64d8be9dc Mon Sep 17 00:00:00 2001 From: Hugo Gresse Date: Mon, 1 Jan 2018 19:25:11 +0100 Subject: [PATCH 25/35] Update pilight: pilight website has moved (#4316) * Update pilight: protocol link has moved * Fix dead pilight links --- source/_components/pilight.markdown | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/_components/pilight.markdown b/source/_components/pilight.markdown index 2b7f8577019..fcb1cf875b4 100644 --- a/source/_components/pilight.markdown +++ b/source/_components/pilight.markdown @@ -13,9 +13,9 @@ ha_release: 0.26 ha_iot_class: "Local Push" --- -[Pilight](https://www.pilight.org/) is a modular and open source solution to communicate with 433 MHz devices and runs on various small form factor computers. A lot of common [protocols](https://wiki.pilight.org/doku.php/protocols) are already available. +[Pilight](https://www.pilight.org/) is a modular and open source solution to communicate with 433 MHz devices and runs on various small form factor computers. A lot of common [protocols](https://manual.pilight.org/protocols/index.html) are already available. -This pilight hub connects to the [pilight-daemon](https://wiki.pilight.org/doku.php/pdaemon) via a socket connection to receive and send codes. Thus Home Assistant does not have to run on the computer in charge of the RF communication. +This pilight hub connects to the [pilight-daemon](https://manual.pilight.org/programs/daemon.html) via a socket connection to receive and send codes. Thus Home Assistant does not have to run on the computer in charge of the RF communication. The received and supported RF codes are put on the event bus of Home Assistant and are therefore directly usable by other components (e.g. automation). Additionally a send service is provided to send RF codes. @@ -31,11 +31,11 @@ pilight: Configuration variables: - **host** (*Required*): The IP address of the computer running the pilight-daemon, e.g. 192.168.1.32. -- **port** (*Required*): The network port to connect to. The usual port is [5000](https://www.pilight.org/development/api/). +- **port** (*Required*): The network port to connect to. The usual port is [5000](https://manual.pilight.org/development/api.html). - **send_delay** (*Optional*): You can define a send delay as a fraction of seconds if you experience transmission problems when you try to switch multiple switches at once. This can happen when you use a [pilight USB Nano](https://github.com/pilight/pilight-usb-nano) as hardware and switches a whole group of multiple switches on or off. Tested values are between 0.3 and 0.8 seconds depending on the hardware. - **whitelist** (*Optional*): You can define a whitelist to prevent that too many unwanted RF codes (e.g. the neighbours weather station) are put on your HA event bus. All defined subsections have to be matched. A subsection is matched if one of the items are true. -In this example only received RF codes using a daycom or Intertechno protocol are put on the event bus and only when the device id is 42. For more possible settings please look at the receiver section of the pilight [API](https://www.pilight.org/development/api/). +In this example only received RF codes using a daycom or Intertechno protocol are put on the event bus and only when the device id is 42. For more possible settings please look at the receiver section of the pilight [API](https://manual.pilight.org/development/api.html). A full configuration sample could look like the sample below: @@ -55,9 +55,9 @@ pilight: ## {% linkable_title Troubleshooting %} -- A list of tested RF transceiver hardware is available [here](https://wiki.pilight.org/doku.php/electronics). This might be useful before buying. +- A list of tested RF transceiver hardware is available [here](https://manual.pilight.org/electronics/index.html). This might be useful before buying. - Sending commands is simple when the protocol is known by pilight, but receiving commands can be rather difficult. It can happen that the code is not correctly recognized due to different timings in the sending hardware or the RF receiver. If this happens follow these steps: -1. [Install](https://www.pilight.org/get-started/installation/) pilight from source (do not worry that is very easy) and only activate the protocols you are expecting in the pop up menu. This reduces false positives. +1. [Install](https://manual.pilight.org/installation.html) pilight from source (do not worry that is very easy) and only activate the protocols you are expecting in the pop up menu. This reduces false positives. 2. Check the real timings of your device + RF receiver by running `pilight-debug`. Remember the `pulslen` parameter. 3. Go to the `libs/pilight/protocols/433.92` subfolder of the pilight source code and open the .c file of your protocol. Search for `MIN_PULSE_LENGTH`, `MAX_PULSE_LENGTH ` and `AVG_PULSE_LENGTH`. Change the pulse lengths to match your measured one. Recompile and install pilight by re-running `$ sudo ./setup.sh`. From ea7d6fd1c139464e4422c4d5254c0610a6900af3 Mon Sep 17 00:00:00 2001 From: Niklas Date: Wed, 3 Jan 2018 18:39:58 +0100 Subject: [PATCH 26/35] typo (#4329) --- source/_components/hue.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/hue.markdown b/source/_components/hue.markdown index 3943f2d3c1f..46d8f2cc9f3 100644 --- a/source/_components/hue.markdown +++ b/source/_components/hue.markdown @@ -36,7 +36,7 @@ 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_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 bf0c79ebdbae590a497ce33d2d077270d99c9e0d Mon Sep 17 00:00:00 2001 From: Davide Setti Date: Wed, 3 Jan 2018 18:41:01 +0100 Subject: [PATCH 27/35] fix a couple issues in sensor.command_line doc (#4330) This fixes 2 issues: - Brightness is not measured as celsius - curly braces must be escaped with `{% raw %}` --- source/_components/sensor.command_line.markdown | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source/_components/sensor.command_line.markdown b/source/_components/sensor.command_line.markdown index b963bdee442..3d5f533fbeb 100644 --- a/source/_components/sensor.command_line.markdown +++ b/source/_components/sensor.command_line.markdown @@ -143,7 +143,6 @@ sensor: - platform: command_line name: Brightness command: "python3 /path/to/script/arest-value.py" - unit_of_measurement: "°C" ``` ### {% linkable_title Usage of templating in `command:` %} @@ -155,6 +154,6 @@ sensor: sensor: - platform: command_line name: wind direction - command: 'sh /home/pi/.homeassistant/scripts/wind_direction.sh {{ states.sensor.wind_direction.state }}' + command: 'sh /home/pi/.homeassistant/scripts/wind_direction.sh {% raw %}{{ states.sensor.wind_direction.state }}{% endraw %}' unit_of_measurement: "Direction" ``` From 468d91b08b0270eaa747777a44d114597942d105 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 3 Jan 2018 20:56:23 +0100 Subject: [PATCH 28/35] Fix escaping --- source/_components/camera.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/camera.markdown b/source/_components/camera.markdown index cd4314d5581..21629b68d86 100644 --- a/source/_components/camera.markdown +++ b/source/_components/camera.markdown @@ -47,6 +47,7 @@ The path part of `filename` must be an entry in the `whitelist_external_dirs` in For example, the following action in an automation would take a snapshot from "yourcamera" and save it to /tmp with a timestamped filename. +{% raw %} ```yaml action: service: camera.snapshot @@ -54,6 +55,7 @@ action: entity_id: camera.yourcamera filename: '/tmp/yourcamera_{{ now().strftime("%Y%m%d-%H%M%S") }}.jpg' ``` +{% endraw %} ### {% linkable_title Test if it works %} From 105f7a269f08507256222e3c3093ac6d8e2d6d73 Mon Sep 17 00:00:00 2001 From: Ioan Loosley Date: Wed, 3 Jan 2018 19:58:52 +0000 Subject: [PATCH 29/35] Update device_tracker.bluetooth_le_tracker.markdown (#4318) * Update device_tracker.bluetooth_le_tracker.markdown * Minor changes --- .../device_tracker.bluetooth_le_tracker.markdown | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/_components/device_tracker.bluetooth_le_tracker.markdown b/source/_components/device_tracker.bluetooth_le_tracker.markdown index b812d2f5e0d..a9a47e20a81 100644 --- a/source/_components/device_tracker.bluetooth_le_tracker.markdown +++ b/source/_components/device_tracker.bluetooth_le_tracker.markdown @@ -30,7 +30,7 @@ $ sudo apt install bluetooth libbluetooth-dev pkg-config libboost-python-dev lib Before you get started with this platform, please note that: - This platform is incompatible with Windows - - This platform requires root privileges + - This platform requires access to the bluetooth stack, see [Rootless Setup section](#rootless-setup) for further infomation To use the Bluetooth tracker in your installation, add the following to your `configuration.yaml` file: @@ -50,7 +50,9 @@ Configuration variables: As some BT LE devices change their MAC address regularly, a new device is only discovered when it has been seen 5 times. Some BTLE devices (e.g. fitness trackers) are only visible to the devices that they are paired with. In this case, the BTLE tracker won't see this device. -For running Home Assistant as non root user we can give python3 the missing capabilities to access the Bluetooth stack. Quite like setting the setuid bit (see [Stack Exchange](http://unix.stackexchange.com/questions/96106/bluetooth-le-scan-as-non-root) for more information). +## {% linkable_title Rootless Setup %} + +Normaly accessing the Bluetooth stack is reserved for root, but running programs that are networked as root is a bad security wise. To allow non-root access to the Bluetooth stack we can give Python 3 the missing capabilities to access the Bluetooth stack. Quite like setting the setuid bit (see [Stack Exchange](http://unix.stackexchange.com/questions/96106/bluetooth-le-scan-as-non-root) for more information). ```bash $ sudo apt-get install libcap2-bin From ca1f2868e02503eea52dd64fee7bf02dc46177b1 Mon Sep 17 00:00:00 2001 From: Brendon Baumgartner Date: Wed, 3 Jan 2018 12:04:45 -0800 Subject: [PATCH 30/35] Update light.x10.markdown (#4312) name is not optional. --- source/_components/light.x10.markdown | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/_components/light.x10.markdown b/source/_components/light.x10.markdown index 7e0a52fd58a..b79a8814413 100644 --- a/source/_components/light.x10.markdown +++ b/source/_components/light.x10.markdown @@ -25,6 +25,7 @@ light: - platform: x10 devices: - id: a2 + name: Guest Room - id: a3 name: Bedroom Lamp ``` @@ -32,4 +33,4 @@ light: Configuration variables: - **id** (*Required*): Device identifier. Composed of house code and unit id. -- **name** (*Optional*): A friendly name for the device. By default *id* from the device is used. +- **name** (*Required*): A friendly name for the device. From 4d4c74a498a3ae864d05f7a94effeacac32f01ad Mon Sep 17 00:00:00 2001 From: gerard33 Date: Wed, 3 Jan 2018 21:05:26 +0100 Subject: [PATCH 31/35] Update light.yeelight.markdown (#4331) Updated the page as this also works for YLDD01YL lightstrip and added a link with information on how to enable the LAN mode --- 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 c082a8b2d8c..2d836c596a9 100644 --- a/source/_components/light.yeelight.markdown +++ b/source/_components/light.yeelight.markdown @@ -48,7 +48,8 @@ Per default the bulb limits the amount of requests per minute to 60, a limitatio

Before trying to control your light through Home Assistant, you have to setup your bulb using Yeelight app. ( [Android](https://play.google.com/store/apps/details?id=com.yeelight.cherry&hl=fr), [IOS](https://itunes.apple.com/us/app/yeelight/id977125608?mt=8) ). In the bulb property, you have to enable "LAN Mode" (previously called "Developer mode"). LAN mode may only be available with the latest firmware installed on your bulb. Firmware can be updated in the application after connecting the bulb. -Determine your bulb IP (using router, software, ping ...) +Determine your bulb IP (using router, software, ping ...). +Information on how to enable "LAN Mode" can be found [here](https://getyeti.co/posts/how-to-control-yeelight-and-your-smarthome-with-yeti).

@@ -58,6 +59,7 @@ This component is tested to work with the following models. If you have a differ - **YLDP01YL**: LED Bulb (White) - **YLDP02YL**: LED Bulb (Color) - **YLDP03YL**: LED Bulb (Color) - E26 +- **YLDD01YL**: Lightstrip (Color) - **YLDD02YL**: Lightstrip (Color) From 2ad2ebce8fad1a7168dcd99fcd4fe3f3417d3c8b Mon Sep 17 00:00:00 2001 From: Mahasri Kalavala Date: Wed, 3 Jan 2018 15:24:16 -0500 Subject: [PATCH 32/35] Update raspberry-pi.markdown (#4319) --- source/_docs/installation/raspberry-pi.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_docs/installation/raspberry-pi.markdown b/source/_docs/installation/raspberry-pi.markdown index 23d9396ad9e..f78838ec5ab 100644 --- a/source/_docs/installation/raspberry-pi.markdown +++ b/source/_docs/installation/raspberry-pi.markdown @@ -72,6 +72,8 @@ Start Home Assistant for the first time. This will complete the installation, cr ```bash (homeassistant) $ hass ``` - You can now reach your installation on your Raspberry Pi over the web interface on [http://ipaddress:8123](http://ipaddress:8123). +

+When you run the `hass` command for the first time, it will download, install and cache the necessary libraries/dependencies. This procedure may take anywhere between 5 to 10 minutes. During that time, you may get "site cannot be reached" error when accessing the web interface. This will only happen for the first time, and subsequent restarts will be much faster. +

From 07d4f48dcca4af1b2789c6c6553c82e42d4252ab Mon Sep 17 00:00:00 2001 From: David Shanske Date: Wed, 3 Jan 2018 15:29:44 -0500 Subject: [PATCH 33/35] Update recorder.markdown (#4321) https://community.home-assistant.io/t/error-during-query-latin-1-codec-cant-encode-character/13630 - Better safe than sorry. Might as well always put this parameter in. --- source/_components/recorder.markdown | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/source/_components/recorder.markdown b/source/_components/recorder.markdown index ae8aae4a490..86094eae18a 100644 --- a/source/_components/recorder.markdown +++ b/source/_components/recorder.markdown @@ -105,15 +105,15 @@ action: | Database engine | `db_url` | | :---------------|:---------------------------------------------------------| | SQLite | `sqlite:///PATH/TO/DB_NAME` | -| MariaDB | `mysql://SERVER_IP/DB_NAME` | -| MariaDB         | `mysql://user:password@SERVER_IP/DB_NAME`       | -| MySQL | `mysql://SERVER_IP/DB_NAME` | -| MySQL           | `mysql://user:password@SERVER_IP/DB_NAME`       | -| MySQL (pymysql) | `mysql+pymysql://SERVER_IP/DB_NAME` | -| MySQL (pymysql) | `mysql+pymysql://user:password@SERVER_IP/DB_NAME` | +| MariaDB | `mysql://SERVER_IP/DB_NAME?charset=utf8` | +| MariaDB         | `mysql://user:password@SERVER_IP/DB_NAME?charset=utf8` | +| MySQL | `mysql://SERVER_IP/DB_NAME?charset=utf8` | +| MySQL           | `mysql://user:password@SERVER_IP/DB_NAME?charset=utf8` | +| MySQL (pymysql) | `mysql+pymysql://SERVER_IP/DB_NAME?charset=utf8` | +| MySQL (pymysql) | `mysql+pymysql://user:password@SERVER_IP/DB_NAME?charset=utf8` | | PostgreSQL | `postgresql://SERVER_IP/DB_NAME` | | PostgreSQL | `postgresql://scott:tiger@SERVER_IP/DB_NAME` | -| MS SQL Server | `mssql+pymssql://user:pass@SERVER_IP/DB_NAME?charset=utf8` | +| MS SQL Server | `mssql+pymssql://user:pass@SERVER_IP/DB_NAME?charset=utf8` | ## {% linkable_title Installation notes %} From 4617568b5e106a25c40f0b40bb1d3a21d6b06f5d Mon Sep 17 00:00:00 2001 From: gerard33 Date: Wed, 3 Jan 2018 21:30:21 +0100 Subject: [PATCH 34/35] Update binary_sensor.xiaomi_aqara.markdown (#4332) Remove unnecessary spaces in table, to avoid text in table crossing the text in the right frame --- .../binary_sensor.xiaomi_aqara.markdown | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/source/_components/binary_sensor.xiaomi_aqara.markdown b/source/_components/binary_sensor.xiaomi_aqara.markdown index a6eb4e95d8e..a317550cbf8 100644 --- a/source/_components/binary_sensor.xiaomi_aqara.markdown +++ b/source/_components/binary_sensor.xiaomi_aqara.markdown @@ -21,20 +21,20 @@ The requirement is that you have setup the [`xiaomi aqara` component](/component ### {% linkable_title Type of sensors supported %} -| Name | ZigBee entity | Model no. | States | Event | Event key | Event values | -|-----------------------------------|---------------------|----------------------|----------------------------------------------------|-----------------------------------------|--------------------------------------------------------------------------------------------------------------------------| -| Motion Sensor (1st gen) | motion | RTCGQ01LM | on, off | `motion` | | | -| Motion Sensor (2nd gen) | sensor_motion.aq2 | RTCGQ11LM | on, off | `motion` | | | -| Door and Window Sensor (1st gen) | magnet | WSDCGQ01LM | on, off | | | | -| Door and Window Sensor (2nd gen) | sensor_magnet.aq2 | MCCGQ11LM | on, off | | | | -| Smoke Detector | smoke | JTYJ-GD-01LM/BW | on, off | | | | -| Gas Leak Detector | natgas | JTQJ-BF-01LM/BW | on, off | | | | -| Water Leak Sensor | sensor_wleak.aq1 | SJCGQ11LM | on, off | | | | -| Button (1st gen) | switch | WXKG01LM | on (thru long_click_press), off | `click` | `click_type` | `long_click_press`, `long_click_release`, `hold`, `single`, `double` | -| Button (2nd gen) | sensor_switch.aq2 | WXKG11LM | off (always) | `click` | `click_type` | `single`, `double` | -| Aqara Wireless Switch (Single) | 86sw1 | WXKG03LM | off (always) | `click` | `click_type` | `single` | -| Aqara Wireless Switch (Double) | 86sw2 | WXKG02LM | off (always) | `click` | `click_type` | `single`, `both` | -| Cube | cube | MFKZQ01LM | off (always) | `cube_action` | `action_type`, `action_value` (rotate) | `flip90`, `flip180`, `move`, `tap_twice`, `shake_air`, `swing`, `alert`, `free_fall`, `rotate` (degrees at action_value) | +| Name | ZigBee entity | Model no. | States | Event | Event key | Event values | +| ---- | ------------- | --------- | ------ | ----- | --------- | ------------ | +| Motion Sensor (1st gen) | motion | RTCGQ01LM | on, off | `motion` | | | +| Motion Sensor (2nd gen) | sensor_motion.aq2 | RTCGQ11LM | on, off | `motion` | | | +| Door and Window Sensor (1st gen) | magnet | WSDCGQ01LM | on, off | | | | +| Door and Window Sensor (2nd gen) | sensor_magnet.aq2 | MCCGQ11LM | on, off | | | | +| Smoke Detector | smoke | JTYJ-GD-01LM/BW | on, off | | | | +| Gas Leak Detector | natgas | JTQJ-BF-01LM/BW | on, off | | | | +| Water Leak Sensor | sensor_wleak.aq1 | SJCGQ11LM | on, off | | | | +| Button (1st gen) | switch | WXKG01LM | on (thru long_click_press), off | `click`| `click_type`| `long_click_press`, `long_click_release`, `hold`, `single`, `double` | +| Button (2nd gen) | sensor_switch.aq2 | WXKG11LM | off (always) | `click` | `click_type` | `single`, `double` | +| Aqara Wireless Switch (Single) | 86sw1 | WXKG03LM | off (always) | `click` | `click_type` | `single` | +| Aqara Wireless Switch (Double) | 86sw2 | WXKG02LM | off (always) | `click` | `click_type` | `single`, `both` | +| Cube | cube | MFKZQ01LM | off (always) | `cube_action` | `action_type`, `action_value` (rotate) | `flip90`, `flip180`, `move`, `tap_twice`, `shake_air`, `swing`, `alert`, `free_fall`, `rotate` (degrees at action_value) | ### {% linkable_title Automation examples %} From 5e3e8f59a523efff832ad7069b56c6753d3a945d Mon Sep 17 00:00:00 2001 From: overkill32 Date: Wed, 3 Jan 2018 13:34:05 -0700 Subject: [PATCH 35/35] Update freenas.markdown (#4307) * Update freenas.markdown The example provided for a chained command to mkdir /home and /home/.homeassistant was missing the second mkdir command. A copy and paste of this example would fail. * Update freenas.markdown Updated mkdir commands to use '-p' option. --- source/_docs/installation/freenas.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation/freenas.markdown b/source/_docs/installation/freenas.markdown index acf67bb0b88..6679275764c 100644 --- a/source/_docs/installation/freenas.markdown +++ b/source/_docs/installation/freenas.markdown @@ -33,7 +33,7 @@ Create an `/etc/rc.local` file to enable Home Assistant to start when the jail s ```bash -# cd / && mkdir /home && /home/.homeassistant/ +# cd / && mkdir -p /home/.homeassistant ``` ```bash