diff --git a/.ruby-version b/.ruby-version
index 58073ef8d7f..35cee72dcbf 100644
--- a/.ruby-version
+++ b/.ruby-version
@@ -1 +1 @@
-2.4.1
\ No newline at end of file
+2.4.3
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/Gemfile.lock b/Gemfile.lock
index 4a9684644f8..9b9a87a02c0 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -68,8 +68,8 @@ GEM
method_source (~> 0.8.1)
slop (~> 3.4)
public_suffix (3.0.0)
- rack (1.6.8)
- rack-protection (1.5.3)
+ rack (1.6.9)
+ rack-protection (1.5.5)
rack
rake (10.5.0)
rb-fsevent (0.10.2)
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 e658ece8fe8..4a90ed5885b 100644
--- a/_config.yml
+++ b/_config.yml
@@ -139,14 +139,14 @@ social:
# Home Assistant release details
current_major_version: 0
-current_minor_version: 64
-current_patch_version: 0
-date_released: 2018-02-26
+current_minor_version: 65
+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-0641---february-27"
+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/_addons/lets_encrypt.markdown b/source/_addons/lets_encrypt.markdown
index fe3894e6f89..c0cbf10bbea 100644
--- a/source/_addons/lets_encrypt.markdown
+++ b/source/_addons/lets_encrypt.markdown
@@ -14,7 +14,7 @@ featured: false
You should not use this if you are also using the [DuckDNS add-on]. The DuckDNS add-on has integrated Let's Encrypt support.
-Setup and manage a [Let's Encrypt](https://letsencrypt.org/) certificate. This addon will create a certificate on the first run and will auto-renew if the certificate is within 30 days of expiration.
+Setup and manage a [Let's Encrypt](https://letsencrypt.org/) certificate. This addon will create a certificate on the first run and will auto-renew if the certificate is within 30 days of expiration. This add-on uses port 80 to verify the certificate request. You will need to stop all other add-ons that also use this port.
```json
{
diff --git a/source/_addons/nginx_proxy.markdown b/source/_addons/nginx_proxy.markdown
index 8fd22956e72..f306fccbe5e 100644
--- a/source/_addons/nginx_proxy.markdown
+++ b/source/_addons/nginx_proxy.markdown
@@ -15,13 +15,23 @@ In the `http` section of the `configuration.yaml` file remove `ssl_certificate`
```json
{
- "domain": "home.example.com"
+ "domain": "home.example.com",
+ "certfile": "fullchain.pem",
+ "keyfile": "privkey.pem",
+ "customize": {
+ "active": false,
+ "default": "nginx_proxy_default*.conf",
+ "servers": "nginx_proxy/*.conf"
+ }
}
```
Configuration variables:
- **domain** (*Required*): Domain they will proxy run with it.
+- **certfile** (*Required*): Certificate file to use in the /ssl dir.
+- **keyfile** (*Required*): Private key file to use in the /ssl dir.
+- **customize** (*Optional*): If true, additional NGINX configuration files for the default server and additional servers are read from files in the /share dir specified by the `default` and `servers` variables.
It is possible to deactivate port 80 if you need this for things like `emulate_hue`. Remove the host port from Network option of this add-on.
diff --git a/source/_components/alarm_control_panel.egardia.markdown b/source/_components/alarm_control_panel.egardia.markdown
index 3fdd4d57532..314a1fcd11b 100644
--- a/source/_components/alarm_control_panel.egardia.markdown
+++ b/source/_components/alarm_control_panel.egardia.markdown
@@ -12,57 +12,5 @@ ha_release: 0.51
ha_category: Alarm
---
-The `egardia` platform enables the ability to control an [Egardia](http://egardia.com/)/[Woonveilig](http://woonveilig.nl) control panel. These alarm panels are known under different brand names across the world, including Woonveilig in the Netherlands. This was tested on the GATE-01, GATE-02 and GATE-03 versions of the Egardia/Woonveilig platform.
-
-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:
-
-```yaml
-# Example configuration.yaml entry
-alarm_control_panel:
- - platform: 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.
-- **name** (*Optional*): Name to use for the alarm panel. Defaults to `Egardia`.
-- **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.
-
-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.
-
-1. Log in into 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.
-1. 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'.
-1. On your Home Assistant machine run `$ sudo python3 egardiaserver.py`. Refer to the [python-egardia repository](https://github.com/jeroenterheerdt/python-egardia) for detailed documentation on parameters. This will receive status codes from your alarm control panel and display them. You will need the codes to include in your configuration.yaml. Make sure to change the status of your alarm to all states (disarm, arm, home) by all means possible (all users, remotes, web login, app) as well as trigger the alarm in all ways possible to get 100% coverage. **Before triggering the alarm it might be good to disable the siren temporarily (can be done in Panel Settings).**
-1. Once you have the codes, update your `configuration.yaml`:
- ```yaml
- # Example configuration.yaml entry
- alarm_control_panel:
- - platform: egardia
- 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:
- arm: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX
- disarm: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX
- home: XXXXXXXXXXXXXXXX
- triggered: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX
- ignore: XXXXXXXXXXXXXXXX
- ```
-
-Note that for *triggered*, *arm* and *disarm* 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).
+The `egardia` platform allows you to integrate your [Egardia](http://www.egardia.com)/[Woonveilig](http://www.woonveilig.nl) alarm control panel in Home Assistant.
+You will need to set up your [Egardia hub](/components/egardia/).
diff --git a/source/_components/binary_sensor.bmw_connected_drive.markdown b/source/_components/binary_sensor.bmw_connected_drive.markdown
new file mode 100755
index 00000000000..6c38dc813ea
--- /dev/null
+++ b/source/_components/binary_sensor.bmw_connected_drive.markdown
@@ -0,0 +1,20 @@
+---
+layout: page
+title: "BMW connected drive"
+description: "Instructions on how to setup your BMW connected drive account with Home Assistant."
+date: 2018-02-22 23:00
+sidebar: true
+comments: false
+sharing: true
+footer: true
+logo: bmw.png
+ha_category: Binary Sensor
+ha_release: 0.66
+---
+
+
+The `bmw_connected_drive` platform allows you to import data on your BMW into Home Assistant.
+
+The binary sensors will be automatically configured if 'bmw_connected_drive' component is configured.
+
+For more configuration information see the [bmw_connected_drive component](/components/bmw_connected_drive/) documentation.
diff --git a/source/_components/binary_sensor.egardia.markdown b/source/_components/binary_sensor.egardia.markdown
new file mode 100644
index 00000000000..8df482bf5bf
--- /dev/null
+++ b/source/_components/binary_sensor.egardia.markdown
@@ -0,0 +1,19 @@
+---
+layout: page
+title: "Egardia Binary Sensor"
+description: "Instructions how to integrate Egardia / Woonveilig binary sensors into Home Assistant."
+date: 2018-03-02 09:00
+sidebar: true
+comments: false
+sharing: true
+footer: true
+logo: egardia.png
+ha_release: 0.65
+ha_category: Binary Sensor
+ha_iot_class: "Polling"
+---
+
+The `egardia` platform allows you to get data from your [Egardia](http://www.egardia.com)/[Woonveilig](http://www.woonveilig.nl) binary sensors from within Home Assistant.
+Currently only door contacts are supported. IR sensors are not supported and will probably never be since their status cannot be read outside of the alarm control panel. Smoke sensors and others might be added but currently are not supported.
+
+You will need to set up your [Egardia hub](/components/egardia/).
diff --git a/source/_components/binary_sensor.hikvision.markdown b/source/_components/binary_sensor.hikvision.markdown
index ae37f2e9797..803e8b40a2a 100644
--- a/source/_components/binary_sensor.hikvision.markdown
+++ b/source/_components/binary_sensor.hikvision.markdown
@@ -17,6 +17,10 @@ The Hikvision Binary Sensor is a platform that parses the event stream of a [Hik
The platform will automatically add all sensors to Home Assistant that are configured within the camera/nvr interface to "Notify the surveillance center" as a trigger. If you would like to hide a sensor type you can do so by either unchecking "Notify the surveillance center" in the camera configuration or by using the "ignored" customize option detailed below.
+
+In order for the sensors to work the hikvision user must have the 'Remote: Notify Surveillance Center / Trigger Alarm Output' permission which can be enabled from the user managment section of the web interace. Also the 'WEB Authentication' needs to be set to 'digest/basic' in the security / authentication section.
+
+
For example, if you configure a camera with the name "Front Porch" that has motion detection and line crossing events enabled to notify the surveillance center the following binary sensors will be added to Home Assistant:
```
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/bmw_connected_drive.markdown b/source/_components/bmw_connected_drive.markdown
index 92bd4723cdf..21e7e04ecf5 100644
--- a/source/_components/bmw_connected_drive.markdown
+++ b/source/_components/bmw_connected_drive.markdown
@@ -22,8 +22,7 @@ To enable this component in your installation, add the following to your
```yaml
# Example configuration.yaml entry
bmw_connected_drive:
- mycar:
- name: Car 1
+ name:
username: USERNAME_BMW_CONNECTED_DRIVE
password: PASSWORD_BMW_CONNECTED_DRIVE
country: COUNTRY_BMW_CONNECTED_DRIVE
diff --git a/source/_components/calendar.caldav.markdown b/source/_components/calendar.caldav.markdown
index 6ae9f8c36a4..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:
@@ -29,13 +29,51 @@ $ 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 for baikal
+calendar:
+ - platform: caldav
+ username: john.doe@test.com
+ password: !secret caldav
+ 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.
+
+
+### {% linkable_title Custom calendars %}
+
+You have the possibility to create multiple binary sensors for events that match certain conditions.
+
```yaml
# Example configuration.yaml entry
calendar:
- platform: caldav
+ username: john.doe@test.com
+ password: !secret caldav
url: https://baikal.my-server.net/cal.php/calendars/john.doe@test.com/default
+ custom_calendars:
+ - name: 'HomeOffice'
+ calendar: 'Agenda'
+ search: 'HomeOffice'
+ - name: 'WarmupFlat'
+ calendar: 'Agenda'
+ search: 'Warmup'
```
+This will create two binary sensors for the calendar name Agenda: "HomeOffice" and "WarmupFlat". Those sensors will be `on` if there is an ongoing event matching the regular expression specified in `search`. In custom calendars, events that last a whole day are taken into account.
+
+Please note that when you configure custom calendars, the default ones are not created anymore.
+
{% configuration %}
url:
required: true
@@ -51,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
@@ -68,7 +106,7 @@ custom_calendars:
type: string
search:
required: true
- pending_charges: Regular expression for filtering the events
+ description: Regular expression for filtering the events based on the content of their summary, description or location.
type: string
{% endconfiguration %}
@@ -83,17 +121,49 @@ custom_calendars:
- **start_time**: Start time of event.
- **end_time**: End time of event.
-### {% linkable_title Sensor attributes %}
+### {% linkable_title Examples %}
+All events of the calendars "private" and "holidays". Note that all day events are not included.
```yaml
-# Example configuration.yaml entry
+# Example configuration.yaml entry for nextcloud
calendar:
- platform: caldav
- url: https://baikal.my-server.net/cal.php/calendars/john.doe@test.com/default
- username: john.doe@test.com
+ 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: 'HomeOffice'
- calendar: 'Agenda'
- search: 'HomeOffice'
+ - 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/camera.onvif.markdown b/source/_components/camera.onvif.markdown
index f4281405bc8..6b772dfda60 100644
--- a/source/_components/camera.onvif.markdown
+++ b/source/_components/camera.onvif.markdown
@@ -30,9 +30,12 @@ Configuration variables:
- **name** (*Optional*): Override the name of your camera.
- **username** (*Optional*): The username for the camera.
- **password** (*Optional*): The password for the camera.
-- **port** (*Optional*): The port for the camera. This defaults to 5000
+- **port** (*Optional*): The port for the camera. This defaults to 5000.
+- **profile** (*Optional*): Video profile that will be used to obtain the stream. This defaults to 0. More details below.
- **extra_arguments** (*Optional*): Extra options to pass to `ffmpeg`, e.g. image quality or video filter options. More details in [FFmpeg component](/components/ffmpeg).
+Most of the Onvif cameras support more than one audio/video Profile. Each profile provides different image quality. Usually, the first profile has the highest quality, and it is the profile used by default. However, you may want to use a lower quality image. One of the reasons may be that your hardware isn't able to render the highest quality image in real-time - especially when running on Raspberry Pi. Therefore you can choose which profile do you want to use by setting in config `profile` variable.
+
### {% linkable_title Service `camera.onvif_ptz` %}
If your ONVIF camera supports PTZ, you will be able to pan, tilt or zoom your camera.
diff --git a/source/_components/camera.proxy.markdown b/source/_components/camera.proxy.markdown
new file mode 100644
index 00000000000..c5e92bc3d20
--- /dev/null
+++ b/source/_components/camera.proxy.markdown
@@ -0,0 +1,90 @@
+---
+layout: page
+title: "Camera Proxy"
+description: "Instructions how to integrate a camera proxy within Home Assistant."
+date: 2018-03-08 19:00
+sidebar: true
+comments: false
+sharing: true
+footer: true
+ha_category: Camera
+ha_release: 0.65
+---
+
+
+The `proxy` camera platform allows you to pass another camera's output through post-processing routines and generate a new camera with the post-processed output.
+
+The current post-processing supports resizing the image/MJPEG as well as limiting the maximum refresh rate.
+
+The current proxy capabilities are intended to reduce the camera bandwidth for slower internet connections.
+
+To enable this camera in your installation, you must first have an existing working camera configured in Home Assistant. Next, add the following to your `configuration.yaml` file:
+
+```yaml
+# Example configuration.yaml entry
+camera:
+ - platform: proxy
+ entity_id: camera.
+ max_stream_width: 360
+ max_image_width: 720
+```
+
+{% configuration %}
+ entity_id:
+ description: The ID of another Home Assistant camera to post-process.
+ required: true
+ type: string
+ name:
+ description: This parameter allows you to override the name of your camera.
+ required: false
+ type: string
+ max_image_width:
+ description: The maximum width of single images taken from the camera (aspect ratio will be maintained).
+ required: false
+ type: integer
+ max_stream_width:
+ description: The maximum width of the MJPEG stream from the camera (aspect ratio will be maintained).
+ required: false
+ type: integer
+ image_quality:
+ description: The quality level used for resulting JPEG for snapshots.
+ required: false
+ type: integer
+ default: 75
+ stream_quality:
+ description: The quality level used for resulting MJPEG streams.
+ required: false
+ type: integer
+ default: 75
+ image_refresh_rate:
+ description: The minimum time in seconds between generating successive image snapshots.
+ required: false
+ type: float
+ force_resize:
+ description: Resize the image even if the resulting image would take up more bandwidth than the original.
+ required: false
+ type: boolean
+ cache_images:
+ description: Preserve the last image and re-send in the case the camera is not responding.
+ required: false
+ type: boolean
+{% endconfiguration %}
+
+
+## {% linkable_title Examples %}
+
+Example of using a Camera proxy along with a Foscam camera:
+
+```yaml
+camera:
+ - platform: foscam
+ ip: 192.168.1.10
+ username: foscam_camera
+ password: camera_password
+ name: mycamera
+ - platform: proxy
+ entity_id: camera.mycamera
+ max_stream_width: 360
+ max_image_width: 480
+ image_refresh_rate: 5.0
+```
diff --git a/source/_components/climate.zwave.markdown b/source/_components/climate.zwave.markdown
index 3c5f96f7247..0669e0dfc69 100644
--- a/source/_components/climate.zwave.markdown
+++ b/source/_components/climate.zwave.markdown
@@ -46,12 +46,12 @@ automation:
at: "20:00:00"
action:
- service: climate.set_operation_mode
- entity_id: climate.remotec_zxt120_heating_1_id
data:
+ entity_id: climate.remotec_zxt120_heating_1_id
operation_mode: Heat
- service: climate.set_temperature
- entity_id: climate.remotec_zxt120_heating_1_39
data:
+ entity_id: climate.remotec_zxt120_heating_1_39
temperature: 24
```
@@ -65,8 +65,8 @@ automation:
at: "21:00:00"
action:
- service: climate.set_operation_mode
- entity_id: climate.remotec_zxt120_heating_1_id
data:
+ entity_id: climate.remotec_zxt120_heating_1_id
operation_mode: 'Off'
```
diff --git a/source/_components/cover.group.markdown b/source/_components/cover.group.markdown
new file mode 100644
index 00000000000..c29b4b46a1d
--- /dev/null
+++ b/source/_components/cover.group.markdown
@@ -0,0 +1,43 @@
+---
+layout: page
+title: "Cover Group"
+description: "Instructions how to setup grouped covers in Home Assistant."
+date: 2018-02-11 10:00
+sidebar: true
+comments: false
+sharing: true
+footer: true
+ha_category: Cover
+ha_release: 0.66
+ha_iot_class: "Local Push"
+logo: home-assistant.png
+---
+
+The `group` platform can create a cover that combines several cover entities into one.
+
+To enable `Cover Groups` in your installation, add the following to your `configuration.yaml` file:
+
+```yaml
+# Example configuration.yaml entry
+cover:
+ - platform: group
+ entities:
+ - cover.hall_window
+ - cover.living_room_window
+```
+
+{% configuration %}
+ name:
+ description: Name to use in the frontend.
+ required: false
+ type: string
+ default: "Cover Group"
+ entities:
+ description: List of all cover entities you want to control.
+ required: true
+ type: [string | list]
+{% endconfiguration %}
+
+## {% linkable_title Functionality %}
+
+It works best if you group covers with the same supported features together (like support for `open`/`close`/`stop`/`position`/`tilt controls`), but is not limited to it. In case you have bundled covers with different features together, the controls will only affect those covers that support the actions.
diff --git a/source/_components/deconz.markdown b/source/_components/deconz.markdown
index abebcec8039..184e553f194 100644
--- a/source/_components/deconz.markdown
+++ b/source/_components/deconz.markdown
@@ -32,9 +32,11 @@ deconz:
#### {% linkable_title Supported Device types %}
- [Zigbee Lights](/components/light.deconz/)
+- [Consumption Sensors](/components/sensor.deconz/)
- [Humidity Sensors](/components/sensor.deconz/)
- [Light Level Sensors](/components/sensor.deconz/)
- [OpenClose Detectors](/components/binary_sensor.deconz/)
+- [Power Sensors](/components/sensor.deconz/)
- [Presence Detectors](/components/binary_sensor.deconz/)
- [Pressure Sensors](/components/sensor.deconz/)
- [Switches (Remote Controls)](/components/sensor.deconz/)
diff --git a/source/_components/device_tracker.gpslogger.markdown b/source/_components/device_tracker.gpslogger.markdown
index 1f1437dca27..3b1bbb33201 100644
--- a/source/_components/device_tracker.gpslogger.markdown
+++ b/source/_components/device_tracker.gpslogger.markdown
@@ -39,7 +39,7 @@ After the launch, go to **General Options**. Enable **Start on bootup** and **St
GPSLogger Settings
-Go to **Logging details** and disable **Log to GPX**. **Log to KML**, and **Log to NMEA**. Enable **Log to custom URL**.
+Go to **Logging details** and disable **Log to GPX**, **Log to KML** and **Log to NMEA**. Enable **Log to custom URL**.
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/downloader.markdown b/source/_components/downloader.markdown
index 53063587d69..469c13d2b79 100644
--- a/source/_components/downloader.markdown
+++ b/source/_components/downloader.markdown
@@ -42,3 +42,29 @@ This will download the file from the given URL.
| `subdir` | yes | Download into subdirectory of **download_dir** |
| `filename` | yes | Determine the filename. |
| `overwrite` | yes | Whether to overwrite the file or not, defaults to `false`. |
+
+### {% linkable_title Download Status Events %}
+
+When a download finished successfully, Home Assistant will emit a 'downloader_download_completed' event to the event bus which you can use to write automations against.
+In case download failed another event 'downloader_download_failed' is emitted to indicate that the download did not complete successfully.
+
+Along with the event the following payload parameters are available:
+
+| Parameter | Description |
+|-----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `url` | The `url` that was requested.|
+| `filename` | The `name` of the file that was being downloaded.|
+
+#### Example Automation:
+
+```yaml
+- alias: Download Failed Notification
+ trigger:
+ platform: event
+ event_type: downloader_download_failed
+ action:
+ service: persistent_notification.create
+ data_template:
+ message: "{{trigger.event.data.filename}} download failed"
+ title: "Download Failed"
+ ```
diff --git a/source/_components/egardia.markdown b/source/_components/egardia.markdown
new file mode 100644
index 00000000000..1f0396bde73
--- /dev/null
+++ b/source/_components/egardia.markdown
@@ -0,0 +1,117 @@
+---
+layout: page
+title: "Egardia"
+description: "Instructions how to setup Egardia / Woonveilig within Home Assistant."
+date: 2018-03-13 09:00
+sidebar: true
+comments: false
+sharing: true
+footer: true
+ha_category: Hub
+ha_release: 0.65
+logo: egardia.png
+---
+
+The `egardia` platform enables the ability to control an [Egardia](http://egardia.com/)/[Woonveilig](http://woonveilig.nl) control panel. These alarm panels are known under different brand names across the world, including Woonveilig in the Netherlands. This was tested on the WL-1716, GATE-01, GATE-02 and GATE-03 versions of the Egardia/Woonveilig platform. Not only will you integrate your alarm control panel, supported sensors (door contacts at this moment) will be added automatically (hidden by default).
+
+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.
+
+## {% linkable_title Basic configuration %}
+
+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 %}
+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 (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'.
+3. The Egardia component relies on capturing the status codes that your alarm emits when something happens (status change or trigger). These codes will be unique for every situation - i.e. the code emitted by the alarm when a sensor is triggered is unique to that sensor. Also, if you have multiple users or remotes, each remote has unique codes that are emitted by the alarm when status is changed using that remote or by that user. For the Egardia component to work correctly you will need to capture the codes. To do this, on your Home Assistant machine run `$ sudo python3 egardiaserver.py`. Refer to the [python-egardia repository](https://github.com/jeroenterheerdt/python-egardia) for detailed documentation on parameters. This will receive status codes from your alarm control panel and display them. Record the codes shown as well as the status they relate to (see step 4 below). Make sure to change the status of your alarm to all states (disarm, arm, home) by all means possible (all users, remotes, web login, app) as well as trigger the alarm in all ways possible to get 100% coverage of all the codes the alarm system generates. You will need to run this script once and stop it once you have captured all the possible codes. Also, if you ever add users, remotes or sensors to your alarm system, make sure to re-run the script to capture the extra codes so you can update your configuration (see step 4 below). **For comfort, before triggering the alarm it might be good to disable the siren temporarily (can be done in Panel Settings).**
+4. Once you have the codes, update your `configuration.yaml`:
+ ```yaml
+ # Example configuration.yaml entry
+ egardia:
+ 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:
+ arm: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX
+ disarm: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX
+ armhome: XXXXXXXXXXXXXXXX
+ triggered: XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX, XXXXXXXXXXXXXXXX
+ ignore: XXXXXXXXXXXXXXXX
+ ```
+
+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/fan.xiaomi_miio.markdown b/source/_components/fan.xiaomi_miio.markdown
index 99adf8ff4e3..20cc4573500 100644
--- a/source/_components/fan.xiaomi_miio.markdown
+++ b/source/_components/fan.xiaomi_miio.markdown
@@ -71,6 +71,15 @@ name:
## {% linkable_title Platform Services %}
+### {% linkable_title Service `fan.set_speed` %}
+
+Set the fan speed/operation mode.
+
+| Service data attribute | Optional | Description |
+|---------------------------|----------|---------------------------------------------------------------------|
+| `entity_id` | yes | Only act on a specific air purifier. Else targets all. |
+| `speed` | no | Fan speed. Valid values are 'Auto', 'Silent', 'Favorite' and 'Idle' |
+
### {% linkable_title Service `fan.xiaomi_miio_set_buzzer_on` %}
Turn the buzzer on.
diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown
index 910008678dc..029bb2e35c2 100644
--- a/source/_components/google_assistant.markdown
+++ b/source/_components/google_assistant.markdown
@@ -41,7 +41,6 @@ google_assistant:
aliases:
- bright lights
- entry lights
- type: light
light.living_room:
expose: false
room: living room
@@ -68,7 +67,7 @@ agent_user_id:
required: false
type: string
api_key:
- description: An API Key generated for the project from [Google Console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview) which allows you to update devices without unlinking and relinking an account (see setup below). If not provided then the request_sync service is not exposed.
+ description: An API Key generated for the project from [Google Console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview) which allows you to update devices without unlinking and relinking an account (see step 9 below). If not provided then the `google_assistant.request_sync` service is not exposed. It is recommended to set up this configuration key as it also allows the usage of the following command, "Ok Google, sync my devices". Once you have setup this componenet you will need to call this service (or command) each time you add a new device that you wish to control via the Google Assistant integration.
required: false
type: string
expose_by_default:
@@ -102,10 +101,6 @@ entity_config:
description: Aliases that can also be used to refer to this entity
required: false
type: list
- type:
- description: Override how Google Assistant interprets the domain of the entity. For example, set to `light` for a switch entity to have it be handled as a light.
- required: false
- type: string
room:
description: Allows for associating this device to a Room in Google Assistant. This is currently non-functional, but will be enabled in the near future.
required: false
@@ -115,15 +110,16 @@ entity_config:
### {% linkable_title Available domains %}
Currently, the following domains are available to be used with Google Assistant, listed with their default types:
-- group = switch (on/off)
-- scene = scene (on)
-- script = scene (on)
-- switch = switch (on/off)
-- fan = switch (on/off)
-- light = light (on/off/brightness/rgb color/color temp)
-- cover = switch (on/off/set position (brightness) )
-- media_player = switch (on/off/set volume (brightness) )
-- climate = thermostat (temperature setting)
+- group (on/off)
+- input boolean (on/off)
+- scene (on)
+- script (on)
+- switch (on/off)
+- fan (on/off)
+- light (on/off/brightness/rgb color/color temp)
+- cover (on/off/set position (via set brightness))
+- media_player (on/off/set volume (via set brightness))
+- climate (temperature setting)
It's very important that you use very long strings for `client_id` and `access_token`. Those are essentially the credentials to your Home Assistant instance. You can generate them with the following command:
@@ -139,7 +135,7 @@ If you're not using Linux, you can use sites such as [this one](https://www.brow
a. Add/Import project
b. Click on `BUILD` on the `Smart home` card
c. Type in your home assistant url: `https://[YOUR HOME ASSISTANT URL:PORT]/api/google_assistant`, replace the `[YOUR HOME ASSISTANT URL:PORT]` with the domain / ip address and the port under which your Home Assistant is reachable.
- d. Click `Done`
+ d. Click `Done`. Then click on `Overview`, which will lead you to the app details screen.
2. You'll need to fill out most of the information on that page, but none of it really matters since you won't be addressing the App directly, only through the Smart Home functionality built into Google Assistant.
3. The final item on that page `Account linking` is required for your app to interact with Home Assistant.
a. Grant type: `Implicit`
@@ -159,7 +155,7 @@ If you're not using Linux, you can use sites such as [this one](https://www.brow
9. If you want to use the `google_assistant.request_sync` service, to update devices without unlinking and relinking, in Home Assistant, then enable Homegraph API for your project:
a. Go to the [cloud console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview)
b. Select your project and click Enable Homegraph API
- c. Go to Credentials and select API Key from Create Credentials
+ c. Go to Credentials, which you can find on the left navigation bar under the key icon, and select API Key from Create Credentials
d. Note down the generated API Key and use this in the configuration
### {% linkable_title Troubleshooting the request_sync service %}
diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown
index e67fcd744c9..f9e8e84b9eb 100644
--- a/source/_components/homekit.markdown
+++ b/source/_components/homekit.markdown
@@ -12,7 +12,7 @@ ha_release: 0.64
logo: apple-homekit.png
---
-The `HomeKit` component allows you to forward entities from Home Assistant to Apple `HomeKit`, so they could be controlled from Apple `Home` app and `Siri`.
+The `HomeKit` component allows you to forward entities from Home Assistant to Apple `HomeKit`, so they could be controlled from Apple `Home` app and `Siri`. Please make sure that you have read the [considerations](#considerations) listed below to save you some trouble later.
{% configuration %}
homekit:
@@ -20,18 +20,55 @@ The `HomeKit` component allows you to forward entities from Home Assistant to Ap
required: true
type: map
keys:
- pincode:
- description: Pin code required during setup of HomeKit Home Assistant accessory. The format needs to be 'XXX-XX-XXX' where X is a number between 0 and 9.
+ auto_start:
+ description: Flag if the HomeKit Server should start automatically after the Home Assistant Core Setup is done. ([Disable Auto Start](#disable-auto-start))
required: false
- type: string
- default: '"123-45-678"'
+ type: boolean
+ default: true
port:
description: Port for the HomeKit extension.
required: false
type: int
- default: 51826
+ default: 51827
+ filter:
+ description: Filter entities to available in the `Home` app. ([Configure Filter](#configure-filter))
+ required: false
+ type: map
+ keys:
+ include_domains:
+ description: Domains to be included.
+ required: false
+ type: list
+ include_entities:
+ description: Entities to be included.
+ required: false
+ type: list
+ exclude_domains:
+ description: Domains to be excluded.
+ required: false
+ type: list
+ exclude_entities:
+ description: Entities to be excluded.
+ required: false
+ type: list
+ entity_config:
+ description: Configuration for specific entities. All subordinate keys are the corresponding entity ids to the domains, e.g. `alarm_control_panel.alarm`.
+ required: false
+ type: map
+ keys:
+ alarm_control_panel:
+ description: Additional options for `alarm_control_panel` entities.
+ required: false
+ type: map
+ keys:
+ code:
+ description: Code to arm or disarm the alarm in the frontend.
+ required: false
+ type: string
+ default: ''
{% endconfiguration %}
+
## {% linkable_title Setup %}
To enable the `HomeKit` component in Home Assistant, add the following to your configuration file:
@@ -39,25 +76,108 @@ To enable the `HomeKit` component in Home Assistant, add the following to your c
```yaml
# Example for HomeKit setup
homekit:
- pincode: '123-45-678'
```
-
It is not recommended to choose '123-45-678' as your pin code!
-
-After Home Assistant has started, all supported entities (see the [list](#supported-components) below which components are already integrated) will be exposed to `HomeKit`. To add them:
-1. Open the `Home` App.
-2. Choose `Add Accessory` and then `Don't Have a Code or Can't Scan?`.
-3. The `Home Assistant` Bridge should be listed there. Select it and follow the instructions to complete setup.
+After Home Assistant has started, the entities specified by the filter are exposed to `HomeKit` if the are [supported](#supported-components). To add them:
+1. Open the Home Assistant frontend. A new card will display the `pin code`.
+1. Open the `Home` app.
+2. Choose `Add Accessory`, than select `Don't Have a Code or Can't Scan?` and enter the `pin code`.
+4. Confirm the you are adding an `Uncertified Accessory` by clicking on `Add Anyway`.
+5. Follow the setup be clicking on `Next` and lastly `Done` in the top right hand corner.
+6. The `Home Assistant` Bridge and the Accessories should now be listed in the `Home` app.
After the setup is completed you should be able to control your Home Assistant components through `Home` and `Siri`.
+
+## {% linkable_title Considerations %}
+
+
+### {% linkable_title Accessory ID %}
+
+Currently this component uses the `entity_id` to generate a unique `accessory id (aid)` for `HomeKit`. The `aid` is used to identify a device and save all configurations made for it. This however means that if you decide to change an `entity_id` all configurations for this accessory made in the `Home` app will be lost.
+
+### {% linkable_title Persistence Storage %}
+
+Unfortunately `HomeKit` doesn't support any kind of persistence storage, only the configuration for accessories that are added to the `Home Assistant Bridge` are kept. To avoid problems it is recommended to use an automation to always start `HomeKit` with at least the same entities setup. If for some reason some entities are not setup, their config will be deleted. (State unknown or similar will not cause any issues.)
+
+A common situation might be if you decide to disable parts of the configuration for testing. Please make sure to disable `auto start` and `turn off` the `Start HomeKit` automation (if you have one).
+
+
+## {% linkable_title Disable Auto Start %}
+
+Depending on your individual setup, it might be necessary to disable `Auto Start` for all accessories to be available for `HomeKit`. Only those entities that are fully setup when the `HomeKit` component is started, can be added. To start `HomeKit` when `auto_start: False`, you can call the service `homekit.start`.
+
+This can be automated using an `automation`.
+
+{% raw %}
+```yaml
+# Example for Z-Wave
+homekit:
+ auto_start: False
+
+automation:
+ - alias: 'Start HomeKit'
+ trigger:
+ - platform: event
+ event_type: zwave.network_ready
+ action:
+ - service: homekit.start
+```
+{% endraw %}
+
+{% raw %}
+```yaml
+# Example using a delay after start of Home Assistant
+homekit:
+ auto_start: False
+
+automation:
+ - alias: 'Start HomeKit'
+ trigger:
+ - platform: homeassistant
+ event: start
+ action:
+ - delay: 00:05 # Waits 5 minutes
+ - service: homekit.start
+```
+{% endraw %}
+
+
+## {% linkable_title Configure Filter %}
+
+To limit which entities are being exposed to `HomeKit`, you can use the `filter` parameter. By default no entity will be excluded. Keep in mind though that only supported components can be added.
+
+
## {% linkable_title Supported Components %}
The following components are currently supported:
| Component | Type Name | Description |
| --------- | --------- | ----------- |
-| cover | Window | All covers that support `set_cover_position`. |
+| alarm_control_panel | SecuritySystem | All security systems. |
+| climate | Thermostat | All climate devices. |
+| cover | WindowCovering | All covers that support `set_cover_position`. |
+| light | Light | Support for `on / off`, `brightness` and `rgb_color`. |
| sensor | TemperatureSensor | All sensors that have `Celsius` and `Fahrenheit` as their `unit_of_measurement`. |
+| sensor | HumiditySensor | All sensors that have `%` as their `unit_of_measurement` |
+| switch / remote / input_boolean / script | Switch | All represented as switches. |
-
Currently only devices that are setup when Home Assistant is starting can be exposed to `HomeKit`. This means that especially `Z-Wave` components are currently not supported, since they will be setup afterwards. We are working on a solution for this problem.
+
+## {% linkable_title Error reporting %}
+
+If you encounter any issues or bug and want to report them on `GitHub`, please follow these steps to make it easier for others to help and get your issue solved.
+
+1. Enable debugging mode:
+```yaml
+logger:
+ default: warning
+ logs:
+ homeassistant.components.homekit: debug
+```
+2. Reproduce the bug / problem you have encountered.
+3. Stop Home Assistant and copy the log from the log file. That is necessary since some errors only get logged, when Home Assistant is being shutdown.
+4. Follow this link: [home-assistant/issues/new](https://github.com/home-assistant/home-assistant/issues/new?labels=component: homekit) and open a new issue.
+5. Fill out all fields and especially include the following information:
+ - The configuration entries for `homekit` and the `component` that is causing the issue.
+ - The log / traceback you have generated before.
+ - Screenshots of the failing entity in the `states` panel.
diff --git a/source/_components/image_processing.dlib_face_identify.markdown b/source/_components/image_processing.dlib_face_identify.markdown
index 1e47bf13e40..4f3d267f534 100644
--- a/source/_components/image_processing.dlib_face_identify.markdown
+++ b/source/_components/image_processing.dlib_face_identify.markdown
@@ -36,3 +36,7 @@ Configuration variables:
- **entity_id** (*Required*): A camera entity id to get picture from.
- **name** (*Optional*): This parameter allows you to override the name of your `image_processing` entity.
- **faces** array (*Required*): List of faces sources.
+
+
+If the platform fails to load because it could not install its requirement, install cmake: `sudo apt-get install cmake`.
+
diff --git a/source/_components/influxdb.markdown b/source/_components/influxdb.markdown
index 2e13714e90f..3f606caf030 100644
--- a/source/_components/influxdb.markdown
+++ b/source/_components/influxdb.markdown
@@ -23,7 +23,7 @@ The default InfluxDB configuration doesn't enforce authentication. If you have i
influxdb:
```
-You will still need to create a database named `home_assistant` via InfluxDB's web interface or command line. For instructions how to create a database check the [InfluxDB documentation](https://docs.influxdata.com/influxdb/latest/introduction/getting_started/#creating-a-database) relevant to the version you have installed.
+You will still need to create a database named `home_assistant` via InfluxDB's command line interface. For instructions on how to create a database check the [InfluxDB documentation](https://docs.influxdata.com/influxdb/latest/introduction/getting_started/#creating-a-database) relevant to the version you have installed.
Configuration variables:
diff --git a/source/_components/light.decora_wifi.markdown b/source/_components/light.decora_wifi.markdown
index 48ce82aa3aa..cf2c5556266 100644
--- a/source/_components/light.decora_wifi.markdown
+++ b/source/_components/light.decora_wifi.markdown
@@ -8,12 +8,12 @@ comments: false
sharing: true
footer: true
ha_category: Light
-ha_iot_class: "Local Polling"
+ha_iot_class: "Cloud Polling"
logo: leviton.png
ha_release: 0.51
---
-Support for [Leviton Decora Wi-Fi](http://www.leviton.com/en/products/lighting-controls/decora-smart-with-wifi) dimmers/switches.
+Support for [Leviton Decora Wi-Fi](http://www.leviton.com/en/products/lighting-controls/decora-smart-with-wifi) dimmers/switches via the MyLeviton API.
Supported devices (tested):
diff --git a/source/_components/light.group.markdown b/source/_components/light.group.markdown
new file mode 100644
index 00000000000..2b4d3035767
--- /dev/null
+++ b/source/_components/light.group.markdown
@@ -0,0 +1,48 @@
+---
+layout: page
+title: "Light Group"
+description: "Instructions for how to setup light groups within Home Assistant."
+date: 2018-02-23 11:41
+sidebar: true
+comments: false
+sharing: true
+footer: true
+ha_category: Light
+ha_release: 0.65
+ha_iot_class: "Local Push"
+logo: home-assistant.png
+---
+
+The group light platform lets you combine multiple lights into one entity. All child lights of a light group can still be used as usual, but controlling the state of the grouped light will forward the command to each child light.
+
+To enable this platform in your installation, add the following to your `configuration.yaml` file:
+
+```yaml
+# Example configuration.yaml entry
+light:
+ - platform: group
+ name: Kitchen Lights
+ entities:
+ - light.kitchen_ceiling_lights
+ - light.kitchen_under_cabinet_lights
+ - light.kitchen_spot_lights
+ - light.pendant_lights
+```
+
+{% configuration %}
+ name:
+ description: The name of the light group. Defaults to "Light Group".
+ required: false
+ type: string
+ entities:
+ description: A list of entities to be included in the light group.
+ required: true
+ type: string list
+{% endconfiguration %}
+
+
+
+Example of the light group "Kitchen Lights".
+
+
+The supported features of all lights will be added together. For example, if you have one RGB light in a group of otherwise brightness-only lights, the light group will be shown with a color picker.
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/light.xiaomi_miio.markdown b/source/_components/light.xiaomi_miio.markdown
index b1428017a5e..3af241a04e9 100644
--- a/source/_components/light.xiaomi_miio.markdown
+++ b/source/_components/light.xiaomi_miio.markdown
@@ -13,7 +13,7 @@ ha_version: 0.53
ha_iot_class: "Local Polling"
---
-The `xiaomi_miio` platform allows you to control the state of your Xiaomi Philips LED Ball Lamp and Xiaomi Philips LED Ceiling Lamp.
+The `xiaomi_miio` platform allows you to control the state of your Xiaomi Philips LED Ball Lamp, Xiaomi Philips LED Ceiling Lamp and Xiaomi Philips Eyecare Lamp 2.
Currently, the supported features are `on`, `off`, `set_cct` (colortemp) , `set_bright` (brightness).
@@ -28,12 +28,34 @@ light:
name: Xiaomi Philips Smart LED Ball
host: 192.168.130.67
token: YOUR_TOKEN
+ model: philips.light.bulb
```
Configuration variables:
- **host** (*Required*): The IP of your light.
- **token** (*Required*): The API token of your light.
- **name** (*Optional*): The name of your light.
+- **model** (*Optional*): The model of your light. Valid values are `philips.light.bulb`, `philips.light.sread1`, `philips.light.ceiling` and `philips.light.zyceiling`. This setting can be used to bypass the device model detection and is recommended if your device isn't always available.
+
+{% configuration %}
+host:
+ description: The IP address of your device.
+ required: true
+ type: string
+token:
+ description: The API token of your device.
+ required: true
+ type: string
+name:
+ description: The name of your device.
+ required: false
+ type: string
+ default: Xiaomi Philips Light
+model:
+ description: The model of your device.
+ required: false
+ type: string
+{% endconfiguration %}
## {% linkable_title Platform Services %}
@@ -43,5 +65,14 @@ Set one of the 4 available fixed scenes.
| Service data attribute | Optional | Description |
|---------------------------|----------|-------------------------------------------------------|
-| `entity_id` | yes | Only act on specific light. Else targets all. |
+| `entity_id` | yes | Only act on a specific light. Else targets all. |
| `scene` | no | Scene, between 1 and 4. |
+
+### {% linkable_title Service `light.xiaomi_miio_set_delayed_turn_off` %}
+
+Delayed turn off.
+
+| Service data attribute | Optional | Description |
+|---------------------------|----------|-------------------------------------------------------|
+| `entity_id` | yes | Only act on a specific light. Else targets all. |
+| `time_period` | no | Time period for the delayed turn off. |
diff --git a/source/_components/lock.bmw_connected_drive.markdown b/source/_components/lock.bmw_connected_drive.markdown
new file mode 100755
index 00000000000..2a7f6708126
--- /dev/null
+++ b/source/_components/lock.bmw_connected_drive.markdown
@@ -0,0 +1,20 @@
+---
+layout: page
+title: "BMW connected drive"
+description: "Instructions on how to setup your BMW connected drive account with Home Assistant."
+date: 2018-02-22 23:00
+sidebar: true
+comments: false
+sharing: true
+footer: true
+logo: bmw.png
+ha_category: Lock
+ha_release: 0.66
+---
+
+
+The `bmw_connected_drive` platform allows you to import data on your BMW into Home Assistant.
+
+The lock will be automatically configured if 'bmw_connected_drive' component is configured.
+
+For more configuration information see the [bmw_connected_drive component](/components/bmw_connected_drive/) documentation.
diff --git a/source/_components/media_player.channels.markdown b/source/_components/media_player.channels.markdown
new file mode 100644
index 00000000000..12138976e26
--- /dev/null
+++ b/source/_components/media_player.channels.markdown
@@ -0,0 +1,61 @@
+---
+layout: page
+title: "Channels"
+description: "Instructions on how to integrate Channels into Home Assistant."
+date: 2018-03-06 11:00
+sidebar: true
+comments: false
+sharing: true
+footer: true
+logo: channels.png
+ha_category: Media Player
+ha_release: 0.65.0
+ha_iot_class: "Local Polling"
+---
+
+
+The Channels platform allows you to control [Channels](https://getchannels.com/) from Home Assistant. Play, pause, seek, or skip commercials on an instance of Channels that is running on your network.
+
+Your favorite channels will appear as sources in the Source List in Home Assistant.
+
+To add Channels to your installation, add the following to your `configuration.yaml` file:
+
+```yaml
+# Example configuration.yaml entry
+media_player:
+ - platform: channels
+ name: Family Room Channels
+ host: 192.168.1.50
+```
+
+Configuration variables:
+
+- **host** (*Required*): The IP of the device running Channels, e.g., 192.168.1.50
+- **port** (*Optional*): The port where Channels is accessible, defaults to 57000.
+- **name** (*Optional*): The name of the Channels instance in Home Assistant, eg. Family Room Channels. Defaults to Channels.
+
+### {% linkable_title Service `channels_seek_forward` %}
+
+Seek forward by the number of seconds currently set in settings on the instance of Channels.
+
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ----------- |
+| `entity_id` | no | String that points at `entity_id` of Channels app.
+
+
+### {% linkable_title Service `channels_seek_backward` %}
+
+Seek backward by the number of seconds currently set in settings on the instance of Channels.
+
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ----------- |
+| `entity_id` | no | String that points at `entity_id` of Channels app.
+
+### {% linkable_title Service `channels_seek_by` %}
+
+Seek forward or backward by a provided number of seconds.
+
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ----------- |
+| `entity_id` | no | String that points at `entity_id` of Channels app.
+| `seconds` | no | Number of seconds to seek in the timeline by. Negative seconds seeks backwards.
diff --git a/source/_components/media_player.markdown b/source/_components/media_player.markdown
index 62c1af3a4cc..90507d40e5d 100644
--- a/source/_components/media_player.markdown
+++ b/source/_components/media_player.markdown
@@ -20,7 +20,7 @@ Available services: `turn_on`, `turn_off`, `toggle`, `volume_up`, `volume_down`,
| ---------------------- | -------- | ------------------------------------------------ |
| `entity_id` | yes | Target a specific media player. Defaults to all. |
-#### {% linkable_title Service `media_player/volume_mute` %}
+#### {% linkable_title Service `media_player.volume_mute` %}
| Service data attribute | Optional | Description |
|------------------------|----------|--------------------------------------------------|
@@ -34,14 +34,14 @@ Available services: `turn_on`, `turn_off`, `toggle`, `volume_up`, `volume_down`,
| `entity_id` | yes | Target a specific media player. Defaults to all. |
| `volume_level` | no | Float for volume level |
-#### {% linkable_title Service `media_player/media_seek` %}
+#### {% linkable_title Service `media_player.media_seek` %}
| Service data attribute | Optional | Description |
|------------------------|----------|--------------------------------------------------------|
| `entity_id` | yes | Target a specific media player. Defaults to all. |
| `seek_position` | no | Position to seek to. The format is platform dependent. |
-#### {% linkable_title Service `media_player/play_media` %}
+#### {% linkable_title Service `media_player.play_media` %}
| Service data attribute | Optional | Description |
| -----------------------| -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -49,14 +49,14 @@ Available services: `turn_on`, `turn_off`, `toggle`, `volume_up`, `volume_down`,
| `media_content_id` | no | A media identifier. The format of this is component dependent. For example, you can provide URLs to Sonos and Cast but only a playlist ID to iTunes. |
| `media_content_type` | no | A media type. Must be one of `music`, `tvshow`, `video`, `episode`, `channel` or `playlist`. For example, to play music you would set `media_content_type` to `music`. |
-#### {% linkable_title Service `media_player/select_source` %}
+#### {% linkable_title Service `media_player.select_source` %}
| Service data attribute | Optional | Description |
| ---------------------- | -------- | ---------------------------------------------------- |
| `entity_id` | yes | Target a specific media player. Defaults to all. |
| `source` | no | Name of the source to switch to. Platform dependent. |
-#### {% linkable_title Service `media_player/shuffle_set` %}
+#### {% linkable_title Service `media_player.shuffle_set` %}
Currently only supported on [Spotify](/components/media_player.spotify/), [MPD](/components/media_player.mpd/), [Kodi](/components/media_player.kodi/), [Squeezebox](/components/media_player.squeezebox/) and [Universal](/components/media_player.universal/).
diff --git a/source/_components/media_player.philips_js.markdown b/source/_components/media_player.philips_js.markdown
index 2db2fe8ded3..e776db61a36 100644
--- a/source/_components/media_player.philips_js.markdown
+++ b/source/_components/media_player.philips_js.markdown
@@ -30,3 +30,4 @@ Configuration variables:
- **host** (*Required*): IP address of TV.
- **name** (*Optional*): The name you would like to give to the Philips TV.
- **turn_on_action** (*Optional*): A script that will be executed to turn on the TV (can be used with wol).
+- **api_version** (*Optional*): The JointSpace API version of your Philips TV, defaults to `1`. This is an experimental option and not all the functionalities are guaranteed to work with API versions different from `1`.
diff --git a/source/_components/media_player.samsungtv.markdown b/source/_components/media_player.samsungtv.markdown
index 10201bfbb93..3cabb0f43d6 100644
--- a/source/_components/media_player.samsungtv.markdown
+++ b/source/_components/media_player.samsungtv.markdown
@@ -57,6 +57,7 @@ Currently known supported models:
- K5579 (port must be set to 8001, On/Off, Forward/Backward, Volume control, but no Play button)
- K6500AF (port must be set to 8001)
- KS8005 (port must be set to 8001, and `pip3 install websocket-client` must be executed)
+- KU6020 (port must be set to 8001, and `pip3 install websocket-client` must be executed)
- KU6290 (port must be set to 8001)
- KU7000 (port must be set to 8001)
- MU6170UXZG (port must be set to 8001, and `pip3 install websocket-client` must be executed)
diff --git a/source/_components/media_player.songpal.markdown b/source/_components/media_player.songpal.markdown
new file mode 100644
index 00000000000..65874f99b26
--- /dev/null
+++ b/source/_components/media_player.songpal.markdown
@@ -0,0 +1,68 @@
+---
+layout: page
+title: "Sony SongPal compatible devices"
+description: "Instructions how to integrate Sony Songpal devices into Home Assistant."
+date: 2018-02-03 09:00
+sidebar: true
+comments: false
+sharing: true
+footer: true
+logo: sony.png
+ha_category: Media Player
+ha_iot_class: "Local Polling"
+ha_release: 0.65
+---
+
+The `songpal` platform allows you to control Sony's Songpal ("[Audio Control API](https://developer.sony.com/develop/audio-control-api/)") compatible devices such as soundbars, AV receivers and wireless speakers from Home Assistant.
+
+Even when the API officially supports only a few devices (HT-ST5000, HT-MT500, HT-CT800, SRS-ZR5 and STR-DN1080), it has also been confirmed to work on others. [The list of supported devices](http://vssupport.sony.net/en_ww/device.html) from Sony's Songpal website lists devices which are likely to be compatible with this platform.
+
+If the platform works with your non-listed device, or you encounter bugs, please feel free to [report them upstream](https://github.com/rytilahti/python-songpal).
+
+A few notes:
+
+- The quick start-up mode has to be enabled in order to turn the device on.
+- Supports currently only one output terminal, i.e. the volume control works only on the first volume controller as reported by the backend library.
+- Some devices, e.g. HT-XT3, do not support decreasing the volume step-by-step correctly.
+- Feel free to improve the available services!
+
+## {% linkable_title Configuration %}
+
+The platform will be loaded automatically by discovery component. If you want to manually configure it, add the following to your `configuration.yaml` file:
+
+```yaml
+media_player:
+ - platform: songpal
+ name: my soundbar
+ endpoint: http://IP_ADDRESS:10000/sony
+```
+
+{% configuration %}
+name:
+ description: The name to display for this device.
+ required: false
+ type: string
+endpoint:
+ description: API endpoint of the device.
+ required: true
+ type: string
+{% endconfiguration %}
+
+See [python-songpal's documentation](https://github.com/rytilahti/python-songpal#locating-the-endpoint) how to get your API endpoint.
+
+## {% linkable_title Services %}
+
+In addition to the general [media player services](https://home-assistant.io/components/media_player/#services), the following services are provided:
+
+### {% linkable_title Service `media_player/songpal_set_sound_setting` %}
+
+For a list of available settings and their values use [`songpal sound`](https://github.com/rytilahti/python-songpal#sound-settings) command.
+
+| Service data attribute | Optional | Description |
+|------------------------|----------|--------------------------------------------------|
+| `entity_id` | yes | Target entity, leave unset for all devices |
+| `name` | no | Configuration variable, e.g. `nightmode` |
+| `value` | no | New configuration value, e.g. `on` |
+
+
+
diff --git a/source/_components/notify.stride.markdown b/source/_components/notify.stride.markdown
new file mode 100644
index 00000000000..0c79c446673
--- /dev/null
+++ b/source/_components/notify.stride.markdown
@@ -0,0 +1,63 @@
+---
+layout: page
+title: "Stride"
+description: "Instructions how to add Stride notifications to Home Assistant."
+date: 2018-03-14 15:00
+sidebar: true
+comments: false
+sharing: true
+footer: true
+logo: stride.png
+ha_category: Notifications
+ha_release: 0.66
+---
+
+The `stride` platform allows you to send notifications from Home Assistant to [Stride](https://stride.com/).
+
+You need to obtain a [Stride API token](https://developer.atlassian.com/cloud/stride/security/authentication/#using-room-tokens) to be able to send notifications. When creating the token, you'll see a section labeled "Use this conversation URL to post messages" - it will look something like "https://api.atlassian.com/site/55872e9f-047e-a619-b32c-19d37fbc6038/conversation/26c98c26-0ffd-a11e-3a55-1b397cb71fe0/message". The first set of numbers and letters (`55872e9f-047e-a619-b32c-19d37fbc6038`) is the Cloud ID, and the second set (`26c98c26-0ffd-a11e-3a55-1b397cb71fe0`) is the Room ID.
+
+To enable the Stride notification in your installation, add the following to your `configuration.yaml` file:
+
+```yaml
+# Example configuration.yaml entry
+notify:
+ - platform: stride
+ cloudid: CLOUD-ID
+ token: TOKEN
+ room: ROOM-ID
+```
+
+{% configuration %}
+name:
+ description: Setting the optional parameter `name` allows multiple notifiers to be created. The notifier will bind to the service `notify.NOTIFIER_NAME`.
+ required: false
+ default: notify
+ type: string
+cloudid:
+ description: The Stride Cloud ID to use for sending Stride notification.
+ required: true
+ type: string
+token:
+ description: The Stride API token to use for sending Stride notifications.
+ required: true
+ type: string
+room:
+ description: The default room to post to if no room is explicitly specified when sending the notification.
+ required: true
+ type: string
+panel:
+ description: Setting panel will override the default panel type (`None`) for the notification. By default not setting this will post to Stride without using a panel type. Valid options are 'None', 'info', 'note', 'tip', 'warning'.
+ required: false
+ type: string
+{% endconfiguration %}
+
+### {% linkable_title Stride service data %}
+
+The following attributes can be placed `data` for extended functionality.
+
+| Service data attribute | Optional | Description |
+| ---------------------- | -------- | ----------- |
+| `room` | yes | (int) Same usage as in configuration.yaml. Overrides any setting set in configuration.yaml.
+| `panel` | yes | (str) Same usage as in configuration.yaml. Overrides any setting set in configuration.yaml.
+
+To use notifications, please see the [getting started with automation page](/getting-started/automation/).
diff --git a/source/_components/panel_iframe.markdown b/source/_components/panel_iframe.markdown
index e80d6617072..71ba4b2aec1 100644
--- a/source/_components/panel_iframe.markdown
+++ b/source/_components/panel_iframe.markdown
@@ -15,7 +15,7 @@ ha_release: 0.25
The `panel_iframe` support allows you to add additional panels to your Home Assistant frontend. The panels are listed in the sidebar and can contain external resources like the web frontend of your router, your monitoring system, or your media server.
-
If you are accessing home Assistant over HTTPS using SSL, you cannot access HTTP sites through an iframe panel.
+
If you are accessing Home Assistant over HTTPS using SSL, you cannot access HTTP sites through an iframe panel.
To enable Panel iFrames in your installation, add the following to your `configuration.yaml` file:
diff --git a/source/_components/persistent_notification.markdown b/source/_components/persistent_notification.markdown
index 2f96756ea92..fbf07e6debe 100644
--- a/source/_components/persistent_notification.markdown
+++ b/source/_components/persistent_notification.markdown
@@ -67,5 +67,3 @@ Choose
-+If you are running a database server instance on the same server as Home Assistant then you must ensure that this service starts before Home Assistant. For a Linux instance running Systemd (Raspberry Pi, Debian, Ubuntu and others) then you should edit the file /etc/systemd/system/home-assistant@homeassistant.service as root (e.g. sudo nano /etc/systemd/system/home-assistant@homeassistant.service) and add the service - for PostgreSQL:
-+```
-+[Unit]
-+Description=Home Assistant
-+After=network.target postgresql.service
-+```
-+
+
+If you use MariaDB 10 you need to add port 3307 to the SERVER_IP, e.g., `mysql://user:password@SERVER_IP:3307/DB_NAME?charset=utf8`.
+
++If you are running a database server instance on the same server as Home Assistant then you must ensure that this service starts before Home Assistant. For a Linux instance running Systemd (Raspberry Pi, Debian, Ubuntu and others) then you should edit the service file.
+
+```bash
+$ sudo nano /etc/systemd/system/home-assistant@homeassistant.service
+```
+
+and add the service for PostgreSQL:
+
+```
+[Unit]
+Description=Home Assistant
+After=network.target postgresql.service
+```
+
+Save the file then reload `systemctl`:
+
+```bash
+$ sudo systemctl daemon-reload
+```
+
## {% linkable_title Installation notes %}
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.filesize.markdown b/source/_components/sensor.filesize.markdown
index 91eb16037ce..8c46e8c1b29 100644
--- a/source/_components/sensor.filesize.markdown
+++ b/source/_components/sensor.filesize.markdown
@@ -13,7 +13,7 @@ ha_iot_class: "Local Polling"
ha_release: 0.64
---
-Component for displaying the size of a file. Note that paths must be added to [whitelist_external_dirs](https://home-assistant.io/docs/configuration/basic/).
+Component for displaying the size in MB of a file. Note that paths must be added to [whitelist_external_dirs](https://home-assistant.io/docs/configuration/basic/).
Add to your config:
```yaml
diff --git a/source/_components/sensor.fitbit.markdown b/source/_components/sensor.fitbit.markdown
index 1da5a518367..4ea3e71cd4d 100644
--- a/source/_components/sensor.fitbit.markdown
+++ b/source/_components/sensor.fitbit.markdown
@@ -36,6 +36,7 @@ Configuration variables:
- **monitored_resources** (*Optional*): Resource to monitor. Defaults to `activities/steps`.
- **clock_format** (*Optional*): Format to use for `sleep/startTime` resource. Accepts `12H` or `24H`. Defaults to `24H`.
+- **unit_system** (*Optional*): Unit system to use for measurements. Accepts `default`, `metric`, `en_US` or `en_GB`. Defaults to `default`.
Below is the list of resources that you can add to `monitored_resources`. One sensor is exposed for every resource.
diff --git a/source/_components/sensor.folder.markdown b/source/_components/sensor.folder.markdown
index c2b7ae330f0..2555b7a0ad4 100644
--- a/source/_components/sensor.folder.markdown
+++ b/source/_components/sensor.folder.markdown
@@ -13,7 +13,7 @@ ha_iot_class: "Local Polling"
ha_release: 0.64
---
-Sensor for monitoring the contents of a folder. Note that folder paths must be added to [whitelist_external_dirs](https://home-assistant.io/docs/configuration/basic/). Optionally a [wildcard filter]((http://tldp.org/LDP/GNU-Linux-Tools-Summary/html/x11655.htm)) can be applied to the files considered within the folder. The state of the sensor is the size in MB of files within the folder that meet the filter criteria. The number of filtered files in the folder and total size in bytes of those files are exposed as attributes.
+Sensor for monitoring the contents of a folder. Note that folder paths must be added to [whitelist_external_dirs](https://home-assistant.io/docs/configuration/basic/). Optionally a [wildcard filter](https://docs.python.org/3.6/library/fnmatch.html) can be applied to the files considered within the folder. The state of the sensor is the size in MB of files within the folder that meet the filter criteria. The number of filtered files in the folder and total size in bytes of those files are exposed as attributes.
To enable the `folder` sensor in your installation, add the following to your `configuration.yaml` file:
diff --git a/source/_components/sensor.foobot.markdown b/source/_components/sensor.foobot.markdown
new file mode 100644
index 00000000000..cf300fa7ac1
--- /dev/null
+++ b/source/_components/sensor.foobot.markdown
@@ -0,0 +1,51 @@
+---
+layout: page
+title: "Foobot Air Quality Monitor"
+description: "Instructions on how to setup Foobot Air Quality sensor in Home Assistant."
+date: 2018-02-14 06:00
+sidebar: true
+comments: false
+sharing: true
+footer: true
+logo: foobot.png
+ha_category: Health
+ha_release: 0.66
+ha_iot_class: "Cloud Polling"
+---
+
+The `foobot` sensor platform will fetch air quality data from your or yours [Foobot device(s)](https://foobot.io/features/).
+
+This sensor requires an API token. Please obtain one at [Foobot API site](https://api.foobot.io/apidoc/index.html).
+
+## {% linkable_title Configuring the Platform %}
+
+To enable this sensor, add the following lines to your `configuration.yaml` file:
+
+```yaml
+sensor:
+ - platform: foobot
+ token: FOOBOT_SECRET_KEY
+ username: FOOBOT_USERNAME
+```
+
+{% configuration %}
+ token:
+ description: The token for the Foobot API.
+ required: true
+ type: string
+ username:
+ description: Your Foobot username, used to fetch devices associated with an account.
+ required: true
+ type: string
+{% endconfiguration %}
+
+## {% linkable_title Available Metrics %}
+
+Every ten minutes, it'll fetch the last ten minutes average of the following measurements:
+
+ * Temperature
+ * Humidity
+ * Co2
+ * VOC
+ * PM2.5
+ * [Index](https://help.foobot.io/hc/en-us/articles/204814371-What-does-central-number-mean-)
diff --git a/source/_components/sensor.glances.markdown b/source/_components/sensor.glances.markdown
index 03b25369a74..77b87011468 100644
--- a/source/_components/sensor.glances.markdown
+++ b/source/_components/sensor.glances.markdown
@@ -58,6 +58,9 @@ sensor:
- 'process_thread'
- 'process_sleeping'
- 'cpu_temp'
+ - 'docker_active'
+ - 'docker_cpu_use'
+ - 'docker_memory_use'
```
Configuration variables:
@@ -81,5 +84,8 @@ Configuration variables:
- **process_thread**: Number of threads
- **process_sleeping**: Number of sleeping processes
- **cpu_temp**: CPU Temperature (may not available on all platforms)
+ - **docker_active**: Count of active Docker containers
+ - **docker_cpu_use**: Total CPU usage in percent of Docker containers
+ - **docker_memory_use**: Total memory used of Docker containers
Not all platforms are able to provide all metrics. For instance `cpu_temp` is requires installing and configuring `lmsensors` in Ubuntu, and may not be available at all in other platforms.
diff --git a/source/_components/sensor.mqtt.markdown b/source/_components/sensor.mqtt.markdown
index e6b96b3bc1d..aebe44beb99 100644
--- a/source/_components/sensor.mqtt.markdown
+++ b/source/_components/sensor.mqtt.markdown
@@ -82,6 +82,32 @@ json_attributes:
In this section you find some real life examples of how to use this sensor.
+### {% linkable_title JSON attributes configuration %}
+
+The example sensor below shows a configuration example which uses JSON in the state topic to add extra attributes. It also makes use of the availability topic. Attributes can then be extracted in [Templates](configuration/templating/#attributes); Example to extract data from the sensor below {% raw %}'{{ states.sensor.bs_client_name.attributes.ClientName }}'{% endraw %}.
+
+{% raw %}
+```yaml
+# Example configuration.yml entry
+sensor:
+ - platform: mqtt
+ state_topic: "HUISHS/BunnyShed/NodeHealthJSON"
+ name: "BS RSSI"
+ unit_of_measurement: "dBm"
+ value_template: '{{ value_json.RSSI }}'
+ availability_topic: "HUISHS/BunnyShed/status"
+ payload_available: "online"
+ payload_not_available: "offline"
+ json_attributes:
+ - ClientName
+ - IP
+ - MAC
+ - RSSI
+ - HostName
+ - ConnectedSSID
+```
+{% endraw %}
+
### {% linkable_title Get battery level %}
If you are using the [Owntracks](/components/device_tracker.owntracks/) and enable the reporting of the battery level then you can use a MQTT sensor to keep track of your battery. A regular MQTT message from Owntracks looks like this:
diff --git a/source/_components/sensor.pollen.markdown b/source/_components/sensor.pollen.markdown
index 9a9ddc05ec6..8c613882242 100644
--- a/source/_components/sensor.pollen.markdown
+++ b/source/_components/sensor.pollen.markdown
@@ -30,7 +30,7 @@ liking):
```yaml
sensor:
platform: pollen
- zip_code: ZIP_CODE
+ zip_code: "00544"
monitored_conditions:
- allergy_average_forecasted
- allergy_average_historical
@@ -42,15 +42,20 @@ sensor:
{% configuration %}
zip_code:
- description: the U.S. ZIP code to gather data for
+ description: the U.S. ZIP code to gather data for (as a quoted string)
required: true
- type: int
+ type: string
monitored_conditions:
description: the metric types to monitor; valid values are specified below
required: true
type: list
{% endconfiguration %}
+
+It is important to ensure the ZIP code is quoted if it starts with a 0. Unquoted
+ZIP codes that start with 0 will cause errors.
+
+
## {% linkable_title Available Metrics %}
The following metrics can be monitored:
diff --git a/source/_components/sensor.scrape.markdown b/source/_components/sensor.scrape.markdown
index 06d1cd80424..cbbaf5553e0 100644
--- a/source/_components/sensor.scrape.markdown
+++ b/source/_components/sensor.scrape.markdown
@@ -126,7 +126,7 @@ sensor:
resource: https://elen.nu/timpriser-pa-el-for-elomrade-se3-stockholm/
name: Electricity price
select: ".elspot-content"
- value_template: '{{ value.split(" ")[0] }}'
+ value_template: '{{ ((value.split(" ")[0]) | replace (",", ".")) }}'
unit_of_measurement: "öre/kWh"
```
{% endraw %}
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/sensor.spotcrime.markdown b/source/_components/sensor.spotcrime.markdown
index 98e2b7ee409..b36d01b4b46 100644
--- a/source/_components/sensor.spotcrime.markdown
+++ b/source/_components/sensor.spotcrime.markdown
@@ -8,13 +8,13 @@ comments: false
sharing: true
footer: true
ha_category: Sensor
-ha_release: 0.64
+ha_release: 0.65
ha_iot_class: "Cloud Polling"
---
The `spotcrime` sensor allows one to track reported incidents occurring in a given area. Incidents include anything reported to [Spot Crime](http://spotcrime.com). Your regional emergency services may or may not report data. The sensor defaults to counting incidents within one day, but can be customized via configuration.yaml.
-## Configuration
+You will need to request an API key from [Spotcrime](mailto:pyrrhus@spotcrime.com).
To enable this sensor, add the following lines to your `configuration.yaml`. Your `radius` should be of sufficient size to capture incidents in your area. 0.01 = 1 mile.
@@ -23,23 +23,39 @@ sensor:
- platform: spotcrime
name:
radius:
- days:
+ api_key: <"your_api_key_here">
```
-Configuration options for the Crime Reports Sensor:
+{% configuration %}
+name:
+ description: Name the sensor what you'd like.
+ required: true
+ type: string
+radius:
+ description: Radius you'd like to search within. 0.01 = 1 mile.
+ required: true
+ type: float
+api_key:
+ description: The API key to access the service.
+ required: true
+ type: string
+days:
+ description: Number of days you'd like see to crime statistics for.
+ required: false
+ type: int
+include:
+ description: Event types you want statistics for.
+ required: false
+ type: list
+exclude:
+ description: Event types to ignore statistics for.
+ required: false
+ type: list
+{% endconfiguration %}
-- **name** (*Required*): Name the sensor whatever you want.
-- **radius** (*Required*): Radius in miles.
-- **days** (*Optional*): Defaults to 1 day.
-- **latitude** (*Optional*): Defaults to your home zone latitude.
-- **longitude** (*Optional*): Defaults to your home zone longitude.
-- **include** (*Optional*): List of incident types to include.
-- **exclude** (*Optional*): List of incident types to exclude.
+## {% linkable_title Notes %}
-
-## Notes
-
-### Incident Types
+### {% linkable_title Incident Types %}
You can explicitly include or exclude incident types. Specifying `include`s restricts the incidents to those types. Specifying `exclude`s will return all incident types except those specified.
@@ -55,6 +71,6 @@ These incident types are available:
- Vandalism
- Other
-### Events
+### {% linkable_title Events %}
The `crimealerts` sensor fires a `crimealerts_incident` event when a new incident is detected, including the type, time, and location of the incident.
diff --git a/source/_components/sensor.statistics.markdown b/source/_components/sensor.statistics.markdown
index 01abb92ca24..a5b126fac4a 100644
--- a/source/_components/sensor.statistics.markdown
+++ b/source/_components/sensor.statistics.markdown
@@ -16,7 +16,7 @@ ha_release: "0.30"
The `statistics` sensor platform consumes the state from other sensors. Besides the maximum and the minimum values, the total, mean, median, variance and the standard deviation are also available as attributes. If it's a binary sensor then only state changes are counted.
-If you are running the [recorder](/components/recorder/) component, on startup the data is read from the database. So after a restart of the platform, you will immediately have data available. If you're using the [history](/components/history/) component, this will automatically also start the recoder component on startup.
+If you are running the [recorder](/components/recorder/) component, on startup the data is read from the database. So after a restart of the platform, you will immediately have data available. If you're using the [history](/components/history/) component, this will automatically also start the `recorder` component on startup.
If you are *not* running the `recorder` component, it can take time till the sensor starts to work because a couple of attributes need more than one value to do the calculation.
To enable the statistics sensor, add the following lines to your `configuration.yaml`:
diff --git a/source/_components/sensor.worldclock.markdown b/source/_components/sensor.worldclock.markdown
index c195fe37ce9..e9f4ac8f9bf 100644
--- a/source/_components/sensor.worldclock.markdown
+++ b/source/_components/sensor.worldclock.markdown
@@ -14,7 +14,7 @@ ha_release: pre 0.7
---
-The `worldclock` sensor platform simple displays the current time in a different time zone
+The `worldclock` sensor platform simply displays the current time in a different time zone
To enable this sensor in your installation, add the following to your `configuration.yaml` file:
diff --git a/source/_components/sensor.xiaomi_miio.markdown b/source/_components/sensor.xiaomi_miio.markdown
new file mode 100644
index 00000000000..3e30131fff3
--- /dev/null
+++ b/source/_components/sensor.xiaomi_miio.markdown
@@ -0,0 +1,55 @@
+---
+layout: page
+title: "Xiaomi Air Quality Monitor"
+description: "Instructions how to integrate your Xiaomi Mi Air Quality Monitor within Home Assistant."
+date: 2018-02-28 08:35
+sidebar: true
+comments: false
+sharing: true
+footer: true
+logo: xiaomi.png
+ha_category: Sensor
+ha_version: 0.66
+ha_iot_class: "Local Polling"
+---
+
+The `xiaomi_miio` sensor platform is observing your Xiaomi Mi Air Quality Monitor (PM2.5) and reporting the air quality index.
+
+Currently, the supported features are:
+
+* Air Quality Index (AQI)
+* Attributes
+ - power
+ - charging
+ - battery
+ - time_stat
+
+Please follow the instructions on [Retrieving the Access Token](/components/vacuum.xiaomi_miio/#retrieving-the-access-token) to get the API token.
+
+To add a Xiaomi Mi Air Quality Monitor to your installation, add the following to your `configuration.yaml` file:
+
+```yaml
+sensor:
+# Example configuration.yaml entry
+sensor:
+ - platform: xiaomi_miio
+ name: Xiaomi Air Quality Monitor
+ host: 192.168.130.73
+ token: YOUR_TOKEN
+```
+
+{% configuration %}
+host:
+ description: The IP address of your miio device.
+ required: true
+ type: string
+token:
+ description: The API token of your miio device.
+ required: true
+ type: string
+name:
+ description: The name of your miio device.
+ required: false
+ type: string
+ default: Xiaomi Miio Sensor
+{% endconfiguration %}
diff --git a/source/_components/switch.vesync.markdown b/source/_components/switch.vesync.markdown
new file mode 100644
index 00000000000..d3b59716362
--- /dev/null
+++ b/source/_components/switch.vesync.markdown
@@ -0,0 +1,36 @@
+---
+layout: page
+title: "VeSync Switch"
+description: "Instructions on how to set up Etekcity VeSync switches within Home Assistant."
+date: 2018-03-09 02:11
+sidebar: true
+comments: false
+sharing: true
+footer: true
+logo: vesync.png
+ha_category: Switch
+ha_release: 0.66
+---
+
+The `vesync` switch platform enabled integration with Etekcity VeSync smart switches.
+
+To use your VeSync switches, you must first register your switches with the VeSync app. Once registration is complete you must add the following to your `configuration.yaml` file:
+
+```yaml
+# Example configuration.yaml entry
+switch:
+ - platform: vesync
+ username: username
+ password: password
+```
+
+{% configuration %}
+username:
+ description: Username needed to log in to VeSync.
+ required: true
+ type: string
+password:
+ description: Password needed to log in to VeSync.
+ required: true
+ type: string
+{% endconfiguration %}
diff --git a/source/_components/switch.volvooncall.markdown b/source/_components/switch.volvooncall.markdown
new file mode 100644
index 00000000000..f4de42f5011
--- /dev/null
+++ b/source/_components/switch.volvooncall.markdown
@@ -0,0 +1,16 @@
+---
+layout: page
+title: "Volvo On Call"
+description: "Instructions for how to integrate Volvo On Call into Home Assistant."
+date: 2016-10-02 17:00
+sidebar: true
+comments: false
+sharing: true
+footer: true
+logo: volvo.png
+ha_category: Presence Detection
+ha_release: "0.30"
+---
+
+
+Integrates Volvo on Call into Home Assistant. See the [main component](/components/volvooncall/) for configuration instructions.
diff --git a/source/_components/switch.xiaomi_miio.markdown b/source/_components/switch.xiaomi_miio.markdown
index 7212a742872..21cd7d4ebad 100644
--- a/source/_components/switch.xiaomi_miio.markdown
+++ b/source/_components/switch.xiaomi_miio.markdown
@@ -13,12 +13,38 @@ ha_version: 0.56
ha_iot_class: "Local Polling"
---
-The `xiaomi_miio` switch platform allows you to control the state of your Xiaomi Smart WiFi Socket aka Plug or Xiaomi Smart Power Strip.
-
-Currently, the supported features are `on`, `off`. If the device provides the current load, it will be reported.
+The `xiaomi_miio` switch platform allows you to control the state of your Xiaomi Smart WiFi Socket aka Plug, Xiaomi Smart Power Strip and Xiaomi Chuangmi Plug V1.
Please follow the instructions on [Retrieving the Access Token](/components/vacuum.xiaomi_miio/#retrieving-the-access-token) to get the API token to use in the `configuration.yaml` file.
+## Features
+
+### Xiaomi Smart WiFi Socket
+
+* Power (on, off)
+* Attributes
+ - Temperature
+
+### Xiaomi Chuangmi Plug V1
+
+* Power (on, off)
+* USB (on, off)
+* Attributes
+ - Temperature
+
+### Xiaomi Smart Power Strip
+
+* Power (on, off)
+* Wifi LED (on, off)
+* Power Price (0...999)
+* Power Mode (green, normal) (Power Strip V1 only)
+* Attributes
+ - Temperature
+ - Current
+ - Load power
+ - Wifi LED
+ - Mode (Power Strip V1 only)
+
To add a plug to your installation, add the following to your `configuration.yaml` file:
```yaml
@@ -35,7 +61,7 @@ Configuration variables:
- **host** (*Required*): The IP of your miio device.
- **token** (*Required*): The API token of your miio device.
- **name** (*Optional*): The name of your miio device.
-- **model** (*Optional*): The model of your miio device. Valid values are chuangmi.plug.v1`, `qmi.powerstrip.v1`, `zimi.powerstrip.v2`, `chuangmi.plug.m1` and `chuangmi.plug.v2`. This setting can be used to bypass the device model detection and is recommended if your device isn't always available.
+- **model** (*Optional*): The model of your miio device. Valid values are `chuangmi.plug.v1`, `qmi.powerstrip.v1`, `zimi.powerstrip.v2`, `chuangmi.plug.m1` and `chuangmi.plug.v2`. This setting can be used to bypass the device model detection and is recommended if your device isn't always available.
{% configuration %}
host:
@@ -56,3 +82,39 @@ model:
required: false
type: string
{% endconfiguration %}
+
+## {% linkable_title Platform Services %}
+
+### {% linkable_title Service `switch.xiaomi_miio_set_wifi_led_on` %} (Power Strip only)
+
+Turn the wifi led on.
+
+| Service data attribute | Optional | Description |
+|---------------------------|----------|---------------------------------------------------------|
+| `entity_id` | yes | Only act on a specific air purifier. Else targets all. |
+
+### {% linkable_title Service `switch.xiaomi_miio_set_wifi_led_off` %} (Power Strip only)
+
+Turn the wifi led off.
+
+| Service data attribute | Optional | Description |
+|---------------------------|----------|---------------------------------------------------------|
+| `entity_id` | yes | Only act on a specific air purifier. Else targets all. |
+
+### {% linkable_title Service `switch.xiaomi_miio_set_power_price` %} (Power Strip)
+
+Set the power price.
+
+| Service data attribute | Optional | Description |
+|---------------------------|----------|---------------------------------------------------------|
+| `entity_id` | yes | Only act on a specific air purifier. Else targets all. |
+| `price` | no | Power price, between 0 and 999. |
+
+### {% linkable_title Service `switch.xiaomi_miio_set_power_mode` %} (Power Strip V1 only)
+
+Set the power mode.
+
+| Service data attribute | Optional | Description |
+|---------------------------|----------|---------------------------------------------------------------|
+| `entity_id` | yes | Only act on a specific xiaomi miio entity. Else targets all. |
+| `mode` | no | Power mode, valid values are 'normal' and 'green' |
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/vacuum.xiaomi_miio.markdown b/source/_components/vacuum.xiaomi_miio.markdown
index c8aafb0de9a..3d6a7908b81 100644
--- a/source/_components/vacuum.xiaomi_miio.markdown
+++ b/source/_components/vacuum.xiaomi_miio.markdown
@@ -13,8 +13,7 @@ ha_release: 0.51
ha_iot_class: "Local Polling"
---
-The `xiaomi miio` vacuum platform allows you to control the state of your
-[Xiaomi Mi Robot Vacuum](http://www.mi.com/roomrobot/).
+The `xiaomi miio` vacuum platform allows you to control the state of your [Xiaomi Mi Robot Vacuum](http://www.mi.com/roomrobot/).
Currently supported features are:
@@ -50,10 +49,7 @@ Configuration variables:
## {% linkable_title Platform Services %}
-In addition to [all of the services provided by the `vacuum` component]
-]) (`turn_on`, `turn_off`, `start_pause`, `stop`, `return_to_home`, `locate`,
-`set_fan_speed` and `send_command`), the `xiaomi` platform introduces specific
-services to access the remote control mode of the robot. These are:
+In addition to all of the services provided by the `vacuum` component (`turn_on`, `turn_off`, `start_pause`, `stop`, `return_to_home`, `locate`, `set_fan_speed` and `send_command`), the `xiaomi` platform introduces specific services to access the remote control mode of the robot. These are:
- `xiaomi_remote_control_start`
- `xiaomi_remote_control_stop`
@@ -62,8 +58,7 @@ services to access the remote control mode of the robot. These are:
### {% linkable_title Service `vacuum.xiaomi_remote_control_start` %}
-Start the remote control mode of the robot. You can then move it with
-`remote_control_move`; when done, call `remote_control_stop`.
+Start the remote control mode of the robot. You can then move it with `remote_control_move`; when done, call `remote_control_stop`.
| Service data attribute | Optional | Description |
|---------------------------|----------|-------------------------------------------------------|
@@ -79,8 +74,7 @@ Exit the remote control mode of the robot.
### {% linkable_title Service `vacuum.xiaomi_remote_control_move` %}
-Remote control the robot. Please ensure you first set it in remote control
-mode with `remote_control_start`.
+Remote control the robot. Please ensure you first set it in remote control mode with `remote_control_start`.
| Service data attribute | Optional | Description |
|---------------------------|----------|-------------------------------------------------------|
@@ -102,9 +96,8 @@ Enter remote control mode, make one move, stop, and exit remote control mode.
## {% linkable_title Attributes %}
-In addition to [all of the attributes provided by the `vacuum` component](https://home-assistant.io/components/vacuum/#attributes),
-(`battery_icon`, `cleaned_area`, `fan_speed`, `fan_speed_list`, `status`, and
-`params`), the `xiaomi` platform introduces specific attributes. These are:
+In addition to [all of the attributes provided by the `vacuum` component](/components/vacuum/#attributes),
+(`battery_icon`, `cleaned_area`, `fan_speed`, `fan_speed_list`, `status`, and `params`), the `xiaomi` platform introduces specific attributes. These are:
- `cleaning_time`
- `do_not_disturb`
@@ -132,12 +125,45 @@ The following table shows the units of measurement for each attribute:
## {% linkable_title Retrieving the Access Token %}
-This token (32 hexadecimal characters) is required for the Xiaomi Mi Robot
-Vacuum, Xiaomi Philips Lights and Xiaomi IR Remote. The Xiaomi Gateway uses another security
-method and requires a `key` (16 alphanumeric chars), which can be obtained
-easily via a hidden menu item at the Mi-Home app.
+As per [python-miio issue 185](https://github.com/rytilahti/python-miio/issues/185) the Mi-Home app no longer stores the token within the database (it's retrieved from Xiaomi servers from version 5.0.31+). Currently the only known fix is to uninstall, then install a downgraded version of the apk. Apkmirror is a trusted source for older versions of the app. [Mi-Home version 5.0.0](https://www.apkmirror.com/apk/xiaomi-inc/mihome/mihome-5-0-0-release/) is confirmed as working for the following Android methods.
+
+This token (32 hexadecimal characters) is required for the Xiaomi Mi Robot Vacuum, Xiaomi Philips Lights and Xiaomi IR Remote. The Xiaomi Gateway uses another security method and requires a `key` (16 alphanumeric chars), which can be obtained
+easily via a hidden menu item at the Mi-Home app or using the `miio` command line tool.
+#### {% linkable_title Miio command line tool %}
+
+You can install the command line tool with:
+
+```bash
+$ npm install -g miio
+```
+
+Discovering devices on current network
+
+```bash
+$ miio discover
+```
+
+This will list devices that are connected to the same network as your computer. Let it run for a while so it has a chance to reach all devices, as it might take a minute or two for all devices to answer.
+
+The commands outputs each device on this format:
+
+```text
+Device ID: 48765421
+Model info: zhimi.airpurifier.m1
+Address: 192.168.100.9
+Token: token-as-hex-here via auto-token
+Support: At least basic
+```
+
+The information output is:
+
+* __Device ID__ - the unique identifier of the device, does not change if the device is reset.
+* __Model ID__ - the model id if it could be determined, this indicates what type of device it is
+* __Address__ - the IP that the device has on the network
+* __Token__ - the token of the device or ??? if it could not be automatically determined
+
#### {% linkable_title Windows and Android %}
To fetch the token follow these instructions depending on your mobile phone platform.
@@ -204,7 +230,7 @@ To fetch the token follow these instructions depending on your mobile phone plat
3. Get ADB f.e. `apt-get install android-tools-adb`
4. `adb devices` should list your device
5. `adb root` (does work for development builds only: ones with `ro.debuggable=1`)
-6. `adb shell`
+6. `adb shell` (for those using Magisk based root the previous command won't work. After entering a shell, type `su` to enter the root shell)
7. `echo "select name,localIP,token from devicerecord;" | sqlite3 /data/data/com.xiaomi.smarthome/databases/miio2.db` returns a list of all registered devices including IP address and token.
#### {% linkable_title iOS %}
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/_components/weblink.markdown b/source/_components/weblink.markdown
index b19f3219558..a816180fd12 100644
--- a/source/_components/weblink.markdown
+++ b/source/_components/weblink.markdown
@@ -22,6 +22,7 @@ weblink:
entities:
- name: Router
url: http://192.168.1.1/
+ icon: mdi:router-wireless
- name: Home Assistant
url: https://home-assistant.io
- name: Grafana
diff --git a/source/_cookbook/configuration_yaml_by_greenturtwig.markdown b/source/_cookbook/configuration_yaml_by_greenturtwig.markdown
index dcb11f84540..a5bc7c5b184 100644
--- a/source/_cookbook/configuration_yaml_by_greenturtwig.markdown
+++ b/source/_cookbook/configuration_yaml_by_greenturtwig.markdown
@@ -8,6 +8,6 @@ comments: false
sharing: true
footer: true
ha_category: Example configuration.yaml
-ha_external_link: https://github.com/GreenTurtwig/personal-home-automation/tree/master/Home%20Assistant
+ha_external_link: https://github.com/GreenTurtwig/personal-home-automation/blob/master/configuration.yaml
---
diff --git a/source/_docs/configuration/basic.markdown b/source/_docs/configuration/basic.markdown
index 77e8359eba1..3ac38b00a2f 100644
--- a/source/_docs/configuration/basic.markdown
+++ b/source/_docs/configuration/basic.markdown
@@ -28,7 +28,7 @@ Configuration variables:
- **longitude** (*Optional*): Longitude of your location required to calculate the time the sun rises and sets.
- **elevation** (*Optional*): Altitude above sea level in meters. Impacts weather/sunrise data.
- **unit_system** (*Optional*): `metric` for Metric, `imperial` for Imperial.
-- **time_zone** (*Optional*): Pick yours from here: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
+- **time_zone** (*Optional*): Pick yours from here: [http://en.wikipedia.org/wiki/List_of_tz_database_time_zones](http://en.wikipedia.org/wiki/List_of_tz_database_time_zones)
- **name** (*Optional*): Name of the location where Home Assistant is running.
- **customize** (*Optional*): [Customize](/docs/configuration/customizing-devices/) entities.
- **customize_domain** (*Optional*): [Customize](/docs/configuration/customizing-devices/) all entities in a domain.
diff --git a/source/_docs/configuration/events.markdown b/source/_docs/configuration/events.markdown
index 7d4be04c87f..ff0bcd35140 100644
--- a/source/_docs/configuration/events.markdown
+++ b/source/_docs/configuration/events.markdown
@@ -18,7 +18,7 @@ Home Assistant contains a few built-in events that are used to coordinate betwee
Event `homeassistant_start` is fired when all components from the configuration have been intitialized. This is the event that will start the timer firing off `time_changed` events.
- Starting 0.42, it is no longer possible to listen for event `homeassistant_start`. Use the 'homeassistant' [platform](docs/automation/trigger) instead.
+ Starting 0.42, it is no longer possible to listen for event `homeassistant_start`. Use the 'homeassistant' [platform](/docs/automation/trigger) instead.
### {% linkable_title Event `homeassistant_stop` %}
diff --git a/source/_docs/configuration/remote.markdown b/source/_docs/configuration/remote.markdown
index bd0d0ba60b5..77bacfd35fd 100644
--- a/source/_docs/configuration/remote.markdown
+++ b/source/_docs/configuration/remote.markdown
@@ -7,7 +7,6 @@ sidebar: true
comments: false
sharing: true
footer: true
-redirect_from: /getting-started/basic/#remote-access
---
If you're interested in logging in to Home Assistant while away, you'll have to make your instance remotely accessible. Remember to follow the [securing checklist](/docs/configuration/securing/) before doing this.
diff --git a/source/_docs/ecosystem/appdaemon/tutorial.markdown b/source/_docs/ecosystem/appdaemon/tutorial.markdown
index 6a9998bced3..962be8ea9f1 100755
--- a/source/_docs/ecosystem/appdaemon/tutorial.markdown
+++ b/source/_docs/ecosystem/appdaemon/tutorial.markdown
@@ -43,22 +43,38 @@ The best way to show what AppDaemon does is through a few simple examples.
### {% linkable_title Sunrise/Sunset Lighting %}
-Lets start with a simple App to turn a light on every night at sunset and off every morning at sunrise. Every App when first started will have its `initialize()` function called which gives it a chance to register a callback for AppDaemons's scheduler for a specific time. In this case we are using `run_at_sunrise()` and `run_at_sunset()` to register 2 separate callbacks. The argument `0` is the number of seconds offset from sunrise or sunset and can be negative or positive. For complex intervals it can be convenient to use Python's `datetime.timedelta` class for calculations. When sunrise or sunset occurs, the appropriate callback function, `sunrise_cb()` or `sunset_cb()` is called which then makes a call to Home Assistant to turn the porch light on or off by activating a scene. The variables `args["on_scene"]` and `args["off_scene"]` are passed through from the configuration of this particular App, and the same code could be reused to activate completely different scenes in a different version of the App.
+Lets start with a simple App to turn a light on every night fifteen
+minutes (900 seconds) before sunset and off every morning at sunrise.
+Every App when first started will have its ``initialize()`` function
+called which gives it a chance to register a callback for AppDaemons's
+scheduler for a specific time. In this case we are using
+`run_at_sunrise()` and `run_at_sunset()` to register 2 separate
+callbacks. The named argument `offset` is the number of seconds offset
+from sunrise or sunset and can be negative or positive (it defaults to
+zero). For complex intervals it can be convenient to use Python's
+`datetime.timedelta` class for calculations. In the example below,
+when sunrise or just before sunset occurs, the appropriate callback
+function, `sunrise_cb()` or `before_sunset_cb()` is called which
+then makes a call to Home Assistant to turn the porch light on or off by
+activating a scene. The variables `args["on_scene"]` and
+`args["off_scene"]` are passed through from the configuration of this
+particular App, and the same code could be reused to activate completely
+different scenes in a different version of the App.
```python
-import homeassistant.appapi as appapi
+ import appdaemon.plugins.hass.hassapi as hass
-class OutsideLights(appapi.AppDaemon):
+ class OutsideLights(hass.Hass):
- def initialize(self):
- self.run_at_sunrise(self.sunrise_cb, 0)
- self.run_at_sunset(self.sunset_cb, 0)
-
- def sunrise_cb(self, kwargs):
- self.turn_on(self.args["off_scene"])
+ def initialize(self):
+ self.run_at_sunrise(self.sunrise_cb)
+ self.run_at_sunset(self.before_sunset_cb, offset=-900)
+
+ def sunrise_cb(self, kwargs):
+ self.turn_on(self.args["off_scene"])
- def sunset_cb(self, kwargs):
- self.turn_on(self.args["on_scene"])
+ def before_sunset_cb(self, kwargs):
+ self.turn_on(self.args["on_scene"])
```
diff --git a/source/_docs/ecosystem/backup/backup_usb.markdown b/source/_docs/ecosystem/backup/backup_usb.markdown
index 6bd62768830..182c5b44c46 100644
--- a/source/_docs/ecosystem/backup/backup_usb.markdown
+++ b/source/_docs/ecosystem/backup/backup_usb.markdown
@@ -9,11 +9,12 @@ sharing: true
footer: true
---
-Backing up your Home Assistant configuration to USB drive. A good plus side is that you don't need to mask all your passwords since the backup is locally at your home/residence.
+This will step you through the process of setting up a backup of your Home Assistant configuration to a USB device. This is a good method if you don't want to mask all of your passwords since the backup is kept locally at your home/residence.
### {% linkable_title Requirements %}
-First you need a USB drive. Once you have one you need to prepare it to be used on your device.
-Once connected you want to format/work with the drive. To know what path it is in, you can check with `dmesg`.
+
+First, you need a USB drive. It should be formatted properly for your device and connected to your device before beginning. Any type of partition will work, but Linux filesystems are preferred so that you can set permissions.
+Once connected you want to mount the drive. To find the path where it is located, you can use the `dmesg` command.
```bash
# dmesg | grep sd
@@ -32,16 +33,17 @@ Once connected you want to format/work with the drive. To know what path it is i
[726259.209004] sd 0:0:0:0: [sda] Attached SCSI removable disk
```
-Here we see we have a drive on `/dev/sda1`. We assume you created a partition on the drive to start with. This can be any type of partition. Preferred is a Linux filesystem type so you can set permissions!
+The device here is `sda` and our partition is `sda1`. So our partition is located here `/dev/sda1`.
Mount the drive (as root) to `/media`
```bash
-# mount /dev/sda1 /media/
+# sudo mount /dev/sda1 /media/
```
-### {% linkable_title Prepare USB Stick %}
-Change into it and create a folder called `hassbackup` and change the ownership to the user that runs Home Assistant. In my case group and user are both `homeassistant`.
+### {% linkable_title Prepare the USB Device %}
+
+Change to the `/media` directory and create a folder called `hassbackup`. Change the ownership to the user that runs Home Assistant. In this example case, the user and group are both `homeassistant`.
```bash
# cd /media/
@@ -54,11 +56,10 @@ drwxr-xr-x 22 root root 4096 Mar 22 18:37 ..
drwxr-xr-x 2 homeassistant homeassistant 4096 Apr 29 10:36 hassbackup
drwx------ 2 root root 16384 Apr 29 10:18 lost+found
```
-You can ignore 'lost+found'.
### {% linkable_title Install Dependency %}
-In order to preserve space on your drive we use zip. Install that too.
+The script in the next section uses zip to preserve space on your drive. So we will install zip next.
```bash
/media# apt-get install zip
@@ -68,9 +69,9 @@ Building dependency tree
Setting up zip (3.0-8) ...
```
-### {% linkable_title Install and run script %}
+### {% linkable_title Download and Run Script %}
-Become the `homeassistant` user and place the following [script](https://gist.github.com/riemers/041c6a386a2eab95c55ba3ccaa10e7b0) to a place of your liking.
+Become the `homeassistant` user (or whatever user runs Home Assistant). Change to whatever directory you would like the [script](https://gist.github.com/riemers/041c6a386a2eab95c55ba3ccaa10e7b0) placed into and run the following command.
```bash
# wget https://gist.githubusercontent.com/riemers/041c6a386a2eab95c55ba3ccaa10e7b0/raw/86727d4e72e9757da4f68f1c9d784720e72d0e99/usb_backup.sh
@@ -82,7 +83,7 @@ Make the downloaded script executable.
# chmod +x usb_backup.sh
```
-Open up the file and change the paths you want to use, then simply run the `./usb_backup.sh`.
+Edit the script file using your preferred text editor (use nano if you are not advanced). Change the paths to reflect your configuration, then simply run `./usb_backup.sh`.
```bash
$ .homeassistant/extraconfig/shell_code/usb_backup.sh
@@ -91,26 +92,27 @@ $ .homeassistant/extraconfig/shell_code/usb_backup.sh
[i] Keeping all files no prunning set
```
-### {% linkable_title Crontab %}
-In order for this to automatically make a backup every night at 3 am, you can add a crontab for it as the `homeassistant` user.
-Change below path to where you placed the `usb_backup.sh` and run the following line.
+### {% linkable_title Set Up Crontab %}
+
+To automatically backup your configuration on a schedule, you can add a crontab for it as the `homeassistant` user.
+Change the path below to the directory where you placed the `usb_backup.sh` and run the following line. This will backup every night at 3 am.
```bash
(crontab -l 2>/dev/null; echo "0 3 * * * /home/homeassistant/.homeassistant/extraconfig/shell_code/usb_backup.sh") | crontab -
```
-### {% linkable_title Auto mount %}
+### {% linkable_title Auto Mount the USB Device %}
-This does not automatically mount your USB drive at boot. You need to do that manually or add a line to your `/etc/fstab` file.
+NOTE: This does not automatically mount your USB drive at boot. You will need to manually mount your drive after each boot or add a line to your `/etc/fstab` file.
-If your drive is on `/dev/sda1`, you could add an entry to your `/etc/fstab` like so:
-
-```text
-/dev/sda1 /media ext4 defaults,noatime 0 1
-```
-
-Manual step to mount the USB drive:
+To manually mount a USB drive located at `/dev/sda1`, run the following line:
```bash
# mount /dev/sda1 /media
```
+
+Alternatively, auto-mount the drive by adding the following entry to your `/etc/fstab`:
+
+```text
+/dev/sda1 /media ext4 defaults,noatime 0 1
+```
diff --git a/source/_docs/ecosystem/nginx.markdown b/source/_docs/ecosystem/nginx.markdown
index 24e4c7e0849..46ae6152d1c 100644
--- a/source/_docs/ecosystem/nginx.markdown
+++ b/source/_docs/ecosystem/nginx.markdown
@@ -14,13 +14,17 @@ Using NGINX as a proxy for Home Assistant allows you to serve Home Assistant sec
### {% linkable_title 1. Get a domain name forwarded to your IP %}
-Chances are, you have a dynamic IP Address (your ISP changes your address periodically). If this is true, you can use a Dynamic DNS service to obtain a domain and set it up to update with you IP. If you purchase your own domain name, you will be able to easily get a trusted SSL certificate later.
+Chances are, you have a dynamic IP address (your ISP changes your address periodically). If this is true, you can use a Dynamic DNS service to obtain a domain and set it up to update with you IP. If you purchase your own domain name, you will be able to easily get a trusted SSL certificate later.
### {% linkable_title 2 Install nginx on your server %}
This will vary depending on your OS. Check out Google for this. After installing, ensure that NGINX is not running.
+
+You will at least need nginx >= 1.3.13, as WebSocket support is required for the reverse proxy.
+
+
### {% linkable_title 3. Obtain an SSL certificate %}
There are two ways of obtaining an SSL certificate.
@@ -28,7 +32,7 @@ There are two ways of obtaining an SSL certificate.
#### {% linkable_title Using Let's Encrypt %}
If you purchased your own domain, you can use https://letsencrypt.org/ to obtain a free, publicly trusted SSL certificate. This will allow you to work with services like IFTTT. Download and install per the instructions online and get a certificate using the following command.
-```
+```bash
$ sudo ./letsencrypt-auto certonly --standalone -d example.com -d www.example.com
```
@@ -75,14 +79,13 @@ $ sudo ln ../sites-available/hass default
Double check this configuration to ensure all settings are correct and start nginx.
-
### {% linkable_title 8. Port forwarding. %}
Forward ports 443 and 80 to your server on your router. Do not forward port 8123.
### {% linkable_title NGINX Config %}
-```
+```text
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
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-02-26-release-64.markdown b/source/_posts/2018-02-26-release-64.markdown
index 32185857ce8..c745d771fd5 100644
--- a/source/_posts/2018-02-26-release-64.markdown
+++ b/source/_posts/2018-02-26-release-64.markdown
@@ -82,6 +82,25 @@ Major new integration by [@snjoetw]: August locks and door bells! Lock and unloc
- MQTT: Fix doing async inside sync context ([@OttoWinter])
- Fix DarSky humidity precision ([@PhilRW])
+## {% linkable_title Release 0.64.2 - March 1 %}
+
+- updated to bimmer_connected 0.4.1 ([@ChristianKuehnel] - [#12759]) ([bmw_connected_drive docs])
+- Revert optimized logbook SQL ([@amelchio] - [#12762]) ([logbook docs])
+- bump fedex version ([@happyleavesaoc] - [#12764]) ([sensor.fedex docs])
+- Silence harmless sonos data structure warnings ([@amelchio] - [#12767]) ([media_player.sonos docs])
+- Update samsungctl library to latest version ([@uchagani] - [#12769]) ([media_player.samsungtv docs])
+- Fixed missing optional keyerror data_bits ([@basschipper] - [#12789]) ([binary_sensor.rfxtrx docs])
+- Fixed Pollen.com bugs with ZIP codes and invalid API responses ([@bachya] - [#12790]) ([sensor.pollen docs])
+- Fix dead Sonos web interface with some music sources ([@amelchio] - [#12796]) ([media_player.sonos docs])
+- Unique IDs for Plex Clients ([@ryanm101] - [#12799]) ([media_player.plex docs])
+
+## {% linkable_title Release 0.64.3 - March 2 %}
+
+- is_allowed_path: Also test folder #12788 #12807 ([@kellerza] - [#12810])
+- Fix sensibo default IDs to be according to schema ([@andrey-git] - [#12837]) ([climate.sensibo docs])
+- Cloud: handle unauth better ([@balloob] - [#12840]) ([cloud docs])
+- Handle Hue errors better ([@balloob] - [#12845]) ([hue 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.
@@ -606,3 +625,37 @@ Experiencing issues introduced by this release? Please report them in our [issue
[tahoma docs]: https://home-assistant.io/components/tahoma/
[vacuum.roomba docs]: https://home-assistant.io/components/vacuum.roomba/
[zha docs]: https://home-assistant.io/components/zha/
+[#12759]: https://github.com/home-assistant/home-assistant/pull/12759
+[#12762]: https://github.com/home-assistant/home-assistant/pull/12762
+[#12764]: https://github.com/home-assistant/home-assistant/pull/12764
+[#12767]: https://github.com/home-assistant/home-assistant/pull/12767
+[#12769]: https://github.com/home-assistant/home-assistant/pull/12769
+[#12789]: https://github.com/home-assistant/home-assistant/pull/12789
+[#12790]: https://github.com/home-assistant/home-assistant/pull/12790
+[#12796]: https://github.com/home-assistant/home-assistant/pull/12796
+[#12799]: https://github.com/home-assistant/home-assistant/pull/12799
+[@ChristianKuehnel]: https://github.com/ChristianKuehnel
+[@amelchio]: https://github.com/amelchio
+[@bachya]: https://github.com/bachya
+[@basschipper]: https://github.com/basschipper
+[@happyleavesaoc]: https://github.com/happyleavesaoc
+[@ryanm101]: https://github.com/ryanm101
+[@uchagani]: https://github.com/uchagani
+[binary_sensor.rfxtrx docs]: https://home-assistant.io/components/binary_sensor.rfxtrx/
+[bmw_connected_drive docs]: https://home-assistant.io/components/bmw_connected_drive/
+[logbook docs]: https://home-assistant.io/components/logbook/
+[media_player.plex docs]: https://home-assistant.io/components/media_player.plex/
+[media_player.samsungtv docs]: https://home-assistant.io/components/media_player.samsungtv/
+[media_player.sonos docs]: https://home-assistant.io/components/media_player.sonos/
+[sensor.fedex docs]: https://home-assistant.io/components/sensor.fedex/
+[sensor.pollen docs]: https://home-assistant.io/components/sensor.pollen/
+[#12810]: https://github.com/home-assistant/home-assistant/pull/12810
+[#12837]: https://github.com/home-assistant/home-assistant/pull/12837
+[#12840]: https://github.com/home-assistant/home-assistant/pull/12840
+[#12845]: https://github.com/home-assistant/home-assistant/pull/12845
+[@andrey-git]: https://github.com/andrey-git
+[@balloob]: https://github.com/balloob
+[@kellerza]: https://github.com/kellerza
+[climate.sensibo docs]: https://home-assistant.io/components/climate.sensibo/
+[cloud docs]: https://home-assistant.io/components/cloud/
+[hue docs]: https://home-assistant.io/components/hue/
\ No newline at end of file
diff --git a/source/_posts/2018-03-09-release-65.markdown b/source/_posts/2018-03-09-release-65.markdown
new file mode 100644
index 00000000000..c198e403ad0
--- /dev/null
+++ b/source/_posts/2018-03-09-release-65.markdown
@@ -0,0 +1,736 @@
+---
+layout: post
+title: "0.65: Rename entities, new filter sensor, UpCloud and Channels"
+description: "A new Home Assistant release full of amazing new features. Rename entities without a restart, filter out anomalies or apply other filters to data, improved HomeKit support."
+date: 2018-03-09 00:01:00
+date_formatted: "March 9, 2018"
+author: Paulus Schoutsen
+author_twitter: balloob
+comments: true
+categories: Release-Notes
+og_image: /images/blog/2018-03-0.65/entity-registry-name.gif
+---
+
+
+
+Release 0.65 has arrived and oh boy, is it awesome. First off, in case you have missed the previous release notes and [announcements](https://home-assistant.io/blog/2017/10/06/deprecating-python-3.4-support/): **Starting with this release, Home Assistant has dropped support for Python 3.4. The minimum supported version is now Python 3.5.3.** If you are on Hass.io or Docker, you'll automatically be running the latest and greatest. If you're on an older Hassbian installation or did your own Linux setup you'll need to upgrade to at least Python 3.5.3.
+
+## {% linkable_title Naming entities %}
+
+With the introduction of the entity registry in 0.63, Home Assistant is making sure that the same devices always receive the same entity IDs. This release is taking it a step further by allowing users to change the name of a device from the frontend. Changing the name will be instantly applied and overrides whatever name the device is given by the integration. If you want to switch back to the name from the integration, set the name to blank.
+
+_This feature is, just like the entity registry, only available for integrations that provide unique IDs for their entities. Adding this to each integration is still a work in progress._
+
+
+
+ The new entity registry settings page in action.
+
+
+## {% linkable_title Filter sensor %}
+
+The [filter sensor][sensor.filter docs] is a new 2nd order sensor by [@dgomes]: it will consume data from a sensor entity and apply filters to it. For the initial implementation it comes with Low-pass, Outlier and Throttle filters. Expect more to be added in the future.
+
+```yaml
+sensor:
+ - platform: filter
+ name: "filtered realistic humidity"
+ entity_id: sensor.realistic_humidity
+ filters:
+ - filter: outlier
+ window_size: 4
+ radius: 4.0
+ - filter: lowpass
+ time_constant: 10
+ precision: 2
+```
+
+
+
+ Graph showing both the input sensor and the output of the filter sensor.
+
+
+## {% linkable_title Light Group %}
+
+We have had some discussion lately and realized that our current group component is very limiting. Extending it would probably lead to more confusion so we've decided to take a new approach: groups that are designed to be part of a specific component. The first one in this series comes at the hand of [@OttoWinter]: the group light ([docs][light.group docs]).
+
+The group light creates a single light inside Home Assistant that is representing a group of lights. All commands will be forwarded and the state is a combination of all the lights.
+
+```yaml
+light:
+ - platform: group
+ name: Cool Light Group
+ entities:
+ - light.amazing_light
+ - light.foobar
+ - light.sun
+```
+
+## {% linkable_title HomeKit %}
+
+HomeKit got some more upgrades. We've added support for temperature sensors in Fahrenheit, alarm systems, switches and thermostats. Just a few releases more and we should be able to cover it all.
+
+## {% linkable_title Optional words for the Conversation component %}
+
+The [conversation component](/components/conversation/) has always been a great introduction to controlling your house by voice. There is no hotword detection or powerful language engine behind it, but it gives a great intro to what is possible. Starting with this release, it will get a little bit more powerful with the introduction of optional words. To mark a word optional, wrap it in square brackets: `Change the light to [the color] {color}`.
+
+```yaml
+# Example configuration.yaml entry
+conversation:
+ intents:
+ LivingRoomTemperature:
+ - What is the temperature in the living room
+ - What is [the] living room temperature
+
+intent_script:
+ LivingRoomTemperature:
+ speech:
+ text: It is currently {{ states.sensor.temperature }} degrees in the living room.
+```
+
+
+
+ Have conversations with Home Assistant via the conversation component.
+
+
+## {% linkable_title New Platforms %}
+
+- Synology Chat as a notification platform ([@cmsimike] - [#12596]) ([notify.synology_chat docs]) (new-platform)
+- KNX Component: Scene support and expose sensor values ([@Julius2342] - [#11978]) ([knx docs]) ([scene docs]) ([binary_sensor.knx docs]) (new-platform)
+- Adds simulated sensor ([@robmarkcole] - [#12539]) ([sensor.simulated docs]) (new-platform)
+- Add Songpal ("Sony Audio Control API") platform ([@rytilahti] - [#12143]) ([media_player.songpal docs]) (new-platform)
+- Add UpCloud platform ([@scop] - [#12011]) ([upcloud docs]) ([binary_sensor.upcloud docs]) ([switch.upcloud docs]) (new-platform)
+- Added Sense energy monitor sensor ([@kbickar] - [#11580]) ([sensor.sense docs]) (new-platform)
+- Filter Sensor ([@dgomes] - [#12650]) ([sensor.filter docs]) (new-platform)
+- Add light.group platform ([@OttoWinter] - [#12229]) ([light.group docs]) (new-platform)
+- Egardia redesign - generic component and sensor support ([@jeroenterheerdt] - [#11994]) ([egardia docs]) ([alarm_control_panel.egardia docs]) ([binary_sensor.egardia docs]) (breaking change) (new-platform)
+- Add support for Zillow Zestimate sensor ([@jcconnell] - [#12597]) ([sensor.zestimate docs]) (new-platform)
+- Add a Media Player Component for Channels ([@maddox] - [#12937]) ([media_player.channels docs]) (new-platform)
+- Add support for alarm system, switch and thermostat to homekit ([@maxclaey] - [#12819]) ([homekit docs]) (new-platform)
+- Add camera proxy ([@PhracturedBlue] - [#12006]) ([camera.proxy docs]) (new-platform)
+
+## {% linkable_title Release 0.65.1 - March 10 %}
+
+- allow ios device tracker see calls to go through ([@balloob] - [#13020]) ([device_tracker docs])
+- Fix config component loading YAML ([@kellerza] - [#13024])
+- Make Throttle async aware ([@balloob] - [#13027])
+- Add support for input boolean to Google Assistant ([@balloob] - [#13030]) ([google_assistant docs])
+- HomeKit Bugfix: names ([@cdce8p] - [#13031]) ([homekit docs])
+
+## {% linkable_title Release 0.65.2 - March 10 %}
+
+- Fix translations sometimes not loading in the frontend ([@armills])
+- Fix sensibo's min/max_temp properties ([@jra3] - [#12996]) ([climate.sensibo docs])
+- Use request.query ([@ptarjan] - [#13037]) ([wink docs])
+- Ensure we have valid config AFTER merging packages #13015 ([@kellerza] - [#13038])
+- Bump pysabnzbd version ([@jeradM] - [#13042]) ([sensor.sabnzbd docs])
+- Fix async lifx_set_state ([@amelchio] - [#13045]) ([light.lifx docs])
+- Yeelight version bumped. ([@syssi] - [#13056]) ([light.yeelight docs])
+- Don't call async from sync ([@balloob] - [#13057]) ([xiaomi_aqara docs])
+- Convert decimals from SQL results ([@balloob] - [#13059]) ([sensor.sql docs])
+
+## {% linkable_title Release 0.65.3 - March 11 %}
+
+- Implement Hue available property ([@balloob] - [#12939]) ([light.hue docs])
+- Catch async from sync context by running asyncio event loop in debug mode during tests ([@balloob] - [#13058]) ([camera.arlo docs]) ([climate.generic_thermostat docs])
+- Fixes KNX fire event problem, issue https://github.com/home-assistant/home-assistant/issues/13049 ([@Julius2342] - [#13062]) ([knx docs])
+- Bump iGlo Version ([@jesserockz] - [#13063]) ([light.iglo docs])
+- Fix Tado doing async wrong ([@balloob] - [#13078]) ([device_tracker.tado docs])
+- Synology Camera: auto-renew session when it's expired ([@snjoetw] - [#13079]) ([camera.synology docs])
+- Revert "Cast automatically drop connection (#12635)" ([@OttoWinter] - [#13094]) ([media_player.cast docs])
+- 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.
+
+## {% linkable_title Reporting Issues %}
+
+Experiencing issues introduced by this release? Please report them in our [issue tracker](https://github.com/home-assistant/home-assistant/issues). Make sure to fill in all fields of the issue template.
+
+
+## {% linkable_title Breaking Changes %}
+
+- Insteon PLM: If you have created platform overrides in your configuration.yaml file to change a your INSTEON device to map to a different Home Assistant platform, that mapping will no longer be in effect. Please see the new device override capabilities in the [insteon_plm documentation](https://home-assistant.io/components/insteon_plm/). ([@teharris1] - [#12534]) ([insteon_plm docs]) ([binary_sensor.insteon_plm docs]) ([fan.insteon_plm docs]) ([light.insteon_plm docs]) ([sensor.insteon_plm docs]) ([switch.insteon_plm docs]) (breaking change)
+- AirVisual's air index unit is AQI (Air Quality Index), not PSI (Pressure per Square Inch). ([@chilicheech] - [#12730]) ([sensor.airvisual docs]) (breaking change)
+- TekSavvy Sensor: The sensor entity id for peak upload usage used to be `sensor.teksavvy_on_peak_upload_` this has been changed to `sensor.teksavvy_on_peak_upload`. The `usage` title was shared between and therefore indeterminate between GB and % usage. Therefore % usage entity ID has been changed to `sensor.teksavvy_usage_ratio` ([@mikeodr] - [#12325]) ([sensor.teksavvy docs]) (breaking change)
+- Egardia redesign - generic component and sensor support ([@jeroenterheerdt] - [#11994]) ([egardia docs]) ([alarm_control_panel.egardia docs]) ([binary_sensor.egardia docs]) (breaking change) (new-platform)
+- zip_code for the Pollen integration is now required to have quotes around it to prevent accidental errors: `zip_code: "00544"` ([@bachya] - [#12934]) ([sensor.pollen docs]) (breaking change)
+- Google Assistant integration: It is no longer possible to override the domain that Home Assistant uses for an entity. This was bound to go wrong when we would test supported features for different domains. Also removed support for disguising temperature sensors as thermostats. We should follow the traits that Google offer us and not offer things that will only work half. ([@balloob] - [#12959]) ([google_assistant docs]) ([light docs]) (breaking change)
+- The LimitlessLED white temperature range has been adjusted and should now match the Mi-Light smartphone app for identical Kelvin values. ([@amelchio] - [#12971]) ([light.limitlessled docs]) (breaking change)
+
+## {% linkable_title All changes %}
+
+- Hello Python 3.5 ([@balloob] - [#12610])
+- Fix CODEOWNERS permissions ([@OttoWinter] - [#12621])
+- Xiaomi Aqara Gateway: Service descriptions added ([@syssi] - [#12631])
+- Removing asyncio.coroutine syntax from some components ([@Julius2342] - [#12507])
+- Allow renaming entities in entity registry ([@balloob] - [#12636]) ([config docs])
+- Check if $files is empty, don't try to execute it ([@armills] - [#12651])
+- Removed py34 ([@cdce8p] - [#12648])
+- Improved Homekit tests ([@cdce8p] - [#12647]) ([homekit docs])
+- Removing asyncio.coroutine syntax from HASS core ([@Julius2342] - [#12509])
+- Synology Chat as a notification platform ([@cmsimike] - [#12596]) ([notify.synology_chat docs]) (new-platform)
+- Enable pytradfri during build, and include in Docker ([@lwis] - [#12662])
+- Upgrade insteonplm to 0.8.2 (required refactoring) ([@teharris1] - [#12534]) ([insteon_plm docs]) ([binary_sensor.insteon_plm docs]) ([fan.insteon_plm docs]) ([light.insteon_plm docs]) ([sensor.insteon_plm docs]) ([switch.insteon_plm docs]) (breaking change)
+- Homekit Update, Support for TempSensor (°F) ([@cdce8p] - [#12676]) ([homekit docs])
+- Fix formatting of minutes for sleep start in the fitbit sensor ([@awkwardDuck] - [#12664]) ([sensor.fitbit docs])
+- KNX Component: Scene support and expose sensor values ([@Julius2342] - [#11978]) ([knx docs]) ([scene docs]) ([binary_sensor.knx docs]) (new-platform)
+- Added config validator for future group platforms ([@cdce8p] - [#12592])
+- Adds simulated sensor ([@robmarkcole] - [#12539]) ([sensor.simulated docs]) (new-platform)
+- Add history_graph component to demo ([@balloob] - [#12681]) ([demo docs])
+- Next generation of Xiaomi Aqara devices added ([@syssi] - [#12659]) ([xiaomi_aqara docs]) ([switch.xiaomi_aqara docs])
+- Fix homekit: temperature calculation ([@cdce8p] - [#12720]) ([homekit docs])
+- AsusWRT log exceptions ([@kellerza] - [#12668]) ([device_tracker.asuswrt docs])
+- Homekit schema gracefully fail with integer ([@kellerza] - [#12725]) ([homekit docs])
+- Update core HSV color scaling to standard scales: ([@armills] - [#12649]) ([light.hue docs]) ([light.lifx docs])
+- correct air index unit ([@chilicheech] - [#12730]) ([sensor.airvisual docs]) (breaking change)
+- Remove automatic sqlite vacuum ([@amelchio] - [#12728])
+- Disable asuswrt tests ([@armills] - [#12663])
+- Fix Citybikes naming ([@aronsky] - [#12661]) ([sensor.citybikes docs])
+- Xiaomi MiIO Light: Flag the device as unavailable if not reachable ([@syssi] - [#12449]) ([light.xiaomi_miio docs])
+- Check_config await error ([@kellerza] - [#12722])
+- Add Songpal ("Sony Audio Control API") platform ([@rytilahti] - [#12143]) ([media_player.songpal docs]) (new-platform)
+- Quote services.yaml string ([@amelchio] - [#12763])
+- Intent: Set light color ([@balloob] - [#12633]) ([light docs])
+- Update Yi platform to make use of async/await ([@bachya] - [#12713]) ([camera.yi docs])
+- Add custom header support for rest_command ([@doctorjames] - [#12646]) ([rest_command docs])
+- Round humidity for display purposes ([@PhilRW] - [#12766]) ([climate docs]) ([weather docs]) ([climate.wink docs]) ([weather.darksky docs])
+- Xiaomi MiIO Vacuum: Use a unique data key per domain ([@syssi] - [#12743]) ([vacuum.xiaomi_miio docs])
+- Add UpCloud platform ([@scop] - [#12011]) ([upcloud docs]) ([binary_sensor.upcloud docs]) ([switch.upcloud docs]) (new-platform)
+- Add Unit System Option For Fitbit ([@bertbert72] - [#11817]) ([sensor.fitbit docs])
+- Add 'lock' device class ([@swilson] - [#11640]) ([binary_sensor docs])
+- Bump frontend to 20180228.1 ([@balloob] - [#12786]) ([frontend docs])
+- Fix when 2 states match with same name ([@balloob] - [#12771])
+- MQTT Static Typing ([@OttoWinter] - [#12433]) ([mqtt docs])
+- Add "headers" config parameter to rest switch ([@mfrueh] - [#12706]) ([switch.rest docs])
+- Added Sense energy monitor sensor ([@kbickar] - [#11580]) ([sensor.sense docs]) (new-platform)
+- TekSavvy Sensor unlimited bandwidth support ([@mikeodr] - [#12325]) ([sensor.teksavvy docs]) (breaking change)
+- iCloud location tracking improvements ([@reedriley] - [#12399]) ([device_tracker.icloud docs])
+- Support serving of backend translations ([@armills] - [#12453]) ([frontend docs])
+- Translation cleanup ([@armills] - [#12804])
+- Take ownership of Emby, Eight Sleep, Hikvision ([@mezz64] - [#12803])
+- Bump pyHik version, digest auth, more device support ([@mezz64] - [#12801]) ([binary_sensor.hikvision docs])
+- Only run deploy from lint branch ([@armills] - [#12805])
+- Add optional words to conversation utterances ([@balloob] - [#12772]) ([conversation docs])
+- Changed default from `all` to `changed` ([@cdce8p] - [#12660])
+- Fix flakiness in tests ([@balloob] - [#12806])
+- Tibber: retry if we fail to connect at startup ([@danielhiversen] - [#12620]) ([sensor.tibber docs])
+- Cast Python Async Await Syntax ([@OttoWinter] - [#12816]) ([media_player.cast docs])
+- Filter Sensor ([@dgomes] - [#12650]) ([sensor.filter docs]) (new-platform)
+- MQTT Python 3.5 Async Await Syntax ([@OttoWinter] - [#12815]) ([mqtt docs])
+- Improved Homekit tests ([@cdce8p] - [#12800]) ([homekit docs])
+- Add light.group platform ([@OttoWinter] - [#12229]) ([light.group docs]) (new-platform)
+- Add icons to Xiaomi Aqara sensors ([@bakedraccoon] - [#12814]) ([sensor.xiaomi_aqara docs])
+- Egardia redesign - generic component and sensor support ([@jeroenterheerdt] - [#11994]) ([egardia docs]) ([alarm_control_panel.egardia docs]) ([binary_sensor.egardia docs]) (breaking change) (new-platform)
+- Skip flaky light.group test [skipci] ([@balloob] - [#12847])
+- Update volvooncall.py ([@danielhiversen] - [#12834]) ([switch.volvooncall docs])
+- Address upcloud post-merge comments (#12011) ([@scop] - [#12835]) ([upcloud docs]) ([binary_sensor.upcloud docs]) ([switch.upcloud docs])
+- Keep auto groups during group reload ([@amelchio] - [#12841]) ([group docs])
+- PyXiaomiGateway version bumped. ([@syssi] - [#12828]) ([xiaomi_aqara docs])
+- Fix light group update before add ([@OttoWinter] - [#12844]) ([light.group docs])
+- IndexError (list index out of range) fixed. ([@syssi] - [#12858]) ([sensor.xiaomi_aqara docs])
+- Fix dead Sonos web interface even more ([@amelchio] - [#12851]) ([media_player.sonos docs])
+- Updated to use latest ihcsdk version ([@dingusdk] - [#12865]) ([ihc docs])
+- Add unique id for Tibber sensor ([@danielhiversen] - [#12864]) ([sensor.tibber docs])
+- Add support for Zillow Zestimate sensor ([@jcconnell] - [#12597]) ([sensor.zestimate docs]) (new-platform)
+- Grammar fix 'an unique' ([@amelchio] - [#12870])
+- Add SQL index to states.event_id ([@amelchio] - [#12825])
+- Optimize logbook SQL query ([@amelchio] - [#12881]) ([logbook docs])
+- await syntax knx scene ([@Julius2342] - [#12879]) ([scene docs])
+- Fix 0 value when home-assistant restarts ([@bokub] - [#12874]) ([sensor.history_stats docs])
+- Fix aggressive scan intervals ([@balloob] - [#12885]) ([alarm_control_panel.concord232 docs]) ([binary_sensor.concord232 docs]) ([sensor.folder docs]) ([sensor.simulated docs])
+- Fix interaction with hyperion on NodeMCU ([@a-andre] - [#12872]) ([light.hyperion docs])
+- Add the Gamerscore and Tier of the account ([@kevintuhumury] - [#12867]) ([sensor.xbox_live docs])
+- Improve influxdb throughput ([@amelchio] - [#12882]) ([influxdb docs])
+- Add config flow for Hue ([@balloob] - [#12830]) ([config docs]) ([hue docs])
+- Fix issue with guest August lock being included ([@snjoetw] - [#12893]) ([august docs])
+- Upgrade to py-canary 0.4.1 ([@snjoetw] - [#12894]) ([canary docs])
+- update html5 to async/await ([@perosb] - [#12895]) ([notify.html5 docs])
+- Adding additional switches and sensors for Tesla ([@alandtse] - [#12241]) ([device_tracker.tesla docs]) ([sensor.tesla docs]) ([switch.tesla docs])
+- Additional radio schemes for sonos ([@amelchio] - [#12886]) ([media_player.sonos docs])
+- Fix Edimax new firmware auth error and move to pyedimax fork ([@andreipop2005] - [#12873]) ([switch.edimax docs])
+- InfluxDB cleanups ([@amelchio] - [#12903]) ([influxdb docs])
+- Fix for moisture sensors in isy994 ([@thejta] - [#12734]) ([binary_sensor.isy994 docs])
+- Apple TV should return all supported features ([@lucasweb78] - [#12167]) ([media_player.apple_tv docs])
+- Remove dynamic controls from sonos ([@amelchio] - [#12908]) ([media_player.sonos docs])
+- Fix async method call in sync context ([@balloob] - [#12890]) ([device_tracker.icloud docs])
+- update html5 to async/await tests ([@perosb] - [#12896])
+- Fixing small naming bug ([@ebfio] - [#12911]) ([sensor.serial_pm docs])
+- Tibber: Check if the current electricity price is available before we… ([@danielhiversen] - [#12905]) ([sensor.tibber docs])
+- Add empty unit to systemmonitor load averages ([@DanNixon] - [#12900]) ([sensor.systemmonitor docs])
+- update notify html5 dependencies ([@perosb] - [#12898]) ([notify.html5 docs])
+- Xiaomi MiIO Remote: Lazy discover disabled ([@syssi] - [#12710]) ([remote.xiaomi_miio docs])
+- Xiaomi MiIO Switch: Allow unavailable devices at startup by model setting ([@syssi] - [#12626]) ([switch.xiaomi_miio docs])
+- Update python-coinbase to 2.1.0 ([@balloob] - [#12925]) ([coinbase docs])
+- Remove unused cloud APIs ([@balloob] - [#12913]) ([cloud docs])
+- Upgrade to aiohttp 3 ([@balloob] - [#12921]) ([api docs]) ([http docs]) ([shopping_list docs])
+- Flaky tests ([@balloob] - [#12931])
+- Addresses issues with Pollen.com API troubles ([@bachya] - [#12930]) ([sensor.pollen docs])
+- Set supported features based on capabilities of device ([@maxclaey] - [#12922]) ([climate.nest docs])
+- Bumped (minor) version of xknx within knx-component. This fixes a bug with inverted percentage within sensors. ([@Julius2342] - [#12929]) ([knx docs]) ([light.knx docs])
+- Added checks for empty replies from REST calls and supporting tests ([@nickovs] - [#12904]) ([sensor.rest docs])
+- Reinstate our old virtual env check in favor of pip ([@balloob] - [#12932])
+- Support for queries with no results (fix for #12856) ([@dgomes] - [#12888]) ([sensor.sql docs])
+- Fix netatmo sensor warning from invalid Voluptuous default ([@amelchio] - [#12933]) ([sensor.netatmo docs])
+- Updated to enforce quoted ZIP codes for Pollen ([@bachya] - [#12934]) ([sensor.pollen docs]) (breaking change)
+- Added support for multiple onvif profiles ([@karlkar] - [#11651]) ([camera.onvif docs])
+- Make ubus dhcp name resolution optional ([@rmounce] - [#12658]) ([device_tracker.ubus docs])
+- Add add_devices back to rpi_camera ([@feanor12] - [#12947]) ([camera.rpi_camera docs])
+- Remove weird tests ([@balloob] - [#12936])
+- optional displaying the sensors location on the map ([@c7h] - [#12375]) ([sensor.luftdaten docs])
+- [SQL Sensor] partial revert of #12452 ([@dgomes] - [#12956]) ([sensor.sql docs])
+- Fix LIFX color conversions ([@amelchio] - [#12957]) ([light.lifx docs])
+- BugFix Popp strike lock not discovered in homeassistant. ([@turbokongen] - [#12951]) ([zwave docs])
+- Add a Media Player Component for Channels ([@maddox] - [#12937]) ([media_player.channels docs]) (new-platform)
+- Telegram_bot three platform support proxy_url and proxy_params ([@crhan] - [#12878]) ([telegram_bot.broadcast docs]) ([telegram_bot.polling docs]) ([telegram_bot.webhooks docs])
+- Add support for alarm system, switch and thermostat to homekit ([@maxclaey] - [#12819]) ([homekit docs]) (new-platform)
+- Pin lokalise script to working version ([@armills] - [#12965])
+- Hue: Don't change brightness when changing just color ([@balloob] - [#12940]) ([light.hue docs])
+- LIFX async/await conversion ([@amelchio] - [#12973]) ([light.lifx docs])
+- IMAP sensor async/await conversion ([@amelchio] - [#12988]) ([sensor.imap docs])
+- Refactor Google Assistant ([@balloob] - [#12959]) ([google_assistant docs]) ([light docs]) (breaking change)
+- Bump pyEmby version to support aiohttp => 3 ([@mezz64] - [#12986]) ([media_player.emby docs])
+- Update pyalarmdotcom version ([@koolsb] - [#12987]) ([alarm_control_panel.alarmdotcom docs])
+- Show the error message when Zabbix fails to log in ([@cyberjacob] - [#12985]) ([zabbix docs])
+- Script/gen_requirements: Ignore package families ([@cdce8p] - [#12963])
+- Fix Sonos group discovery ([@amelchio] - [#12970]) ([media_player.sonos docs])
+- Check color temp range for google assistant ([@balloob] - [#12994]) ([google_assistant docs])
+- Fix limitlessled color temperature ([@amelchio] - [#12971]) ([light.limitlessled docs]) (breaking change)
+- Fixes notify.html5 for notifications on FireFox ([@corneyl] - [#12993]) ([notify.html5 docs])
+- Move HomeAssistantView to separate file. Convert http to async syntax. [skip ci] ([@fanthos] - [#12982]) ([http docs])
+- Get zha switch and binary_sensor state on startup ([@SteveEasley] - [#11672]) ([zha docs]) ([binary_sensor.zha docs]) ([light.zha docs]) ([switch.zha docs])
+- Add camera proxy ([@PhracturedBlue] - [#12006]) ([camera.proxy docs]) (new-platform)
+- check_config script evolution ([@kellerza] - [#12792])
+- Plex mark devices unavailable if they 'vanish' and clear media ([@ryanm101] - [#12811]) ([media_player.plex docs])
+- Add consider_home and source_type to device_tracker.see service ([@mueslo] - [#12849]) ([device_tracker docs])
+- Clean up Light Groups ([@OttoWinter] - [#12962]) ([light.group docs])
+- Updated to plexapi 3.0.6 ([@ryanm101] - [#13005]) ([media_player.plex docs]) ([sensor.plex docs])
+
+[#11580]: https://github.com/home-assistant/home-assistant/pull/11580
+[#11640]: https://github.com/home-assistant/home-assistant/pull/11640
+[#11651]: https://github.com/home-assistant/home-assistant/pull/11651
+[#11672]: https://github.com/home-assistant/home-assistant/pull/11672
+[#11817]: https://github.com/home-assistant/home-assistant/pull/11817
+[#11978]: https://github.com/home-assistant/home-assistant/pull/11978
+[#11994]: https://github.com/home-assistant/home-assistant/pull/11994
+[#12006]: https://github.com/home-assistant/home-assistant/pull/12006
+[#12011]: https://github.com/home-assistant/home-assistant/pull/12011
+[#12143]: https://github.com/home-assistant/home-assistant/pull/12143
+[#12167]: https://github.com/home-assistant/home-assistant/pull/12167
+[#12229]: https://github.com/home-assistant/home-assistant/pull/12229
+[#12241]: https://github.com/home-assistant/home-assistant/pull/12241
+[#12325]: https://github.com/home-assistant/home-assistant/pull/12325
+[#12375]: https://github.com/home-assistant/home-assistant/pull/12375
+[#12399]: https://github.com/home-assistant/home-assistant/pull/12399
+[#12433]: https://github.com/home-assistant/home-assistant/pull/12433
+[#12449]: https://github.com/home-assistant/home-assistant/pull/12449
+[#12453]: https://github.com/home-assistant/home-assistant/pull/12453
+[#12507]: https://github.com/home-assistant/home-assistant/pull/12507
+[#12509]: https://github.com/home-assistant/home-assistant/pull/12509
+[#12534]: https://github.com/home-assistant/home-assistant/pull/12534
+[#12539]: https://github.com/home-assistant/home-assistant/pull/12539
+[#12592]: https://github.com/home-assistant/home-assistant/pull/12592
+[#12596]: https://github.com/home-assistant/home-assistant/pull/12596
+[#12597]: https://github.com/home-assistant/home-assistant/pull/12597
+[#12610]: https://github.com/home-assistant/home-assistant/pull/12610
+[#12620]: https://github.com/home-assistant/home-assistant/pull/12620
+[#12621]: https://github.com/home-assistant/home-assistant/pull/12621
+[#12626]: https://github.com/home-assistant/home-assistant/pull/12626
+[#12631]: https://github.com/home-assistant/home-assistant/pull/12631
+[#12633]: https://github.com/home-assistant/home-assistant/pull/12633
+[#12636]: https://github.com/home-assistant/home-assistant/pull/12636
+[#12646]: https://github.com/home-assistant/home-assistant/pull/12646
+[#12647]: https://github.com/home-assistant/home-assistant/pull/12647
+[#12648]: https://github.com/home-assistant/home-assistant/pull/12648
+[#12649]: https://github.com/home-assistant/home-assistant/pull/12649
+[#12650]: https://github.com/home-assistant/home-assistant/pull/12650
+[#12651]: https://github.com/home-assistant/home-assistant/pull/12651
+[#12658]: https://github.com/home-assistant/home-assistant/pull/12658
+[#12659]: https://github.com/home-assistant/home-assistant/pull/12659
+[#12660]: https://github.com/home-assistant/home-assistant/pull/12660
+[#12661]: https://github.com/home-assistant/home-assistant/pull/12661
+[#12662]: https://github.com/home-assistant/home-assistant/pull/12662
+[#12663]: https://github.com/home-assistant/home-assistant/pull/12663
+[#12664]: https://github.com/home-assistant/home-assistant/pull/12664
+[#12668]: https://github.com/home-assistant/home-assistant/pull/12668
+[#12676]: https://github.com/home-assistant/home-assistant/pull/12676
+[#12681]: https://github.com/home-assistant/home-assistant/pull/12681
+[#12706]: https://github.com/home-assistant/home-assistant/pull/12706
+[#12710]: https://github.com/home-assistant/home-assistant/pull/12710
+[#12713]: https://github.com/home-assistant/home-assistant/pull/12713
+[#12720]: https://github.com/home-assistant/home-assistant/pull/12720
+[#12722]: https://github.com/home-assistant/home-assistant/pull/12722
+[#12725]: https://github.com/home-assistant/home-assistant/pull/12725
+[#12728]: https://github.com/home-assistant/home-assistant/pull/12728
+[#12730]: https://github.com/home-assistant/home-assistant/pull/12730
+[#12734]: https://github.com/home-assistant/home-assistant/pull/12734
+[#12743]: https://github.com/home-assistant/home-assistant/pull/12743
+[#12763]: https://github.com/home-assistant/home-assistant/pull/12763
+[#12766]: https://github.com/home-assistant/home-assistant/pull/12766
+[#12771]: https://github.com/home-assistant/home-assistant/pull/12771
+[#12772]: https://github.com/home-assistant/home-assistant/pull/12772
+[#12786]: https://github.com/home-assistant/home-assistant/pull/12786
+[#12792]: https://github.com/home-assistant/home-assistant/pull/12792
+[#12800]: https://github.com/home-assistant/home-assistant/pull/12800
+[#12801]: https://github.com/home-assistant/home-assistant/pull/12801
+[#12803]: https://github.com/home-assistant/home-assistant/pull/12803
+[#12804]: https://github.com/home-assistant/home-assistant/pull/12804
+[#12805]: https://github.com/home-assistant/home-assistant/pull/12805
+[#12806]: https://github.com/home-assistant/home-assistant/pull/12806
+[#12811]: https://github.com/home-assistant/home-assistant/pull/12811
+[#12814]: https://github.com/home-assistant/home-assistant/pull/12814
+[#12815]: https://github.com/home-assistant/home-assistant/pull/12815
+[#12816]: https://github.com/home-assistant/home-assistant/pull/12816
+[#12819]: https://github.com/home-assistant/home-assistant/pull/12819
+[#12825]: https://github.com/home-assistant/home-assistant/pull/12825
+[#12828]: https://github.com/home-assistant/home-assistant/pull/12828
+[#12830]: https://github.com/home-assistant/home-assistant/pull/12830
+[#12834]: https://github.com/home-assistant/home-assistant/pull/12834
+[#12835]: https://github.com/home-assistant/home-assistant/pull/12835
+[#12841]: https://github.com/home-assistant/home-assistant/pull/12841
+[#12844]: https://github.com/home-assistant/home-assistant/pull/12844
+[#12847]: https://github.com/home-assistant/home-assistant/pull/12847
+[#12849]: https://github.com/home-assistant/home-assistant/pull/12849
+[#12851]: https://github.com/home-assistant/home-assistant/pull/12851
+[#12858]: https://github.com/home-assistant/home-assistant/pull/12858
+[#12864]: https://github.com/home-assistant/home-assistant/pull/12864
+[#12865]: https://github.com/home-assistant/home-assistant/pull/12865
+[#12867]: https://github.com/home-assistant/home-assistant/pull/12867
+[#12870]: https://github.com/home-assistant/home-assistant/pull/12870
+[#12872]: https://github.com/home-assistant/home-assistant/pull/12872
+[#12873]: https://github.com/home-assistant/home-assistant/pull/12873
+[#12874]: https://github.com/home-assistant/home-assistant/pull/12874
+[#12878]: https://github.com/home-assistant/home-assistant/pull/12878
+[#12879]: https://github.com/home-assistant/home-assistant/pull/12879
+[#12881]: https://github.com/home-assistant/home-assistant/pull/12881
+[#12882]: https://github.com/home-assistant/home-assistant/pull/12882
+[#12885]: https://github.com/home-assistant/home-assistant/pull/12885
+[#12886]: https://github.com/home-assistant/home-assistant/pull/12886
+[#12888]: https://github.com/home-assistant/home-assistant/pull/12888
+[#12890]: https://github.com/home-assistant/home-assistant/pull/12890
+[#12893]: https://github.com/home-assistant/home-assistant/pull/12893
+[#12894]: https://github.com/home-assistant/home-assistant/pull/12894
+[#12895]: https://github.com/home-assistant/home-assistant/pull/12895
+[#12896]: https://github.com/home-assistant/home-assistant/pull/12896
+[#12898]: https://github.com/home-assistant/home-assistant/pull/12898
+[#12900]: https://github.com/home-assistant/home-assistant/pull/12900
+[#12903]: https://github.com/home-assistant/home-assistant/pull/12903
+[#12904]: https://github.com/home-assistant/home-assistant/pull/12904
+[#12905]: https://github.com/home-assistant/home-assistant/pull/12905
+[#12908]: https://github.com/home-assistant/home-assistant/pull/12908
+[#12911]: https://github.com/home-assistant/home-assistant/pull/12911
+[#12913]: https://github.com/home-assistant/home-assistant/pull/12913
+[#12921]: https://github.com/home-assistant/home-assistant/pull/12921
+[#12922]: https://github.com/home-assistant/home-assistant/pull/12922
+[#12925]: https://github.com/home-assistant/home-assistant/pull/12925
+[#12929]: https://github.com/home-assistant/home-assistant/pull/12929
+[#12930]: https://github.com/home-assistant/home-assistant/pull/12930
+[#12931]: https://github.com/home-assistant/home-assistant/pull/12931
+[#12932]: https://github.com/home-assistant/home-assistant/pull/12932
+[#12933]: https://github.com/home-assistant/home-assistant/pull/12933
+[#12934]: https://github.com/home-assistant/home-assistant/pull/12934
+[#12936]: https://github.com/home-assistant/home-assistant/pull/12936
+[#12937]: https://github.com/home-assistant/home-assistant/pull/12937
+[#12940]: https://github.com/home-assistant/home-assistant/pull/12940
+[#12947]: https://github.com/home-assistant/home-assistant/pull/12947
+[#12951]: https://github.com/home-assistant/home-assistant/pull/12951
+[#12956]: https://github.com/home-assistant/home-assistant/pull/12956
+[#12957]: https://github.com/home-assistant/home-assistant/pull/12957
+[#12959]: https://github.com/home-assistant/home-assistant/pull/12959
+[#12962]: https://github.com/home-assistant/home-assistant/pull/12962
+[#12963]: https://github.com/home-assistant/home-assistant/pull/12963
+[#12965]: https://github.com/home-assistant/home-assistant/pull/12965
+[#12970]: https://github.com/home-assistant/home-assistant/pull/12970
+[#12971]: https://github.com/home-assistant/home-assistant/pull/12971
+[#12973]: https://github.com/home-assistant/home-assistant/pull/12973
+[#12982]: https://github.com/home-assistant/home-assistant/pull/12982
+[#12985]: https://github.com/home-assistant/home-assistant/pull/12985
+[#12986]: https://github.com/home-assistant/home-assistant/pull/12986
+[#12987]: https://github.com/home-assistant/home-assistant/pull/12987
+[#12988]: https://github.com/home-assistant/home-assistant/pull/12988
+[#12993]: https://github.com/home-assistant/home-assistant/pull/12993
+[#12994]: https://github.com/home-assistant/home-assistant/pull/12994
+[#13005]: https://github.com/home-assistant/home-assistant/pull/13005
+[@DanNixon]: https://github.com/DanNixon
+[@Julius2342]: https://github.com/Julius2342
+[@OttoWinter]: https://github.com/OttoWinter
+[@PhilRW]: https://github.com/PhilRW
+[@PhracturedBlue]: https://github.com/PhracturedBlue
+[@SteveEasley]: https://github.com/SteveEasley
+[@a-andre]: https://github.com/a-andre
+[@alandtse]: https://github.com/alandtse
+[@amelchio]: https://github.com/amelchio
+[@andreipop2005]: https://github.com/andreipop2005
+[@armills]: https://github.com/armills
+[@aronsky]: https://github.com/aronsky
+[@awkwardDuck]: https://github.com/awkwardDuck
+[@bachya]: https://github.com/bachya
+[@bakedraccoon]: https://github.com/bakedraccoon
+[@balloob]: https://github.com/balloob
+[@bertbert72]: https://github.com/bertbert72
+[@bokub]: https://github.com/bokub
+[@c7h]: https://github.com/c7h
+[@cdce8p]: https://github.com/cdce8p
+[@chilicheech]: https://github.com/chilicheech
+[@cmsimike]: https://github.com/cmsimike
+[@corneyl]: https://github.com/corneyl
+[@crhan]: https://github.com/crhan
+[@cyberjacob]: https://github.com/cyberjacob
+[@danielhiversen]: https://github.com/danielhiversen
+[@dgomes]: https://github.com/dgomes
+[@dingusdk]: https://github.com/dingusdk
+[@doctorjames]: https://github.com/doctorjames
+[@ebfio]: https://github.com/ebfio
+[@fanthos]: https://github.com/fanthos
+[@feanor12]: https://github.com/feanor12
+[@jcconnell]: https://github.com/jcconnell
+[@jeroenterheerdt]: https://github.com/jeroenterheerdt
+[@karlkar]: https://github.com/karlkar
+[@kbickar]: https://github.com/kbickar
+[@kellerza]: https://github.com/kellerza
+[@kevintuhumury]: https://github.com/kevintuhumury
+[@koolsb]: https://github.com/koolsb
+[@lucasweb78]: https://github.com/lucasweb78
+[@lwis]: https://github.com/lwis
+[@maddox]: https://github.com/maddox
+[@maxclaey]: https://github.com/maxclaey
+[@mezz64]: https://github.com/mezz64
+[@mfrueh]: https://github.com/mfrueh
+[@mikeodr]: https://github.com/mikeodr
+[@mueslo]: https://github.com/mueslo
+[@nickovs]: https://github.com/nickovs
+[@perosb]: https://github.com/perosb
+[@reedriley]: https://github.com/reedriley
+[@rmounce]: https://github.com/rmounce
+[@robmarkcole]: https://github.com/robmarkcole
+[@ryanm101]: https://github.com/ryanm101
+[@rytilahti]: https://github.com/rytilahti
+[@scop]: https://github.com/scop
+[@snjoetw]: https://github.com/snjoetw
+[@swilson]: https://github.com/swilson
+[@syssi]: https://github.com/syssi
+[@teharris1]: https://github.com/teharris1
+[@thejta]: https://github.com/thejta
+[@turbokongen]: https://github.com/turbokongen
+[alarm_control_panel.alarmdotcom docs]: https://home-assistant.io/components/alarm_control_panel.alarmdotcom/
+[alarm_control_panel.concord232 docs]: https://home-assistant.io/components/alarm_control_panel.concord232/
+[alarm_control_panel.egardia docs]: https://home-assistant.io/components/alarm_control_panel.egardia/
+[api docs]: https://home-assistant.io/components/api/
+[august docs]: https://home-assistant.io/components/august/
+[binary_sensor docs]: https://home-assistant.io/components/binary_sensor/
+[binary_sensor.concord232 docs]: https://home-assistant.io/components/binary_sensor.concord232/
+[binary_sensor.egardia docs]: https://home-assistant.io/components/binary_sensor.egardia/
+[binary_sensor.hikvision docs]: https://home-assistant.io/components/binary_sensor.hikvision/
+[binary_sensor.insteon_plm docs]: https://home-assistant.io/components/binary_sensor.insteon_plm/
+[binary_sensor.isy994 docs]: https://home-assistant.io/components/binary_sensor.isy994/
+[binary_sensor.knx docs]: https://home-assistant.io/components/binary_sensor.knx/
+[binary_sensor.upcloud docs]: https://home-assistant.io/components/binary_sensor.upcloud/
+[binary_sensor.zha docs]: https://home-assistant.io/components/binary_sensor.zha/
+[camera.onvif docs]: https://home-assistant.io/components/camera.onvif/
+[camera.proxy docs]: https://home-assistant.io/components/camera.proxy/
+[camera.rpi_camera docs]: https://home-assistant.io/components/camera.rpi_camera/
+[camera.yi docs]: https://home-assistant.io/components/camera.yi/
+[canary docs]: https://home-assistant.io/components/canary/
+[climate docs]: https://home-assistant.io/components/climate/
+[climate.nest docs]: https://home-assistant.io/components/climate.nest/
+[climate.wink docs]: https://home-assistant.io/components/climate.wink/
+[cloud docs]: https://home-assistant.io/components/cloud/
+[coinbase docs]: https://home-assistant.io/components/coinbase/
+[config docs]: https://home-assistant.io/components/config/
+[conversation docs]: https://home-assistant.io/components/conversation/
+[demo docs]: https://home-assistant.io/components/demo/
+[device_tracker docs]: https://home-assistant.io/components/device_tracker/
+[device_tracker.asuswrt docs]: https://home-assistant.io/components/device_tracker.asuswrt/
+[device_tracker.icloud docs]: https://home-assistant.io/components/device_tracker.icloud/
+[device_tracker.tesla docs]: https://home-assistant.io/components/device_tracker.tesla/
+[device_tracker.ubus docs]: https://home-assistant.io/components/device_tracker.ubus/
+[egardia docs]: https://home-assistant.io/components/egardia/
+[fan.insteon_plm docs]: https://home-assistant.io/components/fan.insteon_plm/
+[frontend docs]: https://home-assistant.io/components/frontend/
+[google_assistant docs]: https://home-assistant.io/components/google_assistant/
+[group docs]: https://home-assistant.io/components/group/
+[homekit docs]: https://home-assistant.io/components/homekit/
+[http docs]: https://home-assistant.io/components/http/
+[hue docs]: https://home-assistant.io/components/hue/
+[ihc docs]: https://home-assistant.io/components/ihc/
+[influxdb docs]: https://home-assistant.io/components/influxdb/
+[insteon_plm docs]: https://home-assistant.io/components/insteon_plm/
+[knx docs]: https://home-assistant.io/components/knx/
+[light docs]: https://home-assistant.io/components/light/
+[light.demo docs]: https://home-assistant.io/components/light.demo/
+[light.group docs]: https://home-assistant.io/components/light.group/
+[light.group docs]: https://home-assistant.io/components/light.group/
+[light.hue docs]: https://home-assistant.io/components/light.hue/
+[light.hyperion docs]: https://home-assistant.io/components/light.hyperion/
+[light.insteon_plm docs]: https://home-assistant.io/components/light.insteon_plm/
+[light.knx docs]: https://home-assistant.io/components/light.knx/
+[light.lifx docs]: https://home-assistant.io/components/light.lifx/
+[light.limitlessled docs]: https://home-assistant.io/components/light.limitlessled/
+[light.xiaomi_miio docs]: https://home-assistant.io/components/light.xiaomi_miio/
+[light.zha docs]: https://home-assistant.io/components/light.zha/
+[logbook docs]: https://home-assistant.io/components/logbook/
+[media_player.apple_tv docs]: https://home-assistant.io/components/media_player.apple_tv/
+[media_player.cast docs]: https://home-assistant.io/components/media_player.cast/
+[media_player.channels docs]: https://home-assistant.io/components/media_player.channels/
+[media_player.emby docs]: https://home-assistant.io/components/media_player.emby/
+[media_player.plex docs]: https://home-assistant.io/components/media_player.plex/
+[media_player.songpal docs]: https://home-assistant.io/components/media_player.songpal/
+[media_player.sonos docs]: https://home-assistant.io/components/media_player.sonos/
+[mqtt docs]: https://home-assistant.io/components/mqtt/
+[notify.html5 docs]: https://home-assistant.io/components/notify.html5/
+[notify.synology_chat docs]: https://home-assistant.io/components/notify.synology_chat/
+[remote.xiaomi_miio docs]: https://home-assistant.io/components/remote.xiaomi_miio/
+[rest_command docs]: https://home-assistant.io/components/rest_command/
+[scene docs]: https://home-assistant.io/components/scene/
+[sensor.airvisual docs]: https://home-assistant.io/components/sensor.airvisual/
+[sensor.citybikes docs]: https://home-assistant.io/components/sensor.citybikes/
+[sensor.filter docs]: https://home-assistant.io/components/sensor.filter/
+[sensor.fitbit docs]: https://home-assistant.io/components/sensor.fitbit/
+[sensor.folder docs]: https://home-assistant.io/components/sensor.folder/
+[sensor.history_stats docs]: https://home-assistant.io/components/sensor.history_stats/
+[sensor.imap docs]: https://home-assistant.io/components/sensor.imap/
+[sensor.insteon_plm docs]: https://home-assistant.io/components/sensor.insteon_plm/
+[sensor.luftdaten docs]: https://home-assistant.io/components/sensor.luftdaten/
+[sensor.netatmo docs]: https://home-assistant.io/components/sensor.netatmo/
+[sensor.plex docs]: https://home-assistant.io/components/sensor.plex/
+[sensor.pollen docs]: https://home-assistant.io/components/sensor.pollen/
+[sensor.rest docs]: https://home-assistant.io/components/sensor.rest/
+[sensor.sense docs]: https://home-assistant.io/components/sensor.sense/
+[sensor.serial_pm docs]: https://home-assistant.io/components/sensor.serial_pm/
+[sensor.simulated docs]: https://home-assistant.io/components/sensor.simulated/
+[sensor.sql docs]: https://home-assistant.io/components/sensor.sql/
+[sensor.systemmonitor docs]: https://home-assistant.io/components/sensor.systemmonitor/
+[sensor.teksavvy docs]: https://home-assistant.io/components/sensor.teksavvy/
+[sensor.tesla docs]: https://home-assistant.io/components/sensor.tesla/
+[sensor.tibber docs]: https://home-assistant.io/components/sensor.tibber/
+[sensor.xbox_live docs]: https://home-assistant.io/components/sensor.xbox_live/
+[sensor.xiaomi_aqara docs]: https://home-assistant.io/components/sensor.xiaomi_aqara/
+[sensor.zestimate docs]: https://home-assistant.io/components/sensor.zestimate/
+[shopping_list docs]: https://home-assistant.io/components/shopping_list/
+[switch.edimax docs]: https://home-assistant.io/components/switch.edimax/
+[switch.insteon_plm docs]: https://home-assistant.io/components/switch.insteon_plm/
+[switch.rest docs]: https://home-assistant.io/components/switch.rest/
+[switch.tesla docs]: https://home-assistant.io/components/switch.tesla/
+[switch.upcloud docs]: https://home-assistant.io/components/switch.upcloud/
+[switch.volvooncall docs]: https://home-assistant.io/components/switch.volvooncall/
+[switch.xiaomi_aqara docs]: https://home-assistant.io/components/switch.xiaomi_aqara/
+[switch.xiaomi_miio docs]: https://home-assistant.io/components/switch.xiaomi_miio/
+[switch.zha docs]: https://home-assistant.io/components/switch.zha/
+[telegram_bot.broadcast docs]: https://home-assistant.io/components/telegram_bot.broadcast/
+[telegram_bot.polling docs]: https://home-assistant.io/components/telegram_bot.polling/
+[telegram_bot.webhooks docs]: https://home-assistant.io/components/telegram_bot.webhooks/
+[upcloud docs]: https://home-assistant.io/components/upcloud/
+[vacuum.xiaomi_miio docs]: https://home-assistant.io/components/vacuum.xiaomi_miio/
+[weather docs]: https://home-assistant.io/components/weather/
+[weather.darksky docs]: https://home-assistant.io/components/weather.darksky/
+[xiaomi_aqara docs]: https://home-assistant.io/components/xiaomi_aqara/
+[zabbix docs]: https://home-assistant.io/components/zabbix/
+[zha docs]: https://home-assistant.io/components/zha/
+[zwave docs]: https://home-assistant.io/components/zwave/
+[#13020]: https://github.com/home-assistant/home-assistant/pull/13020
+[#13024]: https://github.com/home-assistant/home-assistant/pull/13024
+[#13027]: https://github.com/home-assistant/home-assistant/pull/13027
+[#13030]: https://github.com/home-assistant/home-assistant/pull/13030
+[#13031]: https://github.com/home-assistant/home-assistant/pull/13031
+[@balloob]: https://github.com/balloob
+[@cdce8p]: https://github.com/cdce8p
+[@kellerza]: https://github.com/kellerza
+[device_tracker docs]: https://home-assistant.io/components/device_tracker/
+[google_assistant docs]: https://home-assistant.io/components/google_assistant/
+[homekit docs]: https://home-assistant.io/components/homekit/
+[#12996]: https://github.com/home-assistant/home-assistant/pull/12996
+[#13037]: https://github.com/home-assistant/home-assistant/pull/13037
+[#13038]: https://github.com/home-assistant/home-assistant/pull/13038
+[#13042]: https://github.com/home-assistant/home-assistant/pull/13042
+[#13045]: https://github.com/home-assistant/home-assistant/pull/13045
+[#13056]: https://github.com/home-assistant/home-assistant/pull/13056
+[#13057]: https://github.com/home-assistant/home-assistant/pull/13057
+[#13059]: https://github.com/home-assistant/home-assistant/pull/13059
+[@amelchio]: https://github.com/amelchio
+[@balloob]: https://github.com/balloob
+[@jeradM]: https://github.com/jeradM
+[@jra3]: https://github.com/jra3
+[@kellerza]: https://github.com/kellerza
+[@armills]: https://github.com/armills
+[@ptarjan]: https://github.com/ptarjan
+[@syssi]: https://github.com/syssi
+[climate.sensibo docs]: https://home-assistant.io/components/climate.sensibo/
+[light.lifx docs]: https://home-assistant.io/components/light.lifx/
+[light.yeelight docs]: https://home-assistant.io/components/light.yeelight/
+[sensor.sabnzbd docs]: https://home-assistant.io/components/sensor.sabnzbd/
+[sensor.sql docs]: https://home-assistant.io/components/sensor.sql/
+[wink docs]: https://home-assistant.io/components/wink/
+[xiaomi_aqara docs]: https://home-assistant.io/components/xiaomi_aqara/
+[#12939]: https://github.com/home-assistant/home-assistant/pull/12939
+[#13058]: https://github.com/home-assistant/home-assistant/pull/13058
+[#13062]: https://github.com/home-assistant/home-assistant/pull/13062
+[#13063]: https://github.com/home-assistant/home-assistant/pull/13063
+[#13078]: https://github.com/home-assistant/home-assistant/pull/13078
+[#13079]: https://github.com/home-assistant/home-assistant/pull/13079
+[#13094]: https://github.com/home-assistant/home-assistant/pull/13094
+[#13095]: https://github.com/home-assistant/home-assistant/pull/13095
+[#13096]: https://github.com/home-assistant/home-assistant/pull/13096
+[@Julius2342]: https://github.com/Julius2342
+[@OttoWinter]: https://github.com/OttoWinter
+[@Tadly]: https://github.com/Tadly
+[@balloob]: https://github.com/balloob
+[@jesserockz]: https://github.com/jesserockz
+[@pavoni]: https://github.com/pavoni
+[@snjoetw]: https://github.com/snjoetw
+[camera.arlo docs]: https://home-assistant.io/components/camera.arlo/
+[camera.synology docs]: https://home-assistant.io/components/camera.synology/
+[climate.generic_thermostat docs]: https://home-assistant.io/components/climate.generic_thermostat/
+[device_tracker.tado docs]: https://home-assistant.io/components/device_tracker.tado/
+[knx docs]: https://home-assistant.io/components/knx/
+[light.hue docs]: https://home-assistant.io/components/light.hue/
+[light.iglo docs]: https://home-assistant.io/components/light.iglo/
+[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/cloud/google_assistant.markdown b/source/cloud/google_assistant.markdown
index f76dd80d481..155b2356a73 100644
--- a/source/cloud/google_assistant.markdown
+++ b/source/cloud/google_assistant.markdown
@@ -16,7 +16,7 @@ To use this integration, you need to have:
- The cloud component set up. [Learn more](/components/cloud/)
- A Google Assistant enabled device like the Google Home
- - Activated the Home Assistant Smart Home skill for Google Assistant
+ - Activated the [Home Assistant Smart Home skill for Google Assistant](https://assistant.google.com/services/a/uid/00000091fd5fb875)
You can use `configuration.yaml` to configure the entities that are being shown to Google Assistant and how they are exposed.
diff --git a/source/developers/architecture.markdown b/source/developers/architecture.markdown
index c92361a4fc2..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,8 +34,8 @@ 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/development_states.markdown b/source/developers/development_states.markdown
index 369f87ea54b..6da9e5fbc97 100644
--- a/source/developers/development_states.markdown
+++ b/source/developers/development_states.markdown
@@ -137,4 +137,4 @@ def device_state_attributes(self):
Entities also have a similar property `state_attributes`, which normally doesn't need to be defined by new platforms. This property is used by base components to add standard sets of attributes to a state. Example: The light component uses `state_attributes` to add brightness to the state dictionary. If you are designing a new component, you should define `state_attributes` instead.
-To get your component included in the Home Assistant releases, follow the steps described in the [Submitting improvements](https://home-assistant.io/developers/#submitting-improvements) section. Basically you only need to move your component in the `homeassistant/component/` directory of your fork and create a Pull Request.
+To get your component included in the Home Assistant releases, follow the steps described in the [Submit your work](https://home-assistant.io/developers/development_submitting/) section. Basically you only need to move your component in the `homeassistant/component/` directory of your fork and create a Pull Request.
diff --git a/source/developers/development_testing.markdown b/source/developers/development_testing.markdown
index b1bc38d0c29..14dcf03c577 100644
--- a/source/developers/development_testing.markdown
+++ b/source/developers/development_testing.markdown
@@ -54,10 +54,10 @@ $ pydocstyle homeassistant/core.py
$ py.test tests/test_core.py
```
-You can also run linting tests against all changed files, as reported by `git diff upstream/dev --name-only`, using the `lint` script:
+You can also run linting tests against all changed files, as reported by `git diff upstream/dev... --diff-filter=d --name-only`, using the `lint` script:
```bash
-$ script/lint --changed
+$ script/lint
```
### {% linkable_title Preventing Linter Errors %}
diff --git a/source/developers/documentation/create_page.markdown b/source/developers/documentation/create_page.markdown
index f2bf29dcef1..cb0c4125198 100644
--- a/source/developers/documentation/create_page.markdown
+++ b/source/developers/documentation/create_page.markdown
@@ -122,3 +122,6 @@ The images which are displayed on the pages are stored in various directories ac
| screenshots | source/images/components |
Not everything (product, component, etc.) should have a logo. To show something for internal parts of Home Assistant we are using the [Material Design Icons](https://materialdesignicons.com/).
+
+### {% linkable_title Linking From The Sidebar %}
+If you are adding a new page that requires linking from the sidebar you need to edit the `docs_navigation.html` file in `home-assistant.github.io/source/_includes/asides/docs_navigation.html`.
diff --git a/source/developers/frontend_creating_custom_ui.markdown b/source/developers/frontend_creating_custom_ui.markdown
index 7a4b8eeb418..d28623e8da1 100644
--- a/source/developers/frontend_creating_custom_ui.markdown
+++ b/source/developers/frontend_creating_custom_ui.markdown
@@ -48,11 +48,25 @@ frontend:
-
+
```
+
+Some browsers don't support latest ECMAScript standards, these require a separate ES5 compatible file (`extra_html_url_es5`).
+
For more possibilities, see the [Custom UI section](/cookbook/#user-interface) on our Examples page.
diff --git a/source/developers/internationalization/backend_localization.markdown b/source/developers/internationalization/backend_localization.markdown
new file mode 100644
index 00000000000..f50d797045a
--- /dev/null
+++ b/source/developers/internationalization/backend_localization.markdown
@@ -0,0 +1,51 @@
+---
+layout: page
+title: "Backend Localization"
+description: "Translating platforms in Home Assistant"
+date: 2018-03-01 18:00
+sidebar: true
+comments: false
+sharing: true
+footer: true
+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. 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/developers/internationalization/custom_component_localization.markdown b/source/developers/internationalization/custom_component_localization.markdown
new file mode 100644
index 00000000000..b7d12664d4d
--- /dev/null
+++ b/source/developers/internationalization/custom_component_localization.markdown
@@ -0,0 +1,20 @@
+---
+layout: page
+title: "Custom Component Localization"
+description: "Translating custom components in Home Assistant"
+date: 2018-03-01 18:00
+sidebar: true
+comments: false
+sharing: true
+footer: true
+ha_release: 0.64
+---
+
+## {% linkable_title Translation Strings %}
+Unlike localized strings merged in the home-assistant repository, custom components cannot take advantage of Lokalise for user submitted translations. However, custom component authors can still include translation with their components. These will be read from the `.translations` directory, adjacent to the component source file. They are named `..json`, unless the custom component exists in its own directory, in which case the file is simply named `.json` in the `.translations` directory.
+
+These files follow the same formatting as [backend translation string files](/developers/internationalization/backend_localization/), but a copy will exist for each translated language.
+
+The language codes follow the [BCP47](https://tools.ietf.org/html/bcp47) format. The [frontend translation files](https://github.com/home-assistant/home-assistant-polymer/tree/master/translations) can also be referred to if you are unsure of the correct language code to use.
+
+The frontend will serve these files after Home Assistant is restarted.
diff --git a/source/developers/internationalization/index.markdown b/source/developers/internationalization/index.markdown
new file mode 100644
index 00000000000..109502fe458
--- /dev/null
+++ b/source/developers/internationalization/index.markdown
@@ -0,0 +1,19 @@
+---
+layout: page
+title: "Internationalization"
+description: "Home Assistant internationalization summary"
+date: 2018-03-01 18:00
+sidebar: true
+comments: false
+sharing: true
+footer: true
+ha_release: 0.64
+---
+
+The Home Assistant internationalization project includes preparing platforms and the frontend for localization, as well as the actual translation of localized strings.
+
+Some compmonents and platforms will have strings that need to be localized specifically for that platform. These strings are managed in the core [home-assistant](https://github.com/home-assistant/home-assistant) repository. The Home Assistant backend will serve strings to the clients based on the loaded components in the running instance.
+
+There are also localizable strings that exist only on the frontend. These strings are managed in the [home-assistant-polymer](https://github.com/home-assistant/home-assistant-polymer) repository. These strings are stored with the frontend and don’t depend on the backend configuration.
+
+Our strings are translated by the community using the online translation tool [Lokalise](https://lokalise.co/).
diff --git a/source/developers/frontend_translation.markdown b/source/developers/internationalization/translation.markdown
similarity index 79%
rename from source/developers/frontend_translation.markdown
rename to source/developers/internationalization/translation.markdown
index 99a231941f0..334a68e6aa3 100644
--- a/source/developers/frontend_translation.markdown
+++ b/source/developers/internationalization/translation.markdown
@@ -1,19 +1,23 @@
---
layout: page
-title: "Frontend Translation"
-description: "How to translate the frontend for Home Assistant."
+title: "Translation"
+description: "How to translate Home Assistant."
date: 2017-10-27 13:00
sidebar: true
comments: false
sharing: true
footer: true
ha_release: 0.57
+redirect_from: /developers/frontend_translation/
---
## {% linkable_title How to start %}
-[Join the translation team](https://lokalise.co/signup/3420425759f6d6d241f598.13594006/all/) and choose your language. Even if your language is completely translated, extra proofreading is a big help! Please feel free to review the existing translations, and vote for alternatives that might be more appropriate.
+Translations for Home Assistant are managed through Lokalise, an online translation management tool. Our translations are split between two projects, a backend project for platform-specific translations, and a frontend project for UI translations. Click the links below to join both projects! Even if your language is completely translated, extra proofreading is a big help! Please feel free to review the existing translations, and vote for alternatives that might be more appropriate.
-First time users may find it helpful to switch between multilanguage and single language view using the button. For more information about the translation workflow, please see the [Lokalise translation workflow documents](https://docs.lokalise.co/category/iOzEuQPS53-for-team-leads-and-translators).
+- [Join the frontend translation team](https://lokalise.co/signup/3420425759f6d6d241f598.13594006/all/)
+- [Join the backend translation team](https://lokalise.co/signup/130246255a974bd3b5e8a1.51616605/all/)
+
+For more information about the translation workflow, please see the [Lokalise translation workflow documents](https://docs.lokalise.co/category/iOzEuQPS53-for-team-leads-and-translators).
The translation of the Home Assistant frontend is still a work in progress. More phrases will be available for translation soon.
diff --git a/source/getting-started/index.markdown b/source/getting-started/index.markdown
index abb8cf7e72c..429c6b4cb8a 100644
--- a/source/getting-started/index.markdown
+++ b/source/getting-started/index.markdown
@@ -17,7 +17,7 @@ Follow this guide if you want to easily get started with Home Assistant, or if y
We will need a few things to get started with installing Home Assistant. Links below are linking to Amazon US. If you're not in the US, you should be able to find these items in web stores in your country.
-- [Raspberry Pi 3 model B](http://a.co/gEfMqL4) + [Power Supply](http://a.co/cgKUgkt) (at least 2.5A)
+- [Raspberry Pi 3 model B](http://a.co/gEfMqL4) + [Power Supply](https://www.raspberrypi.org/help/faqs/#powerReqs) (at least 2.5A)
- [Micro SD Card](http://a.co/gslOydD). Get one that is Class 10 as they are more reliable. Size 32GB or bigger recommended.
- SD Card reader. Part of most laptops, and also available as [standalone USB sticks](http://a.co/5FCyb0N) (the brand doesn't matter, just pick the cheapest)
- Ethernet cable (optional, Hass.io can work with WiFi too)
diff --git a/source/hassio/index.markdown b/source/hassio/index.markdown
index fdddad8dd39..d53336e89ca 100644
--- a/source/hassio/index.markdown
+++ b/source/hassio/index.markdown
@@ -57,7 +57,7 @@ Hass.io upgrade process from the SSH command line
## {% linkable_title hassio command %}
-On the SSH command line tyou can use the `hassio` command to retrieve logs, check the details of connected hardware, and more.
+On the SSH command line you can use the `hassio` command to retrieve logs, check the details of connected hardware, and more.
HomeAssistant:
``` $ hassio homeassistant logs
diff --git a/source/hassio/installation.markdown b/source/hassio/installation.markdown
index 1a3113dffce..2a26994493a 100644
--- a/source/hassio/installation.markdown
+++ b/source/hassio/installation.markdown
@@ -17,20 +17,19 @@ Hass.io images are available for all available Raspberry Pi and Intel NUC platfo
- [Raspberry Pi 3][pi3]
- [Intel NUC][nuc]
-- Unpack the .bz2 File
- Flash the downloaded image to an SD card using [Etcher].
- Optional - Setup the WiFi or static IP: On the SD-card, edit the `system-connections/resin-sample` file and follow the [ResinOS howto][resinos-network].
- Insert SD card to Raspberry Pi and turn it on. On first boot, it downloads the latest version of Home Assistant which takes ~20 minutes (slower/faster depending on the platform).
-
-Please remember to ensure you're using an [appropriate power supply](https://www.raspberrypi.org/help/faqs/#powerReqs) with your Pi. Mobile chargers may not be suitable since some are designed to only provide the full power with that manufacturer's handsets.
-
-
- You will be able to reach your installation at [http://hassio.local:8123][local].
- Enable either the [Samba add-on][samba] or the [SSH add-on][ssh] to manage your configuration in `/config/` (From the UI choose **Hass.io** which is located in the sidebar).
+
+Please remember to ensure you're using an [appropriate power supply](https://www.raspberrypi.org/help/faqs/#powerReqs) with your Pi. Mobile chargers may not be suitable since some are designed to only provide the full power with that manufacturer's handsets.
+
+
If you copy over your existing Home Assistant configuration, make sure to enable the Hass.io panel by adding either `discovery:` or `hassio:` to your configuration.
@@ -51,10 +50,10 @@ A detailed guide about running Hass.io as a virtual machine is available in the
[Etcher]: https://etcher.io/
[resinos-network]: https://docs.resin.io/deployment/network/2.0.0/
-[pi1]: https://github.com/home-assistant/hassio-build/releases/download/1.1/resinos-hassio-1.1-raspberrypi.img.bz2
-[pi2]: https://github.com/home-assistant/hassio-build/releases/download/1.1/resinos-hassio-1.1-raspberrypi2.img.bz2
-[pi3]: https://github.com/home-assistant/hassio-build/releases/download/1.1/resinos-hassio-1.1-raspberrypi3.img.bz2
-[nuc]: https://github.com/home-assistant/hassio-build/releases/download/1.1/resinos-hassio-1.1-intel-nuc.img.bz2
+[pi1]: https://github.com/home-assistant/hassio-build/releases/download/1.3/resinos-hassio-1.3-raspberrypi.img.bz2
+[pi2]: https://github.com/home-assistant/hassio-build/releases/download/1.3/resinos-hassio-1.3-raspberrypi2.img.bz2
+[pi3]: https://github.com/home-assistant/hassio-build/releases/download/1.3/resinos-hassio-1.3-raspberrypi3.img.bz2
+[nuc]: https://github.com/home-assistant/hassio-build/releases/download/1.3/resinos-hassio-1.3-intel-nuc.img.bz2
[linux]: https://github.com/home-assistant/hassio-build/tree/master/install#install-hassio
[local]: http://hassio.local:8123
[samba]: /addons/samba/
diff --git a/source/hassio/installing_third_party_addons.markdown b/source/hassio/installing_third_party_addons.markdown
index 1d320586fa2..828ed90e590 100644
--- a/source/hassio/installing_third_party_addons.markdown
+++ b/source/hassio/installing_third_party_addons.markdown
@@ -20,15 +20,15 @@ Home Assistant cannot guarantee the quality or security of third-party add-ons.
-
+
From the Hass.io main panel open the add-on store.
-
-Add the URLs of repositories (one per line) and then press "Save". A new card for the repository will appear.
+
+Add the URL of the repository and then press "Add". A new card for the repository will appear.
### {% linkable_title Help: Repository is not showing up %}
-If you have added a repository, but it's not showing up, it means that the repository contains invalid configuration. Go to the Hass.io panel -> Three dot menu -> Advanced Settings -> Supervisor card -> View logs and scroll to the bottom. It should tell you what went wrong. Report this information to the repository author.
+If you have added a repository, but it's not showing up, it means that the repository contains invalid configuration. Go to the Hass.io panel and then the System tab to find the System log. It should tell you what went wrong. Report this information to the repository author.
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/ha_architecture.svg b/source/images/architecture/ha_architecture.svg
new file mode 100644
index 00000000000..dbe41b93bc9
--- /dev/null
+++ b/source/images/architecture/ha_architecture.svg
@@ -0,0 +1,856 @@
+
+
+
+
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/blog/2018-03-0.65/components.png b/source/images/blog/2018-03-0.65/components.png
new file mode 100644
index 00000000000..74ef7019330
Binary files /dev/null and b/source/images/blog/2018-03-0.65/components.png differ
diff --git a/source/images/blog/2018-03-0.65/entity-registry-name.gif b/source/images/blog/2018-03-0.65/entity-registry-name.gif
new file mode 100644
index 00000000000..0af429f850a
Binary files /dev/null and b/source/images/blog/2018-03-0.65/entity-registry-name.gif differ
diff --git a/source/images/blog/2018-03-0.65/filter-example.png b/source/images/blog/2018-03-0.65/filter-example.png
new file mode 100644
index 00000000000..eab04040b32
Binary files /dev/null and b/source/images/blog/2018-03-0.65/filter-example.png differ
diff --git a/source/images/blog/2018-03-0.65/voice-commands.png b/source/images/blog/2018-03-0.65/voice-commands.png
new file mode 100644
index 00000000000..39a98deef7e
Binary files /dev/null and b/source/images/blog/2018-03-0.65/voice-commands.png differ
diff --git a/source/images/components/light/group.png b/source/images/components/light/group.png
new file mode 100644
index 00000000000..00abf866382
Binary files /dev/null and b/source/images/components/light/group.png differ
diff --git a/source/images/frontend/lokalise-multilanguage-view-button.png b/source/images/frontend/lokalise-multilanguage-view-button.png
deleted file mode 100644
index 26872d47266..00000000000
Binary files a/source/images/frontend/lokalise-multilanguage-view-button.png and /dev/null differ
diff --git a/source/images/hassio/screenshots/adding_repositories.png b/source/images/hassio/screenshots/adding_repositories.png
new file mode 100644
index 00000000000..ef3edc88f5d
Binary files /dev/null and b/source/images/hassio/screenshots/adding_repositories.png differ
diff --git a/source/images/hassio/screenshots/main_panel_addon_store.png b/source/images/hassio/screenshots/main_panel_addon_store.png
new file mode 100644
index 00000000000..deffb7db03a
Binary files /dev/null and b/source/images/hassio/screenshots/main_panel_addon_store.png differ
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
diff --git a/source/images/supported_brands/channels.png b/source/images/supported_brands/channels.png
new file mode 100644
index 00000000000..a0eb0435d7b
Binary files /dev/null and b/source/images/supported_brands/channels.png differ
diff --git a/source/images/supported_brands/foobot.png b/source/images/supported_brands/foobot.png
new file mode 100644
index 00000000000..2d502c2cdac
Binary files /dev/null and b/source/images/supported_brands/foobot.png differ
diff --git a/source/images/supported_brands/sony.png b/source/images/supported_brands/sony.png
new file mode 100644
index 00000000000..78a8e8440b1
Binary files /dev/null and b/source/images/supported_brands/sony.png differ
diff --git a/source/images/supported_brands/stride.png b/source/images/supported_brands/stride.png
new file mode 100644
index 00000000000..ec9825c808c
Binary files /dev/null and b/source/images/supported_brands/stride.png differ
diff --git a/source/images/supported_brands/vesync.png b/source/images/supported_brands/vesync.png
new file mode 100644
index 00000000000..72aba904138
Binary files /dev/null and b/source/images/supported_brands/vesync.png differ