diff --git a/atom.xml b/atom.xml index b59829fc1a..80c7083e4a 100644 --- a/atom.xml +++ b/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Home Assistant]]> - 2015-09-01T02:02:41-07:00 + 2015-09-10T12:38:32-07:00 https://home-assistant.io/ @@ -16,7 +16,7 @@ <![CDATA[0.7: Better UI and improved distribution]]> - 2015-08-31T22:12:00-07:00 + 2015-08-31T14:12:00-07:00 https://home-assistant.io/blog/2015/08/31/version-7-revamped-ui-and-improved-distribution As Home Assistant is gaining more and more users we started to feel the pain from not having a proper release mechanism. We had no version numbering and required users to checkout the source diff --git a/blog/2015/08/31/version-7-revamped-ui-and-improved-distribution/index.html b/blog/2015/08/31/version-7-revamped-ui-and-improved-distribution/index.html index 952dbc16f9..e3baa78fac 100644 --- a/blog/2015/08/31/version-7-revamped-ui-and-improved-distribution/index.html +++ b/blog/2015/08/31/version-7-revamped-ui-and-improved-distribution/index.html @@ -113,7 +113,7 @@ - + @@ -127,7 +127,7 @@ diff --git a/blog/archives/index.html b/blog/archives/index.html index c845eb4e61..390a29e2de 100644 --- a/blog/archives/index.html +++ b/blog/archives/index.html @@ -22,7 +22,7 @@ - + @@ -117,7 +117,7 @@
-
@@ -132,7 +132,7 @@ diff --git a/blog/categories/architecture/atom.xml b/blog/categories/architecture/atom.xml index 2ad0c34f46..3a2b490735 100644 --- a/blog/categories/architecture/atom.xml +++ b/blog/categories/architecture/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: architecture | Home Assistant]]> - 2015-09-01T02:02:41-07:00 + 2015-09-10T12:38:32-07:00 https://home-assistant.io/ diff --git a/blog/categories/branding/atom.xml b/blog/categories/branding/atom.xml index 4d31746370..9d587f10d0 100644 --- a/blog/categories/branding/atom.xml +++ b/blog/categories/branding/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: branding | Home Assistant]]> - 2015-09-01T02:02:41-07:00 + 2015-09-10T12:38:32-07:00 https://home-assistant.io/ diff --git a/blog/categories/component/atom.xml b/blog/categories/component/atom.xml index 1bb4039732..4fc8cf24a0 100644 --- a/blog/categories/component/atom.xml +++ b/blog/categories/component/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: component | Home Assistant]]> - 2015-09-01T02:02:41-07:00 + 2015-09-10T12:38:32-07:00 https://home-assistant.io/ diff --git a/blog/categories/core/atom.xml b/blog/categories/core/atom.xml index 6ccdeaea6b..4ac6d9c348 100644 --- a/blog/categories/core/atom.xml +++ b/blog/categories/core/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: core | Home Assistant]]> - 2015-09-01T02:02:41-07:00 + 2015-09-10T12:38:32-07:00 https://home-assistant.io/ diff --git a/blog/categories/frontend/atom.xml b/blog/categories/frontend/atom.xml index 78b42f4f8f..67d448d45f 100644 --- a/blog/categories/frontend/atom.xml +++ b/blog/categories/frontend/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: frontend | Home Assistant]]> - 2015-09-01T02:02:41-07:00 + 2015-09-10T12:38:32-07:00 https://home-assistant.io/ diff --git a/blog/categories/release-notes/atom.xml b/blog/categories/release-notes/atom.xml index ca487f0527..5a6978ad5f 100644 --- a/blog/categories/release-notes/atom.xml +++ b/blog/categories/release-notes/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: release-notes | Home Assistant]]> - 2015-09-01T02:02:41-07:00 + 2015-09-10T12:38:32-07:00 https://home-assistant.io/ @@ -13,135 +13,6 @@ Octopress - - <![CDATA[0.7: Better UI and improved distribution]]> - - 2015-08-31T22:12:00-07:00 - https://home-assistant.io/blog/2015/08/31/version-7-revamped-ui-and-improved-distribution - As Home Assistant is gaining more and more users we started to feel the pain from not having a -proper release mechanism. We had no version numbering and required users to checkout the source -using Git to get started. On top of that, as the number of devices that we support keeps raising, so -did the number of dependencies that are used. That’s why we decided to change the way we roll. From -now on:

- -
    -
  • Each release will have a version number, starting with version 0.7. This was chosen because it -shows that we have been around for some time but are not considering ourselves to be fully -stable.
  • -
  • Each release will be pushed to PyPi. This will be the only supported method of distribution.
  • -
  • Home Assistant is available after installation as a command-line utility hass.
  • -
  • The default configuration location has been moved from config in the current working directory -to ~/.homeassistant (%APPDATA%/.homeassistant on Windows).
  • -
  • Requirements for components and platforms are no longer installed into the current Python -environment (being virtual or not) but will be installed in <config-dir>/lib.
  • -
- - -

A huge shout out to Ryan Kraus for making this all possible. Please -make sure you read the full blog post for details on how to migrate your existing setup.

- -

And while Ryan was fixing distribution, I have been hard at work in giving Home Assistant a face -lift. We already looked pretty good but lacked proper form of organization for users with many -devices. The new UI moves away from a card per entity and has cards per group and domain instead. -The demo has been updated so give it a spin.

- -

- - - - Screenshots of the new UI -

- - - - - - - -

Migration to version 0.7

- -

For this example, let’s say we have an old Home Assistant installation in -/home/paulus/home-assistant.

- -

If you want to migrate your existing configuration to be used as the default configuration:

- -
cp -r /home/paulus/home-assistant ~/.homeassistant
-
- -

It If you want to have the configuration in a different location, for example -/home/paulus/home-assistant-config, you will have to point Home Assistant at this configuration -folder when launching:

- -
hass --config /home/paulus/home-assistant-config
-
- -

New platforms

- -

And last, but not least: new platforms!

- -

MQTT Sensors and Switches
- -@sfam has blessed us with two more MQTT platforms to extend our -integration with MQTTT: sensor and switch. Both platforms require the -MQTT component to be connected to a broker.

- -
# Example configuration.yml entr
-sensor:
-  platform: mqtt
-  name: "MQTT Sensor"
-  state_topic: "home/bedroom/temperature"
-  unit_of_measurement: "ºC"
-
-switch:
-  platform: mqtt
-  name: "Bedroom Switch"
-  state_topic: "home/bedroom/switch1"
-  command_topic: "home/bedroom/switch1/set"
-  payload_on: "ON"
-  payload_off: "OFF"
-  optimistic: false
-
- -

Actiontec MI424WR Verizon FIOS Wireless router
- -Nolan has contributed support for Actiontec wireless routers.

- -
# Example configuration.yaml entry
-device_tracker:
-  platform: actiontec
-  host: YOUR_ROUTER_IP
-  username: YOUR_ADMIN_USERNAME
-  password: YOUR_ADMIN_PASSWORD
-
- -

DHT temperature and humidty sensors
-@MakeMeASandwich has contributed support for DHT temperature -and humidity sensors. It allows you to get the current temperature and humidity from a DHT11, DHT22, -or AM2302 device.

- -
# Example configuration.yaml entry
-sensor:
-  platform: dht
-  sensor: DHT22
-  pin: 23
-  monitored_conditions:
-    - temperature
-    - humidity
-
- -

Aruba device tracker
-Michael Arnauts has contributed support for Aruba wireless routers for presence detection.

- -
# Example configuration.yaml entry
-device_tracker:
-  platform: aruba
-  host: YOUR_ACCESS_POINT_IP
-  username: YOUR_ADMIN_USERNAME
-  password: YOUR_ADMIN_PASSWORD
-
-]]>
-
- <![CDATA[Verisure devices and modern TP-Link routers now supported]]> @@ -576,6 +447,124 @@ switch: username: YOUR_USERNAME password: YOUR_PASSWORD +]]> + + + + <![CDATA[Release notes for May 14, 2015]]> + + 2015-05-14T22:25:00-07:00 + https://home-assistant.io/blog/2015/05/14/release-notes + Almost three busy weeks have past since the last release. We used this time to finally make the overhaul to use UTC as the internal date time format. We added a bunch of test coverage in the process to make sure the transition went smoothly. Pleas see the blog post about the UTC refactor for backwards incompatible changes.

+ +

This release includes a significant startup boost for the frontend and a fix for Wemo discovery after their latest firmware upgrade.

+ +

I would like to give a big shout out to our newest contributor fabaff for taking the time to improve the documentation.

+ +

+To update to the latest version, run scripts/update. Please report any issues on GitHub. +

+ + + + + + + +

Overwriting Entity Attributes
+Before diving into the newly supported devices and services, I want to highlight an awesome configuration enhancement by rmkraus: overwriting entity attributes.

+ +

These new configuration settings allow you to overwrite entity state attributes. The main usage for this is being able to overwrite attributes that influence how an entity is shown in the interface.

+ +
# Example configuration.yaml entry
+homeassistant:
+  customize:
+    light.bowl:
+      # hides this entity from the interface
+      hidden: true
+    light.ceiling:
+      # Replaces the state badge with given picture
+      entity_picture: http://graph.facebook.com/schoutsen/picture
+
+ +

MySensors
+ +Andythigpen and Theolind have added support for the MySensors platform to Home Assistant.

+ +
# Example configuration.yaml entry
+sensor:
+  platform: mysensors
+  port: /dev/ttyACM0
+
+ +

OpenWeatherMap
+ +Fabaff has contributed support for OpenWeatherMap. This will allow you to integrate local meteorological data into Home Assistant.

+ +
# Example configuration.yaml entry
+sensor:
+  platform: openweathermap
+  api_key: YOUR_API_KEY
+  monitored_variables:
+    - type: 'weather'
+    - type: 'temperature'
+    - type: 'wind_speed'
+    - type: 'humidity'
+    - type: 'pressure'
+    - type: 'clouds'
+    - type: 'rain'
+    - type: 'snow'
+
+ +

InstaPush
+ +Fabaff has contributed support for InstaPush. This will allow you send messages from Home Assistant to your iOS and Android devices.

+ +
# Example configuration.yaml entry
+notify:
+    platform: instapush
+    # Get those by creating a new application, event, and tracker on https://instapush.im
+    api_key: ABCDEFGHJKLMNOPQRSTUVXYZ
+    app_secret: ABCDEFGHJKLMNOPQRSTUVXYZ
+    event: ABCDEFGHJKLMNOPQRSTUVXYZ
+    tracker: ABCDEFGHJKLMNOPQRSTUVXYZ
+
+ +

XMPP
+ +Fabaff has contributed support for Jabber/XMPP. This will allow you send messages from Home Assistant to anyone on Jabber/XMPP.

+ +
# Example configuration.yaml entry
+notify:
+    platform: xmpp
+    sender: YOUR_JID
+    password: YOUR_JABBER_ACCOUNT_PASSWORD
+    recipient: YOUR_RECIPIENT
+
+ +

Notify My Android
+ +Fabaff has contributed support for Notify My Android. This will allow you to send messages from Home Assistant to your Android device.

+ +
# Example configuration.yaml entry
+notify:
+    platform: nma
+    # Get this by registering a new application on http://www.notifymyandroid.com/
+    api_key: ABCDEFGHJKLMNOPQRSTUVXYZ
+
+ +

Time & Date sensor
+Fabaff has contributed a time & date sensor. This will allow you to show the current time/date on the dashboard.

+ +
# Example configuration.yaml entry
+sensor:
+  platform: time_date
+  monitored_variables:
+    - type: 'time'
+    - type: 'date'
+    - type: 'date_time'
+    - type: 'time_date'
+
]]>
diff --git a/blog/categories/release-notes/index.html b/blog/categories/release-notes/index.html index 84981dc456..6c525c8d25 100644 --- a/blog/categories/release-notes/index.html +++ b/blog/categories/release-notes/index.html @@ -114,43 +114,6 @@ - - - -
- -
diff --git a/blog/categories/user-stories/atom.xml b/blog/categories/user-stories/atom.xml index 0a58e6a453..1afedbe207 100644 --- a/blog/categories/user-stories/atom.xml +++ b/blog/categories/user-stories/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: user-stories | Home Assistant]]> - 2015-09-01T02:02:41-07:00 + 2015-09-10T12:38:32-07:00 https://home-assistant.io/ @@ -13,6 +13,135 @@ Octopress + + <![CDATA[0.7: Better UI and improved distribution]]> + + 2015-08-31T14:12:00-07:00 + https://home-assistant.io/blog/2015/08/31/version-7-revamped-ui-and-improved-distribution + As Home Assistant is gaining more and more users we started to feel the pain from not having a +proper release mechanism. We had no version numbering and required users to checkout the source +using Git to get started. On top of that, as the number of devices that we support keeps raising, so +did the number of dependencies that are used. That’s why we decided to change the way we roll. From +now on:

+ +
    +
  • Each release will have a version number, starting with version 0.7. This was chosen because it +shows that we have been around for some time but are not considering ourselves to be fully +stable.
  • +
  • Each release will be pushed to PyPi. This will be the only supported method of distribution.
  • +
  • Home Assistant is available after installation as a command-line utility hass.
  • +
  • The default configuration location has been moved from config in the current working directory +to ~/.homeassistant (%APPDATA%/.homeassistant on Windows).
  • +
  • Requirements for components and platforms are no longer installed into the current Python +environment (being virtual or not) but will be installed in <config-dir>/lib.
  • +
+ + +

A huge shout out to Ryan Kraus for making this all possible. Please +make sure you read the full blog post for details on how to migrate your existing setup.

+ +

And while Ryan was fixing distribution, I have been hard at work in giving Home Assistant a face +lift. We already looked pretty good but lacked proper form of organization for users with many +devices. The new UI moves away from a card per entity and has cards per group and domain instead. +The demo has been updated so give it a spin.

+ +

+ + + + Screenshots of the new UI +

+ + + + + + + +

Migration to version 0.7

+ +

For this example, let’s say we have an old Home Assistant installation in +/home/paulus/home-assistant.

+ +

If you want to migrate your existing configuration to be used as the default configuration:

+ +
cp -r /home/paulus/home-assistant ~/.homeassistant
+
+ +

It If you want to have the configuration in a different location, for example +/home/paulus/home-assistant-config, you will have to point Home Assistant at this configuration +folder when launching:

+ +
hass --config /home/paulus/home-assistant-config
+
+ +

New platforms

+ +

And last, but not least: new platforms!

+ +

MQTT Sensors and Switches
+ +@sfam has blessed us with two more MQTT platforms to extend our +integration with MQTTT: sensor and switch. Both platforms require the +MQTT component to be connected to a broker.

+ +
# Example configuration.yml entr
+sensor:
+  platform: mqtt
+  name: "MQTT Sensor"
+  state_topic: "home/bedroom/temperature"
+  unit_of_measurement: "ºC"
+
+switch:
+  platform: mqtt
+  name: "Bedroom Switch"
+  state_topic: "home/bedroom/switch1"
+  command_topic: "home/bedroom/switch1/set"
+  payload_on: "ON"
+  payload_off: "OFF"
+  optimistic: false
+
+ +

Actiontec MI424WR Verizon FIOS Wireless router
+ +Nolan has contributed support for Actiontec wireless routers.

+ +
# Example configuration.yaml entry
+device_tracker:
+  platform: actiontec
+  host: YOUR_ROUTER_IP
+  username: YOUR_ADMIN_USERNAME
+  password: YOUR_ADMIN_PASSWORD
+
+ +

DHT temperature and humidty sensors
+@MakeMeASandwich has contributed support for DHT temperature +and humidity sensors. It allows you to get the current temperature and humidity from a DHT11, DHT22, +or AM2302 device.

+ +
# Example configuration.yaml entry
+sensor:
+  platform: dht
+  sensor: DHT22
+  pin: 23
+  monitored_conditions:
+    - temperature
+    - humidity
+
+ +

Aruba device tracker
+Michael Arnauts has contributed support for Aruba wireless routers for presence detection.

+ +
# Example configuration.yaml entry
+device_tracker:
+  platform: aruba
+  host: YOUR_ACCESS_POINT_IP
+  username: YOUR_ADMIN_USERNAME
+  password: YOUR_ADMIN_PASSWORD
+
+]]>
+
+ <![CDATA[Laundry Automation: insight and notifications]]> diff --git a/blog/categories/user-stories/index.html b/blog/categories/user-stories/index.html index 52dfbab0da..ee0c6fe77f 100644 --- a/blog/categories/user-stories/index.html +++ b/blog/categories/user-stories/index.html @@ -114,6 +114,43 @@ + + + +
+ +
diff --git a/blog/categories/website/atom.xml b/blog/categories/website/atom.xml index 1416601b95..25b28e3b2d 100644 --- a/blog/categories/website/atom.xml +++ b/blog/categories/website/atom.xml @@ -4,7 +4,7 @@ <![CDATA[Category: website | Home Assistant]]> - 2015-09-01T02:02:41-07:00 + 2015-09-10T12:38:32-07:00 https://home-assistant.io/ diff --git a/blog/index.html b/blog/index.html index cb9cdd20da..c655337225 100644 --- a/blog/index.html +++ b/blog/index.html @@ -22,7 +22,7 @@ - + @@ -118,7 +118,7 @@ - + @@ -132,7 +132,7 @@ diff --git a/components/arduino.html b/components/arduino.html index a6f8ee83f5..ba445414f0 100644 --- a/components/arduino.html +++ b/components/arduino.html @@ -127,8 +127,12 @@
-

The port where is your board connected to your Home Assistant host. If you are using an original Arduino the port will be named ttyACM*. The exact -number can be determined with ls /dev/ttyACM*.

+

Configuration variables:

+ +
    +
  • port (Required): The port where your board is connected to your Home Assistant host. If you are using an original Arduino the port will be named ttyACM*. The exact number can be determined with ls /dev/ttyACM*.
  • +
+
1
 
ls /dev/ttyACM*
@@ -171,9 +175,20 @@ A word of caution: The Arduino boards are not storing states. This means that wi
 
-

The digital pins are numbered from 0 to 13. The available pins are 2 till 13. For testing purposes you can use pin 13 because with that pin you can control the internal LED.

+

Configuration variables:

-

The name field of the pins array will be used in the frontend.

+
    +
  • pins array (Required): Pins to use. + +
      +
    • name: Name that will be used in the frontend for the pin.
    • +
    • type: The type of the pin. At the moment only ‘digital’ is supported.
    • +
    +
  • +
+ + +

The digital pins are numbered from 0 to 13. The available pins are 2 till 13. For testing purposes you can use pin 13 because with that pin you can control the internal LED.

Sensor Configuration

@@ -204,9 +219,20 @@ A word of caution: The Arduino boards are not storing states. This means that wi
-

The 6 analog pins are numbered from A0 to A5.

+

Configuration variables:

-

The name field of the pins array will be used in the frontend.

+
    +
  • pins array (Required): Pins to use. + +
      +
    • name: Name that will be used in the frontend for the pin.
    • +
    • type: The type of the pin. At the moment only ‘analog’ is supported.
    • +
    +
  • +
+ + +

The 6 analog pins are numbered from A0 to A5.

diff --git a/components/camera.generic.html b/components/camera.generic.html index 2ed8bb62ea..4bebbbd320 100644 --- a/components/camera.generic.html +++ b/components/camera.generic.html @@ -110,6 +110,8 @@

Home Assistant will serve the images via its server, making it possible to view your IP camera’s while outside of your network.

+

To enable this sensor in your installation, add the following to your configuration.yaml file:

+
1
 2
 3
@@ -120,13 +122,23 @@
 
# Example configuration.yaml entry
 camera:
   platform: generic
-  name: my sample camera
-  username: MY_USERNAME
-  password: MY_PASSWORD
   still_image_url: http://194.218.96.92/jpg/image.jpg
+  name: my sample camera
+  username: USERNAME
+  password: PASSWORD
 
+

Configuration variables:

+ +
    +
  • still_image_url Required: The URL your camera serves the image on, eg. http://192.168.1.21:2112/
  • +
  • name Optional: This parameter allows you to override the name of your camera.
  • +
  • username Optional: The username for accessing your camera.
  • +
  • password Optional: The password for accessing your camera.
  • +
+ +
diff --git a/components/device_tracker.actiontec.html b/components/device_tracker.actiontec.html index 0d592b38a4..820082e22f 100644 --- a/components/device_tracker.actiontec.html +++ b/components/device_tracker.actiontec.html @@ -107,8 +107,12 @@

This platform allows you to detect presence by looking at connected devices to an Actiontec device.

-

Supported devices: -- MI424WR (Verizon FIOS)

+

Supported devices (tested):

+ +
    +
  • MI424WR (Verizon FIOS)
  • +
+

This device tracker needs telnet to be enabled on the router. @@ -123,15 +127,27 @@ This device tracker needs telnet to be enabled on the router. 4 5 6 +7

# Example configuration.yaml entry
 device_tracker:
   platform: actiontec
   host: YOUR_ROUTER_IP
   username: YOUR_ADMIN_USERNAME
   password: YOUR_ADMIN_PASSWORD
+  home_interval: MINUTES
 
+

Configuration variables:

