From bf9911e6e38b06b707c3afe6cc47872b396f5ae5 Mon Sep 17 00:00:00 2001 From: Will Heid Date: Thu, 13 Jul 2017 16:16:49 -0700 Subject: [PATCH 01/17] emphasized that wired internet needs to be connected for the entire bootstrap process. --- source/_docs/hassbian/installation.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/hassbian/installation.markdown b/source/_docs/hassbian/installation.markdown index 454122ae2ed..cf39fde867e 100644 --- a/source/_docs/hassbian/installation.markdown +++ b/source/_docs/hassbian/installation.markdown @@ -14,7 +14,7 @@ The easiest way to install Home Assistant on your Raspberry Pi is by using HASSb 1. [Download the Hassbian image][image-download] (364 MB) 2. Use [Etcher][etcher] to flash the image to your SD card - 3. Ensure your Raspberry Pi has wired access to the internet. + 3. Ensure your Raspberry Pi has wired access to the internet for the entire process. 4. Insert SD card to Raspberry Pi and turn it on. Initial installation of Home Assistant will take about 5 minutes. These instructions are also available as a [video](https://www.youtube.com/watch?v=iIz6XqDwHEk). Additional information is available in this [video](https://www.youtube.com/watch?v=tCGlQSsQ-Mc). From 892b2045a3cc0efd5666a57883232b673e2fce7a Mon Sep 17 00:00:00 2001 From: Gavin Mogan Date: Thu, 13 Jul 2017 22:42:38 -0700 Subject: [PATCH 02/17] Replace Samsung with Sharp Aquos (#2972) --- source/_components/media_player.aquostv.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/_components/media_player.aquostv.markdown b/source/_components/media_player.aquostv.markdown index e6f48815641..2c764f46873 100644 --- a/source/_components/media_player.aquostv.markdown +++ b/source/_components/media_player.aquostv.markdown @@ -29,10 +29,10 @@ media_player: Configuration variables: -- **host** (*Required*): The IP/Hostname of the Samsung Smart TV, eg. `192.168.0.10`. -- **port** (*Optional*): The port of the Samsung Smart TV. Defaults to 10002. -- **username** (*Optional*): The username of the Samsung Smart TV. Defaults to admin. -- **password** (*Optional*): The password of the Samsung Smart TV. Defaults to password. +- **host** (*Required*): The IP/Hostname of the Sharp Aquos TV, eg. `192.168.0.10`. +- **port** (*Optional*): The port of the Sharp Aquos TV. Defaults to 10002. +- **username** (*Optional*): The username of the Sharp Aquos TV. Defaults to admin. +- **password** (*Optional*): The password of the Sharp Aquos TV. Defaults to password. - **name** (*Optional*): The name you would like to give to the Sharp Aquos TV. - **power_on_enabled** (*Optional*): If you want to be able to turn on your TV. Defaults to False. From ad63d2ce63462497716cc078100d74e962d2da44 Mon Sep 17 00:00:00 2001 From: IainPHay Date: Fri, 14 Jul 2017 14:58:35 +0100 Subject: [PATCH 03/17] Update sensor.darksky.markdown (#2974) Line 71 typo corrected: update_interval was incorrect --- source/_components/sensor.darksky.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.darksky.markdown b/source/_components/sensor.darksky.markdown index 1fd1ec5bcc3..a070d2b6783 100644 --- a/source/_components/sensor.darksky.markdown +++ b/source/_components/sensor.darksky.markdown @@ -68,7 +68,7 @@ Configuration variables: - **precip_intensity_max**: Today's expected maximum intensity of precipitation. - **units** (*Optional*): Specify the unit system. Default to `si` or `us` based on the temperature preference in Home Assistant. Other options are `auto`, `us`, `si`, `ca`, and `uk2`. `auto` will let Dark Sky decide the unit system based on location. -- **update_inverval** (*Optional*): Minimum time interval between updates. Default is 2 minutes. Supported formats: +- **update_interval** (*Optional*): Minimum time interval between updates. Default is 2 minutes. Supported formats: - `update_interval: 'HH:MM:SS'` - `update_interval: 'HH:MM'` - Time period dictionary, e.g.: From 23585871fbd1c5c6fe3c2f19dc9faee755d0dea8 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 14 Jul 2017 16:35:34 +0200 Subject: [PATCH 04/17] The default on Fedora 26 is Python 3.6 --- source/_docs/installation/fedora.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation/fedora.markdown b/source/_docs/installation/fedora.markdown index de30c165722..bbb74f3f001 100644 --- a/source/_docs/installation/fedora.markdown +++ b/source/_docs/installation/fedora.markdown @@ -33,7 +33,7 @@ Now switch to the new directory, setup the venv, and activate it. ```bash $ cd /opt/homeassistant -$ pyvenv-3.5 . +$ python3.6 -m venv . $ source bin/activate ``` From 419540348dd97abefaf517ef851fcd6207aaeae8 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Sat, 15 Jul 2017 01:37:22 +0200 Subject: [PATCH 05/17] Update addon_config.markdown --- source/hassio/addon_config.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/hassio/addon_config.markdown b/source/hassio/addon_config.markdown index e4e5d6bb5df..8760ae6d918 100644 --- a/source/hassio/addon_config.markdown +++ b/source/hassio/addon_config.markdown @@ -95,7 +95,7 @@ The config for an add-on is stored in `config.json`. | description | yes | Description of the add-on | arch | no | List of supported arch: `armhf`, `aarch64`, `amd64`, `i386`. Default all. | url | no | Homepage of the addon. Here you can explain the add-ons and options. -| startup | yes | `initialize` will start addon on setup of hassio. `before` homeassistant will start. `after` homeassistant will start or `once` for application they don't run as deamon. +| startup | yes | `initialize` will start addon on setup of hassio. `system` is for things like database and base not on other things. `services` will start before homeassistant. `application` is after homeassistant will start or `once` for application they don't run as deamon. | boot | yes | `auto` by system and manual or only `manual` | ports | no | Network ports to expose from the container. Format is `"container-port/type": host-port`. | host_network | no | If that is True, the add-on run on host network. @@ -111,7 +111,7 @@ The config for an add-on is stored in `config.json`. ### {% linkable_title Options / Schema %} -The `options` dict contains all available options and their default value. Set the default value to `null` if the value is required to be given by the user before the add-on can start. Only non-nested arrays are supported. +The `options` dict contains all available options and their default value. Set the default value to `null` if the value is required to be given by the user before the add-on can start. Only non-nested arrays and dictorys are supported. ```json { From ca80944d740e6cf021d5114c32491b0b8cdfcd78 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 14 Jul 2017 22:56:40 -0700 Subject: [PATCH 06/17] Update Hass.io docs --- source/_addons/bluetooth_bcm43xx.markdown | 6 +- source/_addons/check_config.markdown | 2 +- source/_addons/dhcp_server.markdown | 4 +- source/_addons/dnsmasq.markdown | 4 +- source/_addons/mosquitto.markdown | 10 +++ source/_addons/nginx_proxy.markdown | 2 +- source/_addons/snips.markdown | 74 ++++++++++++++++++ source/_addons/ssh.markdown | 27 ++----- .../_docs/automation/troubleshooting.markdown | 2 +- .../asides/developers_navigation.html | 24 +++++- .../_includes/asides/hassio_navigation.html | 17 ++-- source/addons/index.html | 9 ++- source/developers/api.markdown | 6 +- .../architecture_components.markdown | 24 +++--- .../hassio/addon_config.markdown | 1 + .../hassio/addon_development.markdown | 9 +++ .../hassio/addon_publishing.markdown | 1 + .../hassio/addon_repository.markdown | 1 + .../hassio/addon_testing.markdown | 1 + .../hassio/addon_tutorial.markdown | 3 +- .../hassio/architecture.markdown | 1 + .../hassio/debugging.markdown | 7 ++ source/hassio/index.markdown | 31 +++++++- source/hassio/installation.markdown | 11 ++- .../installing_third_party_addons.markdown | 8 +- source/hassio/run_local.markdown | 20 +++-- source/hassio/zwave.markdown | 17 ++++ .../screenshots/addon_repository_editor.png | Bin 8032 -> 0 bytes .../images/hassio/screenshots/dashboard.png | Bin 0 -> 12968 bytes .../screenshots/main_panel_store_icon.png | Bin 34323 -> 25150 bytes .../screenshots/repositories_editor.png | Bin 7989 -> 26747 bytes 31 files changed, 248 insertions(+), 74 deletions(-) create mode 100644 source/_addons/snips.markdown rename source/{ => developers}/hassio/addon_config.markdown (99%) rename source/{ => developers}/hassio/addon_development.markdown (63%) rename source/{ => developers}/hassio/addon_publishing.markdown (98%) rename source/{ => developers}/hassio/addon_repository.markdown (96%) rename source/{ => developers}/hassio/addon_testing.markdown (97%) rename source/{ => developers}/hassio/addon_tutorial.markdown (98%) rename source/{ => developers}/hassio/architecture.markdown (97%) rename source/{ => developers}/hassio/debugging.markdown (87%) create mode 100644 source/hassio/zwave.markdown delete mode 100644 source/images/hassio/screenshots/addon_repository_editor.png create mode 100644 source/images/hassio/screenshots/dashboard.png diff --git a/source/_addons/bluetooth_bcm43xx.markdown b/source/_addons/bluetooth_bcm43xx.markdown index 86fdf43922d..6051a694bba 100644 --- a/source/_addons/bluetooth_bcm43xx.markdown +++ b/source/_addons/bluetooth_bcm43xx.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Bluetooth BCM43xx" -description: "Activate bluetooth for bcm43xx" +description: "Activate the BCM43xx Bluetooth chipset on a Raspberry Pi 3." date: 2017-04-30 13:28 sidebar: true comments: false @@ -9,4 +9,6 @@ sharing: true footer: true --- -Start Bluetooth for BCM43xx chipset on startup. Like Raspberry Pi3 +Start this add-on to activate the BCM43xx Bluetooth chipset. + +Supported platforms: Raspberry Pi 3. diff --git a/source/_addons/check_config.markdown b/source/_addons/check_config.markdown index 7eaafc2b33e..932f4d50547 100644 --- a/source/_addons/check_config.markdown +++ b/source/_addons/check_config.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Check Home Assistant configuration" -description: "Check Home Assistant configuration against a new version" +description: "Check your current Home Assistant configuration against a new version" date: 2017-04-30 13:28 sidebar: true comments: false diff --git a/source/_addons/dhcp_server.markdown b/source/_addons/dhcp_server.markdown index 7ce04f553ce..1eb8c8f5f25 100644 --- a/source/_addons/dhcp_server.markdown +++ b/source/_addons/dhcp_server.markdown @@ -1,7 +1,7 @@ --- layout: page title: "DHCP server" -description: "A simple dhcp server" +description: "A simple DHCP server." date: 2017-04-30 13:28 sidebar: true comments: false @@ -9,7 +9,7 @@ sharing: true footer: true --- -Create a simple DHCP server for your network and allow set fix ip for some devices. +Create a simple DHCP server for your network and allow setting fixed IPs for devices. ```json { diff --git a/source/_addons/dnsmasq.markdown b/source/_addons/dnsmasq.markdown index fe4687f4412..79639249005 100644 --- a/source/_addons/dnsmasq.markdown +++ b/source/_addons/dnsmasq.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Dnsmasq" -description: "A simple dns server with benefits." +description: "A simple DNS server." date: 2017-04-30 13:28 sidebar: true comments: false @@ -9,7 +9,7 @@ sharing: true footer: true --- -Setup and manage a [Dnsmasq](http://thekelleys.org.uk/dnsmasq/doc.html) dns server. This allow your to manipulate some dns requests. I.e. that inside your network, your homeassistant domain will resolve with a internal address. +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. diff --git a/source/_addons/mosquitto.markdown b/source/_addons/mosquitto.markdown index ef37e5fd0c4..065e86e9d74 100644 --- a/source/_addons/mosquitto.markdown +++ b/source/_addons/mosquitto.markdown @@ -22,9 +22,19 @@ Set up a [mosquitto](https://mosquitto.org/) MQTT broker. } ``` +

Make sure you use logins and disable anonymous access if you want to secure the system.

+ Configuration variables: - **plain** (*Optional*): Listen to broker on port 1883 without SSL/TLS. Defaults to `true`. - **ssl** (*Optional*): Listen to broker on port 8883 with SSL/TLS. This requires certificates. Defaults to `false`. - **anonymous** (*Optional*): Allow anonymous connection. If *logins* is set, anonymous user can only read data. Defaults to `true`. - **logins** (*Optional*): A list of user that will be created with *username* and *password*. + +### {% linkable_title Home Assistant configuration %} + +```yaml +# Example configuration.yaml entry +mqtt: + broker: 172.17.0.1 +``` diff --git a/source/_addons/nginx_proxy.markdown b/source/_addons/nginx_proxy.markdown index d2a4d882e37..defb16a3847 100644 --- a/source/_addons/nginx_proxy.markdown +++ b/source/_addons/nginx_proxy.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Nginx SSL proxy" -description: "Nginx HomeAssistant SSL proxy" +description: "Nginx Home Assistant SSL proxy" date: 2017-04-30 13:28 sidebar: true comments: false diff --git a/source/_addons/snips.markdown b/source/_addons/snips.markdown new file mode 100644 index 00000000000..a4006419dac --- /dev/null +++ b/source/_addons/snips.markdown @@ -0,0 +1,74 @@ +--- +layout: page +title: "Snips.ai" +description: "Enhance your Hass.io installation with a local voice assistant." +date: 2017-04-30 13:28 +sidebar: true +comments: false +sharing: true +footer: true +--- + +[Snips.ai] is an AI-powered voice assistant that runs on the Raspberry Pi 3 and x86 platforms. It runs on-device and is Private by Design. + +To get started, follow [their tutorial] to create an assistant and download the training data. + +Now install and activate the [Samba] add-on so you can upload your training data. Connect to the "share" Samba share and copy your training data over. Name the file `assistant.zip`. + +Now it's time to start Snips for the first time. When the Snips add-on starts, it will output your audio devices: + +```plain +**** List of PLAYBACK Hardware Devices **** +card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA] + Subdevices: 8/8 + Subdevice #0: subdevice #0 + Subdevice #1: subdevice #1 + Subdevice #2: subdevice #2 + Subdevice #3: subdevice #3 + Subdevice #4: subdevice #4 + Subdevice #5: subdevice #5 + Subdevice #6: subdevice #6 + Subdevice #7: subdevice #7 +card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI] + Subdevices: 1/1 + Subdevice #0: subdevice #0 +``` + +You need to use this information to configure the `mic` and `speaker` configuration options. The format is `,`. On a Raspberry Pi 3, `0,0` is the built-in headset port, `0,1` is the HDMI port. + +Now that you've found the microphone and speaker addresses, it's time to configure Snips and restart the add-on. + +### Add-On configuration + +```json +{ + "mic": "1,0", + "speaker": "1,0", + "assistant": "assistant.zip", + "mqtt_bridge": { + "active": true, + "host": "172.17.0.1", + "port": 1883, + "user": "", + "password": "" + }, +} +``` + +Configuration variables: + +- **mqtt_bridge** (*Optional*): Snips uses MQTT to communicate and defaults to their own broker. Use this config option to bridge their broker to your own. +- **mic**: This is the hardware address of your microphone. Look at the Snips + +### {% linkable_title Home Assistant configuration %} + +Use the Home Assistant [Snips.ai component][comp] to integrate the add-on into Home Assistant. + +```yaml +snips: +``` + +[Snips.ai]: https://snips.ai/ +[their tutorial]: https://github.com/snipsco/snips-platform-documentation/wiki/2.-Running-your-first-end-to-end-assistant +[Samba]: /addons/samba/ +[comp]: /components/snips/ diff --git a/source/_addons/ssh.markdown b/source/_addons/ssh.markdown index 710521d675b..280cf6ae914 100644 --- a/source/_addons/ssh.markdown +++ b/source/_addons/ssh.markdown @@ -1,7 +1,7 @@ --- layout: page title: "SSH Server" -description: "Allow logging in remotely to your server using SSH." +description: "Allow logging in remotely to Hass.io using SSH." date: 2017-04-30 13:28 sidebar: true comments: false @@ -9,7 +9,11 @@ sharing: true footer: true --- -Setting up an [SSH](https://openssh.org/) server allows access to your Hass.io folders with any SSH client. To use this add-on, you must have a private/public key to log in. To generate them, follow the [instructions for Windows][win] and [these for other platforms][other]. +Setting up an [SSH](https://openssh.org/) server allows access to your Hass.io folders with any SSH client. + +

This add-on will not enable you to install packages or do anything as root. This is not allowed with Hass.io.

+ +To use this add-on, you must have a private/public key to log in. To generate them, follow the [instructions for Windows][win] and [these for other platforms][other]. ```json { @@ -26,21 +30,4 @@ Configuration variables: [win]: https://www.digitalocean.com/community/tutorials/how-to-create-ssh-keys-with-putty-to-connect-to-a-vps [other]: https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/ -

-This add-on is not compatible when you installed Hass.io via the generic Linux installer. - -If you're coming from Rasbian or similar, use `root` rather than `pi` when connecting via ssh or else you will get this error. - -```bash -Permission denied (publickey,keyboard-interactive) -``` -

- -

-If you install this addon you can use `sshfs` as well to access files from a remote system where you have git and your favourite editing tools installed. - -```bash -$ mkdir ~/ha_config -$ sshfs -o allow_other,defer_permissions root@h[your_hassio_ip]:/config ~/ha_config -``` -

+

This add-on is not compatible when you installed Hass.io via the generic Linux installer.

diff --git a/source/_docs/automation/troubleshooting.markdown b/source/_docs/automation/troubleshooting.markdown index 5207175e258..86cf9c9e479 100644 --- a/source/_docs/automation/troubleshooting.markdown +++ b/source/_docs/automation/troubleshooting.markdown @@ -12,7 +12,7 @@ redirect_from: /getting-started/automation-troubleshooting/ You can verify that your automation rules are being initialized correctly by watching both the realtime logs (`homeassistant.log` in the configuration directory) and also the [Logbook](/components/logbook/). The realtime logs will show the rules being initialized (once for each trigger), example: -```plain +```text INFO [homeassistant.components.automation] Initialized rule Rainy Day INFO [homeassistant.components.automation] Initialized rule Rainy Day INFO [homeassistant.components.automation] Initialized rule Rainy Day diff --git a/source/_includes/asides/developers_navigation.html b/source/_includes/asides/developers_navigation.html index 7a595c2da4d..d60e6ce1674 100644 --- a/source/_includes/asides/developers_navigation.html +++ b/source/_includes/asides/developers_navigation.html @@ -34,7 +34,7 @@
  • - {% active_link /developers/add_new_platform/ Support a new device (as a platform) %} + {% active_link /developers/add_new_platform/ Creating a new platform (to support a new device) %}
    • {% active_link /developers/code_review_platform/ Checklist creating a platform %}
    • {% active_link /developers/platform_example_sensor/ Example sensor platform %}
    • @@ -72,13 +72,29 @@
    • {% active_link /developers/frontend_creating_custom_ui/ Add Custom UI %}
  • +
  • + {% active_link /developers/hassio/architecture/ Hass.io architecture %} +
      +
    • {% active_link /developers/hassio/debugging/ Debugging Hass.io %}
    • +
    +
  • +
  • + {% active_link /developers/hassio/addon_development/ Hass.io Add-on Development %} +
      +
    • {% active_link /developers/hassio/addon_tutorial/ Tutorial: Making your first add-on %}
    • +
    • {% active_link /developers/hassio/addon_config/ Configuration %}
    • +
    • {% active_link /developers/hassio/addon_testing/ Local Testing %}
    • +
    • {% active_link /developers/hassio/addon_publishing/ Publishing %}
    • +
    • {% active_link /developers/hassio/addon_repository/ Repositories %}
    • +
    +
  • {% active_link /developers/api/ API %}
      -
    • {% active_link https://dev-docs.home-assistant.io/en/dev/ Home Assistant API %}
    • +
    • {% active_link https://dev-docs.home-assistant.io/en/dev/ Python API %}
    • {% active_link /developers/websocket_api/ Websocket API %}
    • -
    • {% active_link /developers/rest_api/ RESTful API %}
    • -
    • {% active_link /developers/python_api/ Python API %}
    • +
    • {% active_link /developers/rest_api/ REST API %}
    • +
    • {% active_link /developers/python_api/ Python REST API %}
    • {% active_link /developers/server_sent_events/ Server-sent events %}
  • diff --git a/source/_includes/asides/hassio_navigation.html b/source/_includes/asides/hassio_navigation.html index a8a24708657..d29e2ac6089 100644 --- a/source/_includes/asides/hassio_navigation.html +++ b/source/_includes/asides/hassio_navigation.html @@ -8,24 +8,21 @@
  • {% active_link /hassio/installation/ Installation %}
  • {% active_link /addons/ Available add-ons %}
  • {% active_link /hassio/installing_third_party_addons/ Installing third-party add-ons %}
  • -
  • {% active_link /hassio/external_storage/ External storage %}
  • -
  • {% active_link /hassio/run_local/ Execute local things %}
  • -
  • {% active_link /hassio/architecture/ Architecture %}
  • + diff --git a/source/addons/index.html b/source/addons/index.html index 1950e807b23..02f4b6c292f 100644 --- a/source/addons/index.html +++ b/source/addons/index.html @@ -16,6 +16,13 @@ regenerate: true + +

    + Check the Hass.io forums for add-on repositories managed by the community. +

    diff --git a/source/developers/api.markdown b/source/developers/api.markdown index feb599063b9..b46b1fdc4d4 100644 --- a/source/developers/api.markdown +++ b/source/developers/api.markdown @@ -11,8 +11,8 @@ footer: true Home Assistant provides various APIs. For detail please refer to [Home Assistant API](https://dev-docs.home-assistant.io/en/dev/) documentation. + * [Python API](https://dev-docs.home-assistant.io/) * [Websocket API](/developers/websocket_api/) - * [RESTful API](/developers/rest_api/) - * [Python API](/developers/python_api/) + * [REST API](/developers/rest_api/) + * [Python REST API](/developers/python_api/) * [Server-sent events](/developers/server_sent_events/) - diff --git a/source/developers/architecture_components.markdown b/source/developers/architecture_components.markdown index 9bf4bff3e37..eff2ff1f2e6 100644 --- a/source/developers/architecture_components.markdown +++ b/source/developers/architecture_components.markdown @@ -32,22 +32,22 @@ These components provide small pieces of home automation logic or involve servic For example, the [`device_sun_light_trigger` component](/components/device_sun_light_trigger/) tracks the state of devices and the sun to make sure that the lights are turned on when it gets dark and people are home. The component uses logic like this: -```plain - In the event that device 'Paulus Nexus 5' changes to the 'Home' state: - If the sun has set and the lights are not on: - Turn on the lights +```text +In the event that device 'Paulus Nexus 5' changes to the 'Home' state: + If the sun has set and the lights are not on: + Turn on the lights ``` -```plain - In the event that the combined state of all tracked devices changes to 'Not Home': - If the lights are on: - Turn off the lights +```text +In the event that the combined state of all tracked devices changes to 'Not Home': + If the lights are on: + Turn off the lights ``` -```plain - In the event of the sun setting: - If the lights are off and the combined state of all tracked device equals 'Home': - Turn on the lights +```text +In the event of the sun setting: + If the lights are off and the combined state of all tracked device equals 'Home': + Turn on the lights ``` Look [here](https://github.com/home-assistant/home-assistant/blob/master/config/custom_components/example.py) for a comprehensive example of a home automation component. diff --git a/source/hassio/addon_config.markdown b/source/developers/hassio/addon_config.markdown similarity index 99% rename from source/hassio/addon_config.markdown rename to source/developers/hassio/addon_config.markdown index 8760ae6d918..d6ed5d0527f 100644 --- a/source/hassio/addon_config.markdown +++ b/source/developers/hassio/addon_config.markdown @@ -7,6 +7,7 @@ sidebar: true comments: false sharing: true footer: true +redirect_from: /hassio/addon_config/ --- Each add-on is stored in a folder. The file structure looks like this: diff --git a/source/hassio/addon_development.markdown b/source/developers/hassio/addon_development.markdown similarity index 63% rename from source/hassio/addon_development.markdown rename to source/developers/hassio/addon_development.markdown index dc0c3eda648..e08e6c95720 100644 --- a/source/hassio/addon_development.markdown +++ b/source/developers/hassio/addon_development.markdown @@ -7,8 +7,17 @@ sidebar: true comments: false sharing: true footer: true +redirect_from: /hassio/addon_development/ --- Add-ons for Hass.io allows the user to extend the functionality around Home Assistant. This can be running an application that Home Assistant can integrate with (like an MQTT broker) or to share the configuration via Samba for easy editing from other computers. Add-ons can be configured via the Hass.io panel in Home Assistant. Under the hood, add-ons are Docker images published in [Docker Hub](https://hub.docker.com/). Developers can create [GitHub](https://github.com) repositories that contain multiple references to add-ons for easy sharing with the community. + +
      +
    1. Tutorial: Making your first add-on
    2. +
    3. Configuration
    4. +
    5. Local Testing
    6. +
    7. Publishing
    8. +
    9. Repositories
    10. +
    diff --git a/source/hassio/addon_publishing.markdown b/source/developers/hassio/addon_publishing.markdown similarity index 98% rename from source/hassio/addon_publishing.markdown rename to source/developers/hassio/addon_publishing.markdown index 011fed11f79..012eb425a32 100644 --- a/source/hassio/addon_publishing.markdown +++ b/source/developers/hassio/addon_publishing.markdown @@ -7,6 +7,7 @@ sidebar: true comments: false sharing: true footer: true +redirect_from: /hassio/addon_publishing/ --- There are two different ways of publishing add-ons. One is to publish pre-build containers to Docker Hub and the other option is to have users build the containers locally on their Hass.io instance. diff --git a/source/hassio/addon_repository.markdown b/source/developers/hassio/addon_repository.markdown similarity index 96% rename from source/hassio/addon_repository.markdown rename to source/developers/hassio/addon_repository.markdown index 662fa8ef08a..04152968bc4 100644 --- a/source/hassio/addon_repository.markdown +++ b/source/developers/hassio/addon_repository.markdown @@ -7,6 +7,7 @@ sidebar: true comments: false sharing: true footer: true +redirect_from: /hassio/addon_repository/ --- Add-ons repository can contain one or more add-ons. Each add-on is stored in it's own unique folder. For it to be indentified as a repository, a repository contains a configuration file. diff --git a/source/hassio/addon_testing.markdown b/source/developers/hassio/addon_testing.markdown similarity index 97% rename from source/hassio/addon_testing.markdown rename to source/developers/hassio/addon_testing.markdown index e7162741d8b..a78a672546a 100644 --- a/source/hassio/addon_testing.markdown +++ b/source/developers/hassio/addon_testing.markdown @@ -7,6 +7,7 @@ sidebar: true comments: false sharing: true footer: true +redirect_from: /hassio/addon_testing/ --- The fastest way to develop add-ons is by adding them to your local add-on repository. To access your local add-on repository, install either the [Samba add-on] or [SSH add-on]. diff --git a/source/hassio/addon_tutorial.markdown b/source/developers/hassio/addon_tutorial.markdown similarity index 98% rename from source/hassio/addon_tutorial.markdown rename to source/developers/hassio/addon_tutorial.markdown index 32855ad745c..8121ec86e7f 100644 --- a/source/hassio/addon_tutorial.markdown +++ b/source/developers/hassio/addon_tutorial.markdown @@ -7,6 +7,7 @@ sidebar: true comments: false sharing: true footer: true +redirect_from: /hassio/addon_tutorial/ --- So you've got Home Assistant going and you've been enjoying the built-in add-ons but you're missing this one application. Time to make your own add-on! In Hass.io 0.24 we introduced the option to have local add-ons be build on your device. This is great for developing new add-ons locally. @@ -203,4 +204,4 @@ Refresh the add-on store and re-install your add-on. You will now see the option - [Learn more about the available schema options.](/hassio/addon_config/#options--schema) - [See how options.json can be used inside `run.sh`](https://github.com/home-assistant/hassio-addons/blob/master/mosquitto/run.sh#L4-L6) -### [Next step: Add-on config reference »](/hassio/addon_config/) +### [Next step: Add-on config reference »](/developers/hassio/addon_config/) diff --git a/source/hassio/architecture.markdown b/source/developers/hassio/architecture.markdown similarity index 97% rename from source/hassio/architecture.markdown rename to source/developers/hassio/architecture.markdown index 5dbb1c4354e..173e3657ae3 100644 --- a/source/hassio/architecture.markdown +++ b/source/developers/hassio/architecture.markdown @@ -7,6 +7,7 @@ sidebar: true comments: false sharing: true footer: true +redirect_from: /hassio/architecture/ ---

    diff --git a/source/hassio/debugging.markdown b/source/developers/hassio/debugging.markdown similarity index 87% rename from source/hassio/debugging.markdown rename to source/developers/hassio/debugging.markdown index ae8eef22d6b..6b47eb12440 100644 --- a/source/hassio/debugging.markdown +++ b/source/developers/hassio/debugging.markdown @@ -7,8 +7,15 @@ sidebar: true comments: false sharing: true footer: true +redirect_from: /hassio/debugging/ --- +

    +This section is not for users. Use the [SSH add-on] to SSH into Hass.io. This is for developers of Hass.io. Do not ask for support if you are using these options. +

    + +[SSH add-on]: /addons/ssh/ + The following debug tips and tricks are for people who are running the Hass.io image and are working on the base image. If you use the generic Linux installer script, you should be able to access your host and logs as per your host. ## {% linkable_title SSH access to the host %} diff --git a/source/hassio/index.markdown b/source/hassio/index.markdown index 5265840726d..ebe99c5a784 100644 --- a/source/hassio/index.markdown +++ b/source/hassio/index.markdown @@ -9,4 +9,33 @@ sharing: true footer: true --- -Hass.io turns your Raspberry Pi (or other device) into the ultimate Home Automation hub. It takes away all the hassle of installing Home Assistant and related applications and keeping them up to date. Updates to the operating system, Home Assistant, and any add-ons can be done via the Home Assistant UI with a single click. +Hass.io turns your Raspberry Pi (or other device) into the ultimate home automation hub powered by Home Assistant. With Hass.io you can focus on integrating your devices and writing automations. + +[Go to the installation instructions »][install] + +The advantages of using Hass.io: + + - Free and open source + - Optimized for the Raspberry Pi + - 100% local home automation + - Easy installation and updates (powered by [ResinOS] and [Docker]) + - Management user interface integrated into Home Assistant + - Easily create and restore full backups of your whole configuration. + - One click install of many popular add-ons including voice assistant via [Snips.ai], encryption via [Let's Encrypt] and dynamic DNS via [Duck DNS].

    [Browse available add-ons »][all] + - Active community that is helpful and sharing add-ons including AppDaemon, Homebridge and InfluxDB.

    [Browse the forums »][forums]
    [Join the Hass.io chat »][chat]
    [Browse community add-on repositories »][comm-add-ons] + +

    + +Hass.io dashboard +

    + +[Snips.ai]: /addons/snips/ +[Let's Encrypt]: /addons/lets_encrypt/ +[Duck DNS]: /addons/duckdns/ +[forums]: https://community.home-assistant.io/c/hass-io +[comm-add-ons]: https://community.home-assistant.io/tags/hassio-repository +[all]: /addons/ +[chat]: https://discord.gg/K3UVxJd +[ResinOS]: https://resinos.io/ +[Docker]: https://www.docker.com/ +[install]: /hassio/installation/ diff --git a/source/hassio/installation.markdown b/source/hassio/installation.markdown index f8df3ef8d8c..d44d08f866b 100644 --- a/source/hassio/installation.markdown +++ b/source/hassio/installation.markdown @@ -9,26 +9,29 @@ sharing: true footer: true --- -Hass.io images are available for all available Raspberry Pi and intel nuc platforms. +Hass.io images are available for all available Raspberry Pi and Intel NUC platforms. - Download the appropriate image for your Raspberry Pi / intel nuc: - [Raspberry Pi / Zero][pi1] - [Raspberry Pi 2][pi2] - [Raspberry Pi 3][pi3] - - [Intel Nuc][nuc] + - [Intel NUC][nuc] - 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). - 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.

    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.

    -### {% linkable_title Alternative: install on generic Linux server %} +## {% linkable_title Alternative: install on generic Linux server %} For advanced users, it is also possible to try Hass.io on your Linux server or inside a VM. To do so, [follow these instructions][linux]. +

    When you use this installation method, some add-ons will not be available and the documentation might not work for your installation.

    + [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/0.8/resinos-hassio-0.8-raspberrypi.img.bz2 @@ -37,3 +40,5 @@ For advanced users, it is also possible to try Hass.io on your Linux server or i [nuc]: https://github.com/home-assistant/hassio-build/releases/download/0.8/resinos-hassio-0.8-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/ +[ssh]: /addons/ssh/ diff --git a/source/hassio/installing_third_party_addons.markdown b/source/hassio/installing_third_party_addons.markdown index 8db74287763..a6385b52786 100644 --- a/source/hassio/installing_third_party_addons.markdown +++ b/source/hassio/installing_third_party_addons.markdown @@ -9,7 +9,11 @@ sharing: true footer: true --- -Hass.io allows anyone to create add-on repositories to easily share their add-ons for Hass.io. To try this locally, you can use our example add-on repository at `https://github.com/home-assistant/hassio-addons-example`. +Hass.io allows anyone to create add-on repositories to easily share their add-ons for Hass.io. To try this locally, you can use our example add-on repository at + +```text +https://github.com/home-assistant/hassio-addons-example +```

    Home Assistant cannot guarantee the quality or security of third party add-ons. Use at your own risk. @@ -27,4 +31,4 @@ Add the urls of repositories (one per line) and then press "Save". A new card fo ### {% 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 -> 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 -> 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. diff --git a/source/hassio/run_local.markdown b/source/hassio/run_local.markdown index c12c602ea35..a93e9b211ad 100644 --- a/source/hassio/run_local.markdown +++ b/source/hassio/run_local.markdown @@ -9,15 +9,19 @@ sharing: true footer: true --- -On a normal Home Assistant installation you have access to the base machine and can install or add scripts that you can call with a `command_line` sensor/switch. Since Hass.IO uses Docker, you can not use this old way to perform local stuff. On its face, it looks quite restrictive, but it makes the whole system stable. +Hass.io is a managed environment. This means that you're unable to install applications that you can embed into Home Assistant using the `command_line` sensor/switch. -However, if you need to run a script to read data for a sensor or send commands to other devices on Hass.IO, you can do that with a add-on or on inside the Home Assistant container with a custom component. Here is one way to accomplish that using an add-on. For custom component, look at the [devoloper site][custom-component] and also read the [add-ons tutorial][addons-tutorial]. Now you can get started with your custom component in the right way. +There are two options if you need to run a script to read data from a sensor or send commands to other devices on Hass.IO. -First you need install a MQTT broker. You can use our [MQTT broker add-on][mqtt-addon]. Make sure you use logins and disable anonymous access if you want to secure the system. We provide no Hass.IO way to exchange data, that will be not realy good for security and is also to slow to exchange data between containers or stop and go stuff. That is the reason why we use a mqtt broker for it. +First option is to write a custom component for Home Assistant. Using Python you can communicate with your device. For custom component, look at the [devoloper site][custom-component]. + +The second option is to make a local add-on for Hass.io that sends the data to Home Assistant via MQTT. Before we dive into this, read up on [Hass.io add-on development][addons-tutorial]. + +For security and speed, Hass.io does not provide a way for containers to communicate directly. So the first step is to set up a communication channel. We're going to use MQTT for this using the [MQTT broker add-on][mqtt-addon]. ### {% linkable_title Sensors %} -Short story of that caption: We loop in our script to fetch data and push it to MQTT and wait until next process is ready. Here is a basic example and structure for that process. +We loop in our script to fetch data and push it to MQTT and wait until next process is ready. Here is a basic example and structure for that process. Our Dockerfile need to install: @@ -26,6 +30,7 @@ RUN apk --no-cache add jq mosquitto-clients ``` Now we can process it with `run.sh`: + ```bash #!/bin/bash set -e @@ -52,11 +57,11 @@ do sleep "$WAIT_TIME" done - ``` ### {% linkable_title Commands %} -Short story of that caption: We wait for incoming data from MQTT broker. We can also use an `input_boolean` that triggers an automation to publish a custom command to MQTT topic that can process multiple things in one add-on. + +We wait for incoming data from MQTT broker. We can also use an `input_boolean` that triggers an automation to publish a custom command to MQTT topic that can process multiple things in one add-on. Our Dockerfile need to install: @@ -88,10 +93,9 @@ do fi done < <(mosquitto_sub -h "$MQTT_SERVER" -p "$MQTT_PORT" -u "$USER" -P "$PASSWORD" -t "$TOPIC" -q 1) - ``` [MQTT-addon]: /addons/mosquitto/ [custom-component]: /developers/component_loading/ -[addons-tutorial]: /hassio/addon_tutorial/ +[addons-tutorial]: /developers/hassio/addon_tutorial/ diff --git a/source/hassio/zwave.markdown b/source/hassio/zwave.markdown new file mode 100644 index 00000000000..d6ef71f79a1 --- /dev/null +++ b/source/hassio/zwave.markdown @@ -0,0 +1,17 @@ +--- +layout: page +title: "Z-Wave" +description: "Instructions on how-to use Z-Wave with Hass.io." +date: 2017-04-30 13:28 +sidebar: true +comments: false +sharing: true +footer: true +--- + +To enable Z-Wave, plug your Z-Wave USB stick into your Raspberry Pi 3 and add the following to your `configuration.yaml`: + +```yaml +zwave: + usb_path: /dev/ttyACM0 +``` diff --git a/source/images/hassio/screenshots/addon_repository_editor.png b/source/images/hassio/screenshots/addon_repository_editor.png deleted file mode 100644 index e0e2b21288600535051721d13bf691a453db63ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8032 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 F{sX?UEdl@l diff --git a/source/images/hassio/screenshots/dashboard.png b/source/images/hassio/screenshots/dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..997fad3d22312176100c08dff3a0c20b8273390c GIT binary patch literal 12968 zcmcJ!1yGzpv@SS<2MO*TBm{>5!Gi=1E|Y=a4ugBJ;BLX)EilO7F2UUgclQw7mv`UF z+uiqG?cLg~I(4f1J6~7--KYOP-KWD;lw`2b$lr6{vPr7<=x%g&CSi_<>f1(yuAG4;$nAqcX)XC?CflNdwYL>|LOVJ z(a|wJJ{}1PNnBjq+1c6M-FN^O8}sw?-@SWBPfx$NxOjekespvsBO~+u z`}dQRleV_Dva&KB9v&7Jmcqh9YHI5F`T6wp^ycPfCMKr-{{GzDTre0+K|xVdQxh8- zYh+~P<>lq!;bCfO+SAh`FE1}FEWEj~p`@fFARu6AX^B#LxxT(05fQPxyj)dPRa{(r zcz8H4F!1^F=g!Vf2n52$#&&XYoRX4KSy_2{dRAIm3Ic)l_V#RTZFO~ZvC6Lw4h|F) z6xP<(RC{h(TU-C$KYMz5;#XcxOiVzb(5R@Wxw$#XjvF`}o|Tma>bup~*Y}#b`~Ca( z#?^D;(tQy8UT5Hzz45xQukY95JyrG9=;-Lw-zVF#yV=><>&F+%kvoRE>&(o|#fv8g z2Zx-shfginzc(Km_a3FYZaNPh?d|P{PM$JWA3nF=ocx)&pODzSd3K(-yV^gtv$Olx zB|d)kRK4?PG;}*sC9%`^X${JKeD^%P@~@QIthU%uMIvZ`C| z;aS<>PD9^uM&t1~6y9$0r`YD@LF-{3JebQ9Ie(wr{O_yJUWVG@?sEIgK+(-^LRnbo z%L}AFN*bUB8Ln;PWCO2)08@$UN$rTc8%;c*-vDaj+Vy$iPNm9^eHQJ zES=3Sj&~|J@JM{Fd1)NpZ+G4ct=MTFhEEMo-~JmO4eZf3hI#rI`0&MV)5%-_034Qb zU&J-s7mug7umCiGPELPo(F6lRe0x?)UT1~S*hEaN!T+RkyVg27z6*isTp!c)s?uO~ z|Lu1JRPHnA1m^Mi%koSamB@w`F`y5=bND4W!gbHCo>=c0M}=}Mo=TuT{_Zh!I9cVH zH<#ek2lEXhmm++L40=z$*b6{0W7(rIlR&f%k~4H}{Y$w_H%tPiW6xu6#Zu6!MYF;G z0qzWaPxD(2Et|>4 zwe8ySON)0)jw-{0$ClII`#9BMrR4gX129?|J*N1ZsQC2H@OgDqzZ%P`U_nm{IotJ2 z!f@X+qc8MyPrJBL1;*4Cv>X$zm~7#^gLWSHkYEY!5*VZY$ef_pU15TDtGP&8Ab>9IpIEtAaa@*3~3tCi1gjl7;Nl2UYX)QSb)8?O;Z}GAYB>y)BwE5 z*7_zBx-;1`bO^9kms5kI&+%<__ApOQgyKxY#`K?HB1?QZ7pvUWUli%|&tRj!ktdbH zqWe6d?QS`+uJCA=znyv5&zU6@*tra?fvY2!QMi# z2&_RQ;)|MhP0}N1Y=fAdWRg%Wqqsut*I`nDYq1(*t_a_StqBvDFjNdOx0ObA!OI>R z#gyB1YG^?nV&s|8@A8eQm(wlDIbTpgKas~0)kIS%6S9Qjs);%sBpr)OX+bDL$aQD? zU^F+@MHH`{FXPsZVOf)zBT~IUM#{m(3M7e4;746*Sj3Mem8+BBO1Y! zkVbH3_VJYXn{F`zv93VHoMNVufZLn7I+fdG)Q@D0k|1sqhW~_$#((#p;{ONvd9c}F zxhcwA_o&Taz6I_D*S%^#!^T`Jbe%hZ9zE%e1G}@1`p3L`c?f$QC|-X3QO0sFWG|5V zQU?B_P54C>NgTN>k1rZMnm@o(8lN}XB2roO&cN#eh<62yLOZot_N;8YSzYRxUea4^ z4)6Q5c_)l>I{Nw3-p26YMv#18mSqA&}#Ag75$nB^8(g(GG^n%=g=w@(lP=X6R28eEKD9K*~g5G`3i9US0Jf- z#}g;%Gly@8;jp8u&j9$Pc~kNI4EU=&`Zd%Kr=t!KJo=sXj@J0;==xN^44_iA^JB0m z87FUy0FeHb=06PKF=s26rv~>2{{C^#DpEEJ&2`(D^q W-n*_FRF%n?iyg@jlDo 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�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 J3JC-M{{>D!?J)oV literal 0 HcmV?d00001 diff --git a/source/images/hassio/screenshots/main_panel_store_icon.png b/source/images/hassio/screenshots/main_panel_store_icon.png index a6b04be1134457ba5ac9f66a3f1e1c94ab8ab1f3..27e650fdf9d9e045f7c6faed2717330c85b42b91 100644 GIT binary patch literal 25150 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%0AhEkt;&!HdX{=~7s$0; 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 diff --git a/source/images/hassio/screenshots/repositories_editor.png b/source/images/hassio/screenshots/repositories_editor.png index a02427d1659c9c5c477f27f8087aa27c56c09277..9c3df30568cba9e9e9b45c08dbffe43213580808 100644 GIT binary patch literal 26747 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 Date: Sat, 15 Jul 2017 11:04:22 -0400 Subject: [PATCH 07/17] Add more examples. (#2979) Closes ##2687 --- source/_components/feedreader.markdown | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/source/_components/feedreader.markdown b/source/_components/feedreader.markdown index efaee1fb50a..fbd68c63e5d 100644 --- a/source/_components/feedreader.markdown +++ b/source/_components/feedreader.markdown @@ -22,6 +22,7 @@ feedreader: urls: - https://home-assistant.io/atom.xml - https://github.com/blog.atom + - https://hasspodcast.io/feed/podcast ``` Configuration variables: @@ -48,13 +49,17 @@ automation: platform: event event_type: feedreader action: - service: notify.notify - data_template: "{{ trigger.event.data.title }}" + service: persistent_notification.create + data_template: + title: "New HA Podcast available" + message: "New Podcast available - {{ as_timestamp(now()) | timestamp_custom('%I:%M:%S %p %d%b%Y', true) }}" + notification_id: "{{ trigger.event.data.title }}" ``` *Any field under the `` tag in the feed can be used for example `trigger.event.data.content` will get the body of the feed entry. For more advanced use cases, a custom component registering to the `feedreader` event type could be used instead: +For a drop in packaged complete example of Feedreader, you can use the [PodCast notifier](https://github.com/CCOSTAN/Home-AssistantConfig/blob/master/packages/hasspodcast.yaml). ```python EVENT_FEEDREADER = "feedreader" From dc6082cedab23ae18eb0c1651d16455e28370658 Mon Sep 17 00:00:00 2001 From: Alok Saboo Date: Sat, 15 Jul 2017 11:07:51 -0400 Subject: [PATCH 08/17] Cleanup docs (#2977) --- source/_components/rest_command.markdown | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source/_components/rest_command.markdown b/source/_components/rest_command.markdown index fc447a08581..c01e8ce94ab 100644 --- a/source/_components/rest_command.markdown +++ b/source/_components/rest_command.markdown @@ -29,7 +29,7 @@ rest_command: Configuration variables: -- **[service_name]** (*Required*): The name used to expose the service. E.g. in the above example would it be ` rest_command.example_request`. +- **[service_name]** (*Required*): The name used to expose the service. E.g., in the above example, it would be `rest_command.example_request`. - **url** (*Required*): The URL (support template) for sending request. - **method** (*Optional*): HTTP method to use (`get`, `post`, `put`, or `delete`). Defaults to `get`. - **payload** (*Optional*): A string/template to send with request. @@ -39,4 +39,3 @@ Configuration variables: - **content_type** (*Optional*): Content type for the request. The commands can be dynamic, using templates to insert values of other entities. Service call support variables for template stuff. - From bbf3112ee41259cb930e60bd4dad9c4ace2d3a63 Mon Sep 17 00:00:00 2001 From: Carlo Costanzo Date: Sat, 15 Jul 2017 11:08:25 -0400 Subject: [PATCH 09/17] Cleared up documentation. (#2978) was just a bit confusing.. not anymore I hope. --- source/_docs/scripts.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/scripts.markdown b/source/_docs/scripts.markdown index 1c6d9e8fbf5..d6d8ed508f5 100644 --- a/source/_docs/scripts.markdown +++ b/source/_docs/scripts.markdown @@ -77,7 +77,7 @@ delay: {% raw %}'00:{{ states.input_slider.minute_delay.state | int }}:00'{% end ``` ### {% linkable_title Wait %} -Wait until some things are complete. We support at the moment `wait_template` for waiting until a condition is `true`, see also on [Template-Trigger](/getting-started/automation-trigger/#template-trigger). It is possible to set a timeout after that will the script abort his execution. Timeout have same syntax as `delay`. +Wait until some things are complete. We support at the moment `wait_template` for waiting until a condition is `true`, see also on [Template-Trigger](/getting-started/automation-trigger/#template-trigger). The Timeout has same syntax as `delay`. If you set a Timeout for 1 minute and the condition is not satified within that minute, the script will continue. ```yaml # wait until media player have stop the playing From 35e2ff8b1712eab75d80924956e95fd2903d221d Mon Sep 17 00:00:00 2001 From: Michael Fester Date: Sat, 15 Jul 2017 17:09:23 +0200 Subject: [PATCH 10/17] Update snips.markdown (#2975) --- source/_components/snips.markdown | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/source/_components/snips.markdown b/source/_components/snips.markdown index 63e8009af48..181431a886c 100644 --- a/source/_components/snips.markdown +++ b/source/_components/snips.markdown @@ -69,15 +69,36 @@ followed by a command, e.g. We should see the transcribed phrase in the logs, as well as a properly parsed intent. The intent is published on MQTT, on the `hermes/nlu/intentParsed` topic. The Snips Home Assistant component subscribes to this topic, and handles the intent according to the rules defined in `configuration.yaml`, as explained below. +#### Optional: specifying an external MQTT broker + +By default, Snips runs its own MQTT broker. But we can also tell Snips to use an external broker by specifying this when launching Snips. In this case, instead of running the `snips` command above (which assumes we are using the internal MQTT broker), we use the full launch command with explicitly specified parameters (replace `MQTT_BROKER_IP` and `MQTT_BROKER_PORT` with appropriate values): + +```sh +$ docker run -t --rm --name snips --log-driver none -v /home/pi/.asoundrc:/root/.asoundrc -v /opt/snips/config:/opt/snips/config --privileged -v /dev/snd:/dev/snd snipsdocker/platform --mqtt MQTT_BROKER_IP:MQTT_BROKER_PORT +``` + +For more details on launch options, check the documentation on [Snips Platform Commands](https://github.com/snipsco/snips-platform-documentation/wiki/6.--Learn-more:-Platform-Commands#using-a-custom-mqtt-bus). + ## Home Assistant configuration -By default, the Snips MQTT broker runs on port 9898. We should tell Home Assistant to use this as a broker, rather than its own, by adding the following section to `configuration.yaml`: +### Specifying the MQTT broker + +Messages between Snips and Home Assistant are passed via MQTT. We must tell Home Assistant which MQTT broker to use by adding the following entry to `configuration.yaml`: + +```yaml +mqtt: + broker: MQTT_BROKER_IP + port: MQTT_BROKER_PORT +``` + +As explained above, Snips by default runs an MQTT broker on port 9898. So if we wish to use this broker, the entry will look as follows: ```yaml mqtt: broker: 127.0.0.1 port: 9898 ``` +### Triggering actions In Home Assistant, we trigger actions based on intents produced by Snips. This is done in `configuration.yaml`. For instance, the following block handles `ActivateLightColors` intents (included in the Snips IoT intent bundle) to change light colors: From 12fd562361633025188bd7d756aefdf42fe4fc3b Mon Sep 17 00:00:00 2001 From: JudgeDredd Date: Sat, 15 Jul 2017 13:31:47 -0400 Subject: [PATCH 11/17] erorrs with degree symbol (#2973) I was unable to get the examples above working when using that degree symbol in the unit of measurement, removing that symbol fixed the problem. I did try pasting in a fresh degree symbol, and even tried using one from the HASS front end, but that didn't work. However, this example has been here for a long time and I can't find any other cases of complaints, so I figured i'd add a warning in the comments in case anyone else has the same problem. --- source/_components/sensor.command_line.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_components/sensor.command_line.markdown b/source/_components/sensor.command_line.markdown index ba1bee321aa..6bf2172cfcb 100644 --- a/source/_components/sensor.command_line.markdown +++ b/source/_components/sensor.command_line.markdown @@ -53,6 +53,7 @@ sensor: - platform: command_line name: HD Temperature command: "hddtemp -n /dev/sda" + # If errors occur, remove degree symbol below unit_of_measurement: "°C" ``` @@ -65,6 +66,7 @@ Thanks to the [`proc`](https://en.wikipedia.org/wiki/Procfs) file system, variou - platform: command_line name: CPU Temperature command: "cat /sys/class/thermal/thermal_zone0/temp" + # If errors occur, remove degree symbol below unit_of_measurement: "°C" value_template: '{% raw %}{{ value | multiply(0.001) }}{% endraw %}' ``` From 172704cac3030fce4557cae065dd8e2c273596de Mon Sep 17 00:00:00 2001 From: gitmopp Date: Sun, 16 Jul 2017 04:46:11 +0200 Subject: [PATCH 12/17] Update for DHT with temperature_offset and humidity_offset (#2899) * Update for DHT with temperature_offset and humidity_offset Updated documentation for PR https://github.com/home-assistant/home-assistant/pull/8234 * Fixed typo Fixed typo for valure to value * Minor changes --- source/_components/sensor.dht.markdown | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/source/_components/sensor.dht.markdown b/source/_components/sensor.dht.markdown index b807d14d6ea..fd187c67948 100644 --- a/source/_components/sensor.dht.markdown +++ b/source/_components/sensor.dht.markdown @@ -31,10 +31,27 @@ sensor: Configuration variables: -- **sensor** (*Required*): The sensor type, supported devices are DHT11, DHT22, and AM2302 +- **sensor** (*Required*): The sensor type, supported devices are DHT11, DHT22, and AM2302. - **pin** (*Required*): The pin the sensor is connected to. -- **name** (*Optional*): The name of the sensor -- **monitored_conditions** array (*Required*): Conditions to monitor. Available conditions are only *temperature* and *humidity*. +- **name** (*Optional*): The name of the sensor. +- **monitored_conditions** array (*Required*): Conditions to monitor. Available conditions are only *temperature* and *humidity*. +- **temperature_offset** (*Optional*): Add or subtract a value from the temperature. +- **humidity_offset** (*Optional*): Add or subtract a value from the humidity. The name of the pin to which the sensor is connected has different names on different platforms. 'P8_11' for Beaglebone, '23' for Raspberry Pi. +### {% linkable_title Example %} + +An example for a Raspberry Pi 3 with a DHT22 sensor connected to GPIO4 (pin 7): + +```yaml +sensor: + - platform: dht + sensor: DHT22 + pin: 4 + temperature_offset: 2.1 + humidity_offset: -3.2 + monitored_conditions: + - temperature + - humidity +``` From cd2cb9b1750175ee3be2e8800733314b5581cc12 Mon Sep 17 00:00:00 2001 From: Dougal Matthews Date: Fri, 14 Jul 2017 04:53:37 +0200 Subject: [PATCH 13/17] Add the new rgb support to switch.flux (#2956) --- source/_components/switch.flux.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/switch.flux.markdown b/source/_components/switch.flux.markdown index a48b0367b13..3cdb2e82342 100644 --- a/source/_components/switch.flux.markdown +++ b/source/_components/switch.flux.markdown @@ -51,5 +51,5 @@ Configuration variables: - **stop_colortemp** (*Optional*): The color temperature at the end. Defaults to `1900`. - **brightness** (*Optional*): The brightness of the lights. Calculated with `RGB_to_xy` by default. - **disable_brightness_adjust** (*Optional*): If true, brightness will not be adjusted besides color temperature. Defaults to False. -- **mode** (*Optional*): Select how color temperature is passed to lights. Valid values are `xy` and `mired`. Defaults to `xy`. +- **mode** (*Optional*): Select how color temperature is passed to lights. Valid values are `xy`, `mired` and `rgb`. Defaults to `xy`. From 55660db69118cd9502c867d306539f4ead9ded44 Mon Sep 17 00:00:00 2001 From: gitmopp Date: Sun, 16 Jul 2017 04:46:11 +0200 Subject: [PATCH 14/17] Update for DHT with temperature_offset and humidity_offset (#2899) * Update for DHT with temperature_offset and humidity_offset Updated documentation for PR https://github.com/home-assistant/home-assistant/pull/8234 * Fixed typo Fixed typo for valure to value * Minor changes --- source/_components/sensor.dht.markdown | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/source/_components/sensor.dht.markdown b/source/_components/sensor.dht.markdown index b807d14d6ea..fd187c67948 100644 --- a/source/_components/sensor.dht.markdown +++ b/source/_components/sensor.dht.markdown @@ -31,10 +31,27 @@ sensor: Configuration variables: -- **sensor** (*Required*): The sensor type, supported devices are DHT11, DHT22, and AM2302 +- **sensor** (*Required*): The sensor type, supported devices are DHT11, DHT22, and AM2302. - **pin** (*Required*): The pin the sensor is connected to. -- **name** (*Optional*): The name of the sensor -- **monitored_conditions** array (*Required*): Conditions to monitor. Available conditions are only *temperature* and *humidity*. +- **name** (*Optional*): The name of the sensor. +- **monitored_conditions** array (*Required*): Conditions to monitor. Available conditions are only *temperature* and *humidity*. +- **temperature_offset** (*Optional*): Add or subtract a value from the temperature. +- **humidity_offset** (*Optional*): Add or subtract a value from the humidity. The name of the pin to which the sensor is connected has different names on different platforms. 'P8_11' for Beaglebone, '23' for Raspberry Pi. +### {% linkable_title Example %} + +An example for a Raspberry Pi 3 with a DHT22 sensor connected to GPIO4 (pin 7): + +```yaml +sensor: + - platform: dht + sensor: DHT22 + pin: 4 + temperature_offset: 2.1 + humidity_offset: -3.2 + monitored_conditions: + - temperature + - humidity +``` From 1e2a89d59a09e9696876306c601553312602b00d Mon Sep 17 00:00:00 2001 From: Eugenio Panadero Date: Sun, 16 Jul 2017 05:53:42 +0200 Subject: [PATCH 15/17] add doc for new wake_on_lan component with service send_magic_packet (#2950) * add doc for new wake_on_lan component with service send_magic_packet * use Hub as ha_category --- source/_components/wake_on_lan.markdown | 36 +++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 source/_components/wake_on_lan.markdown diff --git a/source/_components/wake_on_lan.markdown b/source/_components/wake_on_lan.markdown new file mode 100644 index 00000000000..e4a1e5a9f49 --- /dev/null +++ b/source/_components/wake_on_lan.markdown @@ -0,0 +1,36 @@ +--- +layout: page +title: "Wake on LAN" +description: "Instructions how to setup the Wake on LAN component in Home Assistant." +date: 2017-07-8 15:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: ethernet.png +ha_category: Hub +ha_release: "0.49" +ha_iot_class: "Local Push" +--- + +The `wake_on_lan` component enables the ability to send _magic packets_ to [Wake on LAN](https://en.wikipedia.org/wiki/Wake-on-LAN) capable devices, in order to turn them on. + +To use this component in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +wake_on_lan: +``` + +### {% linkable_title Component services %} + +Available services: `send_magic_packet`. + +#### {% linkable_title Service `wake_on_lan/send_magic_packet` %} + +Send a _magic packet_ to wake up a device with 'Wake-On-LAN' capabilities. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-------------------------------------------------------| +| `mac` | no | MAC address of the device to wake up. | +| `broadcast_address` | yes | Optional broadcast IP where to send the magic packet. | From ac7567d0c70a8cfd7d4ab07d9974cdfb94516349 Mon Sep 17 00:00:00 2001 From: Marcelo Moreira de Mello Date: Sat, 15 Jul 2017 23:54:19 -0400 Subject: [PATCH 16/17] Updated Amcrest documentation to use hub component (#2881) * Updated Amcrest documentation to use hub component * Set default streaming source to snapshot * updated version to 0.49 --- source/_components/amcrest.markdown | 63 ++++++++++++++++++++++ source/_components/camera.amcrest.markdown | 23 +------- source/_components/sensor.amcrest.markdown | 25 +-------- 3 files changed, 67 insertions(+), 44 deletions(-) create mode 100644 source/_components/amcrest.markdown diff --git a/source/_components/amcrest.markdown b/source/_components/amcrest.markdown new file mode 100644 index 00000000000..194592081bd --- /dev/null +++ b/source/_components/amcrest.markdown @@ -0,0 +1,63 @@ +--- +layout: page +title: "Amcrest IP Camera" +description: "Instructions how to integrate Amcrest IP cameras within Home Assistant." +date: 2017-06-24 10:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: amcrest.png +ha_category: Hub +ha_iot_class: "Local Polling" +ha_release: 0.49 +--- + +The `amcrest` platform allows you to integrate your [Amcrest](https://amcrest.com/) IP camera in Home Assistant. + +To enable your camera in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +amcrest: + - host: IP_ADDRESS + username: USERNAME + password: PASSWORD + sensors: + - motion_detector + - sdcard + + - host: IP_ADDRESS + username: USERNAME + password: PASSWORD + resolution: low + stream_source: snapshot + sensors: + - ptz_preset +``` + +Configuration variables: + +- **host** (*Required*): The IP address or hostname of your camera. If using hostname, make sure the DNS works as expected. +- **username** (*Required*): The username for accessing your camera. +- **password** (*Required*): The password for accessing your camera. +- **name** (*Optional*): This parameter allows you to override the name of your camera. The default is "Amcrest Camera". +- **port** (*Optional*): The port that the camera is running on. The default is 80. +- **resolution** (*Optional*): This parameter allows you to specify the camera resolution. For a high resolution (1080/720p), specify the option `high`. For VGA resolution (640x480p), specify the option `low`. If omitted, it defaults to *high*. +- **stream_source** (*Optional*): The data source for the live stream. `mjpeg` will use the camera's native MJPEG stream, whereas `snapshot` will use the camera's snapshot API to create a stream from still images. You can also set the `rtsp` option to generate the streaming via RTSP protocol. If omitted, it defaults to *snapshot*. +- **ffmpeg_arguments**: (*Optional*): Extra options to pass to ffmpeg, e.g. image quality or video filter options. +- **authentication**: (*Optional*): Defines which authentication method to use only when **stream_source** is **mjpeg**. Currently *aiohttp* only support *basic*. It defaults to *basic*. +- **scan_interval** (*Optional*): Defines the update interval of the sensor in seconds. The default is 10 seconds. +- **sensors** array (*Optional*): Conditions to display in the frontend. By default, *none* of the conditions are enabled. The following conditions can be monitored. + - **motion_detector**: Return True/False when a motion is detected + - **sdcard**: Return the SD card usage by reporting the total and used space + - **ptz_preset**: Return the number of PTZ preset positions configured for the given camera + +**Note:** Amcrest cameras with newer firmwares no longer have the ability to stream `high` definition video with MJPEG encoding. You may need to use `low` resolution stream or the `snapshot` stream source instead. If the quality seems too poor, lower the `Frame Rate (FPS)` and max out the `Bit Rate` settings in your camera's configuration manager. If you defined the *stream_source* to **mjpeg**, make sure your camera supports *Basic* HTTP authentication. Newer Amcrest firwmares may not work, then **rtsp** is recommended instead. + +**Note:** If you set the `stream_source` option to `rtsp`, make sure to follow the steps mentioned at +[FFMPEG](https://home-assistant.io/components/ffmpeg/) documentation to install the `ffmpeg`. + +Finish its configuration by visiting the [Amcrest sensor page](/components/sensor.amcrest/) or [Amcrest camera page](/components/camera.amcrest/). + +To check if your Amcrest camera is supported/tested, visit the [supportability matrix](https://github.com/tchellomello/python-amcrest#supportability-matrix) link from the `python-amcrest` project. diff --git a/source/_components/camera.amcrest.markdown b/source/_components/camera.amcrest.markdown index ee9d7761118..2c1a042c877 100644 --- a/source/_components/camera.amcrest.markdown +++ b/source/_components/camera.amcrest.markdown @@ -13,33 +13,14 @@ ha_iot_class: "Local Polling" ha_release: 0.34 --- -The `amcrest` platform allows you to integrate your [Amcrest](https://amcrest.com/) IP camera in Home Assistant. +To get your [Amcrest](https://amcrest.com/) cameras working within Home Assistant, please follow the instructions for the general [Amcrest component](/components/amcrest). -To enable your camera in your installation, add the following to your `configuration.yaml` file: +Once you have enabled the [Amcrest component](/components/amcrest), add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry camera: - platform: amcrest - host: IP_ADDRESS - username: USERNAME - password: PASSWORD ``` -Configuration variables: - -- **host** (*Required*): The IP address or hostname of your camera. If using hostname, make sure the DNS works as expected. -- **username** (*Required*): The username for accessing your camera. -- **password** (*Required*): The password for accessing your camera. -- **name** (*Optional*): This parameter allows you to override the name of your camera. The default is "Amcrest Camera". -- **port** (*Optional*): The port that the camera is running on. The default is 80. -- **resolution** (*Optional*): This parameter allows you to specify the camera resolution. For a high resolution (1080/720p), specify the option `high`. For VGA resolution (640x480p), specify the option `low`. If omitted, it defaults to *high*. -- **stream_source** (*Optional*): The data source for the live stream. `mjpeg` will use the camera's native MJPEG stream, whereas `snapshot` will use the camera's snapshot API to create a stream from still images. You can also set the `rtsp` option to generate the streaming via RTSP protocol. If omitted, it defaults to *mjpeg*. -- **ffmpeg_arguments**: (*Optional*): Extra options to pass to ffmpeg, e.g. image quality or video filter options. - -**Note:** Amcrest cameras with newer firmwares no longer have the ability to stream `high` definition video with MJPEG encoding. You may need to use `low` resolution stream or the `snapshot` stream source instead. If the quality seems too poor, lower the `Frame Rate (FPS)` and max out the `Bit Rate` settings in your camera's configuration manager. - -**Note:** If you set the `stream_source` option to `rtsp`, make sure to follow the steps mentioned at -[FFMPEG](https://home-assistant.io/components/ffmpeg/) documentation to install the `ffmpeg`. - To check if your Amcrest camera is supported/tested, visit the [supportability matrix](https://github.com/tchellomello/python-amcrest#supportability-matrix) link from the `python-amcrest` project. diff --git a/source/_components/sensor.amcrest.markdown b/source/_components/sensor.amcrest.markdown index dcdb919a014..538369de5a3 100644 --- a/source/_components/sensor.amcrest.markdown +++ b/source/_components/sensor.amcrest.markdown @@ -13,34 +13,13 @@ ha_release: 0.37 ha_iot_class: "Local Polling" --- -The `amcrest` sensor allows you to integrate your [Amcrest](https://amcrest.com/) IP camera in Home Assistant. +To get your [Amcrest](https://amcrest.com/) cameras working within Home Assistant, please follow the instructions for the general [Amcrest component](/components/amcrest). -To enable the `amcrest` sensors on your camera, add the following to your `configuration.yaml` file: +Once you have enabled the [Amcrest component](/components/amcrest), add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry sensor: - platform: amcrest - host: IP_ADDRESS - username: USERNAME - password: PASSWORD - monitored_conditions: - - motion_detector - - sdcard - - ptz_preset ``` - -Configuration variables: - -- **host** (*Required*): The IP address or hostname of your camera. If using hostname, make sure the DNS works as expected. -- **username** (*Required*): The username for accessing your camera. -- **password** (*Required*): The password for accessing your camera. -- **name** (*Optional*): This parameter allows you to override the name of your camera. The default is "Amcrest Camera". -- **port** (*Optional*): The port that the camera is running on. The default is 80. -- **scan_interval** (*Optional*): Defines the update interval of the sensor in seconds. The default is 10 seconds. -- **monitored_conditions** array (*Required*): Conditions to display in the frontend. The following conditions can be monitored. - - **motion_detector**: Return True/False when a motion is detected - - **sdcard**: Return the SD card usage by reporting the total and used space - - **ptz_preset**: Return the number of PTZ preset positions configured for the given camera - To check if your Amcrest camera is supported/tested, visit the [supportability matrix](https://github.com/tchellomello/python-amcrest#supportability-matrix) link from the `python-amcrest` project. From 2c80c32eb0c882437bf5824fda4bc1120b6f8918 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 15 Jul 2017 21:07:56 -0700 Subject: [PATCH 17/17] Add 0.49 release blog post --- _config.yml | 8 +- source/_components/lametric.markdown | 19 + source/_components/notify.lametric.markdown | 20 + source/_posts/2017-07-16-release-49.markdown | 462 ++++++++++++++++++ .../images/blog/2017-07-0.49/components.png | Bin 0 -> 26076 bytes .../images/blog/2017-07-0.49/green-theme.png | Bin 0 -> 5667 bytes 6 files changed, 505 insertions(+), 4 deletions(-) create mode 100644 source/_components/lametric.markdown create mode 100644 source/_components/notify.lametric.markdown create mode 100644 source/_posts/2017-07-16-release-49.markdown create mode 100644 source/images/blog/2017-07-0.49/components.png create mode 100644 source/images/blog/2017-07-0.49/green-theme.png diff --git a/_config.yml b/_config.yml index 9c226bb45af..10e1ef759d7 100644 --- a/_config.yml +++ b/_config.yml @@ -142,12 +142,12 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 48 -current_patch_version: 1 -date_released: 2017-07-05 +current_minor_version: 49 +current_patch_version: 0 +date_released: 2017-07-16 # 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-0481---july-5" +patch_version_notes: "#" # Minor release (Example #release-0431---april-25): diff --git a/source/_components/lametric.markdown b/source/_components/lametric.markdown new file mode 100644 index 00000000000..36d6b6d4868 --- /dev/null +++ b/source/_components/lametric.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "LaMetric" +description: "Instructions on how to integrate LaMetric with Home Assistant." +date: 2017-04-02 13:28 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Hub +ha_release: 0.49 +--- + +```yaml +# configuration.yaml example +lametric: + client_id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx + client_secret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +``` diff --git a/source/_components/notify.lametric.markdown b/source/_components/notify.lametric.markdown new file mode 100644 index 00000000000..70ad2a4cdc0 --- /dev/null +++ b/source/_components/notify.lametric.markdown @@ -0,0 +1,20 @@ +--- +layout: page +title: "LaMetric Notify" +description: "Instructions on how to setup the LaMetric notify platform with Home Assistant." +date: 2017-04-02 13:28 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Notify +ha_release: 0.49 +--- + +```yaml +notify: + name: lametric1 + platform: lametric + display_time: 20 + icon: i555 +``` diff --git a/source/_posts/2017-07-16-release-49.markdown b/source/_posts/2017-07-16-release-49.markdown new file mode 100644 index 00000000000..821b818fa6b --- /dev/null +++ b/source/_posts/2017-07-16-release-49.markdown @@ -0,0 +1,462 @@ +--- +layout: post +title: "0.49: Themes 🎨, kiosk mode and Prometheus.io" +description: "Style the frontend the way you want it and present it in Kiosk mode without tabs." +date: 2017-07-15 00:02:05 +0000 +date_formatted: "July 15, 2017" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +og_image: /images/blog/2017-07-0.49/components.png +--- + + + +# {% linkable_title WE HAVE THEMES 🎨👩‍🎨 %} + +Our already amazing frontend just got even more amazing thanks to [@andrey-git]. With the new theme support you can be in control of the primary color, accent color and a whole bunch more. + +You can specify themes using new configuration options under frontend. + +```yaml +frontend: + themes: + green: + primary-color: #6ca518; +``` + +Once a theme is defined, use the new frontend service `frontend.set_theme` to activate it. More information in [the docs][frontend docs]. + +

    +Screenshot of a green dashboard +Screenshot of a green dashboard +

    + +Not all parts of the user interface are themable yet. Expect improvements in future releases. + +## {% linkable_title Kiosk mode %} + +Another great new improvement for the frontend is the addition of a kiosk mode. When the frontend is viewed in kiosk mode, the tab bar will be hidden. + +To activate kiosk mode, navigate to `https://hass.example.com:8123/kiosk/group.living_room_view`. Note that for `default_view` the url is just `https://hass.example.com:8123/kiosk` + +This feature has also been brought to you by [@Andrey-git]! Big shout out to him for his continuous efforts to bring Home Assistant to the next level. + +## {% linkable_title New Platforms %} + +- Add london_underground ([@robmarkcole] - [#8272]) ([sensor.london_underground docs]) (new-platform) +- Add citybikes platform ([@aronsky] - [#8202]) ([sensor.citybikes docs]) (new-platform) +- Add One-Time Password sensor (OTP) ([@postlund] - [#8332]) ([sensor.otp docs]) (new-platform) +- Add component for xiaomi robot vacuum (switch.xiaomi_vacuum) ([@rytilahti] - [#7913]) ([switch.xiaomi_vacuum docs]) (new-platform) +- LaMetric platform and notify module ([@open-homeautomation] - [#8230]) ([lametric docs]) ([notify.lametric docs]) (new-platform) +- New component to connect to VELUX KLF 200 Interface ([@Julius2342] - [#8203]) ([velux docs]) ([scene.velux docs]) (new-platform) +- New service `send_magic_packet` with new component `wake_on_lan` ([@azogue] - [#8397]) ([wake_on_lan docs]) (new-platform) +- Add support for Prometheus ([@rcloran] - [#8211]) ([prometheus docs]) (new-platform) +- Refactored Amcrest to use central hub component ([@tchellomello] - [#8184]) ([amcrest docs]) ([camera.amcrest docs]) ([sensor.amcrest docs]) (breaking change) (new-platform) +- Added media_extractor service ([@minchik] - [#8369]) ([media_extractor docs]) (new-platform) +- Vizio SmartCast support ([@vkorn] - [#8260]) ([media_player.vizio docs]) (new-platform) + +## {% linkable_title If you need help... %} +...don't hesitate to use our very active [forums][forum] or join us for a little [chat][discord]. 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][issue]. Make sure to fill in all fields of the issue template. + + +## {% linkable_title Breaking Changes %} + +- UPC Connect component no longer needs a password passed into the configuration. ([@Flavien] - [#8335]) ([device_tracker.upc_connect docs]) (breaking change) +- The Apple TV platform has been upgraded to a component and a remote platform has been added. This requires your Apple TV configuration to be moved to the new `apple_tv` component. ([@postlund] - [#8122]) ([media_player.apple_tv docs]) (breaking change) + +```yaml +apple_tv: + - name: Apple TV + host: 10.0.10.20 + login_id: 00000000-1234-5678-9012-345678901234 + start_off: true + credentials: 8660DEA5154FB46B:20B94847926112B3F46F85DB3A7311830463BF65570C22C3786E27F38C3326CF +``` + +- Refactored Amcrest to use central hub component to prepare for future integrations. This requires your Amcrest configuration to be moved to the new `amcrest` component. ([@tchellomello] - [#8184]) ([amcrest docs]) ([camera.amcrest docs]) ([sensor.amcrest docs]) (breaking change) (new-platform) + +```yaml +amcrest: + - host: !secret amcrest_living + name: "Living Room" + username: !secret amcrest_living_username + password: !secret amcrest_living_password + resolution: low + stream_source: snapshot + sensors: + - motion_detector + - ptz_preset +``` + +## {% linkable_title All changes %} + +- Version bump to 0.49.0.dev0 ([@fabaff] - [#8266]) +- Upgrade pyowm to 2.7.1 ([@fabaff] - [#8274]) ([sensor.openweathermap docs]) ([weather.openweathermap docs]) +- Don't call update() in constructor ([@fabaff] - [#8276]) ([sensor.openweathermap docs]) +- Update apcaccess to 0.0.13. Add "Percent Load Capacity" to INFERRED_UNITS. ([@michaelarnauts] - [#8277]) ([apcupsd docs]) ([sensor.apcupsd docs]) +- Update knxip to 0.4 (better handling of reconnects) ([@open-homeautomation] - [#8289]) ([knx docs]) +- Add london_underground ([@robmarkcole] - [#8272]) ([sensor.london_underground docs]) (new-platform) +- pytado moved to pypi ([@wmalgadey] - [#8298]) ([tado docs]) ([climate.tado docs]) +- Fix doc link in header ([@robmarkcole] - [#8305]) ([sensor.london_underground docs]) +- Upgrade discord.py to 0.16.8 ([@fabaff] - [#8304]) ([notify.discord docs]) +- zha: Strip whitespace from device names ([@rcloran] - [#8306]) ([zha docs]) +- Upgrade chardet to 3.0.4 ([@fabaff] - [#8313]) +- Upgrade aiohttp to 2.2.2 ([@fabaff] - [#8314]) +- Fix pylint issue ([@fabaff] - [#8325]) ([snips docs]) +- vsure 1.3.7 ([@persandstrom] - [#8321]) ([verisure docs]) +- Update pyEmby to fix media images ([@mezz64] - [#8331]) ([media_player.emby docs]) +- Partially revert #7931 ([@fabaff] - [#8326]) ([sensor.yweather docs]) +- Only allow 'tls_insecure_set()' if cert is present (fixes #8329) ([@fabaff] - [#8337]) ([mqtt docs]) +- Fix issue #8285 ([@Sabesto] - [#8340]) ([modbus docs]) ([binary_sensor.modbus docs]) ([climate.flexit docs]) ([sensor.modbus docs]) ([switch.modbus docs]) +- Bump dlib face_recognition to 0.2.0 ([@pvizeli] - [#8345]) ([image_processing.dlib_face_detect docs]) ([image_processing.dlib_face_identify docs]) +- Update Avion and Decora switches to match upstream changes ([@mjg59] - [#7903]) ([light.avion docs]) ([light.decora docs]) +- Fix the "302" error in the UPC Connect component and remove the need to specify the router password ([@Flavien] - [#8335]) ([device_tracker.upc_connect docs]) (breaking change) +- Add new feature to Apple TV platform ([@postlund] - [#8122]) ([media_player.apple_tv docs]) (breaking change) +- Add citybikes platform ([@aronsky] - [#8202]) ([sensor.citybikes docs]) (new-platform) +- Fix some issues for PyLint 1.7.2 ([@balloob] - [#8356]) +- Fix pylint 1.7.2 no-else-return issues ([@balloob] - [#8361]) +- Upgrade aiohttp to 2.2.3 ([@fabaff] - [#8363]) +- Remove some more usage of run_in_executor ([@balloob] - [#8352]) +- Correct spelling of aliases, deprecate old config options. ([@aequitas] - [#8348]) ([rflink docs]) ([light.rflink docs]) ([sensor.rflink docs]) ([switch.rflink docs]) +- Allow Pilight Binary Sensor to control reset_delay_sec through configuration ([@clarkewd] - [#8358]) ([binary_sensor.pilight docs]) +- Mqtt client_id fix for #8315 ([@heinemml] - [#8366]) ([mqtt docs]) +- Allow all panel urls ([@balloob] - [#8368]) +- Update pyHik to catch XML errors ([@mezz64] - [#8384]) ([binary_sensor.hikvision docs]) +- update version ([@wardcraigj] - [#8380]) ([alarm_control_panel.totalconnect docs]) +- Add One-Time Password sensor (OTP) ([@postlund] - [#8332]) ([sensor.otp docs]) (new-platform) +- buienradar==0.7, fix winddirection/azimuth, logging ([@mjj4791] - [#8281]) ([sensor.buienradar docs]) ([weather.buienradar docs]) +- Add component for xiaomi robot vacuum (switch.xiaomi_vacuum) ([@rytilahti] - [#7913]) ([switch.xiaomi_vacuum docs]) (new-platform) +- Try catch around database updates in recorder. Resolves 6919 ([@mitchese] - [#8349]) ([recorder docs]) +- Fix Amazon Polly with non english voices. #8377 ([@CharlesBlonde] - [#8378]) ([tts.amazon_polly docs]) +- Fix TTS options. #8375 ([@CharlesBlonde] - [#8376]) ([tts docs]) +- Add address-specific KNX listeners that fire events on the HASS bus ([@open-homeautomation] - [#8374]) ([knx docs]) +- GTFS: check start/end date on services ([@Kernald] - [#8373]) ([sensor.gtfs docs]) +- Implement KNX dimming functionality ([@open-homeautomation] - [#8371]) ([light.knx docs]) +- Add Soundtouch support for playing an HTTP url ([@CharlesBlonde] - [#8370]) ([media_player.soundtouch docs]) +- Modbus fixes to work with pymodbus 1.3.1 ([@Sabesto] - [#8365]) ([modbus docs]) ([binary_sensor.modbus docs]) ([sensor.modbus docs]) ([switch.modbus docs]) +- Cleanup the asuswrt component ([@mattsch] - [#8359]) ([device_tracker.asuswrt docs]) +- cover_template:i open/close/stop actions no longer required. Improve tests ([@PhracturedBlue] - [#8344]) ([cover.template docs]) +- Prevent errors on Octoprint sensors and binary_sensors when Octoprint and/or Printer are off ([@w1ll1am23] - [#8343]) ([octoprint docs]) ([binary_sensor.octoprint docs]) ([sensor.octoprint docs]) +- Presence detection for tp link eap225 ([@alexrockt] - [#8322]) ([device_tracker.tplink docs]) +- zha light: Refresh at startup ([@rcloran] - [#8310]) ([light.zha docs]) +- zha: Try multiple reads to get manufacturer/model ([@rcloran] - [#8308]) ([zha docs]) +- Upnp mapping notification ([@dgomes] - [#8303]) ([upnp docs]) +- Use user-set device names for Linksys Smart Wi-Fi routers (3) ([@Klikini] - [#8300]) ([device_tracker.linksys_smart docs]) +- Added support for upload of remote or local files to slack ([@simaosimao] - [#8278]) ([notify.slack docs]) +- Update avion.py ([@pvizeli] - [#8364]) ([light.avion docs]) +- LaMetric platform and notify module ([@open-homeautomation] - [#8230]) ([lametric docs]) ([notify.lametric docs]) (new-platform) +- Sets spotify media_type to music ([@Tommatheussen] - [#8387]) ([media_player.spotify docs]) +- Update waqi sensor ([@andrey-git] - [#8385]) ([sensor.waqi docs]) +- Update aiolifx ([@amelchio] - [#8396]) ([light.lifx docs]) +- Code owners ([@balloob] - [#8393]) +- Add new Dyson sensors ([@CharlesBlonde] - [#8199]) ([dyson docs]) ([fan.dyson docs]) ([sensor.dyson docs]) +- Fix CODEOWNERS z-wave team name ([@armills] - [#8400]) +- Upgrade Sphinx to 1.6.3 ([@fabaff] - [#8405]) +- Use upstream RachioPy, fix manual run switches ([@Klikini] - [#8286]) ([switch.rachio docs]) +- Marrantz SR5006 & SR5006 treated as AVR-X device | Fixed Mapping of Media Player and AUX input functions ([@scarface-4711] - [#8409]) ([media_player.denonavr docs]) +- New component to connect to VELUX KLF 200 Interface ([@Julius2342] - [#8203]) ([velux docs]) ([scene.velux docs]) (new-platform) +- Properly handle the case when a group includes itself. ([@andrey-git] - [#8398]) ([group docs]) +- Add set_operation_mode support to generic_thermostat ([@mtreinish] - [#8392]) ([climate.generic_thermostat docs]) +- Make gzips reproducible by excluding timestamp ([@armills] - [#8420]) +- Do not overwrite a custom hyperion light name with the hostname of the server. ([@doctorjames] - [#8391]) ([light.hyperion docs]) +- Fixed link to documentation ([@Julius2342] - [#8424]) ([velux docs]) ([scene.velux docs]) +- Fix KeyError (fixes #3721, fixes #7241) ([@fabaff] - [#8428]) ([sensor.uber docs]) +- Use HA lat/long for the start (fixes #3971) ([@fabaff] - [#8429]) ([sensor.uber docs]) +- bump python-mirobo requirement to support newer firmwares and more ([@rytilahti] - [#8431]) ([switch.xiaomi_vacuum docs]) +- New service `send_magic_packet` with new component `wake_on_lan` ([@azogue] - [#8397]) ([wake_on_lan docs]) (new-platform) +- Integrate utility functions into restricted Python environment ([@open-homeautomation] - [#8427]) ([python_script docs]) +- Allow Twitter notifications to include media ([@MikeChristianson] - [#8282]) ([notify docs]) ([notify.twitter docs]) +- Fix typo (sending USERNAME instead of PASSWORD) introduced in #7963 ([@thecynic] - [#8433]) ([lutron docs]) +- zha: Handle both input and output clusters ([@rcloran] - [#8410]) ([zha docs]) ([binary_sensor.zha docs]) ([light.zha docs]) ([sensor.zha docs]) +- Add support for Prometheus ([@rcloran] - [#8211]) ([prometheus docs]) (new-platform) +- Refactored Amcrest to use central hub component ([@tchellomello] - [#8184]) ([amcrest docs]) ([camera.amcrest docs]) ([sensor.amcrest docs]) (breaking change) (new-platform) +- Fix radiothermostat -1 value issue ([@aneisch] - [#8395]) ([climate.radiotherm docs]) +- Added media_extractor service ([@minchik] - [#8369]) ([media_extractor docs]) (new-platform) +- Updated pyvera ([@alanfischer] - [#8437]) ([vera docs]) +- Upgrade phue to 1.0 (fixes #7749) ([@fabaff] - [#8444]) ([light.hue docs]) +- Add effects ([@fabaff] - [#8442]) ([light.mystrom docs]) +- Exclude 'TAXI' product (fixes #8401) ([@fabaff] - [#8438]) ([sensor.uber docs]) +- Switch pyW215 to pypi ([@andrey-git] - [#8445]) ([switch.dlink docs]) +- Vizio SmartCast support ([@vkorn] - [#8260]) ([media_player.vizio docs]) (new-platform) +- DHT support for humidity and temperature offset ([@gitmopp] - [#8238]) ([sensor.dht docs]) +- Add support for rain and moisture sensors ([@sdague] - [#8440]) ([sensor.arwn docs]) +- Hass.io: Disable timeout when updating OS/supervisor/hass ([@balloob] - [#8447]) ([hassio docs]) +- Fix Arlo Q not working with 0.48.1 ([@viswa-swami] - [#8446]) ([camera.arlo docs]) +- Support for Plex servers with enforced SSL ([@nmaggioni] - [#8341]) ([media_player.plex docs]) +- Upgrade youtube_dl to 2017.7.9 ([@fabaff] - [#8450]) ([media_extractor docs]) +- Implement a bridge between HASS event bus and KNX bus to send events ([@open-homeautomation] - [#8449]) ([knx docs]) +- LIFX: improve light availability ([@amelchio] - [#8451]) ([light.lifx docs]) +- LIFX: make broadcast address configurable ([@amelchio] - [#8453]) ([light.lifx docs]) +- Backend support for themes ([@andrey-git] - [#8419]) +- upgrade broadlink ([@danielhiversen] - [#8462]) ([sensor.broadlink docs]) ([switch.broadlink docs]) +- upgrade rfxtrx lib ([@danielhiversen] - [#8463]) ([rfxtrx docs]) +- Plex: Add exception handler when connection fails ([@abmantis] - [#8179]) ([media_player.plex docs]) +- HomeMatic dependency upgrade + IP Wall Thermostat support ([@danielperna84] - [#8465]) ([homematic docs]) +- Add kiosk-mode panel ([@andrey-git] - [#8457]) + +[#7903]: https://github.com/home-assistant/home-assistant/pull/7903 +[#7913]: https://github.com/home-assistant/home-assistant/pull/7913 +[#8122]: https://github.com/home-assistant/home-assistant/pull/8122 +[#8179]: https://github.com/home-assistant/home-assistant/pull/8179 +[#8184]: https://github.com/home-assistant/home-assistant/pull/8184 +[#8199]: https://github.com/home-assistant/home-assistant/pull/8199 +[#8202]: https://github.com/home-assistant/home-assistant/pull/8202 +[#8203]: https://github.com/home-assistant/home-assistant/pull/8203 +[#8211]: https://github.com/home-assistant/home-assistant/pull/8211 +[#8230]: https://github.com/home-assistant/home-assistant/pull/8230 +[#8238]: https://github.com/home-assistant/home-assistant/pull/8238 +[#8260]: https://github.com/home-assistant/home-assistant/pull/8260 +[#8266]: https://github.com/home-assistant/home-assistant/pull/8266 +[#8272]: https://github.com/home-assistant/home-assistant/pull/8272 +[#8274]: https://github.com/home-assistant/home-assistant/pull/8274 +[#8276]: https://github.com/home-assistant/home-assistant/pull/8276 +[#8277]: https://github.com/home-assistant/home-assistant/pull/8277 +[#8278]: https://github.com/home-assistant/home-assistant/pull/8278 +[#8281]: https://github.com/home-assistant/home-assistant/pull/8281 +[#8282]: https://github.com/home-assistant/home-assistant/pull/8282 +[#8286]: https://github.com/home-assistant/home-assistant/pull/8286 +[#8289]: https://github.com/home-assistant/home-assistant/pull/8289 +[#8298]: https://github.com/home-assistant/home-assistant/pull/8298 +[#8300]: https://github.com/home-assistant/home-assistant/pull/8300 +[#8303]: https://github.com/home-assistant/home-assistant/pull/8303 +[#8304]: https://github.com/home-assistant/home-assistant/pull/8304 +[#8305]: https://github.com/home-assistant/home-assistant/pull/8305 +[#8306]: https://github.com/home-assistant/home-assistant/pull/8306 +[#8308]: https://github.com/home-assistant/home-assistant/pull/8308 +[#8310]: https://github.com/home-assistant/home-assistant/pull/8310 +[#8313]: https://github.com/home-assistant/home-assistant/pull/8313 +[#8314]: https://github.com/home-assistant/home-assistant/pull/8314 +[#8321]: https://github.com/home-assistant/home-assistant/pull/8321 +[#8322]: https://github.com/home-assistant/home-assistant/pull/8322 +[#8325]: https://github.com/home-assistant/home-assistant/pull/8325 +[#8326]: https://github.com/home-assistant/home-assistant/pull/8326 +[#8331]: https://github.com/home-assistant/home-assistant/pull/8331 +[#8332]: https://github.com/home-assistant/home-assistant/pull/8332 +[#8335]: https://github.com/home-assistant/home-assistant/pull/8335 +[#8337]: https://github.com/home-assistant/home-assistant/pull/8337 +[#8340]: https://github.com/home-assistant/home-assistant/pull/8340 +[#8341]: https://github.com/home-assistant/home-assistant/pull/8341 +[#8343]: https://github.com/home-assistant/home-assistant/pull/8343 +[#8344]: https://github.com/home-assistant/home-assistant/pull/8344 +[#8345]: https://github.com/home-assistant/home-assistant/pull/8345 +[#8348]: https://github.com/home-assistant/home-assistant/pull/8348 +[#8349]: https://github.com/home-assistant/home-assistant/pull/8349 +[#8352]: https://github.com/home-assistant/home-assistant/pull/8352 +[#8356]: https://github.com/home-assistant/home-assistant/pull/8356 +[#8358]: https://github.com/home-assistant/home-assistant/pull/8358 +[#8359]: https://github.com/home-assistant/home-assistant/pull/8359 +[#8361]: https://github.com/home-assistant/home-assistant/pull/8361 +[#8363]: https://github.com/home-assistant/home-assistant/pull/8363 +[#8364]: https://github.com/home-assistant/home-assistant/pull/8364 +[#8365]: https://github.com/home-assistant/home-assistant/pull/8365 +[#8366]: https://github.com/home-assistant/home-assistant/pull/8366 +[#8368]: https://github.com/home-assistant/home-assistant/pull/8368 +[#8369]: https://github.com/home-assistant/home-assistant/pull/8369 +[#8370]: https://github.com/home-assistant/home-assistant/pull/8370 +[#8371]: https://github.com/home-assistant/home-assistant/pull/8371 +[#8373]: https://github.com/home-assistant/home-assistant/pull/8373 +[#8374]: https://github.com/home-assistant/home-assistant/pull/8374 +[#8376]: https://github.com/home-assistant/home-assistant/pull/8376 +[#8378]: https://github.com/home-assistant/home-assistant/pull/8378 +[#8380]: https://github.com/home-assistant/home-assistant/pull/8380 +[#8384]: https://github.com/home-assistant/home-assistant/pull/8384 +[#8385]: https://github.com/home-assistant/home-assistant/pull/8385 +[#8387]: https://github.com/home-assistant/home-assistant/pull/8387 +[#8391]: https://github.com/home-assistant/home-assistant/pull/8391 +[#8392]: https://github.com/home-assistant/home-assistant/pull/8392 +[#8393]: https://github.com/home-assistant/home-assistant/pull/8393 +[#8395]: https://github.com/home-assistant/home-assistant/pull/8395 +[#8396]: https://github.com/home-assistant/home-assistant/pull/8396 +[#8397]: https://github.com/home-assistant/home-assistant/pull/8397 +[#8398]: https://github.com/home-assistant/home-assistant/pull/8398 +[#8400]: https://github.com/home-assistant/home-assistant/pull/8400 +[#8405]: https://github.com/home-assistant/home-assistant/pull/8405 +[#8409]: https://github.com/home-assistant/home-assistant/pull/8409 +[#8410]: https://github.com/home-assistant/home-assistant/pull/8410 +[#8419]: https://github.com/home-assistant/home-assistant/pull/8419 +[#8420]: https://github.com/home-assistant/home-assistant/pull/8420 +[#8424]: https://github.com/home-assistant/home-assistant/pull/8424 +[#8427]: https://github.com/home-assistant/home-assistant/pull/8427 +[#8428]: https://github.com/home-assistant/home-assistant/pull/8428 +[#8429]: https://github.com/home-assistant/home-assistant/pull/8429 +[#8431]: https://github.com/home-assistant/home-assistant/pull/8431 +[#8433]: https://github.com/home-assistant/home-assistant/pull/8433 +[#8437]: https://github.com/home-assistant/home-assistant/pull/8437 +[#8438]: https://github.com/home-assistant/home-assistant/pull/8438 +[#8440]: https://github.com/home-assistant/home-assistant/pull/8440 +[#8442]: https://github.com/home-assistant/home-assistant/pull/8442 +[#8444]: https://github.com/home-assistant/home-assistant/pull/8444 +[#8445]: https://github.com/home-assistant/home-assistant/pull/8445 +[#8446]: https://github.com/home-assistant/home-assistant/pull/8446 +[#8447]: https://github.com/home-assistant/home-assistant/pull/8447 +[#8449]: https://github.com/home-assistant/home-assistant/pull/8449 +[#8450]: https://github.com/home-assistant/home-assistant/pull/8450 +[#8451]: https://github.com/home-assistant/home-assistant/pull/8451 +[#8453]: https://github.com/home-assistant/home-assistant/pull/8453 +[#8457]: https://github.com/home-assistant/home-assistant/pull/8457 +[#8462]: https://github.com/home-assistant/home-assistant/pull/8462 +[#8463]: https://github.com/home-assistant/home-assistant/pull/8463 +[#8465]: https://github.com/home-assistant/home-assistant/pull/8465 +[@CharlesBlonde]: https://github.com/CharlesBlonde +[@Flavien]: https://github.com/Flavien +[@Julius2342]: https://github.com/Julius2342 +[@Kernald]: https://github.com/Kernald +[@Klikini]: https://github.com/Klikini +[@MikeChristianson]: https://github.com/MikeChristianson +[@PhracturedBlue]: https://github.com/PhracturedBlue +[@Sabesto]: https://github.com/Sabesto +[@Tommatheussen]: https://github.com/Tommatheussen +[@abmantis]: https://github.com/abmantis +[@aequitas]: https://github.com/aequitas +[@alanfischer]: https://github.com/alanfischer +[@alexrockt]: https://github.com/alexrockt +[@amelchio]: https://github.com/amelchio +[@andrey-git]: https://github.com/andrey-git +[@aneisch]: https://github.com/aneisch +[@armills]: https://github.com/armills +[@aronsky]: https://github.com/aronsky +[@azogue]: https://github.com/azogue +[@balloob]: https://github.com/balloob +[@clarkewd]: https://github.com/clarkewd +[@danielhiversen]: https://github.com/danielhiversen +[@danielperna84]: https://github.com/danielperna84 +[@dgomes]: https://github.com/dgomes +[@doctorjames]: https://github.com/doctorjames +[@fabaff]: https://github.com/fabaff +[@gitmopp]: https://github.com/gitmopp +[@heinemml]: https://github.com/heinemml +[@mattsch]: https://github.com/mattsch +[@mezz64]: https://github.com/mezz64 +[@michaelarnauts]: https://github.com/michaelarnauts +[@minchik]: https://github.com/minchik +[@mitchese]: https://github.com/mitchese +[@mjg59]: https://github.com/mjg59 +[@mjj4791]: https://github.com/mjj4791 +[@mtreinish]: https://github.com/mtreinish +[@nmaggioni]: https://github.com/nmaggioni +[@open-homeautomation]: https://github.com/open-homeautomation +[@persandstrom]: https://github.com/persandstrom +[@postlund]: https://github.com/postlund +[@pvizeli]: https://github.com/pvizeli +[@rcloran]: https://github.com/rcloran +[@robmarkcole]: https://github.com/robmarkcole +[@rytilahti]: https://github.com/rytilahti +[@scarface-4711]: https://github.com/scarface-4711 +[@sdague]: https://github.com/sdague +[@simaosimao]: https://github.com/simaosimao +[@tchellomello]: https://github.com/tchellomello +[@thecynic]: https://github.com/thecynic +[@viswa-swami]: https://github.com/viswa-swami +[@vkorn]: https://github.com/vkorn +[@w1ll1am23]: https://github.com/w1ll1am23 +[@wardcraigj]: https://github.com/wardcraigj +[@wmalgadey]: https://github.com/wmalgadey +[alarm_control_panel.totalconnect docs]: https://home-assistant.io/components/alarm_control_panel.totalconnect/ +[amcrest docs]: https://home-assistant.io/components/amcrest/ +[apcupsd docs]: https://home-assistant.io/components/apcupsd/ +[binary_sensor.hikvision docs]: https://home-assistant.io/components/binary_sensor.hikvision/ +[binary_sensor.modbus docs]: https://home-assistant.io/components/binary_sensor.modbus/ +[binary_sensor.octoprint docs]: https://home-assistant.io/components/binary_sensor.octoprint/ +[binary_sensor.pilight docs]: https://home-assistant.io/components/binary_sensor.pilight/ +[binary_sensor.zha docs]: https://home-assistant.io/components/binary_sensor.zha/ +[camera.amcrest docs]: https://home-assistant.io/components/camera.amcrest/ +[camera.arlo docs]: https://home-assistant.io/components/camera.arlo/ +[climate.flexit docs]: https://home-assistant.io/components/climate.flexit/ +[climate.generic_thermostat docs]: https://home-assistant.io/components/climate.generic_thermostat/ +[climate.radiotherm docs]: https://home-assistant.io/components/climate.radiotherm/ +[climate.tado docs]: https://home-assistant.io/components/climate.tado/ +[cover.template docs]: https://home-assistant.io/components/cover.template/ +[device_tracker.asuswrt docs]: https://home-assistant.io/components/device_tracker.asuswrt/ +[device_tracker.linksys_smart docs]: https://home-assistant.io/components/device_tracker.linksys_smart/ +[device_tracker.tplink docs]: https://home-assistant.io/components/device_tracker.tplink/ +[device_tracker.upc_connect docs]: https://home-assistant.io/components/device_tracker.upc_connect/ +[dyson docs]: https://home-assistant.io/components/dyson/ +[fan.dyson docs]: https://home-assistant.io/components/fan.dyson/ +[group docs]: https://home-assistant.io/components/group/ +[hassio docs]: https://home-assistant.io/hassio/ +[homematic docs]: https://home-assistant.io/components/homematic/ +[image_processing.dlib_face_detect docs]: https://home-assistant.io/components/image_processing.dlib_face_detect/ +[image_processing.dlib_face_identify docs]: https://home-assistant.io/components/image_processing.dlib_face_identify/ +[knx docs]: https://home-assistant.io/components/knx/ +[lametric docs]: https://home-assistant.io/components/lametric/ +[light.avion docs]: https://home-assistant.io/components/light.avion/ +[light.decora docs]: https://home-assistant.io/components/light.decora/ +[light.hue docs]: https://home-assistant.io/components/light.hue/ +[light.hyperion docs]: https://home-assistant.io/components/light.hyperion/ +[light.knx docs]: https://home-assistant.io/components/light.knx/ +[light.lifx docs]: https://home-assistant.io/components/light.lifx/ +[light.mystrom docs]: https://home-assistant.io/components/light.mystrom/ +[light.rflink docs]: https://home-assistant.io/components/light.rflink/ +[light.zha docs]: https://home-assistant.io/components/light.zha/ +[lutron docs]: https://home-assistant.io/components/lutron/ +[media_extractor docs]: https://home-assistant.io/components/media_extractor/ +[media_extractor docs]: https://home-assistant.io/components/media_extractor/ +[media_player.apple_tv docs]: https://home-assistant.io/components/media_player.apple_tv/ +[media_player.denonavr docs]: https://home-assistant.io/components/media_player.denonavr/ +[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.soundtouch docs]: https://home-assistant.io/components/media_player.soundtouch/ +[media_player.spotify docs]: https://home-assistant.io/components/media_player.spotify/ +[media_player.vizio docs]: https://home-assistant.io/components/media_player.vizio/ +[modbus docs]: https://home-assistant.io/components/modbus/ +[mqtt docs]: https://home-assistant.io/components/mqtt/ +[notify docs]: https://home-assistant.io/components/notify/ +[notify.discord docs]: https://home-assistant.io/components/notify.discord/ +[notify.lametric docs]: https://home-assistant.io/components/notify.lametric/ +[notify.slack docs]: https://home-assistant.io/components/notify.slack/ +[notify.twitter docs]: https://home-assistant.io/components/notify.twitter/ +[octoprint docs]: https://home-assistant.io/components/octoprint/ +[prometheus docs]: https://home-assistant.io/components/prometheus/ +[python_script docs]: https://home-assistant.io/components/python_script/ +[recorder docs]: https://home-assistant.io/components/recorder/ +[rflink docs]: https://home-assistant.io/components/rflink/ +[rfxtrx docs]: https://home-assistant.io/components/rfxtrx/ +[scene.velux docs]: https://home-assistant.io/components/scene.velux/ +[sensor.amcrest docs]: https://home-assistant.io/components/sensor.amcrest/ +[sensor.apcupsd docs]: https://home-assistant.io/components/sensor.apcupsd/ +[sensor.arwn docs]: https://home-assistant.io/components/sensor.arwn/ +[sensor.broadlink docs]: https://home-assistant.io/components/sensor.broadlink/ +[sensor.buienradar docs]: https://home-assistant.io/components/sensor.buienradar/ +[sensor.citybikes docs]: https://home-assistant.io/components/sensor.citybikes/ +[sensor.dht docs]: https://home-assistant.io/components/sensor.dht/ +[sensor.dyson docs]: https://home-assistant.io/components/sensor.dyson/ +[sensor.gtfs docs]: https://home-assistant.io/components/sensor.gtfs/ +[sensor.london_underground docs]: https://home-assistant.io/components/sensor.london_underground/ +[sensor.modbus docs]: https://home-assistant.io/components/sensor.modbus/ +[sensor.octoprint docs]: https://home-assistant.io/components/sensor.octoprint/ +[sensor.openweathermap docs]: https://home-assistant.io/components/sensor.openweathermap/ +[sensor.otp docs]: https://home-assistant.io/components/sensor.otp/ +[sensor.rflink docs]: https://home-assistant.io/components/sensor.rflink/ +[sensor.london_underground docs]: https://home-assistant.io/components/sensor.london_underground/ +[sensor.uber docs]: https://home-assistant.io/components/sensor.uber/ +[sensor.waqi docs]: https://home-assistant.io/components/sensor.waqi/ +[sensor.yweather docs]: https://home-assistant.io/components/sensor.yweather/ +[sensor.zha docs]: https://home-assistant.io/components/sensor.zha/ +[snips docs]: https://home-assistant.io/components/snips/ +[switch.broadlink docs]: https://home-assistant.io/components/switch.broadlink/ +[switch.dlink docs]: https://home-assistant.io/components/switch.dlink/ +[switch.modbus docs]: https://home-assistant.io/components/switch.modbus/ +[switch.rachio docs]: https://home-assistant.io/components/switch.rachio/ +[switch.rflink docs]: https://home-assistant.io/components/switch.rflink/ +[switch.xiaomi_vacuum docs]: https://home-assistant.io/components/switch.xiaomi_vacuum/ +[tado docs]: https://home-assistant.io/components/tado/ +[tts docs]: https://home-assistant.io/components/tts/ +[tts.amazon_polly docs]: https://home-assistant.io/components/tts.amazon_polly/ +[upnp docs]: https://home-assistant.io/components/upnp/ +[velux docs]: https://home-assistant.io/components/velux/ +[frontend docs]: https://home-assistant.io/components/frontend/ +[vera docs]: https://home-assistant.io/components/vera/ +[verisure docs]: https://home-assistant.io/components/verisure/ +[wake_on_lan docs]: https://home-assistant.io/components/wake_on_lan/ +[weather.buienradar docs]: https://home-assistant.io/components/weather.buienradar/ +[weather.openweathermap docs]: https://home-assistant.io/components/weather.openweathermap/ +[zha docs]: https://home-assistant.io/components/zha/ +[zha.const docs]: https://home-assistant.io/components/zha.const/ +[forum]: https://community.home-assistant.io/ +[issue]: https://github.com/home-assistant/home-assistant/issues +[discord]: https://discord.gg/c5DvZ4e diff --git a/source/images/blog/2017-07-0.49/components.png b/source/images/blog/2017-07-0.49/components.png new file mode 100644 index 0000000000000000000000000000000000000000..86629d6dff4e3041b55186fdcc59a5fa4ba5082f GIT binary patch literal 26076 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

    $tPyurX1uEkXlP%>HWj?hB-$?tDWCPB^n) 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 literal 0 HcmV?d00001 diff --git a/source/images/blog/2017-07-0.49/green-theme.png b/source/images/blog/2017-07-0.49/green-theme.png new file mode 100644 index 0000000000000000000000000000000000000000..d9672ab95583939a2b2f54b88bcb12a3e164717d GIT binary patch literal 5667 zcmchbXEfZ=xA#X+h?0Vc5JV87cS8`p6GW6zhar0V=`}$jMTb||tdY#mz~k}j>+2#SB0W7lH8nM+ zrlxv&dS_>6gM)*ip`n6;f;>Dt{r&w)N=nkw(m%E{006L`eDe1KzkRl1ZEcN2B8!WQ z6B85TmuyThx4XK!nwpxTqN2RKygn?vwiOMa~j8U-WHg`Iip0a

    BjbfX3ery!vaULJ6rSzQRA6_L21v5 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 literal 0 HcmV?d00001