From f034194e74e51675ecb3e453a238079f3025fe77 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 1 Apr 2016 00:18:42 -0700 Subject: [PATCH 01/34] Hide update message on docker install instructions --- source/getting-started/index.markdown | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/source/getting-started/index.markdown b/source/getting-started/index.markdown index 19f691c215..42225c4f55 100644 --- a/source/getting-started/index.markdown +++ b/source/getting-started/index.markdown @@ -39,6 +39,12 @@ If you prefer to watch a video tutorial, [tktino](https://github.com/tktino) has - [Mac OS X](https://www.youtube.com/watch?v=hej6ipN86ls) - [Ubuntu 14.04](https://www.youtube.com/watch?v=SXaAG1lGNH0) +### {% linkable_title Updating %} + +To update Home Assistant to the latest release when available, run: `pip3 install --upgrade homeassistant` + +You have to restart Home Assistant (`hass` itself or with the help of the autostarting daemon if you use any) for the changes to take effect. + @@ -77,6 +83,11 @@ Running these commands will: There is also a [video tutorial](https://www.youtube.com/watch?v=GjzOXkPb7XE) created by [brusc](https://github.com/brusc). +### {% linkable_title Updating %} + +To update Home Assistant to the latest release when available, run: `pip3 install --upgrade homeassistant` + +You have to restart Home Assistant (`hass` itself or with the help of the autostarting daemon if you use any) for the changes to take effect. @@ -284,12 +295,6 @@ For additional help, in addition to this site, there are four sources: - [Gitter Chatroom](https://gitter.im/balloob/home-assistant) for general Home Assistant discussions and questions. - [GitHub Page](https://github.com/balloob/home-assistant/issues) for issue reporting. -### {% linkable_title Updating %} - -To update Home Assistant to the latest release run: `pip3 install --upgrade homeassistant` - -You have to restart Home Assistant (`hass` itself or with the help of the autostarting daemon if you use any) for the changes to take effect. - ### {% linkable_title What's next %} If you want to have Home Assistant start on boot, autostart instructions can be found [here](/getting-started/autostart/). From 674c9e26b0df046bb2e4ade9e1b0da27201546da Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 2 Apr 2016 20:57:07 -0700 Subject: [PATCH 02/34] Remove confusing optional comment. --- source/_components/script.markdown | 1 - 1 file changed, 1 deletion(-) diff --git a/source/_components/script.markdown b/source/_components/script.markdown index 119ec62933..d6c3be180c 100644 --- a/source/_components/script.markdown +++ b/source/_components/script.markdown @@ -24,7 +24,6 @@ script: event_data: name: Paulus message: is waking up - # Optional entity_id: device_tracker.paulus domain: light - alias: Bedroom lights on From 09132ed3ebd89ec9ab46fd71622bd27e27f1df0d Mon Sep 17 00:00:00 2001 From: Andreas Jacobsen Date: Sun, 3 Apr 2016 17:43:02 +0200 Subject: [PATCH 03/34] Update sensor.transmission.markdown Fixed typos --- source/_components/sensor.transmission.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/sensor.transmission.markdown b/source/_components/sensor.transmission.markdown index e484da70f1..1ab30b4332 100644 --- a/source/_components/sensor.transmission.markdown +++ b/source/_components/sensor.transmission.markdown @@ -12,7 +12,7 @@ ha_category: Sensor --- -The `trnasmission` platform allows you to monitor your downloads with [Transmission](http://www.transmissionbt.com/) from within Home Assistant and setup automation based on the information. +The `transmission` platform allows you to monitor your downloads with [Transmission](http://www.transmissionbt.com/) from within Home Assistant and setup automation based on the information. ```yaml # Example configuration.yaml entry @@ -48,7 +48,7 @@ To use the monitoring, your transmission client needs to allow remote access. If

-If everthing is setup correctly, the details will show up in the frontend. +If everything is setup correctly, the details will show up in the frontend.

From 38d2a91b261e9c4ff51e41a3528b03c7177994e1 Mon Sep 17 00:00:00 2001 From: emartec-ca Date: Sun, 3 Apr 2016 19:39:46 -0400 Subject: [PATCH 04/34] Update autostart.markdown Per the link systemd is used by default in Jessie instead of upstart (not specifically for the Pi but still): https://wiki.debian.org/FAQsFromDebianUser#systemd Running ps -p 1 -o comm= on my pi gives systemd as well. --- source/getting-started/autostart.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/getting-started/autostart.markdown b/source/getting-started/autostart.markdown index c10625a3b1..77b9cdc1e6 100644 --- a/source/getting-started/autostart.markdown +++ b/source/getting-started/autostart.markdown @@ -20,7 +20,7 @@ footer: true

-Many linux distributions use the Upstart system (or similar) for managing daemons. Typically, systems based on Debian 7 or previous use Upstart. This includes Ubuntu releases before 15.04 and all current Raspian releases. If you are unsure if your system is using Upstart, you may check with the following command: +Many linux distributions use the Upstart system (or similar) for managing daemons. Typically, systems based on Debian 7 or previous use Upstart. This includes Ubuntu releases before 15.04. If you are unsure if your system is using Upstart, you may check with the following command: ```bash $ ps -p 1 -o comm= From 2c303260d0111dfb82350f989de6c7f346f47242 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 4 Apr 2016 12:11:03 -0700 Subject: [PATCH 05/34] Add warning to YAMAHA media player platform. --- source/_components/media_player.yamaha.markdown | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/_components/media_player.yamaha.markdown b/source/_components/media_player.yamaha.markdown index 9888cf684b..15017644d6 100644 --- a/source/_components/media_player.yamaha.markdown +++ b/source/_components/media_player.yamaha.markdown @@ -11,6 +11,9 @@ logo: yamaha.png ha_category: Media Player --- +

+Some users are experiencing errors loading the frontend while using this platform. +

The `yamaha` platform allows you to control [Yamaha Network Receivers](http://usa.yamaha.com/products/audio-visual/av-receivers-amps/rx) from Home Assistant. From c2d52482f47384dcf6aae832e53f99a2fce140d4 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 5 Apr 2016 08:18:12 +0200 Subject: [PATCH 06/34] Minor updates --- source/_components/mqtt.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/_components/mqtt.markdown b/source/_components/mqtt.markdown index 718a44a3bb..c7015e3a59 100644 --- a/source/_components/mqtt.markdown +++ b/source/_components/mqtt.markdown @@ -54,11 +54,11 @@ Home Assistant contains an embedded MQTT broker. If no broker configuration is g | Port | 1883 | Protocol | 3.1.1 | User | homeassistant -| Password | Your API password +| Password | Your API (password)[/components/http/] | Websocket port | 8080

-This broker does not currently work with OwnTracks because of a protocol version issue. +This broker does not currently work with OwnTracks because of a protocol version issue.

If you want to customize the settings of the embedded broker, use `embedded:` and the values shown in the [HBMQTT Broker configuration](http://hbmqtt.readthedocs.org/en/latest/references/broker.html#broker-configuration). This will replace the default configuration. @@ -179,7 +179,7 @@ $ mosquitto_pub -h 127.0.0.1 -t home-assistant/switch/1/on -m "Switch is ON" If you are using the embeeded MQTT broker, the command looks a little different because you need to add the MQTT protocol version. ```bash -$ mosquitto_pub -V mqttv311 -t hello -m world +$ mosquitto_pub -V mqttv311 -t "hello" -m world ``` or if you are using a API password. @@ -212,7 +212,7 @@ $ mosquitto_sub -h 127.0.0.1 -v -t "home-assistant/#" For the embeeded MQTT broker the command looks like the sample below. ```bash -$ mosquitto_sub -V mqttv311 -t # -v +$ mosquitto_sub -v -V mqttv311 -t "#" ``` Add the username `homeassistant` and your API password if needed. From 9e86eb715b70e14a40fd7d56cee674b9e4f0719b Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 5 Apr 2016 08:43:31 +0200 Subject: [PATCH 07/34] Fix link --- source/_components/mqtt.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/mqtt.markdown b/source/_components/mqtt.markdown index c7015e3a59..46209c3554 100644 --- a/source/_components/mqtt.markdown +++ b/source/_components/mqtt.markdown @@ -54,7 +54,7 @@ Home Assistant contains an embedded MQTT broker. If no broker configuration is g | Port | 1883 | Protocol | 3.1.1 | User | homeassistant -| Password | Your API (password)[/components/http/] +| Password | Your API [password](/components/http/) | Websocket port | 8080

From 4eabd1aa99f666d32106f786817104a31dd39843 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 5 Apr 2016 00:20:06 -0700 Subject: [PATCH 08/34] Add blog post your hub should be local and open --- ...ntrol-home-automation-and-the-smart-home.markdown | 2 +- .../2016-01-19-perfect-home-automation.markdown | 12 ++++++------ ...02-11-classifying-the-internet-of-things.markdown | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/source/_posts/2014-12-26-home-control-home-automation-and-the-smart-home.markdown b/source/_posts/2014-12-26-home-control-home-automation-and-the-smart-home.markdown index c7a77710e3..1568f7828d 100644 --- a/source/_posts/2014-12-26-home-control-home-automation-and-the-smart-home.markdown +++ b/source/_posts/2014-12-26-home-control-home-automation-and-the-smart-home.markdown @@ -7,7 +7,7 @@ date_formatted: December 26, 2014 author: Paulus Schoutsen author_twitter: balloob comments: true -categories: Architecture +categories: Internet-of-Things --- The internet has been buzzing over the last year about home automation. A lot of different terms fly around like the internet of things, home automation and the smart home. diff --git a/source/_posts/2016-01-19-perfect-home-automation.markdown b/source/_posts/2016-01-19-perfect-home-automation.markdown index 17228746af..74fa832b03 100644 --- a/source/_posts/2016-01-19-perfect-home-automation.markdown +++ b/source/_posts/2016-01-19-perfect-home-automation.markdown @@ -7,12 +7,12 @@ date_formatted: "January 19, 2016" author: Paulus Schoutsen author_twitter: balloob comments: true -categories: Architecture +categories: Internet-of-Things --- People often ask me about my vision for Home Assistant. Before I can describe where I want to go with Home Assistant, I should first talk about how home automation would look in my ideal world. This will be the aim of this post. I’m not going to focus on protocols, networks or specific hubs. That's all implementation details. Instead, this post will focus on what is most important: the interaction between the users and their home. -### You should not have to adapt to technology. +### {% linkable_title You should not have to adapt to technology. %} When people start using home automation, they always experience home control first: being able to control devices in new ways using a phone or computer. They believe the future is now and their app will be their remote for their lives. They only focus on what they are getting, not on what they are losing. You install some light bulbs and all of a sudden you are no longer able to use the light switches. You'll arrive at home at night and have to pull out your phone, open the app, let it connect and finally you'll be able to turn on the light. All while turning the light on could have been a switch away. @@ -21,19 +21,19 @@ Yes, you can solve this with presence detection. What if your phone runs out of If you find that using your new home devices is cumbersome, the promise of home automation technology has failed you. Your lights should work with both a switch (or button) at the entrance of your room and via presence detection. Honestly, there are hardly any valid use cases for being able to control lights from your phone except for showing off. -### You are not the only user of your home automation. +### {% linkable_title You are not the only user of your home automation. %} People tend to forget that they are not the only ones in their home. As the developer of your house you're enthusiastic about the possibilities and are willing to overlook flaws. Chances are very high that the other people in your household have different hobbies and just want to mind their own business. This means that everything you automate has to work flawlessly. If you successfully manage to cause a response to some stimulus 90% of the time, you’re going to have a disproportionately poor experience 10% of the time. A common automation that fits this pattern is to fade the lights when you start watching a movie or series in the living room. It only works if everyone is watching. -### Limit the impact of false positives and negatives. +### {% linkable_title Limit the impact of false positives and negatives. %} With every automation, you always have to think: what will be the impact if it doesn’t work? Home automation is composed of many different systems by many different vendors that speak many different protocols: things will go wrong. It’s up to you to make sure that they have a limited impact when they fail. Ideally, devices should fall back to a pre-smart home experience. A Philips Hue bulb will act like a standard white light if turned on/off using a normal switch or when not connected to a hub. If things get worse when your system is out of order, your users will revolt. Take for example the Nest thermostat that [had a bug in the beginning of January][nest-bug] which caused it to stop heating the house, yikes! [nest-bug]: http://www.nytimes.com/2016/01/14/fashion/nest-thermostat-glitch-battery-dies-software-freeze.html -### The perfect app is no app. +### {% linkable_title The perfect app is no app. %} Home automation should blend with your current workflow, not replace it. For most devices, there is no faster way to control most devices than how you are already doing it today. Most of the time, the best app is no app. The only interface that can be more convenient, and is accessible for visitors of your home of all ages is a voice interface. The industry has realized this too and there are some major players focussing on voice interaction. Take Apple for example: the only way to control your HomeKit devices is with Siri. Amazon has taken it one step further with the Amazon Echo, providing an always-listening connected speaker/microphone for the living room. I expect a lot more companies to join this segment in 2016. @@ -41,7 +41,7 @@ Voice interfaces are not perfect either. The speed at which you can issue comman This however doesn’t mean there isn’t a place for apps, there definitely is. They are perfectly well-suited for checking in while you’re away, browsing the state changes of your house or making the lights go all funky when there are kids visiting. -### Your system should run at home, not in the cloud. +### {% linkable_title Your system should run at home, not in the cloud. %} The cloud is a magical thing. Somewhere in the world there are computers collecting the data that your house generates, testing them against your automation rules and sending commands back when needed. The cloud will receive updates and improve itself over time so it is able to serve you better. Until it’s not. There are many reasons why your home might lose its connection to the cloud. The internet can stop working, an update might have gone wrong or the servers running the cloud crash. diff --git a/source/_posts/2016-02-11-classifying-the-internet-of-things.markdown b/source/_posts/2016-02-11-classifying-the-internet-of-things.markdown index 19abcaf50c..e346e35216 100644 --- a/source/_posts/2016-02-11-classifying-the-internet-of-things.markdown +++ b/source/_posts/2016-02-11-classifying-the-internet-of-things.markdown @@ -7,7 +7,7 @@ date_formatted: "February 12, 2016" author: Paulus Schoutsen author_twitter: balloob comments: true -categories: Architecture +categories: Internet-of-Things og_image: /images/blog/2016-02-classifying-internet-of-things/social.png --- From 4d9591cd959f0e2759bf03893953cb8d7de34f09 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 5 Apr 2016 00:27:50 -0700 Subject: [PATCH 09/34] Actually add blog post :+1: --- ...your-hub-should-be-local-and-open.markdown | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 source/_posts/2016-04-04-your-hub-should-be-local-and-open.markdown diff --git a/source/_posts/2016-04-04-your-hub-should-be-local-and-open.markdown b/source/_posts/2016-04-04-your-hub-should-be-local-and-open.markdown new file mode 100644 index 0000000000..653665fbeb --- /dev/null +++ b/source/_posts/2016-04-04-your-hub-should-be-local-and-open.markdown @@ -0,0 +1,28 @@ +--- +layout: post +title: "Your hub should be local and open" +description: "Running a hub that depends on the cloud is a risk that can cost you your home automation." +date: 2016-04-04 21:11:00 -0700 +date_formatted: "April 5, 2016" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Internet-of-Things +--- + +Today the news spread that Google will be [shutting down the Revolv hubs][medium-revolv]. And shutting down here doesn't mean they stop selling or supporting them - no, they are sending an update to each hub to turn your perfectly fine home automation hub into a useless piece of plastic. The fact that this seemed like a good idea by Google astonishes me. If anything, they should have gone the same route as [ninjasphere]: open it all up and let people decide on the fate of their _own_ hub. + +I've said it [before][perfect-cloud] but I'll repeat it again: + +

+The cloud should be treated as an extension to your smart home instead of running it. +
+ +Your hub should not be affected when your internet breaks down or the company that sold you your hub goes out of business. It should work locally so that it can continue to work even long after the vendor goes out of business or decides to kill it. Preferably, your hub should also be open so that the community can take over development after the vendor stops caring. + +Unless you can afford losing a product here and there, be cautious when buying IoT products that depend on the cloud from companies that are not well established. The chances are high that they go bankrupt or get acquired and closed. This however is easier said than done as [Gartner] predicts that by 2017, 50 percent of IoT solutions will originate in startups that are less than three years old. + +[medium-revolv]: https://medium.com/@arlogilbert/the-time-that-tony-fadell-sold-me-a-container-of-hummus-cb0941c762c1#.rmppks86a +[ninjasphere]: https://discuss.ninjablocks.com/t/ninja-blocks-whats-been-happening-whats-happening-next/3608 +[perfect-cloud]: /blog/2016/01/19/perfect-home-automation/#your-system-should-run-at-home-not-in-the-cloud +[Gartner]: http://www.gartner.com/newsroom/id/2869521 From daf1df16b9d8eacfc4890578e730b1f661814a8d Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 6 Apr 2016 16:54:58 +0200 Subject: [PATCH 10/34] Add twitter and google+ --- source/help/index.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/help/index.markdown b/source/help/index.markdown index 14c2aecbac..c92de07251 100644 --- a/source/help/index.markdown +++ b/source/help/index.markdown @@ -15,6 +15,8 @@ There are various ways to get in touch with the Home Assistant community. It doe - [Forum](https://community.home-assistant.io/) - [Gitter Chatroom](https://gitter.im/balloob/home-assistant) for general Home Assistant discussions and questions. + - Follow us on [Twitter](https://twitter.com/home_assistant), use @home_assistant + - Join the [Google+ community](https://plus.google.com/u/0/b/110560654828510104551/communities/106562234893511202708) ### {% linkable_title Bugs, Feature requests, and alike %} From 0aee5cac193e91dc219edb800bb40e24369ddf34 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 6 Apr 2016 22:15:48 +0200 Subject: [PATCH 11/34] Minor updates and add link to let's encrypt blog post --- source/getting-started/configuration.markdown | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/source/getting-started/configuration.markdown b/source/getting-started/configuration.markdown index ca1ae21f43..bdf0422667 100644 --- a/source/getting-started/configuration.markdown +++ b/source/getting-started/configuration.markdown @@ -11,7 +11,7 @@ footer: true Home Assistant will create a configuration folder when it is run for the first time. The location of the folder differs between operating systems: on OS X/Linux it's `~/.homeassistant` and on Windows it's `%APPDATA%/.homeassistant`. If you want to use a different folder for configuration, run `hass --config path/to/config`. -Inside your configuration folder is the file `configuration.yaml`. This is the main file that contains which components will be loaded and what their configuration is. +Inside your configuration folder is the file `configuration.yaml`. This is the main file that contains which components will be loaded and what their configuration is. This file contains YAML code, which is explained briefly in [the configuration troubleshooting page](/getting-started/troubleshooting-configuration/). An example configuration file is located [here](https://github.com/balloob/home-assistant/blob/master/config/configuration.yaml.example). When launched for the first time, Home Assistant will write a default configuration enabling the web interface and device discovery. It can take up to a minute for your devices to be discovered and show up in the interface. @@ -19,7 +19,7 @@ When launched for the first time, Home Assistant will write a default configurat If you run into trouble while configuring Home Assistant, have a look at [the configuration troubleshooting page](/getting-started/troubleshooting-configuration/).

- You will have to restart Home Assistant for changes in configuration.yaml to take effect. +You will have to restart Home Assistant for changes in configuration.yaml to take effect.

### {% linkable_title Setting up the basic info %} @@ -28,7 +28,7 @@ By default Home Assistant will try to detect your location and will automaticall ```yaml homeassistant: - # Omitted values in this section will be auto detected using freegeoip.net + # Omitted values in this section will be auto detected using freegeoip.io # Location required to calculate the time the sun rises and sets latitude: 32.87336 @@ -47,7 +47,7 @@ homeassistant: ### {% linkable_title Password protecting the web interface %} -The first thing you want to add is a password for the web interface. Use your favourite text editor to open the file `/config/configuration.yaml` and add the following to the `http` section: +The first thing you want to add is a password for the web interface. Use your favourite text editor to open the file `configuration.yaml` and add the following to the `http` section: ```yaml http: @@ -68,4 +68,6 @@ To make Home Assistant accessible while away from home, you will have to setup p Some Internet service providers will only offer dynamic IPs. This can cause you to be unable to access Home Assistant while away. You can solve this by using a free Dynamic DNS service like [DuckDNS](https://www.duckdns.org/). +You should definitely consider to encrypt your traffic if you are accessing your Home Assistant installation from abroad. For details please check the [Set up encryption using Let's Encrypt](/blog/2015/12/13/setup-encryption-using-lets-encrypt/) blog post. + ### [Next step: Setting up devices »](/getting-started/devices/) From bb89689d089eb5809bb067995b42e1d6bac7701a Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 7 Apr 2016 08:35:51 +0200 Subject: [PATCH 12/34] Add blog post about a static website * Add blog post about a static website * Update timestamp * Update file name --- .../_posts/2016-04-07-static-website.markdown | 31 ++++++++++++++++++ .../blog/2016-04-display/ha-display.png | Bin 0 -> 51840 bytes 2 files changed, 31 insertions(+) create mode 100644 source/_posts/2016-04-07-static-website.markdown create mode 100644 source/images/blog/2016-04-display/ha-display.png diff --git a/source/_posts/2016-04-07-static-website.markdown b/source/_posts/2016-04-07-static-website.markdown new file mode 100644 index 0000000000..5ec90e23a8 --- /dev/null +++ b/source/_posts/2016-04-07-static-website.markdown @@ -0,0 +1,31 @@ +--- +layout: post +title: "Static website" +description: "Serving a static website with Home Assistant." +date: 2016-04-07 06:28:00 +date_formatted: "April 7, 2016" +author: Fabian Affolter +author_twitter: fabaff +comments: true +categories: How-To +og_image: /images/blog/2016-04-display/ha-display.png +--- + +The frontend of Home Assistant is served with the help of a local web server. If you have [customized](/getting-started/devices/#customizing-devices-and-services) your installation you already use this functionality. The content of your folder `www` in your Home Assistant configuration directory (`.homeassistant`) is available under `/local` (eg. [https://localhost:8123/local](https://localhost:8123/local)). + +But there is more you can do! You can not only host images for customization there but HTML files or even web applications including CSS and Javascript. + +

+ +

+ + + +In the past the buzz word "Smart mirror" was used a couple of times in our [chatroom](https://gitter.im/balloob/home-assistant) and even made it into the [issue tracker](https://github.com/balloob/home-assistant/issues/1392). The existing solutions ([Smart mirror](http://docs.smart-mirror.io/), [MagicMirror](http://michaelteeuw.nl/tagged/magicmirror), and [HomeMirror](https://github.com/HannahMitt/HomeMirror)) seems to be overkill if you already have Home Assistant running somewhere in your house or apartment. Why not simple display a web page served by Home Assistant on the tablet? No app and no Raspberry Pi running in the background. + +There are plenty of ways to achieve this...[RESTful API](/developers/rest_api/), [Python API](/developers/python_api/), or one of the [history components](/components/#history). If it is to be a web page I'm using the [MQTT Eventstream component](/components/mqtt_eventstream/) and [mqttws31.js](http://git.eclipse.org/c/paho/org.eclipse.paho.mqtt.javascript.git/tree/src). + +The [HBMQTT](https://pypi.python.org/pypi/hbmqtt) broker provides websockets support for MQTT and mqttws31.js included in web page gives you access to the MQTT messages. It's a matter of minutes. OK, it took a little longer because I'm not a Javascript guy to create the software part that will show details about your environment. The source is available at [https://github.com/fabaff/home-assistant-display](https://github.com/fabaff/home-assistant-display) and the screenshot above shows the result. I guess that every person who is familiar with Javascript would be able to reduce the amount of code and to make it more flexible. Well, it's a only prototype and showcase to include an image in this blog post. + +I hope that this little article could give you an idea of extending Home Assistant in an unconventional way. + diff --git a/source/images/blog/2016-04-display/ha-display.png b/source/images/blog/2016-04-display/ha-display.png new file mode 100644 index 0000000000000000000000000000000000000000..b2c0e9d4cccb39eb86fc1ea18d69921c430046f4 GIT binary patch literal 51840 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 Date: Thu, 7 Apr 2016 22:41:09 +0200 Subject: [PATCH 13/34] Add example for converting units --- source/_components/sensor.template.markdown | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/source/_components/sensor.template.markdown b/source/_components/sensor.template.markdown index a792cb1cda..27f78dead2 100644 --- a/source/_components/sensor.template.markdown +++ b/source/_components/sensor.template.markdown @@ -53,7 +53,7 @@ sensor: unit_of_measurement: '°' ``` -### {% linkable_title Multi line example with an if test %} +### {% linkable_title Multi line example with an if test %} This example shows a multiple line template with and is test. It looks at a sensing switch and shows on/off in the frontend. @@ -77,4 +77,20 @@ sensor: ``` (please note the blank line to close the multi-line template) +### {% linkable_title Change the unit of measurment %} +With a template sensor it's easy to convert given values into others if the unit of measurement don't fit your needs. + +```yaml +sensor: + platform: template + sensors: + transmission_down_speed_kbps: + value_template: {% raw %}'{{ states.sensor.transmission_down_speed.state | multiply(1024) }}'{% endraw %} + friendly_name: 'Transmission Down Speed' + unit_of_measurement: 'kB/s' + transmission_up_speed_kbps: + value_template: {% raw %}'{{ states.sensor.transmission_up_speed.state | multiply(1024) }}'{% endraw %} + friendly_name: 'Transmission Up Speed' + unit_of_measurement: 'kB/s' +``` From 7b2036378ed5a4181a2f4c6d2b037d9b95f267ca Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 8 Apr 2016 10:30:28 +0200 Subject: [PATCH 14/34] Add initial docs for SSE --- source/developers/server_sent_events.markdown | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 source/developers/server_sent_events.markdown diff --git a/source/developers/server_sent_events.markdown b/source/developers/server_sent_events.markdown new file mode 100644 index 0000000000..b8f14537fc --- /dev/null +++ b/source/developers/server_sent_events.markdown @@ -0,0 +1,47 @@ +--- +layout: page +title: "Server-sent events" +description: "Home Assistant Server-sent events documentation" +date: 2016-04-08 07:00 +sidebar: false +comments: false +sharing: true +footer: true +--- + +The [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events) feature is a one-way channel from your Home Assistant server to a client which is acting as a consumer. For bi-directional communication check the [RESTful API](/developers/rest_api/) and [Python API](/developers/python_api/). + +The URI that is generating the data is `/api/stream`. + +A requirement on the client-side is existing support for the [EventSource](https://developer.mozilla.org/en-US/docs/Web/API/EventSource) interface. + +There are various ways to access the stream. One is `curl`: + +```bash +$ curl -X GET -H "x-ha-access: YOUR_PASSWORD" http://localhost:8123/api/stream +``` + +For more comfort put the HTML snippet below in a file `sse.html` in your `www` folder of your Home Assistant configuration directory (`.homeassistant`) + +```html + + + +

Getting Home Assistant server events

+
+ + + +``` + +Visit [https://localhost:8123/local/sse.html](https://localhost:8123/local/sse.html) to see the stream of events. + +### {% linkable_title Example %} + +The [home-assistant-sse](https://github.com/fabaff/home-assistant-sse) repository contains an more advanced example. + From 7fcca47d19ef32f1fc0412308665074a5c4aa8c9 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 8 Apr 2016 10:30:54 +0200 Subject: [PATCH 15/34] Add SSE --- source/_includes/custom/navigation.html | 2 +- source/developers/api.markdown | 10 ++++++---- source/developers/index.markdown | 1 + 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/source/_includes/custom/navigation.html b/source/_includes/custom/navigation.html index 2653839f67..7f90d7cc0b 100644 --- a/source/_includes/custom/navigation.html +++ b/source/_includes/custom/navigation.html @@ -24,7 +24,7 @@
  • Adding Platform Support
  • -
  • API
  • +
  • API and SSE
  • Credits
  • diff --git a/source/developers/api.markdown b/source/developers/api.markdown index 2b69960b01..dd2edce9be 100644 --- a/source/developers/api.markdown +++ b/source/developers/api.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "Home Assistant API" -description: "Home Assistant API documentation" +title: "Home Assistant API/SSE" +description: "Home Assistant API/SSE documentation" date: 2015-05-11 12:00 sidebar: false comments: false @@ -9,8 +9,10 @@ sharing: true footer: true --- -Home Assistant is offering a RESTful API and a Python API for convenient access to -a Home Assistant instance over HTTP. +Home Assistant is offering a RESTful API and a Python API for convenient access to a Home Assistant instance over HTTP. - [RESTful API](/developers/rest_api/) - [Python API](/developers/python_api/) + +There is also support for [server-sent events](/developers/server_sent_events). + diff --git a/source/developers/index.markdown b/source/developers/index.markdown index 1b1e571000..158f32285a 100644 --- a/source/developers/index.markdown +++ b/source/developers/index.markdown @@ -61,5 +61,6 @@ $ pip3 install tox - [Creating a custom component](/developers/creating_components/) - [Adding support for a new platform](/developers/add_new_platform/) - [Rest API](/developers/api/) +- [Server-sent events](/developers/server_sent_events/) - [Website](/developers/website/) From 823e6207d3c04455411689c530aaf3ba1a46fd1b Mon Sep 17 00:00:00 2001 From: Lindsay Ward Date: Fri, 8 Apr 2016 23:39:02 +1000 Subject: [PATCH 16/34] Made README and website contributions match, added more detail to website contribution setup details, updated forum link, re-organised getting started and troubleshooting with respect to YAML --- README.markdown | 44 ++----------- source/developers/index.markdown | 26 ++++---- source/developers/website.markdown | 23 +++++-- source/getting-started/configuration.markdown | 66 +++++++++++++++++-- source/getting-started/index.markdown | 11 ++-- .../troubleshooting-configuration.markdown | 44 ++----------- source/help/index.markdown | 6 +- 7 files changed, 110 insertions(+), 110 deletions(-) diff --git a/README.markdown b/README.markdown index d7531a6705..3dc2d53651 100644 --- a/README.markdown +++ b/README.markdown @@ -1,31 +1,10 @@ # Home Assistant website -This is the source for the [Home Assistant](https://github.com/balloob/home-assistant) website available at [Home-Assistant.io](https://home-assistant.io). All commits made to the `master` branch will be automatically pushed to production. - -Please point your Pull Request (PR) at the `next` branch. - -## Jekyll project to generate and deploy - -| Command | Action | -|---|---| -| `rake preview` | Preview site on [http://127.0.0.1:4000](http://127.0.0.1:4000) -| `rake generate` | Generate new version of the site -| `rake deploy` | Deploy a new version of the site - -_Generating and deploying is no longer necessary as we now have auto-deply._ +This is the source for the [Home-Assistant.io website](https://home-assistant.io) for the [Home Assistant project](https://github.com/balloob/home-assistant) ## Setup -_You need to have Ruby installed._ - -- [Ruby installation instructions](https://www.ruby-lang.org/en/documentation/installation/) -- For Fedora and CentOS check the last section of this file. - -```bash -$ git clone --recursive https://github.com/balloob/home-assistant.io.git -$ cd home-assistant.io -$ bundle -``` +Setting up to contribute to documentation and the process for submitting pull requests is [explained here](https://home-assistant.io/developers/website/). ## Create a new blog post @@ -39,23 +18,8 @@ $ rake new_post["title"] $ rake preview ``` -The preview is now available on [http://127.0.0.1:4000](http://127.0.0.1:4000). +This makes the preview available on [http://127.0.0.1:4000](http://127.0.0.1:4000). -## Steps for the deployment of the site - -All developers with write access to the repositories are able to deploy the website. The deploy process is fully automated with `rake generate && rake deploy`. - -```bash -$ git submodule update --init -$ cd _deploy -$ git fetch -$ git pull origin gh-pages -$ cd .. -$ rake generate && rake deploy -``` -```bash -TZ=UTC rake generate && rake deploy -``` ### Setup on Fedora and CentOS On Fedora > 22 or CentOS 7.1.1503 Ruby is not available by default. Please take the notes here as a little guide for the Ruby installation process. @@ -76,4 +40,4 @@ The last command will give you something like this `ruby 2.2.3p173 (2015-08-18 r $ gem install bundler ``` -Now please follow the Setup instructions above. +Now you can follow the [setup instructions](https://home-assistant.io/developers/website/). diff --git a/source/developers/index.markdown b/source/developers/index.markdown index 1b1e571000..e292c6e801 100644 --- a/source/developers/index.markdown +++ b/source/developers/index.markdown @@ -9,17 +9,20 @@ sharing: true footer: true --- -Home Assistant is built from the ground up to be easily-extensible by other developers using components. It uses [Python 3](https://www.python.org/) for the backend and [Polymer (Webcomponents)](https://www.polymer-project.org/) for the frontend. +Home Assistant is built from the ground up to be easily-extensible by other developers using components. It uses [Python 3](https://www.python.org/) for the backend and [Polymer (Web components)](https://www.polymer-project.org/) for the frontend. Home Assistant is open-source and MIT licensed. The source can be found here: - - [home-assistant](https://github.com/balloob/home-assistant) - Python server-backend - - [home-assistant-js](https://github.com/balloob/home-assistant-js) - javascript-backend powering the client + - [home-assistant](https://github.com/balloob/home-assistant) - Python server backend + - [home-assistant-js](https://github.com/balloob/home-assistant-js) - JavaScript backend powering the client - [home-assistant-polymer](https://github.com/balloob/home-assistant-polymer) - Polymer UI ### {% linkable_title Starting development %} -You will need to set up a development environment if you want to start developing a new feature or component for Home Assistant. Please follow these steps to perform it. Visit the [the Home Assistant repository](https://github.com/balloob/home-assistant) first and click fork in the top right. +You will need to set up a development environment if you want to start developing a new feature or component for Home Assistant. Please follow these steps to get setup. +Visit the [the Home Assistant repository](https://github.com/balloob/home-assistant) first and click fork in the top right. + +We suggest that you setup a [virtual environment](https://docs.python.org/3.4/library/venv.html) aka `venv` before running the setup script. ```bash $ git clone https://github.com/YOUR_GIT_USERNAME/home-assistant.git @@ -28,13 +31,17 @@ $ git remote add upstream https://github.com/balloob/home-assistant.git $ script/setup ``` -We suggest that you setup a [virtual environment](https://docs.python.org/3.4/library/venv.html) aka `venv` before running the setup script. +Testing your work requires `tox` to be installed: + +```bash +$ pip3 install tox +``` After following these steps, running `hass` will invoke your local installation. ### {% linkable_title Submitting improvements %} -Improvements to Home Assistant should be submitted one feature at a time using Github pull requests. +Improvements to Home Assistant should be submitted one feature at a time using GitHub [pull requests](https://help.github.com/articles/using-pull-requests). 1. From your fork, create a new branch to hold your changes `git checkout -b some-feature` @@ -44,15 +51,10 @@ Improvements to Home Assistant should be submitted one feature at a time using G 4. Commit the changes `git add .` `git commit -m "Added some-feature"` - 5. Push your commited changes back to your fork on GitHub + 5. Push your committed changes back to your fork on GitHub `git push origin HEAD` 6. Follow [these steps](https://help.github.com/articles/creating-a-pull-request/) to create your pull request. -Note that the above requires `tox` to be installed. If you don't have it, do this: - -```bash -$ pip3 install tox -``` ### {% linkable_title Further reading %} diff --git a/source/developers/website.markdown b/source/developers/website.markdown index fac5d007e1..3a5bead060 100644 --- a/source/developers/website.markdown +++ b/source/developers/website.markdown @@ -9,19 +9,28 @@ sharing: true footer: true --- -The home of Home Assistant is [https://home-assistant.io](https://home-assistant.io). This is the place where we provide documentation and additional details about Home Assistant for end users and developers. +The website you're reading now is the home of Home Assistant: [https://home-assistant.io](https://home-assistant.io). This is the place where we provide documentation and additional details about Home Assistant for end users and developers. -home-assistant.io is using the [Octopress](http://octopress.org/) framework for [Jekyll](http://github.com/mojombo/jekyll). To get more details, please checkout the [documentation](http://octopress.org/docs/). That means that creating a new page is simple. The pages are written in [markdown](http://daringfireball.net/projects/markdown/), you don't need to care about HTML or alike. +home-assistant.io uses the [Octopress](http://octopress.org/) framework for [Jekyll](http://github.com/mojombo/jekyll). To get more details, please checkout the [Octopress documentation](http://octopress.org/docs/). +That means that creating a new page is simple. The pages are written in [markdown](http://daringfireball.net/projects/markdown/); you don't need to care about HTML or the like. -To work on the website the process is no different to working on Home Assistant itself. +The process for working on the website is no different from working on Home Assistant itself. -- Fork the home-assistant.io [git repository](https://github.com/balloob/home-assistant.io). +To test your changes locally, you need to install the **Ruby** dependencies (gems): + +- [Install Ruby](https://www.ruby-lang.org/en/documentation/installation/) if you don't have it already. +- Install `bundler`, which is a dependency manager for Ruby: `gem install bundler` +- In your home-assistant.io root directory, run `bundle` to install the gems you need. + +Then you can work on the documentation: + +- Fork home-assistant.io [git repository](https://github.com/balloob/home-assistant.io). - Create/edit/update a page in the directory `source/_components/` for your platform/component. -- To test changes to home-assistant.io locally, run ``rake preview`` and navigate to http://127.0.0.1:4000. +- Test your changes to home-assistant.io locally: run ``rake preview`` and navigate to [http://127.0.0.1:4000](http://127.0.0.1:4000) - Create a Pull Request (PR) against the **next** branch of home-assistant.io if your documentation is for a new feature, platform, or component. - Create a Pull Request (PR) against the **master** branch of home-assistant.io if you fix stuff, create Cookbook entries, or expand existing documentation. -For a platform page it would be the fastest way to make a copy of an existing page and edit it. The [component overview](/components/) is generated automatically, so there is no need to add a link to that your page. +For a platform page, the fastest way is to make a copy of an existing page and edit it. The [component overview](/components/) is generated automatically, so there is no need to add a link to your page. ### {% linkable_title Code %} To take advantage of the built-in features of Octopress to display code snippets, just use the default markdown syntax. Please use `$` and `#` if it's a command and to differ from output. @@ -37,7 +46,7 @@ If you want to display line numbers, add the following snippet somewhere on your ``` ### {% linkable_title Images, icons, and logos %} -The images which are displayed on the pages are stored in various directories according their purpose. +The images which are displayed on the pages are stored in various directories according to their purpose. | Type | Location | | :----------- |:----------------------------------------------| diff --git a/source/getting-started/configuration.markdown b/source/getting-started/configuration.markdown index ca1ae21f43..d1f4752a2d 100644 --- a/source/getting-started/configuration.markdown +++ b/source/getting-started/configuration.markdown @@ -9,19 +9,75 @@ sharing: true footer: true --- -Home Assistant will create a configuration folder when it is run for the first time. The location of the folder differs between operating systems: on OS X/Linux it's `~/.homeassistant` and on Windows it's `%APPDATA%/.homeassistant`. If you want to use a different folder for configuration, run `hass --config path/to/config`. +Home Assistant will create a configuration folder when it is run for the first time. The location of the folder differs between operating systems: on OS X and Linux it's `~/.homeassistant` and on Windows it's `%APPDATA%/.homeassistant`. If you want to use a different folder for configuration, run `hass --config path/to/config`. Inside your configuration folder is the file `configuration.yaml`. This is the main file that contains which components will be loaded and what their configuration is. -This file contains YAML code, which is explained briefly in [the configuration troubleshooting page](/getting-started/troubleshooting-configuration/). An example configuration file is located [here](https://github.com/balloob/home-assistant/blob/master/config/configuration.yaml.example). +This file contains YAML code, which is explained briefly below. +[An example configuration file is located here](https://github.com/balloob/home-assistant/blob/master/config/configuration.yaml.example). -When launched for the first time, Home Assistant will write a default configuration enabling the web interface and device discovery. It can take up to a minute for your devices to be discovered and show up in the interface. +When launched for the first time, Home Assistant will write a default configuration file enabling the web interface and device discovery. It can take up to a minute for your devices to be discovered and show up in the user interface. If you run into trouble while configuring Home Assistant, have a look at [the configuration troubleshooting page](/getting-started/troubleshooting-configuration/). +

    - You will have to restart Home Assistant for changes in configuration.yaml to take effect. + You will have to restart Home Assistant each time you make changes in configuration.yaml in order for these to take effect.

    +### {% linkable_title YAML %} + +Home Assistant uses the [YAML](http://yaml.org/) syntax for configuration. YAML might take a while to get used to but is really powerful in allowing you to express complex configurations. + +For each component that you want to use in Home Assistant, you add code in your `configuraton.yaml` file to specify its settings. +Example, the following code specifies that you want to use the [notify component](/components/notify) with the [pushbullet platform](/components/notify.pushbullet). + + +```yaml +notify: + platform: pushbullet + api_key: "o.1234abcd" + name: pushbullet +``` + +- A **component** provides the core logic for some functionality (like `notify` provides sending notifications). +- A **platform** makes the connection to a specific software or hardware platform (like `pushbullet` works with the service from pushbullet.com). + +The basics of YAML syntax are block collections and mappings containing key-value pairs. +Each item in a collection starts with a `-` while mappings have the format `key: value`. If you specify duplicate keys, the last value for a key is used. + +Note that indentation is an important part of specifying relationships using YAML. Things that are indented are nested "inside" things that are one level higher. So in the above example, `platform: pushbullet` is a property of (nested inside) the `notify` component. +Getting the right indentation can be tricky if you're not using an editor with a fixed width font. Tabs are not allowed to be used for indentation. Convention is to use 2 spaces for each level of indentation. + +Lines that start with **#** are comments and are ignored by the system. + +The next example shows an [input_select](/components/input_select) component that uses a block collection for the options values. +The other properties (like name) are specified using mappings. Note that the second line just has `threat:` with no value on the same line. Here threat is the name of the input_select and the values for it are everything nested below it. + +```yaml +input_select: + threat: + name: Threat level +# A collection is used for options + options: + - 0 + - 1 + - 2 + - 3 + initial: 0 +``` + +The following example shows nesting a collection of mappings in a mapping. +In Home Assistant, this would create two sensors that each use the MQTT platform but have different values for their `state_topic` (one of the properties used for MQTT sensors). + +```yaml +sensor: + - platform: mqtt + state_topic: sensor/topic + - platform: mqtt + state_topic: sensor2/topic +``` + + ### {% linkable_title Setting up the basic info %} By default Home Assistant will try to detect your location and will automatically select a temperature unit and time zone based on your location. You can overwrite this by adding the following information to your `configuration.yaml`: @@ -47,7 +103,7 @@ homeassistant: ### {% linkable_title Password protecting the web interface %} -The first thing you want to add is a password for the web interface. Use your favourite text editor to open the file `/config/configuration.yaml` and add the following to the `http` section: +The first thing you will want to add is a password for the web interface. Use your favourite text editor to open `configuration.yaml` and edit the `http` section: ```yaml http: diff --git a/source/getting-started/index.markdown b/source/getting-started/index.markdown index d8d95d3c10..ffe13cf36d 100644 --- a/source/getting-started/index.markdown +++ b/source/getting-started/index.markdown @@ -278,21 +278,22 @@ $ python3/pip3 install --upgrade homeassistant If you run into any issues, please see [the troubleshooting page](/getting-started/troubleshooting/). It contains solutions to many of the more commonly encountered issues. -For additional help, in addition to this site, there are four sources: +In addition to this site, check out these sources for additional help: - - [Forum](https://automic.us/forum/) - - [Gitter Chatroom](https://gitter.im/balloob/home-assistant) for general Home Assistant discussions and questions. + - [Forum](https://community.home-assistant.io) for Home Assistant discussions and questions. + - [Gitter Chat Room](https://gitter.im/balloob/home-assistant) for real-time chat about Home Assistant. - [GitHub Page](https://github.com/balloob/home-assistant/issues) for issue reporting. ### {% linkable_title Updating %} -To update Home Assistant to the latest release run: `pip3 install --upgrade homeassistant` +To update Home Assistant to the latest release run: +`pip3 install --upgrade homeassistant` You have to restart Home Assistant (`hass` itself or with the help of the autostarting daemon if you use any) for the changes to take effect. ### {% linkable_title What's next %} -If you want to have Home Assistant start on boot, autostart instructions can be found [here](/getting-started/autostart/). +If you want to have Home Assistant start on boot, [autostart instructions can be found here](/getting-started/autostart/). To see what Home Assistant can do, launch demo mode: `hass --demo-mode` or visit the [demo page](/demo). diff --git a/source/getting-started/troubleshooting-configuration.markdown b/source/getting-started/troubleshooting-configuration.markdown index 5b3420d146..f21209385c 100644 --- a/source/getting-started/troubleshooting-configuration.markdown +++ b/source/getting-started/troubleshooting-configuration.markdown @@ -15,49 +15,17 @@ Before we dive into common issues, make sure you know where your configuration d Whenever a component or configuration option results in a warning, it will be stored in `home-assistant.log` in the configuration directory. This file is reset on start of Home Assistant. -### {% linkable_title YAML %} - -Home Assistant uses the [YAML](http://yaml.org/) syntax for configuration. YAML can be confusing to start with but is really powerful in allowing you to express complex configurations. - -The basics of YAML are block collections and mappings containing key-value pairs. Collections will have each item start with a `-` while mappings will have the format `key: value`. The last value for a key is used in case you specify a duplicate key. -Note that the indentation is an important part of specifying relationships using YAML. - -```yaml -# A collection -- hello -- how -- are -- you - -# Lookup mapping -beer: ice cold # <-- will be ignored because key specified twice -beer: warm -wine: room temperature -water: cold - -# Nesting mappings (note the indentation) -device_tracker: - platform: mqtt - -# Nesting a collection of mappings in a mapping -sensor: - - platform: mqtt - state_topic: sensor/topic - - platform: mqtt - state_topic: sensor2/topic -``` - -Indentation is used to specify which objects are nested under one another. Getting the right indentation can be tricky if you're not using an editor with a fixed width font. Tabs are not allowed to be used for indentation. - - - To learn more about the quirks of YAML, read [YAML IDIOSYNCRASIES](https://docs.saltstack.com/en/latest/topics/troubleshooting/yaml_idiosyncrasies.html) by SaltStack. - - You can test your configuration using [this online YAML parser](http://yaml-online-parser.appspot.com/) or [YAML Lint](http://www.yamllint.com/). - ### {% linkable_title My component does not show up %} When a component does not show up, many different things can be the case. Before you try any of these steps, make sure to look at the `home-assistant.log` file and see if there are any errors related to your component you are trying to set up. #### {% linkable_title Problems with the configuration %} +One of the most common problems with Home Assistant is an invalid `configuration.yaml` file. + + - You can test your configuration using [this online YAML parser](http://yaml-online-parser.appspot.com/) or [YAML Lint](http://www.yamllint.com/). + - To learn more about the quirks of YAML, read [YAML IDIOSYNCRASIES](https://docs.saltstack.com/en/latest/topics/troubleshooting/yaml_idiosyncrasies.html) by SaltStack (the examples there are specific to SaltStack, but do explain YAML issues well). + `configuration.yaml` does not allow multiple sections to have the same name. If you want a specific platform to be loaded twice, append a [number or string](/getting-started/devices/#style-2) to the name or nest them using [this style](/getting-started/devices/#style-1). ```yaml @@ -92,7 +60,7 @@ If you are using multiple files for your setup, make sure that the pointers are light: !include devices/lights.yaml sensor: !include devices/sensors.yaml ``` -Contents of `lights.yaml`: +Contents of `lights.yaml` (notice it does not contain `light: `): ```yaml - platform: hyperion diff --git a/source/help/index.markdown b/source/help/index.markdown index 6f578f97ff..3129217ebe 100644 --- a/source/help/index.markdown +++ b/source/help/index.markdown @@ -13,12 +13,12 @@ There are various ways to get in touch with the Home Assistant community. It doe ### {% linkable_title Communication channels %} - - [Forum](https://automic.us/forum/) - - [Gitter Chatroom](https://gitter.im/balloob/home-assistant) for general Home Assistant discussions and questions. + - [Forum](https://community.home-assistant.io) for Home Assistant discussions and questions. + - [Gitter Chat Room](https://gitter.im/balloob/home-assistant) for real-time chat about Home Assistant. ### {% linkable_title Bugs, Feature requests, and alike %} -Have you found an issue in your Home Assistant installation? Please report it in one of the issue trackers. Reporting it there makes it easier to track than in the Mailing list and ensures that it gets fixed. +Have you found an issue in your Home Assistant installation? Please report it in one of the issue trackers. Reporting it there makes it easy to track and ensures that it gets fixed. - [Issue tracker Home Assistant](https://github.com/balloob/home-assistant/issues) - [Issue tracker home-assistant.io](https://github.com/balloob/home-assistant.io/issues) (Website and documentation) From c581168e49f7734ace996a0264301c159927601c Mon Sep 17 00:00:00 2001 From: Lindsay Ward Date: Fri, 8 Apr 2016 23:39:02 +1000 Subject: [PATCH 17/34] Made README and website contributions match, added more detail to website contribution setup details, updated forum link, re-organised getting started and troubleshooting with respect to YAML --- README.markdown | 30 ++++----- source/developers/index.markdown | 26 +++---- source/developers/website.markdown | 23 +++++-- source/getting-started/configuration.markdown | 67 +++++++++++++++++-- source/getting-started/index.markdown | 8 +-- .../troubleshooting-configuration.markdown | 44 ++---------- source/help/index.markdown | 2 +- 7 files changed, 116 insertions(+), 84 deletions(-) diff --git a/README.markdown b/README.markdown index 32421af273..3dc2d53651 100644 --- a/README.markdown +++ b/README.markdown @@ -1,28 +1,26 @@ # Home Assistant website -This is the source for the [Home Assistant](https://github.com/balloob/home-assistant) website available at [Home-Assistant.io](https://home-assistant.io). All commits made to the `master` branch will be automatically pushed to production. - -Please point your Pull Request (PR) at the `next` branch. - -## Preview Jekyll website locally - -| Command | Action | -|---|---| -| `rake preview` | Preview site on [http://127.0.0.1:4000](http://127.0.0.1:4000) +This is the source for the [Home-Assistant.io website](https://home-assistant.io) for the [Home Assistant project](https://github.com/balloob/home-assistant) ## Setup -_You need to have Ruby installed._ +Setting up to contribute to documentation and the process for submitting pull requests is [explained here](https://home-assistant.io/developers/website/). -- [Ruby installation instructions](https://www.ruby-lang.org/en/documentation/installation/) -- For Fedora and CentOS check the last section of this file. +## Create a new blog post ```bash -$ git clone --recursive https://github.com/balloob/home-assistant.io.git -$ cd home-assistant.io -$ bundle +$ rake new_post["title"] ``` +## Site preview + +```bash +$ rake preview +``` + +This makes the preview available on [http://127.0.0.1:4000](http://127.0.0.1:4000). + + ### Setup on Fedora and CentOS On Fedora > 22 or CentOS 7.1.1503 Ruby is not available by default. Please take the notes here as a little guide for the Ruby installation process. @@ -42,4 +40,4 @@ The last command will give you something like this `ruby 2.2.3p173 (2015-08-18 r $ gem install bundler ``` -Now please follow the Setup instructions above. +Now you can follow the [setup instructions](https://home-assistant.io/developers/website/). diff --git a/source/developers/index.markdown b/source/developers/index.markdown index 158f32285a..583e5c161a 100644 --- a/source/developers/index.markdown +++ b/source/developers/index.markdown @@ -9,17 +9,20 @@ sharing: true footer: true --- -Home Assistant is built from the ground up to be easily-extensible by other developers using components. It uses [Python 3](https://www.python.org/) for the backend and [Polymer (Webcomponents)](https://www.polymer-project.org/) for the frontend. +Home Assistant is built from the ground up to be easily-extensible by other developers using components. It uses [Python 3](https://www.python.org/) for the backend and [Polymer (Web components)](https://www.polymer-project.org/) for the frontend. Home Assistant is open-source and MIT licensed. The source can be found here: - - [home-assistant](https://github.com/balloob/home-assistant) - Python server-backend - - [home-assistant-js](https://github.com/balloob/home-assistant-js) - javascript-backend powering the client + - [home-assistant](https://github.com/balloob/home-assistant) - Python server backend + - [home-assistant-js](https://github.com/balloob/home-assistant-js) - JavaScript backend powering the client - [home-assistant-polymer](https://github.com/balloob/home-assistant-polymer) - Polymer UI ### {% linkable_title Starting development %} -You will need to set up a development environment if you want to start developing a new feature or component for Home Assistant. Please follow these steps to perform it. Visit the [the Home Assistant repository](https://github.com/balloob/home-assistant) first and click fork in the top right. +You will need to set up a development environment if you want to start developing a new feature or component for Home Assistant. Please follow these steps to get setup. +Visit the [the Home Assistant repository](https://github.com/balloob/home-assistant) first and click fork in the top right. + +We suggest that you setup a [virtual environment](https://docs.python.org/3.4/library/venv.html) aka `venv` before running the setup script. ```bash $ git clone https://github.com/YOUR_GIT_USERNAME/home-assistant.git @@ -28,13 +31,17 @@ $ git remote add upstream https://github.com/balloob/home-assistant.git $ script/setup ``` -We suggest that you setup a [virtual environment](https://docs.python.org/3.4/library/venv.html) aka `venv` before running the setup script. +Testing your work requires `tox` to be installed: + +```bash +$ pip3 install tox +``` After following these steps, running `hass` will invoke your local installation. ### {% linkable_title Submitting improvements %} -Improvements to Home Assistant should be submitted one feature at a time using Github pull requests. +Improvements to Home Assistant should be submitted one feature at a time using GitHub [pull requests](https://help.github.com/articles/using-pull-requests). 1. From your fork, create a new branch to hold your changes `git checkout -b some-feature` @@ -44,15 +51,10 @@ Improvements to Home Assistant should be submitted one feature at a time using G 4. Commit the changes `git add .` `git commit -m "Added some-feature"` - 5. Push your commited changes back to your fork on GitHub + 5. Push your committed changes back to your fork on GitHub `git push origin HEAD` 6. Follow [these steps](https://help.github.com/articles/creating-a-pull-request/) to create your pull request. -Note that the above requires `tox` to be installed. If you don't have it, do this: - -```bash -$ pip3 install tox -``` ### {% linkable_title Further reading %} diff --git a/source/developers/website.markdown b/source/developers/website.markdown index fac5d007e1..3a5bead060 100644 --- a/source/developers/website.markdown +++ b/source/developers/website.markdown @@ -9,19 +9,28 @@ sharing: true footer: true --- -The home of Home Assistant is [https://home-assistant.io](https://home-assistant.io). This is the place where we provide documentation and additional details about Home Assistant for end users and developers. +The website you're reading now is the home of Home Assistant: [https://home-assistant.io](https://home-assistant.io). This is the place where we provide documentation and additional details about Home Assistant for end users and developers. -home-assistant.io is using the [Octopress](http://octopress.org/) framework for [Jekyll](http://github.com/mojombo/jekyll). To get more details, please checkout the [documentation](http://octopress.org/docs/). That means that creating a new page is simple. The pages are written in [markdown](http://daringfireball.net/projects/markdown/), you don't need to care about HTML or alike. +home-assistant.io uses the [Octopress](http://octopress.org/) framework for [Jekyll](http://github.com/mojombo/jekyll). To get more details, please checkout the [Octopress documentation](http://octopress.org/docs/). +That means that creating a new page is simple. The pages are written in [markdown](http://daringfireball.net/projects/markdown/); you don't need to care about HTML or the like. -To work on the website the process is no different to working on Home Assistant itself. +The process for working on the website is no different from working on Home Assistant itself. -- Fork the home-assistant.io [git repository](https://github.com/balloob/home-assistant.io). +To test your changes locally, you need to install the **Ruby** dependencies (gems): + +- [Install Ruby](https://www.ruby-lang.org/en/documentation/installation/) if you don't have it already. +- Install `bundler`, which is a dependency manager for Ruby: `gem install bundler` +- In your home-assistant.io root directory, run `bundle` to install the gems you need. + +Then you can work on the documentation: + +- Fork home-assistant.io [git repository](https://github.com/balloob/home-assistant.io). - Create/edit/update a page in the directory `source/_components/` for your platform/component. -- To test changes to home-assistant.io locally, run ``rake preview`` and navigate to http://127.0.0.1:4000. +- Test your changes to home-assistant.io locally: run ``rake preview`` and navigate to [http://127.0.0.1:4000](http://127.0.0.1:4000) - Create a Pull Request (PR) against the **next** branch of home-assistant.io if your documentation is for a new feature, platform, or component. - Create a Pull Request (PR) against the **master** branch of home-assistant.io if you fix stuff, create Cookbook entries, or expand existing documentation. -For a platform page it would be the fastest way to make a copy of an existing page and edit it. The [component overview](/components/) is generated automatically, so there is no need to add a link to that your page. +For a platform page, the fastest way is to make a copy of an existing page and edit it. The [component overview](/components/) is generated automatically, so there is no need to add a link to your page. ### {% linkable_title Code %} To take advantage of the built-in features of Octopress to display code snippets, just use the default markdown syntax. Please use `$` and `#` if it's a command and to differ from output. @@ -37,7 +46,7 @@ If you want to display line numbers, add the following snippet somewhere on your ``` ### {% linkable_title Images, icons, and logos %} -The images which are displayed on the pages are stored in various directories according their purpose. +The images which are displayed on the pages are stored in various directories according to their purpose. | Type | Location | | :----------- |:----------------------------------------------| diff --git a/source/getting-started/configuration.markdown b/source/getting-started/configuration.markdown index bdf0422667..32496cc92d 100644 --- a/source/getting-started/configuration.markdown +++ b/source/getting-started/configuration.markdown @@ -9,19 +9,74 @@ sharing: true footer: true --- -Home Assistant will create a configuration folder when it is run for the first time. The location of the folder differs between operating systems: on OS X/Linux it's `~/.homeassistant` and on Windows it's `%APPDATA%/.homeassistant`. If you want to use a different folder for configuration, run `hass --config path/to/config`. +Home Assistant will create a configuration folder when it is run for the first time. The location of the folder differs between operating systems: on OS X and Linux it's `~/.homeassistant` and on Windows it's `%APPDATA%/.homeassistant`. If you want to use a different folder for configuration, run `hass --config path/to/config`. -Inside your configuration folder is the file `configuration.yaml`. This is the main file that contains which components will be loaded and what their configuration is. -This file contains YAML code, which is explained briefly in [the configuration troubleshooting page](/getting-started/troubleshooting-configuration/). An example configuration file is located [here](https://github.com/balloob/home-assistant/blob/master/config/configuration.yaml.example). +Inside your configuration folder is the file `configuration.yaml`. This is the main file that contains which components will be loaded and what their configuration is. +This file contains YAML code, which is explained briefly below. +[An example configuration file is located here](https://github.com/balloob/home-assistant/blob/master/config/configuration.yaml.example). -When launched for the first time, Home Assistant will write a default configuration enabling the web interface and device discovery. It can take up to a minute for your devices to be discovered and show up in the interface. +When launched for the first time, Home Assistant will write a default configuration file enabling the web interface and device discovery. It can take up to a minute for your devices to be discovered and show up in the user interface. If you run into trouble while configuring Home Assistant, have a look at [the configuration troubleshooting page](/getting-started/troubleshooting-configuration/).

    -You will have to restart Home Assistant for changes in configuration.yaml to take effect. + You will have to restart Home Assistant each time you make changes in configuration.yaml in order for these to take effect.

    +### {% linkable_title YAML %} + +Home Assistant uses the [YAML](http://yaml.org/) syntax for configuration. YAML might take a while to get used to but is really powerful in allowing you to express complex configurations. + +For each component that you want to use in Home Assistant, you add code in your `configuraton.yaml` file to specify its settings. +Example, the following code specifies that you want to use the [notify component](/components/notify) with the [pushbullet platform](/components/notify.pushbullet). + + +```yaml +notify: + platform: pushbullet + api_key: "o.1234abcd" + name: pushbullet +``` + +- A **component** provides the core logic for some functionality (like `notify` provides sending notifications). +- A **platform** makes the connection to a specific software or hardware platform (like `pushbullet` works with the service from pushbullet.com). + +The basics of YAML syntax are block collections and mappings containing key-value pairs. +Each item in a collection starts with a `-` while mappings have the format `key: value`. If you specify duplicate keys, the last value for a key is used. + +Note that indentation is an important part of specifying relationships using YAML. Things that are indented are nested "inside" things that are one level higher. So in the above example, `platform: pushbullet` is a property of (nested inside) the `notify` component. +Getting the right indentation can be tricky if you're not using an editor with a fixed width font. Tabs are not allowed to be used for indentation. Convention is to use 2 spaces for each level of indentation. + +Lines that start with **#** are comments and are ignored by the system. + +The next example shows an [input_select](/components/input_select) component that uses a block collection for the options values. +The other properties (like name) are specified using mappings. Note that the second line just has `threat:` with no value on the same line. Here threat is the name of the input_select and the values for it are everything nested below it. + +```yaml +input_select: + threat: + name: Threat level +# A collection is used for options + options: + - 0 + - 1 + - 2 + - 3 + initial: 0 +``` + +The following example shows nesting a collection of mappings in a mapping. +In Home Assistant, this would create two sensors that each use the MQTT platform but have different values for their `state_topic` (one of the properties used for MQTT sensors). + +```yaml +sensor: + - platform: mqtt + state_topic: sensor/topic + - platform: mqtt + state_topic: sensor2/topic +``` + + ### {% linkable_title Setting up the basic info %} By default Home Assistant will try to detect your location and will automatically select a temperature unit and time zone based on your location. You can overwrite this by adding the following information to your `configuration.yaml`: @@ -47,7 +102,7 @@ homeassistant: ### {% linkable_title Password protecting the web interface %} -The first thing you want to add is a password for the web interface. Use your favourite text editor to open the file `configuration.yaml` and add the following to the `http` section: +The first thing you will want to add is a password for the web interface. Use your favourite text editor to open `configuration.yaml` and edit the `http` section: ```yaml http: diff --git a/source/getting-started/index.markdown b/source/getting-started/index.markdown index 42225c4f55..12e7ccb7b8 100644 --- a/source/getting-started/index.markdown +++ b/source/getting-started/index.markdown @@ -289,15 +289,15 @@ $ python3/pip3 install --upgrade homeassistant If you run into any issues, please see [the troubleshooting page](/getting-started/troubleshooting/). It contains solutions to many of the more commonly encountered issues. -For additional help, in addition to this site, there are four sources: +In addition to this site, check out these sources for additional help: - - [Forum](https://community.home-assistant.io/) - - [Gitter Chatroom](https://gitter.im/balloob/home-assistant) for general Home Assistant discussions and questions. + - [Forum](https://community.home-assistant.io) for Home Assistant discussions and questions. + - [Gitter Chat Room](https://gitter.im/balloob/home-assistant) for real-time chat about Home Assistant. - [GitHub Page](https://github.com/balloob/home-assistant/issues) for issue reporting. ### {% linkable_title What's next %} -If you want to have Home Assistant start on boot, autostart instructions can be found [here](/getting-started/autostart/). +If you want to have Home Assistant start on boot, [autostart instructions can be found here](/getting-started/autostart/). To see what Home Assistant can do, launch demo mode: `hass --demo-mode` or visit the [demo page](/demo). diff --git a/source/getting-started/troubleshooting-configuration.markdown b/source/getting-started/troubleshooting-configuration.markdown index 5b3420d146..f21209385c 100644 --- a/source/getting-started/troubleshooting-configuration.markdown +++ b/source/getting-started/troubleshooting-configuration.markdown @@ -15,49 +15,17 @@ Before we dive into common issues, make sure you know where your configuration d Whenever a component or configuration option results in a warning, it will be stored in `home-assistant.log` in the configuration directory. This file is reset on start of Home Assistant. -### {% linkable_title YAML %} - -Home Assistant uses the [YAML](http://yaml.org/) syntax for configuration. YAML can be confusing to start with but is really powerful in allowing you to express complex configurations. - -The basics of YAML are block collections and mappings containing key-value pairs. Collections will have each item start with a `-` while mappings will have the format `key: value`. The last value for a key is used in case you specify a duplicate key. -Note that the indentation is an important part of specifying relationships using YAML. - -```yaml -# A collection -- hello -- how -- are -- you - -# Lookup mapping -beer: ice cold # <-- will be ignored because key specified twice -beer: warm -wine: room temperature -water: cold - -# Nesting mappings (note the indentation) -device_tracker: - platform: mqtt - -# Nesting a collection of mappings in a mapping -sensor: - - platform: mqtt - state_topic: sensor/topic - - platform: mqtt - state_topic: sensor2/topic -``` - -Indentation is used to specify which objects are nested under one another. Getting the right indentation can be tricky if you're not using an editor with a fixed width font. Tabs are not allowed to be used for indentation. - - - To learn more about the quirks of YAML, read [YAML IDIOSYNCRASIES](https://docs.saltstack.com/en/latest/topics/troubleshooting/yaml_idiosyncrasies.html) by SaltStack. - - You can test your configuration using [this online YAML parser](http://yaml-online-parser.appspot.com/) or [YAML Lint](http://www.yamllint.com/). - ### {% linkable_title My component does not show up %} When a component does not show up, many different things can be the case. Before you try any of these steps, make sure to look at the `home-assistant.log` file and see if there are any errors related to your component you are trying to set up. #### {% linkable_title Problems with the configuration %} +One of the most common problems with Home Assistant is an invalid `configuration.yaml` file. + + - You can test your configuration using [this online YAML parser](http://yaml-online-parser.appspot.com/) or [YAML Lint](http://www.yamllint.com/). + - To learn more about the quirks of YAML, read [YAML IDIOSYNCRASIES](https://docs.saltstack.com/en/latest/topics/troubleshooting/yaml_idiosyncrasies.html) by SaltStack (the examples there are specific to SaltStack, but do explain YAML issues well). + `configuration.yaml` does not allow multiple sections to have the same name. If you want a specific platform to be loaded twice, append a [number or string](/getting-started/devices/#style-2) to the name or nest them using [this style](/getting-started/devices/#style-1). ```yaml @@ -92,7 +60,7 @@ If you are using multiple files for your setup, make sure that the pointers are light: !include devices/lights.yaml sensor: !include devices/sensors.yaml ``` -Contents of `lights.yaml`: +Contents of `lights.yaml` (notice it does not contain `light: `): ```yaml - platform: hyperion diff --git a/source/help/index.markdown b/source/help/index.markdown index c92de07251..740f22d3ec 100644 --- a/source/help/index.markdown +++ b/source/help/index.markdown @@ -20,7 +20,7 @@ There are various ways to get in touch with the Home Assistant community. It doe ### {% linkable_title Bugs, Feature requests, and alike %} -Have you found an issue in your Home Assistant installation? Please report it in one of the issue trackers. Reporting it there makes it easier to track than in the Mailing list and ensures that it gets fixed. +Have you found an issue in your Home Assistant installation? Please report it in one of the issue trackers. Reporting it there makes it easy to track and ensures that it gets fixed. - [Issue tracker Home Assistant](https://github.com/balloob/home-assistant/issues) - [Issue tracker home-assistant.io](https://github.com/balloob/home-assistant.io/issues) (Website and documentation) From bcc789f3c3893970abe55c3dba4cdff029ca125a Mon Sep 17 00:00:00 2001 From: Ryan Borstelmann Date: Fri, 8 Apr 2016 15:37:01 -0500 Subject: [PATCH 18/34] Update z-wave.markdown (#375) --- source/_topics/z-wave.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_topics/z-wave.markdown b/source/_topics/z-wave.markdown index 4fff9fea8e..970303a1c2 100644 --- a/source/_topics/z-wave.markdown +++ b/source/_topics/z-wave.markdown @@ -31,3 +31,9 @@ Upon first run, the z-wave component will take time to initialize entities and e The alternative to a stick is a hub that supports Z-Wave. Home Assistant supports the following hubs with Z-Wave support: - [Vera](/components/vera/) + + +## {% linkable_title Modifying Zwave Device Settings %} +You may wish to modify the zwave settings ozw*.xml file in your .homeassistant root folder, or certain situations/devices may require it (i.e. Aeon Multisensor 6). To do this, utilize (Open-Zwave Control Panel)[https://github.com/OpenZWave/open-zwave-control-panel]. Alternatively, use (Domoticz)[https://www.domoticz.com/], which incorporates the Open-Zwave Control Panel project into an easy to use Raspberry Pi image. + +The reasoning for using these tools is that your Zwave controller stores the values and data that are used to control the network. The XML file in the .homeassistant folder acts as a settings/values cache for the zwave network, so modifying it directly won't change the network values. The Open-Zwave Control Panel writes values directly to the network, and will provide you with an updated .xml file to overwrite in your .homeassistant folder. This is the most foolproof way to make modifications to your zwave devices. From cdc9606a57656b517ac5d083fcff75974c77b7b4 Mon Sep 17 00:00:00 2001 From: Ryan Borstelmann Date: Fri, 8 Apr 2016 17:16:23 -0500 Subject: [PATCH 19/34] Update z-wave.markdown fixed markdown typos --- source/_topics/z-wave.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_topics/z-wave.markdown b/source/_topics/z-wave.markdown index 970303a1c2..06a4c05494 100644 --- a/source/_topics/z-wave.markdown +++ b/source/_topics/z-wave.markdown @@ -34,6 +34,6 @@ The alternative to a stick is a hub that supports Z-Wave. Home Assistant support ## {% linkable_title Modifying Zwave Device Settings %} -You may wish to modify the zwave settings ozw*.xml file in your .homeassistant root folder, or certain situations/devices may require it (i.e. Aeon Multisensor 6). To do this, utilize (Open-Zwave Control Panel)[https://github.com/OpenZWave/open-zwave-control-panel]. Alternatively, use (Domoticz)[https://www.domoticz.com/], which incorporates the Open-Zwave Control Panel project into an easy to use Raspberry Pi image. +You may wish to modify the zwave settings ozw*.xml file in your .homeassistant root folder, or certain situations/devices may require it (i.e. Aeon Multisensor 6). To do this, utilize [Open-Zwave Control Panel](https://github.com/OpenZWave/open-zwave-control-panel). Alternatively, use [Domoticz](https://www.domoticz.com/), which incorporates the Open-Zwave Control Panel project into an easy to use Raspberry Pi image. The reasoning for using these tools is that your Zwave controller stores the values and data that are used to control the network. The XML file in the .homeassistant folder acts as a settings/values cache for the zwave network, so modifying it directly won't change the network values. The Open-Zwave Control Panel writes values directly to the network, and will provide you with an updated .xml file to overwrite in your .homeassistant folder. This is the most foolproof way to make modifications to your zwave devices. From 3cfbc037f397a740bb4f68cf48ee2a6b1ed2a92b Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Mon, 28 Mar 2016 10:52:52 -0700 Subject: [PATCH 20/34] Add GTFS sensor docs --- source/_components/sensor.gtfs.markdown | 53 ++++++++++++++++++++++++ source/images/supported_brands/gtfs.png | Bin 0 -> 982 bytes 2 files changed, 53 insertions(+) create mode 100644 source/_components/sensor.gtfs.markdown create mode 100644 source/images/supported_brands/gtfs.png diff --git a/source/_components/sensor.gtfs.markdown b/source/_components/sensor.gtfs.markdown new file mode 100644 index 0000000000..97ebcd31a2 --- /dev/null +++ b/source/_components/sensor.gtfs.markdown @@ -0,0 +1,53 @@ +--- +layout: page +title: "Public Transit (GTFS)" +description: "Instructions how to use public transit open data inHome Assistant." +date: 2016-03-28 10:19 +sidebar: true +comments: false +sharing: true +footer: true +logo: 'gtfs.png' +ha_category: Sensor +ha_iot_class: "Local Polling" +--- + + +The `gtfs` sensor will give you the next departure time and associated data from your public transit station/stop. The data comes from your chosen public transit authority and is formatted as [General Transit Feed Specification](https://developers.google.com/transit/gtfs/) data, commonly known as GTFS. + +You need to find a valid GTFS data set, which you can usually find just by searching the internet. Most public transit authorities have GTFS available somewhere, as Google requires public transit authorities to provide the data if they wish to appear on Google Maps. + +Here are some examples: + +- [Bay Area Rapid Transit (BART)](http://www.bart.gov/schedules/developers/gtfs) - The light rail system for the San Francisco Bay Area. +- [Metropolitan Transit Authority of New York City (MTA)](http://www.bart.gov/schedules/developers/gtfs) - Provides separate data feeds for subway, bus, LIRR and Metro-North of the greater New York City metropolitan region. +- [GBRail.info](http://www.gbrail.info/) - Provides data feeds for most if not all rail companies in the Britain. + +You need to download a GTFS ZIP file and put it into a folder named `gtfs` in your configuration directory. For ease of use, it is suggested that you rename the file to just the agency/data source name (i.e. `bart.zip` instead of `google_transit_20160328_v1.zip`). You can also unzip and place a folder in the `gtfs` folder. + +The data will be converted into a queryable format and saved as a SQLite3 database alongside the source data. The sensor will check for the existence of this SQLite3 data at every startup and will re-import the ZIP/Folder if none is found. + +To update the data, delete the SQLite3 file and restart Home Assistant. + +To find your stop ID, open the `stops.txt` file inside the ZIP file/unzipped folder. The format of the ID is different for every transit agency but will be the first "column" (meaning the string before the first comma) in a row. + +The sensor attributes will contain all related information for the specific trip, such as agency information, origin and destination stop information, origin and destination stop time and the route information. + +Your mileage may vary depending on the transit agency used. Most agencies respect the GTFS format but some will do weird things like adding extra columns or using different data formatting. If you have any data specific issues, please report them to the [PyGTFS](https://github.com/jarondl/pygtfs) project, which is what the GTFS sensor uses to parse data. + +**Please note**: This is a _static_ data source. Currently, there is no GTFS Realtime support in this sensor due to issues surrounding parsing the protocol buffer format in Python 3. Once those issues have been fixed Realtime support will be added. Once added, the sensor will check for any delays and advisories and report them in sensor as needed. + +```yaml +# Example configuration.yaml entry +sensor: + platform: gtfs + origin: STOP_ID + destination: STOP_ID + data: DATA_SOURCE +``` + +Configuration variables: + +- **origin** (*Required*): The stop ID of your origin station. +- **destination** (*Required*): The stop ID of your destination station. +- **data** (*Required*): The name of the ZIP file or folder containing the GTFS data. It must be located inside the `gtfs` folder of your configuration directory. diff --git a/source/images/supported_brands/gtfs.png b/source/images/supported_brands/gtfs.png new file mode 100644 index 0000000000000000000000000000000000000000..45f39d707fca73ad85fdc92bd96e7d198d651df4 GIT binary patch literal 982 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoY)RhkE(}8pX7+2iB`GtXjInmR_F{I+w+qu5pA&C-g`o0T2xbJ$nIPT(# zmE79#qM0X#wducuhnL3x#vLESr(B4CA%EqNt7G>?5Amyul!83oFv~7kcC=Dec+*VF z_m%IypRp0QIkVvNN4xK(=k`3G^HJttq0I5jaH}iK47(bO4^$>_NHF|r+*fd${|l4t z!;RH*Sga2JjX!X0-~G2t_Z#yMOb?j-@SE`mwhG=o-2GD%br(qQV2NSYo78G|;{L&? zP277_Cx2wB;IeVoQ8k-;z~aM<9L+VVakCTGJpL1T*vnJAfIY%n;YwPz?w1Qo`8Efx zW0=aq)Dt@OLa^oz|8J73_;kzOw%wbQrr5ZkYaMIpiT_DjjRkA6ykx&Q`c2MlU){WM z)!GZiMmlN&U8TCmIP{M7MaX{;v=B>nP)(YhqkH4bXC=cj6Sa)}A2@COpVUs2VA5MX zSzyxc??A?iUeF1@z-7SQGa=S_h5DWOtZ^&Zmmhew=Z@?Hy>@+* zxd(UxOl79abgQjS5wBb|-O!n{NN3iZyrh`#F%EN9UAPld$`auh>maH2usucmY4()) z2b8})(AB8ols;#;EwTCI(?gF;uI`zmu=`Jn@fW6eZn^pMmqn$WQh2cD#ZI*&0vFyK zci!9cwBp^`rsH8H?@I%}lsZm7X{ITCG|9L`H^0L0S_8je++zc`j6C-oE1T^eUGMhl zJ=dW5}25-)mq)=~_3dL253AT*|UF*JH$ewiPz_;5PuUECnO@3yz zVWLCC#%$#;VO(sPYb_Hszl3O6o!BOF>Yu)knr6YFt+P(LH{L!F`aq&&r*{)bL!+C#+{2I$rjj$yWb+ Date: Mon, 28 Mar 2016 11:02:05 -0700 Subject: [PATCH 21/34] Typo fixes --- source/_components/sensor.gtfs.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/sensor.gtfs.markdown b/source/_components/sensor.gtfs.markdown index 97ebcd31a2..8ad6a0cbb9 100644 --- a/source/_components/sensor.gtfs.markdown +++ b/source/_components/sensor.gtfs.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Public Transit (GTFS)" -description: "Instructions how to use public transit open data inHome Assistant." +description: "Instructions on how to use public transit open data in Home Assistant." date: 2016-03-28 10:19 sidebar: true comments: false @@ -21,7 +21,7 @@ Here are some examples: - [Bay Area Rapid Transit (BART)](http://www.bart.gov/schedules/developers/gtfs) - The light rail system for the San Francisco Bay Area. - [Metropolitan Transit Authority of New York City (MTA)](http://www.bart.gov/schedules/developers/gtfs) - Provides separate data feeds for subway, bus, LIRR and Metro-North of the greater New York City metropolitan region. -- [GBRail.info](http://www.gbrail.info/) - Provides data feeds for most if not all rail companies in the Britain. +- [GBRail.info](http://www.gbrail.info/) - Provides data feeds for most if not all rail companies in Britain. You need to download a GTFS ZIP file and put it into a folder named `gtfs` in your configuration directory. For ease of use, it is suggested that you rename the file to just the agency/data source name (i.e. `bart.zip` instead of `google_transit_20160328_v1.zip`). You can also unzip and place a folder in the `gtfs` folder. @@ -35,7 +35,7 @@ The sensor attributes will contain all related information for the specific trip Your mileage may vary depending on the transit agency used. Most agencies respect the GTFS format but some will do weird things like adding extra columns or using different data formatting. If you have any data specific issues, please report them to the [PyGTFS](https://github.com/jarondl/pygtfs) project, which is what the GTFS sensor uses to parse data. -**Please note**: This is a _static_ data source. Currently, there is no GTFS Realtime support in this sensor due to issues surrounding parsing the protocol buffer format in Python 3. Once those issues have been fixed Realtime support will be added. Once added, the sensor will check for any delays and advisories and report them in sensor as needed. +**Please note**: This is a _static_ data source. Currently, there is no GTFS Realtime support in this sensor due to issues surrounding parsing the protocol buffer format in Python 3. Once those issues have been fixed Realtime support will be added. Once added, the sensor will check for any delays and advisories and report them in the sensor as needed. ```yaml # Example configuration.yaml entry From 2866e29abcc2df870c7f5d561ef56eb0a7073fcb Mon Sep 17 00:00:00 2001 From: Marc Plano-Lesay Date: Tue, 29 Mar 2016 14:17:56 +0200 Subject: [PATCH 22/34] Fix typos in Transmission sensor documentation --- source/_components/sensor.transmission.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/sensor.transmission.markdown b/source/_components/sensor.transmission.markdown index 1ab30b4332..52f82ad288 100644 --- a/source/_components/sensor.transmission.markdown +++ b/source/_components/sensor.transmission.markdown @@ -36,13 +36,13 @@ Configuration variables: - **name** (*Optional*): The name to use when displaying this Transmission instance. - **username** (*Optional*): Your Transmission username, if you use authentication. - **password** (*Optional*): Your Transmission password, if you use authentication. -- **display_variables** array: Conditions to display in the frontend. +- **monitored_variables** array: Conditions to display in the frontend. - **current_status**: The status of your Transmission daemon. - **download_speed**: The current download speed. - **upload_speed**: The current upload speed. -To use the monitoring, your transmission client needs to allow remote access. If you are running the graphical transmission client (transmission-gtk) go to **Edit** -> **Perferences** and choose the tab **Remote**. Check **Allow remote access**, enter your username and your password, and uncheck the network restriction as needed. +To use the monitoring, your transmission client needs to allow remote access. If you are running the graphical transmission client (transmission-gtk) go to **Edit** -> **Preferences** and choose the tab **Remote**. Check **Allow remote access**, enter your username and your password, and uncheck the network restriction as needed.

    From 19725ab75763ca075f730163ab6698df43a3d06b Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Tue, 29 Mar 2016 14:11:26 -0700 Subject: [PATCH 23/34] Add links to GTFS Data Exchange and TransitFeeds --- source/_components/sensor.gtfs.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.gtfs.markdown b/source/_components/sensor.gtfs.markdown index 8ad6a0cbb9..dce5fb4dd3 100644 --- a/source/_components/sensor.gtfs.markdown +++ b/source/_components/sensor.gtfs.markdown @@ -15,7 +15,7 @@ ha_iot_class: "Local Polling" The `gtfs` sensor will give you the next departure time and associated data from your public transit station/stop. The data comes from your chosen public transit authority and is formatted as [General Transit Feed Specification](https://developers.google.com/transit/gtfs/) data, commonly known as GTFS. -You need to find a valid GTFS data set, which you can usually find just by searching the internet. Most public transit authorities have GTFS available somewhere, as Google requires public transit authorities to provide the data if they wish to appear on Google Maps. +You need to find a valid GTFS data set, which you can usually find just by searching the internet. Most public transit authorities have GTFS available somewhere, as Google requires public transit authorities to provide the data if they wish to appear on Google Maps. You may also be able to find data at either [TransitFeeds](http://transitfeeds.com/feeds) or [GTFS Data Exchange](http://www.gtfs-data-exchange.com/). Here are some examples: From df6a6701fa5549f44f9f6b8ad8c72b2d0b8681a6 Mon Sep 17 00:00:00 2001 From: Florian Holzapfel Date: Thu, 17 Mar 2016 13:08:52 +0100 Subject: [PATCH 24/34] add vieratv documentation --- .../_components/media_player.vieratv.markdown | 38 ++++++++++++++++++ source/images/supported_brands/panasonic.png | Bin 0 -> 2576 bytes 2 files changed, 38 insertions(+) create mode 100644 source/_components/media_player.vieratv.markdown create mode 100644 source/images/supported_brands/panasonic.png diff --git a/source/_components/media_player.vieratv.markdown b/source/_components/media_player.vieratv.markdown new file mode 100644 index 0000000000..12fe1a64eb --- /dev/null +++ b/source/_components/media_player.vieratv.markdown @@ -0,0 +1,38 @@ +--- +layout: page +title: "Panasonic Viera TV" +description: "Instructions on how to integrate a Panasonic Viera TV into Home Assistant." +date: 2016-03-17 13:04 +sidebar: true +comments: false +sharing: true +footer: true +logo: Panasonic.png +ha_category: Media Player +featured: false +--- + +The `vieratv` platform allows you to control a Panasonic Viera TV. + +To add a TV to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +media_player: + platform: vieratv + host: 192.168.0.10 + port: 55000 + name: Living Room TV +``` + +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. + +Currently known supported models: + +- TX-P42STW50 + +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/balloob/home-assistant.io). diff --git a/source/images/supported_brands/panasonic.png b/source/images/supported_brands/panasonic.png new file mode 100644 index 0000000000000000000000000000000000000000..f74fb674c90c7e5dd40fd3773624dde5b559f03a GIT binary patch literal 2576 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 msJLcU2h0J_sZ|Ran#4b_p~h924}CWP0000 Date: Tue, 29 Mar 2016 23:18:48 +0200 Subject: [PATCH 25/34] rename virtatv to include the brand name --- ...vieratv.markdown => media_player.panasonic_viera.markdown} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename source/_components/{media_player.vieratv.markdown => media_player.panasonic_viera.markdown} (90%) diff --git a/source/_components/media_player.vieratv.markdown b/source/_components/media_player.panasonic_viera.markdown similarity index 90% rename from source/_components/media_player.vieratv.markdown rename to source/_components/media_player.panasonic_viera.markdown index 12fe1a64eb..5e0256daad 100644 --- a/source/_components/media_player.vieratv.markdown +++ b/source/_components/media_player.panasonic_viera.markdown @@ -12,14 +12,14 @@ ha_category: Media Player featured: false --- -The `vieratv` platform allows you to control a Panasonic Viera TV. +The `panasonic_viera` platform allows you to control a Panasonic Viera TV. To add a TV to your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry media_player: - platform: vieratv + platform: panasonic_viera host: 192.168.0.10 port: 55000 name: Living Room TV From 6fdae7a492633c122c94b49faeb35fbd761f9e21 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 30 Mar 2016 10:08:07 +0200 Subject: [PATCH 26/34] Add docs for onkyo receiver --- .../_components/media_player.onkyo.markdown | 24 ++++++++++++++++++ source/images/supported_brands/onkyo.png | Bin 0 -> 3830 bytes 2 files changed, 24 insertions(+) create mode 100644 source/_components/media_player.onkyo.markdown create mode 100644 source/images/supported_brands/onkyo.png diff --git a/source/_components/media_player.onkyo.markdown b/source/_components/media_player.onkyo.markdown new file mode 100644 index 0000000000..fc2b2fc9f7 --- /dev/null +++ b/source/_components/media_player.onkyo.markdown @@ -0,0 +1,24 @@ +--- +layout: page +title: "Onkyo" +description: "Instructions how to integrate Onkyo receivers into Home Assistant." +date: 2016-03-30 08:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: onkyo.png +ha_category: Media Player +--- + + +The `onkyo` platform allows you to control a [Onkyo receiver](http://www.onkyo.com/) from Home Assistant. + +To add an Onkyo receiver to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +media_player: + platform: onkyo +``` + diff --git a/source/images/supported_brands/onkyo.png b/source/images/supported_brands/onkyo.png new file mode 100644 index 0000000000000000000000000000000000000000..eaca37abcf5060df924ec6448b69a81ee659839d GIT binary patch literal 3830 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 literal 0 HcmV?d00001 From 654e0165edc2706dbd7dad2873482fb7bbf897d1 Mon Sep 17 00:00:00 2001 From: Charles Spirakis Date: Wed, 30 Mar 2016 15:25:40 -0700 Subject: [PATCH 27/34] Dcoument zwave's test_network for 0.17 Documents the test_network service which is a call through to openzwave's TestNetwork() method. --- source/_components/zwave.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/zwave.markdown b/source/_components/zwave.markdown index f7c224b555..14efbecc46 100644 --- a/source/_components/zwave.markdown +++ b/source/_components/zwave.markdown @@ -120,6 +120,7 @@ The Z-Wave component exposes four services to help maintain the network. | remove_node | Put the zwave controller in exclusion mode. Allows one to remove a device from the zwave network.| | heal_network | Tells the controller to "heal" the network. Bascially asks the nodes to tell the controller all of their neighbors so the controller can refigure out optimal routing. | | soft_reset | Tells the controller to do a "soft reset". This is not supposed to lose any data, but different controllers can behave differently to a "soft reset" command.| +| test_network | Tells the controller to send no-op commands to each node and measure the time for a response. In theory, this can also bring back nodes which have been marked "presumed dead".| The soft_reset and heal_network commands can be used as part of an automation script to help keep a zwave network running relliably. For example: From 5ffbdcf2d9d9abb4da0bd8aba33ba02f65028866 Mon Sep 17 00:00:00 2001 From: Dan Date: Fri, 1 Apr 2016 00:37:43 -0400 Subject: [PATCH 28/34] Update media_player.onkyo.markdown --- .../_components/media_player.onkyo.markdown | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/source/_components/media_player.onkyo.markdown b/source/_components/media_player.onkyo.markdown index fc2b2fc9f7..04473cb94d 100644 --- a/source/_components/media_player.onkyo.markdown +++ b/source/_components/media_player.onkyo.markdown @@ -22,3 +22,71 @@ media_player: platform: onkyo ``` +A few notes: +- Source selection has no front-end UI, but can be controlled by way of service calls. Select the source string from the following list: + +``` + video1 + video2 + video3 + video4 + video5 + video6 + video7 + dvd + bd-dvd + tape1 + tv-tape + tape2 + phono + cd + tv-cd + fm + am + tuner + dlna + internet-radio + usb + network + universal-port + multi-ch + xm + sirius + ``` +- Sample automation and input select +``` +automation: + alias: Receiver Source + trigger: + platform: state + entity_id: input_select.receiver_source + action: + service: media_player.select_source + data_template: + entity_id: media_player.txnr535_000000000000 + source: > + {% if is_state('input_select.receiver_source', 'HTPC') %} + pc + {% elif is_state('input_select.receiver_source', 'Chromecast') %} + aux1 + {% elif is_state('input_select.receiver_source', 'Wii U') %} + game + {% elif is_state('input_select.receiver_source', 'Bluray') %} + bd + {% elif is_state('input_select.receiver_source', 'Raspberry Pi') %} + tv + {% endif %} + +input_select: + receiver_source: + name: Source + options: + - HTPC + - Chromecast + - Wii U + - Bluray + - Raspberry Pi + initial: None + +``` + From b3180e08792791ba274056ce55b0180e7a6a9642 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 2 Apr 2016 23:32:04 +0200 Subject: [PATCH 29/34] Add loop energy docs --- .../_components/sensor.loop_energy.markdown | 35 ++++++++++++++++++ source/images/supported_brands/loop.png | Bin 0 -> 7192 bytes 2 files changed, 35 insertions(+) create mode 100644 source/_components/sensor.loop_energy.markdown create mode 100644 source/images/supported_brands/loop.png diff --git a/source/_components/sensor.loop_energy.markdown b/source/_components/sensor.loop_energy.markdown new file mode 100644 index 0000000000..0d6aa9c0c1 --- /dev/null +++ b/source/_components/sensor.loop_energy.markdown @@ -0,0 +1,35 @@ +--- +layout: page +title: "Loop Energy" +description: "Instructions how to integrate Loop Energy devices within Home Assistant." +date: 2016-04-02 22:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: loop.png +ha_category: Sensor +--- + + +Integrate your [Loop Energy](https://www.your-loop.com/) meter information into Home Assistant. + +To enable the Loop Energy sensor, add the following lines to your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +sensor: + platform: loopenergy + electricity_serial: ELECRITCAL_SERIAL + electricity_secret: ELECTRICAL_OFFSET + gas_serial: GAS_SERIAL + gas_secret: GAS_SECRET +``` + +Configuration variables: + +- **electricity_serial** (*Required*): Serial of your electricity sensor +- **electricity_secret** (*Required*): Secret for your electricity Sensor +- **gas_serial** (*Required*): Serial for your gas sensor. +- **gas_secret** (*Required*): Secret for your gas sensor. + diff --git a/source/images/supported_brands/loop.png b/source/images/supported_brands/loop.png new file mode 100644 index 0000000000000000000000000000000000000000..a96a4099f89fb3304a21edd0d18a3e510800305a GIT binary patch literal 7192 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 Date: Sun, 3 Apr 2016 09:54:04 +0200 Subject: [PATCH 30/34] Create thermostat.zwave.markdown Copy paste of the binary sensor instruction --- source/_components/thermostat.zwave.markdown | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 source/_components/thermostat.zwave.markdown diff --git a/source/_components/thermostat.zwave.markdown b/source/_components/thermostat.zwave.markdown new file mode 100644 index 0000000000..58bff34961 --- /dev/null +++ b/source/_components/thermostat.zwave.markdown @@ -0,0 +1,14 @@ +--- +layout: page +title: "Z-Wave Thermostat" +description: "Instructions how to setup the Z-Wave thermostat within Home Assistant." +date: 2016-04-03 9:52 +sidebar: true +comments: false +sharing: true +footer: true +logo: z-wave.png +ha_category: Thermostat +--- + +To get your Z-Wave thermostat working with Home Assistant, follow the instructions for the general [Z-Wave component](/components/zwave/). From 99de6098c6bd7279a159b166904679b061c70c6f Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 6 Apr 2016 09:22:51 +0200 Subject: [PATCH 31/34] Fix image name and size --- .../media_player.panasonic_viera.markdown | 13 +++++++------ source/images/supported_brands/panasonic.png | Bin 2576 -> 4347 bytes 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/source/_components/media_player.panasonic_viera.markdown b/source/_components/media_player.panasonic_viera.markdown index 5e0256daad..6902988957 100644 --- a/source/_components/media_player.panasonic_viera.markdown +++ b/source/_components/media_player.panasonic_viera.markdown @@ -7,13 +7,19 @@ sidebar: true comments: false sharing: true footer: true -logo: Panasonic.png +logo: panasonic.png ha_category: Media Player featured: false --- The `panasonic_viera` platform allows you to control a Panasonic Viera TV. +Currently known supported models: + +- TX-P42STW50 + +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/balloob/home-assistant.io). + To add a TV to your installation, add the following to your `configuration.yaml` file: ```yaml @@ -31,8 +37,3 @@ Configuration variables: - **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. -Currently known supported models: - -- TX-P42STW50 - -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/balloob/home-assistant.io). diff --git a/source/images/supported_brands/panasonic.png b/source/images/supported_brands/panasonic.png index f74fb674c90c7e5dd40fd3773624dde5b559f03a..67c008e0dda196ec30f91cadbcb46a8784138c6e 100644 GIT binary patch literal 4347 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 p$Ii}d=L`3bU4C=t&YhX>Irp6JxzpRc z>qPSAlHY4-pRYQQ96Wj|=@|?Sqkr3R@%gk_GIS2_FWsN?ZdzVzyJgmf8CW_F@=}pbdt$5j5@6yZe$|`-kl1Fc?7_3~eK5+7;7Q zCr6H3Y}#N1Z7{TsplQ?QZLt@`U<7S2w2`3CnY1EVv*nn*B!)48sW=Qq&=uP~FKn`x z#9%NO>L%!A>kmiCwQtkWqf$*faQ-ITeQP612x-^9M@zgUVyUXM2+=&u&bvd3arN z*}XrGIOhD@SGxZr+nfIK)@0Gw`*R6&@wb2EE_Er+@xL9|{b%yzTicS0@A_fXSTC8{ zm&|^9N3!pr{v}Kc5I(jL{eDhS{QFQFEMu3C=Iw!wNOE;?|3BOr;$QisM zbBX~RPtV?91YL-r9Tfez7wK$hB+COV((ruKFN#Fa_s!kxJlUd2&aCQ4h`x>(J>!ab zhj{pP^q*%0FqV)`6)9zGHJ~AARva2b8MZ4QSTiD|Q-+|K>nd}LA+zM8p%Vn{mVJtT zc%WJK#zG2Z8)O@La1ue6Z7lcGabEX=)_9J&AM6^@|MTzdtW`-9^ZE#b5JsxnKP2m( zr-B4swy}b$LeMU0UBfuM(_t{QmZ0(eH2pvZb$Ntgd*#F3V@}Ytmlpq)gt6LKjJ8UH zD7~@SzIRCFS+YE*5%$q|>FL<5=C~px9mc)KlAt-4PvR9N=(-IbD?(!vL#qfH0%6&& z^+b4(@t&p72HrKEBym%g<(mFUAT>eIuI~bKH|eRL-Kv3kg4{Ks72?hG@4RUtHtq=U zEQsYw$yyi34wm@Z*ef9gV!xXBG)YRo(ilsErp^C&Pho;)Oxlo&HXcu6(b&W=ZUkM| z=1ERLA$X9ny*nh5c1!dU1kH;Ip%n3!Jo!km=a}xBq^1;3Kqmr4oik@K_xg3CE#^C_~WPiy}!%KgUG~T9cSYI_lLvI3m)$pqUqK=rlpI^mQ+L z&TpnZ7cXXUo|4eNU+!uM8e+z?^+`FBWH&z1ueuITSdzDjIv{o}c%ym8IRY65-nTRs z=8IKE=t*lKB?U1?p(N2mvkHP}nOiMEbI-ygBQift_{d#D0fNT(rzLcGvF&hmBF&fg z<_(6<5i}ZS@8S6Zgmfc}vb_JusD~V)(@4y`K2<}|Vaz%t9*y_r$B045x|Wzmn7@&+ zN&P!R(bH?oL!(0&V&)s$T(S<&FYCU$Rf_VS#h}R}Fi#qS&RR8TjIs|oX$e}B)OC{4 z2%OYXvGOq(Iz`Y(u(VZZyr_6jERpdbizKkT7by{RUPYruYNnDL_RdHN@ow?RiiBO9 z9=La=Xrt=f6OLdE>FbrqCd-I%#InAsB4Xu+BPxQ%U}TL)6KjkSGz17~q3P8YTxb%JS5IGCn~@A-q)v^Z2uWql zlax!K5u?`-bXr;%CZX#lXqQYDz6NBhV3_a(jhD(YILlLo;awTz&PRHFI4LpYW&NSW~w4#N16L@a9H!bTF2O^2l46_r91aHXgSZ zi(rI}Q4F0WXpOWhy_bWBTW%{oz9tCTNvd*wLvk-GIqJ0D3MBy^cV3I_tAR0);^A%u zGYo0>J+Cp2K?=EGEbutnM$j6=nx$u!Dm%4?)nI5PK|B3$Nr{t26Wk<0OVw!Mo*n6U zvgGNy%En#`*ngd)34)%tNLE2GcD!7c%y?H?owu8#VYvO96(1Au30%&lnJ+i?vyc*&W%soX zEJB%x-1iK<(UHbKxDRY{eG_l-B~ifU@?H{5B?FZt`dC(Lcw ze_II}XQAvDaAKq{|vw?umW%+c4n>8jw(tvgvqy#7Mn2DM{N1 z2e4#svecVuLP%FqW^high~Ro8W0T&fi0k5O=0*4Upzs3n3U%0dfKVys&=wPs^vruU z+D_0OtSmJ9Tzfekd4<^bBMpWL1&T{Za6xjABl=!Sgvp+3Nu>=yO@Xn4Y`6x0E&LtZ zQ@QH7m>*OIoP+XY3V`tFyhfS?W0kllMg+wMMv?v?FV4aK8r&aN0eR*8T?Iw~L&!B^ msJLcU2h0J_sZ|Ran#4b_p~h924}CWP0000 Date: Wed, 6 Apr 2016 09:24:43 +0200 Subject: [PATCH 32/34] Fix liquid syntax error --- .../_components/media_player.onkyo.markdown | 68 +++++++++---------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/source/_components/media_player.onkyo.markdown b/source/_components/media_player.onkyo.markdown index 04473cb94d..c7c0f913c1 100644 --- a/source/_components/media_player.onkyo.markdown +++ b/source/_components/media_player.onkyo.markdown @@ -23,38 +23,39 @@ media_player: ``` A few notes: -- Source selection has no front-end UI, but can be controlled by way of service calls. Select the source string from the following list: -``` - video1 - video2 - video3 - video4 - video5 - video6 - video7 - dvd - bd-dvd - tape1 - tv-tape - tape2 - phono - cd - tv-cd - fm - am - tuner - dlna - internet-radio - usb - network - universal-port - multi-ch - xm - sirius - ``` -- Sample automation and input select -``` +Source selection has no front-end UI, but can be controlled by way of service calls. Select the source string from the following list: + +- video1 +- video2 +- video3 +- video4 +- video5 +- video6 +- video7 +- dvd +- bd-dvd +- tape1 +- tv-tape +- tape2 +- phono +- cd +- tv-cd +- fm +- am +- tuner +- dlna +- internet-radio +- usb +- network +- universal-port +- multi-ch +- xm +- sirius + +Sample automation and input select + +```yaml automation: alias: Receiver Source trigger: @@ -65,7 +66,7 @@ automation: data_template: entity_id: media_player.txnr535_000000000000 source: > - {% if is_state('input_select.receiver_source', 'HTPC') %} + {% raw %}{% if is_state('input_select.receiver_source', 'HTPC') %} pc {% elif is_state('input_select.receiver_source', 'Chromecast') %} aux1 @@ -75,7 +76,7 @@ automation: bd {% elif is_state('input_select.receiver_source', 'Raspberry Pi') %} tv - {% endif %} + {% endif %}{% endraw %} input_select: receiver_source: @@ -87,6 +88,5 @@ input_select: - Bluray - Raspberry Pi initial: None - ``` From 045137071a9aa1bfaccd279c20aa93c675cd7303 Mon Sep 17 00:00:00 2001 From: William Hughes Date: Thu, 7 Apr 2016 10:02:07 +1200 Subject: [PATCH 33/34] Documentation 'mac' option for Orvibo platform of the switch component Documents changes made in balloob/home-assistant#1730 --- source/_components/switch.orvibo.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/switch.orvibo.markdown b/source/_components/switch.orvibo.markdown index b365802102..a68cf2761e 100644 --- a/source/_components/switch.orvibo.markdown +++ b/source/_components/switch.orvibo.markdown @@ -20,9 +20,11 @@ To use your Orvibo switch in your installation, add the following to your `confi switch: platform: orvibo host: IP_ADDRESS + mac: MA:CA:DD:RE:SS:00 ``` Configuration variables: - **host** (*Required*): IP address of your switch, eg. 192.168.1.10. +- **mac** (*Optional*): MAC address of the switch, eg "AA:BB:CC:DD:EE:FF". This is required if the switch is connected to a different subnet to the machine running Home Assistant From 8474be607d743176c7f81fdb1595aa7f4c8cad44 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 8 Apr 2016 23:46:05 -0700 Subject: [PATCH 34/34] Release 0.17 --- source/_components/camera.rpi_camera.markdown | 43 ++++++++++++++ source/_components/sensor.nzbget.markdown | 32 +++++++++++ ...asonic-gtfs-and-config-validation.markdown | 56 +++++++++++++++++++ 3 files changed, 131 insertions(+) create mode 100644 source/_components/camera.rpi_camera.markdown create mode 100644 source/_components/sensor.nzbget.markdown create mode 100644 source/_posts/2016-04-09-onkyo-panasonic-gtfs-and-config-validation.markdown diff --git a/source/_components/camera.rpi_camera.markdown b/source/_components/camera.rpi_camera.markdown new file mode 100644 index 0000000000..44cf348374 --- /dev/null +++ b/source/_components/camera.rpi_camera.markdown @@ -0,0 +1,43 @@ +--- +layout: page +title: "Raspberry Pi Camera" +description: "Instructions how to integrate Raspberry Pi within Home Assistant." +date: 2016-04-08 10:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: raspberry-pi.png +ha_category: Camera +ha_iot_class: "Local Polling" +--- + + +The `rpi` platform allows you to integrate the Raspberry Pi camera into Home Assistant. This component uses the application "raspistill" to store the image from camera. + +```yaml +# Example configuration.yaml entry +camera: + platform: raspberry_camera + name: Raspberry Pi Camera + image_width: 640 + image_height: 480 + image_quality: 7 + image_rotation: 0 + timelapse: 1000 + horizontal_flip: 0 + vertical_flip: 0 + file_path: /tmp/image.jpg +``` + +Configuration variables: + + - **name** (optional): name of the camera + - **image_width** (optional): set the image width (default: 640) + - **image_height** (optional): set the image width (default: 480) + - **image_quality** (optional): set the image quality (from 0 to 100, default: 7) + - **image_rotation** (optional): Set image rotation (0-359, default: 0) + - **horizontal_flip** (optional): Set horizontal flip (0 to disable, 1 to enable, default: 0) + - **vertical_flip** (optional): Set vertical flip (0 to disable, 1 to enable, default: 0) + - **timelapse** (optional): Takes a picture every ms (default: 1000) + - **file_path** (optional): Save the picture in a custom file path (default: camera components folder) diff --git a/source/_components/sensor.nzbget.markdown b/source/_components/sensor.nzbget.markdown new file mode 100644 index 0000000000..359ab33e10 --- /dev/null +++ b/source/_components/sensor.nzbget.markdown @@ -0,0 +1,32 @@ +--- +layout: page +title: "NZBGet" +description: "Instructions how to integrate NZBGet within Home Assistant." +date: 2016-04-08 19:59 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Sensor +ha_iot_class: "Local Polling" +--- + +The `NZBGet` platform will allow you to monitor your downloads with [NZBGet](http://NZBGet.net) from within Home Assistant and setup automation based on the information. + +To use NZBGet with your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: nzbget + base_url: http://192.168.1.18:6789 + username: apiuser + password: apipass + monitored_variables: + - ArticleCacheMB + - DownloadRate + - DownloadPaused + - FreeDiskSpaceMB + - PostPaused + - RemainingSizeMB +``` diff --git a/source/_posts/2016-04-09-onkyo-panasonic-gtfs-and-config-validation.markdown b/source/_posts/2016-04-09-onkyo-panasonic-gtfs-and-config-validation.markdown new file mode 100644 index 0000000000..5cb3106d8a --- /dev/null +++ b/source/_posts/2016-04-09-onkyo-panasonic-gtfs-and-config-validation.markdown @@ -0,0 +1,56 @@ +--- +layout: post +title: "0.17: Onkyo, Panasonic, GTFS and config validation" +description: "Home Assistant 0.17 has arrived." +date: 2016-04-08 23:10:00 -0700 +date_formatted: "April 9, 2016" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +--- + +Another awesome release ready to hit your homes. YAML can be hard for beginners and more experienced automators. So to help catch those pesky errors that sneak into your files we've been hard at work to introduce config validation! Especially huge thanks to @jaharkes for his hard work on this. Config validation is still in it's early stages. More common platforms and components have been added but we didn't do everything yet. + +When we encounter an invalid config we will now write a warning to your logs. You can see those in the frontend by clicking on the last developer tool. We're looking into options to make it more clear - it is a work in progress. + +Another big thing is the addition of GTFS support. You probably don't know it, but GTFS is the standard that public transit companies all over the world use to distribute their schedule. This means that you can now have the time of the next bus/train/etc right in your frontend. + + + + - Config validation ([@balloob], [@jaharkes]) + - Sensor: [GTFS] support (public transit open standard) ([@robbiet480]) + - Camera: [Raspberry PI] support added ([@LucaSoldi]) + - Z-Wave: improved startup reliability ([@srcLurker]) + - Media Player: [Onkyo receiver] now supported ([@danieljkemp]) + - Sensor: [Loop Energy] now supported ([@pavoni]) + - Thermostat: [Z-Wave] now supported ([@coteyr], [@turbokongen], [@luxus]) + - Sensor: [NZBGet] now supported ([@justyns]) + - Media Player: [Panasonic Viera TV] now supported ([@florianholzapfel]) + - Thermostats: Use whole degrees if user uses Fahrenheit ([@JshWright]) + - Frontend: more material love ([@balloob]) + +[@balloob]: https://github.com/balloob/ +[@coteyr]: https://github.com/coteyr/ +[@danieljkemp]: https://github.com/danieljkemp/ +[@florianholzapfel]: https://github.com/florianholzapfel/ +[@jaharkes]: https://github.com/jaharkes/ +[@JshWright]: https://github.com/JshWright/ +[@justyns]: https://github.com/justyns/ +[@LucaSoldi]: https://github.com/LucaSoldi/ +[@luxus]: https://github.com/luxus/ +[@pavoni]: https://github.com/pavoni/ +[@robbiet480]: https://github.com/robbiet480/ +[@srcLurker]: https://github.com/srcLurker/ +[@turbokongen]: https://github.com/turbokongen/ +[GTFS]: /components/sensor.gtfs/ +[Loop Energy]: /components/sensor.loop_energy/ +[NZBGet]: /components/sensor.nzbget/ +[Onkyo receiver]: /components/media_player.onkyo/ +[Panasonic Viera TV]: /components/media_player.panasonic_viera/ +[Raspberry PI]: /components/camera.rpi_camera/ +[Z-Wave]: /components/thermostat.zwave/ + +### Breaking changes + +As of now we are not aware of any breaking changes. However, it might be that Home Assistant will not start for you because of an invalid configuration. A common mistake that people are making is that they are still referring to `execute_service` in their script configs. This should be `service`.