+ +
    +
  • host (Required): The IP address of your router, e.g. 192.168.1.1.
  • +
  • username (Required: The username of an user with administrative privileges, usually admin.
  • +
  • password (Required): The password for your given admin account.
  • +
  • home_interval (Optional): If the home_interval is set then the component will not let a device be AWAY if it has been HOME in the last home_interval minutes. This is in addition to the 3 minute wait built into the device_tracker component.
  • +
+ +

See the device tracker component page for instructions how to configure the people to be tracked.

diff --git a/components/device_tracker.aruba.html b/components/device_tracker.aruba.html index 987641f182..10a37e2655 100644 --- a/components/device_tracker.aruba.html +++ b/components/device_tracker.aruba.html @@ -104,7 +104,15 @@
-

This platform allows you to detect presence by looking at connected devices to an Aruba Instant device. This has been tested on an ARUBA AP-105.

+

+This platform allows you to detect presence by looking at connected devices to an Aruba Instant device.

+ +

Supported devices (tested):

+ +
    +
  • ARUBA AP-105
  • +
+

This device tracker needs telnet to be enabled on the router. @@ -128,6 +136,15 @@ This device tracker needs telnet to be enabled on the router. +

Configuration variables:

+ +
    +
  • host Required: The IP address of your router, e.g. 192.168.1.1.
  • +
  • username Required: The username of an user with administrative privileges, usually admin.
  • +
  • password Required: The password for your given admin account.
  • +
+ +

See the device tracker component page for instructions how to configure the people to be tracked.

diff --git a/components/device_tracker.asuswrt.html b/components/device_tracker.asuswrt.html index 6f02f0a96b..74966d0742 100644 --- a/components/device_tracker.asuswrt.html +++ b/components/device_tracker.asuswrt.html @@ -107,6 +107,11 @@

This platform offers presence detection by looking at connected devices to a ASUSWRT based router.

+

+This device tracker needs telnet to be enabled on the router. +

+ +

To use an ASUSWRT router in your installation, add the following to your configuration.yaml file:

1
@@ -124,7 +129,14 @@ This platform offers presence detection by looking at connected devices to a 
-

This device tracker needs telnet to be enabled on the router.

+

Configuration variables:

+ +
    +
  • host (Required): The IP address of your router, e.g. 192.168.1.1.
  • +
  • username (Required: The username of an user with administrative privileges, usually admin.
  • +
  • password (Required): The password for your given admin account.
  • +
+

See the device tracker component page for instructions how to configure the people to be tracked.

diff --git a/components/device_tracker.ddwrt.html b/components/device_tracker.ddwrt.html index a06d3401a4..9d237a76f9 100644 --- a/components/device_tracker.ddwrt.html +++ b/components/device_tracker.ddwrt.html @@ -118,12 +118,21 @@ This platform offers presence detection by looking at connected devices to a
# Example configuration.yaml entry
 device_tracker:
   platform: ddwrt
-  host: 192.168.1.1
-  username: admin
-  password: PASSWORD
+  host: ROUTER_IP_ADDRESS
+  username: YOUR_ADMIN_USERNAME
+  password: YOUR_ADMIN_PASSWORD
 
+

Configuration variables:

+ +
    +
  • host (Required): The IP address of your router, e.g. 192.168.1.1.
  • +
  • username (Required: The username of an user with administrative privileges, usually admin.
  • +
  • password (Required): The password for your given admin account.
  • +
+ +

See the device tracker component page for instructions how to configure the people to be tracked.

diff --git a/components/device_tracker.html b/components/device_tracker.html index 1419b95b9c..a60ed4e68a 100644 --- a/components/device_tracker.html +++ b/components/device_tracker.html @@ -107,11 +107,15 @@

Home Assistant can get information from your wireless router to track which devices are connected. There are three different types of supported wireless routers:

@@ -119,16 +123,19 @@

To get started add the following lines to your configuration.yaml (example for Netgear):

-
1
+
1
 2
 3
 4
 5
-
device_tracker:
-  platform: netgear
-  host: 192.168.1.1
-  username: admin
-  password: MY_PASSWORD
+6 +
# Example configuration.yaml entry for Netgear device
+device_tracker:
+  platform: netgear
+  host: 192.168.1.1
+  username: admin
+  password: YOUR_PASSWORD
+

Once tracking, the device_tracker component will maintain a file in your config dir called known_devices.csv. Edit this file to adjust which devices have to be tracked. Here you can also setup a url for each device to be used as the entity picture.

diff --git a/components/device_tracker.luci.html b/components/device_tracker.luci.html index 8311992653..3c4ad0d887 100644 --- a/components/device_tracker.luci.html +++ b/components/device_tracker.luci.html @@ -116,12 +116,21 @@ Before this scanner can be used you have to install the luci RPC package on Open
# Example configuration.yaml entry
 device_tracker:
   platform: luci
-  host: 192.168.1.1
-  username: admin
-  password: PASSWORD
+  host: ROUTER_IP_ADDRESS
+  username: YOUR_ADMIN_USERNAME
+  password: YOUR_ADMIN_PASSWORD
 
+

Configuration variables:

+ +
    +
  • host (Required): The IP address of your router, e.g. 192.168.1.1.
  • +
  • username (Required: The username of an user with administrative privileges, usually admin.
  • +
  • password (Required): The password for your given admin account.
  • +
+ +

See the device tracker component page for instructions how to configure the people to be tracked.

diff --git a/components/device_tracker.netgear.html b/components/device_tracker.netgear.html index 8240a1112d..684163aba0 100644 --- a/components/device_tracker.netgear.html +++ b/components/device_tracker.netgear.html @@ -116,12 +116,21 @@ This platform allows you to detect presence by looking at connected devices to a
# Example configuration.yaml entry
 device_tracker:
   platform: netgear
-  host: 192.168.1.1
-  username: admin
-  password: PASSWORD
+  host: YOUR_ROUTER_IP
+  username: YOUR_ADMIN_USERNAME
+  password: YOUR_ADMIN_PASSWORD
 
+

Configuration variables:

+ +
    +
  • host (Required): The IP address of your router, e.g. 192.168.1.1.
  • +
  • username (Required: The username of an user with administrative privileges, usually admin.
  • +
  • password (Required): The password for your given admin account.
  • +
+ +

See the device tracker component page for instructions how to configure the people to be tracked.

diff --git a/components/device_tracker.tomato.html b/components/device_tracker.tomato.html index a863648e1e..f5a6fd6e36 100644 --- a/components/device_tracker.tomato.html +++ b/components/device_tracker.tomato.html @@ -117,13 +117,23 @@ Tomato requires an extra config variable called http_id. The value
# Example configuration.yaml entry
 device_tracker:
   platform: tomato
-  host: 192.168.1.1
-  username: admin
-  password: PASSWORD
-  http_id: ABCDEFG
+  host: YOUR_ROUTER_IP_ADDRESS
+  username: YOUR_ADMIN_USERNAME
+  password:  YOUR_ADMIN_PASSWORD
+  http_id: YOUR_HTTP_ID
 
+

Configuration variables:

+ +
    +
  • host (Required): The IP address of your router, e.g. 192.168.1.1.
  • +
  • username (Required: The username of an user with administrative privileges, usually admin.
  • +
  • password (Required): The password for your given admin account.
  • +
  • http_id (Required): The value can be obtained by logging in to the Tomato admin interface and search for http_id in the page source code.
  • +
+ +

See the device tracker component page for instructions how to configure the people to be tracked.

diff --git a/components/device_tracker.tplink.html b/components/device_tracker.tplink.html index 7380966ffb..44493b5bc1 100644 --- a/components/device_tracker.tplink.html +++ b/components/device_tracker.tplink.html @@ -122,6 +122,15 @@ This platform allows you to detect presence by looking at connected devices to a +

Configuration variables:

+ +
    +
  • host (Required): The IP address of your router, e.g. 192.168.1.1.
  • +
  • username (Required: The username of an user with administrative privileges, usually admin.
  • +
  • password (Required): The password for your given admin account.
  • +
+ +

See the device tracker component page for instructions how to configure the people to be tracked.

diff --git a/components/discovery.html b/components/discovery.html index de038f00d3..42ff345ee7 100644 --- a/components/discovery.html +++ b/components/discovery.html @@ -125,6 +125,11 @@ Home Assistant can discover and automatically configure zeroconf/mDNS and uPnP d

If you are developing a new platform, please read how to make your platform discoverable.

+

+There is currently a known issue with running this playform on a 64-bit version of Python. +

+ + diff --git a/components/ifttt.html b/components/ifttt.html new file mode 100644 index 0000000000..23d9414719 --- /dev/null +++ b/components/ifttt.html @@ -0,0 +1,219 @@ + + + + + + + + + + + + IFTTT - Home Assistant + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+ +
+ + +
+ + +
+

+ IFTTT +

+
+
+ + +

+IFTTT is a web service that allows users to create chains of simple conditional statements, so called “recipes”. With the ifttt component you can trigger recipes through the “maker” channel.

+ +
1
+2
+3
+
# Example configuration.yaml entry
+ifttt:
+  key: xxxxx-x-xxxxxxxxxxxxx
+
+ + +

Key is your API key which can be obtained by viewing the properties of the Maker Channel.

+ +

+ +Property screen of the Maker Channel +

+ + +

Once you have added your key to configuration.yaml, restart your Home Assistant server. This will load up the IFTTT component and make a service available to trigger events in IFTTT.

+ +

+After restarting the server, be sure to watch the console for any logging errors that show up in red, white or yellow. +

+ + +

Testing your trigger

+ +

You can use the developer tools to test your Maker Channel trigger. To do this, open the Home Assistant UI, open the sidebar, click on the first icon in the developer tools. This should get you to the ‘Call Service’ screen. Fill in the following values:

+ + + + + + + + + + + + + + + + + + + + + + +
Field Value
domain ifttt
service trigger
Service Data {"event": "EventName", "value1": "Hello World"}
+ + +

+ +When your screen looks like this, click the ‘call service’ button. +

+ + +

Setting up a recipe

+ +

+ +You need to setup a unique trigger for each event you sent to IFTTT. +

+ + + +
+ + +
+ + +
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/index.html b/components/index.html index 77daaee3be..648365b4ce 100644 --- a/components/index.html +++ b/components/index.html @@ -165,7 +165,7 @@ - + DHTxx reads the temperature and humidity. @@ -209,12 +209,17 @@ - RFXtrx sensors monitors values from RFXtrx sensors. + RFXtrx sensors monitors values from RFXtrx devices. - MQTT allows sending and recieving MQTT messages. + MQTT allows sending and recieving MQTT messages, incl. switches and sensors. + + + + + aREST sensors monitors values from aREST enabled devices. @@ -246,7 +251,7 @@ - + Aruba routers @@ -307,7 +312,7 @@ - Google Cast devices + Google Cast @@ -325,6 +330,11 @@ Logitech Squeezebox + + + Denon Network Receivers + + @@ -552,7 +562,7 @@ the manufacturers of these devices.

Web services

-

The web services displays data grabbed from an external source.

+

The web services displays data grabbed from an external source or interact with them.

@@ -573,7 +583,12 @@ the manufacturers of these devices. - + + + + + +
Swiss Public Transport displays Swiss timetable data for traveling.Swiss Public Transport displays Swiss timetable data for traveling.
IFTTT allows the triggering of recipes.
diff --git a/components/isy994.html b/components/isy994.html index 2f6c6977d1..56d7aa06e6 100644 --- a/components/isy994.html +++ b/components/isy994.html @@ -116,8 +116,7 @@ Devices.

that is configured on the controller. Using the programs on the controller, custom switches and sensors can also be created.

-

To integrate your ISY994 controller with Home Assistant, add the following -section to your configuration.yaml file:

+

To integrate your ISY994 controller with Home Assistant, add the following section to your configuration.yaml file:

1
 2
@@ -127,46 +126,34 @@ section to your configuration.yaml file:

6 7 8 -9 -10 -11
# Example configuration.yaml entry
 isy994:
-    # requried
-    host: ISY_ADDRESS
-    username: ISY_USERNAME
-    password: ISY_PASSWORD
-
-    # optional
-    sensor_string: SENSOR_STRING
-    hidden_string: HIDDEN_STRING
-    tls: TLS_VERSION
+  host: ISY_ADDRESS
+  username: ISY_USERNAME
+  password: ISY_PASSWORD
+  sensor_string: SENSOR_STRING
+  hidden_string: HIDDEN_STRING
+  tls: TLS_VERSION
 
-

The ISY_ADDRESS should be in full URL format. For example: -http://192.168.10.100:80

+

Configuration variables:

-

The ISY_USERNAME and ISY_PASSWORD are the configured username and password used -to access the ISY interface.

- -

The SENSOR_STRING is a string that is used to identify which devices are to be -assumed to be sensors instead of lights of switches. By default, this string is -‘Sensor’. If this string is found in the device name, Home Assistant will -assume it is as a sensor.

- -

The HIDDEN_STRING is a string that is used to identify which devices are to be +

    +
  • host (Required): The host entry should be in full URL format, eg. http://192.168.10.100:80
  • +
  • username (Required): The username that used to access the ISY interface.
  • +
  • password (Required): The password that used to access the ISY interface.

  • +
  • sensor_string (Optional): This is the string that is used to identify which devices are to be assumed to be sensors instead of lights of switches. By default, this string is ‘Sensor’. If this string is found in the device name, Home Assistant will +assume it is as a sensor.

  • +
  • hidden_string (Optional): The HIDDEN_STRING is a string that is used to identify which devices are to be hidden on Home Assistant’s front page. This string will be stripped from the -device’s name before being used. By default, this value is ‘{HIDE ME}’.

    +device’s name before being used. By default, this value is ‘{HIDE ME}’.
  • +
  • tls (Optional): This entry should refelct the version of TLS that the ISY controller is using for HTTPS encryption. This value can be either 1.1 or 1.2. If this value is not set, it is assumed to be version 1.1. This is the default for most users. +ISY994 Pro users may likely be using 1.2. When using HTTPS in the host entry, it is best practice to set this value.
  • +
-

The TLS_VERSION value is the version of TLS that the ISY controller is using -for HTTPS encryption. This value can be either 1.1 or 1.2. If this value is not -set, it is assumed to be version 1.1. This is the default for most users. -ISY994 Pro users may likely be using 1.2. When using HTTPS in the ISY_ADDRESS -string, it is best practice to set this value.

-

Once the ISY controller is configured, it will automatically import any lights, -switches, and sensors it can locate.

+

Once the ISY controller is configured, it will automatically import any lights, switches, and sensors it can locate.

Creating Custom Switches

diff --git a/components/keyboard.html b/components/keyboard.html index 3b10f08f66..99252864c1 100644 --- a/components/keyboard.html +++ b/components/keyboard.html @@ -123,6 +123,20 @@ The keyboard component simulates key presses on the host machine. I
keyboard:
+

Dependencies

+ +

You may need to install platform-specific dependencies for PyUserInput in order to use the keyboard component. In most cases this can be done by running:

+ +
1
+
pip3 install [package name]
+ + +

Windows

+ +

x64 Windows users may have trouble installing pywin through pip. Using an executable installer should work around this issue.

+ +

Similar installers (unofficial) for pyhook have been ported to python 3.4 and should help with x64 pip issues with pyhook.

+ diff --git a/components/light.limitlessled.html b/components/light.limitlessled.html index 4f68c02723..34f81ed273 100644 --- a/components/light.limitlessled.html +++ b/components/light.limitlessled.html @@ -120,13 +120,21 @@ The limitlessled can control your Limitle
# Example configuration.yaml entry
 light:
   platform: limitlessled
-  host: 192.168.1.10
+  host: IP_ADDRESS
   group_1_name: Living Room
   group_2_name: Bedroom
   group_3_name: Office
   group_4_name: Kitchen
+

Configuration variables:

+ +
    +
  • host (Required): IP address of the device, eg. 192.168.1.32
  • +
  • group_X_name (Required): Name of the group. Multiple entries with a consecutive number.
  • +
+ + diff --git a/components/media_player.cast.html b/components/media_player.cast.html index 71d8928318..518e26b4f2 100644 --- a/components/media_player.cast.html +++ b/components/media_player.cast.html @@ -109,14 +109,22 @@ Google Cast devices will be automatically discovered if you enable
1
+
1
 2
 3
 4
-
media_player:
-  platform: chromecast
-  # Optional. Will scan for devices if left out
-  host: 192.168.1.9
+
# Example configuration.yaml entry
+media_player:
+  platform: chromecast
+  host: 192.168.1.9
+
+ + +

Configuration variables:

+ +
    +
  • host Optional: Use only if you don’t want to scan for devices.
  • +
diff --git a/components/media_player.denon.html b/components/media_player.denon.html new file mode 100644 index 0000000000..210a90ee5a --- /dev/null +++ b/components/media_player.denon.html @@ -0,0 +1,193 @@ + + + + + + + + + + + + Denon Network Receivers support - Home Assistant + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+
+ +
+ + +
+ + +
+

+ Denon Network Receivers Support +

+
+
+ + +

+The denon platform allows you to control a Denon Network Receivers from Home Assistant.

+ +

Supported devices:

+ +
    +
  • Denon DRA-N5
  • +
  • Denon RCD-N8 (untested)
  • +
+ + +

To add a Denon Network Receiver to your installation, add the following to your configuration.yaml file:

+ +
1
+2
+3
+4
+5
+
# Example configuration.yaml entry
+media_player:
+  platform: denon
+  host: IP_ADDRESS
+  name: Music station
+
+ + +

Configuration variables:

+ +
    +
  • host (Required): IP address of the device. Example: 192.168.1.32
  • +
  • name (Optional): Name of the device
  • +
+ + +

A few notes:

+ +
    +
  • As long as this module is active and connected, the receiver does not seem to accept additional telnet connections.
  • +
  • Be careful with the volume. 50 % or even 100 % are very loud.
  • +
  • To be able to wake up the receiver, activate the “remote” setting in the receiver’s settings.
  • +
+ + + +
+ + +
+ + +
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/media_player.html b/components/media_player.html index b743753dd1..11e2e9dea7 100644 --- a/components/media_player.html +++ b/components/media_player.html @@ -110,8 +110,10 @@ diff --git a/components/media_player.kodi.html b/components/media_player.kodi.html index b78ecda498..b0910ca396 100644 --- a/components/media_player.kodi.html +++ b/components/media_player.kodi.html @@ -119,12 +119,20 @@ The kodi platform allows you to control a Kodi mul
# Example configuration.yaml entry
 media_player:
   platform: kodi
-  name: Kodi
   url: http://192.168.0.123/jsonrpc
-  user: kodi
-  password: my_secure_password
+ name: Kodi + user: USERNAME + password: PASSWORD +

Configuration variables:

+ +
    +
  • url Required: The URL of the XBMC/Kodi JSON-RPC API, eg. http://192.168.0.123/jsonrpc
  • +
  • name Optional: The name of the device used in the frontend.
  • +
  • username Optional: The XBMC/Kodi HTTP username.
  • +
  • password Optional: The XBMC/Kodi HTTP password.
  • +
diff --git a/components/media_player.mpd.html b/components/media_player.mpd.html index e760d79c7c..22cf6bba72 100644 --- a/components/media_player.mpd.html +++ b/components/media_player.mpd.html @@ -115,14 +115,24 @@ The mpd platform allows you to control a Music 4 5 6 +7
# Example configuration.yaml entry
 media_player:
   platform: mpd
-  server: 127.0.0.1
+  server: IP_ADDRESS
   port: 6600
-  location: bedroom
+ location: bedroom + password: PASSWORD +

Configuration variables:

+ +
    +
  • server Required: IP address of the Music Player Daemon. Example: 192.168.1.32
  • +
  • port Optional: Port of the Music Player Daemon, defaults to 6600. Example: 6600
  • +
  • location Optional: Location of your Music Player Daemon.
  • +
  • password Optional: Password for your Music Player Daemon.
  • +
diff --git a/components/media_player.squeezebox.html b/components/media_player.squeezebox.html index 2cbab4444f..1d27ecf32b 100644 --- a/components/media_player.squeezebox.html +++ b/components/media_player.squeezebox.html @@ -121,10 +121,18 @@ The squeezebox platform allows you to control a
# Example configuration.yaml entry mqtt: broker: IP_ADDRESS_BROKER - # All the other options are optional: port: 1883 + client_id: home-assistant-1 keepalive: 60 - qos: 0 - username: your_username - password: your_secret_password + username: USERNAME + password: PASSWORD +

Configuration variables:

+ +
    +
  • broker (Required): The IP address of your MQTT broker, e.g. 192.168.1.32.
  • +
  • port (Optional): The network port to connect to. Default is 1883.
  • +
  • client_id (Optional): Client ID that Home Assistant will use. Has to be unique on the server. Default is a random generated one.
  • +
  • keepalive (Optional): The keep alive in seconds for this client. Default is 60.
  • +
  • username (Optional): The username to use with your MQTT broker.
  • +
  • password (Optional): The corresponding password for the username to use with your MQTT broker.
  • +

@@ -144,7 +152,7 @@ The MQTT component has no TLS support at the moment. This means that only plain-

diff --git a/components/notify.pushbullet.html b/components/notify.pushbullet.html index 4445cb90d2..1514d9abac 100644 --- a/components/notify.pushbullet.html +++ b/components/notify.pushbullet.html @@ -9,7 +9,7 @@ - Notifications - Home Assistant + PushBullet notification support - Home Assistant @@ -18,7 +18,7 @@ - + @@ -98,7 +98,7 @@

- Notifications + PushBullet Notification Support


diff --git a/components/scheduler.html b/components/scheduler.html index 519e1eb1ae..8252038614 100644 --- a/components/scheduler.html +++ b/components/scheduler.html @@ -107,7 +107,13 @@

A component that will act as a scheduler and performe actions based on the events in the schedule.

-

It will read a json object from schedule.json in the config dir and create a schedule based on it.

+

Load the component by enabling it in configuration.yaml

+ +
1
+
scheduler:
+ + +

It will read a json object from the file schedule.json in the config dir (~/.homeassistant) and create a schedule based on it.

Each schedule is a JSON with the keys id, name, description, entity_ids, events.

@@ -121,7 +127,7 @@ on the events in the schedule.

-

Example schedule.json

+

Example schedule.json file

1
 2
diff --git a/components/sensor.arest.html b/components/sensor.arest.html
new file mode 100644
index 0000000000..60dbf9519f
--- /dev/null
+++ b/components/sensor.arest.html
@@ -0,0 +1,343 @@
+
+  
+  
+  
+    
+
+  
+    
+  
+    
+    
+    aREST support - Home Assistant
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+
+
+
+  
+
+    
+ +
+ + + +
+
+ +
+ + +
+ + +
+

+ aREST Support +

+
+
+ + +

+The arest sensor platform allows you to get all data from your devices (like Arduinos with a ethernet/wifi connection, the ESP8266, and the Raspberry Pi) running the aREST RESTful framework.

+ +

To use your aREST enabled device in your installation, add the following to your configuration.yaml file:

+ +
1
+2
+3
+4
+5
+6
+7
+8
+9
+
# Example configuration.yaml entry
+sensor:
+  platform: arest
+  resource: http://IP_ADDRESS
+  monitored_variables:
+    - name: temperature
+      unit: '°C'
+    - name: humidity
+      unit: '%'
+
+ + +

Configuration variables:

+ +
    +
  • resource (Required): IP address and schema of the device that is exposing an aREST API, e.g. http://192.168.1.10.
  • +
  • monitored_variables array: + +
      +
    • name (Required): The name of the variable you wish to monitor.
    • +
    • unit (Optional): Defines the units of measurement of the sensor, if any.
    • +
    +
  • +
+ + +

The variables in the monitored_variables array must be available in the response of the device. As a starting point you find below a sketch for the Arduino device family. There are two variables (temperature and humidity) which will act as endpoints.

+ +
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+
/*
+  This modified sketch is based on the Ethernet example of the aREST 
+  (http://arest.io/) library.
+*/
+
+// Libraries
+#include <SPI.h>
+#include <Ethernet.h>
+#include <aREST.h>
+#include <avr/wdt.h>
+
+// Device settings
+char* deviceId = "sensor02";
+char* deviceName = "livingroom";
+byte deviceMac[] = { 0x20, 0xD5, 0xD3, 0x03, 0xFE, 0x31 };
+IPAddress deviceIp(192, 168, 1, 12);
+
+EthernetServer server(80);
+aREST rest = aREST();
+
+// Variables to be exposed to the API
+int temperature;
+int humidity;
+
+void setup(void) {
+  Serial.begin(57600);
+
+  // Init variables and expose them to REST API
+  temperature = 0;
+  humidity = 0;
+
+  rest.variable("temperature", &temperature);
+  rest.variable("humidity", &humidity);
+
+  // Give name and ID to device
+  rest.set_id(deviceId);
+  rest.set_name(deviceName);
+
+  Ethernet.begin(deviceMac, deviceIp);
+
+  server.begin();
+  Serial.print("Sensor is ready...");
+
+  // Start watchdog
+  wdt_enable(WDTO_4S);
+}
+
+void loop() {
+  EthernetClient client = server.available();
+  rest.handle(client);
+  wdt_reset();
+
+  // Replace this with your actual sensor readings, like
+  // temperature = (((analogRead(A0) * 5.0) / 1024) - 0.5) * 10;
+  temperature = random(400);
+  humidity = random(600);
+  delay(500);
+}
+
+ + +

Accessing one of the endpoints (eg. http://192.168.1.10/temperature) will give you the value inside a JSON response.

+ +
1
+
{"temperature": 23, "id": "sensor01", "name": "livingroom", "connected": true}
+
+ + +

The root will give you a JSON response that contains all variables and their current values along with some device details.

+ +
1
+2
+3
+4
+5
+6
+7
+8
+9
+
{
+   "variables" : {
+      "temperature" : 23,
+      "humidity" : 82
+   },
+   "id" : "sensor01",
+   "name" : "livingroom",
+   "connected" : true
+}
+
+ + + + + +
+ + +
+ + +
+
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/sensor.bitcoin.html b/components/sensor.bitcoin.html index 788bc248a2..1f59797d1c 100644 --- a/components/sensor.bitcoin.html +++ b/components/sensor.bitcoin.html @@ -109,6 +109,8 @@ The bitcoin platform displays various details about the Blockchain.info the sensor is capable to show your current balance.

+

You need to enable the API access for your online wallet to get the balance. To do that log in and move to ‘Account Setting’, choose ‘IP Restrictions’, and check ‘Enable Api Access’. You will get an email message from blockchain.info where you must authorize the API access.

+

To add the Bitcoin sensor to your installation, add a selection of the available display options to your configuration.yaml file:

1
@@ -170,6 +172,39 @@ The bitcoin platform displays various details about the https://blockchain.info to access the online wallet.
+
  • password (Optional): Password for your online wallet.
  • +
  • currency (Optional): The currency to exchange to, eg. CHF, USD, EUR, etc. Default is USD.
  • +
  • display_options array (Required): Options to display in the frontend. + +
      +
    • exchangerate: Exchange rate of 1 BTC
    • +
    • trade_volume_btc: Trade volume
    • +
    • miners_revenue_usd: Miners revenue
    • +
    • btc_mined: BTC mined
    • +
    • trade_volume_usd: Trade volume in USD
    • +
    • difficulty: Difficulty
    • +
    • minutes_between_blocks: Time between blocks in minutes
    • +
    • number_of_transactions: Number of transactions
    • +
    • hash_rate: Hash rate in PH/s
    • +
    • timestamp: Timestamp
    • +
    • mined_blocks: Minded Blocks
    • +
    • blocks_size: Block size
    • +
    • total_fees_btc: Total fees in BTC
    • +
    • total_btc_sent: Total sent in BTC
    • +
    • estimated_btc_sent: Estimated sent in BTC
    • +
    • total_btc: Total of BTC
    • +
    • total_blocks: Total Blocks
    • +
    • next_retarget: Next retarget
    • +
    • estimated_transaction_volume_usd: Estimated transaction volume in BTC
    • +
    • miners_revenue_btc: Miners revenue in BTC
    • +
    • market_price_usd: Market price in USD
    • +
    +
  • + diff --git a/components/sensor.dht.html b/components/sensor.dht.html index cf6af30277..a6345e83b1 100644 --- a/components/sensor.dht.html +++ b/components/sensor.dht.html @@ -104,7 +104,8 @@
    -

    The dht sensor platform allows you to get the current temperature and humidity from a DHT11, DHT22, or AM2302 device.

    +

    +The dht sensor platform allows you to get the current temperature and humidity from a DHT11, DHT22, or AM2302 device.

    To use your DHTxx sensor in your installation, add the following to your configuration.yaml file:

    @@ -127,6 +128,23 @@
    +

    Configuration variables:

    + +
      +
    • sensor (Required): The sensor type, supported devices are DHT11, DHT22, and AM2302
    • +
    • pin (Required): The pin the sensor is connected to.
    • +
    • monitored_conditions array: Conditions to monitor. + +
        +
      • temperature:
      • +
      • humidity:
      • +
      +
    • +
    + + +

    Available conditions are only temperature and humidity.

    +

    The name of the pin to which the sensor is connected has different names on different platforms. ‘P8_11’ for Beaglebone, ‘23’ for Raspberry Pi.

    diff --git a/components/sensor.efergy.html b/components/sensor.efergy.html index a51d55b864..9062a4a95d 100644 --- a/components/sensor.efergy.html +++ b/components/sensor.efergy.html @@ -132,6 +132,23 @@ Integrate your Efergy meter information into Ho

    +

    Configuration variables:

    + +
      +
    • app_token (Required): The App Token for your account.
    • +
    • utc_offset (Required): Some variables (currently only the daily_cost) require that the +negative number of minutes your timezone is ahead/behind UTC time.
    • +
    • monitored_variables array (Required): Variables to monitor. + +
        +
      • type (Required): Name of the variable.
      • +
      • period (Optional): Some variables take a period argument. Valid options are “day”, “week”, “month”, and “year”.
      • +
      • currency (Optional): This is used to display the cost/period as the unit when monitoring the cost. It should correspond to the actual currency used in your dashboard.
      • +
      +
    • +
    + + diff --git a/components/sensor.forecast.html b/components/sensor.forecast.html index ccb19a6b80..444f7df9ef 100644 --- a/components/sensor.forecast.html +++ b/components/sensor.forecast.html @@ -107,7 +107,7 @@

    The forecast platform uses the Forecast.io web service as a source for meteorological data for your location.

    -

    You need an API key which is free but requires a registration.

    +

    You need an API key which is free but requires a registration. You can make 1000 requests per day. This means that you could create approximately every 1.4 minute one.

    To add Forecast.io to your installation, add the following to your configuration.yaml file:

    @@ -148,7 +148,31 @@ The forecast platform uses the Forecast.io we -

    Details about the API are available in the (Forecast.io documentation)[https://developer.forecast.io/docs/v2].

    +

    Configuration variables:

    + +
      +
    • api_key (Required): Your API key for http://forecast.io/.
    • +
    • display_conditions array (Required): Conditions to display in the frontend. + +
        +
      • summary: A human-readable text summary.
      • +
      • precip_type: The type of precipitation occurring.
      • +
      • precip_intensity: The average expected intensity of precipitation occurring.
      • +
      • temperature: The current temperature.
      • +
      • dew_point: The dew point.
      • +
      • wind_speed: The wind speed.
      • +
      • wind_bearing: Where the wind is coming from in degrees, with true north at 0° and progressing clockwise.
      • +
      • cloud_cover: The percentage of sky occluded by clouds.
      • +
      • humidity: The relative humidity.
      • +
      • pressure: The sea-level air pressure in millibars.
      • +
      • visibility: The average visibility.
      • +
      • ozone: The columnar density of total atmospheric ozone in Dobson.
      • +
      +
    • +
    + + +

    Details about the API are available in the Forecast.io documentation.

    diff --git a/components/sensor.mqtt.html b/components/sensor.mqtt.html index 5de787bd75..b1e5602d5d 100644 --- a/components/sensor.mqtt.html +++ b/components/sensor.mqtt.html @@ -116,20 +116,26 @@ last known value. Otherwise, the initial state will be undefined.

    4 5 6 +7
    # Example configuration.yml entry
     sensor:
       platform: mqtt
    -  name: "MQTT Sensor"
       state_topic: "home/bedroom/temperature"
    -  unit_of_measurement: "ºC"
    +  name: "MQTT Sensor"
    +  qos: 0
    +  unit_of_measurement: "°C"
     
    -

    state_topic: The MQTT topic subscribed to receive sensor values. Required

    +

    Configuration variables:

    -

    name: The name of the sensor. Default is ‘MQTT Sensor’. Optional

    +
      +
    • state_topic (Required): The MQTT topic subscribed to receive sensor values.
    • +
    • name (Optional): The name of the sensor. Default is ‘MQTT Sensor’.
    • +
    • qos (Optional): The maximum QoS level of the state topic. Default is 0.
    • +
    • unit_of_measurement (Optional): Defines the units of measurement of the sensor, if any.
    • +
    -

    unit_of_measurement: Defines the units of measurement of the sensor, if any. Optional

    diff --git a/components/sensor.mysensors.html b/components/sensor.mysensors.html index f74100daac..5387514052 100644 --- a/components/sensor.mysensors.html +++ b/components/sensor.mysensors.html @@ -105,7 +105,9 @@

    -Integrate your MySensors sensors by adding the following to your configuration.yaml:

    +The MySensors project combines Arduino boards with NRF24L01 radio boards to build sensor networks.

    + +

    Integrate your Serial MYSensors Gateway by adding the following to your configuration.yaml:

    1
     2
    @@ -118,6 +120,18 @@ Integrate your MySensors sensors by addi
     
    +

    Configuration variables:

    + +
      +
    • port (Required): The port where your board is connected to your Home Assistant host. If you are using an original Arduino the port will be named ttyACM*. The exact number can be determined with ls /dev/ttyACM*.
    • +
    + + +
    1
    +
    ls /dev/ttyACM*
    +
    + + diff --git a/components/sensor.openweathermap.html b/components/sensor.openweathermap.html index 4dc3aba13f..fc69acf0eb 100644 --- a/components/sensor.openweathermap.html +++ b/components/sensor.openweathermap.html @@ -142,6 +142,27 @@ The openweathermap platform uses OpenWeathe +

    Configuration variables:

    + +
      +
    • api_key (Required): Your API key for http://openweathermap.org/.
    • +
    • forecast (Optional): Enables the forecast. The default is to display the current conditions.
    • +
    • display_conditions array (Required): Conditions to display in the frontend. + +
        +
      • weather: A human-readable text summary.
      • +
      • temperature: The current temperature.
      • +
      • wind_speed: The wind speed.
      • +
      • humidity: The relative humidity.
      • +
      • pressure: The sea-level air pressure in millibars.
      • +
      • clouds: Description about cloud coverage.
      • +
      • rain: The rain volume.
      • +
      • snow: The snow volume
      • +
      +
    • +
    + +

    Details about the API are available in the OpenWeatherMap documentation.

    diff --git a/components/sensor.rfxtrx.html b/components/sensor.rfxtrx.html index 35547f566c..bbe4285508 100644 --- a/components/sensor.rfxtrx.html +++ b/components/sensor.rfxtrx.html @@ -114,12 +114,17 @@ 4
    # Example configuration.yaml entry
     sensor:
    -  - platform: rfxtrx
    -    device: PATH_TO_DEVICE
    +  platform: rfxtrx
    +  device: PATH_TO_DEVICE
     
    -

    The path to your device, e.g. /dev/serial/by-id/usb-RFXCOM_RFXtrx433_A1Y0NJGR-if00-port0

    +

    Configuration variables:

    + +
      +
    • device (Required): The path to your device, e.g. /dev/serial/by-id/usb-RFXCOM_RFXtrx433_A1Y0NJGR-if00-port0
    • +
    + diff --git a/components/sensor.swiss_public_transport.html b/components/sensor.swiss_public_transport.html index 15d741ca29..7b140ce11c 100644 --- a/components/sensor.swiss_public_transport.html +++ b/components/sensor.swiss_public_transport.html @@ -126,6 +126,14 @@ The swiss public transport sensor will give you the next two departure times fro +

    Configuration variables:

    + +
      +
    • from (Required): The ID of the station of the start station.
    • +
    • to (Required): The ID of the station of the end station.
    • +
    + +

    The public timetables are coming from Swiss public transport.

    diff --git a/components/sensor.systemmonitor.html b/components/sensor.systemmonitor.html index 5ed0406a24..2770913854 100644 --- a/components/sensor.systemmonitor.html +++ b/components/sensor.systemmonitor.html @@ -128,6 +128,19 @@ The system monitoring sensor platform to allow you to monitor disk usage, memory +

    Configuration variables:

    + +
      +
    • resources array (Required): Contains all entries to display. + +
        +
      • type (Required): The type of the information to display, please check the table below for details.
      • +
      • arg (Optional): Argument to use, please check the table below for details.
      • +
      +
    • +
    + +

    The table contains types and their argument to use in your configuration.yaml file.

    diff --git a/components/sensor.transmission.html b/components/sensor.transmission.html index e04873ec96..c1d2e8c91a 100644 --- a/components/sensor.transmission.html +++ b/components/sensor.transmission.html @@ -122,22 +122,41 @@ The Transmission platform allows yo
    # Example configuration.yaml entry
     sensor:
       platform: transmission
    -  name: Transmission
       host: 192.168.1.26
       port: 9091
    +  name: Transmission
       username: YOUR_USERNAME
       password: YOUR_PASSWORD
       monitored_variables:
    -    - type: 'current_status'
    -    - type: 'download_speed'
    -    - type: 'upload_speed'
    +    - 'current_status'
    +    - 'download_speed'
    +    - 'upload_speed'
     
    +

    Configuration variables:

    + +
      +
    • host (Required): This is the IP address of your Transmission daemon, e.g. 192.168.1.32.
    • +
    • port (Optional): The port your Transmission daemon uses, defaults to 9091.
    • +
    • 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. + +
        +
      • 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.

    - +

    diff --git a/components/switch.command_switch.html b/components/switch.command_switch.html index 24a9133f07..65064faa22 100644 --- a/components/switch.command_switch.html +++ b/components/switch.command_switch.html @@ -125,6 +125,24 @@ A switch platform that issues specific commands when it is turned on and off. Th offcmd: switch_command off kitchen +

    Configuration variables:

    + +
      +
    • switches array (Required): Contains all command switches. + +
        +
      • ‘entry’ (Required): Name of the command switch. Multiple entries are possible. + +
          +
        • oncmd (Required): The action to take for on.
        • +
        • offcmd (Required): The action to take for off.
        • +
        +
      • +
      +
    • +
    + + diff --git a/components/switch.edimax.html b/components/switch.edimax.html index 53dd691581..f41c923faa 100644 --- a/components/switch.edimax.html +++ b/components/switch.edimax.html @@ -125,6 +125,16 @@ This edimax switch platform allows you to control the state of your # Example configuration.yml entr +10 +
    # Example configuration.yml entry
     switch:
       platform: mqtt
       name: "Bedroom Switch"
       state_topic: "home/bedroom/switch1"
       command_topic: "home/bedroom/switch1/set"
    +  qos: 0
       payload_on: "ON"
       payload_off: "OFF"
       optimistic: false
     
    -

    command_topic: The MQTT topic to publish commands to change the switch state. Required

    +

    Configuration variables:

    -

    name: The name of the switch. Default is ‘MQTT Switch’. Optional

    +
      +
    • name (Optional): The name of the switch. Default is ‘MQTT Switch’.
    • +
    • state_topic (Optional): The MQTT topic subscribed to receive state updates.
    • +
    • command_topic (Required): The MQTT topic to publish commands to change the switch state.
    • +
    • qos (Optional): The maximum QoS level of the state topic. Default is 0 and will also be used to publishing messages.
    • +
    • payload_on (Optional): The payload that represents enabled state. Default is “ON”.
    • +
    • payload_off (Optional): The payload that represents disabled state. Default is “OFF”.
    • +
    • optimistic (Optional): Flag that defines if switch works in optimistic mode. Default is true if no state topic defined, else false.
    • +
    -

    state_topic: The MQTT topic subscribed to receive state updates. Optional

    -

    payload_on: The payload that represents enabled state. Default is “ON”. Optional

    +

    +Make sure that your topics match exact. some-topic/ and some-topic are different topics. +

    -

    payload_off: The payload that represents disabled state. Default is “OFF”. Optional

    - -

    optimistic: Flag that defines if switch works in optimistic mode. Default is true if no state topic defined, else false. Optional

    diff --git a/components/switch.transmission.html b/components/switch.transmission.html index 5a1e55110e..aeb27f3d08 100644 --- a/components/switch.transmission.html +++ b/components/switch.transmission.html @@ -120,15 +120,24 @@ The transmission platform allows you to control your
    # Example configuration.yaml entry switch: platform: transmission - name: Transmission host: 192.168.1.26 port: 9091 - username: YOUR_USERNAME - password: YOUR_PASSWORD + name: Transmission + username: USERNAME + password: PASSWORD -

    Finbarr Brady has contributed the transmission switch platform.

    +

    Configuration variables:

    + +
      +
    • host (Required): This is the IP address of your Transmission daemon, e.g. 192.168.1.32.
    • +
    • port (Optional): The port your Transmission daemon uses, defaults to 9091.
    • +
    • 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.
    • +
    + diff --git a/components/switch.wemo.html b/components/switch.wemo.html index 5709b63f5d..01ee3a5900 100644 --- a/components/switch.wemo.html +++ b/components/switch.wemo.html @@ -114,7 +114,7 @@ The wemo platform allows you to control your # Example configuration.yaml entry switch: - - platform: wemo + platform: wemo diff --git a/components/tellstick.html b/components/tellstick.html index f0e0d93720..ac0253841b 100644 --- a/components/tellstick.html +++ b/components/tellstick.html @@ -104,7 +104,8 @@
    -

    The TellStick Home Assistant integration allows users to add switches and sensors.

    +

    +The TellStick Home Assistant integration allows users to add switches and sensors.

    To get started, add the following information to your configuration.yaml:

    @@ -124,7 +125,9 @@ 14 15 16 -
    switch:
    +17
    +
    # Example configuration.yaml entry
    +switch:
       platform: tellstick
     
     sensor:
    @@ -144,6 +147,8 @@
     
     
     
    +
    +
     
     
     
    diff --git a/components/thermostat.nest.html b/components/thermostat.nest.html
    index c81dd8ddbf..2a1732374f 100644
    --- a/components/thermostat.nest.html
    +++ b/components/thermostat.nest.html
    @@ -115,10 +115,16 @@ The nest thermostat platform let you control a thermostat from 
    1
     2
    @@ -129,8 +129,8 @@
     8
     
    # Example configuration.yaml entry
     verisure:
    -  username: user@example.com
    -  password: password
    +  username: USERNAME
    +  password: PASSWORD
       alarm: 1
       hygrometers: 0
       smartplugs: 1
    @@ -138,6 +138,18 @@
     
    +

    Configuration variables:

    + +
      +
    • username (Required): The username to Verisure mypages.
    • +
    • password (Required): The password to Verisure mypages.
    • +
    • alarm (Optional): Set to 1 to show alarm, 0 to disable. Default 1.
    • +
    • hygrometers (Optional): Set to 1 to show hygrometers, 0 to disable. Default 1.
    • +
    • smartplugs (Optional): Set to 1 to show smartplugs, 0 to disable. Default 1.
    • +
    • thermometers (Optional): Set to 1 to show thermometers, 0 to disable. Default 1.
    • +
    + + diff --git a/components/wink.html b/components/wink.html index 9832bbd41c..95d0b5464d 100644 --- a/components/wink.html +++ b/components/wink.html @@ -126,6 +126,13 @@ access_token: YOUR_ACCESS_TOKEN
    +

    Configuration variables:

    + +
      +
    • access_token (Required): The retrieved access token.
    • +
    + +

    This will connect to the Wink hub and automatically set up any lights, switches and sensors that it finds.

    diff --git a/components/zwave.html b/components/zwave.html index ecaf85cc41..39cd828c9a 100644 --- a/components/zwave.html +++ b/components/zwave.html @@ -131,6 +131,18 @@ +

    Configuration variables:

    + +
      +
    • usb_path (Required): The port where your device is connected to your Home Assistant host.
    • +
    + + +
    1
    +
    ls /dev/ttyUSB*
    +
    + + diff --git a/developers/credits.html b/developers/credits.html index 355e405ffd..0756fd6712 100644 --- a/developers/credits.html +++ b/developers/credits.html @@ -121,6 +121,7 @@
  • andythigpen
  • Austin
  • Azelphur
  • +
  • Carlo Costanzo
  • Chris Mulder
  • Daniel Iversen
  • Edwin Smulders
  • @@ -129,6 +130,7 @@
  • Finbarr Brady
  • Geoff Norton
  • gottsman
  • +
  • Greg Dowling
  • Guillem Barba
  • Gustav Ahlberg
  • Issac Kelly
  • @@ -143,10 +145,12 @@
  • Markus Stenberg
  • Michael Arnauts
  • miniconfig
  • +
  • Per Sandström
  • Piratonym
  • Rev Michael Greb
  • rkabadi
  • Ryan Kraus
  • +
  • sfam
  • Theodor Lindquist
  • vitorespindola
  • wind-rider
  • diff --git a/developers/index.html b/developers/index.html index 58cddd1f26..38962e2987 100644 --- a/developers/index.html +++ b/developers/index.html @@ -168,6 +168,7 @@ pull request. Adding support for a new platform
  • Rest API
  • +
  • Website
  • diff --git a/getting-started/advanced.html b/getting-started/advanced.html new file mode 100644 index 0000000000..8f8721e98a --- /dev/null +++ b/getting-started/advanced.html @@ -0,0 +1,257 @@ + + + + + + + + + + + + Advanced Installation - Home Assistant + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    + +
    + + +
    + + +
    +

    + Advanced Installation +

    +
    +
    + + +

    Here are some general tutorials on how to setup some of the more advanced deployments that are frequently requested.

    + +

    + + + +

    + +

    +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:

    + +

    1
    +
    ps -p 1 -o comm=
    +

    + +

    If the preceding command returns the string init, you are likely using Upstart.

    + +

    Upstart will launch init scripts that are located in the directory /etc/init.d/. A sample init script for systems using Upstart is maintained by this project.

    + +

    To install this script, download it, tweak it to you liking, and install it by following the directions in the header. This script will setup Home Assistant to run when the system boots. To start/stop Home Assistant manually, issue the following commands: +

    1
    +2
    +
    sudo service hass-daemon start
    +sudo service hass-daemon stop
    +

    + +

    When running Home Assistant with this script, the configuration directory will be located at /var/opt/homeassistant. This directory will contain a verbose log rather than simply an error log.

    + +

    When running daemons, it is good practice to have the daemon run under its own user name rather than the default user’s name. Instructions for setting this up are outside the scope of this document. +

    + +

    +Newer linux distributions are trending towards using systemd for managing daemons. Typically, systems based on Fedora or Debian 8 or later use systemd. This includes Ubuntu releases including and after 15.04, CentOS, and Red Hat. If you are unsure if your system is using systemd, you may check with the following command:

    + +

    1
    +
    ps -p 1 -o comm=
    +

    + +

    If the preceding command returns the string systemd, you are likely using systemd.

    + +

    If you want Home Assistant to be launched automatically, an extra step is needed to setup systemd. You need a service file to control Home Assistant with systemd.

    + +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    +10
    +11
    +12
    +
    su -c 'cat <<EOF >> /lib/systemd/system/home-assistant.service
    +[Unit]
    +Description=Home Assistant
    +After=network.target
    +
    +[Service]
    +Type=simple
    +ExecStart=hass
    +
    +[Install]
    +WantedBy=multi-user.target
    +EOF'
    +

    + +

    You need to reload systemd to make the daemon aware of the new configuration. Enable and launch Home Assistant after that.

    + +

    1
    +2
    +3
    +
    sudo systemctl –system daemon-reload
    +sudo systemctl enable home-assistant
    +sudo systemctl start home-assistant
    +

    + +

    If everything went well, sudo systemctl start home-assistant should give you a positive feedback.

    + +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +
    $ sudo systemctl status home-assistant -l
    +● home-assistant.service - Home Assistant
    +   Loaded: loaded (/usr/lib/systemd/system/home-assistant.service; disabled; vendor preset: disabled)
    +   Active: active (running) since Thu 2015-06-25 23:38:37 CEST; 3min 13s ago
    + Main PID: 8557 (python3.4)
    +   CGroup: /system.slice/home-assistant.service
    +           └─8557 /usr/bin/python3.4 -m homeassistant
    +[]
    +

    + +

    To get Home Assistant’s logging output, simple use journalctl.

    + +

    1
    +
    sudo journalctl -f -u home-assistant
    +
    +

    + +

    « Back to Getting Started

    + + +
    + + +
    + + +
    +
    + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/getting-started/android.html b/getting-started/android.html index 34591da180..cf06774148 100644 --- a/getting-started/android.html +++ b/getting-started/android.html @@ -107,11 +107,11 @@

    Home Assistant is not available on the Play Store. Instead, Home Assistant leverages the new manifest.json support to allow Android devices to add the web application to your homescreen as if it was a native application.

      -
    1. Open Chrome
    2. -
    3. Navigate to your Home Assistant instance
    4. -
    5. Click on the menu icon (three vertical dots)
    6. -
    7. Click on Add to Homescreen
    8. -
    9. A dialog will popup, click on Add
    10. +
    11. Open Chrome
    12. +
    13. Navigate to your Home Assistant instance
    14. +
    15. Click on the menu icon (three vertical dots)
    16. +
    17. Click on Add to Homescreen
    18. +
    19. A dialog will popup, click on Add
    diff --git a/getting-started/configuration.html b/getting-started/configuration.html index cf7bc38462..9b2c8b388e 100644 --- a/getting-started/configuration.html +++ b/getting-started/configuration.html @@ -104,7 +104,7 @@
    -

    By default, Home Assistant will create a configuration folder. Depending on your operating system this is ~/.homeassistant (OS X/Linux) or %APPDATA%/.homeassistant (Windows). 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. Depending on your operating system this is ~/.homeassistant (OS X/Linux) or %APPDATA%/.homeassistant (Windows). 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. An example configuration file is located at here.

    diff --git a/getting-started/index.html b/getting-started/index.html index 5df69b5db0..9d2c51f3d5 100644 --- a/getting-started/index.html +++ b/getting-started/index.html @@ -104,313 +104,93 @@
    -
    +

    - -
    +

    -

    Preparation

    - -
    - - - - - - +

    Installation

    - -
    -Installing and running Home Assistant on your local machine is easy. Make sure you have Python 3.4 installed and execute the following code in a console: +

    +Installing and running Home Assistant on your local machine is easy. Make sure you have Python 3.4 installed and execute the following code in a console:

    - -
    - -
    -

    The preparation of a Fedora 22 host will only take a couple of minutes. First install Python 3.4 and the other needed packages out of the Fedora Package Collection. This ensure that you receive updates in the future.

    - -

    -It’s assumed that your user has an entry in the sudoers file. Otherwise, run the commands which needs more privileges as root. -

    - -
    1
    -
    sudo dnf -y install python3 python3-devel gcc
    -
    - -
    - -
    - -

    CentOS is providing longtime support and often not shipping the latest release of a software component. To run, Python 3.x on CentOS Software Collections needs to be activated.

    - -
    Step 1. Install the tools for the Software Collection
    - -
    1
    -
    sudo yum -y install scl-utils
    -
    - -
    Step 2. Make the repository available.
    - -
    1
    -
    sudo yum -y install https://www.softwarecollections.org/en/scls/rhscl/rh-python34/epel-7-x86_64/download/rhscl-rh-python34-epel-7-x86_64.noarch.rpm
    -
    - -
    Step 3. Install Python 3.x
    - -
    1
    -
    sudo yum -y install rh-python34
    -
    - -
    Step 4. Start using software collections:
    - -
    1
    -
    scl enable rh-python34 bash
    -
    - -
    - -
    - -
    - - -

    Installation

    - -

    +

    1
     2
     
    pip3 install homeassistant
    -hass --open-ui
    +hass --open-ui
     

    Running these commands will:

    1. Install Home Assistant
    2. -
    3. Launch Home Assistant and serve web interface on http://localhost:8123
    4. +
    5. Launch Home Assistant and serve web interface on http://localhost:8123
    -
    +

    - -

    Post-Installation

    +

    +

    Installation with Docker is straightforward. Adjust the following command so that /path/to/your/config/ points at the folder where you want to store your config and run it:

    -
    - - - - - - -
    -

    There is nothing else to do. If you run into any issues, please see the troubleshooting page.

    +

    This will launch Home Assistant and serve its web interface from port 8123 on your Docker host.

    -

    If you want to see what Home Assistant can do, you can start the demo mode by running hass --demo-mode.

    - -

    In the future, if you want to update to the latest version, run pip3 install --upgrade home-assistant.

    - -
    - -
    -

    By default, the access to port 8123 is not allowed. If you want to allow other hosts in your local network access, open port 8123.

    - -
    1
    -2
    -
    sudo firewall-cmd --permanent --add-port=8123/tcp
    -sudo firewall-cmd --reload
    -
    -

    Home Assistant will serve its web interface on http://[IP address of the host]:8123.

    - -

    If you want that Home Assistant is lauched automatically, an extra step is needed to setup systemd. You need a service file to control Home Assistant with systemd. - - -

    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -9
    -10
    -11
    -12
    -
    su -c 'cat <<EOF >> /lib/systemd/system/home-assistant.service
    -[Unit]
    -Description=Home Assistant
    -After=network.target
    -
    -[Service]
    -Type=simple
    -ExecStart=/usr/bin/python3.4 -m homeassistant
    -
    -[Install]
    -WantedBy=multi-user.target
    -EOF'
    -
    - -

    You need to reload systemd to make the daemon aware of the new configuration. Enable and launch Home Assistant after that.

    - -
    1
    -2
    -3
    -
    sudo systemctl --system daemon-reload
    -sudo systemctl enable home-assistant
    -sudo systemctl start home-assistant
    -
    - -

    If everything went well, sudo systemctl start home-assistant should give you a positive feedback.

    - -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    -8
    -
    $ sudo systemctl status home-assistant -l
    -● home-assistant.service - Home Assistant
    -   Loaded: loaded (/usr/lib/systemd/system/home-assistant.service; disabled; vendor preset: disabled)
    -   Active: active (running) since Thu 2015-06-25 23:38:37 CEST; 3min 13s ago
    - Main PID: 8557 (python3.4)
    -   CGroup: /system.slice/home-assistant.service
    -           └─8557 /usr/bin/python3.4 -m homeassistant
    -[...]
    -
    - -

    To get Home Assistant’s logging output, simple use journalctl.

    - -
    1
    -
    sudo journalctl -f -u home-assistant
    -
    - -

    In the future, if you want to update to the latest version, run pip3 install --upgrade home-assistant.

    - -

    -Those instructions were written for Fedora 22 Server and Workstation. They may work for Cloud flavor as well but this was not tested. +

    +When using boot2docker on OS X you are unable to map the local time to your Docker container. Replace -v /etc/localtime:/etc/localtime:ro with -e “TZ=America/Los_Angeles” (replacing America/Los_Angeles with your timezone)

    +

    +

    +

    Home Assistant uses Python 3.4 which is not shipped with the current Raspbian distibution for the Raspberry Pi. Before installing Home Assistant, you will have to install Python 3.4.

    -
    - -
    +

    Once that is complete, installing and running Home Assistant on your local machine is easy. Make sure you have Python 3.4 installed and execute the following code in a console:

    -

    Coming soon…

    - - - -
    - -
    - -
    - - -
    - - -
    -

    Installation with Docker is straightforward. Adjust the following command so that /path/to/your/config/ points at the folder where you want to store your config and run it:

    - -
    1
    -
    docker run -d --name="home-assistant" -v /path/to/your/config:/config -v /etc/localtime:/etc/localtime:ro --net=host balloob/home-assistant
    -
    - -

    This will launch Home Assistant and serve its web interface from port 8123 on your Docker host.

    - -

    -When using boot2docker on OS X you are unable to map the local time to your Docker container. Replace -v /etc/localtime:/etc/localtime:ro with -e "TZ=America/Los_Angeles" (replacing America/Los_Angeles with your timezone) -

    - -
    - - -
    - -

    Home Assistant uses Python 3.4. This makes installation on a Raspberry Pi a bit more difficult as it is not available in the package repository. Please follow the following instructions to get it up and running.

    - -

    Step 1. Install pyenv

    - -
    1
    -
    curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
    -
    - -

    After the installation is done, run:

    - -
    1
    -
    nano ~/.bashrc
    -
    - -

    Then add these lines to the end of the file and save:

    +

    1
     2
    -3
    -
    export PATH="$HOME/.pyenv/bin:$PATH"
    -eval "$(pyenv init -)"
    -eval "$(pyenv virtualenv-init -)"
    -
    - -
    Step 2. Install requirements
    - -
    1
    -2
    -
    sudo apt-get install python3-dev
    -sudo apt-get install libsqlite3-dev libreadline-dev libbz2-dev
    -
    - -

    Log out and then back in so your bashrc is reloaded.

    - -

    -NOTE: the rest of the commands are not being run as sudo and will install python etc under you user’s home directory. -

    - -

    Step 3. Install python 3.4.2 (this will take a few hours)

    - -
    1
    -
    pyenv install 3.4.2
    -
    - -

    Step 4. Create Python Virtual Environment

    -
    1
    -
    pyenv virtualenv 3.4.2 homeassistant
    -
    - -

    Step 5. Set the virtual environment

    -
    1
    -2
    -
    cd home-assistant
    -pyenv local homeassistant
    -
    - -

    Step 6. Install Home Assistant

    -
    1
     
    pip3 install homeassistant
    +hass --open-ui
     
    +

    +

    Running these commands will:

    +
      +
    1. Install Home Assistant
    2. +
    3. Launch Home Assistant and serve web interface on http://localhost:8123
    4. +
    +

    -

    Step 7. Start it up

    +

    Troubleshooting

    + +

    If you run into any issues, please see the troubleshooting page. It contains solutions to many of the more commonly encountered issues.

    + +

    For additional help, in addition to this site, there are three sources: +

    +

    + +

    Staying Up to Date

    +

    In order to update Home Assistant to the latest stable release, simply type the following into a console:

    1
    -
    hass
    +
    pip3 install --upgrade homeassistant
     
    +

    If you would like to stay up to date with the newest unstable builds (alphas, betas, and release candidates), use this command:

    +
    1
    +
    pip3 install --upgrade --pre homeassistant
    +

    -

    It will be up and running on port 8123

    +

    What’s Next

    +

    If you want to see what Home Assistant can do, you can start the demo mode by running hass --demo-mode. Home Assistant has a few other command line flags that can be displayed by running hass --help.

    +

    From here you may now start configuring Home Assistant to your liking. For more advanced users, the advanced configuration page contains brief tutorials on creating more advanced installations.

    -

    In the future, if you want to update to the latest version, run pip3 install --upgrade home-assistant.

    - -
    - -
    - - -

    Next step: configuring Home Assistant »

    +

    Next step: Configuring Home Assistant »

    diff --git a/getting-started/troubleshooting.html b/getting-started/troubleshooting.html index 6e6309fea3..2e02ceae24 100644 --- a/getting-started/troubleshooting.html +++ b/getting-started/troubleshooting.html @@ -112,7 +112,7 @@ This utility should have been installed as part of the Python 3.4 installation. is installed by running python3 --version. If it is not installed, download it here.

    -

    If you are to succesfully run python3 --version but not pip3, run the following command instead +

    If you are able to successfully run python3 --version but not pip3, run the following command instead to install Home Assistant: python3 -m pip install homeassistant.

    No module named pip
    @@ -122,10 +122,39 @@ by some distributions. If you are unable to run python3 -m pip --versionpython3 get-pip.py.

    No access to the frontend
    -In newer Linux distributions (at least Fedora 22/CentOS 7) the access to a host are very limited. -This means that you can’t access the Home Assistant Frontend that is running on a host in your -network. Check the Post-installation section on the Getting started page and -follow the instruction that match your distribution to allow access to port 8123.

    +In newer Linux distributions (at least Fedora 22/CentOS 7) the access to a host is very limited. +This means that you can’t access the Home Assistant Frontend that is running on a host outside of the host machine. Windows and OSX machines may also have issues with this.

    + +

    To fix this you will need to open your machine’s firewall for TCP traffic over port 8123. The method for doing this will vary depending on your operating system and the firewall you have installed. Below are some suggestions to try. Google is your friend here.

    + +

    Windows and Mac OSX have good instructions posted.

    + +

    For firewalld systems (Fedora, RHEL, etc.):

    + +
    1
    +2
    +
    sudo firewall-cmd --permanent --add-port=8123/tcp
    +sudo firewall-cmd --reload
    +
    + + +

    For UFW systems (Ubuntu, Debian, Raspbian, etc.):

    + +
    1
    +
    sudo ufw allow 8123/tcp
    +
    + + +

    For iptables systems (usually the default):

    + +
    1
    +2
    +
    iptables -I INPUT -p tcp --dport 8123 -j ACCEPT
    +iptables-save > /etc/network/iptables.rules  # your rules may be saved elsewhere
    +
    + + +

    « Back to Getting Started

    diff --git a/images/components/ifttt/finding_key.png b/images/components/ifttt/finding_key.png new file mode 100644 index 0000000000..5502f2a68a Binary files /dev/null and b/images/components/ifttt/finding_key.png differ diff --git a/images/components/ifttt/setup_trigger.png b/images/components/ifttt/setup_trigger.png new file mode 100644 index 0000000000..6e93b14ea3 Binary files /dev/null and b/images/components/ifttt/setup_trigger.png differ diff --git a/images/components/ifttt/testing_service.png b/images/components/ifttt/testing_service.png new file mode 100644 index 0000000000..27a53a5ff2 Binary files /dev/null and b/images/components/ifttt/testing_service.png differ diff --git a/images/screenshots/transmission-pref.png b/images/screenshots/transmission_perf.png similarity index 100% rename from images/screenshots/transmission-pref.png rename to images/screenshots/transmission_perf.png diff --git a/images/supported_brands/arest.png b/images/supported_brands/arest.png new file mode 100644 index 0000000000..8905776801 Binary files /dev/null and b/images/supported_brands/arest.png differ diff --git a/images/supported_brands/aruba.png b/images/supported_brands/aruba.png new file mode 100644 index 0000000000..e20f1c95a6 Binary files /dev/null and b/images/supported_brands/aruba.png differ diff --git a/images/supported_brands/denon.png b/images/supported_brands/denon.png new file mode 100644 index 0000000000..621cdda9d6 Binary files /dev/null and b/images/supported_brands/denon.png differ diff --git a/images/supported_brands/dht.png b/images/supported_brands/dht.png new file mode 100644 index 0000000000..701af8ffbd Binary files /dev/null and b/images/supported_brands/dht.png differ diff --git a/images/supported_brands/ifttt.png b/images/supported_brands/ifttt.png new file mode 100644 index 0000000000..f986bf76db Binary files /dev/null and b/images/supported_brands/ifttt.png differ diff --git a/index.html b/index.html index 3d9a1d8d6d..7df78a8d3f 100644 --- a/index.html +++ b/index.html @@ -141,19 +141,48 @@ Home Assistant is an open-source home automation platform running on Python 3. T

    Home Assistant will track the state of all the devices in your home, so you don’t have to.

    Browse all »

    diff --git a/sitemap.xml b/sitemap.xml index 5974b2d71d..dfbce38367 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,728 +2,437 @@ https://home-assistant.io/blog/2015/08/31/version-7-revamped-ui-and-improved-distribution/ - 2015-08-31T22:12:00-07:00 - 0.8 + 2015-08-31T14:12:00-07:00 https://home-assistant.io/blog/2015/08/26/laundry-automation-with-moteino-mqtt-and-home-assistant/ 2015-08-26T08:12:00-07:00 - 0.8 https://home-assistant.io/blog/2015/08/17/verisure-and-modern-tp-link-router-support/ 2015-08-17T20:00:00-07:00 - 0.8 https://home-assistant.io/blog/2015/08/09/mqtt-raspberry-pi-squeezebox-asuswrt-support/ 2015-08-09T18:01:00-07:00 - 0.8 https://home-assistant.io/blog/2015/07/11/ip-cameras-arduino-kodi-efergy-support/ 2015-07-11T01:37:00-07:00 - 0.8 https://home-assistant.io/blog/2015/06/10/release-notes/ 2015-06-10T18:54:00-07:00 - 0.8 https://home-assistant.io/blog/2015/05/14/release-notes/ 2015-05-14T22:25:00-07:00 - 0.8 https://home-assistant.io/blog/2015/05/09/utc-time-zone-awareness/ 2015-05-09T23:08:00-07:00 - 0.8 https://home-assistant.io/blog/2015/04/25/release-notes/ 2015-04-25T06:57:00-07:00 - 0.8 https://home-assistant.io/blog/2015/03/22/release-notes/ 2015-03-22T00:21:00-08:00 - 0.8 https://home-assistant.io/blog/2015/03/11/release-notes/ 2015-03-11T18:36:00-08:00 - 0.8 https://home-assistant.io/blog/2015/03/08/new-logo/ 2015-03-08T23:16:10-07:00 - 0.8 https://home-assistant.io/blog/2015/03/01/home-assistant-migrating-to-yaml/ 2015-03-01T11:38:00-08:00 - 0.8 https://home-assistant.io/blog/2015/02/24/streaming-updates/ 2015-02-24T22:41:27-08:00 - 0.8 https://home-assistant.io/blog/2015/02/08/looking-at-the-past/ 2015-02-08T09:01:23-08:00 - 0.8 https://home-assistant.io/blog/2015/01/24/release-notes/ 2015-01-24T18:36:00-08:00 - 0.8 https://home-assistant.io/blog/2015/01/13/nest-in-da-house/ 2015-01-13T08:29:04-08:00 - 0.8 https://home-assistant.io/blog/2015/01/11/bootstrapping-your-setup-with-discovery/ 2015-01-11T21:49:08-08:00 - 0.8 https://home-assistant.io/blog/2015/01/04/hey-pushbullet-nice-talking-to-you/ 2015-01-04T13:29:07-08:00 - 0.8 https://home-assistant.io/blog/2014/12/26/home-control-home-automation-and-the-smart-home/ 2014-12-26T10:23:13-08:00 - 0.8 https://home-assistant.io/blog/2014/12/18/website-launched/ 2014-12-18T23:24:45-08:00 - 0.8 https://home-assistant.io/developers/add_new_platform.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 + + + https://home-assistant.io/getting-started/advanced.html https://home-assistant.io/getting-started/android.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/developers/api.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/developers/architecture.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/arduino.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/automation.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/browser.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/camera.generic.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/getting-started/configuration.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/configurator.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/conversation.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/developers/creating_components.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/developers/credits.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/device_sun_light_trigger.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/device_tracker.actiontec.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/device_tracker.aruba.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/device_tracker.asuswrt.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/device_tracker.ddwrt.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/device_tracker.luci.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/device_tracker.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/device_tracker.netgear.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/device_tracker.nmap_scanner.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/device_tracker.thomson.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/device_tracker.tomato.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/device_tracker.tplink.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/discovery.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/downloader.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/developers/frontend.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/group.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/history.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 - https://home-assistant.io/blog/archives/ - 2015-09-01T02:02:41-07:00 - weekly - 0.7 + https://home-assistant.io/components/ifttt.html https://home-assistant.io/ - 2015-09-01T02:02:41-07:00 - weekly - 1.0 + + + https://home-assistant.io/blog/archives/ https://home-assistant.io/blog/ - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/developers/ - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/ - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/help/ - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/getting-started/ - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/isy994.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/keyboard.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/light.hue.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/light.limitlessled.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/light.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/logbook.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/media_player.cast.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 + + + https://home-assistant.io/components/media_player.denon.html https://home-assistant.io/components/media_player.kodi.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/media_player.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/media_player.mpd.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/media_player.squeezebox.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/modbus.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/mqtt.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/notify.file.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/notify.instapush.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/notify.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/notify.nma.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/notify.pushbullet.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/notify.pushover.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/notify.slack.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/notify.smtp.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/notify.syslog.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/notify.xmpp.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/developers/python_api.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/developers/rest_api.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/scene.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/scheduler.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/script.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 + + + https://home-assistant.io/components/sensor.arest.html https://home-assistant.io/components/sensor.bitcoin.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/sensor.dht.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/sensor.efergy.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/sensor.forecast.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/sensor.mqtt.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/sensor.mysensors.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/sensor.openweathermap.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/sensor.rfxtrx.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/sensor.rpi_gpio.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/sensor.sabnzbd.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/sensor.swiss_public_transport.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/sensor.systemmonitor.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/sensor.temper.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/sensor.time_date.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/sensor.transmission.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/simple_alarm.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/sun.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/switch.command_switch.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/switch.edimax.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/switch.hikvision.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/switch.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/switch.mqtt.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/switch.rpi_gpio.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/switch.transmission.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/switch.wemo.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/tellstick.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/thermostat.heat_control.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/thermostat.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/thermostat.nest.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/getting-started/troubleshooting-configuration.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/getting-started/troubleshooting.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/vera.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/verisure.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/developers/website.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/wink.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 https://home-assistant.io/components/zwave.html - 2015-09-01T02:02:41-07:00 - weekly - 0.7 + + + https://home-assistant.io/blog/categories/website/ + + + https://home-assistant.io/blog/categories/architecture/ + + + https://home-assistant.io/blog/categories/component/ + + + https://home-assistant.io/blog/categories/release-notes/ + + + https://home-assistant.io/blog/categories/frontend/ + + + https://home-assistant.io/blog/categories/core/ + + + https://home-assistant.io/blog/categories/branding/ + + + https://home-assistant.io/blog/categories/user-stories/ https://home-assistant.io/demo/frontend.html - 2015-08-31T01:01:03-07:00 - 0.6 + 2015-09-10T12:34:31-07:00 https://home-assistant.io/demo/index.html - 2015-08-31T01:01:03-07:00 - 0.6 + 2015-09-10T12:34:31-07:00 https://home-assistant.io/googlef4f3693c209fe788.html - 2014-12-22T00:10:47-08:00 - 0.6 + 2015-07-14T18:47:00-07:00 diff --git a/stylesheets/screen.css b/stylesheets/screen.css index b4caa4d613..dac9ec9fde 100644 --- a/stylesheets/screen.css +++ b/stylesheets/screen.css @@ -26,4 +26,4 @@ * Email: dave@fontawesome.io * Twitter: http://twitter.com/davegandy * Work: Lead Product Designer @ Kyruus - http://kyruus.com - */@font-face{font-family:'FontAwesome';src:url("../font/fontawesome-webfont.eot?v=3.2.1");src:url("../font/fontawesome-webfont.eot?#iefix&v=3.2.1") format("embedded-opentype"),url("../font/fontawesome-webfont.woff?v=3.2.1") format("woff"),url("../font/fontawesome-webfont.ttf?v=3.2.1") format("truetype"),url("../font/fontawesome-webfont.svg#fontawesomeregular?v=3.2.1") format("svg");font-weight:normal;font-style:normal}[class^="icon-"],[class*=" icon-"]{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em}[class^="icon-"]:before,[class*=" icon-"]:before{text-decoration:inherit;display:inline-block;speak:none}.icon-large:before{vertical-align:-10%;font-size:1.33333em}a [class^="icon-"],a [class*=" icon-"]{display:inline}[class^="icon-"].icon-fixed-width,[class*=" icon-"].icon-fixed-width{display:inline-block;width:1.14286em;text-align:right;padding-right:0.28571em}[class^="icon-"].icon-fixed-width.icon-large,[class*=" icon-"].icon-fixed-width.icon-large{width:1.42857em}.icons-ul{margin-left:2.14286em;list-style-type:none}.icons-ul>li{position:relative}.icons-ul .icon-li{position:absolute;left:-2.14286em;width:2.14286em;text-align:center;line-height:inherit}[class^="icon-"].hide,[class*=" icon-"].hide{display:none}.icon-muted{color:#eee}.icon-light{color:#fff}.icon-dark{color:#333}.icon-border{border:solid 1px #eee;padding:.2em .25em .15em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.icon-2x{font-size:2em}.icon-2x.icon-border{border-width:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.icon-3x{font-size:3em}.icon-3x.icon-border{border-width:3px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.icon-4x{font-size:4em}.icon-4x.icon-border{border-width:4px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.icon-5x{font-size:5em}.icon-5x.icon-border{border-width:5px;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.pull-right{float:right}.pull-left{float:left}[class^="icon-"].pull-left,[class*=" icon-"].pull-left{margin-right:.3em}[class^="icon-"].pull-right,[class*=" icon-"].pull-right{margin-left:.3em}.icon-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:-35%}.icon-stack [class^="icon-"],.icon-stack [class*=" icon-"]{display:block;text-align:center;position:absolute;width:100%;height:100%;font-size:1em;line-height:inherit;*line-height:2em}.icon-stack .icon-stack-base{font-size:2em;*line-height:1em}.icon-spin{display:inline-block;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear}a .icon-stack,a .icon-spin{display:inline-block;text-decoration:none}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.icon-rotate-90:before{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1)}.icon-rotate-180:before{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2)}.icon-rotate-270:before{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)}.icon-flip-horizontal:before{-webkit-transform:scale(-1, 1);-moz-transform:scale(-1, 1);-ms-transform:scale(-1, 1);-o-transform:scale(-1, 1);transform:scale(-1, 1)}.icon-flip-vertical:before{-webkit-transform:scale(1, -1);-moz-transform:scale(1, -1);-ms-transform:scale(1, -1);-o-transform:scale(1, -1);transform:scale(1, -1)}a .icon-rotate-90:before,a .icon-rotate-180:before,a .icon-rotate-270:before,a .icon-flip-horizontal:before,a .icon-flip-vertical:before{display:inline-block}.icon-glass:before{content:"\f000"}.icon-music:before{content:"\f001"}.icon-search:before{content:"\f002"}.icon-envelope-alt:before{content:"\f003"}.icon-heart:before{content:"\f004"}.icon-star:before{content:"\f005"}.icon-star-empty:before{content:"\f006"}.icon-user:before{content:"\f007"}.icon-film:before{content:"\f008"}.icon-th-large:before{content:"\f009"}.icon-th:before{content:"\f00a"}.icon-th-list:before{content:"\f00b"}.icon-ok:before{content:"\f00c"}.icon-remove:before{content:"\f00d"}.icon-zoom-in:before{content:"\f00e"}.icon-zoom-out:before{content:"\f010"}.icon-power-off:before,.icon-off:before{content:"\f011"}.icon-signal:before{content:"\f012"}.icon-gear:before,.icon-cog:before{content:"\f013"}.icon-trash:before{content:"\f014"}.icon-home:before{content:"\f015"}.icon-file-alt:before{content:"\f016"}.icon-time:before{content:"\f017"}.icon-road:before{content:"\f018"}.icon-download-alt:before{content:"\f019"}.icon-download:before{content:"\f01a"}.icon-upload:before{content:"\f01b"}.icon-inbox:before{content:"\f01c"}.icon-play-circle:before{content:"\f01d"}.icon-rotate-right:before,.icon-repeat:before{content:"\f01e"}.icon-refresh:before{content:"\f021"}.icon-list-alt:before{content:"\f022"}.icon-lock:before{content:"\f023"}.icon-flag:before{content:"\f024"}.icon-headphones:before{content:"\f025"}.icon-volume-off:before{content:"\f026"}.icon-volume-down:before{content:"\f027"}.icon-volume-up:before{content:"\f028"}.icon-qrcode:before{content:"\f029"}.icon-barcode:before{content:"\f02a"}.icon-tag:before{content:"\f02b"}.icon-tags:before{content:"\f02c"}.icon-book:before{content:"\f02d"}.icon-bookmark:before{content:"\f02e"}.icon-print:before{content:"\f02f"}.icon-camera:before{content:"\f030"}.icon-font:before{content:"\f031"}.icon-bold:before{content:"\f032"}.icon-italic:before{content:"\f033"}.icon-text-height:before{content:"\f034"}.icon-text-width:before{content:"\f035"}.icon-align-left:before{content:"\f036"}.icon-align-center:before{content:"\f037"}.icon-align-right:before{content:"\f038"}.icon-align-justify:before{content:"\f039"}.icon-list:before{content:"\f03a"}.icon-indent-left:before{content:"\f03b"}.icon-indent-right:before{content:"\f03c"}.icon-facetime-video:before{content:"\f03d"}.icon-picture:before{content:"\f03e"}.icon-pencil:before{content:"\f040"}.icon-map-marker:before{content:"\f041"}.icon-adjust:before{content:"\f042"}.icon-tint:before{content:"\f043"}.icon-edit:before{content:"\f044"}.icon-share:before{content:"\f045"}.icon-check:before{content:"\f046"}.icon-move:before{content:"\f047"}.icon-step-backward:before{content:"\f048"}.icon-fast-backward:before{content:"\f049"}.icon-backward:before{content:"\f04a"}.icon-play:before{content:"\f04b"}.icon-pause:before{content:"\f04c"}.icon-stop:before{content:"\f04d"}.icon-forward:before{content:"\f04e"}.icon-fast-forward:before{content:"\f050"}.icon-step-forward:before{content:"\f051"}.icon-eject:before{content:"\f052"}.icon-chevron-left:before{content:"\f053"}.icon-chevron-right:before{content:"\f054"}.icon-plus-sign:before{content:"\f055"}.icon-minus-sign:before{content:"\f056"}.icon-remove-sign:before{content:"\f057"}.icon-ok-sign:before{content:"\f058"}.icon-question-sign:before{content:"\f059"}.icon-info-sign:before{content:"\f05a"}.icon-screenshot:before{content:"\f05b"}.icon-remove-circle:before{content:"\f05c"}.icon-ok-circle:before{content:"\f05d"}.icon-ban-circle:before{content:"\f05e"}.icon-arrow-left:before{content:"\f060"}.icon-arrow-right:before{content:"\f061"}.icon-arrow-up:before{content:"\f062"}.icon-arrow-down:before{content:"\f063"}.icon-mail-forward:before,.icon-share-alt:before{content:"\f064"}.icon-resize-full:before{content:"\f065"}.icon-resize-small:before{content:"\f066"}.icon-plus:before{content:"\f067"}.icon-minus:before{content:"\f068"}.icon-asterisk:before{content:"\f069"}.icon-exclamation-sign:before{content:"\f06a"}.icon-gift:before{content:"\f06b"}.icon-leaf:before{content:"\f06c"}.icon-fire:before{content:"\f06d"}.icon-eye-open:before{content:"\f06e"}.icon-eye-close:before{content:"\f070"}.icon-warning-sign:before{content:"\f071"}.icon-plane:before{content:"\f072"}.icon-calendar:before{content:"\f073"}.icon-random:before{content:"\f074"}.icon-comment:before{content:"\f075"}.icon-magnet:before{content:"\f076"}.icon-chevron-up:before{content:"\f077"}.icon-chevron-down:before{content:"\f078"}.icon-retweet:before{content:"\f079"}.icon-shopping-cart:before{content:"\f07a"}.icon-folder-close:before{content:"\f07b"}.icon-folder-open:before{content:"\f07c"}.icon-resize-vertical:before{content:"\f07d"}.icon-resize-horizontal:before{content:"\f07e"}.icon-bar-chart:before{content:"\f080"}.icon-twitter-sign:before{content:"\f081"}.icon-facebook-sign:before{content:"\f082"}.icon-camera-retro:before{content:"\f083"}.icon-key:before{content:"\f084"}.icon-gears:before,.icon-cogs:before{content:"\f085"}.icon-comments:before{content:"\f086"}.icon-thumbs-up-alt:before{content:"\f087"}.icon-thumbs-down-alt:before{content:"\f088"}.icon-star-half:before{content:"\f089"}.icon-heart-empty:before{content:"\f08a"}.icon-signout:before{content:"\f08b"}.icon-linkedin-sign:before{content:"\f08c"}.icon-pushpin:before{content:"\f08d"}.icon-external-link:before{content:"\f08e"}.icon-signin:before{content:"\f090"}.icon-trophy:before{content:"\f091"}.icon-github-sign:before{content:"\f092"}.icon-upload-alt:before{content:"\f093"}.icon-lemon:before{content:"\f094"}.icon-phone:before{content:"\f095"}.icon-unchecked:before,.icon-check-empty:before{content:"\f096"}.icon-bookmark-empty:before{content:"\f097"}.icon-phone-sign:before{content:"\f098"}.icon-twitter:before{content:"\f099"}.icon-facebook:before{content:"\f09a"}.icon-github:before{content:"\f09b"}.icon-unlock:before{content:"\f09c"}.icon-credit-card:before{content:"\f09d"}.icon-rss:before{content:"\f09e"}.icon-hdd:before{content:"\f0a0"}.icon-bullhorn:before{content:"\f0a1"}.icon-bell:before{content:"\f0a2"}.icon-certificate:before{content:"\f0a3"}.icon-hand-right:before{content:"\f0a4"}.icon-hand-left:before{content:"\f0a5"}.icon-hand-up:before{content:"\f0a6"}.icon-hand-down:before{content:"\f0a7"}.icon-circle-arrow-left:before{content:"\f0a8"}.icon-circle-arrow-right:before{content:"\f0a9"}.icon-circle-arrow-up:before{content:"\f0aa"}.icon-circle-arrow-down:before{content:"\f0ab"}.icon-globe:before{content:"\f0ac"}.icon-wrench:before{content:"\f0ad"}.icon-tasks:before{content:"\f0ae"}.icon-filter:before{content:"\f0b0"}.icon-briefcase:before{content:"\f0b1"}.icon-fullscreen:before{content:"\f0b2"}.icon-group:before{content:"\f0c0"}.icon-link:before{content:"\f0c1"}.icon-cloud:before{content:"\f0c2"}.icon-beaker:before{content:"\f0c3"}.icon-cut:before{content:"\f0c4"}.icon-copy:before{content:"\f0c5"}.icon-paperclip:before,.icon-paper-clip:before{content:"\f0c6"}.icon-save:before{content:"\f0c7"}.icon-sign-blank:before{content:"\f0c8"}.icon-reorder:before{content:"\f0c9"}.icon-list-ul:before{content:"\f0ca"}.icon-list-ol:before{content:"\f0cb"}.icon-strikethrough:before{content:"\f0cc"}.icon-underline:before{content:"\f0cd"}.icon-table:before{content:"\f0ce"}.icon-magic:before{content:"\f0d0"}.icon-truck:before{content:"\f0d1"}.icon-pinterest:before{content:"\f0d2"}.icon-pinterest-sign:before{content:"\f0d3"}.icon-google-plus-sign:before{content:"\f0d4"}.icon-google-plus:before{content:"\f0d5"}.icon-money:before{content:"\f0d6"}.icon-caret-down:before{content:"\f0d7"}.icon-caret-up:before{content:"\f0d8"}.icon-caret-left:before{content:"\f0d9"}.icon-caret-right:before{content:"\f0da"}.icon-columns:before{content:"\f0db"}.icon-sort:before{content:"\f0dc"}.icon-sort-down:before{content:"\f0dd"}.icon-sort-up:before{content:"\f0de"}.icon-envelope:before{content:"\f0e0"}.icon-linkedin:before{content:"\f0e1"}.icon-rotate-left:before,.icon-undo:before{content:"\f0e2"}.icon-legal:before{content:"\f0e3"}.icon-dashboard:before{content:"\f0e4"}.icon-comment-alt:before{content:"\f0e5"}.icon-comments-alt:before{content:"\f0e6"}.icon-bolt:before{content:"\f0e7"}.icon-sitemap:before{content:"\f0e8"}.icon-umbrella:before{content:"\f0e9"}.icon-paste:before{content:"\f0ea"}.icon-lightbulb:before{content:"\f0eb"}.icon-exchange:before{content:"\f0ec"}.icon-cloud-download:before{content:"\f0ed"}.icon-cloud-upload:before{content:"\f0ee"}.icon-user-md:before{content:"\f0f0"}.icon-stethoscope:before{content:"\f0f1"}.icon-suitcase:before{content:"\f0f2"}.icon-bell-alt:before{content:"\f0f3"}.icon-coffee:before{content:"\f0f4"}.icon-food:before{content:"\f0f5"}.icon-file-text-alt:before{content:"\f0f6"}.icon-building:before{content:"\f0f7"}.icon-hospital:before{content:"\f0f8"}.icon-ambulance:before{content:"\f0f9"}.icon-medkit:before{content:"\f0fa"}.icon-fighter-jet:before{content:"\f0fb"}.icon-beer:before{content:"\f0fc"}.icon-h-sign:before{content:"\f0fd"}.icon-plus-sign-alt:before{content:"\f0fe"}.icon-double-angle-left:before{content:"\f100"}.icon-double-angle-right:before{content:"\f101"}.icon-double-angle-up:before{content:"\f102"}.icon-double-angle-down:before{content:"\f103"}.icon-angle-left:before{content:"\f104"}.icon-angle-right:before{content:"\f105"}.icon-angle-up:before{content:"\f106"}.icon-angle-down:before{content:"\f107"}.icon-desktop:before{content:"\f108"}.icon-laptop:before{content:"\f109"}.icon-tablet:before{content:"\f10a"}.icon-mobile-phone:before{content:"\f10b"}.icon-circle-blank:before{content:"\f10c"}.icon-quote-left:before{content:"\f10d"}.icon-quote-right:before{content:"\f10e"}.icon-spinner:before{content:"\f110"}.icon-circle:before{content:"\f111"}.icon-mail-reply:before,.icon-reply:before{content:"\f112"}.icon-github-alt:before{content:"\f113"}.icon-folder-close-alt:before{content:"\f114"}.icon-folder-open-alt:before{content:"\f115"}.icon-expand-alt:before{content:"\f116"}.icon-collapse-alt:before{content:"\f117"}.icon-smile:before{content:"\f118"}.icon-frown:before{content:"\f119"}.icon-meh:before{content:"\f11a"}.icon-gamepad:before{content:"\f11b"}.icon-keyboard:before{content:"\f11c"}.icon-flag-alt:before{content:"\f11d"}.icon-flag-checkered:before{content:"\f11e"}.icon-terminal:before{content:"\f120"}.icon-code:before{content:"\f121"}.icon-reply-all:before{content:"\f122"}.icon-mail-reply-all:before{content:"\f122"}.icon-star-half-full:before,.icon-star-half-empty:before{content:"\f123"}.icon-location-arrow:before{content:"\f124"}.icon-crop:before{content:"\f125"}.icon-code-fork:before{content:"\f126"}.icon-unlink:before{content:"\f127"}.icon-question:before{content:"\f128"}.icon-info:before{content:"\f129"}.icon-exclamation:before{content:"\f12a"}.icon-superscript:before{content:"\f12b"}.icon-subscript:before{content:"\f12c"}.icon-eraser:before{content:"\f12d"}.icon-puzzle-piece:before{content:"\f12e"}.icon-microphone:before{content:"\f130"}.icon-microphone-off:before{content:"\f131"}.icon-shield:before{content:"\f132"}.icon-calendar-empty:before{content:"\f133"}.icon-fire-extinguisher:before{content:"\f134"}.icon-rocket:before{content:"\f135"}.icon-maxcdn:before{content:"\f136"}.icon-chevron-sign-left:before{content:"\f137"}.icon-chevron-sign-right:before{content:"\f138"}.icon-chevron-sign-up:before{content:"\f139"}.icon-chevron-sign-down:before{content:"\f13a"}.icon-html5:before{content:"\f13b"}.icon-css3:before{content:"\f13c"}.icon-anchor:before{content:"\f13d"}.icon-unlock-alt:before{content:"\f13e"}.icon-bullseye:before{content:"\f140"}.icon-ellipsis-horizontal:before{content:"\f141"}.icon-ellipsis-vertical:before{content:"\f142"}.icon-rss-sign:before{content:"\f143"}.icon-play-sign:before{content:"\f144"}.icon-ticket:before{content:"\f145"}.icon-minus-sign-alt:before{content:"\f146"}.icon-check-minus:before{content:"\f147"}.icon-level-up:before{content:"\f148"}.icon-level-down:before{content:"\f149"}.icon-check-sign:before{content:"\f14a"}.icon-edit-sign:before{content:"\f14b"}.icon-external-link-sign:before{content:"\f14c"}.icon-share-sign:before{content:"\f14d"}.icon-compass:before{content:"\f14e"}.icon-collapse:before{content:"\f150"}.icon-collapse-top:before{content:"\f151"}.icon-expand:before{content:"\f152"}.icon-euro:before,.icon-eur:before{content:"\f153"}.icon-gbp:before{content:"\f154"}.icon-dollar:before,.icon-usd:before{content:"\f155"}.icon-rupee:before,.icon-inr:before{content:"\f156"}.icon-yen:before,.icon-jpy:before{content:"\f157"}.icon-renminbi:before,.icon-cny:before{content:"\f158"}.icon-won:before,.icon-krw:before{content:"\f159"}.icon-bitcoin:before,.icon-btc:before{content:"\f15a"}.icon-file:before{content:"\f15b"}.icon-file-text:before{content:"\f15c"}.icon-sort-by-alphabet:before{content:"\f15d"}.icon-sort-by-alphabet-alt:before{content:"\f15e"}.icon-sort-by-attributes:before{content:"\f160"}.icon-sort-by-attributes-alt:before{content:"\f161"}.icon-sort-by-order:before{content:"\f162"}.icon-sort-by-order-alt:before{content:"\f163"}.icon-thumbs-up:before{content:"\f164"}.icon-thumbs-down:before{content:"\f165"}.icon-youtube-sign:before{content:"\f166"}.icon-youtube:before{content:"\f167"}.icon-xing:before{content:"\f168"}.icon-xing-sign:before{content:"\f169"}.icon-youtube-play:before{content:"\f16a"}.icon-dropbox:before{content:"\f16b"}.icon-stackexchange:before{content:"\f16c"}.icon-instagram:before{content:"\f16d"}.icon-flickr:before{content:"\f16e"}.icon-adn:before{content:"\f170"}.icon-bitbucket:before{content:"\f171"}.icon-bitbucket-sign:before{content:"\f172"}.icon-tumblr:before{content:"\f173"}.icon-tumblr-sign:before{content:"\f174"}.icon-long-arrow-down:before{content:"\f175"}.icon-long-arrow-up:before{content:"\f176"}.icon-long-arrow-left:before{content:"\f177"}.icon-long-arrow-right:before{content:"\f178"}.icon-apple:before{content:"\f179"}.icon-windows:before{content:"\f17a"}.icon-android:before{content:"\f17b"}.icon-linux:before{content:"\f17c"}.icon-dribbble:before{content:"\f17d"}.icon-skype:before{content:"\f17e"}.icon-foursquare:before{content:"\f180"}.icon-trello:before{content:"\f181"}.icon-female:before{content:"\f182"}.icon-male:before{content:"\f183"}.icon-gittip:before{content:"\f184"}.icon-sun:before{content:"\f185"}.icon-moon:before{content:"\f186"}.icon-archive:before{content:"\f187"}.icon-bug:before{content:"\f188"}.icon-vk:before{content:"\f189"}.icon-weibo:before{content:"\f18a"}.icon-renren:before{content:"\f18b"}body,html{background-color:#f5f5f5;color:#222;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;height:100%}a{color:#049cdb;text-decoration:none}a:visited{color:#0378a9}.menu a{color:#049cdb}.gist{font-size:0.75em}@media only screen and (max-width: 480px){.title.indent::before{display:none}}.title.indent::before{content:"// ";color:#049cdb}.divider,.usp hr,.hero hr{border:none;border-bottom:2px solid #049cdb;clear:both;margin:2em 0}article.post img,article.page img,article.listing img{border:5px solid #fff;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,0.25)}article.post img.right,article.page img.right,article.listing img.right{float:right;margin:0 0 10px 20px}article.post img.left,article.page img.left,article.listing img.left{float:left;margin:0 20px 10px 0}.grid-wrapper{margin:auto;max-width:1100px;padding:0 25px}.grid-center{text-align:center}.grid-center>.grid__item{text-align:left}body>header{-webkit-box-shadow:0 0 3px rgba(0,0,0,0.25);-moz-box-shadow:0 0 3px rgba(0,0,0,0.25);-ms-box-shadow:0 0 3px rgba(0,0,0,0.25);-o-box-shadow:0 0 3px rgba(0,0,0,0.25);box-shadow:0 0 3px rgba(0,0,0,0.25);background-color:#fff;margin-bottom:2em}body>header .site-title{color:#222;font-size:1.7em;font-weight:bold;line-height:2.5em}body{-webkit-animation:bugfix infinite 1s}@-webkit-keyframes bugfix{from{padding:0}to{padding:0}}.header{position:relative}#toggle,.toggle{display:none}.menu li{list-style:none;float:left}@media only screen and (max-width: 790px){.menu{display:none;opacity:0;width:100%;position:absolute;right:0}.menu li{display:block;width:100%;margin:0}.menu li a{display:block;width:100%;text-decoration:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.toggle{display:block;position:relative;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}#toggle:checked ~ .menu{display:block;opacity:1;z-index:999}}ul.menu li{position:relative}ul.menu li:hover ul{display:block}ul.menu li ul{display:none;z-index:10;position:absolute;top:68px;margin-left:0;background-color:white}ul.menu li ul li{white-space:nowrap;float:none}ul.menu li ul li a{display:block;padding:20px 10px}ul.menu li ul li a:hover,ul.menu li ul li a:focus{background:#eee}header .grid{height:68px}.menu{margin:0;top:68px}.menu li a{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:all 0.25s linear;-moz-transition:all 0.25s linear;-o-transition:all 0.25s linear;transition:all 0.25s linear;display:block;padding:32px 20px;text-decoration:none;font-weight:normal;font-size:16px;line-height:1}.menu>li>a:hover,.menu>li>a:focus{background:#f5f5f5;box-shadow:inset 0px 5px #049cdb;color:#049cdb;padding:40px 20px 24px}.toggle{z-index:20}@media only screen and (max-width: 790px){.menu{background:#fff;border-top:1px solid #049cdb;border-bottom:4px solid #049cdb}.menu,.menu li,.menu li a{height:auto}.menu li a{padding:15px 15px !important}.menu li a:hover,.menu li a:focus{background:#eee;box-shadow:inset 5px 0px #049cdb;padding:15px 15px 15px 25px}.toggle{position:absolute;top:17px;right:10px}.toggle::after{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:all 0.5s linear;-moz-transition:all 0.5s linear;-o-transition:all 0.5s linear;transition:all 0.5s linear;font-family:"FontAwesome";content:"\f0c9";display:inline-block;width:100%;padding:10px 15px;background:#049cdb;text-align:center;font-size:12px;color:#fff;white-space:nowrap}.toggle:hover::after{background:#0383b8}#toggle:checked+.toggle::after{content:attr(data-close)}ul.menu li ul{display:block;position:relative;top:0}}#page-wrap{min-height:100%;margin-bottom:-100px}#page-wrap::after{content:"";display:block;height:100px}body>footer{-webkit-box-shadow:0 0 3px rgba(0,0,0,0.25);-moz-box-shadow:0 0 3px rgba(0,0,0,0.25);-ms-box-shadow:0 0 3px rgba(0,0,0,0.25);-o-box-shadow:0 0 3px rgba(0,0,0,0.25);box-shadow:0 0 3px rgba(0,0,0,0.25);background-color:#fff;margin-top:3em}.copyright{margin:0;padding:20px 0;text-align:center}article blockquote{border-left:2px solid #049cdb;color:#484848;font-family:Georgia,"Times New Roman",Times,serif;font-size:1.25em;font-style:italic;padding-left:15px}article blockquote footer{float:right;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:0.8em}article blockquote footer strong::after{content:" \2014 "}article blockquote footer a{text-decoration:underline}article .pullquote-left::before,article .pullquote-right::before{border:medium none;color:#049cdb;content:"\201C" attr(data-pullquote) "\201D";float:right;font-family:Georgia,"Times New Roman",Times,serif;font-size:1.4em;font-style:italic;line-height:1.45em;margin:0.3em 0 1em 1.5em;padding:0;position:relative;top:7px;width:45%}@media only screen and (max-width: 480px){article .pullquote-left::before,article .pullquote-right::before{border-top:1px dotted #049cdb;border-bottom:1px dotted #049cdb;padding:0 10px;width:100%}}article .tags{display:inline}article .tags li{margin-right:2px}article .tags li::after{content:","}article .tags li:last-child::after{content:""}article .tags li a{color:#555;text-decoration:none}article .tags li a:hover{text-decoration:underline}article .meta{font-size:12px;padding:0 0 5px}article .meta>*{margin-right:15px;white-space:nowrap}article .meta>*:last-child{margin-right:0}article .meta .comments::before{content:"\f075";font-family:"FontAwesome";padding-right:3px}article.listing{margin-bottom:20px}article.listing h1{margin-bottom:0}article.listing h1 a{color:#049cdb;text-decoration:none}article.listing .entry-content{margin:10px 0}article.listing+hr{border:none;border-bottom:1px solid #049cdb}@media only screen and (max-width: 480px){article.post .tags{clear:both;margin-top:7px}}article.post h1{margin-bottom:0}article.post .meta{border-bottom:1px solid #049cdb;margin-bottom:20px}#archive-list article h1{margin-bottom:0}.sans,html .gist .gist-file .gist-meta{font-family:"Helvetica Neue",Arial,sans-serif}.mono,pre,p code,li code{font-family:Menlo,Monaco,"Andale Mono","lucida console","Courier New",monospace}.highlight table{margin-bottom:0}.highlight .gutter,.highlight .code{padding:0}.highlight .gutter .line-number{display:block}.highlight,html .gist .gist-file .gist-syntax .gist-highlight{border:1px solid #05232b !important}.highlight table td.code,html .gist .gist-file .gist-syntax .gist-highlight table td.code{width:100%}.highlight .line-numbers,html .gist .gist-file .gist-syntax .highlight .line_numbers{text-align:right;font-size:13px;line-height:1.45em;background:#073642 url('/images/noise.png?1419195603') top left !important;border-right:1px solid #00232c !important;-webkit-box-shadow:#083e4b -1px 0 inset;-moz-box-shadow:#083e4b -1px 0 inset;-ms-box-shadow:#083e4b -1px 0 inset;-o-box-shadow:#083e4b -1px 0 inset;box-shadow:#083e4b -1px 0 inset;text-shadow:#021014 0 -1px;padding:.8em !important;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.highlight .line-numbers span,html .gist .gist-file .gist-syntax .highlight .line_numbers span{color:#586e75 !important}figure.code,.gist-file,pre{-webkit-box-shadow:rgba(0,0,0,0.06) 0 0 10px;-moz-box-shadow:rgba(0,0,0,0.06) 0 0 10px;-ms-box-shadow:rgba(0,0,0,0.06) 0 0 10px;-o-box-shadow:rgba(0,0,0,0.06) 0 0 10px;box-shadow:rgba(0,0,0,0.06) 0 0 10px}figure.code .highlight pre,.gist-file .highlight pre,pre .highlight pre{-webkit-box-shadow:none;-moz-box-shadow:none;-ms-box-shadow:none;-o-box-shadow:none;box-shadow:none}.gist .highlight *::-moz-selection,figure.code .highlight *::-moz-selection{background:#386774;color:inherit;text-shadow:#002b36 0 1px}.gist .highlight *::-webkit-selection,figure.code .highlight *::-webkit-selection{background:#386774;color:inherit;text-shadow:#002b36 0 1px}.gist .highlight *::selection,figure.code .highlight *::selection{background:#386774;color:inherit;text-shadow:#002b36 0 1px}html .gist .gist-file{margin-bottom:1.8em;position:relative;border:none;padding-top:26px !important}html .gist .gist-file .highlight{margin-bottom:0}html .gist .gist-file .gist-syntax{border-bottom:0 !important;background:none !important}html .gist .gist-file .gist-syntax .gist-highlight{background:#002b36 !important}html .gist .gist-file .gist-syntax .highlight pre{padding:0}html .gist .gist-file .gist-meta{padding:.6em 0.8em;border:1px solid #083e4b !important;color:#586e75;font-size:.7em !important;background:#073642 url('/images/noise.png?1419195603') top left;line-height:1.5em}html .gist .gist-file .gist-meta a{color:#75878b !important}html .gist .gist-file .gist-meta a:hover{color:#93a1a1 !important}html .gist .gist-file .gist-meta a[href*='#file']{position:absolute;top:0;left:0;right:-10px;color:#474747 !important}html .gist .gist-file .gist-meta a[href*='#file']:hover{color:#049cdb !important}html .gist .gist-file .gist-meta a[href*=raw]{top:.4em}pre{background:#002b36 url('/images/noise.png?1419195603') top left;-webkit-border-radius:0.4em;-moz-border-radius:0.4em;border-radius:0.4em;border:1px solid #05232b;line-height:1.45em;font-size:13px;margin-bottom:2.1em;padding:.8em 1em;color:#93a1a1;overflow:auto}h3.filename+pre{-webkit-border-radius:0px;-moz-border-radius:0px;border-radius:0px}p code,li code{display:inline-block;white-space:no-wrap;background:#fff;font-size:.8em;line-height:1.5em;color:#555;border:1px solid #ddd;-webkit-border-radius:0.4em;-moz-border-radius:0.4em;border-radius:0.4em;padding:0 .3em;margin:-1px 0}p pre code,li pre code{font-size:1em !important;background:none;border:none}.pre-code,html .gist .gist-file .gist-syntax .highlight pre,.highlight code{font-family:Menlo,Monaco,"Andale Mono","lucida console","Courier New",monospace !important;overflow:scroll;overflow-y:hidden;display:block;padding:.8em;overflow-x:auto;line-height:1.45em;background:#002b36 url('/images/noise.png?1419195603') top left !important;color:#93a1a1 !important}.pre-code span,html .gist .gist-file .gist-syntax .highlight pre span,.highlight code span{color:#93a1a1 !important}.pre-code span,html .gist .gist-file .gist-syntax .highlight pre span,.highlight code span{font-style:normal !important;font-weight:normal !important}.pre-code .c,html .gist .gist-file .gist-syntax .highlight pre .c,.highlight code .c{color:#586e75 !important;font-style:italic !important}.pre-code .cm,html .gist .gist-file .gist-syntax .highlight pre .cm,.highlight code .cm{color:#586e75 !important;font-style:italic !important}.pre-code .cp,html .gist .gist-file .gist-syntax .highlight pre .cp,.highlight code .cp{color:#586e75 !important;font-style:italic !important}.pre-code .c1,html .gist .gist-file .gist-syntax .highlight pre .c1,.highlight code .c1{color:#586e75 !important;font-style:italic !important}.pre-code .cs,html .gist .gist-file .gist-syntax .highlight pre .cs,.highlight code .cs{color:#586e75 !important;font-weight:bold !important;font-style:italic !important}.pre-code .err,html .gist .gist-file .gist-syntax .highlight pre .err,.highlight code .err{color:#dc322f !important;background:none !important}.pre-code .k,html .gist .gist-file .gist-syntax .highlight pre .k,.highlight code .k{color:#cb4b16 !important}.pre-code .o,html .gist .gist-file .gist-syntax .highlight pre .o,.highlight code .o{color:#93a1a1 !important;font-weight:bold !important}.pre-code .p,html .gist .gist-file .gist-syntax .highlight pre .p,.highlight code .p{color:#93a1a1 !important}.pre-code .ow,html .gist .gist-file .gist-syntax .highlight pre .ow,.highlight code .ow{color:#2aa198 !important;font-weight:bold !important}.pre-code .gd,html .gist .gist-file .gist-syntax .highlight pre .gd,.highlight code .gd{color:#93a1a1 !important;background-color:#372c34 !important;display:inline-block}.pre-code .gd .x,html .gist .gist-file .gist-syntax .highlight pre .gd .x,.highlight code .gd .x{color:#93a1a1 !important;background-color:#4d2d33 !important;display:inline-block}.pre-code .ge,html .gist .gist-file .gist-syntax .highlight pre .ge,.highlight code .ge{color:#93a1a1 !important;font-style:italic !important}.pre-code .gh,html .gist .gist-file .gist-syntax .highlight pre .gh,.highlight code .gh{color:#586e75 !important}.pre-code .gi,html .gist .gist-file .gist-syntax .highlight pre .gi,.highlight code .gi{color:#93a1a1 !important;background-color:#1a412b !important;display:inline-block}.pre-code .gi .x,html .gist .gist-file .gist-syntax .highlight pre .gi .x,.highlight code .gi .x{color:#93a1a1 !important;background-color:#355720 !important;display:inline-block}.pre-code .gs,html .gist .gist-file .gist-syntax .highlight pre .gs,.highlight code .gs{color:#93a1a1 !important;font-weight:bold !important}.pre-code .gu,html .gist .gist-file .gist-syntax .highlight pre .gu,.highlight code .gu{color:#6c71c4 !important}.pre-code .kc,html .gist .gist-file .gist-syntax .highlight pre .kc,.highlight code .kc{color:#859900 !important;font-weight:bold !important}.pre-code .kd,html .gist .gist-file .gist-syntax .highlight pre .kd,.highlight code .kd{color:#268bd2 !important}.pre-code .kp,html .gist .gist-file .gist-syntax .highlight pre .kp,.highlight code .kp{color:#cb4b16 !important;font-weight:bold !important}.pre-code .kr,html .gist .gist-file .gist-syntax .highlight pre .kr,.highlight code .kr{color:#d33682 !important;font-weight:bold !important}.pre-code .kt,html .gist .gist-file .gist-syntax .highlight pre .kt,.highlight code .kt{color:#2aa198 !important}.pre-code .n,html .gist .gist-file .gist-syntax .highlight pre .n,.highlight code .n{color:#268bd2 !important}.pre-code .na,html .gist .gist-file .gist-syntax .highlight pre .na,.highlight code .na{color:#268bd2 !important}.pre-code .nb,html .gist .gist-file .gist-syntax .highlight pre .nb,.highlight code .nb{color:#859900 !important}.pre-code .nc,html .gist .gist-file .gist-syntax .highlight pre .nc,.highlight code .nc{color:#d33682 !important}.pre-code .no,html .gist .gist-file .gist-syntax .highlight pre .no,.highlight code .no{color:#b58900 !important}.pre-code .nl,html .gist .gist-file .gist-syntax .highlight pre .nl,.highlight code .nl{color:#859900 !important}.pre-code .ne,html .gist .gist-file .gist-syntax .highlight pre .ne,.highlight code .ne{color:#268bd2 !important;font-weight:bold !important}.pre-code .nf,html .gist .gist-file .gist-syntax .highlight pre .nf,.highlight code .nf{color:#268bd2 !important;font-weight:bold !important}.pre-code .nn,html .gist .gist-file .gist-syntax .highlight pre .nn,.highlight code .nn{color:#b58900 !important}.pre-code .nt,html .gist .gist-file .gist-syntax .highlight pre .nt,.highlight code .nt{color:#268bd2 !important;font-weight:bold !important}.pre-code .nx,html .gist .gist-file .gist-syntax .highlight pre .nx,.highlight code .nx{color:#b58900 !important}.pre-code .vg,html .gist .gist-file .gist-syntax .highlight pre .vg,.highlight code .vg{color:#268bd2 !important}.pre-code .vi,html .gist .gist-file .gist-syntax .highlight pre .vi,.highlight code .vi{color:#268bd2 !important}.pre-code .nv,html .gist .gist-file .gist-syntax .highlight pre .nv,.highlight code .nv{color:#268bd2 !important}.pre-code .mf,html .gist .gist-file .gist-syntax .highlight pre .mf,.highlight code .mf{color:#2aa198 !important}.pre-code .m,html .gist .gist-file .gist-syntax .highlight pre .m,.highlight code .m{color:#2aa198 !important}.pre-code .mh,html .gist .gist-file .gist-syntax .highlight pre .mh,.highlight code .mh{color:#2aa198 !important}.pre-code .mi,html .gist .gist-file .gist-syntax .highlight pre .mi,.highlight code .mi{color:#2aa198 !important}.pre-code .s,html .gist .gist-file .gist-syntax .highlight pre .s,.highlight code .s{color:#2aa198 !important}.pre-code .sd,html .gist .gist-file .gist-syntax .highlight pre .sd,.highlight code .sd{color:#2aa198 !important}.pre-code .s2,html .gist .gist-file .gist-syntax .highlight pre .s2,.highlight code .s2{color:#2aa198 !important}.pre-code .se,html .gist .gist-file .gist-syntax .highlight pre .se,.highlight code .se{color:#dc322f !important}.pre-code .si,html .gist .gist-file .gist-syntax .highlight pre .si,.highlight code .si{color:#268bd2 !important}.pre-code .sr,html .gist .gist-file .gist-syntax .highlight pre .sr,.highlight code .sr{color:#2aa198 !important}.pre-code .s1,html .gist .gist-file .gist-syntax .highlight pre .s1,.highlight code .s1{color:#2aa198 !important}.pre-code div .gd,html .gist .gist-file .gist-syntax .highlight pre div .gd,.highlight code div .gd,.pre-code div .gd .x,html .gist .gist-file .gist-syntax .highlight pre div .gd .x,.highlight code div .gd .x,.pre-code div .gi,html .gist .gist-file .gist-syntax .highlight pre div .gi,.highlight code div .gi,.pre-code div .gi .x,html .gist .gist-file .gist-syntax .highlight pre div .gi .x,.highlight code div .gi .x{display:inline-block;width:100%}.highlight,.gist-highlight{margin-bottom:1.8em;background:#002b36;overflow-y:hidden;overflow-x:auto}.highlight pre,.gist-highlight pre{background:none;-webkit-border-radius:0px;-moz-border-radius:0px;border-radius:0px;border:none;padding:0;margin-bottom:0}pre::-webkit-scrollbar,.highlight::-webkit-scrollbar,.gist-highlight::-webkit-scrollbar{height:.5em;background:rgba(255,255,255,0.15)}pre::-webkit-scrollbar-thumb:horizontal,.highlight::-webkit-scrollbar-thumb:horizontal,.gist-highlight::-webkit-scrollbar-thumb:horizontal{background:rgba(255,255,255,0.2);-webkit-border-radius:4px;border-radius:4px}.highlight code{background:#000}figure.code{background:none;padding:0;border:0;margin-bottom:1.5em}figure.code pre{margin-bottom:0}figure.code figcaption{position:relative}figure.code .highlight{margin-bottom:0}.code-title,html .gist .gist-file .gist-meta a[href*='#file'],h3.filename,figure.code figcaption{text-align:center;font-size:13px;line-height:2em;text-shadow:#cbcccc 0 1px 0;color:#474747;font-weight:normal;margin-bottom:0;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0;font-family:"Helvetica Neue", Arial, "Lucida Grande", "Lucida Sans Unicode", Lucida, sans-serif;background:#aaa url('/images/code_bg.png?1419195603') top repeat-x;border:1px solid #565656;border-top-color:#cbcbcb;border-left-color:#a5a5a5;border-right-color:#a5a5a5;border-bottom:0}.download-source,html .gist .gist-file .gist-meta a[href*=raw],figure.code figcaption a{position:absolute;right:.8em;color:#666 !important;z-index:1;font-size:13px;text-shadow:#cbcccc 0 1px 0;padding-left:3em}@media only screen and (min-width: 1024px){.aside-module:first-child .title{margin-top:0}}.aside-module .title{border-bottom:1px solid #049cdb;color:#333;margin:1em 0 0.5em;padding-bottom:5px}.aside-module .title .btn{border-bottom-left-radius:0;border-bottom-right-radius:0;padding:5px 10px;text-decoration:none}.aside-module .loading{display:block;font-size:2em;text-align:center}#github-repos li p{font-size:0.6em;margin-bottom:0}#pinboard .pin-item>p{margin-bottom:0}#pinboard .pin-item>p a:hover{text-decoration:underline}#pinboard .pin-item>p a::after{content:","}#pinboard .pin-item>p a:last-child::after{content:""}@media only screen and (min-width: 481px){.social ul{-webkit-column-count:2;-moz-column-count:2;column-count:2;-webkit-column-gap:10px;-moz-column-gap:10px;column-gap:10px}}.social a{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-color:#e8e8e8;border:1px solid #dcdcdc;border-radius:4px;color:#222;display:inline-block;font-size:0.8em;margin-bottom:7px;padding:1em;padding-right:0.5em;position:relative;text-decoration:none;width:100%;z-index:5;-webkit-transition:box-shadow 200ms,color 400ms,transform 400ms;-moz-transition:box-shadow 200ms,color 400ms,transform 400ms;-o-transition:box-shadow 200ms,color 400ms,transform 400ms;transition:box-shadow 200ms,color 400ms,transform 400ms}.social a:hover{color:#fff !important;text-decoration:none;text-shadow:1px 1px 0 rgba(0,0,0,0.25);z-index:7}.social a:hover::before{border:1px solid #000;height:100%;top:0;width:100%}.social a::before{background-color:#222;border-radius:4px;content:"";height:1px;position:absolute;top:50%;left:0%;width:0;z-index:-1;-webkit-transition:border 200ms,height 200ms 200ms,top 200ms 200ms,width 200ms;-moz-transition:border 200ms,height 200ms 200ms,top 200ms 200ms,width 200ms;-o-transition:border 200ms,height 200ms 200ms,top 200ms 200ms,width 200ms;transition:border 200ms,height 200ms 200ms,top 200ms 200ms,width 200ms}.social a i{font-size:2em;line-height:0.8em;margin-right:0.35em}.social a.adn{color:#4a484c}.social a.adn::before{background-color:#4a484c;border-color:#3d3c3f}.social a.dribbble{color:#ea4c89}.social a.dribbble::before{background-color:#ea4c89;border-color:#e7357a}.social a.facebook{color:#3b5998}.social a.facebook::before{background-color:#3b5998;border-color:#344e86}.social a.github{color:#333}.social a.github::before{background-color:#333;border-color:#262626}.social a.gplus{color:#db4a39}.social a.gplus::before{background-color:#db4a39;border-color:#d43927}.social a.linkedin{color:#4875b4}.social a.linkedin::before{background-color:#4875b4;border-color:#4169a2}.social a.pinterest{color:#cc2127}.social a.pinterest::before{background-color:#cc2127;border-color:#b61d23}.social a.stackoverflow{color:#fe7a15}.social a.stackoverflow::before{background-color:#fe7a15;border-color:#f86c01}.social a.twitter{color:#00a0d1}.social a.twitter::before{background-color:#00a0d1;border-color:#008cb7}.social a.youtube{color:#cc181e}.social a.youtube::before{background-color:#cc181e;border-color:#b5151b}.usp{text-align:center}@media only screen and (min-width: 481px) and (max-width: 1023px){.usp{margin-bottom:25px}}.usp .icon i{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;border:10px solid #049cdb;color:#222;display:inline-block;font-size:6em;height:1.85em;line-height:normal;padding:0.3em;width:1.85em}.usp .title{color:#222;font-size:1.1em;line-height:3em;margin:0;text-align:center;text-transform:capitalize}.usp .title+hr{margin:0;margin-bottom:1em}.usp hr{margin-bottom:1em}.usp p{text-align:left}.hero{background-color:#0b6b94;background-position:0 50%;-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover;border-bottom:1px solid #fff;color:#fff;font-weight:bold;margin-top:-2em;margin-bottom:1.5em;padding:50px 0;position:relative}.hero>.grid-wrapper{position:relative;z-index:7}.hero .credit{font-size:0.75em;font-style:italic;position:absolute;bottom:0;right:10px;z-index:7}.hero .credit a{border-bottom:1px solid;color:#fff;text-decoration:none}.hero .credit .licence{border:none}.hero .avatar{text-align:center}@media only screen and (max-width: 1023px){.hero .avatar{margin-bottom:30px}}.hero .avatar img{-webkit-border-radius:100%;-moz-border-radius:100%;border-radius:100%;border:10px solid #049cdb}.hero h1{font-size:3.5em;line-height:1em;text-shadow:2px 2px 0 rgba(0,0,0,0.75)}.hero hr{box-shadow:1px 1px 0 rgba(0,0,0,0.75)}.hero p{text-shadow:1px 1px 0 rgba(0,0,0,0.75)}.hero p small{color:#eee;font-size:.65em}.pull-left{float:left}.pull-right{float:right}.clearfix,article blockquote{*zoom:1}.clearfix::before,article blockquote::before,.clearfix::after,article blockquote::after{display:table;content:"";line-height:0}.clearfix::after,article blockquote::after{clear:both}ul.unstyled,ul.inline,article ul.tags,ul.divided,ol.unstyled,ol.inline,article ol.tags,ol.divided{list-style-type:none;margin:0}ul.inline,article ul.tags,ol.inline,article ol.tags{list-style-type:none}ul.inline>li,article ul.tags>li,ol.inline>li,article ol.tags>li{display:inline}ul.divided>li,ol.divided>li{border-top:1px solid #fff;border-bottom:1px solid #e8e8e8;padding:0.5em 0}ul.divided>li:first-child,ol.divided>li:first-child{border-top:none;padding-top:0}ul.divided>li:last-child,ol.divided>li:last-child{border-bottom:none}.btn{background-color:#0494d1;background-image:-moz-linear-gradient(top, #049cdb, #048ac2);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#049cdb), to(#048ac2));background-image:-webkit-linear-gradient(top, #049cdb, #048ac2);background-image:-o-linear-gradient(top, #049cdb, #048ac2);background-image:linear-gradient(to bottom, #049cdb,#048ac2);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FF049CDB', endColorstr='#FF048AC2', GradientType=0);-webkit-box-shadow:0 0 3px rgba(0,0,0,0.25);-moz-box-shadow:0 0 3px rgba(0,0,0,0.25);-ms-box-shadow:0 0 3px rgba(0,0,0,0.25);-o-box-shadow:0 0 3px rgba(0,0,0,0.25);box-shadow:0 0 3px rgba(0,0,0,0.25);border-radius:3px;color:#fff;display:inline-block;padding:7px 15px;text-decoration:none;text-shadow:1px 1px 0 rgba(0,0,0,0.25)}.btn:hover{text-decoration:underline}.btn:visited{color:#fff}.grid{letter-spacing:-1rem}.opera:-o-prefocus,.grid{word-spacing:-1rem}.grid__item{letter-spacing:normal;word-spacing:normal}@media only screen and (min-width: 481px){.flex{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-direction:normal;-moz-box-direction:normal;-webkit-box-orient:horizontal;-moz-box-orient:horizontal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-pack:start;-moz-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;-webkit-align-content:stretch;-ms-flex-line-pack:stretch;align-content:stretch;-webkit-box-align:start;-moz-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.flex__item{-webkit-box-ordinal-group:1;-moz-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0;-webkit-box-flex:0;-moz-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}}.hero{background-color:#038FC7;padding-bottom:0}.hero .lead{margin-bottom:16px}.hero .hero-buttons a{color:white;text-transform:uppercase;white-space:nowrap;display:inline-block}.hero .front-install{background-color:#333;margin-bottom:16px;display:inline-block;padding:8px;color:#DDD}.hero .front-install .sh{color:#c82829}.supported-brands{text-align:center}.supported-brands img{border:none !important;box-shadow:none !important;max-height:50px;max-width:200px;margin:10px}.brand{border:none !important;box-shadow:none !important;max-height:50px;max-width:200px;margin:10px}.brand.overview{max-width:100px}h1:hover a.title-link,h2:hover a.title-link,h3:hover a.title-link,h4:hover a.title-link,h5:hover a.title-link,h6:hover a.title-link{position:relative}h1:hover a.title-link::before,h2:hover a.title-link::before,h3:hover a.title-link::before,h4:hover a.title-link::before,h5:hover a.title-link::before,h6:hover a.title-link::before{position:absolute;left:-50px;padding-right:40px;font-family:"FontAwesome";content:"\f0c1"}.ha-title{white-space:nowrap}.ha-title img{width:40px;vertical-align:middle}.usp ul{text-align:left;margin-left:27px;margin-top:-18px}.usp .icon i{border:none !important}.hero-buttons a{margin:0 30px 10px 0}.hero-buttons a:last-child{margin:0}article.post img,article.post table,article.page img,article.page table,article.listing img,article.listing table{border-radius:3px;box-shadow:rgba(0,0,0,0.06) 0 0 10px}article.post img.no-shadow,article.page img.no-shadow,article.listing img.no-shadow{border:0;box-shadow:none}article.post>table,article.page>table,article.listing>table{background-color:#F3FCF5}article.post p.img,article.page p.img,article.listing p.img{background-color:#FFF;border-radius:5px;text-align:center;padding-bottom:3px;font-size:.9rem;box-shadow:rgba(0,0,0,0.06) 0 0 10px}article.post p.img img,article.page p.img img,article.listing p.img img{display:block;box-shadow:none;margin:0 auto}article.post li,article.page li,article.listing li{margin-bottom:10px}article.post li>p,article.page li>p,article.listing li>p{margin-bottom:0}article.post li:last-child,article.page li:last-child,article.listing li:last-child{margin-bottom:0}p.note{position:relative;background:#e7f2fa;padding:40px 12px 6px 12px;box-shadow:rgba(0,0,0,0.06) 0 0 10px}p.note::before{font-family:"FontAwesome";content:"\f05a" " Note " attr(data-title);background-color:#6ab0de;color:white;font-weight:bold;border-top-left-radius:3px;border-top-right-radius:3px;padding:6px 14px;line-height:1.5em;position:absolute;top:0;left:0;right:0}p.note.warning{background-color:#F7F9E1}p.note.warning::before{background-color:#bbb90d;content:"\f071" " Warning " attr(data-title)}.install-instructions-container #normal-install,.install-instructions-container #raspberry-install,.install-instructions-container #docker-install,.install-instructions-container .install-instructions{display:none}.install-instructions-container label.menu-selector{display:inline-block;text-align:center;padding:20px;white-space:nowrap;border-bottom:5px solid #999;transition:border-bottom-color .5s}.install-instructions-container label.menu-selector+label.menu-selector{margin-left:10px}.install-instructions-container #normal-install:checked ~ .menu-selector.normal,.install-instructions-container #raspberry-install:checked ~ .menu-selector.raspberry,.install-instructions-container #docker-install:checked ~ .menu-selector.docker{border-bottom-color:#049cdb}.install-instructions-container #normal-install:checked ~ .install-instructions.normal,.install-instructions-container #raspberry-install:checked ~ .install-instructions.raspberry,.install-instructions-container #docker-install:checked ~ .install-instructions.docker{display:block}.install-instructions-container .install-instructions{margin-top:30px}.prep-instructions-container #generic-prep,.prep-instructions-container #fedora-prep,.prep-instructions-container #centos-prep,.prep-instructions-container .prep-instructions{display:none}.prep-instructions-container label.menu-selector{display:inline-block;text-align:center;padding:10px;white-space:nowrap;border-bottom:2px solid #999;transition:border-bottom-color .5s}.prep-instructions-container label.menu-selector+label.menu-selector{margin-left:10px}.prep-instructions-container #generic-prep:checked ~ .menu-selector.generic,.prep-instructions-container #fedora-prep:checked ~ .menu-selector.fedora,.prep-instructions-container #centos-prep:checked ~ .menu-selector.centos{border-bottom-color:#049cdb}.prep-instructions-container #generic-prep:checked ~ .prep-instructions.generic,.prep-instructions-container #fedora-prep:checked ~ .prep-instructions.fedora,.prep-instructions-container #centos-prep:checked ~ .prep-instructions.centos{display:block}.prep-instructions-container .prep-instructions{margin-top:20px}.post-instructions-container #generic-post,.post-instructions-container #fedora-post,.post-instructions-container #debian-post,.post-instructions-container .post-instructions{display:none}.post-instructions-container label.menu-selector{display:inline-block;text-align:center;padding:10px;white-space:nowrap;border-bottom:2px solid #999;transition:border-bottom-color .5s}.post-instructions-container label.menu-selector+label.menu-selector{margin-left:10px}.post-instructions-container #generic-post:checked ~ .menu-selector.generic-post,.post-instructions-container #fedora-post:checked ~ .menu-selector.fedora-post,.post-instructions-container #debian-post:checked ~ .menu-selector.debian-post{border-bottom-color:#049cdb}.post-instructions-container #generic-post:checked ~ .post-instructions.generic-post,.post-instructions-container #fedora-post:checked ~ .post-instructions.fedora-post,.post-instructions-container #debian-post:checked ~ .post-instructions.debian-post{display:block}.post-instructions-container .post-instructions{margin-top:20px} + */@font-face{font-family:'FontAwesome';src:url("../font/fontawesome-webfont.eot?v=3.2.1");src:url("../font/fontawesome-webfont.eot?#iefix&v=3.2.1") format("embedded-opentype"),url("../font/fontawesome-webfont.woff?v=3.2.1") format("woff"),url("../font/fontawesome-webfont.ttf?v=3.2.1") format("truetype"),url("../font/fontawesome-webfont.svg#fontawesomeregular?v=3.2.1") format("svg");font-weight:normal;font-style:normal}[class^="icon-"],[class*=" icon-"]{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em}[class^="icon-"]:before,[class*=" icon-"]:before{text-decoration:inherit;display:inline-block;speak:none}.icon-large:before{vertical-align:-10%;font-size:1.33333em}a [class^="icon-"],a [class*=" icon-"]{display:inline}[class^="icon-"].icon-fixed-width,[class*=" icon-"].icon-fixed-width{display:inline-block;width:1.14286em;text-align:right;padding-right:0.28571em}[class^="icon-"].icon-fixed-width.icon-large,[class*=" icon-"].icon-fixed-width.icon-large{width:1.42857em}.icons-ul{margin-left:2.14286em;list-style-type:none}.icons-ul>li{position:relative}.icons-ul .icon-li{position:absolute;left:-2.14286em;width:2.14286em;text-align:center;line-height:inherit}[class^="icon-"].hide,[class*=" icon-"].hide{display:none}.icon-muted{color:#eee}.icon-light{color:#fff}.icon-dark{color:#333}.icon-border{border:solid 1px #eee;padding:.2em .25em .15em;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.icon-2x{font-size:2em}.icon-2x.icon-border{border-width:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.icon-3x{font-size:3em}.icon-3x.icon-border{border-width:3px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.icon-4x{font-size:4em}.icon-4x.icon-border{border-width:4px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.icon-5x{font-size:5em}.icon-5x.icon-border{border-width:5px;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.pull-right{float:right}.pull-left{float:left}[class^="icon-"].pull-left,[class*=" icon-"].pull-left{margin-right:.3em}[class^="icon-"].pull-right,[class*=" icon-"].pull-right{margin-left:.3em}.icon-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:-35%}.icon-stack [class^="icon-"],.icon-stack [class*=" icon-"]{display:block;text-align:center;position:absolute;width:100%;height:100%;font-size:1em;line-height:inherit;*line-height:2em}.icon-stack .icon-stack-base{font-size:2em;*line-height:1em}.icon-spin{display:inline-block;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear}a .icon-stack,a .icon-spin{display:inline-block;text-decoration:none}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.icon-rotate-90:before{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1)}.icon-rotate-180:before{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2)}.icon-rotate-270:before{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg);filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)}.icon-flip-horizontal:before{-webkit-transform:scale(-1, 1);-moz-transform:scale(-1, 1);-ms-transform:scale(-1, 1);-o-transform:scale(-1, 1);transform:scale(-1, 1)}.icon-flip-vertical:before{-webkit-transform:scale(1, -1);-moz-transform:scale(1, -1);-ms-transform:scale(1, -1);-o-transform:scale(1, -1);transform:scale(1, -1)}a .icon-rotate-90:before,a .icon-rotate-180:before,a .icon-rotate-270:before,a .icon-flip-horizontal:before,a .icon-flip-vertical:before{display:inline-block}.icon-glass:before{content:"\f000"}.icon-music:before{content:"\f001"}.icon-search:before{content:"\f002"}.icon-envelope-alt:before{content:"\f003"}.icon-heart:before{content:"\f004"}.icon-star:before{content:"\f005"}.icon-star-empty:before{content:"\f006"}.icon-user:before{content:"\f007"}.icon-film:before{content:"\f008"}.icon-th-large:before{content:"\f009"}.icon-th:before{content:"\f00a"}.icon-th-list:before{content:"\f00b"}.icon-ok:before{content:"\f00c"}.icon-remove:before{content:"\f00d"}.icon-zoom-in:before{content:"\f00e"}.icon-zoom-out:before{content:"\f010"}.icon-power-off:before,.icon-off:before{content:"\f011"}.icon-signal:before{content:"\f012"}.icon-gear:before,.icon-cog:before{content:"\f013"}.icon-trash:before{content:"\f014"}.icon-home:before{content:"\f015"}.icon-file-alt:before{content:"\f016"}.icon-time:before{content:"\f017"}.icon-road:before{content:"\f018"}.icon-download-alt:before{content:"\f019"}.icon-download:before{content:"\f01a"}.icon-upload:before{content:"\f01b"}.icon-inbox:before{content:"\f01c"}.icon-play-circle:before{content:"\f01d"}.icon-rotate-right:before,.icon-repeat:before{content:"\f01e"}.icon-refresh:before{content:"\f021"}.icon-list-alt:before{content:"\f022"}.icon-lock:before{content:"\f023"}.icon-flag:before{content:"\f024"}.icon-headphones:before{content:"\f025"}.icon-volume-off:before{content:"\f026"}.icon-volume-down:before{content:"\f027"}.icon-volume-up:before{content:"\f028"}.icon-qrcode:before{content:"\f029"}.icon-barcode:before{content:"\f02a"}.icon-tag:before{content:"\f02b"}.icon-tags:before{content:"\f02c"}.icon-book:before{content:"\f02d"}.icon-bookmark:before{content:"\f02e"}.icon-print:before{content:"\f02f"}.icon-camera:before{content:"\f030"}.icon-font:before{content:"\f031"}.icon-bold:before{content:"\f032"}.icon-italic:before{content:"\f033"}.icon-text-height:before{content:"\f034"}.icon-text-width:before{content:"\f035"}.icon-align-left:before{content:"\f036"}.icon-align-center:before{content:"\f037"}.icon-align-right:before{content:"\f038"}.icon-align-justify:before{content:"\f039"}.icon-list:before{content:"\f03a"}.icon-indent-left:before{content:"\f03b"}.icon-indent-right:before{content:"\f03c"}.icon-facetime-video:before{content:"\f03d"}.icon-picture:before{content:"\f03e"}.icon-pencil:before{content:"\f040"}.icon-map-marker:before{content:"\f041"}.icon-adjust:before{content:"\f042"}.icon-tint:before{content:"\f043"}.icon-edit:before{content:"\f044"}.icon-share:before{content:"\f045"}.icon-check:before{content:"\f046"}.icon-move:before{content:"\f047"}.icon-step-backward:before{content:"\f048"}.icon-fast-backward:before{content:"\f049"}.icon-backward:before{content:"\f04a"}.icon-play:before{content:"\f04b"}.icon-pause:before{content:"\f04c"}.icon-stop:before{content:"\f04d"}.icon-forward:before{content:"\f04e"}.icon-fast-forward:before{content:"\f050"}.icon-step-forward:before{content:"\f051"}.icon-eject:before{content:"\f052"}.icon-chevron-left:before{content:"\f053"}.icon-chevron-right:before{content:"\f054"}.icon-plus-sign:before{content:"\f055"}.icon-minus-sign:before{content:"\f056"}.icon-remove-sign:before{content:"\f057"}.icon-ok-sign:before{content:"\f058"}.icon-question-sign:before{content:"\f059"}.icon-info-sign:before{content:"\f05a"}.icon-screenshot:before{content:"\f05b"}.icon-remove-circle:before{content:"\f05c"}.icon-ok-circle:before{content:"\f05d"}.icon-ban-circle:before{content:"\f05e"}.icon-arrow-left:before{content:"\f060"}.icon-arrow-right:before{content:"\f061"}.icon-arrow-up:before{content:"\f062"}.icon-arrow-down:before{content:"\f063"}.icon-mail-forward:before,.icon-share-alt:before{content:"\f064"}.icon-resize-full:before{content:"\f065"}.icon-resize-small:before{content:"\f066"}.icon-plus:before{content:"\f067"}.icon-minus:before{content:"\f068"}.icon-asterisk:before{content:"\f069"}.icon-exclamation-sign:before{content:"\f06a"}.icon-gift:before{content:"\f06b"}.icon-leaf:before{content:"\f06c"}.icon-fire:before{content:"\f06d"}.icon-eye-open:before{content:"\f06e"}.icon-eye-close:before{content:"\f070"}.icon-warning-sign:before{content:"\f071"}.icon-plane:before{content:"\f072"}.icon-calendar:before{content:"\f073"}.icon-random:before{content:"\f074"}.icon-comment:before{content:"\f075"}.icon-magnet:before{content:"\f076"}.icon-chevron-up:before{content:"\f077"}.icon-chevron-down:before{content:"\f078"}.icon-retweet:before{content:"\f079"}.icon-shopping-cart:before{content:"\f07a"}.icon-folder-close:before{content:"\f07b"}.icon-folder-open:before{content:"\f07c"}.icon-resize-vertical:before{content:"\f07d"}.icon-resize-horizontal:before{content:"\f07e"}.icon-bar-chart:before{content:"\f080"}.icon-twitter-sign:before{content:"\f081"}.icon-facebook-sign:before{content:"\f082"}.icon-camera-retro:before{content:"\f083"}.icon-key:before{content:"\f084"}.icon-gears:before,.icon-cogs:before{content:"\f085"}.icon-comments:before{content:"\f086"}.icon-thumbs-up-alt:before{content:"\f087"}.icon-thumbs-down-alt:before{content:"\f088"}.icon-star-half:before{content:"\f089"}.icon-heart-empty:before{content:"\f08a"}.icon-signout:before{content:"\f08b"}.icon-linkedin-sign:before{content:"\f08c"}.icon-pushpin:before{content:"\f08d"}.icon-external-link:before{content:"\f08e"}.icon-signin:before{content:"\f090"}.icon-trophy:before{content:"\f091"}.icon-github-sign:before{content:"\f092"}.icon-upload-alt:before{content:"\f093"}.icon-lemon:before{content:"\f094"}.icon-phone:before{content:"\f095"}.icon-unchecked:before,.icon-check-empty:before{content:"\f096"}.icon-bookmark-empty:before{content:"\f097"}.icon-phone-sign:before{content:"\f098"}.icon-twitter:before{content:"\f099"}.icon-facebook:before{content:"\f09a"}.icon-github:before{content:"\f09b"}.icon-unlock:before{content:"\f09c"}.icon-credit-card:before{content:"\f09d"}.icon-rss:before{content:"\f09e"}.icon-hdd:before{content:"\f0a0"}.icon-bullhorn:before{content:"\f0a1"}.icon-bell:before{content:"\f0a2"}.icon-certificate:before{content:"\f0a3"}.icon-hand-right:before{content:"\f0a4"}.icon-hand-left:before{content:"\f0a5"}.icon-hand-up:before{content:"\f0a6"}.icon-hand-down:before{content:"\f0a7"}.icon-circle-arrow-left:before{content:"\f0a8"}.icon-circle-arrow-right:before{content:"\f0a9"}.icon-circle-arrow-up:before{content:"\f0aa"}.icon-circle-arrow-down:before{content:"\f0ab"}.icon-globe:before{content:"\f0ac"}.icon-wrench:before{content:"\f0ad"}.icon-tasks:before{content:"\f0ae"}.icon-filter:before{content:"\f0b0"}.icon-briefcase:before{content:"\f0b1"}.icon-fullscreen:before{content:"\f0b2"}.icon-group:before{content:"\f0c0"}.icon-link:before{content:"\f0c1"}.icon-cloud:before{content:"\f0c2"}.icon-beaker:before{content:"\f0c3"}.icon-cut:before{content:"\f0c4"}.icon-copy:before{content:"\f0c5"}.icon-paperclip:before,.icon-paper-clip:before{content:"\f0c6"}.icon-save:before{content:"\f0c7"}.icon-sign-blank:before{content:"\f0c8"}.icon-reorder:before{content:"\f0c9"}.icon-list-ul:before{content:"\f0ca"}.icon-list-ol:before{content:"\f0cb"}.icon-strikethrough:before{content:"\f0cc"}.icon-underline:before{content:"\f0cd"}.icon-table:before{content:"\f0ce"}.icon-magic:before{content:"\f0d0"}.icon-truck:before{content:"\f0d1"}.icon-pinterest:before{content:"\f0d2"}.icon-pinterest-sign:before{content:"\f0d3"}.icon-google-plus-sign:before{content:"\f0d4"}.icon-google-plus:before{content:"\f0d5"}.icon-money:before{content:"\f0d6"}.icon-caret-down:before{content:"\f0d7"}.icon-caret-up:before{content:"\f0d8"}.icon-caret-left:before{content:"\f0d9"}.icon-caret-right:before{content:"\f0da"}.icon-columns:before{content:"\f0db"}.icon-sort:before{content:"\f0dc"}.icon-sort-down:before{content:"\f0dd"}.icon-sort-up:before{content:"\f0de"}.icon-envelope:before{content:"\f0e0"}.icon-linkedin:before{content:"\f0e1"}.icon-rotate-left:before,.icon-undo:before{content:"\f0e2"}.icon-legal:before{content:"\f0e3"}.icon-dashboard:before{content:"\f0e4"}.icon-comment-alt:before{content:"\f0e5"}.icon-comments-alt:before{content:"\f0e6"}.icon-bolt:before{content:"\f0e7"}.icon-sitemap:before{content:"\f0e8"}.icon-umbrella:before{content:"\f0e9"}.icon-paste:before{content:"\f0ea"}.icon-lightbulb:before{content:"\f0eb"}.icon-exchange:before{content:"\f0ec"}.icon-cloud-download:before{content:"\f0ed"}.icon-cloud-upload:before{content:"\f0ee"}.icon-user-md:before{content:"\f0f0"}.icon-stethoscope:before{content:"\f0f1"}.icon-suitcase:before{content:"\f0f2"}.icon-bell-alt:before{content:"\f0f3"}.icon-coffee:before{content:"\f0f4"}.icon-food:before{content:"\f0f5"}.icon-file-text-alt:before{content:"\f0f6"}.icon-building:before{content:"\f0f7"}.icon-hospital:before{content:"\f0f8"}.icon-ambulance:before{content:"\f0f9"}.icon-medkit:before{content:"\f0fa"}.icon-fighter-jet:before{content:"\f0fb"}.icon-beer:before{content:"\f0fc"}.icon-h-sign:before{content:"\f0fd"}.icon-plus-sign-alt:before{content:"\f0fe"}.icon-double-angle-left:before{content:"\f100"}.icon-double-angle-right:before{content:"\f101"}.icon-double-angle-up:before{content:"\f102"}.icon-double-angle-down:before{content:"\f103"}.icon-angle-left:before{content:"\f104"}.icon-angle-right:before{content:"\f105"}.icon-angle-up:before{content:"\f106"}.icon-angle-down:before{content:"\f107"}.icon-desktop:before{content:"\f108"}.icon-laptop:before{content:"\f109"}.icon-tablet:before{content:"\f10a"}.icon-mobile-phone:before{content:"\f10b"}.icon-circle-blank:before{content:"\f10c"}.icon-quote-left:before{content:"\f10d"}.icon-quote-right:before{content:"\f10e"}.icon-spinner:before{content:"\f110"}.icon-circle:before{content:"\f111"}.icon-mail-reply:before,.icon-reply:before{content:"\f112"}.icon-github-alt:before{content:"\f113"}.icon-folder-close-alt:before{content:"\f114"}.icon-folder-open-alt:before{content:"\f115"}.icon-expand-alt:before{content:"\f116"}.icon-collapse-alt:before{content:"\f117"}.icon-smile:before{content:"\f118"}.icon-frown:before{content:"\f119"}.icon-meh:before{content:"\f11a"}.icon-gamepad:before{content:"\f11b"}.icon-keyboard:before{content:"\f11c"}.icon-flag-alt:before{content:"\f11d"}.icon-flag-checkered:before{content:"\f11e"}.icon-terminal:before{content:"\f120"}.icon-code:before{content:"\f121"}.icon-reply-all:before{content:"\f122"}.icon-mail-reply-all:before{content:"\f122"}.icon-star-half-full:before,.icon-star-half-empty:before{content:"\f123"}.icon-location-arrow:before{content:"\f124"}.icon-crop:before{content:"\f125"}.icon-code-fork:before{content:"\f126"}.icon-unlink:before{content:"\f127"}.icon-question:before{content:"\f128"}.icon-info:before{content:"\f129"}.icon-exclamation:before{content:"\f12a"}.icon-superscript:before{content:"\f12b"}.icon-subscript:before{content:"\f12c"}.icon-eraser:before{content:"\f12d"}.icon-puzzle-piece:before{content:"\f12e"}.icon-microphone:before{content:"\f130"}.icon-microphone-off:before{content:"\f131"}.icon-shield:before{content:"\f132"}.icon-calendar-empty:before{content:"\f133"}.icon-fire-extinguisher:before{content:"\f134"}.icon-rocket:before{content:"\f135"}.icon-maxcdn:before{content:"\f136"}.icon-chevron-sign-left:before{content:"\f137"}.icon-chevron-sign-right:before{content:"\f138"}.icon-chevron-sign-up:before{content:"\f139"}.icon-chevron-sign-down:before{content:"\f13a"}.icon-html5:before{content:"\f13b"}.icon-css3:before{content:"\f13c"}.icon-anchor:before{content:"\f13d"}.icon-unlock-alt:before{content:"\f13e"}.icon-bullseye:before{content:"\f140"}.icon-ellipsis-horizontal:before{content:"\f141"}.icon-ellipsis-vertical:before{content:"\f142"}.icon-rss-sign:before{content:"\f143"}.icon-play-sign:before{content:"\f144"}.icon-ticket:before{content:"\f145"}.icon-minus-sign-alt:before{content:"\f146"}.icon-check-minus:before{content:"\f147"}.icon-level-up:before{content:"\f148"}.icon-level-down:before{content:"\f149"}.icon-check-sign:before{content:"\f14a"}.icon-edit-sign:before{content:"\f14b"}.icon-external-link-sign:before{content:"\f14c"}.icon-share-sign:before{content:"\f14d"}.icon-compass:before{content:"\f14e"}.icon-collapse:before{content:"\f150"}.icon-collapse-top:before{content:"\f151"}.icon-expand:before{content:"\f152"}.icon-euro:before,.icon-eur:before{content:"\f153"}.icon-gbp:before{content:"\f154"}.icon-dollar:before,.icon-usd:before{content:"\f155"}.icon-rupee:before,.icon-inr:before{content:"\f156"}.icon-yen:before,.icon-jpy:before{content:"\f157"}.icon-renminbi:before,.icon-cny:before{content:"\f158"}.icon-won:before,.icon-krw:before{content:"\f159"}.icon-bitcoin:before,.icon-btc:before{content:"\f15a"}.icon-file:before{content:"\f15b"}.icon-file-text:before{content:"\f15c"}.icon-sort-by-alphabet:before{content:"\f15d"}.icon-sort-by-alphabet-alt:before{content:"\f15e"}.icon-sort-by-attributes:before{content:"\f160"}.icon-sort-by-attributes-alt:before{content:"\f161"}.icon-sort-by-order:before{content:"\f162"}.icon-sort-by-order-alt:before{content:"\f163"}.icon-thumbs-up:before{content:"\f164"}.icon-thumbs-down:before{content:"\f165"}.icon-youtube-sign:before{content:"\f166"}.icon-youtube:before{content:"\f167"}.icon-xing:before{content:"\f168"}.icon-xing-sign:before{content:"\f169"}.icon-youtube-play:before{content:"\f16a"}.icon-dropbox:before{content:"\f16b"}.icon-stackexchange:before{content:"\f16c"}.icon-instagram:before{content:"\f16d"}.icon-flickr:before{content:"\f16e"}.icon-adn:before{content:"\f170"}.icon-bitbucket:before{content:"\f171"}.icon-bitbucket-sign:before{content:"\f172"}.icon-tumblr:before{content:"\f173"}.icon-tumblr-sign:before{content:"\f174"}.icon-long-arrow-down:before{content:"\f175"}.icon-long-arrow-up:before{content:"\f176"}.icon-long-arrow-left:before{content:"\f177"}.icon-long-arrow-right:before{content:"\f178"}.icon-apple:before{content:"\f179"}.icon-windows:before{content:"\f17a"}.icon-android:before{content:"\f17b"}.icon-linux:before{content:"\f17c"}.icon-dribbble:before{content:"\f17d"}.icon-skype:before{content:"\f17e"}.icon-foursquare:before{content:"\f180"}.icon-trello:before{content:"\f181"}.icon-female:before{content:"\f182"}.icon-male:before{content:"\f183"}.icon-gittip:before{content:"\f184"}.icon-sun:before{content:"\f185"}.icon-moon:before{content:"\f186"}.icon-archive:before{content:"\f187"}.icon-bug:before{content:"\f188"}.icon-vk:before{content:"\f189"}.icon-weibo:before{content:"\f18a"}.icon-renren:before{content:"\f18b"}body,html{background-color:#f5f5f5;color:#222;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;height:100%}a{color:#049cdb;text-decoration:none}a:visited{color:#0378a9}.menu a{color:#049cdb}.gist{font-size:0.75em}@media only screen and (max-width: 480px){.title.indent::before{display:none}}.title.indent::before{content:"// ";color:#049cdb}.divider,.usp hr,.hero hr{border:none;border-bottom:2px solid #049cdb;clear:both;margin:2em 0}article.post img,article.page img,article.listing img{border:5px solid #fff;border-radius:3px;box-shadow:0 0 3px rgba(0,0,0,0.25)}article.post img.right,article.page img.right,article.listing img.right{float:right;margin:0 0 10px 20px}article.post img.left,article.page img.left,article.listing img.left{float:left;margin:0 20px 10px 0}.grid-wrapper{margin:auto;max-width:1100px;padding:0 25px}.grid-center{text-align:center}.grid-center>.grid__item{text-align:left}body>header{-webkit-box-shadow:0 0 3px rgba(0,0,0,0.25);-moz-box-shadow:0 0 3px rgba(0,0,0,0.25);-ms-box-shadow:0 0 3px rgba(0,0,0,0.25);-o-box-shadow:0 0 3px rgba(0,0,0,0.25);box-shadow:0 0 3px rgba(0,0,0,0.25);background-color:#fff;margin-bottom:2em}body>header .site-title{color:#222;font-size:1.7em;font-weight:bold;line-height:2.5em}body{-webkit-animation:bugfix infinite 1s}@-webkit-keyframes bugfix{from{padding:0}to{padding:0}}.header{position:relative}#toggle,.toggle{display:none}.menu li{list-style:none;float:left}@media only screen and (max-width: 790px){.menu{display:none;opacity:0;width:100%;position:absolute;right:0}.menu li{display:block;width:100%;margin:0}.menu li a{display:block;width:100%;text-decoration:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.toggle{display:block;position:relative;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}#toggle:checked ~ .menu{display:block;opacity:1;z-index:999}}ul.menu li{position:relative}ul.menu li:hover ul{display:block}ul.menu li ul{display:none;z-index:10;position:absolute;top:68px;margin-left:0;background-color:white}ul.menu li ul li{white-space:nowrap;float:none}ul.menu li ul li a{display:block;padding:20px 10px}ul.menu li ul li a:hover,ul.menu li ul li a:focus{background:#eee}header .grid{height:68px}.menu{margin:0;top:68px}.menu li a{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:all 0.25s linear;-moz-transition:all 0.25s linear;-o-transition:all 0.25s linear;transition:all 0.25s linear;display:block;padding:32px 20px;text-decoration:none;font-weight:normal;font-size:16px;line-height:1}.menu>li>a:hover,.menu>li>a:focus{background:#f5f5f5;box-shadow:inset 0px 5px #049cdb;color:#049cdb;padding:40px 20px 24px}.toggle{z-index:20}@media only screen and (max-width: 790px){.menu{background:#fff;border-top:1px solid #049cdb;border-bottom:4px solid #049cdb}.menu,.menu li,.menu li a{height:auto}.menu li a{padding:15px 15px !important}.menu li a:hover,.menu li a:focus{background:#eee;box-shadow:inset 5px 0px #049cdb;padding:15px 15px 15px 25px}.toggle{position:absolute;top:17px;right:10px}.toggle::after{-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:all 0.5s linear;-moz-transition:all 0.5s linear;-o-transition:all 0.5s linear;transition:all 0.5s linear;font-family:"FontAwesome";content:"\f0c9";display:inline-block;width:100%;padding:10px 15px;background:#049cdb;text-align:center;font-size:12px;color:#fff;white-space:nowrap}.toggle:hover::after{background:#0383b8}#toggle:checked+.toggle::after{content:attr(data-close)}ul.menu li ul{display:block;position:relative;top:0}}#page-wrap{min-height:100%;margin-bottom:-100px}#page-wrap::after{content:"";display:block;height:100px}body>footer{-webkit-box-shadow:0 0 3px rgba(0,0,0,0.25);-moz-box-shadow:0 0 3px rgba(0,0,0,0.25);-ms-box-shadow:0 0 3px rgba(0,0,0,0.25);-o-box-shadow:0 0 3px rgba(0,0,0,0.25);box-shadow:0 0 3px rgba(0,0,0,0.25);background-color:#fff;margin-top:3em}.copyright{margin:0;padding:20px 0;text-align:center}article blockquote{border-left:2px solid #049cdb;color:#484848;font-family:Georgia,"Times New Roman",Times,serif;font-size:1.25em;font-style:italic;padding-left:15px}article blockquote footer{float:right;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:0.8em}article blockquote footer strong::after{content:" \2014 "}article blockquote footer a{text-decoration:underline}article .pullquote-left::before,article .pullquote-right::before{border:medium none;color:#049cdb;content:"\201C" attr(data-pullquote) "\201D";float:right;font-family:Georgia,"Times New Roman",Times,serif;font-size:1.4em;font-style:italic;line-height:1.45em;margin:0.3em 0 1em 1.5em;padding:0;position:relative;top:7px;width:45%}@media only screen and (max-width: 480px){article .pullquote-left::before,article .pullquote-right::before{border-top:1px dotted #049cdb;border-bottom:1px dotted #049cdb;padding:0 10px;width:100%}}article .tags{display:inline}article .tags li{margin-right:2px}article .tags li::after{content:","}article .tags li:last-child::after{content:""}article .tags li a{color:#555;text-decoration:none}article .tags li a:hover{text-decoration:underline}article .meta{font-size:12px;padding:0 0 5px}article .meta>*{margin-right:15px;white-space:nowrap}article .meta>*:last-child{margin-right:0}article .meta .comments::before{content:"\f075";font-family:"FontAwesome";padding-right:3px}article.listing{margin-bottom:20px}article.listing h1{margin-bottom:0}article.listing h1 a{color:#049cdb;text-decoration:none}article.listing .entry-content{margin:10px 0}article.listing+hr{border:none;border-bottom:1px solid #049cdb}@media only screen and (max-width: 480px){article.post .tags{clear:both;margin-top:7px}}article.post h1{margin-bottom:0}article.post .meta{border-bottom:1px solid #049cdb;margin-bottom:20px}#archive-list article h1{margin-bottom:0}.sans,html .gist .gist-file .gist-meta{font-family:"Helvetica Neue",Arial,sans-serif}.mono,pre,p code,li code{font-family:Menlo,Monaco,"Andale Mono","lucida console","Courier New",monospace}.highlight table{margin-bottom:0}.highlight .gutter,.highlight .code{padding:0}.highlight .gutter .line-number{display:block}.highlight,html .gist .gist-file .gist-syntax .gist-highlight{border:1px solid #05232b !important}.highlight table td.code,html .gist .gist-file .gist-syntax .gist-highlight table td.code{width:100%}.highlight .line-numbers,html .gist .gist-file .gist-syntax .highlight .line_numbers{text-align:right;font-size:13px;line-height:1.45em;background:#073642 url('/images/noise.png?1436924820') top left !important;border-right:1px solid #00232c !important;-webkit-box-shadow:#083e4b -1px 0 inset;-moz-box-shadow:#083e4b -1px 0 inset;-ms-box-shadow:#083e4b -1px 0 inset;-o-box-shadow:#083e4b -1px 0 inset;box-shadow:#083e4b -1px 0 inset;text-shadow:#021014 0 -1px;padding:.8em !important;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.highlight .line-numbers span,html .gist .gist-file .gist-syntax .highlight .line_numbers span{color:#586e75 !important}figure.code,.gist-file,pre{-webkit-box-shadow:rgba(0,0,0,0.06) 0 0 10px;-moz-box-shadow:rgba(0,0,0,0.06) 0 0 10px;-ms-box-shadow:rgba(0,0,0,0.06) 0 0 10px;-o-box-shadow:rgba(0,0,0,0.06) 0 0 10px;box-shadow:rgba(0,0,0,0.06) 0 0 10px}figure.code .highlight pre,.gist-file .highlight pre,pre .highlight pre{-webkit-box-shadow:none;-moz-box-shadow:none;-ms-box-shadow:none;-o-box-shadow:none;box-shadow:none}.gist .highlight *::-moz-selection,figure.code .highlight *::-moz-selection{background:#386774;color:inherit;text-shadow:#002b36 0 1px}.gist .highlight *::-webkit-selection,figure.code .highlight *::-webkit-selection{background:#386774;color:inherit;text-shadow:#002b36 0 1px}.gist .highlight *::selection,figure.code .highlight *::selection{background:#386774;color:inherit;text-shadow:#002b36 0 1px}html .gist .gist-file{margin-bottom:1.8em;position:relative;border:none;padding-top:26px !important}html .gist .gist-file .highlight{margin-bottom:0}html .gist .gist-file .gist-syntax{border-bottom:0 !important;background:none !important}html .gist .gist-file .gist-syntax .gist-highlight{background:#002b36 !important}html .gist .gist-file .gist-syntax .highlight pre{padding:0}html .gist .gist-file .gist-meta{padding:.6em 0.8em;border:1px solid #083e4b !important;color:#586e75;font-size:.7em !important;background:#073642 url('/images/noise.png?1436924820') top left;line-height:1.5em}html .gist .gist-file .gist-meta a{color:#75878b !important}html .gist .gist-file .gist-meta a:hover{color:#93a1a1 !important}html .gist .gist-file .gist-meta a[href*='#file']{position:absolute;top:0;left:0;right:-10px;color:#474747 !important}html .gist .gist-file .gist-meta a[href*='#file']:hover{color:#049cdb !important}html .gist .gist-file .gist-meta a[href*=raw]{top:.4em}pre{background:#002b36 url('/images/noise.png?1436924820') top left;-webkit-border-radius:0.4em;-moz-border-radius:0.4em;border-radius:0.4em;border:1px solid #05232b;line-height:1.45em;font-size:13px;margin-bottom:2.1em;padding:.8em 1em;color:#93a1a1;overflow:auto}h3.filename+pre{-webkit-border-radius:0px;-moz-border-radius:0px;border-radius:0px}p code,li code{display:inline-block;white-space:no-wrap;background:#fff;font-size:.8em;line-height:1.5em;color:#555;border:1px solid #ddd;-webkit-border-radius:0.4em;-moz-border-radius:0.4em;border-radius:0.4em;padding:0 .3em;margin:-1px 0}p pre code,li pre code{font-size:1em !important;background:none;border:none}.pre-code,html .gist .gist-file .gist-syntax .highlight pre,.highlight code{font-family:Menlo,Monaco,"Andale Mono","lucida console","Courier New",monospace !important;overflow:scroll;overflow-y:hidden;display:block;padding:.8em;overflow-x:auto;line-height:1.45em;background:#002b36 url('/images/noise.png?1436924820') top left !important;color:#93a1a1 !important}.pre-code span,html .gist .gist-file .gist-syntax .highlight pre span,.highlight code span{color:#93a1a1 !important}.pre-code span,html .gist .gist-file .gist-syntax .highlight pre span,.highlight code span{font-style:normal !important;font-weight:normal !important}.pre-code .c,html .gist .gist-file .gist-syntax .highlight pre .c,.highlight code .c{color:#586e75 !important;font-style:italic !important}.pre-code .cm,html .gist .gist-file .gist-syntax .highlight pre .cm,.highlight code .cm{color:#586e75 !important;font-style:italic !important}.pre-code .cp,html .gist .gist-file .gist-syntax .highlight pre .cp,.highlight code .cp{color:#586e75 !important;font-style:italic !important}.pre-code .c1,html .gist .gist-file .gist-syntax .highlight pre .c1,.highlight code .c1{color:#586e75 !important;font-style:italic !important}.pre-code .cs,html .gist .gist-file .gist-syntax .highlight pre .cs,.highlight code .cs{color:#586e75 !important;font-weight:bold !important;font-style:italic !important}.pre-code .err,html .gist .gist-file .gist-syntax .highlight pre .err,.highlight code .err{color:#dc322f !important;background:none !important}.pre-code .k,html .gist .gist-file .gist-syntax .highlight pre .k,.highlight code .k{color:#cb4b16 !important}.pre-code .o,html .gist .gist-file .gist-syntax .highlight pre .o,.highlight code .o{color:#93a1a1 !important;font-weight:bold !important}.pre-code .p,html .gist .gist-file .gist-syntax .highlight pre .p,.highlight code .p{color:#93a1a1 !important}.pre-code .ow,html .gist .gist-file .gist-syntax .highlight pre .ow,.highlight code .ow{color:#2aa198 !important;font-weight:bold !important}.pre-code .gd,html .gist .gist-file .gist-syntax .highlight pre .gd,.highlight code .gd{color:#93a1a1 !important;background-color:#372c34 !important;display:inline-block}.pre-code .gd .x,html .gist .gist-file .gist-syntax .highlight pre .gd .x,.highlight code .gd .x{color:#93a1a1 !important;background-color:#4d2d33 !important;display:inline-block}.pre-code .ge,html .gist .gist-file .gist-syntax .highlight pre .ge,.highlight code .ge{color:#93a1a1 !important;font-style:italic !important}.pre-code .gh,html .gist .gist-file .gist-syntax .highlight pre .gh,.highlight code .gh{color:#586e75 !important}.pre-code .gi,html .gist .gist-file .gist-syntax .highlight pre .gi,.highlight code .gi{color:#93a1a1 !important;background-color:#1a412b !important;display:inline-block}.pre-code .gi .x,html .gist .gist-file .gist-syntax .highlight pre .gi .x,.highlight code .gi .x{color:#93a1a1 !important;background-color:#355720 !important;display:inline-block}.pre-code .gs,html .gist .gist-file .gist-syntax .highlight pre .gs,.highlight code .gs{color:#93a1a1 !important;font-weight:bold !important}.pre-code .gu,html .gist .gist-file .gist-syntax .highlight pre .gu,.highlight code .gu{color:#6c71c4 !important}.pre-code .kc,html .gist .gist-file .gist-syntax .highlight pre .kc,.highlight code .kc{color:#859900 !important;font-weight:bold !important}.pre-code .kd,html .gist .gist-file .gist-syntax .highlight pre .kd,.highlight code .kd{color:#268bd2 !important}.pre-code .kp,html .gist .gist-file .gist-syntax .highlight pre .kp,.highlight code .kp{color:#cb4b16 !important;font-weight:bold !important}.pre-code .kr,html .gist .gist-file .gist-syntax .highlight pre .kr,.highlight code .kr{color:#d33682 !important;font-weight:bold !important}.pre-code .kt,html .gist .gist-file .gist-syntax .highlight pre .kt,.highlight code .kt{color:#2aa198 !important}.pre-code .n,html .gist .gist-file .gist-syntax .highlight pre .n,.highlight code .n{color:#268bd2 !important}.pre-code .na,html .gist .gist-file .gist-syntax .highlight pre .na,.highlight code .na{color:#268bd2 !important}.pre-code .nb,html .gist .gist-file .gist-syntax .highlight pre .nb,.highlight code .nb{color:#859900 !important}.pre-code .nc,html .gist .gist-file .gist-syntax .highlight pre .nc,.highlight code .nc{color:#d33682 !important}.pre-code .no,html .gist .gist-file .gist-syntax .highlight pre .no,.highlight code .no{color:#b58900 !important}.pre-code .nl,html .gist .gist-file .gist-syntax .highlight pre .nl,.highlight code .nl{color:#859900 !important}.pre-code .ne,html .gist .gist-file .gist-syntax .highlight pre .ne,.highlight code .ne{color:#268bd2 !important;font-weight:bold !important}.pre-code .nf,html .gist .gist-file .gist-syntax .highlight pre .nf,.highlight code .nf{color:#268bd2 !important;font-weight:bold !important}.pre-code .nn,html .gist .gist-file .gist-syntax .highlight pre .nn,.highlight code .nn{color:#b58900 !important}.pre-code .nt,html .gist .gist-file .gist-syntax .highlight pre .nt,.highlight code .nt{color:#268bd2 !important;font-weight:bold !important}.pre-code .nx,html .gist .gist-file .gist-syntax .highlight pre .nx,.highlight code .nx{color:#b58900 !important}.pre-code .vg,html .gist .gist-file .gist-syntax .highlight pre .vg,.highlight code .vg{color:#268bd2 !important}.pre-code .vi,html .gist .gist-file .gist-syntax .highlight pre .vi,.highlight code .vi{color:#268bd2 !important}.pre-code .nv,html .gist .gist-file .gist-syntax .highlight pre .nv,.highlight code .nv{color:#268bd2 !important}.pre-code .mf,html .gist .gist-file .gist-syntax .highlight pre .mf,.highlight code .mf{color:#2aa198 !important}.pre-code .m,html .gist .gist-file .gist-syntax .highlight pre .m,.highlight code .m{color:#2aa198 !important}.pre-code .mh,html .gist .gist-file .gist-syntax .highlight pre .mh,.highlight code .mh{color:#2aa198 !important}.pre-code .mi,html .gist .gist-file .gist-syntax .highlight pre .mi,.highlight code .mi{color:#2aa198 !important}.pre-code .s,html .gist .gist-file .gist-syntax .highlight pre .s,.highlight code .s{color:#2aa198 !important}.pre-code .sd,html .gist .gist-file .gist-syntax .highlight pre .sd,.highlight code .sd{color:#2aa198 !important}.pre-code .s2,html .gist .gist-file .gist-syntax .highlight pre .s2,.highlight code .s2{color:#2aa198 !important}.pre-code .se,html .gist .gist-file .gist-syntax .highlight pre .se,.highlight code .se{color:#dc322f !important}.pre-code .si,html .gist .gist-file .gist-syntax .highlight pre .si,.highlight code .si{color:#268bd2 !important}.pre-code .sr,html .gist .gist-file .gist-syntax .highlight pre .sr,.highlight code .sr{color:#2aa198 !important}.pre-code .s1,html .gist .gist-file .gist-syntax .highlight pre .s1,.highlight code .s1{color:#2aa198 !important}.pre-code div .gd,html .gist .gist-file .gist-syntax .highlight pre div .gd,.highlight code div .gd,.pre-code div .gd .x,html .gist .gist-file .gist-syntax .highlight pre div .gd .x,.highlight code div .gd .x,.pre-code div .gi,html .gist .gist-file .gist-syntax .highlight pre div .gi,.highlight code div .gi,.pre-code div .gi .x,html .gist .gist-file .gist-syntax .highlight pre div .gi .x,.highlight code div .gi .x{display:inline-block;width:100%}.highlight,.gist-highlight{margin-bottom:1.8em;background:#002b36;overflow-y:hidden;overflow-x:auto}.highlight pre,.gist-highlight pre{background:none;-webkit-border-radius:0px;-moz-border-radius:0px;border-radius:0px;border:none;padding:0;margin-bottom:0}pre::-webkit-scrollbar,.highlight::-webkit-scrollbar,.gist-highlight::-webkit-scrollbar{height:.5em;background:rgba(255,255,255,0.15)}pre::-webkit-scrollbar-thumb:horizontal,.highlight::-webkit-scrollbar-thumb:horizontal,.gist-highlight::-webkit-scrollbar-thumb:horizontal{background:rgba(255,255,255,0.2);-webkit-border-radius:4px;border-radius:4px}.highlight code{background:#000}figure.code{background:none;padding:0;border:0;margin-bottom:1.5em}figure.code pre{margin-bottom:0}figure.code figcaption{position:relative}figure.code .highlight{margin-bottom:0}.code-title,html .gist .gist-file .gist-meta a[href*='#file'],h3.filename,figure.code figcaption{text-align:center;font-size:13px;line-height:2em;text-shadow:#cbcccc 0 1px 0;color:#474747;font-weight:normal;margin-bottom:0;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0;font-family:"Helvetica Neue", Arial, "Lucida Grande", "Lucida Sans Unicode", Lucida, sans-serif;background:#aaa url('/images/code_bg.png?1436924820') top repeat-x;border:1px solid #565656;border-top-color:#cbcbcb;border-left-color:#a5a5a5;border-right-color:#a5a5a5;border-bottom:0}.download-source,html .gist .gist-file .gist-meta a[href*=raw],figure.code figcaption a{position:absolute;right:.8em;color:#666 !important;z-index:1;font-size:13px;text-shadow:#cbcccc 0 1px 0;padding-left:3em}@media only screen and (min-width: 1024px){.aside-module:first-child .title{margin-top:0}}.aside-module .title{border-bottom:1px solid #049cdb;color:#333;margin:1em 0 0.5em;padding-bottom:5px}.aside-module .title .btn{border-bottom-left-radius:0;border-bottom-right-radius:0;padding:5px 10px;text-decoration:none}.aside-module .loading{display:block;font-size:2em;text-align:center}#github-repos li p{font-size:0.6em;margin-bottom:0}#pinboard .pin-item>p{margin-bottom:0}#pinboard .pin-item>p a:hover{text-decoration:underline}#pinboard .pin-item>p a::after{content:","}#pinboard .pin-item>p a:last-child::after{content:""}@media only screen and (min-width: 481px){.social ul{-webkit-column-count:2;-moz-column-count:2;column-count:2;-webkit-column-gap:10px;-moz-column-gap:10px;column-gap:10px}}.social a{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-color:#e8e8e8;border:1px solid #dcdcdc;border-radius:4px;color:#222;display:inline-block;font-size:0.8em;margin-bottom:7px;padding:1em;padding-right:0.5em;position:relative;text-decoration:none;width:100%;z-index:5;-webkit-transition:box-shadow 200ms,color 400ms,transform 400ms;-moz-transition:box-shadow 200ms,color 400ms,transform 400ms;-o-transition:box-shadow 200ms,color 400ms,transform 400ms;transition:box-shadow 200ms,color 400ms,transform 400ms}.social a:hover{color:#fff !important;text-decoration:none;text-shadow:1px 1px 0 rgba(0,0,0,0.25);z-index:7}.social a:hover::before{border:1px solid #000;height:100%;top:0;width:100%}.social a::before{background-color:#222;border-radius:4px;content:"";height:1px;position:absolute;top:50%;left:0%;width:0;z-index:-1;-webkit-transition:border 200ms,height 200ms 200ms,top 200ms 200ms,width 200ms;-moz-transition:border 200ms,height 200ms 200ms,top 200ms 200ms,width 200ms;-o-transition:border 200ms,height 200ms 200ms,top 200ms 200ms,width 200ms;transition:border 200ms,height 200ms 200ms,top 200ms 200ms,width 200ms}.social a i{font-size:2em;line-height:0.8em;margin-right:0.35em}.social a.adn{color:#4a484c}.social a.adn::before{background-color:#4a484c;border-color:#3d3c3f}.social a.dribbble{color:#ea4c89}.social a.dribbble::before{background-color:#ea4c89;border-color:#e7357a}.social a.facebook{color:#3b5998}.social a.facebook::before{background-color:#3b5998;border-color:#344e86}.social a.github{color:#333}.social a.github::before{background-color:#333;border-color:#262626}.social a.gplus{color:#db4a39}.social a.gplus::before{background-color:#db4a39;border-color:#d43927}.social a.linkedin{color:#4875b4}.social a.linkedin::before{background-color:#4875b4;border-color:#4169a2}.social a.pinterest{color:#cc2127}.social a.pinterest::before{background-color:#cc2127;border-color:#b61d23}.social a.stackoverflow{color:#fe7a15}.social a.stackoverflow::before{background-color:#fe7a15;border-color:#f86c01}.social a.twitter{color:#00a0d1}.social a.twitter::before{background-color:#00a0d1;border-color:#008cb7}.social a.youtube{color:#cc181e}.social a.youtube::before{background-color:#cc181e;border-color:#b5151b}.usp{text-align:center}@media only screen and (min-width: 481px) and (max-width: 1023px){.usp{margin-bottom:25px}}.usp .icon i{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;border:10px solid #049cdb;color:#222;display:inline-block;font-size:6em;height:1.85em;line-height:normal;padding:0.3em;width:1.85em}.usp .title{color:#222;font-size:1.1em;line-height:3em;margin:0;text-align:center;text-transform:capitalize}.usp .title+hr{margin:0;margin-bottom:1em}.usp hr{margin-bottom:1em}.usp p{text-align:left}.hero{background-color:#0b6b94;background-position:0 50%;-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover;border-bottom:1px solid #fff;color:#fff;font-weight:bold;margin-top:-2em;margin-bottom:1.5em;padding:50px 0;position:relative}.hero>.grid-wrapper{position:relative;z-index:7}.hero .credit{font-size:0.75em;font-style:italic;position:absolute;bottom:0;right:10px;z-index:7}.hero .credit a{border-bottom:1px solid;color:#fff;text-decoration:none}.hero .credit .licence{border:none}.hero .avatar{text-align:center}@media only screen and (max-width: 1023px){.hero .avatar{margin-bottom:30px}}.hero .avatar img{-webkit-border-radius:100%;-moz-border-radius:100%;border-radius:100%;border:10px solid #049cdb}.hero h1{font-size:3.5em;line-height:1em;text-shadow:2px 2px 0 rgba(0,0,0,0.75)}.hero hr{box-shadow:1px 1px 0 rgba(0,0,0,0.75)}.hero p{text-shadow:1px 1px 0 rgba(0,0,0,0.75)}.hero p small{color:#eee;font-size:.65em}.pull-left{float:left}.pull-right{float:right}.clearfix,article blockquote{*zoom:1}.clearfix::before,article blockquote::before,.clearfix::after,article blockquote::after{display:table;content:"";line-height:0}.clearfix::after,article blockquote::after{clear:both}ul.unstyled,ul.inline,article ul.tags,ul.divided,ol.unstyled,ol.inline,article ol.tags,ol.divided{list-style-type:none;margin:0}ul.inline,article ul.tags,ol.inline,article ol.tags{list-style-type:none}ul.inline>li,article ul.tags>li,ol.inline>li,article ol.tags>li{display:inline}ul.divided>li,ol.divided>li{border-top:1px solid #fff;border-bottom:1px solid #e8e8e8;padding:0.5em 0}ul.divided>li:first-child,ol.divided>li:first-child{border-top:none;padding-top:0}ul.divided>li:last-child,ol.divided>li:last-child{border-bottom:none}.btn{background-color:#0494d1;background-image:-moz-linear-gradient(top, #049cdb, #048ac2);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#049cdb), to(#048ac2));background-image:-webkit-linear-gradient(top, #049cdb, #048ac2);background-image:-o-linear-gradient(top, #049cdb, #048ac2);background-image:linear-gradient(to bottom, #049cdb,#048ac2);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FF049CDB', endColorstr='#FF048AC2', GradientType=0);-webkit-box-shadow:0 0 3px rgba(0,0,0,0.25);-moz-box-shadow:0 0 3px rgba(0,0,0,0.25);-ms-box-shadow:0 0 3px rgba(0,0,0,0.25);-o-box-shadow:0 0 3px rgba(0,0,0,0.25);box-shadow:0 0 3px rgba(0,0,0,0.25);border-radius:3px;color:#fff;display:inline-block;padding:7px 15px;text-decoration:none;text-shadow:1px 1px 0 rgba(0,0,0,0.25)}.btn:hover{text-decoration:underline}.btn:visited{color:#fff}.grid{letter-spacing:-1rem}.opera:-o-prefocus,.grid{word-spacing:-1rem}.grid__item{letter-spacing:normal;word-spacing:normal}@media only screen and (min-width: 481px){.flex{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-direction:normal;-moz-box-direction:normal;-webkit-box-orient:horizontal;-moz-box-orient:horizontal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-pack:start;-moz-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;-webkit-align-content:stretch;-ms-flex-line-pack:stretch;align-content:stretch;-webkit-box-align:start;-moz-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start}.flex__item{-webkit-box-ordinal-group:1;-moz-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0;-webkit-box-flex:0;-moz-box-flex:0;-webkit-flex:0 1 auto;-ms-flex:0 1 auto;flex:0 1 auto;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}}.hero{background-color:#038FC7;padding-bottom:0}.hero .lead{margin-bottom:16px}.hero .hero-buttons a{color:white;text-transform:uppercase;white-space:nowrap;display:inline-block}.hero .front-install{background-color:#333;margin-bottom:16px;display:inline-block;padding:8px;color:#DDD}.hero .front-install .sh{color:#c82829}.supported-brands{text-align:center}.supported-brands img{border:none !important;box-shadow:none !important;max-height:50px;max-width:140px;margin:10px;vertical-align:middle}.brand{border:none !important;box-shadow:none !important;max-height:50px;max-width:200px;margin:10px}.brand.overview{max-width:100px}h1:hover a.title-link,h2:hover a.title-link,h3:hover a.title-link,h4:hover a.title-link,h5:hover a.title-link,h6:hover a.title-link{position:relative}h1:hover a.title-link::before,h2:hover a.title-link::before,h3:hover a.title-link::before,h4:hover a.title-link::before,h5:hover a.title-link::before,h6:hover a.title-link::before{position:absolute;left:-50px;padding-right:40px;font-family:"FontAwesome";content:"\f0c1"}.ha-title{white-space:nowrap}.ha-title img{width:40px;vertical-align:middle}.usp ul{text-align:left;margin-left:27px;margin-top:-18px}.usp .icon i{border:none !important}.hero-buttons a{margin:0 30px 10px 0}.hero-buttons a:last-child{margin:0}article.post img,article.post table,article.page img,article.page table,article.listing img,article.listing table{border-radius:3px;box-shadow:rgba(0,0,0,0.06) 0 0 10px}article.post img.no-shadow,article.page img.no-shadow,article.listing img.no-shadow{border:0;box-shadow:none}article.post>table,article.page>table,article.listing>table{background-color:#F3FCF5}article.post p.img,article.page p.img,article.listing p.img{background-color:#FFF;border-radius:5px;text-align:center;padding-bottom:3px;font-size:.9rem;box-shadow:rgba(0,0,0,0.06) 0 0 10px}article.post p.img img,article.page p.img img,article.listing p.img img{display:block;box-shadow:none;margin:0 auto}article.post li,article.page li,article.listing li{margin-bottom:10px}article.post li>p,article.page li>p,article.listing li>p{margin-bottom:0}article.post li:last-child,article.page li:last-child,article.listing li:last-child{margin-bottom:0}p.note{position:relative;background:#e7f2fa;padding:40px 12px 6px 12px;box-shadow:rgba(0,0,0,0.06) 0 0 10px}p.note::before{font-family:"FontAwesome";content:"\f05a" " Note " attr(data-title);background-color:#6ab0de;color:white;font-weight:bold;border-top-left-radius:3px;border-top-right-radius:3px;padding:6px 14px;line-height:1.5em;position:absolute;top:0;left:0;right:0}p.note.warning{background-color:#F7F9E1}p.note.warning::before{background-color:#bbb90d;content:"\f071" " Warning " attr(data-title)}.install-instructions-container #normal-install,.install-instructions-container #raspberry-install,.install-instructions-container #docker-install,.install-instructions-container .install-instructions{display:none}.install-instructions-container label.menu-selector{display:inline-block;text-align:center;padding:20px;white-space:nowrap;border-bottom:5px solid #999;transition:border-bottom-color .5s}.install-instructions-container label.menu-selector+label.menu-selector{margin-left:10px}.install-instructions-container #normal-install:checked ~ .menu-selector.normal,.install-instructions-container #raspberry-install:checked ~ .menu-selector.raspberry,.install-instructions-container #docker-install:checked ~ .menu-selector.docker{border-bottom-color:#049cdb}.install-instructions-container #normal-install:checked ~ .install-instructions.normal,.install-instructions-container #raspberry-install:checked ~ .install-instructions.raspberry,.install-instructions-container #docker-install:checked ~ .install-instructions.docker{display:block}.install-instructions-container .install-instructions{margin-top:30px}.advanced-installs-container #upstart-install,.advanced-installs-container #systemd-install,.advanced-installs-container .advanced-installs{display:none}.advanced-installs-container label.menu-selector{display:inline-block;text-align:center;padding:20px;white-space:nowrap;border-bottom:5px solid #999;transition:border-bottom-color .5s}.advanced-installs-container label.menu-selector+label.menu-selector{margin-left:10px}.advanced-installs-container #upstart-install:checked ~ .menu-selector.upstart,.advanced-installs-container #systemd-install:checked ~ .menu-selector.systemd{border-bottom-color:#049cdb}.advanced-installs-container #upstart-install:checked ~ .advanced-installs.upstart,.advanced-installs-container #systemd-install:checked ~ .advanced-installs.systemd{display:block}.advanced-installs-container .advanced-installs{margin-top:30px}