From b92de94a4b47da9a8f402c80e4becf8426cb1ec1 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Fri, 15 Dec 2017 16:35:13 +0100 Subject: [PATCH 01/26] Create homematic.markdown --- source/_addons/homematic.markdown | 41 +++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 source/_addons/homematic.markdown diff --git a/source/_addons/homematic.markdown b/source/_addons/homematic.markdown new file mode 100644 index 00000000000..50f5e2d9e95 --- /dev/null +++ b/source/_addons/homematic.markdown @@ -0,0 +1,41 @@ +--- +layout: page +title: "HomeMatic" +description: "HomeMatic hardware support to turn you Home-Assistant into a CCU." +date: 2017-04-30 13:28 +sidebar: true +comments: false +sharing: true +footer: true +--- + +Set up a [HomeMatic](https://github.com/eq-3/occu) hardware layer. At the moment we don't support hmIP but that is in progress. For learning and handling devices use our internal homematic panel and services (in progress) or use [Homematic-Manager](https://github.com/hobbyquaker/homematic-manager) > 2.0. + +The logic layer will be Home-Assistant. There is no ReGa or other logic layer installed. You can't import exists configuration, you need new learn it into Home-Assistant. + +Follow devices will be supported and tested: +- [HM-MOD-RPI-PCB](https://www.elv.ch/homematic-funkmodul-fuer-raspberry-pi-bausatz.html) + +```json +{ + "type": "CCU2", + "device": "device": "/dev/ttyAMA0" +} +``` + +Configuration variables: + +- **type** (*Require*): Device type for RFD service. Look into handbook of your device. +- **device** (*Require*): Device on host. + +## {% linkable_title Home Assistant configuration %} + +Use the following configuration in Home Assistant to use it: + +```yaml +homematic: + interfaces + BidCoS-RF: + ip: core-homematic + port: 2001 +``` From 898a12d7500bf1d2367b080cc8d3a847c0738ea6 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Fri, 15 Dec 2017 16:47:42 +0100 Subject: [PATCH 02/26] Update homematic.markdown --- source/_addons/homematic.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_addons/homematic.markdown b/source/_addons/homematic.markdown index 50f5e2d9e95..1104414c775 100644 --- a/source/_addons/homematic.markdown +++ b/source/_addons/homematic.markdown @@ -36,6 +36,6 @@ Use the following configuration in Home Assistant to use it: homematic: interfaces BidCoS-RF: - ip: core-homematic + host: core-homematic port: 2001 ``` From eebde05925a77851d8b9e59ffdde193f0ef65653 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Fri, 15 Dec 2017 19:30:36 +0100 Subject: [PATCH 03/26] Update homematic.markdown --- source/_addons/homematic.markdown | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/_addons/homematic.markdown b/source/_addons/homematic.markdown index 1104414c775..56e50a673e7 100644 --- a/source/_addons/homematic.markdown +++ b/source/_addons/homematic.markdown @@ -39,3 +39,10 @@ homematic: host: core-homematic port: 2001 ``` + +## {% linkable_title Raspberry Pi3 %} + +With HM-MOD-PRI-PCB you need add follow into your `config.txt` on boot partition: +``` +dtoverlay=pi3-miniuart-bt +``` From 4308e11a07bfa6540e5f190a0544a96664caeda4 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Fri, 15 Dec 2017 19:32:09 +0100 Subject: [PATCH 04/26] Update homematic.markdown --- source/_addons/homematic.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_addons/homematic.markdown b/source/_addons/homematic.markdown index 56e50a673e7..872b521d828 100644 --- a/source/_addons/homematic.markdown +++ b/source/_addons/homematic.markdown @@ -19,7 +19,7 @@ Follow devices will be supported and tested: ```json { "type": "CCU2", - "device": "device": "/dev/ttyAMA0" + "device": "/dev/ttyAMA0" } ``` From 0e638d5f65c2efbf66c749f5484a84987aa4ea67 Mon Sep 17 00:00:00 2001 From: Mike Date: Fri, 15 Dec 2017 16:34:21 -0500 Subject: [PATCH 05/26] Update to include MQTT configuration (#4218) * Update to incluse MQTT configuration Details support for MQTT as of firmware 1.17 * Fixes --- source/_components/cover.garadget.markdown | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/source/_components/cover.garadget.markdown b/source/_components/cover.garadget.markdown index 1d34384fffa..6ae25d44e8e 100644 --- a/source/_components/cover.garadget.markdown +++ b/source/_components/cover.garadget.markdown @@ -98,3 +98,17 @@ logbook: - sensor.garage_door_time_in_state - sensor.garage_door_wifi_signal_strength ``` + +As of firmware release 1.17 the garadget device has native support for MQTT. The options allow the end-user to configure the device in the following ways 'cloud only', 'cloud and MQTT' or 'MQTT only'. + +For configuration of the garadget as a MQTT cover: + +```yaml +cover: + - platform: mqtt + name: "Garage Door" + command_topic: "garadget/device_name/command" + state_topic: "garadget/device_name/status" + payload_open: "open" + payload_close: "close" +``` From 90122dcff6e25fab42494e17e23dbfedcff16d41 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Sat, 16 Dec 2017 02:57:28 +0100 Subject: [PATCH 06/26] Update homematic.markdown --- source/_addons/homematic.markdown | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/source/_addons/homematic.markdown b/source/_addons/homematic.markdown index 872b521d828..1f91fe3dc79 100644 --- a/source/_addons/homematic.markdown +++ b/source/_addons/homematic.markdown @@ -18,16 +18,38 @@ Follow devices will be supported and tested: ```json { - "type": "CCU2", - "device": "/dev/ttyAMA0" + "rf_enable": true, + "rf": [ + { + "type": "CCU2", + "device": "/dev/ttyAMA0" + } + ], + "wired_enable": false, + "wired": [ + { + "serial": "xy", + "key": "abc", + "ip": "192.168.0.0" + } + ] } ``` Configuration variables: +- **rf_enable** (*Require*): Boolean. Enable or disable BidCoS-RF. +- **wired_enable** (*Require*): Boolean. Enable or disable BidCoS-Wired. + +For RF devices - **type** (*Require*): Device type for RFD service. Look into handbook of your device. - **device** (*Require*): Device on host. +For RF devices +- **serial** (*Require*): Serial number of device. +- **key** (*Require*): Encrypted key. +- **ip** (*Require*): IP address of lan gateway. + ## {% linkable_title Home Assistant configuration %} Use the following configuration in Home Assistant to use it: From 2cf00d66517953f590298093670ebf0eda830a8c Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 16 Dec 2017 00:18:52 -0800 Subject: [PATCH 07/26] Update categories --- source/_components/cloud.markdown | 8 +++----- source/_components/telegram_bot.broadcast.markdown | 2 +- source/_components/telegram_bot.polling.markdown | 2 +- source/_components/telegram_bot.webhooks.markdown | 2 +- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/source/_components/cloud.markdown b/source/_components/cloud.markdown index 19541d18047..c2a25d0bfea 100644 --- a/source/_components/cloud.markdown +++ b/source/_components/cloud.markdown @@ -8,13 +8,11 @@ comments: false sharing: true footer: true logo: home-assistant.png -ha_release: 0.57 +ha_release: 0.60 +ha_category: Voice +ha_iot_class: "Cloud Push" --- -

-Home Assistant Cloud is currently in private beta. -

- The Home Assistant Cloud allows you to quickly integrate your local instance with various cloud services. Any processing of services from other cloud services is handled by your local instance. To get started, create an account and log in via the configuration panel in your Home Assistant instance. There is no need to configure your router or expose your instance to the internet in any other way. diff --git a/source/_components/telegram_bot.broadcast.markdown b/source/_components/telegram_bot.broadcast.markdown index d743f1d8916..ee9d4032328 100644 --- a/source/_components/telegram_bot.broadcast.markdown +++ b/source/_components/telegram_bot.broadcast.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: telegram.png -ha_category: Telegram chatbot +ha_category: Notifications ha_release: 0.48 --- diff --git a/source/_components/telegram_bot.polling.markdown b/source/_components/telegram_bot.polling.markdown index a938dca5c5d..15c4d26eb0b 100644 --- a/source/_components/telegram_bot.polling.markdown +++ b/source/_components/telegram_bot.polling.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: telegram.png -ha_category: Telegram chatbot +ha_category: Notifications ha_release: 0.42 --- diff --git a/source/_components/telegram_bot.webhooks.markdown b/source/_components/telegram_bot.webhooks.markdown index 8b88dcb77ae..7821b03c009 100644 --- a/source/_components/telegram_bot.webhooks.markdown +++ b/source/_components/telegram_bot.webhooks.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: telegram.png -ha_category: Telegram chatbot +ha_category: Notifications ha_release: 0.42 --- From 643852f89be41d2f808ad582cc0e15a81c8b655c Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 16 Dec 2017 00:53:02 -0800 Subject: [PATCH 08/26] cloud stuff --- source/_components/alexa.markdown | 8 ++++++-- source/_components/cloud.markdown | 9 +++++++-- source/index.html | 10 +++++++++- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/source/_components/alexa.markdown b/source/_components/alexa.markdown index bccf44f2e77..6b1347a386e 100644 --- a/source/_components/alexa.markdown +++ b/source/_components/alexa.markdown @@ -10,9 +10,13 @@ footer: true logo: amazon-echo.png ha_category: Voice featured: true -ha_release: 0.10 +ha_release: '0.10' --- +

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

+ There are a few ways that you can use Amazon Echo and Home Assistant together. - [Build custom commands to use](#i-want-to-build-custom-commands-to-use-with-echo) @@ -325,7 +329,7 @@ Please refer to the [Amazon documentation][flash-briefing-api-docs] for more inf - All other settings are up to you - Hit "Next" - Test - - Having passed all validations to reach this screen, you can now click on "< Back to All Skills" as your flash briefing is now available as in "Development" service. + - Having passed all validations to reach this screen, you can now click on "< Back to All Skills" as your flash briefing is now available as in "Development" service. - To invoke your flash briefing, open the Alexa app on your phone or go to the [Alexa Settings Site][alexa-settings-site], open the "Skills" configuration section, select "Your Skills", scroll to the bottom, tap on the Flash Briefing Skill you just created, enable it, then manage Flash Briefing and adjust ordering as necessary. Finally ask your Echo for your "news","flash briefing", or "briefing". [amazon-dev-console]: https://developer.amazon.com diff --git a/source/_components/cloud.markdown b/source/_components/cloud.markdown index c2a25d0bfea..7349bdc253c 100644 --- a/source/_components/cloud.markdown +++ b/source/_components/cloud.markdown @@ -13,9 +13,14 @@ ha_category: Voice ha_iot_class: "Cloud Push" --- -The Home Assistant Cloud allows you to quickly integrate your local instance with various cloud services. Any processing of services from other cloud services is handled by your local instance. +The Home Assistant Cloud allows you to quickly integrate your local Home Assistant with various cloud services. Any processing of services from other cloud services is handled by your local Home Assistant. -To get started, create an account and log in via the configuration panel in your Home Assistant instance. There is no need to configure your router or expose your instance to the internet in any other way. +```yaml +# Example configuration.yaml entry to enable the cloud component +cloud: +``` + +Once activated, go to the configuration panel in Home Assistant and create an account and log in. There is no need to configure your router or expose your instance to the internet in any other way. ### {% linkable_title Amazon Alexa %} diff --git a/source/index.html b/source/index.html index bbb78b9dc34..a847b2632b9 100644 --- a/source/index.html +++ b/source/index.html @@ -33,6 +33,14 @@ description: Open-source home automation platform running on Python 3. Track and Chat +
+

Alexa, turn on the lights

+ Use Alexa to control Home Assistant. + + +
Read our founder's vision for the perfect home automation @@ -119,7 +127,7 @@ description: Open-source home automation platform running on Python 3. Track and Wired.com logo OpenSource.com logo - + Linux Magazine logo Ct logo From d7a93e4cdfd2708dc4682c5e187e24f7a4b9e144 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 16 Dec 2017 00:59:30 -0800 Subject: [PATCH 09/26] things --- ...-introducing-home-assistant-cloud.markdown | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 source/_posts/2017-12-16-introducing-home-assistant-cloud.markdown diff --git a/source/_posts/2017-12-16-introducing-home-assistant-cloud.markdown b/source/_posts/2017-12-16-introducing-home-assistant-cloud.markdown new file mode 100644 index 00000000000..1c6cf5e9ac5 --- /dev/null +++ b/source/_posts/2017-12-16-introducing-home-assistant-cloud.markdown @@ -0,0 +1,61 @@ +--- +layout: post +title: Introducing Home Assistant Cloud +description: "Use Alexa to control any device that is connected to Home Assistant." +date: 2017-12-16 02:00:00 +date_formatted: "December 16, 2017" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Announcements +--- + +Today we’re introducing the next step in the Home Assistant saga: the Home Assistant Cloud. The goal of the Home Assistant Cloud is to bridge the gap between your local Home Assistant instance and services in the cloud while delivering the maximum possible security and privacy. + +The first service that is supported via the Home Assistant Cloud is the Amazon Alexa Smart Home skill. This integration will allow you to control all your devices in Home Assistant via Amazon Alexa. You will be able to say _“Alexa, turn on the kitchen lights”_ and your local Home Assistant will turn on the lights. Because Alexa talks to Home Assistant, it doesn’t matter what kind of lights they are! Anything that is linked to Home Assistant will work. IKEA lights, a 10 year old X10 switch or something you’ve made yourself. As long as Home Assistant can control it, you can control it via Alexa. + +We have designed the Home Assistant Cloud with security in mind. When you activate the new Cloud component, your instance will setup a secure connection to the Home Assistant Cloud. 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! + +We are making the beta of the Home Assistant Cloud publicly available today. During the beta period the Home Assistant Cloud will be free to use. We are currently planning to run a beta till March 1, 2018 0:00 UTC. Once the beta ends, the Home Assistant Cloud will be part of our Community Support package which will run at $5 USD/month. + +By subscribing to the Community Support package you will show your support for the Home Assistant organization, its projects and its community. It will help fund development, cover our operating costs and gives you access to use Home Assistant Cloud. + +So if you ever felt like donating money to support the development of Home Assistant and Hass.io: sign up for the Home Assistant Cloud! + +### {% linkable_title Why not take donations? %} + +With donations you have to convince people to keep donating and it will be hard to plan around the amount of available money. The biggest concern is what do you do when there is not enough money. We could shut down the servers or again depend on the wallets of our developers. We could run Wikipedia style advertisements for donating, but those are even more annoying than running advertisements. + +## {% linkable_title Getting started %} + +Upgrade Home Assistant to 0.60 and enable the cloud and config components: + +```yaml +# Example configuration.yaml entry +cloud: +config: +``` + +Now restart Home Assistant and navigate to the configuration panel. It will offer a new cloud section. Here you can create an account and login. Once logged in, your instance will connect to the cloud. + +The next step is to configure Alexa. This can be done by enabling the Home Assistant skill for Alexa and link your Home Assistant cloud account. + +Once you’re done, ask Alexa to discover devices (“Alexa, discover devices”) and you are all set to control them: “Alexa, turn on <device name>”. + +## {% linkable_title FAQ %} + +**Will Home Assistant and Hass.io remain open source?** + +Yes. Yes. Yes! Home Assistant is the work of hundreds of developers all working together in creating something amazing. The only thing that will require a subscription is the optional cloud functionality. + +**What other features will come to the cloud?** + +We have a lot of ideas! We are not going to make any promises but here are some things that we’re looking into: + +- Google Home / Google Assistant Smart Home skill +- Allow easy linking of other cloud services to Home Assistant. No more local juggling with OAuth flows. For example, link your Fitbit account and the Fitbit component will show up in Home Assistant. +- Encrypted backups of your Hass.io data +- Text to speech powered by AWS Polly +- Generic HTTP cloud endpoint for people to send messages to their local instance. This will allow people to build applications on - top of the Home Assistant cloud. +- IFTTT integration +- Alexa shopping list integration From a835d5feda6cd5062dfb8a6e1e419792a34644de Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 16 Dec 2017 02:57:55 -0800 Subject: [PATCH 10/26] Update virtual environment instructions (#4191) * Update virtual environment instructions * Add link to other guides --- source/_docs/installation/virtualenv.markdown | 130 +++++------------- 1 file changed, 35 insertions(+), 95 deletions(-) diff --git a/source/_docs/installation/virtualenv.markdown b/source/_docs/installation/virtualenv.markdown index 97a5f8c36f5..234ea989460 100644 --- a/source/_docs/installation/virtualenv.markdown +++ b/source/_docs/installation/virtualenv.markdown @@ -9,99 +9,39 @@ sharing: true footer: true redirect_from: /getting-started/installation-virtualenv/ --- -

-Beginners should check our [getting started guide](/getting-started/) first. + +If you alreacy 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. + +_(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: + ``` + python3 -m venv homeassistant + ``` + 2. Open virtual environment: + ``` + cd homeassistant + ``` + 3. Activate virtual environment: + ``` + source bin/activate + ``` + 4. Install Home Assistant: + ``` + python3 -m pip install --upgrade homeassistant + ``` + 5. Run Home Assistant: + ``` + hass --open-ui + ``` + +### {% 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 and 3 and 4. + +

+Looking for more advanced guides? Check our available guides.

- -There are several reasons why it makes sense to run Home Assistant in a virtual environment. A [virtualenv](https://virtualenv.pypa.io/en/latest/) encapsulates all aspect of a Python environment within a single directory tree. That means the Python packages you install for Home Assistant won't interact with the rest of your system and vice-versa. It means a random upgrade for some other program on your computer won't break Home Assistant, and it means you don't need to install Python packages as root. - -Virtualenvs are pretty easy to setup. We'll be using Debian in this example (as many Home Assistant users are running Raspbian on a Raspberry Pi), but all of the Python related steps should be the same on just about any platform. - -### {% linkable_title Basic guide %} - -The basic guide is for testing Home Assistant. Also check the advanced guide for instances used in production. - -## {% linkable_title Step 1: Install dependencies %} - -```bash -$ sudo apt-get update -$ sudo apt-get upgrade -$ sudo apt-get install python3-pip python3-dev python3-venv -$ sudo pip3 install --upgrade virtualenv -``` - -## {% linkable_title Step 2: Setup virtualenv %} - -```bash -$ python3 -m venv $HOME/homeassistant -``` - -## {% linkable_title Step 3: Install or update Home Assistant %} - -```bash -$ source $HOME/homeassistant/bin/activate -(homeassistant)$ pip3 install --upgrade homeassistant -``` - -## {% linkable_title Step 4: Run Home Assistant %} - -```bash -$ $HOME/homeassistant/bin/hass -``` - -### {% linkable_title Advanced guide %} -## {% linkable_title Separate user & group for Home Assistant (Basic guide step 2) %} - -It's a good idea to give services like Home Assistant their own user. It gives you more granular control over permissions, and reduces the exposure to the rest of your system in the event there is a security related bug in Home Assistant. This is a reasonably Linux oriented step, and will look different on other operating systems (or even other Linux distributions). - -```bash -$ sudo adduser --system homeassistant -$ sudo addgroup homeassistant -``` - -Home Assistant stores its configuration in `$HOME/.homeassistant` by default, so in this case, it would be in `/home/homeassistant/.homeassistant`. - -If you plan to use a Z-Wave controller, you will need to add this user to the `dialout` group: - -```bash -$ sudo usermod -G dialout -a homeassistant -``` - -## {% linkable_title Custom installation directory for Home Assistant (Basic guide step 2) %} - -This can be anywhere you want. We chose to put it in `/srv`. You also need to change the ownership of the directory to the user you created above. - -```bash -$ sudo mkdir /srv/homeassistant -$ sudo chown homeassistant:homeassistant /srv/homeassistant -$ python3 -m venv /srv/homeassistant -``` - -## {% linkable_title Install or update Home Assistant %} - -This is obviously only necessary if you created a `homeassistant` user, but if you did, be sure to switch to that user whenever you install things in your virtualenv, otherwise you'll end up with mucked up permissions. - -```bash -$ sudo su -s /bin/bash homeassistant -``` - -The `su` command means 'switch' user. We use the '-s' flag because the `homeassistant` user is a system user and doesn't have a default shell by default (to prevent attackers from being able to log in as that user). - -```bash -$ source /srv/homeassistant/bin/activate -(homeassistant)$ pip3 install --upgrade homeassistant -``` - -## {% linkable_title Run Home Assistant (Basic guide step 4) %} - -There are two ways to launch Home Assistant. If you are **in** the virtualenv, you can just run `hass` and it will work as normal. If the virtualenv is not activated, you just use the `hass` executable in the `bin` directory mentioned earlier. There is one caveat... Because Home Assistant stores its configuration in the user's home directory, we need to be the user `homeassistant` or specify the configuration with `-c`. - -```bash -$ sudo -u homeassistant -H /srv/homeassistant/bin/hass -``` - -The `-H` flag is important. It sets the `$HOME` environment variable to `/home/homeassistant` so `hass` can find its configuration. - -## {% linkable_title Starting Home Assistant on boot %} - -The [autostart instructions](/getting-started/autostart/) will work just fine, just be sure to replace `/usr/bin/hass` with `/srv/homeassistant/bin/hass` and specify the `homeassistant` user where appropriate. From 15e3857184883e36aa83de3cdfa77a96483e94f1 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 16 Dec 2017 04:37:08 -0800 Subject: [PATCH 11/26] Revamp getting started (#4194) * Revamp getting started * Comments by Landrash * Add text editor to software requirements * Address comments --- source/_docs/installation.markdown | 14 ++++- source/getting-started/configuration.markdown | 54 ++++++++++++++++--- source/getting-started/index.markdown | 51 ++++++++++-------- 3 files changed, 90 insertions(+), 29 deletions(-) diff --git a/source/_docs/installation.markdown b/source/_docs/installation.markdown index 632457f28a9..4b54abe2d32 100644 --- a/source/_docs/installation.markdown +++ b/source/_docs/installation.markdown @@ -14,9 +14,21 @@ redirect_from: /getting-started/installation/ Beginners should check our [Getting started guide](/getting-started/) first. This is for users that require advanced installations.

-Home Assistant provides multiple ways to be installed. A requirement is that you have [Python](https://www.python.org/downloads/) installed. For Windows, we require at least **Python 3.5** and for other operating systems at least **Python 3.4.2**. +Home Assistant provides multiple ways to be installed. A requirement is that you have [Python 3.5+](https://www.python.org/downloads/) installed.
+ +
+ +
+
Hass.io
(Beginner friendly)
+
+ +
+ +
+
On top of an existing Python 3.5+ installation
+
diff --git a/source/getting-started/configuration.markdown b/source/getting-started/configuration.markdown index 360ef56f009..5814b3c1cb1 100644 --- a/source/getting-started/configuration.markdown +++ b/source/getting-started/configuration.markdown @@ -9,19 +9,59 @@ sharing: true footer: true --- -When launched for the first time, Home Assistant will write a default configuration file, called `configuration.yaml`, enabling the web interface and [device discovery](/components/discovery/). It can take up to a minute for your devices to be discovered and appear in the user interface. +If you made it here, awesome! That means that you got Home Assistant up and running. It might have already found some of your networked devices. This is going to be fun! -The `configuration.yaml` is written in [YAML](/docs/configuration/yaml/), stored in [`.homeassistant`](/docs/configuration/), and can be modified with a text editor. +Home Assistant stores its configuration in a file called `configuration.yaml`. A default one is created when Home Assistant is started for the first time. Some of the things in the configuration file can be edited via the user interface, other parts require you to edit the configuration file directly. -See the [components overview page](/components/) to find sample entries for your devices and services. For a sensor that is showing [random values](/components/sensor.random/), the entry would look like the sample below: +There are two common approaches to edit your configuration: via Samba/Windows Networking and via the HASS Configurator. Both of these are [official add-ons for Hass.io](/addons/). + +## {% linkable_title Installing Hass.io add-ons %} + +Hass.io add-ons are installed from the add-on store embedded in the Hass.io panel: + + - Open Home Assistant by navigating to [http://hassio.local:8123][local]. + - Click on the menu icon in the top left and select Hass.io in the sidebar. + - The Hass.io panel opens, now open the add-on store by clicking the shopping bag. + +[local]: http://hassio.local:8123 + +

+ +From the Hass.io main panel open the add-on store. +

+ +### {% linkable_title Editing config via HASS Configurator %} + +The first add-on we should install is the HASS Configurator. With the HASS Configurator you'll be able to edit your Home Assistant configuration from the web interface. + +Go to the add-on store (see previous step), click on Configurator and click on INSTALL. When installation is complete the UI will go to the add-on details page for the configurator. Here you will be able to change settings, start and stop the add-on. + + - Change the settings to set a password and click on save + - Start the add-on + - You will be able to click the "WEB UI" link to open the Web UI + +Time for the first practice with the configurator. Add the following to `configuration.yaml` file to add a link to the Configurator in the sidebar: ```yaml -sensor: - - platform: random +panel_iframe: + configurator: + title: Configurator + icon: mdi:wrench + url: http://hassio.local:3218 ``` -The [Setting up devices part](/docs/configuration/devices/) contains the additional documentation details about adding devices and services and [customization](/docs/configuration/customizing-devices/). +Now restart Home Assistant for the changes to the configuration to take effect. You can do this by going to the config panel (Configuration in the sidebar) -> General -> Restart Home Assistant. -For further details about configuration, please take a look at the [configuration documentation](/docs/configuration/). +### {% linkable_title Editing config via Samba/Windows Networking %} + +Maybe you are not a big fan of our web editor and want to use a text editor on your computer instead. This is possible by sharing the configuration over the network using the Samba add-on, which can be installed from the Hass.io add-on store. + +After you have installed it, click on START. Hass.io should now be available in the networking tab on your computer. Use a text editor like the free [Visual Studio Code](https://code.visualstudio.com/) to edit `configuration.yaml`. + +## {% linkable_title Configuring integrations %} + +Now that you are able to edit the configuration, it's time to set up some of your devices and services. Each service and device will have its own instructions on how to be integrated. Find your devices and services on the [components overview page](/components/). + +

YAML can be a little daunting at first. A lot is possible! [Here is some more info.](/docs/configuration/devices/)

### [Next step: Automate Home Assistant »](/getting-started/automation/) diff --git a/source/getting-started/index.markdown b/source/getting-started/index.markdown index 6c15f7caac3..79d410fb25f 100644 --- a/source/getting-started/index.markdown +++ b/source/getting-started/index.markdown @@ -9,30 +9,39 @@ sharing: true footer: true --- -First you will need to install Home Assistant before we can get started: +The goal of this getting started guide is to install Hass.io on a Raspberry Pi 3. Hass.io is our own all in one solution that turns your Raspberry PI into the utlimate home automation hub. -We have developed **Hass.io** to turn your device into a dedicated Home Assistant hub controlled by a nice webinterface. -For Raspberry Pi and Intel NUC we offer configured images. Flash the image, setup WiFi (if required) and everything else can be done inside the Hass.io webinterface. Great, isn't it? +Follow this guide if you want to easily get started with Home Assistant or if you have none or little Linux experience. For advanced users, check our [alternative installation methods](/docs/installation/). -Also Home Assistant runs on any other device that supports **Python 3**. -
-
+### {% linkable_title Hardware requirements %} -For alternative installation methods, please take a look at the [installation documentation](/docs/installation/). +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. -If you run into any issues, please see [the troubleshooting page](/docs/installation/troubleshooting/) or [communication channels](/help/). It contains solutions to many commonly encountered issues. + - [Raspberry Pi 3 model B](http://a.co/gEfMqL4) + [Power Supply](http://a.co/cgKUgkt) (atleast 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. + - SD Card reader. Part of most laptops. Also available as [standalone USB sticks](http://a.co/5FCyb0N) (brand doesn't matter, just pick cheapest) + - Ethernet cable (optional, Hass.io can work with WiFi too) + +### {% linkable_title Software requirements %} + + - Download [Hass.io image for Raspberry Pi 3][pi3] + - Download [Etcher] to write the image to an SD card + - Text Editor like [Visual Studio Code](https://code.visualstudio.com/) + +[Etcher]: https://etcher.io/ +[pi3]: https://github.com/home-assistant/hassio-build/releases/download/1.1/resinos-hassio-1.1-raspberrypi3.img.bz2 + +### Installing Hass.io + + 1. Put the SD card in your SD card reader, + 2. Open Etcher, select the Hass.io image and flash it to the SD card. + 3. WiFi setup only: open the file `system-connections/resin-sample` with a text editor. Change `ssid` to be your network name and `psk` to be your password. + 4. Unmount the SD card and remove it from your SD card reader. + 5. Insert the SD card into your Raspberry Pi 3. If you are going to use an Ethernet cable to supply Internet, connect that too. + 6. Connect your Raspberry Pi to the power supply so it turns on. + 7. The Raspberry Pi will now boot up, connect to the Internet and download the latest version of Home Assistant. This will take about 20 minutes. + 8. Home Assistant will be available at [http://hassio.local:8123][local]. + +[local]: http://hassio.local:8123 ### [Next step: Configuring Home Assistant »](/getting-started/configuration/) From 75193cc3712301f85252681f00d0d06e5249a36f Mon Sep 17 00:00:00 2001 From: Daniel Perna Date: Sat, 16 Dec 2017 13:38:16 +0100 Subject: [PATCH 12/26] Remove icon parameter (#4213) --- source/_components/notify.nfandroidtv.markdown | 2 -- 1 file changed, 2 deletions(-) diff --git a/source/_components/notify.nfandroidtv.markdown b/source/_components/notify.nfandroidtv.markdown index 0a7d1ba842a..79b3096a7de 100644 --- a/source/_components/notify.nfandroidtv.markdown +++ b/source/_components/notify.nfandroidtv.markdown @@ -39,7 +39,6 @@ Configuration variables: - **color** (*Optional*): Has to be one of: grey (default), black, indigo, green, red, cyan, teal, amber, pink - **transparency** (*Optional*): Has to be one of: 0%, 25% (default), 50%, 75%, 100% - **interrupt** (*Optional*): If set to true, 1, on etc., the notification is interactive and can be dismissed or selected to display more details. Depending on the running app (e.g. Netflix), this may stop playback. -- **icon** (*Optional*): Change the default icon to a custom icon by providing the full path to a PNG image. The configuration will be used to configure the default values for the notification for the host specified by the IP. However, you can override most of the settings by passing them with the data-attribute when calling the service. This is a fully customized JSON you can use to test how the final notification will look like: @@ -54,7 +53,6 @@ This is a fully customized JSON you can use to test how the final notification w "transparency":"0%", "color": "red", "interrupt": 1, - "icon": "/path/to/image.png" } } ``` From cfeb8fac3da37e05736c4818d27cbe86a0f1ece6 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 16 Dec 2017 15:07:24 +0100 Subject: [PATCH 13/26] Add 'force_update' (#4221) --- source/_components/sensor.mqtt.markdown | 42 ++++++++++++++++++++----- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/source/_components/sensor.mqtt.markdown b/source/_components/sensor.mqtt.markdown index ca8be055d12..0fb3ab1175f 100644 --- a/source/_components/sensor.mqtt.markdown +++ b/source/_components/sensor.mqtt.markdown @@ -25,14 +25,40 @@ sensor: state_topic: "home/bedroom/temperature" ``` -Configuration variables: - -- **state_topic** (*Required*): The MQTT topic subscribed to receive sensor values. -- **name** (*Optional*): The name of the sensor. Default is 'MQTT Sensor'. -- **qos** (*Optional*): The maximum QoS level of the state topic. Default is 0. -- **unit_of_measurement** (*Optional*): Defines the units of measurement of the sensor, if any. -- **expire_after** (*Optional*): Defines the number of seconds after the value expires if it's not updated. Default is 0 (=never expire). -- **value_template** (*Optional*): Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload. +{% configuration %} +state_topic: + description: The MQTT topic subscribed to receive sensor values. + required: true + type: string +name: + description: Name of the MQTT sensor. + required: false + type: string + default: MQTT Sensor +qos: + description: The maximum QoS level of the state topic. + required: false + type: int + default: 0 +unit_of_measurement: + description: Defines the units of measurement of the sensor, if any. + required: false + type: string +expire_after: + description: Defines the number of seconds after the value expires if it's not updated. + required: false + type: int + default: 0 +value_template: + description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the value." + required: false + type: template +force_update: + description: Sends update events even if the value hasn't changed. Useful if you want to have meaningful value graphs in history. + reqired: false + type: boolean + default: False +{% endconfiguration %} ## {% linkable_title Examples %} From de6ecd1d11eac742fe72ad84f8672ae941ca21a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemek=20Wi=C4=99ch?= Date: Sat, 16 Dec 2017 19:04:04 +0100 Subject: [PATCH 14/26] Updated documentation about running local development instance. (#4205) * Updated documentation about running local development instance. * Make it venv only --- .../developers/development_environment.markdown | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/source/developers/development_environment.markdown b/source/developers/development_environment.markdown index d6779d701e6..d33521d5237 100644 --- a/source/developers/development_environment.markdown +++ b/source/developers/development_environment.markdown @@ -85,21 +85,23 @@ $ git remote add upstream https://github.com/home-assistant/home-assistant.git ### {% linkable_title Setting up virtual environment %} -If you plan on providing isolation to your environment using [`venv`](https://docs.python.org/3.4/library/venv.html). Within the `home-assistant` directory, create and activate your virtual environment. +To isolate your environment from the rest of the system, set up a [`venv`](https://docs.python.org/3.4/library/venv.html). Within the `home-assistant` directory, create and activate your virtual environment. ```bash -$ python3 -m venv venv -$ source venv/bin/activate +$ python3 -m venv . +$ source bin/activate ``` - -### {% linkable_title Setup and Run %} +Install the requirements with a provided script named `setup`. ```bash -$ cd home-assistant $ script/setup ``` -* Run `hass` to invoke your local installation. +Invoke your installation. + +```bash +$ hass +``` ### {% linkable_title Logging %} From 78573e962448cccd1a03822ee0362055974fd7e1 Mon Sep 17 00:00:00 2001 From: Jenya Y Date: Sun, 17 Dec 2017 11:29:34 +0200 Subject: [PATCH 15/26] Typo (#4224) --- 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 234ea989460..a1b4c25c876 100644 --- a/source/_docs/installation/virtualenv.markdown +++ b/source/_docs/installation/virtualenv.markdown @@ -10,7 +10,7 @@ footer: true redirect_from: /getting-started/installation-virtualenv/ --- -If you alreacy have Python 3.5 or later installed, you can easily give Home Assistant a spin. +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. From d1b4884a11235e2c825b9899821d073a914bd8ba Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Sun, 17 Dec 2017 10:33:42 +0100 Subject: [PATCH 16/26] Changes for 0.60 / homematic (#4219) * Changes for 0.60 / homematic * Update homematic.markdown --- source/_components/homematic.markdown | 49 ++++++++++++++++----------- 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/source/_components/homematic.markdown b/source/_components/homematic.markdown index 93cf903eb44..73287f74209 100644 --- a/source/_components/homematic.markdown +++ b/source/_components/homematic.markdown @@ -28,58 +28,69 @@ To set up the component, add the following information to your `configuration.ya ```yaml homematic: - hosts: + interfaces: wireless: - ip: 127.0.0.1 + host: 127.0.0.1 ``` Configuration variables (global): -- **hosts** (*Required*): Configuration for each host to integrate into Home Assistant. +- **interfaces** (*Required*): Configuration for each XML-RPC interface to integrate into Home Assistant. +- **hosts** (*Optional*): Configuration for each Hub (CCU/Homegear) to integrate into Home Assistant. - **local_ip** (*Optional*): IP of device running Home Assistant. Override auto-detected value for exotic network setups. - **local_port** (*Optional*): Port for connection with Home Assistant. By default it is randomly assigned. -Configuration variables (host): +Configuration variables (interface): -- **ip** (*Required*): IP address of CCU/Homegear device. +- **host** (*Required*): IP address or Hostname of CCU/Homegear device or Hass.io add-on. - **port** (*Optional*): Port of CCU/Homegear XML-RPC Server. Wireless: 2001, wired: 2000, IP: 2010, thermostatgroups: 9292. - **callback_ip** (*Optional*): Set this, if Home Assistant is reachable under a different IP from the CCU (NAT, Docker etc.). - **callback_port** (*Optional*): Set this, if Home Assistant is reachable under a different port from the CCU (NAT, Docker etc.). - **resolvenames** (*Optional*): [`metadata`, `json`, `xml`] Try to fetch device names. Defaults to `false` if not specified. - **username** (*Optional*): When fetching names via JSON-RPC, you need to specify a user with guest-access to the CCU. - **password** (*Optional*): When fetching names via JSON-RPC, you need to specify the password of the user you have configured above. -- **primary** (*Optional*): Set to `true` when using multiple hosts and this host should provide the services and variables. -- **variables** (*Optional*): Set to `true` if you want to use CCU2/Homegear variables. Should only be enabled for the primary host. When using a CCU credentials are required. - **path** (*Optional*): Set to `/groups` when using port 9292. +Configuration variables (host): + +- **host** (*Required*): IP address of CCU/Homegear device. +- **username** (*Optional*): When fetching names via JSON-RPC, you need to specify a user with guest-access to the CCU. +- **password** (*Optional*): When fetching names via JSON-RPC, you need to specify the password of the user you have configured above. + #### Example configuration with multiple protocols and some other options set: ```yaml homematic: - hosts: + interfaces: rf: - ip: 127.0.0.1 + host: 127.0.0.1 resolvenames: json username: Admin password: secret primary: true variables: true wired: - ip: 127.0.0.1 + host: 127.0.0.1 port: 2000 resolvenames: json username: Admin password: secret ip: - ip: 127.0.0.1 + host: 127.0.0.1 port: 2010 groups: - ip: 127.0.0.1 + host: 127.0.0.1 port: 9292 resolvenames: json username: Admin password: secret path: /groups + hosts: + ccu2: + host: 127.0.0.1 + username: Admin + password: secret + ``` ### {% linkable_title The `resolvenames` option %} @@ -115,7 +126,7 @@ sensor: ### {% linkable_title Variables %} It is possible to read and set values of system variables you have setup on the CCU/Homegear. The supported types for setting values are float- and bool-variables. -The states of the variables are available through the attributes of your hub entity (e.g. `homematic.rf`). Use templates (as mentioned above) to make your variables available to automations or as entities. +The states of the variables are available through the attributes of your hub entity (e.g. `homematic.ccu2`). Use templates (as mentioned above) to make your variables available to automations or as entities. The values of variables are polled from the CCU/Homegear in an interval of 30 seconds. Setting the value of a variable happens instantly and is directly pushed. ### {% linkable_title Events %} @@ -154,8 +165,8 @@ The name depends on if you chose to resolve names or not. If not, it will be the * *homematic.virtualkey*: Simulate a keypress (or other valid action) on CCU/Homegear with device or virtual keys. * *homematic.reconnect*: Reconnect to CCU/Homegear without restarting Home Assistant (useful when CCU has been restarted) -* *homematic.set_var_value*: Set the value of a system variable. -* *homematic.set_dev_value*: Control a device manually (even devices without support). Equivalent to setValue-method from XML-RPC. +* *homematic.set_variable_value*: Set the value of a system variable. +* *homematic.set_device_value*: Control a device manually (even devices without support). Equivalent to setValue-method from XML-RPC. #### {% linkable_title Examples %} Simulate a button being pressed @@ -184,9 +195,9 @@ Set boolean variable to true ```yaml ... action: - service: homematic.set_var_value + service: homematic.set_variable_value data: - entity_id: homematic.rf + entity_id: homematic.ccu2 name: Variablename value: true ``` @@ -200,7 +211,7 @@ Manually turn on a switch actor ```yaml ... action: - service: homematic.set_dev_value + service: homematic.set_device_value data: address: LEQ1234567 channel: 1 @@ -212,7 +223,7 @@ Manually set temperature on thermostat ```yaml ... action: - service: homematic.set_dev_value + service: homematic.set_device_value data: address: LEQ1234567 channel: 4 From c4804782c6af04b66c54bad6bbca2730fd1bb602 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 17 Dec 2017 13:21:50 +0100 Subject: [PATCH 17/26] Set to 0.60 --- _config.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/_config.yml b/_config.yml index f8987527d79..868c6051c4d 100644 --- a/_config.yml +++ b/_config.yml @@ -139,12 +139,12 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 59 -current_patch_version: 2 -date_released: 2017-12-06 +current_minor_version: 60 +current_patch_version: 0 +date_released: 2017-12-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: "#release-0592---december-6" +patch_version_notes: "#" # Minor release (Example #release-0431---april-25): From 3668f6ab392c13f52ff4057ae73a04411a71c917 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 17 Dec 2017 13:31:00 +0100 Subject: [PATCH 18/26] Rename file --- ...kdown => 2017-12-17-introducing-home-assistant-cloud.markdown} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename source/_posts/{2017-12-16-introducing-home-assistant-cloud.markdown => 2017-12-17-introducing-home-assistant-cloud.markdown} (100%) diff --git a/source/_posts/2017-12-16-introducing-home-assistant-cloud.markdown b/source/_posts/2017-12-17-introducing-home-assistant-cloud.markdown similarity index 100% rename from source/_posts/2017-12-16-introducing-home-assistant-cloud.markdown rename to source/_posts/2017-12-17-introducing-home-assistant-cloud.markdown From 1b865b72e3327695105da02ce2a49584d2dc22e2 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 17 Dec 2017 13:31:15 +0100 Subject: [PATCH 19/26] Add links and update date --- .../2017-12-17-introducing-home-assistant-cloud.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_posts/2017-12-17-introducing-home-assistant-cloud.markdown b/source/_posts/2017-12-17-introducing-home-assistant-cloud.markdown index 1c6cf5e9ac5..b9018d79b4c 100644 --- a/source/_posts/2017-12-17-introducing-home-assistant-cloud.markdown +++ b/source/_posts/2017-12-17-introducing-home-assistant-cloud.markdown @@ -2,8 +2,8 @@ layout: post title: Introducing Home Assistant Cloud description: "Use Alexa to control any device that is connected to Home Assistant." -date: 2017-12-16 02:00:00 -date_formatted: "December 16, 2017" +date: 2017-12-17 03:00:00 +date_formatted: "December 17, 2017" author: Paulus Schoutsen author_twitter: balloob comments: true @@ -28,7 +28,7 @@ With donations you have to convince people to keep donating and it will be hard ## {% linkable_title Getting started %} -Upgrade Home Assistant to 0.60 and enable the cloud and config components: +Upgrade Home Assistant to 0.60 and enable the [`cloud`](/components/cloud/) and [`config`]](/components/config/) components: ```yaml # Example configuration.yaml entry From ed522614ca14388cff2c1a8ea85c19ac6cdf119f Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 17 Dec 2017 13:59:01 +0100 Subject: [PATCH 20/26] Add image for release blog posAdd image for release blog postt --- source/images/blog/2017-12-0.60/components.png | Bin 0 -> 82112 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 source/images/blog/2017-12-0.60/components.png diff --git a/source/images/blog/2017-12-0.60/components.png b/source/images/blog/2017-12-0.60/components.png new file mode 100644 index 0000000000000000000000000000000000000000..8f82d4180236d7ba7a1bc4b5f24b187cb64f9953 GIT binary patch literal 82112 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ōm;&QIo2-M1Qt)%3!> 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 Date: Sun, 17 Dec 2017 13:59:55 +0100 Subject: [PATCH 21/26] Add release blog post for 0.60 --- source/_posts/2017-12-17-release-60.markdown | 356 +++++++++++++++++++ 1 file changed, 356 insertions(+) create mode 100644 source/_posts/2017-12-17-release-60.markdown diff --git a/source/_posts/2017-12-17-release-60.markdown b/source/_posts/2017-12-17-release-60.markdown new file mode 100644 index 00000000000..fd727b23172 --- /dev/null +++ b/source/_posts/2017-12-17-release-60.markdown @@ -0,0 +1,356 @@ +--- +layout: post +title: "0.60: Beckhoff/TwinCAT, WebDav, Gearbest, iAlarm" +description: "If you don't want to create items on our shopping list with HTTP requests, just order pizza!" +date: 2017-12-17 02:00:00 +date_formatted: "December 17, 2017" +author: Fabian Affolter +author_twitter: fabaff +comments: true +categories: Release-Notes +og_image: /images/blog/2017-12-0.60/components.png +--- + + + +The biggest change for 0.60 will be covered in a separate [blog post](/blog/2017/12/17/introducing-home-assistant-cloud/). Thus, we will keep it short here. Just one thing: This is the last release in 2017. We will be back to our bi-weekly release cycle in 2018. + +A big "Thank you" to all people who supported us to make this release possible. + +## {% linkable_title TwinCAT %} +With the brand-new [ADS (automation device specification)][ads docs] component by [@stlehmann] allows you to hook Home Assistant into this fieldbus independent interface which is often used between Beckhoff devices running with TwinCAT. + +## {% linkable_title WebDav calendar %} +Thanks to [@maxlaverse] Home Assistant support now [WebDav calendars][calendar.caldav docs]. + +## {% linkable_title Tracking prices %} +With the new [`gearbest` sensor][sensor.gearbest docs] there is now an additional sensor available to track the price of a product. + +## {% linkable_title Financial details %} +Yahoo! has discontinued their financial service. To fill this gap we have now the [`alpha_vantage` sensor][sensor.alpha_vantage docs] which is intruded in this release and allows you to monitor the stock market. + +## {% linkable_title New Platforms %} + +- Add iAlarm support ([@RyuzakiKK] - [#10878]) ([alarm_control_panel.ialarm docs]) (new-platform) +- Add Alpha Vantage sensor ([@fabaff] - [#10873]) ([sensor.alpha_vantage docs]) (new-platform) +- Add ADS component ([@stlehmann] - [#10142]) ([ads docs]) ([binary_sensor.ads docs]) ([light.ads docs]) ([sensor.ads docs]) ([switch.ads docs]) (new-platform) +- Gearbest sensor ([@HerrHofrat] - [#10556]) ([sensor.gearbest docs]) (new-platform) +- Add Ziggo Mediabox XL media_player ([@b10m] - [#10514]) ([media_player.ziggo_mediabox_xl docs]) (new-platform) +- Meraki AP Device tracker ([@masarliev] - [#10971]) ([device_tracker.meraki docs]) (new-platform) +- Added Vera scenes ([@alanfischer] - [#10424]) ([vera docs]) ([scene.vera docs]) (new-platform) +- Add support for Canary component and platforms ([@snjoetw] - [#10306]) ([canary docs]) ([camera.canary docs]) ([sensor.canary docs]) (new-platform) +- Add support for Logitech UE Smart Radios. ([@GreenTurtwig] - [#10077]) ([media_player.ue_smart_radio docs]) (new-platform) +- Added support for cover in tellstick ([@perfalk] - [#10858]) ([tellstick docs]) ([cover.tellstick docs]) (new-platform) +- Add a caldav calendar component ([@maxlaverse] - [#10842]) ([calendar.caldav docs]) (new-platform) +- Refactor hue to split bridge support from light platform ([@andreacampi] - [#10691]) ([hue docs]) ([light.hue docs]) (breaking change) (new-platform) + +## {% linkable_title Breaking Changes %} + +- Update snips to listen on new mqtt topic and utilize rawValue ([@tschmidty69] - [#11020]) ([snips docs]) (breaking change) +- Refactor hue to split bridge support from light platform ([@andreacampi] - [#10691]) ([hue docs]) ([light.hue docs]) (breaking change) (new-platform) +- Use luftdaten module ([@fabaff] - [#10970]) ([sensor.luftdaten docs]) (breaking change) +- ISY994 sensor improvements ([@OverloadUT] - [#10805]) ([isy994 docs]) ([binary_sensor.isy994 docs]) (breaking change) +- Homematic next ([@pvizeli] - [#11156]) ([homematic docs]) (breaking change) + +## {% 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 All changes %} + +- Update ecobee version to fix stack-trace issue ([@PhracturedBlue] - [#10894]) ([ecobee docs]) +- Pybotvac multi ([@raymccarthy] - [#10843]) ([neato docs]) +- More declarative timeout syntax for manual alarm control panel. ([@bonzini] - [#10738]) ([alarm_control_panel.manual docs]) ([alarm_control_panel.manual_mqtt docs]) +- Unpacking RESTful sensor JSON results into attributes. ([@nickovs] - [#10753]) ([sensor.rest docs]) +- Bump dev to 0.60.0.dev0 ([@fabaff] - [#10912]) +- Update eliqonline.py ([@molobrakos] - [#10914]) ([sensor.eliqonline docs]) +- Add iAlarm support ([@RyuzakiKK] - [#10878]) ([alarm_control_panel.ialarm docs]) (new-platform) +- Correction of Samsung Power OFF behaviour ([@RiRomain] - [#10907]) ([media_player.samsungtv docs]) +- Add Alpha Vantage sensor ([@fabaff] - [#10873]) ([sensor.alpha_vantage docs]) (new-platform) +- Don't repeat getting receiver name on each update / pushed to denonavr 0.5.5 ([@scarface-4711] - [#10915]) ([media_player.denonavr docs]) +- Add Min and Event Count Metrics To Prometheus ([@bah2830] - [#10530]) ([prometheus docs]) +- Update coveragerc ([@balloob] - [#10931]) +- Report availability of TP-Link smart sockets ([@DanNixon] - [#10933]) ([switch.tplink docs]) +- Set percent unit for battery level so that history displays properly; edited variable name for consistency ([@nbougues] - [#10932]) ([sensor.tesla docs]) +- Export climate status and target temperature to Prometheus ([@hudashot] - [#10919]) ([prometheus docs]) +- Tado ignore invalid devices ([@dasos] - [#10927]) ([climate.tado docs]) +- don't ignore voltage data if sensor data changed ([@PaulAnnekov] - [#10925]) ([xiaomi_aqara docs]) +- Add ADS component ([@stlehmann] - [#10142]) ([ads docs]) ([binary_sensor.ads docs]) ([light.ads docs]) ([sensor.ads docs]) ([switch.ads docs]) (new-platform) +- Gearbest sensor ([@HerrHofrat] - [#10556]) ([sensor.gearbest docs]) (new-platform) +- Add Ziggo Mediabox XL media_player ([@b10m] - [#10514]) ([media_player.ziggo_mediabox_xl docs]) (new-platform) +- Generic thermostat initial_operation_mode ([@ziotibia81] - [#10690]) ([climate.generic_thermostat docs]) +- Use new build path for dev translations ([@armills] - [#10937]) +- Add option to set default hide if away for new devices ([@masarliev] - [#10762]) ([device_tracker docs]) +- Allow disabling the LEDs on TP-Link smart plugs ([@DanNixon] - [#10980]) ([switch.tplink docs]) +- Meraki AP Device tracker ([@masarliev] - [#10971]) ([device_tracker.meraki docs]) (new-platform) +- Update tradfri.py ([@pvizeli] - [#10991]) ([light.tradfri docs]) +- webostv: Ensure source exists before use ([@OddBloke] - [#10959]) ([media_player.webostv docs]) +- Ensure Docker script files uses LF line endings to support Docker for Windows. ([@R1chardTM] - [#10067]) +- Added Vera scenes ([@alanfischer] - [#10424]) ([vera docs]) ([scene.vera docs]) (new-platform) +- Fix Egardia alarm status shown as unknown after restart ([@jeroenterheerdt] - [#11010]) ([alarm_control_panel.egardia docs]) +- Handle OSError when forcibly turning off media_player.samsungtv ([@lwis] - [#10997]) ([media_player.samsungtv docs]) +- Shuffle support in Sonos ([@mar-schmidt] - [#10875]) ([media_player.sonos docs]) +- Add support for Canary component and platforms ([@snjoetw] - [#10306]) ([canary docs]) ([camera.canary docs]) ([sensor.canary docs]) (new-platform) +- Ignore Sonos players with unknown hostnames ([@amelchio] - [#11013]) +- Support LIFX Mini products ([@amelchio] - [#10996]) ([light.lifx docs]) +- Update snips to listen on new mqtt topic and utilize rawValue ([@tschmidty69] - [#11020]) ([snips docs]) (breaking change) +- Change default js version to auto ([@andrey-git] - [#10999]) +- Serialize mochad requests ([@mtreinish] - [#11029]) ([mochad docs]) ([light.mochad docs]) ([switch.mochad docs]) +- In dev mode expose only relevant sources ([@andrey-git] - [#11026]) +- Added force_update for REST sensor ([@foxel] - [#11016]) ([sensor.miflora docs]) ([sensor.mqtt docs]) ([sensor.rest docs]) +- Add support for Logitech UE Smart Radios. ([@GreenTurtwig] - [#10077]) ([media_player.ue_smart_radio docs]) (new-platform) +- Make notify.html5 depend on config ([@balloob] - [#11052]) ([notify.html5 docs]) +- This change fixes the error `OSError: [WinError 193]` on Windows debuggers (i.e. PyCharm) ([@tringler] - [#11034]) +- Added support for cover in tellstick ([@perfalk] - [#10858]) ([tellstick docs]) ([cover.tellstick docs]) (new-platform) +- Add a caldav calendar component ([@maxlaverse] - [#10842]) ([calendar.caldav docs]) (new-platform) +- Add GPS coords to meraki ([@addelovein] - [#10998]) ([device_tracker.meraki docs]) +- Refactor hue to split bridge support from light platform ([@andreacampi] - [#10691]) ([hue docs]) ([light.hue docs]) (breaking change) (new-platform) +- add custom bypass status to total connect ([@uchagani] - [#11042]) ([alarm_control_panel.totalconnect docs]) +- Volvo on call: Optional use of Scandinavian miles. Also add average fuel consumption property ([@molobrakos] - [#11051]) ([volvooncall docs]) ([sensor.volvooncall docs]) +- Allow tradfri to read the available state of the device ([@pvizeli] - [#11056]) ([light.tradfri docs]) +- Upgrade aiohttp to 2.3.6 ([@fabaff] - [#11079]) +- Upgrade yarl to 0.16.0 ([@fabaff] - [#11078]) +- Upgrade psutil to 5.4.2 ([@fabaff] - [#11083]) ([sensor.systemmonitor docs]) +- Upgrade youtube_dl to 2017.12.10 ([@fabaff] - [#11080]) ([media_extractor docs]) +- Upgrade shodan to 1.7.7 ([@fabaff] - [#11084]) ([sensor.shodan docs]) +- Update tellcore-net to 0.4 ([@pvizeli] - [#11087]) ([tellstick docs]) +- Bump pymusiccast to version 0.1.6 ([@jalmeroth] - [#11091]) ([media_player.yamaha_musiccast docs]) +- Use luftdaten module ([@fabaff] - [#10970]) ([sensor.luftdaten docs]) (breaking change) +- Bump pyatv to 0.3.9 ([@postlund] - [#11104]) ([apple_tv docs]) +- Report availability for TP-Link smart bulbs ([@DanNixon] - [#10976]) ([light.tplink docs]) +- Fix incorrect comment. ([@emosenkis] - [#11111]) +- Update Warrant ([@balloob] - [#11101]) ([cloud docs]) +- Fixed typo in automation.py ([@ryanm101] - [#11116]) ([config.automation docs]) +- Add media position properties ([@pschmitt] - [#10076]) ([media_player.liveboxplaytv docs]) +- update pyripple ([@nkgilley] - [#11122]) ([sensor.ripple docs]) +- Skip HASS emulated Hue bridges from detection. ([@andreacampi] - [#11128]) ([hue docs]) +- Always consume the no_throttle keyword argument. ([@andreacampi] - [#11126]) +- Add problem device class ([@armills] - [#11130]) ([binary_sensor docs]) +- set default utc offset to 0 ([@pollett] - [#11114]) ([sensor.efergy docs]) +- Allow using more than one keyboard remote ([@BryanJacobs] - [#11061]) ([keyboard_remote docs]) +- ISY994 sensor improvements ([@OverloadUT] - [#10805]) ([isy994 docs]) ([binary_sensor.isy994 docs]) (breaking change) +- Disable html5 notify dependency ([@balloob] - [#11135]) ([notify.html5 docs]) +- Upgrade Homematic ([@danielperna84] - [#11149]) ([homematic docs]) +- Fix X10 commands for mochad light turn on ([@mtreinish] - [#11146]) ([light.mochad docs]) +- Homematic next ([@pvizeli] - [#11156]) ([homematic docs]) (breaking change) +- Resolve hostnames ([@pvizeli] - [#11160]) ([homematic docs]) +- Perform logbook filtering on the worker thread ([@armills] - [#11161]) ([logbook docs]) +- Don't connect to cloud if subscription expired ([@balloob] - [#11163]) ([cloud docs]) ([cloud.const docs]) +- Add install mode to homematic ([@pvizeli] - [#11164]) ([homematic docs]) +- convert alarmdecoder interface from async to sync ([@PhracturedBlue] - [#11168]) ([alarmdecoder docs]) +- Remove logging ([@cmsimike] - [#11173]) ([sensor.octoprint docs]) +- Revbump to SoCo 0.13 and add support for Night Sound and Speech Enhancement. ([@rbdixon] - [#10765]) ([media_player.sonos docs]) + +[#10067]: https://github.com/home-assistant/home-assistant/pull/10067 +[#10076]: https://github.com/home-assistant/home-assistant/pull/10076 +[#10077]: https://github.com/home-assistant/home-assistant/pull/10077 +[#10142]: https://github.com/home-assistant/home-assistant/pull/10142 +[#10306]: https://github.com/home-assistant/home-assistant/pull/10306 +[#10424]: https://github.com/home-assistant/home-assistant/pull/10424 +[#10514]: https://github.com/home-assistant/home-assistant/pull/10514 +[#10530]: https://github.com/home-assistant/home-assistant/pull/10530 +[#10556]: https://github.com/home-assistant/home-assistant/pull/10556 +[#10690]: https://github.com/home-assistant/home-assistant/pull/10690 +[#10691]: https://github.com/home-assistant/home-assistant/pull/10691 +[#10738]: https://github.com/home-assistant/home-assistant/pull/10738 +[#10753]: https://github.com/home-assistant/home-assistant/pull/10753 +[#10762]: https://github.com/home-assistant/home-assistant/pull/10762 +[#10765]: https://github.com/home-assistant/home-assistant/pull/10765 +[#10805]: https://github.com/home-assistant/home-assistant/pull/10805 +[#10842]: https://github.com/home-assistant/home-assistant/pull/10842 +[#10843]: https://github.com/home-assistant/home-assistant/pull/10843 +[#10858]: https://github.com/home-assistant/home-assistant/pull/10858 +[#10873]: https://github.com/home-assistant/home-assistant/pull/10873 +[#10875]: https://github.com/home-assistant/home-assistant/pull/10875 +[#10878]: https://github.com/home-assistant/home-assistant/pull/10878 +[#10894]: https://github.com/home-assistant/home-assistant/pull/10894 +[#10907]: https://github.com/home-assistant/home-assistant/pull/10907 +[#10912]: https://github.com/home-assistant/home-assistant/pull/10912 +[#10914]: https://github.com/home-assistant/home-assistant/pull/10914 +[#10915]: https://github.com/home-assistant/home-assistant/pull/10915 +[#10919]: https://github.com/home-assistant/home-assistant/pull/10919 +[#10925]: https://github.com/home-assistant/home-assistant/pull/10925 +[#10927]: https://github.com/home-assistant/home-assistant/pull/10927 +[#10931]: https://github.com/home-assistant/home-assistant/pull/10931 +[#10932]: https://github.com/home-assistant/home-assistant/pull/10932 +[#10933]: https://github.com/home-assistant/home-assistant/pull/10933 +[#10937]: https://github.com/home-assistant/home-assistant/pull/10937 +[#10959]: https://github.com/home-assistant/home-assistant/pull/10959 +[#10970]: https://github.com/home-assistant/home-assistant/pull/10970 +[#10971]: https://github.com/home-assistant/home-assistant/pull/10971 +[#10976]: https://github.com/home-assistant/home-assistant/pull/10976 +[#10980]: https://github.com/home-assistant/home-assistant/pull/10980 +[#10991]: https://github.com/home-assistant/home-assistant/pull/10991 +[#10996]: https://github.com/home-assistant/home-assistant/pull/10996 +[#10997]: https://github.com/home-assistant/home-assistant/pull/10997 +[#10998]: https://github.com/home-assistant/home-assistant/pull/10998 +[#10999]: https://github.com/home-assistant/home-assistant/pull/10999 +[#11010]: https://github.com/home-assistant/home-assistant/pull/11010 +[#11013]: https://github.com/home-assistant/home-assistant/pull/11013 +[#11016]: https://github.com/home-assistant/home-assistant/pull/11016 +[#11020]: https://github.com/home-assistant/home-assistant/pull/11020 +[#11026]: https://github.com/home-assistant/home-assistant/pull/11026 +[#11029]: https://github.com/home-assistant/home-assistant/pull/11029 +[#11034]: https://github.com/home-assistant/home-assistant/pull/11034 +[#11042]: https://github.com/home-assistant/home-assistant/pull/11042 +[#11051]: https://github.com/home-assistant/home-assistant/pull/11051 +[#11052]: https://github.com/home-assistant/home-assistant/pull/11052 +[#11056]: https://github.com/home-assistant/home-assistant/pull/11056 +[#11061]: https://github.com/home-assistant/home-assistant/pull/11061 +[#11078]: https://github.com/home-assistant/home-assistant/pull/11078 +[#11079]: https://github.com/home-assistant/home-assistant/pull/11079 +[#11080]: https://github.com/home-assistant/home-assistant/pull/11080 +[#11083]: https://github.com/home-assistant/home-assistant/pull/11083 +[#11084]: https://github.com/home-assistant/home-assistant/pull/11084 +[#11087]: https://github.com/home-assistant/home-assistant/pull/11087 +[#11091]: https://github.com/home-assistant/home-assistant/pull/11091 +[#11101]: https://github.com/home-assistant/home-assistant/pull/11101 +[#11104]: https://github.com/home-assistant/home-assistant/pull/11104 +[#11111]: https://github.com/home-assistant/home-assistant/pull/11111 +[#11114]: https://github.com/home-assistant/home-assistant/pull/11114 +[#11116]: https://github.com/home-assistant/home-assistant/pull/11116 +[#11122]: https://github.com/home-assistant/home-assistant/pull/11122 +[#11126]: https://github.com/home-assistant/home-assistant/pull/11126 +[#11128]: https://github.com/home-assistant/home-assistant/pull/11128 +[#11130]: https://github.com/home-assistant/home-assistant/pull/11130 +[#11135]: https://github.com/home-assistant/home-assistant/pull/11135 +[#11146]: https://github.com/home-assistant/home-assistant/pull/11146 +[#11149]: https://github.com/home-assistant/home-assistant/pull/11149 +[#11156]: https://github.com/home-assistant/home-assistant/pull/11156 +[#11160]: https://github.com/home-assistant/home-assistant/pull/11160 +[#11161]: https://github.com/home-assistant/home-assistant/pull/11161 +[#11163]: https://github.com/home-assistant/home-assistant/pull/11163 +[#11164]: https://github.com/home-assistant/home-assistant/pull/11164 +[#11168]: https://github.com/home-assistant/home-assistant/pull/11168 +[#11173]: https://github.com/home-assistant/home-assistant/pull/11173 +[@BryanJacobs]: https://github.com/BryanJacobs +[@DanNixon]: https://github.com/DanNixon +[@GreenTurtwig]: https://github.com/GreenTurtwig +[@HerrHofrat]: https://github.com/HerrHofrat +[@OddBloke]: https://github.com/OddBloke +[@OverloadUT]: https://github.com/OverloadUT +[@PaulAnnekov]: https://github.com/PaulAnnekov +[@PhracturedBlue]: https://github.com/PhracturedBlue +[@R1chardTM]: https://github.com/R1chardTM +[@RiRomain]: https://github.com/RiRomain +[@RyuzakiKK]: https://github.com/RyuzakiKK +[@addelovein]: https://github.com/addelovein +[@alanfischer]: https://github.com/alanfischer +[@amelchio]: https://github.com/amelchio +[@andreacampi]: https://github.com/andreacampi +[@andrey-git]: https://github.com/andrey-git +[@armills]: https://github.com/armills +[@b10m]: https://github.com/b10m +[@bah2830]: https://github.com/bah2830 +[@balloob]: https://github.com/balloob +[@bonzini]: https://github.com/bonzini +[@cmsimike]: https://github.com/cmsimike +[@danielperna84]: https://github.com/danielperna84 +[@dasos]: https://github.com/dasos +[@emosenkis]: https://github.com/emosenkis +[@fabaff]: https://github.com/fabaff +[@foxel]: https://github.com/foxel +[@hudashot]: https://github.com/hudashot +[@jalmeroth]: https://github.com/jalmeroth +[@jeroenterheerdt]: https://github.com/jeroenterheerdt +[@lwis]: https://github.com/lwis +[@mar-schmidt]: https://github.com/mar-schmidt +[@masarliev]: https://github.com/masarliev +[@maxlaverse]: https://github.com/maxlaverse +[@molobrakos]: https://github.com/molobrakos +[@mtreinish]: https://github.com/mtreinish +[@nbougues]: https://github.com/nbougues +[@nickovs]: https://github.com/nickovs +[@nkgilley]: https://github.com/nkgilley +[@perfalk]: https://github.com/perfalk +[@pollett]: https://github.com/pollett +[@postlund]: https://github.com/postlund +[@pschmitt]: https://github.com/pschmitt +[@pvizeli]: https://github.com/pvizeli +[@raymccarthy]: https://github.com/raymccarthy +[@rbdixon]: https://github.com/rbdixon +[@ryanm101]: https://github.com/ryanm101 +[@scarface-4711]: https://github.com/scarface-4711 +[@snjoetw]: https://github.com/snjoetw +[@stlehmann]: https://github.com/stlehmann +[@tringler]: https://github.com/tringler +[@tschmidty69]: https://github.com/tschmidty69 +[@uchagani]: https://github.com/uchagani +[@ziotibia81]: https://github.com/ziotibia81 +[ads docs]: https://home-assistant.io/components/ads/ +[alarm_control_panel.egardia docs]: https://home-assistant.io/components/alarm_control_panel.egardia/ +[alarm_control_panel.ialarm docs]: https://home-assistant.io/components/alarm_control_panel.ialarm/ +[alarm_control_panel.manual docs]: https://home-assistant.io/components/alarm_control_panel.manual/ +[alarm_control_panel.manual_mqtt docs]: https://home-assistant.io/components/alarm_control_panel.manual_mqtt/ +[alarm_control_panel.totalconnect docs]: https://home-assistant.io/components/alarm_control_panel.totalconnect/ +[alarmdecoder docs]: https://home-assistant.io/components/alarmdecoder/ +[apple_tv docs]: https://home-assistant.io/components/apple_tv/ +[binary_sensor docs]: https://home-assistant.io/components/binary_sensor/ +[binary_sensor.ads docs]: https://home-assistant.io/components/binary_sensor.ads/ +[binary_sensor.isy994 docs]: https://home-assistant.io/components/binary_sensor.isy994/ +[calendar.caldav docs]: https://home-assistant.io/components/calendar.caldav/ +[camera.canary docs]: https://home-assistant.io/components/camera.canary/ +[canary docs]: https://home-assistant.io/components/canary/ +[climate.generic_thermostat docs]: https://home-assistant.io/components/climate.generic_thermostat/ +[climate.tado docs]: https://home-assistant.io/components/climate.tado/ +[cloud docs]: https://home-assistant.io/components/cloud/ +[cloud.const docs]: https://home-assistant.io/components/cloud.const/ +[config.automation docs]: https://home-assistant.io/components/config.automation/ +[cover.tellstick docs]: https://home-assistant.io/components/cover.tellstick/ +[device_tracker docs]: https://home-assistant.io/components/device_tracker/ +[device_tracker.meraki docs]: https://home-assistant.io/components/device_tracker.meraki/ +[ecobee docs]: https://home-assistant.io/components/ecobee/ +[homematic docs]: https://home-assistant.io/components/homematic/ +[hue docs]: https://home-assistant.io/components/hue/ +[isy994 docs]: https://home-assistant.io/components/isy994/ +[keyboard_remote docs]: https://home-assistant.io/components/keyboard_remote/ +[light.ads docs]: https://home-assistant.io/components/light.ads/ +[light.hue docs]: https://home-assistant.io/components/light.hue/ +[light.lifx docs]: https://home-assistant.io/components/light.lifx/ +[light.mochad docs]: https://home-assistant.io/components/light.mochad/ +[light.tplink docs]: https://home-assistant.io/components/light.tplink/ +[light.tradfri docs]: https://home-assistant.io/components/light.tradfri/ +[logbook docs]: https://home-assistant.io/components/logbook/ +[media_extractor docs]: https://home-assistant.io/components/media_extractor/ +[media_player.denonavr docs]: https://home-assistant.io/components/media_player.denonavr/ +[media_player.liveboxplaytv docs]: https://home-assistant.io/components/media_player.liveboxplaytv/ +[media_player.samsungtv docs]: https://home-assistant.io/components/media_player.samsungtv/ +[media_player.sonos docs]: https://home-assistant.io/components/media_player.sonos/ +[media_player.ue_smart_radio docs]: https://home-assistant.io/components/media_player.ue_smart_radio/ +[media_player.webostv docs]: https://home-assistant.io/components/media_player.webostv/ +[media_player.yamaha_musiccast docs]: https://home-assistant.io/components/media_player.yamaha_musiccast/ +[media_player.ziggo_mediabox_xl docs]: https://home-assistant.io/components/media_player.ziggo_mediabox_xl/ +[mochad docs]: https://home-assistant.io/components/mochad/ +[neato docs]: https://home-assistant.io/components/neato/ +[notify.html5 docs]: https://home-assistant.io/components/notify.html5/ +[prometheus docs]: https://home-assistant.io/components/prometheus/ +[scene.vera docs]: https://home-assistant.io/components/scene.vera/ +[sensor.ads docs]: https://home-assistant.io/components/sensor.ads/ +[sensor.alpha_vantage docs]: https://home-assistant.io/components/sensor.alpha_vantage/ +[sensor.canary docs]: https://home-assistant.io/components/sensor.canary/ +[sensor.efergy docs]: https://home-assistant.io/components/sensor.efergy/ +[sensor.eliqonline docs]: https://home-assistant.io/components/sensor.eliqonline/ +[sensor.gearbest docs]: https://home-assistant.io/components/sensor.gearbest/ +[sensor.luftdaten docs]: https://home-assistant.io/components/sensor.luftdaten/ +[sensor.miflora docs]: https://home-assistant.io/components/sensor.miflora/ +[sensor.mqtt docs]: https://home-assistant.io/components/sensor.mqtt/ +[sensor.octoprint docs]: https://home-assistant.io/components/sensor.octoprint/ +[sensor.rest docs]: https://home-assistant.io/components/sensor.rest/ +[sensor.ripple docs]: https://home-assistant.io/components/sensor.ripple/ +[sensor.shodan docs]: https://home-assistant.io/components/sensor.shodan/ +[sensor.systemmonitor docs]: https://home-assistant.io/components/sensor.systemmonitor/ +[sensor.tesla docs]: https://home-assistant.io/components/sensor.tesla/ +[sensor.volvooncall docs]: https://home-assistant.io/components/sensor.volvooncall/ +[snips docs]: https://home-assistant.io/components/snips/ +[switch.ads docs]: https://home-assistant.io/components/switch.ads/ +[switch.mochad docs]: https://home-assistant.io/components/switch.mochad/ +[switch.tplink docs]: https://home-assistant.io/components/switch.tplink/ +[tellstick docs]: https://home-assistant.io/components/tellstick/ +[vera docs]: https://home-assistant.io/components/vera/ +[volvooncall docs]: https://home-assistant.io/components/volvooncall/ +[xiaomi_aqara docs]: https://home-assistant.io/components/xiaomi_aqara/ From 2662468be74f7bbc3e412ee3c669bdada5932f9b Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 17 Dec 2017 14:00:16 +0100 Subject: [PATCH 22/26] Fix link --- .../_posts/2017-12-17-introducing-home-assistant-cloud.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2017-12-17-introducing-home-assistant-cloud.markdown b/source/_posts/2017-12-17-introducing-home-assistant-cloud.markdown index b9018d79b4c..8a8aaa10fc1 100644 --- a/source/_posts/2017-12-17-introducing-home-assistant-cloud.markdown +++ b/source/_posts/2017-12-17-introducing-home-assistant-cloud.markdown @@ -28,7 +28,7 @@ With donations you have to convince people to keep donating and it will be hard ## {% linkable_title Getting started %} -Upgrade Home Assistant to 0.60 and enable the [`cloud`](/components/cloud/) and [`config`]](/components/config/) components: +Upgrade Home Assistant to 0.60 and enable the [`cloud`](/components/cloud/) and [`config`](/components/config/) components: ```yaml # Example configuration.yaml entry From af47e24019a749bb1d4053e2761d7c133f8b9a4d Mon Sep 17 00:00:00 2001 From: GreenTurtwig Date: Sun, 17 Dec 2017 13:37:48 +0000 Subject: [PATCH 23/26] Documentation for Logitech UE Smart Radios (#3538) * Documentation for Logitech UE Smart Radios * Updated name. * Update example config. * Update with new configuration format. * Updated with requested changes. --- .../media_player.ue_smart_radio.markdown | 38 ++++++++++++++++++ source/images/supported_brands/ueradio.png | Bin 0 -> 6473 bytes 2 files changed, 38 insertions(+) create mode 100644 source/_components/media_player.ue_smart_radio.markdown create mode 100644 source/images/supported_brands/ueradio.png diff --git a/source/_components/media_player.ue_smart_radio.markdown b/source/_components/media_player.ue_smart_radio.markdown new file mode 100644 index 00000000000..217b625b8d5 --- /dev/null +++ b/source/_components/media_player.ue_smart_radio.markdown @@ -0,0 +1,38 @@ +--- +layout: page +title: "Logitech UE Smart Radio" +description: "Instructions on how to integrate a Logitech UE Smart Radio player into Home Assistant." +date: 2017-12-09 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: ueradio.png +ha_category: Media Player +ha_release: "0.60" +ha_iot_class: "Cloud Polling" +--- + + +The `ue_radio` platform allows you to control a [Logitech UE Smart Radio](https://www.uesmartradio.com) from Home Assistant. This lets you control both Logitech UE Smart Radios and Logitech Squeezebox Radios that have been updated with the UE Smart Radio update. + +To add your UE Smart Radio player to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +media_player: + - platform: ue_smart_radio + username: USERNAME + password: PASSWORD +``` + +{% configuration %} +username: + description: The email you use to log in to `uesmartradio.com`. + required: true + type: string +password: + description: The password you use to log in to `uesmartradio.com`. + required: true + type: string +{% endconfiguration %} diff --git a/source/images/supported_brands/ueradio.png b/source/images/supported_brands/ueradio.png new file mode 100644 index 0000000000000000000000000000000000000000..ebbde9e8eb074f093a4456ddcf0b11c6f848d001 GIT binary patch literal 6473 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 Date: Sun, 17 Dec 2017 14:42:52 +0100 Subject: [PATCH 24/26] Multiple fixes --- source/_components/cover.tellstick.markdown | 25 +++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 source/_components/cover.tellstick.markdown diff --git a/source/_components/cover.tellstick.markdown b/source/_components/cover.tellstick.markdown new file mode 100644 index 00000000000..2008ef2a73d --- /dev/null +++ b/source/_components/cover.tellstick.markdown @@ -0,0 +1,25 @@ +--- +layout: page +title: "TellStick Cover" +description: "Instructions how to integrate TellStick covers into Home Assistant." +date: 2017-11-29 16:23 +sidebar: true +comments: false +sharing: true +footer: true +logo: telldus_tellstick.png +ha_category: Cover +ha_iot_class: "Assumed State" +ha_release: "0.60" +--- + + +This `tellstick` cover platform allows you to control your [TellStick](http://www.telldus.se/products/tellstick) covers. + +To use your TellStick device, you first have to set up your [Tellstick hub](/components/tellstick/) and then add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +cover: + - platform: tellstick +``` From 22166ca9890ae26850ac3bf849eacfb5ba7f94d3 Mon Sep 17 00:00:00 2001 From: Roman Date: Sun, 17 Dec 2017 14:51:57 +0100 Subject: [PATCH 25/26] Added Gearbest Sensor (#3973) * Added Gearbest Sensor * Updated gearbest markdown to reflect latest changes * :ambulance: Adds missing Gearbest logo * :checkered_flag: Updated HA release version * :pencil2: Corrected some minor language issues * :hammer: Rewritten configuration options to use configuration tags * Minor updates --- source/_components/sensor.gearbest.markdown | 72 ++++++++++++++++++++ source/images/supported_brands/gearbest.png | Bin 0 -> 5920 bytes 2 files changed, 72 insertions(+) create mode 100644 source/_components/sensor.gearbest.markdown create mode 100644 source/images/supported_brands/gearbest.png diff --git a/source/_components/sensor.gearbest.markdown b/source/_components/sensor.gearbest.markdown new file mode 100644 index 00000000000..31803acb752 --- /dev/null +++ b/source/_components/sensor.gearbest.markdown @@ -0,0 +1,72 @@ +--- +layout: page +title: "Gearbest" +description: "Instructions on how to integrate a Gearbest sensor into Home Assistant." +date: 2017-11-13 09:08 +sidebar: true +comments: false +sharing: true +footer: true +logo: gearbest.png +ha_category: Sensor +ha_iot_class: "Cloud Polling" +ha_release: "0.60" +--- + + +The `gearbest` sensor will track the price of a product from [Gearbest](https://www.gearbest.com). This information can be used in, e.g., automations to notify you when a price drops. The update interval for every item is currently set to 2 hours. + +To enable this sensor, add the following lines to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: gearbest + currency: EUR + items: + - url: https://www.gearbest.com/.... +``` + +{% configuration %} +currency: + description: "The currency in which the products should be tracked. Currently supported: USD, EUR, GBP, AUD, CAD, CHF, HKD, CNY, NZD, JPY, RUB, BRL, CLP, NOK, DKK, SEK, KRW, ILS, COP, MXN, PEN, THB, IDR, UAH, PLN, INR, BGN, HUF, RON, TRY, CZK, HRK, MAD, AED, SAR, ZAR, SGD, MYR, TWD, RSD, NGN - if the currency could not be found in the conversion rate list, USD will be used as default. Either an ID or an URL must be present." + required: true + type: string +items: + description: List of products that should be tracked. + required: true + type: map + keys: + id: + description: The ID of the product. + required: false + type: int + url: + description: The URL of the product. + required: false + type: string + name: + description: The name of the item. If not set, it is parsed from the website. + required: false + type: string + currency: + description: Overwrite the currency for the current item. + required: false + type: string +{% endconfiguration %} + +### {% linkable_title Extended example %} + +```yaml +# Example configuration.yaml entry +sensor: + - platform: gearbest + currency: EUR + items: + - url: https://www.gearbest.com/3d-printers-3d-printer-kits/pp_779174.html?wid=21 + name: Creality CR-10 upgraded + currency: USD + - id: 779174 + name: Creality CR-10 upgraded #2 + currency: EUR +``` diff --git a/source/images/supported_brands/gearbest.png b/source/images/supported_brands/gearbest.png new file mode 100644 index 0000000000000000000000000000000000000000..d9789055083a98fe0eb0f73ec581a615b2e2fcdd GIT binary patch literal 5920 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 Jx8@$P{|BqjyzKx0 literal 0 HcmV?d00001 From 39365c2cbec707793628144bb5859cbf2ee0f740 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 17 Dec 2017 14:56:12 +0100 Subject: [PATCH 26/26] Update title --- source/_posts/2017-12-17-release-60.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2017-12-17-release-60.markdown b/source/_posts/2017-12-17-release-60.markdown index fd727b23172..bb3ff0867f5 100644 --- a/source/_posts/2017-12-17-release-60.markdown +++ b/source/_posts/2017-12-17-release-60.markdown @@ -1,7 +1,7 @@ --- layout: post title: "0.60: Beckhoff/TwinCAT, WebDav, Gearbest, iAlarm" -description: "If you don't want to create items on our shopping list with HTTP requests, just order pizza!" +description: "Use Home Assistant for your production line or track prices and the stock market." date: 2017-12-17 02:00:00 date_formatted: "December 17, 2017" author: Fabian Affolter