From a6c9e8df833302fe3831b48002ce1c49e69b9b1d Mon Sep 17 00:00:00 2001 From: Michael Fester Date: Sat, 1 Jul 2017 23:27:06 +0200 Subject: [PATCH 01/36] Documentation for Snips components (#2892) * Documentation for Snips components * Fix version * Fix typos * Update video link --- source/_components/snips.markdown | 93 ++++++++++++++++++++ source/images/screenshots/snips_modules.png | Bin 0 -> 40124 bytes source/images/screenshots/snips_nlu.png | Bin 0 -> 49459 bytes source/images/supported_brands/snips.png | Bin 0 -> 5583 bytes 4 files changed, 93 insertions(+) create mode 100644 source/_components/snips.markdown create mode 100644 source/images/screenshots/snips_modules.png create mode 100644 source/images/screenshots/snips_nlu.png create mode 100644 source/images/supported_brands/snips.png diff --git a/source/_components/snips.markdown b/source/_components/snips.markdown new file mode 100644 index 00000000000..63e8009af48 --- /dev/null +++ b/source/_components/snips.markdown @@ -0,0 +1,93 @@ +--- +layout: page +title: "Snips" +description: "Instructions how to integrate Snips within Home Assistant." +date: 2017-06-22 12:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: snips.png +ha_category: Voice +ha_release: 0.48 +--- + +The [Snips Voice Platform](https://www.snips.ai) allows users to add powerful voice assistants to their Raspberry Pi devices without compromising on Privacy. It runs 100% on-device, and does not require an Internet connection. It features Hotword Detection, Automatic Speech Recognition (ASR), Natural Language Understanding (NLU) and Dialog Management. + +![Snips Modules](/images/screenshots/snips_modules.png) + +Snips takes voice or text as input, and produces *intents* as output, which are explicit representations of an intention behind an utterance, and which can subsequently be used by Home Assistant to perform appropriate actions. + +![Snips Modules](/images/screenshots/snips_nlu.png) + + +## {% linkable_title The Snips Voice Platform %} + +### Installation + +The Snips Voice Platform is installed on Raspberry Pi with the following command: + +```sh +(pi) $ curl https://install.snips.ai -sSf | sh +``` + +### Creating an assistant + +
+ +
+ +Snips assistants are created via the [Snips Console](https://console.snips.ai). Once trained, the assistant should be downloaded and copied to the Raspberry Pi: + +```sh +$ scp assistantproj_XXX.zip pi@pi_hostname:/home/pi/assistant.zip +``` + +and installed locally via the `snips-install-assistant` helper script: + +```sh +(pi) $ sudo snips-install-assistant assistant.zip +``` + +### Running Snips + +Make sure that a microphone is plugged to the Raspberry Pi. If you are having trouble setting up audio, we have written a guide on [Raspberry Pi Audio Configuration](https://github.com/snipsco/snips-platform-documentation/wiki/1.-Setup-the-Snips-Voice-Platform-on-your-Raspberry-Pi#configuring-the-audio). + +Start the Snips Voice Platform using the `snips` command: + +```sh +(pi) $ snips +``` + +Snips is now ready to take voice commands from the microphone. To trigger the listening, simply say + +> Hey Snips + +followed by a command, e.g. + +> Set the lights to green in the living room + +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. + +## 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`: + +```yaml +mqtt: + broker: 127.0.0.1 + port: 9898 +``` + +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: + +```yaml +snips: + intents: + ActivateLightColor: + action: + - service: light.turn_on + data_template: + entity_id: light.{% raw %}{{ objectLocation | replace(" ","_") }}{% endraw %} + color_name: {% raw %}{{ objectColor }}{% endraw %} +``` diff --git a/source/images/screenshots/snips_modules.png b/source/images/screenshots/snips_modules.png new file mode 100644 index 0000000000000000000000000000000000000000..60235f65681e1a0e445bcc8b46b7de578a47669c GIT binary patch literal 40124 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%0DtkaA9u+=3^{HFAJCn<*qLLJe(0~ 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 literal 0 HcmV?d00001 diff --git a/source/images/screenshots/snips_nlu.png b/source/images/screenshots/snips_nlu.png new file mode 100644 index 0000000000000000000000000000000000000000..b589f3f1cfcd1b8259ad4770b6189685aaad302b GIT binary patch literal 49459 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 JqLbDk{|~k_$NvBT literal 0 HcmV?d00001 diff --git a/source/images/supported_brands/snips.png b/source/images/supported_brands/snips.png new file mode 100644 index 0000000000000000000000000000000000000000..ec98a5f2a6fdddc2a9f132c10013d5ee75d918bc GIT binary patch literal 5583 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 P(Bi2oYABRGvv~VIt^cu( literal 0 HcmV?d00001 From 0215df4a6945e47880f4eac2b018e047880425e4 Mon Sep 17 00:00:00 2001 From: Jeff Wilson Date: Sat, 1 Jul 2017 20:22:57 -0400 Subject: [PATCH 02/36] Insteon local fan (#2390) * Add fan to insteon_local full config * Add insteon_local fan page * Update 'ha_release' --- source/_components/fan.insteon_local.markdown | 34 +++++++++++++++++++ source/_components/insteon_local.markdown | 3 ++ 2 files changed, 37 insertions(+) create mode 100644 source/_components/fan.insteon_local.markdown diff --git a/source/_components/fan.insteon_local.markdown b/source/_components/fan.insteon_local.markdown new file mode 100644 index 00000000000..a1afd9d1a0d --- /dev/null +++ b/source/_components/fan.insteon_local.markdown @@ -0,0 +1,34 @@ +--- +layout: page +title: "Insteon (Local) Fan" +description: "Instructions how to setup the Insteon Hub Fans locally within Home Assistant." +date: 2017-04-06 11:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: insteon.png +ha_category: fan +ha_version: 0.48 +--- + +The `insteon_local` fan component lets you control your fan connected to an [Insteon Hub](http://www.insteon.com/insteon-hub/) with Home Assistant. + +To integrate add a fan, configure your hub Insteon(local) with Home Assistant, add the following section to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml platform entry +insteon_local: + host: YOUR HUB IP + username: YOUR HUB USERNAME + password: YOUR HUB PASSWORD + timeout: 10 + port: 25105 +``` + +To add fans to your set-up, add the platform to your light configuration: +```yaml +fan: + - platform: insteon_local +``` + diff --git a/source/_components/insteon_local.markdown b/source/_components/insteon_local.markdown index 1b1343083a3..96a339f0f03 100644 --- a/source/_components/insteon_local.markdown +++ b/source/_components/insteon_local.markdown @@ -50,5 +50,8 @@ light: switch: - platform: insteon_local + +fan: + - platform: insteon_local ``` From 3d3b3eab289f943ecbcf47f4568e9093e09a54aa Mon Sep 17 00:00:00 2001 From: Yannick POLLART Date: Sun, 2 Jul 2017 02:23:45 +0200 Subject: [PATCH 03/36] rfxtrx binary sensor component documentation (#2336) * First draft of RFXtrx binary sensor doc page. * Updated rfxtrx binary sensor doc. * binary_sensors.rfxtrx: updated doc according to latest PR changes. * Updated rfxtrx binary sensor documentation * Update binary_sensor.rfxtrx.markdown Tried to clarify the data_bits description. * Updated device_class property. --- .../_components/binary_sensor.rfxtrx.markdown | 136 ++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 source/_components/binary_sensor.rfxtrx.markdown diff --git a/source/_components/binary_sensor.rfxtrx.markdown b/source/_components/binary_sensor.rfxtrx.markdown new file mode 100644 index 00000000000..d2c2df56c8d --- /dev/null +++ b/source/_components/binary_sensor.rfxtrx.markdown @@ -0,0 +1,136 @@ +--- +layout: page +title: "RFXtrx Binary Sensor" +description: "Instructions how to integrate RFXtrx binary sensors into Home Assistant." +date: 2017-03-26 12:45 +sidebar: true +comments: false +sharing: true +footer: true +logo: rfxtrx.png +ha_category: Binary Sensor +--- + +The `rfxtrx` platform support binary sensors that communicate in the frequency range of 433.92 MHz. The rfxtrx binary sensor component provides support for them. + +Many cheap sensors available on the web today are based on a particular RF chip called *PT-2262*. Depending on the running firmware on the RFXcom box, some of them may be recognized under the X10 protocol but most of them are recognized under the *Lighting4* protocol. The rfxtrx binary sensor component provides some special options for them, while other rfxtrx protocols should work too. + +# Setting up your devices +Once you have set up your [rfxtrx hub](/components/rfxtrx/), the easiest way to find your binary sensors is to add this to your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +binary_sensor: + platform: rfxtrx + automatic_add: True +``` + +Open your local home-assistant web UI and go to the "states" page. Then make sure to trigger your sensor. You should see a new entity appear in the *Current entites* list, starting with "binary_sensor." and some hexadecimal digits. Those hexadecimal digits are your device id. + +For example: "binary_sensor.0913000022670e013b70". Here your device id is `0913000022670e013b70`. Then you should update your configuration to: + +```yaml +# Example configuration.yaml entry +binary_sensor: + platform: rfxtrx + devices: + 0913000022670e013b70: + name: device_name +``` + +Do not forget to tweak the configuration variables: + +- **automatic_add** (*Optional*): To enable the automatic addition of new binary sensors. +- **device_class** (*Optional*): The [type or class of the sensor](/components/binary_sensor/) to set the icon in the frontend. +- **off_delay** (*Optional*): For sensors that only sends 'On' state updates, this variable sets a delay after which the sensor state will be updated back to 'Off'. + + +Binary sensors have only two states - "on" and "off". Many door or window opening sensors will send a signal each time the door/window is open or closed. However, depending on their hardware or on their purpose, some sensors are only able to signal their "on" state: + +- Most motion sensors send a signal each time they detect motion. They stay "on" for a few seconds and go back to sleep, ready to signal other motion events. Usually, they do not send a signal when they go back to sleep. +- Some doorbells may also only send "on" signals when their toggle switch is pressed, but no "off" signal when the switch is released. + +For those devices, use the *off_delay* parameter. It defines a delay after which a device will go back to an "Off" state. That "Off" state will be fired internally by Home Assistant, just as if the device fired it by itself. If a motion sensor can only send signals once every 5 seconds, sets the *off_delay* parameter to *seconds: 5*. + + +Example configuration: + +```yaml +# Example configuration.yaml entry +binary_sensor: + platform: rfxtrx + automatic_add: True + devices: + 091300006ca2c6001080: + name: motion_hall + device_class: motion + off_delay: + seconds: 5 +``` + +## Options for PT-2262 devices under the Lighting4 protocol + +When a data packet is transmitted by a PT-2262 device using the Lighting4 protocol, there is no way to automatically extract the device identifier and the command from the packet. Each device has its own id/command length combination and the fields lengths are not included in the data. One device that sends 2 different commands will be seen as 2 devices on Home Assistant. For sur cases, the following options are available in order to circumvent the problem: + +- **data_bits** (*Optional*): Defines how many bits are used for commands inside the data packets sent by the device. +- **command_on** (*Optional*): Defines the data bits value that is sent by the device upon an 'On' command. +- **command_off** (*Optional*): Defines the data bits value that is sent by the device upon an 'Off' command. + +Let's try to add a new PT-2262 sensor using the "automatic_add" option and have a look at Home Assistant system log. + +Have your sensor trigger the "On" state for the first time. Some messages will appear: + +``` +INFO (Thread-6) [homeassistant.components.binary_sensor.rfxtrx] Added binary sensor 0913000022670e013970 (Device_id: 22670e Class: LightingDevice Sub: 0) +``` + +Here the sensor has the id *22670e*. + +Now have your sensor trigger the "Off" state and look for the following message in the Home Assistant log. You should see that your device has been detected as a *new* device when triggering its "Off" state: + +``` +INFO (Thread-6) [homeassistant.components.binary_sensor.rfxtrx] Added binary sensor 09130000226707013d70 (Device_id: 226707 Class: LightingDevice Sub: 0) +``` + +Here the device id is *226707*, which is almost similar to the *22670e* we had on the "On" event a few seconds ago. + +From those two values, you can guess that the actual id of your device is *22670*, and that *e* and *7* are commands for "On" and "Off" states respectively. As one hexadecimal digit uses 4 bits, we can conclude that the device is using 4 data bits. + +So here is the actual configuration section for the binary sensor: + +```yaml +platform: rfxtrx +automatic_add: True +devices: + 0913000022670e013b70: + name: window_room2 + device_class: opening + data_bits: 4 + command_on: 0xe + command_off: 0x7 +``` + +The *automatic_add* option makes the rfxtrx binary sensor component calculate and display the configuration options for you in the Home Assistant logs: + +``` +INFO (Thread-6) [homeassistant.components.rfxtrx] rfxtrx: found possible device 226707 for 22670e with the following configuration: +data_bits=4 +command_on=0xe +command_off=0x7 +INFO (Thread-6) [homeassistant.components.binary_sensor.rfxtrx] Found possible matching deviceid 22670e. +``` + +This automatic guess should work most of the time but there is no guarantee on that. You should activate it only when you want +to configure your new devices and leave it off otherwise. + +## Known working devices + +The following devices are known to work with the rfxtrx binary sensor component. There are too many other to list. + +- Motion detectors: + - Kerui P817 and P829. + - Chuango PIR-700. + +- Door / window sensors: + - Kerui D026 door / window sensor: can trigger on "open" and "close". Has a temper switch. + - Nexa LMST-606 Magnetic contact switch. From 2c631b3cdb676d7b9b5b3d4dec7201aa0c37d52f Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 2 Jul 2017 12:21:07 +0200 Subject: [PATCH 04/36] Update for 0.49 --- source/_components/ha.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/ha.markdown b/source/_components/ha.markdown index ba629a567f3..ec4168a82ce 100644 --- a/source/_components/ha.markdown +++ b/source/_components/ha.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "Home Assistant 0.48" +title: "Home Assistant 0.49" description: "" date: 2016-12-16 17:00 sidebar: true @@ -9,7 +9,7 @@ sharing: true footer: true logo: home-assistant.png ha_category: Other -ha_release: 0.48 +ha_release: 0.49 --- Details about the latest release can always be found at: From 498c7aeffacd07d8eb871a954ddcc5d44b912562 Mon Sep 17 00:00:00 2001 From: Kane610 Date: Sun, 2 Jul 2017 22:05:44 +0200 Subject: [PATCH 05/36] * Added information on how to get dependencies working on Python3.6. (#2720) * Added information about new device service vapix_call. --- source/_components/axis.markdown | 51 ++++++++++++++++++++++---------- 1 file changed, 36 insertions(+), 15 deletions(-) diff --git a/source/_components/axis.markdown b/source/_components/axis.markdown index bf4736548d3..192c5774803 100644 --- a/source/_components/axis.markdown +++ b/source/_components/axis.markdown @@ -50,21 +50,23 @@ axis: Configuration variables: -- **device** (*Required*): Unique name for the Axis device. - - **host** (*Required*): The IP address to your Axis device. - - **username** (*Optional*): The username to your Axis device. Defaults to `root`. - - **password** (*Optional*): The password to your Axis device. Defaults to `pass`. - - **trigger_time** (*Optional*): Minimum time (in seconds) a sensor should keep its positive value. Defaults to 0. - - **location** (*Optional*): Physical location of your Axis device. Default not set. - - **include** (*Required*): This cannot be empty else there would be no use adding the device at all. - - **camera**: Stream MJPEG video to Home Assistant. - - **motion**: The built-in motion detection in Axis cameras. - - **vmd3**: ACAP Motion Detection app which has better algorithms for motion detection. - - **pir**: PIR sensor that can trigger on motion. - - **sound**: Sound detector. - - **daynight**: Certain cameras have day/night mode if they have built-in IR lights. - - **tampering**: Signals when camera believes that it has been tampered with. - - **input**: Trigger on whatever you have connected to device input port. +## {% linkable_title Configuration variables %} + +- **device** (*Required*): Unique name +- **host** (*Required*): The IP address to your Axis device. +- **username** (*Optional*): The username to your Axis device. Default 'root'. +- **password** (*Optional*): The password to your Axis device. Default 'pass'. +- **trigger_time** (*Optional*): Minimum time (in seconds) a sensor should keep its positive value. Default 0. +- **location** (*Optional*): Physical location of your Axis device. Default not set. +- **include** (*Required*): This cannot be empty else there would be no use adding the device at all. + - **camera**: Stream MJPEG video to Home Assistant. + - **motion**: The built-in motion detection in Axis cameras. + - **vmd3**: ACAP Motion Detection app which has better algorithms for motion detection. + - **pir**: PIR sensor that can trigger on motion. + - **sound**: Sound detector. + - **daynight**: Certain cameras have day/night mode if they have built-in IR lights. + - **tampering**: Signals when camera believes that it has been tampered with. + - **input**: Trigger on whatever you have connected to device input port. A full configuration example could look like this: @@ -85,6 +87,10 @@ axis: location: köket ``` +

+If you are using Python3.6 you might need to replace the 34m with 36m in the _gi.*.so filename in the gi folder. +

+

Any specific levels for triggers needs to be configured on the device.

@@ -92,3 +98,18 @@ Any specific levels for triggers needs to be configured on the device.

It is recommended that you create a user on your Axis device specifically for Home Assistant. For all current functionality it is enough to create a user belonging to user group viewer.

+ +## {% linkable_title Device services %} +Available services: `vapix_call`. + +#### {% linkable_title Service `axis/vapix_call` %} +Send a command using [Vapix](https://www.axis.com/support/developer-support/vapix). For details please read the API specifications. + +| Service data attribute | Optional | Description | +|---------------------------|----------|--------------------------------------------------| +| `name` | no | Name of device to communicate with. | +| `param` | no | What parameter to operate on. | +| `cgi` | yes | Which cgi to call on device. Default is `param.cgi`. | +| `action` | yes | What type of call. Default is `update`. | + +Response to call can be subscribed to on event `vapix_call_response` From a4f2fba64bca301deee504fa51ca871b66b17964 Mon Sep 17 00:00:00 2001 From: Robin Date: Sun, 2 Jul 2017 20:07:40 +0000 Subject: [PATCH 06/36] Add London Undergound doc page (#2902) * Add London tube status doc page Documentation and example configuration for tube_state sensor. * Rename and update Points to updated london_tube component * Update name * Update 'ha_release' --- .../sensor.london_underground.markdown | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 source/_components/sensor.london_underground.markdown diff --git a/source/_components/sensor.london_underground.markdown b/source/_components/sensor.london_underground.markdown new file mode 100644 index 00000000000..a9139412989 --- /dev/null +++ b/source/_components/sensor.london_underground.markdown @@ -0,0 +1,45 @@ +--- +layout: page +title: "London Undergound" +description: "Display the current status of London underground & overground lines within Home Assistant." +date: 2017-07-30 18:45 +sidebar: true +comments: false +sharing: true +footer: true +logo: train.png +ha_category: Transport +ha_iot_class: "Cloud Polling" +ha_release: 0.49 +--- + + +The `london_underground` sensor will display the status of London underground lines, as well as the Overground, DLR and Tfl rail. + + +```yaml +# Example configuration.yaml entry +sensor: + - platform: london_underground + line: + - Bakerloo + - Central + - Circle + - District + - DLR + - Hammersmith & City + - Jubilee + - London Overground + - Metropolitan + - Northern + - Piccadilly + - TfL Rail + - Victoria + - Waterloo & City +``` + +Configuration variables: + +- **line** (*Required*): Enter the name of at least one line. + +Powered by TfL Open Data [TFL](https://api.tfl.gov.uk/). From 717c2ab99e62431f951d60f551dac525c5bb902f Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 3 Jul 2017 07:18:18 +0200 Subject: [PATCH 07/36] Discord docs (#2923) * Add screenshots and re-arrange instructions * Add 'ha_release' --- source/_components/notify.discord.markdown | 36 ++++++++++++++------- source/images/screenshots/discord-api.png | Bin 0 -> 16398 bytes source/images/screenshots/discord-auth.png | Bin 0 -> 39021 bytes source/images/screenshots/discord-bot.png | Bin 0 -> 32309 bytes 4 files changed, 25 insertions(+), 11 deletions(-) create mode 100644 source/images/screenshots/discord-api.png create mode 100644 source/images/screenshots/discord-auth.png create mode 100644 source/images/screenshots/discord-bot.png diff --git a/source/_components/notify.discord.markdown b/source/_components/notify.discord.markdown index a3fb4c7b61d..2a102d073f7 100644 --- a/source/_components/notify.discord.markdown +++ b/source/_components/notify.discord.markdown @@ -9,16 +9,15 @@ sharing: true footer: true logo: discord.png ha_category: Notifications +ha_release: 0.37 --- The [Discord service](https://discordapp.com/) is a platform for the notify component. This allows components to send messages to the user using Discord. -In order to get a token you need to go to the [Discord My Apps page](https://discordapp.com/developers/applications/me) and create a new application. Once the application is ready, create a bot user. Retreive the client ID and the (hidden) token of your bot for later. +In order to get a token you need to go to the [Discord My Apps page](https://discordapp.com/developers/applications/me) and create a new application. Once the application is ready, create a [bot](https://discordapp.com/developers/docs/topics/oauth2#bots) user (**Create a Bot User**) and activate **Require OAuth2 Code Grant**. Retreive the **Client ID** and the (hidden) **Token** of your bot for later. When setting up the application you can use this [icon](https://home-assistant.io/demo/favicon-192x192.png). -### {% linkable_title Configuration %} - To use Discord notifications, add the following to your `configuration.yaml` file: ```yaml @@ -34,16 +33,31 @@ Configuration variables: - **name** (*Optional*): Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`. - **token** (*Required*): Your bot's token. -### {% linkable_title Using the bot %} -Bots can only send messages to servers. To add the bot to a server you are an admin on, use the Discord OAuth2 Authorization page: +### {% linkable_title Setting up the bot %} -[https://discordapp.com/api/oauth2/authorize?client_id=1234567890&scope=bot&permissions=0](https://discordapp.com/api/oauth2/authorize?client_id=1234567890&scope=bot&permissions=0) +Bots can only send messages to servers. To add the bot to a server you are an admin on, get the details of the bot from the [Discord My Apps page](https://discordapp.com/developers/applications/me). -Replace the client ID with the appropriate one from the [Discord My Apps page](https://discordapp.com/developers/applications/me). +

+ +

-Once the bot user has been added to your server, get the channel ID of the channel you want the bot to operate in. -* In The Discord app go to Settings > Appearance > Check developer mode -* Right click channel name > Copy ID +Now use the Discord Authorization page with the **Client ID** of your [bot](https://discordapp.com/developers/docs/topics/oauth2#bots). + +[https://discordapp.com/api/oauth2/authorize?client_id=[CLIENT_ID]&scope=bot&permissions=0](https://discordapp.com/api/oauth2/authorize?client_id=[CLIENT_ID]&scope=bot&permissions=0) + +

+ +

+ +Wait for the confirmation which should say "Authorized". + +Once the bot has been added to your server, get the channel ID of the channel you want the bot to operate in. In The Discord application go to **Settings** > **Appearance** > **Check developer mode**. + +

+ +

+ +Right click channel name and copy the channel ID (**Copy ID**). This channel ID has to be used as the target when calling the notification service. Multiple channel IDs can be specified, across multiple servers. @@ -59,7 +73,7 @@ This channel ID has to be used as the target when calling the notification servi } ``` -### {% linkable_title Notes %} +### {% linkable_title Notes %} For more information about creating and authorizing bots, visit the [OAuth2 information page](https://discordapp.com/developers/docs/topics/oauth2) diff --git a/source/images/screenshots/discord-api.png b/source/images/screenshots/discord-api.png new file mode 100644 index 0000000000000000000000000000000000000000..6ba730279932b5472bd5aed0c1a2827a6dbc8cd8 GIT binary patch literal 16398 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 literal 0 HcmV?d00001 diff --git a/source/images/screenshots/discord-bot.png b/source/images/screenshots/discord-bot.png new file mode 100644 index 0000000000000000000000000000000000000000..11da0c9764a747e23fabe5155fdc729d44b7c07d GIT binary patch literal 32309 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 literal 0 HcmV?d00001 From 34009e30968f3bee26a58447a8d2ed6c6a6d666f Mon Sep 17 00:00:00 2001 From: Jesse O'Connor Date: Tue, 4 Jul 2017 20:31:25 +1000 Subject: [PATCH 08/36] allow modification of variable in child scope (#2688) Fixes `NameError: name 'count' is not defined` --- source/developers/development_events.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/developers/development_events.markdown b/source/developers/development_events.markdown index 2c80e54d7ef..e078396fd05 100644 --- a/source/developers/development_events.markdown +++ b/source/developers/development_events.markdown @@ -46,6 +46,7 @@ def setup(hass, config): # Listener to handle fired events def handle_event(event): + nonlocal count count += 1 print('Total events received:', count) From f9459f839c74c9277f6c9d4d6bd3ec8953ce21b5 Mon Sep 17 00:00:00 2001 From: Flavien Charlon Date: Wed, 5 Jul 2017 05:06:38 +0100 Subject: [PATCH 09/36] Update the UPC Connect component documentation (#2931) --- source/_components/device_tracker.upc_connect.markdown | 2 -- 1 file changed, 2 deletions(-) diff --git a/source/_components/device_tracker.upc_connect.markdown b/source/_components/device_tracker.upc_connect.markdown index bb5261269a5..d58a1878e93 100644 --- a/source/_components/device_tracker.upc_connect.markdown +++ b/source/_components/device_tracker.upc_connect.markdown @@ -21,12 +21,10 @@ To use a Connect Box in your installation, add the following to your `configurat # Example configuration.yaml entry device_tracker: - platform: upc_connect - password: YOUR_PASSWORD ``` Configuration variables: -- **password** (*Required*): The password for your Connect Box. - **host** (*Optional*): The IP address of your router. Set it if you are not using `192.168.0.1`. See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. From c3a4015b95320797fa9ef859ac241952534eb71d Mon Sep 17 00:00:00 2001 From: Lev Aronsky Date: Wed, 5 Jul 2017 08:59:18 +0300 Subject: [PATCH 10/36] Create sensor.citybikes.markdown (#2770) * Create sensor.citybikes.markdown * Update sensor.citybikes.markdown Bumped the version of Home Assistant, and updated the description according to changes in the platform. * Update sensor.citybikes.markdown Bump release version. --- source/_components/sensor.citybikes.markdown | 46 ++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 source/_components/sensor.citybikes.markdown diff --git a/source/_components/sensor.citybikes.markdown b/source/_components/sensor.citybikes.markdown new file mode 100644 index 00000000000..44a222ddc7a --- /dev/null +++ b/source/_components/sensor.citybikes.markdown @@ -0,0 +1,46 @@ +--- +layout: page +title: "CityBikes API sensor" +description: "Instructions on how to integrate data from the CityBikes API into Home Assistant." +date: 2017-06-25 14:20 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Sensor +ha_release: 0.49 +--- + + +The `citybikes` sensor platform monitors bike availability at bike sharing stations in a chosen area. The data is provided by [CityBikes](https://citybik.es/#about), which supports bike sharing systems all around the world. + +To enable it, add the following lines to your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry (using radius) +sensor: + - platform: citybikes + radius: 500 +``` + +Configuration options: + +- **name** (*Optional*): The base name of this group of monitored stations. The entity ID of every monitored station in this group will be prefixed with this base name, in addition to the network ID. +- **network** (*Optional*): The name of the bike sharing system to poll. Defaults to the system that operates in the monitored location. +- **latitude** (*Optional*): Latitude of the location, around which bike stations are monitored. Defaults to the latitude in your your `configuration.yaml` file. +- **longitude** (*Optional*): Longitude of the location, around which bike stations are monitored. Defaults to the longitude in your your `configuration.yaml` file. +- **radius** (*Optional*): The radius (in meters or feet, depending on the Home Assistant configuration) around the monitored location. Only stations closer than this distance will be monitored. +- **stations** array (*Optional*): A list of specific stations to monitor. The list should contain station `ID`s or `UID`s, which can be obtained from the CityBikes API. + +Additional configuration samples: + +```yaml +# Example configuration.yaml entry (using a list of stations) +sensor: + - platform: citybikes + name: Work Stations + stations: + - 123 + - 145 + - 436 +``` From 82750fb33c979f4e999056cd7c6302902f68557c Mon Sep 17 00:00:00 2001 From: Steven Conaway Date: Thu, 6 Jul 2017 00:05:01 -0700 Subject: [PATCH 11/36] Fix Lack of Space after Android Chrome (#2940) * Fix Lack of Space after Android Chrome * Revert date Revert date since creation of document has not been moved. --- source/_faq/after-upgrading.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_faq/after-upgrading.markdown b/source/_faq/after-upgrading.markdown index 1c137fc726f..66e94bc8477 100644 --- a/source/_faq/after-upgrading.markdown +++ b/source/_faq/after-upgrading.markdown @@ -13,4 +13,5 @@ ha_category: Usage After upgrading to a new version, you may notice your browser gets stuck at the "loading data" login screen. Close the window/tab and go into your browser settings and delete all the cookies for your URL. You can then log back in and it should work. Android Chrome + chrome -> settings -> site settings -> storage -> search for your URL for home assistant-> "clear & reset" From 6dde17942964e1f41d3fe47f03456e3c409f32b2 Mon Sep 17 00:00:00 2001 From: PhyberApex Date: Thu, 6 Jul 2017 11:36:04 +0200 Subject: [PATCH 12/36] Update media_player.onkyo.markdown (#2942) --- source/_components/media_player.onkyo.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/media_player.onkyo.markdown b/source/_components/media_player.onkyo.markdown index b8ba67fa4d7..f0fb1580963 100644 --- a/source/_components/media_player.onkyo.markdown +++ b/source/_components/media_player.onkyo.markdown @@ -14,7 +14,7 @@ ha_iot_class: "Local Polling" --- -The `onkyo` platform allows you to control a [Onkyo receiver](http://www.onkyo.com/) from Home Assistant. +The `onkyo` platform allows you to control a [Onkyo receiver](http://www.onkyo.com/) from Home Assistant. Please be aware that you need to enable "Network Standby" for this component to work in your Hardware. To add an Onkyo receiver to your installation, add the following to your `configuration.yaml` file: From e97d072ec65116fabd388829964cda12eb6c2cac Mon Sep 17 00:00:00 2001 From: Johan Bloemberg Date: Thu, 6 Jul 2017 16:01:49 +0200 Subject: [PATCH 13/36] add device arguments for group commands (#2732) * add device arguments for group commands * Correct spelling. --- source/_components/light.rflink.markdown | 10 ++++++---- source/_components/sensor.rflink.markdown | 2 +- source/_components/switch.rflink.markdown | 9 ++++++--- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/source/_components/light.rflink.markdown b/source/_components/light.rflink.markdown index 705d7073c66..4b24c6c1f84 100644 --- a/source/_components/light.rflink.markdown +++ b/source/_components/light.rflink.markdown @@ -49,18 +49,20 @@ Device configuration variables: - **name** (*Optional*): Name for the device, defaults to Rflink ID. - **type** (*Optional*): Override automatically detected type of the light device, can be: switchable, dimmable, hybrid or toggle. See 'Light Types' below. (default: Switchable) -- **aliasses** (*Optional*): Alternative Rflink ID's this device is known by. +- **aliases** (*Optional*): Alternative Rflink ID's this device is known by. - **fire_event** (*Optional*): Fire an `button_pressed` event if this device is turned on or off (default: False). - **signal_repetitions** (*Optional*): Repeat every Rflink command this number of times (default: 1). - **fire_event_** (*Optional*): Set default `fire_event` for RFLink switch devices (see below). - **signal_repetitions** (*Optional*): Set default `signal_repetitions` for RFLink switch devices (see below). - +- **group** (*Optional*): Allow light to respond to group commands (ALLON/ALLOFF). (default: yes) +- **group_aliases** (*Optional*): `aliases` which only respond to group commands. +- **no_group_aliases** (*Optional*): `aliases` which do not respond to group commands. ### {% linkable_title Light state %} Initially the state of a light is unknown. When the light is turned on or off (via frontend or remote) the state is known and will be shown in the frontend. -Sometimes a light is controlled by multiple remotes, each remote has its own code programmed in the light. To allow tracking of the state when switched via other remotes add the corresponding remote codes as aliasses: +Sometimes a light is controlled by multiple remotes, each remote has its own code programmed in the light. To allow tracking of the state when switched via other remotes add the corresponding remote codes as aliases: ```yaml # Example configuration.yaml entry @@ -69,7 +71,7 @@ light: devices: newkaku_0000c6c2_1: name: Living room - aliasses: + aliases: - newkaku_000000001_2 - kaku_000001_a Ansluta_ce30_0: diff --git a/source/_components/sensor.rflink.markdown b/source/_components/sensor.rflink.markdown index c99e751de7c..38b529af807 100644 --- a/source/_components/sensor.rflink.markdown +++ b/source/_components/sensor.rflink.markdown @@ -44,7 +44,7 @@ Device configuration variables: - **name** (*Optional*): Name for the device, defaults to RFLink ID. - **sensor_type** (*Required*): Override automatically detected type of sensor. For list of values see below. - **unit_of_measurement** (*Optional*): Override automatically detected unit of sensor. -- **aliasses** (*Optional*): Alternative RFLink ID's this device is known by. +- **aliases** (*Optional*): Alternative RFLink ID's this device is known by. Sensor type values: diff --git a/source/_components/switch.rflink.markdown b/source/_components/switch.rflink.markdown index c4b24be8a93..fc7ab2b7a9f 100644 --- a/source/_components/switch.rflink.markdown +++ b/source/_components/switch.rflink.markdown @@ -49,15 +49,18 @@ Configuration variables: Device configuration variables: - **name** (*Optional*): Name for the device, defaults to RFLink ID. -- **aliasses** (*Optional*): Alternative RFLink ID's this device is known by. +- **aliases** (*Optional*): Alternative RFLink ID's this device is known by. - **fire_event** (*Optional*): Fire an `button_pressed` event if this device is turned on or off (default: False). - **signal_repetitions** (*Optional*): Repeat every RFLink command this number of times (default: 1) +- **group** (*Optional*): Allow switch to respond to group commands (ALLON/ALLOFF). (default: yes) +- **group_aliases** (*Optional*): `aliases` which only respond to group commands. +- **no_group_aliases** (*Optional*): `aliases` which do not respond to group commands. ### {% linkable_title Switch state %} Initially the state of a switch is unknown. When the switch is turned on or off (via frontend or wireless remote) the state is known and will be shown in the frontend. -Sometimes a switch is controlled by multiple wireless remotes, each remote has its own code programmed in the switch. To allow tracking of the state when switched via other remotes add the corresponding remote codes as aliasses: +Sometimes a switch is controlled by multiple wireless remotes, each remote has its own code programmed in the switch. To allow tracking of the state when switched via other remotes add the corresponding remote codes as aliases: ```yaml # Example configuration.yaml entry @@ -67,7 +70,7 @@ switch: newkaku_0000c6c2_1: name: Ceiling fan icon: mdi:fan - aliasses: + aliases: - newkaku_000000001_2 - kaku_000001_a ``` From 77144721d785f67cbfafa91cdb63ce2c0067572a Mon Sep 17 00:00:00 2001 From: clarkewd Date: Thu, 6 Jul 2017 15:11:54 -0400 Subject: [PATCH 14/36] Document allowing Pilight Binary Sensor to control reset_delay_sec through configuration (#2944) * Document allowing Pilight Binary Sensor to control reset_delay_sec through configuration * Minimize configuration sample --- .../binary_sensor.pilight.markdown | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/source/_components/binary_sensor.pilight.markdown b/source/_components/binary_sensor.pilight.markdown index 813ed0d22f8..a372098918f 100644 --- a/source/_components/binary_sensor.pilight.markdown +++ b/source/_components/binary_sensor.pilight.markdown @@ -20,18 +20,30 @@ Two type of pilight binary sensor configuration available. A normal sensor which # Example configuration.yml entry binary_sensor: - platform: pilight - name: 'Motion' variable: 'state' - payload: - unitcode: 371399 - payload_on: 'closed' - disarm_after_trigger: True <-- use this if you want trigger type behavior ``` Configuration variables: + - **variable** (*Required*): The variable name in the data stream that defines the sensor value. - **payload** (*Required*): Message payload identifiers. Only if all identifiers are matched the sensor value is set. - **name** (*Optional*): Name of the sensor. - **payload_on** (*Optional*): Variable `on` value. The component will recognize this as logical '1'. - **payload_off** (*Optional*): Variable `off` value. The component will recognize this as logical '0'. - **disarm_after_trigger:** (*Optional*): Configure sensor as trigger type. +- **reset_delay_sec** (*Optional*): Seconds before the sensor is disarmed if `disarm_after_trigger` is set to true. Default is 30 seconds. + +A full configuration example could look like this: + +```yaml +# Example configuration.yml entry +binary_sensor: + - platform: pilight + name: 'Motion' + variable: 'state' + payload: + unitcode: 371399 + payload_on: 'closed' + disarm_after_trigger: True + reset_delay_sec: 30 +``` From a71c0da7cc3880d2c072927ac7e9c66b58018c2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre=20St=C3=A5hl?= Date: Fri, 7 Jul 2017 06:26:01 +0200 Subject: [PATCH 15/36] Add documentation for OTP sensor (#2929) * Add documentation for OTP sensor * Fix review comments --- source/_components/sensor.otp.markdown | 46 ++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 source/_components/sensor.otp.markdown diff --git a/source/_components/sensor.otp.markdown b/source/_components/sensor.otp.markdown new file mode 100644 index 00000000000..9810cf0bc9f --- /dev/null +++ b/source/_components/sensor.otp.markdown @@ -0,0 +1,46 @@ +--- +layout: page +title: "OTP Sensor" +description: "Instructions how to add One-Time Password (OTP) sensors into Home Assistant." +date: 2017-07-04 07:00:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_category: Sensor +ha_iot_class: "Local Polling" +ha_release: 0.49 +--- + +The `otp` sensor generates One-Time Passwords according to [RFC6238](https://tools.ietf.org/html/rfc6238) that is compatible with most OTP generators available, including Google Authenticator. You can use this when building custom security solutions and want to use "rolling codes", that change every 30 seconds. + +To enable the OTP sensor, add the following lines to your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: otp + token: SHARED_SECRET_TOKEN +``` + +Configuration variables: + +- **name** (*Optional*): Name of the sensor to use in the frontend. Defaults to `OTP Sensor`. +- **token** (*Required*): The shared secret you use in your OTP generator (e.g. Google Authenticator on your phone) + +## Generating a token + +A simple way to generate a `token` for a new sensor is to run this snippet of python code in your Home Assistant virtual environment: + +```shell +$ pip install pyotp +$ python -c 'import pyotp; print("Token: " + pyotp.random_base32())' +Token: IHEDPEBEVA2WVHB7 +``` + +Copy and paste the token into your Home Assistant configuration and add it to your OTP generator. Verify that they generate the same code. + +

+It is vital that your system clock is correct both on your Home Assistant server and on your OTP generator device (e.g. your phone). If not, the generated codes will not match! Make sure NTP is running and syncing your time correctly before creating an issue. +

From a9ab1bd37be669d359e4b735375d2dafafdbcf88 Mon Sep 17 00:00:00 2001 From: mjj4791 Date: Fri, 7 Jul 2017 06:39:55 +0200 Subject: [PATCH 16/36] Update sensor.buienradar.markdown (#2911) * Update sensor.buienradar.markdown update buienradar sensor documentation for updated sensor code (reverse winddirection / windazimuth); update the definition of the unit of precipitation_forecast_total * Update sensor.buienradar.markdown * resolve conflict --- source/_components/sensor.buienradar.markdown | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/_components/sensor.buienradar.markdown b/source/_components/sensor.buienradar.markdown index 750a0ae7901..2bba6a25e68 100644 --- a/source/_components/sensor.buienradar.markdown +++ b/source/_components/sensor.buienradar.markdown @@ -15,7 +15,7 @@ ha_iot_class: "Cloud Polling" The `buienradar` platform uses [buienradar.nl](http://buienradar.nl/) as an source for current meteorological data for your location. The weather forecast is delivered by Buienradar, who provides a webservice that provides detailed weather information for users in The Netherlands. -The relevant weatherstation used will be automatically selected based on the location specified in the Home Assistant configuration (or in the buienradar weather/sensor component). +The relevant weatherstation used will be automatically selected based on the location specified in the Home Assistant configuration (or in the buienradar weather/sensor component). The selected weatherstation will provide all weather data, with the exception of the forecasted precipitaion. The forecasted precipitation data will be retrieved from buienradar using your actual gps-location (and not the location of the nearest weatherstation). To integrate `buienradar` with Home Assistant, add the following section to your `configuration.yaml` file: @@ -45,16 +45,16 @@ Configuration variables: - **groundtemperature**: The current ground temperature (in C). - **windspeed**: The wind speed in m/s. - **windforce**: The wind speed/force in Bft. - - **winddirection**: Where the wind is coming from in degrees, with true north at 0° and progressing clockwise. - - **windazimuth**: Where the wind is coming from: N (North),Z (south), NO (Noth-East), etc. + - **winddirection**: Where the wind is coming from: N (North),Z (south), NO (Noth-East), etc. + - **windazimuth**: Where the wind is coming from in degrees, with true north at 0° and progressing clockwise. - **pressure**: The sea-level air pressure in hPa. - **visibility**: Visibility in meters (m). - **windgust**: The windspeed of wind gusts (m/s). - **precipitation**: The amount of precipitation/rain in mm/h. - - **irradiance**: Sun intensity in Watt per square meter (W/m2). - **precipitation_forecast_average**: The average expected precipitation/rain in mm/h within the given timeframe. - - **precipitation_forecast_total**: The total expected precipitation/rain in mm/h within the given timeframe. - + - **precipitation_forecast_total**: The total expected precipitation/rain in mm within the given timeframe. The total expected rain in the configured timeframe will be equal to _precipitation_forecast_total_/_timeframe_ mm/min. So, with timeframe configured to 30 minutes and a value of 5, the expected rain is 5 mm in 30 minutes, which is the same as 10 mm/h. If timeframe is set to 90 minutes and a value of 5, the expected rain is 5 mm in 90 minutes, which is equal to 3.3 mm/h. + - **irradiance**: Sun intensity in Watt per square meter (W/m2). + Full configuration example where location is manually specified: ```yaml From dcaa29f35822069ee2337583e7ee6af5b126a31f Mon Sep 17 00:00:00 2001 From: Charles Blonde Date: Fri, 7 Jul 2017 07:28:04 +0200 Subject: [PATCH 17/36] Update Soundtouch documentation to add play URL and TTS services (#2943) --- .../media_player.soundtouch.markdown | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/source/_components/media_player.soundtouch.markdown b/source/_components/media_player.soundtouch.markdown index 897fa228399..fa2a550b024 100644 --- a/source/_components/media_player.soundtouch.markdown +++ b/source/_components/media_player.soundtouch.markdown @@ -52,7 +52,7 @@ Configuration variables: You can switch between one of your 6 pre-configured presets using ```media_player.play_media``` ```yaml -# Play media in configuration.yaml +# Play media preset - service: media_player.play_media data: entity_id: media_player.soundtouch_living_room @@ -60,6 +60,23 @@ You can switch between one of your 6 pre-configured presets using ```media_playe media_content_type: PLAYLIST ``` +You can also play HTTP (not HTTPS) URLs: + +```yaml +# Play media URL +- service: media_player.play_media + data: + entity_id: media_player.soundtouch_living_room + media_content_id: http://example.com/music.mp3 + media_content_type: MUSIC +``` + +### {% linkable_title Text-to-Speech services %} + +You can use TTS services like [Google Text-to-Speech](/components/tts.google/) or [Amazon Polly](/components/tts.amazon_polly) only if your Home Assistant is configured in HTTP and not HTTPS (current device limitation, a firmware upgrade is planned). + +A workaround if you want to publish your Home Assistant installation on Internet in SSL is to configure an HTTPS Web Server as a reverse proxy ([nginx](/docs/ecosystem/nginx/) for example) and let your Home Assistant configuration in HTTP on your local network. The Soundtouch devices will be available to access the TTS files in HTTP in local and your configuration will be in HTTPS on the Internet. + ### {% linkable_title Service `soundtouch_play_everywhere` %} Create a multi-room (zone) from a master and play same content on all other From de782ad079b34bfdc2221df1fabf104a67c7f3b7 Mon Sep 17 00:00:00 2001 From: Diogo Gomes Date: Fri, 7 Jul 2017 07:05:17 +0100 Subject: [PATCH 18/36] Upnp update (#2924) * Update to UPnP documentation In accordance to pull request https://github.com/home-assistant/home-assistant/pull/8067 * updated with new option * Improved thanks for the comments / review --- source/_components/upnp.markdown | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/source/_components/upnp.markdown b/source/_components/upnp.markdown index 68cd9354ebc..a4211cf660e 100644 --- a/source/_components/upnp.markdown +++ b/source/_components/upnp.markdown @@ -14,22 +14,22 @@ ha_release: 0.18 The `upnp` component enables you to collect network statistics from your router such as bytes in/out and packets in/out. This information is provided by the Internet Gateway Device (IGD) Protocol if enabled on your router. -The IGD can also automatically create port forwarding mappings on your router for Home Assistant. +The IGD automatically creates port forwarding mappings on your router for Home Assistant, exposing your installation to the internet. The mapping will never automatically expire. Upon stopping Home Assistant, the mapping will be removed from your router. Please note that UPnP or NAT-PMP needs to be enabled on your router for this component to work. To integrate this into Home Assistant, add the following section to your `configuration.yaml` file: ```yaml -# Example configuration.yaml entry +# Example configuration.yaml entry with custom external portal upnp: + external_port: 80 ``` -A port mapping will be created using the IP address and port that Home Assistant is running on. The mapping will never automatically expire. Upon stopping Home Assistant, the mapping will be removed from your router. +If you which to have the statistics without having port mapping done through IGD, add the option **port_mapping**. -If you which to have the statistics without having port mapping done through IGD, add the option: -```yaml -# Example configuration.yaml entry with port mapping disabled -upnp: - port_mapping: false -``` +Configuration variables: + +- **external_port** (*Optional*): Expose Home Assistant to the internet over this TCP port. Defaults to Home Assistant configured port. +- **port_mapping** (*Optional*): Disables port mapping maintains the network statistics sensors) +- **unit** (*Optional*): UPnP sensors unit. Valid units are 'Bytes', 'KBytes', 'MBytes' and 'GBytes'. From 995ccf66fcccf30415f48ae75b39080343ba1511 Mon Sep 17 00:00:00 2001 From: PhracturedBlue Date: Sat, 8 Jul 2017 01:59:44 -0700 Subject: [PATCH 19/36] Open/Close/Stop are now optional (#2933) * Open/Close/Stop are now optional * typo --- source/_components/cover.template.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/cover.template.markdown b/source/_components/cover.template.markdown index 49191221dd3..62c9806857b 100644 --- a/source/_components/cover.template.markdown +++ b/source/_components/cover.template.markdown @@ -36,9 +36,9 @@ cover: Configuration variables: - **covers** array (*Required*): List of your coverss. - - **open_cover** (*Required*): Defines an [action](/getting-started/automation/) to run when the cover is opened. - - **close_cover** (*Required*): Defines an [action](/getting-started/automation/) to run when the cover is closed. - - **stop_cover** (*Required*): Defines an [action](/getting-started/automation/) to run when the cover is stopped. + - **open_cover** (*Optional*): Defines an [action](/getting-started/automation/) to run when the cover is opened. If `open_cover` is specified, `close_cover` must also be specified. At least one of `open_cover` and `set_cover_position` must be specified. + - **close_cover** (*Optional*): Defines an [action](/getting-started/automation/) to run when the cover is closed. + - **stop_cover** (*Optional*): Defines an [action](/getting-started/automation/) to run when the cover is stopped. - **set_cover_position** (*Optional*): Defines an [action](/getting-started/automation/) to run when the cover is set to a specific value (between 0 and 100). - **set_cover_tilt_position** (*Optional*): Defines an [action](/getting-started/automation/) to run when the cover tilt is set to a specific value (between 0 and 100). - **friendly_name** (*Optional*): Name to use in the frontend. From 8d25d7ec2b6b9ff55a587d9b5840b0f3c2b67192 Mon Sep 17 00:00:00 2001 From: Simao Date: Sat, 8 Jul 2017 13:57:13 +0200 Subject: [PATCH 20/36] =?UTF-8?q?Added=20support=20for=20upload=20of=20rem?= =?UTF-8?q?ote=20or=20local=20files=20to=20slack,=20PR=20#8278=20=E2=80=A6?= =?UTF-8?q?=20(#2949)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Added support for upload of remote or local files to slack, PR #8278 in home-assistant * Update notify.slack.markdown --- source/_components/notify.slack.markdown | 42 ++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/source/_components/notify.slack.markdown b/source/_components/notify.slack.markdown index d319a37438c..88cee6a70e9 100644 --- a/source/_components/notify.slack.markdown +++ b/source/_components/notify.slack.markdown @@ -40,5 +40,47 @@ Configuration variables: - **username** (*Optional*): Setting username will allow Home Assistant to post to Slack using the username specified. By default not setting this will post to Slack using the user account or botname that you generated the api_key as. - **icon** (*Optional*): Use one of the Slack emoji's as an Icon for the supplied username. Slack uses the standard emoji sets used [here](http://www.webpagefx.com/tools/emoji-cheat-sheet/). +### {% linkable_title Slack service data %} + +The following attributes can be placed `data` for extended functionality. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `file` | yes | Groups the attributes for file upload. If present, either `url` or `path` have to be provided. +| `path ` | yes | Local path of file, photo etc to post to slack. Is placed inside `file`. +| `url` | yes | URL of file, photo etc to post to slack. Is placed inside `file`. +| `username` | yes | Username if the url requires authentication. Is placed inside `file`. +| `password` | yes | Password if the url requires authentication. Is placed inside `file`. +| `auth` | yes | If set to `digest` HTTP-Digest-Authentication is used. If missing HTTP-BASIC-Authentication is used. Is placed inside `file`. + +Example for posting file from URL +```json +{ + "message":"Message that will be added as a comment to the file.", + "title":"Title of the file.", + "data":{ + "file":{ + "url":"http://[url to file, photo, security camera etc]", + "username":"optional user, if necessary", + "password":"optional password, if necessary", + "auth":"digest" + } + } +} +``` +Example for posting file from local path +```json +{ + "message":"Message that will be added as a comment to the file.", + "title":"Title of the file.", + "data":{ + "file":{ + "path":"/path/to/file.ext" + } + } +} +``` +Please note that `path` is validated against the `whitelist_external_dirs` in the `configuration.yaml`. + To use notifications, please see the [getting started with automation page](/getting-started/automation/). From e0e5ee129a635cecf757c48cbef174609bebcd91 Mon Sep 17 00:00:00 2001 From: Julius Mittenzwei Date: Mon, 10 Jul 2017 11:10:15 +0200 Subject: [PATCH 21/36] documentation for velux component (#2958) * documentation for velux component * documentation for velux component - fixed problem * Fix indent --- source/_components/velux.markdown | 30 +++++++++++++++++++++++ source/images/supported_brands/velux.png | Bin 0 -> 1018 bytes 2 files changed, 30 insertions(+) create mode 100644 source/_components/velux.markdown create mode 100644 source/images/supported_brands/velux.png diff --git a/source/_components/velux.markdown b/source/_components/velux.markdown new file mode 100644 index 00000000000..f73ddfab26b --- /dev/null +++ b/source/_components/velux.markdown @@ -0,0 +1,30 @@ +--- +layout: page +title: "Velux" +description: "Instructions on how to integrate Velux KLF 200 component with Home Assistant." +date: 2017-07-09 12:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: velux.png +ha_category: Hub +ha_release: 0.49 +ha_iot_class: "Local Polling" +--- + +[Velux](http://www.velux.com) integration for Home Assistant allows you to connect to a Velux KLF 200 interface, to control [io-homecontrol](http://www.io-homecontrol.com) devices like windows and blinds. The module allows you to start scenes configured within KLF 200. + +A `velux` section must be present in the `configuration.yaml` file and contain the following options as required: + +```yaml +# Example configuration.yaml entry +velux: + host: "192.168.1.23" + password: "velux123" +``` + +Configuration variables: + +- **host** (*Required*): The IP address or hostname of the KLF 200 to use. +- **password** (*Required*): The password of the KLF 200 interface. diff --git a/source/images/supported_brands/velux.png b/source/images/supported_brands/velux.png new file mode 100644 index 0000000000000000000000000000000000000000..fd5a1fa183b95d8d896d5dde4b8b4b26611c6ee7 GIT binary patch literal 1018 zcmV04fMn5U2n;fDQr`|WRW30&%V)Q{IPPZx2v}+1$v9Z zurvHI3XFYY-(c(;`vzm**f$va#=c<(?9XP!Vo}?;>kv1HKcudW#~U85EfZgRI9!_1 zG4jCpmja%X@+}toraT6TzeYi0yuTM;U*!RxFE7RZe%bP{NNIz?LSQnfFq_X;2Ggm$ zJ08o242Llrj>TO8Z6F%YPw6t7#S9pT0QUZFzrQwWj=7S^YO3z?hAaL4 z>h$@!Bawc7zKnDa(&^>p^7#IKZPeO$JG%e$w05ee+wpPC{{IDR!l}SyQVa%Vz=cux z@X&PB$?QKqRs?(9DKF6^1l9&{bhK<7w*(C5_Euh;PRqdeKpU>EqzxWoqSTk3$ywKl zPZ;k6yML!`$qrv3B(5d6xhYA6&2aWd1PV5A4>ov?j+~yJmK^3+oMKwJhgQlCl|Tx_ znn*92TCP7HM4=e+^>rCWFowe*9p~YUAJzL2@d;%|r|8ZUnp#`je1%+r(Wo?r`n$U_ zOtHa#;nZo&zNYo?utIjUlRATNn7aHImhK|C0n(TmoT}~(*SbP{T*!B|+R-T#J<)&! zUx0=#amm)r0N0cxG-O}IHO}O_!<^nob|`Fmy;W48~?BAJ1mH^Qm@+(Ln3WaYVogxQip3jT3vr_%5az^uAHeLB_QFcgHgo$e$ zXZK|_v_%kJq2@sS!GSCv@r{_fXuX@e{g|2cNa*6o^XEI<|+O>a1ZkB?gWa0@pbezP|NeiL{!%IQ_PA1=%y26g-A znLErW;?vGDp8!nUtz%GBDZh){UlujjO_SuWf%J&f#P?j?-fG^y><^Ip%OVBr_jhXS zlMga{#=fy{ oF!qgogRyVy8;t$#;-3Hm0AaBA_;0=5p#T5?07*qoM6N<$f=FHNiU0rr literal 0 HcmV?d00001 From aed2c7603bb64dbb269d36233efdb421af468528 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 10 Jul 2017 11:14:28 +0200 Subject: [PATCH 22/36] Add VELUX scene docs --- source/_components/scene.velux.markdown | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 source/_components/scene.velux.markdown diff --git a/source/_components/scene.velux.markdown b/source/_components/scene.velux.markdown new file mode 100644 index 00000000000..e94928d889a --- /dev/null +++ b/source/_components/scene.velux.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "Velux Scene" +description: "Instructions on how to integrate Velux Scene with Home Assistant." +date: 2017-07-09 12:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: velux.png +ha_category: Scene +ha_release: 0.49 +ha_iot_class: "Local Polling" +--- + + +The `velux` scene platform allows you to control your [VELUX](http://www.velux.com/) windows. + +The requirement is that you have setup the [VELUX](/components/velux/) component. From c7d4a93d9d0d92adb05301c08536caeaabcce7bd Mon Sep 17 00:00:00 2001 From: Jonatan Castro Date: Mon, 10 Jul 2017 11:58:32 +0200 Subject: [PATCH 23/36] Create switch.xiaomi_vacuum (#2771) * Create switch.xiaomi_vacuum First revision * Update switch.xiaomi_vacuum Tweaks in the copy * Update switch.xiaomi_vacuum * Update switch.xiaomi_vacuum * Update switch.xiaomi_vacuum * Update switch.xiaomi_vacuum Tweaks on info table * Changed filename to .markdown Changed filename to .markdown * Update switch.xiaomi_vacuum.markdown * Update switch.xiaomi_vacuum.markdown Update, collaboration from other users * Update switch.xiaomi_vacuum.markdown Added WIP token instructions based on some reading * Fix spelling and formatting * Update switch.xiaomi_vacuum.markdown Spelling --- .../_components/switch.xiaomi_vacuum.markdown | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 source/_components/switch.xiaomi_vacuum.markdown diff --git a/source/_components/switch.xiaomi_vacuum.markdown b/source/_components/switch.xiaomi_vacuum.markdown new file mode 100644 index 00000000000..151a1ff47e3 --- /dev/null +++ b/source/_components/switch.xiaomi_vacuum.markdown @@ -0,0 +1,79 @@ +--- +layout: page +title: "Xiaomi Mi Robot Vacuum" +description: "Instructions how to integrate your Xiaomi Mi Robot Vacuum within Home Assistant." +date: 2017-05-05 18:11 +sidebar: true +comments: false +sharing: true +footer: true +logo: xiaomi_vacuum.png +ha_category: Switch +ha_release: 0.48 +--- + +The `xiaomi_vacuum`switch platform allows you to control the state of your [Xiaomi Mi Robot Vacuum](http://www.mi.com/roomrobot/). +Current supported features are `start` and `stop` (goes to dock). + +{% linkable_title Getting started %} + +Follow the pairing process using your phone and Mi-Home app. From here you will be able to retrieve the token from a SQLite file inside your phone. + +

+If your Home Assistant installation is running in a [Virtualenv](/docs/installation/virtualenv/#upgrading-home-assistant), make sure you activate it by running the commands below.

+ +```bash +$ sudo su -s /bin/bash homeassistant +$ source /srv/homeassistant/bin/activate +``` + +In order to fetch the token follow these instructions depending on your mobile phone platform. + +### Windows and Android +1. Configure the robot with the Mi-Home app. +2. Enable developer mode and USB debugging on the Android phone and plug it into the computer. +3. Get ADB tool for Windows : https://developer.android.com/studio/releases/platform-tools.html +4. Create a backup of the application com.xiaomi.smarthome: +```bash +.\adb backup -noapk com.xiaomi.smarthome -f backup.ab +``` +5. If you have this message : "More than one device or emulator", use this command to list all devices: +```bash +.\adb devices +``` +and execute this command: +```bash +.\adb -s DEVICEID backup -noapk com.xiaomi.smarthome -f backup.ab # (with DEVICEID the device id from the previous command) +``` +6. On the phone, you must confirm the backup. DO NOT enter any password and press button to make the backup. +7. Get ADB Backup Extractor : https://sourceforge.net/projects/adbextractor/ +8. Extract All files from the backup: +```bash +java.exe -jar ../android-backup-extractor/abe.jar unpack backup.ab backup.tar "" +``` +9. Unzip the ".tar" file. +10. Open the sqlite DB miio2.db with a tool like SQLite Manager extension for FireFox. +11. Get token from "devicerecord" table. + + +### macOS and iOS +1. Setup iOS device with the Mi-Home app. +2. Create an unencrypted backup of the device using iTunes. +3. Install iBackup Viewer from here: http://www.imactools.com/iphonebackupviewer/ +4. Extract this file /raw data/com.xiami.mihome/_mihome.sqlite to your computer +5. Open the file extracted using notepad. You will then see the list of all the device in your account with their token. + +{% linkable_title Configuration %} + +```yaml +# Example configuration.yaml entry +- platform: xiaomi_vacuum + name: 'name of the robot' + host: 192.168.1.2 + token: your-token-here +``` + +Configuration variables: +- **name** (*Optional*): The name of your robot +- **host** (*Required*): The IP of your robot +- **token** (*Required*): The token of your robot. Go to Getting started section to read more about how to get it From 8f4a9e4b36e5539839035c2ecf66c4b3ac369b0e Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 10 Jul 2017 23:18:06 +0200 Subject: [PATCH 24/36] Lat/long are now optional (#2960) --- source/_components/sensor.uber.markdown | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/source/_components/sensor.uber.markdown b/source/_components/sensor.uber.markdown index b742b849358..b0bb558d3c0 100644 --- a/source/_components/sensor.uber.markdown +++ b/source/_components/sensor.uber.markdown @@ -14,8 +14,7 @@ ha_release: 0.16 --- -The `uber` sensor will give you time and price estimates for all available [Uber](https://uber.com) products at the given `start_latitude` and `start_longitude`.The `ATTRIBUTES` are used to provide extra information about products, such as estimated trip duration, distance and vehicle capacity. By default, 2 sensors will be created for each product at the given `start` location, one for pickup time and one for current price. The sensor is powered by the official Uber [API](https://developer.uber.com/). - +The `uber` sensor will give you time and price estimates for all available [Uber](https://uber.com) products at the given location. The `ATTRIBUTES` are used to provide extra information about products, such as estimated trip duration, distance and vehicle capacity. By default, 2 sensors will be created for each product at the given `start` location, one for pickup time and one for current price. The sensor is powered by the official Uber [API](https://developer.uber.com/). You must create an application [here](https://developer.uber.com/dashboard/create) to obtain a `server_token`. @@ -26,15 +25,13 @@ To enable this sensor, add the following lines to your `configuration.yaml` file sensor: - platform: uber server_token: 'BeAPPTDsWZSHLf7fd9OWjZkIezweRw18Q8NltY27' - start_latitude: 37.8116380 - start_longitude: -122.2648050 ``` Configuration variables: - **server_token** (*Required*): A server token obtained from [developer.uber.com](https://developer.uber.com) after [creating an app](https://developer.uber.com/dashboard/create). -- **start_latitude** (*Required*): The starting latitude for a trip. -- **start_longitude** (*Required*): The starting longitude for a trip. +- **start_latitude** (*Optional*): The starting latitude for a trip. Defaults to the latitude in your your `configuration.yaml` file. +- **start_longitude** (*Optional*): The starting longitude for a trip. Defaults to the longitude in your `configuration.yaml` file. - **end_latitude** (*Optional*): The ending latitude for a trip. While `end_latitude` is optional, it is strongly recommended to provide an `end_latitude`/`end_longitude` when possible as you will get more accurate price and time estimates. - **end_longitude** (*Optional*): The ending longitude for a trip. While `end_longitude` is optional, it is strongly recommended to provide an `end_latitude`/`end_longitude` when possible as you will get more accurate price and time estimates. - **product_ids** (*Options*): A list of Uber product UUIDs. If provided, sensors will only be created for the given product IDs. Please note that product IDs are region and some times even more specific geographies based. The easiest way to find a UUID is to click on a sensor in the Home Assistant frontend and look for "Product ID" in the attributes. From 88ba25a12b7b589f59cb06280530192329d228b9 Mon Sep 17 00:00:00 2001 From: Russell Cloran Date: Tue, 11 Jul 2017 01:29:26 -0700 Subject: [PATCH 25/36] Add prometheus component (#2913) * Add prometheus component * Update 'ha_release' --- source/_components/prometheus.markdown | 38 ++++++++++++++++++ source/images/supported_brands/prometheus.png | Bin 0 -> 2921 bytes 2 files changed, 38 insertions(+) create mode 100644 source/_components/prometheus.markdown create mode 100644 source/images/supported_brands/prometheus.png diff --git a/source/_components/prometheus.markdown b/source/_components/prometheus.markdown new file mode 100644 index 00000000000..e0f701bcf37 --- /dev/null +++ b/source/_components/prometheus.markdown @@ -0,0 +1,38 @@ +--- +layout: page +title: "Prometheus" +description: "Record events in Prometheus." +date: 2017-06-25 08:00 +sidebar: true +comments: false +sharing: true +logo: prometheus.png +footer: true +ha_category: "History" +ha_release: 0.49 +--- + +The `prometheus` component exposes metrics in a format which [Prometheus](https://prometheus.io/) can read. + +To use the `prometheus` component in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +prometheus: +``` + +The Prometheus component has no configuration variables. + +You can then configure Prometheus to fetch metrics from Home Assistant by adding to its `scrape_configs` configuration. + +```yaml +# Example Prometheus scrape_configs entry + - job_name: 'hass' + scrape_interval: 60s + metrics_path: /api/prometheus + params: + api_password: ['PASSWORD'] + scheme: https + static_configs: + - targets: ['HOSTNAME:8123'] +``` diff --git a/source/images/supported_brands/prometheus.png b/source/images/supported_brands/prometheus.png new file mode 100644 index 0000000000000000000000000000000000000000..2ef61724233b836669875513f823cc78873c77fe GIT binary patch literal 2921 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 Tdpd$V00000NkvXXu0mjf>~L#4 literal 0 HcmV?d00001 From 843a89816b5c29122abb797579442a9e47de6b3b Mon Sep 17 00:00:00 2001 From: Vlad Korniev Date: Tue, 11 Jul 2017 14:00:17 -0700 Subject: [PATCH 26/36] Vizio SmartCat TV support (#2906) * Vizio SmartCat TV support * Minor style changes --- .../_components/media_player.vizio.markdown | 93 ++++++++++++++++++ .../supported_brands/vizio-smartcast.png | Bin 0 -> 35296 bytes 2 files changed, 93 insertions(+) create mode 100644 source/_components/media_player.vizio.markdown create mode 100644 source/images/supported_brands/vizio-smartcast.png diff --git a/source/_components/media_player.vizio.markdown b/source/_components/media_player.vizio.markdown new file mode 100644 index 00000000000..b5bbaec40d6 --- /dev/null +++ b/source/_components/media_player.vizio.markdown @@ -0,0 +1,93 @@ +--- +layout: page +title: "Vizio SmartCast TV" +description: "Instructions how to integrate Vizio SmartCast TV into Home Assistant." +date: 2017-07-10 19:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: vizio-smartcast.png +ha_category: Media Player +featured: true +ha_release: 0.49 +ha_iot_class: "Local Polling" +--- + +The `vizio` component will allow you to control [SmartCast](https://www.vizio.com/smartcast-app) compatible TVs (2016+ models). + +## Pairing + +Before adding TV to Home Assistant you'll need to pair it manually, to do so follow these steps: + +Install the command-line tool using pip (you can choose to download it manually): + +```bash +$ pip3 install git+https://github.com/vkorn/pyvizio.git@master +$ pip3 install -I . +``` + +Make sure that your TV is on, as sometimes it won't show PIN code if it wasn't on during pairing initialization. +If you don't know IP address of your TV run following command: + +```bash +$ pyvizio --ip=0 --auth=0 discover +``` + +Initiate pairing: + +```bash +$ pyvizio --ip={ip} pair +``` + +Initiation will show you two different values: + +| Value | Description | +|:----------------|:---------------------| +| Challenge type | Usually it's should be `"1"`, if it's not the case for you, use additional parameter `--ch_type=your_type` in the next step | +| Challenge token | Token required to finalize pairing in the next step | + +Finally, at this point PIN code should be displayed at the top of your TV. With all these values, you can now finish pairing: + +```bash +$ pyvizio --ip={ip} pair_finish --token={challenge_token} --pin={tv_pin} +``` + +You will need authentication token returned by this command to configure Home Assistant. + +## Configuration + +To add your Vizio TV to your installation, add following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +media_player: + - platform: vizio + host: IP_ADDRESS + access_token: AUTH_TOKEN +``` + +Configuration variables: + +- **host** (*Required*): IP address of your TV. +- **access_token** (*Required*): Authentication token you've received in last step of the pairing process. + +## Notes and limitations + +### Turning TV on + +If you do have `Power Mode` of your TV configured to be `Eco Mode`, turning device ON won't work. + +### Changing tracks + +Changing tracks works like channels switching. If you have source other than regular TV it might end do nothing. + +### Sources + +Source list shows all external devices connected to the TV through HDMI plus list of internal devices (TV mode, Chrome Cast, etc.). + +

+Vizio SmartCast service is accessible through HTTPS with self-signed certificate. It means that if you have low LOGLEVEL in your Home Assistant configuration, you'll see a lot of warnings like this `InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised.` + +As an option, you could proxy all calls for example through NGINX. +

diff --git a/source/images/supported_brands/vizio-smartcast.png b/source/images/supported_brands/vizio-smartcast.png new file mode 100644 index 0000000000000000000000000000000000000000..a4b78ca45bf9157bd86f04c9441d970972642cc4 GIT binary patch literal 35296 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 literal 0 HcmV?d00001 From 3f7e2d7c58f9567d7642074d3df31aac644181a8 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 11 Jul 2017 23:11:37 +0200 Subject: [PATCH 27/36] Update supported sensors --- source/_components/sensor.arwn.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.arwn.markdown b/source/_components/sensor.arwn.markdown index f7d76b8b6f8..fb66cc50bd0 100644 --- a/source/_components/sensor.arwn.markdown +++ b/source/_components/sensor.arwn.markdown @@ -22,4 +22,4 @@ sensor: - platform: arwn ``` -Currently all temperatures, barometers, and wind sensors will be displayed. Support for rain gauge sensors will happen in the future. +Currently all temperatures, barometers, moisture, rain, and wind sensors will be displayed. From 1064e0e23c27c6a80df987aa244bc8f7d1e7c455 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 12 Jul 2017 10:38:20 +0200 Subject: [PATCH 28/36] Initial media_extractor docs (#2963) --- source/_components/media_extractor.markdown | 37 +++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 source/_components/media_extractor.markdown diff --git a/source/_components/media_extractor.markdown b/source/_components/media_extractor.markdown new file mode 100644 index 00000000000..f89d02a4808 --- /dev/null +++ b/source/_components/media_extractor.markdown @@ -0,0 +1,37 @@ +--- +layout: page +title: "Media Extractor" +description: "Instructions how to integrate the Media Extrator into Home Assistant." +date: 2017-07-12 07:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_category: Media Player +ha_release: 0.49 +--- + + +The `media_extractor` component gets an stream URL and send it to a media player entity. + +To use the media extrator service in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +media_extractor: +``` + +### {% linkable_title Use the service %} + +Go the the "Developer Tools", then to "Call Service", and choose `media_extractor/play_media` from the list of available services. Fill the "Service Data" field as shown in the example below and hit "CALL SERVICE". + +This will download the file from the given URL. + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | no | Name(s) of entities to seek media on, eg. `media_player.living_room_chromecast` +| `media_content_id` | no | The ID of the content to play. Platform dependent. +| `media_content_type` | no | The type of the content to play. Must be one of MUSIC, TVSHOW, VIDEO, EPISODE, CHANNEL or PLAYLIST MUSIC. + + From d199b4e3f2dcd2a458bbf81ba99e130719c06a50 Mon Sep 17 00:00:00 2001 From: Aliaksandr Date: Wed, 12 Jul 2017 17:24:35 +0300 Subject: [PATCH 29/36] Mark entity_id attribute of media_extractor as optional (#2965) --- source/_components/media_extractor.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/media_extractor.markdown b/source/_components/media_extractor.markdown index f89d02a4808..812a00f2e17 100644 --- a/source/_components/media_extractor.markdown +++ b/source/_components/media_extractor.markdown @@ -30,7 +30,7 @@ This will download the file from the given URL. | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | -| `entity_id` | no | Name(s) of entities to seek media on, eg. `media_player.living_room_chromecast` +| `entity_id` | yes | Name(s) of entities to seek media on, eg. `media_player.living_room_chromecast`. Defaults to all. | `media_content_id` | no | The ID of the content to play. Platform dependent. | `media_content_type` | no | The type of the content to play. Must be one of MUSIC, TVSHOW, VIDEO, EPISODE, CHANNEL or PLAYLIST MUSIC. From 372bb97a4530fe6fd20eed98f96e693f62a1c633 Mon Sep 17 00:00:00 2001 From: Andrey Date: Thu, 13 Jul 2017 04:08:38 +0300 Subject: [PATCH 30/36] Add themes documentation (#2966) --- source/_components/frontend.markdown | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/source/_components/frontend.markdown b/source/_components/frontend.markdown index 47027c322bf..785e59c7f8d 100644 --- a/source/_components/frontend.markdown +++ b/source/_components/frontend.markdown @@ -17,3 +17,22 @@ This offers the official frontend to control Home Assistant. # Example configuration.yaml entry frontend: ``` + +#### Themes +Starting with version 0.49 you can define themes: + +Example: +```yaml +frontend: + themes: + happy: + primary-color: pink + sad: + primary-color: blue +``` + +The example above defined two themes named `happy` and `sad`. For each theme you can set values for CSS variables. For a partial list of variables used by the main frontend see [ha-style.html](https://github.com/home-assistant/home-assistant-polymer/blob/master/src/resources/ha-style.html) + +There are 2 themes-related services: + - `frontend.reload_themes` - reloads theme configuration from yaml. + - `frontend.set_theme(name)` - sets backend-preferred theme name. From a3987362cd3711e371ab9311a344253f5628e7dc Mon Sep 17 00:00:00 2001 From: Anders Melchiorsen Date: Thu, 13 Jul 2017 10:54:33 +0200 Subject: [PATCH 31/36] LIFX: make broadcast address configurable (#2967) --- source/_components/light.lifx.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/light.lifx.markdown b/source/_components/light.lifx.markdown index f44445a186d..a8d5d3bb1ba 100644 --- a/source/_components/light.lifx.markdown +++ b/source/_components/light.lifx.markdown @@ -21,11 +21,11 @@ _Please note, the `lifx` platform does not support Windows. The `lifx_legacy` pl # Example configuration.yaml entry light: - platform: lifx - server: 192.168.1.10 ``` Configuration variables: -- **server** (*Optional*): Your server address. Only needed if using more than one network interface. Omit if you are unsure. +- **broadcast** (*Optional*): The broadcast address for discovering lights. Only needed if using more than one network interface. Omit if you are unsure. +- **server** (*Optional*): Your server address. Will listen on all interfaces if omitted. Omit if you are unsure. ## {% linkable_title Set state %} From cd2cb9b1750175ee3be2e8800733314b5581cc12 Mon Sep 17 00:00:00 2001 From: Dougal Matthews Date: Fri, 14 Jul 2017 04:53:37 +0200 Subject: [PATCH 32/36] 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 33/36] 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 34/36] 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 35/36] 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 36/36] 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