Merge branch 'master' into next

Conflicts:
	source/_components/camera.netatmo.markdown
	source/_components/rollershutter.wink.markdown
	source/_components/sensor.netatmo.markdown
	source/_components/sensor.snmp.markdown
	source/_posts/2016-06-18-pandora-bt-home-hub-5-and-local-file-camera.markdown
	source/index.html
This commit is contained in:
Paulus Schoutsen 2016-07-01 00:30:08 -07:00
commit d8de600fe3
51 changed files with 574 additions and 105 deletions

View File

@ -13,7 +13,7 @@
text-transform: uppercase;
white-space: nowrap;
display: inline-block;
font-weight: bold;
font-weight: 500;
}
.front-install {
@ -59,6 +59,19 @@
padding: 4px 0px 12px;
}
}
.links {
margin-top: 8px;
margin-left: -8px;
a {
text-decoration: none;
font-weight: 500;
text-transform: uppercase;
display: inline-block;
margin: 0 8px;
}
}
}
.frontpage {
@ -69,10 +82,15 @@
.release-date {
white-space: nowrap;
}
}
.blog-date {
white-space: nowrap;
.recent-posts {
margin-bottom: 16px;
.blog-date {
white-space: nowrap;
}
}
.supported-brands {

View File

@ -240,7 +240,7 @@ Custom slot type for script support.
Add a sample utterance:
```text
RunScriptIntent run {Scene}
RunScriptIntent run {Script}
```
Then add the intent to your Alexa Section in your HA config file:

View File

@ -10,12 +10,13 @@ footer: true
logo: enocean.png
ha_category: Binary Sensor
ha_release: 0.21
ha_iot_class: "Local Push"
---
This can typically be one of those batteryless wall switches. Currently only one type has been tested: Eltako FT55. Other devices will most likely not work without changing the Home-Asisstant code.
To use your EnOcean device, you first have to set up your [EnOcean hub](../enocean) and then add the following to your `configuration.yaml` file:
To use your EnOcean device, you first have to set up your [EnOcean hub](/components/enocean/) and then add the following to your `configuration.yaml` file:
```yaml
# Example configuration.yaml entry

View File

@ -8,12 +8,24 @@ comments: false
sharing: true
footer: true
ha_category: Binary Sensor
ha_release: 0.10
ha_release: "0.10"
---
The `rest` binary sensor platform is consuming a given endpoint which is exposed by a [RESTful API](https://en.wikipedia.org/wiki/Representational_state_transfer) of a device, an application, or a web service. The binary sensor has support for GET and POST requests.
The JSON messages can contain different values like `1`, `"1"`, `TRUE`, `true`, `on`, or `open`. If the value is nested then use a [template](/topics/templating/).
```json
{
"name": "Binary sensor",
"state": {
"open": "true",
"timestamp": "2016-06-20 15:42:52.926733"
}
}
```
To enable this sensor, add the following lines to your `configuration.yaml` file for a GET request:
```yaml

View File

@ -9,7 +9,7 @@ sharing: true
footer: true
logo: netatmo.png
ha_category: Camera
ha_release: "0.2x"
ha_release: "0.22"
---

View File

@ -12,7 +12,7 @@ ha_category: "Voice"
---
The conversation component can process sentences into commands for Home Assistant. It is currently limited to parsing commands in the format `turn <Friendly Name> <on/off>`.
The conversation component can process sentences into commands for Home Assistant. It is currently limited to parsing commands in the format `turn <Friendly Name> <on/off>`.
To enable the conversion option in your installation, add the following to your `configuration.yaml` file:
@ -22,12 +22,12 @@ To enable the conversion option in your installation, add the following to your
conversation:
```
When this component is active and you are using a supported browser voice commands will be activated in the frontend. Browse to [the demo](/demo/) using Chrome to see it in action.
When this component is active and you are using a supported browser voice commands will be activated in the frontend. Browse to [the demo](/demo/) using Chrome or Chromium to see it in action.
<p class='img'>
<img src="/images/screenshots/voice-commands.png" />
</p>
<p class='note'>
Apple iPhones do not support this feature in any browser.
Apple iPhones do not support this feature in any browser.
</p>

View File

@ -9,7 +9,7 @@ sharing: true
footer: true
logo: avm.png
ha_category: Presence Detection
ha_release: 0.10
ha_release: "0.10"
---

View File

@ -9,7 +9,7 @@ sharing: true
footer: true
logo: icloud.png
ha_category: Presence Detection
ha_release: 0.10
ha_release: "0.10"
---

View File

@ -36,13 +36,13 @@ device_tracker:
Once tracked, a file will be created in your config dir called `known_devices.yaml`. Edit this file to adjust which devices to be tracked. Here you can also setup a URL for each device to be used as the entity picture and set whether the device will be show in the UI when in the away state.
Multiple device trackers can be used in parallel, such as [Owntracks](/components/device_tracker.owntracks/) and [Nmap](/components/device_tracker.nmap_scanner/). The state of the device will be determined by the source that reported last. Device tracker will look for global settings (track_new_devices, consider_home and home_interval) under the configuration of the first platform.
Multiple device trackers can be used in parallel, such as [Owntracks](/components/device_tracker.owntracks/) and [Nmap](/components/device_tracker.nmap_scanner/). The state of the device will be determined by the source that reported last. Device tracker will look for global settings (`track_new_devices`, `consider_home`, and `home_interval`) under the configuration of the first platform.
The optional `consider_home` entry is useful for households with Apple iOS devices that go into sleep mode while still at home to conserve battery life. iPhones will occasionally drop off the network and then re-appear. `consider_home` helps prevent false alarms in presence detection when using IP scanners such as nmap.
To add Nmap tracking just add the MAC address to the OwnTracks or iCloud device `mac:` configuration. To use both OwnTracks and Nmap you could use the following example:
```
```yaml
owntracksdevicename:
name: Friendly Name!
mac: EA:AA:55:E7:C6:94

View File

@ -15,7 +15,7 @@ featured: true
As an alternative to the router-based device tracking, it is possible to directly scan the network for devices by using Nmap. The IP addresses to scan can be specified in any format that Nmap understands, including the network-prefix notation (`192.168.1.1/24`) and the range notation (`192.168.1.1-255`).
If you're on Debian or Ubuntu, you might have to install the packages for arp and nmap. Do so by running `apt-get install net-tools nmap`.
If you're on Debian or Ubuntu, you might have to install the packages for `arp` and `nmap`. Do so by running `apt-get install net-tools nmap`. On a Fedora host run `sudo dnf -y install nmap`.
To use this device tracker in your installation, add the following to your `configuration.yaml` file:

View File

@ -10,6 +10,7 @@ footer: true
logo: mqtt.png
ha_category: Garage Door
ha_release: 0.18
ha_iot_class: depends
---

View File

@ -37,7 +37,7 @@ Configuration variables:
- **[alias]** (*Required*): Alias for the input.
- **name** (*Optional*): Friendly name of the input.
- **options** array (*Optional*): List of options to choose from
- **options** array: List of options to choose from
- **initial** (*Optional*): Initial value when Home Assistant starts.
- **icon** (*Optional*): Icon for entry.

View File

@ -10,6 +10,7 @@ footer: true
logo: mqtt.png
ha_category: Lock
ha_release: 0.15
ha_iot_class: depends
---
The `mqtt` lock platform let you control your MQTT enabled locks.

View File

@ -11,6 +11,7 @@ logo: mqtt.png
ha_category: Hub
featured: true
ha_release: pre 0.7
ha_iot_class: depends
---
MQTT (aka MQ Telemetry Transport) is a machine-to-machine or "Internet of Things" connectivity protocol on top of TCP/IP. It allows extremely lightweight publish/subscribe messaging transport.

View File

@ -15,7 +15,7 @@ featured: true
The Nest component is the main component to integrate all Nest related platforms. Besides this component you will have to setup your thermostat and any connected sensors separately.
```yaml
# Example configurayion.yaml entry
# Example configuration.yaml entry
nest:
username: USERNAME
password: PASSWORD

View File

@ -10,6 +10,7 @@ footer: true
logo: mqtt.png
ha_category: Rollershutter
ha_release: 0.9
ha_iot_class: depends
---

View File

@ -12,7 +12,7 @@ ha_category: Rollershutter
ha_release: 0.22
---
The Wink rollershutter platform allows you to control your [Wink](http://www.wink.com/) enabled rollershutters. It supports Wink shades / blinds / rollershutters such as the Bali Somfy or Lutron Serena blinds.
The `wink` rollershutter platform allows you to control your [Wink](http://www.wink.com/) enabled rollershutters. It supports Wink shades/blinds/rollershutters such as the Bali Somfy or Lutron Serena blinds.
The Wink API currently doesn't provide status for shades.

View File

@ -9,6 +9,7 @@ sharing: true
footer: true
logo: command_line.png
ha_category: Sensor
ha_release: pre 0.7
---
@ -82,6 +83,16 @@ You can see directly in the frontend (**Developer tools** -> **About**) what rel
name: HA release
```
### {% linkable_title Read value out of a remote text file %}
If you own a devices which are storing values in text files which are accessible over HTTP then you can use the same approach as shown in the previous section. Instead of looking at the JSON response we directly grab the sensor's value.
```yaml
- platform: command_line
command: python3 -c "import requests; print(requests.get('http://remote-host/sensor_data.txt').text)"
name: File value
```
### {% linkable_title Use an external script %}
The example is doing the same as the [aREST sensor](/components/sensor.arest/) but with an external Python script. It should give you an idea about interacting with devices which are exposing a RESTful API.

View File

@ -9,7 +9,7 @@ sharing: true
footer: true
logo: dweet.png
ha_category: Sensor
ha_release: 0.10
ha_release: "0.10"
---
The `dweet` sensor platform allows you to get details from your devices which are publishing their values to [Dweet.io](https://dweet.io/).

View File

@ -9,7 +9,7 @@ sharing: true
footer: true
logo: eliq.png
ha_category: Sensor
ha_release: 0.10
ha_release: "0.10"
---

View File

@ -10,6 +10,7 @@ footer: true
logo: mqtt.png
ha_category: Sensor
ha_release: 0.7
ha_iot_class: depends
---

View File

@ -2,7 +2,7 @@
layout: page
title: "Netatmo Sensor"
description: "Instructions how to integrate Netatmo sensors into Home Assistant."
date: 2016-06-02 08:10
date: 2016-06-23 11:10
sidebar: true
comments: false
sharing: true
@ -31,12 +31,24 @@ sensor:
- rain
- sum_rain_1
- sum_rain_24
- wifi_status
module_name2:
- temperature
- battery_vp
- min_temp
- max_temp
rainmeter_name3:
- rain
- sum_rain_1
- sum_rain_24
- battery_vp
- rf_status
windmodule_name4:
- WindAngle
- WindStrength
- GustAngle
- GustStrength
- rf_status
```
Configuration variables:
@ -52,6 +64,15 @@ Configuration variables:
- **rain**: Estimated rainfall for today in mm.
- **sum_rain_1**: Rainfall in the last hour in mm.
- **sum_rain_24**: Rainfall in mm from 00:00am - 23:59pm.
- **WindAngle**: Wind angle
- **WingStrength**: Wind strength
- **GustAngle**: Wind gust angle
- **GustStrength**: Wind gust strength
- **min_temp**: Min temperature for today
- **max_temp**: Max temperature for today
- **rf_status**: Current radio status per module. (90=low, 60=highest)
- **wifi_status**: Wifi status per Base station
- **battery_vp**: Current battery status per module.
### {% linkable_title Find your modules name %}
@ -62,6 +83,3 @@ You have to provide these name in your Home Assistant configuration file.
<img src='/images/screenshots/netatmo_module.png' />
</p>
<p class='note'>
The Home Assistant NetAtmo platform has only be tested with the classic indoor, outdoor module and rainmeter. There is no support for the windmeter module at this time because developers does not own these modules.
</p>

View File

@ -8,9 +8,9 @@ comments: false
sharing: true
footer: true
logo: network-snmp.png
ha_category: Sensor
ha_category: Sensor
ha_iot_class: "Local Polling"
ha_release: "0.21"
ha_release: "0.22"
---

View File

@ -9,7 +9,7 @@ sharing: true
footer: true
logo: torque.png
ha_category: Sensor
ha_release: 0.10
ha_release: "0.10"
---
The `torque` platform will allow you to monitor [Torque](http://torque-bhp.com/) data relayed from a bluetooth OBD2 stick via the Torque mobile application.

View File

@ -9,7 +9,7 @@ sharing: true
footer: true
logo: twitch.png
ha_category: Sensor
ha_release: 0.10
ha_release: "0.10"
---

View File

@ -10,6 +10,7 @@ footer: true
logo: mqtt.png
ha_category: Switch
ha_release: 0.7
ha_iot_class: depends
---
The `mqtt` switch platform let you control your MQTT enabled light.

View File

@ -9,7 +9,7 @@ sharing: true
footer: true
logo: heatmiser.png
ha_category: Thermostat
ha_release: 0.10
ha_release: "0.10"
---

View File

@ -0,0 +1,95 @@
---
layout: page
title: "Apache Configuration"
description: "Configure Apache to work with home assistant as a subdomain"
date: 2016-06-20 13:05
sidebar: true
comments: false
sharing: true
footer: true
ha_category: Infrastructure
---
This is an example about how you can configure Apache to act as a proxy for home assistant.
This is useful if you want to have:
* a subdomain redirecting to your home assistant instance
* several subdomain for several instance
* HTTPS redirection
#### {% linkable_title Subdomain %}
So you already have a working Apache server available at example.org.
Your home assistant is correctly working on this web server and available at localhost:8123
To be able to access to your home assistant instance by using https://home.example.org, add to following file into `/etc/httpd/conf/extra/hass.conf`
```apacheconf
<VirtualHost *:443>
ProxyPreserveHost On
ProxyRequests Off
ServerName home.example.org
ProxyPass / http://localhost:8123/
ProxyPassReverse / http://localhost:8123/
</VirtualHost>
```
and make sure that this file is read by apache's main configiuration file `/etc/httpd/conf/httpd.conf`
```apacheconf
...
Include conf/extra/hass.conf
...
```
If you don't want HTTPS, you can change `<VirtualHost *:443>` to `<VirtualHost *:80>` or better consider redirecting all HTTP to HTTPS.
#### {% linkable_title Multiple Instance %}
You already have home assistant running on localhost:8123 and available at home.example.org as describe before.
The configuration file for this home assistant is available in `/home/alice/.homeassistant/configuration.yaml`
You want another instance available at https://countryside.example.org
You can either :
* Create a new user, `bob`, to hold the configuration file in `/home/bob/.homeassistant/configuration.yaml` and run home assistant as this new user
* Create another configuration directory in `/home/alice/.homeassistan2/configuration.yaml` and run home assistant using `hass --config /home/alice/.homeassistant2/`
In both solution, change port number used by modifying `configuration.yaml`
```yaml
http:
server_port: 8124
...
```
Start home assistant: Now, you have another instance running on localhost:8124
To access this instance by using https://countryside.example.org add to `/etc/httpd/conf/extra/hass.conf`
```apacheconf
<VirtualHost *:443>
ProxyPreserveHost On
ProxyRequests Off
ServerName countryside.example.org
ProxyPass / http://localhost:8124/
ProxyPassReverse / http://localhost:8124/
</VirtualHost>
```
#### {% linkable_title HTTP to HTTPS redirection %}
Add to your `/etc/httpd/conf/extra/hass.conf`
```apacheconf
<VirtualHost *:80>
ServerName example.org
ServerSignature Off
RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [NE,R,L]
</VirtualHost>
```

View File

@ -25,10 +25,10 @@ automation:
entity_id: binary_sensor.PIR1
state: 'on'
condition:
- platform: state
- condition: state
entity_id: switch.AlmAct1
state: 'on'
- platform: state
- condition: state
entity_id: script.alarm_room1
state: 'off'
action:
@ -52,7 +52,7 @@ automation:
entity_id: switch.REL1
state: 'off'
condition:
platform: state
condition: state
entity_id: switch.AlmSnd1
state: 'off'
action:

View File

@ -19,7 +19,7 @@ automation:
event: sunset
offset: "-00:45:00"
condition:
platform: state
condition: state
entity_id: group.all_devices
state: home
action:

View File

@ -29,7 +29,7 @@ automation:
minutes: '/2'
seconds: 0
condition:
platform: state
condition: state
entity_id: input_boolean.loop_livingcolors
state: 'on'
action:

View File

@ -0,0 +1,12 @@
---
layout: page
title: "Configuration.yaml by cbulock"
description: ""
date: 2016-06-29 15:30
sidebar: true
comments: false
sharing: true
footer: true
ha_category: Example configuration.yaml
ha_external_link: https://github.com/cbulock/home-assistant-configs
---

View File

@ -8,6 +8,6 @@ comments: false
sharing: true
footer: true
ha_category: Example configuration.yaml
ha_external_link: https://github.com/danichispa/homeassistant
ha_external_link: https://github.com/danichispa/hass
---

View File

@ -57,7 +57,7 @@ automation:
entity_id: media_player.htpc
from: 'playing'
condition:
- platform: state
- condition: state
entity_id: sun.sun
state: 'below_horizon'
action:
@ -70,7 +70,7 @@ automation:
entity_id: media_player.htpc
to: 'playing'
condition:
- platform: state
- condition: state
entity_id: sun.sun
state: 'below_horizon'
action:

View File

@ -75,3 +75,96 @@ automation:
data:
entity_id: media_player.nursery
```
A little bit more complex example that uses [`input_select`](/components/input_select/) and template do decide what and in which [Chromecast](components/media_player.cast/) play.
```yaml
input_select:
radio_station:
name: Radio Station
options:
- Z88.3
- Virgin
- RMC
- rmcHQ
- 105
- None
initial: None
icon: mdi:radio
radio_player:
name: Radio Player
options:
- Mansarda
- Doccia
- Bed
- Bath
- Salotto
- Salotto Video
- None
initial: None
icon: mdi:airplay
automation:
- alias: Stop Streaming Radio
trigger:
- platform: state
entity_id: input_select.radio_station
to: "None"
action:
service: media_player.turn_off
data_template:
entity_id: >{% raw %}
{% if is_state("input_select.radio_player", "Mansarda") %}{% endraw %}
media_player.bed_2{% raw %}
{%-elif is_state("input_select.radio_player", "Doccia") %}{% endraw %}
media_player.bed_3{% raw %}
{%-elif is_state("input_select.radio_player", "Bed") %}{% endraw %}
media_player.bed{% raw %}
{%-elif is_state("input_select.radio_player", "Bath") %}{% endraw %}
media_player.bath{% raw %}
{%-elif is_state("input_select.radio_player", "Salotto") %}{% endraw %}
media_player.salotto{% raw %}
{%-elif is_state("input_select.radio_player", "Salotto Video") %}{% endraw %}
media_player.salotto_video{% raw %}
{% else %}{% endraw %}
none{% raw %}
{% endif %}{% endraw %}
- alias: Stream Radio - Template
trigger:
- platform: state
entity_id: input_select.radio_station
action:
- service: media_player.play_media
data_template:
entity_id: >{% raw %}
{% if is_state("input_select.radio_player", "Mansarda") %}{% endraw %}
media_player.bed_2{% raw %}
{%-elif is_state("input_select.radio_player", "Doccia") %}{% endraw %}
media_player.bed_3{% raw %}
{%-elif is_state("input_select.radio_player", "Bed") %}{% endraw %}
media_player.bed{% raw %}
{%-elif is_state("input_select.radio_player", "Bath") %}{% endraw %}
media_player.bath{% raw %}
{%-elif is_state("input_select.radio_player", "Salotto") %}{% endraw %}
media_player.salotto{% raw %}
{%-elif is_state("input_select.radio_player", "Salotto Video") %}{% endraw %}
media_player.salotto_video{% raw %}
{% else %}{% endraw %}
none{% raw %}
{% endif %}{% endraw %}
media_content_id: >{% raw %}
{% if is_state("input_select.radio_station", "Z88.3") %}{% endraw %}
http://ice.zradio.org/z/high.mp3{% raw %}
{%-elif is_state("input_select.radio_station", "Virgin") %}{% endraw %}
http://icecast.unitedradio.it/Virgin.mp3{% raw %}
{%-elif is_state("input_select.radio_station", "RMC") %}{% endraw %}
http://icecast.unitedradio.it/RMC.mp3{% raw %}
{%-elif is_state("input_select.radio_station", "rmcHQ") %}{% endraw %}
http://icecast.unitedradio.it/rmcHQ.mp3{% raw %}
{%-elif is_state("input_select.radio_station", "105") %}{% endraw %}
http://icecast.unitedradio.it/Radio105.mp3{% raw %}
{% else %}{% endraw %}
none{% raw %}
{% endif %}{% endraw %}
media_content_type: 'audio/mp4'
```

View File

@ -61,22 +61,22 @@ script:
entity_id: switch.killhass
automation:
- alias: "Restart HA if WeMo switch isn't found after 15 minutes"
- alias: "Restart HA if WeMo switch isn't found after 15 minutes"
trigger:
platform: state
entity_id: device_tracker.wemo
from: 'not_home'
to: 'home'
condition:
- platform: template
- condition: template
value_template: {% raw %}'{% if states.switch.wemo %}false{% else %}true{% endif %}'{% endraw %}
- platform: state
- condition: state
entity_id: script.restarthawemo
state: 'off'
action:
service: homeassistant.turn_on
entity_id: script.restarthawemo
- alias: 'Stop HA'
- alias: 'Stop HA'
trigger:
- platform: state
entity_id: switch.KillHass
@ -88,7 +88,7 @@ automation:
platform: template
value_template: {% raw %}'{% if states.switch.wemo %}true{% else %}false{% endif %}'{% endraw %}
condition:
platform: state
condition: state
entity_id: script.restarthawemo
state: 'on'
action:

View File

@ -64,6 +64,7 @@
</li>
<li>{% active_link {{site_root}}/topics/ Advanced Topics %}</li>
<li>{% active_link /getting-started/android/ Add to Android Homescreen %}</li>
<li>{% active_link /getting-started/browsers/ Browser Compatibility List %}</li>
</ul>
</div>
</section>

View File

@ -24,8 +24,8 @@
<meta property="og:type" content="{% if page.categories %}article{% else %}website{% endif %}">
<meta property="og:description" content="{{ fb_description | truncate:200 }}">
<meta property="og:image" content="{{ social_image }}">
<meta name="twitter:card" content="{% if page.og_image %}summary_large_image{% else %}summary{% endif %}">
{% comment %}{% if page.og_image %}summary_large_image{% else %}summary{% endif %}{% endcomment %}
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="@{{ site.social.twitter.account }}">
{% if page.author_twitter %}<meta name="twitter:creator" content="@{{ page.author_twitter }}">{% endif %}
<meta name="twitter:title" content="{% if post.title %}{{ post.title }}{% elsif page.title %}{{ page.title }}{% else %}{{ site.title }}{% endif %}">

View File

@ -39,9 +39,12 @@ I've been using Adafruit for my shopping:
_Besides this, you will need the usual hardware prototype equipment: a breadboard, some wires, soldering iron + wire, Serial USB cable._
<p class='note'>
Adafruit has stopped selling the HDC1008. One possible replacement is the [BME280](https://www.adafruit.com/product/2652). Adjusted sketch to work with the BME280 can be found [here](https://gist.github.com/mtl010957/9ee85fb404f65e15c440b08c659c0419).
</p>
### {% linkable_title Alternatives %}
Since this article has been published the HDC1008 has been discontinued. Updated sketches are available for the following alternatives:
- [DHT22 sensor](https://www.adafruit.com/product/385) and [updated sketch](https://gist.github.com/balloob/1176b6d87c2816bd07919ce6e29a19e9).
- [BME280 sensor](https://www.adafruit.com/product/2652) and [updated sketch](https://gist.github.com/mtl010957/9ee85fb404f65e15c440b08c659c0419).
### {% linkable_title Connections %}
@ -111,7 +114,8 @@ void setup() {
if (!hdc.begin()) {
Serial.println("Couldn't find sensor!");
while (1);
}}
}
}
void setup_wifi() {
delay(10);
@ -153,7 +157,8 @@ void reconnect() {
}
bool checkBound(float newValue, float prevValue, float maxDiff) {
return newValue < prevValue - maxDiff || newValue > prevValue + maxDiff;
return !isnan(newValue) &&
(newValue < prevValue - maxDiff || newValue > prevValue + maxDiff);
}
long lastMsg = 0;

View File

@ -94,8 +94,8 @@ The final step is to point Home Assistant at the generated certificates. Before
```yaml
http:
api_password: YOUR_SECRET_PASSWORD
ssl_certificate: /etc/letsencrypt/live/hass.example.com/fullchain.pem
ssl_key: /etc/letsencrypt/live/hass.example.com/privkey.pem
ssl_certificate: /etc/letsencrypt/live/hass-example.duckdns.org/fullchain.pem
ssl_key: /etc/letsencrypt/live/hass-example.duckdns.org/privkey.pem
```
You can now navigate to https://hass-example.duckdns.org and enjoy encryption!

View File

@ -40,6 +40,24 @@ Another cool addition is the local file camera. This seems very basic at first b
- Component [shell command] can now use templates to render arguments ([@partofthething])
- Rollershutter: [Wink] is now supported ([@philk])
- Alexa: Updated [documentation][alexa] to show how to call scripts and scenes (@acockburn)
- Sensor: [SNMP] is now supported ([@fabaff])
- Sensor: Support for Swiss hydrological data ([@fabaff])
### {% linkable_title Breaking change %}
- The new Netatmo support caused us to change how Netatmo are configured. It's now done via it's own component.
```yaml
netatmo:
api_key: API_KEY
secret_key: SECRET_KEY
username: username
password: password
```
### {% linkable_title Hotfix 0.22.1 - June 20 %}
- Insteon Hub lights will load again
[@acockburn]: https://github.com/acockburn/
[@arsaboo]: https://github.com/arsaboo/
@ -56,6 +74,7 @@ Another cool addition is the local file camera. This seems very basic at first b
[@persandstrom]: https://github.com/persandstrom/
[@philk]: https://github.com/philk/
[@wind-rider]: https://github.com/wind/
[@fabaff]: https://github.com/fabaff/
[AsusWRT]: /components/device_tracker.asuswrt/
[BT Home Hub 5]: /components/device_tracker.bt_home_hub_5/
[Cast]: /components/media_player.cast/
@ -72,3 +91,4 @@ Another cool addition is the local file camera. This seems very basic at first b
[All-in-One installer]: /getting-started/installation-raspberry-pi-all-in-one/
[standalone Raspberry Pi installation guide]: /getting-started/installation-raspberry-pi/
[Voltage sensor]: /components/sensor.bloomsky/
[SNMP]: /components/sensor.snmp/

View File

@ -0,0 +1,122 @@
---
layout: post
title: "Using USB webcams with Home Assistant"
description: "A how-to how to repurpose your old USB webcams and integrate them into Home Assistant."
date: 2016-06-23 06:00:00 +0000
date_formatted: "June 23, 2016"
author: Fabian Affolter
author_twitter: fabaff
comments: true
categories: How-To
og_image: /images/blog/2016-06-cranberry/social.png
---
<img src='/images/blog/2016-06-cranberry/motion.png' style='clear: right; border:none; box-shadow: none; float: right; margin-bottom: 12px;' width='200' />
In the past month I was thinking about ways to integrate USB webcams into Home Assistant again. The main reason was that this would give those devices a second life and enable one to benefit from low-cost video surveillance. There are a couple of options available like [pygame](http://www.pygame.org/hifi.html) or [SimpleCV](http://www.simplecv.org/) but I never finished something. With the [Local File camera platform](https://home-assistant.io/components/camera.local_file/) by [Landrash](https://github.com/Landrash) and [motion](http://lavrsen.dk/foswiki/bin/view/Motion/WebHome) you could integrate a local USB webcam with a few very easy steps.
In this blog post I am using a Fedora 24 (will most likely work on other distributions too) installation with Home Assistant 0.22.1 on a Foxconn nT-330i with an old [Logitech QuickCam Orbit AF](http://support.logitech.com/en_us/product/quickcam-sphere-af) and a [Logitech HD Webcam C270](http://support.logitech.com/en_us/product/hd-webcam-c270). As a start only the Quickcam is used. No multi-camera setup for now.
<!--more-->
Check first if the your operating system lists your cameras.
```bash
$ lsusb
[...]
Bus 002 Device 016: ID 046d:08cc Logitech, Inc. Mic (PTZ)
[...]
```
The camera we are going to use is available at `/dev/video1`. The C270 is the one on `/dev/video0`.
```bash
$ ls -al /dev/video*
crw-rw----+ 1 root video 81, 0 Jun 23 08:05 /dev/video0
crw-rw----+ 1 root video 81, 1 Jun 23 08:36 /dev/video1
```
We need an additional software part to handle the cameras. [motion](http://lavrsen.dk/foswiki/bin/view/Motion/WebHome) is capable of monitoring the video signal from USB and network cameras, do motion detection, and other nifty stuff like saving images, add text, or basic image manipulations. Make sure that you have the [RPM Fusion respository](http://rpmfusion.org/) enabled.
```bash
$ sudo dnf -y install motion
```
For our setup we need to modify the file `/etc/motion/motion.conf`. For now the most important parameters are `videodevice`, `snapshot_interval`, and `target_dir`. The other settings can be left to their defaults. We are going to use the device `/dev/video1`, use a 30 seconds interval, and set the path to `/tmp`.
```bash
[...]
###########################################################
# Capture device options
############################################################
# Videodevice to be used for capturing (default /dev/video0)
# for FreeBSD default is /dev/bktr0
videodevice /dev/video1
[..]
############################################################
# Snapshots (Traditional Periodic Webcam File Output)
############################################################
# Make automated snapshot every N seconds (default: 0 = disabled)
snapshot_interval 30
[...]
############################################################
# Target Directories and filenames For Images And Films
# For the options snapshot_, picture_, movie_ and timelapse_filename
# you can use conversion specifiers
# %Y = year, %m = month, %d = date,
# %H = hour, %M = minute, %S = second,
# %v = event, %q = frame number, %t = thread (camera) number,
# %D = changed pixels, %N = noise level,
# %i and %J = width and height of motion area,
# %K and %L = X and Y coordinates of motion center
# %C = value defined by text_event
# Quotation marks round string are allowed.
############################################################
# Target base directory for pictures and films
# Recommended to use absolute path. (Default: current working directory)
target_dir /tmp
[...]
```
It's suggested that you adjust at least `width` and `height` to get a bigger image from your camera. If you are done, fire up `motion`.
```bash
$ sudo motion
[0] [NTC] [ALL] conf_load: Processing thread 0 - config file /etc/motion/motion.conf
[0] [ALR] [ALL] conf_cmdparse: Unknown config option "sdl_threadnr"
[0] [NTC] [ALL] motion_startup: Motion 3.3.0 Started
[0] [NTC] [ALL] motion_startup: Logging to file (/var/log/motion.log)
```
Your `target_dir` will start filling up with images from your camera. `motion` will create a symlink called `lastsnap.jpg` which always point to the latest snapshot. We will setup the [Local File camera platform](https://home-assistant.io/components/camera.local_file/) to use this file.
```yaml
camera:
- platform: local_file
name: Cranberry cam
file_path: /tmp/lastsnap.jpg
```
<p class='img'>
<img src='/images/blog/2016-06-cranberry/cam.png' />
The "Cranberry cam" in action
</p>
The machine with the attached USB camera will become a webcam server as well because `motion`'s built-in HTTP server is enabled by default. This means that you could connect your USB webcams to a different machine in your network, run `motion` there, adjust your firewall rules, and use Home Assistant to display the videos. Just check http://[IP of your webcam host]:8081/ to see the stream. This required more powerful hardware than using snapshots, of course.
In a scenario like this needs a [Generic MJPEG IP Camera ](https://home-assistant.io/components/camera.mjpeg/) in your `configuration.yaml` file.
```yaml
camera:
- platform: mjpeg
mjpeg_url: http://[IP of your webcam host]:8081
name: Cranberry Live cam
```
[motion](http://lavrsen.dk/foswiki/bin/view/Motion/WebHome) is a powerful tool and this blog post only showed two very simple use cases. Take a look at the [documentation](http://www.lavrsen.dk/foswiki/bin/view/Motion/MotionGuide) of `motion` to unleash its potential.

View File

@ -19,16 +19,19 @@ This page contains a list of people who have contributed in one way or another t
(in alphabetical order)
- [Adam Mills](https://github.com/armills)
- [Adrien Brault](https://github.com/adrienbrault)
- [Alex Harvey](https://github.com/infamy)
- [Alexander Fortin](https://github.com/shaftoe)
- [Alex Harvey](https://github.com/infamy)
- [Allan Glen](https://github.com/allanglen)
- [amorsillo](https://github.com/fignuts)
- [Andrew](https://github.com/aoakeson)
- [Andrew LeCody](https://github.com/aceat64)
- [Andy Loughran](https://github.com/andylockran)
- [andythigpen](https://github.com/andythigpen)
- [Antonio Párraga Navarro](https://github.com/aparraga)
- [Ardi Mehist](https://github.com/omgapuppy)
- [arsaboo](https://github.com/arsaboo/)
- [Arthur Leonard Andersen](https://github.com/leoc)
- [Austin](https://github.com/trainman419)
- [Azelphur](https://github.com/Azelphur)
@ -43,10 +46,13 @@ This page contains a list of people who have contributed in one way or another t
- [Chris Mulder](https://github.com/chrisvis)
- [Christian Braedstrup](https://github.com/LinuxChristian)
- [coteyr](https://github.com/coteyr/)
- [Dale Higgs](https://github.com/dale3h)
- [Dan Cinnamon](https://github.com/Cinntax)
- [Daniel](https://github.com/danielperna84)
- [Daniel Iversen](https://github.com/danielhiversen)
- [Daniel J. Kemp](https://github.com/danieljkemp/)
- [Dan Smith](https://github.com/kk7ds)
- [Dan Sullivan](https://github.com/dansullivan86/)
- [Daren Lord](https://github.com/Xorso)
- [Dean Galvin](https://github.com/FreekingDean)
- [Dennis Karpienski](https://github.com/TheRealLink)
@ -77,6 +83,8 @@ This page contains a list of people who have contributed in one way or another t
- [Jan Harkes](https://github.com/jaharkes)
- [Jan-Preben Mossin](https://github.com/jpmossin)
- [Jaret Stezelberger](https://github.com/DesignFirst)
- [Jean-Philippe Bouillot](https://github.com/Jypy)
- [Jeffrey Lin](https://github.com/linjef/)
- [Jeffrey Tang](https://github.com/Qrtn)
- [Jeff Schroeder](https://github.com/SEJeff)
- [Joel Asher Friedman](https://github.com/joelash)
@ -96,6 +104,7 @@ This page contains a list of people who have contributed in one way or another t
- [kennedyshead](https://github.com/kennedyshead)
- [kixam](https://github.com/kixam)
- [Kyle Hendricks](https://github.com/kylehendricks)
- [Lewis Juggins](https://github.com/lwis/)
- [Luca Soldi](https://github.com/LucaSoldi)
- [Lukas Hetzenecker](https://github.com/lukas-hetzenecker)
- [Magnus Knutas](https://github.com/MagnusKnutas)
@ -106,6 +115,7 @@ This page contains a list of people who have contributed in one way or another t
- [Markus Stenberg](https://github.com/fingon)
- [Martin Hjelmare](https://github.com/MartinHjelmare)
- [Matteo Lampugnani](https://github.com/t30)
- [Matthew Treinish](https://github.com/mtreinish/)
- [Michael Arnauts](https://github.com/michaelarnauts)
- [Michael Auchter](https://github.com/auchter)
- [Michael Gilbert](https://github.com/Zyell)
@ -121,6 +131,7 @@ This page contains a list of people who have contributed in one way or another t
- [Oliver van Porten](https://github.com/mcdeck)
- [Øystein Hansen](https://github.com/oeysteinhansen)
- [Pascal Bach](https://github.com/bachp)
- [Pascal Vizeli](https://github.com/pvizeli)
- [Per Sandström](https://github.com/persandstrom)
- [Philip Lundrigan](https://github.com/philipbl)
- [Piratonym](https://github.com/Piratonym)

View File

@ -13,50 +13,68 @@ Home Assistant requires a web browser to show the frontend. Not all browsers inc
We don't test the web interface against all available browsers but this page tracks different browsers on various operating systems and should help you to pick a browser which works.
We would appriciate if you help to keep this page up-to-date and add feedback.
We would appreciate if you help to keep this page up-to-date and add feedback.
## {% linkable_title Microsoft Windows %}
| Browser | Release | State | Comments |
| :------------------ |:---------------|:-----------|:-------------------------|
| Internet Explorer | 11 | partically | Streaming updates not working. Display issues |
| Microsoft Edge | deli. Win 10 | partically | Streaming updates not working. |
| Chrome | 50.0.2661.102 | works | |
| Firefox | 43.0.1 | works | |
| Iridium | 48.2 | works | |
| Browser | Release | State | Comments |
| :------------------------ |:---------------|:-----------|:-------------------------|
| Internet Explorer ([IE]) | 11 | partially | Streaming updates not working. Display issues |
| Microsoft [Edge] | deli. Win 10 | partially | Streaming updates not working. |
| [Chrome] | 50.0.2661.102 | works | |
| [Firefox] | 43.0.1 | works | |
| [Iridium] | 48.2 | works | |
## {% linkable_title MacOS %}
| Browser | Release | State | Comments |
| :------------------ |:---------------|:-----------|:-------------------------|
| Safari | | works | |
| Browser | Release | State | Comments |
| :-------------------- |:---------------|:-----------|:-------------------------|
| [Safari] | | works | |
## {% linkable_title Linux %}
| Browser | Release | State | Comments |
| :------------------ |:---------------|:-----------|:-------------------------|
| Firefox | 46.0.1 | works | |
| Midori | 0.5.11 | works | |
| Chromium | 50.0.2661.102 | works | |
| Conkeror | 1.0.2 | works | |
| Konqueror | | unknown | |
| Uzbl | 0.9.0 | works | |
| Opera | | unknown | |
| Lynx | 2.12 | fails | loads empty page |
| elinks | | fails | page with manifest and import |
| w3m | 0.5.3 | fails | display the icon shown while loading HA |
| Browser | Release | State | Comments |
| :-------------------- |:---------------|:-----------|:-------------------------|
| [Firefox] | 47.0 | works | |
| [Midori] | 0.5.11 | works | |
| [Chromium] | 50.0.2661.102 | works | |
| [Conkeror] | 1.0.2 | works | |
| [Konqueror] | | unknown | |
| [Uzbl] | 0.9.0 | works | |
| [Opera] | | unknown | |
| [Lynx] | 2.12 | fails | loads empty page |
| [elinks] | | fails | page with manifest and import |
| [w3m] | 0.5.3 | fails | display the icon shown while loading HA |
| [Epiphany] | 3.18.5 | works | |
## {% linkable_title Android %}
| Browser | Release | State | Comments |
| :------------------ |:---------------|:-----------|:-------------------------|
| Chrome | 50.0.2661.89 | works | |
| Firefox | 46.0.1 | works | |
| Browser | Release | State | Comments |
| :-------------------- |:---------------|:-----------|:-------------------------|
| [Chrome] | 50.0.2661.89 | works | |
| [Firefox] | 46.0.1 | works | |
## {% linkable_title iOS %}
| Browser | Release | State | Comments |
| :------------------ |:---------------|:-----------|:-------------------------|
| Safari | | unknown | |
| Browser | Release | State | Comments |
| :-------------------- |:---------------|:-----------|:-------------------------|
| [Safari] | | unknown | |
[Firefox]: https://www.mozilla.org/en-US/firefox/
[Midori]: http://midori-browser.org/
[Chrome]: https://www.google.com/chrome/
[Iridium]: https://iridiumbrowser.de/
[Opera]: http://www.opera.com/
[Edge]: https://www.microsoft.com/en-us/windows/microsoft-edge
[IE]: http://windows.microsoft.com/en-us/internet-explorer/download-ie
[Safari]: http://www.apple.com/safari/
[Chromium]: https://www.chromium.org/
[Conkeror]: http://conkeror.org/
[Konqueror]: https://konqueror.org/
[Uzbl]: http://www.uzbl.org/
[Lynx]: http://lynx.browser.org/
[elinks]: http://elinks.or.cz/
[w3m]: http://w3m.sourceforge.net/
[Epiphany]: https://wiki.gnome.org/Apps/Web

View File

@ -17,7 +17,9 @@ The only requirement is that you have a Raspberry Pi with a fresh installation o
```bash
$ wget -Nnv https://raw.githubusercontent.com/home-assistant/fabric-home-assistant/master/hass_rpi_installer.sh && bash hass_rpi_installer.sh
```
*Note this command is one line and not run as sudo*
<p class='note warning'>
Note this command is one-line and not run as sudo.
</p>
Installation will take approx. 1-2 hours depending on the Raspberry Pi model the installer is being run against. The installer will identitfy what Raspberry PI hardware revision you are using and adjust commands accordingly. A complete log of the install is located at: `/home/pi/fabric-home-assistant/installation_report.txt` The installer has been updated to simply log any errors encountered, but resume installing. Please consult the "installation report" if your install encountered issues.
@ -25,8 +27,11 @@ Installation will take approx. 1-2 hours depending on the Raspberry Pi model the
Once rebooted, your Raspberry Pi will be up and running with Home Assistant. You can access it at [http://your_raspberry_pi_ip:8123](http://your_raspberry_pi_ip:8123).
The Home Assistant configuration is located at `/home/hass/.homeassistant`. The virtualenv with the Home Assistant installation is located at `/srv/hass/hass_venv`. As part of the secure installation, a new user is added to your Raspberry Pi to run Home Assistant as named, **hass**. This is a system account and does not have login or other abilities by design. When editing your configuration.yaml files, you will need to run the commands with "sudo" or by switching user.
*Windows users* - Setting up WinSCP to allow this seemlessly is detailed below.
The Home Assistant configuration is located at `/home/hass/.homeassistant`. The [virtualenv](https://virtualenv.pypa.io/en/latest/) with the Home Assistant installation is located at `/srv/hass/hass_venv`. As part of the secure installation, a new user (**hass**) is added to your Raspberry Pi to run Home Assistant. This is a system account and does not have login or other abilities by design. When editing your `configuration.yaml` files, you will need to run the commands with `sudo` or by switching user.
<p class='note note'>
*Windows users*: Setting up WinSCP to allow this seemlessly is at the end of this page.
</p>
By default, installation makes use of a Python Virtualenv. If you wish to not follow this recommendation, you may add the flag `-n` to the end of the install command specified above.
@ -43,29 +48,35 @@ The All-In-One Installer script will do the following automatically:
* Build openzwave-control-panel in `/srv/hass/src/open-zwave-control-panel`
* Add both Home Assistant and Mosquitto to systemd services to start at boot
### {% linkable_title Upgrading %}
To upgrade the All-In-One setup manually:
* Login to Raspberry Pi ```ssh pi@your_raspberry_pi_ip```
* Login to Raspberry Pi `ssh pi@your_raspberry_pi_ip`
* Change to hass user `sudo su -s /bin/bash hass`
* Change to virtual enviroment `source /srv/hass/hass_venv/bin/activate`
* Update HA `pip3 install --upgrade homeassistant`
To upgrade with fabric:
* Login to Raspberry Pi ```ssh pi@your_raspberry_pi_ip```
* Login to Raspberry Pi `ssh pi@your_raspberry_pi_ip`
* Change to `cd ~/fabric-home-assistant`
* Run `fab upgrade_homeassistant`
To launch the OZWCP webapp:
### {% linkable_title Using the OZWCP web application %}
To launch the OZWCP web application:
* Login to Raspberry Pi `ssh pi@your_raspberry_pi_ip`
* Change to the ozwcp directory `cd /srv/hass/src/open-zwave-control-panel/`
* Launch the control panel `sudo ./ozwcp -p 8888`
* Open a web browser to `http://your_pi_ip:8888`
* Specify your zwave controller, for example `/dev/ttyACM0` and hit initialize
*don't check the USB box regardless of using a USB based device*
<p class='note warning'>
Don't check the USB box regardless of using a USB based device.
</p>
*Windows Users* - Please note that after running the installer, you will need to modify settings allowing you to "switch users" to edit your configuration files. The needed change within WinSCP is: Environment -> SCP/Shell -> Shell and set it to `sudo su -`.
### {% linkable_title WinSCP %}
If you are Windows users who is using [WinSCP](https://winscp.net/), please note that after running the installer, you will need to modify settings allowing you to "switch users" to edit your configuration files. The needed change within WinSCP is: **Environment** -> **SCP/Shell** -> **Shell** and set it to `sudo su -`.

View File

@ -15,11 +15,11 @@ A `Vagrantfile` is avalable into `virtualization/vagrant` folder for quickly spi
Vagrant is intended for testing/development only. It is NOT recommended for permanent installations.
</p>
## Install Vagrant
## {% linkable_title Install Vagrant %}
You must have [Vagrant](https://www.vagrantup.com/downloads.html) and [Virtualbox](https://www.virtualbox.org/wiki/Downloads) installed on your workstation.
## Get Home Assistant source code
## {% linkable_title Get Home Assistant source code %}
Download the home-assistant source code by either downloading the .zip file from [GitHub releases page](https://github.com/home-assistant/home-assistant/releases), or by using [Git](https://git-scm.com/)
@ -32,7 +32,7 @@ cd home-assistant/virtualization/vagrant
The following instructions will assume you changed your working directory to be home-assistant/virtualization/vagrant. This is mandatory because Vagrant will look for informations about the running VM inside that folder and won't work otherwise
</p>
## Create the Vagrant VM and start Home Assistant
## {% linkable_title Create the Vagrant VM and start Home Assistant %}
```bash
vagrant up
@ -40,7 +40,7 @@ vagrant up
This will download + start a virtual machine using Virtualbox, which will internally setup the development environment necessary to start Home Assistant process and run test suite as well. After the VM has started succesfully, Home Assistant frontend will be accessible locally from your browser at [http://localhost:8123](http://localhost:8123)
## Stopping Vagrant
## {% linkable_title Stopping Vagrant %}
To shutdown the Vagrant host:
@ -50,7 +50,7 @@ vagrant halt
To start it again, just run `vagrant up`
## Restarting Home Assistant process to test changes
## {% linkable_title Restarting Home Assistant process to test changes %}
The root `home-assistant` directory on your workstation will be mirrored with `/home-assistant` inside the VM. In `virtualization/vagrant` there's also a `config` folder that you can use to drop configuration files ([here](https://home-assistant.io/getting-started/configuration/) you can find more information on how to configure HASS).
@ -60,7 +60,7 @@ Any changes made to the local directory on your workstation will be available fr
touch restart ; vagrant provision
```
## Run test suite (Tox)
## {% linkable_title Run test suite (Tox) %}
To run tests against your changes:
@ -68,7 +68,7 @@ To run tests against your changes:
touch run_tests ; vagrant provision
```
## Cleanup
## {% linkable_title Cleanup %}
To completely remove the VM:
@ -89,4 +89,4 @@ In addition to this site, check out these sources for additional help:
- [Gitter Chat Room](https://gitter.im/home-assistant/home-assistant) for real-time chat about Home Assistant.
- [GitHub Page](https://github.com/home-assistant/home-assistant/issues) for issue reporting.
### [Next step: Configuring Home Assistant &raquo;](/getting-started/configuration/)
### [Next step: Configuring Home Assistant &raquo;](/getting-started/configuration/)

View File

@ -10,12 +10,14 @@ footer: true
---
To update Home Assistant to the latest release when available, run:
The default way to update Home Assistant to the latest release, when available, is:
```bash
$ pip3 install --upgrade homeassistant
```
Different installation methods as [Raspberry Pi All-In-One Installer](/getting-started/installation-raspberry-pi-all-in-one/#upgrading), [Vagrant](/getting-started/installation-vagrant/), or [Virtualenv](/getting-started/installation-virtualenv/#upgrading-home-assistant) may have a alternative way for updating Home Assistant.
After updating, restart Home Assistant for the changes to take effect. This means that you have to restart `hass` itself or the [autostarting](/getting-started/autostart/) daemon if you use any.

Binary file not shown.

After

Width:  |  Height:  |  Size: 550 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

View File

@ -11,17 +11,30 @@ description: Open-source home automation platform running on Python 3. Track and
hide_github_edit: true
---
<div class="grid-wrapper frontpage">
<div class="frontpage">
<div class="grid">
<div class="grid__item one-third lap-one-third palm-one-whole">
<div class='current-version material-card text'>
<h1>Current: 0.22</h1>
Released: <span class='release-date'>June 18, 2016</span><br>
<a href='/blog/2016/06/18/pandora-bt-home-hub-5-and-local-file-camera/'>Release notes</a>
<h1>Current Version: 0.22.1</h1>
Released: <span class='release-date'>June 20, 2016</span>
<div class='links'>
<a href='/blog/2016/06/18/pandora-bt-home-hub-5-and-local-file-camera/'>Release notes</a>
</div>
</div>
<div class='join-community material-card text'>
<h1>Join The Community</h1>
We love to help &amp; talk home automation.
<div class='links'>
<a href='https://community.home-assistant.io'>Forums</a>
<a href='https://gitter.im/home-assistant/home-assistant'>Chat</a>
<a href='https://gitter.im/home-assistant/home-assistant/devs'>Dev Chat</a>
</div>
</div>
</div>
<div class="grid__item two-thirds lap-two-thirds palm-one-whole">
<div class='material-card text'>
<div class='recent-posts material-card text'>
<h1>Recent Blog Posts</h1>
{% for post in site.posts limit: 3 %}