From 3012fd02755cb31a2ee677506b75460e36201f76 Mon Sep 17 00:00:00 2001 From: Guy Khmelnitsky Date: Wed, 25 Jul 2018 18:22:23 +0300 Subject: [PATCH 001/114] Update the instructions for location of dropbox_uplodaer.sh Add instructions to customize the location of dropbox_uploader.sh --- source/_docs/ecosystem/backup/backup_dropbox.markdown | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/source/_docs/ecosystem/backup/backup_dropbox.markdown b/source/_docs/ecosystem/backup/backup_dropbox.markdown index 6baa2cbc9a0..20d9e3f2d46 100644 --- a/source/_docs/ecosystem/backup/backup_dropbox.markdown +++ b/source/_docs/ecosystem/backup/backup_dropbox.markdown @@ -37,6 +37,16 @@ Follow the instructions you see on your screen. Go to the folder you have placed `dropbox.py`. +Option A: + Copy file `dropbox_uploader.sh` to : `.homeassistant/extraconfig/shell_code/` (so the full path would be similar to: `/home/homeassistant/.homeassistant/extraconfig/shell_code/dropbox_uploader.sh`) +Option B: + Edit `dropbox.py`: + Change the following line: + `uploader = "/home/homeassistant/.homeassistant/extraconfig/shell_code/dropbox_uploader.sh"` + to where you placed your file: (for example): + `uploader = "/home/homeassistant/MyFolder/dropbox_uploader.sh"` + + ```bash $ python dropbox.py ``` From bce9ac397d215aba73a606d34c55e0e064d18118 Mon Sep 17 00:00:00 2001 From: Jacob Mansfield Date: Wed, 12 Sep 2018 13:47:07 +0100 Subject: [PATCH 002/114] Add McLighting link Add another (more up-to-date) ESP8266 firmware for the MQTT JSON light component --- source/_components/light.mqtt_json.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_components/light.mqtt_json.markdown b/source/_components/light.mqtt_json.markdown index 6e70c8be891..5996dfbca70 100644 --- a/source/_components/light.mqtt_json.markdown +++ b/source/_components/light.mqtt_json.markdown @@ -258,8 +258,10 @@ Home Assistant expects the hue values to be in the range 0 to 360 and the satura - There is also another implementation forked from the above repo, it supports all the same features but is made for addressable LED strips using FastLED on a NodeMCU V3 it can be found [here](https://github.com/JammyDodger231/nodemcu-mqtt-rgb-led). +- [McLighting](https://github.com/toblum/McLighting) is another ESP8266 firmware for WS2812 addressable LEDs. + - [MQTT JSON Light](https://github.com/mertenats/Open-Home-Automation/tree/master/ha_mqtt_rgbw_light_with_discovery) is another implementation for ESP8266 including [MQTT discovery](/docs/mqtt/discovery/). - [esphomelib](https://github.com/OttoWinter/esphomelib) is a library for ESP8266 and ESP32 boards that has many of Home Assistant's MQTT features (like [discovery](/docs/mqtt/discovery/)) pre-implemented and provides high-level abstractions for components such as lights or sensors. -- [AiLight](https://github.com/stelgenhof/AiLight) is a custom firmware for the Ai-Thinker (and equivalent) RGBW WiFi light bulbs that has an ESP8266 onboard and controlled by the MY9291 LED driver. It implements the [MQTT JSON light](/components/light.mqtt_json/) platform and supports ON/OFF, RGBW colours, brightness, colour temperature, flashing and transitions. Also it includes [MQTT Auto Discovery](/docs/mqtt/discovery/)) and the MQTT Last Will and Testament is enabled as well. \ No newline at end of file +- [AiLight](https://github.com/stelgenhof/AiLight) is a custom firmware for the Ai-Thinker (and equivalent) RGBW WiFi light bulbs that has an ESP8266 onboard and controlled by the MY9291 LED driver. It implements the [MQTT JSON light](/components/light.mqtt_json/) platform and supports ON/OFF, RGBW colours, brightness, colour temperature, flashing and transitions. Also it includes [MQTT Auto Discovery](/docs/mqtt/discovery/)) and the MQTT Last Will and Testament is enabled as well. From b0d38003388ceb7586e4252e4b74230970b5ffb2 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 28 Sep 2018 17:01:22 +0200 Subject: [PATCH 003/114] Shout out to Kane610 --- source/_posts/2018-10-01-release-79.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2018-10-01-release-79.markdown b/source/_posts/2018-10-01-release-79.markdown index 2d98bfdf2bb..6676be9507b 100644 --- a/source/_posts/2018-10-01-release-79.markdown +++ b/source/_posts/2018-10-01-release-79.markdown @@ -17,7 +17,7 @@ In case you missed it two weeks ago, check [our plans for the future](/blog/2018 -It's time for another great release and we're introducing a brand new feature: device registry. This allows integrations to tell Home Assistant not only about entities, but also which devices the entities represent. It also allows integrations to tell Home Assistant how a device is connected to Home Assistant. For example, a Hue light bulb is connected to Home Assistant via the Hue hub. +It's time for another great release and we're introducing a brand new feature: device registry. Thanks to [@Kane610] for driving this effort. This allows integrations to tell Home Assistant not only about entities, but also which devices the entities represent. It also allows integrations to tell Home Assistant how a device is connected to Home Assistant. For example, a Hue light bulb is connected to Home Assistant via the Hue hub.

Screenshot showing several configured integrations From 5d7f64913287c3fc3dc64c14a3bc471924f318ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=B8yer=20Iversen?= Date: Fri, 28 Sep 2018 21:40:26 +0200 Subject: [PATCH 004/114] Add ha_qa_scale: silver to tibber sensor (#6371) --- source/_components/sensor.tibber.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/sensor.tibber.markdown b/source/_components/sensor.tibber.markdown index 7e022d81368..05b335f7ff7 100644 --- a/source/_components/sensor.tibber.markdown +++ b/source/_components/sensor.tibber.markdown @@ -10,6 +10,7 @@ footer: true logo: tibber.png ha_category: Energy ha_release: 0.55 +ha_qa_scale: silver ha_iot_class: "Cloud Polling" --- From 2ed8cb8a00ea66f39d141b74af0331a92ec90e1a Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 28 Sep 2018 21:43:35 +0200 Subject: [PATCH 005/114] Add platinum level to Hue integration (#6369) * Add platinum level to Hue integration * Update hue.markdown --- source/_components/hue.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/hue.markdown b/source/_components/hue.markdown index a171a29dc69..c4b2cc37b6c 100644 --- a/source/_components/hue.markdown +++ b/source/_components/hue.markdown @@ -10,6 +10,7 @@ footer: true logo: philips_hue.png ha_category: Hub ha_iot_class: "Local Polling" +ha_qa_scale: platinum featured: true ha_release: "0.60" ha_qa_scale: platinum From ec80bab0b1bac4af183d46e942d4387f124b7be0 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 28 Sep 2018 22:02:28 +0200 Subject: [PATCH 006/114] Update for 0.79 --- source/developers/credits.markdown | 112 +++++++++++++++-------------- 1 file changed, 58 insertions(+), 54 deletions(-) diff --git a/source/developers/credits.markdown b/source/developers/credits.markdown index 5de3f71a6d2..c2e7f95aa35 100644 --- a/source/developers/credits.markdown +++ b/source/developers/credits.markdown @@ -2,7 +2,7 @@ layout: page title: "Credits" description: "Credits for the developers who contributed to Home Assistant." -date: 2018-09-21 19:49:45 +0000 +date: 2018-09-28 20:02:13 +0000 sidebar: true comments: false sharing: true @@ -13,7 +13,7 @@ This page contains a list of people who have contributed in one way or another t ### {% linkable_title Author %} -- [Paulus Schoutsen (@balloob)](https://github.com/balloob "7690 total commits to the home-assistant organization, 4314 commits to home-assistant, 1588 commits to home-assistant.io, 1067 commits to home-assistant-polymer, 237 commits to home-assistant-js, 129 commits to developers.home-assistant, 127 commits to netdisco, 94 commits to home-assistant-js-websocket, 40 commits to hass-release, 17 commits to LabelBot, 15 commits to home-assistant-assets, 11 commits to hassio, 9 commits to hbmqtt-auth-home-assistant, 8 commits to example-custom-config, 7 commits to micropython-home-assistant, 6 commits to custom-panel-starter-kit-react, 4 commits to ui-schema, 3 commits to hassio-addons, 3 commits to hassio-build, 2 commits to issue-bot, 2 commits to home-assistant-iOS, 2 commits to hassio-addons-example, 2 commits to lambda-home-assistant-github, 1 commit to home-assistant-notebooks, 1 commit to warrant, 1 commit to architecture") +- [Paulus Schoutsen (@balloob)](https://github.com/balloob "7770 total commits to the home-assistant organization, 4347 commits to home-assistant, 1619 commits to home-assistant.io, 1080 commits to home-assistant-polymer, 237 commits to home-assistant-js, 132 commits to developers.home-assistant, 127 commits to netdisco, 94 commits to home-assistant-js-websocket, 40 commits to hass-release, 17 commits to LabelBot, 15 commits to home-assistant-assets, 11 commits to hassio, 9 commits to hbmqtt-auth-home-assistant, 8 commits to example-custom-config, 7 commits to micropython-home-assistant, 6 commits to custom-panel-starter-kit-react, 4 commits to ui-schema, 3 commits to hassio-addons, 3 commits to hassio-build, 2 commits to hassio-addons-example, 2 commits to issue-bot, 2 commits to home-assistant-iOS, 2 commits to lambda-home-assistant-github, 1 commit to warrant, 1 commit to home-assistant-notebooks, 1 commit to architecture") ### {% linkable_title Contributors %} @@ -23,11 +23,11 @@ This page contains a list of people who have contributed in one way or another t - [a-andre (@a-andre)](https://github.com/a-andre "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Aaron Bach (@bachya)](https://github.com/bachya "84 total commits to the home-assistant organization, 59 commits to home-assistant, 25 commits to home-assistant.io") - [Aaron Linville (@linville)](https://github.com/linville "2 total commits to the home-assistant organization, 2 commits to appdaemon") -- [Abílio Costa (@abmantis)](https://github.com/abmantis "26 total commits to the home-assistant organization, 15 commits to home-assistant, 7 commits to home-assistant.io, 2 commits to home-assistant-polymer, 1 commit to home-assistant-js-websocket, 1 commit to netdisco") +- [Abílio Costa (@abmantis)](https://github.com/abmantis "27 total commits to the home-assistant organization, 15 commits to home-assistant, 8 commits to home-assistant.io, 2 commits to home-assistant-polymer, 1 commit to home-assistant-js-websocket, 1 commit to netdisco") - [Adam Baxter (@voltagex)](https://github.com/voltagex "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Adam Cooper (@GenericStudent)](https://github.com/GenericStudent "11 total commits to the home-assistant organization, 8 commits to home-assistant, 3 commits to home-assistant.io") - [Adam Dullage (@Dullage)](https://github.com/Dullage "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") -- [Adam Mills (@armills)](https://github.com/armills "331 total commits to the home-assistant organization, 174 commits to home-assistant, 93 commits to home-assistant-polymer, 59 commits to home-assistant.io, 3 commits to home-assistant-js, 1 commit to homebridge-homeassistant, 1 commit to developers.home-assistant") +- [Adam Mills (@armills)](https://github.com/armills "332 total commits to the home-assistant organization, 174 commits to home-assistant, 93 commits to home-assistant-polymer, 60 commits to home-assistant.io, 3 commits to home-assistant-js, 1 commit to homebridge-homeassistant, 1 commit to developers.home-assistant") - [Adrian Popa (@mad-ady)](https://github.com/mad-ady "5 total commits to the home-assistant organization, 4 commits to appdaemon, 1 commit to home-assistant-polymer") - [Adrien Ball (@adrienball)](https://github.com/adrienball "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Adrien Brault (@adrienbrault)](https://github.com/adrienbrault "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -50,12 +50,12 @@ This page contains a list of people who have contributed in one way or another t - [Alexander Kratzer (@hexxter)](https://github.com/hexxter "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Alexandre Perrin (@kAworu)](https://github.com/kAworu "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Alexei Chetroi (@Adminiuga)](https://github.com/Adminiuga "12 total commits to the home-assistant organization, 11 commits to home-assistant, 1 commit to home-assistant-polymer") -- [Alexis Iglauer (@ax42)](https://github.com/ax42 "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") +- [Alexis Iglauer (@ax42)](https://github.com/ax42 "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") - [Alfie Day (@Azelphur)](https://github.com/Azelphur "12 total commits to the home-assistant organization, 12 commits to home-assistant") - [Aliaksandr (@minchik)](https://github.com/minchik "7 total commits to the home-assistant organization, 3 commits to home-assistant.io, 2 commits to appdaemon, 2 commits to home-assistant") - [Alok Saboo (@arsaboo)](https://github.com/arsaboo "148 total commits to the home-assistant organization, 83 commits to home-assistant.io, 53 commits to home-assistant, 7 commits to home-assistant-polymer, 3 commits to developers.home-assistant, 1 commit to pi-gen, 1 commit to hassio-addons") - [amorsillo (@AndrewMorsillo)](https://github.com/AndrewMorsillo "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Anders Melchiorsen (@amelchio)](https://github.com/amelchio "252 total commits to the home-assistant organization, 206 commits to home-assistant, 44 commits to home-assistant.io, 2 commits to home-assistant-polymer") +- [Anders Melchiorsen (@amelchio)](https://github.com/amelchio "258 total commits to the home-assistant organization, 212 commits to home-assistant, 44 commits to home-assistant.io, 2 commits to home-assistant-polymer") - [andig (@andig)](https://github.com/andig "2 total commits to the home-assistant organization, 2 commits to pi-gen") - [Andrea Campi (@andreacampi)](https://github.com/andreacampi "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Andreas Björshammar (@abjorshammar)](https://github.com/abjorshammar "2 total commits to the home-assistant organization, 2 commits to home-assistant") @@ -88,7 +88,7 @@ This page contains a list of people who have contributed in one way or another t - [arcsur (@arcsur)](https://github.com/arcsur "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Ardetus (@Ardetus)](https://github.com/Ardetus "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [arjenfvellinga (@arjenfvellinga)](https://github.com/arjenfvellinga "5 total commits to the home-assistant organization, 5 commits to home-assistant.io") -- [Arno (@aetjansen)](https://github.com/aetjansen "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") +- [Arno Jansen (@aetjansen)](https://github.com/aetjansen "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [ArrayLabs (@arraylabs)](https://github.com/arraylabs "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Artem (@ArtHome12)](https://github.com/ArtHome12 "2 total commits to the home-assistant organization, 2 commits to developers.home-assistant") - [Arthur Leonard Andersen (@leoc)](https://github.com/leoc "9 total commits to the home-assistant organization, 9 commits to home-assistant") @@ -124,6 +124,7 @@ This page contains a list of people who have contributed in one way or another t - [Bjarni Ivarsson (@bjarniivarsson)](https://github.com/bjarniivarsson "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant-polymer") - [Björn Orri (@bjornorri)](https://github.com/bjornorri "1 total commits to the home-assistant organization, 1 commit to home-assistant-iOS") - [Björn Ramberg (@bjorne)](https://github.com/bjorne "1 total commits to the home-assistant organization, 1 commit to hassio-build") +- [Blake Blackshear (@blakeblackshear)](https://github.com/blakeblackshear "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Bob Anderson (@rwa)](https://github.com/rwa "11 total commits to the home-assistant organization, 7 commits to home-assistant, 4 commits to home-assistant.io") - [Bob Clough (@thinkl33t)](https://github.com/thinkl33t "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Bob Igo (@Human)](https://github.com/Human "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") @@ -161,26 +162,24 @@ This page contains a list of people who have contributed in one way or another t - [Caius Seiger (@caiuspb)](https://github.com/caiuspb "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Caleb Dunn (@finish06)](https://github.com/finish06 "7 total commits to the home-assistant organization, 7 commits to home-assistant") - [Cameron Bulock (@cbulock)](https://github.com/cbulock "3 total commits to the home-assistant organization, 2 commits to home-assistant, 1 commit to netdisco") -- [Carlo Costanzo (@CCOSTAN)](https://github.com/CCOSTAN "99 total commits to the home-assistant organization, 91 commits to home-assistant.io, 5 commits to home-assistant, 1 commit to fabric-home-assistant, 1 commit to hassbian-scripts, 1 commit to homebridge-homeassistant") +- [Carlo Costanzo (@CCOSTAN)](https://github.com/CCOSTAN "99 total commits to the home-assistant organization, 91 commits to home-assistant.io, 5 commits to home-assistant, 1 commit to fabric-home-assistant, 1 commit to homebridge-homeassistant, 1 commit to hassbian-scripts") - [carlosmgr (@carlosmgr)](https://github.com/carlosmgr "6 total commits to the home-assistant organization, 6 commits to home-assistant") -- [cdce8p (@cdce8p)](https://github.com/cdce8p "147 total commits to the home-assistant organization, 85 commits to home-assistant, 42 commits to home-assistant.io, 13 commits to home-assistant-polymer, 5 commits to hass-release, 2 commits to developers.home-assistant") +- [cdce8p (@cdce8p)](https://github.com/cdce8p "157 total commits to the home-assistant organization, 94 commits to home-assistant, 42 commits to home-assistant.io, 13 commits to home-assistant-polymer, 5 commits to hass-release, 3 commits to developers.home-assistant") - [Cecron (@Cecron)](https://github.com/Cecron "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Cedric Van Goethem (@Zepheus)](https://github.com/Zepheus "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Cenk Gündoğan (@cgundogan)](https://github.com/cgundogan "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Censored3 (@Censored3)](https://github.com/Censored3 "2 total commits to the home-assistant organization, 2 commits to hassio-addons") - [Cezar Sá Espinola (@cezarsa)](https://github.com/cezarsa "2 total commits to the home-assistant organization, 2 commits to home-assistant") -- [cgtobi (@cgtobi)](https://github.com/cgtobi "34 total commits to the home-assistant organization, 21 commits to home-assistant, 13 commits to home-assistant.io") +- [cgtobi (@cgtobi)](https://github.com/cgtobi "35 total commits to the home-assistant organization, 22 commits to home-assistant, 13 commits to home-assistant.io") - [chanders (@chanders)](https://github.com/chanders "2 total commits to the home-assistant organization, 2 commits to hadashboard") - [Charles Blonde (@CharlesBlonde)](https://github.com/CharlesBlonde "19 total commits to the home-assistant organization, 12 commits to home-assistant, 7 commits to home-assistant.io") -- [Charles Garwood (@cgarwood)](https://github.com/cgarwood "33 total commits to the home-assistant organization, 16 commits to home-assistant.io, 10 commits to home-assistant, 7 commits to home-assistant-polymer") +- [Charles Garwood (@cgarwood)](https://github.com/cgarwood "37 total commits to the home-assistant organization, 16 commits to home-assistant.io, 12 commits to home-assistant, 9 commits to home-assistant-polymer") - [Charles Spirakis (@srcLurker)](https://github.com/srcLurker "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to home-assistant.io") - [Chayoung You (@yous)](https://github.com/yous "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Check your git settings\! (@invalid-email-address)](https://github.com/invalid-email-address "1 total commits to the home-assistant organization, 1 commit to libcoap") -- [Chia\-liang Kao (@clkao)](https://github.com/clkao "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Chris (@chennin)](https://github.com/chennin "15 total commits to the home-assistant organization, 11 commits to home-assistant.io, 4 commits to home-assistant") - [Chris Crowe (@chriscrowe)](https://github.com/chriscrowe "3 total commits to the home-assistant organization, 3 commits to homebridge-homeassistant") - [Chris Huegle (@chuegle)](https://github.com/chuegle "1 total commits to the home-assistant organization, 1 commit to netdisco") -- [Chris Mulder (@chrisvis)](https://github.com/chrisvis "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Chris Smolen (@smolz)](https://github.com/smolz "10 total commits to the home-assistant organization, 6 commits to home-assistant.io, 4 commits to appdaemon") - [Chris Thorn (@chris-thorn)](https://github.com/chris-thorn "7 total commits to the home-assistant organization, 7 commits to home-assistant.io") - [ChrisS85 (@ChrisS85)](https://github.com/ChrisS85 "1 total commits to the home-assistant organization, 1 commit to hassio-build") @@ -188,7 +187,7 @@ This page contains a list of people who have contributed in one way or another t - [Christian Brædstrup (@LinuxChristian)](https://github.com/LinuxChristian "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Christian Studer (@cstuder)](https://github.com/cstuder "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") - [ChristianKuehnel (@ChristianKuehnel)](https://github.com/ChristianKuehnel "39 total commits to the home-assistant organization, 23 commits to home-assistant, 16 commits to home-assistant.io") -- [Christoph Gerneth (@c7h)](https://github.com/c7h "5 total commits to the home-assistant organization, 3 commits to home-assistant.io, 2 commits to home-assistant") +- [Christoph Gerneth (@c7h)](https://github.com/c7h "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Christoph Wagner (@Christoph-Wagner)](https://github.com/Christoph-Wagner "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") - [Christopher Viel (@Chris-V)](https://github.com/Chris-V "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [chrysn (@chrysn)](https://github.com/chrysn "65 total commits to the home-assistant organization, 65 commits to libcoap") @@ -198,7 +197,6 @@ This page contains a list of people who have contributed in one way or another t - [clach04 (@clach04)](https://github.com/clach04 "4 total commits to the home-assistant organization, 3 commits to home-assistant.io, 1 commit to hassbian-scripts") - [Claus F\. Strasburger (@cfstras)](https://github.com/cfstras "5 total commits to the home-assistant organization, 5 commits to pi-gen") - [cogneato (@cogneato)](https://github.com/cogneato "20 total commits to the home-assistant organization, 15 commits to home-assistant.io, 3 commits to developers.home-assistant, 2 commits to hassos") -- [Colin Dunn (@colindunn)](https://github.com/colindunn "2 total commits to the home-assistant organization, 2 commits to home-assistant") - [Colin Frei (@colinfrei)](https://github.com/colinfrei "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Colin O'Dell (@colinodell)](https://github.com/colinodell "33 total commits to the home-assistant organization, 18 commits to home-assistant, 15 commits to home-assistant.io") - [Colin Teubner (@netopiax)](https://github.com/netopiax "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") @@ -223,10 +221,10 @@ This page contains a list of people who have contributed in one way or another t - [Dani (@danichispa)](https://github.com/danichispa "9 total commits to the home-assistant organization, 9 commits to home-assistant.io") - [Daniel Bowman (@vrih)](https://github.com/vrih "5 total commits to the home-assistant organization, 4 commits to home-assistant, 1 commit to netdisco") - [Daniel Escoz (@Darkhogg)](https://github.com/Darkhogg "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") -- [Daniel Høyer Iversen (@Danielhiversen)](https://github.com/Danielhiversen "330 total commits to the home-assistant organization, 210 commits to home-assistant, 117 commits to home-assistant.io, 3 commits to home-assistant-polymer") +- [Daniel Høyer Iversen (@Danielhiversen)](https://github.com/Danielhiversen "335 total commits to the home-assistant organization, 214 commits to home-assistant, 118 commits to home-assistant.io, 3 commits to home-assistant-polymer") - [Daniel Perna (@danielperna84)](https://github.com/danielperna84 "107 total commits to the home-assistant organization, 54 commits to home-assistant, 42 commits to home-assistant.io, 11 commits to hassio-addons") - [Daniel Peukert (@dpeukert)](https://github.com/dpeukert "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Daniel Shokouhi (@dshokouhi)](https://github.com/dshokouhi "27 total commits to the home-assistant organization, 20 commits to home-assistant.io, 7 commits to home-assistant") +- [Daniel Shokouhi (@dshokouhi)](https://github.com/dshokouhi "31 total commits to the home-assistant organization, 21 commits to home-assistant.io, 10 commits to home-assistant") - [Daniel Trnka (@trnila)](https://github.com/trnila "2 total commits to the home-assistant organization, 2 commits to appdaemon") - [Daniel Watkins (@OddBloke)](https://github.com/OddBloke "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Daniel Welch (@danielwelch)](https://github.com/danielwelch "6 total commits to the home-assistant organization, 3 commits to home-assistant.io, 2 commits to homebridge-homeassistant, 1 commit to hassio-addons") @@ -261,19 +259,20 @@ This page contains a list of people who have contributed in one way or another t - [DetroitEE (@DetroitEE)](https://github.com/DetroitEE "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [devdelay (@devdelay)](https://github.com/devdelay "16 total commits to the home-assistant organization, 7 commits to home-assistant.io, 5 commits to home-assistant, 4 commits to homebridge-homeassistant") - [Devon Peet (@dpeet)](https://github.com/dpeet "5 total commits to the home-assistant organization, 5 commits to home-assistant.io") -- [Diogo Gomes (@dgomes)](https://github.com/dgomes "74 total commits to the home-assistant organization, 49 commits to home-assistant, 24 commits to home-assistant.io, 1 commit to developers.home-assistant") +- [Diogo Gomes (@dgomes)](https://github.com/dgomes "75 total commits to the home-assistant organization, 49 commits to home-assistant, 25 commits to home-assistant.io, 1 commit to developers.home-assistant") - [Dmitri Pribysh (@dmand)](https://github.com/dmand "1 total commits to the home-assistant organization, 1 commit to hassos") - [Domantas (@Dohxis)](https://github.com/Dohxis "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Dougal Matthews (@d0ugal)](https://github.com/d0ugal "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [dramamoose (@dramamoose)](https://github.com/dramamoose "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.io") - [DrewSK (@dzsquared)](https://github.com/dzsquared "8 total commits to the home-assistant organization, 8 commits to home-assistant.io") -- [DubhAd (@DubhAd)](https://github.com/DubhAd "419 total commits to the home-assistant organization, 415 commits to home-assistant.io, 2 commits to hassos, 2 commits to developers.home-assistant") +- [DubhAd (@DubhAd)](https://github.com/DubhAd "456 total commits to the home-assistant organization, 452 commits to home-assistant.io, 2 commits to hassos, 2 commits to developers.home-assistant") - [Duoxilian (@Duoxilian)](https://github.com/Duoxilian "11 total commits to the home-assistant organization, 6 commits to home-assistant.io, 5 commits to home-assistant") - [ebpetway (@ebpetway)](https://github.com/ebpetway "55 total commits to the home-assistant organization, 55 commits to warrant") - [Egor Tsinko (@etsinko)](https://github.com/etsinko "12 total commits to the home-assistant organization, 9 commits to home-assistant, 3 commits to home-assistant.io") - [Eitan Mosenkis (@emosenkis)](https://github.com/emosenkis "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to netdisco") - [eldanb (@eldanb)](https://github.com/eldanb "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") - [Ellis Percival (@flyte)](https://github.com/flyte "29 total commits to the home-assistant organization, 25 commits to home-assistant, 4 commits to home-assistant.io") +- [emontnemery (@emontnemery)](https://github.com/emontnemery "11 total commits to the home-assistant organization, 11 commits to home-assistant") - [engrbm87 (@engrbm87)](https://github.com/engrbm87 "3 total commits to the home-assistant organization, 3 commits to appdaemon") - [Eric Hagan (@ehagan)](https://github.com/ehagan "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [Eric Oosting (@eoosting)](https://github.com/eoosting "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") @@ -285,7 +284,7 @@ This page contains a list of people who have contributed in one way or another t - [Eu (@covrig)](https://github.com/covrig "2 total commits to the home-assistant organization, 2 commits to home-assistant-polymer") - [Eugenio Panadero (@azogue)](https://github.com/azogue "77 total commits to the home-assistant organization, 46 commits to home-assistant, 25 commits to home-assistant.io, 3 commits to homebridge-homeassistant, 3 commits to home-assistant-polymer") - [Ezra Bowden (@bn0)](https://github.com/bn0 "2 total commits to the home-assistant organization, 2 commits to warrant") -- [Fabian Affolter (@fabaff)](https://github.com/fabaff "4972 total commits to the home-assistant organization, 3110 commits to home-assistant.io, 1723 commits to home-assistant, 33 commits to home-assistant-assets, 32 commits to home-assistant-notebooks, 15 commits to developers.home-assistant, 11 commits to home-assistant-polymer, 11 commits to hassio-build, 10 commits to netdisco, 7 commits to hassos, 6 commits to hassio, 6 commits to hassio-addons, 3 commits to hass-release, 2 commits to home-assistant-iOS, 1 commit to home-assistant-js-websocket, 1 commit to example-custom-config, 1 commit to ui-schema") +- [Fabian Affolter (@fabaff)](https://github.com/fabaff "4991 total commits to the home-assistant organization, 3124 commits to home-assistant.io, 1724 commits to home-assistant, 33 commits to home-assistant-assets, 32 commits to home-assistant-notebooks, 19 commits to developers.home-assistant, 11 commits to home-assistant-polymer, 11 commits to hassio-build, 10 commits to netdisco, 7 commits to hassos, 6 commits to hassio-addons, 6 commits to hassio, 3 commits to hass-release, 2 commits to home-assistant-iOS, 1 commit to ui-schema, 1 commit to example-custom-config, 1 commit to home-assistant-js-websocket") - [Fabian Fischer (@nodomain)](https://github.com/nodomain "1 total commits to the home-assistant organization, 1 commit to hassio-addons") - [Fabian Heredia Montiel (@fabianhjr)](https://github.com/fabianhjr "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Fabien Piuzzi (@reefab)](https://github.com/reefab "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") @@ -300,7 +299,7 @@ This page contains a list of people who have contributed in one way or another t - [florianj1 (@florianj1)](https://github.com/florianj1 "1 total commits to the home-assistant organization, 1 commit to hassio") - [florincosta (@florincosta)](https://github.com/florincosta "6 total commits to the home-assistant organization, 3 commits to home-assistant, 3 commits to home-assistant.io") - [Fonta (@f0nt4)](https://github.com/f0nt4 "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") -- [Franck Nijhof (@frenck)](https://github.com/frenck "52 total commits to the home-assistant organization, 31 commits to home-assistant.io, 10 commits to hassio, 3 commits to hassio-addons, 3 commits to home-assistant, 2 commits to hassio-cli, 2 commits to home-assistant-polymer, 1 commit to appdaemon") +- [Franck Nijhof (@frenck)](https://github.com/frenck "68 total commits to the home-assistant organization, 32 commits to home-assistant.io, 16 commits to hassio-cli, 10 commits to hassio, 4 commits to hassio-addons, 3 commits to home-assistant, 2 commits to home-assistant-polymer, 1 commit to appdaemon") - [Frank (@syphernl)](https://github.com/syphernl "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Frantz (@rofrantz)](https://github.com/rofrantz "17 total commits to the home-assistant organization, 9 commits to home-assistant, 4 commits to home-assistant.io, 3 commits to netdisco, 1 commit to home-assistant-js-websocket") - [Frederic Hemberger (@fhemberger)](https://github.com/fhemberger "93 total commits to the home-assistant organization, 93 commits to home-assistant.io") @@ -309,14 +308,14 @@ This page contains a list of people who have contributed in one way or another t - [freol35241 (@freol35241)](https://github.com/freol35241 "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [fuga2136 (@fuga2136)](https://github.com/fuga2136 "13 total commits to the home-assistant organization, 13 commits to home-assistant.io") - [Gabor SZOLLOSI (@szogi)](https://github.com/szogi "1 total commits to the home-assistant organization, 1 commit to appdaemon") -- [Gabriel Oliveira (@gabrielboliveira)](https://github.com/gabrielboliveira "2 total commits to the home-assistant organization, 1 commit to hassos, 1 commit to hassio-addons") +- [Gabriel Oliveira (@gabrielboliveira)](https://github.com/gabrielboliveira "2 total commits to the home-assistant organization, 1 commit to hassio-addons, 1 commit to hassos") - [geekofweek (@geekofweek)](https://github.com/geekofweek "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Geoff Norton (@kangaroo)](https://github.com/kangaroo "14 total commits to the home-assistant organization, 14 commits to home-assistant") - [George\.M (@nodinosaur)](https://github.com/nodinosaur "6 total commits to the home-assistant organization, 6 commits to home-assistant.io") - [Georgi Kirichkov (@kirichkov)](https://github.com/kirichkov "17 total commits to the home-assistant organization, 11 commits to home-assistant.io, 5 commits to home-assistant, 1 commit to appdaemon") - [Georgi Yanev (@jumpalottahigh)](https://github.com/jumpalottahigh "6 total commits to the home-assistant organization, 4 commits to home-assistant.io, 2 commits to home-assistant-polymer") - [Georgii Staroselskii (@staroselskii)](https://github.com/staroselskii "1 total commits to the home-assistant organization, 1 commit to pi-gen") -- [Gerard (@gerard33)](https://github.com/gerard33 "12 total commits to the home-assistant organization, 6 commits to home-assistant, 6 commits to home-assistant.io") +- [Gerard (@gerard33)](https://github.com/gerard33 "14 total commits to the home-assistant organization, 8 commits to home-assistant, 6 commits to home-assistant.io") - [Gergely Imreh (@imrehg)](https://github.com/imrehg "16 total commits to the home-assistant organization, 11 commits to home-assistant, 5 commits to home-assistant.io") - [Gianluca Barbaro (@MrMep)](https://github.com/MrMep "24 total commits to the home-assistant organization, 16 commits to home-assistant, 8 commits to home-assistant.io") - [Giel Janssens (@gieljnssns)](https://github.com/gieljnssns "5 total commits to the home-assistant organization, 5 commits to home-assistant") @@ -331,7 +330,7 @@ This page contains a list of people who have contributed in one way or another t - [Grant McConnaughey (@grantmcconnaughey)](https://github.com/grantmcconnaughey "8 total commits to the home-assistant organization, 8 commits to warrant") - [GreenTurtwig (@GreenTurtwig)](https://github.com/GreenTurtwig "80 total commits to the home-assistant organization, 75 commits to home-assistant.io, 5 commits to home-assistant") - [Greg Dowling (@pavoni)](https://github.com/pavoni "209 total commits to the home-assistant organization, 183 commits to home-assistant, 25 commits to home-assistant.io, 1 commit to netdisco") -- [Greg Laabs (@OverloadUT)](https://github.com/OverloadUT "22 total commits to the home-assistant organization, 18 commits to home-assistant, 4 commits to home-assistant.io") +- [Greg Laabs (@OverloadUT)](https://github.com/OverloadUT "25 total commits to the home-assistant organization, 21 commits to home-assistant, 4 commits to home-assistant.io") - [Greg MacLellan (@gregmac)](https://github.com/gregmac "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Greg Stevenson (@gstevenson)](https://github.com/gstevenson "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") - [Gregory Benner (@Klathmon)](https://github.com/Klathmon "3 total commits to the home-assistant organization, 3 commits to home-assistant") @@ -357,7 +356,7 @@ This page contains a list of people who have contributed in one way or another t - [Hillary Fraley (@hillaryfraley)](https://github.com/hillaryfraley "12 total commits to the home-assistant organization, 12 commits to home-assistant.io") - [Hmmbob (@hmmbob)](https://github.com/hmmbob "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [honcheng (@honcheng)](https://github.com/honcheng "2 total commits to the home-assistant organization, 2 commits to homebridge-homeassistant") -- [huangyupeng (@huangyupeng)](https://github.com/huangyupeng "14 total commits to the home-assistant organization, 7 commits to home-assistant, 7 commits to home-assistant.io") +- [huangyupeng (@huangyupeng)](https://github.com/huangyupeng "15 total commits to the home-assistant organization, 8 commits to home-assistant, 7 commits to home-assistant.io") - [Hugo Dupras (@jabesq)](https://github.com/jabesq "29 total commits to the home-assistant organization, 21 commits to home-assistant, 8 commits to home-assistant.io") - [Hugo Gresse (@HugoGresse)](https://github.com/HugoGresse "8 total commits to the home-assistant organization, 8 commits to home-assistant.io") - [Hugo Hromic (@hhromic)](https://github.com/hhromic "4 total commits to the home-assistant organization, 4 commits to pi-gen") @@ -369,12 +368,12 @@ This page contains a list of people who have contributed in one way or another t - [icovada (@icovada)](https://github.com/icovada "6 total commits to the home-assistant organization, 3 commits to home-assistant, 3 commits to home-assistant.io") - [Igor Shults (@ishults)](https://github.com/ishults "12 total commits to the home-assistant organization, 6 commits to home-assistant, 5 commits to home-assistant.io, 1 commit to home-assistant-polymer") - [Ioan Loosley (@ioangogo)](https://github.com/ioangogo "15 total commits to the home-assistant organization, 12 commits to home-assistant.io, 3 commits to home-assistant") -- [Isabella Gross Alström (@isabellaalstrom)](https://github.com/isabellaalstrom "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") +- [Isabella Gross Alström (@isabellaalstrom)](https://github.com/isabellaalstrom "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") - [Issac Kelly (@issackelly)](https://github.com/issackelly "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Jaak Laineste (@jaakla)](https://github.com/jaakla "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Jacen (@jacen92)](https://github.com/jacen92 "2 total commits to the home-assistant organization, 2 commits to pi-gen") -- [jack (@jackmakesthings)](https://github.com/jackmakesthings "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Jack (@jackjohnsonuk)](https://github.com/jackjohnsonuk "6 total commits to the home-assistant organization, 6 commits to home-assistant.io") +- [jack (@jackmakesthings)](https://github.com/jackmakesthings "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Jack Minardi (@jminardi)](https://github.com/jminardi "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Jacob Mansfield (@cyberjacob)](https://github.com/cyberjacob "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Jacob Siverskog (@jsiverskog)](https://github.com/jsiverskog "1 total commits to the home-assistant organization, 1 commit to pi-gen") @@ -393,7 +392,7 @@ This page contains a list of people who have contributed in one way or another t - [Janne Grunau (@jannau)](https://github.com/jannau "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Jason Carter (@JasonCarter80)](https://github.com/JasonCarter80 "7 total commits to the home-assistant organization, 4 commits to home-assistant, 3 commits to home-assistant.io") - [Jason Hite (@jasonmhite)](https://github.com/jasonmhite "6 total commits to the home-assistant organization, 6 commits to appdaemon") -- [Jason Hu (@awarecan)](https://github.com/awarecan "136 total commits to the home-assistant organization, 93 commits to home-assistant, 17 commits to home-assistant-polymer, 15 commits to home-assistant.io, 9 commits to developers.home-assistant, 1 commit to home-assistant-js-websocket, 1 commit to netdisco") +- [Jason Hu (@awarecan)](https://github.com/awarecan "150 total commits to the home-assistant organization, 98 commits to home-assistant, 24 commits to home-assistant.io, 17 commits to home-assistant-polymer, 9 commits to developers.home-assistant, 1 commit to home-assistant-js-websocket, 1 commit to netdisco") - [Jason Hunter (@hunterjm)](https://github.com/hunterjm "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Jay Stevens (@Jay2645)](https://github.com/Jay2645 "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [JAYMAN-ATX (@JAYMAN-ATX)](https://github.com/JAYMAN-ATX "2 total commits to the home-assistant organization, 2 commits to homebridge-homeassistant") @@ -404,7 +403,7 @@ This page contains a list of people who have contributed in one way or another t - [Jeff Wilson (@jawilson)](https://github.com/jawilson "25 total commits to the home-assistant organization, 19 commits to home-assistant, 6 commits to home-assistant.io") - [Jens (@jhoepken)](https://github.com/jhoepken "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Jens Østergaard Nielsen (@dingusdk)](https://github.com/dingusdk "8 total commits to the home-assistant organization, 4 commits to home-assistant, 4 commits to home-assistant.io") -- [Jerad Meisner (@jeradM)](https://github.com/jeradM "57 total commits to the home-assistant organization, 33 commits to home-assistant-polymer, 12 commits to home-assistant.io, 12 commits to home-assistant") +- [Jerad Meisner (@jeradM)](https://github.com/jeradM "58 total commits to the home-assistant organization, 34 commits to home-assistant-polymer, 12 commits to home-assistant.io, 12 commits to home-assistant") - [Jeremiah Wuenschel (@jer)](https://github.com/jer "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Jeremy Williams (@jwillaz)](https://github.com/jwillaz "5 total commits to the home-assistant organization, 5 commits to home-assistant.io") - [jeremysv (@jeremysv)](https://github.com/jeremysv "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") @@ -431,22 +430,22 @@ This page contains a list of people who have contributed in one way or another t - [Johannes K\. (@roadrash2108)](https://github.com/roadrash2108 "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") - [Johannes Truschnigg (@jtru)](https://github.com/jtru "1 total commits to the home-assistant organization, 1 commit to hassos") - [John (@J-C-B)](https://github.com/J-C-B "5 total commits to the home-assistant organization, 5 commits to home-assistant.io") -- [John Arild Berentsen (@turbokongen)](https://github.com/turbokongen "221 total commits to the home-assistant organization, 156 commits to home-assistant, 42 commits to home-assistant.io, 23 commits to home-assistant-polymer") +- [John Arild Berentsen (@turbokongen)](https://github.com/turbokongen "224 total commits to the home-assistant organization, 156 commits to home-assistant, 45 commits to home-assistant.io, 23 commits to home-assistant-polymer") - [John Lindley (@jwl17330536)](https://github.com/jwl17330536 "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [John Mihalic (@mezz64)](https://github.com/mezz64 "51 total commits to the home-assistant organization, 37 commits to home-assistant, 12 commits to home-assistant.io, 1 commit to hadashboard, 1 commit to home-assistant-polymer") - [Johnny Chadda (@joch)](https://github.com/joch "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Jon (@JonMurphy)](https://github.com/JonMurphy "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Jon Caruana (@joncar)](https://github.com/joncar "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Jon Griffith (@arretx)](https://github.com/arretx "14 total commits to the home-assistant organization, 13 commits to home-assistant.io, 1 commit to appdaemon") +- [Jon Griffith (@arretx)](https://github.com/arretx "15 total commits to the home-assistant organization, 14 commits to home-assistant.io, 1 commit to appdaemon") - [Jon Maddox (@maddox)](https://github.com/maddox "107 total commits to the home-assistant organization, 82 commits to home-assistant, 16 commits to homebridge-homeassistant, 9 commits to home-assistant.io") -- [Jonas Karlsson (@endor-force)](https://github.com/endor-force "11 total commits to the home-assistant organization, 5 commits to hassio-addons, 5 commits to home-assistant.io, 1 commit to hassio-build") +- [Jonas Karlsson (@endor-force)](https://github.com/endor-force "12 total commits to the home-assistant organization, 6 commits to home-assistant.io, 5 commits to hassio-addons, 1 commit to hassio-build") - [Jonas Pedersen (@JonasPed)](https://github.com/JonasPed "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Jonatan Castro (@jcastro)](https://github.com/jcastro "7 total commits to the home-assistant organization, 7 commits to home-assistant.io") - [Jonathan Weinberg (@jonathanweinberg)](https://github.com/jonathanweinberg "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") - [joopert (@joopert)](https://github.com/joopert "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Jordi (@hokus15)](https://github.com/hokus15 "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") - [Jordy (@jbarrancos)](https://github.com/jbarrancos "40 total commits to the home-assistant organization, 40 commits to home-assistant") -- [Jorim Tielemans (@tjorim)](https://github.com/tjorim "31 total commits to the home-assistant organization, 31 commits to home-assistant.io") +- [Jorim Tielemans (@tjorim)](https://github.com/tjorim "34 total commits to the home-assistant organization, 31 commits to home-assistant.io, 2 commits to hassio-cli, 1 commit to hassio-addons") - [Jose Juan Montes (@jjmontesl)](https://github.com/jjmontesl "9 total commits to the home-assistant organization, 6 commits to home-assistant, 3 commits to home-assistant.io") - [Joseph Carter (@iKarith)](https://github.com/iKarith "9 total commits to the home-assistant organization, 9 commits to pi-gen") - [Josh Anderson (@andersonshatch)](https://github.com/andersonshatch "8 total commits to the home-assistant organization, 5 commits to home-assistant, 3 commits to homebridge-homeassistant") @@ -507,7 +506,7 @@ This page contains a list of people who have contributed in one way or another t - [LucaSoldi (@LucaSoldi)](https://github.com/LucaSoldi "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Lucien Guimier (@guimier)](https://github.com/guimier "1 total commits to the home-assistant organization, 1 commit to libcoap") - [Ludovic (@ldvc)](https://github.com/ldvc "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [Ludovico de Nittis (@RyuzakiKK)](https://github.com/RyuzakiKK "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") +- [Ludovico de Nittis (@RyuzakiKK)](https://github.com/RyuzakiKK "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") - [Lukas (@lukas-hetzenecker)](https://github.com/lukas-hetzenecker "14 total commits to the home-assistant organization, 10 commits to home-assistant, 4 commits to home-assistant.io") - [Lukas Barth (@tinloaf)](https://github.com/tinloaf "37 total commits to the home-assistant organization, 23 commits to home-assistant, 12 commits to home-assistant.io, 2 commits to home-assistant-polymer") - [Lukas Porubcan (@Luc3as)](https://github.com/Luc3as "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") @@ -520,8 +519,9 @@ This page contains a list of people who have contributed in one way or another t - [Magnus Ihse Bursie (@magicus)](https://github.com/magicus "16 total commits to the home-assistant organization, 9 commits to home-assistant, 4 commits to netdisco, 3 commits to home-assistant.io") - [Magnus Lyckå (@magnus-lycka)](https://github.com/magnus-lycka "1 total commits to the home-assistant organization, 1 commit to netdisco") - [MagnusKnutas (@MagnusKnutas)](https://github.com/MagnusKnutas "29 total commits to the home-assistant organization, 29 commits to home-assistant") +- [Mahasri Kalavala (@skalavala)](https://github.com/skalavala "32 total commits to the home-assistant organization, 32 commits to home-assistant.io") - [Mal Curtis (@snikch)](https://github.com/snikch "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Malte Franken (@exxamalte)](https://github.com/exxamalte "16 total commits to the home-assistant organization, 10 commits to home-assistant, 4 commits to home-assistant.io, 1 commit to developers.home-assistant, 1 commit to home-assistant-polymer") +- [Malte Franken (@exxamalte)](https://github.com/exxamalte "18 total commits to the home-assistant organization, 11 commits to home-assistant, 5 commits to home-assistant.io, 1 commit to home-assistant-polymer, 1 commit to developers.home-assistant") - [Marc Egli (@frog32)](https://github.com/frog32 "12 total commits to the home-assistant organization, 8 commits to home-assistant, 3 commits to home-assistant.io, 1 commit to hassio-addons-example") - [Marc Forth (@mf-social)](https://github.com/mf-social "28 total commits to the home-assistant organization, 27 commits to home-assistant.io, 1 commit to fabric-home-assistant") - [Marc Khouri (@ubnt-marc-khouri)](https://github.com/ubnt-marc-khouri "4 total commits to the home-assistant organization, 2 commits to home-assistant-polymer, 1 commit to hassio-build, 1 commit to developers.home-assistant") @@ -529,7 +529,7 @@ This page contains a list of people who have contributed in one way or another t - [Marc Plano\-Lesay (@Kernald)](https://github.com/Kernald "10 total commits to the home-assistant organization, 10 commits to home-assistant.io") - [Marcel Hoppe (@hobbypunk90)](https://github.com/hobbypunk90 "12 total commits to the home-assistant organization, 6 commits to home-assistant.io, 6 commits to home-assistant") - [Marcel030nl (@Marcel030nl)](https://github.com/Marcel030nl "5 total commits to the home-assistant organization, 5 commits to home-assistant.io") -- [Marcelo Moreira de Mello (@tchellomello)](https://github.com/tchellomello "159 total commits to the home-assistant organization, 89 commits to home-assistant, 67 commits to home-assistant.io, 1 commit to home-assistant-assets, 1 commit to hassio-build, 1 commit to home-assistant-polymer") +- [Marcelo Moreira de Mello (@tchellomello)](https://github.com/tchellomello "159 total commits to the home-assistant organization, 89 commits to home-assistant, 67 commits to home-assistant.io, 1 commit to home-assistant-assets, 1 commit to home-assistant-polymer, 1 commit to hassio-build") - [Marcin Domański (@kabturek)](https://github.com/kabturek "2 total commits to the home-assistant organization, 2 commits to appdaemon") - [Marcin Jaworski (@yawor)](https://github.com/yawor "12 total commits to the home-assistant organization, 12 commits to appdaemon") - [Marco (@marconett)](https://github.com/marconett "3 total commits to the home-assistant organization, 3 commits to appdaemon") @@ -554,6 +554,7 @@ This page contains a list of people who have contributed in one way or another t - [Martin Weinelt (@mweinelt)](https://github.com/mweinelt "17 total commits to the home-assistant organization, 9 commits to home-assistant, 7 commits to home-assistant.io, 1 commit to home-assistant-polymer") - [Martokk (@martokk)](https://github.com/martokk "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Mathew Peterson (@mathewpeterson)](https://github.com/mathewpeterson "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") +- [Matt D (@matt1)](https://github.com/matt1 "1 total commits to the home-assistant organization, 1 commit to hassio-cli") - [Matt N\. (@mnoorenberghe)](https://github.com/mnoorenberghe "54 total commits to the home-assistant organization, 25 commits to home-assistant-iOS, 17 commits to home-assistant.io, 9 commits to home-assistant, 2 commits to home-assistant-polymer, 1 commit to homebridge-homeassistant") - [Matt Rogers (@rogersmj)](https://github.com/rogersmj "20 total commits to the home-assistant organization, 20 commits to hadashboard") - [Matt Schmitt (@schmittx)](https://github.com/schmittx "90 total commits to the home-assistant organization, 52 commits to homebridge-homeassistant, 21 commits to home-assistant, 12 commits to home-assistant.io, 3 commits to home-assistant-polymer, 2 commits to developers.home-assistant") @@ -616,12 +617,13 @@ This page contains a list of people who have contributed in one way or another t - [mountainsandcode (@mountainsandcode)](https://github.com/mountainsandcode "9 total commits to the home-assistant organization, 6 commits to home-assistant.io, 3 commits to home-assistant") - [mueslo (@mueslo)](https://github.com/mueslo "5 total commits to the home-assistant organization, 5 commits to home-assistant.io") - [mukundv (@mukundv)](https://github.com/mukundv "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") +- [mvn23 (@mvn23)](https://github.com/mvn23 "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Myles Eftos (@madpilot)](https://github.com/madpilot "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Mārtiņš Grunskis (@grunskis)](https://github.com/grunskis "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Nash Kaminski (@nkaminski)](https://github.com/nkaminski "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Nate Clark (@heythisisnate)](https://github.com/heythisisnate "15 total commits to the home-assistant organization, 10 commits to home-assistant, 5 commits to home-assistant.io") - [Nathan Flynn (@eperdeme)](https://github.com/eperdeme "1 total commits to the home-assistant organization, 1 commit to hassio-addons") -- [Nathan Henrie (@n8henrie)](https://github.com/n8henrie "22 total commits to the home-assistant organization, 10 commits to home-assistant, 8 commits to home-assistant.io, 2 commits to homebridge-homeassistant, 1 commit to appdaemon, 1 commit to home-assistant-polymer") +- [Nathan Henrie (@n8henrie)](https://github.com/n8henrie "22 total commits to the home-assistant organization, 10 commits to home-assistant, 8 commits to home-assistant.io, 2 commits to homebridge-homeassistant, 1 commit to home-assistant-polymer, 1 commit to appdaemon") - [Nathan Knotts (@nknotts)](https://github.com/nknotts "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Neil Lathwood (@laf)](https://github.com/laf "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Nelis Willers (@NelisW)](https://github.com/NelisW "1 total commits to the home-assistant organization, 1 commit to fabric-home-assistant") @@ -630,7 +632,7 @@ This page contains a list of people who have contributed in one way or another t - [Nicholas Griffin (@nicholasgriffintn)](https://github.com/nicholasgriffintn "6 total commits to the home-assistant organization, 6 commits to home-assistant.io") - [Nick Touran (@partofthething)](https://github.com/partofthething "38 total commits to the home-assistant organization, 25 commits to home-assistant, 13 commits to home-assistant.io") - [Nick Whyte (@nickw444)](https://github.com/nickw444 "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [Nicko van Someren (@nickovs)](https://github.com/nickovs "3 total commits to the home-assistant organization, 3 commits to home-assistant") +- [Nicko van Someren (@nickovs)](https://github.com/nickovs "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Nicolas Graziano (@ngraziano)](https://github.com/ngraziano "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Nicolas Martignoni (@martignoni)](https://github.com/martignoni "1 total commits to the home-assistant organization, 1 commit to pi-gen") - [Niels Mündler (@nielstron)](https://github.com/nielstron "21 total commits to the home-assistant organization, 16 commits to home-assistant, 3 commits to home-assistant.io, 2 commits to netdisco") @@ -651,15 +653,15 @@ This page contains a list of people who have contributed in one way or another t - [Oliv3rDog (@Oliv3rDog)](https://github.com/Oliv3rDog "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Oliver (@scarface-4711)](https://github.com/scarface-4711 "28 total commits to the home-assistant organization, 18 commits to home-assistant, 9 commits to home-assistant.io, 1 commit to netdisco") - [Oliver van Porten (@mcdeck)](https://github.com/mcdeck "10 total commits to the home-assistant organization, 10 commits to home-assistant") -- [Oncleben31 (@oncleben31)](https://github.com/oncleben31 "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") +- [Oncleben31 (@oncleben31)](https://github.com/oncleben31 "5 total commits to the home-assistant organization, 5 commits to home-assistant.io") - [Open Home Automation (@open-homeautomation)](https://github.com/open-homeautomation "41 total commits to the home-assistant organization, 29 commits to home-assistant, 12 commits to home-assistant.io") - [ottersen (@ottersen)](https://github.com/ottersen "11 total commits to the home-assistant organization, 11 commits to home-assistant.io") -- [Otto Winter (@OttoWinter)](https://github.com/OttoWinter "70 total commits to the home-assistant organization, 54 commits to home-assistant, 13 commits to home-assistant.io, 3 commits to home-assistant-polymer") +- [Otto Winter (@OttoWinter)](https://github.com/OttoWinter "74 total commits to the home-assistant organization, 58 commits to home-assistant, 13 commits to home-assistant.io, 3 commits to home-assistant-polymer") - [oznu (@oznu)](https://github.com/oznu "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") - [Parker Moore (@parkr)](https://github.com/parkr "60 total commits to the home-assistant organization, 60 commits to home-assistant.io") - [pascal (@passie)](https://github.com/passie "4 total commits to the home-assistant organization, 3 commits to home-assistant, 1 commit to home-assistant-polymer") - [Pascal Bach (@bachp)](https://github.com/bachp "10 total commits to the home-assistant organization, 9 commits to home-assistant, 1 commit to netdisco") -- [Pascal Vizeli (@pvizeli)](https://github.com/pvizeli "3731 total commits to the home-assistant organization, 1314 commits to hassio, 676 commits to hassos, 479 commits to home-assistant, 465 commits to hassio-build, 371 commits to hassio-addons, 332 commits to home-assistant.io, 34 commits to hassio-homeassistant, 20 commits to developers.home-assistant, 17 commits to hassio-addons-example, 12 commits to hassio-cli, 7 commits to hassio-base, 2 commits to home-assistant-polymer, 1 commit to netdisco, 1 commit to home-assistant-js-websocket") +- [Pascal Vizeli (@pvizeli)](https://github.com/pvizeli "3760 total commits to the home-assistant organization, 1321 commits to hassio, 677 commits to hassos, 479 commits to home-assistant, 467 commits to hassio-build, 373 commits to hassio-addons, 333 commits to home-assistant.io, 34 commits to hassio-homeassistant, 23 commits to developers.home-assistant, 20 commits to hassio-cli, 17 commits to hassio-addons-example, 9 commits to hassio-base, 3 commits to hassio-addons-development, 2 commits to home-assistant-polymer, 1 commit to netdisco, 1 commit to home-assistant-js-websocket") - [Pat Thoyts (@patthoyts)](https://github.com/patthoyts "2 total commits to the home-assistant organization, 2 commits to netdisco") - [Patrick Aikens (@duckpuppy)](https://github.com/duckpuppy "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Patrick Easters (@patrickeasters)](https://github.com/patrickeasters "5 total commits to the home-assistant organization, 5 commits to home-assistant.io") @@ -703,7 +705,7 @@ This page contains a list of people who have contributed in one way or another t - [quthla (@quthla)](https://github.com/quthla "13 total commits to the home-assistant organization, 5 commits to home-assistant-polymer, 4 commits to home-assistant-iOS, 4 commits to home-assistant") - [rafale77 (@rafale77)](https://github.com/rafale77 "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") - [Raiford (@raiford)](https://github.com/raiford "1 total commits to the home-assistant organization, 1 commit to hassio-addons") -- [randellhodges (@randellhodges)](https://github.com/randellhodges "3 total commits to the home-assistant organization, 3 commits to home-assistant-polymer") +- [randellhodges (@randellhodges)](https://github.com/randellhodges "6 total commits to the home-assistant organization, 3 commits to home-assistant-polymer, 3 commits to home-assistant") - [rbflurry (@rbflurry)](https://github.com/rbflurry "17 total commits to the home-assistant organization, 14 commits to home-assistant.io, 3 commits to home-assistant") - [Reed Riley (@reedriley)](https://github.com/reedriley "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Rendili (@Rendili)](https://github.com/Rendili "3 total commits to the home-assistant organization, 3 commits to home-assistant") @@ -723,15 +725,15 @@ This page contains a list of people who have contributed in one way or another t - [Rob Capellini (@capellini)](https://github.com/capellini "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Rob Cranfill (@RobCranfill)](https://github.com/RobCranfill "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Rob Slifka (@rslifka)](https://github.com/rslifka "5 total commits to the home-assistant organization, 5 commits to home-assistant.io") -- [Robbie Trencheny (@robbiet480)](https://github.com/robbiet480 "1430 total commits to the home-assistant organization, 752 commits to home-assistant-iOS, 260 commits to home-assistant, 249 commits to home-assistant.io, 93 commits to homebridge-homeassistant, 15 commits to home-assistant-polymer, 14 commits to hubot-home-assistant, 8 commits to Analytics-Receiver, 6 commits to netdisco, 3 commits to organization, 3 commits to scenegen, 3 commits to appdaemon, 3 commits to home-assistant-js-websocket, 3 commits to hassbot, 3 commits to home-assistant-js, 3 commits to hadashboard, 2 commits to fabric-home-assistant, 2 commits to LabelBot, 2 commits to home-assistant-assets, 2 commits to micropython-home-assistant, 2 commits to lambda-home-assistant-github, 2 commits to home-assistant-notebooks") +- [Robbie Trencheny (@robbiet480)](https://github.com/robbiet480 "1432 total commits to the home-assistant organization, 754 commits to home-assistant-iOS, 260 commits to home-assistant, 249 commits to home-assistant.io, 93 commits to homebridge-homeassistant, 15 commits to home-assistant-polymer, 14 commits to hubot-home-assistant, 8 commits to Analytics-Receiver, 6 commits to netdisco, 3 commits to scenegen, 3 commits to hadashboard, 3 commits to home-assistant-js, 3 commits to hassbot, 3 commits to appdaemon, 3 commits to organization, 3 commits to home-assistant-js-websocket, 2 commits to home-assistant-notebooks, 2 commits to LabelBot, 2 commits to fabric-home-assistant, 2 commits to micropython-home-assistant, 2 commits to lambda-home-assistant-github, 2 commits to home-assistant-assets") - [Robert (@metbril)](https://github.com/metbril "8 total commits to the home-assistant organization, 8 commits to home-assistant.io") - [Robert Accettura (@raccettura)](https://github.com/raccettura "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Robert Schütz (@dotlambda)](https://github.com/dotlambda "3 total commits to the home-assistant organization, 2 commits to netdisco, 1 commit to appdaemon") -- [Robert Svensson (@Kane610)](https://github.com/Kane610 "78 total commits to the home-assistant organization, 53 commits to home-assistant, 22 commits to home-assistant.io, 1 commit to netdisco, 1 commit to developers.home-assistant, 1 commit to home-assistant-polymer") +- [Robert Svensson (@Kane610)](https://github.com/Kane610 "80 total commits to the home-assistant organization, 53 commits to home-assistant, 24 commits to home-assistant.io, 1 commit to netdisco, 1 commit to home-assistant-polymer, 1 commit to developers.home-assistant") - [Robin (@robmarkcole)](https://github.com/robmarkcole "57 total commits to the home-assistant organization, 35 commits to home-assistant.io, 19 commits to home-assistant, 2 commits to home-assistant-assets, 1 commit to hassos") - [Robin Laurén (@llauren)](https://github.com/llauren "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [Roddie Hasan (@eiddor)](https://github.com/eiddor "6 total commits to the home-assistant organization, 6 commits to home-assistant.io") -- [Rohan Kapoor (@rohankapoorcom)](https://github.com/rohankapoorcom "6 total commits to the home-assistant organization, 6 commits to home-assistant") +- [Rohan Kapoor (@rohankapoorcom)](https://github.com/rohankapoorcom "8 total commits to the home-assistant organization, 8 commits to home-assistant") - [Roi Dayan (@roidayan)](https://github.com/roidayan "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [roiff (@roiff)](https://github.com/roiff "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") - [Rolf Schäuble (@rschaeuble)](https://github.com/rschaeuble "1 total commits to the home-assistant organization, 1 commit to appdaemon") @@ -739,7 +741,7 @@ This page contains a list of people who have contributed in one way or another t - [Ron Miller (@brainyron)](https://github.com/brainyron "1 total commits to the home-assistant organization, 1 commit to hassio-addons") - [roqeer (@roqeer)](https://github.com/roqeer "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Ross Schulman (@rschulman)](https://github.com/rschulman "1 total commits to the home-assistant organization, 1 commit to pi-gen") -- [rpitera (@rpitera)](https://github.com/rpitera "5 total commits to the home-assistant organization, 5 commits to home-assistant.io") +- [rpitera (@rpitera)](https://github.com/rpitera "6 total commits to the home-assistant organization, 6 commits to home-assistant.io") - [Rubens Panfili (@rpanfili)](https://github.com/rpanfili "1 total commits to the home-assistant organization, 1 commit to hassio-addons") - [rubund (@rubund)](https://github.com/rubund "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [ruohan\.chen (@crhan)](https://github.com/crhan "3 total commits to the home-assistant organization, 3 commits to home-assistant") @@ -752,14 +754,15 @@ This page contains a list of people who have contributed in one way or another t - [Ryan Jarvis (@Cabalist)](https://github.com/Cabalist "1 total commits to the home-assistant organization, 1 commit to hassbian-scripts") - [Ryan Kladar (@Kladar)](https://github.com/Kladar "1 total commits to the home-assistant organization, 1 commit to hassos") - [Ryan Kraus (@rmkraus)](https://github.com/rmkraus "193 total commits to the home-assistant organization, 163 commits to home-assistant, 15 commits to home-assistant.io, 14 commits to home-assistant-polymer, 1 commit to home-assistant-notebooks") -- [Ryan McLean (@ryanm101)](https://github.com/ryanm101 "97 total commits to the home-assistant organization, 75 commits to hassio-cli, 16 commits to home-assistant, 6 commits to home-assistant.io") +- [Ryan McLean (@ryanm101)](https://github.com/ryanm101 "99 total commits to the home-assistant organization, 77 commits to hassio-cli, 16 commits to home-assistant, 6 commits to home-assistant.io") - [Ryan Turner (@turnrye)](https://github.com/turnrye "6 total commits to the home-assistant organization, 6 commits to home-assistant") - [Sabesto (@Sabesto)](https://github.com/Sabesto "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Sacha Telgenhof (@stelgenhof)](https://github.com/stelgenhof "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Sam Holmes (@sam3d)](https://github.com/sam3d "4 total commits to the home-assistant organization, 4 commits to pi-gen") - [sam-io (@sam-io)](https://github.com/sam-io "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [sander76 (@sander76)](https://github.com/sander76 "42 total commits to the home-assistant organization, 38 commits to home-assistant, 4 commits to home-assistant.io") +- [sander76 (@sander76)](https://github.com/sander76 "43 total commits to the home-assistant organization, 39 commits to home-assistant, 4 commits to home-assistant.io") - [sbYm (@GongT)](https://github.com/GongT "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") +- [schumpeter2 (@schumpeter2)](https://github.com/schumpeter2 "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Scott (@lostage)](https://github.com/lostage "1 total commits to the home-assistant organization, 1 commit to developers.home-assistant") - [Scott Bradshaw (@swbradshaw)](https://github.com/swbradshaw "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Scott Griffin (@scottocs11)](https://github.com/scottocs11 "7 total commits to the home-assistant organization, 7 commits to home-assistant.io") @@ -801,14 +804,13 @@ This page contains a list of people who have contributed in one way or another t - [Steven Looman (@StevenLooman)](https://github.com/StevenLooman "10 total commits to the home-assistant organization, 7 commits to home-assistant, 3 commits to netdisco") - [Stu Gott (@stu-gott)](https://github.com/stu-gott "9 total commits to the home-assistant organization, 5 commits to home-assistant.io, 4 commits to home-assistant") - [Stuart Williams (@stuwil)](https://github.com/stuwil "1 total commits to the home-assistant organization, 1 commit to netdisco") -- [Suresh Kalavala (@skalavala)](https://github.com/skalavala "32 total commits to the home-assistant organization, 32 commits to home-assistant.io") - [Sven\-Hendrik Haase (@svenstaro)](https://github.com/svenstaro "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [swanwila (@swanwila)](https://github.com/swanwila "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [System Tester (@systemtester)](https://github.com/systemtester "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Sytone (@sytone)](https://github.com/sytone "8 total commits to the home-assistant organization, 6 commits to home-assistant.io, 1 commit to hassio-build, 1 commit to developers.home-assistant") - [Sören Oldag (@soldag)](https://github.com/soldag "16 total commits to the home-assistant organization, 8 commits to home-assistant, 8 commits to home-assistant.io") - [Tabakhase (@tabakhase)](https://github.com/tabakhase "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") -- [tadly (@tadly)](https://github.com/tadly "6 total commits to the home-assistant organization, 6 commits to home-assistant") +- [tadly (@tadly)](https://github.com/tadly "7 total commits to the home-assistant organization, 7 commits to home-assistant") - [tango-foxtrot (@tango-foxtrot)](https://github.com/tango-foxtrot "1 total commits to the home-assistant organization, 1 commit to netdisco") - [Taylor Peet (@RePeet13)](https://github.com/RePeet13 "9 total commits to the home-assistant organization, 9 commits to home-assistant.io") - [Teagan Glenn (@Teagan42)](https://github.com/Teagan42 "59 total commits to the home-assistant organization, 49 commits to home-assistant, 9 commits to home-assistant.io, 1 commit to home-assistant-js") @@ -822,7 +824,7 @@ This page contains a list of people who have contributed in one way or another t - [thecynic (@thecynic)](https://github.com/thecynic "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [TheFrogDaddy (@TheFrogDaddy)](https://github.com/TheFrogDaddy "1 total commits to the home-assistant organization, 1 commit to appdaemon") - [thelittlefireman (@thelittlefireman)](https://github.com/thelittlefireman "3 total commits to the home-assistant organization, 3 commits to home-assistant") -- [themanieldaniel (@themanieldaniel)](https://github.com/themanieldaniel "13 total commits to the home-assistant organization, 13 commits to home-assistant.io") +- [themanieldaniel (@themanieldaniel)](https://github.com/themanieldaniel "14 total commits to the home-assistant organization, 14 commits to home-assistant.io") - [Theodor Lindquist (@theolind)](https://github.com/theolind "25 total commits to the home-assistant organization, 25 commits to home-assistant") - [Thiago Oliveira (@chilicheech)](https://github.com/chilicheech "4 total commits to the home-assistant organization, 4 commits to home-assistant") - [Thibault Cohen (@titilambert)](https://github.com/titilambert "53 total commits to the home-assistant organization, 39 commits to home-assistant, 13 commits to home-assistant.io, 1 commit to home-assistant-polymer") @@ -834,6 +836,7 @@ This page contains a list of people who have contributed in one way or another t - [Thomas Phillips (@thomas-phillips-nz)](https://github.com/thomas-phillips-nz "2 total commits to the home-assistant organization, 2 commits to pi-gen") - [Thomas Purchas (@thomaspurchas)](https://github.com/thomaspurchas "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") - [Thomas Pötsch (@thp-comnets)](https://github.com/thp-comnets "7 total commits to the home-assistant organization, 7 commits to libcoap") +- [Thomas Redmer (@Skorfulose)](https://github.com/Skorfulose "1 total commits to the home-assistant organization, 1 commit to hassio-cli") - [thrawnarn (@thrawnarn)](https://github.com/thrawnarn "10 total commits to the home-assistant organization, 5 commits to home-assistant, 4 commits to home-assistant.io, 1 commit to netdisco") - [ThUnD3r\|Gr33n (@thundergreen)](https://github.com/thundergreen "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") - [tijuca (@tijuca)](https://github.com/tijuca "106 total commits to the home-assistant organization, 106 commits to libcoap") @@ -852,7 +855,7 @@ This page contains a list of people who have contributed in one way or another t - [Tom (@Qu3uk)](https://github.com/Qu3uk "4 total commits to the home-assistant organization, 4 commits to home-assistant.io") - [Tom Dickman (@tdickman)](https://github.com/tdickman "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [Tom Duijf (@tomduijf)](https://github.com/tomduijf "70 total commits to the home-assistant organization, 53 commits to home-assistant, 9 commits to home-assistant.io, 6 commits to home-assistant-polymer, 2 commits to netdisco") -- [Tom Harris (@teharris1)](https://github.com/teharris1 "27 total commits to the home-assistant organization, 18 commits to home-assistant, 9 commits to home-assistant.io") +- [Tom Harris (@teharris1)](https://github.com/teharris1 "28 total commits to the home-assistant organization, 18 commits to home-assistant, 10 commits to home-assistant.io") - [Tom Hoover (@tomhoover)](https://github.com/tomhoover "3 total commits to the home-assistant organization, 3 commits to home-assistant.io") - [Tom Matheussen (@Tommatheussen)](https://github.com/Tommatheussen "13 total commits to the home-assistant organization, 6 commits to home-assistant, 4 commits to home-assistant-polymer, 3 commits to home-assistant.io") - [Tom Usher (@tomusher)](https://github.com/tomusher "1 total commits to the home-assistant organization, 1 commit to netdisco") @@ -873,6 +876,7 @@ This page contains a list of people who have contributed in one way or another t - [Tõnis Tobre (@tobre6)](https://github.com/tobre6 "1 total commits to the home-assistant organization, 1 commit to homebridge-homeassistant") - [uchagani (@uchagani)](https://github.com/uchagani "8 total commits to the home-assistant organization, 7 commits to home-assistant, 1 commit to home-assistant-polymer") - [Uli (@uehler)](https://github.com/uehler "5 total commits to the home-assistant organization, 5 commits to home-assistant.io") +- [ultratoto14 (@ultratoto14)](https://github.com/ultratoto14 "1 total commits to the home-assistant organization, 1 commit to netdisco") - [UnrealKazu (@UnrealKazu)](https://github.com/UnrealKazu "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [upsert (@upsert)](https://github.com/upsert "1 total commits to the home-assistant organization, 1 commit to netdisco") - [User5981 (@User5981)](https://github.com/User5981 "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") @@ -881,7 +885,7 @@ This page contains a list of people who have contributed in one way or another t - [Victor Cerutti (@victorcerutti)](https://github.com/victorcerutti "3 total commits to the home-assistant organization, 3 commits to home-assistant-polymer") - [Viet Dzung (@dzungpv)](https://github.com/dzungpv "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Vignesh Venkat (@vickyg3)](https://github.com/vickyg3 "11 total commits to the home-assistant organization, 7 commits to home-assistant, 4 commits to home-assistant.io") -- [Ville Skyttä (@scop)](https://github.com/scop "106 total commits to the home-assistant organization, 70 commits to home-assistant, 11 commits to netdisco, 11 commits to home-assistant.io, 4 commits to hassio-addons, 3 commits to hassio-cli, 2 commits to hassio-build, 2 commits to developers.home-assistant, 2 commits to home-assistant-polymer, 1 commit to hassio") +- [Ville Skyttä (@scop)](https://github.com/scop "109 total commits to the home-assistant organization, 71 commits to home-assistant, 13 commits to home-assistant.io, 11 commits to netdisco, 4 commits to hassio-addons, 3 commits to hassio-cli, 2 commits to home-assistant-polymer, 2 commits to hassio-build, 2 commits to developers.home-assistant, 1 commit to hassio") - [Villányi Bálint (@villanyibalint)](https://github.com/villanyibalint "1 total commits to the home-assistant organization, 1 commit to home-assistant-polymer") - [Vincent Van Den Berghe (@vandenberghev)](https://github.com/vandenberghev "3 total commits to the home-assistant organization, 3 commits to home-assistant") - [viswa-swami (@viswa-swami)](https://github.com/viswa-swami "9 total commits to the home-assistant organization, 9 commits to home-assistant") @@ -918,4 +922,4 @@ This page contains a list of people who have contributed in one way or another t This page is irregularly updated using the [`credits_generator` tool](https://github.com/home-assistant/home-assistant.github.io/tree/next/credits_generator). If you think that you are missing, please let us know. -This page was last updated Friday, September 21st 2018, 7:49:45 pm UTC. +This page was last updated Friday, September 28th 2018, 8:02:13 pm UTC. From 32e147b2681397f92934732cc83fd6dfd352c875 Mon Sep 17 00:00:00 2001 From: Till Schulte-Coerne Date: Sun, 30 Sep 2018 09:11:01 +0200 Subject: [PATCH 007/114] Added DPT-7, 9, 12, 13 and 14 (#6374) See https://github.com/XKNX/xknx/blob/master/xknx/devices/remote_value_sensor.py#L44-L54 for details. As a newbie it took me a while to find this out. So I thought it might be good for others to add it to the documentation. --- source/_components/sensor.knx.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.knx.markdown b/source/_components/sensor.knx.markdown index 6e0921c341a..624eb8a2073 100644 --- a/source/_components/sensor.knx.markdown +++ b/source/_components/sensor.knx.markdown @@ -33,7 +33,7 @@ sensor: - **address** (*Required*): KNX group address of the sensor. - **name** (*Optional*): A name for this device used within Home Assistant. -- **type** (*Optional*): "percent", "temperature", "humidity", "illuminance", "brightness", "speed_ms", "current", "power", "electric_current", "electric_potential", "energy", "frequency", "heatflowrate", "phaseanglerad", "phaseangledeg", "powerfactor" or "speed". +- **type** (*Optional*): "percent", "temperature", "humidity", "illuminance", "brightness", "speed_ms", "current", "power", "electric_current", "electric_potential", "energy", "frequency", "heatflowrate", "phaseanglerad", "phaseangledeg", "powerfactor", "speed", "DPT-7", "DPT-9", "DPT-12", "DPT-13" or "DPT-14". ## {% linkable_title Full example %} From 4e017eccb64b51202c1eca5a08d9f18a9df6aca6 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 30 Sep 2018 10:28:04 +0200 Subject: [PATCH 008/114] Release 79.1 --- _config.yml | 6 ++--- source/_posts/2018-10-01-release-79.markdown | 24 ++++++++++++++++++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/_config.yml b/_config.yml index 422f2e62802..2579a4eac94 100644 --- a/_config.yml +++ b/_config.yml @@ -142,13 +142,13 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 79 -current_patch_version: 0 -date_released: 2018-09-28 +current_patch_version: 1 +date_released: 2018-09-30 # 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: "" +patch_version_notes: "release-0791---september-30" # Minor release (Example #release-0431---april-25): # Date we moved to Discourse for comments diff --git a/source/_posts/2018-10-01-release-79.markdown b/source/_posts/2018-10-01-release-79.markdown index 6676be9507b..e3bca1283c4 100644 --- a/source/_posts/2018-10-01-release-79.markdown +++ b/source/_posts/2018-10-01-release-79.markdown @@ -56,6 +56,30 @@ Oh, and yes, there is also some cool new integrations. Support has been added fo - GeoJSON platform ([@exxamalte] - [#16610]) ([geo_location docs]) (new-platform) - Add linky sensor ([@tiste] - [#16468]) ([sensor.linky docs]) (new-platform) +## {% linkable_title Release 0.79.1 - September 30 %} + +- Optimize Ring Sensors platform setup ([@awarecan] - [#16886]) ([binary_sensor.ring docs]) ([sensor.ring docs]) +- Fix exception during history_stats startup ([@amelchio] - [#16932]) ([sensor.history_stats docs]) +- Override unique_id of NestActivityZoneSensor ([@awarecan] - [#16961]) ([binary_sensor.nest docs]) +- Fix ISY blocking bug ([@OverloadUT] - [#16978]) ([light.isy994 docs]) +- Bump zm-py to 0.0.4 ([@rohankapoorcom] - [#16979]) ([zoneminder docs]) + +[#16886]: https://github.com/home-assistant/home-assistant/pull/16886 +[#16932]: https://github.com/home-assistant/home-assistant/pull/16932 +[#16961]: https://github.com/home-assistant/home-assistant/pull/16961 +[#16978]: https://github.com/home-assistant/home-assistant/pull/16978 +[#16979]: https://github.com/home-assistant/home-assistant/pull/16979 +[@OverloadUT]: https://github.com/OverloadUT +[@amelchio]: https://github.com/amelchio +[@awarecan]: https://github.com/awarecan +[@rohankapoorcom]: https://github.com/rohankapoorcom +[binary_sensor.nest docs]: /components/binary_sensor.nest/ +[binary_sensor.ring docs]: /components/binary_sensor.ring/ +[light.isy994 docs]: /components/light.isy994/ +[sensor.history_stats docs]: /components/sensor.history_stats/ +[sensor.ring docs]: /components/sensor.ring/ +[zoneminder docs]: /components/zoneminder/ + ## {% linkable_title If you need help... %} ...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. From 9e00c9ac0a567c54289021dc5a0d8c357a18717d Mon Sep 17 00:00:00 2001 From: sjabby Date: Sun, 30 Sep 2018 13:42:02 +0200 Subject: [PATCH 009/114] Update example to reflect current syntax (#6382) --- source/_cookbook/automation_flashing_lights.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_cookbook/automation_flashing_lights.markdown b/source/_cookbook/automation_flashing_lights.markdown index 5a55323eac1..38b66bcdd88 100644 --- a/source/_cookbook/automation_flashing_lights.markdown +++ b/source/_cookbook/automation_flashing_lights.markdown @@ -54,7 +54,7 @@ automation: condition: condition: state entity_id: switch.AlmSnd1 - to: 'off' + state: 'off' action: service: script.turn_off entity_id: script.flash_room1 From 82005d0c05efa575790b23e78db12cdf69d86d33 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 30 Sep 2018 15:53:07 +0200 Subject: [PATCH 010/114] Fix release notes link --- _config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_config.yml b/_config.yml index 2579a4eac94..1c1c6d64c5e 100644 --- a/_config.yml +++ b/_config.yml @@ -148,7 +148,7 @@ date_released: 2018-09-30 # 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-0791---september-30" +patch_version_notes: "#release-0791---september-30" # Minor release (Example #release-0431---april-25): # Date we moved to Discourse for comments From 5465025df8ede6540ced6d4e72f21c8d6fefc672 Mon Sep 17 00:00:00 2001 From: Jorim Tielemans Date: Sun, 30 Sep 2018 17:03:09 +0200 Subject: [PATCH 011/114] real life -> real-life (#6384) --- source/_components/alarm_control_panel.manual_mqtt.markdown | 2 +- source/_components/binary_sensor.command_line.markdown | 2 +- source/_components/binary_sensor.http.markdown | 2 +- source/_components/binary_sensor.rest.markdown | 2 +- source/_components/binary_sensor.template.markdown | 2 +- source/_components/binary_sensor.trend.markdown | 2 +- source/_components/camera.generic.markdown | 2 +- source/_components/cover.command_line.markdown | 2 +- source/_components/cover.mqtt.markdown | 2 +- source/_components/cover.template.markdown | 2 +- source/_components/fan.mqtt.markdown | 2 +- source/_components/light.mqtt.markdown | 2 +- source/_components/light.mqtt_json.markdown | 2 +- source/_components/light.mqtt_template.markdown | 2 +- source/_components/light.rpi_gpio_pwm.markdown | 2 +- source/_components/light.template.markdown | 2 +- source/_components/lock.mqtt.markdown | 2 +- source/_components/sensor.alpha_vantage.markdown | 2 +- source/_components/sensor.command_line.markdown | 2 +- source/_components/sensor.file.markdown | 2 +- source/_components/sensor.mqtt.markdown | 2 +- source/_components/sensor.radarr.markdown | 2 +- source/_components/sensor.rest.markdown | 2 +- source/_components/sensor.scrape.markdown | 2 +- source/_components/sensor.sonarr.markdown | 2 +- source/_components/sensor.sql.markdown | 2 +- source/_components/sensor.tcp.markdown | 2 +- source/_components/sensor.tellstick.markdown | 2 +- source/_components/sensor.template.markdown | 2 +- source/_components/sensor.yahoo_finance.markdown | 2 +- source/_components/spaceapi.markdown | 2 +- source/_components/switch.command_line.markdown | 2 +- source/_components/switch.mqtt.markdown | 2 +- source/_components/switch.template.markdown | 2 +- source/_components/switch.wake_on_lan.markdown | 2 +- 35 files changed, 35 insertions(+), 35 deletions(-) diff --git a/source/_components/alarm_control_panel.manual_mqtt.markdown b/source/_components/alarm_control_panel.manual_mqtt.markdown index 5ceaa64e3a0..2e25b97ace3 100644 --- a/source/_components/alarm_control_panel.manual_mqtt.markdown +++ b/source/_components/alarm_control_panel.manual_mqtt.markdown @@ -94,7 +94,7 @@ alarm_control_panel: ## {% linkable_title Examples %} -Refer to the [Manual Alarm Control page](/components/alarm_control_panel.manual/#examples) for some real life examples of how to use this panel. +Refer to the [Manual Alarm Control page](/components/alarm_control_panel.manual/#examples) for some real-life examples of how to use this panel. ## {% linkable_title MQTT Control %} diff --git a/source/_components/binary_sensor.command_line.markdown b/source/_components/binary_sensor.command_line.markdown index f3f8af7f3e3..c206c3cb927 100644 --- a/source/_components/binary_sensor.command_line.markdown +++ b/source/_components/binary_sensor.command_line.markdown @@ -40,7 +40,7 @@ Configuration variables: ## {% linkable_title Examples %} -In this section you find some real life examples of how to use this sensor. +In this section you find some real-life examples of how to use this sensor. ### {% linkable_title SickRage %} diff --git a/source/_components/binary_sensor.http.markdown b/source/_components/binary_sensor.http.markdown index c2442aa881f..d827e126003 100644 --- a/source/_components/binary_sensor.http.markdown +++ b/source/_components/binary_sensor.http.markdown @@ -60,7 +60,7 @@ $ curl -X GET -H "x-ha-access: YOUR_PASSWORD" \ ## {% linkable_title Examples %} -In this section you find some real life examples of how to use this sensor. Beside `curl`. +In this section you find some real-life examples of how to use this sensor. Beside `curl`. ### {% linkable_title Using Python request module %} diff --git a/source/_components/binary_sensor.rest.markdown b/source/_components/binary_sensor.rest.markdown index d882e5b4064..488643e18c4 100644 --- a/source/_components/binary_sensor.rest.markdown +++ b/source/_components/binary_sensor.rest.markdown @@ -104,7 +104,7 @@ Make sure that the URL exactly matches your endpoint or resource. ## {% linkable_title Examples %} -In this section you find some real life examples of how to use this sensor. +In this section you find some real-life examples of how to use this sensor. ### {% linkable_title aREST sensor %} diff --git a/source/_components/binary_sensor.template.markdown b/source/_components/binary_sensor.template.markdown index 7cc7af6285f..dbb51d60479 100644 --- a/source/_components/binary_sensor.template.markdown +++ b/source/_components/binary_sensor.template.markdown @@ -93,7 +93,7 @@ result: ## {% linkable_title Examples %} -In this section you find some real life examples of how to use this sensor. +In this section you find some real-life examples of how to use this sensor. ### {% linkable_title Sensor Threshold %} diff --git a/source/_components/binary_sensor.trend.markdown b/source/_components/binary_sensor.trend.markdown index 7530a164e80..11f48b0f992 100644 --- a/source/_components/binary_sensor.trend.markdown +++ b/source/_components/binary_sensor.trend.markdown @@ -52,7 +52,7 @@ The current number of stored samples is displayed on the States page. ## {% linkable_title Examples %} -In this section you find some real life examples of how to use this sensor. +In this section you find some real-life examples of how to use this sensor. This example indicates `true` if the sun is still rising: diff --git a/source/_components/camera.generic.markdown b/source/_components/camera.generic.markdown index e8c457086f5..99f7e03aa7e 100644 --- a/source/_components/camera.generic.markdown +++ b/source/_components/camera.generic.markdown @@ -48,7 +48,7 @@ Configuration variables: ## {% linkable_title Examples %} -In this section you find some real life examples of how to use this camera platform. +In this section you find some real-life examples of how to use this camera platform. ### {% linkable_title Weather graph from yr.no %} diff --git a/source/_components/cover.command_line.markdown b/source/_components/cover.command_line.markdown index e6c08e5496b..b91c4a645ba 100644 --- a/source/_components/cover.command_line.markdown +++ b/source/_components/cover.command_line.markdown @@ -41,7 +41,7 @@ Configuration variables: ## {% linkable_title Examples %} -In this section you find some real life examples of how to use this sensor. +In this section you find some real-life examples of how to use this sensor. ### {% linkable_title Full configuration %} diff --git a/source/_components/cover.mqtt.markdown b/source/_components/cover.mqtt.markdown index 81358f87762..4f34c2c1c95 100644 --- a/source/_components/cover.mqtt.markdown +++ b/source/_components/cover.mqtt.markdown @@ -159,7 +159,7 @@ tilt_invert_state: ## {% linkable_title Examples %} -In this section you will find some real life examples of how to use this platform. +In this section you will find some real-life examples of how to use this platform. ### {% linkable_title Full configuration without tilt %} diff --git a/source/_components/cover.template.markdown b/source/_components/cover.template.markdown index 77748e12b6c..c6eb6392f20 100644 --- a/source/_components/cover.template.markdown +++ b/source/_components/cover.template.markdown @@ -126,7 +126,7 @@ when [`tilt_template`](#tilt_template) is not specified or when the ## {% linkable_title Examples %} -In this section you will find some real life examples of how to use this cover. +In this section you will find some real-life examples of how to use this cover. ### {% linkable_title Garage Door %} diff --git a/source/_components/fan.mqtt.markdown b/source/_components/fan.mqtt.markdown index 45fa55d41bc..a3be2c04846 100644 --- a/source/_components/fan.mqtt.markdown +++ b/source/_components/fan.mqtt.markdown @@ -150,7 +150,7 @@ Make sure that your topics match exactly. `some-topic/` and `some-topic` are dif ## {% linkable_title Examples %} -In this section you find some real life examples of how to use this fan. +In this section you find some real-life examples of how to use this fan. ### {% linkable_title Full configuration %} diff --git a/source/_components/light.mqtt.markdown b/source/_components/light.mqtt.markdown index b7ca1ff13a5..208b333706f 100644 --- a/source/_components/light.mqtt.markdown +++ b/source/_components/light.mqtt.markdown @@ -205,7 +205,7 @@ payload_not_available: ## {% linkable_title Examples %} -In this section you will find some real life examples of how to use this sensor. +In this section you will find some real-life examples of how to use this sensor. ### {% linkable_title Brightness and RGB support %} diff --git a/source/_components/light.mqtt_json.markdown b/source/_components/light.mqtt_json.markdown index 3a176467ddc..49dfbd502ef 100644 --- a/source/_components/light.mqtt_json.markdown +++ b/source/_components/light.mqtt_json.markdown @@ -177,7 +177,7 @@ payload_not_available: ## {% linkable_title Examples %} -In this section you find some real life examples of how to use this sensor. +In this section you find some real-life examples of how to use this sensor. ### {% linkable_title Brightness and RGB support %} diff --git a/source/_components/light.mqtt_template.markdown b/source/_components/light.mqtt_template.markdown index 11b43726724..27f5e0f0b33 100644 --- a/source/_components/light.mqtt_template.markdown +++ b/source/_components/light.mqtt_template.markdown @@ -137,7 +137,7 @@ payload_not_available: ## {% linkable_title Examples %} -In this section you find some real life examples of how to use this light. +In this section you find some real-life examples of how to use this light. ### {% linkable_title Simple string payload %} diff --git a/source/_components/light.rpi_gpio_pwm.markdown b/source/_components/light.rpi_gpio_pwm.markdown index 1ea0438332d..d292b213a54 100644 --- a/source/_components/light.rpi_gpio_pwm.markdown +++ b/source/_components/light.rpi_gpio_pwm.markdown @@ -45,7 +45,7 @@ Configuration variables: ## {% linkable_title Examples %} -In this section you find some real life examples of how to use this sensor. +In this section you find some real-life examples of how to use this sensor. ### {% linkable_title RGB LED connected to PCA9685 controller %} diff --git a/source/_components/light.template.markdown b/source/_components/light.template.markdown index 9d1315b3106..c66f688365c 100644 --- a/source/_components/light.template.markdown +++ b/source/_components/light.template.markdown @@ -93,7 +93,7 @@ result: ## {% linkable_title Examples %} -In this section you will find some real life examples of how to use this light. +In this section you will find some real-life examples of how to use this light. ### {% linkable_title Theater Volume Control %} diff --git a/source/_components/lock.mqtt.markdown b/source/_components/lock.mqtt.markdown index a1689fbd199..7009e9224e9 100644 --- a/source/_components/lock.mqtt.markdown +++ b/source/_components/lock.mqtt.markdown @@ -95,7 +95,7 @@ Make sure that your topics match exactly. `some-topic/` and `some-topic` are dif ## {% linkable_title Examples %} -In this section you will find some real life examples of how to use this lock. +In this section you will find some real-life examples of how to use this lock. ### {% linkable_title Full configuration %} diff --git a/source/_components/sensor.alpha_vantage.markdown b/source/_components/sensor.alpha_vantage.markdown index 8b21b309732..66795d30e1d 100644 --- a/source/_components/sensor.alpha_vantage.markdown +++ b/source/_components/sensor.alpha_vantage.markdown @@ -78,7 +78,7 @@ foreign_exchange: ## {% linkable_title Examples %} -In this section you find some real life examples of how to use this sensor. +In this section you find some real-life examples of how to use this sensor. ### {% linkable_title Google and the exchange rate for Bitcoin %} diff --git a/source/_components/sensor.command_line.markdown b/source/_components/sensor.command_line.markdown index 94e85385128..04f31df2ae6 100644 --- a/source/_components/sensor.command_line.markdown +++ b/source/_components/sensor.command_line.markdown @@ -39,7 +39,7 @@ Configuration variables: ## {% linkable_title Examples %} -In this section you find some real life examples of how to use this sensor. +In this section you find some real-life examples of how to use this sensor. ### {% linkable_title Hard drive temperature %} diff --git a/source/_components/sensor.file.markdown b/source/_components/sensor.file.markdown index 627e7f28ff2..3e8ea059e98 100644 --- a/source/_components/sensor.file.markdown +++ b/source/_components/sensor.file.markdown @@ -36,7 +36,7 @@ Configuration variables: ## {% linkable_title Examples %} -In this section you find some real life examples of how to use this sensor. +In this section you find some real-life examples of how to use this sensor. ### {% linkable_title Entries as JSON %} diff --git a/source/_components/sensor.mqtt.markdown b/source/_components/sensor.mqtt.markdown index 0b44200064a..78f4f9c3945 100644 --- a/source/_components/sensor.mqtt.markdown +++ b/source/_components/sensor.mqtt.markdown @@ -95,7 +95,7 @@ device_class: ## {% linkable_title Examples %} -In this section you find some real life examples of how to use this sensor. +In this section you find some real-life examples of how to use this sensor. ### {% linkable_title JSON attributes configuration %} diff --git a/source/_components/sensor.radarr.markdown b/source/_components/sensor.radarr.markdown index 0ec88883e51..11635a8d18d 100644 --- a/source/_components/sensor.radarr.markdown +++ b/source/_components/sensor.radarr.markdown @@ -45,7 +45,7 @@ Configuration variables: ## {% linkable_title Examples %} -In this section you find some real life examples of how to use this sensor. +In this section you find some real-life examples of how to use this sensor. ### {% linkable_title Get Episodes airing in next 2 days %} diff --git a/source/_components/sensor.rest.markdown b/source/_components/sensor.rest.markdown index d9594344e8b..7e756ce6a3d 100644 --- a/source/_components/sensor.rest.markdown +++ b/source/_components/sensor.rest.markdown @@ -109,7 +109,7 @@ $ curl -X GET http://192.168.1.31/temperature/ ## {% linkable_title Examples %} -In this section you find some real life examples of how to use this sensor. +In this section you find some real-life examples of how to use this sensor. ### {% linkable_title External IP address %} diff --git a/source/_components/sensor.scrape.markdown b/source/_components/sensor.scrape.markdown index 047dd0e9562..1ae233ebdf6 100644 --- a/source/_components/sensor.scrape.markdown +++ b/source/_components/sensor.scrape.markdown @@ -39,7 +39,7 @@ Configuration variables: ## {% linkable_title Examples %} -In this section you find some real life examples of how to use this sensor. There is also a [Jupyter notebook](http://nbviewer.jupyter.org/github/home-assistant/home-assistant-notebooks/blob/master/web-scraping.ipynb) available for this example to give you a bit more insight. +In this section you find some real-life examples of how to use this sensor. There is also a [Jupyter notebook](http://nbviewer.jupyter.org/github/home-assistant/home-assistant-notebooks/blob/master/web-scraping.ipynb) available for this example to give you a bit more insight. ### {% linkable_title Home Assistant %} diff --git a/source/_components/sensor.sonarr.markdown b/source/_components/sensor.sonarr.markdown index 837dde42b1d..b752a2a702d 100644 --- a/source/_components/sensor.sonarr.markdown +++ b/source/_components/sensor.sonarr.markdown @@ -48,7 +48,7 @@ Configuration variables: ## {% linkable_title Examples %} -In this section you find some real life examples of how to use this sensor. +In this section you find some real-life examples of how to use this sensor. ### {% linkable_title Get Episodes airing in next 2 days %} diff --git a/source/_components/sensor.sql.markdown b/source/_components/sensor.sql.markdown index 248b3caa8c0..612df43f726 100644 --- a/source/_components/sensor.sql.markdown +++ b/source/_components/sensor.sql.markdown @@ -68,7 +68,7 @@ queries: ## {% linkable_title Examples %} -In this section you find some real life examples of how to use this sensor. +In this section you find some real-life examples of how to use this sensor. ### {% linkable_title Current state of an entity %} diff --git a/source/_components/sensor.tcp.markdown b/source/_components/sensor.tcp.markdown index 1d27c668827..f3638d48bd8 100644 --- a/source/_components/sensor.tcp.markdown +++ b/source/_components/sensor.tcp.markdown @@ -39,7 +39,7 @@ Configuration options for the a TCP Sensor: ## {% linkable_title Examples %} -In this section you find some real life examples of how to use this sensor. +In this section you find some real-life examples of how to use this sensor. ### {% linkable_title EBUSd %} diff --git a/source/_components/sensor.tellstick.markdown b/source/_components/sensor.tellstick.markdown index c980118ed4e..d7f07a92d7b 100644 --- a/source/_components/sensor.tellstick.markdown +++ b/source/_components/sensor.tellstick.markdown @@ -33,7 +33,7 @@ Configuration variables: ## {% linkable_title Examples %} -In this section you find some real life examples of how to use this sensor. +In this section you find some real-life examples of how to use this sensor. ### {% linkable_title Full configuration %} diff --git a/source/_components/sensor.template.markdown b/source/_components/sensor.template.markdown index e22d329efb0..14f2b07ff17 100644 --- a/source/_components/sensor.template.markdown +++ b/source/_components/sensor.template.markdown @@ -83,7 +83,7 @@ If you are using the state of a platform that takes extra time to load, the Temp ## {% linkable_title Examples %} -In this section you find some real life examples of how to use this sensor. +In this section you find some real-life examples of how to use this sensor. ### {% linkable_title Sun Angle %} diff --git a/source/_components/sensor.yahoo_finance.markdown b/source/_components/sensor.yahoo_finance.markdown index 937dc442b44..2d6c34297d3 100644 --- a/source/_components/sensor.yahoo_finance.markdown +++ b/source/_components/sensor.yahoo_finance.markdown @@ -45,7 +45,7 @@ symbols: ## {% linkable_title Examples %} -In this section you find some real life examples of how to use this sensor. +In this section you find some real-life examples of how to use this sensor. ### {% linkable_title Red Hat and Google %} diff --git a/source/_components/spaceapi.markdown b/source/_components/spaceapi.markdown index bd5c356c337..1df0800feb5 100644 --- a/source/_components/spaceapi.markdown +++ b/source/_components/spaceapi.markdown @@ -115,7 +115,7 @@ sensors: ## {% linkable_title Examples %} -In this section you find some real life examples of how to use this component. +In this section you find some real-life examples of how to use this component. ### {% linkable_title Eastermundigen %} diff --git a/source/_components/switch.command_line.markdown b/source/_components/switch.command_line.markdown index 3f3ef8d0220..e2b86da84a5 100644 --- a/source/_components/switch.command_line.markdown +++ b/source/_components/switch.command_line.markdown @@ -44,7 +44,7 @@ When set, the `friendly_name` had been previously used for API calls and backend ## {% linkable_title Examples %} -In this section you find some real life examples of how to use this switch. +In this section you find some real-life examples of how to use this switch. ### {% linkable_title aREST device %} diff --git a/source/_components/switch.mqtt.markdown b/source/_components/switch.mqtt.markdown index ff824f97137..b5d06ee72eb 100644 --- a/source/_components/switch.mqtt.markdown +++ b/source/_components/switch.mqtt.markdown @@ -111,7 +111,7 @@ Make sure that your topic matches exactly. `some-topic/` and `some-topic` are di ## {% linkable_title Examples %} -In this section you will find some real life examples of how to use this sensor. +In this section you will find some real-life examples of how to use this sensor. ### {% linkable_title Full configuration %} diff --git a/source/_components/switch.template.markdown b/source/_components/switch.template.markdown index 6e968992407..9051ca4bb46 100644 --- a/source/_components/switch.template.markdown +++ b/source/_components/switch.template.markdown @@ -84,7 +84,7 @@ If you are using the state of a platform that takes extra time to load, the Temp ## {% linkable_title Examples %} -In this section you find some real life examples of how to use this switch. +In this section you find some real-life examples of how to use this switch. ### {% linkable_title Copy Switch %} diff --git a/source/_components/switch.wake_on_lan.markdown b/source/_components/switch.wake_on_lan.markdown index c487c602dac..931befede70 100644 --- a/source/_components/switch.wake_on_lan.markdown +++ b/source/_components/switch.wake_on_lan.markdown @@ -41,7 +41,7 @@ Configuration variables: ## {% linkable_title Examples %} -Here are some real life examples of how to use the **turn_off** variable. +Here are some real-life examples of how to use the **turn_off** variable. ### {% linkable_title Suspending Linux %} From 77eef8927f2f26028815089c4261639c9e4c2297 Mon Sep 17 00:00:00 2001 From: Jorim Tielemans Date: Sun, 30 Sep 2018 20:38:30 +0200 Subject: [PATCH 012/114] Updated Configuration Variables sections (#5929) * Updated Configuration Variables sections Squashed commit of the following: commit a95d114183553ad3850e6ca2d688d622388ee666 Author: Jorim Tielemans Date: Mon Jul 30 20:08:02 2018 +0200 Clean some things up commit db63a37dc97ad7735b78b7078b09343a9e9d1981 Author: Jorim Tielemans Date: Mon Jul 30 18:28:20 2018 +0200 Revert "The rest for this PR" This reverts commit bb1b2f9a2f289e79198142f481305a301084ae29. commit df90512482f45195e2da06e08fa7d537df0be710 Merge: deef4fd4d4 e4ed00d287 Author: Jorim Tielemans Date: Mon Jul 30 17:05:27 2018 +0200 Merge remote-tracking branch 'upstream/current' into patch-1 commit deef4fd4d4379407fd668be1947c66ed3e87eff5 Author: Jorim Tielemans Date: Sun Jul 29 12:40:01 2018 +0200 Fix Liquid error commit 74369fbbc8e5a302e6e7b8d26bfac6150d731232 Author: Jorim Tielemans Date: Sun Jul 29 12:37:03 2018 +0200 Update Configuration Variables sections commit 6e50eaa013e8ff240763b52557b5f74f8d620568 Author: Jorim Tielemans Date: Sun Jul 29 11:52:51 2018 +0200 Fix empty keys commit 7e4852e4738a55cebd17ec71d4a8fb217ae10ac3 Author: Jorim Tielemans Date: Sun Jul 29 11:41:46 2018 +0200 Update binary_sensor.netatmo.markdown commit e1d83df83eedbb446c412ea97829d0970579438c Author: Jorim Tielemans Date: Sun Jul 29 11:28:39 2018 +0200 More updated Configuration Variables sections commit 66cbe391812488ec930ce8150cfc409950a02253 Author: Jorim Tielemans Date: Sat Jul 28 22:00:25 2018 +0200 Fix Liquid Exception sensor.speedtest commit bb1b2f9a2f289e79198142f481305a301084ae29 Author: Jorim Tielemans Date: Sat Jul 28 21:54:34 2018 +0200 The rest for this PR - Update components with new Configuration Variables section to have YAML block syntax - Fix wrong capitalised booleans commit 5e67726eb71b414e88b654128d193c892a6ae148 Author: Jorim Tielemans Date: Sat Jul 28 20:43:52 2018 +0200 Try multiline string in Cast Trying out a multiline string in a {% configuration %}-block. commit b8d34e9a8e8abfa1885a54a198b323b9de12d0c3 Author: Jorim Tielemans Date: Sat Jul 28 20:41:39 2018 +0200 Lint fixes etc. All default True/False capital letters have been fixed. Tried to reduce lines to 80 characters or less where possible. commit 88228b293ddef2630653c5636d2b75606106742b Author: Jorim Tielemans Date: Sat Jul 28 16:32:46 2018 +0200 Update notify.webostv.markdown commit 7204c1d637beeabefb4141faddd334b29da92bea Author: Jorim Tielemans Date: Sat Jul 28 16:15:18 2018 +0200 Fix capital letter commit 6e1b3db87b07c916df0d34983d333ad1d9faf1fc Author: Jorim Tielemans Date: Sat Jul 28 16:14:05 2018 +0200 Update media_player.webostv.markdown commit 89ee23565abab1dc7113f83a1cd680bcd26e430a Author: Jorim Tielemans Date: Sat Jul 28 16:08:59 2018 +0200 Update http.markdown commit 418f5cb7cd4e98592bfe6902276af881e0dac47b Author: Jorim Tielemans Date: Sat Jul 28 16:02:19 2018 +0200 Fix capital letter commit d5264c3c4f9b468b2f7b9b1eba786d108e1b88ef Author: Jorim Tielemans Date: Sat Jul 28 16:01:39 2018 +0200 Fix capital letter commit e4cd51271d1881adf8160497cddb638b285e505e Author: Jorim Tielemans Date: Sat Jul 28 16:01:08 2018 +0200 Update sensor.iota.markdown commit c18b25fddc062b35d9160a02df3377f152231020 Author: Jorim Tielemans Date: Sat Jul 28 16:01:01 2018 +0200 Fix capital letter commit 79a78f284a2280d1f2c8d007c072fbe8ce6655c8 Author: Jorim Tielemans Date: Sat Jul 28 15:56:22 2018 +0200 Update Configuration Variables section commit 0db5228080573b21f5570ce56e60e67d1004e0f1 Author: Jorim Tielemans Date: Sat Jul 28 15:54:47 2018 +0200 Update Configuration Variables section commit d5d26f16117a9cc74349dd77f98fdce53d7ca1cd Author: Jorim Tielemans Date: Sat Jul 28 15:54:14 2018 +0200 Update Configuration Variables section commit ab3f04511edbcc25a7f5f7e514b6a092a3cfcb68 Author: Jorim Tielemans Date: Sat Jul 28 15:52:50 2018 +0200 Update Configuration Variables section commit 37b2d1831d65c584be95daf49ea90022227984f7 Author: Jorim Tielemans Date: Sat Jul 28 15:51:29 2018 +0200 Update Configuration Variables section commit 39b3ecd7079dbf13576cd5306507b5f86c3ea9db Author: Jorim Tielemans Date: Sat Jul 28 15:50:53 2018 +0200 Update Configuration Variables section commit 823ea87d3a9da8dee2cb786bd1f64a6492537e80 Author: Jorim Tielemans Date: Sat Jul 28 15:50:11 2018 +0200 Update Configuration Variables section commit 6560a2bac06e2292f912f96143ce6e688f900280 Author: Jorim Tielemans Date: Sat Jul 28 15:49:53 2018 +0200 Update Configuration Variables section commit cc97df289b09bdb52123b775af6545eba8608cc1 Author: Jorim Tielemans Date: Sat Jul 28 15:47:23 2018 +0200 Update Configuration Variables section commit fdc881eb7a33f0ab1e4a8a5749c05c07df2ab7fd Author: Jorim Tielemans Date: Sat Jul 28 15:46:55 2018 +0200 Update Configuration Variables section commit 81e292c3e92a834c04ef577d2b1ab867d8d9db79 Author: Jorim Tielemans Date: Sat Jul 28 15:46:16 2018 +0200 Update Configuration Variables section commit 05d3481d1165ee89b3dc9a0342f1c2041c06e8ca Author: Jorim Tielemans Date: Sat Jul 28 15:45:25 2018 +0200 Update Configuration Variables section commit ef34f8c2f4eb17183fa0d7de8da90cca02f355ea Author: Jorim Tielemans Date: Sat Jul 28 15:41:08 2018 +0200 Update Configuration Variables section commit 49f69a36e46585d14396f284b0b8a016add8efe9 Author: Jorim Tielemans Date: Sat Jul 28 15:16:27 2018 +0200 Update Configuration Variables section commit 14732eeee06cc20f78af99035d8fbde02b7e2778 Author: Jorim Tielemans Date: Sat Jul 28 15:14:58 2018 +0200 Update Configuration Variables section commit e0f8578628d298730a258f3597c00d8d47748cc4 Author: Jorim Tielemans Date: Sat Jul 28 15:11:56 2018 +0200 Update media_player.samsungtv.markdown commit 8be3c95f8e3acb39c73843816e43b66c3f1f9945 Author: Jorim Tielemans Date: Sat Jul 28 15:10:45 2018 +0200 Update Configuration Variables section commit 53b6672521dc6fb69a7ad25ac56def6a2e2bcdf4 Author: Jorim Tielemans Date: Sat Jul 28 15:10:40 2018 +0200 Update media_player.webostv.markdown commit 421e90392af3704ef1a2577ce9d35f3d7459b71e Author: Jorim Tielemans Date: Sat Jul 28 15:03:33 2018 +0200 Update Configuration Variables section commit 7f142fd359b693e4af872bdf1ecd6e98b82f694f Author: Jorim Tielemans Date: Sat Jul 28 14:59:54 2018 +0200 webOS brand fix + filename clarification commit 1f1051bcbc55ff96da69493823ac8d4676e3a738 Author: Jorim Tielemans Date: Sat Jul 28 14:52:29 2018 +0200 Update sensor.yr.markdown commit 8be62f4a620d624b27bb130ab8d2a09c66016b08 Author: Jorim Tielemans Date: Sat Jul 28 14:52:05 2018 +0200 Update Configuration Variables section commit 69c615b295dd86c0bba46154587c25ea7e0bfd27 Author: Jorim Tielemans Date: Sat Jul 28 14:50:57 2018 +0200 Update notify.webostv.markdown commit 4b1175e5653f217d2d5c332ef25f4f540a2052e1 Author: Jorim Tielemans Date: Sat Jul 28 14:50:30 2018 +0200 Update notify.html5.markdown commit 4ba06dd29db58b96e1cbfb149c00037f6b4be5c3 Author: Jorim Tielemans Date: Sat Jul 28 14:49:59 2018 +0200 Update image_processing.openalpr_local.markdown commit ec919d57810e5a1e82908c297222bfc64492da8b Author: Jorim Tielemans Date: Sat Jul 28 14:49:18 2018 +0200 Update image_processing.microsoft_face_detect.markdown commit da657b579fefb26061a52e1d06ff97ae8f08eefa Author: Jorim Tielemans Date: Sat Jul 28 14:42:46 2018 +0200 Update Configuration Variables section commit 3b066ba22bfa409011faebd9a52a3187614bd444 Author: Jorim Tielemans Date: Sat Jul 28 14:40:33 2018 +0200 Update Configuration Variables section commit 360c5422d783bc940962a93e41f82950570210ab Author: Jorim Tielemans Date: Sat Jul 28 14:38:54 2018 +0200 Update Configuration Variables section commit 7965ff8c7131bd646bea648c27a4eae861d1dc6d Author: Jorim Tielemans Date: Sat Jul 28 13:51:12 2018 +0200 Update Configuration Variables section commit 48d20dd4fa39d76e294f32b99de6e3d1b9eaf419 Author: Jorim Tielemans Date: Sat Jul 28 13:48:33 2018 +0200 Update Configuration Variables section commit 4c6efe7218c3e098f3091dbd05f9b76b1fd59882 Author: Jorim Tielemans Date: Sat Jul 28 13:40:33 2018 +0200 Update Configuration Variables section commit 8c45d8309ebfbe57c2a08332890da4f5b08231ea Author: Jorim Tielemans Date: Sat Jul 28 13:35:19 2018 +0200 Update Configuration Variables section commit bbfa64af6fa049553460524f3a983c4e803da15a Author: Jorim Tielemans Date: Sat Jul 28 13:33:14 2018 +0200 Newline commit f0577bb456c09b027cb11341e2a95b2bbab444aa Author: Jorim Tielemans Date: Sat Jul 28 13:32:54 2018 +0200 Fix typo commit 65f73ced0cfc453f77ee75d30e4a3ec788abba65 Author: Jorim Tielemans Date: Sat Jul 28 13:19:23 2018 +0200 Update notify.webostv.markdown commit 1a11c971bb409bbafebc04174f8dda3e32c711ce Author: Jorim Tielemans Date: Sat Jul 28 13:18:44 2018 +0200 Update notify.html5.markdown commit 46532335451a593bab6fa6e9953c880537d5713c Author: Jorim Tielemans Date: Sat Jul 28 13:18:04 2018 +0200 Update image_processing.openalpr_local.markdown commit ce9ca3453b33aa966f9f6716cd1e9330f3e3f458 Author: Jorim Tielemans Date: Sat Jul 28 13:15:05 2018 +0200 Update Configuration Variables section commit 6ae8a408894ba6c51b8c4cb545acc6405059bafa Author: Jorim Tielemans Date: Thu Jul 26 22:58:55 2018 +0200 Update Configuration Variables section commit c4bed222338ca3be5e471352579fb8e71254d5d4 Author: Jorim Tielemans Date: Thu Jul 26 22:56:35 2018 +0200 Update Configuration Variables section commit 9fe09afd30a1e67a9c5f0ac887630c26de694814 Author: Jorim Tielemans Date: Wed Jul 25 23:46:23 2018 +0200 Update Configuration Variables section commit 8efc72f10db4bf10bcaecc5c84d7f88263b710ae Author: Jorim Tielemans Date: Wed Jul 25 23:44:08 2018 +0200 Update image_processing.openalpr_cloud.markdown commit 52046e50645d7adb4d0a4cadc4151de54b7354aa Author: Jorim Tielemans Date: Wed Jul 25 23:43:52 2018 +0200 Update Configuration Variables section commit c7a9296ae3e7d3ef545117b17bd95513a0168c4b Author: Jorim Tielemans Date: Wed Jul 25 23:27:08 2018 +0200 Update image_processing.microsoft_face_detect.markdown commit 3b37dc0e11ac5344670225119ae6bbc9fff04af4 Author: Jorim Tielemans Date: Wed Jul 25 23:20:26 2018 +0200 Update Configuration Variables section commit 870cd41fef2b1c1c139642a291e9aaae14ae5c4c Author: Jorim Tielemans Date: Wed Jul 25 23:18:38 2018 +0200 Update image_processing.microsoft_face_identify.markdown commit 0f76212b24b425282a99483c6efaad2abdbd3cf0 Author: Jorim Tielemans Date: Wed Jul 25 23:17:09 2018 +0200 Update Configuration Variables section commit 73513b9e4e26263eb4d8b5fb86cf6326c3319b8c Author: Jorim Tielemans Date: Wed Jul 25 23:13:26 2018 +0200 Update image_processing.microsoft_face_detect.markdown commit c171a080b3bac291d05bcc4c4760b0d9529159d3 Author: Jorim Tielemans Date: Wed Jul 25 23:01:06 2018 +0200 Update image_processing.microsoft_face_detect.markdown commit 294a37f5847a227c33d5c9696f21a8bbe2288d83 Author: Jorim Tielemans Date: Wed Jul 25 21:46:14 2018 +0200 Update image_processing.microsoft_face_detect.markdown commit 9f4c3fad9e9ade578f205104bdac3d649c9d86fc Author: Jorim Tielemans Date: Wed Jul 25 21:21:17 2018 +0200 Update image_processing.microsoft_face_detect.markdown commit 11579aa61b08adbb1e599177eda54b579fc9b593 Author: Jorim Tielemans Date: Wed Jul 25 21:13:30 2018 +0200 Update camera.mjpeg.markdown commit e93f5db4b6bd94d8cb5b46a61c76d86c31f00c8f Author: Jorim Tielemans Date: Wed Jul 25 19:34:36 2018 +0200 Update Configuration Variables section commit 383b9ace663573473bdab467cd8697f7e330cda5 Author: Jorim Tielemans Date: Wed Jul 25 17:49:38 2018 +0200 Remove leftover line commit 7e2e72f78f2ae4603a5c9968372b453dc956a79b Author: Jorim Tielemans Date: Wed Jul 25 17:46:55 2018 +0200 Update Configuration Variables section * Remove encapsulation Double quotes were visible in the frontend. * Remove empty default value * :ambulance: Correcting types * :pencil2: Removes double italic --- source/_components/abode.markdown | 63 ++++++-- source/_components/alert.markdown | 106 +++++++++++--- source/_components/amcrest.markdown | 137 ++++++++++++++---- source/_components/automation.markdown | 11 +- .../binary_sensor.hikvision.markdown | 105 +++++++++++--- source/_components/binary_sensor.ihc.markdown | 35 +++-- source/_components/binary_sensor.iss.markdown | 18 ++- .../_components/binary_sensor.mqtt.markdown | 63 ++++++-- .../binary_sensor.netatmo.markdown | 60 +++++--- .../binary_sensor.pilight.markdown | 53 +++++-- .../_components/binary_sensor.random.markdown | 10 +- .../_components/binary_sensor.rest.markdown | 33 +++-- .../_components/binary_sensor.rfxtrx.markdown | 82 ++++++++--- .../_components/binary_sensor.trend.markdown | 91 +++++++++--- .../binary_sensor.workday.markdown | 64 ++++++-- source/_components/blink.markdown | 51 +++++-- source/_components/calendar.caldav.markdown | 54 +++++-- source/_components/calendar.google.markdown | 87 ++++++++--- source/_components/camera.mjpeg.markdown | 44 ++++-- source/_components/cast.markdown | 45 +++++- source/_components/cover.template.markdown | 26 ++-- .../device_tracker.tomato.markdown | 31 ++-- source/_components/history.markdown | 95 ++++++++---- source/_components/http.markdown | 77 ++++++---- source/_components/ihc.markdown | 76 +++++----- ..._processing.microsoft_face_detect.markdown | 45 ++++-- ...rocessing.microsoft_face_identify.markdown | 44 ++++-- .../image_processing.openalpr_cloud.markdown | 45 ++++-- .../image_processing.openalpr_local.markdown | 60 ++++++-- source/_components/input_datetime.markdown | 30 +++- source/_components/iota.markdown | 8 +- source/_components/joaoapps_join.markdown | 49 +++++-- source/_components/light.ihc.markdown | 29 ++-- source/_components/logbook.markdown | 75 +++++++--- source/_components/logger.markdown | 19 ++- .../_components/media_player.epson.markdown | 13 +- .../media_player.samsungtv.markdown | 57 ++++++-- .../_components/media_player.spotify.markdown | 68 ++++++--- .../_components/media_player.webostv.markdown | 96 ++++++++---- source/_components/microsoft_face.markdown | 54 +++++-- source/_components/notify.html5.markdown | 101 +++++++++---- .../_components/notify.joaoapps_join.markdown | 4 +- source/_components/notify.webostv.markdown | 40 +++-- source/_components/sensor.ihc.markdown | 17 ++- source/_components/sensor.iota.markdown | 4 +- source/_components/sensor.speedtest.markdown | 28 +++- .../_components/sensor.systemmonitor.markdown | 37 +++-- source/_components/sensor.version.markdown | 15 +- source/_components/sensor.xbox_live.markdown | 26 +++- source/_components/sensor.yr.markdown | 70 ++++++--- source/_components/sun.markdown | 23 +-- .../_components/switch.command_line.markdown | 79 +++++++--- source/_components/switch.ihc.markdown | 20 +-- 53 files changed, 1951 insertions(+), 722 deletions(-) diff --git a/source/_components/abode.markdown b/source/_components/abode.markdown index 87b689230bc..63789926840 100644 --- a/source/_components/abode.markdown +++ b/source/_components/abode.markdown @@ -13,9 +13,12 @@ ha_release: 0.52 ha_iot_class: "Cloud Push" --- -The `abode` component will allow users to integrate their Abode Home Security systems into Home Assistant and use its alarm system and sensors to automate their homes. +The `abode` component will allow users to integrate their Abode Home Security +systems into Home Assistant and use its alarm system and sensors to automate +their homes. -Please visit the [Abode website](https://goabode.com/) for further information about Abode Security. +Please visit the [Abode website](https://goabode.com/) for further information +about Abode Security. There is currently support for the following device types within Home Assistant: @@ -30,7 +33,8 @@ There is currently support for the following device types within Home Assistant: ## {% linkable_title Configuration %} -To use Abode devices in your installation, add the following `abode` section to your `configuration.yaml` file: +To use Abode devices in your installation, +add the following `abode` section to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -38,7 +42,7 @@ abode: username: abode_username password: abode_password name: Abode Alarm System - polling: False + polling: false exclude: - 'ZW:0000000034' - 'RF:00000011' @@ -46,18 +50,44 @@ abode: - 'ZW:0000000022' ``` -Configuration variables: - -- **username** (*Required*): Username for your Abode account. -- **password** (*Required*): Password for your Abode account. -- **name** (*Optional*): The name for your alarm controller. -- **polling** (*Optional*): Enable polling if cloud push updating is less reliable. Will update the devices once every 30 seconds. Defaults to False. -- **exclude** (*Optional*): A list of devices to exclude from Home Assistant by their Abode `device_id` or `automation_id`, found within the component attributes. -- **lights** (*Optional*): A list of switch devices that Home Assistant should treat as lights by the switches Abode `device_id`, found within the component attributes. +{% configuration %} +username: + description: Username for your Abode account. + required: true + type: string +password: + description: Password for your Abode account. + required: true + type: string +name: + description: The name for your alarm controller. + required: false + type: string +polling: + description: > + Enable polling if cloud push updating is less reliable. + Will update the devices once every 30 seconds. + required: false + type: boolean + default: false +exclude: + description: > + A list of devices to exclude from Home Assistant by their Abode `device_id` + or `automation_id`, found within the component attributes. + required: false + type: list +lights: + description: > + A list of switch devices that Home Assistant should treat as lights by the + switches Abode `device_id`, found within the component attributes. + required: false + type: list +{% endconfiguration %} ## {% linkable_title Events %} -There are a number of events that can be triggered from Abode. They are grouped into the below events: +There are a number of events that can be triggered from Abode. +They are grouped into the below events: - **abode_alarm**: Fired when an alarm event is triggered from Abode. This includes Smoke, CO, Panic, and Burglar alarms. - **abode_alarm_end**: Fired when an alarm end event is triggered from Abode. @@ -80,13 +110,16 @@ Field | Description `date` | The date of the event in the format `MM/DD/YYYY`. `time` | The time of the event in the format `HH:MM AM`. -There is a unique list of known event_codes that can be found [here](https://github.com/MisterWil/abodepy/files/1262019/timeline_events.txt). +There is a unique list of known event_codes that can be found +[here](https://github.com/MisterWil/abodepy/files/1262019/timeline_events.txt). ## {% linkable_title Services %} ### {% linkable_title Service `change_setting` %} -Change settings on your Abode system. For a full list of settings and valid values, consult the [AbodePy settings section](https://github.com/MisterWil/abodepy/blob/master/README.rst#settings). +Change settings on your Abode system. +For a full list of settings and valid values, consult the +[AbodePy settings section](https://github.com/MisterWil/abodepy/blob/master/README.rst#settings). | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | diff --git a/source/_components/alert.markdown b/source/_components/alert.markdown index e1af527f5f2..1d06c44254a 100644 --- a/source/_components/alert.markdown +++ b/source/_components/alert.markdown @@ -12,17 +12,25 @@ ha_category: Automation ha_release: 0.38 --- -The `alert` component is designed to notify you when problematic issues arise. For example, if the garage door is left open, the `alert` component can be used remind you of this by sending you repeating notifications at customizable intervals. This is also used for low battery sensors, water leak sensors, or any condition that may need your attention. +The `alert` component is designed to notify you when problematic issues arise. +For example, if the garage door is left open, the `alert` component can be used +remind you of this by sending you repeating notifications at customizable +intervals. This is also used for low battery sensors, +water leak sensors, or any condition that may need your attention. -Alerts will add an entity to the front end only when they are firing. This entity allows you to silence an alert until it is resolved. +Alerts will add an entity to the front end only when they are firing. +This entity allows you to silence an alert until it is resolved.

-When using the `alert` component, it is important that the time zone used for Home Assistant and the underlying operating system match. Failing to do so may result in multiple alerts being sent at the same time (such as when Home Assistant is set to the `America/Detroit` time zone but the operating system uses `UTC`). +When using the `alert` component, it is important that the time zone used for Home Assistant and the underlying operating system match. +Failing to do so may result in multiple alerts being sent at the same time (such as when Home Assistant is set to the `America/Detroit` time zone but the operating system uses `UTC`).

### {% linkable_title Basic Example %} -The `alert` component makes use of any of the `notifications` components. To setup the `alert` component, first, you must setup a `notification` component. Then, add the following to your configuration file: +The `alert` component makes use of any of the `notifications` components. To +setup the `alert` component, first, you must setup a `notification` component. +Then, add the following to your configuration file: ```yaml # Example configuration.yaml entry @@ -39,20 +47,65 @@ alert: - ryans_phone - kristens_phone ``` -Configuration variables: -- **name** (*Required*): The friendly name of the alert. -- **done_message** (*Optional*): A message sent after an alert transitions from `on` to `off`. Is only sent if an alert notification was sent for transitioning from `off` to `on`. -- **entity_id** (*Required*): The ID of the entity to watch. -- **state** (*Optional*): The problem condition for the entity. Defaults to `on`. -- **repeat** (*Required*): Number of minutes before the notification should be repeated. Can be either a number or a list of numbers. -- **can_acknowledge** (*Optional*): Allows the alert to be unacknowledgeable. Defaults to `true`. -- **skip_first** (*Optional*): Controls whether the notification should be sent immediately or after the first delay. Defaults to `false`. -- **notifiers** (*Required*): List of `notification` components to use for alerts. +{% configuration %} +name: + description: The friendly name of the alert. + required: true + type: string +done_message: + description: > + A message sent after an alert transitions from `on` to `off`. Is only sent + if an alert notification was sent for transitioning from `off` to `on`. + required: false + type: string +entity_id: + description: The ID of the entity to watch. + required: true + type: string +state: + description: The problem condition for the entity. + required: false + type: string + default: on +repeat: + description: > + Number of minutes before the notification should be repeated. + Can be either a number or a list of numbers. + required: true + type: [int, list] +can_acknowledge: + description: Allows the alert to be unacknowledgeable. + required: false + type: boolean + default: true +skip_first: + description: > + Controls whether the notification should be + sent immediately or after the first delay. + required: false + type: boolean + default: false +notifiers: + description: "List of `notification` components to use for alerts." + required: true + type: list +{% endconfiguration %} -In this example, the garage door status (`input_boolean.garage_door`) is watched and this alert will be triggered when its status is equal to `on`. This indicates that the door has been opened. Because the `skip_first` option was set to `True`, the first notification will not be delivered immediately. However, every 30 minutes, a notification will be delivered until either `input_boolean.garage_door` no longer has a state of `on` or until the alert is acknowledged using the Home Assistant frontend. +In this example, the garage door status (`input_boolean.garage_door`) is watched +and this alert will be triggered when its status is equal to `on`. +This indicates that the door has been opened. Because the `skip_first` option +was set to `True`, the first notification will not be delivered immediately. +However, every 30 minutes, a notification will be delivered until either +`input_boolean.garage_door` no longer has a state of `on` or until the alert is +acknowledged using the Home Assistant frontend. -For notifiers that require other parameters (such as `twilio_sms` which requires you specify a `target` parameter when sending the notification), you can use the `group` notification to wrap them for an alert. Simply create a `group` notification type with a single notification member (such as `twilio_sms`) specifying the required parameters other than `message` provided by the `alert` component: +For notifiers that require other parameters (such as `twilio_sms` which requires +you specify a `target` parameter when sending the notification), you can use the +`group` notification to wrap them for an alert. +Simply create a `group` notification type with a single notification member +(such as `twilio_sms`) specifying the required parameters other than `message` +provided by the `alert` component: ```yaml - platform: group @@ -77,7 +130,13 @@ freshwater_temp_alert: ### {% linkable_title Complex Alert Criteria %} -By design, the `alert` component only handles very simple criteria for firing. That is, it only checks if a single entity's state is equal to a value. At some point, it may be desirable to have an alert with a more complex criteria. Possibly, when a battery percentage falls below a threshold. Maybe you want to disable the alert on certain days. Maybe the alert firing should depend on more than one input. For all of these situations, it is best to use the alert in conjunction with a `Template Binary Sensor`. The following example does that. +By design, the `alert` component only handles very simple criteria for firing. +That is, it only checks if a single entity's state is equal to a value. At some +point, it may be desirable to have an alert with a more complex criteria. +Possibly, when a battery percentage falls below a threshold. Maybe you want to +disable the alert on certain days. Maybe the alert firing should depend on more +than one input. For all of these situations, it is best to use the alert in +conjunction with a `Template Binary Sensor`. The following example does that. ```yaml binary_sensor: @@ -97,11 +156,16 @@ alert: - kristens_phone ``` -This example will begin firing as soon as the entity `sensor.motion`'s `battery` attribute falls below 15. It will continue to fire until the battery attribute raises above 15 or the alert is acknowledged on the frontend. +This example will begin firing as soon as the entity `sensor.motion`'s `battery` +attribute falls below 15. It will continue to fire until the battery attribute +raises above 15 or the alert is acknowledged on the frontend. ### {% linkable_title Dynamic Notification Delay Times %} -It may be desirable to have the delays between alert notifications dynamically change as the alert continues to fire. This can be done by setting the `repeat` configuration key to a list of numbers rather than a single number. Altering the first example would look like the following. +It may be desirable to have the delays between alert notifications dynamically +change as the alert continues to fire. This can be done by setting the `repeat` +configuration key to a list of numbers rather than a single number. +Altering the first example would look like the following. ```yaml # Example configuration.yaml entry @@ -121,4 +185,8 @@ alert: - kristens_phone ``` -Now the first message will be sent after a 15 minute delay, the second will be sent 30 minutes after that, and a 60 minute delay will fall between every following notification. For example, if the garage door opens at 2:00, a notification will be sent at 2:15, 2:45, 3:45, 4:45, etc., continuing every 60 minutes. +Now the first message will be sent after a 15 minute delay, the second will be +sent 30 minutes after that, and a 60 minute delay will fall between every +following notification. +For example, if the garage door opens at 2:00, a notification will be +sent at 2:15, 2:45, 3:45, 4:45, etc., continuing every 60 minutes. diff --git a/source/_components/amcrest.markdown b/source/_components/amcrest.markdown index 220ab96d17f..fae4d0ff5e0 100644 --- a/source/_components/amcrest.markdown +++ b/source/_components/amcrest.markdown @@ -13,11 +13,13 @@ ha_iot_class: "Local Polling" ha_release: 0.49 --- -The `amcrest` camera platform allows you to integrate your [Amcrest](https://amcrest.com/) IP camera in Home Assistant. +The `amcrest` camera platform allows you to integrate your +[Amcrest](https://amcrest.com/) IP camera in Home Assistant. ## {% linkable_title Configuration %} -To enable your camera in your installation, add the following to your `configuration.yaml` file: +To enable your camera in your installation, +add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -41,31 +43,114 @@ amcrest: - ptz_preset ``` -Configuration variables: +{% configuration %} +host: + description: > + The IP address or hostname of your camera. + If using a hostname, make sure the DNS works as expected. + required: true + type: string +username: + description: The username for accessing your camera. + required: true + type: string +password: + description: The password for accessing your camera. + required: true + type: string +name: + description: > + This parameter allows you to override the name of your camera. In the case of multi-camera setups, + this is highly recommended as camera id number will be randomly changed at each reboot if a name is not allocated. + required: false + type: string + default: Amcrest Camera +port: + description: The port that the camera is running on. + required: false + type: int + default: 80 +resolution: + description: > + 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`. + required: false + type: string + default: high +stream_source: + description: > + 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. + required: false + type: string + default: snapshot +ffmpeg_arguments: + description: > + Extra options to pass to ffmpeg, e.g., + image quality or video filter options. + required: false + type: string +authentication: + description: > + Defines which authentication method to use only when **stream_source** + is **mjpeg**. Currently, *aiohttp* only support *basic*. + required: false + type: string + default: basic +scan_interval: + description: Defines the update interval of the sensor in seconds. + required: false + type: int + default: 10 +sensors: + description: > + Conditions to display in the frontend. + The following conditions can be monitored: + required: false + type: list + default: None + keys: + motion_detector: + description: "Return `true`/`false` when a motion is detected." + sdcard: + description: Return the SD card usage by reporting the total and used space. + ptz_preset: + description: > + Return the number of PTZ preset positions + configured for the given camera. +switches: + description: > + Switches to display in the frontend. + The following switches can be monitored: + required: false + type: list + default: None + keys: + motion_detection: + description: Enable/disable motion detection setting. + motion_recording: + description: Enable/disable recording on motion detection setting. +{% endconfiguration %} -- **host** (*Required*): The IP address or hostname of your camera. If using a 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". In the case of multi-camera setups, this is highly recommended as camera id number will be randomly changed at each reboot if a name is not allocated. -- **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 -- **switches** array (*Optional*): Switches to display in the frontend. By default, *none* of the switches are shown. The following switches can be monitored. - - **motion_detection**: Enable/disable motion detection setting - - **motion_recording**: Enable/disable recording on motion detection setting +**Note:** Amcrest cameras with newer firmware 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 firmware may not work, then **rtsp** is recommended instead. -**Note:** Amcrest cameras with newer firmware 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 firmware 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](/components/ffmpeg/) +documentation to install the `ffmpeg`. -**Note:** If you set the `stream_source` option to `rtsp`, make sure to follow the steps mentioned at -[FFMPEG](/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/). -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. +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/automation.markdown b/source/_components/automation.markdown index 658c0ebc63c..57a11fe8115 100644 --- a/source/_components/automation.markdown +++ b/source/_components/automation.markdown @@ -11,7 +11,8 @@ logo: home-assistant.png ha_category: Automation --- -Please see the [docs section](/docs/automation/) for in-depth documentation on how to use the automation component. +Please see the [docs section](/docs/automation/) for in-depth +documentation on how to use the automation component. Starting with 0.28 your automation rules can be controlled with the frontend. @@ -19,12 +20,16 @@ Starting with 0.28 your automation rules can be controlled with the frontend.

-This allows one to reload the automation without restarting Home Assistant itself. If you don't want to see the automation rule in your frontend use `hide_entity: True` to hide it. You can also use `initial_state: 'off'` so that the automation is not automatically turned on after a Home Assistant reboot. +This allows one to reload the automation without restarting Home Assistant +itself. If you don't want to see the automation rule in your frontend use +`hide_entity: true` to hide it. +You can also use `initial_state: 'off'` so that the automation +is not automatically turned on after a Home Assistant reboot. ```yaml automation: - alias: Door alarm - hide_entity: True + hide_entity: true initial_state: 'off' trigger: - platform: state diff --git a/source/_components/binary_sensor.hikvision.markdown b/source/_components/binary_sensor.hikvision.markdown index 97c63757163..d77e38d757c 100644 --- a/source/_components/binary_sensor.hikvision.markdown +++ b/source/_components/binary_sensor.hikvision.markdown @@ -13,22 +13,36 @@ ha_release: 0.35 ha_iot_class: "Local Push" --- -The Hikvision Binary Sensor is a platform that parses the event stream of a [Hikvision IP Camera or NVR](http://www.hikvision.com/) and presents the camera/nvr events to Home Assistant as binary sensors with either an "off" or "on" state. +The Hikvision Binary Sensor is a platform that parses the event stream of a +[Hikvision IP Camera or NVR](http://www.hikvision.com/) and presents the +camera/nvr events to Home Assistant as binary sensors with either an "off" or +"on" state. -The platform will automatically add all sensors to Home Assistant that are configured within the camera/nvr interface to "Notify the surveillance center" as a trigger. If you would like to hide a sensor type you can do so by either unchecking "Notify the surveillance center" in the camera configuration or by using the "ignored" customize option detailed below. +The platform will automatically add all sensors to Home Assistant that are +configured within the camera/nvr interface to "Notify the surveillance center" +as a trigger. If you would like to hide a sensor type you can do so by either +unchecking "Notify the surveillance center" in the camera configuration or by +using the "ignored" customize option detailed below.

-In order for the sensors to work the hikvision user must have the 'Remote: Notify Surveillance Center/Trigger Alarm Output' permission which can be enabled from the user management section of the web interface. Also the 'WEB Authentication' needs to be set to 'digest/basic' in the security/authentication section. +In order for the sensors to work the hikvision user must have the 'Remote: Notify Surveillance Center/Trigger Alarm Output' permission which can be enabled from the user management section of the web interface. +Also the 'WEB Authentication' needs to be set to 'digest/basic' in the security/authentication section.

-For example, if you configure a camera with the name "Front Porch" that has motion detection and line crossing events enabled to notify the surveillance center the following binary sensors will be added to Home Assistant: +For example, if you configure a camera with the name "Front Porch" that has +motion detection and line crossing events enabled to notify the surveillance +center the following binary sensors will be added to Home Assistant: ```text binary_sensor.front_porch_motion binary_sensor.front_port_line_crossing ``` -When used with a NVR device the sensors will be appended with the channel number they represent. For example, if you configure an NVR with the name "Home" that supports 2 cameras with motion detection and line crossing events enabled to notify the surveillance center the following binary sensors will be added to Home Assistant: +When used with a NVR device the sensors will be appended with the channel number +they represent. For example, +if you configure an NVR with the name "Home" that supports 2 cameras with +motion detection and line crossing events enabled to notify the surveillance +center the following binary sensors will be added to Home Assistant: ```text binary_sensor.home_motion_1 @@ -37,7 +51,8 @@ binary_sensor.home_line_crossing_1 binary_sensor.home_line_crossing_2 ``` -This platform should work with all Hikvision cameras and nvrs, and has been confirmed to work with the following models: +This platform should work with all Hikvision cameras and nvrs, +and has been confirmed to work with the following models: - DS-2CD3132-I - DS-2CD2232-I5 @@ -46,7 +61,8 @@ This platform should work with all Hikvision cameras and nvrs, and has been conf - DS-2CD2142FWD-I - DS-2CD2155FWD-IS -To enable this sensor, the following lines are required in your `configuration.yaml` file: +To enable this sensor, +add the following lines are required in your `configuration.yaml` file: ```yaml binary_sensor: @@ -56,17 +72,56 @@ binary_sensor: password: pass ``` -Configuration options for a Hikvision Sensor: - -- **host** (*Required*): The IP address of the camera you would like to connect to. -- **username** (*Required*): The username to authenticate with. -- **password** (*Required*): The password to authenticate with. -- **name** (*Optional*): The name you'd like to give the camera in Home Assistant, defaults to name defined in the camera. -- **port** (*Optional*): The port to connect to the camera on, defaults to 80. -- **ssl** (*Optional*): True if you want to connect with https. Be sure to set the port also. -- **customize** (*Optional*): This attribute contains sensor-specific override values. Only sensor name needs defined: - - **ignored** (*Optional*): Ignore this sensor completely. It won't be shown in the Web Interface and no events are generated for it. - - **delay** (*Optional*): Specify the delay to wait after a sensor event ends before notifying Home Assistant. This is useful to catch multiple quick trips in one window without the state toggling on and off. The default delay is 5 seconds. +{% configuration %} +host: + description: The IP address of the camera you would like to connect to. + required: true + type: string +username: + description: The username to authenticate with. + required: true + type: string +password: + description: The password to authenticate with. + required: true + type: string +name: + description: > + The name you would like to give the camera in Home Assistant, + defaults to name defined in the camera. + required: false + type: string +port: + description: The port to connect to the camera on. + required: false + type: int + default: 80 +ssl: + description: "`true` if you want to connect with https. Be sure to set the port also." + required: false + type: boolean +customize: + description: > + This attribute contains sensor-specific override values. + Only sensor name needs defined: + required: false + type: map + keys: + ignored: + description: > + Ignore this sensor completely. It won't be shown in + the Web Interface and no events are generated for it. + required: false + type: boolean + delay: + description: > + Specify the delay to wait after a sensor event ends before notifying + Home Assistant in seconds. This is useful to catch multiple quick trips + in one window without the state toggling on and off. + required: false + type: int + default: 5 +{% endconfiguration %} Supported sensor/event types are: @@ -87,36 +142,38 @@ Supported sensor/event types are: - Face Detection - Scene Change Detection -Example of a configuration in your `configuration.yaml` that utilizes the customize options for a camera: +Example of a configuration in your `configuration.yaml` +that utilizes the customize options for a camera: ```yaml binary_sensor: - platform: hikvision host: 192.168.X.X port: 80 - ssl: False + ssl: false username: user password: pass customize: motion: delay: 30 line_crossing: - ignored: True + ignored: true ``` -Example of a configuration in your `configuration.yaml` that utilizes the customize options for a nvr: +Example of a configuration in your `configuration.yaml` +that utilizes the customize options for a nvr: ```yaml binary_sensor: - platform: hikvision host: 192.168.X.X port: 80 - ssl: False + ssl: false username: user password: pass customize: motion_1: delay: 30 field_detection_2: - ignored: True + ignored: true ``` diff --git a/source/_components/binary_sensor.ihc.markdown b/source/_components/binary_sensor.ihc.markdown index da5aac7615e..31d14bb69fb 100644 --- a/source/_components/binary_sensor.ihc.markdown +++ b/source/_components/binary_sensor.ihc.markdown @@ -13,19 +13,22 @@ ha_release: 0.62 ha_iot_class: "Local Push" --- -Before you can use the IHC Binary Sensor platform, you must setup the [IHC Component](/components/ihc/) +Before you can use the IHC Binary Sensor platform, +you must setup the [IHC Component](/components/ihc/). -When auto setup is enabled the following products will be found in the IHC project and setup as binary sensors: +When auto setup is enabled the following products will +be found in the IHC project and setup as binary sensors: -* Dataline magnet contacts -* Dataline Pir sensors -* Dataline Pir sensors with twilight detection -* Dataline Pir alarm sensor -* Dataline smoke detector -* Dataline gas detector -* Dataline light sensor +- Dataline magnet contacts +- Dataline Pir sensors +- Dataline Pir sensors with twilight detection +- Dataline Pir alarm sensor +- Dataline smoke detector +- Dataline gas detector +- Dataline light sensor -To manually configure IHC Binary Sensors insert this section in your configuration: +To manually configure IHC Binary Sensors +insert this section in your configuration: ```yaml binary_sensor: @@ -52,18 +55,20 @@ binary_sensors: inverting: description: If True the sensor will be inverted. required: false - type: bool + type: boolean default: false name: description: The name of the component required: false type: string type: - description: The binary sensor type. See [Home Assistant binary sensor](/components/binary_sensor/) for available types. + description: > + The binary sensor type. + See [Home Assistant binary sensor](/components/binary_sensor/) + for available types. required: false type: string {% endconfiguration %} -The resource id should be an id of a boolean IHC resource. -For more information about IHC resource ids see [Manual Setup](/components/ihc/#manual-setup) - +The resource id should be an id of a boolean IHC resource. For more information +about IHC resource ids see [Manual Setup](/components/ihc/#manual-setup). diff --git a/source/_components/binary_sensor.iss.markdown b/source/_components/binary_sensor.iss.markdown index 0d4e4276b30..f9b0da08de8 100644 --- a/source/_components/binary_sensor.iss.markdown +++ b/source/_components/binary_sensor.iss.markdown @@ -13,11 +13,16 @@ ha_release: 0.36 redirect_from: /components/sensor.iss/ --- -The `iss` platform uses the [Open Notify API](http://open-notify.org/Open-Notify-API/ISS-Location-Now/) to let you know if the station is above your home location. This means that ISS is 10° above the horizon of your home. +The `iss` platform uses the +[Open Notify API](http://open-notify.org/Open-Notify-API/ISS-Location-Now/) +to let you know if the station is above your home location. +This means that ISS is 10° above the horizon of your home. -You can check in the attributes of the sensor to see the timestamp for the next rise of the station, its current coordinates, and the number of people in space. +You can check in the attributes of the sensor to see the timestamp for the next +rise of the station, its current coordinates, and the number of people in space. -To add ISS binary sensor to your installation, add the following to your `configuration.yaml` file: +To add ISS binary sensor to your installation, +add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -34,13 +39,14 @@ show_on_map: {% endconfiguration %}

-If you set `show_on_map` `True` then the location attributes are named `latitude` and `longitude`. The default name of the location attributes is `lat` and `long` to avoid showing them on the map. +If you set `show_on_map: true` then the location attributes are named `latitude` and `longitude`. +The default name of the location attributes is `lat` and `long` to avoid showing them on the map.

- ### {% linkable_title Show position on map with camera platform %} -The [generic camera platform](/components/camera.mjpeg/) offers the possibility to show the location of the ISS on Google Maps. +The [generic camera platform](/components/camera.mjpeg/) offers +the possibility to show the location of the ISS on Google Maps. {% raw %} ```yaml diff --git a/source/_components/binary_sensor.mqtt.markdown b/source/_components/binary_sensor.mqtt.markdown index 8d4b8b38e27..114c974cbbf 100644 --- a/source/_components/binary_sensor.mqtt.markdown +++ b/source/_components/binary_sensor.mqtt.markdown @@ -13,15 +13,32 @@ ha_release: 0.9 ha_iot_class: "depends" --- -The `mqtt` binary sensor platform uses an MQTT message payload to set the binary sensor to one of two states: `on` or `off`. +The `mqtt` binary sensor platform uses an MQTT message payload +to set the binary sensor to one of two states: `on` or `off`. -The binary sensor state will be updated only after a new message is published on `state_topic` matching `payload_on` or `payload_off`. If these messages are published with the `retain` flag set, the binary sensor will receive an instant state update after subscription and Home Assistant will display the correct state on startup. Otherwise, the initial state displayed in Home Assistant will be `unknown`. +The binary sensor state will be updated only after a new message is published on +`state_topic` matching `payload_on` or `payload_off`. +If these messages are published with the `retain` flag set, +the binary sensor will receive an instant state update after subscription and +Home Assistant will display the correct state on startup. +Otherwise, the initial state displayed in Home Assistant will be `unknown`. ## {% linkable_title Configuration %} -The `mqtt` binary sensor platform optionally supports an `availability_topic` to receive online and offline messages (birth and LWT messages) from the MQTT device. During normal operation, if the MQTT cover device goes offline (i.e., publishes `payload_not_available` to `availability_topic`), Home Assistant will display the binary sensor as `unavailable`. If these messages are published with the `retain` flag set, the binary sensor will receive an instant update after subscription and Home Assistant will display the correct availability state of the binary sensor when Home Assistant starts up. If the `retain` flag is not set, Home Assistant will display the binary sensor as `unavailable` when Home Assistant starts up. If no `availability_topic` is defined, Home Assistant will consider the MQTT device to be available. +The `mqtt` binary sensor platform optionally supports an `availability_topic` to +receive online and offline messages (birth and LWT messages) from the MQTT +device. During normal operation, if the MQTT cover device goes offline +(i.e., publishes `payload_not_available` to `availability_topic`), Home +Assistant will display the binary sensor as `unavailable`. If these messages are +published with the `retain` flag set, the binary sensor will receive an instant +update after subscription and Home Assistant will display the correct +availability state of the binary sensor when Home Assistant starts up. +If the `retain` flag is not set, Home Assistant will display the binary sensor +as `unavailable` when Home Assistant starts up. If no `availability_topic` +is defined, Home Assistant will consider the MQTT device to be available. -To use an MQTT binary sensor in your installation, add the following to your `configuration.yaml` file: +To use an MQTT binary sensor in your installation, +add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -51,7 +68,11 @@ payload_off: type: string default: "OFF" availability_topic: - description: "The MQTT topic subscribed to receive birth and LWT messages from the MQTT device. If `availability_topic` is not defined, the binary sensor availability state will always be `available`. If `availability_topic` is defined, the binary sensor availability state will be `unavailable` by default." + description: > + The MQTT topic subscribed to receive birth and LWT messages from the MQTT + device. If `availability_topic` is not defined, the binary sensor availability + state will always be `available`. If `availability_topic` is defined, + the binary sensor availability state will be `unavailable` by default. required: false type: string payload_available: @@ -70,32 +91,41 @@ qos: type: integer default: 0 unique_id: - description: "An ID that uniquely identifies this sensor. If two sensors have the same unique ID, Home Assistant will raise an exception." + description: > + An ID that uniquely identifies this sensor. If two sensors have + the same unique ID, Home Assistant will raise an exception. required: false type: string device_class: - description: "The [type/class](/components/binary_sensor/) of the sensor to set the icon in the frontend." + description: > + The [type/class](/components/binary_sensor/) of + the sensor to set the icon in the frontend. required: false type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the payload." + description: > + Defines a [template](/docs/configuration/templating/#processing-incoming-data) + to extract a value from the payload. required: false type: string force_update: - description: Sends update events even if the value hasn't changed. Useful if you want to have meaningful value graphs in history. + description: > + Sends update events even if the value has not changed. + Useful if you want to have meaningful value graphs in history. reqired: false type: boolean - default: False + default: false {% endconfiguration %} - ## {% linkable_title Examples %} In this section, you will find some real-life examples of how to use this sensor. ### {% linkable_title Full configuration %} -To test, you can use the command line tool `mosquitto_pub` shipped with `mosquitto` or the `mosquitto-clients` package to send MQTT messages. To set the state of the binary sensor manually: +To test, you can use the command line tool `mosquitto_pub` shipped with +`mosquitto` or the `mosquitto-clients` package to send MQTT messages. +To set the state of the binary sensor manually: ```bash $ mosquitto_pub -h 127.0.0.1 -t home-assistant/window/contact -m "OFF" @@ -123,7 +153,14 @@ binary_sensor: ### {% linkable_title Get the state of a device with ESPEasy %} -Assuming that you have flashed your ESP8266 unit with [ESPEasy](https://github.com/letscontrolit/ESPEasy). Under "Config" is a name ("Unit Name:") set for your device (here it's "bathroom"). A configuration for a "Controller" for MQTT with the protocol "OpenHAB MQTT" is present and the entries ("Controller Subscribe:" and "Controller Publish:") are adjusted to match your needs. In this example, the topics are prefixed with "home". Also, add a "Switch Input" in the "Devices" tap with the name "switch" and "button" as value. +Assuming that you have flashed your ESP8266 unit with +[ESPEasy](https://github.com/letscontrolit/ESPEasy). +Under "Config" is a name ("Unit Name:") set for your device +(here it's "bathroom"). A configuration for a "Controller" for MQTT with the +protocol "OpenHAB MQTT" is present and the entries ("Controller Subscribe:" and +"Controller Publish:") are adjusted to match your needs. +In this example, the topics are prefixed with "home". Also, add a "Switch Input" +in the "Devices" tap with the name "switch" and "button" as value. As soon as the unit is online, you will get the state of the attached button. diff --git a/source/_components/binary_sensor.netatmo.markdown b/source/_components/binary_sensor.netatmo.markdown index da2f8ab1fe1..44be87ffe53 100644 --- a/source/_components/binary_sensor.netatmo.markdown +++ b/source/_components/binary_sensor.netatmo.markdown @@ -14,13 +14,19 @@ ha_release: 0.31 ### {% linkable_title Basic Configuration %} -The `netatmo` binary sensor platform is consuming the information provided by a [Netatmo](https://www.netatmo.com) camera. This component allows you to get the latest event seen by the camera. +The `netatmo` binary sensor platform is consuming the information provided by a +[Netatmo](https://www.netatmo.com) camera. +This component allows you to get the latest event seen by the camera. -To enable the Netatmo binary sensor, you have to set up [netatmo](/components/netatmo/), this will use discovery to add your binary sensor. +To enable the Netatmo binary sensor, you have to set up +[netatmo](/components/netatmo/), +this will use discovery to add your binary sensor. ### {% linkable_title Advanced configuration %} -If you want to select a specific sensor, set discovery to False for [netatmo](/components/netatmo/) and add the following lines to your `configuration.yaml`: +If you want to select a specific sensor, +set discovery to `false` for [netatmo](/components/netatmo/) +and add the following lines to your `configuration.yaml`: ```yaml # Example configuration.yaml entry @@ -41,20 +47,36 @@ binary_sensor: - Outdoor vehicle ``` -Configuration variables: +{% configuration %} +home: + description: Will use the cameras of this home only. + required: false + type: string +timeout: + description: > + The Welcome/Presence binary sensors will + stay on for X seconds after detection. + required: false + type: int + default: 90 +cameras: + description: List of cameras entity IDs to display. + required: false + type: list +welcome_sensors: + description: > + List of monitored conditions. Possible values are + 'Someone known', 'Someone unknown' and 'Motion'. + required: false + type: list +presence_sensors: + description: > + List of monitored conditions. Possible values are 'Outdoor motion', + 'Outdoor human', 'Outdoor animal' and 'Outdoor vehicle'. + required: false + type: list +{% endconfiguration %} -- **home** (*Optional*): Will use the cameras of this home only. -- **timeout** (*Optional*): The Welcome/Presence binary sensors will stay on for X seconds after detection. (default: 90) -- **cameras** array (*Optional*): Cameras to use. Multiple entities allowed. - - 'camera_name': Name of the camera to display. -- **welcome_sensors** array (*Optional*): List of monitored conditions. - - 'Someone known' - - 'Someone unknown' - - 'Motion' -- **presence_sensors** array (*Optional*): List of monitored conditions. - - 'Outdoor motion' - - 'Outdoor human' - - 'Outdoor animal' - - 'Outdoor vehicle' - -If **home** and **cameras** is not provided, all cameras will be used. If multiple cameras are available then each monitored conditions will create a specific sensor for each camera +If **home** and **cameras** is not provided, all cameras will be used. +If multiple cameras are available then each monitored conditions +will create a specific sensor for each camera diff --git a/source/_components/binary_sensor.pilight.markdown b/source/_components/binary_sensor.pilight.markdown index ef71c754602..3761bd06631 100644 --- a/source/_components/binary_sensor.pilight.markdown +++ b/source/_components/binary_sensor.pilight.markdown @@ -13,11 +13,16 @@ ha_release: 0.44 ha_iot_class: "Local Polling" --- -The `pilight` binary sensor platform implement the [pilight hub](/components/pilight/) binary sensor functionality. Two type of Pilight binary sensor configuration available. A normal sensor which send the on and off state cyclical and a trigger sensor which send only a trigger when an event happened (for example lots of cheap PIR motion detector). +The `pilight` binary sensor platform implement the +[pilight hub](/components/pilight/) binary sensor functionality. +Two type of Pilight binary sensor configuration available. A normal sensor which +send the on and off state cyclical and a trigger sensor which send only a +trigger when an event happened (for example lots of cheap PIR motion detector). ## {% linkable_title Configuration %} -To enable a Pilight binary sensor in your installation, add the following to your `configuration.yaml` file: +To enable a Pilight binary sensor in your installation, +add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -26,15 +31,41 @@ binary_sensor: variable: 'state' ``` -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. +{% configuration %} +variable: + description: The variable name in the data stream that defines the sensor value. + required: true + type: string +payload: + description: > + Message payload identifiers. + Only if all identifiers are matched the sensor value is set. + required: true + type: string +name: + description: Name of the sensor. + required: false + type: string +payload_on: + description: "Variable `on` value. The component will recognize this as logical '1'." + required: false + type: string +payload_off: + description: "Variable `off` value. The component will recognize this as logical '0'." + required: false + type: string +disarm_after_trigger: + description: Configure sensor as trigger type. + required: false + type: boolean +reset_delay_sec: + description: > + Seconds before the sensor is disarmed if + `disarm_after_trigger` is set to true. + required: false + type: int + default: 30 +{% endconfiguration %} A full configuration example could look like this: diff --git a/source/_components/binary_sensor.random.markdown b/source/_components/binary_sensor.random.markdown index 3fdc95eb617..dece1477fae 100644 --- a/source/_components/binary_sensor.random.markdown +++ b/source/_components/binary_sensor.random.markdown @@ -13,8 +13,9 @@ ha_iot_class: "Local Polling" ha_release: 0.57 --- - -The `random` binary sensor platform is creating random states (`True`, 1, `on` or `False`, 0, `off`). This can be useful if you want to test automation rules. It generates a new state every time it is polled. +The `random` binary sensor platform is creating random states (`true`, 1, `on` +or `false`, 0, `off`). This can be useful if you want to test automation rules. +It generates a new state every time it is polled. ## {% linkable_title Configuration %} @@ -33,5 +34,6 @@ name: type: string {% endconfiguration %} -See the [entity component options](/docs/configuration/platform_options/) to control how often the main component polls the random binary sensor. The default is 30 seconds. - +See the [entity component options](/docs/configuration/platform_options/) +to control how often the main component polls the random binary sensor. +The default is 30 seconds. diff --git a/source/_components/binary_sensor.rest.markdown b/source/_components/binary_sensor.rest.markdown index 488643e18c4..7c36530f59a 100644 --- a/source/_components/binary_sensor.rest.markdown +++ b/source/_components/binary_sensor.rest.markdown @@ -13,10 +13,15 @@ ha_release: "0.10" ha_iot_class: "Local Polling" --- +The `rest` binary sensor platform is consuming a given endpoint which is exposed +by a +[RESTful API](https://en.wikipedia.org/wiki/Representational_state_transfer) +of a device, an application, or a web service. +The binary sensor has support for GET and POST requests. -The `rest` binary sensor platform is consuming a given endpoint which is exposed by a [RESTful API](https://en.wikipedia.org/wiki/Representational_state_transfer) of a device, an application, or a web service. The binary sensor has support for GET and POST requests. - -The JSON messages can contain different values like `1`, `"1"`, `TRUE`, `true`, `on`, or `open`. If the value is nested then use a [template](/docs/configuration/templating/#processing-incoming-data). +The JSON messages can contain different values like `1`, `"1"`, +`TRUE`, `true`, `on`, or `open`. If the value is nested then use a +[template](/docs/configuration/templating/#processing-incoming-data). ```json { @@ -28,7 +33,8 @@ The JSON messages can contain different values like `1`, `"1"`, `TRUE`, `true`, } ``` -To enable this sensor, add the following lines to your `configuration.yaml` file for a GET request: +To enable this sensor, +add the following lines to your `configuration.yaml` file for a GET request: ```yaml # Example configuration.yaml entry @@ -64,11 +70,15 @@ name: type: string default: REST Binary Sensor device_class: - description: "The [type/class](/components/binary_sensor/) of the sensor to set the icon in the frontend." + description: > + The [type/class](/components/binary_sensor/) of + the sensor to set the icon in the frontend. required: false type: string value_template: - description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the value." + description: > + Defines a [template](/docs/configuration/templating/#processing-incoming-data) + to extract the value. required: false type: template payload: @@ -79,9 +89,9 @@ verify_ssl: description: Verify the certification of the endpoint. required: false type: boolean - default: True + default: true authentication: - description: Type of the HTTP authentication. `basic` or `digest`. + description: "Type of the HTTP authentication. `basic` or `digest`." required: false type: string username: @@ -108,7 +118,9 @@ In this section you find some real-life examples of how to use this sensor. ### {% linkable_title aREST sensor %} -Instead of using an [aREST](/components/binary_sensor.arest/) binary sensor, you could retrieve the value of a device supporting aREST directly with a REST binary sensor. +Instead of using an [aREST](/components/binary_sensor.arest/) binary sensor, +you could retrieve the value of a device supporting +aREST directly with a REST binary sensor. ```yaml binary_sensor: @@ -136,7 +148,8 @@ binary_sensor: Content-Type: application/json ``` -The headers will contain all relevant details. This will also give you the ability to access endpoints that are protected by tokens. +The headers will contain all relevant details. This will also give +you the ability to access endpoints that are protected by tokens. ```bash Content-Length: 1024 diff --git a/source/_components/binary_sensor.rfxtrx.markdown b/source/_components/binary_sensor.rfxtrx.markdown index 0aaefbad7d6..ff54c0a0e2b 100644 --- a/source/_components/binary_sensor.rfxtrx.markdown +++ b/source/_components/binary_sensor.rfxtrx.markdown @@ -11,23 +11,35 @@ 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. +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. +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`: + +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 + 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 entities* list, starting with "binary_sensor." and some hexadecimal digits. Those hexadecimal digits are your device id. +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 entities* 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: +For example: "binary_sensor.0913000022670e013b70". Here your device id +is `0913000022670e013b70`. Then you should update your configuration to: ```yaml # Example configuration.yaml entry @@ -45,20 +57,28 @@ Configuration variables: - **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'.

-This component and the [rfxtrx switch](/components/switch/rfxtrx/) can steal each other's devices when setting the `automatic_add` configuration parameter to `true`. Set `automatic_add` only when you have some devices to add to your installation, otherwise leave it to `False`. +This component and the [rfxtrx switch](/components/switch/rfxtrx/) can steal each other's devices when setting the `automatic_add` configuration parameter to `true`. +Set `automatic_add` only when you have some devices to add to your installation, otherwise leave it to `false`.

-If a device ID consists of only numbers, please make sure to surround it with quotes. +If a device ID consists of only numbers, please make sure to surround it with quotes. This is a known limitation in YAML, because the device ID will be interpreted as a number otherwise.

-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: +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. +- 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*. +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: @@ -66,7 +86,7 @@ Example configuration: # Example configuration.yaml entry binary_sensor: platform: rfxtrx - automatic_add: True + automatic_add: true devices: 091300006ca2c6001080: name: motion_hall @@ -77,15 +97,22 @@ binary_sensor: ## 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 such cases, the following options are available in order to circumvent the problem: +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 such 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. +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: +Have your sensor trigger the "On" state for the first time. +Some messages will appear: ```text INFO (Thread-6) [homeassistant.components.binary_sensor.rfxtrx] Added binary sensor 0913000022670e013970 (Device_id: 22670e Class: LightingDevice Sub: 0) @@ -93,21 +120,27 @@ INFO (Thread-6) [homeassistant.components.binary_sensor.rfxtrx] Added binary sen 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: +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: ```text 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. +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. +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 +automatic_add: true devices: 0913000022670e013b70: name: window_room2 @@ -117,7 +150,8 @@ devices: 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: +The *automatic_add* option makes the rfxtrx binary sensor component calculate +and display the configuration options for you in the Home Assistant logs: ```text INFO (Thread-6) [homeassistant.components.rfxtrx] rfxtrx: found possible device 226707 for 22670e with the following configuration: @@ -127,12 +161,14 @@ 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. +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. +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. diff --git a/source/_components/binary_sensor.trend.markdown b/source/_components/binary_sensor.trend.markdown index 11f48b0f992..d1c68e87af9 100644 --- a/source/_components/binary_sensor.trend.markdown +++ b/source/_components/binary_sensor.trend.markdown @@ -13,11 +13,16 @@ ha_release: 0.28 ha_iot_class: "Local Push" --- -The `trend` platform allows you to create sensors which show the trend of numeric `state` or`state_attributes` from other entities. This sensor requires at least two updates of the underlying sensor to establish a trend. Thus it can take some time to show an accurate state. It can be useful as part of automations, where you want to base an action on a trend. +The `trend` platform allows you to create sensors which show the trend of +numeric `state` or`state_attributes` from other entities. This sensor requires +at least two updates of the underlying sensor to establish a trend. +Thus it can take some time to show an accurate state. It can be useful +as part of automations, where you want to base an action on a trend. ## {% linkable_title Configuration %} -To enable Trend binary sensors in your installation, add the following to your `configuration.yaml` file: +To enable Trend binary sensors in your installation, +add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -28,25 +33,74 @@ binary_sensor: entity_id: sensor.cpu_speed ``` -Configuration variables: - -- **sensors** array (*Required*): List of your sensors. - - **entity_id** (*Required*): The entity that this sensor tracks. - - **attribute** (*Optional*): The attribute of the entity that this sensor tracks. If no attribute is specified then the sensor will track the state. - - **device_class** (*Optional*): The [type/class](/components/binary_sensor/) of the sensor to set the icon in the frontend. - - **friendly_name** (*Optional*): Name to use in the Frontend. - - **invert** (*Optional*): Invert the result. A `true` value would mean descending rather than ascending. Defaults to `False` - - **max_samples** (*Optional*): Limit the maximum number of stored samples. Defaults to `2`. - - **min_gradient** (*Optional*): The minimum rate at which the observed value must be changing for this sensor to switch on. The gradient is measured in sensor units per second. Defaults to `0.0` - - **sample_duration** (*Optional*): The duration **in seconds** to store samples for. Samples older than this value will be discarded. Defaults to `0` +{% configuration %} +sensors: + description: List of your sensors. + required: true + type: map + keys: + entity_id: + description: The entity that this sensor tracks. + required: true + type: string + attribute: + description: > + The attribute of the entity that this sensor tracks. + If no attribute is specified then the sensor will track the state. + required: false + type: string + device_class: + description: > + The [type/class](/components/binary_sensor/) of + the sensor to set the icon in the frontend. + required: false + type: string + friendly_name: + description: Name to use in the Frontend. + required: false + type: string + invert: + description: > + Invert the result. A `true` value would + mean descending rather than ascending. + required: false + type: boolean + default: false + max_samples: + description: Limit the maximum number of stored samples. + required: false + type: int + default: 2 + min_gradient: + description: > + The minimum rate at which the observed value + must be changing for this sensor to switch on. + The gradient is measured in sensor units per second. + required: false + type: string + default: 0.0 + sample_duration: + description: > + The duration **in seconds** to store samples for. + Samples older than this value will be discarded. + required: false + type: int + default: 0 +{% endconfiguration %} ## {% linkable_title Using Multiple Samples %} -If the optional `sample_duration` and `max_samples` parameters are specified then multiple samples can be stored and used to detect long-term trends. +If the optional `sample_duration` and `max_samples` parameters are specified +then multiple samples can be stored and used to detect long-term trends. -Each time the state changes, a new sample is stored along with the sample time. Samples older than `sample_duration` seconds will be discarded. +Each time the state changes, a new sample is stored along with the sample time. +Samples older than `sample_duration` seconds will be discarded. -A trend line is then fitted to the available samples, and the gradient of this line is compared to `min_gradient` to determine the state of the trend sensor. The gradient is measured in sensor units per second - so if you want to know when the temperature is falling by 2 degrees per hour, use a gradient of (-2) / (60 x 60) = -0.00055 +A trend line is then fitted to the available samples, and the gradient of this +line is compared to `min_gradient` to determine the state of the trend sensor. +The gradient is measured in sensor units per second - so if you want to know +when the temperature is falling by 2 degrees per hour, +use a gradient of (-2) / (60 x 60) = -0.00055 The current number of stored samples is displayed on the States page. @@ -65,8 +119,9 @@ binary_sensor: attribute: elevation ``` - -This example creates two sensors to indicate whether the temperature is rising or falling at a rate of at least 3 degrees an hour, and collects samples over a two hour period: +This example creates two sensors to indicate whether the temperature is +rising or falling at a rate of at least 3 degrees an hour, +and collects samples over a two hour period: ```yaml binary_sensor: diff --git a/source/_components/binary_sensor.workday.markdown b/source/_components/binary_sensor.workday.markdown index 21280a72ba4..b32983d2027 100644 --- a/source/_components/binary_sensor.workday.markdown +++ b/source/_components/binary_sensor.workday.markdown @@ -13,13 +13,19 @@ ha_iot_class: "Local Polling" ha_release: 0.41 --- -The `workday` binary sensor indicates, whether the current day is a workday or not. It allows specifying, which days of the week counts as workdays and also uses the python module [holidays](https://pypi.python.org/pypi/holidays) to incorporate information about region-specific public holidays. +The `workday` binary sensor indicates, whether the current day is a workday or +not. It allows specifying, which days of the week counts as workdays and also +uses the python module [holidays](https://pypi.python.org/pypi/holidays) +to incorporate information about region-specific public holidays. ## {% linkable_title Configuration %} -Check the [country list](https://github.com/dr-prodigy/python-holidays#available-countries) for available province. +Check the +[country list](https://github.com/dr-prodigy/python-holidays#available-countries) +for available province. -To enable the `workday` sensor in your installation, add the following to your `configuration.yaml` file: +To enable the `workday` sensor in your installation, +add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -29,20 +35,50 @@ binary_sensor: workdays: [mon, wed, fri] ``` -Configuration variables: +{% configuration %} +name: + description: A name for this sensor. + required: false + type: string + default: Workday Sensor +country: + description: > + Country code according to + [holidays](https://pypi.python.org/pypi/holidays/0.9.4) notation. + required: true + type: string +province: + description: > + Province code according to + [holidays](https://pypi.python.org/pypi/holidays/0.9.4) notation. + required: false + type: string +workdays: + description: List of workdays. + required: false + type: list + default: "[mon, tue, wed, thu, fri]" +excludes: + description: List of workday excludes. + required: false + type: list + default: "[sat, sun, holiday]" +days_offset: + description: Set days offset. + required: false + type: int + default: 0 +{% endconfiguration %} -- **name** (*Optional*): A name for this sensor. Defaults to *Workday Sensor* -- **country** (*Required*): Country code according to [holidays](https://pypi.python.org/pypi/holidays/0.9.4) notation. -- **province** (*Optional*): Province code according to [holidays](https://pypi.python.org/pypi/holidays/0.9.4) notation. Defaults to None. -- **workdays** (*Optional*): List of workdays. Defaults to `mon`, `tue`, `wed`, `thu`, `fri`. -- **excludes** (*Optional*): List of workday excludes. Defaults to `sat`, `sun`, `holiday`. -- **days_offset** (*Optional*): Set days offset. Defaults to `0`. - -Days are specified as follows: `mon`, `tue`, `wed`, `thu`, `fri`, `sat`, `sun`. The keyword `holiday` is used for public holidays identified by the holidays module. +Days are specified as follows: `mon`, `tue`, `wed`, `thu`, `fri`, `sat`, `sun`. +The keyword `holiday` is used for public +holidays identified by the holidays module.

-If you use the sensor for Norway (`NO`) you need to wrap `NO`in quotes or write the name in full. Otherwise the value is evaluated as `False`. -If you use the sensor for Canada (`CA`) with Ontario (`ON`) as `province:` then you need to wrap `ON` in quotes. Otherwise the value is evaluated as `True` (check the YAML documentation for further details) and the sensor will not work. +If you use the sensor for Norway (`NO`) you need to wrap `NO` in quotes or write the name in full. +Otherwise the value is evaluated as `false`. +If you use the sensor for Canada (`CA`) with Ontario (`ON`) as `province:` then you need to wrap `ON` in quotes. +Otherwise the value is evaluated as `true` (check the YAML documentation for further details) and the sensor will not work.

Example usage for automation: diff --git a/source/_components/blink.markdown b/source/_components/blink.markdown index 217dcce7438..54c2afbabf3 100644 --- a/source/_components/blink.markdown +++ b/source/_components/blink.markdown @@ -13,9 +13,11 @@ ha_release: "0.40" ha_iot_class: "Cloud Polling" --- -The `blink` component lets you view camera images and motion events from [Blink](http://blinkforhome.com) camera and security systems. +The `blink` component lets you view camera images and motion events +from [Blink](http://blinkforhome.com) camera and security systems. -You will need your Blink login information (username, usually you email address, and password) to use this module. +You will need your Blink login information (username, which is +usually your email address, and password) to use this module. To set it up, add the following information to your `configuration.yaml` file: @@ -26,21 +28,32 @@ blink: password: YOUR_PASSWORD ``` -Configuration variables: - -- **username** (*Required*): Your username to login to Blink. -- **password** (*Required*): Your password to login to Blink. +{% configuration %} +username: + description: Your username to login to Blink. + required: true + type: string +password: + description: Your password to login to Blink. + required: true + type: string +{% endconfiguration %} Once loaded, your front end will have the following components: -* A camera image for each camera in your system. -* A binary_sensor per camera that indicates whether motion detection is enabled. -* A binary_sensor for the system that indicates if the system is armed or disarmed. -* A sensor per camera that reports temperature. -* A sensor per camera that reports battery level. -* A sensor per camera that reports unread notification (i.e., detected motion events). +- A camera image for each camera in your system. +- A binary_sensor per camera that indicates whether motion detection is enabled. +- A binary_sensor for the system that indicates if the system is armed or disarmed. +- A sensor per camera that reports temperature. +- A sensor per camera that reports battery level. +- A sensor per camera that reports unread notification (i.e., detected motion events). -Since the cameras are battery operated, the images are only updated in Home Assistant when the user manually forces a new photo. This image can be updated with the `snap_picture` service to force Home Assistant to request an update from Blink's servers. As a note, all of the camera-specific sensors are only polled when a new image is requested from the camera. This means that relying on any of these sensors to provide timely and accurate data is not recommended. +Since the cameras are battery operated, the images are only updated in Home +Assistant when the user manually forces a new photo. This image can be updated +with the `snap_picture` service to force Home Assistant to request an update +from Blink's servers. As a note, all of the camera-specific sensors are only +polled when a new image is requested from the camera. This means that relying on +any of these sensors to provide timely and accurate data is not recommended. Services: @@ -51,7 +64,8 @@ This services are available for the `blink` component: - snap_picture -For `arm_system`, the value sent can be either `True` or `False` and will arm and disarm the whole Blink system. Arm system example: +For `arm_system`, the value sent can be either `true` or `false` +and will arm and disarm the whole Blink system. Arm system example: ```json { @@ -59,7 +73,11 @@ For `arm_system`, the value sent can be either `True` or `False` and will arm an } ``` -Arm camera follows a similar structure, but each individual camera can have motion detection enabled or disabled. Because of this, you also need to supply a name. For example, if you have a camera named "Living Room" and you want to turn off motion detection on that camera, you would call the `arm_camera` service with the following payload: +Arm camera follows a similar structure, but each individual camera can have +motion detection enabled or disabled. Because of this, +you also need to supply a name. For example, if you have a camera named +"Living Room" and you want to turn off motion detection on that camera, +you would call the `arm_camera` service with the following payload: ```json { @@ -68,7 +86,8 @@ Arm camera follows a similar structure, but each individual camera can have moti } ``` -The `snap_picture` service takes the camera name as the payload and with take a new picture with your camera. +The `snap_picture` service takes the camera name as the +payload and with take a new picture with your camera. ```json { diff --git a/source/_components/calendar.caldav.markdown b/source/_components/calendar.caldav.markdown index 8ea6b6ad087..8f27342be6c 100644 --- a/source/_components/calendar.caldav.markdown +++ b/source/_components/calendar.caldav.markdown @@ -12,14 +12,22 @@ ha_iot_class: "Cloud Polling" ha_release: "0.60" --- - -The `caldav` platform allows you to connect to your WebDav calendar and generate binary sensors. A different sensor will be created for each individual calendar, or you can specify custom calendars which match a criteria you define (more on that below). These sensors will be `on` if you have an on going event in that calendar or `off` if the event is later in time, or if there is no event at all. The WebDav calendar get updated roughly every 15 minutes. +The `caldav` platform allows you to connect to your WebDav calendar and generate +binary sensors. A different sensor will be created for each individual calendar, +or you can specify custom calendars which match a criteria you define (more on +that below). These sensors will be `on` if you have an on going event in that +calendar or `off` if the event is later in time, or if there is no event at all. +The WebDav calendar get updated roughly every 15 minutes. ### {% linkable_title Prerequisites %} -You need to have a CalDav server and credentials for it. This component was tested against [Baikal](http://sabre.io/baikal/) but any component complying with the RFC4791 should work. [Nextcloud](https://nextcloud.com/) and [Owncloud](https://owncloud.org/) work fine. +You need to have a CalDav server and credentials for it. This component was +tested against [Baikal](http://sabre.io/baikal/) but any component complying +with the RFC4791 should work. [Nextcloud](https://nextcloud.com/) +and [Owncloud](https://owncloud.org/) work fine. -You might need some additional system packages to compile the Python caldav library. On a Debian based system, install them by: +You might need some additional system packages to compile the +Python caldav library. On a Debian based system, install them by: ```bash $ sudo apt-get install libxml2-dev libxslt1-dev zlib1g-dev @@ -27,7 +35,8 @@ $ sudo apt-get install libxml2-dev libxslt1-dev zlib1g-dev ### {% linkable_title Basic Setup %} -To integrate a WebDav calendar in Home Assistant, add the following section to your `configuration.yaml` file: +To integrate a WebDav calendar in Home Assistant, +add the following section to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry for baikal @@ -47,12 +56,16 @@ calendar: url: https://nextcloud.example.com/remote.php/dav ``` -This example will generate default binary sensors for each calendar you have in your account. Those calendars will be `on` when there is an ongoing event and `off` if not. Events that last a whole day are ignored in those calendars. You have to setup custom calendars in order to take them into account or for advanced event filtering. - +This example will generate default binary sensors for each calendar you have in +your account. Those calendars will be `on` when there is an ongoing event and +`off` if not. Events that last a whole day are ignored in those calendars. +You have to setup custom calendars in order to take them into account or for +advanced event filtering. ### {% linkable_title Custom calendars %} -You have the possibility to create multiple binary sensors for events that match certain conditions. +You have the possibility to create multiple binary +sensors for events that match certain conditions. ```yaml # Example configuration.yaml entry @@ -70,9 +83,13 @@ calendar: search: 'Warmup' ``` -This will create two binary sensors for the calendar name Agenda: "HomeOffice" and "WarmupFlat". Those sensors will be `on` if there is an ongoing event matching the regular expression specified in `search`. In custom calendars, events that last a whole day are taken into account. +This will create two binary sensors for the calendar name Agenda: "HomeOffice" +and "WarmupFlat". Those sensors will be `on` if there is an ongoing event +matching the regular expression specified in `search`. +In custom calendars, events that last a whole day are taken into account. -Please note that when you configure custom calendars, the default ones are not created anymore. +Please note that when you configure custom calendars, +the default ones are not created anymore. {% configuration %} url: @@ -89,7 +106,9 @@ password: type: string calendars: required: false - description: List of the calendars to filter. Empty or absent means no filtering, i.e. all calendars will be added. + description: > + List of the calendars to filter. + Empty or absent means no filtering, i.e. all calendars will be added. type: list custom_calendars: required: false @@ -106,11 +125,12 @@ custom_calendars: type: string search: required: true - description: Regular expression for filtering the events based on the content of their summary, description or location. + description: > + Regular expression for filtering the events based on + the content of their summary, description or location. type: string {% endconfiguration %} - ### {% linkable_title Sensor attributes %} - **offset_reached**: If set in the event title and parsed out will be on/off once the offset in the title in minutes is reached. So the title Very important meeting !!-10 would trigger this attribute to be on 10 minutes before the event starts. @@ -136,9 +156,12 @@ calendar: - holidays ``` -Full example with automation to wake up to music if not holiday. Prerequisite: you have a calendar named "work" where you create calendar entries containing "Holiday". +Full example with automation to wake up to music if not holiday. +Prerequisite: you have a calendar named "work" where +you create calendar entries containing "Holiday". -Custom calendar names are built from the main calendar + name of the custom calendar. +Custom calendar names are built from the +main calendar + name of the custom calendar. ```yaml # configuration.yaml @@ -165,5 +188,4 @@ calendar: - condition: state entity_id: calendar.work_holiday state: 'off' - ``` diff --git a/source/_components/calendar.google.markdown b/source/_components/calendar.google.markdown index d44f7d9ff5e..2c18ccd65a8 100644 --- a/source/_components/calendar.google.markdown +++ b/source/_components/calendar.google.markdown @@ -13,12 +13,17 @@ ha_iot_class: "Cloud Polling" ha_release: 0.33 --- - -The `google` calendar platform allows you to connect to your [Google Calendars](https://calendar.google.com) and generate binary sensors. The sensors created can trigger based on any event on the calendar or only for matching events. When you first setup this component it will generate a new configuration file `google_calendars.yaml` that will contain information about all of the calendars you can see. +The `google` calendar platform allows you to connect to your +[Google Calendars](https://calendar.google.com) and generate binary sensors. +The sensors created can trigger based on any event on the calendar or only for +matching events. When you first setup this component it will generate a new +configuration file `google_calendars.yaml` that will contain information about +all of the calendars you can see. ## {% linkable_title Prerequisites %} -Generate a Client ID and Client Secret on [Google Developers Console](https://console.developers.google.com/start/api?id=calendar). +Generate a Client ID and Client Secret on +[Google Developers Console](https://console.developers.google.com/start/api?id=calendar). 1. Follow the wizard using the following information. 1. When it gets to the point of asking _Which API are you using?_ just click cancel. @@ -32,7 +37,8 @@ Generate a Client ID and Client Secret on [Google Developers Console](https://co ## {% linkable_title Configuration %} -To integrate Google Calendar in Home Assistant, add the following section to your `configuration.yaml` file: +To integrate Google Calendar in Home Assistant, +add the following section to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -51,7 +57,9 @@ client_secret: required: true type: string track_new_calendar: - description: Will automatically generate a binary sensor when a new calendar is detected. The system scans for new calendars only on startup. + description: > + Will automatically generate a binary sensor when a new calendar + is detected. The system scans for new calendars only on startup. required: false type: boolean default: true @@ -59,7 +67,10 @@ track_new_calendar: The next steps will require you to have Home Assistant running. -After you have it running complete the Google authentication that pops up. It will give you a URL and a code to enter. This will grant your Home Assistant service access to all the Google Calendars that the account you authenticate with can read. This is a Read-Only view of these calendars. +After you have it running complete the Google authentication that pops up. +It will give you a URL and a code to enter. This will grant your Home Assistant +service access to all the Google Calendars that the account you +authenticate with can read. This is a Read-Only view of these calendars. ## {% linkable_title Calendar Configuration %} @@ -86,23 +97,61 @@ A basic entry for a single calendar looks like: search: "#UnImportant" ``` -Variables: +{% configuration %} +cal_id: + description: The Google *generated* unique id for this calendar. + required: true + type: string + default: "**DO NOT CHANGE THE DEFAULT VALUE**" +entities: + description: Yes, you can have multiple sensors for a calendar! + required: true + type: list + keys: + device_id: + description: > + The name that all your automations/scripts + will use to reference this device. + required: true + type: string + name: + description: What is the name of your sensor that you'll see in the frontend. + required: true + type: string + track: + description: "Should we create a sensor `true` or ignore it `false`?" + required: true + type: boolean + search: + description: If set will only trigger for matched events. + required: false + type: string + offset: + description: > + A set of characters that precede a number in the event title + for designating a pre-trigger state change on the sensor. + required: false + type: string + default: "!!" + ignore_availability: + description: "Should we respect `free`/`busy` flags?" + required: false + type: boolean + default: true +{% endconfiguration %} -- **cal_id**: The Google generated unique id for this calendar. **DO NOT CHANGE** -- **entities**: Yes, you can have multiple sensors for a calendar! - - **device_id**: (*Required*): The name that all your automations/scripts will use to reference this device. - - **name**: (*Required*): What is the name of your sensor that you'll see in the frontend. - - **track**: (*Required*): Should we create a sensor `True` or ignore it `False`? - - **search**: (*Optional*): If set will only trigger for matched events. - - **offset**: (*Optional*): A set of characters that precede a number in the event title for designating a pre-trigger state change on the sensor. (Default: `!!`) - - **ignore_availability**: (*Optional*): Should we respect `free`/`busy` flags? (Defaults to `true`) +From this we will end up with the binary sensors `calendar.test_unimportant` and +`calendar.test_important` which will toggle themselves on/off based on events on +the same calendar that match the search value set for each. +You'll also have a sensor `calendar.test_everything` that will +not filter events out and always show the next event available. -From this we will end up with the binary sensors `calendar.test_unimportant` and `calendar.test_important` which will toggle themselves on/off based on events on the same calendar that match the search value set for each. You'll also have a sensor `calendar.test_everything` that will not filter events out and always show the next event available. - -But what if you only wanted it to toggle based on all events? Just leave out the *search* parameter. +But what if you only wanted it to toggle based on all events? +Just leave out the *search* parameter.

-If you use a `#` sign for `search` then wrap the whole search term in quotes. Otherwise everything following the hash sign would be considered a YAML comment. +If you use a `#` sign for `search` then wrap the whole search term in quotes. +Otherwise everything following the hash sign would be considered a YAML comment.

### {% linkable_title Sensor attributes %} diff --git a/source/_components/camera.mjpeg.markdown b/source/_components/camera.mjpeg.markdown index de03528200f..d8d10a0448b 100644 --- a/source/_components/camera.mjpeg.markdown +++ b/source/_components/camera.mjpeg.markdown @@ -13,10 +13,11 @@ ha_release: pre 0.7 ha_iot_class: "depends" --- +The `mjpeg` camera platform allows you to integrate IP cameras which are capable +to stream their video with MJPEG into Home Assistant. -The `mjpeg` camera platform allows you to integrate IP cameras which are capable to stream their video with MJPEG into Home Assistant. - -To enable this camera in your installation, add the following to your `configuration.yaml` file: +To enable this camera in your installation, +add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -25,17 +26,36 @@ camera: mjpeg_url: http://192.168.1.92/mjpeg ``` -Configuration variables: - -- **mjpeg_url** (*Required*): The URL your camera serves the video on, eg. http://192.168.1.21:2112/ -- **still_image_url** (*Optional*): The URL for thumbnail picture if camera support that. -- **name** (*Optional*): This parameter allows you to override the name of your camera. -- **username** (*Optional*): The username for accessing your camera. -- **password** (*Optional*): The password for accessing your camera. -- **authentication** (*Optional*): `basic` (default) or `digest` auth for requests. +{% configuration %} +mjpeg_url: + description: The URL your camera serves the video on, eg. http://192.168.1.21:2112/ + required: true + type: string +still_image_url: + description: The URL for thumbnail picture if camera support that. + required: false + type: string +name: + description: This parameter allows you to override the name of your camera. + required: false + type: string +username: + description: The username for accessing your camera. + required: false + type: string +password: + description: The password for accessing your camera. + required: false + type: string +authentication: + description: "`basic` or `digest` auth for requests." + required: false + type: string + default: basic +{% endconfiguration %}

-There is a known issue in urllib3 that you will get error messages in your logs like [StartBoundaryNotFoundDefect(), MultipartInvariantViolationDefect()], unparsed data: '' but the component still works fine. You can ignore the messages. +There is a known issue in urllib3 that you will get error messages in your logs like [StartBoundaryNotFoundDefect(), MultipartInvariantViolationDefect()], unparsed data: '' but the component still works fine. You can ignore the messages.

## {% linkable_title Examples %} diff --git a/source/_components/cast.markdown b/source/_components/cast.markdown index 7243ad78a09..1bd86aef388 100644 --- a/source/_components/cast.markdown +++ b/source/_components/cast.markdown @@ -15,15 +15,20 @@ ha_iot_class: "Local Polling" redirect_from: /components/media_player.cast/ --- - -Google Cast devices like Android TVs and Chromecasts will be automatically discovered if you enable [the discovery component]({{site_root}}/components/discovery/). If you don't have the discovery component enabled, you can enable the Cast component by going to the Integrations page inside the config panel. +Google Cast devices like Android TVs and Chromecasts will be automatically +discovered if you enable [the discovery component](/components/discovery/). If +you don't have the discovery component enabled, you can enable the Cast +component by going to the Integrations page inside the config panel. ## {% linkable_title Advanced use %} -The Cast component has some extra configuration options available for advanced users. You will still need to create a config entry to initialize the Cast component. - -For example, Cast devices can only be discovered if they are on the same subnet as Home Assistant. If this is not the case, you want to configure the IP address of the Cast device directly: +The Cast component has some extra configuration options available for advanced +users. You will still need to create a config entry to initialize the Cast +component. +For example, Cast devices can only be discovered if they are on the same subnet +as Home Assistant. If this is not the case, +you want to configure the IP address of the Cast device directly: ```yaml # Example configuration.yaml entry @@ -32,7 +37,31 @@ cast: - host: 192.168.1.10 ``` -Configuration variables: +{% configuration %} +media_player: + description: A list that contains all Cast devices. + required: true + type: list + keys: + host: + description: Use only if you don't want to scan for devices. + required: false + type: string + ignore_cec: + description: > + A list of Chromecasts that should ignore CEC data for determining the + active input. [See the upstream documentation for more information.](https://github.com/balloob/pychromecast#ignoring-cec-data) + required: false + type: list +{% endconfiguration %} -- **host** (*Optional*): Use only if you don't want to scan for devices. -- **ignore_cec** (*Optional*) A list of Chromecasts that should ignore CEC data for determining the active input. [See the upstream documentation for more information.](https://github.com/balloob/pychromecast#ignoring-cec-data) +If you want to manually configure multiple Cast media players, you can define +those as follows: + +```yaml +# Example configuration.yaml entry for multiple devices +cast: + media_player: + - host: IP_ADDRESS_DEVICE_1 + - host: IP_ADDRESS_DEVICE_2 +``` diff --git a/source/_components/cover.template.markdown b/source/_components/cover.template.markdown index c6eb6392f20..fc3f6b8db92 100644 --- a/source/_components/cover.template.markdown +++ b/source/_components/cover.template.markdown @@ -13,12 +13,14 @@ ha_iot_class: "Local Push" logo: home-assistant.png --- -The `template` platform can create covers that combine components and provides the ability to run scripts or invoke services for each of the open, close, stop, position and tilt commands of a cover. +The `template` platform can create covers that combine components and provides +the ability to run scripts or invoke services for each of the open, +close, stop, position and tilt commands of a cover. ## {% linkable_title Configuration %} -To enable Template Covers in your installation, add the following to your -`configuration.yaml` file: +To enable Template Covers in your installation, +add the following to your `configuration.yaml` file: {% raw %} ```yaml @@ -87,12 +89,12 @@ cover: optimistic: description: Force cover position to use [optimistic mode](#optimistic-mode). required: false - type: bool + type: boolean default: false tilt_optimistic: description: Force cover tilt position to use [optimistic mode](#optimistic-mode). required: false - type: bool + type: boolean default: false tilt_template: description: Defines a template to get the tilt state of the cover. Legal values are numbers between `0` (closed) and `100` (open). @@ -103,8 +105,8 @@ cover: ## {% linkable_title Considerations %} If you are using the state of a platform that takes extra time to load, the -Template Cover may get an `unknown` state during startup. This results -in error messages in your log file until that platform has completed loading. +Template Cover may get an `unknown` state during startup. This results in error +messages in your log file until that platform has completed loading. If you use `is_state()` function in your template, you can avoid this situation. For example, you would replace {% raw %}`{{ states.switch.source.state == 'on' }}`{% endraw %} @@ -114,14 +116,14 @@ result: ## {% linkable_title Optimistic Mode %} -In optimistic mode, the cover position state is maintained internally. This -mode is automatically enabled if neither [`value_template`](#value_template) or +In optimistic mode, the cover position state is maintained internally. This mode +is automatically enabled if neither [`value_template`](#value_template) or [`position_template`](#position_template) are specified. Note that this is unlikely to be very reliable without some feedback mechanism, since there is otherwise no way to know if the cover is moving properly. The cover can be -forced into optimistic mode by using the [`optimistic`](#optimistic) -attribute. There is an equivalent mode for `tilt_position` that is enabled -when [`tilt_template`](#tilt_template) is not specified or when the +forced into optimistic mode by using the [`optimistic`](#optimistic) attribute. +There is an equivalent mode for `tilt_position` that is enabled when +[`tilt_template`](#tilt_template) is not specified or when the [`tilt_optimistic`](#tilt_optimistic) attribute is used. ## {% linkable_title Examples %} diff --git a/source/_components/device_tracker.tomato.markdown b/source/_components/device_tracker.tomato.markdown index 998b528d510..6543004c7ab 100644 --- a/source/_components/device_tracker.tomato.markdown +++ b/source/_components/device_tracker.tomato.markdown @@ -12,12 +12,21 @@ ha_category: Presence Detection ha_release: pre 0.7 --- +The `tomato` platform requires an extra config variable called `http_id`. The +value can be obtained by logging in to the Tomato admin interface and search for +`http_id` in the page source code. -The `tomato` platform requires an extra config variable called `http_id`. The value can be obtained by logging in to the Tomato admin interface and search for `http_id` in the page source code. +Because of a limitation in Tomato's API, this platform will only track wireless +devices. If tracking wired devices like a Philips Hue Hub is necessary, it is +possible to use another platform like +[NMAP](/components/device_tracker.nmap_tracker/). -Because of a limitation in Tomato's API, this platform will only track wireless devices. If tracking wired devices like a Philips Hue Hub is necessary, it is possible to use another platform like [Nmap](/components/device_tracker.nmap_tracker/). +Because of a limitation in Tomato's API, this platform will only track wireless devices. +If tracking wired devices like a Philips Hue Hub is necessary, +it is possible to use another platform like [Nmap](/components/device_tracker.nmap_tracker/). -To use this device tracker in your installation, add the following to your `configuration.yaml` file: +To use this device tracker in your installation, +add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -42,12 +51,12 @@ port: ssl: description: "Whether to connect via `https`." required: false - type: bool + type: boolean default: false verify_ssl: description: "If SSL verification for https resources needs to be turned off (for self-signed certs, etc.) this can take on boolean values `False` or `True` or you can pass a location on the device where a certificate can be used for verification e.g., `/mnt/NAS/router_cert.pem`." required: false - type: [string, bool] + type: [string, boolean] default: true username: description: "The username of an user with administrative privileges, usually *admin*." @@ -63,13 +72,17 @@ http_id: type: string {% endconfiguration %} -See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. +See the [device tracker component page](/components/device_tracker/) for +instructions how to configure the people to be tracked. -A description of the API s available in this [Tomato API](http://paulusschoutsen.nl/blog/2013/10/tomato-api-documentation/) blog post. +A description of the API s available in this +[Tomato API](http://paulusschoutsen.nl/blog/2013/10/tomato-api-documentation/) +blog post. SSL Certificate: -Gathering the SSL Certificate of your router can be accomplished with this (or a similar) command: +Gathering the SSL Certificate of your router can be accomplished with this (or +a similar) command: ```bash openssl s_client -showcerts -connect 172.10.10.1:443 /dev/null | openssl x509 -outform PEM > router_cert.pem -``` \ No newline at end of file +``` diff --git a/source/_components/history.markdown b/source/_components/history.markdown index 206678c5107..cb8056ff091 100644 --- a/source/_components/history.markdown +++ b/source/_components/history.markdown @@ -12,10 +12,14 @@ ha_category: History ha_release: pre 0.7 --- +The `history` component will track everything that is going on within Home +Assistant and allows the user to browse through it. It depends on the `recorder` +component for storing the data and uses the same database setting. +If any entities are excluded from being recorded, +no history will be available for these entities. -The `history` component will track everything that is going on within Home Assistant and allows the user to browse through it. It depends on the `recorder` component for storing the data and uses the same database setting. If any entities are excluded from being recorded, no history will be available for these entities. - -To enable the history option in your installation, add the following to your `configuration.yaml` file: +To enable the history option in your installation, +add the following to your `configuration.yaml` file: ```yaml # Basic configuration.yaml entry @@ -29,22 +33,48 @@ history:

-Events are saved in a local database. Google Graphs is used to draw the graph. Drawing is happening 100% in your browser. No data is transferred to anyone at any time. +Events are saved in a local database. Google Graphs is used to draw the graph. +Drawing is happening 100% in your browser. No data is transferred to anyone at any time.

+{% configuration %} +exclude: + description: Configure which components should **not** be displayed. + required: false + type: map + keys: + entities: + description: The list of entity ids to be excluded from the history. + required: false + type: list + domains: + description: The list of domains to be excluded from the history. + required: false + type: list +include: + description: Configure which components should be displayed. + required: false + type: map + keys: + entities: + description: The list of entity ids to be included in the history. + required: false + type: list + domains: + description: The list of domains to be included in the history. + required: false + type: list +{% endconfiguration %} -Configuration variables: +Without any `include` or `exclude` configuration the history displays graphs for + every entity (well that's not exactly true - for instance `hidden` entities or + `scenes` are never shown) on a given date. If you are only interested in some + of the entities you have several options: -- **exclude** (*Optional*): Configure which components should **not** be displayed. - - **entities** (*Optional*): The list of entity ids to be excluded from the history. - - **domains** (*Optional*): The list of domains to be excluded from the history. -- **include** (*Optional*): Configure which components should be displayed. - - **entities** (*Optional*): The list of entity ids to be included to the history. - - **domains** (*Optional*): The list of domains to be included to the history. - -Without any `include` or `exclude` configuration the history displays graphs for every entity (well that's not exactly true - for instance `hidden` entities or `scenes` are never shown) on a given date. If you are only interested in some of the entities you have several options: - -Define domains and entities to `exclude` (aka. blacklist). This is convenient when you are basically happy with the information displayed, but just want to remove some entities or domains. Usually these are entities/domains which do not change (like `weblink`) or rarely change (like `updater` or `automation`). +Define domains and entities to `exclude` (aka. blacklist). This is convenient +when you are basically happy with the information displayed, but just want to +remove some entities or domains. Usually these are entities/domains which do not +change (like `weblink`) or rarely change (like `updater` or `automation`). ```yaml # Example configuration.yaml entry with exclude @@ -59,7 +89,10 @@ history: - sensor.date ``` -Define domains and entities to display by using the `include` configuration (aka. whitelist). If you have a lot of entities in your system and your `exclude` list is getting too large, it might be better just to define the entities or domains to `include`. +Define domains and entities to display by using the `include` configuration +(aka. whitelist). If you have a lot of entities in your system and your +`exclude` list is getting too large, it might be better just to define the +entities or domains to `include`. ```yaml # Example configuration.yaml entry with include @@ -71,7 +104,13 @@ history: - media_player ``` -Use the `include` list to define the domains/entities to display, and exclude some of them within the `exclude` list. This makes sense if you, for instance, include the `sensor` domain, but want to exclude some specific sensors. Instead of adding every sensor entity to the `include` `entities` list just include the `sensor` domain and exclude the sensor entities you are not interested in. Note that the order of any `include` `entities` will be displayed as listed in the configuration, otherwise, the display order is arbitrary. +Use the `include` list to define the domains/entities to display, and exclude +some of them within the `exclude` list. This makes sense if you, for instance, +include the `sensor` domain, but want to exclude some specific sensors. Instead +of adding every sensor entity to the `include` `entities` list just include the +`sensor` domain and exclude the sensor entities you are not interested in. +Note that the order of any `include` `entities` will be displayed as listed in +the configuration, otherwise, the display order is arbitrary. ```yaml # Example configuration.yaml entry with include and exclude @@ -87,9 +126,9 @@ history: - sensor.date ``` -If you'd like the order of display of the sensors to follow the way -they are listed in the included entity list, you can set the flag -`use_include_order` to True. +If you'd like the order of display of the sensors to follow the way they are +listed in the included entity list, +you can set the flag `use_include_order` to true. ```yaml # Example configuration.yaml entry using specified entity display order @@ -101,10 +140,10 @@ history: - light.front_porch ``` - #### {% linkable_title Implementation details %} -The history is stored in a SQLite database `home-assistant_v2.db` within your configuration directory unless the `recorder` component is set up differently. +The history is stored in a SQLite database `home-assistant_v2.db` within your +configuration directory unless the `recorder` component is set up differently. - events table is all events except `time_changed` that happened while recorder component was running. - states table contains all the `new_state` values of `state_changed` events. @@ -116,11 +155,14 @@ The history is stored in a SQLite database `home-assistant_v2.db` within your co - `last_updated`: timestamp anything has changed (state, attributes) - `created`: timestamp this entry was inserted into the database -When the `history` component queries the states table it only selects states where the state has changed: `WHERE last_changed=last_updated` +When the `history` component queries the states table it only selects states +where the state has changed: `WHERE last_changed=last_updated` -#### {% linkable_title On dates %} +#### {% linkable_title On dates %} -SQLite databases do not support native dates. That's why all the dates are saved in seconds since the UNIX epoch. Convert them manually using [this site](https://www.epochconverter.com/) or in Python: +SQLite databases do not support native dates. That's why all the dates are saved +in seconds since the UNIX epoch. Convert them manually using +[this site](https://www.epochconverter.com/) or in Python: ```python from datetime import datetime @@ -129,4 +171,5 @@ datetime.fromtimestamp(1422830502) #### {% linkable_title API %} -The history information is also available through the [RESTful API](/developers/rest_api/#get-apihistory). +The history information is also available through the +[RESTful API](/developers/rest_api/#get-apihistory). diff --git a/source/_components/http.markdown b/source/_components/http.markdown index 775cdb4624f..643f143fc84 100644 --- a/source/_components/http.markdown +++ b/source/_components/http.markdown @@ -11,10 +11,13 @@ logo: http.png ha_category: "Other" --- -The `http` component serves all files and data required for the Home Assistant frontend. You only need to add this to your configuration file if you want to change any of the default settings. +The `http` component serves all files and data required for the Home Assistant +frontend. You only need to add this to your configuration file if you want to +change any of the default settings.

-It is HIGHLY recommended that you set the `api_password`, especially if you are planning to expose your installation to the internet. +It is HIGHLY recommended that you set the `api_password`, +especially if you are planning to expose your installation to the internet.

@@ -27,27 +30,26 @@ http: api_password: YOUR_PASSWORD ``` -Configuration variables: - -{% configuration http %} +{% configuration %} api_password: description: Protect Home Assistant with a password. required: false type: string server_host: - description: 'Only listen to incoming requests on specific IP/host (default: bind to `0.0.0.0` which means accept all IPv4 connections). Use `server_host: "::0"` if you want to listen to (and only) IPv6.' + description: "Only listen to incoming requests on specific IP/host. By default it will accept all IPv4 connections. Use `server_host: ::0` if you want to listen to (and only) IPv6." required: false type: string + default: 0.0.0.0 server_port: description: Let you set a port to use. required: false - type: integer + type: int default: 8123 base_url: - description: "The URL that Home Assistant is available on the internet. For example: `hass-example.duckdns.org:8123`. Defaults to the local IP address. The iOS app finds local installations, if you have an outside URL use this so that you can auto-fill when discovered in the app." + description: "The URL that Home Assistant is available on the internet. For example: `hass-example.duckdns.org:8123`. The iOS app finds local installations, if you have an outside URL use this so that you can auto-fill when discovered in the app." required: false type: string - default: The local IP address + default: Your local IP address ssl_certificate: description: Path to your TLS/SSL certificate to serve Home Assistant over a secure connection. required: false @@ -64,15 +66,15 @@ cors_allowed_origins: description: "A list of origin domain names to allow [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing) requests from. Enabling this will set the `Access-Control-Allow-Origin` header to the Origin header if it is found in the list, and the `Access-Control-Allow-Headers` header to `Origin, Accept, X-Requested-With, Content-type, X-HA-access`. You must provide the exact Origin, i.e. `https://www.home-assistant.io` will allow requests from `https://www.home-assistant.io` but __not__ `http://www.home-assistant.io`." required: false type: string, list -trusted_proxies: - description: "List of trusted proxies, consisting of IP addresses or networks, that are allowed to set the `X-Forwarded-For` header. This is required when using `use_x_forwarded_for` because all requests to Home Assistant, regardless of source, will arrive from the reverse proxy IP address. Therefore in a reverse proxy scenario, this option should be set with extreme care." - required: false - type: string, list use_x_forwarded_for: description: "Enable parsing of the `X-Forwarded-For` header, passing on the client's correct IP address in proxied setups. You **must** also whitelist trusted proxies using the `trusted_proxies` setting above for this to work. Non-whitelisted requests with this header will be considered IP spoofing attacks, and the header will, therefore, be ignored." required: false type: boolean default: false +trusted_proxies: + description: "List of trusted proxies, consisting of IP addresses or networks, that are allowed to set the `X-Forwarded-For` header. This is required when using `use_x_forwarded_for` because all requests to Home Assistant, regardless of source, will arrive from the reverse proxy IP address. Therefore in a reverse proxy scenario, this option should be set with extreme care." + required: false + type: string, list trusted_networks: description: "List of trusted networks, consisting of IP addresses or networks, that are allowed to bypass password protection when accessing Home Assistant. If using a reverse proxy with the `use_x_forwarded_for` and `trusted_proxies` options enabled, requests proxied to Home Assistant with a trusted `X-Forwarded-For` header will appear to come from the IP given in that header instead of the proxy IP." required: false @@ -83,9 +85,9 @@ ip_ban_enabled: type: boolean default: false login_attempts_threshold: - description: "Number of failed login attempt from single IP after which it will be automatically banned if `ip_ban_enabled` is True. When set to -1 no new automatic bans will be added." + description: "Number of failed login attempt from single IP after which it will be automatically banned if `ip_ban_enabled` is `true`. When set to -1 no new automatic bans will be added." required: false - type: integer + type: int default: -1 ssl_profile: description: The [Mozilla SSL profile](https://wiki.mozilla.org/Security/Server_Side_TLS) to use. Only lower if you are experiencing integrations causing SSL handshake errors. @@ -106,7 +108,7 @@ http: cors_allowed_origins: - https://google.com - https://www.home-assistant.io - use_x_forwarded_for: True + use_x_forwarded_for: true trusted_proxies: - 127.0.0.1 - ::1 @@ -115,36 +117,55 @@ http: - ::1 - 192.168.0.0/24 - fd00::/8 - ip_ban_enabled: True + ip_ban_enabled: true login_attempts_threshold: 5 ``` -The [Set up encryption using Let's Encrypt](/blog/2015/12/13/setup-encryption-using-lets-encrypt/) blog post gives you details about the encryption of your traffic using free certificates from [Let's Encrypt](https://letsencrypt.org/). +The [Set up encryption using Let's Encrypt](/blog/2015/12/13/setup-encryption-using-lets-encrypt/) +blog post gives you details about the encryption of your traffic using free +certificates from [Let's Encrypt](https://letsencrypt.org/). -Or use a self signed certificate following the instructions here [Self-signed certificate for SSL/TLS](/docs/ecosystem/certificates/tls_self_signed_certificate/). +Or use a self signed certificate following the instructions here +[Self-signed certificate for SSL/TLS](/docs/ecosystem/certificates/tls_self_signed_certificate/). ## {% linkable_title APIs %} -On top of the `http` component is a [REST API](/developers/rest_api/), [Python API](/developers/python_api/) and [WebSocket API](/developers/websocket_api/) available. There is also support for [Server-sent events](/developers/server_sent_events/). +On top of the `http` component is a [REST API](/developers/rest_api/), +[Python API](/developers/python_api/) and +[WebSocket API](/developers/websocket_api/) available. There is also support for +[Server-sent events](/developers/server_sent_events/). -The `http` platforms are not real platforms within the meaning of the terminology used around Home Assistant. Home Assistant's [REST API](/developers/rest_api/) sends and receives messages over HTTP. +The `http` platforms are not real platforms within the meaning of the +terminology used around Home Assistant. Home Assistant's +[REST API](/developers/rest_api/) sends and receives messages over HTTP. ## {% linkable_title HTTP sensors %} -To use those kind of [sensors](/components/sensor.http/) or [binary sensors](components/binary_sensor.http/) in your installation no configuration in Home Assistant is needed. All configuration is done on the devices themselves. This means that you must be able to edit the target URL or endpoint and the payload. The entity will be created after the first message has arrived. +To use those kind of [sensors](/components/sensor.http/) or +[binary sensors](components/binary_sensor.http/) in your installation no +configuration in Home Assistant is needed. All configuration is done on the +devices themselves. This means that you must be able to edit the target URL or +endpoint and the payload. +The entity will be created after the first message has arrived. -All [requests](/developers/rest_api/#post-apistatesltentity_id) need to be sent to the endpoint of the device and must be **POST**. +All [requests](/developers/rest_api/#post-apistatesltentity_id) need to be sent +to the endpoint of the device and must be **POST**. ## {% linkable_title IP filtering and banning %} -If you want to apply additional IP filtering, and automatically ban brute force attempts, set `ip_ban_enabled` to `True` and the maximum number of attempts. After the first ban, an `ip_bans.yaml` file will be created in the root configuration folder. It will have the banned IP address and time in UTC when it was added: +If you want to apply additional IP filtering, and automatically ban brute force +attempts, set `ip_ban_enabled` to `true` and the maximum number of attempts. +After the first ban, an `ip_bans.yaml` file will be created in the root +configuration folder. +It will have the banned IP address and time in UTC when it was added: ```yaml 127.0.0.1: banned_at: '2016-11-16T19:20:03' ``` -After a ban is added a Persistent Notification is populated to the Home Assistant frontend. +After a ban is added a Persistent Notification is populated to the Home +Assistant frontend.

Please note, that sources from `trusted_networks` won't be banned automatically. @@ -152,7 +173,11 @@ Please note, that sources from `trusted_networks` won't be banned automatically. ## {% linkable_title Hosting files %} -If you want to use Home Assistant to host or serve static files then create a directory called `www` under the configuration path (`/config` on Hass.io, `.homeassistant` elsewhere). The static files in `www/` can be accessed by the following URL `http://your.domain:8123/local/`, for example `audio.mp3` would be accessed as `http://your.domain:8123/local/audio.mp3`. +If you want to use Home Assistant to host or serve static files then create a +directory called `www` under the configuration path (`/config` on Hass.io, +`.homeassistant` elsewhere). The static files in `www/` can be accessed by the +following URL `http://your.domain:8123/local/`, for example `audio.mp3` would +be accessed as `http://your.domain:8123/local/audio.mp3`.

If you've had to create the `www/` folder for the first time, you'll need to restart Home Assistant. diff --git a/source/_components/ihc.markdown b/source/_components/ihc.markdown index 0030d30361f..5fca84708fe 100644 --- a/source/_components/ihc.markdown +++ b/source/_components/ihc.markdown @@ -13,30 +13,32 @@ ha_release: "0.62" ha_iot_class: "Local Push" --- -IHC Controller integration for Home Assistant allows you to connect the LK IHC controller to Home Assistant. -(The controller is sold under other names in different countries - "ELKO Living system" in Sweden and Norway) +IHC Controller integration for Home Assistant allows you to connect the LK IHC +controller to Home Assistant. The controller is sold under other names in +different countries - "ELKO Living system" in Sweden and Norway -An `ihc` section must be present in the `configuration.yaml` file and contain the following options: +An `ihc` section must be present in the `configuration.yaml` file and contain +the following options: ```yaml # Example configuration.yaml entry ihc: url: http://192.168.1.3 - username: admin - password: mysecret - auto_setup: True - info: True + username: YOUR_USERNAME + password: YOUR_PASSWORD + info: true ``` {% configuration %} auto_setup: - description: True to have IHC products auto setup. + description: Automatic setup of IHC products. required: false - type: bool + type: boolean + default: true info: - description: If True additional IHC info will be shown on each component. + description: Shows the IHC "name", "note" and "position" attributes of each component. This will make it easier to identify the IHC products within Home Assistant. required: false - type: bool + type: boolean password: description: The password for the IHC Controller. required: true @@ -51,40 +53,44 @@ username: type: string {% endconfiguration %} -The info option will show the IHC "name", "note" and "position" attributes. -This will make it easier to identify the IHC products within Home Assistant - There is currently support for the following device types within Home Assistant: -- [Binary Sensor](/components/binary_sensor.ihc/) -- [Sensor](/components/sensor.ihc/) -- [Light](/components/light.ihc/) -- [Switch](/components/switch.ihc/) +- [Binary Sensor](/components/binary_sensor.ihc/) +- [Sensor](/components/sensor.ihc/) +- [Light](/components/light.ihc/) +- [Switch](/components/switch.ihc/) ### Auto setup of IHC products -If the auto setup is enabled, the `ihc` component will automatically find IHC products and insert these as devices in Home Assistant. -To disable this set auto_setup to False. (Auto setup is on by default) -See the individual device types for a list of IHC products to be recognized automatically. +If the auto setup is enabled, the `ihc` component will automatically find IHC +products and insert these as devices in Home Assistant. +To disable this set auto_setup to false. See the individual device types for a +list of IHC products to be recognized automatically. -Components will get a default name that is a combination of the IHC group and IHC resource id. -If you want to change the display names use the [Customizing entities](/docs/configuration/customizing-devices/) +Components will get a default name that is a combination of the IHC group and +IHC resource id. +If you want to change the display names use the +[Customizing entities](/docs/configuration/customizing-devices/). ### {% linkable_title Manual setup %} -Each device is associated with an IHC resource id. -To manually setup components you specify resource ids from the IHC project. -(The IHC project is the file you edit/upload to the IHC Controller using LK IHC Visual - or similar program if your controller is not the LK brand). -The project file is an XML file and you can view it with any text/XML editor. -You can rename it to have the XML extension and use a browser like Chrome or Internet Explorer. -The resources are the \ or \ eleements. -Shown as inputs or outputs of products in the IHC application. -You can also use inputs and outputs from function blocks. -These are the \ and \ elements from the project file. +Each device is associated with an IHC resource id. To manually setup components +you specify resource ids from the IHC project. The IHC project is the file you +edit/upload to the IHC Controller using LK IHC Visual - or similar program if +your controller is not the LK brand. +The project file is an XML file and you can view it with any text/XML editor. +You can rename it to have the XML extension and use a browser like Chrome or +Internet Explorer. The resources are the \ or \ +elements. Shown as inputs or outputs of products in the IHC application. You can +also use inputs and outputs from function blocks. These are the +\ and \ elements from the project file. -The IHC resource id should be specified as an integer value. (In the project file the id will be specified as a hex number) +The IHC resource id should be specified as an integer value. In the project file +the id will be specified as a hex number. -If you want an easier way to get the IHC resource ids, you can download the [Alternative Service View application](https://www.dingus.dk/updated-ihc-alternative-service-view/). -The application will show the product tree. You can expand it, select inputs and outputs and when selected you can see the resource id. +If you want an easier way to get the IHC resource ids, you can download the +[Alternative Service View application](https://www.dingus.dk/updated-ihc-alternative-service-view/). +The application will show the product tree. You can expand it, select inputs and +outputs and when selected you can see the resource id. See the manual of each device type for configuration options. diff --git a/source/_components/image_processing.microsoft_face_detect.markdown b/source/_components/image_processing.microsoft_face_detect.markdown index 06cca72d260..18698a70ec5 100644 --- a/source/_components/image_processing.microsoft_face_detect.markdown +++ b/source/_components/image_processing.microsoft_face_detect.markdown @@ -13,13 +13,18 @@ featured: false ha_release: 0.38 --- -The `microsoft_face_detect` image processing platform allows you to use the [Microsoft Face Identify](https://www.microsoft.com/cognitive-services/en-us/) API through Home Assistant. This platform enables you do detect face on camera and fire an event with attributes. +The `microsoft_face_detect` image processing platform allows you to use the +[Microsoft Face Identify](https://www.microsoft.com/cognitive-services/en-us/) +API through Home Assistant. This platform enables you do detect face on camera +and fire an event with attributes. -Please refer to the [component](/components/microsoft_face/) configuration on how to setup the API key. +Please refer to the [component](/components/microsoft_face/) configuration on +how to setup the API key. -For using the result inside an automation rule, take a look at the [component](/components/image_processing/) page. +For using the result inside an automation rule, +take a look at the [component](/components/image_processing/) page. -### {% linkable_title Configuration Home Assistant %} +### {% linkable_title Configuration %} ```yaml # Example configuration.yaml entry @@ -29,10 +34,28 @@ image_processing: - entity_id: camera.door ``` -Configuration variables: - -- **confidence** (*Optional*): The minimum of confidence in percent to process with Home Assistant. Defaults to 80. -- **source** array (*Required*): List of image sources. - - **entity_id** (*Required*): A camera entity id to get picture from. - - **name** (*Optional*): This parameter allows you to override the name of your `image_processing` entity. -- **attributes** array (*Optional*): The image search attributes. Supported: `age`, `gender`, `glasses`. Default `age`, `gender`. +{% configuration %} +confidence: + description: The minimum of confidence in percent to process with Home Assistant. + required: false + type: int + default: 80 +source: + description: List of image sources. + required: true + type: list + keys: + entity_id: + description: A camera entity id to get picture from. + required: true + type: string + name: + description: This parameter allows you to override the name of your `image_processing` entity. + required: false + type: string +attributes: + description: "The image search attributes. Supported: `age`, `gender`, `glasses`." + required: false + type: list + default: "[age, gender]" +{% endconfiguration %} diff --git a/source/_components/image_processing.microsoft_face_identify.markdown b/source/_components/image_processing.microsoft_face_identify.markdown index 7f0de67938f..3e4b7527fee 100644 --- a/source/_components/image_processing.microsoft_face_identify.markdown +++ b/source/_components/image_processing.microsoft_face_identify.markdown @@ -13,13 +13,18 @@ featured: false ha_release: 0.37 --- -The `microsoft_face_identify` image processing platform lets you use [Microsoft Face identify](https://www.microsoft.com/cognitive-services/en-us/) API through Home Assistant. This platform allow you do identify persons on camera and fire an event with attributes. +The `microsoft_face_identify` image processing platform lets you use +[Microsoft Face identify](https://www.microsoft.com/cognitive-services/en-us/) +API through Home Assistant. This platform allow you do identify persons on +camera and fire an event with attributes. -Please refer to the [component](/components/microsoft_face/) configuration on how to setup the API key. +Please refer to the [component](/components/microsoft_face/) configuration on +how to setup the API key. -For using the result inside an automation rule, take a look at the [component](/components/image_processing/) page. +For using the result inside an automation rule, +take a look at the [component](/components/image_processing/) page. -### {% linkable_title Configuration Home Assistant %} +### {% linkable_title Configuration %} ```yaml # Example configuration.yaml entry @@ -30,10 +35,27 @@ image_processing: - entity_id: camera.door ``` -Configuration variables: - -- **group** (*Required*): Micrsoft face group to detect person from it. -- **confidence** (*Optional*): The minimum of confidence in percent to process with Home Assistant. Defaults to 80. -- **source** array (*Required*): List of image sources. - - **entity_id** (*Required*): A camera entity id to get picture from. - - **name** (*Optional*): This parameter allows you to override the name of your `image_processing` entity. +{% configuration %} +group: + description: Micrsoft face group to detect person from it. + required: true + type: string +confidence: + description: The minimum of confidence in percent to process with Home Assistant. + required: false + type: int + default: 80 +source: + description: List of image sources. + required: true + type: list + keys: + entity_id: + description: A camera entity id to get picture from. + required: true + type: string + name: + description: This parameter allows you to override the name of your `image_processing` entity. + required: false + type: string +{% endconfiguration %} diff --git a/source/_components/image_processing.openalpr_cloud.markdown b/source/_components/image_processing.openalpr_cloud.markdown index 96e180a7055..31759b9bd70 100644 --- a/source/_components/image_processing.openalpr_cloud.markdown +++ b/source/_components/image_processing.openalpr_cloud.markdown @@ -13,11 +13,14 @@ featured: false ha_release: 0.36 --- -[OpenALPR](http://www.openalpr.com/) integration for Home Assistant allows you to process licences plates from a camera. You can use them to open a garage door or trigger any other [automation](/components/automation/). +[OpenALPR](http://www.openalpr.com/) integration for Home Assistant allows you +to process licences plates from a camera. You can use them to open a garage door +or trigger any other [automation](/components/automation/). -For using the result inside an automation rule, take a look at the [component](/components/image_processing/) page. +For using the result inside an automation rule, +take a look at the [component](/components/image_processing/) page. -### {% linkable_title Configuration Home Assistant %} +### {% linkable_title Configuration %} ```yaml # Example configuration.yaml entry @@ -29,11 +32,31 @@ image_processing: - entity_id: camera.garage ``` -Configuration variables: - -- **region** (*Required*): Country or region. List of supported [values](https://github.com/openalpr/openalpr/tree/master/runtime_data/config). -- **api_key** (*Required*): You need an API key from [OpenALPR Cloud](https://cloud.openalpr.com/). -- **confidence** (*Optional*): The minimum of confidence in percent to process with Home Assistant. Defaults to 80. -- **source** array (*Required*): List of image sources. - - **entity_id** (*Required*): A list of devices to add in Home Assistant. - - **name** (*Optional*): This parameter allows you to override the name of your OpenALPR entity. +{% configuration %} +region: + description: Country or region. List of supported [values](https://github.com/openalpr/openalpr/tree/master/runtime_data/config). + required: true + type: string +api_key: + description: You need an API key from [OpenALPR Cloud](https://cloud.openalpr.com/). + required: true + type: string +confidence: + description: The minimum of confidence in percent to process with Home Assistant. + required: false + type: int + default: 80 +source: + description: List of image sources. + required: true + type: list + keys: + entity_id: + description: A camera entity id to get picture from. + required: true + type: string + name: + description: This parameter allows you to override the name of your OpenALPR entity. + required: false + type: string +{% endconfiguration %} diff --git a/source/_components/image_processing.openalpr_local.markdown b/source/_components/image_processing.openalpr_local.markdown index d5da4bab3ee..d7d05162c05 100644 --- a/source/_components/image_processing.openalpr_local.markdown +++ b/source/_components/image_processing.openalpr_local.markdown @@ -14,24 +14,32 @@ ha_release: 0.36 redirect_from: /components/openalpr/ --- -[OpenALPR](http://www.openalpr.com/) integration for Home Assistant allows you to process licences plates from a camera. You can use them to open a garage door or trigger any other [automation](/components/automation/). +[OpenALPR](http://www.openalpr.com/) integration for Home Assistant allows you +to process licences plates from a camera. You can use them to open a garage door +or trigger any other [automation](/components/automation/). -For using inside automation look on [component](/components/image_processing) page. +For using the result inside an automation rule, take a look at the +[component](/components/image_processing) page. ### {% linkable_title Local installation %} -If you want process all data locally, you need version 2.3.1 or higher of the `alpr` commandline tool. +If you want process all data locally, you need version 2.3.1 or higher of the +`alpr` commandline tool. -If you don't find binaries for your distribution you can compile from source. Documentation of how to build OpenALPR is found [here](https://github.com/openalpr/openalpr/wiki). +If you don't find binaries for your distribution you can compile from source. +Documentation of how to build OpenALPR is found +[here](https://github.com/openalpr/openalpr/wiki). -On a Debian system you can use this `cmake` command to build only the command line tool: +On a Debian system you can use this `cmake` command to build only the command +line tool: ```bash $ cmake -DWITH_TEST=FALSE -DWITH_BINDING_JAVA=FALSE --DWITH_BINDING_PYTHON=FALSE \ --DWITH_BINDING_GO=FALSE -DWITH_DAEMON=FALSE -DCMAKE_INSTALL_PREFIX:PATH=/usr .. ``` -For other operating system please refer to the [OpenALPR wiki](https://github.com/openalpr/openalpr/wiki). +For other operating system please refer to the +[OpenALPR wiki](https://github.com/openalpr/openalpr/wiki). Verify your `alpr` installation with: @@ -39,8 +47,7 @@ Verify your `alpr` installation with: $ wget -O- -q http://plates.openalpr.com/h786poj.jpg | alpr - ``` -### {% linkable_title Configuration Home Assistant %} - +### {% linkable_title Configuration %} ```yaml # Example configuration.yaml entry @@ -50,12 +57,33 @@ image_processing: source: - entity_id: camera.garage ``` -Configuration variables: - -- **region** (*Required*): Country or region. List of supported [values](https://github.com/openalpr/openalpr/tree/master/runtime_data/config). -- **alpr_bin** (*Optional*): The command line tool alpr from OpenALPR software for local processing. Defaults to `alpr`. -- **confidence** (*Optional*): The minimum of confidence in percent to process with Home Assistant. Defaults to 80. -- **source** array (*Required*): List of image sources. - - **entities** (*Required*): A list of devices to add in Home Assistant. - - **name** (*Optional*): This parameter allows you to override the name of your OpenALPR entity. +{% configuration %} +region: + description: Country or region. List of supported [values](https://github.com/openalpr/openalpr/tree/master/runtime_data/config). + required: true + type: string +alpr_bin: + description: The command line tool alpr from OpenALPR software for local processing. + required: false + type: string + default: alpr +confidence: + description: The minimum of confidence in percent to process with Home Assistant. + required: false + type: int + default: 80 +source: + description: List of image sources. + required: true + type: list + keys: + entity_id: + description: A camera entity id to get picture from. + required: true + type: string + name: + description: This parameter allows you to override the name of your OpenALPR entity. + required: false + type: string +{% endconfiguration %} diff --git a/source/_components/input_datetime.markdown b/source/_components/input_datetime.markdown index e8a793ae6a3..be7024142a2 100644 --- a/source/_components/input_datetime.markdown +++ b/source/_components/input_datetime.markdown @@ -12,9 +12,13 @@ ha_category: Automation ha_release: 0.55 --- -The `input_datetime` component allows the user to define date and time values that can be controlled via the frontend and can be used within automations and templates. +The `input_datetime` component allows the user to define date and time values +that can be controlled via the frontend and can be used within automations and +templates. -To add three datetime inputs to your installation, one with both date and time, and one with date or time each, add the following lines to your `configuration.yaml`: +To add three datetime inputs to your installation, +one with both date and time, and one with date or time each, +add the following lines to your `configuration.yaml`: ```yaml # Example configuration.yaml entry @@ -46,12 +50,12 @@ input_datetime: has_time: description: Set to `true` if the input should have a time. At least one `has_time` or `has_date` must be defined. required: false - type: Boolean + type: boolean default: false has_date: description: Set to `true` if the input should have a date. At least one `has_time` or `has_date` must be defined. required: false - type: Boolean + type: boolean default: false initial: description: Set the initial value of this input, depending on `has_time` and `has_date`. @@ -62,7 +66,8 @@ input_datetime: ### {% linkable_title Attributes %} -A datetime input entity's state exports several attributes that can be useful in automations and templates. +A datetime input entity's state exports several attributes that can be useful in +automations and templates. | Attribute | Description | | ----- | ----- | @@ -74,7 +79,12 @@ A datetime input entity's state exports several attributes that can be useful in ### {% linkable_title Restore State %} -This component will automatically restore the state it had prior to Home Assistant stopping as long as you have the `recorder` component enabled and your entity does **not** have a set value for `initial`. To disable this feature, set a valid value for `initial`. Additional information can be found in the [Restore state](/components/recorder/#restore-state) section of the [`recorder`](/components/recorder/) component documentation. +This component will automatically restore the state it had prior to Home +Assistant stopping as long as you have the `recorder` component enabled and your +entity does **not** have a set value for `initial`. To disable this feature, set +a valid value for `initial`. Additional information can be found in the +[Restore state](/components/recorder/#restore-state) section of the +[`recorder`](/components/recorder/) component documentation. ### {% linkable_title Services %} @@ -87,7 +97,9 @@ This component provides a service to modify the state of the `input_datetime`. ## {% linkable_title Automation Examples %} -The following example shows the usage of the `input_datetime` as a trigger in an automation (note that you will need a [time sensor](/components/sensor.time_date/) elsewhere in your configuration): +The following example shows the usage of the `input_datetime` as a trigger in an +automation (note that you will need a +[time sensor](/components/sensor.time_date/) elsewhere in your configuration): {% raw %} ```yaml @@ -103,7 +115,9 @@ automation: ``` {% endraw %} -To dynamically set the `input_datetime` you can call `input_datetime.set_datetime`. The following example can be used in an automation rule: +To dynamically set the `input_datetime` you can call +`input_datetime.set_datetime`. The following example can be used in an +automation rule: ```yaml # Example configuration.yaml entry diff --git a/source/_components/iota.markdown b/source/_components/iota.markdown index d50ad4f5452..4a367e2e38c 100644 --- a/source/_components/iota.markdown +++ b/source/_components/iota.markdown @@ -13,9 +13,11 @@ ha_release: 0.62 ha_iot_class: "Cloud Polling" --- -[IOTA](http://iota.org/) is a new blockless distributed ledger which is scalable, lightweight and makes it possible to transfer value without any fees. +[IOTA](http://iota.org/) is a new blockless distributed ledger which is +scalable, lightweight and makes it possible to transfer value without any fees. -The `iota` component displays various details (e.g., the balance, node attributes) of IOTA wallets. +The `iota` component displays various details +(e.g., the balance, node attributes) of IOTA wallets. ```yaml # configuration.yaml example @@ -34,8 +36,8 @@ iri: testnet: description: Flag for indicating "testnet". required: false + type: boolean default: false - type: bool wallets: description: List of IOTA wallets. required: true diff --git a/source/_components/joaoapps_join.markdown b/source/_components/joaoapps_join.markdown index 822a14604ba..61ef1c09c9c 100644 --- a/source/_components/joaoapps_join.markdown +++ b/source/_components/joaoapps_join.markdown @@ -12,9 +12,15 @@ ha_category: Hub ha_release: "0.24" --- -The `joaoapps_join` component exposes services from [Join](http://joaoapps.com/join). In Home Assistant, the Join features are divided up in two locations, the Join component, and the Join notify platform. The notify platform allows us to send messages to Join devices, the component allows us to access the other special features that Join offers. +The `joaoapps_join` component exposes services from +[Join](http://joaoapps.com/join). In Home Assistant, the Join features are +divided up in two locations, the Join component, and the Join notify platform. +The notify platform allows us to send messages to Join devices, the component +allows us to access the other special features that Join offers. -In the `configuration.yaml` file you need to provide the api key and device id or name of the target device. You can find your device id and api key [here](https://joinjoaomgcd.appspot.com/). +In the `configuration.yaml` file you need to provide the api key and device id +or name of the target device. You can find your device id and api key +[here](https://joinjoaomgcd.appspot.com/). To set it up, add the following information to your `configuration.yaml` file: @@ -33,20 +39,41 @@ joaoapps_join: api_key: asd97823jb628a34fwsdfwefd5384345tf2d ``` -Configuration variables: +{% configuration %} +api_key: + description: The API key for Join. + required: true + type: string +device_id: + description: The id of your device. + required: false + type: string +device_ids: + description: Comma separated list of device ids. + required: false + type: string +device_names: + description: Comma separated list of device names. + required: false + type: string +{% endconfiguration %} -- **api_key** (*Required*): The API key for Join. -- **device_id** (*Optional*): The id of your device. -- **device_ids** (*Optional*): Comma separated list of device ids. -- **device_names** (*Optional*): Comma separated list of device names. - -The notify service has two optional parameters: `icon` and `vibration`. You can use them like so: +The notify service has two optional parameters: `icon` and `vibration`. +You can use them like so: ```json -{"message":"Hello from Home Assistant!","title":"Home Assistant","data":{"icon":"https://goo.gl/xeetdy", "vibration":"0,65,706,86,657,95,668,100"}} +{ + "message": "Hello from Home Assistant!", + "title": "Home Assistant", + "data": { + "icon": "https://goo.gl/xeetdy", + "vibration": "0,65,706,86,657,95,668,100" + } +} ``` -The services exposed in the `joaoapps_join` component can be used with the service data described below: +The services exposed in the `joaoapps_join` component can be used with the +service data described below: | Service | Data | |------------------------------ |------------------------------------------------------------------ | diff --git a/source/_components/light.ihc.markdown b/source/_components/light.ihc.markdown index 214f19564be..cb2a1c986de 100644 --- a/source/_components/light.ihc.markdown +++ b/source/_components/light.ihc.markdown @@ -13,17 +13,19 @@ ha_release: 0.62 ha_iot_class: "Local Push" --- -Before you can use the IHC Light platform, you must setup the [IHC Component](/components/ihc/) +Before you can use the IHC Light platform, you must setup the +[IHC Component](/components/ihc/) -When auto setup is enabled the following products will be found in the IHC project and setup as light devices: +When auto setup is enabled the following products will be found in the IHC +project and setup as light devices: -* Wireless lamp outlet dimmer -* Wireless dimmer -* Wireless combi dimmer 4 buttons -* Wireless lamp outlet relay -* Wireless combi relay 4 buttons -* Wireless mobile dimmer -* Dataline lamp outlet +- Wireless lamp outlet dimmer +- Wireless dimmer +- Wireless combi dimmer 4 buttons +- Wireless lamp outlet relay +- Wireless combi relay 4 buttons +- Wireless mobile dimmer +- Dataline lamp outlet To manually configure IHC lights insert this section in your configuration: @@ -48,7 +50,7 @@ lights: dimmable: description: Set to True if the IHC resource is a light level required: false - type: bool + type: boolean default: false id: description: The IHC resource id. @@ -60,6 +62,7 @@ lights: type: string {% endconfiguration %} -In the example above 12345 is ihc resource id and "tablelight" is the name. -The IHC resource id can be a light level for dimmers or a boolean output of a relay. -For more information about IHC resource ids see [Manual Setup](/components/ihc/#manual-setup) +In the example above 12345 is ihc resource id and "tablelight" is the name. +The IHC resource id can be a light level for dimmers or a boolean output of a +relay. For more information about IHC resource ids see +[Manual Setup](/components/ihc/#manual-setup). diff --git a/source/_components/logbook.markdown b/source/_components/logbook.markdown index 438e7474306..eb3682fb339 100644 --- a/source/_components/logbook.markdown +++ b/source/_components/logbook.markdown @@ -11,25 +11,55 @@ logo: logbook.png ha_category: "History" --- - The logbook component provides a different perspective on the history of your house by showing all the changes that happened to your house in reverse chronological order. [See the demo for a live example](/demo/). It depends on the `recorder` component for storing the data. This means that if the [`recorder`](/components/recorder/) component is set up to use e.g., MySQL or PostgreSQL as data store, the `logbook` component does not use the default SQLite database to store data. + -To enable the logbook in your installation, add the following to your `configuration.yaml` file: +The logbook component provides a different perspective on the history of your +house by showing all the changes that happened to your house in reverse +chronological order. [See the demo for a live example](/demo/). It depends on +the `recorder` component for storing the data. This means that if the +[`recorder`](/components/recorder/) component is set up to use e.g., MySQL or +PostgreSQL as data store, the `logbook` component does not use the default +SQLite database to store data. + +To enable the logbook in your installation, +add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry logbook: ``` -Configuration variables: +{% configuration %} +exclude: + description: "Configure which components should **not** create logbook entries." + required: false + type: map + keys: + entities: + description: The list of entity ids to be excluded from creating logbook entries. + required: false + type: list + domains: + description: The list of domains to be excluded from creating logbook entries. + required: false + type: list +include: + description: Configure which components should create logbook entries. + required: false + type: map + keys: + entities: + description: The list of entity ids to be included in creating logbook entries. + required: false + type: list + domains: + description: The list of domains to be included in creating logbook entries. + required: false + type: list +{% endconfiguration %} -- **exclude** (*Optional*): Configure which components should **not** create logbook entries. - - **entities** (*Optional*): The list of entity ids to be excluded from creating logbook entries. - - **domains** (*Optional*): The list of domains to be excluded from creating logbook entries. -- **include** (*Optional*): Configure which components should create logbook entries. - - **entities** (*Optional*): The list of entity ids to be included in creating logbook entries. - - **domains** (*Optional*): The list of domains to be included in creating logbook entries. - -If you want to exclude messages of some entities or domains from the logbook just add the `exclude` parameter like: +If you want to exclude messages of some entities or domains from the logbook +just add the `exclude` parameter like: ```yaml # Example of excluding domains and entities from the logbook @@ -43,7 +73,8 @@ logbook: - weblink ``` -In case you just want to see messages from some specific entities or domains use the `include` configuration: +In case you just want to see messages from some specific entities or domains use +the `include` configuration: ```yaml # Example to show how to include only the listed domains and entities in the logbook @@ -55,7 +86,9 @@ logbook: - media_player ``` -You can also use the `include` list and filter out some entities or domains with an `exclude` list. Usually this makes sense if you define domains on the include side and filter out some specific entities. +You can also use the `include` list and filter out some entities or domains with +an `exclude` list. Usually this makes sense if you define domains on the include +side and filter out some specific entities. ```yaml # Example of combining include and exclude configurations @@ -73,14 +106,22 @@ logbook: ### {% linkable_title Exclude Events %} -Entities customized as hidden are excluded from the logbook by default, but sometimes you want to show the entity in the UI and not in the logbook. For instance you use the `sensor.date`to show the current date in the UI, but you do not want a logbook entry for that sensor every day. -To exclude these entities just add them to the `exclude` > `entities` list in the configuration of the logbook. +Entities customized as hidden are excluded from the logbook by default, +but sometimes you want to show the entity in the UI and not in the logbook. +For instance you use the `sensor.date`to show the current date in the UI, +but you do not want a logbook entry for that sensor every day. +To exclude these entities just add them to the `exclude` > `entities` list in +the configuration of the logbook. -To exclude all events from a whole domain add it to the `exclude` > `domain` list. For instance you use the `sun` domain only to trigger automations on the `azimuth attribute, then you possible are not interested in the logbook entries for sun rise and sun set. +To exclude all events from a whole domain add it to the `exclude` > `domain` +list. For instance you use the `sun` domain only to trigger automations on the +`azimuth` attribute, then you possible are not interested in the logbook entries +for sun rise and sun set. ### {% linkable_title Custom Entries %} -It is possible to add custom entries to the logbook by using the script component to fire an event. +It is possible to add custom entries to the logbook by using the script +component to fire an event. ```yaml # Example configuration.yaml entry diff --git a/source/_components/logger.markdown b/source/_components/logger.markdown index d3cef23a013..cbbf133ac79 100644 --- a/source/_components/logger.markdown +++ b/source/_components/logger.markdown @@ -11,16 +11,19 @@ logo: home-assistant.png ha_category: "Utility" --- -The `logger` component lets you define the level of logging activities in Home Assistant. +The `logger` component lets you define the level of logging activities in Home +Assistant. -To enable the `logger` component in your installation, add the following to your `configuration.yaml` file: +To enable the `logger` component in your installation, +add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry logger: ``` -To log all messages and ignore events lower than critical for specified components: +To log all messages and ignore events lower than critical for specified +components: ```yaml # Example configuration.yaml entry @@ -31,7 +34,8 @@ logger: homeassistant.components.camera: critical ``` -To ignore all messages lower than critical and log event for specified components: +To ignore all messages lower than critical and log event for specified +components: ```yaml # Example configuration.yaml entry @@ -102,9 +106,10 @@ data: homeassistant.components.media_player.yamaha: debug ``` -The log information are stored in the [configuration directory](/docs/configuration/) -as `home-assistant.log` and you can read it with the command-line tool `cat` or -follow it dynamically with `tail -f`. +The log information are stored in the +[configuration directory](/docs/configuration/) as `home-assistant.log` +and you can read it with the command-line tool `cat` or follow it dynamically +with `tail -f`. If you are a Hassbian user you can use the example below: diff --git a/source/_components/media_player.epson.markdown b/source/_components/media_player.epson.markdown index e24397901d7..604cef1f731 100644 --- a/source/_components/media_player.epson.markdown +++ b/source/_components/media_player.epson.markdown @@ -13,9 +13,11 @@ ha_release: 0.72 ha_iot_class: "Local Polling" --- -The `epson` platform allows you to control a Epson projector from Home Assistant. +The `epson` platform allows you to control a Epson projector from Home +Assistant. -To add Epson to your installation, add the following to your `configuration.yaml` file: +To add Epson to your installation, +add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -40,9 +42,9 @@ name: type: string default: 'EPSON Projector' ssl: - description: Enable SSL. **Feature not tested.** + description: "Enable SSL. **Feature not tested.**" required: false - type: bool + type: boolean default: false {% endconfiguration %} @@ -60,4 +62,5 @@ Supported devices: Tested devices: - Epson EH-TW5350 -To make this module work you need to connect your projector to your LAN. The best is to use iProjection app by Epson to test if it is working. +To make this module work you need to connect your projector to your LAN. +The best is to use iProjection app by Epson to test if it is working. diff --git a/source/_components/media_player.samsungtv.markdown b/source/_components/media_player.samsungtv.markdown index 69174a09969..407c3823e7f 100644 --- a/source/_components/media_player.samsungtv.markdown +++ b/source/_components/media_player.samsungtv.markdown @@ -14,11 +14,14 @@ ha_release: 0.13 ha_iot_class: "Local Polling" --- -The `samsungtv` platform allows you to control a [Samsung Smart TV](http://www.samsung.com/uk/consumer/tv-audio-video/televisions/). +The `samsungtv` platform allows you to control a +[Samsung Smart TV](http://www.samsung.com/uk/consumer/tv-audio-video/televisions/). -When the TV is first connected, you will need to accept Home Assistant on the TV to allow communication. +When the TV is first connected, +you will need to accept Home Assistant on the TV to allow communication. -To add a TV to your installation, add the following to your `configuration.yaml` file: +To add a TV to your installation, +add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -27,13 +30,30 @@ media_player: host: 192.168.0.10 ``` -Configuration variables: - -- **host** (*Required*): The IP of the Samsung Smart TV, eg. `192.168.0.10`. -- **port** (*Optional*): The port of the Samsung Smart TV. Defaults to 55000. If set to 8001, the new websocket connection will be used (required for 2016+ TVs). -- **name** (*Optional*): The name you would like to give to the Samsung Smart TV. -- **timeout** (*Optional*): The time-out in seconds for the communication with the TV. Defaults to 0 (no timeout). -- **mac** (*Optional*): The MAC address of the Samsung Smart TV, eg. `00:11:22:33:44:55:66`. Required for power on support via wake on lan. +{% configuration %} +host: + description: "The IP of the Samsung Smart TV, eg. `192.168.0.10`." + required: true + type: string +port: + description: The port of the Samsung Smart TV. If set to 8001, the new websocket connection will be used (required for 2016+ TVs). + required: false + type: int + default: 55000 +name: + description: The name you would like to give to the Samsung Smart TV. + required: false + type: string +timeout: + description: The timeout for communication with the TV in seconds. + required: false + type: time + default: 0 (no timeout) +mac: + description: "The MAC address of the Samsung Smart TV, eg. `00:11:22:33:44:55:66`. Required for power on support via wake on lan." + required: false + type: string +{% endconfiguration %} Currently known supported models: @@ -82,14 +102,21 @@ Currently tested but not working models: - JS9000 - State is always "on" and unable to control (but port 8001 *is* open) - JS9500 - State is always "on" and unable to control (but port 8001 *is* open) - MU6300 - Port set to 8001, `pip3 install websocket-client` must be executed, turning on works, status not working reliably, turning off is not permanent (it comes back on) - -None of the 2014 (H) and 2015 (J) model series (e.g., J5200) will work, since Samsung have used a different (encrypted) type of interface for these. -If your model is not on the list then give it a test, if everything works correctly then add it to the list on [GitHub](https://github.com/home-assistant/home-assistant.github.io/tree/current/source/_components/media_player.samsungtv.markdown). -The first letter (U, P, L, H & K) represent the screen type, e.g., LED or Plasma. The second letter represents the region, E is Europe, N is North America and A is Asia & Australia. The two numbers following that represent the screen size. +None of the 2014 (H) and 2015 (J) model series (e.g., J5200) will work, +since Samsung have used a different (encrypted) type of interface for these. + +If your model is not on the list then give it a test, +if everything works correctly then add it to the list on +[GitHub](https://github.com/home-assistant/home-assistant.github.io/tree/current/source/_components/media_player.samsungtv.markdown). +The first letter (U, P, L, H & K) represent the screen type, e.g., LED or +Plasma. The second letter represents the region, E is Europe, N is North America +and A is Asia & Australia. +The two numbers following that represent the screen size. If you add your model remember to remove these before adding them to the list. -Changing channels can be done by calling the `media_player.play_media` service with the following payload: +Changing channels can be done by calling the `media_player.play_media` service +with the following payload: ```javascript { diff --git a/source/_components/media_player.spotify.markdown b/source/_components/media_player.spotify.markdown index 0f2c27f5d05..775f1beb3d5 100644 --- a/source/_components/media_player.spotify.markdown +++ b/source/_components/media_player.spotify.markdown @@ -14,7 +14,8 @@ ha_release: 0.43 ha_iot_class: "Cloud Polling" --- -The `spotify` media player platform allows you to control [Spotify](https://www.spotify.com/) playback from Home Assistant. +The `spotify` media player platform allows you to control +[Spotify](https://www.spotify.com/) playback from Home Assistant. ## {% linkable_title Prerequisites %} @@ -32,48 +33,79 @@ To create the required Spotify Application: - Select **Create An App**. Enter any name and description. Once your application is created, view it and copy your **Client ID** and **Client Secret**, which are used in the Home Assistant configuration file. - Add a **Redirect URI** in the following forms: - No SSL: `http://:/api/spotify` + No SSL: + `http://:/api/spotify` - If using SSL: `https://:/api/spotify` + If using SSL: + `https://:/api/spotify` -The URL is whatever you use to access Home Assistant from outside your network (including port if applicable). + The URL is whatever you use to access Home Assistant from outside your network + (including port if applicable). - Click **Save** after adding the URI. You may also need to set the `base_url` attribute of the [HTTP Component](/components/http/). - ## {% linkable_title Configuration %} -To add Spotify to your installation, add the following to your `configuration.yaml` file: +To add Spotify to your installation, +add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry media_player: - platform: spotify - client_id: - client_secret: + client_id: YOUR_CLIENT_ID + client_secret: YOUR_CLIENT_SECRET aliases: abc123def456: 'Living Room' 9183abas000: 'Bed Room' ``` -Configuration variables: - -- **client_id** (*Required*): Client ID from your Spotify Application. -- **client_secret** (*Required*): Client Secret from your Spotify Application. -- **cache_path** (*Optional*): Path to cache authentication token (defaults to configuration directory). -- **aliases** (*Optional*): Dictionary of device ids to be aliased, handy for devices that Spotify cannot properly determine the device name of. New devices will be logged to the `info` channel for ease of aliasing. +{% configuration %} +client_id: + description: Client ID from your Spotify Application. + required: true + type: string +client_secret: + description: Client Secret from your Spotify Application. + required: true + type: string +cache_path: + description: Path to cache authentication token (defaults to configuration directory). + required: false + type: string +aliases: + description: "Dictionary of device ids to be aliased, handy for devices that Spotify cannot properly determine the device name of. New devices will be logged to the `info` channel for ease of aliasing." + required: false + type: map +{% endconfiguration %} ## {% linkable_title Setup %} -After the prerequisites and configuration are complete, restart Home Assistant. A **Spotify** configurator element will be available. Follow the instructions to authorize Home Assistant to access your Spotify account. A Spotify media player will then appear. If Spotify prompts you to download a file after completing authorization, discard the download. It is not needed. +After the prerequisites and configuration are complete, restart Home Assistant. +A **Spotify** configurator element will be available. Follow the instructions to +authorize Home Assistant to access your Spotify account. A Spotify media player +will then appear. If Spotify prompts you to download a file after completing +authorization, discard the download. It is not needed. ## {% linkable_title Sources %} -The sources are based on if you have streamed to these devices before in Spotify. If you don't have any sources, then simply stream from your phone to another device in your house, Bluetooth, echo, etc. Once you do the sources will show up in the developer console as a device to cast/stream to. Also know that the devices won't show up in the dev-console as sources unless they are powered on as well. +The sources are based on if you have streamed to these devices before in +Spotify. If you don't have any sources, then simply stream from your phone to +another device in your house, Bluetooth, echo, etc. Once you do the sources will +show up in the developer console as a device to cast/stream to. Also know that +the devices won't show up in the dev-console as sources unless they are powered +on as well. ## {% linkable_title URI Links For Playlists/Etc %} -You can send playlists to spotify via the "media_content_type": "playlist" and "media_content_id": "spotify:user:spotify:playlist:37i9dQZF1DWSkkUxEhrBdF" which are a part of the [media_player.play_media](/components/media_player/#service-media_playerplay_media) service, you can test this from the services control panel in the Home Assistant frontend. +You can send playlists to spotify via the "media_content_type": "playlist" and +"media_content_id": "spotify:user:spotify:playlist:37i9dQZF1DWSkkUxEhrBdF" +which are a part of the +[media_player.play_media](/components/media_player/#service-media_playerplay_media) +service, you can test this from the services +control panel in the Home Assistant frontend. -In this example this is a URI link to the Reggae Infusions playlist, [this support document from Spotify](https://support.spotify.com/us/using_spotify/share_music/why-do-you-have-two-different-link-formats/) explains how to get this URI value to use for playlists in the Spotify component. +In this example this is a URI link to the Reggae Infusions playlist, +[this support document from Spotify](https://support.spotify.com/us/article/sharing-music/) +explains how to get this URI value to use for playlists in the Spotify component. ## {% linkable_title Unsupported devices %} diff --git a/source/_components/media_player.webostv.markdown b/source/_components/media_player.webostv.markdown index a4afa661dad..f321a4807f9 100644 --- a/source/_components/media_player.webostv.markdown +++ b/source/_components/media_player.webostv.markdown @@ -13,20 +13,26 @@ ha_iot_class: "Local Polling" ha_release: 0.18 --- -The `webostv` platform allows you to control a [LG](http://www.lg.com/) webOS Smart TV. +The `webostv` platform allows you to control a [LG](http://www.lg.com/) webOS +Smart TV. ### {% linkable_title Setup %} -To begin with enable *LG Connect Apps* feature in *Network* settings of the TV [instructions](http://www.lg.com/uk/support/product-help/CT00008334-1437131798537-others). +To begin with enable *LG Connect Apps* feature in *Network* settings of the TV +[instructions](http://www.lg.com/uk/support/product-help/CT00008334-1437131798537-others). -Once basic configuration is added to your `configuration.yaml` *Configuration* card should prompt on your Home Assistants's states. Follow the instructions and accept pairing request on your TV. - -Pairing information will be saved to the `filename:` provided in configuration; this process is IP sensitive, in case the IP address of your TV would change in future. +Once basic configuration is added to your `configuration.yaml` *Configuration* +card should prompt on your Home Assistants's states. +Follow the instructions and accept pairing request on your TV. +Pairing information will be saved to the `filename:` provided in configuration; +this process is IP sensitive, +in case the IP address of your TV would change in future. ### {% linkable_title Configuration %} -To add a TV to your installation, add the following to your `configuration.yaml` file: +To add a TV to your installation, +add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -34,17 +40,41 @@ media_player: - platform: webostv ``` -Configuration variables: +{% configuration %} +host: + description: "The IP of the LG webOS Smart TV, e.g., `192.168.0.10`." + required: false + type: string +name: + description: The name you would like to give to the LG webOS Smart TV. + required: false + type: string +filename: + description: "The filename where the pairing key with the TV should be stored. This path is relative to Home Assistant's config directory. **NOTE**: When using multiple TVs each TV will need its own unique file." + required: false + type: string + default: webostv.conf +timeout: + description: The timeout for communication with the TV in seconds. + required: false + type: time +turn_on_action: + description: Defines an [action](/docs/automation/action/) to turn the TV on. + required: false + type: string +customize: + description: List of options to customize. + required: false + type: map + keys: + sources: + description: List of hardware and webOS App inputs. + required: false + type: list +{% endconfiguration %} -- **host** (*Optional*): The IP of the LG webOS Smart TV, e.g., `192.168.0.10`. -- **turn_on_action** (*Optional*): Defines an [action](/docs/automation/action/) to turn the TV on. -- **name** (*Optional*): The name you would like to give to the LG webOS Smart TV. -- **timeout** (*Optional*): The timeout for connections to the TV in seconds. -- **filename** (*Optional*): The filename where the pairing key with the TV should be stored. This path is relative to Home Assistant's config directory. It defaults to `webostv.conf`. **NOTE**: When using multiple TVs each TV will need its own unique file. -- **customize** array (*Optional*): List of options to customize. - - **sources** array (*Optional*): List of hardware and webOS App inputs. - -If you do not specify `host:`, all LG webOS Smart TVs within your network will be auto-discovered. +If you do not specify `host:`, all LG webOS Smart TVs within your network will +be auto-discovered. ### {% linkable_title Example %} @@ -56,8 +86,8 @@ media_player: - platform: webostv host: 192.168.0.10 name: Living Room TV - timeout: 5 filename: webostv.conf + timeout: 5 turn_on_action: service: persistent_notification.create data: @@ -74,10 +104,18 @@ Avoid using `[ ]` in the `name:` of your device. ### {% linkable_title Turn on action %} -Home Assistant is able to turn on a LG webOS Smart TV if you specify an action, like HDMI-CEC or WakeOnLan. +Home Assistant is able to turn on a LG webOS Smart TV if you specify an action, +like HDMI-CEC or WakeOnLan. -Common for webOS 3.0 and higher would be to use WakeOnLan feature. -To use this feature your TV should be connected to your network via Ethernet rather than Wireless and you should enable *LG Connect Apps* feature in *Network* settings of the TV [instructions](http://www.lg.com/uk/support/product-help/CT00008334-1437131798537-others) (or *Mobile App* in *General* settings for older models) (*may vary by version). On newer models (2017+), WakeOnLan may need to be enabled in the TV settings by going to Settings > General > Mobile TV On > Turn On Via WiFi [instructions](https://support.quanticapps.com/hc/en-us/articles/115005985729-How-to-turn-on-my-LG-Smart-TV-using-the-App-WebOS-). +Common for webOS 3.0 and higher would be to use WakeOnLan feature. +To use this feature your TV should be connected to your network via Ethernet rather than +Wireless and you should enable *LG Connect Apps* feature in *Network* settings of the TV +[instructions](http://www.lg.com/uk/support/product-help/CT00008334-1437131798537-others) +(or *Mobile App* in *General* settings for older models) (*may vary by version). + +On newer models (2017+), WakeOnLan may need to be enabled in the TV settings +by going to Settings > General > Mobile TV On > Turn On Via WiFi +[instructions](https://support.quanticapps.com/hc/en-us/articles/115005985729-How-to-turn-on-my-LG-Smart-TV-using-the-App-WebOS-). ```yaml # Example configuration.yaml entry @@ -93,16 +131,23 @@ media_player: mac: "B4-E6-2A-1E-11-0F" ``` -Any other [actions](/docs/automation/action/) to power on the device can be configured. +Any other [actions](/docs/automation/action/) to power on the device can be +configured. ### {% linkable_title Sources %} -To obtain complete list of available sources currently configured on the TV, once the webOS TV is configured and linked, while its powered on head to the **Developer Tools** > **States**, find your `media_player.` and use the sources listed in `source_list:` remembering to split them per line into your `sources:` configuration. +To obtain complete list of available sources currently configured on the TV, +once the webOS TV is configured and linked, while its powered on head to the +**Developer Tools** > **States**, +find your `media_player.` and use the sources listed in `source_list:` +remembering to split them per line into your `sources:` configuration. ### {% linkable_title Change channel through play_media service %} -The `play_media` service can be used in a script to switch to the specified tv channel. -It selects the best matching cannel according to the `media_content_id` parameter: +The `play_media` service can be used in a script to switch to the specified tv +channel. It selects the best matching cannel according to the `media_content_id` +parameter: + 1. Channel number *(i.e. '1' or '6')* 2. Exact channel name *(i.e. 'France 2' or 'CNN')* 3. Substring in channel name *(i.e. 'BFM' in 'BFM TV')* @@ -125,7 +170,8 @@ data: ### {% linkable_title Next/Previous buttons %} -The behaviour of the next and previsous buttons is different depending on the active source: +The behaviour of the next and previsous buttons is different depending on the +active source: - if the source is 'LiveTV' (television): next/previous buttons act as channel up/down - otherwise: next/previous buttons act as next/previous track diff --git a/source/_components/microsoft_face.markdown b/source/_components/microsoft_face.markdown index 2d9cb4318f4..1375109e276 100644 --- a/source/_components/microsoft_face.markdown +++ b/source/_components/microsoft_face.markdown @@ -12,15 +12,25 @@ ha_category: Image Processing ha_release: "0.37" --- -The `microsoft_face` component platform is the main component for Microsoft Azure Cognitive service [Face](https://www.microsoft.com/cognitive-services/en-us/face-api). All data are stored in your own private instance in the Azure cloud. +The `microsoft_face` component platform is the main component for Microsoft +Azure Cognitive service +[Face](https://azure.microsoft.com/en-us/services/cognitive-services/face/). +All data are stored in your own private instance in the Azure cloud. ## {% linkable_title Setup %} -You need an API key, which is free, but requires an [Azure registration](https://azure.microsoft.com/de-de/free/) using your Microsoft ID. The free resource (*F0*) is limited to 20 requests per minute and 30k requests in a month. If you don't want to use the Azure cloud, you can also get an API key by registering with [cognitive-services](https://www.microsoft.com/cognitive-services/en-us/subscriptions). Please note that all keys on cognitive services must be recreated every 90 days. +You need an API key, which is free, but requires an +[Azure registration](https://azure.microsoft.com/en-us/free/) using your +Microsoft ID. The free resource (*F0*) is limited to 20 requests per minute and +30k requests in a month. If you don't want to use the Azure cloud, you can also +get an API key by registering with +[cognitive-services](https://azure.microsoft.com/en-us/try/cognitive-services/). +Please note that all keys on cognitive services must be recreated every 90 days. ## {% linkable_title Configuration %} -To enable the Microsoft Face component, add the following to your `configuration.yaml`: +To enable the Microsoft Face component, +add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -29,17 +39,31 @@ microsoft_face: azure_region: eastus2 ``` -Configuration variables: - -- **api_key** (*Required*): The API key for your Cognitive resource. -- **azure_region** (*Optional*): The region where you instantiated your Microsoft Cognitive services endpoint -- **timeout** (*Optional)*: Set timeout for the API connection. Defaults to 10s. +{% configuration %} +api_key: + description: The API key for your Cognitive resource. + required: true + type: string +azure_region: + description: The region where you instantiated your Microsoft Cognitive services endpoint. + required: false + type: string +timeout: + description: Set timeout for the API connection. + required: false + type: time + default: 10s +{% endconfiguration %} ### {% linkable_title Person and Groups %} -For most services, you need to set up a group or a person. This limits the processing and detection to elements provided by the group. Home Assistant creates an entity for all groups and allows you to show the state, person, and IDs directly on the frontend. +For most services, you need to set up a group or a person. +This limits the processing and detection to elements provided by the group. +Home Assistant creates an entity for all groups and allows you to show the +state, person, and IDs directly on the frontend. -The following services are available for managing this feature and can be called via the Frontend, a script, or the REST API. +The following services are available for managing this feature and can be called +via the Frontend, a script, or the REST API. - *microsoft_face.create_group* - *microsoft_face.delete_group* @@ -60,7 +84,9 @@ data: name: 'Hans Maier' ``` -You need to add an image of a person. You can add multiple images for every person to make the detection better. You can take a picture from a camera or send a local image to your Azure resource. +You need to add an image of a person. You can add multiple images for every +person to make the detection better. You can take a picture from a camera or +send a local image to your Azure resource. - *microsoft_face.face_person* @@ -72,7 +98,8 @@ data: camera_entity: camera.door ``` -For the local image we need `curl`. The `{personId}` is present in group entity as attribute. +For the local image we need `curl`. +The `{personId}` is present in group entity as attribute. ```bash $ curl -v -X POST "https://westus.api.cognitive.microsoft.com/face/v1.0/persongroups/{GroupName}/persons/{personId}/persistedFaces" \ @@ -80,7 +107,8 @@ $ curl -v -X POST "https://westus.api.cognitive.microsoft.com/face/v1.0/persongr -H "Content-Type: application/octet-stream" --data-binary "@/tmp/image.jpg" ``` -After we're done with changes on a group, we need train this group to teach the AI how to handle the new data. +After we're done with changes on a group, +we need train this group to teach the AI how to handle the new data. - *microsoft_face.train_group* diff --git a/source/_components/notify.html5.markdown b/source/_components/notify.html5.markdown index 5ab7ad0d179..029f6514478 100644 --- a/source/_components/notify.html5.markdown +++ b/source/_components/notify.html5.markdown @@ -12,28 +12,42 @@ ha_category: Notifications ha_release: 0.27 --- -The `html5` notification platform enables you to receive push notifications to Chrome or Firefox, no matter where you are in the world. `html5` also supports Chrome and Firefox on Android, which enables native-app-like integrations without actually needing a native app. +The `html5` notification platform enables you to receive push notifications to +Chrome or Firefox, no matter where you are in the world. `html5` also supports +Chrome and Firefox on Android, which enables native-app-like integrations +without actually needing a native app.

HTML5 push notifications **do not** work on iOS.

-To enable this platform, add the following lines to your `configuration.yaml` file: +To enable this platform, +add the following lines to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry notify: - - name: NOTIFIER_NAME - platform: html5 + - platform: html5 + name: NOTIFIER_NAME gcm_api_key: 'gcm-server-key' gcm_sender_id: 'gcm-sender-id' ``` -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`. -- **gcm_api_key** (*Required if pushing to Chrome*): The API Server key provided to you by Google for Google Cloud Messaging (GCM). Required to push to Chrome. -- **gcm_sender_id** (*Required if pushing to Chrome*): The sender ID provided to you by Google for Google Cloud Messaging (GCM). Required to push to Chrome. +{% configuration %} +name: + description: Setting the optional parameter `name` allows multiple notifiers to be created. The notifier will bind to the service `notify.NOTIFIER_NAME`. + required: false + type: string + default: notify +gcm_api_key: + description: The API Server key provided to you by Google for Google Cloud Messaging (GCM). Required to push to Chrome. + required: true + type: string +gcm_sender_id: + description: The sender ID provided to you by Google for Google Cloud Messaging (GCM). Required to push to Chrome. + required: true + type: string +{% endconfiguration %} ### {% linkable_title Getting ready for Chrome %} @@ -92,13 +106,17 @@ Assuming the previous test completed successfully and your browser was registere ### {% linkable_title Usage %} -The `html5` platform accepts a standard notify payload. However, there are also some special features built in which you can control in the payload. +The `html5` platform accepts a standard notify payload. However, there are also +some special features built in which you can control in the payload. -Any JSON examples below can be [converted to YAML](https://www.json2yaml.com/) for automations. +Any JSON examples below can be [converted to YAML](https://www.json2yaml.com/) +for automations. #### {% linkable_title Actions %} -Chrome supports notification actions, which are configurable buttons that arrive with the notification and can cause actions on Home Assistant to happen when pressed. You can send [up to 2 actions](https://cs.chromium.org/chromium/src/third_party/WebKit/public/platform/modules/notifications/WebNotificationConstants.h?q=maxActions&sq=package:chromium&dr=CSs&l=14). +Chrome supports notification actions, +which are configurable buttons that arrive with the notification and can cause +actions on Home Assistant to happen when pressed. You can send up to 2 actions. ```json { @@ -121,7 +139,10 @@ Chrome supports notification actions, which are configurable buttons that arrive #### {% linkable_title Data %} -Any parameters that you pass in the notify payload that aren't valid for use in the HTML5 notification (`actions`, `badge`, `body`, `dir`, `icon`, `image`, `lang`, `renotify`, `requireInteraction`, `tag`, `timestamp`, `vibrate`) will be sent back to you in the [callback events](#automating-notification-events). +Any parameters that you pass in the notify payload that aren't valid for use in +the HTML5 notification (`actions`, `badge`, `body`, `dir`, `icon`, `image`, +`lang`, `renotify`, `requireInteraction`, `tag`, `timestamp`, `vibrate`) will be +sent back to you in the [callback events](#automating-notification-events). ```json { @@ -135,7 +156,11 @@ Any parameters that you pass in the notify payload that aren't valid for use in #### {% linkable_title Tag %} -By default, every notification sent has a randomly generated UUID (v4) set as its _tag_ or unique identifier. The tag is unique to the notification, _not_ to a specific target. If you pass your own tag in the notify payload you can replace the notification by sending another notification with the same tag. You can provide a `tag` like so: +By default, every notification sent has a randomly generated UUID (v4) set as +its _tag_ or unique identifier. The tag is unique to the notification, _not_ to +a specific target. If you pass your own tag in the notify payload you can +replace the notification by sending another notification with the same tag. +You can provide a `tag` like so: ```json { @@ -147,7 +172,8 @@ By default, every notification sent has a randomly generated UUID (v4) set as it } ``` -Example of adding a tag to your notification. This won't create new notification if there already exists one with the same tag. +Example of adding a tag to your notification. This won't create new notification +if there already exists one with the same tag. ```yaml - alias: Push/update notification of sensor state with tag @@ -165,7 +191,9 @@ Example of adding a tag to your notification. This won't create new notification #### {% linkable_title Targets %} -If you do not provide a `target` parameter in the notify payload a notification will be sent to all registered targets as listed in `html5_push_registrations.conf`. You can provide a `target` parameter like so: +If you do not provide a `target` parameter in the notify payload a notification +will be sent to all registered targets as listed in +`html5_push_registrations.conf`. You can provide a `target` parameter like so: ```json { @@ -187,11 +215,16 @@ If you do not provide a `target` parameter in the notify payload a notification #### {% linkable_title Overrides %} -You can pass any of the parameters listed [here](https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration/showNotification#Parameters) in the `data` dictionary. Please note, [Chrome specifies](https://cs.chromium.org/chromium/src/third_party/WebKit/public/platform/modules/notifications/WebNotificationConstants.h?q=maxActions&sq=package:chromium&dr=CSs&l=21) that the maximum size for an icon is 320px by 320px, the maximum `badge` size is 96px by 96px and the maximum icon size for an action button is 128px by 128px. +You can pass any of the parameters listed +[here](https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerRegistration/showNotification#Parameters) +in the `data` dictionary. Please note, Chrome specifies that the maximum size +for an icon is 320px by 320px, the maximum `badge` size is 96px by 96px and the +maximum icon size for an action button is 128px by 128px. #### {% linkable_title URL %} -You can provide a URL to open when the notification is clicked by putting `url` in the data dictionary like so: +You can provide a URL to open when the notification is clicked by putting `url` +in the data dictionary like so: ```json { @@ -203,11 +236,15 @@ You can provide a URL to open when the notification is clicked by putting `url` } ``` -If no URL or actions are provided, interacting with a notification will open your Home Assistant in the browser. You can use relative URLs to refer to Home Assistant, i.e. `/map` would turn into `https://192.168.1.2:8123/map`. +If no URL or actions are provided, interacting with a notification will open +your Home Assistant in the browser. You can use relative URLs to refer to Home +Assistant, i.e. `/map` would turn into `https://192.168.1.2:8123/map`. ### {% linkable_title Automating notification events %} -During the lifespan of a single push notification, Home Assistant will emit a few different events to the event bus which you can use to write automations against. +During the lifespan of a single push notification, +Home Assistant will emit a few different events to the event bus which you can +use to write automations against. Common event payload parameters are: @@ -219,11 +256,15 @@ Common event payload parameters are: | `target` | The target that this notification callback describes. | | `type` | The type of event callback received. Can be `received`, `clicked` or `closed`. | -You can use the `target` parameter to write automations against a single `target`. For more granularity, use `action` and `target` together to write automations which will do specific things based on what target clicked an action. +You can use the `target` parameter to write automations against a single +`target`. For more granularity, +use `action` and `target` together to write automations which will do specific +things based on what target clicked an action. #### {% linkable_title received event %} -You will receive an event named `html5_notification.received` when the notification is received on the device. +You will receive an event named `html5_notification.received` when the +notification is received on the device. ```yaml - alias: HTML5 push notification received and displayed on device @@ -234,7 +275,9 @@ You will receive an event named `html5_notification.received` when the notificat #### {% linkable_title clicked event %} -You will receive an event named `html5_notification.clicked` when the notification or a notification action button is clicked. The action button clicked is available as `action` in the `event_data`. +You will receive an event named `html5_notification.clicked` when the +notification or a notification action button is clicked. +The action button clicked is available as `action` in the `event_data`. ```yaml - alias: HTML5 push notification clicked @@ -256,7 +299,8 @@ or #### {% linkable_title closed event %} -You will receive an event named `html5_notification.closed` when the notification is closed. +You will receive an event named `html5_notification.closed` when the +notification is closed. ```yaml - alias: HTML5 push notification clicked @@ -267,7 +311,10 @@ You will receive an event named `html5_notification.closed` when the notificatio ### {% linkable_title Making notifications work with NGINX proxy %} -If you use [NGINX](/ecosystem/nginx/) as a proxy with authentication in front of your Home Assistant instance, you may have trouble with receiving events back to Home Assistant. It's because of authentication token that cannot be passed through the proxy. +If you use [NGINX](/ecosystem/nginx/) as a proxy with authentication in front of +your Home Assistant instance, +you may have trouble with receiving events back to Home Assistant. +It's because of authentication token that cannot be passed through the proxy. To solve the issue put additional location into your nginx site's configuration: @@ -281,9 +328,11 @@ location /api/notify.html5/callback { } ``` -This rule check if request have `Authorization` HTTP header and bypass the htpasswd (if you use one). +This rule check if request have `Authorization` HTTP header and bypass the +htpasswd (if you use one). If you still have the problem, even with mentioned rule, try to add this code: + ```bash proxy_set_header Authorization $http_authorization; proxy_pass_header Authorization; diff --git a/source/_components/notify.joaoapps_join.markdown b/source/_components/notify.joaoapps_join.markdown index 2143480d0e3..e5b6c76e90a 100644 --- a/source/_components/notify.joaoapps_join.markdown +++ b/source/_components/notify.joaoapps_join.markdown @@ -12,5 +12,5 @@ ha_category: Notifications ha_release: "0.24" --- -See the [Joaoapps Join component page](/components/joaoapps_join/) for information how to get the join notify platform running. - +See the [Joaoapps Join component page](/components/joaoapps_join/) for +information how to get the join notify platform running. diff --git a/source/_components/notify.webostv.markdown b/source/_components/notify.webostv.markdown index c3dbadfbe4a..41d6e633e0d 100644 --- a/source/_components/notify.webostv.markdown +++ b/source/_components/notify.webostv.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "LG WebOS TV notifications" -description: "Instructions on how to integrate a LG WebOS TV within Home Assistant." +title: "LG webOS TV notifications" +description: "Instructions on how to integrate a LG webOS TV within Home Assistant." date: 2016-04-18 23:24 sidebar: true comments: false @@ -13,11 +13,13 @@ ha_iot_class: "Local Polling" ha_release: 0.18 --- -The `webostv` platform allows you to send notifications to a LG WebOS Smart TV. +The `webostv` platform allows you to send notifications to a LG webOS Smart TV. -When the TV is first connected, you will need to accept Home Assistant on the TV to allow communication. +When the TV is first connected, +you will need to accept Home Assistant on the TV to allow communication. -To add a TV to your installation, add the following to your `configuration.yaml` file and follow the configurator instructions: +To add a TV to your installation, add the following to your `configuration.yaml` +file and follow the configurator instructions: ```yaml # Example configuration.yaml entry @@ -28,12 +30,25 @@ notify: filename: webostv.conf ``` -Configuration variables: - -- **host** (*Required*): The IP of the LG WebOS Smart TV, e.g., 192.168.0.10 -- **name** (*Required*): The name you would like to give to the LG WebOS Smart TV. -- **filename** (*Optional*): The filename where the pairing key with the TV should be stored. This path is relative to Home Assistant's config directory. It defaults to `webostv.conf`. -- **icon** (*Optional*): The path to an image file to use as the icon in notifications. +{% configuration %} +host: + description: The IP of the LG webOS Smart TV, e.g., 192.168.0.10 + required: true + type: string +name: + description: The name you would like to give to the LG webOS Smart TV. + required: true + type: string +filename: + description: "The filename where the pairing key with the TV should be stored. This path is relative to Home Assistant's config directory. **NOTE**: When using multiple TVs each TV will need its own unique file." + required: false + type: string + default: webostv.conf +icon: + description: The path to an image file to use as the icon in notifications. + required: false + type: string +{% endconfiguration %} A possible automation could be: @@ -51,7 +66,8 @@ automation: message: "You should open a window! (Livingroom Co2: {{ states.sensor.netatmo_livingroom_co2.state }}ppm)" ``` -The icon can be overridden for individual notifications by providing a path to an alternative icon image to use: +The icon can be overridden for individual notifications by providing a path to +an alternative icon image to use: ```yaml automation: diff --git a/source/_components/sensor.ihc.markdown b/source/_components/sensor.ihc.markdown index b3e91ed9823..3938d8af1d1 100644 --- a/source/_components/sensor.ihc.markdown +++ b/source/_components/sensor.ihc.markdown @@ -13,13 +13,15 @@ ha_release: 0.62 ha_iot_class: "Local Push" --- -Before you can use the IHC Sensor platform, you must setup the [IHC Component](/components/ihc/) +Before you can use the IHC Sensor platform, you must setup the +[IHC Component](/components/ihc/) -When auto setup is enabled the following products will be found in the IHC project and setup as sensors: +When auto setup is enabled the following products will be found in the IHC +project and setup as sensors: -* Dataline temperature sensor - Will insert 2 temperature sensors -* Dataline Humidity - Will insert 1 humidity and 2 temperature sensors (calculated dewpoint) -* Dataline Lux - will insert 1 light and 1 temperature sensor +- Dataline temperature sensor - Will insert 2 temperature sensors +- Dataline Humidity - Will insert 1 humidity and 2 temperature sensors (calculated dewpoint) +- Dataline Lux - will insert 1 light and 1 temperature sensor To manually configure IHC sensors insert this section: @@ -54,6 +56,5 @@ sensors: type: string {% endconfiguration %} -The resource id should be a IHC float resource. -For more information about IHC resource ids see [Manual Setup](/components/ihc/#manual-setup) - +The resource id should be a IHC float resource. For more information about IHC +resource ids see [Manual Setup](/components/ihc/#manual-setup). diff --git a/source/_components/sensor.iota.markdown b/source/_components/sensor.iota.markdown index e907cb2795f..365796a68d6 100644 --- a/source/_components/sensor.iota.markdown +++ b/source/_components/sensor.iota.markdown @@ -13,10 +13,10 @@ ha_release: 0.62 ha_iot_class: "Cloud Polling" --- -The sensors are automatically created if the [IOTA hub](/components/iota/) is present. +The sensors are automatically created if the [IOTA hub](/components/iota/) is +present. Available sensors: - Wallet balance - Node information - diff --git a/source/_components/sensor.speedtest.markdown b/source/_components/sensor.speedtest.markdown index fb95a0cdff2..ac9e65ac30e 100644 --- a/source/_components/sensor.speedtest.markdown +++ b/source/_components/sensor.speedtest.markdown @@ -14,13 +14,18 @@ ha_release: 0.13 ha_iot_class: "Cloud Polling" --- -The `speedtest` sensor component uses the [Speedtest.net](https://speedtest.net/) web service to measure network bandwidth performance. +The `speedtest` sensor component uses the [Speedtest.net](https://speedtest.net/) +web service to measure network bandwidth performance. ## {% linkable_title Configuration %} -By default, it will run every hour. The user can change the update frequency in the configuration by defining the minute, hour, and day for a speed test to run. For the `server_id` check the list of [available servers](https://www.speedtest.net/speedtest-servers.php). +By default, it will run every hour. The user can change the update frequency in +the configuration by defining the minute, hour, and day for a speed test to run. +For the `server_id` check the list of +[available servers](https://www.speedtest.net/speedtest-servers.php). -To add a Speedtest.net sensor to your installation, add the following to your `configuration.yaml` file: +To add a Speedtest.net sensor to your installation, +add the following to your `configuration.yaml` file: Once per hour, on the hour (default): @@ -69,15 +74,24 @@ sensor: type: [int, list] default: 0 manual: - description: True or False to turn manual mode on or off. Manual mode will disable scheduled speed tests. + description: > + `true` or `false` to turn manual mode on or off. + Manual mode will disable scheduled speed tests. required: false - type: bool + type: boolean default: false {% endconfiguration %} -This component uses [speedtest-cli](https://github.com/sivel/speedtest-cli) to gather network performance data from Speedtest.net. Please be aware of the potential [inconsistencies](https://github.com/sivel/speedtest-cli#inconsistency) that this component may display. +This component uses [speedtest-cli](https://github.com/sivel/speedtest-cli) to +gather network performance data from Speedtest.net. +Please be aware of the potential +[inconsistencies](https://github.com/sivel/speedtest-cli#inconsistency) that +this component may display. -When Home Assistant first starts up, the values of the speed test will show as `Unknown`. You can use the service `sensor.update_speedtest` to run a manual speed test and populate the data or just wait for the next regularly scheduled test. You can turn on manual mode to disable the scheduled speed tests. +When Home Assistant first starts up, the values of the speed test will show as +`Unknown`. You can use the service `sensor.update_speedtest` to run a manual +speed test and populate the data or just wait for the next regularly scheduled +test. You can turn on manual mode to disable the scheduled speed tests. ## {% linkable_title Examples %} diff --git a/source/_components/sensor.systemmonitor.markdown b/source/_components/sensor.systemmonitor.markdown index 8f4ee938fea..10da7021396 100644 --- a/source/_components/sensor.systemmonitor.markdown +++ b/source/_components/sensor.systemmonitor.markdown @@ -13,9 +13,12 @@ ha_release: pre 0.7 ha_iot_class: "Local Push" --- -The `systemmonitor` sensor platform allows you to monitor disk usage, memory usage, CPU usage, and running processes. This platform has superseded the process component which is now considered deprecated. +The `systemmonitor` sensor platform allows you to monitor disk usage, +memory usage, CPU usage, and running processes. This platform has superseded the +process component which is now considered deprecated. -To add this platform to your installation, add the following to your `configuration.yaml` file: +To add this platform to your installation, +add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -27,13 +30,22 @@ sensor: - type: memory_free ``` -Configuration variables: +{% configuration %} +resources: + description: Contains all entries to display. + required: true + type: list + keys: + type: + description: The type of the information to display, please check the table below for details. + required: true + arg: + description: Argument to use, please check the table below for details. + required: false +{% endconfiguration %} -- **resources** array (*Required*): Contains all entries to display. - - **type** (*Required*): The type of the information to display, please check the table below for details. - - **arg** (*Optional*): Argument to use, please check the table below for details. - -The table contains types and their argument to use in your `configuration.yaml` file. +The table contains types and their argument to use in your `configuration.yaml` +file. | Type (`type:`) | Argument (`arg:`) | | :------------------ |:--------------------------| @@ -62,7 +74,8 @@ The table contains types and their argument to use in your `configuration.yaml` ## {% linkable_title Linux specific %} -To retrieve all available network interfaces on a Linux System, execute the `ifconfig` command. +To retrieve all available network interfaces on a Linux System, execute the +`ifconfig` command. ```bash $ ifconfig -a | sed 's/[ \t].*//;/^$/d' @@ -70,7 +83,9 @@ $ ifconfig -a | sed 's/[ \t].*//;/^$/d' ## {% linkable_title Windows specific %} -When running this platform on Microsoft Windows, Typically, the default interface would be called `Local Area Connection`, so your configuration might look like: +When running this platform on Microsoft Windows, Typically, +the default interface would be called `Local Area Connection`, +so your configuration might look like: ```yaml sensor: @@ -89,4 +104,4 @@ Wireless LAN adapter Wireless Network Connection: Connection-specific DNS Suffix . : ``` -Where the name is `Wireless Network Connection` +Where the name is `Wireless Network Connection`. diff --git a/source/_components/sensor.version.markdown b/source/_components/sensor.version.markdown index dda7b220fab..20e48d1fcd1 100644 --- a/source/_components/sensor.version.markdown +++ b/source/_components/sensor.version.markdown @@ -13,7 +13,6 @@ logo: home-assistant.png ha_release: 0.52 --- - The `version` sensor platform is displaying the current version of Home Assistant in the frontend. ## {% linkable_title Configuration %} @@ -36,7 +35,9 @@ name: ## {% linkable_title Alternatives %} -This sensor is an alternative to the existing solutions to achieve the same result through various platforms. Remember that you can easily get the installed version on the command line. +This sensor is an alternative to the existing solutions to achieve the same +result through various platforms. +Remember that you can easily get the installed version on the command line. ```bash $ hass --version @@ -44,7 +45,8 @@ $ hass --version Or go to the service developer tool icon **Info** section of the **Developer Tools**. -A [`command_line`](/components/sensor.command_line/) with [`hass`](/docs/tools/hass/) to display your current version. +A [`command_line`](/components/sensor.command_line/) with +[`hass`](/docs/tools/hass/) to display your current version. ```yaml sensor: @@ -53,7 +55,8 @@ sensor: command: "/home/homeassistant/bin/hass --version" ``` -It's also possible to ready a file called `.HA_VERSION` which is located in your Home Assistant [configuration](/docs/configuration/) folder. +It's also possible to ready a file called `.HA_VERSION` which is located in your +Home Assistant [configuration](/docs/configuration/) folder. ```yaml sensor: @@ -62,7 +65,9 @@ sensor: command: "cat /home/homeassistant/.homeassistant/.HA_VERSION" ``` -You might think that a [`rest` sensor](/components/sensor.rest/) could work, too, but it will not as Home Assistant is not ready when the sensor get initialized. +You might think that a [`rest` sensor](/components/sensor.rest/) could work, +too, +but it will not as Home Assistant is not ready when the sensor get initialized. {% raw %} ```yaml diff --git a/source/_components/sensor.xbox_live.markdown b/source/_components/sensor.xbox_live.markdown index ca0aa227891..3311c4f2023 100644 --- a/source/_components/sensor.xbox_live.markdown +++ b/source/_components/sensor.xbox_live.markdown @@ -15,11 +15,17 @@ ha_release: 0.28 The Xbox Live component is able to track [Xbox](http://xbox.com/) profiles. -To use this sensor you need a free API key from [XboxAPI.com](http://xboxapi.com). Please also make sure to connect your Xbox account on that site. +To use this sensor you need a free API key from +[XboxAPI.com](http://xboxapi.com). +Please also make sure to connect your Xbox account on that site. -The configuration requires you to specify XUIDs which are the unique identifiers for profiles. These can be determined on [XboxAPI.com](http://xboxapi.com) by either looking at your own profile page or using their interactive documentation to search for gamertags. +The configuration requires you to specify XUIDs which are the unique identifiers +for profiles. These can be determined on [XboxAPI.com](http://xboxapi.com) by +either looking at your own profile page or using their interactive documentation +to search for gamertags. -To use the Xbox Live sensor in your installation, add the following to your `configuration.yaml` file: +To use the Xbox Live sensor in your installation, +add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -31,7 +37,13 @@ sensor: - account2 ``` -Configuration variables: - -- **api_key** (*Required*): Your API key from [XboxAPI.com](http://xboxapi.com). -- **xuid** (*Required*): Array of profile XUIDs to be tracked. +{% configuration %} +api_key: + description: Your API key from [XboxAPI.com](http://xboxapi.com). + required: true + type: string +xuid: + description: Array of profile XUIDs to be tracked. + required: true + type: list +{% endconfiguration %} diff --git a/source/_components/sensor.yr.markdown b/source/_components/sensor.yr.markdown index 772fa6560e1..8036ac714fe 100644 --- a/source/_components/sensor.yr.markdown +++ b/source/_components/sensor.yr.markdown @@ -13,11 +13,12 @@ ha_release: 0.11 ha_iot_class: "Cloud Polling" --- +The `yr` platform uses [YR.no](http://www.yr.no/) as a source for current +meteorological data for your location. The weather forecast is delivered by the +Norwegian Meteorological Institute and the NRK. -The `yr` platform uses [YR.no](http://www.yr.no/) as a source for current meteorological data for your location. The -weather forecast is delivered by the Norwegian Meteorological Institute and the NRK. - -To add YR to your installation, add the following to your `configuration.yaml` file: +To add YR to your installation, +add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -25,24 +26,49 @@ sensor: - platform: yr ``` -Configuration variables: - -- **name** (*Optional*): Additional name for the sensors. Default to platform name. -- **forecast** integer (*Optional*): If you want to get forecast data instead of the current weather data, set this to the number of hours that you want to look into the future. -- **monitored_conditions** array (*Optional*): Conditions to display in the frontend. - - **symbol**: A symbol for the current weather. - - **temperature**: The current temperature. - - **humidity**: The relative humidity. - - **fog**: Fog. - - **pressure**: The sea-level air pressure in millibars. - - **precipitation**: The precipitation. - - **dewpointTemperature**: The dew point temperature. - - **windSpeed**: The wind speed. - - **windDirection**: Where the wind is coming from in degrees, with true north at 0° and progressing clockwise. - - **cloudiness**: The cloudiness. - - **lowClouds**: Low cloud level. - - **mediumClouds**: Medium cloud level. - - **highClouds**: High cloud level. +{% configuration %} +name: + description: Additional name for the sensors. + required: false + type: string + default: yr +forecast: + description: If you want to get forecast data instead of the current weather data, set this to the number of hours that you want to look into the future. + required: false + type: int +monitored_conditions: + description: Conditions to display in the frontend. + required: false + type: list + default: symbol + keys: + symbol: + description: A symbol for the current weather. + temperature: + description: The current temperature. + humidity: + description: The relative humidity. + fog: + description: Fog. + pressure: + description: The sea-level air pressure in millibars. + precipitation: + description: The precipitation. + dewpointTemperature: + description: The dew point temperature. + windSpeed: + description: The wind speed. + windDirection: + description: Where the wind is coming from in degrees, with true north at 0° and progressing clockwise. + cloudiness: + description: The cloudiness. + lowClouds: + description: Low cloud level. + mediumClouds: + description: Medium cloud level. + highClouds: + description: High cloud level. +{% endconfiguration %} A full configuration example can be found below: diff --git a/source/_components/sun.markdown b/source/_components/sun.markdown index 2b8cf1e3313..4de53e1fba0 100644 --- a/source/_components/sun.markdown +++ b/source/_components/sun.markdown @@ -11,18 +11,21 @@ logo: home-assistant.png ha_category: Environment --- -The sun component will use your current location to track if the sun is above or below the horizon. The sun can be used within automation as [a trigger with an optional offset to simulate dawn/dusk][automation-trigger]. - -[automation-trigger]: /getting-started/automation-trigger/#sun-trigger +The sun component will use your current location to track if the sun is above or +below the horizon. The sun can be used within automation as +[a trigger with an optional offset to simulate dawn/dusk](/getting-started/automation-trigger/#sun-trigger). ```yaml # Example configuration.yaml entry sun: ``` -Configuration variables: - -- **elevation** (*Optional*): The (physical) elevation of your location, in meters above sea level. Defaults to the `elevation` in `configuration.yaml`, which is retrieved from Google Maps if not set. +{% configuration %} +elevation: + description: "The (physical) elevation of your location, in meters above sea level. Defaults to the `elevation` in `configuration.yaml`, which is retrieved from Google Maps if not set." + required: false + type: int +{% endconfiguration %}

@@ -30,9 +33,11 @@ Configuration variables: ### {% linkable_title Implementation Details %} -The sun's event listener will call the service when the sun rises or sets with an offset. +The sun's event listener will call the service when the sun rises or sets with +an offset. -The sun event need to have the type 'sun', which service to call, which event (sunset or sunrise) and the offset. +The sun event need to have the type 'sun', which service to call, +which event (sunset or sunrise) and the offset. ```json { @@ -50,8 +55,6 @@ The sun event need to have the type 'sun', which service to call, which event (s | `above_horizon` | When the sun is above the horizon. | `below_horizon` | When the sun is below the horizon. - - | State Attributes | Description | | --------- | ----------- | | `next_rising` | Date and time of the next sun rising (in UTC). diff --git a/source/_components/switch.command_line.markdown b/source/_components/switch.command_line.markdown index e2b86da84a5..5811eb9a6e4 100644 --- a/source/_components/switch.command_line.markdown +++ b/source/_components/switch.command_line.markdown @@ -13,8 +13,10 @@ ha_release: pre 0.7 ha_iot_class: "Local Polling" --- - -The `command_line` switch platform issues specific commands when it is turned on and off. This might very well become our most powerful platform as it allows anyone to integrate any type of switch into Home Assistant that can be controlled from the command line, including calling other scripts! +The `command_line` switch platform issues specific commands when it is turned on +and off. This might very well become our most powerful platform as it allows +anyone to integrate any type of switch into Home Assistant that can be +controlled from the command line, including calling other scripts! To enable it, add the following lines to your `configuration.yaml`: @@ -28,19 +30,52 @@ switch: command_off: switch_command off kitchen ``` -Configuration variables: - -- **switches** (*Required*): The array that contains all command switches. - - **identifier** (*Required*): Name of the command switch as slug. Multiple entries are possible. - - **command_on** (*Required*): The action to take for on. - - **command_off** (*Required*): The action to take for off. - - **command_state** (*Optional*): If given, this command will be run. Returning a result code `0` will indicate that the switch is on. - - **value_template** (*Optional*): If specified, `command_state` will ignore the result code of the command but the template evaluating to `true` will indicate the switch is on. - - **friendly_name** (*Optional*): The name used to display the switch in the frontend. +{% configuration %} +switches: + description: The array that contains all command switches. + required: true + type: map + keys: + identifier: + description: Name of the command switch as slug. Multiple entries are possible. + required: true + type: map + keys: + command_on: + description: The action to take for on. + required: true + type: string + command_off: + description: The action to take for off. + required: true + type: string + command_state: + description: "If given, this command will be run. Returning a result code `0` will indicate that the switch is on." + required: false + type: string + value_template: + description: "If specified, `command_state` will ignore the result code of the command but the template evaluating to `true` will indicate the switch is on." + required: false + type: string + friendly_name: + description: The name used to display the switch in the frontend. + required: false + type: string +{% endconfiguration %} A note on `friendly_name`: -When set, the `friendly_name` had been previously used for API calls and backend configuration instead of the `object_id` ("identifier"), but [this behavior is changing](https://github.com/home-assistant/home-assistant/pull/4343) to make the `friendly_name` for display purposes only. This allows users to set an `identifier` that emphasizes uniqueness and predictability for API and config purposes but have a prettier `friendly_name` still show up in the UI. As an additional benefit, if a user wanted to change the `friendly_name` / display name (e.g., from "Kitchen Lightswitch" to "Kitchen Switch" or "Living Room Light", or remove the `friendly_name` altogether), he or she could do so without needing to change existing automations or API calls. See aREST device below for an example. +When set, the `friendly_name` had been previously used for API calls and backend +configuration instead of the `object_id` ("identifier"), but +[this behavior is changing](https://github.com/home-assistant/home-assistant/pull/4343) +to make the `friendly_name` for display purposes only. This allows users to set +an `identifier` that emphasizes uniqueness and predictability for API and config +purposes but have a prettier `friendly_name` still show up in the UI. As an +additional benefit, if a user wanted to change the `friendly_name` / display +name (e.g., from "Kitchen Lightswitch" to "Kitchen Switch" or +"Living Room Light", or remove the `friendly_name` altogether), he or she could +do so without needing to change existing automations or API calls. +See aREST device below for an example. ## {% linkable_title Examples %} @@ -48,7 +83,10 @@ In this section you find some real-life examples of how to use this switch. ### {% linkable_title aREST device %} -The example below is doing the same as the [aREST switch](/components/switch.arest/). The command line tool [`curl`](http://curl.haxx.se/) is used to toggle a pin which is controllable through REST. +The example below is doing the same as the +[aREST switch](/components/switch.arest/). +The command line tool [`curl`](http://curl.haxx.se/) is used to toggle a pin +which is controllable through REST. ```yaml # Example configuration.yaml entry @@ -63,7 +101,10 @@ switch: friendly_name: Kitchen Lightswitch ``` -Given this example, in the UI one would see the `friendly_name` of "Kitchen Light". However, the `identifier` is `arest_pin_four`, making the `entity_id` `switch.arest_pin_four`, which is what one would use in [`automation`](/components/automation/) or in [API calls](/developers/). +Given this example, in the UI one would see the `friendly_name` of +"Kitchen Light". However, the `identifier` is `arest_pin_four`, making the +`entity_id` `switch.arest_pin_four`, which is what one would use in +[`automation`](/components/automation/) or in [API calls](/developers/). ### {% linkable_title Shutdown your local host %} @@ -73,7 +114,6 @@ This switch will shutdown your system that is hosting Home Assistant. This switch will shutdown your host immediately, there will be no confirmation.

- ```yaml # Example configuration.yaml entry switch: @@ -85,8 +125,8 @@ switch: ### {% linkable_title Control your VLC player %} -This switch will control a local VLC media player ([Source](https://community.home-assistant.io/t/vlc-player/106)). - +This switch will control a local VLC media player +([Source](https://community.home-assistant.io/t/vlc-player/106)). ```yaml # Example configuration.yaml entry @@ -100,7 +140,10 @@ switch: ### {% linkable_title Control Foscam Motion Sensor %} -This switch will control the motion sensor of Foscam Webcams which Support CGI Commands ([Source](http://www.ipcamcontrol.net/files/Foscam%20IPCamera%20CGI%20User%20Guide-V1.0.4.pdf)). This switch supports statecmd, which checks the current state of motion detection. +This switch will control the motion sensor of Foscam Webcams which Support CGI +Commands ([Source](http://www.ipcamcontrol.net/files/Foscam%20IPCamera%20CGI%20User%20Guide-V1.0.4.pdf)). +This switch supports statecmd, +which checks the current state of motion detection. ```yaml # Example configuration.yaml entry diff --git a/source/_components/switch.ihc.markdown b/source/_components/switch.ihc.markdown index 67abf63932f..fcdbcf3133b 100644 --- a/source/_components/switch.ihc.markdown +++ b/source/_components/switch.ihc.markdown @@ -13,14 +13,16 @@ ha_release: 0.62 ha_iot_class: "Local Push" --- -Before you can use the IHC Switch platform, you must setup the [IHC Component](/components/ihc/) +Before you can use the IHC Switch platform, you must setup the +[IHC Component](/components/ihc/) -When auto setup is enabled the following products will be found in the ihc project and setup as switch devices: +When auto setup is enabled the following products will be found in the ihc +project and setup as switch devices: -* Wireless plug outlet -* Wireless relay -* Mobile wireless relay -* Dataline plug outlet +- Wireless plug outlet +- Wireless relay +- Mobile wireless relay +- Dataline plug outlet To manually configure IHC switches insert this section in your configuration: @@ -51,6 +53,6 @@ switches: type: string {% endconfiguration %} -The resource id should be a boolean resource. (On/Off) -For more information about IHC resource ids see [Manual Setup](/components/ihc/#manual-setup) - +The resource id should be a boolean resource (On/Off). +For more information about IHC resource ids see +[Manual Setup](/components/ihc/#manual-setup). From 3f4b6ec2494b2a079dfa5b08250a6f01cbc57fdc Mon Sep 17 00:00:00 2001 From: DubhAd Date: Sun, 30 Sep 2018 20:03:05 +0100 Subject: [PATCH 013/114] Adding link for renaming (#6390) Since now folks are confused, adding a link to the customizing docs. --- source/_docs/z-wave/control-panel.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_docs/z-wave/control-panel.markdown b/source/_docs/z-wave/control-panel.markdown index c84ff576d18..2556722cb8d 100644 --- a/source/_docs/z-wave/control-panel.markdown +++ b/source/_docs/z-wave/control-panel.markdown @@ -14,6 +14,8 @@ redirect_from: /getting-started/z-wave-panel/ If you don't see the **Configuration** menu on the menubar, where you'll find the Z-Wave menu, [see here](/components/config/).

+Renaming Z-Wave entities is now done using the same [customization options](/docs/configuration/customizing-devices/) as for any other entity. + ## {% linkable_title Z-Wave Network Management %} Here is where you [include and exclude](/docs/z-wave/adding/) Z-Wave devices from your network. From 88f1e347bbfbbfe0e488e6d4bf4367e752db3f63 Mon Sep 17 00:00:00 2001 From: Jason Hu Date: Sun, 30 Sep 2018 12:12:48 -0700 Subject: [PATCH 014/114] Update multi-factor-auth.markdown (#6389) --- source/_docs/authentication/multi-factor-auth.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/authentication/multi-factor-auth.markdown b/source/_docs/authentication/multi-factor-auth.markdown index 936ed2e2cfd..06a3843c82f 100644 --- a/source/_docs/authentication/multi-factor-auth.markdown +++ b/source/_docs/authentication/multi-factor-auth.markdown @@ -68,7 +68,7 @@ Notify MFA module using [notify component](https://www.home-assistant.io/compone User need first set up the MFA module by select one of the aviliable notify service. A 6 digit one-time password will be sent by this notify service, user need to input it to verify the setup. -During the login process, an 8 digit one-time password will be sent again, user need to input it to verify his/her identity. If the validation failed, a new one-time password will be sent again. +During the login process, an 6 digit one-time password will be sent again, user need to input it to verify his/her identity. If the validation failed, a new one-time password will be sent again.

Notify MFA module would not verify the one-time password deliveried success, so that if user cannot received the message due any reason, he/she may not be login again. Edit or remove `[your_config_dir]/.storage/auth_module.notify` can disable nofiy MFA module to resolve the issue. From a647828b91768af6f29875c512171bf1ae317aa9 Mon Sep 17 00:00:00 2001 From: emontnemery Date: Sun, 30 Sep 2018 21:23:50 +0200 Subject: [PATCH 015/114] Clarify MQTT light RGB color format (#6376) * Clarify MQTT light RGB color format Clarify that RGB color received and sent by MQTT light is normalized to full brightness * Update light.mqtt.markdown * Update light.mqtt.markdown * Update light.mqtt.markdown * :pencil2: Small tweaks --- source/_components/light.mqtt.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/light.mqtt.markdown b/source/_components/light.mqtt.markdown index 208b333706f..b6409f10043 100644 --- a/source/_components/light.mqtt.markdown +++ b/source/_components/light.mqtt.markdown @@ -122,11 +122,11 @@ rgb_command_template: required: false type: string rgb_command_topic: - description: "The MQTT topic to publish commands to change the light's RGB state." + description: "The MQTT topic to publish commands to change the light's RGB state. Please note that the color value sent by Home Assistant is normalized to full brightness if `brightness_command_topic` is set. Brightness information is in this case sent separately in the `brightness_command_topic`. This will cause a light that expects an absolute color value (including brightness) to flicker." required: false type: string rgb_state_topic: - description: The MQTT topic subscribed to receive RGB state updates. The expected payload is the RGB values separated by commas, for example `255,0,127`. + description: "The MQTT topic subscribed to receive RGB state updates. The expected payload is the RGB values separated by commas, for example, `255,0,127`. Please note that the color value received by Home Assistant is normalized to full brightness. Brightness information is received separately in the `brightness_state_topic`." required: false type: string rgb_value_template: From 65bff2d57a53a67f35c8261fedebd714e0d1db87 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 30 Sep 2018 22:19:23 +0200 Subject: [PATCH 016/114] Add Hacktoberfest blog post (#6383) * Add Hacktoberfest blog post * :pencil2: Spelling and grammar fixes * Update * Fix heading * :pencil2: Spelling and grammar * Fix sentence --- .../_posts/2018-09-30-hacktoberfest.markdown | 83 ++++++++++++++++++ .../hacktoberfest-2018.png | Bin 0 -> 89403 bytes 2 files changed, 83 insertions(+) create mode 100644 source/_posts/2018-09-30-hacktoberfest.markdown create mode 100644 source/images/blog/2018-09-hacktoberfest/hacktoberfest-2018.png diff --git a/source/_posts/2018-09-30-hacktoberfest.markdown b/source/_posts/2018-09-30-hacktoberfest.markdown new file mode 100644 index 00000000000..036fc01bde9 --- /dev/null +++ b/source/_posts/2018-09-30-hacktoberfest.markdown @@ -0,0 +1,83 @@ +--- +layout: post +title: "Participating in Hacktoberfest" +description: "Home Assistant will be participating in Hacktoberfest to help people to get started with Open Source." +date: 2018-09-30 08:00:00 +0000 +date_formatted: "September 30, 2018" +author: Fabian Affolter +author_twitter: fabaff +comments: true +categories: Community +og_image: /images/blog/2018-09-hacktoberfest/hacktoberfest-2018.png +--- + +In October there will the [Hacktoberfest](https://hacktoberfest.digitalocean.com/). To celebrate and support Open Source, [DigitalOcean](https://www.digitalocean.com/), [Twilio](https://www.twilio.com/) and [GitHub](https://github.com/) are again organizing this event. Home Assistant will be part of it like in the last two years. + +We would like to focus on those repositories. Browse through the bugs and fix one. This will get you started with contributing to an Open Source project in an easy way: + +- [Home Assistant Frontend](https://github.com/home-assistant/home-assistant-polymer) +- [Hass.io](https://github.com/home-assistant/hassio) +- [HassOS](https://github.com/home-assistant/hassos) +- [Hass.io CLI](https://github.com/home-assistant/hassio-cli) + +We collected a bunch of entry-level bugs, features and documentation enhancements for two other repositories. Please stick to the open issues for now. We will add more during October: + +- [Home Assistant Easyfix collection](https://github.com/home-assistant/home-assistant/projects/2) +- [Home Assistant Documentation Easyfix collection](https://github.com/home-assistant/home-assistant.io/projects/2) + +If you submit five (5) Pull Requests during October, you will have earned yourself a limited edition Hacktoberfest T-shirt and a place on our credits list if you submit your Pull Requests for Home Assistant! Don’t worry you will be listed there no matter how many Pull Requests you've made. + +**We want to focus on new contributors and people who want to get started on working on an Open Source project.** + +Are you ready? [Sign up for Hacktoberfest](https://hacktoberfest.digitalocean.com/sign_up/register)! + +## {% linkable_title Details %} + +Hacktoberfest will create a lot of work for us. In 2017 we processed 625 Pull Requests in our three main repositories and some more for other parts of Home Assistant during October. We still only have limited resources and for this edition of Hackoberfest we decided to set some rules. These rules will help us and keep your frustration level to a minimum. + +### {% linkable_title General %} + +- Fill out the Pull Request template (if there is any). +- Check our code (lint and unit tests) before you submit your Pull Request. +- Keep your Pull requests small. One change per Pull request is faster to review than 19 changes across different files and features. +- Pull Requests which are not passing the CI usually get less or no attention. +- There is no guarantee that your Pull Request is processed during October. Sorry. +- We reserve the right to close Pull Requests with missing parts (see the Checklist in the Pull Request template), insufficient data or no response after they were submitted. The Pull Requests can always be re-opened later when you are ready or all elements are in place. + +### {% linkable_title Home Assistant Frontend %} + +- Take a look at the [Polymer documentation](https://www.polymer-project.org/). +- Read the [Home Assistant Frontend documentation](https://developers.home-assistant.io/docs/en/frontend_index.html). + +### {% linkable_title Home Assistant %} + +- Get familiar with our [Style Guidelines](https://developers.home-assistant.io/docs/en/development_guidelines.html) and the existing code. +- Go through the [Developer documentation](https://developers.home-assistant.io). +- Don’t forget the documentation. Changes often require an update of the documentation. Also, new integrations. You know how it works, but the users don’t. +- [Architectural changes](https://github.com/home-assistant/architecture) need to be discussed before a change is proposed. Also, keep in mind that those kinds of Pull Request may not be reviewed during October. +- If you update a dependency, then you need to make sure that it will work. This means, provide the configuration sample and other details (used devices, firmware version, etc.). + +### {% linkable_title Home Assistant Documentation %} + +- Make yourself familiar with [Markdown](https://developers.home-assistant.io/docs/en/documentation_index.html). +- Understand our [Standards and Guidelines](https://developers.home-assistant.io/docs/en/documentation_standards.html). +- For small changes like typos and clarifications, use the GitHub editor functionality. +- For more significant changes, we highly recommended that you set up an environment to build the documentation locally before opening a Pull Request. +- Keep an eye on the branches. `current` is for changes on the existing documentation, `next` for new features or integrations that will be available with the next release. + +## {% linkable_title Improve our dependencies %} + +Hacktoberfest is not only about Pull Requests for us, it’s also about the whole ecosystem. Home Assistant depends on a lot of Python modules and you can help Home Assistant indirectly if you make other code more robust, migrate it to asyncio, make it work with Python 3.7, etc. + +Talk to the owner or the maintainer of the code to make your contributions count for Hacktoberfest. + +## {% linkable_title Help us with the workload %} + +It would also be a huge help if you review other Pull Requests. This means that there is a bigger chance that your Pull Request will be handled in a timely manner or that others are. We already have a backlog of Pull Requests in most repositories. + +If you think that you are not enough qualified to do it, don’t worry, there are people around who can and will assist you. There is nothing wrong to go for the low hanging fruits first, comment on the most obvious issues and take a deep-dive after that. Multiple eyes always see more than one pair. + +## {% linkable_title Not a coder? Not a problem! %} + +Also, feel free to [report bugs](https://github.com/home-assistant/home-assistant/issues/new/choose), give us feedback about your user experience, tell the community about your [super cool setup](https://community.home-assistant.io/c/projects), create a [super awesome frontend](https://community.home-assistant.io/c/projects/frontend) with [Lovelace](https://www.home-assistant.io/lovelace) or help other users in the [forum](https://community.home-assistant.io/). + diff --git a/source/images/blog/2018-09-hacktoberfest/hacktoberfest-2018.png b/source/images/blog/2018-09-hacktoberfest/hacktoberfest-2018.png new file mode 100644 index 0000000000000000000000000000000000000000..dfa20a16e4f3e52d76086f8e959781808da5ca47 GIT binary patch literal 89403 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%0DK7&4?)^6?kY)j7A|&Sz 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%0Aw!E;tVT=dGMx7C(FXgy-NoGIqO9V-uD30VXFd@ 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 literal 0 HcmV?d00001 From 17e81839668a72100dc32b7fca2e374bfeb214d9 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 30 Sep 2018 22:59:17 +0200 Subject: [PATCH 017/114] Add --- source/_posts/2018-09-30-hacktoberfest.markdown | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/_posts/2018-09-30-hacktoberfest.markdown b/source/_posts/2018-09-30-hacktoberfest.markdown index 036fc01bde9..0cfbc4ab96f 100644 --- a/source/_posts/2018-09-30-hacktoberfest.markdown +++ b/source/_posts/2018-09-30-hacktoberfest.markdown @@ -31,6 +31,8 @@ If you submit five (5) Pull Requests during October, you will have earned yourse Are you ready? [Sign up for Hacktoberfest](https://hacktoberfest.digitalocean.com/sign_up/register)! + + ## {% linkable_title Details %} Hacktoberfest will create a lot of work for us. In 2017 we processed 625 Pull Requests in our three main repositories and some more for other parts of Home Assistant during October. We still only have limited resources and for this edition of Hackoberfest we decided to set some rules. These rules will help us and keep your frustration level to a minimum. From da0702e2c1da1e17f6282f7a26ad5cbcfa147866 Mon Sep 17 00:00:00 2001 From: WofWca Date: Mon, 1 Oct 2018 14:24:24 +0700 Subject: [PATCH 018/114] fix a link (#6399) --- source/_docs/configuration/devices.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/configuration/devices.markdown b/source/_docs/configuration/devices.markdown index af0a9dd9494..43706169c3a 100644 --- a/source/_docs/configuration/devices.markdown +++ b/source/_docs/configuration/devices.markdown @@ -16,7 +16,7 @@ See the [components overview page](/components/) to find installation instructio Classification for the available integrations: -- [IoT class(/blog/2016/02/12/classifying-the-internet-of-things): Classifier for the device's behavior. +- [IoT class](/blog/2016/02/12/classifying-the-internet-of-things): Classifier for the device's behavior. - [Quality scale](/docs/quality_scale/): Representation of the integration's quality. Usually every entity needs its own entry in the `configuration.yaml` file. There are two styles for multiple entries: From 811600129b6240ee56d3cc6ad1495ea3de3f59e2 Mon Sep 17 00:00:00 2001 From: Timmo Date: Mon, 1 Oct 2018 08:26:37 +0100 Subject: [PATCH 019/114] :books: update low_battery to battery (#6395) This was changed in this commit: https://github.com/home-assistant/home-assistant/commit/657b34f4bb89ea62093ef0f783551cbf6a21e53e#diff-b1619cfacd2bce39d63ad3617b4ab5efR55 --- source/_components/binary_sensor.wirelesstag.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/binary_sensor.wirelesstag.markdown b/source/_components/binary_sensor.wirelesstag.markdown index efe3eae81f4..8ba7543aca0 100644 --- a/source/_components/binary_sensor.wirelesstag.markdown +++ b/source/_components/binary_sensor.wirelesstag.markdown @@ -24,7 +24,7 @@ binary_sensor: monitored_conditions: - presence - door - - low_battery + - battery ``` {% configuration %} @@ -45,4 +45,4 @@ The following conditions can be monitored: * (`wet`): On means too wet (humidity), Off means normal. * (`light`): On means light detected, Off means no light. * (`moisture`): On means moisture detected (wet), Off means no moisture (dry). -* (`low_battery`): On means tag battery is low, Off means normal. +* (`battery`): On means tag battery is low, Off means normal. From 94110afce8d4932416fd3e7dd46e8e18167f351e Mon Sep 17 00:00:00 2001 From: Department G33k Date: Mon, 1 Oct 2018 02:47:23 -0700 Subject: [PATCH 020/114] Update upgrading.markdown (#6394) --- source/_docs/installation/hassbian/upgrading.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/installation/hassbian/upgrading.markdown b/source/_docs/installation/hassbian/upgrading.markdown index c9eb4af4d81..1a6b37d4968 100644 --- a/source/_docs/installation/hassbian/upgrading.markdown +++ b/source/_docs/installation/hassbian/upgrading.markdown @@ -20,7 +20,7 @@ $ sudo apt-get -y upgrade #### {% linkable_title Updating Home Assistant %}

-You can use `hassbian-config` to automate the process by running `sudo hassbian-config upgrade home-assistant` +You can use `hassbian-config` to automate the process by running `sudo hassbian-config upgrade homeassistant`

To update the Home Assistant installation execute the following command as the `pi` user. From ab08e4f6e67f43d8dbd88471238886e507c7cec4 Mon Sep 17 00:00:00 2001 From: Ioan Loosley Date: Mon, 1 Oct 2018 12:10:49 +0100 Subject: [PATCH 021/114] fixing a bit i forgot when i added altitude (#6405) --- source/_components/sensor.opensky.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.opensky.markdown b/source/_components/sensor.opensky.markdown index 39bbb600b4b..f1e13674e70 100644 --- a/source/_components/sensor.opensky.markdown +++ b/source/_components/sensor.opensky.markdown @@ -39,7 +39,7 @@ Configuration options for the OpenSky Network sensor: - **opensky_entry**: Fired when a flight enters the region. - **opensky_exit**: Fired when a flight exits the region. -Both events have two attributes: +Both events have three attributes: - **sensor**: Name of `opensky` sensor that fired the event. - **callsign**: Callsign of the flight. From 99851c950dd05e3ef2864ac8101d99f2840bee69 Mon Sep 17 00:00:00 2001 From: Max Rumpf Date: Mon, 1 Oct 2018 13:11:52 +0200 Subject: [PATCH 022/114] Convert blockquote into note for betters looks (#6403) --- source/_components/google_assistant.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index 5e5435581b5..e84496f0186 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -44,7 +44,9 @@ You need to create an API Key with the [Google Console](https://console.cloud.go 3. Back on the overview page. Click `Simulator` under `TEST`. You don't have to actually test . 4. If you haven't already added the component configuration to `configuration.yaml` file and restarted Home Assistant, you'll be unable to continue until you have. 5. Open the Google Assistant app and go into `Settings > Home Control`. Or on your Android phone or tablet, touch and hold the Home button or say "Ok Google.". At the top right, tap compass icon and then more icon and then `Settings > Home Control`. -> If you have added the [Home Assistant "web app"](/docs/frontend/mobile/) to your phone's homescreen before, you need remove it before next step +

+If you have added the [Home Assistant "web app"](/docs/frontend/mobile/) to your phone's homescreen before, you need remove it before next step +

6. Click the `+` sign, and near the bottom, you should have `[test] your app name`. Selecting that should lead you the screen where you can set rooms for your devices or nicknames for your devices. 7. If you want to allow other household users to control the devices: a. Go to the settings for the project you created in point 1 in the developer console. From 7156626f51a967aa4c0c8f55e6abd9feeec98cb9 Mon Sep 17 00:00:00 2001 From: kernehed Date: Mon, 1 Oct 2018 13:12:51 +0200 Subject: [PATCH 023/114] Update camera.uvc.markdown (#6401) --- source/_components/camera.uvc.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/camera.uvc.markdown b/source/_components/camera.uvc.markdown index 6c924446cc2..5d4bc7d9ae6 100644 --- a/source/_components/camera.uvc.markdown +++ b/source/_components/camera.uvc.markdown @@ -21,7 +21,7 @@ The platform connects to the Unifi NVR software and automatically discovers/adds It is recommended that you create a new user for this platform in the NVR software and only give the user the permissions it need to operate. -- The API key is found in the specific user's `API Access` tab in the NVR software. +- The API key is found in `User` -> `My account` -> `API Access` in the NVR software. - The camera password is found in `Settings` -> `Camera Settings` -> `Camera Password` in the NVR software. ### {% linkable_title Configuration %} From 82c1ebfec57ff6d6df1c2be73f2127087749994e Mon Sep 17 00:00:00 2001 From: kernehed Date: Mon, 1 Oct 2018 13:13:45 +0200 Subject: [PATCH 024/114] Update deconz.markdown (#6400) Just changed a grammar error --- source/_components/deconz.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/deconz.markdown b/source/_components/deconz.markdown index 869a441c8a9..a9034fb048b 100644 --- a/source/_components/deconz.markdown +++ b/source/_components/deconz.markdown @@ -107,7 +107,7 @@ Note: deCONZ automatically signals Home Assistant when new sensors are added, bu ## {% linkable_title Remote control devices %} -Remote controls (ZHASwitch category) will be not be exposed as regular entities, but as events named `deconz_event` with a payload of `id` and `event`. Id will be the device name from deCONZ and Event will be the momentary state of the switch. However, a sensor entity will be created that shows the battery level of the switch as reported by deCONZ, named sensor.device_name_battery_level. +Remote controls (ZHASwitch category) will not be exposed as regular entities, but as events named `deconz_event` with a payload of `id` and `event`. Id will be the device name from deCONZ and Event will be the momentary state of the switch. However, a sensor entity will be created that shows the battery level of the switch as reported by deCONZ, named sensor.device_name_battery_level. Typical values for switches, the event codes are 4 numbers where the first and last number are of interest here. From 54b3b8ab4eaef43013ed3115c8fe4eea641398d0 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 1 Oct 2018 15:50:56 +0200 Subject: [PATCH 025/114] release 79.2 --- _config.yml | 6 +++--- source/_posts/2018-10-01-release-79.markdown | 12 ++++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/_config.yml b/_config.yml index 1c1c6d64c5e..ab7ed48bb3a 100644 --- a/_config.yml +++ b/_config.yml @@ -142,13 +142,13 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 79 -current_patch_version: 1 -date_released: 2018-09-30 +current_patch_version: 2 +date_released: 2018-10-01 # 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-0791---september-30" +patch_version_notes: "#release-0792---october-1" # Minor release (Example #release-0431---april-25): # Date we moved to Discourse for comments diff --git a/source/_posts/2018-10-01-release-79.markdown b/source/_posts/2018-10-01-release-79.markdown index e3bca1283c4..100f2475b94 100644 --- a/source/_posts/2018-10-01-release-79.markdown +++ b/source/_posts/2018-10-01-release-79.markdown @@ -80,6 +80,18 @@ Oh, and yes, there is also some cool new integrations. Support has been added fo [sensor.ring docs]: /components/sensor.ring/ [zoneminder docs]: /components/zoneminder/ +## {% linkable_title Release 0.79.2 - October 1 %} + +- Fix MQTT certificates ([@balloob] - [#16999]) ([mqtt docs]) +- Fix switch.zoneminder name ([@rohankapoorcom] - [#17026]) ([switch.zoneminder docs]) + +[#16999]: https://github.com/home-assistant/home-assistant/pull/16999 +[#17026]: https://github.com/home-assistant/home-assistant/pull/17026 +[@balloob]: https://github.com/balloob +[@rohankapoorcom]: https://github.com/rohankapoorcom +[mqtt docs]: /components/mqtt/ +[switch.zoneminder docs]: /components/switch.zoneminder/ + ## {% linkable_title If you need help... %} ...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. From 5e3eb19a6c38e403de2ec2f7073aab13822e6efc Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 1 Oct 2018 15:51:55 +0200 Subject: [PATCH 026/114] Add breaking change (#6406) --- source/_posts/2018-10-01-release-79.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_posts/2018-10-01-release-79.markdown b/source/_posts/2018-10-01-release-79.markdown index 100f2475b94..9409a414fd1 100644 --- a/source/_posts/2018-10-01-release-79.markdown +++ b/source/_posts/2018-10-01-release-79.markdown @@ -120,6 +120,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Add unique_id to Nest Sensors ([@cgarwood] - [#16869]) ([binary_sensor.nest docs]) ([sensor.nest docs]) (beta fix) - Prevent discovered Tradfri while already configured ([@balloob] - [#16891]) ([tradfri docs]) (beta fix) - Handle exception handling websocket command ([@balloob] - [#16927]) ([websocket_api docs]) (beta fix) +- The `zoneminder` switch platform now uses new names. ([@rohankapoorcom] - [#16527]) ([zoneminder docs]) (breaking change) ## {% linkable_title All changes %} From 268366c62e04e19a7f273dcee1e2560ced65159f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isabella=20Gross=20Alstr=C3=B6m?= Date: Mon, 1 Oct 2018 15:54:58 +0200 Subject: [PATCH 027/114] Update with grouping of notifications (#6410) * Update with grouping of notifications Also two minor changes to sentences about iOS 10 to reflect that there is newer versions out now. * Minor tweaks --- .../ios/notifications/basic.markdown | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/source/_docs/ecosystem/ios/notifications/basic.markdown b/source/_docs/ecosystem/ios/notifications/basic.markdown index 7e0a5e92887..f05c21deba5 100644 --- a/source/_docs/ecosystem/ios/notifications/basic.markdown +++ b/source/_docs/ecosystem/ios/notifications/basic.markdown @@ -14,7 +14,7 @@ The iOS notify platform accepts the standard `title`, `message` and `target` par Notes: -* `title` only displays on Apple Watch and iOS 10 devices. +* `title` only displays on Apple Watch and devices with iOS 10 or above. * `target` can be used to specific a single device using its PushID, found in `ios.conf`. The preferred way of providing a target is through a target specific notify service. @@ -44,7 +44,7 @@ automation: ``` #### Subtitle -iOS 10 supports a subtitle in addition to the title: +Starting with iOS 10, a subtitle is supported in addition to the title: ```yaml automation @@ -60,6 +60,25 @@ automation subtitle: "Subtitle goes here" ``` +#### Thread-id (grouping notifications) +Starting with iOS 12, grouping of notifications is supported. All notifications with the same thread-id will be grouped together in the notification center. Without a thread-id, all notifications from the app will be placed in a single group. + +```yaml +automation: + - alias: Notify iOS app + trigger: + ... + action: + service: notify.ios_ + data: + title: "Smart Home Alerts" + message: "Something happened at home!" + data: + push: + thread-id: "example-notification-group" +``` + + ### {% linkable_title Sending notifications to multiple phones %} To send notifications to multiple phones, create a [notification group](/components/notify.group/): ```yaml From 9514f98dcfc7e73ab3cdba52d994e0021137a6e6 Mon Sep 17 00:00:00 2001 From: Tom Matheussen Date: Mon, 1 Oct 2018 15:57:02 +0200 Subject: [PATCH 028/114] Add IoT class to Unifi device trackers (#6408) * Added IoT Class to Unify WAP page * Added IoT Class to Unify Direct AP page --- source/_components/device_tracker.unifi.markdown | 1 + source/_components/device_tracker.unifi_direct.markdown | 1 + 2 files changed, 2 insertions(+) diff --git a/source/_components/device_tracker.unifi.markdown b/source/_components/device_tracker.unifi.markdown index 94dee4ca71c..619b27f17ac 100644 --- a/source/_components/device_tracker.unifi.markdown +++ b/source/_components/device_tracker.unifi.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: ubiquiti.png ha_category: Presence Detection +ha_iot_class: "Local Polling" ha_release: 0.14 --- diff --git a/source/_components/device_tracker.unifi_direct.markdown b/source/_components/device_tracker.unifi_direct.markdown index 4816832b8e1..9bc5ad22104 100644 --- a/source/_components/device_tracker.unifi_direct.markdown +++ b/source/_components/device_tracker.unifi_direct.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: ubiquiti.png ha_category: Presence Detection +ha_iot_class: "Local Polling" ha_release: 0.59 --- From 4fcb17f4c5818dcc6f18b62228947a799141d34e Mon Sep 17 00:00:00 2001 From: Robin Date: Mon, 1 Oct 2018 16:42:16 +0200 Subject: [PATCH 029/114] Update google_assistant.markdown (#6411) --- source/_components/google_assistant.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index e84496f0186..c2bb9d3d90e 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -27,7 +27,7 @@ To use Google Assistant, your Home Assistant configuration has to be externally ## {% linkable_title Setup %} -You need to create an API Key with the [Google Console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview) which allows you to update devices without unlinking and relinking an account (see [below](/#troubleshooting-the-request_sync-service)). If you don't provided it the `google_assistant.request_sync` service is not exposed. It is recommended to set up this configuration key as it also allows the usage of the following command, "Ok Google, sync my devices". Once you have setup this component you will need to call this service (or command) each time you add a new device that you wish to control via the Google Assistant integration. +You need to create an API Key with the [Google Console](https://console.cloud.google.com/apis/api/homegraph.googleapis.com/overview) which allows you to update devices without unlinking and relinking an account (see [below](/#troubleshooting-the-request_sync-service)). If you don't provide it the `google_assistant.request_sync` service is not exposed. It is recommended to set up this configuration key as it also allows the usage of the following command, "Ok Google, sync my devices". Once you have setup this component you will need to call this service (or command) each time you add a new device that you wish to control via the Google Assistant integration. 1. Create a new project in the [Actions on Google console](https://console.actions.google.com/). a. Add/Import project, give it a name From e5baab532e35764eb46479d3080d06267de6aff2 Mon Sep 17 00:00:00 2001 From: Ioan Loosley Date: Mon, 1 Oct 2018 15:52:33 +0100 Subject: [PATCH 030/114] Made the hangouts documentation go into more detail about the covo id (#6407) --- source/_components/notify.hangouts.markdown | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/source/_components/notify.hangouts.markdown b/source/_components/notify.hangouts.markdown index e1dcdf83e54..3f69c3f5b30 100644 --- a/source/_components/notify.hangouts.markdown +++ b/source/_components/notify.hangouts.markdown @@ -46,7 +46,22 @@ default_conversations: type: string {% endconfiguration %} -The conversations has to be precreated, the conversation id can be obtained from the `hangouts.conversations` entity. Make sure to use quotes around the conversation id or alias to escape special characters (`!`, and `#`) in YAML. +### {% linkable_title Finding the conversation ID %} + +The conversations has to be precreated, the conversation id can be obtained from the `hangouts.conversations` entity, this can be found in with the states developer tool that is shown as this icon in the side bar. Using your web browsers search tool to find the `hangouts.conversations` entity. You will find something like bellow + +``` +0: { + "id": "", + "name": "A simple hangout", + "users": [ + "Steve", + "Jo" + ] +} +``` + +This may have more if the account is in multiple hangout conversations, for configuring the bot to be in a conversation you will need the ID that would be where `` is in that example. Make sure to use quotes around the conversation id or alias to escape special characters (`!`, and `#`) in YAML. To use notifications, please see the [getting started with automation page](/getting-started/automation/). From 457390bbe401bf48ff0461bab415a39a7a4f4393 Mon Sep 17 00:00:00 2001 From: WofWca Date: Mon, 1 Oct 2018 21:55:07 +0700 Subject: [PATCH 031/114] Update variables section format for aREST Binary Sensor (#6413) * Update variables section format * Add missing types --- .../_components/binary_sensor.arest.markdown | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/source/_components/binary_sensor.arest.markdown b/source/_components/binary_sensor.arest.markdown index 1cf17934b7f..5029ae1b278 100644 --- a/source/_components/binary_sensor.arest.markdown +++ b/source/_components/binary_sensor.arest.markdown @@ -28,11 +28,20 @@ binary_sensor: pin: 8 ``` -Configuration variables: - -- **resource** (*Required*): IP address and schema of the device that is exposing an aREST API, e.g., http://192.168.1.10. -- **pin** (*Required*): Number of the pin to monitor. -- **name** (*Optional*): Let you overwrite the name of the device. By default *name* from the device is used. +{% configuration %} +resource: + description: IP address and schema of the device that is exposing an aREST API, e.g., http://192.168.1.10. + required: true + type: string +pin: + description: Number of the pin to monitor. + required: true + type: int +name: + description: Let you overwrite the name of the device. By default *name* from the device is used. + required: false + type: string +{% endconfiguration %} Accessing the URL http://IP_ADDRESS/digital/PIN_NUMBER should give you the state of the pin inside a JSON response as `return_value`. From cf23a4e26306e02934eef82ebe1e78fa8be38c0d Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 1 Oct 2018 22:43:17 +0200 Subject: [PATCH 032/114] Update configuration variables description (#6416) * Update configuration variables description * Change type back to list * Fix value --- .../binary_sensor.wirelesstag.markdown | 43 ++++++++++++------- .../_components/sensor.wirelesstag.markdown | 25 ++++++----- .../_components/switch.wirelesstag.markdown | 27 ++++++------ 3 files changed, 57 insertions(+), 38 deletions(-) diff --git a/source/_components/binary_sensor.wirelesstag.markdown b/source/_components/binary_sensor.wirelesstag.markdown index 8ba7543aca0..a98a129255b 100644 --- a/source/_components/binary_sensor.wirelesstag.markdown +++ b/source/_components/binary_sensor.wirelesstag.markdown @@ -15,6 +15,8 @@ ha_release: 0.68 To get your [wirelesstag.net](http://wirelesstag.net) binary sensors working within Home Assistant, please follow the instructions for the general [WirelessTag component](/components/wirelesstag). +## {% linkable_title Configuration %} + To enable tags set up with your [wirelesstag.net](http://wirelesstag.net) account, add the following to your `configuration.yaml` file: ```yaml @@ -28,21 +30,30 @@ binary_sensor: ``` {% configuration %} - monitored_conditions: - description: The conditions types to monitor; valid values are specified below - required: true - type: list +monitored_conditions: + description: The conditions types to monitor. + required: true + type: list + keys: + presence: + description: On means in range, Off means out of range. + motion: + description: On when a movement was detected, Off when clear. + door: + description: On when a door is open, Off when the door is closed. + cold: + description: On means temperature become too cold, Off means normal. + heat: + description: On means hot, Off means normal. + dry: + description: On means too dry (humidity), Off means normal. + wet: + description: On means too wet (humidity), Off means normal. + light: + description: On means light detected, Off means no light. + moisture: + description: On means moisture detected (wet), Off means no moisture (dry). + battery: + description: On means tag battery is low, Off means normal. {% endconfiguration %} -The following conditions can be monitored: - -* (`presence`): On means in range, Off means out of range. -* (`motion`): On when a movement was detected, Off when clear. -* (`door`): On when a door is open, Off when the door is closed. -* (`cold`): On means temperature become too cold, Off means normal. -* (`heat`): On means hot, Off means normal. -* (`dry`): On means too dry (humidity), Off means normal. -* (`wet`): On means too wet (humidity), Off means normal. -* (`light`): On means light detected, Off means no light. -* (`moisture`): On means moisture detected (wet), Off means no moisture (dry). -* (`battery`): On means tag battery is low, Off means normal. diff --git a/source/_components/sensor.wirelesstag.markdown b/source/_components/sensor.wirelesstag.markdown index 5b811d400a8..33961e0cf18 100644 --- a/source/_components/sensor.wirelesstag.markdown +++ b/source/_components/sensor.wirelesstag.markdown @@ -15,6 +15,8 @@ ha_release: 0.68 To get your [wirelesstag.net](http://wirelesstag.net) sensors working within Home Assistant, please follow the instructions for the general [WirelessTag component](/components/wirelesstag). +## {% linkable_title Configuration %} + To enable tags set up with your [wirelesstag.net](http://wirelesstag.net) account, add the following to your `configuration.yaml` file: ```yaml @@ -27,15 +29,18 @@ sensor: ``` {% configuration %} - monitored_conditions: - description: The metrics types to monitor; valid values are specified below - required: true - type: list +monitored_conditions: + description: The metrics types to monitor. + required: true + type: list + keys: + temperature: + description: Value is in Celsius or Fahrenheit (according to your settings at Tag Manager). + humidity: + description: "Humidity level in %." + moisture: + description: "Water level/soil moisture in % (applicable for Water Tag only)." + light: + description: Brightness in lux (if supported by tag). {% endconfiguration %} -The following metrics can be monitored: - -* (`temperature`): Value is in Celsius or Fahrenheit (according to your settings at Tag Manager). -* (`humidity`): Humidity level in %. -* (`moisture`): Water level/soil moisture in % (applicable for Water Tag only). -* (`light`): Brightness in lux (if supported by tag). diff --git a/source/_components/switch.wirelesstag.markdown b/source/_components/switch.wirelesstag.markdown index f9239b3d11d..1721d2bf822 100644 --- a/source/_components/switch.wirelesstag.markdown +++ b/source/_components/switch.wirelesstag.markdown @@ -27,19 +27,22 @@ switch: ``` {% configuration %} - monitored_conditions: - description: The metrics types to control; valid values are specified below - required: true - type: list +monitored_conditions: + description: The metrics types to control. + required: true + type: list + keys: + temperature: + description: Control arm/disarm temperature monitoring. + humidity: + description: Control arm/disarm humidity monitoring. + motion: + description: Control arm/disarm motion and door open/close events monitoring. + light: + description: Control monitoring of light changes. + moisture: + description: Control monitoring of water level/soil moisture for water sensor. {% endconfiguration %} -The following metrics can be controlled: - -* (`temperature`): Control arm/disarm temperature monitoring. -* (`humidity`): Control arm/disarm humidity monitoring. -* (`motion`): Control arm/disarm motion and door open/close events monitoring. -* (`light`): Control monitoring of light changes. -* (`moisture`): Control monitoring of water level/soil moisture for water sensor. - Arm/Disarm of motion switch is required to receive motion and door binary sensors events. Others are only needed if you want to receive push notifications from tags on a specific range of changes in temperature, humidity, light or moisture. From cbcba8f2a306bbe3e14129f3d6f405164c980a10 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 1 Oct 2018 22:45:52 +0200 Subject: [PATCH 033/114] Add IQS 'internal' (#6417) --- source/_components/alert.markdown | 1 + source/_components/api.markdown | 1 + source/_components/auth.markdown | 1 + source/_components/binary_sensor.random.markdown | 8 ++------ source/_components/binary_sensor.trend.markdown | 1 + source/_components/config.markdown | 1 + source/_components/configurator.markdown | 1 + source/_components/counter.markdown | 1 + source/_components/discovery.markdown | 1 + source/_components/frontend.markdown | 1 + source/_components/input_boolean.markdown | 1 + source/_components/input_datetime.markdown | 1 + source/_components/input_number.markdown | 1 + source/_components/input_select.markdown | 1 + source/_components/input_text.markdown | 1 + source/_components/introduction.markdown | 1 + source/_components/map.markdown | 1 + source/_components/persistent_notification.markdown | 1 + source/_components/sensor.filter.markdown | 1 + source/_components/sensor.random.markdown | 4 +--- source/_components/sensor.statistics.markdown | 1 + source/_components/timer.markdown | 1 + source/_components/updater.markdown | 1 + source/_components/zone.markdown | 1 + source/_docs/quality_scale.markdown | 4 ++++ source/_includes/asides/component_navigation.html | 2 ++ 26 files changed, 31 insertions(+), 9 deletions(-) diff --git a/source/_components/alert.markdown b/source/_components/alert.markdown index 1d06c44254a..bbb2e6b7289 100644 --- a/source/_components/alert.markdown +++ b/source/_components/alert.markdown @@ -10,6 +10,7 @@ footer: true logo: home-assistant.png ha_category: Automation ha_release: 0.38 +ha_qa_scale: internal --- The `alert` component is designed to notify you when problematic issues arise. diff --git a/source/_components/api.markdown b/source/_components/api.markdown index ba1097738e9..4ff36762cbf 100644 --- a/source/_components/api.markdown +++ b/source/_components/api.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: home-assistant.png ha_category: "Other" +ha_qa_scale: internal --- The `api` component exposes a RESTful API and allows one to interact with a Home Assistant instance that is running headless. This component depends on the [`http` component](/components/http/). diff --git a/source/_components/auth.markdown b/source/_components/auth.markdown index cc7ec923920..ac1d6278d4e 100644 --- a/source/_components/auth.markdown +++ b/source/_components/auth.markdown @@ -10,6 +10,7 @@ footer: true logo: home-assistant.png ha_category: Other ha_release: 0.73 +ha_qa_scale: internal --- This component creates the endpoints for the [authentication system](/docs/authentication/) that is built into Home Assistant. There are no configuration options for this component directly as it relies on the auth system in the core. diff --git a/source/_components/binary_sensor.random.markdown b/source/_components/binary_sensor.random.markdown index dece1477fae..b398a2c9a43 100644 --- a/source/_components/binary_sensor.random.markdown +++ b/source/_components/binary_sensor.random.markdown @@ -11,11 +11,10 @@ logo: home-assistant.png ha_category: Utility ha_iot_class: "Local Polling" ha_release: 0.57 +ha_qa_scale: internal --- -The `random` binary sensor platform is creating random states (`true`, 1, `on` -or `false`, 0, `off`). This can be useful if you want to test automation rules. -It generates a new state every time it is polled. +The `random` binary sensor platform is creating random states (`true`, 1, `on` or `false`, 0, `off`). This can be useful if you want to test automation rules. It generates a new state every time it is polled. ## {% linkable_title Configuration %} @@ -34,6 +33,3 @@ name: type: string {% endconfiguration %} -See the [entity component options](/docs/configuration/platform_options/) -to control how often the main component polls the random binary sensor. -The default is 30 seconds. diff --git a/source/_components/binary_sensor.trend.markdown b/source/_components/binary_sensor.trend.markdown index d1c68e87af9..c10164d425a 100644 --- a/source/_components/binary_sensor.trend.markdown +++ b/source/_components/binary_sensor.trend.markdown @@ -11,6 +11,7 @@ ha_category: Utility logo: home-assistant.png ha_release: 0.28 ha_iot_class: "Local Push" +ha_qa_scale: internal --- The `trend` platform allows you to create sensors which show the trend of diff --git a/source/_components/config.markdown b/source/_components/config.markdown index 29aa9ce2aea..a84ef198896 100644 --- a/source/_components/config.markdown +++ b/source/_components/config.markdown @@ -10,6 +10,7 @@ footer: true logo: home-assistant.png ha_category: Front end ha_release: 0.39 +ha_qa_scale: internal --- The `config` component is designed to display panels in the frontend to configure and manage parts of Home Assistant. diff --git a/source/_components/configurator.markdown b/source/_components/configurator.markdown index 9cabdccbb35..0d033105f77 100644 --- a/source/_components/configurator.markdown +++ b/source/_components/configurator.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: home-assistant.png ha_category: Other +ha_qa_scale: internal ---

diff --git a/source/_components/counter.markdown b/source/_components/counter.markdown index 123ebee79d9..7c64913880b 100644 --- a/source/_components/counter.markdown +++ b/source/_components/counter.markdown @@ -10,6 +10,7 @@ footer: true logo: home-assistant.png ha_category: Automation ha_release: 0.53 +ha_qa_scale: internal --- The `counter` component allows one to count occurrences fired by automations. diff --git a/source/_components/discovery.markdown b/source/_components/discovery.markdown index 5ab929d212e..4f4ef7f5a74 100644 --- a/source/_components/discovery.markdown +++ b/source/_components/discovery.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: home-assistant.png ha_category: Other +ha_qa_scale: internal --- Home Assistant can discover and automatically configure [zeroconf](https://en.wikipedia.org/wiki/Zero-configuration_networking)/[mDNS](https://en.wikipedia.org/wiki/Multicast_DNS) and [uPnP](https://en.wikipedia.org/wiki/Universal_Plug_and_Play) devices on your network. Currently the `discovery` component can detect: diff --git a/source/_components/frontend.markdown b/source/_components/frontend.markdown index 9f6ab7ee33b..09941498172 100644 --- a/source/_components/frontend.markdown +++ b/source/_components/frontend.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: home-assistant.png ha_category: "Other" +ha_qa_scale: internal --- This offers the official frontend to control Home Assistant. diff --git a/source/_components/input_boolean.markdown b/source/_components/input_boolean.markdown index 68f75566ba4..b5ff27a3f0c 100644 --- a/source/_components/input_boolean.markdown +++ b/source/_components/input_boolean.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: home-assistant.png ha_category: Automation +ha_qa_scale: internal --- The `input_boolean` component allows the user to define boolean values that can be controlled via the frontend and can be used within conditions of automation. This can for example be used to disable or enable certain automations. diff --git a/source/_components/input_datetime.markdown b/source/_components/input_datetime.markdown index be7024142a2..b7a45611eff 100644 --- a/source/_components/input_datetime.markdown +++ b/source/_components/input_datetime.markdown @@ -10,6 +10,7 @@ footer: true logo: home-assistant.png ha_category: Automation ha_release: 0.55 +ha_qa_scale: internal --- The `input_datetime` component allows the user to define date and time values diff --git a/source/_components/input_number.markdown b/source/_components/input_number.markdown index 299543428d4..f2301243db0 100644 --- a/source/_components/input_number.markdown +++ b/source/_components/input_number.markdown @@ -11,6 +11,7 @@ logo: home-assistant.png ha_category: Automation ha_release: 0.55 redirect_from: /components/input_slider/ +ha_qa_scale: internal ---

diff --git a/source/_components/input_select.markdown b/source/_components/input_select.markdown index dec70767fd1..5948d9d1ac1 100644 --- a/source/_components/input_select.markdown +++ b/source/_components/input_select.markdown @@ -10,6 +10,7 @@ footer: true logo: home-assistant.png ha_category: Automation ha_release: 0.13 +ha_qa_scale: internal --- The `input_select` component allows the user to define a list of values that can be selected via the frontend and can be used within conditions of automation. When a user selects a new item, a state transition event is generated. This state event can be used in an `automation` trigger. diff --git a/source/_components/input_text.markdown b/source/_components/input_text.markdown index 187f08a0e46..9833541ba37 100644 --- a/source/_components/input_text.markdown +++ b/source/_components/input_text.markdown @@ -10,6 +10,7 @@ footer: true logo: home-assistant.png ha_category: Automation ha_release: 0.53 +ha_qa_scale: internal --- The `input_text` component allows the user to define values that can be controlled via the frontend and can be used within conditions of automation. Changes to the value stored in the text box generate state events. These state events can be utilized as `automation` triggers as well. It can also be configured in password mode (obscured text). diff --git a/source/_components/introduction.markdown b/source/_components/introduction.markdown index 759142229dc..83a39cc1612 100644 --- a/source/_components/introduction.markdown +++ b/source/_components/introduction.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: home-assistant.png ha_category: Other +ha_qa_scale: internal --- The introduction component will show a card in the UI with 'Welcome Home!' and steps on how to get started. It will also print the same message to the console when starting up. diff --git a/source/_components/map.markdown b/source/_components/map.markdown index deacb922222..c7a5e90eefe 100644 --- a/source/_components/map.markdown +++ b/source/_components/map.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: home-assistant.png ha_category: "Other" +ha_qa_scale: internal --- This offers a map on the frontend to display the location of tracked devices. To set up tracked devices, look at the [device tracker](/components/device_tracker/) documentation. diff --git a/source/_components/persistent_notification.markdown b/source/_components/persistent_notification.markdown index 9fac3ddc0cf..a0bf7abfb78 100644 --- a/source/_components/persistent_notification.markdown +++ b/source/_components/persistent_notification.markdown @@ -10,6 +10,7 @@ footer: true logo: home-assistant.png ha_category: Other ha_release: 0.23 +ha_qa_scale: internal --- The `persistent_notification` can be used to show a message on the frontend that has to be dismissed by the user. diff --git a/source/_components/sensor.filter.markdown b/source/_components/sensor.filter.markdown index a0a07337a70..fec73f0facd 100644 --- a/source/_components/sensor.filter.markdown +++ b/source/_components/sensor.filter.markdown @@ -11,6 +11,7 @@ ha_category: Utility ha_release: 0.65 ha_iot_class: "Local Push" logo: home-assistant.png +ha_qa_scale: internal --- The `filter` platform enables sensors that process the states of other entities. diff --git a/source/_components/sensor.random.markdown b/source/_components/sensor.random.markdown index e3515333eab..8b1bb11cfbf 100644 --- a/source/_components/sensor.random.markdown +++ b/source/_components/sensor.random.markdown @@ -11,6 +11,7 @@ logo: home-assistant.png ha_category: Utility ha_iot_class: "Local Polling" ha_release: 0.32 +ha_qa_scale: internal --- @@ -48,6 +49,3 @@ unit_of_measurement: type: string {% endconfiguration %} -See the [entity component options][entity-docs] to control how often the main component polls the random sensor. The default is 30 seconds. - -[entity-docs]: /docs/configuration/platform_options/ diff --git a/source/_components/sensor.statistics.markdown b/source/_components/sensor.statistics.markdown index d28f73eabee..509e7f8db3c 100644 --- a/source/_components/sensor.statistics.markdown +++ b/source/_components/sensor.statistics.markdown @@ -11,6 +11,7 @@ logo: home-assistant.png ha_category: Utility ha_iot_class: "Local Polling" ha_release: "0.30" +ha_qa_scale: internal --- diff --git a/source/_components/timer.markdown b/source/_components/timer.markdown index eb6db877f36..dad6227958e 100644 --- a/source/_components/timer.markdown +++ b/source/_components/timer.markdown @@ -10,6 +10,7 @@ footer: true logo: home-assistant.png ha_category: Automation ha_release: 0.57 +ha_qa_scale: internal --- The `timer` component aims to simplify automations based on (dynamic) durations. diff --git a/source/_components/updater.markdown b/source/_components/updater.markdown index b87d554bb91..2b6c2997a7a 100644 --- a/source/_components/updater.markdown +++ b/source/_components/updater.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: home-assistant.png ha_category: Other +ha_qa_scale: internal --- The `updater` component will check daily for new releases. It will show a badge in the frontend if a new version is found. As [Hass.io](/hassio/) has its own schedule for release it doesn't make sense to use this component on Hass.io. diff --git a/source/_components/zone.markdown b/source/_components/zone.markdown index c97d06657ff..fd6280eccfc 100644 --- a/source/_components/zone.markdown +++ b/source/_components/zone.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: home-assistant.png ha_category: Organization +ha_qa_scale: internal --- Zones allow you to specify certain regions on earth (for now). When a device tracker sees a device to be within a zone, the state will take the name from the zone. Zones can also be used as a [trigger](/getting-started/automation-trigger/#zone-trigger) or [condition](/getting-started/automation-condition/#zone-condition) inside automation setups. diff --git a/source/_docs/quality_scale.markdown b/source/_docs/quality_scale.markdown index 6abe5ce2150..d2c818a30da 100644 --- a/source/_docs/quality_scale.markdown +++ b/source/_docs/quality_scale.markdown @@ -29,3 +29,7 @@ This is a solid integration that is able to survive poor conditions and can be c Best of the best. The integration is completely async, meaning it's super fast and gives you an excellent user experience. +## {% linkable_title Internal 🏠 %} + +All integrations which are marked as **internal** are part of Home Assistant. + diff --git a/source/_includes/asides/component_navigation.html b/source/_includes/asides/component_navigation.html index 91be8e8155a..a165fe95e16 100644 --- a/source/_includes/asides/component_navigation.html +++ b/source/_includes/asides/component_navigation.html @@ -37,6 +37,8 @@ 🥇 (gold) {% elsif page.ha_qa_scale == 'silver' %} 🥈 (silver) + {% elsif page.ha_qa_scale == 'internal' %} + 🏠 (internal) {% endif %} From 0426cd8ad829b54b965c3d06f629fa460e3e80f2 Mon Sep 17 00:00:00 2001 From: Max Rumpf Date: Tue, 2 Oct 2018 10:41:20 +0200 Subject: [PATCH 034/114] Improve wording in binary sensor (#6425) --- source/_components/binary_sensor.http.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/binary_sensor.http.markdown b/source/_components/binary_sensor.http.markdown index d827e126003..779cafb95e2 100644 --- a/source/_components/binary_sensor.http.markdown +++ b/source/_components/binary_sensor.http.markdown @@ -60,7 +60,7 @@ $ curl -X GET -H "x-ha-access: YOUR_PASSWORD" \ ## {% linkable_title Examples %} -In this section you find some real-life examples of how to use this sensor. Beside `curl`. +In this section you'll find some real-life examples of how to use this sensor, besides `curl`, which was shown earlier. ### {% linkable_title Using Python request module %} From 7a9766cc6bfc3fb5469b6de54423d81f943c0682 Mon Sep 17 00:00:00 2001 From: David De Sloovere Date: Tue, 2 Oct 2018 10:43:30 +0200 Subject: [PATCH 035/114] Improve flic sensor documentation (#6418) * Improve flic sensor setup and automation info Added link to add-on. Added example with event data * Refactor config options layout * cleanup * defaults * Escape template syntax --- .../_components/binary_sensor.flic.markdown | 65 +++++++++++++++---- 1 file changed, 54 insertions(+), 11 deletions(-) diff --git a/source/_components/binary_sensor.flic.markdown b/source/_components/binary_sensor.flic.markdown index 3767ed7476a..7811cc778df 100644 --- a/source/_components/binary_sensor.flic.markdown +++ b/source/_components/binary_sensor.flic.markdown @@ -13,9 +13,17 @@ ha_iot_class: "Local Push" ha_release: 0.35 --- -The `flic` platform allows you to connect with multiple [flic](https://flic.io) smart buttons. +The `flic` platform allows you to receive click events from [flic](https://flic.io) smart buttons. -The platform does not directly interact with the buttons, but communicates with the flic service that manages the buttons. The service can run on the same instance as Home Assistant or any other reachable machine. For setup instructions visit the GitHub repository of the service for [Linux](https://github.com/50ButtonsEach/fliclib-linux-hci), [OS X](https://github.com/50ButtonsEach/flic-service-osx) or [Windows](https://github.com/50ButtonsEach/fliclib-windows). +The platform does not directly interact with the buttons, *but communicates with a flic service* that manages the buttons. The service can run on the same instance as Home Assistant or any other reachable machine. + +#### {% linkable_title Service setup %} + +If you are using Hass.io, you can run the service locally by [installing](https://www.home-assistant.io/hassio/installing_third_party_addons/) the flicd add-on from [pschmitt's repository](https://github.com/pschmitt/hassio-addons). On a Hass.io installation that's not yet based on HassOS, you also need to install the [bluetooth add-on](/addons/bluetooth_bcm43xx/). + +For instructions on how to install the service manually, visit the GitHub repository of the service for [Linux](https://github.com/50ButtonsEach/fliclib-linux-hci), [OS X](https://github.com/50ButtonsEach/flic-service-osx) or [Windows](https://github.com/50ButtonsEach/fliclib-windows). + +#### {% linkable_title Configuration %} To use your flic buttons in your installation, add the following to your `configuration.yaml` file: @@ -25,13 +33,32 @@ binary_sensor: - platform: flic ``` -Configuration variables: - -- **host** (*Optional*): The IP or hostname of the flic service server. Defaults to `localhost`. -- **port** (*Optional*): The port of the flic service. Defaults to `5551`. -- **discovery** (*Optional*): If `true` then the component is configured to constantly scan for new buttons. Defaults to `true`. -- **ignored_click_types**: List of click types whose occurrence should not trigger a `flic_click` event. Click types are `single`, `double`, and `hold`. -- **timeout** (*Optional*): Maximum time in seconds an event can be queued locally on a button before discarding the event. Defaults to 3. +{% configuration %} +host: + description: The IP or hostname of the flic service server. + required: false + type: string + default: localhost +port: + description: The port of the flic service. + required: false + type: integer + default: 5551 +discovery: + description: If `true` then the component is configured to constantly scan for new buttons. + required: false + type: boolean + default: true +ignored_click_types: + description: List of click types whose occurrence should not trigger a `flic_click` event. Click types are `single`, `double`, and `hold`. + required: false + type: list +timeout: + description: The maximum time in seconds an event can be queued locally on a button before discarding the event. + required: false + type: integer + default: 3 +{% endconfiguration %} #### {% linkable_title Discovery %} @@ -47,7 +74,7 @@ The flic component fires `flic_click` events on the bus. You can capture the eve ```yaml # Example configuration.yaml automation entry automation: - - alias: Turn on lights in living room if flic is pressed once + - alias: Turn on lights in the living room when flic is pressed once trigger: platform: event event_type: flic_click @@ -55,7 +82,7 @@ automation: button_name: flic_81e4ac74b6d2 click_type: single action: - service: homeassistant.turn_off + service: homeassistant.turn_on entity_id: group.lights_livingroom ``` @@ -66,6 +93,22 @@ Event data: - **click_type**: The type of click. Possible values are `single`, `double` and `hold`. - **queued_time**: The amount of time this event was queued on the button, in seconds. +To help detect and debug flic button clicks, you can use this automation that send a notification on very click type of every button. This example uses the [HTML5 push notification platform](/components/notify.html5/). Visit the [notification component page](/components/notify/) for more information on setting up notifications. + +```yaml +automation: + - alias: FLIC Html5 notify on every click + hide_entity: false + trigger: + platform: event + event_type: flic_click + action: + - service_template: notify.html5 + data_template: + title: "flic click" + message: {% raw %}"flic {{ trigger.event.data.button_name }} was {{ trigger.event.data.click_type }} clicked"{% endraw %} +``` + ##### {% linkable_title Ignoring Click Types %} For some purposes it might make sense to exclude a specific click type from triggering click events. For example when ignoring double clicks, pressing the button twice fast results in two `single` instead of a `double` click event. This is very useful for applications where you want to click fast. From 0652a7b0a90d49e94cfcc47eb2f88b8fbd274373 Mon Sep 17 00:00:00 2001 From: Max Rumpf Date: Tue, 2 Oct 2018 10:44:01 +0200 Subject: [PATCH 036/114] Fix grammar error (allows vs allow) (#6426) --- source/_docs/mqtt/logging.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/mqtt/logging.markdown b/source/_docs/mqtt/logging.markdown index d4deaf4f48e..64c627a84f2 100644 --- a/source/_docs/mqtt/logging.markdown +++ b/source/_docs/mqtt/logging.markdown @@ -10,7 +10,7 @@ footer: true logo: mqtt.png --- -The [logger](/components/logger/) component allow the logging of received MQTT messages. +The [logger](/components/logger/) component allows the logging of received MQTT messages. ```yaml # Example configuration.yaml entry From 0122c1ca92d439435750eabd9c59b9112d7388ad Mon Sep 17 00:00:00 2001 From: Fredrik Baberg Date: Tue, 2 Oct 2018 10:44:39 +0200 Subject: [PATCH 037/114] Update to hue configuration syntax (#6419) --- source/_components/hue.markdown | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/source/_components/hue.markdown b/source/_components/hue.markdown index c4b2cc37b6c..d9832903b1f 100644 --- a/source/_components/hue.markdown +++ b/source/_components/hue.markdown @@ -33,12 +33,24 @@ hue: - host: DEVICE_IP_ADDRESS ``` -Configuration variables: - -- **host** (*Required*): The IP address of the device, eg. 192.168.1.10. Required if not using the `discovery` component to discover Hue bridges. -- **allow_unreachable** (*Optional*): (true/false) This will allow unreachable bulbs to report their state correctly. -- **filename** (*Optional*): Make this unique if specifying multiple Hue hubs. -- **allow_hue_groups** (*Optional*): (true/false) Enable this to stop Home Assistant from importing the groups defined on the Hue bridge. +{% configuration %} +host: + description: The IP address of the device, eg. 192.168.1.10. Required if not using the `discovery` component to discover Hue bridges. + required: true + type: string +allow_unreachable: + description: This will allow unreachable bulbs to report their state correctly. + required: false + type: boolean +filename: + description: Make this unique if specifying multiple Hue hubs. + required: false + type: string +allow_hue_groups: + description: Enable this to stop Home Assistant from importing the groups defined on the Hue bridge. + required: false + type: boolean +{% endconfiguration %} ## {% linkable_title Examples %} From ed2db0421ce1a87a6e339247fce9a386d6c73842 Mon Sep 17 00:00:00 2001 From: Jeppe Ladefoged <26121019+ladefoged81@users.noreply.github.com> Date: Tue, 2 Oct 2018 11:08:23 +0200 Subject: [PATCH 038/114] Added Transporter digital input (#6422) Added Transporter digital input script --- .../_components/media_player.squeezebox.markdown | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/source/_components/media_player.squeezebox.markdown b/source/_components/media_player.squeezebox.markdown index b226960e31b..26a617832de 100644 --- a/source/_components/media_player.squeezebox.markdown +++ b/source/_components/media_player.squeezebox.markdown @@ -34,6 +34,22 @@ Configuration variables:

This platform now uses the web interface of the Logitech Media Server to send commands. The default port of the web interface is 9000. It is the same port that you use to access the LMS through your web browser. Originally, this platform used the telnet interface, which defaults to 9090. If you previously specified the port in your configuration file, you will likely need to update it.

+ +The Logitech Transporter which have two digital inputs can be activated using a script. The following example turns on the Transporter and activates the toslink input interface: + +```yaml +# Turn on Transporter and activate toslink interface +transporter_toslink: + sequence: + - service: homeassistant.turn_on + entity_id: media_player.transporter + - service: media_player.play_media + data: + entity_id: media_player.transporter + media_content_id: "source:toslink" + media_content_type: "music" +``` + ### {% linkable_title Service `squeezebox_call_method` %} Call a custom Squeezebox JSONRPC API. From 5e45c07b539cada7d71e22659eb768faa2d5b336 Mon Sep 17 00:00:00 2001 From: Robert Svensson Date: Tue, 2 Oct 2018 11:09:10 +0200 Subject: [PATCH 039/114] Axis - troubleshooting bad IPs from discovery (#6424) --- source/_components/axis.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/axis.markdown b/source/_components/axis.markdown index 6662b55300a..9b2faadd988 100644 --- a/source/_components/axis.markdown +++ b/source/_components/axis.markdown @@ -90,3 +90,7 @@ Send a command using [Vapix](https://www.axis.com/support/developer-support/vapi | `action` | yes | What type of call. Default is `update`. | Response to call can be subscribed to on event `vapix_call_response` + +## {% linkable_title Troubleshooting discovery %} + +If a `169.x.x.x` address is discovered. On your camera, go to **System Options** -> **Advanced** -> **Plain Config**. Change the drop-down box to `network` and click `Select Group`. If `Network Interface I0 ZeroConf` contains the `169.x.x.x` IP address, unchecked the box next to `Enabled` for this section and click `Save`. From 4014aa9e760131f42c720ab4824c00ba60c2c324 Mon Sep 17 00:00:00 2001 From: Fredrik Baberg Date: Tue, 2 Oct 2018 11:21:57 +0200 Subject: [PATCH 040/114] Update kodi configuration variable style. (#6430) --- source/_components/media_player.kodi.markdown | 65 +++++++++++++++---- 1 file changed, 51 insertions(+), 14 deletions(-) diff --git a/source/_components/media_player.kodi.markdown b/source/_components/media_player.kodi.markdown index e44978ce1d4..579186aad3e 100644 --- a/source/_components/media_player.kodi.markdown +++ b/source/_components/media_player.kodi.markdown @@ -28,20 +28,57 @@ media_player: host: 192.168.0.123 ``` -Configuration variables: - -- **host** (*Required*): The host name or address of the device that is running XBMC/Kodi. -- **port** (*Optional*): The HTTP port number. Defaults to 8080. -- **tcp_port** (*Optional*): The TCP port number. Defaults to 9090. Used for websocket connections to Kodi. -- **name** (*Optional*): The name of the device used in the frontend. -- **proxy_ssl** (*Optional*): Connect to kodi with HTTPS and WSS. Defaults to `false`. Useful if Kodi is behind an SSL proxy. -- **username** (*Optional*): The XBMC/Kodi HTTP username. -- **password** (*Optional*): The XBMC/Kodi HTTP password. -- **turn_on_action** (*Optional*): Home Assistant script sequence to call when turning on. -- **turn_off_action** (*Optional*): Home Assistant script sequence to call when turning off. -- **enable_websocket** (*Optional*): Enable websocket connections to Kodi via the TCP port. Defaults to `true`. The websocket connection allows Kodi to push updates to Home Assistant and removes the need for Home Assistant to poll. If websockets don't work on your installation this can be set to `false`. -- **timeout** (*Optional*): Set timeout for connections to Kodi. Defaults to 5 seconds. - +{% configuration %} +host: + description: The host name or address of the device that is running XBMC/Kodi. + required: true + type: string +port: + description: The HTTP port number. + required: false + type: integer + default: 8080 +tcp_port: + description: The TCP port number. Used for websocket connections to Kodi. + required: false + type: integer + default: 9090 +name: + description: The name of the device used in the frontend. + required: false + type: string +proxy_ssl: + description: Connect to kodi with HTTPS and WSS. Useful if Kodi is behind an SSL proxy. + required: false + type: boolean + default: false +username: + description: The XBMC/Kodi HTTP username. + required: false + type: string +password: + description: The XBMC/Kodi HTTP password. + required: false + type: string +turn_on_action: + description: Home Assistant script sequence to call when turning on. + required: false + type: list +turn_off_action: + description: Home Assistant script sequence to call when turning off. + required: false + type: list +enable_websocket: + description: Enable websocket connections to Kodi via the TCP port. The websocket connection allows Kodi to push updates to Home Assistant and removes the need for Home Assistant to poll. If websockets don't work on your installation this can be set to `false`. + required: false + type: boolean + default: true +timeout: + description: Set timeout for connections to Kodi. Defaults to 5 seconds. + required: false + type: integer + default: 5 +{% endconfiguration %} ### {% linkable_title Service `kodi_add_to_playlist` %} From 68828611c929a4f1cfc5c15731d1ae1b701b0011 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 2 Oct 2018 11:25:23 +0200 Subject: [PATCH 041/114] 0.79.3 --- _config.yml | 6 +++--- source/_posts/2018-10-01-release-79.markdown | 7 +++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/_config.yml b/_config.yml index ab7ed48bb3a..901bd01abf4 100644 --- a/_config.yml +++ b/_config.yml @@ -142,13 +142,13 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 79 -current_patch_version: 2 -date_released: 2018-10-01 +current_patch_version: 3 +date_released: 2018-10-02 # 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-0792---october-1" +patch_version_notes: "#release-0793---october-2" # Minor release (Example #release-0431---april-25): # Date we moved to Discourse for comments diff --git a/source/_posts/2018-10-01-release-79.markdown b/source/_posts/2018-10-01-release-79.markdown index 9409a414fd1..24c077bea57 100644 --- a/source/_posts/2018-10-01-release-79.markdown +++ b/source/_posts/2018-10-01-release-79.markdown @@ -92,6 +92,13 @@ Oh, and yes, there is also some cool new integrations. Support has been added fo [mqtt docs]: /components/mqtt/ [switch.zoneminder docs]: /components/switch.zoneminder/ +## {% linkable_title Release 0.79.3 - October 2 %} + +- Use correct event loop on Windows, fixing SSL and Subprocess requests. ([#16737], [#17066] - [@awarecan], [@balloob]) + +[#16737]: https://github.com/home-assistant/home-assistant/pull/16737 +[#17066]: https://github.com/home-assistant/home-assistant/pull/17066 + ## {% linkable_title If you need help... %} ...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. From c24d851a06a7e4b532f03bc43e90f9353f277b13 Mon Sep 17 00:00:00 2001 From: Mryck Date: Tue, 2 Oct 2018 18:03:11 +0200 Subject: [PATCH 042/114] Configuration Variables Lifx light (#6446) --- source/_components/light.lifx.markdown | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/source/_components/light.lifx.markdown b/source/_components/light.lifx.markdown index 04f444540fe..cb6dc00f2f9 100644 --- a/source/_components/light.lifx.markdown +++ b/source/_components/light.lifx.markdown @@ -22,10 +22,16 @@ _Please note, the `lifx` platform does not support Windows. The `lifx_legacy` pl light: - platform: lifx ``` -Configuration variables: - -- **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. +{% configuration %} +broadcast: + description: The broadcast address for discovering lights. Only needed if using more than one network interface. Omit if you are unsure. + required: false + type: string +server: + description: Your server address. Will listen on all interfaces if omitted. Omit if you are unsure. + required: false + type: string +{% endconfiguration %} ## {% linkable_title Set state %} From 1c3aee49b08c27bd10ae4034060ca61646f1da99 Mon Sep 17 00:00:00 2001 From: Amir Hanan Date: Tue, 2 Oct 2018 19:03:56 +0300 Subject: [PATCH 043/114] Enhance description and usage examples (#6445) After trying to write some automations to Sesame lock, I noticed documentation of this component was a bit lacking... --- source/_components/lock.markdown | 38 ++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/source/_components/lock.markdown b/source/_components/lock.markdown index 97cc4622020..89d504093a3 100644 --- a/source/_components/lock.markdown +++ b/source/_components/lock.markdown @@ -14,6 +14,44 @@ Keeps track which locks are in your environment, their state and allows you to c * Maintains a state per lock and a combined state `all_locks`. * Registers services `lock.lock` and `lock.unlock` to control locks. +### {% linkable_title Services %} + +A lock component provides the following services: + +#### {% linkable_title Service `lock.lock` %} + +Lock your door, the attribute should appear under a 'data' attribute for the service. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-------------------------------------------------------| +| `entity_id` | no | Entity of the relevant lock. | + +##### {% linkable_title Example %} + +```yaml +action: + service: lock.lock + data: + entity_id: lock.my_place +``` + +#### {% linkable_title Service `lock.unlock` %} + +Unlock your door, the attribute should appear under a 'data' attribute for the service. + +| Service data attribute | Optional | Description | +|---------------------------|----------|-------------------------------------------------------| +| `entity_id` | no | Entity of the relevant lock. | + +##### {% linkable_title Example %} + +```yaml +action: + service: lock.unlock + data: + entity_id: lock.my_place +``` + ### {% linkable_title Use the services %} Go to the **Developer Tools**, then to **Call Service** in the frontend, and choose `lock.lock` or `lock.unlock` from the list of available services (**Services:** on the left). Enter something like the sample below into the **Service Data** field and hit **CALL SERVICE**. From 8ae9a796d9c9ace89ec772410df430126eddd78a Mon Sep 17 00:00:00 2001 From: Oncleben31 Date: Tue, 2 Oct 2018 18:04:34 +0200 Subject: [PATCH 044/114] Use the new style for configuration variables description (#6444) Linked to #6385 --- source/_components/notify.free_mobile.markdown | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/source/_components/notify.free_mobile.markdown b/source/_components/notify.free_mobile.markdown index f02c52ea304..f204fe054c0 100644 --- a/source/_components/notify.free_mobile.markdown +++ b/source/_components/notify.free_mobile.markdown @@ -36,8 +36,13 @@ notify: username: YOUR_ACCOUNT_ID access_token: TOKEN ``` - -Configuration variables: - -- **username** (*Required*): This is the id given by FreeMobile to access to your online account. -- **access_token** (*Required*): You can get this token by activating the SMS API in your online account. +{% configuration %} +username: + description: This is the id given by FreeMobile to access to your online account. + required: true + type: string +access_token: + description: You can get this token by activating the SMS API in your online account. + required: true + type: string +{% endconfiguration %} From 871aafad1019d8348466cc6cc5ba5a7d2427e193 Mon Sep 17 00:00:00 2001 From: DrZzs Date: Tue, 2 Oct 2018 10:06:12 -0600 Subject: [PATCH 045/114] Added a line clarifying One switch control (#6442) just to make it clear that one Generic Thermostat can only control one switch at a time. If you have 2 switches to control (heat/AC) then you will need 2 Thermostats. --- source/_components/climate.generic_thermostat.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/climate.generic_thermostat.markdown b/source/_components/climate.generic_thermostat.markdown index 91d5d269252..274ac0377f9 100644 --- a/source/_components/climate.generic_thermostat.markdown +++ b/source/_components/climate.generic_thermostat.markdown @@ -14,7 +14,7 @@ ha_iot_class: "Local Polling" --- -The `generic_thermostat` climate platform is a thermostat implemented in Home Assistant. It uses a sensor and a switch connected to a heater or air conditioning under the hood. When in heater mode, if the measured temperature is cooler then the target temperature, the heater will be turned on and turned off when the required temperature is reached. When in air conditioning mode, if the measured temperature is hotter then the target temperature, the air conditioning will be turned on and turned off when required temperature is reached. +The `generic_thermostat` climate platform is a thermostat implemented in Home Assistant. It uses a sensor and a switch connected to a heater or air conditioning under the hood. When in heater mode, if the measured temperature is cooler then the target temperature, the heater will be turned on and turned off when the required temperature is reached. When in air conditioning mode, if the measured temperature is hotter then the target temperature, the air conditioning will be turned on and turned off when required temperature is reached. One Generic Thermostat entity can only control one switch. If you need to activate two switches, one for a heater and one for an air conditioner, you will need two Generic Thermostat entities. ```yaml # Example configuration.yaml entry From a2ba9f46b3ded81d85498d946895f453da9bd130 Mon Sep 17 00:00:00 2001 From: Fredrik Baberg Date: Tue, 2 Oct 2018 18:08:20 +0200 Subject: [PATCH 046/114] Vasttrafik sensor configuration variable style (#6414) * Style for configuration variables description Change to new style for configuration variables description (#6385). * Updated configuration example * Corrected from to be required variable. * Removed quote of decsription text. * Corrected incorrect linebreak. * Minor change * Change to list --- source/_components/sensor.vasttrafik.markdown | 54 ++++++++++++++----- 1 file changed, 40 insertions(+), 14 deletions(-) diff --git a/source/_components/sensor.vasttrafik.markdown b/source/_components/sensor.vasttrafik.markdown index 8f3862fdd84..76264932dec 100644 --- a/source/_components/sensor.vasttrafik.markdown +++ b/source/_components/sensor.vasttrafik.markdown @@ -23,22 +23,48 @@ Add the data to your `configuration.yaml` file as shown in the example: # Example configuration.yaml entry sensor: - platform: vasttrafik - key: XXXXXXXXXXXXXXXXXXX - secret: YYYYYYYYYYYYYYYYY + key: YOUR_API_KEY + secret: YOUR_API_SECRET departures: - from: Musikvägen ``` -Configuration variables: - -- **key** (*Required*): The API key to access your Västtrafik account. -- **secret** (*Required*): The API secret to access your Västtrafik account. -- **departures** array (*Required*): List of travel routes. - - **name** (*Optional*): Name of the route. - - **from** (*Required*): The start station. - - **heading** (*Optional*): Direction of the traveling. - - **lines** (*Optional*): Only consider these lines. - - **delay** (*Optional*): Delay in minutes. Defaults to 0. +{% configuration %} +key: + description: The API key to access your Västtrafik account. + required: true + type: string +secret: + description: The API secret to access your Västtrafik account. + required: true + type: string +departures: + description: List of travel routes. + required: true + type: list + keys: + name: + description: Name of the route. + required: false + type: string + from: + description: The start station. + required: true + type: string + heading: + description: Direction of the traveling. + required: false + type: string + lines: + description: Only consider these lines. + required: false + type: [list, string] + delay: + description: Delay in minutes. + required: false + type: string + default: 0 +{% endconfiguration %} The data are coming from [Västtrafik](https://vasttrafik.se/). @@ -48,8 +74,8 @@ A full configuration example could look like this: # Example configuration.yaml entry sensor: - platform: vasttrafik - key: XXXXXXXXXXXXXXXXXXX - secret: YYYYYYYYYYYYYYYYY + key: YOUR_API_KEY + secret: YOUR_API_SECRET departures: - name: Mot järntorget from: Musikvägen From c194908626a7da88c14bbaba1e8a6a7af5bc9abd Mon Sep 17 00:00:00 2001 From: Jeppe Ladefoged <26121019+ladefoged81@users.noreply.github.com> Date: Tue, 2 Oct 2018 18:10:00 +0200 Subject: [PATCH 047/114] Added camera (#6437) Added info on how to add a web camera. --- source/_components/octoprint.markdown | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/source/_components/octoprint.markdown b/source/_components/octoprint.markdown index 03f0fae06d4..29e6c039ed9 100644 --- a/source/_components/octoprint.markdown +++ b/source/_components/octoprint.markdown @@ -34,3 +34,12 @@ Configuration variables: - **bed** (*Optional*): If the printer has a heated bed. - **number_of_tools** (*Optional*): Number of temperature adjustable tools. i.e. nozzle. +If the OctoPrint host is equipped with a web camera it is possible to add this as well. + +```yaml +camera: + - platform: mjpeg + name: OctoPrint + still_image_url: http://YOUR_OCTOPRINT_HOST_IP/webcam/?action=snapshot + mjpeg_url: http://YOUR_OCTOPRINT_HOST_IP/webcam/?action=stream +``` From 6e4bb8274d6d1b1b8ffadf91988637ce1e2d66f6 Mon Sep 17 00:00:00 2001 From: Jeppe Ladefoged <26121019+ladefoged81@users.noreply.github.com> Date: Tue, 2 Oct 2018 18:18:49 +0200 Subject: [PATCH 048/114] Added example based on event platform (#6435) * Added example based on event platform Persistent notification automation example based on event platform * Minor changes --- .../persistent_notification.markdown | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/source/_components/persistent_notification.markdown b/source/_components/persistent_notification.markdown index a0bf7abfb78..d43ab0b4361 100644 --- a/source/_components/persistent_notification.markdown +++ b/source/_components/persistent_notification.markdown @@ -56,6 +56,29 @@ action: notification_id: "1234" ``` +This automation example shows a notification when the Z-Wave network is starting and removes it when the network is ready. + +```yaml +- alias: 'Z-Wave network is starting' + trigger: + - platform: event + event_type: zwave.network_start + action: + - service: persistent_notification.create + data: + title: "Z-Wave" + message: "Z-Wave network is starting..." + notification_id: zwave + +- alias: 'Z-Wave network is ready' + trigger: + - platform: event + event_type: zwave.network_ready + action: + - service: persistent_notification.dismiss + data: + notification_id: zwave +``` ### {% linkable_title Markdown support %} From 9567d8255393d34f3f24a2676ec2455d77692977 Mon Sep 17 00:00:00 2001 From: datafx Date: Tue, 2 Oct 2018 12:27:19 -0400 Subject: [PATCH 049/114] Add warning about recovery model with MSSQL Server (#6443) * Add warning about recovery model with MSSQL Server Added warning to make users aware that the default recovery model in MSSQL server will grow the transaction log until the disk runs out of space. Suggested that users switch to simple recovery to prevent this issue. * Minor changes --- source/_components/recorder.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/recorder.markdown b/source/_components/recorder.markdown index d843e6f1200..d5a92093bd1 100644 --- a/source/_components/recorder.markdown +++ b/source/_components/recorder.markdown @@ -167,6 +167,10 @@ Unix Socket connections always bring performance advantages over TCP, if the dat

If you want to use Unix Sockets for PostgreSQL you need to modify the `pg_hba.conf`. See [PostgreSQL](#postgresql)

+

+If you are using the default `FULL` recovery model for MS SQL Server you will need to manually backup your log file to prevent your transaction log from growing too large. It is recommended you change the recovery model to `SIMPLE` unless you are worried about data loss between backups. +

+ ### {% linkable_title Database startup %} If you are running a database server instance on the same server as Home Assistant then you must ensure that this service starts before Home Assistant. For a Linux instance running Systemd (Raspberry Pi, Debian, Ubuntu and others) then you should edit the service file. From 8616dbd057bef3b67b6dfc2f008bf10b0f536741 Mon Sep 17 00:00:00 2001 From: Ioan Loosley Date: Tue, 2 Oct 2018 19:12:27 +0100 Subject: [PATCH 050/114] Added list of routers that is known to work with the libary (#6438) * Added list of routers that is known to work with the libary * Update huawei_lte.markdown * :pencil2: Improved wording, spelling & grammar. --- source/_components/huawei_lte.markdown | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/source/_components/huawei_lte.markdown b/source/_components/huawei_lte.markdown index 7d6afd4afa6..ba637bb5d79 100644 --- a/source/_components/huawei_lte.markdown +++ b/source/_components/huawei_lte.markdown @@ -47,3 +47,14 @@ password: required: true type: string {% endconfiguration %} + +### {% linkable_title Tested routers %} + +Routers we know to be working with this component based on the documentation of used libraries and reports by users: + +- Huawei B310s-22 +- Huawei B525s-23a +- Huawei E5186s-22a +- Huawei B618 + +This is not a complete list. The component can probably connect to other Huawei LTE routers running similar firmware. From ef17ca3881644d5f456be092233bf9f43d52f14b Mon Sep 17 00:00:00 2001 From: datafx Date: Tue, 2 Oct 2018 14:33:13 -0400 Subject: [PATCH 051/114] Add IQS Internal to several components (#6450) * IQS Internal * IQS Internal * IQS Internal * IQS Internal * IQS Internal * IQS Internal * IQS Internal * IQS Internal * IQS Internal * IQS Internal * IQS Internal * IQS Internal --- source/_components/automation.markdown | 1 + source/_components/demo.markdown | 1 + source/_components/emulated_hue.markdown | 1 + source/_components/panel_custom.markdown | 1 + source/_components/panel_iframe.markdown | 1 + source/_components/proximity.markdown | 1 + source/_components/python_script.markdown | 1 + source/_components/rss_feed_template.markdown | 1 + source/_components/script.markdown | 1 + source/_components/shell_command.markdown | 1 + source/_components/system_log.markdown | 1 + source/_components/weblink.markdown | 1 + 12 files changed, 12 insertions(+) diff --git a/source/_components/automation.markdown b/source/_components/automation.markdown index 57a11fe8115..4aaee44eec1 100644 --- a/source/_components/automation.markdown +++ b/source/_components/automation.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: home-assistant.png ha_category: Automation +ha_qa_scale: internal --- Please see the [docs section](/docs/automation/) for in-depth diff --git a/source/_components/demo.markdown b/source/_components/demo.markdown index 35808dc5c46..7fc7ba7025a 100644 --- a/source/_components/demo.markdown +++ b/source/_components/demo.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: home-assistant.png ha_category: Other +ha_qa_scale: internal --- diff --git a/source/_components/emulated_hue.markdown b/source/_components/emulated_hue.markdown index 763baa46730..1f1170eabaa 100644 --- a/source/_components/emulated_hue.markdown +++ b/source/_components/emulated_hue.markdown @@ -11,6 +11,7 @@ logo: home-assistant.png ha_category: Hub ha_release: 0.27 ha_iot_class: "Local Push" +ha_qa_scale: internal ---

diff --git a/source/_components/panel_custom.markdown b/source/_components/panel_custom.markdown index 2ce5ee84284..34f8ec63e2f 100644 --- a/source/_components/panel_custom.markdown +++ b/source/_components/panel_custom.markdown @@ -10,6 +10,7 @@ footer: true logo: home-assistant.png ha_category: Front end ha_release: 0.26 +ha_qa_scale: internal --- The `panel_custom` support allows you to add additional panels to your Home Assistant frontend. The panels are listed in the sidebar if wished and can be highly customized. See the developer documentation on [instructions how to build your own panels](https://developers.home-assistant.io/docs/en/frontend_creating_custom_panels.html). diff --git a/source/_components/panel_iframe.markdown b/source/_components/panel_iframe.markdown index 8aa5514f0cb..908ca35829b 100644 --- a/source/_components/panel_iframe.markdown +++ b/source/_components/panel_iframe.markdown @@ -10,6 +10,7 @@ footer: true logo: home-assistant.png ha_category: Front end ha_release: 0.25 +ha_qa_scale: internal --- diff --git a/source/_components/proximity.markdown b/source/_components/proximity.markdown index ba8882accd3..5d1ed90168c 100644 --- a/source/_components/proximity.markdown +++ b/source/_components/proximity.markdown @@ -10,6 +10,7 @@ footer: true logo: home-assistant.png ha_category: Automation ha_release: 0.13 +ha_qa_scale: internal --- The `proximity` component allows you to monitor the proximity of devices to a particular [zone](/components/zone/) and the direction of travel. The result is an entity created in Home Assistant which maintains the proximity data. diff --git a/source/_components/python_script.markdown b/source/_components/python_script.markdown index 68813524312..58f17ee1c31 100644 --- a/source/_components/python_script.markdown +++ b/source/_components/python_script.markdown @@ -10,6 +10,7 @@ footer: true logo: home-assistant.png ha_category: Automation ha_release: 0.47 +ha_qa_scale: internal --- This component allows you to write Python scripts that are exposed as services in Home Assistant. Each Python file created in the `/python_scripts/` folder will be exposed as a service. The content is not cached so you can easily develop: edit file, save changes, call service. The scripts are run in a sandboxed environment. The following variables are available in the sandbox: diff --git a/source/_components/rss_feed_template.markdown b/source/_components/rss_feed_template.markdown index 70c3bbd7f32..d5ac1313672 100644 --- a/source/_components/rss_feed_template.markdown +++ b/source/_components/rss_feed_template.markdown @@ -10,6 +10,7 @@ footer: true logo: home-assistant.png ha_category: Front end ha_release: 0.44 +ha_qa_scale: internal --- The `rss_feed_template` component can export any information from Home Assistant as a static RSS feed. This can be used to display that information on many types of devices using an RSS reader. While native apps for Home Assistant are not widely available, native RSS readers exist for almost any platform. diff --git a/source/_components/script.markdown b/source/_components/script.markdown index 856b758aab8..fe6dc4dda5f 100644 --- a/source/_components/script.markdown +++ b/source/_components/script.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: home-assistant.png ha_category: Automation +ha_qa_scale: internal --- The `script` component allows users to specify a sequence of actions to be executed by Home Assistant when turned on. The script component will create an entity for each script and allow them to be controlled via services. diff --git a/source/_components/shell_command.markdown b/source/_components/shell_command.markdown index 07a10b1261b..bb280f91220 100644 --- a/source/_components/shell_command.markdown +++ b/source/_components/shell_command.markdown @@ -9,6 +9,7 @@ sharing: true footer: true ha_category: Automation logo: home-assistant.png +ha_qa_scale: internal --- This component can expose regular shell commands as services. Services can be called from a [script] or in [automation]. diff --git a/source/_components/system_log.markdown b/source/_components/system_log.markdown index c537ba79b09..057331c6de3 100644 --- a/source/_components/system_log.markdown +++ b/source/_components/system_log.markdown @@ -10,6 +10,7 @@ footer: true logo: home-assistant.png ha_category: Other ha_release: 0.58 +ha_qa_scale: internal --- The `system_log` component stores information about all logged errors and warnings in Home Assistant. All collected information is accessible directly in the frontend, just navigate to the `Info` section under `Developer Tools`. In order to not overload Home Assistant with log data, only the 50 last errors and warnings will be stored. Older entries are automatically discarded from the log. It is possible to change the number of stored log entries using the parameter `max_entries`. diff --git a/source/_components/weblink.markdown b/source/_components/weblink.markdown index ebc44a1eb96..e7b3ebe6e00 100644 --- a/source/_components/weblink.markdown +++ b/source/_components/weblink.markdown @@ -10,6 +10,7 @@ footer: true logo: home-assistant.png ha_category: Front end ha_release: 0.13 +ha_qa_scale: internal --- The `weblink` component allows you to display links in the Home Assistant frontend. From 74c1a6c2e0e8140dbf612425e5ad1ed602d6fb1d Mon Sep 17 00:00:00 2001 From: Nicholas Westerhausen Date: Tue, 2 Oct 2018 14:35:25 -0400 Subject: [PATCH 052/114] Ping Sensor configuration variable style (#6449) Change to new style for configuration variables description. Related to #6385. --- source/_components/device_tracker.ping.markdown | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/source/_components/device_tracker.ping.markdown b/source/_components/device_tracker.ping.markdown index 675150cb18c..80951c763f8 100644 --- a/source/_components/device_tracker.ping.markdown +++ b/source/_components/device_tracker.ping.markdown @@ -31,9 +31,15 @@ device_tracker: hostone: 192.168.2.10 ``` -Configuration variables: - -- **hosts** array (*Required*): List of device names and their corresponding IP address or hostname. -- **count** (*Optional*): Number of packet used for each device (avoid false detection). +{% configuration %} +hosts: + description: List of device names and their corresponding IP address or hostname. + required: true + type: array +count: + description: Number of packet used for each device (avoid false detection). + required: false + type: int +{% endconfiguration %} See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. From 762feb02a20d0925be86c2482d8bd8fbd125f333 Mon Sep 17 00:00:00 2001 From: eresonance Date: Tue, 2 Oct 2018 14:48:15 -0400 Subject: [PATCH 053/114] Add comment about alarm_type versions (#6440) Added info about the alarm_type from the openzwave code. I believe there is some mixed info based on older V1 alarms vs new V2 alarms. V2 have fixed alarm_types so I've separated the two to make it clear which one a user should look at. --- source/_docs/z-wave/entities.markdown | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/source/_docs/z-wave/entities.markdown b/source/_docs/z-wave/entities.markdown index e2dd2b7de9a..2826e777bfb 100644 --- a/source/_docs/z-wave/entities.markdown +++ b/source/_docs/z-wave/entities.markdown @@ -25,16 +25,32 @@ This is for a single purpose sensor, multi sensors are explained under Multi Sen Devices (usually sensors) that support the Alarm command class will create entities starting with `sensor`, and with some generic suffixes, and a suffix that relates to the supported alarm class. For example, the smoke detector `lounge` will have an entity `sensor.lounge_smoke`, and possibly also `sensor.lounge_alarm_type` and `sensor.lounge_alarm_level`. If the device creates a `binary_sensor` entity, it is recommended to use that rather then the `sensor` entity. +Note that the older Z-Wave alarm command class version 1 didn't have standardized types, and so each manufacturer specified their own version and type info. With Version 2 the alarm type was standardized to the below list. See the [openzwave alarm command class documents](https://github.com/OpenZWave/open-zwave/wiki/Alarm-Command-Class) for more info. You can see which version your sensor supports via the zwcfg_0x\*.xml file. An example with version 2 support: +```xml + +``` + ### {% linkable_title Alarm Type Entity %} -- **alarm_type**: Reports the type of the sensor +[//]: # (from the openzwave source found here: https://github.com/OpenZWave/open-zwave/blob/master/cpp/src/command_classes/Alarm.cpp#L56) + +- Version 2 **alarm_type**: - **0**: General purpose - **1**: Smoke sensor - **2**: Carbon Monoxide (CO) sensor - **3**: Carbon Dioxide (CO2) sensor - **4**: Heat sensor - - **5**: Water leak sensor + - **5**: Water leak (flood) sensor - **6**: Access control + - **7**: Burglar + - **8**: Power management + - **9**: System + - **10**: Emergency + - **11**: Clock + - **12**: Appliance + - **13**: Home Health + +- Version 1 (manufacturer-specific) **alarm_type**: - **9**: Lock jammed - **18**: Lock locked with user code - **19**: Lock unlocked with user code From cf8e4aec6c37ff0ac535286933c0b9fb64a02034 Mon Sep 17 00:00:00 2001 From: Fredrik Baberg Date: Tue, 2 Oct 2018 21:39:42 +0200 Subject: [PATCH 054/114] Use updated configuration variable style (#6429) --- source/_components/emulated_hue.markdown | 79 ++++++++++++++---------- 1 file changed, 48 insertions(+), 31 deletions(-) diff --git a/source/_components/emulated_hue.markdown b/source/_components/emulated_hue.markdown index 1f1170eabaa..fd7c73fe024 100644 --- a/source/_components/emulated_hue.markdown +++ b/source/_components/emulated_hue.markdown @@ -50,37 +50,54 @@ emulated_hue: emulated_hue: ``` -Configuration variables: - -- **type** (*Optional*): The type of assistant which we are emulating. Either `alexa` or `google_home`, defaults to `google_home`. **This configuration option is deprecated and will be removed in a future release. It is no longer necessary to define type.** -- **host_ip** (*Optional*): The IP address that your Home Assistant installation is running on. If you do not specify this option, the component will attempt to determine the IP address on its own. -- **listen_port** (*Optional*): The port the Hue bridge API web server will run on. If not specified, this defaults to 8300. This can be any free port on your system. - -- **advertise_ip** (*Optional*): If you need to override the IP address used for UPnP discovery. (For example, using network isolation in Docker) -- **advertise_port** (*Optional*): If you need to specifically override the advertised UPnP port. - -- **upnp_bind_multicast** (*Optional*): Whether or not to bind the UPnP (SSDP) listener to the multicast address (239.255.255.250) or instead to the (unicast) host_ip address specified above (or automatically determined). The default is true, which will work for most situations. In special circumstances, like running in a FreeBSD or FreeNAS jail, you may need to disable this. - -- **off_maps_to_on_domains** (*Optional*): The domains that maps an "off" command to an "on" command. - - For example, if `script` is included in the list, and you ask Alexa to "turn off the *water plants* script," the command will be handled as if you asked her to turn on the script. - - If not specified, this defaults to the following list: - - - `script` - - `scene` - -- **expose_by_default** (*Optional*): Whether or not entities should be exposed via the bridge by default instead of explicitly (see the 'emulated_hue' customization below). If not specified, this defaults to true. Warning: If you have a lot of devices (more than 49 total across all exposed domains), you should be careful with this option. Exposing more devices than Alexa supports can result in it not seeing any of them. If you are having trouble getting any devices to show up, try disabling this, and explicitly exposing just a few devices at a time to see if that fixes it. - -- **exposed_domains** (*Optional*): The domains that are exposed by default if `expose_by_default` is set to true. If not specified, this defaults to the following list: - - `switch` - - `light` - - `group` - - `input_boolean` - - `media_player` - - `fan` - -- **entities** (*Optional*): Customization for entities. +{% configuration %} +type: + description: The type of assistant which we are emulating. Either `alexa` or `google_home`. **This configuration option is deprecated and will be removed in a future release. It is no longer necessary to define type.** + required: false + type: string + default: google_home +host_ip: + description: The IP address that your Home Assistant installation is running on. If you do not specify this option, the component will attempt to determine the IP address on its own. + required: false + type: string +listen_port: + description: The port the Hue bridge API web server will run on. This can be any free port on your system. + required: false + type: integer + default: 8300 +advertise_ip: + description: If you need to override the IP address used for UPnP discovery. (For example, using network isolation in Docker) + required: false + type: string +advertise_port: + description: If you need to specifically override the advertised UPnP port. + required: false + type: integer +upnp_bind_multicast: + description: Whether or not to bind the UPnP (SSDP) listener to the multicast address (239.255.255.250) or instead to the (unicast) host_ip address specified above (or automatically determined). In special circumstances, like running in a FreeBSD or FreeNAS jail, you may need to disable this. + required: false + type: boolean + default: true +off_maps_to_on_domains: + description: The domains that maps an "off" command to an "on" command. For example, if `script` is included in the list, and you ask Alexa to "turn off the *water plants* script," the command will be handled as if you asked her to turn on the script. + required: false + type: list + default: [script, scene] +expose_by_default: + description: "Whether or not entities should be exposed via the bridge by default instead of explicitly (see the ‘emulated_hue’ customization below). Warning: If you have a lot of devices (more than 49 total across all exposed domains), you should be careful with this option. Exposing more devices than Alexa supports can result in it not seeing any of them. If you are having trouble getting any devices to show up, try disabling this, and explicitly exposing just a few devices at a time to see if that fixes it." + required: false + type: boolean + default: true +exposed_domains: + description: The domains that are exposed by default if `expose_by_default` is set to true. + required: false + type: list + default: [switch, light, group, input_boolean, media_player, fan] +entities: + description: Customization for entities. + required: false + type: list +{% endconfiguration %} A full configuration sample looks like the one below. From d3a02203445898dc27c7b190820319f39f65cf32 Mon Sep 17 00:00:00 2001 From: Robert Svensson Date: Tue, 2 Oct 2018 21:45:09 +0200 Subject: [PATCH 055/114] Clean up component configuration instructions. (#6421) --- source/_components/deconz.markdown | 34 +----------------------------- 1 file changed, 1 insertion(+), 33 deletions(-) diff --git a/source/_components/deconz.markdown b/source/_components/deconz.markdown index a9034fb048b..0340ef07126 100644 --- a/source/_components/deconz.markdown +++ b/source/_components/deconz.markdown @@ -31,39 +31,7 @@ Home Assistant will automatically discover deCONZ presence on your network, if ` If you don't have the API key, you can generate an API key for deCONZ by using the one-click functionality similar to Philips Hue. Go to **Settings** -> **Gateway** -> **Advanced** -> **Authenticate app** in deCONZ and then use the deCONZ configurator in Home Assistant frontend to create an API key. When you're done setting up deCONZ it will be stored as a config entry. -You can add the following to your `configuration.yaml` file if you are not using the `discovery:` component: - -```yaml -# Example configuration.yaml entry -deconz: - host: IP_ADDRESS -``` - -{% configuration %} -host: - description: The IP address of your deCONZ web server. - required: false - type: string -api_key: - description: The API key to access your deCONZ web server. - required: false - type: string -port: - description: Configure port deCONZ web server is accessible from. - required: false - default: 80 - type: int -{% endconfiguration %} - -A full configuration could look like this: - -```yaml -# Example configuration.yaml entry -deconz: - host: 127.0.0.1 - api_key: 0123456789 - port: 80 -``` +You can manually add deCONZ by going to the integrations page. ## {% linkable_title Debugging component %} From a510ff2f6824d61346811d96821b37172f30e735 Mon Sep 17 00:00:00 2001 From: Phi Dong Date: Tue, 2 Oct 2018 13:09:53 -0700 Subject: [PATCH 056/114] Update simplisafe configuration to new format (#6451) * Update simplisafe configuration to new format * :pencil2: Minor improvement to link in introduction --- .../alarm_control_panel.simplisafe.markdown | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/source/_components/alarm_control_panel.simplisafe.markdown b/source/_components/alarm_control_panel.simplisafe.markdown index ac5c14183a2..1dcad35d05e 100644 --- a/source/_components/alarm_control_panel.simplisafe.markdown +++ b/source/_components/alarm_control_panel.simplisafe.markdown @@ -12,7 +12,7 @@ ha_release: 0.24 ha_category: Alarm --- -The `simplisafe` platform enables the ability to control a SimpliSafe control panel. [simplisafe.com](http://simplisafe.com/). +The `simplisafe` platform enables the ability to control a [SimpliSafe](http://simplisafe.com/) control panel. To enable this, add the following lines to your `configuration.yaml`: @@ -24,10 +24,21 @@ alarm_control_panel: password: YOUR_PASSWORD ``` -Configuration variables: - -- **username** (*Required*): Username for the SimpliSafe account. -- **password** (*Required*): Password for SimpliSafe account. -- **name** (*Optional*): The name of the alarm. Default is the SimpliSafe alarm id. -- **code** (*Optional*): Specifies a code to enable or disable the alarm in the frontend. - +{% configuration %} +username: + description: Username for the SimpliSafe account. + required: true + type: string +password: + description: Password for SimpliSafe account. + required: true + type: string +name: + description: The name of the alarm. Default is the SimpliSafe alarm id. + required: false + type: string +code: + description: Specifies a code to enable or disable the alarm in the frontend. + required: false + type: string +{% endconfiguration %} From 4a2705136d0085f81f3d308bd725cf81db083f44 Mon Sep 17 00:00:00 2001 From: Max Rumpf Date: Tue, 2 Oct 2018 22:43:44 +0200 Subject: [PATCH 057/114] Improve wording, put important info in note block (#6428) * Improve wording, put important info in note block * Fix list inside note block * Let's just try to add extra whitespace * Remove list markers, add newlines * Another one * :tshirt: Small improvement. --- source/_components/hangouts.markdown | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/source/_components/hangouts.markdown b/source/_components/hangouts.markdown index 8bc8948b600..6ec9735d41a 100644 --- a/source/_components/hangouts.markdown +++ b/source/_components/hangouts.markdown @@ -22,11 +22,13 @@ Configure the integration: * Enter your **Google Mail Address** and **Password** * If you secured your account with 2-factor authentication you will be asked for a 2-factor authentication token. -**BEST PRACTICE:** You can't write messages to yourself or get notifications in a group, if "you" write the message. The best way is to create a new Google Hangouts account for this integration. - -**IMPORTANT:** If you secured your account with 2-factor authentication: Only verification by app or SMS are supported. There is no support for verification by prompt on your phone. - -**IMPORTANT 2:** If you are sure your email and password is correct, but the component says the login is invalid. Wait a few hours and try it again, it might be, that google asks for a captcha which we can't support. Google does not provide official support for using bots with Google Hangouts, that's why we have to work around this. +

+You can't write messages to yourself or get notifications in a group, if "you" write the message. The best way is to create a new Google Hangouts account for this integration.
+
+If you secured your account with 2-factor authentication: Only verification by app or SMS are supported. There is no support for verification by prompt on your phone.
+
+If you are sure your email and password are correct, but the component says the login is invalid, wait a few hours and try again. It might be that Google asks for a captcha which we can't support. Google does not provide official support for using bots with Google Hangouts, that's why we have to work around this. +

The authentication token will be generated and stored internally. From 29858e853f053bff95f5dd1a5b6b5200662e1bf7 Mon Sep 17 00:00:00 2001 From: Guy Khmelnitsky Date: Wed, 3 Oct 2018 09:34:15 +0300 Subject: [PATCH 058/114] Update the terrible looks --- source/_docs/ecosystem/backup/backup_dropbox.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/ecosystem/backup/backup_dropbox.markdown b/source/_docs/ecosystem/backup/backup_dropbox.markdown index 20d9e3f2d46..8e63b0b4fc8 100644 --- a/source/_docs/ecosystem/backup/backup_dropbox.markdown +++ b/source/_docs/ecosystem/backup/backup_dropbox.markdown @@ -37,9 +37,9 @@ Follow the instructions you see on your screen. Go to the folder you have placed `dropbox.py`. -Option A: +- Option A: Copy file `dropbox_uploader.sh` to : `.homeassistant/extraconfig/shell_code/` (so the full path would be similar to: `/home/homeassistant/.homeassistant/extraconfig/shell_code/dropbox_uploader.sh`) -Option B: +- Option B: Edit `dropbox.py`: Change the following line: `uploader = "/home/homeassistant/.homeassistant/extraconfig/shell_code/dropbox_uploader.sh"` From 78b7367f17f77c416c0bef998ea6574bceb1d2d1 Mon Sep 17 00:00:00 2001 From: Guy Khmelnitsky Date: Wed, 3 Oct 2018 09:35:54 +0300 Subject: [PATCH 059/114] Update backup_dropbox.markdown --- source/_docs/ecosystem/backup/backup_dropbox.markdown | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/source/_docs/ecosystem/backup/backup_dropbox.markdown b/source/_docs/ecosystem/backup/backup_dropbox.markdown index 8e63b0b4fc8..38ea85cedb2 100644 --- a/source/_docs/ecosystem/backup/backup_dropbox.markdown +++ b/source/_docs/ecosystem/backup/backup_dropbox.markdown @@ -42,9 +42,13 @@ Go to the folder you have placed `dropbox.py`. - Option B: Edit `dropbox.py`: Change the following line: - `uploader = "/home/homeassistant/.homeassistant/extraconfig/shell_code/dropbox_uploader.sh"` + ``` + uploader = "/home/homeassistant/.homeassistant/extraconfig/shell_code/dropbox_uploader.sh" + ``` to where you placed your file: (for example): - `uploader = "/home/homeassistant/MyFolder/dropbox_uploader.sh"` + ``` + uploader = "/home/homeassistant/MyFolder/dropbox_uploader.sh" + ``` ```bash From 87fee22f676db6b28d20832505d8f0dd8d4aea6b Mon Sep 17 00:00:00 2001 From: Guy Khmelnitsky Date: Wed, 3 Oct 2018 09:37:12 +0300 Subject: [PATCH 060/114] Update backup_dropbox.markdown --- source/_docs/ecosystem/backup/backup_dropbox.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/ecosystem/backup/backup_dropbox.markdown b/source/_docs/ecosystem/backup/backup_dropbox.markdown index 38ea85cedb2..3b2af016608 100644 --- a/source/_docs/ecosystem/backup/backup_dropbox.markdown +++ b/source/_docs/ecosystem/backup/backup_dropbox.markdown @@ -37,9 +37,9 @@ Follow the instructions you see on your screen. Go to the folder you have placed `dropbox.py`. -- Option A: +- *Option A:* Copy file `dropbox_uploader.sh` to : `.homeassistant/extraconfig/shell_code/` (so the full path would be similar to: `/home/homeassistant/.homeassistant/extraconfig/shell_code/dropbox_uploader.sh`) -- Option B: +- *Option B:* Edit `dropbox.py`: Change the following line: ``` From a53879bae8a98283795f902fd895898b1cad766b Mon Sep 17 00:00:00 2001 From: Guy Khmelnitsky Date: Wed, 3 Oct 2018 09:38:04 +0300 Subject: [PATCH 061/114] Update backup_dropbox.markdown --- source/_docs/ecosystem/backup/backup_dropbox.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_docs/ecosystem/backup/backup_dropbox.markdown b/source/_docs/ecosystem/backup/backup_dropbox.markdown index 3b2af016608..5cf595abe35 100644 --- a/source/_docs/ecosystem/backup/backup_dropbox.markdown +++ b/source/_docs/ecosystem/backup/backup_dropbox.markdown @@ -37,9 +37,9 @@ Follow the instructions you see on your screen. Go to the folder you have placed `dropbox.py`. -- *Option A:* +- **Option A:** Copy file `dropbox_uploader.sh` to : `.homeassistant/extraconfig/shell_code/` (so the full path would be similar to: `/home/homeassistant/.homeassistant/extraconfig/shell_code/dropbox_uploader.sh`) -- *Option B:* +- **Option B:** Edit `dropbox.py`: Change the following line: ``` From e66bee639894155ac2c9e7ef65083aeb32111d46 Mon Sep 17 00:00:00 2001 From: Z Date: Wed, 3 Oct 2018 09:13:36 +0200 Subject: [PATCH 062/114] service call typo (#6453) hass service call is vacuum.set_fan_speed --- source/_components/vacuum.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/vacuum.markdown b/source/_components/vacuum.markdown index 5448d3d85f1..59f7699392d 100644 --- a/source/_components/vacuum.markdown +++ b/source/_components/vacuum.markdown @@ -99,7 +99,7 @@ Tell the vacuum cleaner to do a spot clean-up. |---------------------------|----------|-------------------------------------------------------| | `entity_id` | yes | Only act on specific vacuum. Else targets all. | -#### {% linkable_title Service `vacuum.set_fanspeed` %} +#### {% linkable_title Service `vacuum.set_fan_speed` %} Set the fan speed of the vacuum. The `fanspeed` can be a label, as `balanced` or `turbo`, or be a number; it depends on the `vacuum` platform. From cac8e76e808e5dec70576dbdd295e3ed69f50baa Mon Sep 17 00:00:00 2001 From: Phi Dong Date: Wed, 3 Oct 2018 00:18:57 -0700 Subject: [PATCH 063/114] Update camera mqtt configuration (#6456) --- source/_components/camera.mqtt.markdown | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/source/_components/camera.mqtt.markdown b/source/_components/camera.mqtt.markdown index 411a37d19de..c7db3ae4ac2 100644 --- a/source/_components/camera.mqtt.markdown +++ b/source/_components/camera.mqtt.markdown @@ -26,9 +26,19 @@ camera: topic: zanzito/shared_locations/my-device ``` -Configuration variables: - - - **topic** (*Required*): MQTT topic to subscribe to. - - **name** (*Optional*): Name of the camera - - **unique_id** (*Optional*): An ID that uniquely identifies this camera. If two cameras have the same unique ID, Home Assistant will raise an exception. - +{% configuration %} + topic: + description: MQTT topic to subscribe to. + required: true + type: string + name: + description: Name of the camera. + required: false + type: string + unique_id: + description: > + An ID that uniquely identifies this camera. If two cameras have the same unique ID + Home Assistant will raise an exception. + required: false + type: string +{% endconfiguration %} From ad2f877ea00dcca158d5651a2f864426187d537e Mon Sep 17 00:00:00 2001 From: kernehed Date: Wed, 3 Oct 2018 09:54:51 +0200 Subject: [PATCH 064/114] Grammar update (#6460) * Grammar update * :pencil2: Grammar update --- source/_components/binary_sensor.deconz.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/binary_sensor.deconz.markdown b/source/_components/binary_sensor.deconz.markdown index 3e41d4b1614..609eff3157a 100644 --- a/source/_components/binary_sensor.deconz.markdown +++ b/source/_components/binary_sensor.deconz.markdown @@ -24,7 +24,7 @@ The following sensor types are supported: The `entity_id` name will be `binary_sensor.device_name`, where `device_name` is defined in deCONZ. -#### {% linkable_title Verified to be supported binary sensors %} +#### {% linkable_title Verified supported binary sensors %} - Open/Close Detection - Xiaomi Smart Home Security Door & Window Contact Sensor From 3b11c52f59a0d65a876a16f6beac1626351ff2c9 Mon Sep 17 00:00:00 2001 From: Phi Dong Date: Wed, 3 Oct 2018 01:28:20 -0700 Subject: [PATCH 065/114] Update xiaomi vacuum configuration (#6457) --- .../_components/vacuum.xiaomi_miio.markdown | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/source/_components/vacuum.xiaomi_miio.markdown b/source/_components/vacuum.xiaomi_miio.markdown index cc93a36c8ab..34f5ea169a4 100644 --- a/source/_components/vacuum.xiaomi_miio.markdown +++ b/source/_components/vacuum.xiaomi_miio.markdown @@ -40,11 +40,20 @@ vacuum: token: YOUR_TOKEN ``` -Configuration variables: - -- **host** (*Required*): The IP of your robot. -- **token** (*Required*): The API token of your robot. -- **name** (*Optional*): The name of your robot. +{% configuration %} + host: + description: The IP of your robot. + required: true + type: string + token: + description: The API token of your robot. + required: true + type: string + name: + description: The name of your robot. + required: false + type: string +{% endconfiguration %} ## {% linkable_title Platform Services %} From 8e7f822627518ce2447a2386cf527e3e1a19a809 Mon Sep 17 00:00:00 2001 From: kernehed Date: Wed, 3 Oct 2018 10:45:04 +0200 Subject: [PATCH 066/114] Related #6385. (#6461) * Related #6385. Configuration variable explanation style update. * Update camera.local_file.markdown * Update camera.local_file.markdown Done! --- source/_components/camera.local_file.markdown | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/source/_components/camera.local_file.markdown b/source/_components/camera.local_file.markdown index b2b953041dd..cb870409c10 100644 --- a/source/_components/camera.local_file.markdown +++ b/source/_components/camera.local_file.markdown @@ -26,10 +26,16 @@ camera: file_path: /tmp/image.jpg ``` -Configuration variables: - - - **file_path** (*Required*): File to serve as the camera. - - **name** (*Optional*): Name of the camera +{% configuration %} +file_path: + description: File to serve as the camera. + required: true + type: string +name: + description: Name of the camera. + required: false + type: string +{% endconfiguration %} ### {% linkable_title Service `camera.local_file_update_file_path` %} From c13869e5a74a879cfb9c266d8e1b09da842bda47 Mon Sep 17 00:00:00 2001 From: kernehed Date: Wed, 3 Oct 2018 11:10:04 +0200 Subject: [PATCH 067/114] Related #6385 (#6462) * Related #6385 Configuration variable explanation style update. * Update foursquare.markdown Done! :) * :pencil2: Added newline * :ambulance: Added missing colon --- source/_components/foursquare.markdown | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/source/_components/foursquare.markdown b/source/_components/foursquare.markdown index 5ec302887eb..5d06ddaa085 100644 --- a/source/_components/foursquare.markdown +++ b/source/_components/foursquare.markdown @@ -23,10 +23,16 @@ foursquare: push_secret: "" ``` -Configuration variables: - -- **access_token** (*Required*): A Foursquare API access token. -- **push_secret** (*Required*): The push secret that Foursquare provides to you in the app dashboard. +{% configuration %} +access_token: + description: A Foursquare API access token. + required: true + type: string +push_secret: + description: The push secret that Foursquare provides to you in the app dashboard. + required: true + type: string +{% endconfiguration %} #### Getting the access token #### From 2810a4a828938adcdcb9041fd0035c877430dcf0 Mon Sep 17 00:00:00 2001 From: kernehed Date: Wed, 3 Oct 2018 12:42:17 +0200 Subject: [PATCH 068/114] Update sensor.zabbix.markdown related to #6385 (#6463) Configuration variable explanation style update. --- source/_components/sensor.zabbix.markdown | 24 +++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/source/_components/sensor.zabbix.markdown b/source/_components/sensor.zabbix.markdown index ed84c99a14f..e9201ac2e40 100644 --- a/source/_components/sensor.zabbix.markdown +++ b/source/_components/sensor.zabbix.markdown @@ -31,10 +31,22 @@ sensor: individual: true ``` -Configuration variables: - -- **triggers** array(*Required*): Specifies that this sensor is for Zabbix 'triggers'. In the future there will be other Zabbix sensors. -- **name** (*Optional*): Allows you to specify the name for the Sensor, otherwise the host name, as stored in Zabbix, is used. This is useful when you are specifying a list of hostids to monitor as a single count. -- **hostids** (*Optional*): This is a list of Zabbix hostids that we want to filter our count on. -- **individual** (*Optional*): A 'true'/'false' to specify whether we should show individual sensors when a list of hostids is provided. If false, the sensor state will be the count of all triggers for the specified hosts (or all hosts within the Zabbix instance, if hostids isn't provided). +{% configuration %} +triggers: + description: Specifies that this sensor is for Zabbix 'triggers'. In the future there will be other Zabbix sensors. + required: true + type: string +name: + description: Allows you to specify the name for the Sensor, otherwise the host name, as stored in Zabbix, is used. This is useful when you are specifying a list of hostids to monitor as a single count. + required: false + type: strng +hostids: + description: This is a list of Zabbix hostids that we want to filter our count on. + required: false + type: string +individual: + description: A 'true'/'false' to specify whether we should show individual sensors when a list of hostids is provided. If false, the sensor state will be the count of all triggers for the specified hosts (or all hosts within the Zabbix instance, if hostids isn't provided). + required: false + type: boolean + {% endconfiguration %} From 04048834b1d28f8f8263e898a12af67d4c4c336a Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Wed, 3 Oct 2018 12:42:57 +0200 Subject: [PATCH 069/114] Changes int -> integer (#6452) --- source/_components/ads.markdown | 2 +- source/_components/amcrest.markdown | 4 ++-- source/_components/apcupsd.markdown | 2 +- source/_components/arlo.markdown | 2 +- source/_components/august.markdown | 2 +- .../_components/binary_sensor.arest.markdown | 2 +- .../binary_sensor.hikvision.markdown | 4 ++-- source/_components/binary_sensor.ihc.markdown | 2 +- .../binary_sensor.netatmo.markdown | 2 +- .../binary_sensor.pilight.markdown | 2 +- .../_components/binary_sensor.trend.markdown | 4 ++-- .../binary_sensor.workday.markdown | 2 +- source/_components/camera.rpi_camera.markdown | 14 ++++++------ source/_components/camera.uvc.markdown | 2 +- source/_components/canary.markdown | 2 +- source/_components/climate.modbus.markdown | 10 ++++----- source/_components/climate.venstar.markdown | 2 +- .../_components/climate.zhong_hong.markdown | 4 ++-- .../device_tracker.asuswrt.markdown | 2 +- .../_components/device_tracker.ping.markdown | 2 +- .../device_tracker.tomato.markdown | 2 +- .../_components/device_tracker.unifi.markdown | 4 ++-- source/_components/egardia.markdown | 4 ++-- source/_components/feedreader.markdown | 2 +- source/_components/hive.markdown | 2 +- source/_components/homekit.markdown | 2 +- source/_components/http.markdown | 4 ++-- source/_components/hydrawise.markdown | 2 +- ..._processing.microsoft_face_detect.markdown | 2 +- ...rocessing.microsoft_face_identify.markdown | 2 +- .../image_processing.openalpr_cloud.markdown | 2 +- .../image_processing.openalpr_local.markdown | 2 +- source/_components/input_text.markdown | 4 ++-- source/_components/light.ihc.markdown | 2 +- source/_components/light.lw12wifi.markdown | 2 +- source/_components/maxcube.markdown | 4 ++-- .../media_player.blackbird.markdown | 4 ++-- .../media_player.dlna_dmr.markdown | 2 +- .../_components/media_player.epson.markdown | 2 +- .../_components/media_player.horizon.markdown | 2 +- .../_components/media_player.pjlink.markdown | 2 +- .../media_player.samsungtv.markdown | 2 +- source/_components/mochad.markdown | 2 +- source/_components/mysensors.markdown | 10 ++++----- source/_components/notify.lametric.markdown | 4 ++-- source/_components/openuv.markdown | 2 +- source/_components/rainmachine.markdown | 6 ++--- source/_components/recorder.markdown | 4 ++-- .../_components/remote.xiaomi_miio.markdown | 4 ++-- source/_components/sensor.ads.markdown | 2 +- source/_components/sensor.airvisual.markdown | 4 ++-- source/_components/sensor.bme680.markdown | 22 +++++++++---------- .../_components/sensor.coinmarketcap.markdown | 4 ++-- source/_components/sensor.cups.markdown | 2 +- source/_components/sensor.filter.markdown | 4 ++-- source/_components/sensor.gearbest.markdown | 2 +- source/_components/sensor.glances.markdown | 4 ++-- source/_components/sensor.gpsd.markdown | 2 +- source/_components/sensor.ihc.markdown | 2 +- source/_components/sensor.iperf3.markdown | 6 ++--- .../sensor.jewish_calendar.markdown | 4 ++-- source/_components/sensor.lacrosse.markdown | 12 +++++----- source/_components/sensor.modbus.markdown | 2 +- source/_components/sensor.mqtt.markdown | 4 ++-- source/_components/sensor.netdata.markdown | 2 +- source/_components/sensor.nut.markdown | 2 +- .../sensor.openhardwaremonitor.markdown | 2 +- source/_components/sensor.pyload.markdown | 2 +- source/_components/sensor.random.markdown | 2 +- .../_components/sensor.rmvtransport.markdown | 2 +- source/_components/sensor.serial.markdown | 2 +- source/_components/sensor.sht31.markdown | 2 +- source/_components/sensor.simulated.markdown | 2 +- source/_components/sensor.speedtest.markdown | 2 +- source/_components/sensor.spotcrime.markdown | 2 +- source/_components/sensor.temper.markdown | 4 ++-- .../_components/sensor.transmission.markdown | 2 +- .../_components/sensor.viaggiatreno.markdown | 4 ++-- .../_components/sensor.volkszaehler.markdown | 2 +- source/_components/sensor.yr.markdown | 2 +- source/_components/snips.markdown | 4 ++-- source/_components/spider.markdown | 2 +- source/_components/sun.markdown | 2 +- source/_components/switch.hydrawise.markdown | 2 +- source/_components/switch.ihc.markdown | 2 +- source/_components/switch.rest.markdown | 2 +- source/_components/system_log.markdown | 2 +- source/_components/tts.baidu.markdown | 8 +++---- source/_components/tts.markdown | 2 +- source/_components/upcloud.markdown | 2 +- source/_components/xiaomi_aqara.markdown | 2 +- source/_docs/mqtt/broker.markdown | 4 ++-- 92 files changed, 151 insertions(+), 151 deletions(-) diff --git a/source/_components/ads.markdown b/source/_components/ads.markdown index 9e8463add0b..74e9a4d7215 100644 --- a/source/_components/ads.markdown +++ b/source/_components/ads.markdown @@ -32,7 +32,7 @@ ads: port: required: true description: The port that runs the AMS server on the device, typically this would be 801 or 851. - type: int + type: integer ip_address: required: false description: The IP address of the ADS device, if not set the first 4 bytes of the device id will be used. diff --git a/source/_components/amcrest.markdown b/source/_components/amcrest.markdown index fae4d0ff5e0..baa4081a986 100644 --- a/source/_components/amcrest.markdown +++ b/source/_components/amcrest.markdown @@ -68,7 +68,7 @@ name: port: description: The port that the camera is running on. required: false - type: int + type: integer default: 80 resolution: description: > @@ -103,7 +103,7 @@ authentication: scan_interval: description: Defines the update interval of the sensor in seconds. required: false - type: int + type: integer default: 10 sensors: description: > diff --git a/source/_components/apcupsd.markdown b/source/_components/apcupsd.markdown index 44265218d24..c66a0f324a8 100644 --- a/source/_components/apcupsd.markdown +++ b/source/_components/apcupsd.markdown @@ -32,7 +32,7 @@ host: port: description: The port on which the APCUPSd NIS is listening. required: false - type: int + type: integer default: 3551 {% endconfiguration %} diff --git a/source/_components/arlo.markdown b/source/_components/arlo.markdown index a95acd4999e..ab5839c3022 100644 --- a/source/_components/arlo.markdown +++ b/source/_components/arlo.markdown @@ -38,7 +38,7 @@ password: scan_interval: description: How frequently to query for new data. Defaults to 60 seconds. required: false - type: int + type: integer {% endconfiguration %} It is recommended to create a dedicated user on Arlo website to be used within Home Assistant and then share your Arlo cameras. diff --git a/source/_components/august.markdown b/source/_components/august.markdown index 9231f7d2f13..2eb0216834b 100644 --- a/source/_components/august.markdown +++ b/source/_components/august.markdown @@ -49,7 +49,7 @@ password: timeout: description: Timeout to wait for connections. required: false - type: int + type: integer default: 10 {% endconfiguration %} diff --git a/source/_components/binary_sensor.arest.markdown b/source/_components/binary_sensor.arest.markdown index 5029ae1b278..4465d6ed938 100644 --- a/source/_components/binary_sensor.arest.markdown +++ b/source/_components/binary_sensor.arest.markdown @@ -36,7 +36,7 @@ resource: pin: description: Number of the pin to monitor. required: true - type: int + type: integer name: description: Let you overwrite the name of the device. By default *name* from the device is used. required: false diff --git a/source/_components/binary_sensor.hikvision.markdown b/source/_components/binary_sensor.hikvision.markdown index d77e38d757c..b3d892b437a 100644 --- a/source/_components/binary_sensor.hikvision.markdown +++ b/source/_components/binary_sensor.hikvision.markdown @@ -94,7 +94,7 @@ name: port: description: The port to connect to the camera on. required: false - type: int + type: integer default: 80 ssl: description: "`true` if you want to connect with https. Be sure to set the port also." @@ -119,7 +119,7 @@ customize: Home Assistant in seconds. This is useful to catch multiple quick trips in one window without the state toggling on and off. required: false - type: int + type: integer default: 5 {% endconfiguration %} diff --git a/source/_components/binary_sensor.ihc.markdown b/source/_components/binary_sensor.ihc.markdown index 31d14bb69fb..9340c74aa6b 100644 --- a/source/_components/binary_sensor.ihc.markdown +++ b/source/_components/binary_sensor.ihc.markdown @@ -51,7 +51,7 @@ binary_sensors: id: description: The IHC resource id. required: true - type: int + type: integer inverting: description: If True the sensor will be inverted. required: false diff --git a/source/_components/binary_sensor.netatmo.markdown b/source/_components/binary_sensor.netatmo.markdown index 44be87ffe53..1d396f6966e 100644 --- a/source/_components/binary_sensor.netatmo.markdown +++ b/source/_components/binary_sensor.netatmo.markdown @@ -57,7 +57,7 @@ timeout: The Welcome/Presence binary sensors will stay on for X seconds after detection. required: false - type: int + type: integer default: 90 cameras: description: List of cameras entity IDs to display. diff --git a/source/_components/binary_sensor.pilight.markdown b/source/_components/binary_sensor.pilight.markdown index 3761bd06631..85307be3d60 100644 --- a/source/_components/binary_sensor.pilight.markdown +++ b/source/_components/binary_sensor.pilight.markdown @@ -63,7 +63,7 @@ reset_delay_sec: Seconds before the sensor is disarmed if `disarm_after_trigger` is set to true. required: false - type: int + type: integer default: 30 {% endconfiguration %} diff --git a/source/_components/binary_sensor.trend.markdown b/source/_components/binary_sensor.trend.markdown index c10164d425a..f110c9ca04c 100644 --- a/source/_components/binary_sensor.trend.markdown +++ b/source/_components/binary_sensor.trend.markdown @@ -70,7 +70,7 @@ sensors: max_samples: description: Limit the maximum number of stored samples. required: false - type: int + type: integer default: 2 min_gradient: description: > @@ -85,7 +85,7 @@ sensors: The duration **in seconds** to store samples for. Samples older than this value will be discarded. required: false - type: int + type: integer default: 0 {% endconfiguration %} diff --git a/source/_components/binary_sensor.workday.markdown b/source/_components/binary_sensor.workday.markdown index b32983d2027..213eb37ff8a 100644 --- a/source/_components/binary_sensor.workday.markdown +++ b/source/_components/binary_sensor.workday.markdown @@ -66,7 +66,7 @@ excludes: days_offset: description: Set days offset. required: false - type: int + type: integer default: 0 {% endconfiguration %} diff --git a/source/_components/camera.rpi_camera.markdown b/source/_components/camera.rpi_camera.markdown index b6fc4094c09..0cc4eaa01c0 100644 --- a/source/_components/camera.rpi_camera.markdown +++ b/source/_components/camera.rpi_camera.markdown @@ -31,7 +31,7 @@ image_width: description: Set the image width. required: false default: 640 - type: int + type: integer name: description: Name of the camera. required: false @@ -41,32 +41,32 @@ image_height: description: Set the image height. required: false default: 480 - type: int + type: integer image_quality: description: Set the image quality (from 0 to 100). required: false default: 7 - type: int + type: integer image_rotation: description: Set image rotation (0-359). required: false default: 0 - type: int + type: integer horizontal_flip: description: Set horizontal flip (0 to disable, 1 to enable). required: false default: 0 - type: int + type: integer vertical_flip: description: Set vertical flip (0 to disable, 1 to enable). required: false default: 0 - type: int + type: integer timelapse: description: Takes a picture every this many milliseconds (thousands of a second) - the default means one picture a second. required: false default: 1000 - type: int + type: integer file_path: description: Save the picture in a custom file path. required: false diff --git a/source/_components/camera.uvc.markdown b/source/_components/camera.uvc.markdown index 5d4bc7d9ae6..d83f1457e87 100644 --- a/source/_components/camera.uvc.markdown +++ b/source/_components/camera.uvc.markdown @@ -44,7 +44,7 @@ nvr: port: description: The port number to use for accessing the NVR. required: false - type: int + type: integer default: 7080 key: description: The API key available from the NVR web interface. diff --git a/source/_components/canary.markdown b/source/_components/canary.markdown index 186d704e17e..d9805b5edff 100644 --- a/source/_components/canary.markdown +++ b/source/_components/canary.markdown @@ -40,7 +40,7 @@ canary: timeout: description: Timeout to wait for connections. required: false - type: int + type: integer default: 10 {% endconfiguration %} diff --git a/source/_components/climate.modbus.markdown b/source/_components/climate.modbus.markdown index 164ae4a4877..77d62c2cf86 100644 --- a/source/_components/climate.modbus.markdown +++ b/source/_components/climate.modbus.markdown @@ -38,15 +38,15 @@ name: slave: description: The number of the slave (Optional for tcp and upd Modbus, use 1). required: true - type: int + type: integer target_temp_register: description: Register number for target temperature (Setpoint). required: true - type: int + type: integer current_temp_register: description: Register number for current temperature (Process value). required: true - type: int + type: integer data_type: description: Response representation (int, uint, float, custom). If float selected, value will converted to IEEE 754 floating point format. required: false @@ -55,11 +55,11 @@ data_type: count: description: Number of registers to read. required: false - type: int + type: integer precision: description: Number of valid decimals. required: false - type: int + type: integer default: 0 {% endconfiguration %} diff --git a/source/_components/climate.venstar.markdown b/source/_components/climate.venstar.markdown index 253e8700675..7667b735434 100644 --- a/source/_components/climate.venstar.markdown +++ b/source/_components/climate.venstar.markdown @@ -65,7 +65,7 @@ ssl: timeout: description: Number of seconds for API timeout. required: false - type: int + type: integer default: 5 humidifier: description: Report humidity and expose humidifier setpoints. diff --git a/source/_components/climate.zhong_hong.markdown b/source/_components/climate.zhong_hong.markdown index da1eeb6428a..5d7d14d7919 100644 --- a/source/_components/climate.zhong_hong.markdown +++ b/source/_components/climate.zhong_hong.markdown @@ -33,12 +33,12 @@ port: description: The port of your controller. required: false default: 9999 - type: int + type: integer gateway_address: description: The gateway address for the gateway (Settings in the controller itself). required: false default: 1 - type: int + type: integer {% endconfiguration %} diff --git a/source/_components/device_tracker.asuswrt.markdown b/source/_components/device_tracker.asuswrt.markdown index 7889253ce98..ac26ef901fc 100644 --- a/source/_components/device_tracker.asuswrt.markdown +++ b/source/_components/device_tracker.asuswrt.markdown @@ -52,7 +52,7 @@ protocol: port: description: SSH port to use. required: false - type: int + type: integer default: 22 mode: description: "The operating mode of the router (`router` or `ap`)." diff --git a/source/_components/device_tracker.ping.markdown b/source/_components/device_tracker.ping.markdown index 80951c763f8..41981a2795a 100644 --- a/source/_components/device_tracker.ping.markdown +++ b/source/_components/device_tracker.ping.markdown @@ -39,7 +39,7 @@ hosts: count: description: Number of packet used for each device (avoid false detection). required: false - type: int + type: integer {% endconfiguration %} See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. diff --git a/source/_components/device_tracker.tomato.markdown b/source/_components/device_tracker.tomato.markdown index 6543004c7ab..b560184d17b 100644 --- a/source/_components/device_tracker.tomato.markdown +++ b/source/_components/device_tracker.tomato.markdown @@ -46,7 +46,7 @@ host: port: description: "The port number of your router, e.g., `443`." required: false - type: int + type: integer default: 80/443 (automatically detected) ssl: description: "Whether to connect via `https`." diff --git a/source/_components/device_tracker.unifi.markdown b/source/_components/device_tracker.unifi.markdown index 619b27f17ac..2bb4372c4b3 100644 --- a/source/_components/device_tracker.unifi.markdown +++ b/source/_components/device_tracker.unifi.markdown @@ -46,7 +46,7 @@ host: port: description: The port of your controller's web interface default: 8443 - type: int + type: integer required: false site_id: description: For multisite installations, you can specify `site_id` to specify which is used @@ -60,7 +60,7 @@ verify_ssl: default: true detection_time: description: How long since the last seen time before the device is marked away, specified in seconds. - type: int + type: integer required: false default: 300 ssid_filter: diff --git a/source/_components/egardia.markdown b/source/_components/egardia.markdown index 50efce55a66..b8f0b75396a 100644 --- a/source/_components/egardia.markdown +++ b/source/_components/egardia.markdown @@ -48,7 +48,7 @@ version: port: description: The port of the alarm panel. required: false - type: int + type: integer default: 80 report_server_enabled: description: Enable reporting by server. @@ -58,7 +58,7 @@ report_server_enabled: report_server_port: description: Port of the Egardia server. required: false - type: int + type: integer default: 52010 report_server_codes: description: Map of list of codes for the different states. diff --git a/source/_components/feedreader.markdown b/source/_components/feedreader.markdown index b5a6b9b3ea5..5ed987b90d1 100644 --- a/source/_components/feedreader.markdown +++ b/source/_components/feedreader.markdown @@ -39,7 +39,7 @@ feedreader: description: The maximum number of entries to extract from each feed. required: false default: 20 - type: int + type: integer {% endconfiguration %} The following configuration example shows how to configure update interval and maximum number of entries: diff --git a/source/_components/hive.markdown b/source/_components/hive.markdown index 16f2a77ac43..4815bcf7942 100644 --- a/source/_components/hive.markdown +++ b/source/_components/hive.markdown @@ -41,7 +41,7 @@ password: scan_interval: description: The time in minutes between Hive API calls required: false - type: int + type: integer default: 2 {% endconfiguration %} diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index b1ea53ff54d..0ba2e2efe01 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -62,7 +62,7 @@ homekit: port: description: Port for the HomeKit extension. required: false - type: int + type: integer default: 51827 name: description: Need to be individual for each instance of Home Assistant using the component on the same local network. Between `3` and `25` characters. Alphanumeric and spaces allowed. diff --git a/source/_components/http.markdown b/source/_components/http.markdown index 643f143fc84..ef9c3369fec 100644 --- a/source/_components/http.markdown +++ b/source/_components/http.markdown @@ -43,7 +43,7 @@ server_host: server_port: description: Let you set a port to use. required: false - type: int + type: integer default: 8123 base_url: description: "The URL that Home Assistant is available on the internet. For example: `hass-example.duckdns.org:8123`. The iOS app finds local installations, if you have an outside URL use this so that you can auto-fill when discovered in the app." @@ -87,7 +87,7 @@ ip_ban_enabled: login_attempts_threshold: description: "Number of failed login attempt from single IP after which it will be automatically banned if `ip_ban_enabled` is `true`. When set to -1 no new automatic bans will be added." required: false - type: int + type: integer default: -1 ssl_profile: description: The [Mozilla SSL profile](https://wiki.mozilla.org/Security/Server_Side_TLS) to use. Only lower if you are experiencing integrations causing SSL handshake errors. diff --git a/source/_components/hydrawise.markdown b/source/_components/hydrawise.markdown index f45b1255bdc..f864bee1a70 100644 --- a/source/_components/hydrawise.markdown +++ b/source/_components/hydrawise.markdown @@ -33,7 +33,7 @@ access_token: scan_interval: description: The time interval, in seconds, to poll the Hydrawise cloud. required: false - type: int + type: integer default: 30 {% endconfiguration %} diff --git a/source/_components/image_processing.microsoft_face_detect.markdown b/source/_components/image_processing.microsoft_face_detect.markdown index 18698a70ec5..330ff1f0f63 100644 --- a/source/_components/image_processing.microsoft_face_detect.markdown +++ b/source/_components/image_processing.microsoft_face_detect.markdown @@ -38,7 +38,7 @@ image_processing: confidence: description: The minimum of confidence in percent to process with Home Assistant. required: false - type: int + type: integer default: 80 source: description: List of image sources. diff --git a/source/_components/image_processing.microsoft_face_identify.markdown b/source/_components/image_processing.microsoft_face_identify.markdown index 3e4b7527fee..da3b931f1ab 100644 --- a/source/_components/image_processing.microsoft_face_identify.markdown +++ b/source/_components/image_processing.microsoft_face_identify.markdown @@ -43,7 +43,7 @@ group: confidence: description: The minimum of confidence in percent to process with Home Assistant. required: false - type: int + type: integer default: 80 source: description: List of image sources. diff --git a/source/_components/image_processing.openalpr_cloud.markdown b/source/_components/image_processing.openalpr_cloud.markdown index 31759b9bd70..9149f802815 100644 --- a/source/_components/image_processing.openalpr_cloud.markdown +++ b/source/_components/image_processing.openalpr_cloud.markdown @@ -44,7 +44,7 @@ api_key: confidence: description: The minimum of confidence in percent to process with Home Assistant. required: false - type: int + type: integer default: 80 source: description: List of image sources. diff --git a/source/_components/image_processing.openalpr_local.markdown b/source/_components/image_processing.openalpr_local.markdown index d7d05162c05..e14caab135d 100644 --- a/source/_components/image_processing.openalpr_local.markdown +++ b/source/_components/image_processing.openalpr_local.markdown @@ -71,7 +71,7 @@ alpr_bin: confidence: description: The minimum of confidence in percent to process with Home Assistant. required: false - type: int + type: integer default: 80 source: description: List of image sources. diff --git a/source/_components/input_text.markdown b/source/_components/input_text.markdown index 9833541ba37..fc1247988ba 100644 --- a/source/_components/input_text.markdown +++ b/source/_components/input_text.markdown @@ -46,12 +46,12 @@ input_text: min: description: Minimum length for the text value. required: false - type: int + type: integer default: 0 max: description: Maximum length for the text value. required: false - type: int + type: integer default: 100 initial: description: Initial value when Home Assistant starts. diff --git a/source/_components/light.ihc.markdown b/source/_components/light.ihc.markdown index cb2a1c986de..22a7b2cf60b 100644 --- a/source/_components/light.ihc.markdown +++ b/source/_components/light.ihc.markdown @@ -55,7 +55,7 @@ lights: id: description: The IHC resource id. required: true - type: int + type: integer name: description: The name of the component required: false diff --git a/source/_components/light.lw12wifi.markdown b/source/_components/light.lw12wifi.markdown index 028528c6a56..c1b01102873 100644 --- a/source/_components/light.lw12wifi.markdown +++ b/source/_components/light.lw12wifi.markdown @@ -34,7 +34,7 @@ host: port: description: Some firmware versions of the LW-12 controller listen on different ports. required: false - type: int + type: integer default: 5000 name: description: Name to use in the frontend. diff --git a/source/_components/maxcube.markdown b/source/_components/maxcube.markdown index 7439d2d19fe..223d962f68f 100644 --- a/source/_components/maxcube.markdown +++ b/source/_components/maxcube.markdown @@ -56,11 +56,11 @@ maxcube: port: description: The UDP port number. required: false - type: int + type: integer default: 62910 scan_interval: description: The update interval in seconds required: false - type: int + type: integer default: 300 {% endconfiguration %} diff --git a/source/_components/media_player.blackbird.markdown b/source/_components/media_player.blackbird.markdown index fbd5fb20edc..c118a83d9c9 100644 --- a/source/_components/media_player.blackbird.markdown +++ b/source/_components/media_player.blackbird.markdown @@ -42,14 +42,14 @@ host: zones: description: This is the list of zones available. Valid zones are 1, 2, 3, 4, 5, 6, 7, 8. Each zone must have a name assigned to it. required: true - type: int + type: integer keys: name: description: The name of the zone. sources: description: The list of sources available. Valid source numbers are 1, 2, 3, 4, 5, 6, 7, 8. Each source number corresponds to the input number on the Blackbird matrix switch. Similar to zones, each source must have a name assigned to it. required: true - type: int + type: integer keys: name: description: The name of the source. diff --git a/source/_components/media_player.dlna_dmr.markdown b/source/_components/media_player.dlna_dmr.markdown index 1713a1c212c..23c692ce04f 100644 --- a/source/_components/media_player.dlna_dmr.markdown +++ b/source/_components/media_player.dlna_dmr.markdown @@ -42,7 +42,7 @@ listen_port: description: Port to listen on for events from the device. required: false default: 8301 - type: int + type: integer name: description: The name you would like to give to the device, e.g., `TV living room`. required: false diff --git a/source/_components/media_player.epson.markdown b/source/_components/media_player.epson.markdown index 604cef1f731..d35ff6e7da1 100644 --- a/source/_components/media_player.epson.markdown +++ b/source/_components/media_player.epson.markdown @@ -34,7 +34,7 @@ host: port: description: The HTTP port number. required: false - type: int + type: integer default: 80 name: description: The name of the device used in the frontend. diff --git a/source/_components/media_player.horizon.markdown b/source/_components/media_player.horizon.markdown index d867d348c9e..f8600e87144 100644 --- a/source/_components/media_player.horizon.markdown +++ b/source/_components/media_player.horizon.markdown @@ -32,7 +32,7 @@ media_player: port: description: The port of the device to connect to. required: false - type: int + type: integer name: description: The name of the device used in the frontend. required: false diff --git a/source/_components/media_player.pjlink.markdown b/source/_components/media_player.pjlink.markdown index 785f7cf2d1d..95f539731e6 100644 --- a/source/_components/media_player.pjlink.markdown +++ b/source/_components/media_player.pjlink.markdown @@ -34,7 +34,7 @@ host: port: description: port on which the PJLink service runs on the device. required: false - type: int + type: integer default: 4352 name: description: Name of the device. diff --git a/source/_components/media_player.samsungtv.markdown b/source/_components/media_player.samsungtv.markdown index 407c3823e7f..9a80e3ad393 100644 --- a/source/_components/media_player.samsungtv.markdown +++ b/source/_components/media_player.samsungtv.markdown @@ -38,7 +38,7 @@ host: port: description: The port of the Samsung Smart TV. If set to 8001, the new websocket connection will be used (required for 2016+ TVs). required: false - type: int + type: integer default: 55000 name: description: The name you would like to give to the Samsung Smart TV. diff --git a/source/_components/mochad.markdown b/source/_components/mochad.markdown index bf0617cefb7..6df5d067876 100644 --- a/source/_components/mochad.markdown +++ b/source/_components/mochad.markdown @@ -31,7 +31,7 @@ host: port: description: The port that mochad is running on. required: false - type: int + type: integer default: 1099 {% endconfiguration %} diff --git a/source/_components/mysensors.markdown b/source/_components/mysensors.markdown index 97a48746a27..43f0a85fefd 100644 --- a/source/_components/mysensors.markdown +++ b/source/_components/mysensors.markdown @@ -39,7 +39,7 @@ mysensors: baud_rate: description: Specifies the baud rate of the connected serial gateway. required: false - type: int + type: integer default: 115200 persistence_file: description: The path to a file to save sensor information. The file extension determines the file type. Currently supported file types are 'pickle' and 'json'. @@ -49,7 +49,7 @@ mysensors: tcp_port: description: Specifies the port of the connected TCP Ethernet gateway. required: false - type: int + type: integer default: 5003 topic_in_prefix: description: Set the prefix of the MQTT topic for messages coming from the MySensors gateway in to Home Assistant. @@ -73,7 +73,7 @@ mysensors: persistence: description: Enable or disable local persistence of sensor information. If this is disabled, then each sensor will need to send presentation messages after Home Assistant starts. required: false - type: int + type: integer default: true version: description: Specifies the MySensors protocol version to use. Supports 1.4, 1.5 and 2.0. @@ -83,12 +83,12 @@ mysensors: optimistic: description: Enable or disable optimistic mode for actuators (switch/light). Set this to true if no state feedback from actuators is possible. Home Assistant will assume that the command succeeded and change state. required: false - type: int + type: integer default: false retain: description: Enable or disable retain flag for published messages from Home Assistant when using the MQTT gateway. required: false - type: int + type: integer default: true {% endconfiguration %} diff --git a/source/_components/notify.lametric.markdown b/source/_components/notify.lametric.markdown index b9ee3343439..f68d978dba3 100644 --- a/source/_components/notify.lametric.markdown +++ b/source/_components/notify.lametric.markdown @@ -32,7 +32,7 @@ name: lifetime: description: Defines how long the message remains in LaMetric notification queue (in seconds). required: false - type: int + type: integer default: 10 icon: description: An icon or animation. @@ -41,7 +41,7 @@ icon: cycles: description: Defines how often the notification is displayed. required: false - type: int + type: integer default: 1 priority: description: Defines the priority of the notification. diff --git a/source/_components/openuv.markdown b/source/_components/openuv.markdown index acb6f184bed..390249c7d30 100644 --- a/source/_components/openuv.markdown +++ b/source/_components/openuv.markdown @@ -53,7 +53,7 @@ api_key: scan_interval: description: the frequency (in seconds) between data updates required: false - type: int + type: integer default: 1800 binary_sensors: description: binary sensor-related configuration options diff --git a/source/_components/rainmachine.markdown b/source/_components/rainmachine.markdown index 61ebb649104..c82d3cfc9b3 100644 --- a/source/_components/rainmachine.markdown +++ b/source/_components/rainmachine.markdown @@ -55,7 +55,7 @@ password: port: description: the TCP port used by your unit for the REST API required: false - type: int + type: integer default: 8080 ssl: description: whether communication with the local device should occur over HTTPS @@ -65,7 +65,7 @@ ssl: scan_interval: description: the frequency (in seconds) between data updates required: false - type: int + type: integer default: 60 binary_sensors: description: binary sensor-related configuration options @@ -95,7 +95,7 @@ switches: zone_run_time: description: the default number of seconds that a zone should run when turned on required: false - type: int + type: integer default: 600 {% endconfiguration %} diff --git a/source/_components/recorder.markdown b/source/_components/recorder.markdown index d5a92093bd1..8a6703f0ed4 100644 --- a/source/_components/recorder.markdown +++ b/source/_components/recorder.markdown @@ -39,12 +39,12 @@ recorder: description: Specify the number of history days to keep in recorder database after a purge. required: false default: 10 - type: int + type: integer purge_interval: description: How often (in days) the purge task runs. If a scheduled purge is missed (e.g., if Home Assistant was not running), the schedule will resume soon after Home Assistant restarts. You can use the [service](#service-purge) call `purge` when required without impacting the purge schedule. If this is set to `0` (zero), automatic purging is disabled. required: false default: 1 - type: int + type: integer exclude: description: Configure which components should be excluded required: false diff --git a/source/_components/remote.xiaomi_miio.markdown b/source/_components/remote.xiaomi_miio.markdown index 8284a738688..4d018dd3752 100644 --- a/source/_components/remote.xiaomi_miio.markdown +++ b/source/_components/remote.xiaomi_miio.markdown @@ -43,12 +43,12 @@ name: slot: description: The slot used to save learned command. required: false - type: int + type: integer default: 1 timeout: description: Timeout for learning a new command. required: false - type: int + type: integer default: 30 hidden: description: Hide the entity from UI. There is currently no reason to show the entity in UI as turning it off or on does nothing. diff --git a/source/_components/sensor.ads.markdown b/source/_components/sensor.ads.markdown index 2360ac70c37..6b7f3edce91 100644 --- a/source/_components/sensor.ads.markdown +++ b/source/_components/sensor.ads.markdown @@ -24,7 +24,7 @@ sensor: - platform: ads adsvar: GVL.temperature unit_of_measurement: '°C' - adstype: int + adstype: integer ``` {% configuration %} diff --git a/source/_components/sensor.airvisual.markdown b/source/_components/sensor.airvisual.markdown index 2cde892cddb..a78e18c417c 100644 --- a/source/_components/sensor.airvisual.markdown +++ b/source/_components/sensor.airvisual.markdown @@ -61,12 +61,12 @@ show_on_map: scan_interval: description: "The rate at which AirVisual should be polled for new data." required: optional - type: int + type: integer default: 600 latitude: description: The latitude of the location to monitor. required: optional - type: str + type: string default: "The latitude defined under the `homeassistant` key in `configuration.yaml`." longitude: description: The longitude of the location to monitor. diff --git a/source/_components/sensor.bme680.markdown b/source/_components/sensor.bme680.markdown index b32f23ab5d7..aa7b7103a53 100644 --- a/source/_components/sensor.bme680.markdown +++ b/source/_components/sensor.bme680.markdown @@ -40,12 +40,12 @@ i2c_bus: description: I2C bus that the sensor is connected to. required: false default: 1 - type: int + type: integer i2c_address: description: I2C address of the sensor. It is 0x76 or 0x77. required: false default: 0x77 - type: int + type: integer monitored_conditions: description: Conditions to monitor. required: false @@ -70,47 +70,47 @@ oversampling_temperature: description: Oversampling multiplier as described in the sensor datasheet. Can be 0 (no sampling), 1, 2, 4, 8, or 16. required: false default: 8 - type: int + type: integer oversampling_pressure: description: Oversampling multiplier as described in the sensor datasheet. Can be 0 (no sampling), 1, 2, 4, 8, or 16. required: false default: 2 - type: int + type: integer oversampling_humidity: description: Oversampling multiplier as described in the sensor datasheet. Can be 0 (no sampling), 1, 2, 4, 8, or 16. required: false default: 4 - type: int + type: integer filter_size: description: IIR filter size as described in the sensor datasheet. Can be 0 (off), 1, 3, 7, 15, 31, 63 or 127. required: false default: 3 - type: int + type: integer gas_heater_temperature: description: The temperature to heat the hotplate to for gas resistance measurements as described in the sensor datasheet. Can be between 200-400°C. required: false default: 320 - type: int + type: integer gas_heater_duration: description: The duration to heat the hotplate in milliseconds for gas resistance measurements as described in the sensor datasheet. Can be between 1-4032 ms. In reality, you will likely need between 80-100ms to reach a stable temperature. Using a duration greater than 1000ms is inadvisable as it will essentially result in the heater being continually on due to the 1-second update interval. required: false default: 150 - type: int + type: integer aq_burn_in_time: description: The duration to perform gas resistance measurements to establish a stable baseline measurements for Air Quality calculations in seconds. The burn in time is only performed when the sensor component is first initialized. required: false default: 300 - type: int + type: integer aq_humidity_baseline: description: The baseline *ideal* relative humidity value for the air quality calculations. required: false default: 40 - type: int + type: integer aq_humidity_bias: description: The bias for humidity to the gas resistance measurement in the air quality calculations expressed as a percentage of the total calculation e.g., 25% hudidtity to 75% gas. required: false default: 25 - type: int + type: integer {% endconfiguration %} ## {% linkable_title Full Examples %} diff --git a/source/_components/sensor.coinmarketcap.markdown b/source/_components/sensor.coinmarketcap.markdown index e31c656efae..a004c2c4240 100644 --- a/source/_components/sensor.coinmarketcap.markdown +++ b/source/_components/sensor.coinmarketcap.markdown @@ -28,7 +28,7 @@ sensor: currency_id: description: The ID of the cryptocurrency to use, default is the ID of Bitcoin. required: false - type: int + type: integer default: 1 display_currency: description: The currency to display. @@ -38,7 +38,7 @@ display_currency: display_currency_decimals: description: The amount of decimals to round to. required: false - type: int + type: integer default: 2 {% endconfiguration %} diff --git a/source/_components/sensor.cups.markdown b/source/_components/sensor.cups.markdown index 2e32f5aa0f9..86966e192b6 100644 --- a/source/_components/sensor.cups.markdown +++ b/source/_components/sensor.cups.markdown @@ -46,7 +46,7 @@ host: port: description: Port of the CUPS print server. required: false - type: int + type: integer default: 631 {% endconfiguration %} diff --git a/source/_components/sensor.filter.markdown b/source/_components/sensor.filter.markdown index fec73f0facd..98f13fb6733 100644 --- a/source/_components/sensor.filter.markdown +++ b/source/_components/sensor.filter.markdown @@ -81,12 +81,12 @@ filters: precision: description: See [_lowpass_](#low-pass) filter. Defines the precision of the filtered state, through the argument of round(). required: false - type: int + type: integer default: None time_constant: description: See [_lowpass_](#low-pass) filter. Loosely relates to the amount of time it takes for a state to influence the output. required: false - type: int + type: integer default: 10 radius: description: See [_outlier_](#outlier) filter. Band radius from median of previous states. diff --git a/source/_components/sensor.gearbest.markdown b/source/_components/sensor.gearbest.markdown index 31803acb752..069d942e84b 100644 --- a/source/_components/sensor.gearbest.markdown +++ b/source/_components/sensor.gearbest.markdown @@ -40,7 +40,7 @@ items: id: description: The ID of the product. required: false - type: int + type: integer url: description: The URL of the product. required: false diff --git a/source/_components/sensor.glances.markdown b/source/_components/sensor.glances.markdown index 6750e177b99..e9321628a61 100644 --- a/source/_components/sensor.glances.markdown +++ b/source/_components/sensor.glances.markdown @@ -59,7 +59,7 @@ host: port: description: The port where Glances is listening. required: false - type: int + type: integer default: 61208 name: description: The prefix for the sensors. @@ -69,7 +69,7 @@ name: version: description: "The version of the Glances API. Supported version: `2` and `3`." required: false - type: int + type: integer default: 2 resources: description: Entries to monitor. diff --git a/source/_components/sensor.gpsd.markdown b/source/_components/sensor.gpsd.markdown index d66cc20110f..857a0d1c95e 100644 --- a/source/_components/sensor.gpsd.markdown +++ b/source/_components/sensor.gpsd.markdown @@ -61,7 +61,7 @@ host: port: description: The port which GPSD is using. required: false - type: int + type: integer default: 2947 name: description: Friendly name to use for the frontend. diff --git a/source/_components/sensor.ihc.markdown b/source/_components/sensor.ihc.markdown index 3938d8af1d1..6e2c2885fb4 100644 --- a/source/_components/sensor.ihc.markdown +++ b/source/_components/sensor.ihc.markdown @@ -45,7 +45,7 @@ sensors: id: description: The IHC resource id. required: true - type: int + type: integer name: description: The name of the component required: false diff --git a/source/_components/sensor.iperf3.markdown b/source/_components/sensor.iperf3.markdown index 0cb7cb2dabe..068a9b879ad 100644 --- a/source/_components/sensor.iperf3.markdown +++ b/source/_components/sensor.iperf3.markdown @@ -52,11 +52,11 @@ sensor: description: Specify the test duration in seconds. Default is 10 and the valid range is from 5 to 10. required: false default: 10 - type: int + type: integer parallel: description: Specify the number of concurrent streams to connect to the server. Default is 1 and the valid range is from 1 to 20. default: 1 - type: int + type: integer protocol: description: Specify the protocol to be used on the test. Default is TCP and the valid values are TCP or UDP. If your Iperf3 server is located in the Internet, consider to use TCP instead of UDP. If the protocol is set to use UDP, the sensor may not get updated due to package retransmission issues due to its nature. required: false @@ -66,7 +66,7 @@ sensor: description: Specify the frequency in seconds which the test will be perfomed. Default value is 1 hour. required: false default: 3600 - type: int + type: integer {% endconfiguration %} You can find a list of public Iperf3 servers [here](https://iperf.fr/iperf-servers.php). You can also start your own Iperf3 server using the [mlabbe/iperf3's](https://hub.docker.com/r/mlabbe/iperf3/) docker image or just refer to your `iperf3` command's man page. diff --git a/source/_components/sensor.jewish_calendar.markdown b/source/_components/sensor.jewish_calendar.markdown index 42a4c53ad8b..f24ecb3440c 100644 --- a/source/_components/sensor.jewish_calendar.markdown +++ b/source/_components/sensor.jewish_calendar.markdown @@ -34,12 +34,12 @@ latitude: required: false description: Latitude for time calculations of the sensor. default: Home Assistant location - type: int + type: integer longitude: required: false description: Longitude for time calculations of the sensor. default: Home Assistant location - type: int + type: integer disapora: required: false description: Consider the location as diaspora or not for calculation of the weekly portion and holidays. diff --git a/source/_components/sensor.lacrosse.markdown b/source/_components/sensor.lacrosse.markdown index b634ccbcd37..3d69b6c39ed 100644 --- a/source/_components/sensor.lacrosse.markdown +++ b/source/_components/sensor.lacrosse.markdown @@ -51,7 +51,7 @@ sensor: baud: description: The serial baudrate. required: true - type: int + type: integer default: 57600 led: description: Activate or deactivate the Jeelink LED. @@ -60,19 +60,19 @@ sensor: frequency: description: Initial frequency in 5kHz steps. required: false - type: int + type: integer datarate: description: "Set the data rate in kbps. Special values for well-known settings are: `0`: 17.241 kbps, `1`: 9.579 kbps, `2`: 8.842 kbps." required: false - type: int + type: integer toggle_mask: description: "The following values can be combined bitwise: `1` = 17.241 kbps, `2` = 9.579 kbps, `4` = 8.842 kbps" required: false - type: int + type: integer toggle_interval: description: Enable the toggle mode and set the interval in seconds. required: false - type: int + type: integer sensors: description: A list of your sensors. required: true @@ -89,7 +89,7 @@ sensor: id: description: The LaCrosse Id of the sensor. required: true - type: int + type: integer {% endconfiguration %} diff --git a/source/_components/sensor.modbus.markdown b/source/_components/sensor.modbus.markdown index 5868888488e..d9681e8f678 100644 --- a/source/_components/sensor.modbus.markdown +++ b/source/_components/sensor.modbus.markdown @@ -81,5 +81,5 @@ sensor: scale: 0.1 offset: 0 precision: 1 - data_type: int + data_type: integer ``` diff --git a/source/_components/sensor.mqtt.markdown b/source/_components/sensor.mqtt.markdown index 78f4f9c3945..0322ad8042b 100644 --- a/source/_components/sensor.mqtt.markdown +++ b/source/_components/sensor.mqtt.markdown @@ -40,7 +40,7 @@ name: qos: description: The maximum QoS level of the state topic. required: false - type: int + type: integer default: 0 unit_of_measurement: description: Defines the units of measurement of the sensor, if any. @@ -53,7 +53,7 @@ icon: expire_after: description: Defines the number of seconds after the value expires if it's not updated. required: false - type: int + type: integer default: 0 value_template: description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract the value." diff --git a/source/_components/sensor.netdata.markdown b/source/_components/sensor.netdata.markdown index 0a1a4df622d..d815681dd9f 100644 --- a/source/_components/sensor.netdata.markdown +++ b/source/_components/sensor.netdata.markdown @@ -68,7 +68,7 @@ host: port: description: The port that the Netdata instance is running on. required: false - type: int + type: integer default: 19999 name: description: Name of the monitored Netdata instance. diff --git a/source/_components/sensor.nut.markdown b/source/_components/sensor.nut.markdown index 744002c0f08..fc39be6e0f0 100644 --- a/source/_components/sensor.nut.markdown +++ b/source/_components/sensor.nut.markdown @@ -43,7 +43,7 @@ sensor: description: The port number. required: false default: 3493 - type: int + type: integer alias: description: Name of the ups on the NUT server. required: false diff --git a/source/_components/sensor.openhardwaremonitor.markdown b/source/_components/sensor.openhardwaremonitor.markdown index 6479aa9c9d8..3968a2f0866 100644 --- a/source/_components/sensor.openhardwaremonitor.markdown +++ b/source/_components/sensor.openhardwaremonitor.markdown @@ -33,7 +33,7 @@ sensor: port: description: The port of your Open Hardware Monitor API. Defaults to 8085. required: false - type: int + type: integer {% endconfiguration %}

diff --git a/source/_components/sensor.pyload.markdown b/source/_components/sensor.pyload.markdown index 4bfd7edf02f..221be40d59c 100644 --- a/source/_components/sensor.pyload.markdown +++ b/source/_components/sensor.pyload.markdown @@ -32,7 +32,7 @@ host: port: description: The port your pyLoad interface uses. required: false - type: int + type: integer default: 8000 name: description: The name to use when displaying this pyLoad instance. diff --git a/source/_components/sensor.random.markdown b/source/_components/sensor.random.markdown index 8b1bb11cfbf..91787f6777f 100644 --- a/source/_components/sensor.random.markdown +++ b/source/_components/sensor.random.markdown @@ -41,7 +41,7 @@ minimum: maximum: description: Upper limit for the values. required: false - type: int + type: integer default: 20 unit_of_measurement: description: Defines the units of measurement of the sensor, if any. diff --git a/source/_components/sensor.rmvtransport.markdown b/source/_components/sensor.rmvtransport.markdown index e6584282bda..6c4cea8129b 100644 --- a/source/_components/sensor.rmvtransport.markdown +++ b/source/_components/sensor.rmvtransport.markdown @@ -55,7 +55,7 @@ time_offset: description: Do not display departures leaving sooner than this number of minutes. Useful if you are a couple of minutes away from the stop. required: false default: The defaults is 0. - type: int + type: integer max_journeys: description: Specify the maximal number of journeys. required: false diff --git a/source/_components/sensor.serial.markdown b/source/_components/sensor.serial.markdown index 356ced350f5..4954fb15fc6 100644 --- a/source/_components/sensor.serial.markdown +++ b/source/_components/sensor.serial.markdown @@ -43,7 +43,7 @@ baudrate: description: Baudrate of the serial port. required: false default: 9600 Bps - type: int + type: integer value_template: description: "Defines a [template](/docs/configuration/templating/#processing-incoming-data) to extract a value from the serial line." required: false diff --git a/source/_components/sensor.sht31.markdown b/source/_components/sensor.sht31.markdown index 7adbfc2ceea..f1a46c17810 100644 --- a/source/_components/sensor.sht31.markdown +++ b/source/_components/sensor.sht31.markdown @@ -40,7 +40,7 @@ sensor: description: I2C address of the sensor. required: false default: "`0x44`" - type: int + type: integer monitored_conditions: description: Conditions to monitor. required: false diff --git a/source/_components/sensor.simulated.markdown b/source/_components/sensor.simulated.markdown index ef4d98bd73d..e4ef0bd1d1c 100644 --- a/source/_components/sensor.simulated.markdown +++ b/source/_components/sensor.simulated.markdown @@ -75,7 +75,7 @@ seed: description: The [seed](https://docs.python.org/3.6/library/random.html#random.seed) value for the random noise component. required: false default: 999 - type: int + type: integer spread: description: The spread is the range of the randomly distributed values about their mean. This is sometimes referred to as the Full Width at Half Maximum ([FWHM](https://en.wikipedia.org/wiki/Full_width_at_half_maximum)) of the random distribution. required: false diff --git a/source/_components/sensor.speedtest.markdown b/source/_components/sensor.speedtest.markdown index ac9e65ac30e..bae1f1f576e 100644 --- a/source/_components/sensor.speedtest.markdown +++ b/source/_components/sensor.speedtest.markdown @@ -54,7 +54,7 @@ sensor: server_id: description: Specify the speed test server to perform the test against. required: false - type: int + type: integer day: description: Specify the day(s) of the month to schedule the speed test. Use a list for multiple entries. required: false diff --git a/source/_components/sensor.spotcrime.markdown b/source/_components/sensor.spotcrime.markdown index 73bda02a894..166a2d5877a 100644 --- a/source/_components/sensor.spotcrime.markdown +++ b/source/_components/sensor.spotcrime.markdown @@ -46,7 +46,7 @@ api_key: days: description: Number of days you'd like see to crime statistics for. required: false - type: int + type: integer include: description: Event types you want statistics for. required: false diff --git a/source/_components/sensor.temper.markdown b/source/_components/sensor.temper.markdown index 65fd75fd725..c2452bdd1a2 100644 --- a/source/_components/sensor.temper.markdown +++ b/source/_components/sensor.temper.markdown @@ -28,12 +28,12 @@ sensor: offset: description: The offset to fix reported vales. required: false - type: int + type: integer default: o scale: description: The scale for the sensor. required: false - type: int + type: integer default: 1 name: description: The name to use when displaying this switch. diff --git a/source/_components/sensor.transmission.markdown b/source/_components/sensor.transmission.markdown index 2fbbef26e8c..a1700cd591c 100644 --- a/source/_components/sensor.transmission.markdown +++ b/source/_components/sensor.transmission.markdown @@ -56,7 +56,7 @@ host: port: description: The port your Transmission daemon uses. required: false - type: int + type: integer default: 9091 name: description: The name to use when displaying this Transmission instance in the frontend. diff --git a/source/_components/sensor.viaggiatreno.markdown b/source/_components/sensor.viaggiatreno.markdown index d8ad4e16a00..e313e903b12 100644 --- a/source/_components/sensor.viaggiatreno.markdown +++ b/source/_components/sensor.viaggiatreno.markdown @@ -39,11 +39,11 @@ sensor: train_id: description: The ID of the train. required: true - type: int + type: integer station_id: description: The ID of the starting station. required: true - type: int + type: integer train_name: description: The name of the sensor. Defaults to 'Train from '. required: false diff --git a/source/_components/sensor.volkszaehler.markdown b/source/_components/sensor.volkszaehler.markdown index ee04e55db80..0d9d7c6f89d 100644 --- a/source/_components/sensor.volkszaehler.markdown +++ b/source/_components/sensor.volkszaehler.markdown @@ -39,7 +39,7 @@ host: port: description: The port where Volkszaehler is listening. required: false - type: int + type: integer default: 80 name: description: The prefix for the sensors. diff --git a/source/_components/sensor.yr.markdown b/source/_components/sensor.yr.markdown index 8036ac714fe..58c3b572e02 100644 --- a/source/_components/sensor.yr.markdown +++ b/source/_components/sensor.yr.markdown @@ -35,7 +35,7 @@ name: forecast: description: If you want to get forecast data instead of the current weather data, set this to the number of hours that you want to look into the future. required: false - type: int + type: integer monitored_conditions: description: Conditions to display in the frontend. required: false diff --git a/source/_components/snips.markdown b/source/_components/snips.markdown index afe3d1f7e0a..b4e752ebc28 100644 --- a/source/_components/snips.markdown +++ b/source/_components/snips.markdown @@ -105,12 +105,12 @@ By default, Snips runs its own MQTT broker. But we can also tell Snips to use an feedback_sounds: description: Turn on feedbacks sounds for Snips. required: false - type: str + type: string default: false site_ids: description: A list of siteIds if using multiple Snips instances. Used to make sure feedback is toggled on or off for all sites. required: false - type: str + type: string probability_threshold: description: Threshold for intent probability. Range is from 0.00 to 1.00, 1 being highest match. Intents under this level are discarded. require: false diff --git a/source/_components/spider.markdown b/source/_components/spider.markdown index 1e71b2bc281..f66617b2a38 100644 --- a/source/_components/spider.markdown +++ b/source/_components/spider.markdown @@ -37,7 +37,7 @@ password: scan_interval: description: How frequently to query for new data. Defaults to 120 seconds. required: false - type: int + type: integer {% endconfiguration %}

diff --git a/source/_components/sun.markdown b/source/_components/sun.markdown index 4de53e1fba0..54600bac2a0 100644 --- a/source/_components/sun.markdown +++ b/source/_components/sun.markdown @@ -24,7 +24,7 @@ sun: elevation: description: "The (physical) elevation of your location, in meters above sea level. Defaults to the `elevation` in `configuration.yaml`, which is retrieved from Google Maps if not set." required: false - type: int + type: integer {% endconfiguration %}

diff --git a/source/_components/switch.hydrawise.markdown b/source/_components/switch.hydrawise.markdown index b2e826b663b..fc584f75a7e 100644 --- a/source/_components/switch.hydrawise.markdown +++ b/source/_components/switch.hydrawise.markdown @@ -29,7 +29,7 @@ switch: watering_minutes: description: When manual watering is enabled this will determine the length of time in minutes that irrigation zone will run. The allowed values are 5, 10, 15, 30, 45, or 60. required: false - type: int + type: integer default: 15 monitored_conditions: description: Selects the set of switches that should be enabled on the frontend. Also sets the length of time a zone will run under manual control. diff --git a/source/_components/switch.ihc.markdown b/source/_components/switch.ihc.markdown index fcdbcf3133b..5f70b909cf7 100644 --- a/source/_components/switch.ihc.markdown +++ b/source/_components/switch.ihc.markdown @@ -46,7 +46,7 @@ switches: id: description: The IHC resource id. required: true - type: int + type: integer name: description: The name of the component required: false diff --git a/source/_components/switch.rest.markdown b/source/_components/switch.rest.markdown index 65f0afcd3ee..8a74470eacf 100644 --- a/source/_components/switch.rest.markdown +++ b/source/_components/switch.rest.markdown @@ -44,7 +44,7 @@ name: timeout: description: Timeout for the request. required: false - type: int + type: integer default: 10 body_on: description: "The body of the POST request that commands the switch to become enabled. This value can be a [template](/topics/templating/)." diff --git a/source/_components/system_log.markdown b/source/_components/system_log.markdown index 057331c6de3..9d80c4a6145 100644 --- a/source/_components/system_log.markdown +++ b/source/_components/system_log.markdown @@ -26,7 +26,7 @@ system_log: max_entries: description: Number of entries to store (older entries are discarded). required: false - type: int + type: integer default: 50 fire_event: description: Whether events are fired (required when used for triggers). diff --git a/source/_components/tts.baidu.markdown b/source/_components/tts.baidu.markdown index 47ba6f0ad8f..b0042c40777 100644 --- a/source/_components/tts.baidu.markdown +++ b/source/_components/tts.baidu.markdown @@ -41,22 +41,22 @@ secret_key: speed: description: Audio speed from 0 to 9. required: false - type: int + type: integer default: 5 pitch: description: Audio pitch from 0 to 9. required: false - type: int + type: integer default: 5 volume: description: Audio volume from 0 to 15. required: false - type: int + type: integer default: 5 person: description: Voice type. You choose one from 0, 1, 3 or 4. required: false - type: int + type: integer default: 0 {% endconfiguration %} diff --git a/source/_components/tts.markdown b/source/_components/tts.markdown index 0b333959348..3137188b3e8 100644 --- a/source/_components/tts.markdown +++ b/source/_components/tts.markdown @@ -42,7 +42,7 @@ cache_dir: time_memory: description: Time to hold the voice data inside memory for fast play on a media player. Minimum is 60 s and the maximum 57600 s (16 hours). required: false - type: int + type: integer default: 300 base_url: description: A base URL to use *instead* of the one set in the [http component](/components/http/). It is used as-is by the `tts` component. In particular, you need to include the protocol scheme `http://` or `https://` and the correct port number. They will not be automatically added for you. diff --git a/source/_components/upcloud.markdown b/source/_components/upcloud.markdown index abd6d945431..a54fa0e37eb 100644 --- a/source/_components/upcloud.markdown +++ b/source/_components/upcloud.markdown @@ -43,6 +43,6 @@ password: scan_interval: description: Update interval in seconds. required: false - type: int + type: integer default: 60 {% endconfiguration %} diff --git a/source/_components/xiaomi_aqara.markdown b/source/_components/xiaomi_aqara.markdown index d56d8821538..d98517498f1 100644 --- a/source/_components/xiaomi_aqara.markdown +++ b/source/_components/xiaomi_aqara.markdown @@ -116,7 +116,7 @@ xiaomi_aqara: discovery_retry: description: Number of times that Home Assistant should try to reconnect to the gateway. required: false - type: int + type: integer default: 3 interface: description: Which network interface to use. diff --git a/source/_docs/mqtt/broker.markdown b/source/_docs/mqtt/broker.markdown index fdbb46d06a6..9da45c0aa2b 100644 --- a/source/_docs/mqtt/broker.markdown +++ b/source/_docs/mqtt/broker.markdown @@ -75,7 +75,7 @@ broker: port: required: false description: The network port to connect to. Default is 1883. - type: int + type: integer client_id: required: false description: The client ID that Home Assistant will use. Has to be unique on the server. Default is a randomly generated one. @@ -83,7 +83,7 @@ client_id: keepalive: required: false description: The time in seconds between sending keep alive messages for this client. Default is 60. - type: int + type: integer username: required: false description: The username to use with your MQTT broker. From f8ac4ed1c9e9e26ba9c1828eb0de5e06609d5b5e Mon Sep 17 00:00:00 2001 From: kernehed Date: Wed, 3 Oct 2018 14:44:14 +0200 Subject: [PATCH 070/114] Update sensor.zabbix.markdown related to #6385 (#6466) I saw that "string" was mistyped, and it got merged. Sorry, is this the right way to change it? To make a PR again? --- source/_components/sensor.zabbix.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.zabbix.markdown b/source/_components/sensor.zabbix.markdown index e9201ac2e40..9ac7107bcd3 100644 --- a/source/_components/sensor.zabbix.markdown +++ b/source/_components/sensor.zabbix.markdown @@ -39,7 +39,7 @@ triggers: name: description: Allows you to specify the name for the Sensor, otherwise the host name, as stored in Zabbix, is used. This is useful when you are specifying a list of hostids to monitor as a single count. required: false - type: strng + type: string hostids: description: This is a list of Zabbix hostids that we want to filter our count on. required: false From 5a05ac3c3c9e9b13f560e85bc0f419143eb7b4f2 Mon Sep 17 00:00:00 2001 From: Amir Hanan Date: Wed, 3 Oct 2018 17:59:46 +0300 Subject: [PATCH 071/114] Device comparability notes / how to activate (#6470) Took me a while to figure out how I could use it on my older model iPhone 6.... --- source/_docs/ecosystem/ios/notifications/actions.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/_docs/ecosystem/ios/notifications/actions.markdown b/source/_docs/ecosystem/ios/notifications/actions.markdown index eb66feb66f3..3112ae06a33 100644 --- a/source/_docs/ecosystem/ios/notifications/actions.markdown +++ b/source/_docs/ecosystem/ios/notifications/actions.markdown @@ -142,3 +142,9 @@ Notes: * `textInput` will only exist if `behavior` was set to `textInput`. * `actionData` is a dictionary with parameters passed in the `action_data` dictionary of the `push` dictionary in the original notification. * When adding or updating push categories be sure to update push settings within the Home Assistant iOS app. This can be found within the app at **Settings** (gear icon) > **Notification Settings**. + +## {% linkable_title Compatibility with different devices %} + +* For devices that support "Force Touch" / "3D Touch" - a long press on the notification will cause the actions to appear. Devices such as iPhone 6S, iPhone 6S Plus, iPhone 7, iPhone 7 Plus, iPhone 8, iPhone 8 Plus, iPhone X, iPhone XS, iPhone XS Max as well as some iPad and Apple Watch models. + +* For device that do not support this feature - a left to right swipe on the notification + tap on 'View' button, will cause the relevant actions to appear. Devices such as iPhone 6 and below, iPhone SE, iPhone XR as some iPad models. From 77ea57b16161f391cd2fce056aa5f1e398d77a20 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 3 Oct 2018 17:11:56 +0200 Subject: [PATCH 072/114] Add 'ha_qa_scale' (#6471) --- source/_components/alarm_control_panel.manual.markdown | 3 ++- source/_components/binary_sensor.bayesian.markdown | 1 + source/_components/binary_sensor.ping.markdown | 1 + source/_components/binary_sensor.template.markdown | 1 + source/_components/binary_sensor.threshold.markdown | 1 + source/_components/binary_sensor.workday.markdown | 1 + source/_components/browser.markdown | 1 + source/_components/conversation.markdown | 1 + source/_components/cover.group.markdown | 1 + source/_components/cover.template.markdown | 1 + source/_components/device_sun_light_trigger.markdown | 1 + source/_components/device_tracker.ping.markdown | 1 + source/_components/downloader.markdown | 1 + source/_components/fan.template.markdown | 1 + source/_components/folder_watcher.markdown | 1 + source/_components/group.markdown | 1 + source/_components/history.markdown | 1 + source/_components/history_graph.markdown | 2 ++ source/_components/intent_script.markdown | 3 ++- source/_components/light.group.markdown | 1 + source/_components/light.template.markdown | 1 + source/_components/logger.markdown | 1 + source/_components/media_extractor.markdown | 1 + source/_components/media_player.universal.markdown | 2 +- source/_components/notify.group.markdown | 1 + source/_components/plant.markdown | 1 + source/_components/recorder.markdown | 1 + source/_components/scene.markdown | 1 + source/_components/sensor.api_stream.markdown | 1 + source/_components/sensor.history_stats.markdown | 1 + source/_components/sensor.min_max.markdown | 1 + source/_components/sensor.mold_indicator.markdown | 3 ++- source/_components/sensor.moon.markdown | 1 + source/_components/sensor.otp.markdown | 1 + source/_components/sensor.season.markdown | 1 + source/_components/sensor.simulated.markdown | 1 + source/_components/sensor.template.markdown | 1 + source/_components/sensor.time_date.markdown | 1 + source/_components/sensor.uptime.markdown | 1 + source/_components/sensor.version.markdown | 1 + source/_components/sensor.worldclock.markdown | 1 + source/_components/shopping_list.markdown | 1 + source/_components/sun.markdown | 1 + source/_components/switch.flux.markdown | 1 + source/_components/switch.template.markdown | 1 + source/_components/tts.picotts.markdown | 2 +- source/_components/websocket_api.markdown | 1 + 47 files changed, 51 insertions(+), 5 deletions(-) diff --git a/source/_components/alarm_control_panel.manual.markdown b/source/_components/alarm_control_panel.manual.markdown index feeda4b7684..2db745df1f0 100644 --- a/source/_components/alarm_control_panel.manual.markdown +++ b/source/_components/alarm_control_panel.manual.markdown @@ -10,10 +10,11 @@ footer: true logo: home-assistant.png ha_category: Alarm ha_release: 0.7.6 +ha_qa_scale: internal --- -This platform enables you to set manual alarms in Home Assistant. +The `manual` alarm control panel platform enables you to set manual alarms in Home Assistant. ```yaml # Example configuration.yaml entry diff --git a/source/_components/binary_sensor.bayesian.markdown b/source/_components/binary_sensor.bayesian.markdown index 228e8ac15bf..a5b1779ce58 100644 --- a/source/_components/binary_sensor.bayesian.markdown +++ b/source/_components/binary_sensor.bayesian.markdown @@ -11,6 +11,7 @@ logo: home-assistant.png ha_category: Utility ha_iot_class: "Local Polling" ha_release: 0.53 +ha_qa_scale: internal --- diff --git a/source/_components/binary_sensor.ping.markdown b/source/_components/binary_sensor.ping.markdown index 37121004e44..b5cc32fe9b8 100644 --- a/source/_components/binary_sensor.ping.markdown +++ b/source/_components/binary_sensor.ping.markdown @@ -10,6 +10,7 @@ footer: true logo: home-assistant.png ha_category: Network ha_release: 0.43 +ha_qa_scale: internal --- diff --git a/source/_components/binary_sensor.template.markdown b/source/_components/binary_sensor.template.markdown index dbb51d60479..d2365b7638c 100644 --- a/source/_components/binary_sensor.template.markdown +++ b/source/_components/binary_sensor.template.markdown @@ -11,6 +11,7 @@ ha_category: Binary Sensor ha_release: 0.12 ha_iot_class: "Local Push" logo: home-assistant.png +ha_qa_scale: internal --- The `template` platform supports sensors which breaks out the `state` and diff --git a/source/_components/binary_sensor.threshold.markdown b/source/_components/binary_sensor.threshold.markdown index a33b404772c..a512fff4d2f 100644 --- a/source/_components/binary_sensor.threshold.markdown +++ b/source/_components/binary_sensor.threshold.markdown @@ -11,6 +11,7 @@ logo: home-assistant.png ha_category: Utility ha_iot_class: "Local Polling" ha_release: 0.34 +ha_qa_scale: internal --- diff --git a/source/_components/binary_sensor.workday.markdown b/source/_components/binary_sensor.workday.markdown index 213eb37ff8a..c589e08bcfd 100644 --- a/source/_components/binary_sensor.workday.markdown +++ b/source/_components/binary_sensor.workday.markdown @@ -11,6 +11,7 @@ logo: home-assistant.png ha_category: Utility ha_iot_class: "Local Polling" ha_release: 0.41 +ha_qa_scale: internal --- The `workday` binary sensor indicates, whether the current day is a workday or diff --git a/source/_components/browser.markdown b/source/_components/browser.markdown index 6325fef367a..7edd741593f 100644 --- a/source/_components/browser.markdown +++ b/source/_components/browser.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: home-assistant.png ha_category: Utility +ha_qa_scale: internal --- diff --git a/source/_components/conversation.markdown b/source/_components/conversation.markdown index e9bb86aaabc..ed949157290 100644 --- a/source/_components/conversation.markdown +++ b/source/_components/conversation.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: home-assistant.png ha_category: "Voice" +ha_qa_scale: internal --- The conversation component allows you to converse with Home Assistant. You can either converse by pressing the microphone in the frontend (supported browsers only (no iOS)) or by calling the `conversation/process` service with the transcribed text. diff --git a/source/_components/cover.group.markdown b/source/_components/cover.group.markdown index c29b4b46a1d..93f50ab5785 100644 --- a/source/_components/cover.group.markdown +++ b/source/_components/cover.group.markdown @@ -11,6 +11,7 @@ ha_category: Cover ha_release: 0.66 ha_iot_class: "Local Push" logo: home-assistant.png +ha_qa_scale: internal --- The `group` platform can create a cover that combines several cover entities into one. diff --git a/source/_components/cover.template.markdown b/source/_components/cover.template.markdown index fc3f6b8db92..b7118e97961 100644 --- a/source/_components/cover.template.markdown +++ b/source/_components/cover.template.markdown @@ -11,6 +11,7 @@ ha_category: Cover ha_release: 0.48 ha_iot_class: "Local Push" logo: home-assistant.png +ha_qa_scale: internal --- The `template` platform can create covers that combine components and provides diff --git a/source/_components/device_sun_light_trigger.markdown b/source/_components/device_sun_light_trigger.markdown index d49c4e1565f..2be37360ace 100644 --- a/source/_components/device_sun_light_trigger.markdown +++ b/source/_components/device_sun_light_trigger.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: home-assistant.png ha_category: Automation +ha_qa_scale: internal --- Home Assistant has a built-in component called `device_sun_light_trigger` to help you automate your lights. The component will: diff --git a/source/_components/device_tracker.ping.markdown b/source/_components/device_tracker.ping.markdown index 41981a2795a..84c41802c23 100644 --- a/source/_components/device_tracker.ping.markdown +++ b/source/_components/device_tracker.ping.markdown @@ -10,6 +10,7 @@ footer: true logo: home-assistant.png ha_category: Network ha_release: 0.36 +ha_qa_scale: internal --- diff --git a/source/_components/downloader.markdown b/source/_components/downloader.markdown index beec2268765..f41c2fd1168 100644 --- a/source/_components/downloader.markdown +++ b/source/_components/downloader.markdown @@ -10,6 +10,7 @@ footer: true logo: home-assistant.png ha_category: Downloading ha_release: pre 0.7 +ha_qa_scale: internal --- The `downloader` component provides a service to download files. It will raise an error and not continue to set itself up when the download directory does not exist. The directory needs to be writable for the user that is running Home Assistant. diff --git a/source/_components/fan.template.markdown b/source/_components/fan.template.markdown index 974eb7508e4..189cad7ad79 100644 --- a/source/_components/fan.template.markdown +++ b/source/_components/fan.template.markdown @@ -11,6 +11,7 @@ ha_category: Fan ha_release: 0.69 ha_iot_class: "Local Push" logo: home-assistant.png +ha_qa_scale: internal --- The `template` platform creates fans that combine components and provides the diff --git a/source/_components/folder_watcher.markdown b/source/_components/folder_watcher.markdown index 338f0c7fdb0..1616a285b03 100644 --- a/source/_components/folder_watcher.markdown +++ b/source/_components/folder_watcher.markdown @@ -11,6 +11,7 @@ logo: home-assistant.png ha_category: System Monitor ha_iot_class: "Local Polling" ha_release: 0.67 +ha_qa_scale: internal --- This component adds [Watchdog](https://pythonhosted.org/watchdog/) file system monitoring, publishing events on the Home Assistant bus on the creation/deletion/modification of files within configured folders. The monitored `event_type` are: diff --git a/source/_components/group.markdown b/source/_components/group.markdown index 924c55e24ac..5e5232e86aa 100644 --- a/source/_components/group.markdown +++ b/source/_components/group.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: home-assistant.png ha_category: Organization +ha_qa_scale: internal --- Groups allow the user to combine multiple entities into one. A group can be promoted to a **view** by setting `view: yes` under the group definition. This will make the group available as a new tab in the frontend. diff --git a/source/_components/history.markdown b/source/_components/history.markdown index cb8056ff091..f372a33e4a8 100644 --- a/source/_components/history.markdown +++ b/source/_components/history.markdown @@ -10,6 +10,7 @@ footer: true logo: home-assistant.png ha_category: History ha_release: pre 0.7 +ha_qa_scale: internal --- The `history` component will track everything that is going on within Home diff --git a/source/_components/history_graph.markdown b/source/_components/history_graph.markdown index f38cd482907..5059d1ba1cb 100644 --- a/source/_components/history_graph.markdown +++ b/source/_components/history_graph.markdown @@ -10,7 +10,9 @@ footer: true ha_category: History logo: home-assistant.png ha_release: "0.55" +ha_qa_scale: internal --- +

diff --git a/source/_components/intent_script.markdown b/source/_components/intent_script.markdown index eab43f4b930..17e664d3808 100644 --- a/source/_components/intent_script.markdown +++ b/source/_components/intent_script.markdown @@ -10,9 +10,10 @@ footer: true logo: home-assistant.png ha_category: Intent ha_release: "0.50" +ha_qa_scale: internal --- -The intent_script component allows users to configure actions and responses to intents. Intents can be fired by any component that supports it. Examples are [Alexa](/components/alexa/) (Amazon Echo), [API.ai](/components/dialogflow/) (Google Assistant) and [Snips](/components/snips/). +The `intent_script` component allows users to configure actions and responses to intents. Intents can be fired by any component that supports it. Examples are [Alexa](/components/alexa/) (Amazon Echo), [API.ai](/components/dialogflow/) (Google Assistant) and [Snips](/components/snips/). ```yaml # Example configuration.yaml entry diff --git a/source/_components/light.group.markdown b/source/_components/light.group.markdown index 4ec8262463d..c70a6e7e78f 100644 --- a/source/_components/light.group.markdown +++ b/source/_components/light.group.markdown @@ -11,6 +11,7 @@ ha_category: Light ha_release: 0.65 ha_iot_class: "Local Push" logo: home-assistant.png +ha_qa_scale: internal --- The group light platform lets you combine multiple lights into one entity. All child lights of a light group can still be used as usual, but controlling the state of the grouped light will forward the command to each child light. diff --git a/source/_components/light.template.markdown b/source/_components/light.template.markdown index c66f688365c..5ac3c4189b1 100644 --- a/source/_components/light.template.markdown +++ b/source/_components/light.template.markdown @@ -11,6 +11,7 @@ ha_category: Light ha_release: 0.46 ha_iot_class: "Local Push" logo: home-assistant.png +ha_qa_scale: internal --- The `template` platform creates lights that combine components and provides the diff --git a/source/_components/logger.markdown b/source/_components/logger.markdown index cbbf133ac79..9fa7c1b3e12 100644 --- a/source/_components/logger.markdown +++ b/source/_components/logger.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: home-assistant.png ha_category: "Utility" +ha_qa_scale: internal --- The `logger` component lets you define the level of logging activities in Home diff --git a/source/_components/media_extractor.markdown b/source/_components/media_extractor.markdown index 8386b0390a3..60b03259a0e 100644 --- a/source/_components/media_extractor.markdown +++ b/source/_components/media_extractor.markdown @@ -10,6 +10,7 @@ footer: true logo: home-assistant.png ha_category: Media Player ha_release: 0.49 +ha_qa_scale: internal --- diff --git a/source/_components/media_player.universal.markdown b/source/_components/media_player.universal.markdown index 76cbc4a4ba6..bd8d5a07386 100644 --- a/source/_components/media_player.universal.markdown +++ b/source/_components/media_player.universal.markdown @@ -9,7 +9,7 @@ sharing: true footer: true logo: home-assistant.png ha_category: Media Player -featured: false +ha_qa_scale: internal --- Universal Media Players combine multiple existing entities in Home Assistant into one media player entity. This is used for creating a single entity that controls an entire media center. diff --git a/source/_components/notify.group.markdown b/source/_components/notify.group.markdown index 928de178e78..943eb26961b 100644 --- a/source/_components/notify.group.markdown +++ b/source/_components/notify.group.markdown @@ -10,6 +10,7 @@ footer: true logo: home-assistant.png ha_category: Notifications ha_release: 0.26 +ha_qa_scale: internal --- The `group` notification platform allows you to combine multiple `notify` platforms into a single service. diff --git a/source/_components/plant.markdown b/source/_components/plant.markdown index df2947e19da..b133b98f942 100644 --- a/source/_components/plant.markdown +++ b/source/_components/plant.markdown @@ -10,6 +10,7 @@ footer: true logo: home-assistant.png ha_category: Environment ha_release: 0.44 +ha_qa_scale: internal --- This`plant`component lets you merge moisture, conductivity, light intensity, temperature and battery level for a plant into a single UI element. It also supports setting minimum and maximum values for each measurement and will change its state to "problem" if it is not within those limits. diff --git a/source/_components/recorder.markdown b/source/_components/recorder.markdown index 8a6703f0ed4..b4662ca0908 100644 --- a/source/_components/recorder.markdown +++ b/source/_components/recorder.markdown @@ -10,6 +10,7 @@ footer: true logo: home-assistant.png ha_category: "History" ha_release: pre 0.7 +ha_qa_scale: internal --- The `recorder` component is storing details in a database which then are handled by the [`history` component](/components/history/). diff --git a/source/_components/scene.markdown b/source/_components/scene.markdown index 4bf9f168f75..48998818971 100644 --- a/source/_components/scene.markdown +++ b/source/_components/scene.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: home-assistant.png ha_category: Organization +ha_qa_scale: internal --- You can create scenes that capture the states you want certain entities to be. For example, a scene can specify that light A should be turned on and light B should be bright red. diff --git a/source/_components/sensor.api_stream.markdown b/source/_components/sensor.api_stream.markdown index cdc4541c29d..f3178306615 100644 --- a/source/_components/sensor.api_stream.markdown +++ b/source/_components/sensor.api_stream.markdown @@ -11,6 +11,7 @@ logo: home-assistant.png ha_category: Utility ha_release: 0.33 ha_iot_class: "Local Push" +ha_qa_scale: internal --- The `api_stream` sensor platform shows how many clients are connected to the stream API diff --git a/source/_components/sensor.history_stats.markdown b/source/_components/sensor.history_stats.markdown index d324bc26b52..8a9c76b7ebb 100644 --- a/source/_components/sensor.history_stats.markdown +++ b/source/_components/sensor.history_stats.markdown @@ -11,6 +11,7 @@ logo: home-assistant.png ha_category: Utility ha_iot_class: "Local Polling" ha_release: 0.39 +ha_qa_scale: internal --- The `history_stats` sensor platform provides quick statistics about another component or platforms, using data from the [history](/components/history/). diff --git a/source/_components/sensor.min_max.markdown b/source/_components/sensor.min_max.markdown index 4606862da2d..be649657ae8 100644 --- a/source/_components/sensor.min_max.markdown +++ b/source/_components/sensor.min_max.markdown @@ -11,6 +11,7 @@ logo: home-assistant.png ha_category: Utility ha_iot_class: "Local Polling" ha_release: "0.31" +ha_qa_scale: internal --- diff --git a/source/_components/sensor.mold_indicator.markdown b/source/_components/sensor.mold_indicator.markdown index e2d870f7924..f4f86197cc8 100644 --- a/source/_components/sensor.mold_indicator.markdown +++ b/source/_components/sensor.mold_indicator.markdown @@ -9,8 +9,9 @@ sharing: true footer: true logo: home-assistant.png ha_category: Environment -ha_release: '0.20' +ha_release: "0.20" ha_iot_class: "Local Polling" +ha_qa_scale: internal --- The Mold Indicator sensor component consumes information of two temperature sensors and a humidity sensor to give an indication for possible mold growth in your home. In case of bad ventilation and insulation, the indoor humidity may lead to condensation on cold surfaces as the windows or even walls. Condensation or a high relative humidity near those cold surfaces leads to a higher risk for mold growth. This sensor component estimates the temperature at a pre-calibrated critical point in the room (the coldest surface) and calculates the relative humidity of the air at that point. If the sensor value rises above approximately 70 percent, mold growth might occur and the room should be ventilated. At 100%, the air humidity condensates at the critical point. diff --git a/source/_components/sensor.moon.markdown b/source/_components/sensor.moon.markdown index 6a292040da2..5e7aadde293 100644 --- a/source/_components/sensor.moon.markdown +++ b/source/_components/sensor.moon.markdown @@ -11,6 +11,7 @@ logo: home-assistant.png ha_category: Environment ha_iot_class: "Local Polling" ha_release: 0.38 +ha_qa_scale: internal --- diff --git a/source/_components/sensor.otp.markdown b/source/_components/sensor.otp.markdown index 3f0cd12d337..2364e986398 100644 --- a/source/_components/sensor.otp.markdown +++ b/source/_components/sensor.otp.markdown @@ -11,6 +11,7 @@ logo: home-assistant.png ha_category: Utility ha_iot_class: "Local Polling" ha_release: 0.49 +ha_qa_scale: internal --- 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. diff --git a/source/_components/sensor.season.markdown b/source/_components/sensor.season.markdown index 9e2ecc39c74..c2ce54a145c 100644 --- a/source/_components/sensor.season.markdown +++ b/source/_components/sensor.season.markdown @@ -11,6 +11,7 @@ ha_category: Utility logo: home-assistant.png ha_iot_class: "Local Polling" ha_release: 0.53 +ha_qa_scale: internal --- The `season` sensor will display the current astronomical or meteorological season (Spring, Summer, Autumn, Winter) based on the user's setting in the configuration file. diff --git a/source/_components/sensor.simulated.markdown b/source/_components/sensor.simulated.markdown index e4ef0bd1d1c..b54ecd4234d 100644 --- a/source/_components/sensor.simulated.markdown +++ b/source/_components/sensor.simulated.markdown @@ -11,6 +11,7 @@ logo: home-assistant.png ha_category: Utility ha_iot_class: "Local Polling" ha_release: 0.65 +ha_qa_scale: internal --- The `simulated` sensor platform provides a simulated sensor that generates a time-varying signal `V(t)` given by the [function](https://en.wikipedia.org/wiki/Sine_wave): diff --git a/source/_components/sensor.template.markdown b/source/_components/sensor.template.markdown index 14f2b07ff17..c2942d023a0 100644 --- a/source/_components/sensor.template.markdown +++ b/source/_components/sensor.template.markdown @@ -11,6 +11,7 @@ ha_category: Sensor ha_release: 0.12 ha_iot_class: "Local Push" logo: home-assistant.png +ha_qa_scale: internal --- The `template` platform supports sensors which break out `state_attributes` from other entities. diff --git a/source/_components/sensor.time_date.markdown b/source/_components/sensor.time_date.markdown index ce9547358eb..4a922a7e408 100644 --- a/source/_components/sensor.time_date.markdown +++ b/source/_components/sensor.time_date.markdown @@ -11,6 +11,7 @@ logo: home-assistant.png ha_category: Calendar ha_iot_class: "Local Push" ha_release: pre 0.7 +ha_qa_scale: internal --- diff --git a/source/_components/sensor.uptime.markdown b/source/_components/sensor.uptime.markdown index 30f8cdadb29..c55011e0cff 100644 --- a/source/_components/sensor.uptime.markdown +++ b/source/_components/sensor.uptime.markdown @@ -11,6 +11,7 @@ ha_category: Utility ha_iot_class: "Local Pushing" logo: home-assistant.png ha_release: 0.56 +ha_qa_scale: internal --- diff --git a/source/_components/sensor.version.markdown b/source/_components/sensor.version.markdown index 20e48d1fcd1..92437ab87a8 100644 --- a/source/_components/sensor.version.markdown +++ b/source/_components/sensor.version.markdown @@ -11,6 +11,7 @@ ha_category: Utility ha_iot_class: "Local Pushing" logo: home-assistant.png ha_release: 0.52 +ha_qa_scale: internal --- The `version` sensor platform is displaying the current version of Home Assistant in the frontend. diff --git a/source/_components/sensor.worldclock.markdown b/source/_components/sensor.worldclock.markdown index c35d652f10c..620e2935518 100644 --- a/source/_components/sensor.worldclock.markdown +++ b/source/_components/sensor.worldclock.markdown @@ -11,6 +11,7 @@ logo: home-assistant.png ha_category: Calendar ha_iot_class: "Local Push" ha_release: pre 0.7 +ha_qa_scale: internal --- diff --git a/source/_components/shopping_list.markdown b/source/_components/shopping_list.markdown index e99b96e7b3a..09597900327 100644 --- a/source/_components/shopping_list.markdown +++ b/source/_components/shopping_list.markdown @@ -10,6 +10,7 @@ footer: true logo: home-assistant.png ha_category: Intent ha_release: "0.50" +ha_qa_scale: internal --- The `shopping_list` component allows you to keep track of shopping list items. Includes the ability to add items via your voice using the sentence "Add eggs to my shopping list". diff --git a/source/_components/sun.markdown b/source/_components/sun.markdown index 54600bac2a0..d56854b01b2 100644 --- a/source/_components/sun.markdown +++ b/source/_components/sun.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: home-assistant.png ha_category: Environment +ha_qa_scale: internal --- The sun component will use your current location to track if the sun is above or diff --git a/source/_components/switch.flux.markdown b/source/_components/switch.flux.markdown index 41df4100657..cb9668f74c2 100644 --- a/source/_components/switch.flux.markdown +++ b/source/_components/switch.flux.markdown @@ -10,6 +10,7 @@ footer: true ha_category: Automation ha_release: 0.21 logo: home-assistant.png +ha_qa_scale: internal --- The `flux` switch platform will change the temperature of your lights similar to the way flux works on your computer, using circadian rhythm. They will be bright during the day, and gradually fade to a red/orange at night. diff --git a/source/_components/switch.template.markdown b/source/_components/switch.template.markdown index 9051ca4bb46..e3badda4bcc 100644 --- a/source/_components/switch.template.markdown +++ b/source/_components/switch.template.markdown @@ -11,6 +11,7 @@ ha_category: Switch ha_release: 0.13 ha_iot_class: "Local Push" logo: home-assistant.png +ha_qa_scale: internal --- The `template` platform creates switches that combines components. diff --git a/source/_components/tts.picotts.markdown b/source/_components/tts.picotts.markdown index 5525c0b8ecb..49fb5823d41 100644 --- a/source/_components/tts.picotts.markdown +++ b/source/_components/tts.picotts.markdown @@ -14,7 +14,7 @@ ha_release: 0.36 The `picotts` text-to-speech platform uses offline pico Text-to-Speech engine to read a text with natural sounding voices. This requires to install the pico tts library on the system, typically on debian just do `sudo apt-get install libttspico-utils` -On some raspbian release, this package is missing but you can just copy the arm deb package from debian. +On some Raspbian release, this package is missing but you can just copy the arm deb package from debian. To enable text-to-speech with Pico, add the following lines to your `configuration.yaml`: diff --git a/source/_components/websocket_api.markdown b/source/_components/websocket_api.markdown index 7711d202b82..4457f2feeac 100644 --- a/source/_components/websocket_api.markdown +++ b/source/_components/websocket_api.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: home-assistant.png ha_category: "Other" +ha_qa_scale: internal --- The `websocket_api` component set up a WebSocket API and allows one to interact with a Home Assistant instance that is running headless. This component depends on the [`http` component](/components/http/). From de23dc5646f36af780a292846a12a9c2ec721c7f Mon Sep 17 00:00:00 2001 From: Adam <22942687+SilvrrGIT@users.noreply.github.com> Date: Wed, 3 Oct 2018 10:20:50 -0500 Subject: [PATCH 073/114] Update duckdns.markdown (#6469) * Update duckdns.markdown I thought this note was there previously, just a helpful note to avoid double dipping for some users. * Small fixes * Update style for configuration sample --- source/_components/duckdns.markdown | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/source/_components/duckdns.markdown b/source/_components/duckdns.markdown index 96f9fc3c917..7b67ed702e3 100644 --- a/source/_components/duckdns.markdown +++ b/source/_components/duckdns.markdown @@ -22,8 +22,8 @@ To use the component in your installation, add the following to your `configurat ```yaml # Example configuration.yaml entry duckdns: - domain: mysubdomain - access_token: abcdefgh + domain: YOUR_SUBDOMAIN + access_token: YOUR_ACCSS_TOKEN ``` {% configuration duckdns %} @@ -36,3 +36,7 @@ duckdns: required: true type: string {% endconfiguration %} + +

+If you are running the Hass.io [DuckDNS add-on](/addons/duckdns/) this component is not required. The add-on will keep your IP updated with DuckDNS. +

From 86b354300863917e76e1dff122dbe94eef0f4307 Mon Sep 17 00:00:00 2001 From: Tsvi Mostovicz Date: Wed, 3 Oct 2018 19:39:56 +0300 Subject: [PATCH 074/114] Fix typo as mentioned by @dshanske: diaspora not disapora (#6477) The code is ok. The issue is in the docs only. https://github.com/home-assistant/home-assistant/pull/16393#issuecomment-425751560 --- source/_components/sensor.jewish_calendar.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/sensor.jewish_calendar.markdown b/source/_components/sensor.jewish_calendar.markdown index f24ecb3440c..53002877895 100644 --- a/source/_components/sensor.jewish_calendar.markdown +++ b/source/_components/sensor.jewish_calendar.markdown @@ -40,7 +40,7 @@ longitude: description: Longitude for time calculations of the sensor. default: Home Assistant location type: integer -disapora: +diaspora: required: false description: Consider the location as diaspora or not for calculation of the weekly portion and holidays. default: False @@ -89,7 +89,7 @@ sensors: sensor: - platform: jewish_calendar language: english - disapora: True + diaspora: True sensors: - date - weekly_portion From 6c31e3be04a29ea535a62b3cb22e4d647aac8738 Mon Sep 17 00:00:00 2001 From: DubhAd Date: Wed, 3 Oct 2018 17:40:43 +0100 Subject: [PATCH 075/114] Adding detail about initial state (#6475) It's always been a bit of mystery why automations sometimes get turned off. This should shed some light on it. I appreciate the intent is to fix this, but until it's fixed, it makes sense to document it. --- source/_docs/automation.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_docs/automation.markdown b/source/_docs/automation.markdown index 6729aa4fcb4..99ace9bb2e7 100644 --- a/source/_docs/automation.markdown +++ b/source/_docs/automation.markdown @@ -49,7 +49,7 @@ Actions are all about calling services. To explore the available services open t ### {% linkable_title Automation initial state %} -You have to set an initial state in your automations in order for Home Assistant to enable them upon restart. +You have to set an initial state in your automations in order for Home Assistant to always enable them upon restart. ```text automation: @@ -58,3 +58,5 @@ automation: trigger: ... ``` + +If you don't set this the previous state is restored. If you shut Home Assistant down before it finishes starting, the automation will be stored as being off, and your automations will be disabled at the next startup. From d83d2fcd4bc90c3b0aaf2472e8ebac32da99c8cc Mon Sep 17 00:00:00 2001 From: DubhAd Date: Wed, 3 Oct 2018 18:03:13 +0100 Subject: [PATCH 076/114] Fixing edit rot (#6473) * Fixing edit rot Lost some line breaks. The note box also broke the numbering flow. * :pencil2: Tweak --- source/_components/google_assistant.markdown | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/source/_components/google_assistant.markdown b/source/_components/google_assistant.markdown index c2bb9d3d90e..194a59fcb58 100644 --- a/source/_components/google_assistant.markdown +++ b/source/_components/google_assistant.markdown @@ -31,22 +31,20 @@ You need to create an API Key with the [Google Console](https://console.cloud.go 1. Create a new project in the [Actions on Google console](https://console.actions.google.com/). a. Add/Import project, give it a name - b. Click on `Home Control` card, select the `Smart home` recommendation. + b. Click on `Home Control` card, select the `Smart home` recommendation. c. Create an Action, under the build section. Add in your Home Assistant URL: `https://[YOUR HOME ASSISTANT URL:PORT]/api/google_assistant`, replace the `[YOUR HOME ASSISTANT URL:PORT]` with the domain / ip address and the port under which your Home Assistant is reachable. d. Click `Done`. Then click on `Overview`, which will lead you back to the app details screen. -2. `Account linking` is required for your app to interact with Home Assistant. Set this up under the `Quick Setup` section +2. `Account linking` is required for your app to interact with Home Assistant. Set this up under the `Quick Setup` section a. Leave it at the default `No, I only want to allow account creation on my website` and select Next b. For the `Linking type` select `OAuth` and `Implicit` - c. Client ID: The `client_id` from your Home Assistant configuration above + c. Client ID: The `client_id` from your Home Assistant configuration (see below) d. Authorization URL (replace with your actual URL): `https://[YOUR HOME ASSISTANT URL:PORT]/api/google_assistant/auth`. e. Configure your client. Add scopes for `email` and `name`. f. Testing instructions: Enter anything. It doesn't matter since you won't submit this app. 3. Back on the overview page. Click `Simulator` under `TEST`. You don't have to actually test . 4. If you haven't already added the component configuration to `configuration.yaml` file and restarted Home Assistant, you'll be unable to continue until you have. -5. Open the Google Assistant app and go into `Settings > Home Control`. Or on your Android phone or tablet, touch and hold the Home button or say "Ok Google.". At the top right, tap compass icon and then more icon and then `Settings > Home Control`. -

+5. Open the Google Assistant app and go into `Settings > Home Control`. Or on your Android phone or tablet, touch and hold the Home button or say "Ok Google.". At the top right, tap compass icon and then more icon and then `Settings > Home Control`. If you have added the [Home Assistant "web app"](/docs/frontend/mobile/) to your phone's homescreen before, you need remove it before next step -

6. Click the `+` sign, and near the bottom, you should have `[test] your app name`. Selecting that should lead you the screen where you can set rooms for your devices or nicknames for your devices. 7. If you want to allow other household users to control the devices: a. Go to the settings for the project you created in point 1 in the developer console. @@ -86,10 +84,7 @@ google_assistant: room: living room ``` -Configuration variables: - {% configuration %} - project_id: description: Project ID from the Google Developer console (looks like `words-2ab12`) required: true From 848fc8b5150a5bed60575dd4037caf311705aec4 Mon Sep 17 00:00:00 2001 From: Amir Hanan Date: Wed, 3 Oct 2018 20:03:39 +0300 Subject: [PATCH 077/114] Example and tip for automation usage (#6472) * Example and tip for automation usage Some clarifications following recent new automation I added using the component. * Update following review comments Thanks! * :pencil2: Tweak --- source/_components/remote.harmony.markdown | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/source/_components/remote.harmony.markdown b/source/_components/remote.harmony.markdown index c6178d048c9..6785cdb9fc4 100644 --- a/source/_components/remote.harmony.markdown +++ b/source/_components/remote.harmony.markdown @@ -13,7 +13,6 @@ ha_iot_class: "Local Push" ha_release: "0.34" --- - The `harmony` remote platform allows you to control the state of your [Harmony Hub Device](http://www.logitech.com/en-us/product/harmony-hub). Supported units: @@ -77,6 +76,25 @@ Start an activity. Will start the default `activity` from configuration.yaml if | `entity_id` | yes | Only act on a specific remote, else target all. | `activity` | yes | Activity ID or Activity Name to start. +##### {% linkable_title Example %} + +In the file 'harmony_REMOTENAME.conf' you can find the available activities, for example: + +```text +Activities + 22054907 - Watch TV +``` + +Using the activity name 'Watch TV', you can call a service via automation to switch this activity on: + +```yaml +action: + - service: remote.turn_on + entity_id: remote.bed_room_hub + data: + activity: "Watch TV" +``` + ### {% linkable_title Service `remote.send_command` %} Send a single command or a set of commands to one device, device ID and available commands are written to the configuration file at startup. You can optionally specify the number of times you wish to repeat the command(s) and delay you want between repeated command(s). From ed0a2bbc28a81b766452b6d724dc04dfc7f9f84b Mon Sep 17 00:00:00 2001 From: Adam <22942687+SilvrrGIT@users.noreply.github.com> Date: Wed, 3 Oct 2018 12:20:30 -0500 Subject: [PATCH 078/114] Add second computer and setup note (#6478) * Add second computer and setup note Added a second computer to the config example as I was stumped for a bit on how to get a second one entered. Its obvious now but has stumped others too based on forum searches. The note is another hiccup some may run into. I listed the problem and promoted the user to search for the windows settings changes. I assume HomeAssistant doesn't want to specify firewall and registry settings to be made. * Fix a typo and update the style * :pencil2: Spelling and grammar --- source/_addons/rpc_shutdown.markdown | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/source/_addons/rpc_shutdown.markdown b/source/_addons/rpc_shutdown.markdown index d098c1d1d33..a7647690562 100644 --- a/source/_addons/rpc_shutdown.markdown +++ b/source/_addons/rpc_shutdown.markdown @@ -15,9 +15,14 @@ Allows you to shut down a Windows computer with a service call from Home Assista { "computers": [ { - "alias": "test-pc", + "alias": "test-pc-1", "address": "192.168.0.1", "credentials": "user%password" + }, + { + "alias": "test-pc-2", + "address": "192.168.0.2", + "credentials": "user%password" } ] } @@ -38,3 +43,7 @@ data: addon: core_rpc_shutdown input: test-pc ``` + +

+The `user` specified in the credentials should be an applicable user listed in `C:/Users`. This may differ from the username used to login to Windows. Depending on your settings and privileges within Windows, changes to the firewall, UAC (User Account Control) and registry settings may be required to allow this add-on to remotely shut down your computer. There are many guides available online on how to adjust these settings. +

From 9d76769e31a811cb50526e9ab3a44ced91254994 Mon Sep 17 00:00:00 2001 From: Mryck Date: Wed, 3 Oct 2018 19:43:23 +0200 Subject: [PATCH 079/114] Update Xiaomi devices for Configuration variables (#6465) * Configuration Variables Lifx light * Update Xiaomi devices for Configuration variables * :pencil2: Tweaks * :pencil2: Tweaks * :ambulance: Quotes * :ambulance: Quotes * :ambulance: Quotes * :pencil2: Removed extra new line * :ambulance: Fixing build * :ambulance: Fixing build * :ambulance: Fixing Build * :ambulance: Fixing build * :ambulance: Fixing build * :ambulance: Fix build * :rocket: Retrigger build --- source/_components/camera.xiaomi.markdown | 48 ++++++++++++++----- .../device_tracker.xiaomi.markdown | 22 ++++++--- .../media_player.xiaomi_tv.markdown | 15 ++++-- 3 files changed, 62 insertions(+), 23 deletions(-) diff --git a/source/_components/camera.xiaomi.markdown b/source/_components/camera.xiaomi.markdown index d326e7b9c20..14c4f935686 100644 --- a/source/_components/camera.xiaomi.markdown +++ b/source/_components/camera.xiaomi.markdown @@ -13,7 +13,7 @@ ha_release: 0.72 ha_iot_class: "Local Polling" --- -The `Xiaomi` camera platform allows you to utilize Xiaomi Cameras within Home Assistant. +The `Xiaomi` camera platform allows you to utilize Xiaomi Cameras within Home Assistant. To successfully implement this platform, the Home Assistant host should be capable of multiple simultaneous reads. For every concurrent Home Assistant user, a connection will be made to the camera every 10 seconds. This should normally not be a problem. @@ -53,18 +53,42 @@ camera: name: Camera host: '192.168.1.100' model: 'yi' - password: my_password_123 + password: YOUR_PASSWORD ``` -Configuration variables: - -- **name** (*Required*): A human-friendly name for the camera. -- **host** (*Required*): The IP address or hostname of the camera. -- **model** (*Required*): The model of Xiaomi Camera, currently supporting yi and xiaofang. -- **password** (*Required*): The password to the FTP server on the camera (from above), can be any string as the current firmware doesn't allow setting ftp passwords. -- **path** (*Optional*): The path to the raw MP4 files. Defaults to `/media/mmcblk0p1/record`. -- **username** (*Optional*): The user that can access the FTP server. Defaults to `root`. -- **ffmpeg_arguments** (*Optional*): Extra options to pass to `ffmpeg` (e.g., image quality or video filter options). +{% configuration %} +name: + description: A human-friendly name for the camera. + required: true + type: string +host: + description: The IP address or hostname of the camera. + required: true + type: string +model: + description: The model of Xiaomi Camera, currently supporting yi and xiaofang. + required: true + type: string +password: + description: The password to the FTP server on the camera (from above), can be any string as the current firmware doesn't allow setting ftp passwords. + required: true + type: string +path: + description: The path to the raw MP4 files. + required: false + default: /media/mmcblk0p1/record + type: string +username: + description: The user that can access the FTP server. + required: false + default: root + type: string +ffmpeg_arguments: + description: > + Extra options to pass to `ffmpeg` + required: false + type: string +{% endconfiguration %}

The default for `path:` will not work with all cameras. It may be needed that you add that key with the exact path for your device. @@ -82,7 +106,7 @@ camera: name: My Camera host: '192.168.1.100' model: 'xiaofang' - password: my_password_123 + password: YOUR_PASSWORD path: /home/camera/feed ffmpeg_arguments: '-vf scale=800:450' ``` diff --git a/source/_components/device_tracker.xiaomi.markdown b/source/_components/device_tracker.xiaomi.markdown index d38571007cb..640f240efc2 100644 --- a/source/_components/device_tracker.xiaomi.markdown +++ b/source/_components/device_tracker.xiaomi.markdown @@ -12,7 +12,6 @@ ha_category: Presence Detection ha_release: 0.36 --- - The `xiaomi` platform offers presence detection by looking at connected devices to a [Xiaomi](http://miwifi.com) router. To use an Xiaomi router in your installation, add the following to your `configuration.yaml` file: @@ -25,11 +24,20 @@ device_tracker: password: YOUR_ADMIN_PASSWORD ``` -Configuration variables: - -- **host** (*Required*): The IP address of your router, eg. `192.168.0.1`. -- **username** (*Optional*: The admin username. By default `admin`. -- **password** (*Required*): The password for the admin account. +{% configuration %} +host: + description: "The IP address of your router, e.g., `192.168.0.1`." + required: true + type: string +username: + description: The admin username. + required: false + default: admin + type: string +password: + description: The password for the admin account. + required: true + type: string +{% endconfiguration %} See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. - diff --git a/source/_components/media_player.xiaomi_tv.markdown b/source/_components/media_player.xiaomi_tv.markdown index ffc2f1efc7d..e9c3eeb601b 100644 --- a/source/_components/media_player.xiaomi_tv.markdown +++ b/source/_components/media_player.xiaomi_tv.markdown @@ -29,10 +29,17 @@ media_player: When starting or restarting Home Assistant make sure your TV is off. This is a flaw in the TV itself.

-Configuration variables: - -- **host** (*Optional*): The IP of the Xiaomi TV, eg. 192.168.0.10 -- **name** (*Optional*): The name to use on the frontend. Default is 'Xiaomi TV'. +{% configuration %} +host: + description: "The IP of the Xiaomi TV, e.g., `192.168.0.10`." + required: false + type: string +name: + description: The name to use on the frontend. + required: false + default: Xiaomi TV + type: string +{% endconfiguration %} If you do not set a host in the configuration file, local TVs will automatically be discovered. From 7907badac8b1908672d23af6c045053dc3fb0fc6 Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Wed, 3 Oct 2018 19:50:55 +0200 Subject: [PATCH 080/114] Port using for MariaDB 10 (#6481) The text says that when using a MariaDB 10, you also need to add port 3307 in the link. If you use an external database that is, for example, run at a hosting provider, you have to be careful that you use the correct port! I had assumed (because my database is also MardiaDB 10) that I had to use port 3307, but on inquiry it turned out to be 3306. Hence my adjustment. --- source/_components/recorder.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/recorder.markdown b/source/_components/recorder.markdown index b4662ca0908..230ac6b1bc0 100644 --- a/source/_components/recorder.markdown +++ b/source/_components/recorder.markdown @@ -159,7 +159,7 @@ If the `recorder` component is activated then some components support `restore_s | MS SQL Server | `mssql+pymssql://user:pass@SERVER_IP/DB_NAME?charset=utf8` |

-If you use MariaDB 10 you need to add port 3307 to the SERVER_IP, e.g., `mysql://user:password@SERVER_IP:3307/DB_NAME?charset=utf8`. +If you use MariaDB 10 you need to add port 3307 (or another port depending on which port is used by, for example: your hosting provider.) to the SERVER_IP, e.g., `mysql://user:password@SERVER_IP:3307/DB_NAME?charset=utf8`.

From eb9df96ed2f93c601f0fdeb0c4c54c0649930f7d Mon Sep 17 00:00:00 2001 From: pattyland Date: Wed, 3 Oct 2018 20:19:08 +0200 Subject: [PATCH 081/114] Formatted according to documentation standards (#6441) * Formatted according to documentation standards * Wrap it in quotes * :pencil2: Corrected types --- source/_components/light.hyperion.markdown | 46 +++++++++++++++++----- 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/source/_components/light.hyperion.markdown b/source/_components/light.hyperion.markdown index 7cba5e18f41..c7622a1a3fc 100644 --- a/source/_components/light.hyperion.markdown +++ b/source/_components/light.hyperion.markdown @@ -15,6 +15,8 @@ ha_iot_class: "Local Polling" The `hyperion` platform allows you to integrate your [Hyperion](https://hyperion-project.org/wiki) into Home Assistant. Hyperion is an open source Ambilight implementation which runs on many platforms. +## {% linkable_title Configuration %} + To use your Hyperion light in your installation, add the following to your `configuration.yaml` file: ```yaml @@ -24,12 +26,38 @@ light: host: IP_ADDRESS ``` -Configuration variables: - -- **host** (*Required*): The IP address of the device the Hyperion service is running on. -- **port** (*Optional*): The port used to communicate with the Hyperion service. Defaults to `19444`. -- **name** (*Optional*): The name of the device used in the frontend. -- **priority** (*Optional*): The priority of the Hyperion instance. Defaults to `128`. -- **hdmi_priority** (*Optional*): The priority of the HDMI grabber of this Hyperion instance, note that this priority must be higher than all other priorities used for correct behavior. Defaults to `880`. -- **default_color** (*Optional*): The color of the light. Defaults to `[255, 255, 255]`. -- **effect_list** (*Optional*): The list of effects that can be used. Defaults to `['HDMI', 'Cinema brighten lights', 'Cinema dim lights', 'Knight rider', 'Blue mood blobs', 'Cold mood blobs', 'Full color mood blobs', 'Green mood blobs', 'Red mood blobs', 'Warm mood blobs', 'Police Lights Single', 'Police Lights Solid', 'Rainbow mood', 'Rainbow swirl fast', 'Rainbow swirl', 'Random', 'Running dots', 'System Shutdown', 'Snake', 'Sparks Color', 'Sparks', 'Strobe blue', 'Strobe Raspbmc', 'Strobe white', 'Color traces', 'UDP multicast listener', 'UDP listener', 'X-Mas']`. +{% configuration %} + host: + description: The IP address of the device the Hyperion service is running on. + required: true + type: string + port: + description: The port used to communicate with the Hyperion service. + required: false + type: int + default: 19444 + name: + description: The name of the device used in the frontend. + required: false + type: string + priority: + description: The priority of the Hyperion instance. + required: false + type: int + default: 128 + hdmi_priority: + description: The priority of the HDMI grabber of this Hyperion instance, note that this priority must be higher than all other priorities used for correct behavior. + required: false + type: int + default: 880 + default_color: + description: The color of the light. + required: false + type: list + default: "[255, 255, 255]" + effect_list: + description: The list of effects that can be used. + required: false + type: list + default: "['HDMI', 'Cinema brighten lights', 'Cinema dim lights', 'Knight rider', 'Blue mood blobs', 'Cold mood blobs', 'Full color mood blobs', 'Green mood blobs', 'Red mood blobs', 'Warm mood blobs', 'Police Lights Single', 'Police Lights Solid', 'Rainbow mood', 'Rainbow swirl fast', 'Rainbow swirl', 'Random', 'Running dots', 'System Shutdown', 'Snake', 'Sparks Color', 'Sparks', 'Strobe blue', 'Strobe Raspbmc', 'Strobe white', 'Color traces', 'UDP multicast listener', 'UDP listener', 'X-Mas']" +{% endconfiguration %} From 39514f7852362f8f67b93e8baeede103562dffde Mon Sep 17 00:00:00 2001 From: Jeppe Ladefoged <26121019+ladefoged81@users.noreply.github.com> Date: Thu, 4 Oct 2018 08:55:13 +0200 Subject: [PATCH 082/114] Removed optional configuration setting (#6490) Removed optional icon configuration setting from example --- source/_components/weblink.markdown | 1 - 1 file changed, 1 deletion(-) diff --git a/source/_components/weblink.markdown b/source/_components/weblink.markdown index e7b3ebe6e00..831e1d73df2 100644 --- a/source/_components/weblink.markdown +++ b/source/_components/weblink.markdown @@ -23,7 +23,6 @@ weblink: entities: - name: Router url: http://192.168.1.1/ - icon: mdi:router-wireless - name: Home Assistant url: https://www.home-assistant.io - name: Grafana From 097ab495a29c7e97dd72785c66dc86064f1df20c Mon Sep 17 00:00:00 2001 From: fortepc Date: Thu, 4 Oct 2018 03:08:58 -0400 Subject: [PATCH 083/114] Add warning about hassio incompatibility (#6494) * Add warning about hassio incompatibility According to https://github.com/home-assistant/home-assistant/issues/13751#issuecomment-424007898, this component is not compatibile with Hass.io, adding warning in the documentation to help prevent people from running Hass.io from even attempting to get this working. * Minor changes --- source/_components/usps.markdown | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/_components/usps.markdown b/source/_components/usps.markdown index a95efd919ab..c63a385057a 100644 --- a/source/_components/usps.markdown +++ b/source/_components/usps.markdown @@ -21,7 +21,11 @@ In addition to having a USPS account, you will need to complete the "Opt-In" pro This component requires that a headless-capable web browser is installed on your system - either PhantomJS or Google Chrome. Preferably use Chrome if your operating system supports it, since PhantomJS is deprecated.

- If you are using a Raspberry Pi, you must use PhantomJS. + If you are using a Raspberry Pi, you must use PhantomJS. +

+ +

+ Hass.io containers are based on Alpine Linux. PhanthomJS is not available for Alpine Linux. Therefore it is currently not possible to use this component on Hass.io.

### PhantomJS From 005feaca0e0d60292987ffb2e4dfd34d6b35566a Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 4 Oct 2018 09:12:34 +0200 Subject: [PATCH 084/114] Add icon (#6495) --- plugins/configuration.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/configuration.rb b/plugins/configuration.rb index 30a5196d721..92f681e199e 100644 --- a/plugins/configuration.rb +++ b/plugins/configuration.rb @@ -4,6 +4,7 @@ module Jekyll 'action' => '/docs/scripts/', 'device_class' => '/components/%{component}/#device-class', 'template' => '/docs/configuration/templating/', + 'icon' => '/docs/configuration/customizing-devices/#icon', } def initialize(tag_name, text, tokens) From 2d5a70a839650fb4a6a76f4fbc7dfb43a8eccc24 Mon Sep 17 00:00:00 2001 From: Oncleben31 Date: Thu, 4 Oct 2018 09:30:55 +0200 Subject: [PATCH 085/114] =?UTF-8?q?Use=20the=20new=20style=20for=20configu?= =?UTF-8?q?ration=20variables=20description=20for=20Plex=20pl=E2=80=A6=20(?= =?UTF-8?q?#6464)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Use the new style for configuration variables description for Plex platform Implement the new style for configuration variables description as requested by #6385 * :ambulance: Several fixes * Fix with "" --- source/_components/media_player.plex.markdown | 50 ++++++++++++++++--- 1 file changed, 42 insertions(+), 8 deletions(-) diff --git a/source/_components/media_player.plex.markdown b/source/_components/media_player.plex.markdown index e17068d2211..bc45310c352 100644 --- a/source/_components/media_player.plex.markdown +++ b/source/_components/media_player.plex.markdown @@ -72,14 +72,48 @@ media_player: remove_unavailable_clients: true client_remove_interval: 600 ``` -- **entity_namespace** (*Optional*): Prefix for entity ID's. Defaults to `null`. Useful when using overlapping components (ex. Apple TV and Plex components when you have Apple TV's you use as Plex clients). Go from _media_player.playroom2_ to _media_player.plex_playroom_ -- **include_non_clients** (*Optional*): Display non-recontrollable clients (ex. remote clients, PlexConnect Apple TV's). Defaults to `false`. -- **scan_interval** (*Optional*): Amount in seconds in between polling for device’s current activity. Defaults to `10` seconds. -- **show_all_controls** (*Optional*): Forces all controls to display. Defaults to `false`. Ignores dynamic controls (ex. show volume controls for client A but not for client B) based on detected client capabilities. This option allows you to override this detection if you suspect it to be incorrect. -- **use_custom_entity_ids** (*Optional*): Name Entity ID's by client ID's instead of friendly names. Defaults to `false`. HA assigns entity ID's on a first come first serve basis. When you have identically named devices connecting (ex. media_player.plex_web_safari, media_player.plex_web_safari2), you can't reliably distinguish and or predict which device is which. This option avoids this issue by using unique client ID's (ex. media_player.dy4hdna2drhn). -- **use_episode_art** (*Optional*): Display TV episode art instead of TV show art. Defaults to `false`. -- **remove_unavailable_clients** (*Optional*): Remove stale plex clients from UI after interval. Defaults to `true`. -- **client_remove_interval** (*Optional*): How long a client is to be unavailable for before it is cleaned up. Defaults to `600 seconds (10min)`. + +{% configuration %} +entity_namespace: + description: "Prefix for entity ID's. Useful when using overlapping components (ex. Apple TV and Plex components when you have Apple TV's you use as Plex clients). Go from _media_player.playroom2_ to _media_player.plex_playroom_" + required: false + type: string +include_non_clients: + description: "Display non-recontrollable clients (ex. remote clients, PlexConnect Apple TV's)." + required: false + default: false + type: boolean +scan_interval: + description: "Amount in seconds in between polling for device’s current activity." + required: false + default: 10 + type: int +show_all_controls: + description: "Forces all controls to display. Ignores dynamic controls (ex. show volume controls for client A but not for client B) based on detected client capabilities. This option allows you to override this detection if you suspect it to be incorrect." + required: false + default: false + type: boolean +use_custom_entity_ids: + description: "Name Entity ID's by client ID's instead of friendly names. HA assigns entity ID's on a first come first serve basis. When you have identically named devices connecting (ex. media_player.plex_web_safari, media_player.plex_web_safari2), you can't reliably distinguish and or predict which device is which. This option avoids this issue by using unique client ID's (ex. media_player.dy4hdna2drhn)." + required: false + default: false + type: boolean +use_episode_art: + description: Display TV episode art instead of TV show art. + required: false + default: false + type: boolean +remove_unavailable_clients: + description: Remove stale plex clients from UI after interval. + required: false + default: true + type: boolean +client_remove_interval: + description: How long a client is to be unavailable for before it is cleaned up in seconds. + required: false + default: 600 + type: integer +{% endconfiguration %} ### {% linkable_title Service `play_media` %} From 70bfaef8b4d99d8ef74c5c2c0f93c81b392ebe37 Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Thu, 4 Oct 2018 09:38:12 +0200 Subject: [PATCH 086/114] Update switch Wake on Lan configuration variable (#6489) * Update switch Wake on Lan configuration variable Update style of switch wake on lan documentation to follow new configuration variables description. Note: the numbered list, I assume that it should remain as the code is now? Related to #6385. * Update switch.wake_on_lan.markdown Added default for name * Adjustment to the name since the default is set * :pencil2: Corrects two types * :pencil2: Tweak --- .../_components/switch.wake_on_lan.markdown | 31 ++++++++++++++----- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/source/_components/switch.wake_on_lan.markdown b/source/_components/switch.wake_on_lan.markdown index 931befede70..3d77f533463 100644 --- a/source/_components/switch.wake_on_lan.markdown +++ b/source/_components/switch.wake_on_lan.markdown @@ -31,13 +31,30 @@ switch: mac_address: "00-01-02-03-04-05" ``` -Configuration variables: - -- **mac_address** (*Required*): MAC address to send the wake up command to. -- **name** (*Optional*): The name of the switch. Default is 'Wake on LAN'. -- **host** (*Optional*): The IP address or hostname to check the state of the device (on/off). -- **turn_off** (*Optional*): Defines an [action](/getting-started/automation/) to run when the switch is turned off. -- **broadcast_address** (*Optional*): The IP address of the host to send the magic packet to (default 255.255.255.255). +{% configuration %} +mac_address: + description: MAC address to send the wake up command to. + required: true + type: string +name: + description: The name of the switch. + required: false + default: Wake on LAN + type: string +host: + description: The IP address or hostname to check the state of the device (on/off). + required: false + type: string +turn_off: + description: Defines an [action](/getting-started/automation/) to run when the switch is turned off. + required: false + type: string +broadcast_address: + description: The IP address of the host to send the magic packet to. + required: false + default: 255.255.255.255 + type: string +{% endconfiguration %} ## {% linkable_title Examples %} From ec8dd947b60352fcc2f8f52f932afba20eee9b0c Mon Sep 17 00:00:00 2001 From: Jeppe Ladefoged <26121019+ladefoged81@users.noreply.github.com> Date: Thu, 4 Oct 2018 10:29:00 +0200 Subject: [PATCH 087/114] Update screenshot (#6496) Update screenshot. Reload scripts button missing. --- .../screenshots/configuration-validation.png | Bin 17629 -> 28504 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/source/images/screenshots/configuration-validation.png b/source/images/screenshots/configuration-validation.png index eb68b6601839d5f6b949feb84de44fba43574ea0..ba6022b90067a40844387f9e73741a843d87d0ba 100644 GIT binary patch literal 28504 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

f_VX({xB5G?Hw9ISu=u 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 P0)ogWNq>_v2>8DMfETV4 From c105059488af22ae778efe542dec88579d5805ba Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 4 Oct 2018 10:56:18 +0200 Subject: [PATCH 088/114] Remove note --- source/_components/switch.fritzbox.markdown | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/source/_components/switch.fritzbox.markdown b/source/_components/switch.fritzbox.markdown index 83657be0c88..3a257701e5d 100644 --- a/source/_components/switch.fritzbox.markdown +++ b/source/_components/switch.fritzbox.markdown @@ -13,9 +13,7 @@ ha_release: 0.68 ha_iot_class: "Local Polling" --- -

-To get AVM Fritzbox switch follow the instructions for the general [Fritzbox](/components/fritzbox/). -

+To get AVM Fritzbox switch follow the instructions for the [Fritzbox component](/components/fritzbox/). ### {% linkable_title Attributes %} From 64a0f95eaa597bdb4db3e681ad7085c7a1a05ccb Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 4 Oct 2018 11:39:14 +0200 Subject: [PATCH 089/114] Update icon entry (#6502) --- source/_components/input_boolean.markdown | 2 +- source/_components/input_number.markdown | 2 +- source/_components/input_select.markdown | 2 +- source/_components/notify.webostv.markdown | 2 +- source/_components/panel_iframe.markdown | 4 ++-- source/_components/sensor.mqtt.markdown | 4 ++-- source/_components/sensor.netdata.markdown | 2 +- source/_components/switch.mqtt.markdown | 4 ++-- source/_components/weblink.markdown | 2 +- 9 files changed, 12 insertions(+), 12 deletions(-) diff --git a/source/_components/input_boolean.markdown b/source/_components/input_boolean.markdown index b5ff27a3f0c..f3ada16039b 100644 --- a/source/_components/input_boolean.markdown +++ b/source/_components/input_boolean.markdown @@ -41,7 +41,7 @@ input_boolean: type: boolean default: false icon: - description: Icon to display for the component. Refer to the [Customizing devices](/docs/configuration/customizing-devices/#possible-values) page for possible values. + description: Icon to display for the component. required: false type: icon {% endconfiguration %} diff --git a/source/_components/input_number.markdown b/source/_components/input_number.markdown index f2301243db0..21028b5b904 100644 --- a/source/_components/input_number.markdown +++ b/source/_components/input_number.markdown @@ -78,7 +78,7 @@ input_number: required: false type: string icon: - description: Icon to display in front of the box/slider in the frontend. Refer to the [Customizing devices](/docs/configuration/customizing-devices/#possible-values) page for possible values. + description: Icon to display in front of the box/slider in the frontend. required: false type: icon {% endconfiguration %} diff --git a/source/_components/input_select.markdown b/source/_components/input_select.markdown index 5948d9d1ac1..ad54719e9b6 100644 --- a/source/_components/input_select.markdown +++ b/source/_components/input_select.markdown @@ -54,7 +54,7 @@ input_select: type: Element of options default: First element of options icon: - description: Icon to display for the component. Refer to the [Customizing devices](/docs/configuration/customizing-devices/#possible-values) page for possible values. + description: Icon to display for the component. required: false type: icon {% endconfiguration %} diff --git a/source/_components/notify.webostv.markdown b/source/_components/notify.webostv.markdown index 41d6e633e0d..65603b7bb0c 100644 --- a/source/_components/notify.webostv.markdown +++ b/source/_components/notify.webostv.markdown @@ -47,7 +47,7 @@ filename: icon: description: The path to an image file to use as the icon in notifications. required: false - type: string + type: [string, icon] {% endconfiguration %} A possible automation could be: diff --git a/source/_components/panel_iframe.markdown b/source/_components/panel_iframe.markdown index 908ca35829b..ba13cf6967b 100644 --- a/source/_components/panel_iframe.markdown +++ b/source/_components/panel_iframe.markdown @@ -55,8 +55,8 @@ panel_iframe: required: true type: string icon: - description: Icon for entry. Pick an icon that you can find on [materialdesignicons.com](https://materialdesignicons.com/) to use for your input and prefix the name with `mdi:`. For example `mdi:car`, `mdi:ambulance`, or `mdi:motorbike`. + description: Icon for entry. required: false - type: string + type: icon {% endconfiguration %} diff --git a/source/_components/sensor.mqtt.markdown b/source/_components/sensor.mqtt.markdown index 0322ad8042b..8b8a0fc07b6 100644 --- a/source/_components/sensor.mqtt.markdown +++ b/source/_components/sensor.mqtt.markdown @@ -47,9 +47,9 @@ unit_of_measurement: required: false type: string icon: - description: Icon for the sensor (e.g. `mdi:gauge`). + description: Icon for the sensor. required: false - type: string + type: icon expire_after: description: Defines the number of seconds after the value expires if it's not updated. required: false diff --git a/source/_components/sensor.netdata.markdown b/source/_components/sensor.netdata.markdown index d815681dd9f..d758364265d 100644 --- a/source/_components/sensor.netdata.markdown +++ b/source/_components/sensor.netdata.markdown @@ -96,7 +96,7 @@ resources: icon: description: Icon to use for the sensor. required: false - type: string + type: icon default: "mdi:desktop-classic" {% endconfiguration %} diff --git a/source/_components/switch.mqtt.markdown b/source/_components/switch.mqtt.markdown index b5d06ee72eb..68ec3dfc3a0 100644 --- a/source/_components/switch.mqtt.markdown +++ b/source/_components/switch.mqtt.markdown @@ -39,9 +39,9 @@ name: type: string default: MQTT Switch icon: - description: Icon for the switch (e.g. `mdi:radiator`). + description: Icon for the switch. required: false - type: string + type: icon state_topic: description: The MQTT topic subscribed to receive state updates. required: false diff --git a/source/_components/weblink.markdown b/source/_components/weblink.markdown index 831e1d73df2..e145d62e1be 100644 --- a/source/_components/weblink.markdown +++ b/source/_components/weblink.markdown @@ -41,7 +41,7 @@ url: icon: description: Icon for entry. required: false - type: string + type: icon {% endconfiguration %} Pick an icon that you can find on [materialdesignicons.com](https://materialdesignicons.com/) to use for your input and prefix the name with `mdi:`. For example `mdi:car`, `mdi:ambulance`, or `mdi:motorbike`. From 56f912aab95957e37500d3a0263253266bbc33fe Mon Sep 17 00:00:00 2001 From: Amir Hanan Date: Thu, 4 Oct 2018 16:19:54 +0300 Subject: [PATCH 090/114] Tips for using calendar component in automation (#6501) * Tips for using calendar component in automation Following a recent automation I coded, trying to get more from my calendar integration. * Adding raw wrapping Hope that's what you meant! --- source/_components/calendar.google.markdown | 25 +++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/source/_components/calendar.google.markdown b/source/_components/calendar.google.markdown index 2c18ccd65a8..1c074f5ed81 100644 --- a/source/_components/calendar.google.markdown +++ b/source/_components/calendar.google.markdown @@ -163,3 +163,28 @@ Otherwise everything following the hash sign would be considered a YAML comment. - **location**: The event Location. - **start_time**: Start time of event. - **end_time**: End time of event. + +## {% linkable_title Using calendar in automations %} + +A calendar can be used as an external scheduler for special events or reoccurring events instead of hardcoding them in automations. + +Trigger as soon as an event starts: + +```yaml + trigger: + platform: state + entity_id: calendar.calendar_name + to: 'on' +``` + +By using specific text in the event title, you can set conditions to initiate particular automation flows on designated events while other events will be ignored. + +For example, the actions following this condition will only be executed for events named 'vacation': + +{% raw %} +```yaml + condition: + condition: template + value_template: "{{states.calendar.calendar_name.attributes.message == 'vacation' }}" +``` +{% endraw %} From b5cff3d63ec1c385151bab86d188aa4213e6a474 Mon Sep 17 00:00:00 2001 From: Nicholas Westerhausen Date: Thu, 4 Oct 2018 09:27:54 -0400 Subject: [PATCH 091/114] Update PM Sensor documentation to standards (#6508) Update configuration variable section and move "complete" configuration example (including the optional value) as a second example. Have the main configuration example only include required variables. Bring more attention to the list of supported sensors. (List of supported sensors is still current with the pmsensor library used by this component.) Related to #6385. --- source/_components/sensor.serial_pm.markdown | 32 +++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/source/_components/sensor.serial_pm.markdown b/source/_components/sensor.serial_pm.markdown index 454bb3bdb9f..5d579cc9a9b 100644 --- a/source/_components/sensor.serial_pm.markdown +++ b/source/_components/sensor.serial_pm.markdown @@ -17,6 +17,8 @@ Particulate matter sensors measure the amount of very small particles in the air Cheap LED based sensors usually use a GPIO interface that is hard to attach to computers. However, there are a lot of laser LED based sensors on the market that use a serial interface and can be [connected to your Home Assistant system easily with an USB to serial converter](https://www.open-homeautomation.com/2016/07/20/connecting-an-particulate-matter-sensor-to-your-pc-or-mac/). +## {% linkable_title Supported Sensors %} + At this time, the following sensors are supported: * oneair,s3 @@ -28,8 +30,34 @@ At this time, the following sensors are supported: * plantower,pms2003 * plantower,pms3003 +## {% linkable_title Configuration %} + To use your PM sensor in your installation, add the following to your `configuration.yaml` file: +```yaml +sensor: + - platform: serial_pm + serial_device: /dev/tty.SLAB_USBtoUART + brand: oneair,s3 +``` + +{% configuration %} +serial_device: + description: The serial port to use. On *nix systems, it can often be identified by `$ ls /dev/tty*` + required: true + type: string +name: + description: The name displayed in the frontend. + required: false + type: string +brand: + description: Manufacturer and type of the sensor. (Use a value from the supported sensors list.). + required: true + type: string +{% endconfiguration %} + +### {% linkable_title Named Sensor Configuration Example %} + ```yaml sensor: - platform: serial_pm @@ -38,7 +66,3 @@ sensor: brand: novafitness,sds011 ``` -- **serial_device** (*Required*): The serial port to use. On *nix systems, it can often be identified by `$ ls /dev/tty*` -- **name** (*Optional*): The name displayed in the frontend. -- **brand** (*Required*): Manufacturer and type of the sensor. - From 69401057e60e133c36a9d1634c8617934acad55e Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Thu, 4 Oct 2018 15:31:44 +0200 Subject: [PATCH 092/114] Updated all Telegram component files configuration variable (#6503) * Updated all Telegram component files configuration variable Updated style of all Telegram documentation to follow new configuration variables description. Related to #6385. * Update telegram_bot.broadcast.markdown Add "" on a string * Update telegram_bot.polling.markdown Add "" on a string * Update telegram_bot.webhooks.markdown Add "" on a string --- .../telegram_bot.broadcast.markdown | 31 ++++++++++---- .../_components/telegram_bot.polling.markdown | 31 ++++++++++---- .../telegram_bot.webhooks.markdown | 41 +++++++++++++++---- 3 files changed, 78 insertions(+), 25 deletions(-) diff --git a/source/_components/telegram_bot.broadcast.markdown b/source/_components/telegram_bot.broadcast.markdown index ee9d4032328..4fc78da1277 100644 --- a/source/_components/telegram_bot.broadcast.markdown +++ b/source/_components/telegram_bot.broadcast.markdown @@ -27,13 +27,28 @@ telegram_bot: - 67890 ``` -Configuration variables: - -- **allowed_chat_ids** (*Required*): A list of user in the `user_id` Telegram format enabled to interact to webhook -- **api_key** (*Required*): The API token of your bot. -- **parse_mode** (*Optional*): Default parser for messages if not explicit in message data: 'html' or 'markdown'. Default is 'markdown'. -- **proxy_url** (*Optional*): Proxy url if working behind one (`socks5://proxy_ip:proxy_port`) -- **proxy_params** (*Optional*): Proxy configuration parameters, as dict, if working behind a proxy (`username`, `password`, etc.) +{% configuration %} +allowed_chat_ids: + description: A list of user in the `user_id` Telegram format enabled to interact to webhook + required: true + type: list +api_key: + description: The API token of your bot. + required: true + type: string +parse_mode: + description: "Default parser for messages if not explicit in message data: 'html' or 'markdown'." + required: false + default: markdown + type: string +proxy_url: + description: Proxy url if working behind one (`socks5://proxy_ip:proxy_port`) + required: false + type: string +proxy_params: + description: Proxy configuration parameters, as dict, if working behind a proxy (`username`, `password`, etc.) + required: false + type: string +{% endconfiguration %} To get your `chat_id` and `api_key` follow the instructions [here](/components/notify.telegram/). - diff --git a/source/_components/telegram_bot.polling.markdown b/source/_components/telegram_bot.polling.markdown index 15c4d26eb0b..fc4dbe179ec 100644 --- a/source/_components/telegram_bot.polling.markdown +++ b/source/_components/telegram_bot.polling.markdown @@ -29,13 +29,28 @@ telegram_bot: - 67890 ``` -Configuration variables: - -- **allowed_chat_ids** (*Required*): A list of user in the `user_id` Telegram format enabled to interact to webhook -- **api_key** (*Required*): The API token of your bot. -- **parse_mode** (*Optional*): Default parser for messages if not explicit in message data: 'html' or 'markdown'. Default is 'markdown'. -- **proxy_url** (*Optional*): Proxy url if working behind one (`socks5://proxy_ip:proxy_port`) -- **proxy_params** (*Optional*): Proxy configuration parameters, as dict, if working behind a proxy (`username`, `password`, etc.) +{% configuration %} +allowed_chat_ids: + description: A list of user in the `user_id` Telegram format enabled to interact to webhook + required: true + type: list +api_key: + description: The API token of your bot. + required: true + type: string +parse_mode: + description: "Default parser for messages if not explicit in message data: 'html' or 'markdown'." + required: false + default: markdown + type: string +proxy_url: + description: Proxy url if working behind one (`socks5://proxy_ip:proxy_port`) + required: false + type: string +proxy_params: + description: Proxy configuration parameters, as dict, if working behind a proxy (`username`, `password`, etc.) + required: false + type: string +{% endconfiguration %} To get your `chat_id` and `api_key` follow the instructions [here](/components/notify.telegram/). - diff --git a/source/_components/telegram_bot.webhooks.markdown b/source/_components/telegram_bot.webhooks.markdown index 7821b03c009..deb0531d55d 100644 --- a/source/_components/telegram_bot.webhooks.markdown +++ b/source/_components/telegram_bot.webhooks.markdown @@ -34,15 +34,38 @@ telegram_bot: - 67890 ``` -Configuration variables: - -- **allowed_chat_ids** (*Required*): A list of ids representing the users and group chats that are authorized to interact with the webhook. -- **api_key** (*Required*): The API token of your bot. -- **trusted_networks** (*Optional*): Telegram server access ACL as list. Defaults to `149.154.167.197-233`. -- **parse_mode** (*Optional*): Default parser for messages if not explicit in message data: 'html' or 'markdown'. Default is 'markdown'. -- **proxy_url** (*Optional*): Proxy url if working behind one (`socks5://proxy_ip:proxy_port`) -- **proxy_params** (*Optional*): Proxy configuration parameters, as dict, if working behind a proxy (`username`, `password`, etc.) -- **url** (*Optional*): Allow to overwrite the `base_url` from the [`http`](/components/http/) component for different configurations (`https://:`). +{% configuration %} +allowed_chat_ids: + description: A list of ids representing the users and group chats that are authorized to interact with the webhook. + required: true + type: list +api_key: + description: The API token of your bot. + required: true + type: string +trusted_networks: + description: Telegram server access ACL as list. + required: false + default: 149.154.167.197-233 + type: string +parse_mode: + description: "Default parser for messages if not explicit in message data: 'html' or 'markdown'." + required: false + default: markdown + type: string +proxy_url: + description: Proxy url if working behind one (`socks5://proxy_ip:proxy_port`) + required: false + type: string +proxy_params: + description: Proxy configuration parameters, as dict, if working behind a proxy (`username`, `password`, etc.) + required: false + type: string +url: + description: Allow to overwrite the `base_url` from the [`http`](/components/http/) component for different configurations (`https://:`). + required: false + type: string +{% endconfiguration %} To get your `chat_id` and `api_key` follow the instructions [here](/components/notify.telegram). As well as authorizing the chat, if you have added your bot to a group you will also need to authorize any user that will be interacting with the webhook. When an unauthorized user tries to interact with the webhook Home Assistant will raise an error ("Incoming message is not allowed"), you can easily obtain the users id by looking in the "from" section of this error message. From 3836ac101cbcce10b55064aaacc6bf566d05574d Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 4 Oct 2018 16:01:48 +0200 Subject: [PATCH 093/114] Various fixes --- .../_components/binary_sensor.flic.markdown | 1 + .../_components/binary_sensor.rfxtrx.markdown | 2 +- source/_components/homekit.markdown | 2 +- .../_components/media_player.aquostv.markdown | 2 +- source/_components/media_player.kodi.markdown | 8 +++---- source/_components/nuimo_controller.markdown | 2 +- source/_components/sensor.sensehat.markdown | 24 ++++++++++++------- 7 files changed, 24 insertions(+), 17 deletions(-) diff --git a/source/_components/binary_sensor.flic.markdown b/source/_components/binary_sensor.flic.markdown index 7811cc778df..31eacc4d866 100644 --- a/source/_components/binary_sensor.flic.markdown +++ b/source/_components/binary_sensor.flic.markdown @@ -65,6 +65,7 @@ timeout: If discovery is enabled, you can add a new button by pressing it for at least 7 seconds. The button will be paired with the flic service and added to Home Assistant. Otherwise, you have to manually pair it with the flic service. The Home Assistant platform will not scan for new buttons and will only connect to buttons already paired. #### {% linkable_title Timeout %} + When the flic button is triggered while disconnected from flic service, it will queue all events and try to connect and transmit them as soon as possible. The timeout variable can be used to stop events from triggering if too much time passed between the action and the notification in Home Assistant. #### {% linkable_title Events %} diff --git a/source/_components/binary_sensor.rfxtrx.markdown b/source/_components/binary_sensor.rfxtrx.markdown index ff54c0a0e2b..186d64bfed9 100644 --- a/source/_components/binary_sensor.rfxtrx.markdown +++ b/source/_components/binary_sensor.rfxtrx.markdown @@ -33,7 +33,7 @@ binary_sensor: automatic_add: true ``` -Open your local home-assistant web UI and go to the "states" page. +Open your Home Assistant frontend and go to the "states" page. Then make sure to trigger your sensor. You should see a new entity appear in the *Current entities* list, starting with "binary_sensor." and some hexadecimal digits. Those hexadecimal digits are your device id. diff --git a/source/_components/homekit.markdown b/source/_components/homekit.markdown index 0ba2e2efe01..2a3adf5adb6 100644 --- a/source/_components/homekit.markdown +++ b/source/_components/homekit.markdown @@ -310,4 +310,4 @@ filter: - light ``` -Restart Home-Assistant and re-attempt pairing - a persistent status should now correctly appear. +Restart Home Assistant and re-attempt pairing - a persistent status should now correctly appear. diff --git a/source/_components/media_player.aquostv.markdown b/source/_components/media_player.aquostv.markdown index 0e3dbcba7e0..156f50853f0 100644 --- a/source/_components/media_player.aquostv.markdown +++ b/source/_components/media_player.aquostv.markdown @@ -38,7 +38,7 @@ Configuration variables:

When you set **power_on_enabled** as True, you have to turn on your TV on the first time with the remote. -Then you will be able to turn on with Home-Assistant. +Then you will be able to turn on with Home Assistant. Also, with **power_on_enabled** as True, the Aquos logo on your TV will stay on when you turn off the TV and your TV could consumes more power.

diff --git a/source/_components/media_player.kodi.markdown b/source/_components/media_player.kodi.markdown index 579186aad3e..c6095b921c9 100644 --- a/source/_components/media_player.kodi.markdown +++ b/source/_components/media_player.kodi.markdown @@ -17,7 +17,7 @@ ha_iot_class: "Local Push" The `kodi` platform allows you to control a [Kodi](http://kodi.tv/) multimedia system from Home Assistant. -The preferred way to set up the Kodi platform is by enabling the [discovery component](https://www.home-assistant.io/components/discovery/) which requires enabled [web interface](https://kodi.wiki/view/Web_interface) on your Kodi installation. +The preferred way to set up the Kodi platform is by enabling the [discovery component](/components/discovery/) which requires enabled [web interface](https://kodi.wiki/view/Web_interface) on your Kodi installation. In case the discovery does not work, or you need specific configuration variables, you can add the following to your `configuration.yaml` file: @@ -39,7 +39,7 @@ port: type: integer default: 8080 tcp_port: - description: The TCP port number. Used for websocket connections to Kodi. + description: The TCP port number. Used for WebSocket connections to Kodi. required: false type: integer default: 9090 @@ -48,7 +48,7 @@ name: required: false type: string proxy_ssl: - description: Connect to kodi with HTTPS and WSS. Useful if Kodi is behind an SSL proxy. + description: Connect to Kodi with HTTPS and WSS. Useful if Kodi is behind an SSL proxy. required: false type: boolean default: false @@ -69,7 +69,7 @@ turn_off_action: required: false type: list enable_websocket: - description: Enable websocket connections to Kodi via the TCP port. The websocket connection allows Kodi to push updates to Home Assistant and removes the need for Home Assistant to poll. If websockets don't work on your installation this can be set to `false`. + description: Enable websocket connections to Kodi via the TCP port. The WebSocket connection allows Kodi to push updates to Home Assistant and removes the need for Home Assistant to poll. If websockets don't work on your installation this can be set to `false`. required: false type: boolean default: true diff --git a/source/_components/nuimo_controller.markdown b/source/_components/nuimo_controller.markdown index 92b1bbd618f..e450fc515f0 100644 --- a/source/_components/nuimo_controller.markdown +++ b/source/_components/nuimo_controller.markdown @@ -64,4 +64,4 @@ Troubleshooting: - install the newest version of [pygattlib](https://bitbucket.org/OscarAcena/pygattlib) from the repository, either because there is no binary package for your system or the pip version contains errors, with `pip install hg+https://bitbucket.org/OscarAcena/pygattlib --target $HOME/.homeassistant/deps`. (Dependencies of pygattlib: `sudo apt-get install pkg-config libboost-python-dev libboost-thread-dev libbluetooth-dev libglib2.0-dev python-dev`) -Then invoke home-assistant with `hass --skip-pip`. +Then invoke Home Assistant with `hass --skip-pip`. diff --git a/source/_components/sensor.sensehat.markdown b/source/_components/sensor.sensehat.markdown index a2236c2fb5f..cc0a9da56d2 100644 --- a/source/_components/sensor.sensehat.markdown +++ b/source/_components/sensor.sensehat.markdown @@ -42,8 +42,9 @@ Configuration variables: #### Customizing the Sense HAT data **Format the sensor values** -Add the following to your `sensor` +Add the following to your `sensor`: +{% raw %} ```yaml # Example configuration.yaml entry sensor: @@ -56,18 +57,19 @@ sensor: - platform: template sensors: sensehat_temperature: - value_template: '{% raw %}{{ states.sensor.temperature.state | round(1) }}{% endraw %}' + value_template: '{{ states.sensor.temperature.state | round(1) }}' unit_of_measurement: '°C' sensehat_pressure: - value_template: '{% raw %}{{ states.sensor.pressure.state | round(1) }}{% endraw %}' + value_template: '{{ states.sensor.pressure.state | round(1) }}' unit_of_measurement: 'mb' sensehat_humidity: - value_template: '{% raw %}{{ states.sensor.humidity.state | round(1) }}{% endraw %}' + value_template: '{{ states.sensor.humidity.state | round(1) }}' unit_of_measurement: '%' ``` +{% endraw %} **Give the values friendly names & icons** -Add the following to your `customize` +Add the following to your `customize`: ```yaml # Example configuration.yaml entry @@ -84,7 +86,7 @@ customize: ``` **Create a group** -Add the following to your `groups` +Add the following to your `groups`: ```yaml # Example configuration.yaml entry @@ -106,9 +108,11 @@ group: ### Directions for installing on Raspberry Pi All-In-One installer and HASSbian: + Here are the steps to make the _SenseHAT_ sensor work _successfully_ with the virtual environment versions. #### Install SenseHAT package to _homeassistant_venv_ + ```bash # switch to the homeassistant_venv environment sudo -u homeassistant -H -s @@ -118,7 +122,9 @@ source /srv/homeassistant/homeassistant_venv/bin/activate pip3 install sense-hat # be patient, this will take a long while ``` + #### Return to `pi` + Type `exit` to quit out of the _homeassistant_venv_ back to your `pi` environment. As all of the following steps should be under the `pi` user environment. @@ -141,8 +147,8 @@ ln -s /usr/lib/python3/dist-packages/RTIMU.cpython-35m-arm-linux-gnueabihf.so /s sudo reboot ``` -Unfortunately enabling the SenseHAT Sensor component for a Virtual Environment install of Home-Assistant fails with errors. -_(The Raspberry Pi All-In-One installer and HASSbian both run Home-Assistant in an virtual environment)._ +Unfortunately enabling the SenseHAT Sensor component for a Virtual Environment install of Home Assistant fails with errors. +_(The Raspberry Pi All-In-One installer and HASSbian both run Home Assistant in an virtual environment)._ These issues have been discussed in the repository issue (#5093)[https://github.com/home-assistant/home-assistant/issues/5093) This fix has been tested with a clean install of: @@ -151,6 +157,6 @@ This fix has been tested with a clean install of: and -* [Home-Assistant 0.37.1](/getting-started/installation-raspberry-pi-all-in-one/) +* [Home Assistant 0.37.1](/getting-started/installation-raspberry-pi-all-in-one/) For setting up the Sense HAT's RGB LED matrix as lights within Home Assistant, please see the [Sense HAT light component](/components/light.sensehat/). From 27e80d884f6e45649b1b6ab9ad3fc2ae3fba93b4 Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Thu, 4 Oct 2018 17:01:09 +0200 Subject: [PATCH 094/114] Update Alarm.com Alarm Control Panel configuration variable (#6498) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update Alarm.com Alarm Control Panel configuration variable Update style of Alarm.com Alarm Control Panel documentation to follow new configuration variables description. Related to #6385. * Update Concord232 Alarm Control Panel configuration variable Update style of Concord232 Alarm Control Panel documentation to follow new configuration variables description. Related to #6385. * Revert "Update Concord232 Alarm Control Panel configuration variable" This reverts commit 5269a0dfb7bd1fb5c47e453c243cf3eb37d3b4a1. * Update alarm_control_panel.alarmdotcom.markdown ✏️ Tweak type * :pencil2: Tweak --- .../alarm_control_panel.alarmdotcom.markdown | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/source/_components/alarm_control_panel.alarmdotcom.markdown b/source/_components/alarm_control_panel.alarmdotcom.markdown index 82e1a7774e7..8509f1bb41d 100644 --- a/source/_components/alarm_control_panel.alarmdotcom.markdown +++ b/source/_components/alarm_control_panel.alarmdotcom.markdown @@ -24,9 +24,22 @@ alarm_control_panel: password: YOUR_PASSWORD ``` -Configuration variables: - -- **username** (*Required*): Username for the Alarm.com account. -- **password** (*Required*): Password for Alarm.com account. -- **name** (*Optional*): The name of the alarm. Default is 'Alarm.com'. -- **code** (*Optional*): Specifies a code to enable or disable the alarm in the frontend. +{% configuration %} +username: + description: Username for the Alarm.com account. + required: true + type: string +password: + description: Password for the Alarm.com account. + required: true + type: string +name: + description: The name of the alarm. + required: false + default: Alarm.com + type: string +code: + description: Specifies a code to enable or disable the alarm in the frontend. + required: false + type: int +{% endconfiguration %} From a13f9719a6b7c29f5d669f9834ab121cffded8ec Mon Sep 17 00:00:00 2001 From: Jeppe Ladefoged <26121019+ladefoged81@users.noreply.github.com> Date: Thu, 4 Oct 2018 17:11:02 +0200 Subject: [PATCH 095/114] Update to match current version (#6499) Updated to match current version of HA where it's possible to reload scripts, automations etc. without restarting. --- source/getting-started/use.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/getting-started/use.markdown b/source/getting-started/use.markdown index 1b6da436ab7..941d78e02df 100644 --- a/source/getting-started/use.markdown +++ b/source/getting-started/use.markdown @@ -11,7 +11,9 @@ footer: true If you are using Hassbian, browse to [http://hassbian.local:8123](http://hassbian.local:8123) to open the Home Assistant frontend. -To reload your configuration, go to **Configuration** in your side panel, and choose "CHECK CONFIG" and "RELOAD CORE": +To reload your configuration, go to **Configuration** in your side panel and choose "CHECK CONFIG". + +You will have to restart Home Assistant for most changes to `configuration.yaml` to take effect. You can load changes to [automations](/docs/automation/), [customize](/docs/configuration/customizing-devices/), [groups](/components/group/), and [scripts](/components/script/) without restarting.

From 97b27d065747f08ebf89431436c7a8e431a079fd Mon Sep 17 00:00:00 2001 From: Jeppe Ladefoged <26121019+ladefoged81@users.noreply.github.com> Date: Thu, 4 Oct 2018 17:27:03 +0200 Subject: [PATCH 096/114] Update text to match current version (#6507) * Update text to match current version Update text to match current version. Integrations and Users added. * :pencil2: Tweak --- source/_components/config.markdown | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/source/_components/config.markdown b/source/_components/config.markdown index a84ef198896..b697cec5e82 100644 --- a/source/_components/config.markdown +++ b/source/_components/config.markdown @@ -22,9 +22,17 @@ To enable the configuration panel, add the following to your `configuration.yaml config: ``` +### {% linkable_title Integrations %} + +This section enables you to manage integrations for devices such as Philips Hue and Sonos from within Home Assistant. + +### {% linkable_title Users %} + +This section enables you to manage your Home Assistant users. + ### {% linkable_title General %} -This section enables you to control Home Assistant from within Home Assistant. Check your configuration, reload the core, groups, and automation, and the Home Assistant process itself. With a single mouse click. +This section enables you to control Home Assistant from within Home Assistant. Check your configuration, reload the core, groups, scripts, automations, and the Home Assistant process itself with a single mouse click.

From 28b6ff4f59378297e05e760933ce331ccb22980e Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Thu, 4 Oct 2018 17:28:49 +0200 Subject: [PATCH 097/114] Update Concord232 Alarm Control Panel configuration variable (#6500) * Update Concord232 Alarm Control Panel configuration variable Update style of Concord232 Alarm Control Panel documentation to follow new configuration variables description. Related to #6385. * :pencil2: Tweak --- .../alarm_control_panel.concord232.markdown | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/source/_components/alarm_control_panel.concord232.markdown b/source/_components/alarm_control_panel.concord232.markdown index 36f897e21e5..d2ce3afca7c 100644 --- a/source/_components/alarm_control_panel.concord232.markdown +++ b/source/_components/alarm_control_panel.concord232.markdown @@ -24,7 +24,15 @@ alarm_control_panel: - platform: concord232 ``` -Configuration variables: - -- **host** (*Optional*): The host where the concord232 server process is running. Defaults to localhost. -- **port** (*Optional*): The port where the Alarm panel is listening. Defaults to 5007. +{% configuration %} +host: + description: The host where the concord232 server process is running. + required: false + default: localhost + type: string +port: + description: The port where the Alarm panel is listening. + required: false + default: 5007 + type: integer +{% endconfiguration %} From 746b3cb303126ea931060001985cb0bc985da0f9 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 4 Oct 2018 18:28:33 +0200 Subject: [PATCH 098/114] Add note about containers (#6511) --- source/_components/sensor.cpuspeed.markdown | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/source/_components/sensor.cpuspeed.markdown b/source/_components/sensor.cpuspeed.markdown index f69f0149679..f2e8a1596a5 100644 --- a/source/_components/sensor.cpuspeed.markdown +++ b/source/_components/sensor.cpuspeed.markdown @@ -16,6 +16,13 @@ ha_iot_class: "Local Push" The `cpuspeed` sensor platform to allow you to monitor the current CPU speed. + +

+ You can't use this sensor in a Container (like Hass.io) as it requires access to the physical CPU. Also, not all [ARM CPUs](https://github.com/workhorsy/py-cpuinfo/#cpu-support) are supported. +

+ +## {% linkable_title Configuration %} + To add this platform to your installation, add the following to your `configuration.yaml` file: ```yaml @@ -24,6 +31,10 @@ sensor: - platform: cpuspeed ``` -Configuration variables: - -- **name** (*Optional*): Name of the sensor. +{% configuration %} +name: + description: Name to use in the frontend. + required: false + type: string + default: CPU speed +{% endconfiguration %} From 6c1fc639f71fc81827a1dc355a5ab0bd6ab04b89 Mon Sep 17 00:00:00 2001 From: Brian J King Date: Thu, 4 Oct 2018 12:52:47 -0500 Subject: [PATCH 099/114] Add new example for restricting motion sensor lights based on time and using transitions (#6512) --- ...r_10_minutes_when_motion_detected.markdown | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/source/_cookbook/turn_on_light_for_10_minutes_when_motion_detected.markdown b/source/_cookbook/turn_on_light_for_10_minutes_when_motion_detected.markdown index 27320af7a8f..eaa2175bab5 100644 --- a/source/_cookbook/turn_on_light_for_10_minutes_when_motion_detected.markdown +++ b/source/_cookbook/turn_on_light_for_10_minutes_when_motion_detected.markdown @@ -73,3 +73,36 @@ timer: hallway: duration: '00:10:00' ``` + +You can also restrict lights from turning on based on time of day and implement transitions for fading lights on and off. + +```yaml +- alias: Motion Sensor Lights On + trigger: + platform: state + entity_id: binary_sensor.ecolink_pir_motion_sensor_sensor + to: 'on' + condition: + condition: time + after: '07:30' + before: '23:30' + action: + service: homeassistant.turn_on + entity_id: group.office_lights + data: + transition: 15 + + +- alias: Motion Sensor Lights Off + trigger: + - platform: state + entity_id: binary_sensor.ecolink_pir_motion_sensor_sensor + to: 'off' + for: + minutes: 15 + action: + - service: homeassistant.turn_off + entity_id: group.office_lights + data: + transition: 160 +``` \ No newline at end of file From ea7e4269406941f2114c2d1c931e6ca97e3e6b27 Mon Sep 17 00:00:00 2001 From: Amir Hanan Date: Thu, 4 Oct 2018 20:55:46 +0300 Subject: [PATCH 100/114] "Advanced" example using dynamic destination (#6510) Some nice code that saved me from setting up and pulling multiple Waze components, (hope the language is clear - would welcome any tip for improvement if you feel it's not!) --- .../sensor.waze_travel_time.markdown | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/source/_components/sensor.waze_travel_time.markdown b/source/_components/sensor.waze_travel_time.markdown index b7398d5217c..b288b7b868c 100644 --- a/source/_components/sensor.waze_travel_time.markdown +++ b/source/_components/sensor.waze_travel_time.markdown @@ -61,3 +61,43 @@ realtime: required: false type: boolean {% endconfiguration %} + + +## {% linkable_title Example using dynamic destination %} + +Using the flexible option to set a sensor value to the `destination`, you can setup a single Waze component that will calculate travel time to multiple optional locations on demand. + +In the following example, the `Input Select` is converted into an address which is used to modify the destination for Waze route calculation from `device_tracker.myphone` location (It takes a few minutes for the value to update due to the interval set to fetch Waze data). + +{% raw %} +```yaml +input_select: + destination: + name: destination + options: + - Home + - Work + - Parents + +sensor: + - platform: template + sensors: + dest_address: + value_template: >- + {%- if is_state("input_select.destination", "Home") -%} + 725 5th Ave, New York, NY 10022, USA + {%- elif is_state("input_select.destination", "Work") -%} + 767 5th Ave, New York, NY 10153, USA + {%- elif is_state("input_select.destination", "Parents") -%} + 178 Broadway, Brooklyn, NY 11211, USA + {%- else -%} + Unknown + {%- endif %} + + - platform: waze_travel_time + name: "Me to destination" + origin: device_tracker.myphone + destination: sensor.dest_address + region: 'US' +``` +{% endraw %} From e45cc3658964027ec7cd8db3fcb5ca1a320236ca Mon Sep 17 00:00:00 2001 From: mvn23 Date: Thu, 4 Oct 2018 20:00:06 +0200 Subject: [PATCH 101/114] Add documentation for current_temperature_template in climate.mqtt (#6482) * Add documentation for current_temperature_template in climate.mqtt * Add more undocumented features. --- source/_components/climate.mqtt.markdown | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/source/_components/climate.mqtt.markdown b/source/_components/climate.mqtt.markdown index c9179e230b9..96f98766b54 100644 --- a/source/_components/climate.mqtt.markdown +++ b/source/_components/climate.mqtt.markdown @@ -86,6 +86,10 @@ current_temperature_topic: description: The MQTT topic on which to listen for the current temperature. required: false type: string +current_temperature_template: + description: A template with which the value received on `current_temperature_topic` will be rendered. + required: false + type: template power_command_topic: description: The MQTT topic to publish commands to change the power state. This is useful if your device has a separate power toggle in addition to mode. required: false @@ -102,6 +106,11 @@ mode_state_template: description: A template to render the value received on the `mode_state_topic` with. required: false type: template +modes: + description: A list of supported modes. + required: false + default: ['auto', 'off', 'cool', 'heat', 'dry', 'fan_only'] + type: list temperature_command_topic: description: The MQTT topic to publish commands to change the target temperature. required: false @@ -126,6 +135,11 @@ fan_mode_state_template: description: A template to render the value received on the `fan_mode_state_topic` with. required: false type: template +fan_modes: + description: A list of supported fan modes. + required: false + default: ['auto', 'low', 'medium', 'high'] + type: list swing_mode_command_topic: description: The MQTT topic to publish commands to change the swing mode. required: false @@ -138,6 +152,11 @@ swing_mode_state_template: description: A template to render the value received on the `swing_mode_state_topic` with. required: false type: template +swing_modes: + description: A list of supported swing modes. + required: false + default: ['on', 'off'] + type: list away_mode_command_topic: description: The MQTT topic to publish commands to change the away mode. required: false From 55f745069f33698e8e1d4cc7fe0e6bd7cf4969ae Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Thu, 4 Oct 2018 20:04:42 +0200 Subject: [PATCH 102/114] Update Notify Telegram configuration variable (#6497) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update Notify Telegram configuration variable Update style of notify telegram documentation to follow new configuration variables description. Related to #6385. * Update notify.telegram.markdown ✏️ Tweak soms types and add defaults * Update notify.telegram.markdown Added extra default * Update notify.telegram.markdown - Using `float` for latitude and longitude. - URL or File? I have make it URL. * Update notify.telegram.markdown Added some changes abount using URL or FILE path * :pencil2: Added suggestion --- source/_components/notify.telegram.markdown | 195 +++++++++++++++----- 1 file changed, 152 insertions(+), 43 deletions(-) diff --git a/source/_components/notify.telegram.markdown b/source/_components/notify.telegram.markdown index 9fd9b2f0d63..42acb5bd290 100644 --- a/source/_components/notify.telegram.markdown +++ b/source/_components/notify.telegram.markdown @@ -84,10 +84,17 @@ notify: chat_id: CHAT_ID_2 ``` -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`. -- **chat_id** (*Required*): The chat ID of your user. +{% configuration %} +name: + description: Setting the optional parameter `name` allows multiple notifiers to be created. The notifier will bind to the service `notify.NOTIFIER_NAME`. + required: false + default: notify + type: string +chat_id: + description: The chat ID of your user. + required: true + type: integer +{% endconfiguration %} To use notifications, please see the [getting started with automation page](/getting-started/automation/). @@ -106,12 +113,24 @@ action: - 'Task 3:/command3, Task 4:/command4' ``` -Configuration variables: - -- **message** (*Required*): Message text. -- **title** (*Optional*): Will be composed as '%title\n%message'. -- **keyboard** (*Optional*): List of rows of commands, comma-separated, to make a custom keyboard. -- **inline_keyboard** (*Optional*): List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. +{% configuration %} +title: + description: Will be composed as '%title\n%message'. + required: false + type: string +message: + description: Message text. + required: true + type: string +keyboard: + description: List of rows of commands, comma-separated, to make a custom keyboard. + required: false + type: list +inline_keyboard: + description: List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. + required: false + type: list +{% endconfiguration %} ### {% linkable_title Photo support %} @@ -133,15 +152,41 @@ action: caption: I.e. for a Title ``` -Configuration variables: - -- **url** or **file** (*Required*): For local or remote path to an image. -- **caption** (*Optional*): The title of the image. -- **username** (*Optional*): Username for a URL which require HTTP authentication. -- **password** (*Optional*): Username for a URL which require HTTP authentication. -- **authentication** (*Optional*): Set to 'digest' to use HTTP digest authentication, defaults to 'basic'. -- **keyboard** (*Optional*): List of rows of commands, comma-separated, to make a custom keyboard. -- **inline_keyboard** (*Optional*): List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. +{% configuration %} +url: + description: A remote path to an image. Either this or the `file` configuration option is required. + required: true + type: string +file: + description: A local path to an image. Either this or the `url` configuration option is required. + required: true + type: string +caption: + description: The title of the image. + required: false + type: string +username: + description: Username for a URL which require HTTP authentication. + required: false + type: string +password: + description: Password for a URL which require HTTP authentication. + required: false + type: string +authentication: + description: Set to 'digest' to use HTTP digest authentication. + required: false + default: basic + type: string +keyboard: + description: List of rows of commands, comma-separated, to make a custom keyboard. + required: false + type: list +inline_keyboard: + description: List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. + required: false + type: list +{% endconfiguration %}

Since Home Assistant version 0.48 you have to [whitelist the source folder](/docs/configuration/basic/) of the file you want to include in the notification. @@ -176,15 +221,41 @@ action: caption: I.e. for a Title ``` -Configuration variables: - -- **url** or **file** (*Required*): For local or remote path to a video. -- **caption** (*Optional*): The title of the video. -- **username** (*Optional*): Username for a URL which require HTTP authentication. -- **password** (*Optional*): Username for a URL which require HTTP authentication. -- **authentication** (*Optional*): Set to 'digest' to use HTTP digest authentication, defaults to 'basic'. -- **keyboard** (*Optional*): List of rows of commands, comma-separated, to make a custom keyboard. -- **inline_keyboard** (*Optional*): List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. +{% configuration %} +url: + description: A remote path to an video. Either this or the `file` configuration option is required. + required: true + type: string +file: + description: A local path to an video. Either this or the `url` configuration option is required. + required: true + type: string +caption: + description: The title of the video. + required: false + type: string +username: + description: Username for a URL which require HTTP authentication. + required: false + type: string +password: + description: Password for a URL which require HTTP authentication. + required: false + type: string +authentication: + description: Set to 'digest' to use HTTP digest authentication. + required: false + default: basic + type: string +keyboard: + description: List of rows of commands, comma-separated, to make a custom keyboard. + required: false + type: list +inline_keyboard: + description: List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. + required: false + type: list +{% endconfiguration %} ### {% linkable_title Document support %} @@ -204,15 +275,41 @@ action: - '/command3, /command4' ``` -Configuration variables: - -- **url** or **file** (*Required*): For local or remote path to a document. -- **caption** (*Optional*): The title of the document. -- **username** (*Optional*): Username for a URL which require HTTP authentication. -- **password** (*Optional*): Username for a URL which require HTTP authentication. -- **authentication** (*Optional*): Set to 'digest' to use HTTP digest authentication, defaults to 'basic'. -- **keyboard** (*Optional*): List of rows of commands, comma-separated, to make a custom keyboard. -- **inline_keyboard** (*Optional*): List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. +{% configuration %} +url: + description: A remote path to an document. Either this or the `file` configuration option is required. + required: true + type: string +file: + description: A local path to an document. Either this or the `url` configuration option is required. + required: true + type: string +caption: + description: The title of the document. + required: false + type: string +username: + description: Username for a URL which require HTTP authentication. + required: false + type: string +password: + description: Password for a URL which require HTTP authentication. + required: false + type: string +authentication: + description: Set to 'digest' to use HTTP digest authentication. + required: false + default: basic + type: string +keyboard: + description: List of rows of commands, comma-separated, to make a custom keyboard. + required: false + type: list +inline_keyboard: + description: List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. + required: false + type: list +{% endconfiguration %} ### {% linkable_title Location support %} @@ -230,9 +327,21 @@ action: longitude: 117.22743 ``` -Configuration variables: - -- **latitude** (*Required*): The latitude to send. -- **longitude** (*Required*): The longitude to send. -- **keyboard** (*Optional*): List of rows of commands, comma-separated, to make a custom keyboard. -- **inline_keyboard** (*Optional*): List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. +{% configuration %} +latitude: + description: The latitude to send. + required: true + type: float +longitude: + description: The longitude to send. + required: true + type: float +keyboard: + description: List of rows of commands, comma-separated, to make a custom keyboard. + required: false + type: list +inline_keyboard: + description: List of rows of commands, comma-separated, to make a custom inline keyboard with buttons with associated callback data. + required: false + type: list +{% endconfiguration %} From 5a38e533fe14d0ebebb0012df4ce93090c08c627 Mon Sep 17 00:00:00 2001 From: farmous Date: Thu, 4 Oct 2018 21:31:21 +0200 Subject: [PATCH 103/114] expanding documentation for KNX Sensor (#6517) added a table to reflect sensor types implemented by xknx and their expected DPTs --- source/_components/sensor.knx.markdown | 37 +++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/source/_components/sensor.knx.markdown b/source/_components/sensor.knx.markdown index 624eb8a2073..3819a6dfdfd 100644 --- a/source/_components/sensor.knx.markdown +++ b/source/_components/sensor.knx.markdown @@ -33,7 +33,42 @@ sensor: - **address** (*Required*): KNX group address of the sensor. - **name** (*Optional*): A name for this device used within Home Assistant. -- **type** (*Optional*): "percent", "temperature", "humidity", "illuminance", "brightness", "speed_ms", "current", "power", "electric_current", "electric_potential", "energy", "frequency", "heatflowrate", "phaseanglerad", "phaseangledeg", "powerfactor", "speed", "DPT-7", "DPT-9", "DPT-12", "DPT-13" or "DPT-14". +- **type** (*Optional*): A type from the following table can be defined. The DPT of the group address should match the expected KNX DPT to be parsed correctly. + +| type | unit | expected KNX DPT | +|--------------------|------|------------------| +| percent | % | 5.001 | +| pulse | | 5.010 | +| temperature | °C | 9.001 | +| humidity | % | 9.007 | +| illuminance | lx | 9.004 | +| brightness | lx | 7.013 | +| speed_ms | m/s | 9.005 | +| current | mA | 7.012 | +| voltage | mV | 9.020 | +| power | W | 14.056 | +| electric_current | A | 14.019 | +| electric_potential | V | 14.027 | +| energy | J | 14.031 | +| frequency | Hz | 14.033 | +| heatflowrate | W | 14.036 | +| phaseanglerad | rad | 14.054 | +| phaseangledeg | ° | 14.055 | +| powerfactor | | 14.057 | +| speed | m/s | 14.065 | +| enthalpy | H | 9.* | +| ppm | ppm | 9.008 | +| DPT-7 | | 7.* | +| 2byte_unsigned | | 7.* | +| DPT-9 | | 9.* | +| DPT-12 | | 12.* | +| 4byte_unsigned | | 12.* | +| DPT-13 | | 13.* | +| 4byte_signed | | 13.* | +| DPT-14 | | 14.* | +| 4byte_float | | 14.* | + + ## {% linkable_title Full example %} From aabd29bb55814098b55d881f3271b4b222a4f529 Mon Sep 17 00:00:00 2001 From: samuelsson86 <42771028+samuelsson86@users.noreply.github.com> Date: Thu, 4 Oct 2018 21:33:17 +0200 Subject: [PATCH 104/114] Update rflink.markdown (#6101) * Update rflink.markdown * :pencil2: Tweaks --- source/_components/rflink.markdown | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/source/_components/rflink.markdown b/source/_components/rflink.markdown index 208301d229b..81b696fae33 100644 --- a/source/_components/rflink.markdown +++ b/source/_components/rflink.markdown @@ -94,14 +94,15 @@ When pressing the button on the physical remote, RFLink detects the signal and t light: - platform: rflink automatic_add: true -switch: - - platform: rflink - automatic_add: true sensor: - platform: rflink automatic_add: true ``` +[RFLink Switches](https://www.home-assistant.io/components/switch.rflink/) cannot be added automatically. + +The RFLink component does not know the difference between a switch and a light. Therefore all switchable devices are automatically added as light by default. However, once the ID of a switch is known, it can be used to configure it as a switch type in HA, for example, to add it to a different group, hide it or configure a nice name. + ### {% linkable_title Ignoring devices %} The RFLink platform can be configured to completely ignore a device on a platform level. This is useful when you have neighbors which also use 433 MHz technology. From 7c10ab9a2acb4511b0209a8c74ed2d321bdc57cc Mon Sep 17 00:00:00 2001 From: Jeppe Ladefoged <26121019+ladefoged81@users.noreply.github.com> Date: Thu, 4 Oct 2018 21:48:43 +0200 Subject: [PATCH 105/114] Added Chrome on Linux + minor updates (#6491) Added Chrome on Linux Updated Firefox on Linux and Windows Updated Chromium on Linux --- source/_docs/frontend/browsers.markdown | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/source/_docs/frontend/browsers.markdown b/source/_docs/frontend/browsers.markdown index 2454f5989aa..0003e531ec2 100644 --- a/source/_docs/frontend/browsers.markdown +++ b/source/_docs/frontend/browsers.markdown @@ -23,7 +23,7 @@ We would appreciate if you help to keep this page up-to-date and add feedback. | Internet Explorer ([IE]) | 11 | Not supported | Does not support promises. | | Microsoft [Edge] | deli. Win 10 | works | Streaming updates not working. | | [Chrome] | 61.0.3163.100 | works | | -| [Firefox] | 57.0 | works | | +| [Firefox] | 62.0.3 | works | | | [Iridium] | 48.2 | works | | | [Opera] | 42.0.2393.351 | works | | @@ -37,9 +37,9 @@ We would appreciate if you help to keep this page up-to-date and add feedback. | Browser | Release | State | Comments | | :-------------------- |:---------------|:-----------|:-------------------------| -| [Firefox] | 59.0 | works | | +| [Firefox] | 62.0 | works | | | [Midori] | 0.5.11 | works | | -| [Chromium] | 63.0.3239.108 | works | | +| [Chromium] | 69.0.3497.81 | works | | | [Conkeror] | 1.0.2 | works | | | [Tor Browser] | 7.0.8 | works | | | [Konqueror] | | unknown | | @@ -50,6 +50,7 @@ We would appreciate if you help to keep this page up-to-date and add feedback. | [w3m] | 0.5.3 | fails | display the icon shown while loading HA | | [Epiphany] | 3.18.5 | works | | | [surf] | 0.7 | works | | +| [Chrome] | 69.0.3497.100 | works | | ## {% linkable_title Android %} From 73a55b353d54d317fbdb28b88b981d60fbb2e6ab Mon Sep 17 00:00:00 2001 From: Oncleben31 Date: Fri, 5 Oct 2018 11:36:51 +0200 Subject: [PATCH 106/114] Use the new style for configuration variables description for ping sensor (#6527) Implement the new style for configuration variables description as requested by #6385 --- .../_components/binary_sensor.ping.markdown | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/source/_components/binary_sensor.ping.markdown b/source/_components/binary_sensor.ping.markdown index b5cc32fe9b8..193297cbd88 100644 --- a/source/_components/binary_sensor.ping.markdown +++ b/source/_components/binary_sensor.ping.markdown @@ -26,12 +26,22 @@ binary_sensor: - platform: ping host: 192.168.0.1 ``` - -Configuration variables: - -- **host** (*Required*): The IP address or hostname of the system you want to track. -- **count** (*Optional*): Number of packets to send. Defaults to 5. -- **name** (*Optional*): Let you overwrite the name of the device. Defaults to `Ping Binary sensor`. +{% configuration %} +host: + description: The IP address or hostname of the system you want to track. + required: true + type: string +count: + description: Number of packets to send. + required: false + type: integer + default: 5 +name: + description: Let you overwrite the name of the device. + required: false + type: string + default: "`Ping Binary sensor`" +{% endconfiguration %} The sensor exposes the different round trip times values measured by `ping` as attributes: From 3720d098134f4789b97c2c9b7e437897ac03839e Mon Sep 17 00:00:00 2001 From: Alok Saboo Date: Fri, 5 Oct 2018 05:37:45 -0400 Subject: [PATCH 107/114] Use proper case for Home Assistant (#6526) --- source/_addons/snips.markdown | 5 ++-- source/_components/rss_feed_template.markdown | 2 +- source/_components/sensor.nest.markdown | 4 +-- source/_docs/ecosystem/appdaemon/api.markdown | 4 +-- source/_docs/security/porosity.markdown | 26 +++++++++---------- ...ng-presence-detection-work-better.markdown | 2 +- source/_posts/2018-07-06-release-73.markdown | 4 +-- source/lovelace/index.markdown | 2 +- 8 files changed, 24 insertions(+), 25 deletions(-) diff --git a/source/_addons/snips.markdown b/source/_addons/snips.markdown index 851afd8e7d9..e8377a1b5a7 100644 --- a/source/_addons/snips.markdown +++ b/source/_addons/snips.markdown @@ -13,7 +13,7 @@ footer: true The Snips add-on depends on the Mosquitto add on to bridge to Home Assistant, so make sure that is installed. -HomeAssistant comes with certain Intents builtin to handle common tasks. A complete list of Intents can be found in this wiki [Hass Snips Bundle](https://github.com/tschmidty69/hass-snips-bundle-intents/wiki). +Home Assistant comes with certain Intents builtin to handle common tasks. A complete list of Intents can be found in this wiki [Hass Snips Bundle](https://github.com/tschmidty69/hass-snips-bundle-intents/wiki). The Snips addon by default comes with an assistant that allows you to turn on lights or switches, open covers, or add and list items to a shopping list if that component is enabled. @@ -25,7 +25,7 @@ Open garage door What is on my shopping list ``` -To get started creating your own configuration, follow [their tutorial](https://snips.gitbook.io/documentation/console) to create an assistant and download the training data. You can also add the HomeAssistant Skill to your assistant to enable the built-in intents, and add or create your own intents to do more complex tasks. +To get started creating your own configuration, follow [their tutorial](https://snips.gitbook.io/documentation/console) to create an assistant and download the training data. You can also add the Home Assistant Skill to your assistant to enable the built-in intents, and add or create your own intents to do more complex tasks. Now install and activate the [Samba](/addons/samba/) add-on so you can upload your training data. Connect to the "share" Samba share and copy your assistant over. Name the file `assistant.zip` or whatever you have configured in the configuration options. @@ -114,4 +114,3 @@ searchWeatherForecast: Now just restart HassIO and ask it what the weather is like. [their tutorial]: https://github.com/snipsco/snips-platform-documentation/wiki/2.-Create-an-assistant-using-an-existing-bundle - diff --git a/source/_components/rss_feed_template.markdown b/source/_components/rss_feed_template.markdown index d5ac1313672..36fcddfc51f 100644 --- a/source/_components/rss_feed_template.markdown +++ b/source/_components/rss_feed_template.markdown @@ -20,7 +20,7 @@ For example, on Android, the app "Simple RSS Widget" can be used to display temp ```yaml # Example configuration.yaml entry rss_feed_template: - # Accessible on /api/rss_template/garden + # Accessible on /api/rss_template/garden # Example: https://localhost:8123/api/rss_template/garden garden: requires_api_password: False diff --git a/source/_components/sensor.nest.markdown b/source/_components/sensor.nest.markdown index f31f62b9b3e..99d40e63016 100644 --- a/source/_components/sensor.nest.markdown +++ b/source/_components/sensor.nest.markdown @@ -59,9 +59,9 @@ The following conditions are available by device: ## {% linkable_title Security State %}

-This feature is not designed to transfer your Home Assitant to a security system, neither Home Assistant nor Nest be liable to You for damages, +This feature is not designed to transfer your Home Assistant to a security system, neither Home Assistant nor Nest be liable to You for damages, or consequential damages of any character arising as a result of use this feature. - + This feature does not depend on the [Nest Secure alarm system](https://nest.com/alarm-system/overview/) and is not a reflection of the status of that system, nor does it react to state changes in that system.

diff --git a/source/_docs/ecosystem/appdaemon/api.markdown b/source/_docs/ecosystem/appdaemon/api.markdown index 8efa974eb47..be4a60c0245 100755 --- a/source/_docs/ecosystem/appdaemon/api.markdown +++ b/source/_docs/ecosystem/appdaemon/api.markdown @@ -942,7 +942,7 @@ time, interval, kwargs = self.info_timer(handle) All of the scheduler calls above support 2 additional optional arguments, `random_start` and `random_end`. Using these arguments it is possible to randomize the firing of callbacks to the degree desired by setting the appropriate number of seconds with the parameters. - `random_start` - start of range of the random time -- `random_end` - end of range of the random time +- `random_end` - end of range of the random time `random_start` must always be numerically lower than `random_end`, they can be negative to denote a random offset before and event, or positive to denote a random offset after an event. The event would be an absolute or relative time or sunrise/sunset depending on which scheduler call you use and these values affect the base time by the spcified amount. If not specified, they will default to `0`. @@ -1490,7 +1490,7 @@ service, kwargs = self.info_listen_event(handle) ### {% linkable_title fire_event() %} -Fire an event on the HomeAssistant bus, for other components to hear. +Fire an event on the Home Assistant bus, for other components to hear. #### {% linkable_title Synopsis %} diff --git a/source/_docs/security/porosity.markdown b/source/_docs/security/porosity.markdown index 19941ab8208..4858aa0a04c 100644 --- a/source/_docs/security/porosity.markdown +++ b/source/_docs/security/porosity.markdown @@ -15,7 +15,7 @@ The IP address of the Home Assistant machine is 192.168.0.215. The system which ## {% linkable_title SSH server Add-on %} -To get access to Hass.io in secure way, SSH is provided by the [SSH server add-on](/addons/ssh/). +To get access to Hass.io in secure way, SSH is provided by the [SSH server add-on](/addons/ssh/). ```bash $ sudo nmap -A -n --reason -Pn -T5 -p1-65535 192.168.0.215 @@ -27,13 +27,13 @@ Not shown: 65532 closed ports Reason: 65532 resets PORT STATE SERVICE REASON VERSION 22/tcp open ssh syn-ack ttl 63 OpenSSH 7.5 (protocol 2.0) -| ssh-hostkey: +| ssh-hostkey: | 2048 e3:a2:2d:20:3a:67:68:b9:b1:9e:16:fa:48:80:82:96 (RSA) | 256 92:f0:f4:be:4f:44:60:0e:c4:92:8a:cb:34:9e:c5:c2 (ECDSA) |_ 256 09:da:a2:14:cd:c4:69:e9:13:e6:70:64:98:d0:55:0c (EdDSA) 8123/tcp open http syn-ack ttl 64 aiohttp 3.1.3 (Python 3.6) |_http-open-proxy: Proxy might be redirecting requests -| http-robots.txt: 1 disallowed entry +| http-robots.txt: 1 disallowed entry |_/ |_http-server-header: Python/3.6 aiohttp/3.1.3 |_http-title: Home Assistant @@ -70,15 +70,15 @@ Not shown: 65532 closed ports Reason: 65532 resets PORT STATE SERVICE REASON VERSION 1883/tcp open mosquitto version 1.4.12 syn-ack ttl 63 -| mqtt-subscribe: -| Topics and their most recent payloads: +| mqtt-subscribe: +| Topics and their most recent payloads: | $SYS/broker/load/connections/5min: 0.39 [...] | $SYS/broker/load/connections/15min: 0.13 |_ $SYS/broker/clients/total: 2 8123/tcp open http syn-ack ttl 64 aiohttp 3.1.3 (Python 3.6) |_http-open-proxy: Proxy might be redirecting requests -| http-robots.txt: 1 disallowed entry +| http-robots.txt: 1 disallowed entry |_/ |_http-server-header: Python/3.6 aiohttp/3.1.3 |_http-title: Home Assistant @@ -119,7 +119,7 @@ PORT STATE SERVICE REASON VERSION 445/tcp open netbios-ssn syn-ack ttl 64 Samba smbd 4.7.3 (workgroup: WORKGROUP) 8123/tcp open http syn-ack ttl 64 aiohttp 3.1.3 (Python 3.6) |_http-open-proxy: Proxy might be redirecting requests -| http-robots.txt: 1 disallowed entry +| http-robots.txt: 1 disallowed entry |_/ |_http-server-header: Python/3.6 aiohttp/3.1.3 |_http-title: Home Assistant @@ -134,21 +134,21 @@ Service Info: Host: HASSIO; OS: Linux; CPE: cpe:/o:linux:linux_kernel Host script results: |_nbstat: NetBIOS name: HASSIO, NetBIOS user: , NetBIOS MAC: (unknown) -| smb-os-discovery: +| smb-os-discovery: | OS: Windows 6.1 (Samba 4.7.3) | Computer name: \x00 | NetBIOS computer name: HASSIO\x00 | Workgroup: WORKGROUP\x00 |_ System time: 2018-05-29T16:41:05+02:00 -| smb-security-mode: +| smb-security-mode: | account_used: guest | authentication_level: user | challenge_response: supported |_ message_signing: disabled (dangerous, but default) -| smb2-security-mode: -| 2.02: +| smb2-security-mode: +| 2.02: |_ Message signing enabled but not required -| smb2-time: +| smb2-time: | date: 2018-05-29 16:41:05 |_ start_date: 1601-01-01 00:53:28 @@ -172,7 +172,7 @@ $ smbclient -L //192.168.0.215 -U% share Disk backup Disk IPC$ IPC -IPC Service (Samba HomeAssistant config share) +IPC Service (Samba Home Assistant config share) Reconnecting with SMB1 for workgroup listing. Server Comment diff --git a/source/_posts/2016-04-30-ibeacons-part-1-making-presence-detection-work-better.markdown b/source/_posts/2016-04-30-ibeacons-part-1-making-presence-detection-work-better.markdown index 8a1a8dae127..5f06498882e 100644 --- a/source/_posts/2016-04-30-ibeacons-part-1-making-presence-detection-work-better.markdown +++ b/source/_posts/2016-04-30-ibeacons-part-1-making-presence-detection-work-better.markdown @@ -35,7 +35,7 @@ You then have to (A) tell Home Assistant where the beacon is located and (B) tel #### {% linkable_title A. Tell Home Assistant where your beacon is located %} -You tell HomeAssistant about fixed locations by creating a Zone with the longitude and latitude of your beacon. You should also give the zone a name which you will also use when you set up OwnTracks. An an example this zone specifies the location of my drive way. +You tell Home Assistant about fixed locations by creating a Zone with the longitude and latitude of your beacon. You should also give the zone a name which you will also use when you set up OwnTracks. An an example this zone specifies the location of my drive way. **Example `configuration.yaml` entry** diff --git a/source/_posts/2018-07-06-release-73.markdown b/source/_posts/2018-07-06-release-73.markdown index 2f08a40ce8b..e63aea2452b 100644 --- a/source/_posts/2018-07-06-release-73.markdown +++ b/source/_posts/2018-07-06-release-73.markdown @@ -73,7 +73,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Remove typing ([@fabaff] - [#15018]) - Add support for Homekit battery service ([@schmittx] - [#14288]) ([homekit docs]) - Update PostNL unit of measure to align with UPS ([@keesschollaart81] - [#15023]) ([sensor.postnl docs]) (breaking change) -- Expose Wemo component availability to home assistant ([@gstorer] - [#14995]) ([light.wemo docs]) +- Expose Wemo component availability to Home Assistant ([@gstorer] - [#14995]) ([light.wemo docs]) - Improve volume support for Vizio Smartcast ([@JeffLIrion] - [#14981]) ([media_player.vizio docs]) - Upgrade requests to 2.19.1 ([@fabaff] - [#15019]) - Show running apps as sources for Fire TV ([@JeffLIrion] - [#15033]) ([media_player.firetv docs]) @@ -125,7 +125,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - Adding 'namespace' for prometheus metrics ([@alexbarcelo] - [#13738]) ([prometheus docs]) (breaking change) - Storage auth ([@balloob] - [#15192]) - Make sure we check access token expiration ([@balloob] - [#15207]) ([frontend docs]) -- Migrate home assistant auth provider to use storage helper ([@balloob] - [#15200]) +- Migrate Home Assistant auth provider to use storage helper ([@balloob] - [#15200]) - Fix zwave climate operation mode mappings ([@cdce8p] - [#15162]) ([climate.zwave docs]) (breaking change) - Fixed Indentation error ([@vaidyasr] - [#15210]) ([camera.xiaomi docs]) - X-Forwarded-For improvements and bug fixes ([@colinodell] - [#15204]) ([emulated_hue docs]) ([http docs]) (breaking change) diff --git a/source/lovelace/index.markdown b/source/lovelace/index.markdown index 0588126e2df..848cfeef188 100644 --- a/source/lovelace/index.markdown +++ b/source/lovelace/index.markdown @@ -116,7 +116,7 @@ views: Now restart Home Assistant, navigate to `/lovelace`. When you make changes to `ui-lovelace.yaml`, you don't have to restart Home Assistant or refresh the page. Just hit the refresh button at the top of the UI. ## {% linkable_title Setting Lovelace as the Default UI %} -Once you are ready to start using Lovelace UI as your main user interface, click on info, the "i" icon under 'Developer Tools" in the home assistant side-bar. Next, locate >>Set lovelace as default page on this device<< under the home assistant version information and click it. +Once you are ready to start using Lovelace UI as your main user interface, click on info, the "i" icon under 'Developer Tools" in the Home Assistant side-bar. Next, locate >>Set Lovelace as default page on this device<< under the Home Assistant version information and click it. Note that this is a per-device setting and will need to be changed on each device you access the UI from. From 1adc88bbf83ea22f65397bdac14aec49aaf33dd0 Mon Sep 17 00:00:00 2001 From: Kevin Duong Date: Fri, 5 Oct 2018 04:46:44 -0500 Subject: [PATCH 108/114] Host is required in tomato configuration (#6525) --- source/_components/device_tracker.tomato.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/device_tracker.tomato.markdown b/source/_components/device_tracker.tomato.markdown index b560184d17b..0c080449b64 100644 --- a/source/_components/device_tracker.tomato.markdown +++ b/source/_components/device_tracker.tomato.markdown @@ -41,7 +41,7 @@ device_tracker: {% configuration %} host: description: "The IP address or hostname of your router, e.g., `192.168.1.1` or `rt-ac68u`." - required: false + required: true type: string port: description: "The port number of your router, e.g., `443`." From b90297aa0cb5baa3409d9cab1f21fdeb800f4ef6 Mon Sep 17 00:00:00 2001 From: Gerard Date: Fri, 5 Oct 2018 12:16:59 +0200 Subject: [PATCH 109/114] Clarify the component type (#6522) --- source/_components/device_tracker.volvooncall.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/device_tracker.volvooncall.markdown b/source/_components/device_tracker.volvooncall.markdown index 0177adf5ded..26ad808ce08 100644 --- a/source/_components/device_tracker.volvooncall.markdown +++ b/source/_components/device_tracker.volvooncall.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "Volvo On Call" +title: "Volvo On Call Device Tracker" description: "Instructions for how to integrate Volvo On Call into Home Assistant." date: 2016-10-02 17:00 sidebar: true @@ -13,4 +13,4 @@ ha_release: "0.30" --- -Integrates Volvo on Call into Home Assistant. See the [main component](/components/volvooncall/) for configuration instructions. +Integrates Volvo on Call device tracker into Home Assistant. See the [main component](/components/volvooncall/) for configuration instructions. From ac7dee686abe265370974db2d116bd4331964443 Mon Sep 17 00:00:00 2001 From: Gerard Date: Fri, 5 Oct 2018 12:18:12 +0200 Subject: [PATCH 110/114] Clarify the component type (#6523) --- source/_components/switch.volvooncall.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/switch.volvooncall.markdown b/source/_components/switch.volvooncall.markdown index 0177adf5ded..993f777a9f6 100644 --- a/source/_components/switch.volvooncall.markdown +++ b/source/_components/switch.volvooncall.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "Volvo On Call" +title: "Volvo On Call Switch" description: "Instructions for how to integrate Volvo On Call into Home Assistant." date: 2016-10-02 17:00 sidebar: true @@ -13,4 +13,4 @@ ha_release: "0.30" --- -Integrates Volvo on Call into Home Assistant. See the [main component](/components/volvooncall/) for configuration instructions. +Integrates Volvo on Call heater switch into Home Assistant. See the [main component](/components/volvooncall/) for configuration instructions. From da9e0e632bfce83581ac8d7820b5fa669ca32ebe Mon Sep 17 00:00:00 2001 From: Gerard Date: Fri, 5 Oct 2018 12:25:05 +0200 Subject: [PATCH 111/114] Some textual improvements on BMW Connected Drive page (#6521) * Some textual improvements * Some more textual improvements --- .../_components/bmw_connected_drive.markdown | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/source/_components/bmw_connected_drive.markdown b/source/_components/bmw_connected_drive.markdown index 56432369dd8..ce7688c9d9d 100644 --- a/source/_components/bmw_connected_drive.markdown +++ b/source/_components/bmw_connected_drive.markdown @@ -12,10 +12,17 @@ ha_category: Car ha_release: 0.64 --- -The `bmw_connected_drive` component lets you retrieve data on your BMW vehicle from the BMW Connected Drive portal. You need to have a working BMW Connected Drive account, and a Connected Drive enabled vehicle for this to work. +The `bmw_connected_drive` component lets you retrieve data of your BMW vehicle from the BMW Connected Drive portal. You need to have a working BMW Connected Drive account, and a Connected Drive enabled vehicle for this to work. For compatibility with your BMW vehicle check the [bimmer_connected page](https://github.com/m1n3rva/bimmer_connected) on github. +This component provides the following platforms: + + - Binary Sensors: Doors, windows, condition based services, check control messages, parking lights, door lock state, charging status (electric cars) and connections status (electric cars). + - Device tracker: The location of your car. + - Lock: Control the lock of your car. + - Sensors: Mileage, remaining range, remaining fuel, charging time remaing (electric cars), charging status (electric cars), remaing range electric (electric cars). + To enable this component in your installation, add the following to your `configuration.yaml` file: @@ -25,7 +32,7 @@ bmw_connected_drive: name: username: USERNAME_BMW_CONNECTED_DRIVE password: PASSWORD_BMW_CONNECTED_DRIVE - region: one of "north_america", "china" , "rest_of_world" + region: one of "north_america", "china", "rest_of_world" ``` {% configuration %} @@ -47,7 +54,7 @@ bmw_connected_drive: required: true type: string region: - description: "The region of your Connected Drive account. Please use of these values: `north_america`, `china`, `rest_of_world`" + description: "The region of your Connected Drive account. Please use one of these values: `north_america`, `china`, `rest_of_world`" required: true type: string read_only: @@ -77,15 +84,15 @@ The vehicle is identified via the parameter `vin`. ### {% linkable_title Sound the horn %} -The service `bmw_connected_drive.sound_horn` sounds the horn of the vehicle. Use this feature responsibly, as it might annoy your neighbors. The vehicle is identified via the parameter `vin`. +The service `bmw_connected_drive.sound_horn` sounds the horn of the vehicle. This option is not available in some countries (among which the UK). Use this feature responsibly, as it might annoy your neighbors. The vehicle is identified via the parameter `vin`. ### {% linkable_title Flash the lights %} -The service `bmw_connected_drive.light_flash' flashes the lights of the vehicle. The vehicle is identified via the parameter `vin`. +The service `bmw_connected_drive.light_flash` flashes the lights of the vehicle. The vehicle is identified via the parameter `vin`. ### {% linkable_title Update the state %} -The service `bmw_connected_drive.update_state`fetches the last state of the vehicles of all your accounts from the BMW server. This does *not* trigger an update from the vehicle; it gets the data from the BMW servers. So this service does *not* interact with your vehicles. +The service `bmw_connected_drive.update_state` fetches the last state of the vehicles of all your accounts from the BMW server. This does *not* trigger an update from the vehicle; it gets the data from the BMW servers. So this service does *not* interact with your vehicles. This service does not require any attributes. From 6a27dd89e50ee61906f1b60439b44f36c911e02b Mon Sep 17 00:00:00 2001 From: Gerard Date: Fri, 5 Oct 2018 12:29:25 +0200 Subject: [PATCH 112/114] Remove duplicate text (#6520) --- source/_docs/authentication/multi-factor-auth.markdown | 2 -- 1 file changed, 2 deletions(-) diff --git a/source/_docs/authentication/multi-factor-auth.markdown b/source/_docs/authentication/multi-factor-auth.markdown index 06a3843c82f..37abf070cd6 100644 --- a/source/_docs/authentication/multi-factor-auth.markdown +++ b/source/_docs/authentication/multi-factor-auth.markdown @@ -50,8 +50,6 @@ There are several authenticator apps on the market, we recommend either [Google Please treat the secret key like a password, never expose it to others.

-By default, one TOTP multi-factor named "Authenticator app" will be auto loaded if no `auth_mfa_modules` configuration section defined in the `configuration.yaml` file. - By default one TOTP multi-factor auth module named "Authenticator app" will be auto loaded if no `auth_mfa_modules` config section defined in `configuration.yaml`. Example of configuration: From 19d267b5724cf2875c76dd3ade9e7ae79d192c8d Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Fri, 5 Oct 2018 12:41:00 +0200 Subject: [PATCH 113/114] Updated all Zigbee configuration variable (#6514) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Updated all Zigbee configuration variable Updated style of all Zigbee documentation to follow new configuration variables description. Related to #6385. * Update binary_sensor.zigbee.markdown * Update zigbee.markdown ✏️ Tweak * Update switch.zigbee.markdown ✏️ Tweak * Update sensor.zigbee.markdown ✏️ Tweak * Update light.zigbee.markdown ✏️ Tweak * Update binary_sensor.zigbee.markdown ✏️ Tweak * Update zigbee.markdown ✏️ Second Tweak --- .../_components/binary_sensor.zigbee.markdown | 26 +++++++++++---- source/_components/light.zigbee.markdown | 25 +++++++++++---- source/_components/sensor.zigbee.markdown | 32 +++++++++++++------ source/_components/switch.zigbee.markdown | 25 +++++++++++---- source/_components/zigbee.markdown | 14 ++++++-- 5 files changed, 92 insertions(+), 30 deletions(-) diff --git a/source/_components/binary_sensor.zigbee.markdown b/source/_components/binary_sensor.zigbee.markdown index 233ebb2a91a..60f8aac30e1 100644 --- a/source/_components/binary_sensor.zigbee.markdown +++ b/source/_components/binary_sensor.zigbee.markdown @@ -25,10 +25,22 @@ binary_sensor: pin: 0 ``` -Configuration variables: - -- **name** (*Required*): The name you would like to give the binary sensor in Home Assistant. -- **pin** (*Required*): The number identifying which pin to use. -- **address** (*Optional*): The long 64-bit address of the remote ZigBee device whose digital input pin you'd like to sample. Do not include this variable if you want to sample the local ZigBee device's pins. -- **on_state** (*Optional*): Either `high` (default) or `low`, depicting whether the binary sensor is considered `on` when the pin is `high` or `low`. - +{% configuration %} +name: + description: The name you would like to give the binary sensor in Home Assistant. + required: true + type: string +pin: + description: The number identifying which pin to use. + required: true + type: integer +address: + description: The long 64-bit address of the remote ZigBee device whose digital input pin you'd like to sample. Do not include this variable if you want to sample the local ZigBee device's pins. + required: false + type: string +on_state: + description: Either `high` or `low`, depicting whether the binary sensor is considered `on` when the pin is `high` or `low`. + required: false + default: high + type: string +{% endconfiguration %} diff --git a/source/_components/light.zigbee.markdown b/source/_components/light.zigbee.markdown index a7d8529551e..d88f348cb44 100644 --- a/source/_components/light.zigbee.markdown +++ b/source/_components/light.zigbee.markdown @@ -24,9 +24,22 @@ light: pin: 0 ``` -Configuration variables: - -- **name** (*Required*): The name you would like to give the light in Home Assistant. -- **pin** (*Required*): The number identifying which pin to use. -- **address** (*Optional*): The long 64 bit address of the remote ZigBee device whose digital output pin you would like to switch. Do not include this variable if you want to switch the local ZigBee device's pins. -- **on_state** (*Optional*): Either `high` (default) or `low`, depicting whether the digital output pin is pulled `high` or `low` when the light is turned on. +{% configuration %} +name: + description: The name you would like to give the light in Home Assistant. + required: true + type: string +pin: + description: The number identifying which pin to use. + required: true + type: integer +address: + description: The long 64-bit address of the remote ZigBee device whose digital output pin you would like to switch. Do not include this variable if you want to switch the local ZigBee device's pins. + required: false + type: string +on_state: + description: Either `high` or `low`, depicting whether the digital output pin is pulled `high` or `low` when the light is turned on. + required: false + default: high + type: string +{% endconfiguration %} diff --git a/source/_components/sensor.zigbee.markdown b/source/_components/sensor.zigbee.markdown index 64049c9837f..ad1aa6a0388 100644 --- a/source/_components/sensor.zigbee.markdown +++ b/source/_components/sensor.zigbee.markdown @@ -30,14 +30,29 @@ sensor: address: 0013A2004233D138 ``` -Configuration variables: - -- **name** (*Required*): The name you would like to give the sensor in Home Assistant. -- **type** (*Required*): Set to `analog` or `temperature`. -- **pin** (*Optional*): The number identifying which pin to sample. -- **address** (*Optional*): The long 64 bit address of the remote ZigBee device whose pin you would like to sample. Do not include this variable if you want to sample the local ZigBee device's pins. -- **max_volts** (*Optional*): The maximum voltage which the input pin is able to read. Defaults to `1.2`. - +{% configuration %} +name: + description: The name you would like to give the sensor in Home Assistant. + required: true + type: string +type: + description: Set to `analog` or `temperature`. + required: true + type: string +pin: + description: The number identifying which pin to sample. + required: false + type: integer +address: + description: The long 64-bit address of the remote ZigBee device whose pin you would like to sample. Do not include this variable if you want to sample the local ZigBee device's pins. + required: false + type: string +max_volts: + description: The maximum voltage which the input pin is able to read. + required: false + default: 1.2 + type: float +{% endconfiguration %} ## {% linkable_title Examples %} @@ -73,4 +88,3 @@ sensor: type: temperature address: 0013A20050E752C5 ``` - diff --git a/source/_components/switch.zigbee.markdown b/source/_components/switch.zigbee.markdown index cbdd87bdfe4..277c31184c3 100644 --- a/source/_components/switch.zigbee.markdown +++ b/source/_components/switch.zigbee.markdown @@ -26,9 +26,22 @@ switch: on_state: low ``` -Configuration variables: - -- **name** (*Required*): The name you would like to give the switch in Home Assistant. -- **pin** (*Required*): The number identifying which pin to use. -- **address**: The long 6 4bit address of the remote ZigBee device whose digital output pin you would like to switch. Do not include this variable if you want to switch the local ZigBee device's pins. -- **on_state**: Either `high` (default) or `low`, depicting whether the digital output pin is pulled `high` or `low` when the switch is turned on. +{% configuration %} +name: + description: The name you would like to give the switch in Home Assistant. + required: true + type: string +pin: + description: The number identifying which pin to use. + required: true + type: integer +address: + description: The long 64-bit address of the remote ZigBee device whose pin you would like to sample. Do not include this variable if you want to sample the local ZigBee device's pins. + required: false + type: string +on_state: + description: Either `high` or `low`, depicting whether the digital output pin is pulled `high` or `low` when the switch is turned on. + required: false + default: high + type: string +{% endconfiguration %} diff --git a/source/_components/zigbee.markdown b/source/_components/zigbee.markdown index a7e8b319744..e2b3b2429bd 100644 --- a/source/_components/zigbee.markdown +++ b/source/_components/zigbee.markdown @@ -31,8 +31,18 @@ A `zigbee` section must be present in the `configuration.yaml` file and contain zigbee: ``` -- **device** (*Optional*): The serial port to which the local ZigBee device is connected. Defaults to `/dev/ttyUSB0` -- **baud** (*Optional*): The baud rate at which to communicate with the local ZigBee device. Defaults to `9600` +{% configuration %} +device: + description: The serial port to which the local ZigBee device is connected. + required: false + default: "/dev/ttyUSB0" + type: string +baud: + description: The baud rate at which to communicate with the local ZigBee device. + required: false + default: 9600 + type: integer +{% endconfiguration %} To find the possible serial port names of your device, run: From d7aef10b753daf3e32dd02b1b3f0db02532e93ad Mon Sep 17 00:00:00 2001 From: WofWca Date: Fri, 5 Oct 2018 18:12:59 +0700 Subject: [PATCH 114/114] Fix mixed up description (#6530) The original description has been replaced by a wrong one in #6514. --- source/_components/switch.zigbee.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/switch.zigbee.markdown b/source/_components/switch.zigbee.markdown index 277c31184c3..15f2dd2386e 100644 --- a/source/_components/switch.zigbee.markdown +++ b/source/_components/switch.zigbee.markdown @@ -36,7 +36,7 @@ pin: required: true type: integer address: - description: The long 64-bit address of the remote ZigBee device whose pin you would like to sample. Do not include this variable if you want to sample the local ZigBee device's pins. + description: The long 64-bit address of the remote ZigBee device whose digital output pin you would like to switch. Do not include this variable if you want to switch the local ZigBee device's pins. required: false type: string on_state: