diff --git a/.themes/classic/source/_includes/head.html b/.themes/classic/source/_includes/head.html
index 6b5412ca646..48d1018fca5 100644
--- a/.themes/classic/source/_includes/head.html
+++ b/.themes/classic/source/_includes/head.html
@@ -15,6 +15,7 @@
+
{% capture canonical %}{{ site.url }}{% if site.permalink contains '.html' %}{{ page.url }}{% else %}{{ page.url | remove:'index.html' | strip_slash }}{% endif %}{% endcapture %}
diff --git a/Rakefile b/Rakefile
index e44380c49dc..c56c918561c 100644
--- a/Rakefile
+++ b/Rakefile
@@ -60,6 +60,13 @@ task :generate do
abort("Generating CSS failed") unless success
success = system "jekyll build"
abort("Generating site failed") unless success
+ if ENV["CONTEXT"] != 'production'
+ File.open("#{public_dir}robots.txt", 'w') do |f|
+ f.write "User-agent: *\n"
+ f.write "Disallow: /\n"
+ end
+ end
+ public_dir
end
desc "Watch the site and regenerate when it changes"
diff --git a/_config.yml b/_config.yml
index 40a6c96ad29..4a90ed5885b 100644
--- a/_config.yml
+++ b/_config.yml
@@ -140,13 +140,13 @@ social:
# Home Assistant release details
current_major_version: 0
current_minor_version: 65
-current_patch_version: 3
-date_released: 2018-03-11
+current_patch_version: 5
+date_released: 2018-03-14
# Either # or the anchor link to latest release notes in the blog post.
# Must be prefixed with a # and have double quotes around it.
# Major release:
-patch_version_notes: "#release-0652---march-11"
+patch_version_notes: "#release-0655---march-14"
# Minor release (Example #release-0431---april-25):
# Date we moved to Discourse for comments
diff --git a/source/_addons/dnsmasq.markdown b/source/_addons/dnsmasq.markdown
index 6ae42294f54..d894320ab02 100644
--- a/source/_addons/dnsmasq.markdown
+++ b/source/_addons/dnsmasq.markdown
@@ -11,10 +11,6 @@ footer: true
Setup and manage a [Dnsmasq](http://thekelleys.org.uk/dnsmasq/doc.html) DNS server. This allows you to manipulate DNS requests. For example, you can have your Home Assistant domain resolve with an internal address inside your network.
-
-`interface` options are for resinos based installation. On other system you can set it to `""`, for listen on every interface.
-
-
```json
{
"defaults": ["8.8.8.8", "8.8.4.4"],
@@ -23,8 +19,7 @@ Setup and manage a [Dnsmasq](http://thekelleys.org.uk/dnsmasq/doc.html) DNS serv
],
"hosts": [
{"host": "home.mydomain.io", "ip": "192.168.1.10"}
- ],
- "interface": "eth1"
+ ]
}
```
@@ -33,4 +28,3 @@ Configuration variables:
- **defaults** (*Required*): A list of DNS servers to forward default requests to.
- **forwards** (*Optional*): A list of domains that will forward to a specific server.
- **hosts** (*Optional*): A list of hosts to resolve statically.
-- **interface** (*Optional*): If an interface is set, it listens only on this interface. Needs to be set for ResinOS. Normally is `eth0` for ethernet wired connection and `wlan0` for wireless connection.
diff --git a/source/_components/binary_sensor.trend.markdown b/source/_components/binary_sensor.trend.markdown
index 41ac39437eb..5cad94a3b65 100644
--- a/source/_components/binary_sensor.trend.markdown
+++ b/source/_components/binary_sensor.trend.markdown
@@ -23,7 +23,7 @@ binary_sensor:
- platform: trend
sensors:
solar_angle:
- entity_id: sun.sun
+ entity_id: sensor.cpu_speed
```
Configuration variables:
@@ -59,7 +59,7 @@ binary_sensor:
- platform: trend
sensors:
sun_rising:
- entity_id: sun.sun
+ entity_id: sensor.cpu_speed
```
This example creates two sensors to indicate whether the temperature is rising or falling at a rate of at least 3 degrees an hour, and collects samples over a two hour period:
diff --git a/source/_components/calendar.caldav.markdown b/source/_components/calendar.caldav.markdown
index ca93537fec0..8ea6b6ad087 100644
--- a/source/_components/calendar.caldav.markdown
+++ b/source/_components/calendar.caldav.markdown
@@ -13,11 +13,11 @@ ha_release: "0.60"
---
-The `caldav` platform allows you to connect to your WebDav calendar and generate binary sensors. A different sensor will be created for each individual calendar, or you can specify custom calendars which match a criteria you define (more on that below). These sensors will be `on` if you have an on going event in that calendar or `off` if the event is later in time, or if there is no event at all. The WebDav calendar get updated roughly every 10 minutes.
+The `caldav` platform allows you to connect to your WebDav calendar and generate binary sensors. A different sensor will be created for each individual calendar, or you can specify custom calendars which match a criteria you define (more on that below). These sensors will be `on` if you have an on going event in that calendar or `off` if the event is later in time, or if there is no event at all. The WebDav calendar get updated roughly every 15 minutes.
### {% linkable_title Prerequisites %}
-You need to have a CalDav server and eventually credentials for it. This component was tested against [Baikal](http://sabre.io/baikal/) but any component complying with the RFC4791 should work.
+You need to have a CalDav server and credentials for it. This component was tested against [Baikal](http://sabre.io/baikal/) but any component complying with the RFC4791 should work. [Nextcloud](https://nextcloud.com/) and [Owncloud](https://owncloud.org/) work fine.
You might need some additional system packages to compile the Python caldav library. On a Debian based system, install them by:
@@ -30,7 +30,7 @@ $ sudo apt-get install libxml2-dev libxslt1-dev zlib1g-dev
To integrate a WebDav calendar in Home Assistant, add the following section to your `configuration.yaml` file:
```yaml
-# Example configuration.yaml entry
+# Example configuration.yaml entry for baikal
calendar:
- platform: caldav
username: john.doe@test.com
@@ -38,6 +38,15 @@ calendar:
url: https://baikal.my-server.net/cal.php/calendars/john.doe@test.com/default
```
+```yaml
+# Example configuration.yaml entry for nextcloud, calendars will be found automatically
+calendar:
+ - platform: caldav
+ username: john.doe
+ password: !secret caldav
+ url: https://nextcloud.example.com/remote.php/dav
+```
+
This example will generate default binary sensors for each calendar you have in your account. Those calendars will be `on` when there is an ongoing event and `off` if not. Events that last a whole day are ignored in those calendars. You have to setup custom calendars in order to take them into account or for advanced event filtering.
@@ -80,7 +89,7 @@ password:
type: string
calendars:
required: false
- description: List of the calendars to filter. Empty or absent means no filtering.
+ description: List of the calendars to filter. Empty or absent means no filtering, i.e. all calendars will be added.
type: list
custom_calendars:
required: false
@@ -97,7 +106,7 @@ custom_calendars:
type: string
search:
required: true
- pending_charges: Regular expression for filtering the events based on the content of their summary, description or location.
+ description: Regular expression for filtering the events based on the content of their summary, description or location.
type: string
{% endconfiguration %}
@@ -111,3 +120,50 @@ custom_calendars:
- **location**: The event Location.
- **start_time**: Start time of event.
- **end_time**: End time of event.
+
+### {% linkable_title Examples %}
+
+All events of the calendars "private" and "holidays". Note that all day events are not included.
+```yaml
+# Example configuration.yaml entry for nextcloud
+calendar:
+ - platform: caldav
+ url: https://nextcloud.example.com/remote.php/dav
+ username: 'me'
+ password: !secret caldav
+ calendars:
+ - private
+ - holidays
+```
+
+Full example with automation to wake up to music if not holiday. Prerequisite: you have a calendar named "work" where you create calendar entries containing "Holiday".
+
+Custom calendar names are built from the main calendar + name of the custom calendar.
+
+```yaml
+# configuration.yaml
+calendar:
+ - platform: caldav
+ url: https://nextcloud.example.com/remote.php/dav
+ username: 'me'
+ password: !secret caldav
+ custom_calendars:
+ - name: holiday
+ calendar: work
+ search: 'Holiday'
+
+# automations.yaml
+- id: wakeup
+ alias: worktime wakeup
+ trigger:
+ platform: time
+ at: 06:40:00
+ action:
+ - service: media_player.media_play
+ entity_id: media_player.bedroom
+ condition:
+ - condition: state
+ entity_id: calendar.work_holiday
+ state: 'off'
+
+```
diff --git a/source/_components/discovery.markdown b/source/_components/discovery.markdown
index f6629e31598..f08c5306208 100644
--- a/source/_components/discovery.markdown
+++ b/source/_components/discovery.markdown
@@ -79,6 +79,7 @@ Valid values for ignore are:
* `sabnzbd`: SABnzbd downloader
* `samsung_tv`: Samsung TVs
* `sonos`: Sonos speakers
+ * `songpal` : Songpal
* `tellduslive`: Telldus Live
* `wink`: Wink Hub
* `yamaha`: Yamaha media player
diff --git a/source/_components/egardia.markdown b/source/_components/egardia.markdown
index 068920b8ab4..1f0396bde73 100644
--- a/source/_components/egardia.markdown
+++ b/source/_components/egardia.markdown
@@ -2,7 +2,7 @@
layout: page
title: "Egardia"
description: "Instructions how to setup Egardia / Woonveilig within Home Assistant."
-date: 2018-03-02 09:00
+date: 2018-03-13 09:00
sidebar: true
comments: false
sharing: true
@@ -16,29 +16,81 @@ The `egardia` platform enables the ability to control an [Egardia](http://egardi
You will need to know the IP of your alarm panel on your local network. Test if you can login to the panel by browsing to the IP address and log in using your Egardia/Woonveilig account.
-To enable the integration with your alarm panel, add the following lines to your `configuration.yaml` file:
+## {% linkable_title Basic configuration %}
-```yaml
-# Example configuration.yaml entry
-egardia:
- host: YOUR_HOST
- username: YOUR_USERNAME
- password: YOUR_PASSWORD
+To enable the integration with your alarm panel, add the following lines to your `configuration.yaml` file:
+ ```yaml
+ # Example configuration.yaml entry
+ egardia:
+ host: YOUR_HOST
+ username: YOUR_USERNAME
+ password: YOUR_PASSWORD
```
-Configuration variables:
-
-- **host** (*Required*): The local IP address of the Egardia/Woonveilig alarm panel.
-- **username** (*Required*): Username for the Egardia/Woonveilig account.
-- **password** (*Required*): Password for Egardia/Woonveilig account.
-- **version** (*Optional*): The version of the Egardia system. `GATE-01`, `GATE-02` and `GATE-03` are currently supported. Defaults to `GATE-01`.
-- **port** (*Optional*): The port of the alarm panel. Defaults to 80.
-- **report_server_enabled** (*Optional*): Enable reporting by server. Defaults to `False`.
-- **report_server_port** (*Optional*): Port of the Egardia server. Defaults to 52010.
-- **report_server_codes** list (*Optional*): List of codes for the different states.
+{% configuration %}
+host:
+ description: The local IP address of the Egardia/Woonveilig alarm panel.
+ required: true
+ type: string
+username:
+ description: Username for the Egardia/Woonveilig account.
+ required: true
+ type: string
+password:
+ description: Password for Egardia/Woonveilig account.
+ required: true
+ type: string
+version:
+ description: The version of the Egardia system. `GATE-01`, `GATE-02` and `GATE-03` are currently supported.
+ required: false
+ type: string
+ default: 'GATE-01'
+port:
+ description: The port of the alarm panel.
+ required: false
+ type: int
+ default: 80
+report_server_enabled:
+ description: Enable reporting by server.
+ required: false
+ type: string
+ default: false
+report_server_port:
+ description: Port of the Egardia server.
+ required: false
+ type: int
+ default: 52010
+report_server_codes:
+ description: Map of list of codes for the different states.
+ required: false
+ type: map
+ keys:
+ arm:
+ description: List of codes for the 'arm' state.
+ required: false
+ type: list
+ disarm:
+ description: List of codes for the 'disarm' state.
+ required: false
+ type: list
+ armhome:
+ description: List of codes for the 'armhome' state.
+ required: false
+ type: list
+ triggered:
+ description: List of codes for the 'triggered' state.
+ required: false
+ type: list
+ ignore:
+ description: List of codes that will be ignored.
+ required: false
+ type: list
+{% endconfiguration %}
Note that this basic configuration will only enable you to read the armed/armed away/disarmed status of your alarm and will **not** update the status if the alarm is triggered. This is because of how Egardia built their system. The alarm triggers normally go through their servers.
-You can change this, however, using the following procedure. This is a more advanced configuration.
+You can change this, however, using the following procedure. This is a more advanced (and more useful) configuration.
+
+## {% linkable_title Advanced configuration %}
1. Log in to your alarm system's control panel. You will need to access http://[IP of your control panel]. You know this already since you need it in the basic configuration from above. Log in to the control panel with your Egardia/Woonveilig username and password.
2. Once logged in, go to *System Settings*, *Report* and change the Server Address for your primary server to the IP or hostname of your Home Assistant machine. You can leave the port number set to 52010 or change it to anything you like. **Make sure to change the settings of the primary server otherwise the messages will not come through. Note that this will limit (or fully stop) the number of alarm messages you will get through Egardia's / Woonveilig services.** Maybe, that is just what you want. Make sure to save your settings by selecting 'OK'.
@@ -47,9 +99,9 @@ You can change this, however, using the following procedure. This is a more adva
```yaml
# Example configuration.yaml entry
egardia:
- host: YOUR_HOST
- username: YOUR_USERNAME
- password: YOUR_PASSWORD
+ host: YOUR_HOST
+ username: YOUR_USERNAME
+ password: YOUR_PASSWORD
report_server_enabled: True
report_server_port: PORT_OF_EGARDIASERVER (optional, defaults to 52010)
report_server_codes:
@@ -63,5 +115,3 @@ You can change this, however, using the following procedure. This is a more adva
Note that for all code groups (*arm*,*disarm*, etc) multiple codes can be entered since each sensor triggers with a different code and each user of the system has its own arm and disarm codes. Also note that your system will do regular system checks which will be reported as well. Since Home Assistant provides no way of handling them properly, you can enter those codes as *ignore* (again, multiple codes can be used here). The egardia component will ignore these codes and continue returning the old status if it receives any of the codes that are listed as ignore. This is useful for example when you have armed your alarm at night: normally a system check will occur at least once during the night and if that code is not specified anywhere Home Assistant will set the status of the alarm to its default, which is unarmed. This is in fact wrong. Listing the code as ignore changes this behavior and Home Assistant will continue to show the status the alarm is in (disarm, arm, home, triggered) even when system checks occur.
5. Test your setup and enjoy. The component will update if the alarm status changes, including triggers. You can use this to build your own automations and send notifications as you wish. *Note*: previous versions required a separate egardiaserver to be set up. This is no longer necessary and corresponding system services can be removed (using systemctl).
-
-
diff --git a/source/_components/light.limitlessled.markdown b/source/_components/light.limitlessled.markdown
index 5373e34b878..2dcf4d9c7a8 100644
--- a/source/_components/light.limitlessled.markdown
+++ b/source/_components/light.limitlessled.markdown
@@ -90,3 +90,16 @@ When starting Home Assistant, the last recorded state will be shown. This might
If you control your LimitlessLED lights via the MiLight mobile application or other means while Home Assistant is running, Home Assistant can not track those changes and you may observe obsolete information.
This lack of synchronization is due to a LimitlessLED limitation.
+
+
+
+
+
+Because LimitlessLED lights may have an obsolete state, Home Assistant shows the power switch as two buttons rather than a toggle. This ensures that the power can be set with a single click even if the assumed state is wrong. You can change to use the power toggle with [Customize](/docs/configuration/customizing-devices/):
+
+```yaml
+homeassistant:
+ customize_domain:
+ light:
+ assumed_state: false
+```
diff --git a/source/_components/sensor.darksky.markdown b/source/_components/sensor.darksky.markdown
index 6e3a6ced6bd..aebe2326e44 100644
--- a/source/_components/sensor.darksky.markdown
+++ b/source/_components/sensor.darksky.markdown
@@ -9,7 +9,7 @@ sharing: true
footer: true
logo: dark_sky.png
ha_category: Weather
-featured: true
+featured: false
ha_release: "0.30"
redirect_from: /components/sensor.forecast/
ha_iot_class: "Cloud Polling"
diff --git a/source/_components/sensor.speedtest.markdown b/source/_components/sensor.speedtest.markdown
index bc1e8bf9884..f3fe80903d2 100644
--- a/source/_components/sensor.speedtest.markdown
+++ b/source/_components/sensor.speedtest.markdown
@@ -16,12 +16,13 @@ ha_iot_class: "Cloud Polling"
The `speedtest` sensor component uses the [Speedtest.net](https://speedtest.net/) web service to measure network bandwidth performance.
-By default, it will run every hour. The user can change the update frequency in the configuration by defining the minute, hour, and day for a speedtest to run. For the `server_id` check the list of [available servers](https://www.speedtest.net/speedtest-servers.php).
+By default, it will run every hour. The user can change the update frequency in the configuration by defining the minute, hour, and day for a speed test to run. For the `server_id` check the list of [available servers](https://www.speedtest.net/speedtest-servers.php).
To add a Speedtest.net sensor to your installation, add the following to your `configuration.yaml` file:
Once per hour, on the hour (default):
+{% raw %}
```yaml
# Example configuration.yaml entry
sensor:
@@ -31,32 +32,63 @@ sensor:
- download
- upload
```
+{% endraw %}
-Configuration variables:
-
-- **monitored_conditions** array (*Required*): Sensors to display in the frontend.
- - **ping**: Reaction time in ms of your connection (how fast you get a response after you've sent out a request).
- - **download**: Download speed in Mbps.
- - **upload**: Upload speed in Mbps.
-- **server_id** (*Optional*): Specify the speedtest server to perform test against.
-- **minute** (*Optional*): Specify the minute(s) of the hour to schedule the speedtest. Use a list for multiple entries. Default is 0.
-- **hour** (*Optional*): Specify the hour(s) of the day to schedule the speedtest. Use a list for multiple entries. Default is None.
-- **day** (*Optional*): Specify the day(s) of the month to schedule the speedtest. Use a list for multiple entries. Default is None.
-- **manual** (*Optional*): True or False to turn manual mode on or off. Manual mode will disable scheduled speedtests.
+{% configuration %}
+ monitored_conditions:
+ description: Sensors to display in the frontend.
+ required: true
+ type: list
+ keys:
+ ping:
+ description: Reaction time in ms of your connection (how fast you get a response after you've sent out a request).
+ download:
+ description: Download speed (Mbit/s)
+ upload:
+ description: Upload speed (Mbit/s)
+ server_id:
+ description: Specify the speed test server to perform the test against.
+ required: false
+ type: int
+ day:
+ description: Specify the day(s) of the month to schedule the speed test. Use a list for multiple entries.
+ required: false
+ type: [int, list]
+ hour:
+ description: Specify the hour(s) of the day to schedule the speed test. Use a list for multiple entries.
+ required: false
+ type: [int, list]
+ minute:
+ description: Specify the minute(s) of the hour to schedule the speed test. Use a list for multiple entries.
+ required: false
+ type: [int, list]
+ default: 0
+ second:
+ description: Specify the second(s) of the minute to schedule the speed test. Use a list for multiple entries.
+ required: false
+ type: [int, list]
+ default: 0
+ manual:
+ description: True or False to turn manual mode on or off. Manual mode will disable scheduled speed tests.
+ required: false
+ type: bool
+ default: false
+{% endconfiguration %}
This component uses [speedtest-cli](https://github.com/sivel/speedtest-cli) to gather network performance data from Speedtest.net. Please be aware of the potential [inconsistencies](https://github.com/sivel/speedtest-cli#inconsistency) that this component may display.
-When Home Assistant first starts up, the values of the speedtest will show as `Unknown`. You can use the service `sensor.update_speedtest` to run a manual speedtest and populate the data or just wait for the next regularly scheduled test. You can turn on manual mode to disable the scheduled speedtests.
+When Home Assistant first starts up, the values of the speed test will show as `Unknown`. You can use the service `sensor.update_speedtest` to run a manual speed test and populate the data or just wait for the next regularly scheduled test. You can turn on manual mode to disable the scheduled speed tests.
## {% linkable_title Examples %}
-In this section you find some real life examples of how to use this sensor.
+In this section, you find some real-life examples of how to use this sensor.
### {% linkable_title Run periodically %}
Every half hour of every day:
+{% raw %}
```yaml
# Example configuration.yaml entry
sensor:
@@ -69,11 +101,13 @@ sensor:
- download
- upload
```
+{% endraw %}
### {% linkable_title Run at a specific time %}
Everyday at 12:30AM, 6:30AM, 12:30PM, 6:30PM:
+{% raw %}
```yaml
# Example configuration.yaml entry
sensor:
@@ -89,29 +123,33 @@ sensor:
- download
- upload
```
+{% endraw %}
### {% linkable_title Using as a trigger in an automation %}
+{% raw %}
```yaml
# Example configuration.yaml entry
automation:
- - alias: 'Internet Speed Glow Connect Great'
- trigger:
- platform: template
- value_template: '{% raw %}{{ states.sensor.speedtest_download.state|float > 10}}{% endraw %}'
- action:
- service: shell_command.green
- - alias: 'Internet Speed Glow Connect Poor'
- trigger:
- platform: template
- value_template: '{% raw %}{{ states.sensor.speedtest_download.state| float < 10 }}{% endraw %}'
- action:
- service: shell_command.red
+ - alias: "Internet Speed Glow Connect Great"
+ trigger:
+ - platform: template
+ value_template: "{{ states('sensor.speedtest_download')|float > 10 }}"
+ action:
+ - service: shell_command.green
+
+ - alias: "Internet Speed Glow Connect Poor"
+ trigger:
+ - platform: template
+ value_template: "{{ states('sensor.speedtest_download')|float < 10 }}"
+ action:
+ - service: shell_command.red
```
+{% endraw %}
## {% linkable_title Notes %}
- When running on Raspberry Pi, just note that the maximum speed is limited by its 100 Mbit/s LAN adapter.
-- Entries under `monitored_conditions` only control what entities are available under home-assistant, it does not disable the condition from running.
-- If ran frequently, this component has the capability of using a very large amount of data. Frequent updates should be avoided on bandwidth capped connections.
-- While running, network usage is fully utilized. This may have a negative affect on other devices in use the network such as gaming consoles or streaming boxes.
+- Entries under `monitored_conditions` only control what entities are available in Home Assistant, it does not disable the condition from running.
+- If ran frequently, this component has the ability to use a considerable amount of data. Frequent updates should be avoided on bandwidth-capped connections.
+- While running, your network capacity is fully utilized. This may have a negative effect on other devices in use the network such as gaming consoles or streaming boxes.
diff --git a/source/_components/usps.markdown b/source/_components/usps.markdown
index 3971db4ec66..3a7c9a06abe 100644
--- a/source/_components/usps.markdown
+++ b/source/_components/usps.markdown
@@ -32,6 +32,8 @@ Install the latest version of [PhantomJS]( http://phantomjs.org/download.html).
Don't use apt-get to install PhantomJS. This version is not compatible.
+If you use the PhantomJS option, specify `driver: phantomjs` in your `usps` configuration.
+
### Chrome
@@ -60,6 +62,7 @@ Configuration options for the USPS component:
- **username** (*Required*): The username to access the MyUSPS service.
- **password** (*Required*): The password for the given username.
+- **driver** (*Required*): Specify if you're using `phantomjs` or `chrome`.
- **name** (*Optional*): Prefix for sensor names (defaults to "USPS")
diff --git a/source/_components/weather.darksky.markdown b/source/_components/weather.darksky.markdown
index 0352ef6074e..0130a933d05 100644
--- a/source/_components/weather.darksky.markdown
+++ b/source/_components/weather.darksky.markdown
@@ -7,6 +7,7 @@ sidebar: true
comments: false
sharing: true
footer: true
+featured: true
logo: dark_sky.png
ha_category: Weather
ha_release: 0.61
diff --git a/source/_docs/installation.markdown b/source/_docs/installation.markdown
index 4b54abe2d32..bb51e938636 100644
--- a/source/_docs/installation.markdown
+++ b/source/_docs/installation.markdown
@@ -14,7 +14,7 @@ redirect_from: /getting-started/installation/
Beginners should check our [Getting started guide](/getting-started/) first. This is for users that require advanced installations.
-Home Assistant provides multiple ways to be installed. A requirement is that you have [Python 3.5+](https://www.python.org/downloads/) installed.
+Home Assistant provides multiple ways to be installed. A requirement is that you have [Python 3.5.3 or later](https://www.python.org/downloads/) installed.
diff --git a/source/_posts/2018-03-09-release-65.markdown b/source/_posts/2018-03-09-release-65.markdown
index 09d94335436..c198e403ad0 100644
--- a/source/_posts/2018-03-09-release-65.markdown
+++ b/source/_posts/2018-03-09-release-65.markdown
@@ -146,6 +146,21 @@ intent_script:
- Bump pyvera to 0.2.42. Improve event loop robustness. ([@pavoni] - [#13095]) ([vera docs])
- Fix Kodi by updateding jsonrpc-websocket to 0.6 ([@Tadly] - [#13096]) ([media_player.kodi docs])
+## {% linkable_title Release 0.65.4 - March 12 %}
+
+- Fix unavailable property for wemo switch ([@balloob] - [#13106]) ([switch.wemo docs])
+- Hue: Catch if bridge goes unavailable ([@balloob] - [#13109]) ([hue docs]) ([light.hue docs])
+- Adding check for empty discovery info in alarm control panel Egardia. ([@jeroenterheerdt] - [#13114]) ([alarm_control_panel.egardia docs])
+- Throttle Arlo api calls ([@arsaboo] - [#13143]) ([arlo docs])
+
+## {% linkable_title Release Notes 0.65.5 - March 14 %}
+
+- Bugfix HomeKit: Error string values for temperature ([@cdce8p] - [#13162]) ([homekit docs])
+- Revert throttle Arlo api calls ([@arsaboo] - [#13174]) ([arlo docs])
+- Ignore unsupported Sonos favorites ([@amelchio] - [#13195]) ([media_player.sonos docs])
+- Avoid Sonos error when joining with self ([@amelchio] - [#13196]) ([media_player.sonos docs])
+- Fix input_boolean Google Assistant serialize error ([@balloob] - [#13220]) ([google_assistant docs])
+
## {% linkable_title If you need help... %}
...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks.
@@ -694,3 +709,28 @@ Experiencing issues introduced by this release? Please report them in our [issue
[media_player.cast docs]: https://home-assistant.io/components/media_player.cast/
[media_player.kodi docs]: https://home-assistant.io/components/media_player.kodi/
[vera docs]: https://home-assistant.io/components/vera/
+[#13106]: https://github.com/home-assistant/home-assistant/pull/13106
+[#13109]: https://github.com/home-assistant/home-assistant/pull/13109
+[#13114]: https://github.com/home-assistant/home-assistant/pull/13114
+[#13143]: https://github.com/home-assistant/home-assistant/pull/13143
+[@arsaboo]: https://github.com/arsaboo
+[@balloob]: https://github.com/balloob
+[@jeroenterheerdt]: https://github.com/jeroenterheerdt
+[alarm_control_panel.egardia docs]: https://home-assistant.io/components/alarm_control_panel.egardia/
+[arlo docs]: https://home-assistant.io/components/arlo/
+[hue docs]: https://home-assistant.io/components/hue/
+[light.hue docs]: https://home-assistant.io/components/light.hue/
+[switch.wemo docs]: https://home-assistant.io/components/switch.wemo/
+[#13162]: https://github.com/home-assistant/home-assistant/pull/13162
+[#13174]: https://github.com/home-assistant/home-assistant/pull/13174
+[#13195]: https://github.com/home-assistant/home-assistant/pull/13195
+[#13196]: https://github.com/home-assistant/home-assistant/pull/13196
+[#13220]: https://github.com/home-assistant/home-assistant/pull/13220
+[@amelchio]: https://github.com/amelchio
+[@arsaboo]: https://github.com/arsaboo
+[@balloob]: https://github.com/balloob
+[@cdce8p]: https://github.com/cdce8p
+[arlo docs]: https://home-assistant.io/components/arlo/
+[google_assistant docs]: https://home-assistant.io/components/google_assistant/
+[homekit docs]: https://home-assistant.io/components/homekit/
+[media_player.sonos docs]: https://home-assistant.io/components/media_player.sonos/
diff --git a/source/developers/architecture.markdown b/source/developers/architecture.markdown
index afe8a21ef9c..191ed65f7b9 100644
--- a/source/developers/architecture.markdown
+++ b/source/developers/architecture.markdown
@@ -7,7 +7,7 @@ sidebar: true
comments: false
sharing: true
footer: true
-og_image: /images/architecture/ha_architecture.png
+og_image: /images/architecture/ha_architecture.svg
---
Before we dive into the Home Assistant architecture, let's get a clear overview of the home automation landscape as a whole. This way, we can show how the different parts of Home Assistant fit into the picture.
@@ -19,9 +19,9 @@ For more information about each part in this overview,
-
+
+ src='{{site_root}}/images/architecture/home_automation_landscape.svg' />
Overview of the home automation landscape
@@ -34,7 +34,7 @@ The Home Assistant core is responsible for Home Control. Home Assistant contains
* **Timer**: sends a `time_changed` event every 1 second on the event bus.
-
+
Overview of the Home Assistant core architecture
diff --git a/source/developers/internationalization/backend_localization.markdown b/source/developers/internationalization/backend_localization.markdown
index 6d395352b4f..f50d797045a 100644
--- a/source/developers/internationalization/backend_localization.markdown
+++ b/source/developers/internationalization/backend_localization.markdown
@@ -11,9 +11,41 @@ ha_release: 0.64
---
## {% linkable_title Translation Strings %}
-Platform translation strings are stored as JSON in the [home-assistant](https://github.com/home-assistant/home-assistant) repository. These files must be located adjacent to the component/platform they belong to. They are named `strings..json`, unless the component being translated exists in its own directory, in which case the file is simply named `strings.json` in that directory. This file will contain the different strings that will be translatable. Currently only states are supported by the frontend.
+Platform translation strings are stored as JSON in the [home-assistant](https://github.com/home-assistant/home-assistant) repository. These files must be located adjacent to the component/platform they belong to. Components must have their own directory, and the file is simply named `strings.json` in that directory. For platforms, they are named `strings..json` in the platform directory. This file will contain the different strings that will be translatable.
+
+In order to test changes to translation files, the translation strings must be compiled into Home Assistant’s translation directories by running the following script:
+
+```bash
+$ script/translations_develop
+```
After the pull request with the strings file is merged into the `dev` branch, the strings will be automatically uploaded to Lokalise, where contributors can submit translations. The translated strings in Lokalise will be periodically pulled in to the home-assistant repository.
## {% linkable_title States Localization %}
The first step when localizing platform states is to ensure that the states defined in the actual platform code are defined in `snake_case`. The states should not contain capital letters or spaces. Next, the strings file needs to be created. The states should exist under the `state` key, and map the backend state keys to their English translations. [The season sensor localization](https://github.com/home-assistant/home-assistant/pull/12453/commits/bb2f328ce10c3867990e34a88da64e2f8dc7a5c4) is a good example.
+
+## {% linkable_title Configuration Flow Localization %}
+The translation strings for the configuration flow handler are defined under the `config` key. An example strings file below describes the different supported keys:
+
+```json
+{
+ "config": {
+ "title": "This title is shown in the integrations list",
+ "step": {
+ "init": {
+ "title": "The user visible title of the `init` step.",
+ "description": "Markdown that is shown with the step.",
+ "data": {
+ "api_key": "The label for the `api_key` input field"
+ }
+ }
+ },
+ "error": {
+ "invalid_api_key": "This message will be displayed if `invalid_api_key` is returned as a flow error."
+ },
+ "abort": {
+ "stale_api_key": "This message will be displayed if `stale_api_key` is returned as the abort reason."
+ }
+ }
+}
+```
diff --git a/source/help/index.markdown b/source/help/index.markdown
index 4ad053d851a..12e1dfde028 100644
--- a/source/help/index.markdown
+++ b/source/help/index.markdown
@@ -48,6 +48,7 @@ Looking for [talking points](/help/talking-points/) or [trivia](/help/trivia)?
Don't miss the regular [Home Assistant podcasts](https://hasspodcast.io/).
+- [The winners of the Thomas-Krenn-Awards 2018](https://www.thomas-krenn.com/de/tkmag/allgemein/die-gewinner-des-thomas-krenn-awards-2018-stehen-fest/) - March 2018
- [Hausautomations-Schaltzentrale Home Assistant auf Python-Basis](https://www.heise.de/ct/ausgabe/2017-26-Hausautomations-Schaltzentrale-Home-Assistant-3909532.html) - December 2017
- [Using Home Assistant the ARTIK Cloud](https://developer.artik.io/documentation/developer-guide/wireless-iot/hass.html) - September 2017
- [Control home automation hardware with Home Assistant](http://www.linux-magazine.com/Issues/2017/203/Home-Assistant) - August 2017
@@ -61,7 +62,7 @@ Don't miss the regular [Home Assistant podcasts](https://hasspodcast.io/).
- [Monitor IoT devices with Home Assistant and Datadog](https://www.datadoghq.com/blog/monitor-home-assistant/) - June 2017
- [Castálio Podcast - Episódio 102: Marcelo Mello - Red Hat e Automação Residencial com Home Assistant](https://youtu.be/hZq8ucpzjCs) - May 2017
- [Paulus Schoutsen and Home Assistant - Episode 8](http://codepop.com/open-sourcecraft/episodes/paulus-schoutsen/) - March 2017
-- [Zammad, Home Assistant und Freifunk - are the winner of the Thomas-Krenn-Awards 2017](https://www.thomas-krenn.com/de/tkmag/allgemein/zammad-home-assistant-und-freifunk-das-sind-die-gewinner-des-thomas-krenn-awards-2017/) - March 2017
+- [Zammad, Home Assistant and Freifunk - are the winner of the Thomas-Krenn-Awards 2017](https://www.thomas-krenn.com/de/tkmag/allgemein/zammad-home-assistant-und-freifunk-das-sind-die-gewinner-des-thomas-krenn-awards-2017/) - March 2017
- [10 open source software tools for developing IoT applications](http://www.cbronline.com/news/internet-of-things/10-open-source-software-tools-developing-iot-applications/) - March 2017
- [A Look at HASSbian: Raspberry Pi for Home Automation](http://www.piboards.com/2017/03/07/a-look-at-hassbian-raspberry-pi-for-home-automation/)- March 2017
- [Home Assistant with Paulus Schoutsen - Episode 94](https://www.podcastinit.com/episode-94-home-assistant-with-paulus-schoutsen/) - January 2017
diff --git a/source/help/talking-points.markdown b/source/help/talking-points.markdown
index 040bd3ad0ba..44c106d2dec 100644
--- a/source/help/talking-points.markdown
+++ b/source/help/talking-points.markdown
@@ -12,7 +12,7 @@ footer: true
People are starting to present Home Assistant at meetings and get-togethers. Below you find a couple of bullet points for your presentation.
- [Numbers, numbers, numbers](/help/trivia/) and other details
-- Over 750 implementations
+- Over 1000 implementations
- Not depending on cloud services. We like to keep your privacy private
- Control all your devices from a single, mobile-friendly interface
- Written in Python3 with 94% test coverage
diff --git a/source/images/architecture/home_automation_landscape.svg b/source/images/architecture/home_automation_landscape.svg
new file mode 100644
index 00000000000..c0fbca28183
--- /dev/null
+++ b/source/images/architecture/home_automation_landscape.svg
@@ -0,0 +1,904 @@
+
+
+
+
diff --git a/source/images/screenshots/limitlessled_assumed_state.png b/source/images/screenshots/limitlessled_assumed_state.png
new file mode 100644
index 00000000000..ea1b99c3668
Binary files /dev/null and b/source/images/screenshots/limitlessled_assumed_state.png differ