diff --git a/source/_components/automation.markdown b/source/_components/automation.markdown
index 99e2c26329..3585196f9b 100644
--- a/source/_components/automation.markdown
+++ b/source/_components/automation.markdown
@@ -11,6 +11,6 @@ logo: home-assistant.png
ha_category: Automation
---
-Please see the [getting started section] for in-depth documentation on how to use the automation compnoent.
+Please see the [getting started section] for in-depth documentation on how to use the automation component.
[getting started section]: /getting-started/automation/
diff --git a/source/_components/binary_sensor.apcupsd.markdown b/source/_components/binary_sensor.apcupsd.markdown
index 650786af19..e2e1db42d4 100644
--- a/source/_components/binary_sensor.apcupsd.markdown
+++ b/source/_components/binary_sensor.apcupsd.markdown
@@ -14,7 +14,7 @@ ha_release: 0.13
In addition to the [APCUPSd Sensor](/components/sensor.apcupsd/) devices, you may also create a device which is simply "on" when the UPS status is online and "off" at all other times.
-To enable this sensor, add the following lines to your `configuration.yaml` file for a GET request:
+To enable this sensor, add the following lines to your `configuration.yaml` file:
```yaml
# Example configuration.yaml entry
diff --git a/source/_components/dweet.markdown b/source/_components/dweet.markdown
index 9b57782db8..37cf9a82e0 100644
--- a/source/_components/dweet.markdown
+++ b/source/_components/dweet.markdown
@@ -9,7 +9,7 @@ sharing: true
footer: true
logo: dweet.png
ha_category: "History"
-featured: true
+featured: false
ha_release: 0.19
---
diff --git a/source/_components/light.markdown b/source/_components/light.markdown
index c55e3473a7..7d92ef6760 100644
--- a/source/_components/light.markdown
+++ b/source/_components/light.markdown
@@ -49,7 +49,7 @@ Turns one or multiple lights off.
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ----------- |
| `entity_id` | no | String or list of strings that point at `entity_id`s of lights. Else targets all.
-| `transition` | no | Integer that represents the time the light should take to transition to the new state.
+| `transition` | yes | Integer that represents the time the light should take to transition to the new state.
### {% linkable_title Service `light.toggle` %}
@@ -60,4 +60,4 @@ Toggles the state of one or multiple lights using [groups]({{site_root}}/compone
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ----------- |
| `entity_id` | no | String or list of strings that point at `entity_id`s of lights. Else targets all.
-| `transition` | no | Integer that represents the time the light should take to transition to the new state.
+| `transition` | yes | Integer that represents the time the light should take to transition to the new state.
diff --git a/source/_components/light.rfxtrx.markdown b/source/_components/light.rfxtrx.markdown
index 95dd54f172..9218c91c97 100644
--- a/source/_components/light.rfxtrx.markdown
+++ b/source/_components/light.rfxtrx.markdown
@@ -31,6 +31,7 @@ Push your remote and your device should be added:
Here the name is 0b11000102ef9f210010f70 and you can verify that it works from the frontend.
Then you should update your configuration to:
+
```yaml
light:
platform: rfxtrx
@@ -40,6 +41,7 @@ light:
```
Example configuration:
+
```yaml
# Example configuration.yaml entry
light:
diff --git a/source/_components/media_player.cast.markdown b/source/_components/media_player.cast.markdown
index 0ce3920e4e..2ffa718041 100644
--- a/source/_components/media_player.cast.markdown
+++ b/source/_components/media_player.cast.markdown
@@ -26,4 +26,4 @@ media_player:
Configuration variables:
-- **host** *Optional*: Use only if you don't want to scan for devices.
+- **host** (*Optional*): Use only if you don't want to scan for devices.
diff --git a/source/_components/media_player.firetv.markdown b/source/_components/media_player.firetv.markdown
index 9a5aca9937..eead6cfc6d 100644
--- a/source/_components/media_player.firetv.markdown
+++ b/source/_components/media_player.firetv.markdown
@@ -45,9 +45,9 @@ media_player:
Configuration variables:
-- **host** *Optional*: Where `firetv-server` is running. Default is *localhost:5556*.
-- **device** *Optional*: The device ID, default is *default*.
-- **name** *Optional*: The friendly name of the device, default is 'Amazon Fire TV'.
+- **host** (*Optional*): Where `firetv-server` is running. Default is *localhost:5556*.
+- **device** (*Optional*): The device ID, default is *default*.
+- **name** (*Optional*): The friendly name of the device, default is 'Amazon Fire TV'.
diff --git a/source/_components/media_player.itunes.markdown b/source/_components/media_player.itunes.markdown
index 625a46a59f..3b9b590d3e 100644
--- a/source/_components/media_player.itunes.markdown
+++ b/source/_components/media_player.itunes.markdown
@@ -30,5 +30,5 @@ media_player:
Configuration variables:
-- **host** *Required*: The URL of the itunes-api API, eg. http://192.168.1.50
-- **port** *Optional*: The port where itunes-api is accessible, eg. 8181.
+- **host** (*Required*): The URL of the itunes-api API, eg. http://192.168.1.50
+- **port** (*Optional*): The port where itunes-api is accessible, eg. 8181.
diff --git a/source/_components/media_player.kodi.markdown b/source/_components/media_player.kodi.markdown
index 8861c04c1d..9cd3a20335 100644
--- a/source/_components/media_player.kodi.markdown
+++ b/source/_components/media_player.kodi.markdown
@@ -31,8 +31,8 @@ media_player:
Configuration variables:
-- **host** *Required*: The host name or address of the device that is running XBMC/Kodi
-- **port** *Required*: The port number, default 8080
-- **name** *Optional*: The name of the device used in the frontend.
-- **username** *Optional*: The XBMC/Kodi HTTP username.
-- **password** *Optional*: The XBMC/Kodi HTTP password.
+- **host** (*Required*): The host name or address of the device that is running XBMC/Kodi
+- **port** (*Required*): The port number, default 8080
+- **name** (*Optional*): The name of the device used in the frontend.
+- **username** (*Optional*): The XBMC/Kodi HTTP username.
+- **password** (*Optional*): The XBMC/Kodi HTTP password.
diff --git a/source/_components/media_player.mpd.markdown b/source/_components/media_player.mpd.markdown
index 449a597250..b5d10aee92 100644
--- a/source/_components/media_player.mpd.markdown
+++ b/source/_components/media_player.mpd.markdown
@@ -29,10 +29,10 @@ media_player:
Configuration variables:
-- **server** *Required*: IP address of the Music Player Daemon, eg. 192.168.1.32
-- **port** *Optional*: Port of the Music Player Daemon, defaults to 6600.
-- **location** *Optional*: Location of your Music Player Daemon.
-- **password** *Optional*: Password for your Music Player Daemon.
+- **server** (*Required*): IP address of the Music Player Daemon, eg. 192.168.1.32
+- **port** (*Optional*): Port of the Music Player Daemon, defaults to 6600.
+- **location** (*Optional*): Location of your Music Player Daemon.
+- **password** (*Optional*): Password for your Music Player Daemon.
This platform works with [Music Player Daemon](http://www.musicpd.org/) and [mopidy](https://www.mopidy.com/) with [Mopidy-MPD](https://docs.mopidy.com/en/latest/ext/mpd/) as used by [Pi MusicBox](http://www.pimusicbox.com/).
diff --git a/source/_components/media_player.panasonic_viera.markdown b/source/_components/media_player.panasonic_viera.markdown
index f9135c75fc..8eceb7a266 100644
--- a/source/_components/media_player.panasonic_viera.markdown
+++ b/source/_components/media_player.panasonic_viera.markdown
@@ -34,7 +34,7 @@ media_player:
Configuration variables:
-- **host** *Required*: The IP of the Panasonic Viera TV, e.g. `192.168.0.10`
-- **port** *Optional*: The port of your Panasonic Viera TV. Defaults to `55000`
-- **name** *Optional*: The name you would like to give to the Panasonic Viera TV.
+- **host** (*Required*): The IP of the Panasonic Viera TV, e.g. `192.168.0.10`
+- **port** (*Optional*): The port of your Panasonic Viera TV. Defaults to `55000`
+- **name** (*Optional*): The name you would like to give to the Panasonic Viera TV.
diff --git a/source/_components/media_player.pioneer.markdown b/source/_components/media_player.pioneer.markdown
index 0d05f45473..e0a20c48c5 100644
--- a/source/_components/media_player.pioneer.markdown
+++ b/source/_components/media_player.pioneer.markdown
@@ -27,6 +27,6 @@ media_player:
Configuration variables:
-- **host** *Required*: The IP of the Pioneer device, eg. `192.168.0.10`
-- **name** *Optional*: The name you would like to give to the receiver.
+- **host** (*Required*): The IP of the Pioneer device, eg. `192.168.0.10`
+- **name** (*Optional*): The name you would like to give to the receiver.
diff --git a/source/_components/media_player.samsungtv.markdown b/source/_components/media_player.samsungtv.markdown
index 75cff8e9a3..87d3cd23c5 100644
--- a/source/_components/media_player.samsungtv.markdown
+++ b/source/_components/media_player.samsungtv.markdown
@@ -29,8 +29,8 @@ media_player:
Configuration variables:
-- **host** *Required*: The IP of the Samsung Smart TV, e.g. 192.168.0.10
-- **name** *Optional*: The name you would like to give to the Samsung Smart TV.
+- **host** (*Required*): The IP of the Samsung Smart TV, eg. 192.168.0.10
+- **name** (*Optional*): The name you would like to give to the Samsung Smart TV.
Currently known supported models:
@@ -44,3 +44,5 @@ Currently known supported models:
If your model is not on the list then give it a test, if everything works correctly then add it to the list on [GitHub](https://github.com/home-assistant/home-assistant.io).
The two letters at the beginning of the model number represent the region, UE is Europe, UN is North America and UA is Asia & Australia. The two numbers following that represent the screen size. If you add your model remember to remove these before adding them to the list.
+
+There's currently a [known issue](https://github.com/home-assistant/home-assistant/issues/2098) with some TV's receiving a *Key press UP* that can interrupt certain applications.
diff --git a/source/_components/media_player.squeezebox.markdown b/source/_components/media_player.squeezebox.markdown
index e819dba2bc..faa59f8426 100644
--- a/source/_components/media_player.squeezebox.markdown
+++ b/source/_components/media_player.squeezebox.markdown
@@ -30,7 +30,7 @@ media_player:
Configuration variables:
-- **host** *Required*: The host name or address of the Logitech Media Server, eg. 192.168.1.21.
-- **port** *Optional*: Telnet port to Logitech Media Server, default 9090.
-- **username** *Optional*: The username, if password protection is enabled.
-- **password** *Optional*: The password, if password protection is enabled.
+- **host** (*Required*): The host name or address of the Logitech Media Server, eg. 192.168.1.21.
+- **port** (*Optional*): Telnet port to Logitech Media Server, default 9090.
+- **username** (*Optional*): The username, if password protection is enabled.
+- **password** (*Optional*): The password, if password protection is enabled.
diff --git a/source/_components/media_player.webostv.markdown b/source/_components/media_player.webostv.markdown
index 32e65807f1..69f8fa6554 100644
--- a/source/_components/media_player.webostv.markdown
+++ b/source/_components/media_player.webostv.markdown
@@ -13,11 +13,11 @@ ha_iot_class: "Local Poll"
ha_release: 0.18
---
-The `webostv` platform allows you to control a LG WebOS Smart TV.
+The `webostv` platform allows you to control a [LG](http://www.lg.com) WebOS Smart TV.
When the TV is first connected, you will need to accept Home Assistant on the TV to allow communication.
-To add a TV to your installation, add the following to your `configuration.yaml` file and follow the configurator instructions:
+To add a TV to your installation, add the following to your `configuration.yaml` file:
```yaml
# Example configuration.yaml entry
@@ -29,7 +29,7 @@ media_player:
Configuration variables:
-- **host** *Optional*: The IP of the LG WebOS Smart TV, e.g. 192.168.0.10
-- **name** *Optional*: The name you would like to give to the LG WebOS Smart TV.
+- **host** (*Optional*): The IP of the LG WebOS Smart TV, eg. 192.168.0.10
+- **name** (*Optional*): The name you would like to give to the LG WebOS Smart TV.
If you do not provide a host name, all LG WebOS Smart TV's within your network will be auto-discovered if your TV network name is set to `[LG] webOS TV`
diff --git a/source/_components/sensor.rfxtrx.markdown b/source/_components/sensor.rfxtrx.markdown
index 294b1dc236..8fa51cac38 100644
--- a/source/_components/sensor.rfxtrx.markdown
+++ b/source/_components/sensor.rfxtrx.markdown
@@ -14,6 +14,7 @@ The `rfxtrx` platform support sensors that communicate in the frequency range of
First you have to set up your [rfxtrx hub.](/components/rfxtrx/)
The easiest way to find your sensors is to add this to your `configuration.yaml`:
+
```yaml
sensor:
platform: rfxtrx
@@ -28,6 +29,7 @@ Then when the sensor emits a signal it will be automatically added:
Here the name is 0a52080000301004d240259 and you can verify that it works from the frontend.
Then you should update your configuration to:
+
```yaml
sensor:
platform: rfxtrx
@@ -52,6 +54,7 @@ sensor:
Example configuration:
+
```yaml
# Example configuration.yaml entry
sensor:
diff --git a/source/_components/switch.rfxtrx.markdown b/source/_components/switch.rfxtrx.markdown
index ee66a922d7..f86f1b24f1 100644
--- a/source/_components/switch.rfxtrx.markdown
+++ b/source/_components/switch.rfxtrx.markdown
@@ -31,6 +31,7 @@ Push your remote and your device should be added:
Here the name is 0b11000102ef9f210010f70 and you can verify that it works from the frontend.
Then you should update your configuration to:
+
```yaml
switch:
platform: rfxtrx
@@ -40,6 +41,7 @@ switch:
```
Example configuration:
+
```yaml
# Example configuration.yaml entry
switch:
diff --git a/source/_components/thermostat.zwave.markdown b/source/_components/thermostat.zwave.markdown
index 3817564c5b..6c4d7de994 100644
--- a/source/_components/thermostat.zwave.markdown
+++ b/source/_components/thermostat.zwave.markdown
@@ -13,3 +13,9 @@ ha_release: 0.17
---
To get your Z-Wave thermostat working with Home Assistant, follow the instructions for the general [Z-Wave component](/components/zwave/).
+
+## NOTE
+If your thermostat support fan modes or different operating modes, it should be considered a hvac component, and will also be detected as one. Thermostat component does not support setting fan or operation mode. This is controlled via the hvac component.
+
+If the thermostat support different operationg modes, you will get one thermostat entity for each mode.
+These can be hidden with settings using the customize setting in the config file.
diff --git a/source/_components/zwave.markdown b/source/_components/zwave.markdown
index 248e7d8d36..6b7291efeb 100644
--- a/source/_components/zwave.markdown
+++ b/source/_components/zwave.markdown
@@ -38,13 +38,13 @@ Then get the OpenZWave files and switch to the `python3` branch:
$ git clone https://github.com/OpenZWave/python-openzwave.git
$ cd python-openzwave
$ git checkout python3
-$ PYTHON_EXEC=`which python3` make build
-$ sudo PYTHON_EXEC=`which python3` make install
+$ PYTHON_EXEC=$(which python3) make build
+$ sudo PYTHON_EXEC=$(which python3) make install
```
Instead of `make install`, you can alternatively build your own python-openzwave package which can be easily uninstalled:
-```$ sudo PYTHON_EXEC=`which python3` checkinstall --pkgname python-openzwave --pkgversion 1.0 --provides python-openzwave```
+```$ sudo PYTHON_EXEC=$(which python3) checkinstall --pkgname python-openzwave --pkgversion 1.0 --provides python-openzwave```
@@ -89,7 +89,7 @@ $ ls /dev/ttyACM*
```
-Depending on what's plugged into your USB ports, the name found above may change. You an lock in a name, such as `/dev/zwave`, by following [these instructions](http://hintshop.ludvig.co.nz/show/persistent-names-usb-serial-devices/).
+Depending on what's plugged into your USB ports, the name found above may change. You can lock in a name, such as `/dev/zwave`, by following [these instructions](http://hintshop.ludvig.co.nz/show/persistent-names-usb-serial-devices/).
{% active_link /getting-started/autostart-macos/ OS X %}
{% active_link /getting-started/autostart-synology/ Synology NAS %}
diff --git a/source/_posts/2016-05-18-why-we-use-polymer.markdown b/source/_posts/2016-05-18-why-we-use-polymer.markdown
new file mode 100644
index 0000000000..8f198665c1
--- /dev/null
+++ b/source/_posts/2016-05-18-why-we-use-polymer.markdown
@@ -0,0 +1,44 @@
+---
+layout: post
+title: "Why we use web components and Polymer"
+description: "In this blog post I talk about the reasoning to use web components and Polymer."
+date: 2016-05-18 00:09:00 +0000
+date_formatted: "May 18, 2016"
+author: Paulus Schoutsen
+author_twitter: balloob
+comments: true
+categories: Technology
+---
+
+I've been planning to write this post for a while now as we get questions like this a lot: _"Why does Home Assistant use Polymer? Why not React, Redux and what not?"_
+
+It's understandable, Polymer is quite the underdog in the world of web frameworks. A corporate backer does not guarantee popularity or an active community and this shows in the number of projects using Polymer.
+
+Still, [we use Polymer and it's awesome][demo]. To explain why, I'll be referencing the React workflow quite a bit, as they do a lot of things right, and show how it is done in Polymer.
+
+Polymer gives us components for the web, just like React, but based on web standards: [web components], [CSS variables]. These standards don't have wide browser support yet but it's being implemented by every major browser: It's the future. For now they are being polyfilled and that works just fine but in the future the Home Assistant web app will be able to run native in the browsers == fast.
+
+
+
+Polymer does not have the nice developer experience that one can have with React and the [React Dev Tools] but that's a matter of time. The developer tools in every browser have seen a lot of improvements recently and each improvement helps support for web components.
+
+Another major benefit of Polymer for Home Assistant is that we get [material design for free]. The material design components that come with Polymer have a very high quality. Google is using these components themselves and make sure that performance and accessibility using screen readers/keyboards are great. As an open source project, the more we can outsource, the better - so our contributors can focus on the core product: home automation.
+
+What about Flux, data management and interaction between components? It's actually pretty similar to React or any other component based framework. Flux-like architectures work with Polymer just like with React: whenever data changes it will update the attributes of a component which will propagate to the children. For Home Assistant we use [NuclearJS] with our [own Polymer bindings]. For data moving from child to parent the Polymer pattern is using DOM events instead of callbacks but the end result is the same. It is so similar in fact, that it took me only two hours to make a [React Native frontend for on top of our core][ha-rn].
+
+So what about Babel and ES2015? Also this is covered. Each web component exists of a HTML template and a JavaScript class to back it. Think of the HTML template as the render method in React. In Home Assistant we have the HTML templates import one another and have a separate chain for the JavaScript classes backing each component. This allows us to use Babel and NPM modules for the JavaScript part ([more info here][tools-js]). This does however come with the downside of other JS based frameworks: the browser blocks any painting while the JavaScript is being parsed instead of upgrading the website incrementally. This, however, is something we take for granted right now and hope that module bundlers will be able to solve this for us eventually. Tree shaking is a very promising improvement in this space.
+
+Most of this blog post has been comparing Polymer to React. In many ways Polymer is similar to React but it is not as far evolved yet. I like React but I do not see it as a technology that will be around forever. Given the trend of previous popular JS frameworks, React will probably get replaced by another framework that works even better. Web components however will be here forever as they are part of the HTML standard. And this gives us peace of mind at the virtual Home Assistant headquarters: we do not have to be afraid of having to rewrite our frontend just to stay relevant or because people don't want to include another dependency just to run this legacy piece.
+
+So there it is, the reason why we use Polymer.
+
+[web components]: https://www.w3.org/standards/techs/components#w3c_all
+[CSS variables]: https://www.w3.org/TR/css-variables/
+[React Dev Tools]: https://chrome.google.com/webstore/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi?hl=en
+[NuclearJS]: https://optimizely.github.io/nuclear-js/
+[own Polymer bindings]: http://paulusschoutsen.nl/blog/2015/07/using-polymer-with-flux-and-a-global-app-state/
+[ha-rn]: https://github.com/balloob/home-assistant-react-native-ios
+[tools-js]: https://github.com/home-assistant/home-assistant-polymer#building-the-app
+[material design for free]: https://elements.polymer-project.org/browse?package=paper-elements
+[demo]: https://home-assistant.io/demo
+
diff --git a/source/demo/frontend.html b/source/demo/frontend.html
index e21fd54597..ae2bbc3ad4 100644
--- a/source/demo/frontend.html
+++ b/source/demo/frontend.html
@@ -1,8 +1,8 @@