From 099f00804f31699236c1deba7c9a1f0fdf198e62 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 4 Jan 2019 19:49:48 +0100 Subject: [PATCH 01/57] Update --- source/developers/credits.markdown | 942 +++++++++++++++++++---------- 1 file changed, 607 insertions(+), 335 deletions(-) diff --git a/source/developers/credits.markdown b/source/developers/credits.markdown index f0c537dba8c..b588bdb3ede 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-12-13, 11:44:16 +0000 +date: 2019-01-04, 18:48:01 +0000 sidebar: true comments: false sharing: true @@ -13,33 +13,33 @@ 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 "8424 total commits to the home-assistant organization: -4661 commits to home-assistant -1719 commits to home-assistant.io -1267 commits to home-assistant-polymer +- [Paulus Schoutsen (@balloob)](https://github.com/balloob "8521 total commits to the home-assistant organization: +4692 commits to home-assistant +1742 commits to home-assistant.io +1296 commits to home-assistant-polymer 237 commits to home-assistant-js 146 commits to developers.home-assistant -129 commits to netdisco +131 commits to netdisco 116 commits to home-assistant-js-websocket 43 commits to hass-release +20 commits to data.home-assistant 17 commits to LabelBot 15 commits to home-assistant-assets 11 commits to hassio -10 commits to data.home-assistant 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 +5 commits to home-assistant-notebooks 4 commits to ui-schema -3 commits to home-assistant-notebooks 3 commits to hassio-addons 3 commits to hassio-build 2 commits to lambda-home-assistant-github 2 commits to home-assistant-iOS -2 commits to issue-bot 2 commits to hassio-addons-example -1 commit to warrant +2 commits to issue-bot 1 commit to architecture +1 commit to warrant ") ### {% linkable_title Contributors %} @@ -70,12 +70,15 @@ 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 ") +- [a\-r\-j\-a\-n (@a-r-j-a-n)](https://github.com/a-r-j-a-n "1 total commits to the home-assistant organization: +1 commit to home-assistant.io +") - [Aaron (@mcd1992)](https://github.com/mcd1992 "5 total commits to the home-assistant organization: 5 commits to open-zwave ") -- [Aaron Bach (@bachya)](https://github.com/bachya "120 total commits to the home-assistant organization: -90 commits to home-assistant -30 commits to home-assistant.io +- [Aaron Bach (@bachya)](https://github.com/bachya "124 total commits to the home-assistant organization: +92 commits to home-assistant +32 commits to home-assistant.io ") - [Aaron Linville (@linville)](https://github.com/linville "3 total commits to the home-assistant organization: 2 commits to appdaemon @@ -108,9 +111,9 @@ This page contains a list of people who have contributed in one way or another t - [ABOTlegacy (@ABOTlegacy)](https://github.com/ABOTlegacy "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") -- [Abílio Costa (@abmantis)](https://github.com/abmantis "38 total commits to the home-assistant organization: -23 commits to home-assistant -11 commits to home-assistant.io +- [Abílio Costa (@abmantis)](https://github.com/abmantis "40 total commits to the home-assistant organization: +24 commits to home-assistant +12 commits to home-assistant.io 2 commits to home-assistant-polymer 1 commit to home-assistant-js-websocket 1 commit to netdisco @@ -118,9 +121,9 @@ This page contains a list of people who have contributed in one way or another t - [Achilleas Pipinellis (@axilleas)](https://github.com/axilleas "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") -- [Adam (@SilvrrGIT)](https://github.com/SilvrrGIT "7 total commits to the home-assistant organization: -6 commits to home-assistant.io -1 commit to home-assistant +- [Adam (@SilvrrGIT)](https://github.com/SilvrrGIT "17 total commits to the home-assistant organization: +15 commits to home-assistant.io +2 commits to home-assistant ") - [Adam Allport (@AAllport)](https://github.com/AAllport "1 total commits to the home-assistant organization: 1 commit to home-assistant.io @@ -129,9 +132,9 @@ This page contains a list of people who have contributed in one way or another t 1 commit to home-assistant-polymer 1 commit to home-assistant ") -- [Adam Belebczuk (@sqldiablo)](https://github.com/sqldiablo "13 total commits to the home-assistant organization: -8 commits to home-assistant -5 commits to home-assistant.io +- [Adam Belebczuk (@sqldiablo)](https://github.com/sqldiablo "18 total commits to the home-assistant organization: +12 commits to home-assistant +6 commits to home-assistant.io ") - [Adam Cooper (@GenericStudent)](https://github.com/GenericStudent "11 total commits to the home-assistant organization: 8 commits to home-assistant @@ -247,8 +250,8 @@ This page contains a list of people who have contributed in one way or another t 1 commit to home-assistant.io ") - [akloeckner (@akloeckner)](https://github.com/akloeckner "12 total commits to the home-assistant organization: -6 commits to home-assistant.io 6 commits to home-assistant +6 commits to home-assistant.io ") - [Akriti Chadda (@akriticg)](https://github.com/akriticg "1 total commits to the home-assistant organization: 1 commit to home-assistant.io @@ -268,10 +271,11 @@ This page contains a list of people who have contributed in one way or another t - [Alasdair Nicol (@alasdairnicol)](https://github.com/alasdairnicol "2 total commits to the home-assistant organization: 2 commits to home-assistant.io ") -- [Alastair D'Silva (@deece)](https://github.com/deece "3 total commits to the home-assistant organization: -1 commit to hassio +- [Alastair D'Silva (@deece)](https://github.com/deece "4 total commits to the home-assistant organization: 1 commit to hassio-homeassistant +1 commit to hassos 1 commit to hassio-build +1 commit to hassio ") - [Albatross (@DyingAlbatross)](https://github.com/DyingAlbatross "2 total commits to the home-assistant organization: 2 commits to home-assistant.io @@ -286,8 +290,9 @@ This page contains a list of people who have contributed in one way or another t - [AlCalzone (@AlCalzone)](https://github.com/AlCalzone "1 total commits to the home-assistant organization: 1 commit to open-zwave ") -- [Alec Rust (@AlecRust)](https://github.com/AlecRust "5 total commits to the home-assistant organization: -5 commits to home-assistant.io +- [Alec Rust (@AlecRust)](https://github.com/AlecRust "7 total commits to the home-assistant organization: +6 commits to home-assistant.io +1 commit to hassio-addons ") - [Aleksandar Todorović \(r3bl\) (@aleksandar-todorovic)](https://github.com/aleksandar-todorovic "1 total commits to the home-assistant organization: 1 commit to home-assistant.io @@ -315,10 +320,10 @@ This page contains a list of people who have contributed in one way or another t 2 commits to home-assistant.io 1 commit to home-assistant ") -- [Alex (@alexrockt)](https://github.com/alexrockt "1 total commits to the home-assistant organization: +- [Alex (@MungoRae)](https://github.com/MungoRae "1 total commits to the home-assistant organization: 1 commit to home-assistant ") -- [Alex (@MungoRae)](https://github.com/MungoRae "1 total commits to the home-assistant organization: +- [Alex (@alexrockt)](https://github.com/alexrockt "1 total commits to the home-assistant organization: 1 commit to home-assistant ") - [Alex (@alexanderVonBergner)](https://github.com/alexanderVonBergner "1 total commits to the home-assistant organization: @@ -399,8 +404,8 @@ This page contains a list of people who have contributed in one way or another t - [Alexandre Prates Dias (@pratesbh)](https://github.com/pratesbh "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") -- [Alexei Chetroi (@Adminiuga)](https://github.com/Adminiuga "13 total commits to the home-assistant organization: -12 commits to home-assistant +- [Alexei Chetroi (@Adminiuga)](https://github.com/Adminiuga "19 total commits to the home-assistant organization: +18 commits to home-assistant 1 commit to home-assistant-polymer ") - [Alexis Iglauer (@ax42)](https://github.com/ax42 "4 total commits to the home-assistant organization: @@ -430,13 +435,16 @@ This page contains a list of people who have contributed in one way or another t - [allixx (@allixx)](https://github.com/allixx "1 total commits to the home-assistant organization: 1 commit to dehydrated ") -- [Alok Saboo (@arsaboo)](https://github.com/arsaboo "160 total commits to the home-assistant organization: -91 commits to home-assistant.io +- [Almost Engineer (@almostengr)](https://github.com/almostengr "1 total commits to the home-assistant organization: +1 commit to home-assistant.io +") +- [Alok Saboo (@arsaboo)](https://github.com/arsaboo "161 total commits to the home-assistant organization: +92 commits to home-assistant.io 56 commits to home-assistant 7 commits to home-assistant-polymer 3 commits to developers.home-assistant -1 commit to hassbian-scripts 1 commit to pi-gen +1 commit to hassbian-scripts 1 commit to hassio-addons ") - [amigian74 (@amigian74)](https://github.com/amigian74 "2 total commits to the home-assistant organization: @@ -465,9 +473,10 @@ This page contains a list of people who have contributed in one way or another t - [Anders Gjendem (@agjendem)](https://github.com/agjendem "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") -- [Anders Melchiorsen (@amelchio)](https://github.com/amelchio "288 total commits to the home-assistant organization: -239 commits to home-assistant +- [Anders Melchiorsen (@amelchio)](https://github.com/amelchio "295 total commits to the home-assistant organization: +240 commits to home-assistant 46 commits to home-assistant.io +6 commits to pyharmony 3 commits to home-assistant-polymer ") - [Anders Norås (@anoras)](https://github.com/anoras "1 total commits to the home-assistant organization: @@ -476,9 +485,13 @@ This page contains a list of people who have contributed in one way or another t - [andig (@andig)](https://github.com/andig "2 total commits to the home-assistant organization: 2 commits to pi-gen ") -- [Andrea (@BubiDevs)](https://github.com/BubiDevs "1 total commits to the home-assistant organization: +- [Andre Lengwenus (@alengwenus)](https://github.com/alengwenus "2 total commits to the home-assistant organization: +1 commit to home-assistant 1 commit to home-assistant.io ") +- [Andrea (@BubiDevs)](https://github.com/BubiDevs "2 total commits to the home-assistant organization: +2 commits to home-assistant.io +") - [Andrea Campi (@andreacampi)](https://github.com/andreacampi "8 total commits to the home-assistant organization: 6 commits to home-assistant 2 commits to home-assistant.io @@ -521,11 +534,16 @@ This page contains a list of people who have contributed in one way or another t - [Andreea\-Daniela Ene (@AndreeaEne)](https://github.com/AndreeaEne "3 total commits to the home-assistant organization: 3 commits to home-assistant.io ") +- [Andrei (@gipnokote)](https://github.com/gipnokote "3 total commits to the home-assistant organization: +2 commits to home-assistant +1 commit to home-assistant.io +") - [Andrei Pop (@andreipop2005)](https://github.com/andreipop2005 "2 total commits to the home-assistant organization: 2 commits to home-assistant ") -- [Andrej Friesen (@ajfriesen)](https://github.com/ajfriesen "3 total commits to the home-assistant organization: +- [Andrej Friesen (@ajfriesen)](https://github.com/ajfriesen "4 total commits to the home-assistant organization: 3 commits to home-assistant.io +1 commit to developers.home-assistant ") - [Andrejs (@tlpbu)](https://github.com/tlpbu "1 total commits to the home-assistant organization: 1 commit to home-assistant.io @@ -542,10 +560,10 @@ This page contains a list of people who have contributed in one way or another t 1 commit to home-assistant 1 commit to home-assistant.io ") -- [Andrew Cockburn (@acockburn)](https://github.com/acockburn "1181 total commits to the home-assistant organization: -1044 commits to appdaemon +- [Andrew Cockburn (@acockburn)](https://github.com/acockburn "1249 total commits to the home-assistant organization: +1111 commits to appdaemon 88 commits to hadashboard -27 commits to scenegen +28 commits to scenegen 22 commits to home-assistant.io ") - [Andrew Fahrenholtz (@PlasmaEye)](https://github.com/PlasmaEye "1 total commits to the home-assistant organization: @@ -555,14 +573,17 @@ This page contains a list of people who have contributed in one way or another t 1 commit to appdaemon 1 commit to home-assistant.io ") -- [Andrew Hayworth (@ahayworth)](https://github.com/ahayworth "10 total commits to the home-assistant organization: -7 commits to home-assistant +- [Andrew Hayworth (@ahayworth)](https://github.com/ahayworth "12 total commits to the home-assistant organization: +9 commits to home-assistant 3 commits to home-assistant.io ") - [Andrew LeCody (@aceat64)](https://github.com/aceat64 "2 total commits to the home-assistant organization: 1 commit to home-assistant 1 commit to home-assistant.io ") +- [Andrew Loe (@loe)](https://github.com/loe "1 total commits to the home-assistant organization: +1 commit to home-assistant +") - [Andrew Patton (@acusti)](https://github.com/acusti "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") @@ -597,9 +618,9 @@ This page contains a list of people who have contributed in one way or another t - [andrewfoster (@andrewfoster)](https://github.com/andrewfoster "2 total commits to the home-assistant organization: 2 commits to home-assistant.io ") -- [Andrey (@andrey-git)](https://github.com/andrey-git "328 total commits to the home-assistant organization: +- [Andrey (@andrey-git)](https://github.com/andrey-git "329 total commits to the home-assistant organization: 148 commits to home-assistant -138 commits to home-assistant-polymer +139 commits to home-assistant-polymer 37 commits to home-assistant.io 4 commits to open-zwave 1 commit to home-assistant-js-websocket @@ -661,7 +682,8 @@ This page contains a list of people who have contributed in one way or another t - [Anthony Arnaud (@aarnaud)](https://github.com/aarnaud "2 total commits to the home-assistant organization: 2 commits to home-assistant ") -- [Anthony Hughes (@tony2nite)](https://github.com/tony2nite "3 total commits to the home-assistant organization: +- [Anthony Hughes (@tony2nite)](https://github.com/tony2nite "15 total commits to the home-assistant organization: +12 commits to pyharmony 1 commit to netdisco 1 commit to home-assistant 1 commit to home-assistant.io @@ -674,8 +696,8 @@ This page contains a list of people who have contributed in one way or another t 2 commits to home-assistant.io 1 commit to home-assistant-polymer ") -- [Antoine GRÉA (@grea09)](https://github.com/grea09 "2 total commits to the home-assistant organization: -1 commit to home-assistant +- [Antoine GRÉA (@grea09)](https://github.com/grea09 "3 total commits to the home-assistant organization: +2 commits to home-assistant 1 commit to home-assistant.io ") - [Antoine Meillet (@inetAnt)](https://github.com/inetAnt "1 total commits to the home-assistant organization: @@ -723,6 +745,9 @@ This page contains a list of people who have contributed in one way or another t - [apastuszak (@apastuszak)](https://github.com/apastuszak "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") +- [apetrycki (@apetrycki)](https://github.com/apetrycki "1 total commits to the home-assistant organization: +1 commit to home-assistant +") - [apo\-mak (@apo-mak)](https://github.com/apo-mak "2 total commits to the home-assistant organization: 1 commit to home-assistant-polymer 1 commit to home-assistant.io @@ -772,6 +797,9 @@ This page contains a list of people who have contributed in one way or another t 6 commits to home-assistant 2 commits to home-assistant.io ") +- [Art M\. Gallagher (@artmg)](https://github.com/artmg "1 total commits to the home-assistant organization: +1 commit to scenegen +") - [Artem (@ArtHome12)](https://github.com/ArtHome12 "2 total commits to the home-assistant organization: 2 commits to developers.home-assistant ") @@ -898,9 +926,9 @@ This page contains a list of people who have contributed in one way or another t - [Baran Kaynak (@barankaynak)](https://github.com/barankaynak "1 total commits to the home-assistant organization: 1 commit to home-assistant-polymer ") -- [Barry Williams (@bazwilliams)](https://github.com/bazwilliams "10 total commits to the home-assistant organization: +- [Barry Williams (@bazwilliams)](https://github.com/bazwilliams "11 total commits to the home-assistant organization: 6 commits to home-assistant -2 commits to netdisco +3 commits to netdisco 2 commits to home-assistant.io ") - [Bart S (@zBart)](https://github.com/zBart "1 total commits to the home-assistant organization: @@ -956,6 +984,9 @@ This page contains a list of people who have contributed in one way or another t - [beestree (@beestree)](https://github.com/beestree "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") +- [bellma101 (@bellma101)](https://github.com/bellma101 "1 total commits to the home-assistant organization: +1 commit to data.home-assistant +") - [Ben (@benweb)](https://github.com/benweb "6 total commits to the home-assistant organization: 6 commits to open-zwave ") @@ -1031,6 +1062,9 @@ This page contains a list of people who have contributed in one way or another t - [Benji (@bbbenji)](https://github.com/bbbenji "2 total commits to the home-assistant organization: 2 commits to home-assistant.io ") +- [Bennett Kanuka (@bkanuka)](https://github.com/bkanuka "8 total commits to the home-assistant organization: +8 commits to pyharmony +") - [Benny de Leeuw (@leeuwte)](https://github.com/leeuwte "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") @@ -1054,9 +1088,9 @@ This page contains a list of people who have contributed in one way or another t - [bestlibre (@bestlibre)](https://github.com/bestlibre "16 total commits to the home-assistant organization: 8 commits to home-assistant 5 commits to home-assistant.io -1 commit to hassio 1 commit to hassio-build 1 commit to home-assistant-polymer +1 commit to hassio ") - [bigbadblunt (@bigbadblunt)](https://github.com/bigbadblunt "1 total commits to the home-assistant organization: 1 commit to home-assistant.io @@ -1131,14 +1165,18 @@ This page contains a list of people who have contributed in one way or another t 1 commit to home-assistant 1 commit to home-assistant.io ") +- [Bo (@bohmandan)](https://github.com/bohmandan "1 total commits to the home-assistant organization: +1 commit to home-assistant.io +") - [Bob Anderson (@rwa)](https://github.com/rwa "12 total commits to the home-assistant organization: 7 commits to home-assistant 4 commits to home-assistant.io 1 commit to appdaemon ") -- [Bob Clough (@thinkl33t)](https://github.com/thinkl33t "4 total commits to the home-assistant organization: -3 commits to home-assistant +- [Bob Clough (@thinkl33t)](https://github.com/thinkl33t "6 total commits to the home-assistant organization: +4 commits to home-assistant 1 commit to appdaemon +1 commit to home-assistant.io ") - [Bob Igo (@Human)](https://github.com/Human "4 total commits to the home-assistant organization: 3 commits to home-assistant.io @@ -1157,8 +1195,8 @@ This page contains a list of people who have contributed in one way or another t 2 commits to home-assistant 2 commits to home-assistant.io ") -- [bonanitech (@bonanitech)](https://github.com/bonanitech "15 total commits to the home-assistant organization: -15 commits to home-assistant.io +- [bonanitech (@bonanitech)](https://github.com/bonanitech "16 total commits to the home-assistant organization: +16 commits to home-assistant.io ") - [bonterra (@bonterra)](https://github.com/bonterra "1 total commits to the home-assistant organization: 1 commit to home-assistant.io @@ -1168,8 +1206,8 @@ This page contains a list of people who have contributed in one way or another t 2 commits to home-assistant ") - [Boris K (@bokub)](https://github.com/bokub "12 total commits to the home-assistant organization: -6 commits to home-assistant.io 6 commits to home-assistant +6 commits to home-assistant.io ") - [bottomquark (@bottomquark)](https://github.com/bottomquark "4 total commits to the home-assistant organization: 3 commits to home-assistant.io @@ -1215,10 +1253,11 @@ This page contains a list of people who have contributed in one way or another t - [Brahma Fear (@brahmafear)](https://github.com/brahmafear "8 total commits to the home-assistant organization: 8 commits to home-assistant.io ") -- [Bram Kragten (@bramkragten)](https://github.com/bramkragten "67 total commits to the home-assistant organization: -34 commits to home-assistant-polymer +- [Bram Kragten (@bramkragten)](https://github.com/bramkragten "70 total commits to the home-assistant organization: +35 commits to home-assistant-polymer 25 commits to home-assistant -8 commits to home-assistant.io +9 commits to home-assistant.io +1 commit to home-assistant-notebooks ") - [Brandon Mathis (@imathis)](https://github.com/imathis "484 total commits to the home-assistant organization: 484 commits to home-assistant.io @@ -1232,10 +1271,11 @@ This page contains a list of people who have contributed in one way or another t - [brburns (@brburns)](https://github.com/brburns "2 total commits to the home-assistant organization: 2 commits to netdisco ") -- [Brendan Berg (@captainnapalm)](https://github.com/captainnapalm "1 total commits to the home-assistant organization: -1 commit to home-assistant.io +- [bremor (@bremor)](https://github.com/bremor "3 total commits to the home-assistant organization: +2 commits to home-assistant.io +1 commit to home-assistant ") -- [BrendanMoran (@bremor)](https://github.com/bremor "1 total commits to the home-assistant organization: +- [Brendan Berg (@captainnapalm)](https://github.com/captainnapalm "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") - [Brendon Baumgartner (@bbrendon)](https://github.com/bbrendon "11 total commits to the home-assistant organization: @@ -1301,8 +1341,8 @@ This page contains a list of people who have contributed in one way or another t - [Brian Torres\-Gil (@btorresgil)](https://github.com/btorresgil "1 total commits to the home-assistant organization: 1 commit to home-assistant ") -- [Brian Towles (@wonderslug)](https://github.com/wonderslug "1 total commits to the home-assistant organization: -1 commit to home-assistant +- [Brian Towles (@wonderslug)](https://github.com/wonderslug "2 total commits to the home-assistant organization: +2 commits to home-assistant ") - [Brig Lamoreaux (@briglx)](https://github.com/briglx "2 total commits to the home-assistant organization: 1 commit to home-assistant @@ -1374,11 +1414,11 @@ This page contains a list of people who have contributed in one way or another t 9 commits to home-assistant 3 commits to hassio ") -- [c\-soft (@c-soft)](https://github.com/c-soft "2 total commits to the home-assistant organization: -1 commit to home-assistant -1 commit to home-assistant.io +- [c\-soft (@c-soft)](https://github.com/c-soft "4 total commits to the home-assistant organization: +2 commits to home-assistant +2 commits to home-assistant.io ") -- [Caius Seiger (@caiuspb)](https://github.com/caiuspb "3 total commits to the home-assistant organization: +- [caius (@caiuspb)](https://github.com/caiuspb "3 total commits to the home-assistant organization: 3 commits to home-assistant ") - [Caleb (@finish06)](https://github.com/finish06 "8 total commits to the home-assistant organization: @@ -1407,9 +1447,9 @@ This page contains a list of people who have contributed in one way or another t - [Carlo Costanzo (@CCOSTAN)](https://github.com/CCOSTAN "100 total commits to the home-assistant organization: 92 commits to home-assistant.io 5 commits to home-assistant -1 commit to hassbian-scripts -1 commit to homebridge-homeassistant 1 commit to fabric-home-assistant +1 commit to homebridge-homeassistant +1 commit to hassbian-scripts ") - [Carlos Gustavo Sarmiento (@carlos-sarmiento)](https://github.com/carlos-sarmiento "2 total commits to the home-assistant organization: 1 commit to home-assistant @@ -1418,10 +1458,16 @@ This page contains a list of people who have contributed in one way or another t - [carlosmgr (@carlosmgr)](https://github.com/carlosmgr "6 total commits to the home-assistant organization: 6 commits to home-assistant ") +- [carstenschroeder (@carstenschroeder)](https://github.com/carstenschroeder "2 total commits to the home-assistant organization: +2 commits to home-assistant +") - [Carter (@BluGeni)](https://github.com/BluGeni "3 total commits to the home-assistant organization: 2 commits to home-assistant.io 1 commit to home-assistant ") +- [Casper (@casperklein)](https://github.com/casperklein "1 total commits to the home-assistant organization: +1 commit to hassio +") - [Casper Weiss Bang (@C0DK)](https://github.com/C0DK "1 total commits to the home-assistant organization: 1 commit to home-assistant ") @@ -1438,6 +1484,9 @@ This page contains a list of people who have contributed in one way or another t 1 commit to open-zwave 1 commit to home-assistant.io ") +- [cclauss (@cclauss)](https://github.com/cclauss "1 total commits to the home-assistant organization: +1 commit to appdaemon +") - [cdce8p (@cdce8p)](https://github.com/cdce8p "203 total commits to the home-assistant organization: 128 commits to home-assistant 50 commits to home-assistant.io @@ -1445,8 +1494,9 @@ This page contains a list of people who have contributed in one way or another t 6 commits to developers.home-assistant 5 commits to hass-release ") -- [cdheiser (@cdheiser)](https://github.com/cdheiser "1 total commits to the home-assistant organization: -1 commit to home-assistant +- [cdheiser (@cdheiser)](https://github.com/cdheiser "3 total commits to the home-assistant organization: +2 commits to home-assistant +1 commit to home-assistant.io ") - [Cecron (@Cecron)](https://github.com/Cecron "1 total commits to the home-assistant organization: 1 commit to appdaemon @@ -1457,6 +1507,9 @@ This page contains a list of people who have contributed in one way or another t - [Cedric Van Goethem (@Zepheus)](https://github.com/Zepheus "2 total commits to the home-assistant organization: 2 commits to home-assistant ") +- [ceejii (@ceejii)](https://github.com/ceejii "2 total commits to the home-assistant organization: +2 commits to home-assistant.io +") - [celeroll (@celeroll)](https://github.com/celeroll "1 total commits to the home-assistant organization: 1 commit to home-assistant ") @@ -1466,8 +1519,8 @@ This page contains a list of people who have contributed in one way or another t - [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 "5 total commits to the home-assistant organization: -3 commits to hassio-addons +- [Censored3 (@Censored3)](https://github.com/Censored3 "6 total commits to the home-assistant organization: +4 commits to hassio-addons 1 commit to developers.home-assistant 1 commit to home-assistant.io ") @@ -1490,8 +1543,8 @@ This page contains a list of people who have contributed in one way or another t 12 commits to home-assistant 7 commits to home-assistant.io ") -- [Charles Garwood (@cgarwood)](https://github.com/cgarwood "54 total commits to the home-assistant organization: -24 commits to home-assistant +- [Charles Garwood (@cgarwood)](https://github.com/cgarwood "55 total commits to the home-assistant organization: +25 commits to home-assistant 18 commits to home-assistant.io 12 commits to home-assistant-polymer ") @@ -1623,6 +1676,10 @@ This page contains a list of people who have contributed in one way or another t - [Christian Baer (@chrisb86)](https://github.com/chrisb86 "1 total commits to the home-assistant organization: 1 commit to dehydrated ") +- [Christian Biamont (@chrillux)](https://github.com/chrillux "2 total commits to the home-assistant organization: +1 commit to home-assistant +1 commit to home-assistant.io +") - [Christian Brædstrup (@LinuxChristian)](https://github.com/LinuxChristian "9 total commits to the home-assistant organization: 8 commits to home-assistant 1 commit to home-assistant.io @@ -1775,6 +1832,10 @@ This page contains a list of people who have contributed in one way or another t 3 commits to home-assistant.io 2 commits to home-assistant ") +- [Colin Harrington (@ColinHarrington)](https://github.com/ColinHarrington "2 total commits to the home-assistant organization: +1 commit to home-assistant +1 commit to home-assistant.io +") - [Colin O'Dell (@colinodell)](https://github.com/colinodell "34 total commits to the home-assistant organization: 18 commits to home-assistant 15 commits to home-assistant.io @@ -1852,6 +1913,10 @@ This page contains a list of people who have contributed in one way or another t - [cswinford (@cswinford)](https://github.com/cswinford "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") +- [ctborg (@ctborg)](https://github.com/ctborg "4 total commits to the home-assistant organization: +2 commits to home-assistant +2 commits to home-assistant.io +") - [CTLS (@CTLS)](https://github.com/CTLS "4 total commits to the home-assistant organization: 3 commits to home-assistant 1 commit to home-assistant.io @@ -1859,15 +1924,15 @@ This page contains a list of people who have contributed in one way or another t - [CupricReki (@CupricReki)](https://github.com/CupricReki "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") -- [CV (@dagobert)](https://github.com/dagobert "5 total commits to the home-assistant organization: -5 commits to home-assistant.io +- [CV (@dagobert)](https://github.com/dagobert "7 total commits to the home-assistant organization: +7 commits to home-assistant.io ") - [cweakland (@cweakland)](https://github.com/cweakland "1 total commits to the home-assistant organization: 1 commit to open-zwave ") - [cxlwill (@cxlwill)](https://github.com/cxlwill "4 total commits to the home-assistant organization: -2 commits to hassbian-scripts 2 commits to home-assistant-polymer +2 commits to hassbian-scripts ") - [daemondazz (@daemondazz)](https://github.com/daemondazz "2 total commits to the home-assistant organization: 2 commits to open-zwave @@ -1882,8 +1947,11 @@ This page contains a list of people who have contributed in one way or another t 1 commit to hassbot 1 commit to homebridge-homeassistant ") -- [damarco (@damarco)](https://github.com/damarco "11 total commits to the home-assistant organization: -11 commits to home-assistant +- [Dallas Opelt (@DallasO)](https://github.com/DallasO "1 total commits to the home-assistant organization: +1 commit to home-assistant.io +") +- [damarco (@damarco)](https://github.com/damarco "13 total commits to the home-assistant organization: +13 commits to home-assistant ") - [Dan (@danieljkemp)](https://github.com/danieljkemp "23 total commits to the home-assistant organization: 16 commits to home-assistant @@ -1898,9 +1966,9 @@ This page contains a list of people who have contributed in one way or another t - [Dan Chen (@djchen)](https://github.com/djchen "2 total commits to the home-assistant organization: 2 commits to home-assistant ") -- [Dan Cinnamon (@Cinntax)](https://github.com/Cinntax "21 total commits to the home-assistant organization: -17 commits to home-assistant -4 commits to home-assistant.io +- [Dan Cinnamon (@Cinntax)](https://github.com/Cinntax "24 total commits to the home-assistant organization: +19 commits to home-assistant +5 commits to home-assistant.io ") - [Dan Faulknor (@danielfaulknor)](https://github.com/danielfaulknor "3 total commits to the home-assistant organization: 2 commits to home-assistant.io @@ -1971,14 +2039,17 @@ This page contains a list of people who have contributed in one way or another t 4 commits to home-assistant 1 commit to netdisco ") +- [Daniel Chesterton (@dchesterton)](https://github.com/dchesterton "1 total commits to the home-assistant organization: +1 commit to home-assistant +") - [Daniel Claes (@daenny)](https://github.com/daenny "1 total commits to the home-assistant organization: 1 commit to home-assistant ") - [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 "399 total commits to the home-assistant organization: -271 commits to home-assistant +- [Daniel Høyer Iversen (@Danielhiversen)](https://github.com/Danielhiversen "402 total commits to the home-assistant organization: +274 commits to home-assistant 125 commits to home-assistant.io 3 commits to home-assistant-polymer ") @@ -1997,9 +2068,9 @@ This page contains a list of people who have contributed in one way or another t 1 commit to home-assistant 1 commit to home-assistant.io ") -- [Daniel Perna (@danielperna84)](https://github.com/danielperna84 "117 total commits to the home-assistant organization: -61 commits to home-assistant -45 commits to home-assistant.io +- [Daniel Perna (@danielperna84)](https://github.com/danielperna84 "120 total commits to the home-assistant organization: +62 commits to home-assistant +47 commits to home-assistant.io 11 commits to hassio-addons ") - [Daniel Peukert (@dpeukert)](https://github.com/dpeukert "3 total commits to the home-assistant organization: @@ -2012,9 +2083,9 @@ This page contains a list of people who have contributed in one way or another t - [Daniel Schaal (@schaal)](https://github.com/schaal "2 total commits to the home-assistant organization: 2 commits to home-assistant ") -- [Daniel Shokouhi (@dshokouhi)](https://github.com/dshokouhi "43 total commits to the home-assistant organization: +- [Daniel Shokouhi (@dshokouhi)](https://github.com/dshokouhi "46 total commits to the home-assistant organization: 23 commits to home-assistant.io -20 commits to home-assistant +23 commits to home-assistant ") - [Daniel Stone (@daniel-stoneuk)](https://github.com/daniel-stoneuk "2 total commits to the home-assistant organization: 2 commits to home-assistant.io @@ -2153,8 +2224,9 @@ This page contains a list of people who have contributed in one way or another t - [David Earl (@davidearl)](https://github.com/davidearl "1 total commits to the home-assistant organization: 1 commit to dehydrated ") -- [David F\. Mulcahey (@dmulcahey)](https://github.com/dmulcahey "8 total commits to the home-assistant organization: -8 commits to home-assistant +- [David F\. Mulcahey (@dmulcahey)](https://github.com/dmulcahey "15 total commits to the home-assistant organization: +14 commits to home-assistant +1 commit to home-assistant.io ") - [David Fiel (@dfiel)](https://github.com/dfiel "3 total commits to the home-assistant organization: 2 commits to home-assistant @@ -2178,8 +2250,8 @@ This page contains a list of people who have contributed in one way or another t 1 commit to home-assistant.io ") - [David McNett (@nugget)](https://github.com/nugget "10 total commits to the home-assistant organization: -5 commits to home-assistant.io 5 commits to home-assistant +5 commits to home-assistant.io ") - [David Ohayon (@ohayon)](https://github.com/ohayon "3 total commits to the home-assistant organization: 3 commits to issue-bot @@ -2328,8 +2400,8 @@ This page contains a list of people who have contributed in one way or another t 3 commits to home-assistant 1 commit to home-assistant-polymer ") -- [Destix (@Destix)](https://github.com/Destix "2 total commits to the home-assistant organization: -2 commits to home-assistant.io +- [Destix (@Destix)](https://github.com/Destix "3 total commits to the home-assistant organization: +3 commits to home-assistant.io ") - [DetroitEE (@DetroitEE)](https://github.com/DetroitEE "3 total commits to the home-assistant organization: 3 commits to home-assistant.io @@ -2351,6 +2423,9 @@ This page contains a list of people who have contributed in one way or another t - [dhaas (@dhaas)](https://github.com/dhaas "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") +- [dhzl84 (@dhzl84)](https://github.com/dhzl84 "1 total commits to the home-assistant organization: +1 commit to home-assistant.io +") - [dickesW (@dickesW)](https://github.com/dickesW "1 total commits to the home-assistant organization: 1 commit to home-assistant ") @@ -2373,8 +2448,8 @@ This page contains a list of people who have contributed in one way or another t - [Diogo Alves (@killercode)](https://github.com/killercode "2 total commits to the home-assistant organization: 2 commits to open-zwave ") -- [Diogo Gomes (@dgomes)](https://github.com/dgomes "85 total commits to the home-assistant organization: -57 commits to home-assistant +- [Diogo Gomes (@dgomes)](https://github.com/dgomes "87 total commits to the home-assistant organization: +59 commits to home-assistant 27 commits to home-assistant.io 1 commit to developers.home-assistant ") @@ -2418,11 +2493,12 @@ This page contains a list of people who have contributed in one way or another t - [dnguyen800 (@dnguyen800)](https://github.com/dnguyen800 "5 total commits to the home-assistant organization: 5 commits to home-assistant.io ") -- [DoloresHA (@DoloresHA)](https://github.com/DoloresHA "2 total commits to the home-assistant organization: +- [DoloresHA (@DoloresHA)](https://github.com/DoloresHA "3 total commits to the home-assistant organization: 2 commits to home-assistant.io +1 commit to home-assistant ") -- [Dom (@domwillcode)](https://github.com/domwillcode "3 total commits to the home-assistant organization: -2 commits to home-assistant +- [Dom (@domwillcode)](https://github.com/domwillcode "4 total commits to the home-assistant organization: +3 commits to home-assistant 1 commit to home-assistant.io ") - [Domantas (@Dohxis)](https://github.com/Dohxis "1 total commits to the home-assistant organization: @@ -2447,9 +2523,10 @@ This page contains a list of people who have contributed in one way or another t - [Doug (@douglasbeck)](https://github.com/douglasbeck "2 total commits to the home-assistant organization: 2 commits to open-zwave ") -- [Dougal Matthews (@d0ugal)](https://github.com/d0ugal "7 total commits to the home-assistant organization: +- [Dougal Matthews (@d0ugal)](https://github.com/d0ugal "8 total commits to the home-assistant organization: 5 commits to home-assistant 2 commits to home-assistant.io +1 commit to hassio-addons ") - [dpressle (@dpressle)](https://github.com/dpressle "2 total commits to the home-assistant organization: 2 commits to home-assistant.io @@ -2464,6 +2541,9 @@ This page contains a list of people who have contributed in one way or another t - [dreizehnelf (@dreizehnelf)](https://github.com/dreizehnelf "1 total commits to the home-assistant organization: 1 commit to home-assistant ") +- [Drew Budwin (@dbudwin)](https://github.com/dbudwin "1 total commits to the home-assistant organization: +1 commit to home-assistant.io +") - [Drew Wells (@drewwells)](https://github.com/drewwells "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") @@ -2488,8 +2568,8 @@ This page contains a list of people who have contributed in one way or another t - [dtorner (@dtorner)](https://github.com/dtorner "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") -- [DubhAd (@DubhAd)](https://github.com/DubhAd "520 total commits to the home-assistant organization: -514 commits to home-assistant.io +- [DubhAd (@DubhAd)](https://github.com/DubhAd "527 total commits to the home-assistant organization: +521 commits to home-assistant.io 2 commits to hassos 2 commits to developers.home-assistant 1 commit to appdaemon @@ -2508,6 +2588,9 @@ This page contains a list of people who have contributed in one way or another t - [Dustin Wyatt (@dmwyatt)](https://github.com/dmwyatt "1 total commits to the home-assistant organization: 1 commit to open-zwave ") +- [Dwight Holman (@anonfunc)](https://github.com/anonfunc "6 total commits to the home-assistant organization: +6 commits to pyharmony +") - [Dylan Barlett (@dbarlett)](https://github.com/dbarlett "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") @@ -2559,9 +2642,10 @@ This page contains a list of people who have contributed in one way or another t 9 commits to home-assistant 3 commits to home-assistant.io ") -- [ehendrix23 (@ehendrix23)](https://github.com/ehendrix23 "23 total commits to the home-assistant organization: -20 commits to home-assistant -2 commits to home-assistant.io +- [ehendrix23 (@ehendrix23)](https://github.com/ehendrix23 "29 total commits to the home-assistant organization: +24 commits to home-assistant +3 commits to home-assistant.io +1 commit to pyharmony 1 commit to home-assistant-polymer ") - [eiaro (@eiaro)](https://github.com/eiaro "4 total commits to the home-assistant organization: @@ -2594,9 +2678,9 @@ This page contains a list of people who have contributed in one way or another t - [Elias Karakoulakis (@ekarak)](https://github.com/ekarak "8 total commits to the home-assistant organization: 8 commits to open-zwave ") -- [Eliseo Martelli (@eliseomartelli)](https://github.com/eliseomartelli "8 total commits to the home-assistant organization: -7 commits to home-assistant -1 commit to home-assistant.io +- [Eliseo Martelli (@eliseomartelli)](https://github.com/eliseomartelli "12 total commits to the home-assistant organization: +9 commits to home-assistant +3 commits to home-assistant.io ") - [Ellis Percival (@flyte)](https://github.com/flyte "31 total commits to the home-assistant organization: 25 commits to home-assistant @@ -2611,6 +2695,9 @@ This page contains a list of people who have contributed in one way or another t - [Emacee (@Emacee)](https://github.com/Emacee "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") +- [Emanuele (@ema987)](https://github.com/ema987 "1 total commits to the home-assistant organization: +1 commit to home-assistant.io +") - [Emanuele Palombo (@elbowz)](https://github.com/elbowz "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") @@ -2624,8 +2711,9 @@ This page contains a list of people who have contributed in one way or another t 2 commits to home-assistant.io 1 commit to home-assistant ") -- [Emil Stjerneman (@bratanon)](https://github.com/bratanon "2 total commits to the home-assistant organization: +- [Emil Stjerneman (@bratanon)](https://github.com/bratanon "3 total commits to the home-assistant organization: 2 commits to home-assistant +1 commit to home-assistant-polymer ") - [emil\-e (@emil-e)](https://github.com/emil-e "1 total commits to the home-assistant organization: 1 commit to python-openzwave @@ -2643,9 +2731,9 @@ This page contains a list of people who have contributed in one way or another t - [Emmanuel Mwangi (@cloudbring)](https://github.com/cloudbring "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") -- [emontnemery (@emontnemery)](https://github.com/emontnemery "64 total commits to the home-assistant organization: -51 commits to home-assistant -12 commits to home-assistant.io +- [emontnemery (@emontnemery)](https://github.com/emontnemery "95 total commits to the home-assistant organization: +73 commits to home-assistant +21 commits to home-assistant.io 1 commit to developers.home-assistant ") - [Emre Saglam (@emresaglam)](https://github.com/emresaglam "1 total commits to the home-assistant organization: @@ -2689,8 +2777,8 @@ This page contains a list of people who have contributed in one way or another t - [Eric Jansen (@ej81)](https://github.com/ej81 "1 total commits to the home-assistant organization: 1 commit to home-assistant ") -- [Eric Nagley (@marchingphoenix)](https://github.com/marchingphoenix "14 total commits to the home-assistant organization: -12 commits to home-assistant +- [Eric Nagley (@marchingphoenix)](https://github.com/marchingphoenix "17 total commits to the home-assistant organization: +15 commits to home-assistant 2 commits to home-assistant.io ") - [Eric Oosting (@eoosting)](https://github.com/eoosting "3 total commits to the home-assistant organization: @@ -2706,8 +2794,11 @@ This page contains a list of people who have contributed in one way or another t - [Eric Thompson (@er0ck)](https://github.com/er0ck "2 total commits to the home-assistant organization: 2 commits to home-assistant.io ") -- [Erik Eriksson (@molobrakos)](https://github.com/molobrakos "122 total commits to the home-assistant organization: -105 commits to home-assistant +- [ericgingras (@e850205)](https://github.com/e850205 "1 total commits to the home-assistant organization: +1 commit to home-assistant +") +- [Erik Eriksson (@molobrakos)](https://github.com/molobrakos "125 total commits to the home-assistant organization: +108 commits to home-assistant 14 commits to home-assistant.io 3 commits to netdisco ") @@ -2759,7 +2850,11 @@ This page contains a list of people who have contributed in one way or another t 3 commits to home-assistant 1 commit to home-assistant.io ") -- [everix1992 (@everix1992)](https://github.com/everix1992 "2 total commits to the home-assistant organization: +- [Evan Morse (@RowdyDog12)](https://github.com/RowdyDog12 "1 total commits to the home-assistant organization: +1 commit to home-assistant.io +") +- [everix1992 (@everix1992)](https://github.com/everix1992 "4 total commits to the home-assistant organization: +2 commits to pyharmony 1 commit to home-assistant 1 commit to home-assistant.io ") @@ -2782,25 +2877,26 @@ This page contains a list of people who have contributed in one way or another t - [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 "5201 total commits to the home-assistant organization: -3193 commits to home-assistant.io -1798 commits to home-assistant -37 commits to home-assistant-cli +- [Fabian Affolter (@fabaff)](https://github.com/fabaff "5265 total commits to the home-assistant organization: +3219 commits to home-assistant.io +1826 commits to home-assistant +38 commits to home-assistant-cli +36 commits to home-assistant-notebooks 33 commits to home-assistant-assets -32 commits to home-assistant-notebooks -30 commits to developers.home-assistant +32 commits to developers.home-assistant 18 commits to organization-internal 12 commits to hassio-build 11 commits to home-assistant-polymer -10 commits to netdisco +11 commits to netdisco 7 commits to hassos -6 commits to hassio 6 commits to hassio-addons +6 commits to hassio 3 commits to hass-release 2 commits to home-assistant-iOS +2 commits to data.home-assistant 1 commit to home-assistant-js-websocket -1 commit to ui-schema 1 commit to example-custom-config +1 commit to ui-schema ") - [Fabian Fischer (@nodomain)](https://github.com/nodomain "1 total commits to the home-assistant organization: 1 commit to hassio-addons @@ -2864,8 +2960,8 @@ This page contains a list of people who have contributed in one way or another t - [ferdydek (@ferdydek)](https://github.com/ferdydek "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") -- [Fermulator (@fermulator)](https://github.com/fermulator "1 total commits to the home-assistant organization: -1 commit to home-assistant.io +- [Fermulator (@fermulator)](https://github.com/fermulator "2 total commits to the home-assistant organization: +2 commits to home-assistant.io ") - [Fernando (@ferazambuja)](https://github.com/ferazambuja "4 total commits to the home-assistant organization: 4 commits to home-assistant.io @@ -2874,6 +2970,10 @@ This page contains a list of people who have contributed in one way or another t 4 commits to home-assistant.io 2 commits to home-assistant ") +- [FieldofClay (@FieldofClay)](https://github.com/FieldofClay "2 total commits to the home-assistant organization: +1 commit to home-assistant +1 commit to home-assistant.io +") - [fignew (@fignew)](https://github.com/fignew "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") @@ -2962,15 +3062,16 @@ This page contains a list of people who have contributed in one way or another t - [fran1987 (@fran1987)](https://github.com/fran1987 "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") -- [Franck Nijhof (@frenck)](https://github.com/frenck "100 total commits to the home-assistant organization: -49 commits to home-assistant.io -20 commits to hassio-cli +- [Franck Nijhof (@frenck)](https://github.com/frenck "104 total commits to the home-assistant organization: +51 commits to home-assistant.io +21 commits to hassio-cli 11 commits to hassio 8 commits to developers.home-assistant 5 commits to home-assistant 4 commits to hassio-addons 2 commits to home-assistant-polymer 1 commit to appdaemon +1 commit to data.home-assistant ") - [Frank (@syphernl)](https://github.com/syphernl "1 total commits to the home-assistant organization: 1 commit to home-assistant-polymer @@ -3008,9 +3109,9 @@ This page contains a list of people who have contributed in one way or another t 1 commit to developers.home-assistant 1 commit to home-assistant ") -- [Fredrik Erlandsson (@fredrike)](https://github.com/fredrike "18 total commits to the home-assistant organization: -17 commits to home-assistant -1 commit to home-assistant.io +- [Fredrik Erlandsson (@fredrike)](https://github.com/fredrike "25 total commits to the home-assistant organization: +23 commits to home-assistant +2 commits to home-assistant.io ") - [Fredrik Fjeld (@fredrikfjeld)](https://github.com/fredrikfjeld "2 total commits to the home-assistant organization: 2 commits to home-assistant.io @@ -3066,8 +3167,8 @@ This page contains a list of people who have contributed in one way or another t - [Gaetan Semet (@gsemet)](https://github.com/gsemet "2 total commits to the home-assistant organization: 2 commits to home-assistant.io ") -- [Galtwise (@Galtwise)](https://github.com/Galtwise "1 total commits to the home-assistant organization: -1 commit to home-assistant.io +- [Galtwise (@Galtwise)](https://github.com/Galtwise "3 total commits to the home-assistant organization: +3 commits to home-assistant.io ") - [Gamester17 (@Gamester17)](https://github.com/Gamester17 "2 total commits to the home-assistant organization: 2 commits to home-assistant.io @@ -3142,13 +3243,13 @@ This page contains a list of people who have contributed in one way or another t - [Georgii Staroselskii (@staroselskii)](https://github.com/staroselskii "1 total commits to the home-assistant organization: 1 commit to pi-gen ") -- [Gerard (@erorus)](https://github.com/erorus "1 total commits to the home-assistant organization: -1 commit to dehydrated -") - [Gerard (@gerard33)](https://github.com/gerard33 "22 total commits to the home-assistant organization: 13 commits to home-assistant.io 9 commits to home-assistant ") +- [Gerard (@erorus)](https://github.com/erorus "1 total commits to the home-assistant organization: +1 commit to dehydrated +") - [Gerardo Castillo (@altersis)](https://github.com/altersis "1 total commits to the home-assistant organization: 1 commit to home-assistant ") @@ -3191,6 +3292,10 @@ This page contains a list of people who have contributed in one way or another t - [Gianpaolo Macario (@gmacario)](https://github.com/gmacario "2 total commits to the home-assistant organization: 2 commits to home-assistant.io ") +- [Gido (@GidoHakvoort)](https://github.com/GidoHakvoort "2 total commits to the home-assistant organization: +1 commit to home-assistant +1 commit to home-assistant.io +") - [Giel Janssens (@gieljnssns)](https://github.com/gieljnssns "7 total commits to the home-assistant organization: 5 commits to home-assistant 2 commits to home-assistant.io @@ -3221,12 +3326,12 @@ This page contains a list of people who have contributed in one way or another t - [gizmocuz (@gizmocuz)](https://github.com/gizmocuz "21 total commits to the home-assistant organization: 21 commits to open-zwave ") -- [Glen Takahashi (@glentakahashi)](https://github.com/glentakahashi "2 total commits to the home-assistant organization: -1 commit to home-assistant +- [Glen Takahashi (@glentakahashi)](https://github.com/glentakahashi "4 total commits to the home-assistant organization: +3 commits to home-assistant 1 commit to home-assistant.io ") -- [Glenn Morrison (@atomicpapa)](https://github.com/atomicpapa "7 total commits to the home-assistant organization: -7 commits to home-assistant.io +- [Glenn Morrison (@atomicpapa)](https://github.com/atomicpapa "8 total commits to the home-assistant organization: +8 commits to home-assistant.io ") - [Glenn Waters (@gwww)](https://github.com/gwww "19 total commits to the home-assistant organization: 11 commits to home-assistant @@ -3323,8 +3428,8 @@ This page contains a list of people who have contributed in one way or another t - [gregwis (@gregwis)](https://github.com/gregwis "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") -- [gremblin (@e2m32)](https://github.com/e2m32 "3 total commits to the home-assistant organization: -3 commits to home-assistant.io +- [gremblin (@e2m32)](https://github.com/e2m32 "4 total commits to the home-assistant organization: +4 commits to home-assistant.io ") - [groth\-its (@groth-its)](https://github.com/groth-its "2 total commits to the home-assistant organization: 2 commits to home-assistant @@ -3469,9 +3574,9 @@ This page contains a list of people who have contributed in one way or another t 6 commits to home-assistant 5 commits to home-assistant.io ") -- [Heine Furubotten (@hfurubotten)](https://github.com/hfurubotten "2 total commits to the home-assistant organization: -1 commit to home-assistant -1 commit to home-assistant.io +- [Heine Furubotten (@hfurubotten)](https://github.com/hfurubotten "5 total commits to the home-assistant organization: +3 commits to home-assistant +2 commits to home-assistant.io ") - [Heinrich Dahms (@htdahms)](https://github.com/htdahms "1 total commits to the home-assistant organization: 1 commit to home-assistant-iOS @@ -3619,9 +3724,12 @@ This page contains a list of people who have contributed in one way or another t - [Ian Darwin (@IanDarwin)](https://github.com/IanDarwin "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") -- [Ian Richardson (@iantrich)](https://github.com/iantrich "120 total commits to the home-assistant organization: -98 commits to home-assistant-polymer -15 commits to home-assistant.io +- [Ian Day (@iandday)](https://github.com/iandday "16 total commits to the home-assistant organization: +16 commits to pyharmony +") +- [Ian Richardson (@iantrich)](https://github.com/iantrich "139 total commits to the home-assistant organization: +111 commits to home-assistant-polymer +21 commits to home-assistant.io 6 commits to home-assistant 1 commit to developers.home-assistant ") @@ -3652,8 +3760,9 @@ This page contains a list of people who have contributed in one way or another t 2 commits to home-assistant 1 commit to home-assistant.io ") -- [Igor Motov (@imotov)](https://github.com/imotov "1 total commits to the home-assistant organization: -1 commit to home-assistant.io +- [Igor Motov (@imotov)](https://github.com/imotov "3 total commits to the home-assistant organization: +2 commits to home-assistant.io +1 commit to home-assistant ") - [Igor Shults (@ishults)](https://github.com/ishults "12 total commits to the home-assistant organization: 6 commits to home-assistant @@ -3694,9 +3803,9 @@ This page contains a list of people who have contributed in one way or another t - [insajd (@insajd)](https://github.com/insajd "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") -- [Ioan Loosley (@ioangogo)](https://github.com/ioangogo "20 total commits to the home-assistant organization: +- [Ioan Loosley (@ioangogo)](https://github.com/ioangogo "21 total commits to the home-assistant organization: 17 commits to home-assistant.io -3 commits to home-assistant +4 commits to home-assistant ") - [ionred (@ionred)](https://github.com/ionred "1 total commits to the home-assistant organization: 1 commit to home-assistant.io @@ -3957,9 +4066,12 @@ This page contains a list of people who have contributed in one way or another t - [Jason Woodward (@woodwardjd)](https://github.com/woodwardjd "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") -- [javicalle (@javicalle)](https://github.com/javicalle "3 total commits to the home-assistant organization: +- [Jasper van der Neut \- Stulen (@jvanderneutstulen)](https://github.com/jvanderneutstulen "4 total commits to the home-assistant organization: +4 commits to hassos +") +- [javicalle (@javicalle)](https://github.com/javicalle "6 total commits to the home-assistant organization: +4 commits to home-assistant 2 commits to home-assistant.io -1 commit to home-assistant ") - [Javier Gonel (@graffic)](https://github.com/graffic "2 total commits to the home-assistant organization: 2 commits to home-assistant @@ -3997,6 +4109,9 @@ This page contains a list of people who have contributed in one way or another t 7 commits to home-assistant.io 6 commits to home-assistant ") +- [Jc2k (@Jc2k)](https://github.com/Jc2k "2 total commits to the home-assistant organization: +2 commits to home-assistant +") - [jchasey (@jchasey)](https://github.com/jchasey "1 total commits to the home-assistant organization: 1 commit to developers.home-assistant ") @@ -4040,6 +4155,9 @@ This page contains a list of people who have contributed in one way or another t - [Jeena Paradies (@jeena)](https://github.com/jeena "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") +- [Jeff Boothe (@jboothe)](https://github.com/jboothe "1 total commits to the home-assistant organization: +1 commit to home-assistant.io +") - [Jeff Irion (@JeffLIrion)](https://github.com/JeffLIrion "5 total commits to the home-assistant organization: 4 commits to home-assistant 1 commit to home-assistant.io @@ -4058,9 +4176,13 @@ This page contains a list of people who have contributed in one way or another t - [jeff tapia (@jtmoderate876)](https://github.com/jtmoderate876 "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") -- [Jeff Wilson (@jawilson)](https://github.com/jawilson "26 total commits to the home-assistant organization: +- [Jeff Terrace (@jterrace)](https://github.com/jterrace "6 total commits to the home-assistant organization: +6 commits to pyharmony +") +- [Jeff Wilson (@jawilson)](https://github.com/jawilson "28 total commits to the home-assistant organization: 20 commits to home-assistant 6 commits to home-assistant.io +2 commits to pyharmony ") - [Jeffrey Lin (@linjef)](https://github.com/linjef "3 total commits to the home-assistant organization: 2 commits to home-assistant @@ -4069,18 +4191,19 @@ This page contains a list of people who have contributed in one way or another t - [Jelmer Tiete (@JelmerT)](https://github.com/JelmerT "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") +- [Jens (@jensihnow)](https://github.com/jensihnow "5 total commits to the home-assistant organization: +3 commits to home-assistant +2 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 (@jensihnow)](https://github.com/jensihnow "1 total commits to the home-assistant organization: -1 commit to home-assistant -") - [Jens Kohl (@jk)](https://github.com/jk "1 total commits to the home-assistant organization: 1 commit 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.io 4 commits to home-assistant +4 commits to home-assistant.io ") - [jensjakob (@jensjakob)](https://github.com/jensjakob "1 total commits to the home-assistant organization: 1 commit to home-assistant.io @@ -4170,8 +4293,8 @@ This page contains a list of people who have contributed in one way or another t 1 commit to home-assistant ") - [JesseWebDotCom (@JesseWebDotCom)](https://github.com/JesseWebDotCom "16 total commits to the home-assistant organization: -8 commits to home-assistant 8 commits to home-assistant.io +8 commits to home-assistant ") - [jessyjones (@jessyjones)](https://github.com/jessyjones "1 total commits to the home-assistant organization: 1 commit to home-assistant.io @@ -4196,6 +4319,9 @@ This page contains a list of people who have contributed in one way or another t - [jimbob1001 (@jimbob1001)](https://github.com/jimbob1001 "4 total commits to the home-assistant organization: 4 commits to home-assistant.io ") +- [jimboca (@jimboca)](https://github.com/jimboca "3 total commits to the home-assistant organization: +3 commits to pyharmony +") - [Jimmy Tang (@jcftang)](https://github.com/jcftang "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") @@ -4236,10 +4362,10 @@ This page contains a list of people who have contributed in one way or another t - [Joakim Plate (@elupus)](https://github.com/elupus "1 total commits to the home-assistant organization: 1 commit to home-assistant ") -- [Joakim Sørensen (@ludeeus)](https://github.com/ludeeus "213 total commits to the home-assistant organization: +- [Joakim Sørensen (@ludeeus)](https://github.com/ludeeus "218 total commits to the home-assistant organization: 141 commits to hassbian-scripts -38 commits to home-assistant.io -34 commits to home-assistant +40 commits to home-assistant.io +37 commits to home-assistant ") - [Joaquín (@joaqtor)](https://github.com/joaqtor "1 total commits to the home-assistant organization: 1 commit to home-assistant @@ -4342,10 +4468,10 @@ This page contains a list of people who have contributed in one way or another t - [John Allen (@jra3)](https://github.com/jra3 "2 total commits to the home-assistant organization: 2 commits to home-assistant ") -- [John Arild Berentsen (@turbokongen)](https://github.com/turbokongen "225 total commits to the home-assistant organization: +- [John Arild Berentsen (@turbokongen)](https://github.com/turbokongen "227 total commits to the home-assistant organization: 156 commits to home-assistant -45 commits to home-assistant.io -24 commits to home-assistant-polymer +46 commits to home-assistant.io +25 commits to home-assistant-polymer ") - [John Boiles (@johnboiles)](https://github.com/johnboiles "2 total commits to the home-assistant organization: 1 commit to home-assistant @@ -4369,12 +4495,15 @@ This page contains a list of people who have contributed in one way or another t - [John McLaughlin (@loghound)](https://github.com/loghound "2 total commits to the home-assistant organization: 2 commits to home-assistant ") -- [John Mihalic (@mezz64)](https://github.com/mezz64 "51 total commits to the home-assistant organization: -37 commits to home-assistant +- [John Mihalic (@mezz64)](https://github.com/mezz64 "54 total commits to the home-assistant organization: +40 commits to home-assistant 12 commits to home-assistant.io 1 commit to hadashboard 1 commit to home-assistant-polymer ") +- [John Shahawy (@JohnShahawy)](https://github.com/JohnShahawy "1 total commits to the home-assistant organization: +1 commit to home-assistant.io +") - [John W\. Long (@jlong)](https://github.com/jlong "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") @@ -4413,6 +4542,9 @@ This page contains a list of people who have contributed in one way or another t 16 commits to homebridge-homeassistant 9 commits to home-assistant.io ") +- [Jonas Janz (@PixelJonas)](https://github.com/PixelJonas "1 total commits to the home-assistant organization: +1 commit to hassio-build +") - [Jonas Karlsson (@endor-force)](https://github.com/endor-force "13 total commits to the home-assistant organization: 6 commits to home-assistant.io 5 commits to hassio-addons @@ -4436,8 +4568,8 @@ This page contains a list of people who have contributed in one way or another t - [Jonathan Batchelor (@jmb)](https://github.com/jmb "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") -- [Jonathan Herlin (@Jonher937)](https://github.com/Jonher937 "1 total commits to the home-assistant organization: -1 commit to home-assistant.io +- [Jonathan Herlin (@Jonher937)](https://github.com/Jonher937 "2 total commits to the home-assistant organization: +2 commits to home-assistant.io ") - [Jonathan Keljo (@jkeljo)](https://github.com/jkeljo "6 total commits to the home-assistant organization: 3 commits to home-assistant @@ -4483,13 +4615,13 @@ This page contains a list of people who have contributed in one way or another t 40 commits to home-assistant 3 commits to home-assistant.io ") -- [Jorim Tielemans (@tjorim)](https://github.com/tjorim "84 total commits to the home-assistant organization: -69 commits to home-assistant.io +- [Jorim Tielemans (@tjorim)](https://github.com/tjorim "88 total commits to the home-assistant organization: +73 commits to home-assistant.io 6 commits to home-assistant -2 commits to hassio +2 commits to hassio-cli 2 commits to hassio-addons 2 commits to developers.home-assistant -2 commits to hassio-cli +2 commits to hassio 1 commit to hassio-build ") - [jorisc90 (@jorisc90)](https://github.com/jorisc90 "1 total commits to the home-assistant organization: @@ -4587,6 +4719,9 @@ This page contains a list of people who have contributed in one way or another t - [jtscott (@jtscott)](https://github.com/jtscott "1 total commits to the home-assistant organization: 1 commit to home-assistant ") +- [Juan Manuel Combetto (@omniwired)](https://github.com/omniwired "1 total commits to the home-assistant organization: +1 commit to appdaemon +") - [Juan Martin (@tinchox5)](https://github.com/tinchox5 "1 total commits to the home-assistant organization: 1 commit to home-assistant-js-websocket ") @@ -4623,6 +4758,9 @@ This page contains a list of people who have contributed in one way or another t - [Julian Knauer (@jaypikay)](https://github.com/jaypikay "1 total commits to the home-assistant organization: 1 commit to home-assistant ") +- [Julien Brochet (@aerialls)](https://github.com/aerialls "1 total commits to the home-assistant organization: +1 commit to home-assistant.io +") - [Julien Danjou (@jd)](https://github.com/jd "1 total commits to the home-assistant organization: 1 commit to home-assistant ") @@ -4636,8 +4774,8 @@ This page contains a list of people who have contributed in one way or another t 28 commits to home-assistant 7 commits to home-assistant.io ") -- [jumpkick (@jumpkick)](https://github.com/jumpkick "16 total commits to the home-assistant organization: -12 commits to home-assistant +- [jumpkick (@jumpkick)](https://github.com/jumpkick "18 total commits to the home-assistant organization: +14 commits to home-assistant 4 commits to home-assistant.io ") - [Junian Triajianto (@junian)](https://github.com/junian "1 total commits to the home-assistant organization: @@ -4740,8 +4878,9 @@ This page contains a list of people who have contributed in one way or another t 4 commits to home-assistant 1 commit to home-assistant.io ") -- [Karim Geiger (@KarimGeiger)](https://github.com/KarimGeiger "1 total commits to the home-assistant organization: +- [Karim Geiger (@KarimGeiger)](https://github.com/KarimGeiger "2 total commits to the home-assistant organization: 1 commit to home-assistant +1 commit to home-assistant.io ") - [Karl Kihlström (@kalkih)](https://github.com/kalkih "6 total commits to the home-assistant organization: 4 commits to home-assistant-polymer @@ -4765,6 +4904,9 @@ This page contains a list of people who have contributed in one way or another t - [KD4SIR (@scotthibbs)](https://github.com/scotthibbs "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") +- [kdvlr (@kdvlr)](https://github.com/kdvlr "1 total commits to the home-assistant organization: +1 commit to home-assistant +") - [Keaton Taylor (@keatontaylor)](https://github.com/keatontaylor "7 total commits to the home-assistant organization: 4 commits to home-assistant 3 commits to home-assistant.io @@ -4800,8 +4942,8 @@ This page contains a list of people who have contributed in one way or another t 13 commits to home-assistant.io 2 commits to appdaemon ") -- [kennedyshead (@kennedyshead)](https://github.com/kennedyshead "40 total commits to the home-assistant organization: -36 commits to home-assistant +- [kennedyshead (@kennedyshead)](https://github.com/kennedyshead "42 total commits to the home-assistant organization: +38 commits to home-assistant 4 commits to home-assistant.io ") - [Kenny Millington (@kmdm)](https://github.com/kmdm "2 total commits to the home-assistant organization: @@ -4913,8 +5055,8 @@ This page contains a list of people who have contributed in one way or another t 1 commit to home-assistant.io ") - [Klaas Hoekema (@KlaasH)](https://github.com/KlaasH "12 total commits to the home-assistant organization: -5 commits to home-assistant.io 5 commits to home-assistant +5 commits to home-assistant.io 2 commits to home-assistant-polymer ") - [Klaas Schoute (@klaasnicolaas)](https://github.com/klaasnicolaas "286 total commits to the home-assistant organization: @@ -4935,6 +5077,9 @@ This page contains a list of people who have contributed in one way or another t - [Koen Ekelschot (@peckham)](https://github.com/peckham "1 total commits to the home-assistant organization: 1 commit to home-assistant ") +- [Koen Kanters (@Koenkk)](https://github.com/Koenkk "1 total commits to the home-assistant organization: +1 commit to home-assistant.io +") - [koen01 (@koen01)](https://github.com/koen01 "1 total commits to the home-assistant organization: 1 commit to home-assistant ") @@ -5014,6 +5159,9 @@ This page contains a list of people who have contributed in one way or another t - [Lance Haynie (@lancehaynie)](https://github.com/lancehaynie "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") +- [Lance Moss (@mossyhub)](https://github.com/mossyhub "1 total commits to the home-assistant organization: +1 commit to home-assistant.io +") - [lance36 (@lance36)](https://github.com/lance36 "1 total commits to the home-assistant organization: 1 commit to home-assistant ") @@ -5026,6 +5174,9 @@ This page contains a list of people who have contributed in one way or another t - [Lars Englund (@larsenglund)](https://github.com/larsenglund "1 total commits to the home-assistant organization: 1 commit to appdaemon ") +- [Lars Hagström (@DonOregano)](https://github.com/DonOregano "1 total commits to the home-assistant organization: +1 commit to pyharmony +") - [Lars Kerick (@Brice187)](https://github.com/Brice187 "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") @@ -5035,6 +5186,9 @@ This page contains a list of people who have contributed in one way or another t - [LaurensBot (@LaurensBot)](https://github.com/LaurensBot "2 total commits to the home-assistant organization: 2 commits to home-assistant.io ") +- [LaurentTrk (@LaurentTrk)](https://github.com/LaurentTrk "3 total commits to the home-assistant organization: +3 commits to pyharmony +") - [LavaGlass (@LavaGlass)](https://github.com/LavaGlass "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") @@ -5111,16 +5265,16 @@ This page contains a list of people who have contributed in one way or another t - [Levi Govaerts (@legovaer)](https://github.com/legovaer "1 total commits to the home-assistant organization: 1 commit to home-assistant ") -- [Lewis Juggins (@lwis)](https://github.com/lwis "69 total commits to the home-assistant organization: +- [Lewis Juggins (@lwis)](https://github.com/lwis "70 total commits to the home-assistant organization: 56 commits to home-assistant -12 commits to home-assistant.io +13 commits to home-assistant.io 1 commit to home-assistant-polymer ") - [Li\-Wen Yip (@liwenyip)](https://github.com/liwenyip "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") -- [liaanvdm (@liaanvdm)](https://github.com/liaanvdm "1 total commits to the home-assistant organization: -1 commit to home-assistant +- [liaanvdm (@liaanvdm)](https://github.com/liaanvdm "3 total commits to the home-assistant organization: +3 commits to home-assistant ") - [Liang Sun (@leonsim)](https://github.com/leonsim "1 total commits to the home-assistant organization: 1 commit to home-assistant.io @@ -5156,8 +5310,8 @@ This page contains a list of people who have contributed in one way or another t - [lolouk44 (@lolouk44)](https://github.com/lolouk44 "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") -- [longman391 (@longman391)](https://github.com/longman391 "1 total commits to the home-assistant organization: -1 commit to home-assistant.io +- [longman391 (@longman391)](https://github.com/longman391 "2 total commits to the home-assistant organization: +2 commits to home-assistant.io ") - [lordneon (@lordneon)](https://github.com/lordneon "1 total commits to the home-assistant organization: 1 commit to home-assistant.io @@ -5198,9 +5352,9 @@ This page contains a list of people who have contributed in one way or another t - [Luca Adrian Lindhorst (@lal12)](https://github.com/lal12 "2 total commits to the home-assistant organization: 2 commits to home-assistant.io ") -- [Luca Angemi (@luca-angemi)](https://github.com/luca-angemi "6 total commits to the home-assistant organization: +- [Luca Angemi (@luca-angemi)](https://github.com/luca-angemi "8 total commits to the home-assistant organization: +4 commits to home-assistant 3 commits to home-assistant.io -2 commits to home-assistant 1 commit to home-assistant-polymer ") - [Luca Simonetti @Nohup (@luca-simonetti)](https://github.com/luca-simonetti "1 total commits to the home-assistant organization: @@ -5297,8 +5451,8 @@ This page contains a list of people who have contributed in one way or another t - [Maarten Groeneweg (@lazytesting)](https://github.com/lazytesting "1 total commits to the home-assistant organization: 1 commit to hassio-addons ") -- [Maciej Bieniek (@bieniu)](https://github.com/bieniu "9 total commits to the home-assistant organization: -6 commits to home-assistant +- [Maciej Bieniek (@bieniu)](https://github.com/bieniu "10 total commits to the home-assistant organization: +7 commits to home-assistant 2 commits to home-assistant.io 1 commit to home-assistant-polymer ") @@ -5338,8 +5492,8 @@ This page contains a list of people who have contributed in one way or another t - [Magnus Månsson (@magma1447)](https://github.com/magma1447 "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") -- [Magnus Øverli (@magnusoverli)](https://github.com/magnusoverli "1 total commits to the home-assistant organization: -1 commit to home-assistant.io +- [Magnus Øverli (@magnusoverli)](https://github.com/magnusoverli "2 total commits to the home-assistant organization: +2 commits to home-assistant.io ") - [MagnusKnutas (@MagnusKnutas)](https://github.com/MagnusKnutas "29 total commits to the home-assistant organization: 29 commits to home-assistant @@ -5358,8 +5512,8 @@ This page contains a list of people who have contributed in one way or another t 2 commits to home-assistant.io ") - [Maikel Punie (@Cereal2nd)](https://github.com/Cereal2nd "8 total commits to the home-assistant organization: -4 commits to home-assistant.io 4 commits to home-assistant +4 commits to home-assistant.io ") - [Maikel Wever (@maikelwever)](https://github.com/maikelwever "2 total commits to the home-assistant organization: 2 commits to home-assistant @@ -5378,11 +5532,11 @@ This page contains a list of people who have contributed in one way or another t 3 commits to home-assistant 2 commits to home-assistant.io ") -- [Malte Franken (@exxamalte)](https://github.com/exxamalte "38 total commits to the home-assistant organization: -25 commits to home-assistant -11 commits to home-assistant.io +- [Malte Franken (@exxamalte)](https://github.com/exxamalte "42 total commits to the home-assistant organization: +26 commits to home-assistant +12 commits to home-assistant.io +3 commits to home-assistant-polymer 1 commit to developers.home-assistant -1 commit to home-assistant-polymer ") - [Manoj (@vmulpuru)](https://github.com/vmulpuru "1 total commits to the home-assistant organization: 1 commit to home-assistant @@ -5432,8 +5586,8 @@ This page contains a list of people who have contributed in one way or another t 5 commits to home-assistant.io 1 commit to home-assistant ") -- [Marcelo Moreira de Mello (@tchellomello)](https://github.com/tchellomello "159 total commits to the home-assistant organization: -89 commits to home-assistant +- [Marcelo Moreira de Mello (@tchellomello)](https://github.com/tchellomello "160 total commits to the home-assistant organization: +90 commits to home-assistant 67 commits to home-assistant.io 1 commit to home-assistant-assets 1 commit to hassio-build @@ -5522,6 +5676,9 @@ This page contains a list of people who have contributed in one way or another t 1 commit to home-assistant 1 commit to home-assistant.io ") +- [Marius Retegan (@mretegan)](https://github.com/mretegan "2 total commits to the home-assistant organization: +2 commits to home-assistant +") - [Mariusz Łuciów (@mariuszluciow)](https://github.com/mariuszluciow "5 total commits to the home-assistant organization: 3 commits to home-assistant 1 commit to home-assistant-polymer @@ -5607,6 +5764,10 @@ This page contains a list of people who have contributed in one way or another t 3 commits to home-assistant 2 commits to home-assistant.io ") +- [Markus Ressel (@markusressel)](https://github.com/markusressel "2 total commits to the home-assistant organization: +1 commit to home-assistant +1 commit to home-assistant.io +") - [Markus Stenberg (@fingon)](https://github.com/fingon "6 total commits to the home-assistant organization: 6 commits to home-assistant ") @@ -5624,8 +5785,8 @@ This page contains a list of people who have contributed in one way or another t 3 commits to home-assistant.io ") - [Martin Donlon (@wickerwaka)](https://github.com/wickerwaka "4 total commits to the home-assistant organization: -2 commits to home-assistant 2 commits to home-assistant.io +2 commits to home-assistant ") - [Martin Eberhardt (@DarkFox)](https://github.com/DarkFox "6 total commits to the home-assistant organization: 5 commits to home-assistant.io @@ -5694,6 +5855,10 @@ This page contains a list of people who have contributed in one way or another t - [marutanm (@marutanm)](https://github.com/marutanm "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") +- [Marvin Wichmann (@marvin-w)](https://github.com/marvin-w "2 total commits to the home-assistant organization: +1 commit to home-assistant +1 commit to home-assistant.io +") - [Masahiro Kamata (@kamatari)](https://github.com/kamatari "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") @@ -5715,14 +5880,14 @@ This page contains a list of people who have contributed in one way or another t 1 commit to homebridge-homeassistant 1 commit to home-assistant ") -- [Mathieu Maret (@mmaret-geny)](https://github.com/mmaret-geny "1 total commits to the home-assistant organization: -1 commit to home-assistant.io -") - [Mathieu Maret (@mmaret)](https://github.com/mmaret "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") -- [Mathieu Velten (@MatMaul)](https://github.com/MatMaul "5 total commits to the home-assistant organization: -4 commits to home-assistant +- [Mathieu Maret (@mmaret-geny)](https://github.com/mmaret-geny "1 total commits to the home-assistant organization: +1 commit to home-assistant.io +") +- [Mathieu Velten (@MatMaul)](https://github.com/MatMaul "6 total commits to the home-assistant organization: +5 commits to home-assistant 1 commit to home-assistant.io ") - [Matouš Bečvář (@MattXcz)](https://github.com/MattXcz "1 total commits to the home-assistant organization: @@ -5861,8 +6026,8 @@ This page contains a list of people who have contributed in one way or another t - [Mattias Ryrlén (@mattiasr)](https://github.com/mattiasr "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") -- [Mattias Welponer (@mxworm)](https://github.com/mxworm "25 total commits to the home-assistant organization: -15 commits to home-assistant +- [Mattias Welponer (@mxworm)](https://github.com/mxworm "26 total commits to the home-assistant organization: +16 commits to home-assistant 9 commits to home-assistant.io 1 commit to home-assistant-polymer ") @@ -5907,10 +6072,11 @@ This page contains a list of people who have contributed in one way or another t - [Max Rumpf (@Maxr1998)](https://github.com/Maxr1998 "15 total commits to the home-assistant organization: 15 commits to home-assistant.io ") -- [Max Rydahl Andersen (@maxandersen)](https://github.com/maxandersen "33 total commits to the home-assistant organization: -29 commits to home-assistant-cli +- [Max Rydahl Andersen (@maxandersen)](https://github.com/maxandersen "56 total commits to the home-assistant organization: +50 commits to home-assistant-cli +3 commits to home-assistant.io 2 commits to developers.home-assistant -2 commits to home-assistant.io +1 commit to home-assistant ") - [Max von Webel (@343max)](https://github.com/343max "1 total commits to the home-assistant organization: 1 commit to home-assistant.io @@ -5919,6 +6085,9 @@ This page contains a list of people who have contributed in one way or another t 5 commits to home-assistant 3 commits to home-assistant.io ") +- [MaxG88 (@MaxG88)](https://github.com/MaxG88 "1 total commits to the home-assistant organization: +1 commit to home-assistant +") - [Maxim Krušina (@maximkrusina)](https://github.com/maximkrusina "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") @@ -5962,6 +6131,9 @@ This page contains a list of people who have contributed in one way or another t - [meatheadmike (@meatheadmike)](https://github.com/meatheadmike "2 total commits to the home-assistant organization: 2 commits to home-assistant ") +- [Megachip (@Megachip)](https://github.com/Megachip "2 total commits to the home-assistant organization: +2 commits to home-assistant.io +") - [MeIchthys (@meichthys)](https://github.com/meichthys "2 total commits to the home-assistant organization: 2 commits to home-assistant.io ") @@ -6008,6 +6180,10 @@ This page contains a list of people who have contributed in one way or another t - [Michael Chang (@micbase)](https://github.com/micbase "1 total commits to the home-assistant organization: 1 commit to home-assistant ") +- [Michael Dubno (@dubnom)](https://github.com/dubnom "6 total commits to the home-assistant organization: +3 commits to home-assistant +3 commits to home-assistant.io +") - [Michael Fester (@michaelfester)](https://github.com/michaelfester "6 total commits to the home-assistant organization: 4 commits to home-assistant.io 2 commits to home-assistant @@ -6041,6 +6217,9 @@ This page contains a list of people who have contributed in one way or another t - [Michael Luggen (@l00mi)](https://github.com/l00mi "5 total commits to the home-assistant organization: 5 commits to home-assistant.io ") +- [Michael Meinel (@led02)](https://github.com/led02 "1 total commits to the home-assistant organization: +1 commit to pyharmony +") - [Michael Pfister (@pfista)](https://github.com/pfista "2 total commits to the home-assistant organization: 2 commits to home-assistant.io ") @@ -6084,8 +6263,9 @@ This page contains a list of people who have contributed in one way or another t - [MichaelSprague (@MichaelSprague)](https://github.com/MichaelSprague "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") -- [Michal (@Dinth)](https://github.com/Dinth "1 total commits to the home-assistant organization: +- [Michal (@Dinth)](https://github.com/Dinth "2 total commits to the home-assistant organization: 1 commit to open-zwave +1 commit to home-assistant.io ") - [Michaël Arnauts (@michaelarnauts)](https://github.com/michaelarnauts "65 total commits to the home-assistant organization: 34 commits to home-assistant @@ -6167,10 +6347,10 @@ This page contains a list of people who have contributed in one way or another t - [Mikko Tapionlinna (@Arkkimaagi)](https://github.com/Arkkimaagi "2 total commits to the home-assistant organization: 2 commits to home-assistant ") -- [Milan V\. (@milanvo)](https://github.com/milanvo "18 total commits to the home-assistant organization: +- [Milan V\. (@milanvo)](https://github.com/milanvo "19 total commits to the home-assistant organization: 10 commits to home-assistant 7 commits to home-assistant.io -1 commit to home-assistant-polymer +2 commits to home-assistant-polymer ") - [Milas Bowman (@milas)](https://github.com/milas "1 total commits to the home-assistant organization: 1 commit to home-assistant @@ -6281,9 +6461,9 @@ This page contains a list of people who have contributed in one way or another t - [Moos (@moos)](https://github.com/moos "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") -- [mopolus (@mopolus)](https://github.com/mopolus "2 total commits to the home-assistant organization: -1 commit to home-assistant -1 commit to home-assistant.io +- [mopolus (@mopolus)](https://github.com/mopolus "5 total commits to the home-assistant organization: +3 commits to home-assistant +2 commits to home-assistant.io ") - [MORITA Hajime (@omo)](https://github.com/omo "3 total commits to the home-assistant organization: 3 commits to home-assistant.io @@ -6308,6 +6488,9 @@ This page contains a list of people who have contributed in one way or another t 6 commits to home-assistant.io 3 commits to home-assistant ") +- [mreiling (@mreiling)](https://github.com/mreiling "1 total commits to the home-assistant organization: +1 commit to home-assistant +") - [mrosseel (@mrosseel)](https://github.com/mrosseel "1 total commits to the home-assistant organization: 1 commit to home-assistant ") @@ -6339,8 +6522,8 @@ This page contains a list of people who have contributed in one way or another t - [mvillarejo (@mvillarejo)](https://github.com/mvillarejo "1 total commits to the home-assistant organization: 1 commit to home-assistant ") -- [mvn23 (@mvn23)](https://github.com/mvn23 "20 total commits to the home-assistant organization: -10 commits to home-assistant +- [mvn23 (@mvn23)](https://github.com/mvn23 "23 total commits to the home-assistant organization: +13 commits to home-assistant 10 commits to home-assistant.io ") - [mweimerskirch (@mweimerskirch)](https://github.com/mweimerskirch "3 total commits to the home-assistant organization: @@ -6391,6 +6574,9 @@ This page contains a list of people who have contributed in one way or another t 13 commits to home-assistant 6 commits to home-assistant.io ") +- [Nate Robinson (@NateRobinsonS)](https://github.com/NateRobinsonS "1 total commits to the home-assistant organization: +1 commit to home-assistant.io +") - [natemason (@natemason)](https://github.com/natemason "1 total commits to the home-assistant organization: 1 commit to home-assistant ") @@ -6477,8 +6663,8 @@ This page contains a list of people who have contributed in one way or another t 2 commits to home-assistant 2 commits to home-assistant.io ") -- [Nicholas Westerhausen (@nwesterhausen)](https://github.com/nwesterhausen "17 total commits to the home-assistant organization: -17 commits to home-assistant.io +- [Nicholas Westerhausen (@nwesterhausen)](https://github.com/nwesterhausen "20 total commits to the home-assistant organization: +20 commits to home-assistant.io ") - [Nick Chamberlin (@NickChamberlin)](https://github.com/NickChamberlin "1 total commits to the home-assistant organization: 1 commit to home-assistant.io @@ -6486,9 +6672,9 @@ This page contains a list of people who have contributed in one way or another t - [Nick Hammond (@nickhammond)](https://github.com/nickhammond "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") -- [Nick Horvath (@nhorvath)](https://github.com/nhorvath "6 total commits to the home-assistant organization: -4 commits to home-assistant -2 commits to home-assistant.io +- [Nick Horvath (@nhorvath)](https://github.com/nhorvath "9 total commits to the home-assistant organization: +5 commits to home-assistant +4 commits to home-assistant.io ") - [Nick Oliver (@PixnBits)](https://github.com/PixnBits "1 total commits to the home-assistant organization: 1 commit to home-assistant.io @@ -6505,8 +6691,8 @@ This page contains a list of people who have contributed in one way or another t 3 commits to home-assistant.io 2 commits to home-assistant ") -- [Nick Whyte (@nickw444)](https://github.com/nickw444 "9 total commits to the home-assistant organization: -6 commits to home-assistant +- [Nick Whyte (@nickw444)](https://github.com/nickw444 "10 total commits to the home-assistant organization: +7 commits to home-assistant 3 commits to home-assistant.io ") - [Nick Zelei (@zelein)](https://github.com/zelein "1 total commits to the home-assistant organization: @@ -6542,6 +6728,9 @@ This page contains a list of people who have contributed in one way or another t - [Nicolas Quiénot (@niQo)](https://github.com/niQo "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") +- [Nicole Zeckner (@PurelyNicole)](https://github.com/PurelyNicole "2 total commits to the home-assistant organization: +2 commits to home-assistant.io +") - [nicxvan (@nicxvan)](https://github.com/nicxvan "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") @@ -6678,8 +6867,8 @@ This page contains a list of people who have contributed in one way or another t - [obgm (@obgm)](https://github.com/obgm "480 total commits to the home-assistant organization: 480 commits to libcoap ") -- [Odianosen Ejale (@Odianosen25)](https://github.com/Odianosen25 "51 total commits to the home-assistant organization: -51 commits to appdaemon +- [Odianosen Ejale (@Odianosen25)](https://github.com/Odianosen25 "52 total commits to the home-assistant organization: +52 commits to appdaemon ") - [Odin Ugedal (@odinuge)](https://github.com/odinuge "2 total commits to the home-assistant organization: 1 commit to home-assistant @@ -6800,15 +6989,19 @@ This page contains a list of people who have contributed in one way or another t 3 commits to home-assistant.io 2 commits to home-assistant ") +- [osirisinferi (@osirisinferi)](https://github.com/osirisinferi "1 total commits to the home-assistant organization: +1 commit 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 "113 total commits to the home-assistant organization: -79 commits to home-assistant -24 commits to home-assistant.io +- [Otto Winter (@OttoWinter)](https://github.com/OttoWinter "127 total commits to the home-assistant organization: +91 commits to home-assistant +25 commits to home-assistant.io 5 commits to home-assistant-polymer 3 commits to hass-release 2 commits to developers.home-assistant +1 commit to netdisco ") - [Otto\-G (@Otto-G)](https://github.com/Otto-G "1 total commits to the home-assistant organization: 1 commit to home-assistant.io @@ -6822,6 +7015,10 @@ This page contains a list of people who have contributed in one way or another t - [panache67 (@panache67)](https://github.com/panache67 "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") +- [Panagiotis Panagiotopoulos (@ppanagiotis)](https://github.com/ppanagiotis "2 total commits to the home-assistant organization: +1 commit to home-assistant +1 commit to home-assistant.io +") - [Paolo Bonzini (@bonzini)](https://github.com/bonzini "2 total commits to the home-assistant organization: 1 commit to home-assistant 1 commit to home-assistant.io @@ -6851,19 +7048,19 @@ This page contains a list of people who have contributed in one way or another t - [Pascal Jungblut (@pascalj)](https://github.com/pascalj "1 total commits to the home-assistant organization: 1 commit to dehydrated ") -- [Pascal Vizeli (@pvizeli)](https://github.com/pvizeli "4056 total commits to the home-assistant organization: -1473 commits to hassio -713 commits to hassos -507 commits to home-assistant -476 commits to hassio-build -391 commits to hassio-addons -343 commits to home-assistant.io +- [Pascal Vizeli (@pvizeli)](https://github.com/pvizeli "4083 total commits to the home-assistant organization: +1475 commits to hassio +723 commits to hassos +508 commits to home-assistant +477 commits to hassio-build +392 commits to hassio-addons +344 commits to home-assistant.io 56 commits to hassio-homeassistant 29 commits to developers.home-assistant 20 commits to hassio-cli +18 commits to hassio-auth 17 commits to hassio-addons-example -12 commits to hassio-auth-pam -11 commits to hassio-base +16 commits to hassio-base 3 commits to home-assistant-polymer 3 commits to hassio-addons-development 1 commit to home-assistant-js-websocket @@ -6884,8 +7081,8 @@ This page contains a list of people who have contributed in one way or another t - [patock (@patock)](https://github.com/patock "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") -- [Patrick (@tradiuz)](https://github.com/tradiuz "5 total commits to the home-assistant organization: -5 commits to home-assistant.io +- [Patrick (@tradiuz)](https://github.com/tradiuz "6 total commits to the home-assistant organization: +6 commits to home-assistant.io ") - [Patrick Aikens (@duckpuppy)](https://github.com/duckpuppy "3 total commits to the home-assistant organization: 3 commits to home-assistant.io @@ -6992,8 +7189,8 @@ This page contains a list of people who have contributed in one way or another t - [Paxy (@Paxy)](https://github.com/Paxy "1 total commits to the home-assistant organization: 1 commit to home-assistant ") -- [pbalogh77 (@pbalogh77)](https://github.com/pbalogh77 "14 total commits to the home-assistant organization: -12 commits to home-assistant +- [pbalogh77 (@pbalogh77)](https://github.com/pbalogh77 "15 total commits to the home-assistant organization: +13 commits to home-assistant 2 commits to home-assistant.io ") - [pdanilew (@pdanilew)](https://github.com/pdanilew "1 total commits to the home-assistant organization: @@ -7030,11 +7227,14 @@ This page contains a list of people who have contributed in one way or another t - [Petar Petrov (@MindFreeze)](https://github.com/MindFreeze "2 total commits to the home-assistant organization: 2 commits to home-assistant.io ") +- [Pete LePage (@petele)](https://github.com/petele "3 total commits to the home-assistant organization: +3 commits to pyharmony +") - [Pete Peterson (@petey)](https://github.com/petey "1 total commits to the home-assistant organization: 1 commit to home-assistant-polymer ") -- [PeteBa (@PeteBa)](https://github.com/PeteBa "11 total commits to the home-assistant organization: -5 commits to home-assistant +- [PeteBa (@PeteBa)](https://github.com/PeteBa "12 total commits to the home-assistant organization: +6 commits to home-assistant 4 commits to home-assistant-polymer 2 commits to home-assistant.io ") @@ -7237,6 +7437,9 @@ This page contains a list of people who have contributed in one way or another t - [pixelasticity (@pixelasticity)](https://github.com/pixelasticity "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") +- [pjv (@pjv)](https://github.com/pjv "1 total commits to the home-assistant organization: +1 commit to home-assistant.io +") - [pkonnekermetametrics (@pkonnekermetametrics)](https://github.com/pkonnekermetametrics "5 total commits to the home-assistant organization: 5 commits to warrant ") @@ -7290,9 +7493,16 @@ This page contains a list of people who have contributed in one way or another t - [PuckStar (@PuckStar)](https://github.com/PuckStar "7 total commits to the home-assistant organization: 7 commits to home-assistant.io ") +- [Purplecarrot (@purplecarrot)](https://github.com/purplecarrot "1 total commits to the home-assistant organization: +1 commit to home-assistant.io +") - [pyitphyoaung (@pyitphyoaung)](https://github.com/pyitphyoaung "2 total commits to the home-assistant organization: 2 commits to home-assistant.io ") +- [Pär Svanström (@psvanstrom)](https://github.com/psvanstrom "2 total commits to the home-assistant organization: +1 commit to home-assistant +1 commit to home-assistant.io +") - [qinghuangchan (@qinghuangchan)](https://github.com/qinghuangchan "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") @@ -7308,9 +7518,9 @@ This page contains a list of people who have contributed in one way or another t - [Questler (@Questler)](https://github.com/Questler "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") -- [quthla (@quthla)](https://github.com/quthla "16 total commits to the home-assistant organization: +- [quthla (@quthla)](https://github.com/quthla "17 total commits to the home-assistant organization: +6 commits to home-assistant-polymer 6 commits to home-assistant -5 commits to home-assistant-polymer 4 commits to home-assistant-iOS 1 commit to home-assistant.io ") @@ -7321,8 +7531,8 @@ This page contains a list of people who have contributed in one way or another t 1 commit to home-assistant 1 commit to home-assistant.io ") -- [R Huish (@genestealer)](https://github.com/genestealer "4 total commits to the home-assistant organization: -4 commits to home-assistant.io +- [R Huish (@genestealer)](https://github.com/genestealer "5 total commits to the home-assistant organization: +5 commits to home-assistant.io ") - [r4nd0mbr1ck (@r4nd0mbr1ck)](https://github.com/r4nd0mbr1ck "3 total commits to the home-assistant organization: 2 commits to home-assistant.io @@ -7371,8 +7581,8 @@ This page contains a list of people who have contributed in one way or another t 1 commit to home-assistant 1 commit to home-assistant.io ") -- [Ravi K (@shreram)](https://github.com/shreram "1 total commits to the home-assistant organization: -1 commit to home-assistant.io +- [Ravi K (@shreram)](https://github.com/shreram "2 total commits to the home-assistant organization: +2 commits to home-assistant.io ") - [Ray (@raymck)](https://github.com/raymck "2 total commits to the home-assistant organization: 2 commits to open-zwave @@ -7430,8 +7640,8 @@ This page contains a list of people who have contributed in one way or another t 3 commits to home-assistant 1 commit to home-assistant.io ") -- [Rene Nulsch (@ReneNulschDE)](https://github.com/ReneNulschDE "23 total commits to the home-assistant organization: -15 commits to home-assistant +- [Rene Nulsch (@ReneNulschDE)](https://github.com/ReneNulschDE "24 total commits to the home-assistant organization: +16 commits to home-assistant 8 commits to home-assistant.io ") - [Rene Tode (@ReneTode)](https://github.com/ReneTode "55 total commits to the home-assistant organization: @@ -7444,6 +7654,9 @@ This page contains a list of people who have contributed in one way or another t - [René Kliment (@renekliment)](https://github.com/renekliment "2 total commits to the home-assistant organization: 2 commits to home-assistant ") +- [René\-Marc Simard (@renemarc)](https://github.com/renemarc "1 total commits to the home-assistant organization: +1 commit to home-assistant.io +") - [Rev Michael Greb (@mikegrb)](https://github.com/mikegrb "3 total commits to the home-assistant organization: 3 commits to home-assistant.io ") @@ -7500,6 +7713,9 @@ This page contains a list of people who have contributed in one way or another t - [Rick (@rcuddy)](https://github.com/rcuddy "1 total commits to the home-assistant organization: 1 commit to pi-gen ") +- [Rick Rubino (@rrubin0)](https://github.com/rrubin0 "4 total commits to the home-assistant organization: +4 commits to home-assistant.io +") - [Rick Sharp (@ricksharp)](https://github.com/ricksharp "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") @@ -7543,9 +7759,10 @@ This page contains a list of people who have contributed in one way or another t - [Rob Slifka (@rslifka)](https://github.com/rslifka "5 total commits to the home-assistant organization: 5 commits to home-assistant.io ") -- [Robbert Müller (@mjrider)](https://github.com/mjrider "6 total commits to the home-assistant organization: -5 commits to hassio-cli -1 commit to home-assistant.io +- [Robbert Müller (@mjrider)](https://github.com/mjrider "10 total commits to the home-assistant organization: +7 commits to hassio-cli +2 commits to home-assistant.io +1 commit to home-assistant ") - [Robbie Page (@rorpage)](https://github.com/rorpage "3 total commits to the home-assistant organization: 3 commits to hassbian-scripts @@ -7565,28 +7782,28 @@ This page contains a list of people who have contributed in one way or another t 7 commits to dehydrated 6 commits to netdisco 5 commits to organization-internal -3 commits to home-assistant-js-websocket -3 commits to home-assistant-cli -3 commits to hassbot -3 commits to scenegen -3 commits to home-assistant-js 3 commits to hadashboard -3 commits to appdaemon +3 commits to home-assistant-cli +3 commits to scenegen +3 commits to hassbot +3 commits to home-assistant-js-websocket 3 commits to organization +3 commits to appdaemon +3 commits to home-assistant-js 3 commits to open-zwave +2 commits to LabelBot 2 commits to lambda-home-assistant-github -2 commits to micropython-home-assistant +2 commits to fabric-home-assistant 2 commits to home-assistant-notebooks 2 commits to home-assistant-assets -2 commits to LabelBot -2 commits to fabric-home-assistant +2 commits to micropython-home-assistant ") - [Robby Grossman (@freerobby)](https://github.com/freerobby "3 total commits to the home-assistant organization: 2 commits to home-assistant 1 commit to home-assistant.io ") -- [Robert (@metbril)](https://github.com/metbril "8 total commits to the home-assistant organization: -8 commits to home-assistant.io +- [Robert (@metbril)](https://github.com/metbril "9 total commits to the home-assistant organization: +9 commits to home-assistant.io ") - [Robert (@rbrtio)](https://github.com/rbrtio "2 total commits to the home-assistant organization: 2 commits to open-zwave @@ -7612,11 +7829,12 @@ This page contains a list of people who have contributed in one way or another t 1 commit to appdaemon 1 commit to hassos ") -- [Robert Schütz (@dotlambda)](https://github.com/dotlambda "6 total commits to the home-assistant organization: -2 commits to home-assistant-cli +- [Robert Schütz (@dotlambda)](https://github.com/dotlambda "8 total commits to the home-assistant organization: +3 commits to home-assistant-cli 2 commits to netdisco 1 commit to appdaemon 1 commit to home-assistant +1 commit to home-assistant.io ") - [Robert Svensson (@Kane610)](https://github.com/Kane610 "96 total commits to the home-assistant organization: 62 commits to home-assistant @@ -7628,11 +7846,12 @@ This page contains a list of people who have contributed in one way or another t - [robhuls (@robhuls)](https://github.com/robhuls "1 total commits to the home-assistant organization: 1 commit to home-assistant ") -- [Robin (@robmarkcole)](https://github.com/robmarkcole "71 total commits to the home-assistant organization: +- [Robin (@robmarkcole)](https://github.com/robmarkcole "74 total commits to the home-assistant organization: 48 commits to home-assistant.io -19 commits to home-assistant +20 commits to home-assistant +2 commits to home-assistant-notebooks 2 commits to home-assistant-assets -1 commit to home-assistant-notebooks +1 commit to data.home-assistant 1 commit to hassos ") - [Robin (@kloknibor)](https://github.com/kloknibor "1 total commits to the home-assistant organization: @@ -7655,9 +7874,9 @@ This page contains a list of people who have contributed in one way or another t 6 commits to home-assistant.io 3 commits to open-zwave ") -- [Rohan Kapoor (@rohankapoorcom)](https://github.com/rohankapoorcom "38 total commits to the home-assistant organization: -27 commits to home-assistant -11 commits to home-assistant.io +- [Rohan Kapoor (@rohankapoorcom)](https://github.com/rohankapoorcom "42 total commits to the home-assistant organization: +30 commits to home-assistant +12 commits to home-assistant.io ") - [Roi Dayan (@roidayan)](https://github.com/roidayan "7 total commits to the home-assistant organization: 6 commits to home-assistant @@ -7730,12 +7949,12 @@ This page contains a list of people who have contributed in one way or another t - [rpr69 (@rpr69)](https://github.com/rpr69 "2 total commits to the home-assistant organization: 2 commits to home-assistant.io ") -- [rrubin0 (@rrubin0)](https://github.com/rrubin0 "4 total commits to the home-assistant organization: -4 commits to home-assistant.io -") - [Ruben (@rubenvandeven)](https://github.com/rubenvandeven "1 total commits to the home-assistant organization: 1 commit to home-assistant ") +- [Ruben J\. Jongejan (@rvben)](https://github.com/rvben "1 total commits to the home-assistant organization: +1 commit to home-assistant.io +") - [RubenKelevra (@RubenKelevra)](https://github.com/RubenKelevra "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") @@ -7926,8 +8145,12 @@ This page contains a list of people who have contributed in one way or another t - [Sander de Leeuw (@sdeleeuw)](https://github.com/sdeleeuw "1 total commits to the home-assistant organization: 1 commit to home-assistant ") -- [sander76 (@sander76)](https://github.com/sander76 "44 total commits to the home-assistant organization: -40 commits to home-assistant +- [Sander Geerts (@Devqon)](https://github.com/Devqon "2 total commits to the home-assistant organization: +1 commit to home-assistant +1 commit to home-assistant.io +") +- [sander76 (@sander76)](https://github.com/sander76 "46 total commits to the home-assistant organization: +42 commits to home-assistant 4 commits to home-assistant.io ") - [Sangwon Kim (@pueue)](https://github.com/pueue "1 total commits to the home-assistant organization: @@ -8023,9 +8246,9 @@ This page contains a list of people who have contributed in one way or another t - [Sean (@mitchese)](https://github.com/mitchese "1 total commits to the home-assistant organization: 1 commit to home-assistant ") -- [Sean Dague (@sdague)](https://github.com/sdague "81 total commits to the home-assistant organization: -56 commits to home-assistant -16 commits to home-assistant.io +- [Sean Dague (@sdague)](https://github.com/sdague "85 total commits to the home-assistant organization: +58 commits to home-assistant +18 commits to home-assistant.io 5 commits to home-assistant-polymer 3 commits to netdisco 1 commit to home-assistant-js @@ -8035,6 +8258,9 @@ This page contains a list of people who have contributed in one way or another t 4 commits to home-assistant.io 3 commits to hassio-build ") +- [Sean Hoyt (@deadman96385)](https://github.com/deadman96385 "1 total commits to the home-assistant organization: +1 commit to home-assistant.io +") - [Sean Kerr (@seankerr)](https://github.com/seankerr "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") @@ -8063,9 +8289,9 @@ This page contains a list of people who have contributed in one way or another t - [Sebastian (@sgso)](https://github.com/sgso "3 total commits to the home-assistant organization: 3 commits to libcoap ") -- [Sebastian Muszynski (@syssi)](https://github.com/syssi "163 total commits to the home-assistant organization: -105 commits to home-assistant -53 commits to home-assistant.io +- [Sebastian Muszynski (@syssi)](https://github.com/syssi "166 total commits to the home-assistant organization: +107 commits to home-assistant +54 commits to home-assistant.io 3 commits to netdisco 2 commits to home-assistant-polymer ") @@ -8166,15 +8392,15 @@ This page contains a list of people who have contributed in one way or another t ") - [Simon Holzmayer (@sholzmayer)](https://github.com/sholzmayer "5 total commits to the home-assistant organization: 2 commits to hassos -1 commit to hassio 1 commit to developers.home-assistant 1 commit to home-assistant-polymer +1 commit to hassio ") - [Simon Hörrle (@CM000n)](https://github.com/CM000n "1 total commits to the home-assistant organization: 1 commit to home-assistant ") -- [Simon Nørager Sørensen (@simse)](https://github.com/simse "3 total commits to the home-assistant organization: -2 commits to home-assistant +- [Simon Nørager Sørensen (@simse)](https://github.com/simse "4 total commits to the home-assistant organization: +3 commits to home-assistant 1 commit to home-assistant.io ") - [Simon Szustkowski (@simonszu)](https://github.com/simonszu "7 total commits to the home-assistant organization: @@ -8241,13 +8467,17 @@ This page contains a list of people who have contributed in one way or another t - [snizzleorg (@snizzleorg)](https://github.com/snizzleorg "5 total commits to the home-assistant organization: 5 commits to hadashboard ") -- [SNoof85 (@SNoof85)](https://github.com/SNoof85 "1 total commits to the home-assistant organization: -1 commit to home-assistant -") -- [Soós Péter (@soosp)](https://github.com/soosp "3 total commits to the home-assistant organization: +- [SNoof85 (@SNoof85)](https://github.com/SNoof85 "3 total commits to the home-assistant organization: 2 commits to home-assistant 1 commit to home-assistant.io ") +- [sorinyo2004 (@sorinyo2004)](https://github.com/sorinyo2004 "1 total commits to the home-assistant organization: +1 commit to home-assistant.io +") +- [Soós Péter (@soosp)](https://github.com/soosp "4 total commits to the home-assistant organization: +2 commits to home-assistant +2 commits to home-assistant.io +") - [spacemanspiff2007 (@spacemanspiff2007)](https://github.com/spacemanspiff2007 "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") @@ -8347,6 +8577,9 @@ This page contains a list of people who have contributed in one way or another t 8 commits to home-assistant 3 commits to home-assistant.io ") +- [stephanfevrier (@stephanfevrier)](https://github.com/stephanfevrier "1 total commits to the home-assistant organization: +1 commit to home-assistant.io +") - [Stephen Edgar (@ntwb)](https://github.com/ntwb "2 total commits to the home-assistant organization: 1 commit to fabric-home-assistant 1 commit to home-assistant.io @@ -8387,12 +8620,18 @@ This page contains a list of people who have contributed in one way or another t 2 commits to home-assistant.io 1 commit to home-assistant ") +- [Steve Scott (@thewishy)](https://github.com/thewishy "1 total commits to the home-assistant organization: +1 commit to home-assistant.io +") - [Steve Simms (@ssimms)](https://github.com/ssimms "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") - [Steve Thompson (@stetho)](https://github.com/stetho "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") +- [Steve9F (@Steve9F)](https://github.com/Steve9F "1 total commits to the home-assistant organization: +1 commit to home-assistant +") - [Steven Adams (@navstev0)](https://github.com/navstev0 "2 total commits to the home-assistant organization: 2 commits to open-zwave ") @@ -8404,8 +8643,8 @@ This page contains a list of people who have contributed in one way or another t 2 commits to home-assistant 1 commit to home-assistant.io ") -- [Steven Looman (@StevenLooman)](https://github.com/StevenLooman "51 total commits to the home-assistant organization: -46 commits to home-assistant +- [Steven Looman (@StevenLooman)](https://github.com/StevenLooman "53 total commits to the home-assistant organization: +48 commits to home-assistant 3 commits to netdisco 2 commits to home-assistant.io ") @@ -8420,6 +8659,9 @@ This page contains a list of people who have contributed in one way or another t 5 commits to home-assistant.io 4 commits to home-assistant ") +- [Stuart (@schford)](https://github.com/schford "1 total commits to the home-assistant organization: +1 commit to home-assistant.io +") - [Stuart McCroden (@McCroden)](https://github.com/McCroden "5 total commits to the home-assistant organization: 5 commits to home-assistant.io ") @@ -8482,8 +8724,8 @@ This page contains a list of people who have contributed in one way or another t 6 commits to home-assistant.io 2 commits to home-assistant-cli 2 commits to home-assistant -1 commit to developers.home-assistant 1 commit to hassio-build +1 commit to developers.home-assistant ") - [szaroubi (@szaroubi)](https://github.com/szaroubi "1 total commits to the home-assistant organization: 1 commit to home-assistant.io @@ -8514,6 +8756,9 @@ This page contains a list of people who have contributed in one way or another t 8 commits to home-assistant 1 commit to home-assistant.io ") +- [Tal Salmona (@talsalmona)](https://github.com/talsalmona "1 total commits to the home-assistant organization: +1 commit to home-assistant.io +") - [tango\-foxtrot (@tango-foxtrot)](https://github.com/tango-foxtrot "1 total commits to the home-assistant organization: 1 commit to netdisco ") @@ -8550,6 +8795,10 @@ This page contains a list of people who have contributed in one way or another t - [Ted Kulp (@tedkulp)](https://github.com/tedkulp "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") +- [Ted Sluis (@tedsluis)](https://github.com/tedsluis "2 total commits to the home-assistant organization: +1 commit to home-assistant +1 commit to home-assistant.io +") - [tedstriker (@tedstriker)](https://github.com/tedstriker "4 total commits to the home-assistant organization: 3 commits to home-assistant.io 1 commit to home-assistant @@ -8662,10 +8911,10 @@ This page contains a list of people who have contributed in one way or another t 13 commits to home-assistant.io 1 commit to home-assistant-polymer ") -- [Thibault Maekelbergh (@thibmaek)](https://github.com/thibmaek "5 total commits to the home-assistant organization: -3 commits to home-assistant.io +- [Thibault Maekelbergh (@thibmaek)](https://github.com/thibmaek "7 total commits to the home-assistant organization: +4 commits to home-assistant.io +2 commits to home-assistant 1 commit to hassio-addons -1 commit to home-assistant ") - [thinkelastic (@thinkelastic)](https://github.com/thinkelastic "1 total commits to the home-assistant organization: 1 commit to open-zwave @@ -8673,13 +8922,16 @@ This page contains a list of people who have contributed in one way or another t - [ThinkPadNL (@ThinkPadNL)](https://github.com/ThinkPadNL "4 total commits to the home-assistant organization: 4 commits to home-assistant.io ") -- [Thom Troy (@ttroy50)](https://github.com/ttroy50 "15 total commits to the home-assistant organization: +- [Thom Troy (@ttroy50)](https://github.com/ttroy50 "16 total commits to the home-assistant organization: 8 commits to home-assistant.io -7 commits to home-assistant +8 commits to home-assistant ") - [Thomas (@ktpx)](https://github.com/ktpx "2 total commits to the home-assistant organization: 2 commits to home-assistant.io ") +- [Thomas (@a-tom-s)](https://github.com/a-tom-s "1 total commits to the home-assistant organization: +1 commit to home-assistant.io +") - [Thomas Delaet (@thomasdelaet)](https://github.com/thomasdelaet "5 total commits to the home-assistant organization: 3 commits to home-assistant 2 commits to home-assistant.io @@ -8797,13 +9049,17 @@ This page contains a list of people who have contributed in one way or another t - [Tim Wilde (@twilde)](https://github.com/twilde "1 total commits to the home-assistant organization: 1 commit to home-assistant ") +- [timkoers (@timkoers)](https://github.com/timkoers "1 total commits to the home-assistant organization: +1 commit to home-assistant +") - [Timm Schäuble (@tymm)](https://github.com/tymm "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") -- [Timmo (@timmo001)](https://github.com/timmo001 "11 total commits to the home-assistant organization: +- [Timmo (@timmo001)](https://github.com/timmo001 "12 total commits to the home-assistant organization: 4 commits to home-assistant-polymer 4 commits to home-assistant 3 commits to home-assistant.io +1 commit to data.home-assistant ") - [Timo (@timotk)](https://github.com/timotk "1 total commits to the home-assistant organization: 1 commit to netdisco @@ -8841,8 +9097,9 @@ This page contains a list of people who have contributed in one way or another t - [tmartinez (@tmartinez69009)](https://github.com/tmartinez69009 "6 total commits to the home-assistant organization: 6 commits to open-zwave ") -- [tmd224 (@tmd224)](https://github.com/tmd224 "1 total commits to the home-assistant organization: -1 commit to home-assistant.io +- [tmd224 (@tmd224)](https://github.com/tmd224 "3 total commits to the home-assistant organization: +2 commits to home-assistant.io +1 commit to home-assistant ") - [Toast (@swetoast)](https://github.com/swetoast "2 total commits to the home-assistant organization: 2 commits to hassbian-scripts @@ -8857,10 +9114,11 @@ This page contains a list of people who have contributed in one way or another t - [Tobias Nordahl Kristensen (@exetico)](https://github.com/exetico "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") -- [Tobias Sauerwein (@cgtobi)](https://github.com/cgtobi "56 total commits to the home-assistant organization: +- [Tobias Sauerwein (@cgtobi)](https://github.com/cgtobi "57 total commits to the home-assistant organization: 28 commits to home-assistant.io 27 commits to home-assistant 1 commit to appdaemon +1 commit to data.home-assistant ") - [Tobie Booth (@tobiebooth)](https://github.com/tobiebooth "6 total commits to the home-assistant organization: 4 commits to home-assistant @@ -8873,11 +9131,11 @@ This page contains a list of people who have contributed in one way or another t - [Toby Matejovsky (@tobym)](https://github.com/tobym "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") -- [Tod Schmidt (@tschmidty69)](https://github.com/tschmidty69 "61 total commits to the home-assistant organization: +- [Tod Schmidt (@tschmidty69)](https://github.com/tschmidty69 "62 total commits to the home-assistant organization: 22 commits to home-assistant 21 commits to appdaemon 10 commits to home-assistant.io -6 commits to hassio-addons +7 commits to hassio-addons 2 commits to hassio ") - [Todd McNeal (@tmcneal)](https://github.com/tmcneal "2 total commits to the home-assistant organization: @@ -8904,12 +9162,12 @@ This page contains a list of people who have contributed in one way or another t 6 commits to home-assistant-polymer 2 commits to netdisco ") -- [Tom French (@Solije)](https://github.com/Solije "4 total commits to the home-assistant organization: +- [Tom French (@Solije)](https://github.com/Solije "5 total commits to the home-assistant organization: 3 commits to home-assistant.io -1 commit to home-assistant +2 commits to home-assistant ") -- [Tom Harris (@teharris1)](https://github.com/teharris1 "30 total commits to the home-assistant organization: -20 commits to home-assistant +- [Tom Harris (@teharris1)](https://github.com/teharris1 "31 total commits to the home-assistant organization: +21 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: @@ -8965,8 +9223,11 @@ This page contains a list of people who have contributed in one way or another t 3 commits to home-assistant 1 commit to home-assistant.io ") -- [tomlut (@tomlut)](https://github.com/tomlut "2 total commits to the home-assistant organization: -2 commits to home-assistant.io +- [tomlut (@tomlut)](https://github.com/tomlut "3 total commits to the home-assistant organization: +3 commits to home-assistant.io +") +- [Tommi Pääkkö (@Glenf)](https://github.com/Glenf "1 total commits to the home-assistant organization: +1 commit to developers.home-assistant ") - [TomMini (@TomMini)](https://github.com/TomMini "1 total commits to the home-assistant organization: 1 commit to home-assistant-polymer @@ -9103,14 +9364,15 @@ This page contains a list of people who have contributed in one way or another t ") - [ubnt\-marc\-khouri (@ubnt-marc-khouri)](https://github.com/ubnt-marc-khouri "6 total commits to the home-assistant organization: 2 commits to home-assistant-polymer -1 commit to developers.home-assistant 1 commit to hassio-build +1 commit to developers.home-assistant 1 commit to home-assistant 1 commit to home-assistant.io ") -- [uchagani (@uchagani)](https://github.com/uchagani "10 total commits to the home-assistant organization: -9 commits to home-assistant +- [uchagani (@uchagani)](https://github.com/uchagani "13 total commits to the home-assistant organization: +11 commits to home-assistant 1 commit to home-assistant-polymer +1 commit to home-assistant.io ") - [Ugo Viti (@ugoviti)](https://github.com/ugoviti "24 total commits to the home-assistant organization: 24 commits to open-zwave @@ -9185,8 +9447,11 @@ This page contains a list of people who have contributed in one way or another t - [VdkaShaker (@VdkaShaker)](https://github.com/VdkaShaker "1 total commits to the home-assistant organization: 1 commit to home-assistant.io ") -- [VDRainer (@VDRainer)](https://github.com/VDRainer "2 total commits to the home-assistant organization: -2 commits to home-assistant.io +- [VDRainer (@VDRainer)](https://github.com/VDRainer "3 total commits to the home-assistant organization: +3 commits to home-assistant.io +") +- [Velik123 (@Velik123)](https://github.com/Velik123 "1 total commits to the home-assistant organization: +1 commit to pyharmony ") - [vetegrodd (@vetegrodd)](https://github.com/vetegrodd "1 total commits to the home-assistant organization: 1 commit to home-assistant @@ -9219,16 +9484,16 @@ This page contains a list of people who have contributed in one way or another t 3 commits to home-assistant 1 commit to home-assistant.io ") -- [Ville Skyttä (@scop)](https://github.com/scop "150 total commits to the home-assistant organization: -98 commits to home-assistant +- [Ville Skyttä (@scop)](https://github.com/scop "157 total commits to the home-assistant organization: +104 commits to home-assistant 20 commits to home-assistant.io -12 commits to netdisco -5 commits to hassio-addons +13 commits to netdisco 5 commits to hassio-cli +5 commits to hassio-addons 4 commits to developers.home-assistant 2 commits to home-assistant-polymer -2 commits to hassio 2 commits to hassio-build +2 commits to hassio ") - [vincemic (@vincemic)](https://github.com/vincemic "3 total commits to the home-assistant organization: 3 commits to open-zwave @@ -9361,6 +9626,10 @@ This page contains a list of people who have contributed in one way or another t 4 commits to home-assistant.io 3 commits to home-assistant ") +- [William Comartin (@wcomartin)](https://github.com/wcomartin "2 total commits to the home-assistant organization: +1 commit to home-assistant +1 commit to home-assistant.io +") - [William Johansson (@radhus)](https://github.com/radhus "2 total commits to the home-assistant organization: 1 commit to hassio 1 commit to home-assistant.io @@ -9382,8 +9651,8 @@ This page contains a list of people who have contributed in one way or another t - [wmn79 (@wmn79)](https://github.com/wmn79 "1 total commits to the home-assistant organization: 1 commit to open-zwave ") -- [WofWca (@WofWca)](https://github.com/WofWca "9 total commits to the home-assistant organization: -6 commits to home-assistant.io +- [WofWca (@WofWca)](https://github.com/WofWca "10 total commits to the home-assistant organization: +7 commits to home-assistant.io 3 commits to developers.home-assistant ") - [wogri (@wogri)](https://github.com/wogri "1 total commits to the home-assistant organization: @@ -9455,6 +9724,9 @@ This page contains a list of people who have contributed in one way or another t 1 commit to home-assistant 1 commit to home-assistant.io ") +- [Xus Badia (@XusBadia)](https://github.com/XusBadia "1 total commits to the home-assistant organization: +1 commit to home-assistant-polymer +") - [yankees9920 (@wagnerbenh)](https://github.com/wagnerbenh "2 total commits to the home-assistant organization: 2 commits to home-assistant.io ") @@ -9466,8 +9738,8 @@ This page contains a list of people who have contributed in one way or another t 1 commit to home-assistant.io ") - [Yannick POLLART (@ypollart)](https://github.com/ypollart "8 total commits to the home-assistant organization: -4 commits to home-assistant.io 4 commits to home-assistant +4 commits to home-assistant.io ") - [Yannick Simard (@TheRaven)](https://github.com/TheRaven "2 total commits to the home-assistant organization: 2 commits to home-assistant.io @@ -9526,9 +9798,9 @@ This page contains a list of people who have contributed in one way or another t - [Zachary Priddy (@zpriddy)](https://github.com/zpriddy "1 total commits to the home-assistant organization: 1 commit to open-zwave ") -- [Zack Arnett (@zsarnett)](https://github.com/zsarnett "117 total commits to the home-assistant organization: -89 commits to home-assistant-polymer -27 commits to home-assistant.io +- [Zack Arnett (@zsarnett)](https://github.com/zsarnett "123 total commits to the home-assistant organization: +93 commits to home-assistant-polymer +29 commits to home-assistant.io 1 commit to developers.home-assistant ") - [zajnic (@zajnic)](https://github.com/zajnic "1 total commits to the home-assistant organization: @@ -9600,4 +9872,4 @@ This page contains a list of people who have contributed in one way or another t This page is irregularly updated using the [`hass-release` tool](https://github.com/home-assistant/hass-release). If you think that you are missing, please let us know. -This page was last updated Thursday, December 13 2018, 11:44:16 UTC. +This page was last updated Friday, January 04 2019, 18:48:01 UTC. From 65ab1786fdb0f9bbbe3d1725be01491bd342ffb9 Mon Sep 17 00:00:00 2001 From: Marvin Wichmann Date: Sat, 5 Jan 2019 15:50:54 +0100 Subject: [PATCH 02/57] Updated docs of knx climate device (#7937) * Updated docs of knx climate device * Updated docs to reflect changes in HA. * Updated docs to mention the internal mapping --- source/_components/climate.knx.markdown | 78 ++++++++++--------------- 1 file changed, 32 insertions(+), 46 deletions(-) diff --git a/source/_components/climate.knx.markdown b/source/_components/climate.knx.markdown index db1f0be4f65..d121ed48283 100644 --- a/source/_components/climate.knx.markdown +++ b/source/_components/climate.knx.markdown @@ -47,24 +47,19 @@ climate: operation_mode_comfort_address: '5/1/7' ``` -If you want to overwrite the supported operation modes use: +`operation_mode_frost_protection_address` / `operation_mode_night_address` / `operation_mode_comfort_address` are not necessary if `operation_mode_address` is specified. -```yaml -# Example configuration.yaml entry -climate: - - platform: knx - name: HASS-Kitchen.Temperature - temperature_address: '5/1/1' - setpoint_shift_address: '5/1/2' - setpoint_shift_state_address: '5/1/3' - target_temperature_address: '5/1/4' - operation_mode_frost_protection_address: '5/1/5' - operation_mode_comfort_address: '5/1/7' - override_supported_operation_modes: - - "Night" - - "Standby" - - "Comfort" -``` +If your device doesn't support setpoint_shift calculations (i.e. if you don't provide a `setpoint_shift_address` value) please set the `min_temp` and `max_temp` +attributes of the climate device to avoid issues with increasing the temperature in the frontend. + +The following values are valid for the `operation_modes` attribute: + +- Comfort (maps internally to STATE_HEAT within Home Assistant) +- Standby (maps internally to STATE_ECO within Home Assistant) +- Night (maps internally to STATE_IDLE within Home Assistant) +- Frost Protection (maps internally to STATE_MANUAL within Home Assistant) +- Fan only (maps internally to STATE_FAN_ONLY within Home Assistant) +- Dehumidification (maps internally to STATE_DRY within Home Assistant) {% configuration %} name: @@ -119,6 +114,14 @@ controller_status_state_address: description: Explicit KNX address for reading HVAC controller status. required: false type: string +controller_mode_address: + description: KNX address for handling controller modes. + required: false + type: string +controller_mode_state_address: + description: Explicit KNX address for reading HVAC Control Mode. + required: false + type: string operation_mode_frost_protection_address: description: KNX address for switching on/off frost/heat protection mode. required: false @@ -131,41 +134,24 @@ operation_mode_comfort_address: description: KNX address for switching on/off comfort mode. required: false type: string -override_supported_operation_modes: - description: Defines the supported operation modes. +operation_modes: + description: Overrides the supported operation modes. required: false type: array on_off_address: - description: KNX address for switching the device on/off. + description: KNX address for switching the climate device on/off. required: false type: string on_off_state_address: - description: Explicit KNX address for reading the current on/off status. + description: KNX address for gathering the current state (on/off) of the climate device. required: false type: string +min_temp: + description: Override the minimum temperature. + required: false + type: float +max_temp: + description: Override the maximum temperature. + required: false + type: float {% endconfiguration %} - -`operation_mode_frost_protection_address` / `operation_mode_night_address` / `operation_mode_comfort_address` are not necessary if `operation_mode_address` is specified. - -`override_supported_operation_modes` is an array that can contain any of the following values: - -- Auto -- Comfort -- Standby -- Night -- Frost Protection -- Heat -- Morning Warmup -- Cool -- Night Purge -- Precool -- Off -- Test -- Emergency Heat -- Fan only -- Ice -- Dry -- NoDem - -Also check [this](https://github.com/XKNX/xknx/blob/master/xknx/knx/dpt_hvac_mode.py#L13-L30) page for more information. - From 2daaea690f9a94036bd310b71462e039204e7ec3 Mon Sep 17 00:00:00 2001 From: Malte Franken Date: Mon, 7 Jan 2019 21:15:53 +1100 Subject: [PATCH 03/57] Geo Location -> Geolocation (#8086) * fixed gelocation naming * fixed broken link --- source/_components/demo.markdown | 4 ++-- .../geo_location.geo_json_events.markdown | 2 +- source/_components/geo_location.markdown | 14 +++++++------- ...o_location.nsw_rural_fire_service_feed.markdown | 2 +- .../geo_location.usgs_earthquakes_feed.markdown | 2 +- source/_docs/automation/trigger.markdown | 6 +++--- source/_lovelace/map.markdown | 2 +- 7 files changed, 16 insertions(+), 16 deletions(-) diff --git a/source/_components/demo.markdown b/source/_components/demo.markdown index 8b0ac25e3c5..cb23fc6635a 100644 --- a/source/_components/demo.markdown +++ b/source/_components/demo.markdown @@ -17,14 +17,14 @@ The `demo` platform allows you to use components which are providing a demo of t Available demo platforms: -- [Air Pollutants]((/components/air_pollutants/) (`air_pollutants`) +- [Air Pollutants](/components/air_pollutants/) (`air_pollutants`) - [Alarm control panel](/components/alarm_control_panel/) (`alarm_control_panel`) - [Binary sensor](/components/binary_sensor/) (`binary_sensor`) - [Camera](/components/camera/) (`camera`) - [Climate](/components/climate/) (`climate`) - [Cover](/components/cover/) (`cover`) - [Fan](/components/fan/) (`fan`) -- [Geo Location](/components/geo_location/) (`geo_location`) +- [Geolocation](/components/geo_location/) (`geo_location`) - [Image Processing](/components/image_processing/) (`image_processing`) - [Light](/components/light/) (`light`) - [Lock](/components/lock/) (`lock`) diff --git a/source/_components/geo_location.geo_json_events.markdown b/source/_components/geo_location.geo_json_events.markdown index 2144a0c6bcd..f9a347490c4 100644 --- a/source/_components/geo_location.geo_json_events.markdown +++ b/source/_components/geo_location.geo_json_events.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: geo_location.png -ha_category: Geo Location +ha_category: Geolocation ha_iot_class: "Cloud Polling" ha_release: "0.79" --- diff --git a/source/_components/geo_location.markdown b/source/_components/geo_location.markdown index 6540d5d2000..a7cfd900c8a 100644 --- a/source/_components/geo_location.markdown +++ b/source/_components/geo_location.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "Geo Location" -description: "Instructions on how to integrate geo location aware platforms into Home Assistant." +title: "Geolocation" +description: "Instructions on how to integrate geolocation aware platforms into Home Assistant." date: 2018-08-27 08:00 sidebar: true comments: false @@ -11,13 +11,13 @@ logo: geo_location.png ha_release: "0.78" --- -Geo Location aware entities are typically related to events in the real world in the vicinity of Home Assistant's location, like for example weather events, bush fires or earthquakes. +Geolocation aware entities are typically related to events in the real world in the vicinity of Home Assistant's location, like for example weather events, bush fires or earthquakes. -Entities can have associated geo location coordinates (latitude and longitude) so that they are displayed on the map. The distance from the entity's coordinates to Home Assistant's location can be used for filtering. +Entities can have associated geolocation coordinates (latitude and longitude) so that they are displayed on the map. The distance from the entity's coordinates to Home Assistant's location can be used for filtering. -## {% linkable_title Geo Location trigger %} +## {% linkable_title Geolocation trigger %} -The [Geo Location trigger](/docs/automation/trigger/#geo-location-trigger) can be used in automations triggered by Geo Location entities appearing in or disappearing from zones. The following value must be used as `source` of the trigger depending on which platform is managing the entities: +The [Geolocation trigger](/docs/automation/trigger/#geolocation-trigger) can be used in automations triggered by Geolocation entities appearing in or disappearing from zones. The following value must be used as `source` of the trigger depending on which platform is managing the entities: | Platform | Source | |---------------------------------------------------|-------------------------------| @@ -27,7 +27,7 @@ The [Geo Location trigger](/docs/automation/trigger/#geo-location-trigger) can b Conditions can be used to further filter entities, for example by inspecting their state attributes. -## {% linkable_title Geo Location notification example %} +## {% linkable_title Geolocation notification example %} The following example automation creates a notification on the screen when a fire classified as 'Bush Fire' is reported within a predefined bush fire alert zone: diff --git a/source/_components/geo_location.nsw_rural_fire_service_feed.markdown b/source/_components/geo_location.nsw_rural_fire_service_feed.markdown index 5879a583c04..c576a6919d7 100644 --- a/source/_components/geo_location.nsw_rural_fire_service_feed.markdown +++ b/source/_components/geo_location.nsw_rural_fire_service_feed.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: nsw-rural-fire-service.png -ha_category: Geo Location +ha_category: Geolocation ha_iot_class: "Cloud Polling" ha_release: "0.81" --- diff --git a/source/_components/geo_location.usgs_earthquakes_feed.markdown b/source/_components/geo_location.usgs_earthquakes_feed.markdown index c101a2f6697..b841fb4b47f 100644 --- a/source/_components/geo_location.usgs_earthquakes_feed.markdown +++ b/source/_components/geo_location.usgs_earthquakes_feed.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: us-geological-survey.png -ha_category: Geo Location +ha_category: Geolocation ha_iot_class: "Cloud Polling" ha_release: 0.84 --- diff --git a/source/_docs/automation/trigger.markdown b/source/_docs/automation/trigger.markdown index 7a4e57b496a..43298851180 100644 --- a/source/_docs/automation/trigger.markdown +++ b/source/_docs/automation/trigger.markdown @@ -220,10 +220,10 @@ automation: event: enter # or "leave" ``` -### {% linkable_title Geo Location trigger %} +### {% linkable_title Geolocation trigger %} -Geo Location triggers can trigger when an entity is appearing in or disappearing from a zone. Entities that are created by a [Geo Location](/components/geo_location/) platform support reporting GPS coordinates. -Because entities are generated and removed by these platforms automatically, the entity id normally cannot be predicted. Instead, this trigger requires the definition of a `source` which is directly linked to one of the Geo Location platforms. +Geolocation triggers can trigger when an entity is appearing in or disappearing from a zone. Entities that are created by a [Geolocation](/components/geo_location/) platform support reporting GPS coordinates. +Because entities are generated and removed by these platforms automatically, the entity id normally cannot be predicted. Instead, this trigger requires the definition of a `source` which is directly linked to one of the Geolocation platforms. ```yaml automation: diff --git a/source/_lovelace/map.markdown b/source/_lovelace/map.markdown index 2572ba03117..6e82ea9c13d 100644 --- a/source/_lovelace/map.markdown +++ b/source/_lovelace/map.markdown @@ -28,7 +28,7 @@ entities: type: list geo_location_sources: required: true - description: List of geolocation sources. All current entities with that source will be displayed on the map. See [Geo Location](/components/geo_location/) platform for valid sources. Either this or the `entities` configuration option is required. + description: List of geolocation sources. All current entities with that source will be displayed on the map. See [Geolocation](/components/geo_location/) platform for valid sources. Either this or the `entities` configuration option is required. type: list title: required: false From fa0c8b8a76017ba033ec7a592a6d2e8649285710 Mon Sep 17 00:00:00 2001 From: CV Date: Tue, 8 Jan 2019 20:51:10 +0100 Subject: [PATCH 04/57] Additional information for warning types (#8104) Added more details on warning types --- source/_components/sensor.dwd_weather_warnings.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.dwd_weather_warnings.markdown b/source/_components/sensor.dwd_weather_warnings.markdown index 977c4d92f03..0c02d11b3f5 100644 --- a/source/_components/sensor.dwd_weather_warnings.markdown +++ b/source/_components/sensor.dwd_weather_warnings.markdown @@ -59,7 +59,7 @@ name: | `region_id` | Region ID assigned by DWD. | | `warning_count` | *(int)* Number of issued warnings. There can be more than one warning issued at once. | | `warning__level` | *(int)* Issued warning level between 0 and 4.
0 == Keine Warnungen,
1 == Wetterwarnungen,
2 == Warnungen vor markantem Wetter,
3 == Unwetterwarnungen,
4 == Warnungen vor extremem Unwetter | -| `warning__type` | *(int)* Issued warning type.
0 == ?,
1 == Windböen,
2 == ?,
3 == Schneefall,
4 == Nebel,
5 == Frost,
6 == Glätte or Glatteis
Please be aware that the type numbers represent more like a category than an exact number-to-string match. For example Type `6` can mean `GLÄTTE` or `GLATTEIS` or similar. | +| `warning__type` | *(int)* Issued warning type.
0 == Gewitter,
1 == Windböen, Sturmböen
2 == ?
3 == Schneefall
4 == Nebel
5 == Frost
6 == Glätte, Glatteis
Please be aware that the type numbers represent more like a category than an exact number-to-string match. For example Type `6` can mean `GLÄTTE` or `GLATTEIS` or similar. | | `warning__name` | This name correlates with the warning type and indicates it in short as a string. | | `warning__headline` | Official headline the weather warning. | | `warning__start` | Starting time and date of the issued warning. | From 42375be4f0e03fca3634cf07ff161128c0572083 Mon Sep 17 00:00:00 2001 From: Andrei Popovici Date: Wed, 9 Jan 2019 06:47:37 +0200 Subject: [PATCH 05/57] Update geofency.md (#8016) Per https://github.com/home-assistant/home-assistant/pull/18951 --- source/_components/geofency.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/geofency.md b/source/_components/geofency.md index bff78c98327..7b270b15d2f 100644 --- a/source/_components/geofency.md +++ b/source/_components/geofency.md @@ -41,4 +41,4 @@ geofency: - keys ``` -To configure Geofency, you must configure (via the Webhook feature) to send a POST request to your Home Assistant server at `http:///api/geofency`. Use the default POST format, and make sure to include the API password if you have configured a password in Home Assistant (add `?api_password=` to the end of the URL). Make sure to enable the 'Update Geo-Position' functionality for mobile beacons. +To configure Geofency, you must set it up via the integrations panel in the configuration screen. You must then configure the iOS app (via the Webhook feature) to send a POST request to your Home Assistant server at the webhook URL provided by the integration during setup. Use the default POST format. Make sure to enable the 'Update Geo-Position' functionality for mobile beacons. From 45b05e4684d361fb92fb1c005ba69acb2423ae82 Mon Sep 17 00:00:00 2001 From: Eliseo Martelli Date: Wed, 9 Jan 2019 10:21:06 +0100 Subject: [PATCH 06/57] Renamed pollutants to air quality (#7901) * renamed pollutants to air quality * Update demo.markdown --- .../{air_pollutants.markdown => air_quality.markdown} | 6 +++--- ...nsensemap.markdown => air_quality.opensensemap.markdown} | 4 ++-- source/_components/demo.markdown | 3 ++- 3 files changed, 7 insertions(+), 6 deletions(-) rename source/_components/{air_pollutants.markdown => air_quality.markdown} (75%) rename source/_components/{air_pollutants.opensensemap.markdown => air_quality.opensensemap.markdown} (86%) diff --git a/source/_components/air_pollutants.markdown b/source/_components/air_quality.markdown similarity index 75% rename from source/_components/air_pollutants.markdown rename to source/_components/air_quality.markdown index 1713a3c7cf7..edd421269c4 100644 --- a/source/_components/air_pollutants.markdown +++ b/source/_components/air_quality.markdown @@ -1,7 +1,7 @@ --- layout: page -title: "Air Pollutants" -description: "Instructions on how to air pollutants sensors with Home Assistant" +title: "Air Quality" +description: "Instructions on how to add air quality sensors with Home Assistant" date: 2018-11-25 08:00 sidebar: true comments: false @@ -9,7 +9,7 @@ sharing: true footer: true --- -The `air_pollutants` gather information about the air quality and pollution details. +The `air_quality` gather information about the air quality and pollution details. The platforms cover the following levels (if they are available): diff --git a/source/_components/air_pollutants.opensensemap.markdown b/source/_components/air_quality.opensensemap.markdown similarity index 86% rename from source/_components/air_pollutants.opensensemap.markdown rename to source/_components/air_quality.opensensemap.markdown index 7c79058e35e..b294a95e8bb 100644 --- a/source/_components/air_pollutants.opensensemap.markdown +++ b/source/_components/air_quality.opensensemap.markdown @@ -13,7 +13,7 @@ ha_release: 0.85 ha_iot_class: "Cloud Polling" --- -The `opensensemap` air pollutants platform will query the open data API of [openSenseMap.org](https://opensensemap.org/) to monitor air quality sensor station. +The `opensensemap` air quality platform will query the open data API of [openSenseMap.org](https://opensensemap.org/) to monitor air quality sensor station. ## {% linkable_title Setup %} @@ -25,7 +25,7 @@ To enable this platform, add the following lines to your `configuration.yaml` fi ```yaml # Example configuration.yaml entry -air_pollutants: +air_quality: - platform: opensensemap station_id: STATION_ID ``` diff --git a/source/_components/demo.markdown b/source/_components/demo.markdown index cb23fc6635a..bbf640b67b2 100644 --- a/source/_components/demo.markdown +++ b/source/_components/demo.markdown @@ -17,7 +17,8 @@ The `demo` platform allows you to use components which are providing a demo of t Available demo platforms: -- [Air Pollutants](/components/air_pollutants/) (`air_pollutants`) + +- [Air Quality](/components/air_quality/) (`air_quality`) - [Alarm control panel](/components/alarm_control_panel/) (`alarm_control_panel`) - [Binary sensor](/components/binary_sensor/) (`binary_sensor`) - [Camera](/components/camera/) (`camera`) From b4bc506a553e082ef4d2aae24866a19d2689569d Mon Sep 17 00:00:00 2001 From: Ian Richardson Date: Wed, 9 Jan 2019 17:10:31 -0600 Subject: [PATCH 07/57] 0.85 LL Changelog (#8115) --- source/lovelace/changelog.markdown | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/source/lovelace/changelog.markdown b/source/lovelace/changelog.markdown index 4a7aeda33d5..040c8fc7c2c 100644 --- a/source/lovelace/changelog.markdown +++ b/source/lovelace/changelog.markdown @@ -8,6 +8,33 @@ comments: false sharing: true footer: true --- +## {% linkable_title Changes in 0.85.0 %} +- 📣 [map card]: New config `geo_location_sources` +- 📣 [alarm panel card]: Hide keypad if `code_format` attribute is not "Number" +- 📣 [alarm panel card]: Hide code input field if `code_format` attribute is not set +- 📣 UI Editor for [picture card] +- 📣 UI Editor for [weather forecast card] +- 📣 UI Editor for [plant status card] +- 📣 UI Editor for [media control card] +- 📣 UI Editor for [iframe card] +- 📣 UI Editor for [sensor card] +- 📣 UI Editor for [shopping list card] +- 📣 UI Editor for [light card] +- 📣 UI Editor for [gauge card] +- 📣 UI Editor for [markdown card] +- 📣 UI Editor for [alarm panel card] +- 📣 UI Editor for [thermostat card] +- 📣 UI Editor for [entity button card] +- 📣 UI Editor for [map card] +- 🔧 [thermostat card] Step logic updated to match more-info behavior +- 🔧 [weather forecast card] Proper RTL support +- 🔧 [thermostat car] Set minimum height of card +- 🔧 Fix incorrect state display being cached +- 🔧 Fix `service-button` element `service_data` usage +- 🔧 Fix `picture-elements` element positioning to account for card title +- 🔧 Fix undefined [plant status card]/[weather forecast card] + + ## {% linkable_title Changes in 0.84.0 %} ### Breaking Changes From b95d4203264ca3629c5c77029273c69a52d9db30 Mon Sep 17 00:00:00 2001 From: Nick Whyte Date: Thu, 10 Jan 2019 10:38:13 +1100 Subject: [PATCH 08/57] Add ness alarm control panel (#7630) * Add ness alarm control panel * . * Device class --- .../alarm_control_panel.ness_alarm.markdown | 19 +++++ .../binary_sensor.ness_alarm.markdown | 18 +++++ source/_components/ness_alarm.markdown | 75 ++++++++++++++++++ source/images/supported_brands/ness.png | Bin 0 -> 10011 bytes 4 files changed, 112 insertions(+) create mode 100644 source/_components/alarm_control_panel.ness_alarm.markdown create mode 100644 source/_components/binary_sensor.ness_alarm.markdown create mode 100644 source/_components/ness_alarm.markdown create mode 100644 source/images/supported_brands/ness.png diff --git a/source/_components/alarm_control_panel.ness_alarm.markdown b/source/_components/alarm_control_panel.ness_alarm.markdown new file mode 100644 index 00000000000..d8fd5082d52 --- /dev/null +++ b/source/_components/alarm_control_panel.ness_alarm.markdown @@ -0,0 +1,19 @@ +--- +layout: page +title: "Ness Alarm Control Panel" +description: "Instructions on how to setup the Ness alarm control panel within Home Assistant." +date: 2018-11-25 18:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: ness.jpg +ha_category: Alarm +ha_release: 0.84 +ha_iot_class: "Local Push" +--- + + +The `ness_alarm` alarm control panel platform allows you to control your [Ness](http://nesscorporation.com/) D8x and D16x alarms. + +The alarm control panel is automatically added by configuring the [Ness alarm](/components/ness_alarm/) component. diff --git a/source/_components/binary_sensor.ness_alarm.markdown b/source/_components/binary_sensor.ness_alarm.markdown new file mode 100644 index 00000000000..dafef92b0f7 --- /dev/null +++ b/source/_components/binary_sensor.ness_alarm.markdown @@ -0,0 +1,18 @@ +--- +layout: page +title: "Ness Alarm Binary Sensor" +description: "Instructions on how to setup the Ness alarm zones within Home Assistant." +date: 2018-11-25 18:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: ness.jpg +ha_category: Binary Sensor +ha_release: 0.84 +ha_iot_class: "Local Push" +--- + +The `ness_alarm` binary sensor allows you to monitor your [Ness](http://nesscorporation.com/) D8x and D16x alarm zones. + +Zone binary sensors are automatically added by configuring the [Ness alarm](/components/ness_alarm/) component. diff --git a/source/_components/ness_alarm.markdown b/source/_components/ness_alarm.markdown new file mode 100644 index 00000000000..99e726f2a30 --- /dev/null +++ b/source/_components/ness_alarm.markdown @@ -0,0 +1,75 @@ +--- +layout: page +title: "Ness Alarm" +description: "Instructions on how to integrate a Ness D8x/D16x alarm system with Home Assistant." +date: 2018-11-25 18:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: ness.jpg +ha_category: Alarm +ha_release: 0.84 +ha_iot_class: "Local Push" +--- + +The `ness_alarm` component will allow Home Assistant users who own a Ness D8x/D16x alarm system to leverage their alarm system and its sensors to provide Home Assistant with information about their homes. Connectivity between Home Assistant and the alarm is accomplished through a IP232 module that must be connected to the alarm. + +There is currently support for the following device types within Home Assistant: + +- [Binary Sensor](/components/binary_sensor.ness_alarm/): Reports on zone statuses +- [Alarm Control Panel](/components/alarm_control_panel.ness_alarm/): Reports on alarm status, and can be used to arm/disarm the system + +The module communicates via the [Ness D8x/D16x ASCII protocol](http://www.nesscorporation.com/Software/Ness_D8-D16_ASCII_protocol.pdf). + +## {% linkable_title Configuration %} + +A `ness_alarm` section must be present in the `configuration.yaml` file and contain the following options as required: + +```yaml +# Example configuration.yaml entry +ness_alarm: + host: alarm.local + port: 2401 + zones: + - name: Garage + id: 1 + - name: Storeroom + id: 2 + - name: Kitchen + id: 3 + - name: Front Entrance + id: 4 + - name: Front Door + id: 5 + type: door +``` + +{% configuration %} +host: + description: The hostname of the IP232 module on your home network. + required: true + type: string +port: + description: The port on which the IP232 module listens for clients. + required: true + type: integer +zones: + description: List of zones to add + required: false + type: [integer, list] + keys: + zone_id: + description: ID of the zone on the alarm system (i.e Zone 1 -> Zone 16). + required: true + type: integer + name: + description: Name of the zone. + required: true + type: string + type: + description: The zone type. Can be any [binary_sensor device class](/components/binary_sensor/#device-class). + required: false + default: motion + type: string +{% endconfiguration %} diff --git a/source/images/supported_brands/ness.png b/source/images/supported_brands/ness.png new file mode 100644 index 0000000000000000000000000000000000000000..fb150b7068f401d7c4c47a1da4714bfde42e11f4 GIT binary patch literal 10011 zcmaKSXH*m2_q8A>Rk{jd480cv$P=l75D_u-&_R$6f>I42(yR0Uh9)fnLPUB8QIH6P zA`qI0B?$-wkVpwd{`sx-ettj9tXZ?}oSAjczGv^V=cbs#?{KmSv7I}2j`OY|)co8z z#v%H38OwS4dAj+>`nhuq5L07I1L8FvYGK~G*`4Db-`3QXS8qzKf@Ib}GOJ+4?a(J@ zXJ-ckeH#xD`%T!>)!#eG&uLTR>pI|7Ng&0`c@I7EbYb zc=GN0j<5S+Z}-9S{PEYN?YKzV&_^16bSLiFPDIE~(4#-83ENNo534b2GJwP8`ag*= zM+<~MQQ@?%_MHH~ozTF;p7)1st!s)hhXZ|wpFd3xQ#|N%%KF&QHt5_rcE0}|4Ce}q zubw+65q%d5vAils8DMyr>seUiiF~=*r(%+C5lYA{fA+g@p8Si6v(gLU)4d>&f0flQ z$R^BU_*VHcWAoD8!!w<-Paht@8w9=!~;%365f4{z|kGf0aXm=0mD4La9c|)x(GI^VIZyvO9JogFt zUw}ugmbe$mxZQBV&Z*=6-Rq%?$OjSpi6GCnB)<^#hHrj*Mz#D|=$idq<3){oaZL^^ z5Vw6n5)q=JKotz?1{Dh%f5`%pi+%5&Eaw?0Vyde!KrOH>KM@GBfFTR{RMTcK zOUUmC+*j|GK-i*Oi3`pk3jxPOP==oK>vnqmeAP`uhm z^lR$-EcT{I9p9y`GdonLOa#(W%=7oB5TWMnko>28fkz>m& zc2ht|bH06D;(Zj)MP;cq8dnTisxAi z$A~r>%;3F@vkTo;=Jd##MKIr8PI8Eq;b0-8_Dj9TBVYb zzl(ai*M~G`^dd|XKsumJb?Wu>;*vW3PDAHyGHaVrGAM?7%5I_&!s9kxaZt&eW zAk4Z0A?%#U>AFRsQu89M#XMK#;?gX)h<|RK#iibcUI4d!`^9T>0SV|XanJhxGkM;J z48;#SSkI(_*9{v)eW2NUky;J>X3< zf}%DtASK2vVuTP_uCB(R{uO|9^JtUZts?bX0rERR7edC$lhInRn=EpQIdlX;nsroB zY~1K;au;cRuyI4`I5&%8)?#?+jrpE?kK7f8{lB_@V|w^lVxp$^rg#>6HHxCS>{0z# zCO%MUWez8}AV74r>d3qCR5HYhbgVhKd==y@dNl$G(})uVUV)DyO5YrJ@GGYLIiSVB z#&HOUz9Q=IS)XSF^bu*v128Y~Qptekp)%o7Yc+5EIU%>HwAwp>zf*o6K)xshzE;F6 z(5cIdic()`wTbO=z%^n&e6{+%LPCFC1o6v}T{;Nk7JmN(^G1K{!Buo7aSJx=%$+td zy?c>&f=u<+pUjM(U(!OW)ar#%<=ZamSXJO0=)iX1RL&YTDY&M!3@|5D|nwotla$}i)_JxXhiTar@)W$e0X<*@NVp@w7!c^9NorV!JJ zIOCUfa?E{>+B;BUPy8XJRWlCLkd_R@C9v&3BBm^=-(wM_N^ysE{qM;S;c{;9VD*)w zK*RgyfK?kE-Syn>J*p!Jctf`cmCvX%Uur=(#^I9L&y68XdR;5)77z)Vo@l?o%qq#7 z><^gtwlXh@f9fCK8v$rE98KUB~XTOAW$Q78b|dlsHuPXYFByKDO4F) zQ%-*qCRRjkp(t-WulS1!(9Iu8=Lwso)7TEB4h~+^sIiA?yC*`hk5!-P|HFDh;FeTKpJQCW}#950F1~ zS5bnAP54^tlK2IxbG%tBeLEZYX2k8m`&Fja-ycto-)jtP*Fz^(NS|1SWB;A*`QnRH z>@$rLMr{8R-iMhW`XayK)991i^;tVE*MJ!cw&lktn#Cod)AW6gDS4XjmR)7|8Kr4D7BlpRw^Dy@b|p8 zE~`VHe-?N2M&}XP{jg1%X*&B{PjhK=i`E+`hr6t7$+30dB_Sj{f*F-M9nwZsJuou0 zmcH%afUUuvI3vrncx&(ZlO^T>%$7J*6kETbrXSgu(#94aJD|!|d82=V=0&9Wwd-+% z(ew(?C58DJZCsJ;K3RSNiSZ-OKZL9=jnTUQREruau#L#MBPqY(!%nU|B^Rn$}6+a^nlaK@h-?Vy2v4X>uukC@H^Aq{;W?eLF1qs*#j%RXYIyY z7pNm;t2{5&Eb)CW-5+4%n4cBSpGD<+K33S(pTe?k&U&*$`{@Gyq1xHrK(5(F8lj=z zlqb^+>Ow>IRrX$BGjwEth4hz5d7b@=ONVdxvzt0K0%S+xG$CRWB=7Q!FZh%T9ZD}1 zAa)zzeJfJ~(_GWfwBK{q&84CJ=gf0)a{U18>dh{E(lu-omzk4U24D2Y=i6j63W5RC z$M$0@%>z&wu`%+oC@jhSDhp0db}zYP`G3JHS#i)&lb|Nw*s)UOHFC_Wi0B#d12mI-4LLLG0=Z;(KY#oa^~97)`k0Og z=qv+@8hM!(sZ+(%H8bx>=eD*rCk|`TWtGk6MjaVLN71ML+)7RP!`N5`rajB|{U_e7 z=}y6Cv|S?5vJnSsm$>8sMQED*=20x54I z*e?|Id8Ap`_idEdO|FnRHtA*$so~4)$5o2@#IIFf$At>7RU{i~!BBY~eV$&DIem(qf9-xb-6#$rg`Y*2vsv!=VkA1ov=M>v}{xZyr9JnN_YdsWX?;LDZHO4tWr9kX5OB@*($RrJ19;)?6$@n2 z_Y(g;0w7^5Uw#F59v}6?94aN%b=qQCGb1r;qUpV=vDJHc^!yUPo2*DvNyDQ6C{Qg$ z_qTi~_4@L)O!*6|ugiL8HEqQv>KF9DRta?CCP0af0>_BmNly1qiE$o)LvzJD0U}Zh zr|PDtu9n~}lE&M&twzaSxZtY4)YiI6Mi6JxHS1kRt~onqgYo;yF#P|*`PBkPJ`a|C z9dEp2_W7dt?IomFrSe1fn_R)_MvrCeiogTE7%N0t^PW$HZT@2`&*646vYK5QKmYux zYcf*^E4GgI_PMaF)n+c$LdJy3pRUGC|Ov7Wj}OxGCX=LR@i2wQ6r&~Z!!t_rmjSkPFE#8h@&FpV4eh< zY_g@Xg7iV4^T7{w19u@zh|bENlPHc_Q&W%1#dWfb5E6!mVF{-B^D#YSmi@qcOf=$%ZvwnGeY#D3LGb6^BKTv?2xp5hm zU`ySY)x0k@u~uu$58H6h!1BY1d+C}jG%4t~3CAykj6FHGZ(oNIr9YoYRY~%2COStJ z+&TI6iWS^2jHY!+7&!_sxYw23p}csh^_y5LguF$G84>>kQ|D5>n2>w5xAhjIn8}?3E`oiju z%B@)DnXJO97kv|zp|E}{50h@>8(8VxAX5&>TAR_i+jC%a-p2&Zzrtu{!L~x=canOI zLo6u?89UqR6fLr66NA}1Bid6uFEcTLGkaS_cT;Dqj+W?o@pQL&!XR%#4Nlk0O)_xH zk=6k3cRU6qBvUk7=Jm(#J49tY)Zve#vB&xYe8bX3K-WjV+x6|8mYqWwl@;sPJub^x z43AjW{5fit3Tvn|?G+NwQk;mTL)LO} zS+?gCTlREEgCEhRJFZwV>u@g=&}E|g7#`+Kj`5ItnTTocaR?t>oweWE>!$Usa^2Q) zb2cp~$F$}II6e}{y7%+(BbCgKMHza$_@-Grs}S;noJeA^vG_c`@nUiy@35;Jm)gZ> z(DYIM1v!n5rAWomZ^KFMEYL87{F}*;sUO5oc+nqJ$eKT9f5H7$NM#HZWwl#bolh?XO7U{mJ$Nj^^@xKRoOG2q z&*vuOE~W$xduBQ)%K_o=VcT4_KZuXkRUDe*q9$L%$}*wS{z%j7?M&gRs3AT7Q5hj~ zsjD{K7OLDJpG2i<(e7(eo+n)-HFc!E*(GX_J)Ez-5+;jQy|;GDS;FRjd{ z4zf&)^uBKiY$jG6dLC`)FxD6`YN(*NO)QUKCd!LPH|0INXZXlxVVzu0QT*F4t&jR` z1NnYMjs}YmJBL>1(ffz#M+Z34@Ss35Rp~P^DPQ6YA=UVDWh9o*=sLqnFm*C5wm3zU zWC!r#60MRHalkJuM&4dajy1l+D)=v4YGwYqfGk>rId8WD9YDF1D1Bv+JA4UjD^|T1 zWFq;csq`UNnh|H>APlewcydeBtgQ?Apw;k^(4|GNez($XX_jPTDdmdhk^qO^wCI6I zR;X@k!JWtzQA@=PcR61#VhfBJJqQ|^`zPLj6K`q=QR33#2D5)moz=r43+cYxjEmlcU@$Jc<;q)n;Ry%A1n$;lc zr+Z%`)e0CSRTKX)N@b;s;Bs43Pe8Y9K#qZDZuDL8_qtWvJ7U$-T)OZofvcw;0I&T9 z70eI2zCVw6&^hLa!1|A6sI%FP=QRCrg zU0ucjQ~NM`Y>|$(qr=H4760($Mv-+>J`7HBV&{NketZ<}Cggf6G!V=22nk$^9k}fS ziplMEtZVdG774Dw6>{U`PFeg|!GPTV)_us8@R8t1W(hZ�)}Pl+DSRe^}6EA#nOu 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 Date: Fri, 11 Jan 2019 09:13:42 +1100 Subject: [PATCH 09/57] ness_alarm: Remove merge marker and address config error (#8125) --- source/_components/ness_alarm.markdown | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/source/_components/ness_alarm.markdown b/source/_components/ness_alarm.markdown index ea30d8958c4..216c2582aca 100644 --- a/source/_components/ness_alarm.markdown +++ b/source/_components/ness_alarm.markdown @@ -55,13 +55,9 @@ port: required: true type: integer zones: -<<<<<<< HEAD description: List of zones to add -======= - description: List of zones to add ->>>>>>> current required: false - type: [integer, list] + type: list keys: zone_id: description: ID of the zone on the alarm system (i.e Zone 1 -> Zone 16). @@ -76,8 +72,4 @@ zones: required: false default: motion type: string -<<<<<<< HEAD {% endconfiguration %} -======= -{% endconfiguration %} ->>>>>>> current From 0d63a6656544d4a327ace60f94345e8c55a7f1f3 Mon Sep 17 00:00:00 2001 From: Sergey Rymsha Date: Fri, 11 Jan 2019 02:23:27 +0100 Subject: [PATCH 10/57] support of telnet communication with NAD receivers (#8010) * support of telnet communication with NAD receivers * Update source/_components/media_player.nad.markdown Co-Authored-By: rymsha * Update source/_components/media_player.nad.markdown Co-Authored-By: rymsha * Update source/_components/media_player.nad.markdown Co-Authored-By: rymsha * merge two components into one as demanded --- source/_components/media_player.nad.markdown | 29 ++++++++-- .../_components/media_player.nadtcp.markdown | 54 ------------------- 2 files changed, 24 insertions(+), 59 deletions(-) delete mode 100644 source/_components/media_player.nadtcp.markdown diff --git a/source/_components/media_player.nad.markdown b/source/_components/media_player.nad.markdown index 25152678fa7..0725043437b 100644 --- a/source/_components/media_player.nad.markdown +++ b/source/_components/media_player.nad.markdown @@ -25,11 +25,25 @@ media_player: ``` {% configuration %} -serial_port: - description: The serial port. - required: true - default: "/dev/ttyUSB0" +type: + description: Type of communication. Valid types are `RS232`, `Telnet` or `TCP` + required: false + default: RS232 type: string +serial_port: + description: The serial port. (for `RS232` type only) + required: false + default: /dev/ttyUSB0 + type: string +host: + description: The IP address of your amplifier. (for `TCP` and `Telnet` types) + required: false + type: string +port: + description: The port number of the device. (for `Telnet` type only) + required: false + default: 53 + type: integer name: description: Name of the device. required: false @@ -46,9 +60,14 @@ max_volume: default: -20 type: integer sources: - description: A list of mappings from source to source name. Valid sources are `1 to 10`. + description: A list of mappings from source to source name. Valid sources are `1 to 10`. (for `RS232` and `Telnet` types) required: false type: [list, string] +volume_step: + description: The amount in dB you want to increase the volume with when pressing volume up/down. (for `TCP` type only) + required: false + default: 4 + type: integer {% endconfiguration %} The min_volume and max_volume are there to protect you against misclicks on the slider so you will not blow up your speakers when you go from -92dB to +20dB. You can still force it to go higher or lower than the values set with the plus and minus buttons. diff --git a/source/_components/media_player.nadtcp.markdown b/source/_components/media_player.nadtcp.markdown deleted file mode 100644 index 046ba913216..00000000000 --- a/source/_components/media_player.nadtcp.markdown +++ /dev/null @@ -1,54 +0,0 @@ ---- -layout: page -title: "NAD tcp" -description: "Instructions on how to integrate the NAD D 7050 or C338 digital amplifiers into Home Assistant." -date: 2017-06-07 20:00 -sidebar: true -comments: false -sharing: true -footer: true -logo: nad.png -ha_category: Media Player -ha_release: 0.47 -ha_iot_class: "Local Polling" ---- - -The `nadtcp` platform allows you to control the D7050 and C338 from Home Assistant via WiFi. Note that it has only been tested with the D 7050. - -To add a NAD amplifier to your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -media_player: - - platform: nadtcp - host: 192.168.0.112 -``` - -{% configuration %} -host: - description: The IP address of your amplifier. - required: true - type: string -name: - description: Name of the device. - required: false - default: NAD amplifier - type: string -min_volume: - description: Minimum volume in dB to use with the slider. - required: false - default: -60 - type: integer -max_volume: - description: Maximum volume in dB to use with the slider. - required: false - default: -10 - type: integer -volume_step: - description: The amount in dB you want to increase the volume with when pressing volume up/down. - required: false - default: 4 - type: integer -{% endconfiguration %} - -The maximum volume level of the D 7050 amplifier is +10 db, minimum is -90. From 769246b3410627ad86468377aeead09be3d0e44a Mon Sep 17 00:00:00 2001 From: mindigmarton Date: Fri, 11 Jan 2019 11:40:32 +0100 Subject: [PATCH 11/57] Add emulated_roku docs (#6928) * Add emulated_roku docs * Update emulated_roku docs * Update emulated_roku docs * Update emulated_roku docs to remove yaml configuration * Add yaml configuration sample * Added emulated_roku API warning, clarified setup and troubleshooting * Add troubleshooting for Docker UPnP discovery * Update emulated_roku release version * Remove emulated_roku qa_scale --- source/_components/emulated_roku.markdown | 125 ++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 source/_components/emulated_roku.markdown diff --git a/source/_components/emulated_roku.markdown b/source/_components/emulated_roku.markdown new file mode 100644 index 00000000000..3465330d682 --- /dev/null +++ b/source/_components/emulated_roku.markdown @@ -0,0 +1,125 @@ +--- +layout: page +title: "Emulated Roku" +description: "Instructions on how to set up Emulated Roku within Home Assistant." +date: 2019-01-10 08:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_category: Hub +ha_release: 0.86.0 +ha_iot_class: "Local Push" +--- + +This component integrates an emulated Roku API into Home Assistant, +so remotes such as Harmony and Android apps can connect to it through WiFi as it were a Roku player. +Home Assistant will see key presses and app launches as Events, which you can use as triggers for automations. +Multiple Roku servers may be started if you run out of buttons by specifying multiple server entries. + +

+Windows is not supported because Home Assistant uses `ProactorEventLoop` which does not support UDP sockets. +

+ +

+This component opens an unauthenticated API on the host, allowing anything on the local network to access +your Home Assistant instance through the automations you create with emulated Roku as the trigger. +Using a proxy with whitelist for IP addresses is recommended. (set `advertise_ip` to the proxy's ip or DNS name) +

+ +## {% linkable_title Configuration %} + +The component is configurable through the frontend. (**Configuration** -> **Integrations** -> **Emulated Roku**) + +If you wish to configure advanced options, you can add the following entry in `configuration.yaml`. + +```yaml +# Example configuration.yaml entry +emulated_roku: + servers: + - name: Home Assistant + listen_port: 8060 +``` + +{% configuration %} +name: + description: Name of the Roku that will be displayed as the serial number in Harmony. + required: true + type: string +listen_port: + description: The port the Roku API will run on. This can be any free port on your system. + required: true + type: integer +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 +advertise_ip: + description: If you need to override the IP address or DNS name used for UPnP discovery. (For example, using network isolation in Docker or using a proxy) + required: false + type: string +advertise_port: + description: If you need to 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). The default is true, which will work in most situations. In special circumstances, like running in a FreeBSD or FreeNAS jail, you may need to disable this. + required: false + type: boolean + default: true +{% endconfiguration %} + +After starting up, you can check if the emulated Roku is reachable at the specified ports on your Home Assistant instance (eg.: `http://192.168.1.101:8060/`). + +## {% linkable_title Events %} + +### {% linkable_title Event `roku_command` %} + +All Roku commands are sent as `roku_command` events. + +Field | Description +----- | ----------- +`source_name` | Name of the emulated Roku instance that sent the event. Only required when using multiple instances to filter event sources. +`type` | The type of the event that was called on the API. +`key` | the code of the pressed key when the command `type` is `keypress`, `keyup` or `keydown`. +`app_id` | the id of the app that was launched when command `type` is `launch`. + +The available keys are listed here: +[Roku key codes](https://sdkdocs.roku.com/display/sdkdoc/External+Control+API#ExternalControlAPI-KeypressKeyValues) + +## {% linkable_title Automations %} + +The following is an example implementation of an automation: +```yaml +# Example automation +- id: amp_volume_up + alias: Increase amplifier volume + trigger: + - platform: event + event_type: roku_command + event_data: + source_name: Home Assistant + type: keypress + key: Fwd + action: + - service: media_player.volume_up + entity_id: media_player.amplifier +``` + +## {% linkable_title Troubleshooting %} + +If you change your advertised IP or ports, you will have to re-add the emulated Roku in your app. +When using Harmony, the app should auto-discover any changes via UPnP discovery (if `name` is unchanged) once it detects that the device is unreachable. +Alternatively, you can trigger the 'Fix' page by pressing a button on the unreachable device's remote in the app and wait ~10 seconds, then click 'Fix it'. + +Known limitations: +* Some Android remotes send key up/down events instead of key presses. +* Functionality other than key presses and app launches are not implemented yet. +* App ids are limited between 1-10. (The emulated API reports 10 dummy apps) +* Harmony uses UPnP discovery (UPnP is not needed after pairing), which might not work in Docker. You can: + * Change Docker to host networking temporarily, then revert after pairing. + * Run the `advertise.py` helper script from the emulated_roku library directly somewhere else and point it to the emulated Roku API. +* Harmony cannot launch apps as it uses IR instead of the WiFi API and will not display the custom dummy app list. +* Home control buttons cannot be assigned to emulated Roku on the Harmony Hub Companion remote as they are limited to Hue (and possibly other APIs) within Harmony. +* Harmony will not set the name of the added emulated Roku device to the specified `name`. From bb694590ae0de9a36fea439bcda08e874b003ba0 Mon Sep 17 00:00:00 2001 From: Sebastian Muszynski Date: Fri, 11 Jan 2019 19:45:05 +0100 Subject: [PATCH 12/57] Support next generation of the Xiaomi Mi Smart Plug (chuangmi.plug.m3) (#8133) --- source/_components/switch.xiaomi_miio.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/switch.xiaomi_miio.markdown b/source/_components/switch.xiaomi_miio.markdown index efe0e9c89fd..eae1e1e8715 100644 --- a/source/_components/switch.xiaomi_miio.markdown +++ b/source/_components/switch.xiaomi_miio.markdown @@ -21,7 +21,7 @@ Please follow the instructions on [Retrieving the Access Token](/components/vacu ### Xiaomi Smart WiFi Socket -Supported models: `chuangmi.plug.m1`, `chuangmi.plug.v2`, `chuangmi.plug.hmi205` +Supported models: `chuangmi.plug.m1`, `chuangmi.plug.m3`, `chuangmi.plug.v2`, `chuangmi.plug.hmi205` * Power (on, off) * Attributes @@ -78,7 +78,7 @@ name: type: string default: Xiaomi Miio Switch model: - description: The model of your miio device. Valid values are `chuangmi.plug.v1`, `qmi.powerstrip.v1`, `zimi.powerstrip.v2`, `chuangmi.plug.m1`, `chuangmi.plug.v2`, `chuangmi.plug.v3` and `chuangmi.plug.hmi205`. This setting can be used to bypass the device model detection and is recommended if your device isn't always available. + description: The model of your miio device. Valid values are `chuangmi.plug.v1`, `qmi.powerstrip.v1`, `zimi.powerstrip.v2`, `chuangmi.plug.m1`, `chuangmi.plug.m3`, `chuangmi.plug.v2`, `chuangmi.plug.v3` and `chuangmi.plug.hmi205`. This setting can be used to bypass the device model detection and is recommended if your device isn't always available. required: false type: string {% endconfiguration %} From aaaa7114678f91ee3f008e81e4eaf27530edf902 Mon Sep 17 00:00:00 2001 From: Matt Snyder Date: Fri, 11 Jan 2019 15:07:25 -0600 Subject: [PATCH 13/57] Doorbird Relay Events (#7648) * Update documentation for relay events. * Add config example. * :pencil2: Tweak --- source/_components/doorbird.markdown | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/source/_components/doorbird.markdown b/source/_components/doorbird.markdown index b8b3050ae9e..610549f2966 100644 --- a/source/_components/doorbird.markdown +++ b/source/_components/doorbird.markdown @@ -72,6 +72,9 @@ devices: description: Monitor doorbell events. motion: description: Monitor motion events (Motion monitoring must be enabled on the doorstation via DoorBird app). + relay: + description: Monitor relay events. This event is fired even if a relay is not physically connected to the door station. Can be used to lock/unlock any smart lock present in Home Assistant via the Doorbird app. + {% endconfiguration %} The configuration above is also used by the following platforms: @@ -99,11 +102,12 @@ doorbird: monitored_conditions: - doorbell - motion + - relay ``` -## {% linkable_title Motion and Doorbell Events %} +## {% linkable_title Events %} -Home Assistant will fire an event any time a `monitored_condition` happens on a doorstation. Event names are created using the format `doorbird_{station}_{event}` (Examples: `doorbird_side_entry_button`, `doorbird_side_entry_motion`). You can verify the assigned event names in the Home Assistant log file. +Home Assistant will fire an event any time a `monitored_condition` happens on a doorstation. Event names are created using the format `doorbird_{station}_{event}` (Examples: `doorbird_side_entry_button`, `doorbird_side_entry_motion`). You can verify the assigned event names in the Available Events list on the Events developer view.

Home Assistant will register the monitored conditions with the device as schedule entries that correspond to favorites on startup. If you remove monitored conditions from your configuration, Home Assistant will attempt to remove these items from the device. However, in some cases, such as if the IP address of the machine running Home Assistant changes or if the device is renamed in your configuration, this will not work correctly and some data will be left in device storage. From 354cd73cae5810a82b6d0222ab62678ee92d30a6 Mon Sep 17 00:00:00 2001 From: pbalogh77 Date: Sat, 12 Jan 2019 00:30:19 +0100 Subject: [PATCH 14/57] Updated based on changes (#8140) * Updated based on changes Documentation change based on https://github.com/home-assistant/home-assistant/pull/19705 * Update fibaro.markdown --- source/_components/fibaro.markdown | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/source/_components/fibaro.markdown b/source/_components/fibaro.markdown index 1e503e324d9..aff4ccdc416 100644 --- a/source/_components/fibaro.markdown +++ b/source/_components/fibaro.markdown @@ -2,14 +2,14 @@ layout: page title: "Fibaro" description: "Instructions on how to setup Fibaro Z-Wave hubs (HCL and HC2) and configure devices within Home Assistant." -date: 2018-11-14 20:04 +date: 2019-01-10 20:04 sidebar: true comments: false sharing: true footer: true logo: fibaro.png ha_category: Hub -ha_release: 0.83 +ha_release: "0.83" ha_iot_class: "Local Push" redirect_from: - /components/scene.fibaro/ @@ -25,12 +25,25 @@ To use Fibaro devices in your installation, add the following to your `configura ```yaml fibaro: - url: http://192.168.1.161/api/ - username: your_username - password: your_password + gateways: + - url: http://192.168.1.161/api/ + username: your_username + password: your_password + device_config: + light_device_name_123: + color: false + white_value: false + reset_color: true + binary_device_name_123: + device_class: "garage_door" + icon: mdi:open ``` {% configuration %} +gateways: + description: List of gateway configurations. + requires: true + type: list url: description: The URL for your Fibaro HomeCenter device. required: true @@ -48,6 +61,11 @@ plugins: required: false type: bool default: false +device_config: + description: Lists device specific parameter or behaviour overrides. + required: false + type: list + default: None {% endconfiguration %}

From 25459c903dab7a0412a1e568c0777d88ff47db9b Mon Sep 17 00:00:00 2001 From: Austin Drummond Date: Fri, 11 Jan 2019 21:50:37 -0500 Subject: [PATCH 15/57] Add HomeKit Controller Lock (#8097) --- source/_components/homekit_controller.markdown | 1 + .../_components/lock.homekit_controller.markdown | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 source/_components/lock.homekit_controller.markdown diff --git a/source/_components/homekit_controller.markdown b/source/_components/homekit_controller.markdown index daa9e79b71e..608bb13a0f2 100644 --- a/source/_components/homekit_controller.markdown +++ b/source/_components/homekit_controller.markdown @@ -24,6 +24,7 @@ There is currently support for the following device types within Home Assistant: - [Climate](/components/climate.homekit_controller/) - [Light](/components/light.homekit_controller/) +- [Lock](/components/lock.homekit_controller/) - [Switch](/components/switch.homekit_controller/) The component will be automatically configured if the [`discovery:`](/components/discovery/) component is enabled and an enable entry added for HomeKit: diff --git a/source/_components/lock.homekit_controller.markdown b/source/_components/lock.homekit_controller.markdown new file mode 100644 index 00000000000..399acb61c73 --- /dev/null +++ b/source/_components/lock.homekit_controller.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "HomeKit Lock" +description: "Instructions how to setup HomeKit locks within Home Assistant." +date: 2019-1-8 7:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: apple-homekit.png +ha_category: Lock +ha_iot_class: "Local Polling" +ha_release: 0.86 +--- + +To get your HomeKit lock working with Home Assistant, follow the instructions for the general [HomeKit controller component](/components/homekit_controller/). From 1102939bbd179b0695a4b3981f78b528b5651bf3 Mon Sep 17 00:00:00 2001 From: Volker Thiel Date: Sat, 12 Jan 2019 17:55:22 +0100 Subject: [PATCH 16/57] Wrong topic when deleting sensor (#8149) Deletion of a discovered sensor is done through the config topic --- source/_docs/mqtt/discovery.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_docs/mqtt/discovery.markdown b/source/_docs/mqtt/discovery.markdown index cf3d015bb32..88bf2b980ae 100644 --- a/source/_docs/mqtt/discovery.markdown +++ b/source/_docs/mqtt/discovery.markdown @@ -213,7 +213,7 @@ $ mosquitto_pub -h 127.0.0.1 -p 1883 -t "homeassistant/binary_sensor/garden/stat Delete the sensor by sending an empty message. ```bash -$ mosquitto_pub -h 127.0.0.1 -p 1883 -t "homeassistant/binary_sensor/garden/state" -m '' +$ mosquitto_pub -h 127.0.0.1 -p 1883 -t "homeassistant/binary_sensor/garden/config" -m '' ``` Setting up a switch is similar but requires a `command_topic` as mentioned in the [MQTT switch documentation](/components/switch.mqtt/). From 2ba42e7d94d223cd54a74bbe9e16b3edd26f0e6a Mon Sep 17 00:00:00 2001 From: ehendrix23 Date: Sat, 12 Jan 2019 11:04:41 -0700 Subject: [PATCH 17/57] Add description for harmony change_channel (#7984) * Added description for change_channel Added the description for change_channel service. * Changes based on review of PR Change to service name and making entity_id required. --- source/_components/remote.harmony.markdown | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/source/_components/remote.harmony.markdown b/source/_components/remote.harmony.markdown index 02a098eb5db..b7a2ae8387e 100644 --- a/source/_components/remote.harmony.markdown +++ b/source/_components/remote.harmony.markdown @@ -182,6 +182,24 @@ data: delay_secs: 0.6 ``` +### {% linkable_title Service `remote.harmony_change_channel` %} + +Sends the change channel command to the Harmony HUB + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ----------- | +| `entity_id` | no | Only act on a specific remote, else target all. +| `channel` | no | Channel number to change to + +A typical service call for changing the channel would be:: + +```yaml +service: remote.change_channel +data: + entity_id: remote.tv_room + channel: 200 +``` + ### {% linkable_title Service `remote.harmony_sync` %} Force synchronization between the Harmony device and the Harmony cloud. From 859ed039c5e755b11eb524ef8e9877b2e2d26730 Mon Sep 17 00:00:00 2001 From: Rohan Kapoor Date: Sun, 13 Jan 2019 01:07:13 -0800 Subject: [PATCH 18/57] Documentation update for splitting locative into a component with device tracker platform (#8150) --- .../device_tracker.locative.markdown | 20 ++-------- source/_components/locative.md | 40 +++++++++++++++++++ 2 files changed, 43 insertions(+), 17 deletions(-) create mode 100644 source/_components/locative.md diff --git a/source/_components/device_tracker.locative.markdown b/source/_components/device_tracker.locative.markdown index 0d7b04f075e..2eb43bd3a6f 100644 --- a/source/_components/device_tracker.locative.markdown +++ b/source/_components/device_tracker.locative.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: locative.png ha_category: Presence Detection +ha_iot_class: "Cloud Push" ---

@@ -17,23 +18,8 @@ Locative is no longer under active development. See https://blog.locative.io/bye This platform allows you to detect presence using [Locative](https://my.locative.io/). Locative is an open source app for [iOS](https://github.com/LocativeHQ/ios-app) and [Android](https://github.com/LocativeHQ/Locative-Android) that allows users to set up a `GET` or `POST` request when a geofence is entered or exited. This can be configured with Home Assistant to update your location. -To integrate Locative in Home Assistant, add the following section to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -device_tracker: - - platform: locative -``` - -Install on your smartphone: - -- [Android](https://play.google.com/store/apps/details?id=io.locative.app) -- [iOS](https://itunes.apple.com/us/app/geofancy/id725198453) - -To configure Locative, you must set up the app to send a `GET` request to your Home Assistant server at `http:///api/locative`. Make sure to include the API password if you have configured a password in Home Assistant (add `?api_password=` to the end of the URL). When you enter or exit a geofence, Locative will send a `GET` request to that URL, updating Home Assistant. You are not able to specify a device name in Locative. Instead, you will need to look in your known_devices.yaml file for a new device that Locative will have created on it's first `GET`. If you had been or are using Owntracks as well, you will need to update the device name used in the Owntracks setup with the name that Locative generated. - -

- +

+You must have the [Locative component](/components/locative/) configured to use this device tracker.

When you enter a geofence, your location name in Home Assistant will be set to the name of the geofence in Locative. When you exit a geofence, your location name in Home Assistant will be set to "not home". diff --git a/source/_components/locative.md b/source/_components/locative.md new file mode 100644 index 00000000000..cf44c4ee3dc --- /dev/null +++ b/source/_components/locative.md @@ -0,0 +1,40 @@ +--- +layout: page +title: "Locative" +description: "Instructions on how to use Locative to track devices in Home Assistant." +date: 2015-10-13 19:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: locative.png +ha_category: Presence Detection +ha_release: 0.86 +ha_iot_class: "Cloud Push" +--- + +

+Locative is no longer under active development. See https://blog.locative.io/bye-everyone-df01871fe949 +

+ +This platform allows you to detect presence using [Locative](https://my.locative.io/). Locative is an open source app for [iOS](https://github.com/LocativeHQ/ios-app) and [Android](https://github.com/LocativeHQ/Locative-Android) that allows users to set up a `GET` or `POST` request when a geofence is entered or exited. This can be configured with Home Assistant to update your location. + +To integrate Locative in Home Assistant, add the following section to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +locative: +``` + +Install on your smartphone: + +- [Android](https://play.google.com/store/apps/details?id=io.locative.app) +- [iOS](https://itunes.apple.com/us/app/geofancy/id725198453) + +To configure Locative, you must set up the app to send a `GET` or `POST` request to your Home Assistant server at `http:///api/locative`. Make sure to include the API password if you have configured a password in Home Assistant (add `?api_password=` to the end of the URL). When you enter or exit a geofence, Locative will send the appropriate request to that URL, updating Home Assistant. You are not able to specify a device name in Locative. Instead, you will need to look in your known_devices.yaml file for a new device that Locative will have created on it's first `GET`. If you had been or are using Owntracks as well, you will need to update the device name used in the Owntracks setup with the name that Locative generated. + +

+ +

+ +When you enter a geofence, your location name in Home Assistant will be set to the name of the geofence in Locative. When you exit a geofence, your location name in Home Assistant will be set to "not home". From cc21be5c93440beaffaecaa0ae8862b026dd0811 Mon Sep 17 00:00:00 2001 From: larsvinc Date: Sun, 13 Jan 2019 11:48:47 +0100 Subject: [PATCH 19/57] Added spot clean in accordance with the pull request for that functionality: (#8093) https://github.com/home-assistant/home-assistant/pull/19857 --- source/_components/vacuum.neato.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/vacuum.neato.markdown b/source/_components/vacuum.neato.markdown index 9ed678cfb61..3b38389171b 100644 --- a/source/_components/vacuum.neato.markdown +++ b/source/_components/vacuum.neato.markdown @@ -32,3 +32,4 @@ Currently supported services are: - `stop` - `return_to_base` - `locate` +- `spot_clean` From 634685878fd7b5be7bff38ff5fe20d6781dabb9f Mon Sep 17 00:00:00 2001 From: Austin Drummond Date: Sun, 13 Jan 2019 13:12:15 -0500 Subject: [PATCH 20/57] Add support for HomeKit Controller covers (#8096) --- .../cover.homekit_controller.markdown | 16 ++++++++++++++++ source/_components/homekit_controller.markdown | 1 + 2 files changed, 17 insertions(+) create mode 100644 source/_components/cover.homekit_controller.markdown diff --git a/source/_components/cover.homekit_controller.markdown b/source/_components/cover.homekit_controller.markdown new file mode 100644 index 00000000000..d641ac746a9 --- /dev/null +++ b/source/_components/cover.homekit_controller.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "HomeKit Cover" +description: "Instructions how to setup HomeKit covers within Home Assistant." +date: 2019-1-8 5:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: apple-homekit.png +ha_category: Cover +ha_iot_class: "Local Polling" +ha_release: 0.86 +--- + +To get your HomeKit garage door openers, windows, or window coverings working with Home Assistant, follow the instructions for the general [HomeKit controller component](/components/homekit_controller/). diff --git a/source/_components/homekit_controller.markdown b/source/_components/homekit_controller.markdown index 608bb13a0f2..13aac56efa0 100644 --- a/source/_components/homekit_controller.markdown +++ b/source/_components/homekit_controller.markdown @@ -23,6 +23,7 @@ ha_iot_class: "Local Polling" There is currently support for the following device types within Home Assistant: - [Climate](/components/climate.homekit_controller/) +- [Cover](/components/cover.homekit_controller/) - [Light](/components/light.homekit_controller/) - [Lock](/components/lock.homekit_controller/) - [Switch](/components/switch.homekit_controller/) From 7a52e99b15cdff32ef4307e192930d9811054863 Mon Sep 17 00:00:00 2001 From: patatman Date: Sun, 13 Jan 2019 21:24:21 +0100 Subject: [PATCH 21/57] Adding my config to the Cookbook (#8159) --- .../configuration_yaml_by_patatman.markdown | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 source/_cookbook/configuration_yaml_by_patatman.markdown diff --git a/source/_cookbook/configuration_yaml_by_patatman.markdown b/source/_cookbook/configuration_yaml_by_patatman.markdown new file mode 100644 index 00000000000..1b45e974202 --- /dev/null +++ b/source/_cookbook/configuration_yaml_by_patatman.markdown @@ -0,0 +1,12 @@ +--- +layout: page +title: "Configuration.yaml by patatman" +description: "" +date: 2019-01-13 21:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Example configuration.yaml +ha_external_link: https://github.com/patatman/patatman-homeassistant-config +--- From 56977bb35dc0aa6d88239efdd79831e1d9eebed6 Mon Sep 17 00:00:00 2001 From: Rohan Kapoor Date: Sun, 13 Jan 2019 17:15:26 -0800 Subject: [PATCH 22/57] Documentation update for splitting gpslogger into a component with a device tracker platform (#8152) * Documentation update for splitting gpslogger into a component with a device tracker platform * Remove redundant line from the device_tracker * Fix stale copy/paste --- .../device_tracker.gpslogger.markdown | 63 +--------------- source/_components/gpslogger.md | 75 +++++++++++++++++++ 2 files changed, 79 insertions(+), 59 deletions(-) create mode 100644 source/_components/gpslogger.md diff --git a/source/_components/device_tracker.gpslogger.markdown b/source/_components/device_tracker.gpslogger.markdown index c512698bedf..05cf381f135 100644 --- a/source/_components/device_tracker.gpslogger.markdown +++ b/source/_components/device_tracker.gpslogger.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "GPSLogger" +title: "GPSLogger Device Tracker" description: "Instructions on how to use GPSLogger to track devices in Home Assistant." date: 2016-11-25 15:00 sidebar: true @@ -11,63 +11,8 @@ ha_category: Presence Detection ha_release: 0.34 --- -The `gpslogger` device tracker platform allows you to detect presence using [GPSLogger](http://code.mendhak.com/gpslogger/). GPSLogger is an open source app for [Android](https://play.google.com/store/apps/details?id=com.mendhak.gpslogger) that allows users to set up a `GET` request to update GPS coordinates. This can be configured with Home Assistant to update your location. +The `gpslogger` device tracker platform allows you to detect presence using [GPSLogger](http://code.mendhak.com/gpslogger/). -## {% linkable_title Configuration %} - -GPSLogger uses long-lived access tokens for authentication. These are setup [under your profile](/docs/authentication/#your-account-profile) and configured in the GPSLogger application on your smartphone as explained below. - -```yaml -# Example configuration.yaml entry -device_tracker: - - platform: gpslogger -``` - -## {% linkable_title Setup on your smartphone %} - -Install [GPSLogger for Android](https://play.google.com/store/apps/details?id=com.mendhak.gpslogger) on your device. - -After the launch, go to **General Options**. Enable **Start on bootup** and **Start on app launch**. - -

- - GPSLogger Settings +

+You must have the [GPSLogger component](/components/gpslogger/) configured to use this device tracker.

- -Go to **Logging details** and disable **Log to GPX**, **Log to KML** and **Log to NMEA**. Enable **Log to custom URL**. - -

- - Logging Details -

- -Right after enabling, the app will take you to the **Log to custom URL** settings. - -

- - Log to custom URL details -

- -The relevant endpoint is: `/api/gpslogger` - -```text -https://YOUR.DNS.HOSTNAME:PORT/api/gpslogger?latitude=%LAT&longitude=%LON&device=%SER&accuracy=%ACC&battery=%BATT&speed=%SPD&direction=%DIR&altitude=%ALT&provider=%PROV&activity=%ACT -``` - -Add the above URL after you modified it with your settings into the **URL** field. Remove the line breaks as they are only there to make the URL readable here. - -- It's HIGHLY recommended to use SSL/TLS. -- Use the domain that Home Assistant is available on the internet (or the public IP address if you have a static IP address). This can be a local IP address if you are using an always on VPN from your mobile device to your home network. -- Only remove `PORT` if your Home Assistant instance is using port 443. Otherwise set it to the port you're using. -- For Home Assistant only the above URL, as written, will work - do not add, remove, or change the order of any of the parameters. -- Add `Authorization: Bearer LLAT` to the HTTP Headers setting (replace `LLAT` with your Long Lived Access Token). -- You can change the name of your device name by replacing `&device=%SER` with `&device=DEVICE_NAME`. - -If your battery drains too fast then you can tune the performance of GPSLogger under **Performance** -> **Location providers** - -

- - Performance -

- -A request can be forced from the app to test if everything is working fine. A successful request will update the `known_devices.yaml` file with the device's serial number. diff --git a/source/_components/gpslogger.md b/source/_components/gpslogger.md new file mode 100644 index 00000000000..62cca2a3618 --- /dev/null +++ b/source/_components/gpslogger.md @@ -0,0 +1,75 @@ +--- +layout: page +title: "GPSLogger" +description: "Instructions on how to use GPSLogger to track devices in Home Assistant." +date: 2016-11-25 15:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Presence Detection +ha_release: 0.86 +ha_iot_class: "Cloud Push" +--- + +This component sets up integration with [GPSLogger](http://code.mendhak.com/gpslogger/). GPSLogger is an open source app for [Android](https://play.google.com/store/apps/details?id=com.mendhak.gpslogger) that allows users to set up a `GET` request to update GPS coordinates. This can be configured with Home Assistant to update your location. + +Enabling this component will automatically enable the [GPSLogger Device Tracker](/components/device_tracker.gpslogger/). + +## {% linkable_title Configuration %} + +GPSLogger uses long-lived access tokens for authentication. These are setup [under your profile](/docs/authentication/#your-account-profile) and configured in the GPSLogger application on your smartphone as explained below. + +```yaml +# Example configuration.yaml entry +gpslogger: +``` + +## {% linkable_title Setup on your smartphone %} + +Install [GPSLogger for Android](https://play.google.com/store/apps/details?id=com.mendhak.gpslogger) on your device. + +After the launch, go to **General Options**. Enable **Start on bootup** and **Start on app launch**. + +

+ + GPSLogger Settings +

+ +Go to **Logging details** and disable **Log to GPX**, **Log to KML** and **Log to NMEA**. Enable **Log to custom URL**. + +

+ + Logging Details +

+ +Right after enabling, the app will take you to the **Log to custom URL** settings. + +

+ + Log to custom URL details +

+ +The relevant endpoint is: `/api/gpslogger` + +```text +https://YOUR.DNS.HOSTNAME:PORT/api/gpslogger?latitude=%LAT&longitude=%LON&device=%SER&accuracy=%ACC&battery=%BATT&speed=%SPD&direction=%DIR&altitude=%ALT&provider=%PROV&activity=%ACT +``` + +Add the above URL after you modified it with your settings into the **URL** field. Remove the line breaks as they are only there to make the URL readable here. + +- It's HIGHLY recommended to use SSL/TLS. +- Use the domain that Home Assistant is available on the internet (or the public IP address if you have a static IP address). This can be a local IP address if you are using an always on VPN from your mobile device to your home network. +- Only remove `PORT` if your Home Assistant instance is using port 443. Otherwise set it to the port you're using. +- For Home Assistant only the above URL, as written, will work - do not add, remove, or change the order of any of the parameters. +- Add `Authorization: Bearer LLAT` to the HTTP Headers setting (replace `LLAT` with your Long Lived Access Token). +- You can change the name of your device name by replacing `&device=%SER` with `&device=DEVICE_NAME`. + +If your battery drains too fast then you can tune the performance of GPSLogger under **Performance** -> **Location providers** + +

+ + Performance +

+ +A request can be forced from the app to test if everything is working fine. A successful request will update the `known_devices.yaml` file with the device's serial number. From 99cac9912a09de643ff996df38adeeedb3bd978b Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Mon, 14 Jan 2019 05:15:03 -0700 Subject: [PATCH 23/57] Add new info about OpenUV API key usage (#8127) * ness_alarm: Address config error (#8126) * Add new info about OpenUV API key usage * Updates for service calls --- source/_components/openuv.markdown | 78 +++++++++++++++++++++++++----- 1 file changed, 65 insertions(+), 13 deletions(-) diff --git a/source/_components/openuv.markdown b/source/_components/openuv.markdown index 4366222a34b..10ef2e1a6ac 100644 --- a/source/_components/openuv.markdown +++ b/source/_components/openuv.markdown @@ -13,19 +13,26 @@ ha_release: 0.76 ha_iot_class: "Cloud Polling" --- -The `openuv` component displays UV and Ozone data from [openuv.io](http://openuv.io). +The `openuv` component displays UV and Ozone data from +[openuv.io](http://openuv.io). ## {% linkable_title Generating an API Key %} -To generate an API key, [simply log in to the OpenUV website](https://www.openuv.io/auth/google). +To generate an API key, +[simply log in to the OpenUV website](https://www.openuv.io/auth/google).

-The "Limited" plan (which is what new users are given by default) is limited to 500 API requests per day. In order to leave a buffer, the `openuv` component queries the API every 30 minutes by default. This value can be modifed (via the `scan_interval` key), but please note that over-running the API will require you to upgrade to a paid plan (and may disable your access in the meantime). +Beginning February 1, 2019, the "Limited" plan (which is what new users are +given by default) is limited to 50 API requests per day. Because different +API plans and locations will have different requirements, the `openuv` +component does not automatically query the API for new data after it initially +loads. To request new data, the `update_data` service may be used.

## {% linkable_title Configuration %} -To retrieve data from OpenUV, add the following to your `configuration.yaml` file: +To retrieve data from OpenUV, add the following to your `configuration.yaml` +file: ```yaml openuv: @@ -37,11 +44,6 @@ api_key: description: The OpenUV API key. required: true type: string -scan_interval: - description: the frequency (in seconds) between data updates. - required: false - type: integer - default: 1800 binary_sensors: description: The binary sensor-related configuration options. required: false @@ -88,11 +90,15 @@ sensors: description: The approximate exposure time for skin type VI. {% endconfiguration %} -The approximate number of minutes of a particular skin type can be exposed to the sun before burning/tanning starts is based on the [Fitzpatrick scale](https://en.wikipedia.org/wiki/Fitzpatrick_scale). +The approximate number of minutes of a particular skin type can be exposed to +the sun before burning/tanning starts is based on the +[Fitzpatrick scale](https://en.wikipedia.org/wiki/Fitzpatrick_scale). -## {% linkable_title Full example %} +## {% linkable_title Full Configuration Example %} -To configure additional functionality, add configuration options beneath a `binary_sensor` and/or `sensor` key within the `openuv` section of the `configuration.yaml` file as below: +To configure additional functionality, add configuration options beneath a +`binary_sensor` and/or `sensor` key within the `openuv` section of the +`configuration.yaml` file as below: ```yaml openuv: @@ -115,5 +121,51 @@ openuv: ```

-The above guidelines constitute estimates and are intended to help informed decision making. They should not replace analysis, advice or diagnosis from a trained medical professional. +The above guidelines constitute estimates and are intended to help informed +decision making. They should not replace analysis, advice or diagnosis from a +trained medical professional.

+ +## {% linkable_title Services %} + +### {% linkable_title `openuv.update_data` %} + +Perform an on-demand update of OpenUV data. + +## {% linkable_title Examples of Updating Data %} + +One method to retrieve data every 30 minutes and still leave plenty of API key +usage is to only retrieve data during the daytime: + +```yaml +automation: + - alias: Update OpenUV every 30 minutes during the daytime + trigger: + platform: time + minutes: "/30" + seconds: 00 + condition: + condition: and + conditions: + - condition: sun + after: sunrise + - condition: sun + before: sunset + action: + service: openuv.update_data +``` + +Another method (useful when monitoring locations other than the HASS latitude +and longitude, in locations where there is a large amount of sunlight per day, +etc.) might be to simply query the API less often: + +```yaml +automation: + - alias: Update OpenUV every hour (24 of 50 calls per day) + trigger: + platform: time + minutes: "/60" + seconds: 00 + action: + service: openuv.update_data +``` From 350004c3cec12493b81ff7221a97cdb8ec2530bd Mon Sep 17 00:00:00 2001 From: Spencer Oberstadt Date: Mon, 14 Jan 2019 16:26:24 -0500 Subject: [PATCH 24/57] Adding documentation for Roku hub and remote (#6944) * Adding documentation for Roku hub and remote * revert date change * Fix year * PR feedback fixes --- source/_components/media_player.roku.markdown | 19 +----- source/_components/remote.roku.markdown | 60 +++++++++++++++++++ source/_components/roku.markdown | 37 ++++++++++++ 3 files changed, 99 insertions(+), 17 deletions(-) create mode 100644 source/_components/remote.roku.markdown create mode 100644 source/_components/roku.markdown diff --git a/source/_components/media_player.roku.markdown b/source/_components/media_player.roku.markdown index d301898db11..af72795a3a7 100644 --- a/source/_components/media_player.roku.markdown +++ b/source/_components/media_player.roku.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "Roku" +title: "Roku Media Player" description: "Instructions on how to integrate Roku into Home Assistant." date: 2016-05-16 20:0+0000 sidebar: true @@ -13,19 +13,4 @@ ha_release: "0.20" ha_iot_class: "Local Polling" --- -The [Roku](http://www.roku.com/) media players will be automatically discovered if you enable the [discovery component](/components/discovery/). - -The `roku` media player platform can also be forced to load by adding the following lines to your `configuration.yaml`: - -```yaml -# Example configuration.yaml entry -media_player: - - platform: roku -``` - -{% configuration %} -host: - description: The IP address or the hostname of the device. Use only if you don't want to scan for devices. - required: false - type: string -{% endconfiguration %} +To set up the `roku` media player platform, please follow the instructions on the [Roku Component page](/components/roku/). diff --git a/source/_components/remote.roku.markdown b/source/_components/remote.roku.markdown new file mode 100644 index 00000000000..38a31283611 --- /dev/null +++ b/source/_components/remote.roku.markdown @@ -0,0 +1,60 @@ +--- +layout: page +title: "Roku Remote" +description: "Instructions on how to integrate Roku into Home Assistant." +date: 2018-10-17 20:0+0000 +sidebar: true +comments: false +sharing: true +footer: true +logo: roku.png +ha_category: Remote +ha_release: 0.86 +ha_iot_class: "Local Polling" +--- + +The `roku` remote platform allows you to send remote control buttons to a Roku device. It is automatically set up when a Roku is configured; please see [Roku Component page](/components/roku/) for configuration details. + +At the moment, the following buttons are supported: + +- back +- backspace +- channel_down +- channel_up +- down +- enter +- find_remote +- forward +- home +- info +- input_av1 +- input_hdmi1 +- input_hdmi2 +- input_hdmi3 +- input_hdmi4 +- input_tuner +- left +- literal +- play +- power +- replay +- reverse +- right +- search +- select +- up +- volume_down +- volume_mute +- volume_up + +A typical service call for pressing several buttons looks like this. + +```yaml +service: remote.send_command +data: + entity_id: remote.roku + command: + - left + - left + - select +``` \ No newline at end of file diff --git a/source/_components/roku.markdown b/source/_components/roku.markdown new file mode 100644 index 00000000000..b3d7aacb057 --- /dev/null +++ b/source/_components/roku.markdown @@ -0,0 +1,37 @@ +--- +layout: page +title: "Roku" +description: "Instructions how to integrate Roku devices into Home Assistant." +date: 2018-10-17 20:47 +sidebar: true +comments: false +sharing: true +footer: true +logo: roku.png +ha_category: Hub +ha_iot_class: "Local Polling" +ha_release: 0.86 +--- + +The [Roku](http://www.roku.com/) component allows integration of Roku [media players](/components/media_player.roku) and [remotes](/components/remote.roku/) which will be automatically discovered if you enable the [discovery component](/components/discovery/). + +The `roku` component can also be forced to load by adding the following lines to your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +roku: + - host: 192.168.1.100 +``` + +{% configuration %} +host: + description: Set the IP address of the Roku device. Use only if you don't want to autodiscover devices. + required: false + type: string +{% endconfiguration %} + +## {% linkable_title Services %} + +### {% linkable_title Service `roku_scan` %} + +Scans the local network for Rokus. All found devices are presented as a persistent notification. From aedc4899785b4d35cf20b60b68656c47e0dec990 Mon Sep 17 00:00:00 2001 From: Malte Franken Date: Tue, 15 Jan 2019 08:58:55 +1100 Subject: [PATCH 25/57] Additional information for Geolocation platforms (#8113) * fixed wrong type * added missing source to the attributes table * added state attributes table * radius default corrected to float value --- .../geo_location.geo_json_events.markdown | 15 +++++++++++++-- ..._location.nsw_rural_fire_service_feed.markdown | 3 ++- .../geo_location.usgs_earthquakes_feed.markdown | 2 +- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/source/_components/geo_location.geo_json_events.markdown b/source/_components/geo_location.geo_json_events.markdown index f9a347490c4..f17703b0f99 100644 --- a/source/_components/geo_location.geo_json_events.markdown +++ b/source/_components/geo_location.geo_json_events.markdown @@ -39,8 +39,8 @@ url: radius: description: The distance in kilometers around the Home Assistant's coordinates in which events are considered. required: false - type: string - default: 20km + type: float + default: 20.0 latitude: description: Latitude of the coordinates around which events are considered. required: false @@ -53,6 +53,17 @@ longitude: default: Longitude defined in your `configuration.yaml` {% endconfiguration %} +## {% linkable_title State Attributes %} + +The following state attributes are available for each entity in addition to the standard ones: + +| Attribute | Description | +|-------------|-------------| +| latitude | Latitude of the event. | +| longitude | Longitude of the event. | +| source | `geo_json_events` to be used in conjunction with `geo_location` automation trigger. | +| external_id | The external ID used in the feed to identify the event in the feed. | + ## {% linkable_title Advanced Configuration Example %} When integrating several GeoJSON feeds, it may be useful to distinguish the entities of different feeds. The easiest way to do that is by defining an [`entity_namespace`](/docs/configuration/platform_options/#entity-namespace/) for each platform which will prefix each entity ID with the defined value. diff --git a/source/_components/geo_location.nsw_rural_fire_service_feed.markdown b/source/_components/geo_location.nsw_rural_fire_service_feed.markdown index c576a6919d7..6212e4873ee 100644 --- a/source/_components/geo_location.nsw_rural_fire_service_feed.markdown +++ b/source/_components/geo_location.nsw_rural_fire_service_feed.markdown @@ -44,7 +44,7 @@ radius: description: The distance in kilometers around Home Assistant's coordinates in which incidents are included. required: false type: float - default: 20km + default: 20.0 categories: description: List of incident category names found in the feed. Only incidents from the feed that match any of these categories are included. Valid categories are 'Emergency Warning', 'Watch and Act', 'Advice', 'Not Applicable'. required: false @@ -70,6 +70,7 @@ The following state attributes are available for each entity in addition to the |--------------------|-------------| | latitude | Latitude of the incident. | | longitude | Longitude of the incident. | +| source | `nsw_rural_fire_service_feed` to be used in conjunction with `geo_location` automation trigger. | | external_id | The external ID used in the feed to identify the incident in the feed. | | category | One of 'Emergency Warning', 'Watch and Act', 'Advice', 'Not Applicable'. | | location | Location details of where the incident takes place. | diff --git a/source/_components/geo_location.usgs_earthquakes_feed.markdown b/source/_components/geo_location.usgs_earthquakes_feed.markdown index b841fb4b47f..e853fbc6699 100644 --- a/source/_components/geo_location.usgs_earthquakes_feed.markdown +++ b/source/_components/geo_location.usgs_earthquakes_feed.markdown @@ -52,7 +52,7 @@ radius: description: The distance in kilometers around Home Assistant's coordinates in which seismic events are included. required: false type: float - default: 50 + default: 50.0 latitude: description: Latitude of the coordinates around which events are considered. required: false From 3a202ac3711b55faff2abeca6e5b1bfecba08450 Mon Sep 17 00:00:00 2001 From: kennedyshead Date: Mon, 14 Jan 2019 23:14:24 +0100 Subject: [PATCH 26/57] Make asuswrt sensor optional (#8032) * Only sensor setup is changed * Adding sensorrs config to component --- source/_components/asuswrt.markdown | 14 ++++++++++++++ source/_components/sensor.asuswrt.markdown | 4 +--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/source/_components/asuswrt.markdown b/source/_components/asuswrt.markdown index 486ec51086a..4a9b09e1cb5 100644 --- a/source/_components/asuswrt.markdown +++ b/source/_components/asuswrt.markdown @@ -63,6 +63,20 @@ require_ip: required: false type: boolean default: true +sensors: + description: List of enabled sensors + required: false + type: list + default: all (`upload`, `download`, `upload_speed`, `download_speed`) + keys: + "upload": + description: TX upload sensor + "download": + description: RX download sensor + "download_speed": + description: download mbit/s sensor + "upload_speed": + description: upload mbit/s sensor {% endconfiguration %}

diff --git a/source/_components/sensor.asuswrt.markdown b/source/_components/sensor.asuswrt.markdown index 8c091b166e2..50fc69e1a7a 100644 --- a/source/_components/sensor.asuswrt.markdown +++ b/source/_components/sensor.asuswrt.markdown @@ -13,8 +13,6 @@ ha_iot_class: "Local Polling" ha_release: 0.83 --- -The `asuswrt` platform allows you to get data from your [ASUSWRT](http://event.asus.com/2013/nw/ASUSWRT/) sensors from within Home Assistant. - -The sensor platform will be automatically configured if Asuswrt component is configured. +The `asuswrt` sensor platform allows you to get upload and download data from your [ASUSWRT](http://event.asus.com/2013/nw/ASUSWRT/) within Home Assistant. For more configuration information see the [Asuswrt component](/components/asuswrt/) documentation. From a3f2e701c013863492975f1ab618027ace3ff49d Mon Sep 17 00:00:00 2001 From: Johann Kellerman Date: Tue, 15 Jan 2019 00:19:05 +0200 Subject: [PATCH 27/57] Update sensor.sma.markdown (#8050) --- source/_components/sensor.sma.markdown | 50 +++++++++++++++++--------- 1 file changed, 34 insertions(+), 16 deletions(-) diff --git a/source/_components/sensor.sma.markdown b/source/_components/sensor.sma.markdown index 6365675c6e4..8ce932e4d38 100644 --- a/source/_components/sensor.sma.markdown +++ b/source/_components/sensor.sma.markdown @@ -29,7 +29,7 @@ sensor: password: YOUR_SMA_PASSWORD sensors: current_consumption: [total_consumption] - current_power: + pv_power: total_yield: ``` @@ -59,29 +59,47 @@ group: type: string sensors: description: A dictionary of sensors that will be added. The value of the dictionary can include a list of sensor names that will be used as attributes. - required: true + required: false + default: All sensors type: map keys: - current_power: - description: Current power (W). - current_consumption: - description: Power that you are currently drawing, depending on your installation it can be a combination of the inverter and the grid (W). + pv_power: + description: Current power generated by the inverter (W). + pv_gen_meter: + description: Total kWh generated to date (kWh) total_yield: description: Total power yield from solar installation (kWh). + daily_yield: + description: The yield for today (Wh) + + current_consumption: + description: Power that you are currently drawing, depending on your installation it can be a combination of the inverter and the grid (W). total_consumption: description: Total power consumption (kWh). - grid_voltage: - description: The grid voltage (V) - pv_power: - description: PV Power (W) - daily_yield: - description: daily_yield (Wh) - power_supplied: + + grid_power_supplied: description: Power supplied (W) - power_absorbed: + grid_power_absorbed: description: Power absorbed (W) + grid_total_yield: + description: Total power fom the grid (kWh) + grid_total_absorbed: + description: Total power supplied to the grid + + grid_power: + description: Power supplied by the grid (W) + frequency: + description: Grid frequency (W) + voltage_l1: + description: Voltage for phase 1 (V) + voltage_l2: + description: Voltage for phase 2 (V) + voltage_l2: + description: Voltage for phase 3 (V) + status: - description: Status of the solar plant. + description: Status of the solar plant. + your-custom-sensor: description: Any sensor name defined in the `custom:` section custom: @@ -123,4 +141,4 @@ Example: factor: 1000 ``` -Over time more sensors will be added as standard sensors to the [pysma library](https://github.com/kellerza/pysma/blob/master/pysma/__init__.py#L59). Feel free to submit additional sensors on that repository. +Over time more sensors will be added as standard sensors to the [pysma library](https://github.com/kellerza/pysma/blob/master/pysma/__init__.py#L100). Feel free to submit additional sensors on that repository. From 1eced5b9b31289a025c9f5e67e9be5fbafc0143d Mon Sep 17 00:00:00 2001 From: Bas Date: Mon, 14 Jan 2019 23:20:54 +0100 Subject: [PATCH 28/57] Changed how packages are exposed by the postnl sensor. (#7445) --- source/_components/sensor.postnl.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.postnl.markdown b/source/_components/sensor.postnl.markdown index 0510b0dd14b..fdbd5ec8f1f 100644 --- a/source/_components/sensor.postnl.markdown +++ b/source/_components/sensor.postnl.markdown @@ -15,7 +15,7 @@ ha_iot_class: "Cloud Polling" The `postnl` platform allows one to track deliveries by [PostNL](https://www.postnl.nl) (Dutch Postal Services). To use this sensor, you need a [PostNL Account](https://jouw.postnl.nl). It is possible to add multiple accounts to your Home Assistant configuration. -The sensor value shows the number of packages to be delivered. Each of the packages is available as an attribute. +The sensor value shows the number of packages to be delivered. The packages are available in the shipments attribute. ## {% linkable_title Configuration %} From ff7c1182b3ed1bcd040d384b21f05fc12335ff35 Mon Sep 17 00:00:00 2001 From: Will Hughes Date: Wed, 16 Jan 2019 10:22:17 +1300 Subject: [PATCH 29/57] Clarify Lifx documentation (#8036) * Make it clearer that multiple `server`/`broadcast` blocks are supported * Note that `broadcast` can be set to the unicast address of a bulb --- source/_components/lifx.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/_components/lifx.markdown b/source/_components/lifx.markdown index a630595c4dd..65cd60bfc75 100644 --- a/source/_components/lifx.markdown +++ b/source/_components/lifx.markdown @@ -111,14 +111,14 @@ Run an effect that does nothing, thereby stopping any other effect that might be ## {% linkable_title Advanced configuration %} -There are some manual configuration options available. These should only be needed if you have more than one network interface and automatic configuration does not find your LIFX devices. +There are some manual configuration options available. These are only needed with unusual network setups where automatic configuration does not find your LIFX devices. ```yaml # Example configuration.yaml entry lifx: light: - server: IP_ADDRESS - broadcast: IP_ADDRESS + - server: IP_ADDRESS + broadcast: IP_ADDRESS ``` {% configuration %} @@ -127,7 +127,7 @@ server: required: false type: string broadcast: - description: The broadcast address for discovering lights. + description: The broadcast address for discovering lights. Can also set this to the IP address of a bulb to skip discovery. required: false type: string {% endconfiguration %} From 6616750d57bbd9f36bb1dcfb4fc7ab5376a0dc9c Mon Sep 17 00:00:00 2001 From: Adam Mills Date: Tue, 15 Jan 2019 16:29:42 -0500 Subject: [PATCH 30/57] Split time_pattern triggers from time trigger (#8080) * Split interval triggers from time trigger * Default smaller interval units to zero * Rename interval to schedule * Rename schedule trigger to time_pattern --- source/_docs/automation/trigger.markdown | 29 +++++++++++++++--------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/source/_docs/automation/trigger.markdown b/source/_docs/automation/trigger.markdown index 43298851180..48517d9ccda 100644 --- a/source/_docs/automation/trigger.markdown +++ b/source/_docs/automation/trigger.markdown @@ -165,33 +165,40 @@ Rendering templates with time (`now()`) is dangerous as trigger templates only u ### {% linkable_title Time trigger %} -Time can be triggered in many ways. The most common is to specify `at` and trigger at a specific point in time each day. Alternatively, you can also match if the hour, minute or second of the current time has a specific value. You can prefix the value with a `/` to match whenever the value is divisible by that number. You cannot use `at` together with hour, minute or second. +The time trigger is configured to run once at a specific point in time each day. ```yaml automation: trigger: platform: time + # Military time format. This trigger will fire at 3:32 PM + at: '15:32:00' +``` + +### {% linkable_title Time pattern trigger %} + +With the time pattern trigger, you can match if the hour, minute or second of the current time matches a specific value. You can prefix the value with a `/` to match whenever the value is divisible by that number. You can specify `*` to match any value. + +```yaml +automation: + trigger: + platform: time_pattern # Matches every hour at 5 minutes past whole minutes: 5 - seconds: 00 automation 2: trigger: - platform: time - # When 'at' is used, you cannot also match on hour, minute, seconds. - # Military time format. - at: '15:32:00' + platform: time_pattern + # Trigger once per minute during the hour of 3 + hours: '3' + minutes: '*' automation 3: trigger: - platform: time + platform: time_pattern # You can also match on interval. This will match every 5 minutes minutes: '/5' - seconds: 00 ``` -

- Remember that if you are using matching to include both `minutes` and `seconds`. Without `seconds`, your automation will trigger 60 times during the matching minute. -

### {% linkable_title Webhook trigger %} From d42a3d92ff712cff7f314cabd52df081bc94237a Mon Sep 17 00:00:00 2001 From: Tommy Jonsson Date: Wed, 16 Jan 2019 09:58:15 +0100 Subject: [PATCH 31/57] Add dismiss (#8121) --- source/_components/notify.html5.markdown | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/source/_components/notify.html5.markdown b/source/_components/notify.html5.markdown index 524b92ac9db..84f4338db7d 100644 --- a/source/_components/notify.html5.markdown +++ b/source/_components/notify.html5.markdown @@ -196,6 +196,22 @@ data: 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 Dismiss %} + +You can dismiss notifications by using service notify.html5_dismiss like so: + +```json +{ + "target": ["my phone"], + "data": { + "tag": "notification_tag" + } +} +``` + +If no target is provided, it dismisses for all. +If no tag is provided, it dismisses all notifications. + ### {% 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. From bff9974b62bfc762f228b648a3b50dcbbc71932f Mon Sep 17 00:00:00 2001 From: Rohan Kapoor Date: Wed, 16 Jan 2019 01:17:12 -0800 Subject: [PATCH 32/57] Add support for multiple ZoneMinder installations (#8129) --- source/_components/zoneminder.markdown | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/source/_components/zoneminder.markdown b/source/_components/zoneminder.markdown index 614a5ce022b..020400e31f9 100644 --- a/source/_components/zoneminder.markdown +++ b/source/_components/zoneminder.markdown @@ -21,7 +21,7 @@ The ZoneMinder component sets up the integration with your [ZoneMinder](https:// ```yaml # Example configuration.yaml entry zoneminder: - host: ZM_HOST + - host: ZM_HOST ``` {% configuration %} @@ -64,13 +64,13 @@ password: ```yaml # Example configuration.yaml entry zoneminder: - host: ZM_HOST - path: ZM_PATH - path_zms: ZM_PATH_ZMS - ssl: true - verify_ssl: true - username: YOUR_USERNAME - password: YOUR_PASSWORD + - host: ZM_HOST + path: ZM_PATH + path_zms: ZM_PATH_ZMS + ssl: true + verify_ssl: true + username: YOUR_USERNAME + password: YOUR_PASSWORD ``` ### {% linkable_title Service %} @@ -79,6 +79,7 @@ Once loaded, the `zoneminder` platform will expose a service (`set_run_state`) t | Service data attribute | Optional | Description | |:-----------------------|:---------|:----------------------------------| +| `id` | no | Host of the ZoneMinder instance. | | `name` | no | Name of the new run state to set. | For example, if your ZoneMinder instance was configured with a run state called "Home", you could write an [automation](/getting-started/automation/) that changes ZoneMinder to the "Home" run state by including the following [action](/getting-started/automation-action/): @@ -86,5 +87,6 @@ For example, if your ZoneMinder instance was configured with a run state called action: service: zoneminder.set_run_state data: + id: ZM_HOST name: Home ``` From 57cf8576f02fbb4feb129599b6c84b48e5753738 Mon Sep 17 00:00:00 2001 From: Morgan Kesler Date: Wed, 16 Jan 2019 13:02:47 -0500 Subject: [PATCH 33/57] Update alarm_control_panel.arlo.markdown (#8191) --- source/_components/alarm_control_panel.arlo.markdown | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/_components/alarm_control_panel.arlo.markdown b/source/_components/alarm_control_panel.arlo.markdown index ddc28e0fdb6..6f21a5269de 100644 --- a/source/_components/alarm_control_panel.arlo.markdown +++ b/source/_components/alarm_control_panel.arlo.markdown @@ -37,6 +37,11 @@ away_mode_name: required: false type: string default: "`Armed` mode in Arlo" +night_mode_name: + description: "Arlo base station does not have a built-in night mode. You can map one of your custom modes to Home Assistant's night mode by setting the name of the custom mode in this configuration variable. The name of the custom mode should match eactly as you set it up in the Arlo app." + required: false + type: string + default: "`Armed` mode in Arlo" {% endconfiguration %} ## {% linkable_title Examples %} From 6a3c2d06e3a7531b35146d1c92657c0e3f331f95 Mon Sep 17 00:00:00 2001 From: Nikolay Vasilchuk Date: Wed, 16 Jan 2019 21:04:25 +0300 Subject: [PATCH 34/57] Ready (#8175) --- source/_components/sensor.markdown | 1 + source/_components/sensor.rest.markdown | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/source/_components/sensor.markdown b/source/_components/sensor.markdown index a3cc2019987..791be58a734 100644 --- a/source/_components/sensor.markdown +++ b/source/_components/sensor.markdown @@ -23,6 +23,7 @@ The way these sensors are displayed in the frontend can be modified in the [cust - **illuminance**: The current light level in lx or lm. - **temperature**: Temperature in °C or °F. - **pressure**: Pressure in hPa or mbar. +- **timestamp**: Datetime object or timestamp string.

diff --git a/source/_components/sensor.rest.markdown b/source/_components/sensor.rest.markdown index bae594e5f4a..4f9bb9ee299 100644 --- a/source/_components/sensor.rest.markdown +++ b/source/_components/sensor.rest.markdown @@ -52,6 +52,12 @@ name: required: false type: string default: REST Sensor +device_class: + description: > + The [type/class](/components/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." required: false From 5992efd6ae3f3820df3a381e6ebff1ed446ac82f Mon Sep 17 00:00:00 2001 From: Gamester17 Date: Wed, 16 Jan 2019 19:46:53 +0100 Subject: [PATCH 35/57] Update zha.markdown to list ConBee and RaspBee via the zigpy-deconz library (#8189) Update ZHA component markdown to list ConBee and RaspBee via the zigpy-deconz library from @damarco (for zigpy from @rcloran ) which just had its first release. https://github.com/zigpy/zigpy-deconz --- source/_components/zha.markdown | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/_components/zha.markdown b/source/_components/zha.markdown index 7a4246a9ebf..80cd5cde71a 100644 --- a/source/_components/zha.markdown +++ b/source/_components/zha.markdown @@ -32,6 +32,9 @@ Known working Zigbee radio modules: - [Elelabs Zigbee Raspberry Pi Shield](https://elelabs.com/products/elelabs_zigbee_shield.html) - XBee Zigbee based radios (via the [zigpy-xbee](https://github.com/zigpy/zigpy-xbee) library for zigpy) - Digi XBee Series 2C (S2C) modules +- Dresden-Elektronik deCONZ based Zigbee radios (via the [zigpy-deconz](https://github.com/zigpy/zigpy-deconz) library for zigpy) + - [ConBee USB adapter from Dresden-Elektronik](https://www.dresden-elektronik.de/conbee/) + - [RaspBee Raspberry Pi Shield from Dresden-Elektronik](https://www.dresden-elektronik.de/raspbee/) ## {% linkable_title Configuration %} From c4f6f0ca93230983961e2a562c50801223d35234 Mon Sep 17 00:00:00 2001 From: Rohan Kapoor Date: Wed, 16 Jan 2019 10:56:54 -0800 Subject: [PATCH 36/57] Update GPSLogger docs for the webhook component integration (#8186) * Update GPSLogger docs for the webhook component integration * #8186: Add GPSLogger logo to device tracker platform * #8186 reset permissions * Swap references from GET to POST --- .../device_tracker.gpslogger.markdown | 1 + source/_components/gpslogger.md | 16 ++++++---------- source/images/supported_brands/gpslogger.png | Bin 0 -> 26599 bytes 3 files changed, 7 insertions(+), 10 deletions(-) create mode 100755 source/images/supported_brands/gpslogger.png diff --git a/source/_components/device_tracker.gpslogger.markdown b/source/_components/device_tracker.gpslogger.markdown index 05cf381f135..01dc20046d5 100644 --- a/source/_components/device_tracker.gpslogger.markdown +++ b/source/_components/device_tracker.gpslogger.markdown @@ -7,6 +7,7 @@ sidebar: true comments: false sharing: true footer: true +logo: gpslogger.png ha_category: Presence Detection ha_release: 0.34 --- diff --git a/source/_components/gpslogger.md b/source/_components/gpslogger.md index 62cca2a3618..d458c5d55a7 100644 --- a/source/_components/gpslogger.md +++ b/source/_components/gpslogger.md @@ -7,23 +7,19 @@ sidebar: true comments: false sharing: true footer: true +logo: gpslogger.png ha_category: Presence Detection ha_release: 0.86 ha_iot_class: "Cloud Push" --- -This component sets up integration with [GPSLogger](http://code.mendhak.com/gpslogger/). GPSLogger is an open source app for [Android](https://play.google.com/store/apps/details?id=com.mendhak.gpslogger) that allows users to set up a `GET` request to update GPS coordinates. This can be configured with Home Assistant to update your location. +This component sets up integration with [GPSLogger](http://code.mendhak.com/gpslogger/). GPSLogger is an open source app for [Android](https://play.google.com/store/apps/details?id=com.mendhak.gpslogger) that allows users to set up a `POST` request to update GPS coordinates. This can be configured with Home Assistant to update your location. Enabling this component will automatically enable the [GPSLogger Device Tracker](/components/device_tracker.gpslogger/). ## {% linkable_title Configuration %} -GPSLogger uses long-lived access tokens for authentication. These are setup [under your profile](/docs/authentication/#your-account-profile) and configured in the GPSLogger application on your smartphone as explained below. - -```yaml -# Example configuration.yaml entry -gpslogger: -``` +To configure GPSLogger, you must set it up via the integrations panel in the configuration screen. This will give you the webhook URL to use during mobile device configuration (below). ## {% linkable_title Setup on your smartphone %} @@ -50,19 +46,19 @@ Right after enabling, the app will take you to the **Log to custom URL** setting Log to custom URL details

-The relevant endpoint is: `/api/gpslogger` +The relevant endpoint starts with: `/api/webhook/` and ends with a unique sequence of characters. This is provided by the integrations panel in the configuration screen (configured above). ```text -https://YOUR.DNS.HOSTNAME:PORT/api/gpslogger?latitude=%LAT&longitude=%LON&device=%SER&accuracy=%ACC&battery=%BATT&speed=%SPD&direction=%DIR&altitude=%ALT&provider=%PROV&activity=%ACT +https://YOUR.DNS.HOSTNAME:PORT/api/webook/WEBHOOK_ID?latitude=%LAT&longitude=%LON&device=%SER&accuracy=%ACC&battery=%BATT&speed=%SPD&direction=%DIR&altitude=%ALT&provider=%PROV&activity=%ACT ``` Add the above URL after you modified it with your settings into the **URL** field. Remove the line breaks as they are only there to make the URL readable here. +- Make sure to check the `Use POST method` checkbox. - It's HIGHLY recommended to use SSL/TLS. - Use the domain that Home Assistant is available on the internet (or the public IP address if you have a static IP address). This can be a local IP address if you are using an always on VPN from your mobile device to your home network. - Only remove `PORT` if your Home Assistant instance is using port 443. Otherwise set it to the port you're using. - For Home Assistant only the above URL, as written, will work - do not add, remove, or change the order of any of the parameters. -- Add `Authorization: Bearer LLAT` to the HTTP Headers setting (replace `LLAT` with your Long Lived Access Token). - You can change the name of your device name by replacing `&device=%SER` with `&device=DEVICE_NAME`. If your battery drains too fast then you can tune the performance of GPSLogger under **Performance** -> **Location providers** diff --git a/source/images/supported_brands/gpslogger.png b/source/images/supported_brands/gpslogger.png new file mode 100755 index 0000000000000000000000000000000000000000..04e1d08f5a12446b34e9deb3dde83d2ee98d61b6 GIT binary patch literal 26599 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 Date: Wed, 16 Jan 2019 11:09:00 -0800 Subject: [PATCH 37/57] Update documentation for locative with the new webhook setup (#8160) --- source/_components/locative.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/locative.md b/source/_components/locative.md index cf44c4ee3dc..93f8d43e5d8 100644 --- a/source/_components/locative.md +++ b/source/_components/locative.md @@ -31,7 +31,7 @@ Install on your smartphone: - [Android](https://play.google.com/store/apps/details?id=io.locative.app) - [iOS](https://itunes.apple.com/us/app/geofancy/id725198453) -To configure Locative, you must set up the app to send a `GET` or `POST` request to your Home Assistant server at `http:///api/locative`. Make sure to include the API password if you have configured a password in Home Assistant (add `?api_password=` to the end of the URL). When you enter or exit a geofence, Locative will send the appropriate request to that URL, updating Home Assistant. You are not able to specify a device name in Locative. Instead, you will need to look in your known_devices.yaml file for a new device that Locative will have created on it's first `GET`. If you had been or are using Owntracks as well, you will need to update the device name used in the Owntracks setup with the name that Locative generated. +To configure Locative, you must set it up via the integrations panel in the configuration screen. You must set up the app to send a POST request to your Home Assistant server at the webhook URL provided by the integration during setup. When you enter or exit a geofence, Locative will send the appropriate request to that URL, updating Home Assistant. You are not able to specify a device name in Locative. Instead, you will need to look in your known_devices.yaml file for a new device that Locative will have created on it's first `GET`. If you had been or are using Owntracks as well, you will need to update the device name used in the Owntracks setup with the name that Locative generated.

From f3374ee069eb8a4d62acec3fbaf9489c9ea6cb9e Mon Sep 17 00:00:00 2001 From: cvwillegen Date: Wed, 16 Jan 2019 21:38:50 +0100 Subject: [PATCH 38/57] Update sensor.imap_email_content.markdown (#8190) Added documentation for added 'folder' config entry --- source/_components/sensor.imap_email_content.markdown | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/source/_components/sensor.imap_email_content.markdown b/source/_components/sensor.imap_email_content.markdown index 706b10b3e25..32fbc95a500 100644 --- a/source/_components/sensor.imap_email_content.markdown +++ b/source/_components/sensor.imap_email_content.markdown @@ -9,7 +9,7 @@ sharing: true footer: true logo: smtp.png ha_category: Mailbox -ha_iot_class: "Local Polling" +ha_iot_class: "Cloud Push" ha_release: 0.25 --- @@ -28,6 +28,7 @@ sensor: port: 993 username: USERNAME password: PASSWORD + folder: senders: - example@gmail.com ``` @@ -54,6 +55,11 @@ password: description: Password for the IMAP server. required: true type: string +password: + description: Folder to get mails from. + required: false + default: INBOX + type: string senders: description: A list of sender email addresses that are allowed to report state via email. Only emails received from these addresses will be processed. required: true From 56b4ccdb46712e691f746fd3bd973230d187d4c8 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 16 Jan 2019 16:44:22 -0800 Subject: [PATCH 39/57] Add initial draft for 86 --- _config.yml | 6 +- .../2019-01-23-lovelace-released.markdown | 34 ++ source/_posts/2019-01-23-release-86.markdown | 568 ++++++++++++++++++ 3 files changed, 605 insertions(+), 3 deletions(-) create mode 100644 source/_posts/2019-01-23-lovelace-released.markdown create mode 100644 source/_posts/2019-01-23-release-86.markdown diff --git a/_config.yml b/_config.yml index 92d486cdbba..a0263e22879 100644 --- a/_config.yml +++ b/_config.yml @@ -141,9 +141,9 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 85 -current_patch_version: 1 -date_released: 2019-01-11 +current_minor_version: 86 +current_patch_version: 0 +date_released: 2019-01-23 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. diff --git a/source/_posts/2019-01-23-lovelace-released.markdown b/source/_posts/2019-01-23-lovelace-released.markdown new file mode 100644 index 00000000000..a027f77f2c8 --- /dev/null +++ b/source/_posts/2019-01-23-lovelace-released.markdown @@ -0,0 +1,34 @@ +--- +layout: post +title: "Lovelace UI released! - TBD UPDATE DATE" +description: "After 6 months of development, we're proud to release our brand new Lovelace UI." +date: 2019-01-16 00:01:02 +date_formatted: "January 23, 2019" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +og_image: /images/blog/2019-01-release-86/components.png +--- + +Lovelace is the default, yay! + +Started originally inspired by @andrey-git who added Custom UI. + +Learned that homes are who people are, thinking that we could magically sort it out and build a UI was a naive approach. To work around the magic, components started to store options to influence the magic. + +Lovelace is a re-do, we allow users to get full control. Every card, every entity, all yours. Including custom cards. + +Thank a ton to the current and former members of the Lovelace team: + + - @bramkragten + - @c727 + - @ciotlosm + - @iantrich + - @jeradM + - @thomasloven + - @zsarnett + +Because of the ease to customize and share customizations, we've seen a big community be created around Lovelace. They are very active in the #lovelace channel on our chat, and work is shared on [ShareTheLove.io](https://sharethelove.io/) and the [Lovelace section on Awesome HA](https://www.awesome-ha.com/#lovelace-ui). + + diff --git a/source/_posts/2019-01-23-release-86.markdown b/source/_posts/2019-01-23-release-86.markdown new file mode 100644 index 00000000000..df97f746626 --- /dev/null +++ b/source/_posts/2019-01-23-release-86.markdown @@ -0,0 +1,568 @@ +--- +layout: post +title: "0.86: New Lovelace UI! - TBD UPDATE DATE" +description: "Lovelace is in, Zigbee Control Panel is in." +date: 2019-01-16 00:01:00 +date_formatted: "January 23, 2019" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +og_image: /images/blog/2019-01-release-86/components.png +--- + +Lovelace is the default! Such a great achievement that it warranted it's own [blog post](#). + +New Zigbee control panel. + +## {% linkable_title New Platforms %} + +- Support for Homekit controller/alarm control panel ([@adrum] - [#19612]) ([homekit_controller docs]) ([alarm_control_panel.homekit_controller docs]) (new-platform) +- Split locative to a separate component ([@rohankapoorcom] - [#19964]) ([device_tracker docs]) ([locative docs]) (breaking change) (new-platform) +- Add support for HomeKit Controller Locks ([@adrum] - [#19867]) ([homekit_controller docs]) ([lock.homekit_controller docs]) (new-platform) +- Add support for HomeKit Controller covers ([@adrum] - [#19866]) ([homekit_controller docs]) ([cover.homekit_controller docs]) (new-platform) +- Split out gpslogger into a separate component and platform ([@rohankapoorcom] - [#20044]) ([device_tracker docs]) ([gpslogger docs]) (breaking change) (new-platform) +- Add Roku hub and remote ([@soberstadt] - [#17548]) ([roku docs]) ([media_player.roku docs]) ([remote.roku docs]) (breaking change) (new-platform) +- Split time_pattern triggers from time trigger ([@armills] - [#19825]) ([automation.interval docs]) ([automation.time docs]) (breaking change) (new-platform) + +## {% linkable_title If you need help... %} + +...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. + +## {% linkable_title Reporting Issues %} + +Experiencing issues introduced by this release? Please report them in our [issue tracker](https://github.com/home-assistant/home-assistant/issues). Make sure to fill in all fields of the issue template. + + + +## {% linkable_title Breaking Changes %} + +- Migrate geofency over to the Webhook component ([@rohankapoorcom] - [#18951]) ([geofency docs]) (breaking change) +- Correctly map Nest hvac_state to Home Assistant states. ([@mitchellrj] - [#19895]) ([sensor.nest docs]) (breaking change) +- Add nad telnet ([@rymsha] - [#19704]) ([media_player.nad docs]) (breaking change) +- add service type in name ([@eliseomartelli] - [#19980]) ([sensor.prezzibenzina docs]) (breaking change) +- Expose more information about shipments by PostNL ([@basbl] - [#18334]) ([sensor.postnl docs]) (breaking change) +- Split locative to a separate component ([@rohankapoorcom] - [#19964]) ([device_tracker docs]) ([locative docs]) (breaking change) (new-platform) +- Support for multiple Fibaro gateways ([@pbalogh77] - [#19705]) ([fibaro docs]) ([binary_sensor.fibaro docs]) ([cover.fibaro docs]) ([light.fibaro docs]) ([scene.fibaro docs]) ([sensor.fibaro docs]) ([switch.fibaro docs]) (breaking change) +- Upgrade greeneye_monitor to 1.0 ([@jkeljo] - [#19631]) ([greeneye_monitor docs]) (breaking change) +- Split out gpslogger into a separate component and platform ([@rohankapoorcom] - [#20044]) ([device_tracker docs]) ([gpslogger docs]) (breaking change) (new-platform) +- Add Roku hub and remote ([@soberstadt] - [#17548]) ([roku docs]) ([media_player.roku docs]) ([remote.roku docs]) (breaking change) (new-platform) +- Lowercase code format ([@balloob] - [#20077]) ([alarm_control_panel docs]) (breaking change) +- Adjust OpenUV integration for upcoming API limit changes ([@bachya] - [#19949]) ([openuv docs]) (breaking change) +- Split time_pattern triggers from time trigger ([@armills] - [#19825]) ([automation.interval docs]) ([automation.time docs]) (breaking change) (new-platform) +- Add support for connecting to multiple zoneminder instances ([@rohankapoorcom] - [#19955]) ([zoneminder docs]) ([camera.zoneminder docs]) ([sensor.zoneminder docs]) ([switch.zoneminder docs]) (breaking change) +- Migrate gpslogger to the automatically generated webhook ([@rohankapoorcom] - [#20079]) ([gpslogger docs]) (breaking change) +- Switch locative to use the webhook component ([@rohankapoorcom] - [#20043]) ([locative docs]) (breaking change) + +## {% linkable_title All changes %} + +- Support for Homekit controller/alarm control panel ([@adrum] - [#19612]) ([homekit_controller docs]) ([alarm_control_panel.homekit_controller docs]) (new-platform) +- update powerview scene component to latest api. ([@sander76] - [#19717]) ([scene.hunterdouglas_powerview docs]) +- Add support for Kwikset 914 Convert - lock.zwave id0446 (#19710) ([@cdkonecny] - [#19722]) ([lock.zwave docs]) +- Added zwave lock state from alarm type workaround ([@adrum] - [#18996]) ([lock.zwave docs]) +- Upgrade pwmled to 1.4.0 ([@soldag] - [#19783]) ([light.rpi_gpio_pwm docs]) +- HomematicIP update version to 0.10.1 ([@mxworm] - [#19788]) ([homematicip_cloud docs]) +- Remove duplicated MQTT switch test case ([@emontnemery] - [#19799]) +- [1/3] Refactor mqtt-vacuum in preparation for discovery and device registry ([@quazzie] - [#19462]) ([vacuum.mqtt docs]) +- [2/3] vacuum mqtt-discovery ([@quazzie] - [#19478]) ([mqtt docs]) ([vacuum docs]) ([vacuum.mqtt docs]) +- SMA sensor - updated library ([@kellerza] - [#19753]) ([sensor.sma docs]) +- [3/3] mqtt-vacuum device-registry ([@quazzie] - [#19479]) ([mqtt docs]) ([vacuum docs]) ([vacuum.mqtt docs]) +- Remove temperature from the list of available forecast sensors ([@ReneNulschDE] - [#19818]) ([sensor.darksky docs]) +- This makes the vasttrafik platform stop spamming the logs with warnings ([@kennedyshead] - [#19792]) ([sensor.vasttrafik docs]) +- Bump pybotvac ([@dshokouhi] - [#19831]) ([neato docs]) +- Cleanup if discovered mqtt switch can't be added ([@emontnemery] - [#19721]) ([switch.mqtt docs]) +- adding more dimmer components ([@sander76] - [#19843]) ([light.homematicip_cloud docs]) +- bump watefurnace version to 1.1.0 ([@sdague] - [#19847]) ([waterfurnace docs]) +- Fix 2 ResourceWarning: unclosed file in test_ruamel_yaml.py ([@BoboTiG] - [#19780]) +- Upgrade tahoma-api to 0.0.14 ([@koomik] - [#19840]) ([tahoma docs]) +- Fix french Amazon Polly voice 'Léa'. ([@vincent-k] - [#19852]) ([tts docs]) +- Upgrade holidays to 0.9.9 ([@fabaff] - [#19851]) ([binary_sensor.workday docs]) +- Small cleanup of MQTT light ([@emontnemery] - [#19816]) ([light.mqtt docs]) +- Fix state and attribute fetching in vasttrafik ([@kennedyshead] - [#19856]) +- Geo Location -> Geolocation (comments and default group name) ([@exxamalte] - [#19865]) ([geo_location docs]) ([automation.geo_location docs]) +- Replace MyChevy persistant_notification with error log entry ([@ReneNulschDE] - [#19804]) ([sensor.mychevy docs]) +- Upgrade bcrypt to 3.1.5 ([@fabaff] - [#19854]) +- Cleanup if discovered mqtt lock can't be added ([@emontnemery] - [#19746]) ([lock.mqtt docs]) +- Cleanup if discovered mqtt sensor can't be added ([@emontnemery] - [#19745]) ([sensor.mqtt docs]) +- Cleanup if discovered mqtt cover can't be added ([@emontnemery] - [#19743]) ([cover.mqtt docs]) +- Cleanup if discovered mqtt alarm can't be added ([@emontnemery] - [#19742]) ([alarm_control_panel.mqtt docs]) +- Cleanup if discovered mqtt fan can't be added ([@emontnemery] - [#19741]) ([fan.mqtt docs]) +- Cleanup if discovered mqtt climate can't be added ([@emontnemery] - [#19739]) ([climate.mqtt docs]) +- Relay events for onoff and levelcontrol output clusters in ZHA ([@dmulcahey] - [#19863]) ([zha docs]) +- Replace influxdb query by another query that is more lightweight ([@BaQs] - [#19880]) ([sensor.influxdb docs]) +- Allow other icon prefixes than mdi: ([@thomasloven] - [#19872]) +- Geo Location -> Geolocation (class names and unit test comments) ([@exxamalte] - [#19877]) ([geo_location docs]) +- add entity support to hive ([@Rendili] - [#19879]) ([binary_sensor.hive docs]) ([climate.hive docs]) ([light.hive docs]) ([sensor.hive docs]) ([switch.hive docs]) +- Migrate geofency over to the Webhook component ([@rohankapoorcom] - [#18951]) ([geofency docs]) (breaking change) +- Refactor motion sensor of the xiaomi_aqara platform ([@syssi] - [#19805]) ([binary_sensor.xiaomi_aqara docs]) +- Fix deprecation warning ([@balloob] - [#19882]) +- Bug fix with getting a device battery level when API unavailable for Hive ([@Rendili] - [#19841]) ([hive docs]) ([binary_sensor.hive docs]) ([climate.hive docs]) ([light.hive docs]) ([sensor.hive docs]) ([switch.hive docs]) +- Bump pyflunearyou to 1.0.1 ([@bachya] - [#19899]) ([sensor.flunearyou docs]) +- Removed mkdir, If the WORKDIR doesn’t exist, it will be created. ([@RealArtemiy] - [#19892]) +- Plant monitor defaults ([@royduin] - [#19891]) ([plant docs]) +- Correctly map Nest hvac_state to Home Assistant states. ([@mitchellrj] - [#19895]) ([sensor.nest docs]) (breaking change) +- Add btle_name attribute to devices ([@cliffordwhansen] - [#19915]) ([device_tracker docs]) +- Add Alexa's EndpointHealth reporting ([@abmantis] - [#19784]) ([alexa docs]) +- Remove Discovery dependency from konnected.py ([@so3n] - [#19910]) ([konnected docs]) +- Add sensors to jewish_calendar for upcoming Shabbat times ([@arigilder] - [#19278]) ([sensor.jewish_calendar docs]) +- add_entities -> async_add_entities ([@SNoof85] - [#19943]) ([sensor.freebox docs]) +- Add nad telnet ([@rymsha] - [#19704]) ([media_player.nad docs]) (breaking change) +- Upgrade blinkpy and use calibrated temperature for sensor ([@fronzbot] - [#19723]) ([blink docs]) ([sensor.blink docs]) +- Small refactoring for the alexa component ([@abmantis] - [#19782]) ([alexa docs]) +- Upgrade pylast to 3.0.0 ([@fabaff] - [#19938]) ([sensor.lastfm docs]) +- Remove spurious libzwave error ([@therve] - [#19928]) ([zwave docs]) +- Add emulated_roku component ([@mindigmarton] - [#17596]) ([emulated_roku docs]) +- Change state() to try/except to catch KeyError ([@iamtpage] - [#19935]) ([sensor.tautulli docs]) +- Upgrade mutagen to 1.42.0 ([@fabaff] - [#19956]) ([tts docs]) +- Upgrade pillow to 5.4.1 ([@fabaff] - [#19958]) ([camera.proxy docs]) ([image_processing.tensorflow docs]) +- Upgrade ruamel.yaml to 0.15.85 ([@fabaff] - [#19960]) +- Upgrade pysnmp to 4.4.8 ([@fabaff] - [#19961]) ([device_tracker docs]) ([sensor.snmp docs]) ([switch.snmp docs]) +- Upgrade keyring to 17.1.1 ([@fabaff] - [#19962]) +- Add support for restoring state to rpi_gpio_pwm ([@soldag] - [#19944]) +- min_max sensor support for STATE_UNAVAILABLE ([@RomRider] - [#19914]) ([sensor.min_max docs]) +- add service type in name ([@eliseomartelli] - [#19980]) ([sensor.prezzibenzina docs]) (breaking change) +- Add support for spot cleaning that was introduced in pybotvac 0.12 ([@larsvinc] - [#19857]) ([vacuum.neato docs]) +- Support next generation of the Xiaomi Mi Smart Plug (chuangmi.plug.m3) ([@syssi] - [#19972]) ([switch.xiaomi_miio docs]) +- When tradfri experience communication errors make the lights/devices unavailable. ([@jarlebh] - [#19288]) ([light.tradfri docs]) ([switch.tradfri docs]) +- Allow embedded platforms ([@balloob] - [#19948]) +- Add services and helper functions to support a config panel for ZHA ([@dmulcahey] - [#19664]) ([zha docs]) +- Adding IPv6 to fail2ban sensor ([@grea09] - [#19457]) ([sensor.fail2ban docs]) +- Always use datetime and timedelta in camera.proxy instead of int/float ([@mikeage] - [#19571]) ([camera.proxy docs]) +- Include Scripts/ directory to .gitignore - this is created by virtualenv on Windows ([@scarface-4711] - [#18918]) +- Add mysensors state update delay ([@MartinHjelmare] - [#18891]) ([device_tracker docs]) ([mysensors docs]) +- Add ability to monitor relay events ([@oblogic7] - [#18730]) ([doorbird docs]) +- Add support for 'via_hub' for device_info ([@fredrike] - [#19454]) ([mqtt docs]) +- Fix the anthemav component by removing a debugging line. ([@achatham] - [#19979]) ([media_player.anthemav docs]) +- Expose more information about shipments by PostNL ([@basbl] - [#18334]) ([sensor.postnl docs]) (breaking change) +- Split locative to a separate component ([@rohankapoorcom] - [#19964]) ([device_tracker docs]) ([locative docs]) (breaking change) (new-platform) +- Support for multiple Fibaro gateways ([@pbalogh77] - [#19705]) ([fibaro docs]) ([binary_sensor.fibaro docs]) ([cover.fibaro docs]) ([light.fibaro docs]) ([scene.fibaro docs]) ([sensor.fibaro docs]) ([switch.fibaro docs]) (breaking change) +- Add Hass.io user headers to supervisor proxy ([@balloob] - [#19395]) ([hassio docs]) +- Upgrade huawei-lte-api to 1.1.3 ([@scop] - [#19987]) +- Upgrade pytest-cov to 2.6.1 ([@scop] - [#19988]) +- Wink: Update pubnubsub-handler version to make it compatible with python 3.7 ([@ledor473] - [#19625]) ([wink docs]) +- Don't set friendly_name in Zha entity. ([@Adminiuga] - [#19991]) ([zha docs]) +- Add support for HomeKit Controller Locks ([@adrum] - [#19867]) ([homekit_controller docs]) ([lock.homekit_controller docs]) (new-platform) +- Repackage ZHA component ([@dmulcahey] - [#19989]) ([zha docs]) +- 'latest_dir' referenced before assignment ([@vaidyasr] - [#19952]) ([camera.xiaomi docs]) +- catch TypeError's in addition to ValueError's for unifi direct device tracker ([@thomasdelaet] - [#19994]) +- Support for html5 notifications to suggest their names ([@quazzie] - [#19965]) ([notify docs]) +- Update doorbird events to include URLs on event_data ([@oblogic7] - [#19262]) ([doorbird docs]) +- Upgrade greeneye_monitor to 1.0 ([@jkeljo] - [#19631]) ([greeneye_monitor docs]) (breaking change) +- version bump for zha-quirks ([@dmulcahey] - [#20019]) ([zha docs]) +- Enable bool type for ADS service ([@carstenschroeder] - [#20011]) ([ads docs]) +- UniFi - Fix issue with POE switch reset switch config ([@Kane610] - [#20021]) ([unifi docs]) +- Add service change_channel to Harmony component ([@ehendrix23] - [#19649]) ([remote.harmony docs]) +- mychevy: Fix wrong attribute on battery level selector ([@sdague] - [#20016]) ([sensor.mychevy docs]) +- Add harmony service to remote services.yaml ([@ehendrix23] - [#20031]) +- update to pyunifi 2.16 ([@finish06] - [#20042]) ([device_tracker docs]) +- Upgrade pytest to 4.1.0 ([@scop] - [#20013]) +- Change alarm panel code format ([@arsaboo] - [#20037]) ([alarm_control_panel.elkm1 docs]) +- ADS service: Enable use of templates for value ([@carstenschroeder] - [#20024]) ([ads docs]) +- Fix remote.harmony_change_channel services.yaml indentation ([@amelchio] - [#20051]) +- Show persistent notification on Doorbird schedule failure ([@oblogic7] - [#20033]) ([doorbird docs]) +- Add support for HomeKit Controller covers ([@adrum] - [#19866]) ([homekit_controller docs]) ([cover.homekit_controller docs]) (new-platform) +- warning -> debug, this should not have been visible to users ([@rytilahti] - [#20061]) ([media_player.songpal docs]) +- Split out gpslogger into a separate component and platform ([@rohankapoorcom] - [#20044]) ([device_tracker docs]) ([gpslogger docs]) (breaking change) (new-platform) +- Add Roku hub and remote ([@soberstadt] - [#17548]) ([roku docs]) ([media_player.roku docs]) ([remote.roku docs]) (breaking change) (new-platform) +- Upgrade pytest to 4.1.1 ([@scop] - [#20088]) +- Lowercase code format ([@balloob] - [#20077]) ([alarm_control_panel docs]) (breaking change) +- fix logic error in dubln bus ([@ttroy50] - [#20075]) ([sensor.dublin_bus_transport docs]) +- Bump abode to 0.15.0 ([@shred86] - [#20064]) ([abode docs]) +- Change return text code for alarm control panels ([@arsaboo] - [#20055]) ([alarm_control_panel.alarmdotcom docs]) +- Adjust OpenUV integration for upcoming API limit changes ([@bachya] - [#19949]) ([openuv docs]) (breaking change) +- Fix ihc issues caused by update to defusedxml ([@mopolus] - [#20091]) ([ihc docs]) +- Move ESPHome Source Files ([@OttoWinter] - [#20092]) ([esphome docs]) +- Embed RainMachine platforms into the component ([@bachya] - [#20066]) ([rainmachine docs]) +- Embed SimpliSafe platforms into the component ([@bachya] - [#20069]) ([simplisafe docs]) +- Embed OpenUV platforms into the component ([@bachya] - [#20072]) ([openuv docs]) +- Reconfigure MQTT lock component if discovery info is changed ([@emontnemery] - [#19468]) ([lock.mqtt docs]) +- Added partial detection to async_add_job ([@andrewsayre] - [#20119]) +- Fix tellduslive discovery and auth issues ([@fredrike] - [#20023]) ([tellduslive docs]) +- Use voluptuous to perform validation for the geofency webhook ([@rohankapoorcom] - [#20067]) ([geofency docs]) +- fixed gtt to report isotime ([@eliseomartelli] - [#20128]) ([sensor.gtt docs]) +- Move MQTT platforms under the component ([@emontnemery] - [#20050]) ([mqtt docs]) +- Split time_pattern triggers from time trigger ([@armills] - [#19825]) ([automation.interval docs]) ([automation.time docs]) (breaking change) (new-platform) +- Change deCONZ to embedded platforms ([@Kane610] - [#20113]) ([deconz docs]) +- Improve Philips Hue color conversion 2 ([@starkillerOG] - [#20118]) +- Minor refactoring of MQTT availability ([@emontnemery] - [#20136]) ([mqtt docs]) +- Add notify.html5_dismiss service ([@quazzie] - [#19912]) ([notify docs]) +- Fix loading translations for embedded platforms ([@balloob] - [#20122]) +- Switch geofency tests to using an unauthenticated HTTP client ([@rohankapoorcom] - [#20080]) +- Zha light.turn_on service fixes. ([@Adminiuga] - [#20085]) ([zha docs]) +- Switch to ipapi.co (fixes #19846) ([@fabaff] - [#19886]) +- Accept both domains and entities in influxdb include ([@amelchio] - [#19927]) ([influxdb docs]) +- Make all deCONZ platforms use a common base ([@Kane610] - [#20137]) +- Reconnect and device name fix for harmony platform ([@ehendrix23] - [#20108]) ([remote.harmony docs]) +- Fix TTS say config validation ([@balloob] - [#20145]) ([tts docs]) +- Use the correct Unicode degree symbol ([@tgerla] - [#20058]) ([sensor.ambient_station docs]) +- Add support for connecting to multiple zoneminder instances ([@rohankapoorcom] - [#19955]) ([zoneminder docs]) ([camera.zoneminder docs]) ([sensor.zoneminder docs]) ([switch.zoneminder docs]) (breaking change) +- Embed geofency platform into component ([@rohankapoorcom] - [#20083]) ([geofency docs]) +- Remove .isort because we use the config from setup.cfg ([@pvizeli] - [#20158]) +- Fix link to documentation link, select read-only ([@cvwillegen] - [#20155]) ([sensor.imap_email_content docs]) +- Embed mailgun platform into component ([@rohankapoorcom] - [#20147]) ([mailgun docs]) +- Enable setting alarm mode night for arlo platform ([@keslerm] - [#20143]) ([alarm_control_panel.arlo docs]) +- Support device_class for rest sensor ([@Anonym-tsk] - [#20132]) ([sensor.rest docs]) +- Migrate gpslogger to the automatically generated webhook ([@rohankapoorcom] - [#20079]) ([gpslogger docs]) (breaking change) +- imap_email_content: allow configuring folder to read. ([@cvwillegen] - [#20160]) +- Make imports relative in ZHA component ([@dmulcahey] - [#20020]) ([zha docs]) +- Switch locative to use the webhook component ([@rohankapoorcom] - [#20043]) ([locative docs]) (breaking change) +- Log exceptions thrown by MQTT message callbacks ([@emontnemery] - [#19977]) ([mqtt docs]) +- Upgrade aiohttp to 3.5.3 ([@fabaff] - [#19957]) +- Strip login username in backend ([@balloob] - [#20150]) +- Bump pynuki to 1.3.2 ([@damarco] - [#20173]) ([lock.nuki docs]) +- Add Xiaomi Airpurifier Pro V7 support ([@syssi] - [#20093]) ([fan.xiaomi_miio docs]) +- Add support for deconz radios to zha component ([@damarco] - [#20167]) ([zha docs]) + +[#17548]: https://github.com/home-assistant/home-assistant/pull/17548 +[#17596]: https://github.com/home-assistant/home-assistant/pull/17596 +[#18334]: https://github.com/home-assistant/home-assistant/pull/18334 +[#18730]: https://github.com/home-assistant/home-assistant/pull/18730 +[#18891]: https://github.com/home-assistant/home-assistant/pull/18891 +[#18918]: https://github.com/home-assistant/home-assistant/pull/18918 +[#18951]: https://github.com/home-assistant/home-assistant/pull/18951 +[#18996]: https://github.com/home-assistant/home-assistant/pull/18996 +[#19262]: https://github.com/home-assistant/home-assistant/pull/19262 +[#19278]: https://github.com/home-assistant/home-assistant/pull/19278 +[#19288]: https://github.com/home-assistant/home-assistant/pull/19288 +[#19395]: https://github.com/home-assistant/home-assistant/pull/19395 +[#19454]: https://github.com/home-assistant/home-assistant/pull/19454 +[#19457]: https://github.com/home-assistant/home-assistant/pull/19457 +[#19462]: https://github.com/home-assistant/home-assistant/pull/19462 +[#19468]: https://github.com/home-assistant/home-assistant/pull/19468 +[#19478]: https://github.com/home-assistant/home-assistant/pull/19478 +[#19479]: https://github.com/home-assistant/home-assistant/pull/19479 +[#19571]: https://github.com/home-assistant/home-assistant/pull/19571 +[#19612]: https://github.com/home-assistant/home-assistant/pull/19612 +[#19625]: https://github.com/home-assistant/home-assistant/pull/19625 +[#19631]: https://github.com/home-assistant/home-assistant/pull/19631 +[#19649]: https://github.com/home-assistant/home-assistant/pull/19649 +[#19664]: https://github.com/home-assistant/home-assistant/pull/19664 +[#19704]: https://github.com/home-assistant/home-assistant/pull/19704 +[#19705]: https://github.com/home-assistant/home-assistant/pull/19705 +[#19717]: https://github.com/home-assistant/home-assistant/pull/19717 +[#19721]: https://github.com/home-assistant/home-assistant/pull/19721 +[#19722]: https://github.com/home-assistant/home-assistant/pull/19722 +[#19723]: https://github.com/home-assistant/home-assistant/pull/19723 +[#19739]: https://github.com/home-assistant/home-assistant/pull/19739 +[#19741]: https://github.com/home-assistant/home-assistant/pull/19741 +[#19742]: https://github.com/home-assistant/home-assistant/pull/19742 +[#19743]: https://github.com/home-assistant/home-assistant/pull/19743 +[#19745]: https://github.com/home-assistant/home-assistant/pull/19745 +[#19746]: https://github.com/home-assistant/home-assistant/pull/19746 +[#19753]: https://github.com/home-assistant/home-assistant/pull/19753 +[#19780]: https://github.com/home-assistant/home-assistant/pull/19780 +[#19782]: https://github.com/home-assistant/home-assistant/pull/19782 +[#19783]: https://github.com/home-assistant/home-assistant/pull/19783 +[#19784]: https://github.com/home-assistant/home-assistant/pull/19784 +[#19788]: https://github.com/home-assistant/home-assistant/pull/19788 +[#19792]: https://github.com/home-assistant/home-assistant/pull/19792 +[#19799]: https://github.com/home-assistant/home-assistant/pull/19799 +[#19804]: https://github.com/home-assistant/home-assistant/pull/19804 +[#19805]: https://github.com/home-assistant/home-assistant/pull/19805 +[#19816]: https://github.com/home-assistant/home-assistant/pull/19816 +[#19818]: https://github.com/home-assistant/home-assistant/pull/19818 +[#19825]: https://github.com/home-assistant/home-assistant/pull/19825 +[#19831]: https://github.com/home-assistant/home-assistant/pull/19831 +[#19840]: https://github.com/home-assistant/home-assistant/pull/19840 +[#19841]: https://github.com/home-assistant/home-assistant/pull/19841 +[#19843]: https://github.com/home-assistant/home-assistant/pull/19843 +[#19847]: https://github.com/home-assistant/home-assistant/pull/19847 +[#19851]: https://github.com/home-assistant/home-assistant/pull/19851 +[#19852]: https://github.com/home-assistant/home-assistant/pull/19852 +[#19854]: https://github.com/home-assistant/home-assistant/pull/19854 +[#19856]: https://github.com/home-assistant/home-assistant/pull/19856 +[#19857]: https://github.com/home-assistant/home-assistant/pull/19857 +[#19863]: https://github.com/home-assistant/home-assistant/pull/19863 +[#19865]: https://github.com/home-assistant/home-assistant/pull/19865 +[#19866]: https://github.com/home-assistant/home-assistant/pull/19866 +[#19867]: https://github.com/home-assistant/home-assistant/pull/19867 +[#19872]: https://github.com/home-assistant/home-assistant/pull/19872 +[#19877]: https://github.com/home-assistant/home-assistant/pull/19877 +[#19879]: https://github.com/home-assistant/home-assistant/pull/19879 +[#19880]: https://github.com/home-assistant/home-assistant/pull/19880 +[#19882]: https://github.com/home-assistant/home-assistant/pull/19882 +[#19886]: https://github.com/home-assistant/home-assistant/pull/19886 +[#19891]: https://github.com/home-assistant/home-assistant/pull/19891 +[#19892]: https://github.com/home-assistant/home-assistant/pull/19892 +[#19895]: https://github.com/home-assistant/home-assistant/pull/19895 +[#19899]: https://github.com/home-assistant/home-assistant/pull/19899 +[#19910]: https://github.com/home-assistant/home-assistant/pull/19910 +[#19912]: https://github.com/home-assistant/home-assistant/pull/19912 +[#19914]: https://github.com/home-assistant/home-assistant/pull/19914 +[#19915]: https://github.com/home-assistant/home-assistant/pull/19915 +[#19927]: https://github.com/home-assistant/home-assistant/pull/19927 +[#19928]: https://github.com/home-assistant/home-assistant/pull/19928 +[#19935]: https://github.com/home-assistant/home-assistant/pull/19935 +[#19938]: https://github.com/home-assistant/home-assistant/pull/19938 +[#19943]: https://github.com/home-assistant/home-assistant/pull/19943 +[#19944]: https://github.com/home-assistant/home-assistant/pull/19944 +[#19948]: https://github.com/home-assistant/home-assistant/pull/19948 +[#19949]: https://github.com/home-assistant/home-assistant/pull/19949 +[#19952]: https://github.com/home-assistant/home-assistant/pull/19952 +[#19955]: https://github.com/home-assistant/home-assistant/pull/19955 +[#19956]: https://github.com/home-assistant/home-assistant/pull/19956 +[#19957]: https://github.com/home-assistant/home-assistant/pull/19957 +[#19958]: https://github.com/home-assistant/home-assistant/pull/19958 +[#19960]: https://github.com/home-assistant/home-assistant/pull/19960 +[#19961]: https://github.com/home-assistant/home-assistant/pull/19961 +[#19962]: https://github.com/home-assistant/home-assistant/pull/19962 +[#19964]: https://github.com/home-assistant/home-assistant/pull/19964 +[#19965]: https://github.com/home-assistant/home-assistant/pull/19965 +[#19972]: https://github.com/home-assistant/home-assistant/pull/19972 +[#19977]: https://github.com/home-assistant/home-assistant/pull/19977 +[#19979]: https://github.com/home-assistant/home-assistant/pull/19979 +[#19980]: https://github.com/home-assistant/home-assistant/pull/19980 +[#19987]: https://github.com/home-assistant/home-assistant/pull/19987 +[#19988]: https://github.com/home-assistant/home-assistant/pull/19988 +[#19989]: https://github.com/home-assistant/home-assistant/pull/19989 +[#19991]: https://github.com/home-assistant/home-assistant/pull/19991 +[#19994]: https://github.com/home-assistant/home-assistant/pull/19994 +[#20011]: https://github.com/home-assistant/home-assistant/pull/20011 +[#20013]: https://github.com/home-assistant/home-assistant/pull/20013 +[#20016]: https://github.com/home-assistant/home-assistant/pull/20016 +[#20019]: https://github.com/home-assistant/home-assistant/pull/20019 +[#20020]: https://github.com/home-assistant/home-assistant/pull/20020 +[#20021]: https://github.com/home-assistant/home-assistant/pull/20021 +[#20023]: https://github.com/home-assistant/home-assistant/pull/20023 +[#20024]: https://github.com/home-assistant/home-assistant/pull/20024 +[#20031]: https://github.com/home-assistant/home-assistant/pull/20031 +[#20033]: https://github.com/home-assistant/home-assistant/pull/20033 +[#20037]: https://github.com/home-assistant/home-assistant/pull/20037 +[#20042]: https://github.com/home-assistant/home-assistant/pull/20042 +[#20043]: https://github.com/home-assistant/home-assistant/pull/20043 +[#20044]: https://github.com/home-assistant/home-assistant/pull/20044 +[#20050]: https://github.com/home-assistant/home-assistant/pull/20050 +[#20051]: https://github.com/home-assistant/home-assistant/pull/20051 +[#20055]: https://github.com/home-assistant/home-assistant/pull/20055 +[#20058]: https://github.com/home-assistant/home-assistant/pull/20058 +[#20061]: https://github.com/home-assistant/home-assistant/pull/20061 +[#20064]: https://github.com/home-assistant/home-assistant/pull/20064 +[#20066]: https://github.com/home-assistant/home-assistant/pull/20066 +[#20067]: https://github.com/home-assistant/home-assistant/pull/20067 +[#20069]: https://github.com/home-assistant/home-assistant/pull/20069 +[#20072]: https://github.com/home-assistant/home-assistant/pull/20072 +[#20075]: https://github.com/home-assistant/home-assistant/pull/20075 +[#20077]: https://github.com/home-assistant/home-assistant/pull/20077 +[#20079]: https://github.com/home-assistant/home-assistant/pull/20079 +[#20080]: https://github.com/home-assistant/home-assistant/pull/20080 +[#20083]: https://github.com/home-assistant/home-assistant/pull/20083 +[#20085]: https://github.com/home-assistant/home-assistant/pull/20085 +[#20088]: https://github.com/home-assistant/home-assistant/pull/20088 +[#20091]: https://github.com/home-assistant/home-assistant/pull/20091 +[#20092]: https://github.com/home-assistant/home-assistant/pull/20092 +[#20093]: https://github.com/home-assistant/home-assistant/pull/20093 +[#20108]: https://github.com/home-assistant/home-assistant/pull/20108 +[#20113]: https://github.com/home-assistant/home-assistant/pull/20113 +[#20118]: https://github.com/home-assistant/home-assistant/pull/20118 +[#20119]: https://github.com/home-assistant/home-assistant/pull/20119 +[#20122]: https://github.com/home-assistant/home-assistant/pull/20122 +[#20128]: https://github.com/home-assistant/home-assistant/pull/20128 +[#20132]: https://github.com/home-assistant/home-assistant/pull/20132 +[#20136]: https://github.com/home-assistant/home-assistant/pull/20136 +[#20137]: https://github.com/home-assistant/home-assistant/pull/20137 +[#20143]: https://github.com/home-assistant/home-assistant/pull/20143 +[#20145]: https://github.com/home-assistant/home-assistant/pull/20145 +[#20147]: https://github.com/home-assistant/home-assistant/pull/20147 +[#20150]: https://github.com/home-assistant/home-assistant/pull/20150 +[#20155]: https://github.com/home-assistant/home-assistant/pull/20155 +[#20158]: https://github.com/home-assistant/home-assistant/pull/20158 +[#20160]: https://github.com/home-assistant/home-assistant/pull/20160 +[#20167]: https://github.com/home-assistant/home-assistant/pull/20167 +[#20173]: https://github.com/home-assistant/home-assistant/pull/20173 +[@Adminiuga]: https://github.com/Adminiuga +[@Anonym-tsk]: https://github.com/Anonym-tsk +[@BaQs]: https://github.com/BaQs +[@BoboTiG]: https://github.com/BoboTiG +[@Kane610]: https://github.com/Kane610 +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@OttoWinter]: https://github.com/OttoWinter +[@RealArtemiy]: https://github.com/RealArtemiy +[@Rendili]: https://github.com/Rendili +[@ReneNulschDE]: https://github.com/ReneNulschDE +[@RomRider]: https://github.com/RomRider +[@SNoof85]: https://github.com/SNoof85 +[@abmantis]: https://github.com/abmantis +[@achatham]: https://github.com/achatham +[@adrum]: https://github.com/adrum +[@amelchio]: https://github.com/amelchio +[@andrewsayre]: https://github.com/andrewsayre +[@arigilder]: https://github.com/arigilder +[@armills]: https://github.com/armills +[@arsaboo]: https://github.com/arsaboo +[@bachya]: https://github.com/bachya +[@balloob]: https://github.com/balloob +[@basbl]: https://github.com/basbl +[@carstenschroeder]: https://github.com/carstenschroeder +[@cdkonecny]: https://github.com/cdkonecny +[@cliffordwhansen]: https://github.com/cliffordwhansen +[@cvwillegen]: https://github.com/cvwillegen +[@damarco]: https://github.com/damarco +[@dmulcahey]: https://github.com/dmulcahey +[@dshokouhi]: https://github.com/dshokouhi +[@ehendrix23]: https://github.com/ehendrix23 +[@eliseomartelli]: https://github.com/eliseomartelli +[@emontnemery]: https://github.com/emontnemery +[@exxamalte]: https://github.com/exxamalte +[@fabaff]: https://github.com/fabaff +[@finish06]: https://github.com/finish06 +[@fredrike]: https://github.com/fredrike +[@fronzbot]: https://github.com/fronzbot +[@grea09]: https://github.com/grea09 +[@iamtpage]: https://github.com/iamtpage +[@jarlebh]: https://github.com/jarlebh +[@jkeljo]: https://github.com/jkeljo +[@kellerza]: https://github.com/kellerza +[@kennedyshead]: https://github.com/kennedyshead +[@keslerm]: https://github.com/keslerm +[@koomik]: https://github.com/koomik +[@larsvinc]: https://github.com/larsvinc +[@ledor473]: https://github.com/ledor473 +[@mikeage]: https://github.com/mikeage +[@mindigmarton]: https://github.com/mindigmarton +[@mitchellrj]: https://github.com/mitchellrj +[@mopolus]: https://github.com/mopolus +[@mxworm]: https://github.com/mxworm +[@oblogic7]: https://github.com/oblogic7 +[@pbalogh77]: https://github.com/pbalogh77 +[@pvizeli]: https://github.com/pvizeli +[@quazzie]: https://github.com/quazzie +[@rohankapoorcom]: https://github.com/rohankapoorcom +[@royduin]: https://github.com/royduin +[@rymsha]: https://github.com/rymsha +[@rytilahti]: https://github.com/rytilahti +[@sander76]: https://github.com/sander76 +[@scarface-4711]: https://github.com/scarface-4711 +[@scop]: https://github.com/scop +[@sdague]: https://github.com/sdague +[@shred86]: https://github.com/shred86 +[@so3n]: https://github.com/so3n +[@soberstadt]: https://github.com/soberstadt +[@soldag]: https://github.com/soldag +[@starkillerOG]: https://github.com/starkillerOG +[@syssi]: https://github.com/syssi +[@tgerla]: https://github.com/tgerla +[@therve]: https://github.com/therve +[@thomasdelaet]: https://github.com/thomasdelaet +[@thomasloven]: https://github.com/thomasloven +[@ttroy50]: https://github.com/ttroy50 +[@vaidyasr]: https://github.com/vaidyasr +[@vincent-k]: https://github.com/vincent-k +[abode docs]: /components/abode/ +[ads docs]: /components/ads/ +[alarm_control_panel docs]: /components/alarm_control_panel/ +[alarm_control_panel.alarmdotcom docs]: /components/alarm_control_panel.alarmdotcom/ +[alarm_control_panel.arlo docs]: /components/alarm_control_panel.arlo/ +[alarm_control_panel.elkm1 docs]: /components/alarm_control_panel.elkm1/ +[alarm_control_panel.homekit_controller docs]: /components/alarm_control_panel.homekit_controller/ +[alarm_control_panel.mqtt docs]: /components/alarm_control_panel.mqtt/ +[alexa docs]: /components/alexa/ +[automation.geo_location docs]: /docs/automation/trigger/#geo_location-trigger +[automation.interval docs]: /docs/automation/trigger/#interval-trigger +[automation.time docs]: /docs/automation/trigger/#time-trigger +[binary_sensor.fibaro docs]: /components/binary_sensor.fibaro/ +[binary_sensor.hive docs]: /components/binary_sensor.hive/ +[binary_sensor.workday docs]: /components/binary_sensor.workday/ +[binary_sensor.xiaomi_aqara docs]: /components/binary_sensor.xiaomi_aqara/ +[blink docs]: /components/blink/ +[camera.proxy docs]: /components/camera.proxy/ +[camera.xiaomi docs]: /components/camera.xiaomi/ +[camera.zoneminder docs]: /components/camera.zoneminder/ +[climate.hive docs]: /components/climate.hive/ +[climate.mqtt docs]: /components/climate.mqtt/ +[cover.fibaro docs]: /components/cover.fibaro/ +[cover.homekit_controller docs]: /components/cover.homekit_controller/ +[cover.mqtt docs]: /components/cover.mqtt/ +[deconz docs]: /components/deconz/ +[device_tracker docs]: /components/device_tracker/ +[doorbird docs]: /components/doorbird/ +[emulated_roku docs]: /components/emulated_roku/ +[esphome docs]: /components/esphome/ +[fan.mqtt docs]: /components/fan.mqtt/ +[fan.xiaomi_miio docs]: /components/fan.xiaomi_miio/ +[fibaro docs]: /components/fibaro/ +[geo_location docs]: /components/geo_location/ +[geofency docs]: /components/geofency/ +[gpslogger docs]: /components/gpslogger/ +[greeneye_monitor docs]: /components/greeneye_monitor/ +[hassio docs]: /components/hassio/ +[hive docs]: /components/hive/ +[homekit_controller docs]: /components/homekit_controller/ +[homematicip_cloud docs]: /components/homematicip_cloud/ +[ihc docs]: /components/ihc/ +[image_processing.tensorflow docs]: /components/image_processing.tensorflow/ +[influxdb docs]: /components/influxdb/ +[konnected docs]: /components/konnected/ +[light.fibaro docs]: /components/light.fibaro/ +[light.hive docs]: /components/light.hive/ +[light.homematicip_cloud docs]: /components/light.homematicip_cloud/ +[light.mqtt docs]: /components/light.mqtt/ +[light.rpi_gpio_pwm docs]: /components/light.rpi_gpio_pwm/ +[light.tradfri docs]: /components/light.tradfri/ +[locative docs]: /components/locative/ +[lock.homekit_controller docs]: /components/lock.homekit_controller/ +[lock.mqtt docs]: /components/lock.mqtt/ +[lock.nuki docs]: /components/lock.nuki/ +[lock.zwave docs]: /components/lock.zwave/ +[mailgun docs]: /components/mailgun/ +[media_player.anthemav docs]: /components/media_player.anthemav/ +[media_player.nad docs]: /components/media_player.nad/ +[media_player.roku docs]: /components/media_player.roku/ +[media_player.songpal docs]: /components/media_player.songpal/ +[mqtt docs]: /components/mqtt/ +[mysensors docs]: /components/mysensors/ +[neato docs]: /components/neato/ +[notify docs]: /components/notify/ +[openuv docs]: /components/openuv/ +[plant docs]: /components/plant/ +[rainmachine docs]: /components/rainmachine/ +[remote.harmony docs]: /components/remote.harmony/ +[remote.roku docs]: /components/remote.roku/ +[roku docs]: /components/roku/ +[scene.fibaro docs]: /components/scene.fibaro/ +[scene.hunterdouglas_powerview docs]: /components/scene.hunterdouglas_powerview/ +[sensor.ambient_station docs]: /components/sensor.ambient_station/ +[sensor.blink docs]: /components/sensor.blink/ +[sensor.darksky docs]: /components/sensor.darksky/ +[sensor.dublin_bus_transport docs]: /components/sensor.dublin_bus_transport/ +[sensor.fail2ban docs]: /components/sensor.fail2ban/ +[sensor.fibaro docs]: /components/sensor.fibaro/ +[sensor.flunearyou docs]: /components/sensor.flunearyou/ +[sensor.freebox docs]: /components/sensor.freebox/ +[sensor.gtt docs]: /components/sensor.gtt/ +[sensor.hive docs]: /components/sensor.hive/ +[sensor.imap_email_content docs]: /components/sensor.imap_email_content/ +[sensor.influxdb docs]: /components/sensor.influxdb/ +[sensor.jewish_calendar docs]: /components/sensor.jewish_calendar/ +[sensor.lastfm docs]: /components/sensor.lastfm/ +[sensor.min_max docs]: /components/sensor.min_max/ +[sensor.mqtt docs]: /components/sensor.mqtt/ +[sensor.mychevy docs]: /components/sensor.mychevy/ +[sensor.nest docs]: /components/sensor.nest/ +[sensor.postnl docs]: /components/sensor.postnl/ +[sensor.prezzibenzina docs]: /components/sensor.prezzibenzina/ +[sensor.rest docs]: /components/sensor.rest/ +[sensor.sma docs]: /components/sensor.sma/ +[sensor.snmp docs]: /components/sensor.snmp/ +[sensor.tautulli docs]: /components/sensor.tautulli/ +[sensor.vasttrafik docs]: /components/sensor.vasttrafik/ +[sensor.zoneminder docs]: /components/sensor.zoneminder/ +[simplisafe docs]: /components/simplisafe/ +[switch.fibaro docs]: /components/switch.fibaro/ +[switch.hive docs]: /components/switch.hive/ +[switch.mqtt docs]: /components/switch.mqtt/ +[switch.snmp docs]: /components/switch.snmp/ +[switch.tradfri docs]: /components/switch.tradfri/ +[switch.xiaomi_miio docs]: /components/switch.xiaomi_miio/ +[switch.zoneminder docs]: /components/switch.zoneminder/ +[tahoma docs]: /components/tahoma/ +[tellduslive docs]: /components/tellduslive/ +[tts docs]: /components/tts/ +[unifi docs]: /components/unifi/ +[vacuum docs]: /components/vacuum/ +[vacuum.mqtt docs]: /components/vacuum.mqtt/ +[vacuum.neato docs]: /components/vacuum.neato/ +[waterfurnace docs]: /components/waterfurnace/ +[wink docs]: /components/wink/ +[zha docs]: /components/zha/ +[zoneminder docs]: /components/zoneminder/ +[zwave docs]: /components/zwave/ From 7acafe2f430aff27f79da4a0112fd853a02f4984 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 16 Jan 2019 16:48:54 -0800 Subject: [PATCH 40/57] add link original pr --- source/_posts/2019-01-23-lovelace-released.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_posts/2019-01-23-lovelace-released.markdown b/source/_posts/2019-01-23-lovelace-released.markdown index a027f77f2c8..0bd86644dac 100644 --- a/source/_posts/2019-01-23-lovelace-released.markdown +++ b/source/_posts/2019-01-23-lovelace-released.markdown @@ -1,7 +1,7 @@ --- layout: post title: "Lovelace UI released! - TBD UPDATE DATE" -description: "After 6 months of development, we're proud to release our brand new Lovelace UI." +description: "After 8 months of development, we're proud to release our brand new Lovelace UI." date: 2019-01-16 00:01:02 date_formatted: "January 23, 2019" author: Paulus Schoutsen @@ -13,7 +13,7 @@ og_image: /images/blog/2019-01-release-86/components.png Lovelace is the default, yay! -Started originally inspired by @andrey-git who added Custom UI. +Started originally inspired by @andrey-git who added Custom UI. [Initial PR](https://github.com/home-assistant/home-assistant-polymer/pull/1205) Learned that homes are who people are, thinking that we could magically sort it out and build a UI was a naive approach. To work around the magic, components started to store options to influence the magic. From 2c04d8bb2be3ae6f5ba8ee3d421617449b6c8402 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 16 Jan 2019 16:50:29 -0800 Subject: [PATCH 41/57] Add link to interview with Zac --- source/_posts/2019-01-23-lovelace-released.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_posts/2019-01-23-lovelace-released.markdown b/source/_posts/2019-01-23-lovelace-released.markdown index 0bd86644dac..4cac5aa2c8a 100644 --- a/source/_posts/2019-01-23-lovelace-released.markdown +++ b/source/_posts/2019-01-23-lovelace-released.markdown @@ -32,3 +32,4 @@ Thank a ton to the current and former members of the Lovelace team: Because of the ease to customize and share customizations, we've seen a big community be created around Lovelace. They are very active in the #lovelace channel on our chat, and work is shared on [ShareTheLove.io](https://sharethelove.io/) and the [Lovelace section on Awesome HA](https://www.awesome-ha.com/#lovelace-ui). +Interview with Zac about the Lovelace release on the Home Assistant Podcast: https://hasspodcast.io/ha042 . From 8e668ea0b16993b6a410695f11b5d1064b65bc60 Mon Sep 17 00:00:00 2001 From: Tommy Jonsson Date: Tue, 22 Jan 2019 13:26:06 +0100 Subject: [PATCH 42/57] Mqtt discovery of vacuums (#7910) * Mqtt discovery of vacuums See https://github.com/home-assistant/home-assistant/pull/19478 * :pencil2: Tweak --- source/_docs/mqtt/discovery.markdown | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/source/_docs/mqtt/discovery.markdown b/source/_docs/mqtt/discovery.markdown index 88bf2b980ae..a7931e22cf0 100644 --- a/source/_docs/mqtt/discovery.markdown +++ b/source/_docs/mqtt/discovery.markdown @@ -24,6 +24,7 @@ Supported by MQTT discovery: - [Locks](/components/lock.mqtt/) - [Sensors](/components/sensor.mqtt/) - [Switches](/components/switch.mqtt/) +- [Vacuums](/components/vacuum.mqtt/) To enable MQTT discovery, add the following to your `configuration.yaml` file: @@ -86,12 +87,25 @@ Supported abbreviations: 'bri_scl': 'brightness_scale', 'bri_stat_t': 'brightness_state_topic', 'bri_val_tpl': 'brightness_value_template', + 'bat_lev_t': 'battery_level_topic', + 'bat_lev_tpl': 'battery_level_template', + 'chrg_t': 'charging_topic', + 'chrg_tpl': 'charging_template', 'clr_temp_cmd_t': 'color_temp_command_topic', 'clr_temp_stat_t': 'color_temp_state_topic', 'clr_temp_val_tpl': 'color_temp_value_template', + 'cln_t': 'cleaning_topic', + 'cln_tpl': 'cleaning_template', 'cmd_t': 'command_topic', 'curr_temp_t': 'current_temperature_topic', 'dev_cla': 'device_class', + 'dock_t': 'docked_topic', + 'dock_tpl': 'docked_template', + 'err_t': 'error_topic', + 'err_tpl': 'error_template', + 'fanspd_t': 'fan_speed_topic', + 'fanspd_tpl': 'fan_speed_template', + 'fanspd_lst': 'fan_speed_list', 'fx_cmd_t': 'effect_command_topic', 'fx_list': 'effect_list', 'fx_stat_t': 'effect_state_topic', @@ -141,6 +155,7 @@ Supported abbreviations: 'rgb_cmd_t': 'rgb_command_topic', 'rgb_stat_t': 'rgb_state_topic', 'rgb_val_tpl': 'rgb_value_template', + 'send_cmd_t': 'send_command_topic', 'send_if_off': 'send_if_off', 'set_pos_tpl': 'set_position_template', 'set_pos_t': 'set_position_topic', @@ -154,6 +169,7 @@ Supported abbreviations: 'stat_open': 'state_open', 'stat_t': 'state_topic', 'stat_val_tpl': 'state_value_template', + 'sup_feat': 'supported_features', 'swing_mode_cmd_t': 'swing_mode_command_topic', 'swing_mode_stat_tpl': 'swing_mode_state_template', 'swing_mode_stat_t': 'swing_mode_state_topic', From c76db449f76c959b9bb5cc7c5eba021f2d683fb2 Mon Sep 17 00:00:00 2001 From: Austin Drummond Date: Tue, 22 Jan 2019 06:18:56 -0500 Subject: [PATCH 43/57] Add changes for alarm_control_panel.homekit_controller (#7965) * added documenation changes for alarm_control_panel.homekit_controller * alphabetical order for homekitcontroller_alarm_control_panel change * bump version for homekit controller alarm control panel --- ...arm_control_panel.homekit_controller.markdown | 16 ++++++++++++++++ source/_components/homekit_controller.markdown | 1 + 2 files changed, 17 insertions(+) create mode 100644 source/_components/alarm_control_panel.homekit_controller.markdown diff --git a/source/_components/alarm_control_panel.homekit_controller.markdown b/source/_components/alarm_control_panel.homekit_controller.markdown new file mode 100644 index 00000000000..ae24f556192 --- /dev/null +++ b/source/_components/alarm_control_panel.homekit_controller.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "HomeKit Alarm Control Panel" +description: "Instructions how to setup HomeKit security systems within Home Assistant." +date: 2018-12-27 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: apple-homekit.png +ha_category: Alarm Control Panel +ha_iot_class: "Local Polling" +ha_release: 0.86 +--- + +To get your HomeKit security system working with Home Assistant, follow the instructions for the general [HomeKit controller component](/components/homekit_controller/). diff --git a/source/_components/homekit_controller.markdown b/source/_components/homekit_controller.markdown index 13aac56efa0..1992d84b1d8 100644 --- a/source/_components/homekit_controller.markdown +++ b/source/_components/homekit_controller.markdown @@ -22,6 +22,7 @@ ha_iot_class: "Local Polling" There is currently support for the following device types within Home Assistant: +- [Alarm Control Panel](/components/alarm_control_panel.homekit_controller/) - [Climate](/components/climate.homekit_controller/) - [Cover](/components/cover.homekit_controller/) - [Light](/components/light.homekit_controller/) From d735c5d385bfc82a8923535f84d1ce8456be525f Mon Sep 17 00:00:00 2001 From: Jonathan Keljo Date: Tue, 22 Jan 2019 03:17:53 -0800 Subject: [PATCH 44/57] Update greeneye_monitor docs with breaking change. (#7976) * Update greeneye_monitor docs with breaking change. * Update to keep pace with changes in the main PR --- source/_components/greeneye_monitor.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_components/greeneye_monitor.markdown b/source/_components/greeneye_monitor.markdown index 596751358d5..b303f8014bc 100644 --- a/source/_components/greeneye_monitor.markdown +++ b/source/_components/greeneye_monitor.markdown @@ -22,7 +22,7 @@ Configure your GEM(s) to produce binary-format packets (for example, "Bin32 NET" greeneye_monitor: port: 8000 monitors: - - serial_number: YOUR_SERIAL_NUMBER + - serial_number: "YOUR_SERIAL_NUMBER" channels: - number: 1 name: total_power @@ -53,9 +53,9 @@ monitors: type: list keys: serial_number: - description: The last five digits (omitting leading zeroes) of your GEM serial number. + description: Your 8-digit GEM serial number, as it appears in the UI. required: true - type: integer + type: string channels: description: The list of channels that should appear in Home Assistant for this monitor. Data from other channels will be ignored. required: false From b9300784b95288be82f70b1ae90b3f115d440fd0 Mon Sep 17 00:00:00 2001 From: Richard Mitchell Date: Mon, 21 Jan 2019 23:04:35 +0000 Subject: [PATCH 45/57] Correctly map Nest hvac_state to Home Assistant states. (#8114) * Correctly map Nest hvac_state to Home Assistant states. * Avoid the Oxford comma, the standards say --- source/_components/sensor.nest.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/_components/sensor.nest.markdown b/source/_components/sensor.nest.markdown index 801198eb46b..fe730b1a341 100644 --- a/source/_components/sensor.nest.markdown +++ b/source/_components/sensor.nest.markdown @@ -51,12 +51,12 @@ The following conditions are available by device: - operation\_mode - temperature - target - - hvac\_state: The currently active state of the HVAC system, `heating`, `cooling`, or `off`. + - hvac\_state: The currently active state of the HVAC system, `heat`, `cool` or `off` (previously `heating`, `cooling` or `off`). - Nest Protect: - - co\_status: `Ok`, `Warning`, or `Emergency` - - smoke\_status: `Ok`, `Warning`, or `Emergency` + - co\_status: `Ok`, `Warning` or `Emergency` + - smoke\_status: `Ok`, `Warning` or `Emergency` - battery\_health: `Ok` or `Replace` - - color\_status: `gray`, `green`, `yellow`, or `red`. Indicates device status by color in the Nest app UI. It is an aggregate condition for battery+smoke+CO states, and reflects the actual color indicators displayed in the Nest app. + - color\_status: `gray`, `green`, `yellow` or `red`. Indicates device status by color in the Nest app UI. It is an aggregate condition for battery+smoke+CO states, and reflects the actual color indicators displayed in the Nest app. - Nest Camera: none ## {% linkable_title Security State %} From b5868d884c6f68427caa1e9bc6b30eed3a9064d8 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 22 Jan 2019 16:33:47 -0800 Subject: [PATCH 46/57] Update blog posts --- .../2019-01-23-lovelace-released.markdown | 63 ++++++++++++++----- source/_posts/2019-01-23-release-86.markdown | 22 +++++-- 2 files changed, 67 insertions(+), 18 deletions(-) diff --git a/source/_posts/2019-01-23-lovelace-released.markdown b/source/_posts/2019-01-23-lovelace-released.markdown index 4cac5aa2c8a..0d52b11ff62 100644 --- a/source/_posts/2019-01-23-lovelace-released.markdown +++ b/source/_posts/2019-01-23-lovelace-released.markdown @@ -11,25 +11,60 @@ categories: Release-Notes og_image: /images/blog/2019-01-release-86/components.png --- -Lovelace is the default, yay! +Today we're happy to announce that our new Lovelace UI, which has been in beta for the last 8 months, is becoming the new default interface of Home Assistant. With Lovelace we're taking a new approach to building user interfaces for Home Assistant. We're no longer storing the look and feel of your UI in your configuration.yaml, requiring restarts for changes. With Lovelace we're keeping the UI concerns in the UI1, unlocking a whole new set of features: -Started originally inspired by @andrey-git who added Custom UI. [Initial PR](https://github.com/home-assistant/home-assistant-polymer/pull/1205) + - A configuration UI to manage your Lovelace UI including live preview when editing cards. + - Full support for custom cards. + - Fast. Using a static config allows us to build up the UI once. + - Customizable. Each card has many options to configure how it shows it's data. Change themes on a per card basis or override the name or icon of an entity. -Learned that homes are who people are, thinking that we could magically sort it out and build a UI was a naive approach. To work around the magic, components started to store options to influence the magic. +In case you're reading this and want to give it a try right now: we've updated [the Home Assistant demo](https://demo.home-assistant.io). It now features multiple Lovelace configuration examples. The demo is fully interactive, including the configuration UI (accessible via the menu in the top right). -Lovelace is a re-do, we allow users to get full control. Every card, every entity, all yours. Including custom cards. +TODO - rephrase: Interview with Zac about the Lovelace release on the Home Assistant Podcast: https://hasspodcast.io/ha042 . -Thank a ton to the current and former members of the Lovelace team: +1: If you prefer YAML, Lovelace also includes a [YAML mode](/lovelace/yaml-mode/). - - @bramkragten - - @c727 - - @ciotlosm - - @iantrich - - @jeradM - - @thomasloven - - @zsarnett +## {% linkable_title History %} -Because of the ease to customize and share customizations, we've seen a big community be created around Lovelace. They are very active in the #lovelace channel on our chat, and work is shared on [ShareTheLove.io](https://sharethelove.io/) and the [Lovelace section on Awesome HA](https://www.awesome-ha.com/#lovelace-ui). +With Lovelace we've build a foundation that improves things bigly today, but will also allow us add many new exciting features in the future. The main difference with the old UI is that we no longer store any UI concerns in the state machine. +When Home Assistant was started, I came up with an algorithm that would automatically organize the available entities in badges, cards and tabs and show that on the screen. Users demanded more influence so over time, we've added a bunch of components and features who'se main or sole purpose is to influence how the algorithm shows and organizes the UI. -Interview with Zac about the Lovelace release on the Home Assistant Podcast: https://hasspodcast.io/ha042 . +As this kept growing, I realized that we made a mistake: the backend shouldn't be aware of anything in the frontend. It should just deliver the entities and the frontend should figure it out together with the user. + +At the same time as this was happening, we've also had some discussions in the frontend. Users wanted more control on what is shown, when it's shown and how it's shown. Eventually, [@andrey-git] came up with Custom UI for the old interface. This allowed users to do whatever we want. + +Lovelace was built [from the start](https://github.com/home-assistant/architecture/issues/14) to tackle these problems. The inital version completely dropped the algorithm and required users to add each card to their configuration. We went from full automatic UI to nothing. We launched it under the nomer "experimental UI" and it quickly gained traction. People loved the control and the ability to inject custom cards or entity rows at will. + +The enthusiasm was great among our power users, however by going to no automatic UI, we were no longer beginner friendly. A new user would open Home Assistant and it would see a blank, unconfigured UI. This had to be solved or else we would not be able to retain any new users. + +To make the Lovelace UI beginner friendly again, we actually re-introduced our automatic algorithm. However, this time the algorithm will generate a Lovelace configuration. However, this time, if the user no longer agrees with the algorithm, they can take control. By taking control, we'll copy the automatically generated configuration and store it for the user. Now the user is in control and can make any change that it wants. + +To make configuration as easy as possible, Lovelace UI allows (custom) cards to include a config editor. This way the user will be able to quickly edit a card while a live preview shows how the changes look. If a card does not include an editor, the user will be presented with a YAML editor in the browser. + +Because of the ease to customize and share customizations, we've already seen a big community be created around Lovelace. They are very active in the #lovelace channel on [our chat](/join-chat/), and work is shared on [ShareTheLove.io](https://sharethelove.io/) and the [Lovelace section on Awesome HA](https://www.awesome-ha.com/#lovelace-ui). + +## {% linkable_title Credits %} + +Lovelace UI has been 8 months in the making and it has been a big undertaking. We've worked hard and are proud of being able to ship this first version. Lovelace UI would not have been possible without the following current and former members of the Lovelace team: + + - [@balloob] / Paulus Schoutsen + - [@bramkragten] / Bram Kragten + - [@c727] + - [@ciotlosm] + - [@iantrich] + - [@jeradM] + - [@thomasloven] + - [@zsarnett] + +I also want to thank the community for adopting this so eagerly, building a ton of helpful tooling and examples and helping one another to create beautiful UIs for their homes. + +[@andrey-git]: https://github.com/andrey-git +[@balloob]: https://github.com/balloob +[@bramkragten]: https://github.com/bramkragten +[@c727]: https://github.com/c727 +[@ciotlosm]: https://github.com/ciotlosm +[@iantrich]: https://github.com/iantrich +[@jeradM]: https://github.com/jeradM +[@thomasloven]: https://github.com/thomasloven +[@zsarnett]: https://github.com/zsarnett diff --git a/source/_posts/2019-01-23-release-86.markdown b/source/_posts/2019-01-23-release-86.markdown index df97f746626..3f0a039f7e2 100644 --- a/source/_posts/2019-01-23-release-86.markdown +++ b/source/_posts/2019-01-23-release-86.markdown @@ -1,7 +1,7 @@ --- layout: post -title: "0.86: New Lovelace UI! - TBD UPDATE DATE" -description: "Lovelace is in, Zigbee Control Panel is in." +title: "0.86: New Lovelace UI and Zigbee Management Panel! - TBD UPDATE DATE" +description: "Lovelace is in, Zigbee Control Panel is in. New demo is in." date: 2019-01-16 00:01:00 date_formatted: "January 23, 2019" author: Paulus Schoutsen @@ -11,9 +11,23 @@ categories: Release-Notes og_image: /images/blog/2019-01-release-86/components.png --- -Lovelace is the default! Such a great achievement that it warranted it's own [blog post](#). +Today we're releasing Home Assistant 0.86. And oh boy, this is an amazing release. First awesome thing: Lovelace is now the default. We have a lot to talk about, so we created a separate blog post just for the Lovelace release [here](/2019/01/16/lovelace-released/). + +Next up, we've updated the [Home Assistant demo](https://demo.home-assistant.io). It's snappier, it's sazzier, and best of all: it contains four fully functional Lovelace user interfaces that you can play with: change the states or go in config mode and add, edit or re-organize the cards. We've set it up in such a way now that the demo will be build on every release of the frontend. Right now the demo only includes Lovelace, but we'll add support for the other panels in the future. + +Talking about panels in the frontend. This release includes a brand new Zigbee Management panel to manage your Zigbee network thanks to the hard work by [@dmulcahey] and [@Adminiuga]. XXX-PLACEHOLDER-XXX. + +

+ Screenshot of the Zigbee management panel. + Screenshot of the Zigbee management panel. +

+ +This release also includes two noteworthy breaking changes. One is a follow-up on the slugify breaking change from last release. We did not update the validation check for config options that need to be valid slugs. This means that some of your config values might be invalid. Keep an eye at the console as we have a new message to tell you which ones are wrong. + +This issue also impacts the entity registry, which could contain in some rare cases invalid entity IDs. Expect entity IDs to change if they contained a double underscore (which becomes 1) or if they ended in an underscore (which will be removed). + +Another noteworthy breaking change (sorry!), is that the automation `time` trigger has been split into two: `time` and `time_pattern`. If you had a time trigger containing the keys `hours`, `minutes` or `seconds`, update the platform from `name` to `time_pattern`. -New Zigbee control panel. ## {% linkable_title New Platforms %} From a4dcc136b3520b0e0d8275a7ece470e6757bd841 Mon Sep 17 00:00:00 2001 From: Ian Richardson Date: Tue, 22 Jan 2019 19:49:19 -0600 Subject: [PATCH 47/57] edits --- .../2019-01-23-lovelace-released.markdown | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/source/_posts/2019-01-23-lovelace-released.markdown b/source/_posts/2019-01-23-lovelace-released.markdown index 0d52b11ff62..6a2cee090fd 100644 --- a/source/_posts/2019-01-23-lovelace-released.markdown +++ b/source/_posts/2019-01-23-lovelace-released.markdown @@ -13,34 +13,37 @@ og_image: /images/blog/2019-01-release-86/components.png Today we're happy to announce that our new Lovelace UI, which has been in beta for the last 8 months, is becoming the new default interface of Home Assistant. With Lovelace we're taking a new approach to building user interfaces for Home Assistant. We're no longer storing the look and feel of your UI in your configuration.yaml, requiring restarts for changes. With Lovelace we're keeping the UI concerns in the UI1, unlocking a whole new set of features: - - A configuration UI to manage your Lovelace UI including live preview when editing cards. - - Full support for custom cards. + - UI Editor. A configuration UI to manage your Lovelace UI including live preview when editing cards. - Fast. Using a static config allows us to build up the UI once. - - Customizable. Each card has many options to configure how it shows it's data. Change themes on a per card basis or override the name or icon of an entity. + - Customizable. + - Cards have numerous options to configure how your data is presented. + - Themes; even at a per card basis. + - Ability to override names and icons of entities. + - Custom Cards from our amazing community are fully supported. In case you're reading this and want to give it a try right now: we've updated [the Home Assistant demo](https://demo.home-assistant.io). It now features multiple Lovelace configuration examples. The demo is fully interactive, including the configuration UI (accessible via the menu in the top right). TODO - rephrase: Interview with Zac about the Lovelace release on the Home Assistant Podcast: https://hasspodcast.io/ha042 . -1: If you prefer YAML, Lovelace also includes a [YAML mode](/lovelace/yaml-mode/). +1: If you prefer YAML, Lovelace also includes a [YAML mode](/lovelace/yaml-mode/) that supports the use of `!include` and `!secret`. ## {% linkable_title History %} -With Lovelace we've build a foundation that improves things bigly today, but will also allow us add many new exciting features in the future. The main difference with the old UI is that we no longer store any UI concerns in the state machine. +With Lovelace we've built a foundation that not only provides a lean and sleek interface, but will also allow us to add many new exciting features in the future. The main difference with the old UI is that we no longer store any UI concerns in the state machine. -When Home Assistant was started, I came up with an algorithm that would automatically organize the available entities in badges, cards and tabs and show that on the screen. Users demanded more influence so over time, we've added a bunch of components and features who'se main or sole purpose is to influence how the algorithm shows and organizes the UI. +When Home Assistant was started, I came up with an algorithm that would automatically organize the available entities in badges, cards and tabs; and then show that on the screen. Users demanded more influence; so over time, we've added a bunch of components and features who'se main or sole purpose were to influence how the algorithm shows and organizes the UI. -As this kept growing, I realized that we made a mistake: the backend shouldn't be aware of anything in the frontend. It should just deliver the entities and the frontend should figure it out together with the user. +As this kept growing, I realized that we had made a mistake: the backend shouldn't be aware of anything in the frontend. It should just deliver the entities and the frontend should figure out how to display things together with the user. -At the same time as this was happening, we've also had some discussions in the frontend. Users wanted more control on what is shown, when it's shown and how it's shown. Eventually, [@andrey-git] came up with Custom UI for the old interface. This allowed users to do whatever we want. +At the same time as this was happening, we also had some discussions about the development of the frontend. Users wanted more control on what is shown, when it's shown and how it's shown. Eventually, [@andrey-git] came up with Custom UI for the old interface. This allowed users to do whatever they wanted. -Lovelace was built [from the start](https://github.com/home-assistant/architecture/issues/14) to tackle these problems. The inital version completely dropped the algorithm and required users to add each card to their configuration. We went from full automatic UI to nothing. We launched it under the nomer "experimental UI" and it quickly gained traction. People loved the control and the ability to inject custom cards or entity rows at will. +Lovelace was built [from the start](https://github.com/home-assistant/architecture/issues/14) to tackle these problems. The inital version completely dropped the algorithm and required users to add each card to their configuration. We went from afully automatic UI to nothing. We launched it under the nomer "experimental UI" and it quickly gained traction. People loved the control and the ability to inject custom cards or entity rows at will. -The enthusiasm was great among our power users, however by going to no automatic UI, we were no longer beginner friendly. A new user would open Home Assistant and it would see a blank, unconfigured UI. This had to be solved or else we would not be able to retain any new users. +The enthusiasm was great among our power users, however switching away from an automatic UI, we were no longer beginner-friendly. A new user would open Home Assistant and they would see a blank, unconfigured UI. This had to be solved or else we would not be able to retain any new users. -To make the Lovelace UI beginner friendly again, we actually re-introduced our automatic algorithm. However, this time the algorithm will generate a Lovelace configuration. However, this time, if the user no longer agrees with the algorithm, they can take control. By taking control, we'll copy the automatically generated configuration and store it for the user. Now the user is in control and can make any change that it wants. +To make the Lovelace UI beginner-friendly again, we actually re-introduced our automatic algorithm. However, this time the algorithm generates a Lovelace configuration that matches existing entities/groups to our core cards. And if a user doesn't like the automatic configuration, they can take control and configure it to their liking. -To make configuration as easy as possible, Lovelace UI allows (custom) cards to include a config editor. This way the user will be able to quickly edit a card while a live preview shows how the changes look. If a card does not include an editor, the user will be presented with a YAML editor in the browser. +To make configuration as easy as possible, Lovelace UI allows (custom) cards to include a config editor. This way the user will be able to quickly edit a card while a live preview shows how the changes look. If a card does not include an editor (yet), the user will be presented with a YAML editor in the browser. Because of the ease to customize and share customizations, we've already seen a big community be created around Lovelace. They are very active in the #lovelace channel on [our chat](/join-chat/), and work is shared on [ShareTheLove.io](https://sharethelove.io/) and the [Lovelace section on Awesome HA](https://www.awesome-ha.com/#lovelace-ui). @@ -52,7 +55,7 @@ Lovelace UI has been 8 months in the making and it has been a big undertaking. W - [@bramkragten] / Bram Kragten - [@c727] - [@ciotlosm] - - [@iantrich] + - [@iantrich] / Ian Richardson - [@jeradM] - [@thomasloven] - [@zsarnett] From 788f15f279025dbdd6c82c4c47b4fd2eab04abf2 Mon Sep 17 00:00:00 2001 From: Ian Richardson Date: Tue, 22 Jan 2019 22:41:43 -0600 Subject: [PATCH 48/57] Update 2019-01-23-lovelace-released.markdown --- source/_posts/2019-01-23-lovelace-released.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2019-01-23-lovelace-released.markdown b/source/_posts/2019-01-23-lovelace-released.markdown index 6a2cee090fd..74b0709780b 100644 --- a/source/_posts/2019-01-23-lovelace-released.markdown +++ b/source/_posts/2019-01-23-lovelace-released.markdown @@ -37,7 +37,7 @@ As this kept growing, I realized that we had made a mistake: the backend shouldn At the same time as this was happening, we also had some discussions about the development of the frontend. Users wanted more control on what is shown, when it's shown and how it's shown. Eventually, [@andrey-git] came up with Custom UI for the old interface. This allowed users to do whatever they wanted. -Lovelace was built [from the start](https://github.com/home-assistant/architecture/issues/14) to tackle these problems. The inital version completely dropped the algorithm and required users to add each card to their configuration. We went from afully automatic UI to nothing. We launched it under the nomer "experimental UI" and it quickly gained traction. People loved the control and the ability to inject custom cards or entity rows at will. +Lovelace was built [from the start](https://github.com/home-assistant/architecture/issues/14) to tackle these problems. The inital version completely dropped the algorithm and required users to add each card to their configuration. We went from a fully automatic UI to nothing. We launched it under the nomer "experimental UI" and it quickly gained traction. People loved the control and the ability to inject custom cards or entity rows at will. The enthusiasm was great among our power users, however switching away from an automatic UI, we were no longer beginner-friendly. A new user would open Home Assistant and they would see a blank, unconfigured UI. This had to be solved or else we would not be able to retain any new users. From 9461169701f09e23e2568f190492920a17dedeb7 Mon Sep 17 00:00:00 2001 From: Ian Richardson Date: Wed, 23 Jan 2019 05:55:35 -0600 Subject: [PATCH 49/57] Update 2019-01-23-release-86.markdown (#8246) --- source/_posts/2019-01-23-release-86.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2019-01-23-release-86.markdown b/source/_posts/2019-01-23-release-86.markdown index 3f0a039f7e2..f49890c3af1 100644 --- a/source/_posts/2019-01-23-release-86.markdown +++ b/source/_posts/2019-01-23-release-86.markdown @@ -13,7 +13,7 @@ og_image: /images/blog/2019-01-release-86/components.png Today we're releasing Home Assistant 0.86. And oh boy, this is an amazing release. First awesome thing: Lovelace is now the default. We have a lot to talk about, so we created a separate blog post just for the Lovelace release [here](/2019/01/16/lovelace-released/). -Next up, we've updated the [Home Assistant demo](https://demo.home-assistant.io). It's snappier, it's sazzier, and best of all: it contains four fully functional Lovelace user interfaces that you can play with: change the states or go in config mode and add, edit or re-organize the cards. We've set it up in such a way now that the demo will be build on every release of the frontend. Right now the demo only includes Lovelace, but we'll add support for the other panels in the future. +Next up, we've updated the [Home Assistant demo](https://demo.home-assistant.io). It's snappier, it's snazzier, and best of all: it contains four fully functional Lovelace user interfaces that you can play with: change the states or go in config mode and add, edit or re-organize the cards. We've set it up in such a way now that the demo will be built on every release of the frontend. Right now the demo only includes Lovelace, but we'll add support for the other panels in the future. Talking about panels in the frontend. This release includes a brand new Zigbee Management panel to manage your Zigbee network thanks to the hard work by [@dmulcahey] and [@Adminiuga]. XXX-PLACEHOLDER-XXX. From 09418b1d14023b351ea516e5a171bf3363acdb16 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 23 Jan 2019 10:21:13 -0800 Subject: [PATCH 50/57] Remove demo --- source/demo/core.js | 4 ---- source/demo/data.js | 1 - source/demo/favicon-192x192.png | Bin 13472 -> 0 bytes source/demo/favicon-apple-180x180.png | Bin 13441 -> 0 bytes source/demo/favicon.ico | Bin 17957 -> 0 bytes source/demo/frontend.html | 5 ----- source/demo/images/config_philips_hue.jpg | Bin 8353 -> 0 bytes source/demo/images/thrones.jpg | Bin 45167 -> 0 bytes source/demo/manifest.json | 13 ------------- source/demo/panels/ha-panel-dev-event.html | 1 - source/demo/panels/ha-panel-dev-info.html | 2 -- source/demo/panels/ha-panel-dev-service.html | 1 - source/demo/panels/ha-panel-dev-state.html | 1 - source/demo/panels/ha-panel-dev-template.html | 2 -- source/demo/panels/ha-panel-history.html | 4 ---- source/demo/panels/ha-panel-iframe.html | 1 - source/demo/panels/ha-panel-logbook.html | 4 ---- source/demo/panels/ha-panel-map.html | 4 ---- source/demo/webcam.jpg | Bin 51329 -> 0 bytes source/demo/webcomponents-lite.min.js | 12 ------------ 20 files changed, 55 deletions(-) delete mode 100644 source/demo/core.js delete mode 100644 source/demo/data.js delete mode 100644 source/demo/favicon-192x192.png delete mode 100644 source/demo/favicon-apple-180x180.png delete mode 100644 source/demo/favicon.ico delete mode 100644 source/demo/frontend.html delete mode 100644 source/demo/images/config_philips_hue.jpg delete mode 100644 source/demo/images/thrones.jpg delete mode 100644 source/demo/manifest.json delete mode 100644 source/demo/panels/ha-panel-dev-event.html delete mode 100644 source/demo/panels/ha-panel-dev-info.html delete mode 100644 source/demo/panels/ha-panel-dev-service.html delete mode 100644 source/demo/panels/ha-panel-dev-state.html delete mode 100644 source/demo/panels/ha-panel-dev-template.html delete mode 100644 source/demo/panels/ha-panel-history.html delete mode 100644 source/demo/panels/ha-panel-iframe.html delete mode 100644 source/demo/panels/ha-panel-logbook.html delete mode 100644 source/demo/panels/ha-panel-map.html delete mode 100644 source/demo/webcam.jpg delete mode 100644 source/demo/webcomponents-lite.min.js diff --git a/source/demo/core.js b/source/demo/core.js deleted file mode 100644 index 70e13f1f149..00000000000 --- a/source/demo/core.js +++ /dev/null @@ -1,4 +0,0 @@ -!function(){"use strict";function t(t,e){return e={exports:{}},t(e,e.exports),e.exports}function e(t,e){var n=e.authToken,r=e.host;return Ae({authToken:n,host:r,isValidating:!0,isInvalid:!1,errorMessage:""})}function n(){return De.getInitialState()}function r(t,e){var n=e.errorMessage;return t.withMutations(function(t){return t.set("isValidating",!1).set("isInvalid",!0).set("errorMessage",n)})}function i(t,e){var n=e.authToken,r=e.host;return ze({authToken:n,host:r})}function o(){return Re.getInitialState()}function u(t,e){var n=e.rememberAuth;return n}function a(t){return t.withMutations(function(t){t.set("isStreaming",!0).set("useStreaming",!0).set("hasError",!1)})}function s(t){return t.withMutations(function(t){t.set("isStreaming",!1).set("useStreaming",!1).set("hasError",!1)})}function c(t){return t.withMutations(function(t){t.set("isStreaming",!1).set("hasError",!0)})}function f(){return Pe.getInitialState()}function h(t,e){var n=e.model,r=e.result,i=e.params,o=n.entity;if(!r)return t;var u=i.replace?Ye({}):t.get(o),a=Array.isArray(r)?r:[r],s=n.fromJSON||Ye;return t.set(o,u.withMutations(function(t){for(var e=0;e0?i=setTimeout(r,e-c):(i=null,n||(s=t.apply(u,o),i||(u=o=null)))}var i,o,u,a,s;null==e&&(e=100);var c=function(){u=this,o=arguments,a=(new Date).getTime();var c=n&&!i;return i||(i=setTimeout(r,e)),c&&(s=t.apply(u,o),u=o=null),s};return c.clear=function(){i&&(clearTimeout(i),i=null)},c}function N(t,e){var n=e.component;return t.push(n)}function k(t,e){var n=e.components;return ur(n)}function U(){return ar.getInitialState()}function P(t,e){var n=e.latitude,r=e.longitude,i=e.location_name,o=e.temperature_unit,u=e.time_zone,a=e.version;return cr({latitude:n,longitude:r,location_name:i,temperature_unit:o,time_zone:u,serverVersion:a})}function H(){return fr.getInitialState()}function x(t,e){t.dispatch(ir.SERVER_CONFIG_LOADED,e)}function V(t){nn(t,"GET","config").then(function(e){return x(t,e)})}function q(t,e){t.dispatch(ir.COMPONENT_LOADED,{component:e})}function F(t){return[["serverComponent"],function(e){return e.contains(t)}]}function G(t){t.registerStores({serverComponent:ar,serverConfig:fr})}function K(t,e){var n=e.pane;return n}function Y(){return Er.getInitialState()}function B(t,e){var n=e.panels;return br(n)}function J(){return Or.getInitialState()}function W(t,e){var n=e.show;return!!n}function X(){return Tr.getInitialState()}function Q(t,e){t.dispatch(mr.SHOW_SIDEBAR,{show:e})}function Z(t,e){t.dispatch(mr.NAVIGATE,{pane:e})}function $(t,e){t.dispatch(mr.PANELS_LOADED,{panels:e})}function tt(t,e){var n=e.entityId;return n}function et(){return Nr.getInitialState()}function nt(t,e){t.dispatch(Lr.SELECT_ENTITY,{entityId:e})}function rt(t){t.dispatch(Lr.SELECT_ENTITY,{entityId:null})}function it(t){return!t||(new Date).getTime()-t>6e4}function ot(t,e){var n=e.date;return n.toISOString()}function ut(){return Hr.getInitialState()}function at(t,e){var n=e.date,r=e.stateHistory;return 0===r.length?t.set(n,Vr({})):t.withMutations(function(t){r.forEach(function(e){return t.setIn([n,e[0].entity_id],Vr(e.map(sn.fromJSON)))})})}function st(){return qr.getInitialState()}function ct(t,e){var n=e.stateHistory;return t.withMutations(function(t){n.forEach(function(e){return t.set(e[0].entity_id,Yr(e.map(sn.fromJSON)))})})}function ft(){return Br.getInitialState()}function ht(t,e){var n=e.stateHistory,r=(new Date).getTime();return t.withMutations(function(t){n.forEach(function(e){return t.set(e[0].entity_id,r)}),history.length>1&&t.set(Xr,r)})}function lt(){return Qr.getInitialState()}function pt(t,e){t.dispatch(Ur.ENTITY_HISTORY_DATE_SELECTED,{date:e})}function _t(t,e){void 0===e&&(e=null),t.dispatch(Ur.RECENT_ENTITY_HISTORY_FETCH_START,{});var n="history/period";return null!==e&&(n+="?filter_entity_id="+e),nn(t,"GET",n).then(function(e){return t.dispatch(Ur.RECENT_ENTITY_HISTORY_FETCH_SUCCESS,{stateHistory:e})},function(){return t.dispatch(Ur.RECENT_ENTITY_HISTORY_FETCH_ERROR,{})})}function dt(t,e){return t.dispatch(Ur.ENTITY_HISTORY_FETCH_START,{date:e}),nn(t,"GET","history/period/"+e).then(function(n){return t.dispatch(Ur.ENTITY_HISTORY_FETCH_SUCCESS,{date:e,stateHistory:n})},function(){return t.dispatch(Ur.ENTITY_HISTORY_FETCH_ERROR,{})})}function vt(t){var e=t.evaluate(ti);return dt(t,e)}function yt(t){t.registerStores({currentEntityHistoryDate:Hr,entityHistory:qr,isLoadingEntityHistory:Gr,recentEntityHistory:Br,recentEntityHistoryUpdated:Qr})}function St(t){t.registerStores({moreInfoEntityId:Nr})}function mt(t,e){var n=e.model,r=e.result,i=e.params;if(null===t||"entity"!==n.entity||!i.replace)return t;for(var o=0;oXo}function ue(t){t.registerStores({currentLogbookDate:ko,isLoadingLogbookEntries:Po,logbookEntries:Go,logbookEntriesUpdated:Bo})}function ae(t,e){return nn(t,"POST","template",{template:e})}function se(t){return t.set("isListening",!0)}function ce(t,e){var n=e.interimTranscript,r=e.finalTranscript;return t.withMutations(function(t){return t.set("isListening",!0).set("isTransmitting",!1).set("interimTranscript",n).set("finalTranscript",r)})}function fe(t,e){var n=e.finalTranscript;return t.withMutations(function(t){return t.set("isListening",!1).set("isTransmitting",!0).set("interimTranscript","").set("finalTranscript",n)})}function he(){return pu.getInitialState()}function le(){return pu.getInitialState()}function pe(){return pu.getInitialState()}function _e(t){return _u[t.hassId]}function de(t){var e=_e(t);if(e){var n=e.finalTranscript||e.interimTranscript;t.dispatch(fu.VOICE_TRANSMITTING,{finalTranscript:n}),Qn.callService(t,"conversation","process",{text:n}).then(function(){t.dispatch(fu.VOICE_DONE)},function(){t.dispatch(fu.VOICE_ERROR)})}}function ve(t){var e=_e(t);e&&(e.recognition.stop(),_u[t.hassId]=!1)}function ye(t){de(t),ve(t)}function Se(t){var e=ye.bind(null,t);e();var n=new webkitSpeechRecognition;_u[t.hassId]={recognition:n,interimTranscript:"",finalTranscript:""},n.interimResults=!0,n.onstart=function(){return t.dispatch(fu.VOICE_START)},n.onerror=function(){return t.dispatch(fu.VOICE_ERROR)},n.onend=e,n.onresult=function(e){var n=_e(t);if(n){for(var r="",i="",o=e.resultIndex;o=n)}function c(t,e){return h(t,e,0)}function f(t,e){return h(t,e,e)}function h(t,e,n){return void 0===t?n:t<0?Math.max(0,e+t):void 0===e?t:Math.min(e,t)}function l(t){return v(t)?t:C(t)}function p(t){return y(t)?t:z(t)}function _(t){return S(t)?t:R(t)}function d(t){return v(t)&&!m(t)?t:M(t)}function v(t){return!(!t||!t[dn])}function y(t){return!(!t||!t[vn])}function S(t){return!(!t||!t[yn])}function m(t){return y(t)||S(t)}function g(t){return!(!t||!t[Sn])}function E(t){this.next=t}function I(t,e,n,r){var i=0===t?e:1===t?n:[e,n];return r?r.value=i:r={value:i,done:!1},r}function b(){return{value:void 0,done:!0}}function O(t){return!!A(t)}function w(t){return t&&"function"==typeof t.next}function T(t){var e=A(t);return e&&e.call(t)}function A(t){var e=t&&(In&&t[In]||t[bn]);if("function"==typeof e)return e}function D(t){return t&&"number"==typeof t.length}function C(t){return null===t||void 0===t?P():v(t)?t.toSeq():V(t)}function z(t){return null===t||void 0===t?P().toKeyedSeq():v(t)?y(t)?t.toSeq():t.fromEntrySeq():H(t)}function R(t){return null===t||void 0===t?P():v(t)?y(t)?t.entrySeq():t.toIndexedSeq():x(t)}function M(t){return(null===t||void 0===t?P():v(t)?y(t)?t.entrySeq():t:x(t)).toSetSeq()}function L(t){this._array=t,this.size=t.length}function j(t){var e=Object.keys(t);this._object=t,this._keys=e,this.size=e.length}function N(t){this._iterable=t,this.size=t.length||t.size}function k(t){this._iterator=t,this._iteratorCache=[]}function U(t){return!(!t||!t[wn])}function P(){return Tn||(Tn=new L([]))}function H(t){var e=Array.isArray(t)?new L(t).fromEntrySeq():w(t)?new k(t).fromEntrySeq():O(t)?new N(t).fromEntrySeq():"object"==typeof t?new j(t):void 0;if(!e)throw new TypeError("Expected Array or iterable object of [k, v] entries, or keyed object: "+t);return e}function x(t){var e=q(t);if(!e)throw new TypeError("Expected Array or iterable object of values: "+t);return e}function V(t){var e=q(t)||"object"==typeof t&&new j(t);if(!e)throw new TypeError("Expected Array or iterable object of values, or keyed object: "+t);return e}function q(t){return D(t)?new L(t):w(t)?new k(t):O(t)?new N(t):void 0}function F(t,e,n,r){var i=t._cache;if(i){for(var o=i.length-1,u=0;u<=o;u++){var a=i[n?o-u:u];if(e(a[1],r?a[0]:u,t)===!1)return u+1}return u}return t.__iterateUncached(e,n)}function G(t,e,n,r){var i=t._cache;if(i){var o=i.length-1,u=0;return new E(function(){var t=i[n?o-u:u];return u++>o?b():I(e,r?t[0]:u-1,t[1])})}return t.__iteratorUncached(e,n)}function K(){throw TypeError("Abstract")}function Y(){}function B(){}function J(){}function W(t,e){if(t===e||t!==t&&e!==e)return!0;if(!t||!e)return!1;if("function"==typeof t.valueOf&&"function"==typeof e.valueOf){if(t=t.valueOf(),e=e.valueOf(),t===e||t!==t&&e!==e)return!0;if(!t||!e)return!1}return!("function"!=typeof t.equals||"function"!=typeof e.equals||!t.equals(e))}function X(t,e){return e?Q(e,t,"",{"":t}):Z(t)}function Q(t,e,n,r){return Array.isArray(e)?t.call(r,n,R(e).map(function(n,r){return Q(t,n,r,e)})):$(e)?t.call(r,n,z(e).map(function(n,r){return Q(t,n,r,e)})):e}function Z(t){return Array.isArray(t)?R(t).map(Z).toList():$(t)?z(t).map(Z).toMap():t}function $(t){return t&&(t.constructor===Object||void 0===t.constructor)}function tt(t){return t>>>1&1073741824|3221225471&t}function et(t){if(t===!1||null===t||void 0===t)return 0;if("function"==typeof t.valueOf&&(t=t.valueOf(),t===!1||null===t||void 0===t))return 0;if(t===!0)return 1;var e=typeof t;if("number"===e){var n=0|t;for(n!==t&&(n^=4294967295*t);t>4294967295;)t/=4294967295,n^=t;return tt(n)}return"string"===e?t.length>jn?nt(t):rt(t):"function"==typeof t.hashCode?t.hashCode():it(t)}function nt(t){var e=Un[t];return void 0===e&&(e=rt(t),kn===Nn&&(kn=0,Un={}),kn++,Un[t]=e),e}function rt(t){for(var e=0,n=0;n0)switch(t.nodeType){case 1:return t.uniqueID;case 9:return t.documentElement&&t.documentElement.uniqueID}}function ut(t,e){if(!t)throw new Error(e)}function at(t){ut(t!==1/0,"Cannot perform this action with an infinite size.")}function st(t,e){this._iter=t,this._useKeys=e,this.size=t.size}function ct(t){this._iter=t,this.size=t.size}function ft(t){this._iter=t,this.size=t.size}function ht(t){this._iter=t,this.size=t.size}function lt(t){var e=Lt(t);return e._iter=t,e.size=t.size,e.flip=function(){return t},e.reverse=function(){var e=t.reverse.apply(this);return e.flip=function(){return t.reverse()},e},e.has=function(e){return t.includes(e)},e.includes=function(e){return t.has(e)},e.cacheResult=jt,e.__iterateUncached=function(e,n){var r=this;return t.__iterate(function(t,n){return e(n,t,r)!==!1},n)},e.__iteratorUncached=function(e,n){if(e===En){var r=t.__iterator(e,n);return new E(function(){var t=r.next();if(!t.done){var e=t.value[0];t.value[0]=t.value[1],t.value[1]=e}return t})}return t.__iterator(e===gn?mn:gn,n)},e}function pt(t,e,n){var r=Lt(t);return r.size=t.size,r.has=function(e){return t.has(e)},r.get=function(r,i){var o=t.get(r,ln);return o===ln?i:e.call(n,o,r,t)},r.__iterateUncached=function(r,i){var o=this;return t.__iterate(function(t,i,u){return r(e.call(n,t,i,u),i,o)!==!1},i)},r.__iteratorUncached=function(r,i){var o=t.__iterator(En,i);return new E(function(){var i=o.next();if(i.done)return i;var u=i.value,a=u[0];return I(r,a,e.call(n,u[1],a,t),i)})},r}function _t(t,e){var n=Lt(t);return n._iter=t,n.size=t.size,n.reverse=function(){return t},t.flip&&(n.flip=function(){var e=lt(t);return e.reverse=function(){return t.flip()},e}),n.get=function(n,r){return t.get(e?n:-1-n,r)},n.has=function(n){return t.has(e?n:-1-n)},n.includes=function(e){return t.includes(e)},n.cacheResult=jt,n.__iterate=function(e,n){var r=this;return t.__iterate(function(t,n){return e(t,n,r)},!n)},n.__iterator=function(e,n){return t.__iterator(e,!n)},n}function dt(t,e,n,r){var i=Lt(t);return r&&(i.has=function(r){var i=t.get(r,ln);return i!==ln&&!!e.call(n,i,r,t)},i.get=function(r,i){var o=t.get(r,ln);return o!==ln&&e.call(n,o,r,t)?o:i}),i.__iterateUncached=function(i,o){var u=this,a=0;return t.__iterate(function(t,o,s){if(e.call(n,t,o,s))return a++,i(t,r?o:a-1,u)},o),a},i.__iteratorUncached=function(i,o){var u=t.__iterator(En,o),a=0;return new E(function(){for(;;){var o=u.next();if(o.done)return o;var s=o.value,c=s[0],f=s[1];if(e.call(n,f,c,t))return I(i,r?c:a++,f,o)}})},i}function vt(t,e,n){var r=Ut().asMutable();return t.__iterate(function(i,o){r.update(e.call(n,i,o,t),0,function(t){return t+1})}),r.asImmutable()}function yt(t,e,n){var r=y(t),i=(g(t)?be():Ut()).asMutable();t.__iterate(function(o,u){i.update(e.call(n,o,u,t),function(t){return t=t||[],t.push(r?[u,o]:o),t})});var o=Mt(t);return i.map(function(e){return Ct(t,o(e))})}function St(t,e,n,r){var i=t.size;if(void 0!==e&&(e=0|e),void 0!==n&&(n=0|n),s(e,n,i))return t;var o=c(e,i),a=f(n,i);if(o!==o||a!==a)return St(t.toSeq().cacheResult(),e,n,r);var h,l=a-o;l===l&&(h=l<0?0:l);var p=Lt(t);return p.size=0===h?h:t.size&&h||void 0,!r&&U(t)&&h>=0&&(p.get=function(e,n){return e=u(this,e),e>=0&&eh)return b();var t=i.next();return r||e===gn?t:e===mn?I(e,a-1,void 0,t):I(e,a-1,t.value[1],t)})},p}function mt(t,e,n){var r=Lt(t);return r.__iterateUncached=function(r,i){var o=this;if(i)return this.cacheResult().__iterate(r,i);var u=0;return t.__iterate(function(t,i,a){return e.call(n,t,i,a)&&++u&&r(t,i,o)}),u},r.__iteratorUncached=function(r,i){var o=this;if(i)return this.cacheResult().__iterator(r,i);var u=t.__iterator(En,i),a=!0;return new E(function(){if(!a)return b();var t=u.next();if(t.done)return t;var i=t.value,s=i[0],c=i[1];return e.call(n,c,s,o)?r===En?t:I(r,s,c,t):(a=!1,b())})},r}function gt(t,e,n,r){var i=Lt(t);return i.__iterateUncached=function(i,o){var u=this;if(o)return this.cacheResult().__iterate(i,o);var a=!0,s=0;return t.__iterate(function(t,o,c){if(!a||!(a=e.call(n,t,o,c)))return s++,i(t,r?o:s-1,u)}),s},i.__iteratorUncached=function(i,o){var u=this;if(o)return this.cacheResult().__iterator(i,o);var a=t.__iterator(En,o),s=!0,c=0;return new E(function(){var t,o,f;do{if(t=a.next(),t.done)return r||i===gn?t:i===mn?I(i,c++,void 0,t):I(i,c++,t.value[1],t);var h=t.value;o=h[0],f=h[1],s&&(s=e.call(n,f,o,u))}while(s);return i===En?t:I(i,o,f,t)})},i}function Et(t,e){var n=y(t),r=[t].concat(e).map(function(t){return v(t)?n&&(t=p(t)):t=n?H(t):x(Array.isArray(t)?t:[t]),t}).filter(function(t){return 0!==t.size});if(0===r.length)return t;if(1===r.length){var i=r[0];if(i===t||n&&y(i)||S(t)&&S(i))return i}var o=new L(r);return n?o=o.toKeyedSeq():S(t)||(o=o.toSetSeq()),o=o.flatten(!0),o.size=r.reduce(function(t,e){if(void 0!==t){var n=e.size;if(void 0!==n)return t+n}},0),o}function It(t,e,n){var r=Lt(t);return r.__iterateUncached=function(r,i){function o(t,s){var c=this;t.__iterate(function(t,i){return(!e||s0}function Dt(t,e,n){var r=Lt(t);return r.size=new L(n).map(function(t){return t.size}).min(),r.__iterate=function(t,e){for(var n,r=this,i=this.__iterator(gn,e),o=0;!(n=i.next()).done&&t(n.value,o++,r)!==!1;);return o},r.__iteratorUncached=function(t,r){var i=n.map(function(t){return t=l(t),T(r?t.reverse():t)}),o=0,u=!1;return new E(function(){var n;return u||(n=i.map(function(t){return t.next()}),u=n.some(function(t){return t.done})),u?b():I(t,o++,e.apply(null,n.map(function(t){return t.value})))})},r}function Ct(t,e){return U(t)?e:t.constructor(e)}function zt(t){if(t!==Object(t))throw new TypeError("Expected [K, V] tuple: "+t)}function Rt(t){return at(t.size),o(t)}function Mt(t){return y(t)?p:S(t)?_:d}function Lt(t){return Object.create((y(t)?z:S(t)?R:M).prototype)}function jt(){return this._iter.cacheResult?(this._iter.cacheResult(),this.size=this._iter.size,this):C.prototype.cacheResult.call(this)}function Nt(t,e){return t>e?1:t>>n)&hn,a=(0===n?r:r>>>n)&hn,s=u===a?[Zt(t,e,n+cn,r,i)]:(o=new Ft(e,r,i),u>>=1)u[a]=1&n?e[o++]:void 0;return u[r]=i,new Vt(t,o+1,u)}function ne(t,e,n){for(var r=[],i=0;i>1&1431655765,t=(858993459&t)+(t>>2&858993459),t=t+(t>>4)&252645135,t+=t>>8,t+=t>>16,127&t}function ae(t,e,n,r){var o=r?t:i(t);return o[e]=n,o}function se(t,e,n,r){var i=t.length+1;if(r&&e+1===i)return t[e]=n,t;for(var o=new Array(i),u=0,a=0;a0&&ro?0:o-n,c=u-n;return c>fn&&(c=fn),function(){if(i===c)return Bn;var t=e?--c:i++;return r&&r[t]}}function i(t,r,i){var a,s=t&&t.array,c=i>o?0:o-i>>r,f=(u-i>>r)+1;return f>fn&&(f=fn),function(){for(;;){if(a){var t=a();if(t!==Bn)return t;a=null}if(c===f)return Bn;var o=e?--f:c++;a=n(s&&s[o],r-cn,i+(o<=t.size||n<0)return t.withMutations(function(t){n<0?ge(t,n).set(0,r):ge(t,0,n+1).set(n,r)});n+=t._origin;var i=t._tail,o=t._root,a=e(_n);return n>=Ie(t._capacity)?i=ye(i,t.__ownerID,0,n,r,a):o=ye(o,t.__ownerID,t._level,n,r,a),a.value?t.__ownerID?(t._root=o,t._tail=i,t.__hash=void 0,t.__altered=!0,t):_e(t._origin,t._capacity,t._level,o,i):t}function ye(t,e,r,i,o,u){var a=i>>>r&hn,s=t&&a0){var f=t&&t.array[a],h=ye(f,e,r-cn,i,o,u);return h===f?t:(c=Se(t,e),c.array[a]=h,c)}return s&&t.array[a]===o?t:(n(u),c=Se(t,e),void 0===o&&a===c.array.length-1?c.array.pop():c.array[a]=o,c)}function Se(t,e){return e&&t&&e===t.ownerID?t:new le(t?t.array.slice():[],e)}function me(t,e){if(e>=Ie(t._capacity))return t._tail;if(e<1<0;)n=n.array[e>>>r&hn],r-=cn;return n}}function ge(t,e,n){void 0!==e&&(e=0|e),void 0!==n&&(n=0|n);var i=t.__ownerID||new r,o=t._origin,u=t._capacity,a=o+e,s=void 0===n?u:n<0?u+n:o+n;if(a===o&&s===u)return t;if(a>=s)return t.clear();for(var c=t._level,f=t._root,h=0;a+h<0;)f=new le(f&&f.array.length?[void 0,f]:[],i),c+=cn,h+=1<=1<l?new le([],i):_;if(_&&p>l&&acn;y-=cn){var S=l>>>y&hn;v=v.array[S]=Se(v.array[S],i)}v.array[l>>>cn&hn]=_}if(s=p)a-=p,s-=p,c=cn,f=null,d=d&&d.removeBefore(i,0,a);else if(a>o||p>>c&hn;if(m!==p>>>c&hn)break;m&&(h+=(1<o&&(f=f.removeBefore(i,c,a-h)),f&&pi&&(i=a.size),v(u)||(a=a.map(function(t){return X(t)})),r.push(a)}return i>t.size&&(t=t.setSize(i)),ie(t,e,r)}function Ie(t){return t>>cn<=fn&&u.size>=2*o.size?(i=u.filter(function(t,e){return void 0!==t&&a!==e}),r=i.toKeyedSeq().map(function(t){return t[0]}).flip().toMap(),t.__ownerID&&(r.__ownerID=i.__ownerID=t.__ownerID)):(r=o.remove(e),i=a===u.size-1?u.pop():u.set(a,void 0))}else if(s){if(n===u.get(a)[1])return t;r=o,i=u.set(a,[e,n])}else r=o.set(e,u.size),i=u.set(u.size,[e,n]);return t.__ownerID?(t.size=r.size,t._map=r,t._list=i,t.__hash=void 0,t):we(r,i)}function De(t){return null===t||void 0===t?Re():Ce(t)?t:Re().unshiftAll(t)}function Ce(t){return!(!t||!t[Wn])}function ze(t,e,n,r){var i=Object.create(Xn);return i.size=t,i._head=e,i.__ownerID=n,i.__hash=r,i.__altered=!1,i}function Re(){return Qn||(Qn=ze(0))}function Me(t){return null===t||void 0===t?ke():Le(t)&&!g(t)?t:ke().withMutations(function(e){var n=d(t);at(n.size),n.forEach(function(t){return e.add(t)})})}function Le(t){return!(!t||!t[Zn])}function je(t,e){return t.__ownerID?(t.size=e.size,t._map=e,t):e===t._map?t:0===e.size?t.__empty():t.__make(e)}function Ne(t,e){var n=Object.create($n);return n.size=t?t.size:0,n._map=t,n.__ownerID=e,n}function ke(){return tr||(tr=Ne(Jt()))}function Ue(t){return null===t||void 0===t?xe():Pe(t)?t:xe().withMutations(function(e){var n=d(t);at(n.size),n.forEach(function(t){return e.add(t)})})}function Pe(t){return Le(t)&&g(t)}function He(t,e){var n=Object.create(er);return n.size=t?t.size:0,n._map=t,n.__ownerID=e,n}function xe(){return nr||(nr=He(Te()))}function Ve(t,e){var n,r=function(o){if(o instanceof r)return o;if(!(this instanceof r))return new r(o);if(!n){n=!0;var u=Object.keys(t);Ge(i,u),i.size=u.length,i._name=e,i._keys=u,i._defaultValues=t}this._map=Ut(o)},i=r.prototype=Object.create(rr);return i.constructor=r,r}function qe(t,e,n){var r=Object.create(Object.getPrototypeOf(t));return r._map=e,r.__ownerID=n,r}function Fe(t){return t._name||t.constructor.name||"Record"}function Ge(t,e){try{e.forEach(Ke.bind(void 0,t))}catch(t){}}function Ke(t,e){Object.defineProperty(t,e,{get:function(){return this.get(e)},set:function(t){ut(this.__ownerID,"Cannot set on an immutable record."),this.set(e,t)}})}function Ye(t,e){if(t===e)return!0;if(!v(e)||void 0!==t.size&&void 0!==e.size&&t.size!==e.size||void 0!==t.__hash&&void 0!==e.__hash&&t.__hash!==e.__hash||y(t)!==y(e)||S(t)!==S(e)||g(t)!==g(e))return!1;if(0===t.size&&0===e.size)return!0;var n=!m(t);if(g(t)){var r=t.entries();return e.every(function(t,e){var i=r.next().value;return i&&W(i[1],t)&&(n||W(i[0],e))})&&r.next().done}var i=!1;if(void 0===t.size)if(void 0===e.size)"function"==typeof t.cacheResult&&t.cacheResult();else{i=!0;var o=t;t=e,e=o}var u=!0,a=e.__iterate(function(e,r){if(n?!t.has(e):i?!W(e,t.get(r,ln)):!W(t.get(r,ln),e))return u=!1,!1});return u&&t.size===a}function Be(t,e,n){if(!(this instanceof Be))return new Be(t,e,n);if(ut(0!==n,"Cannot step a Range by 0"),t=t||0,void 0===e&&(e=1/0),n=void 0===n?1:Math.abs(n),ee?-1:0}function rn(t){if(t.size===1/0)return 0;var e=g(t),n=y(t),r=e?1:0,i=t.__iterate(n?e?function(t,e){r=31*r+un(et(t),et(e))|0}:function(t,e){r=r+un(et(t),et(e))|0}:e?function(t){r=31*r+et(t)|0}:function(t){r=r+et(t)|0});return on(i,r)}function on(t,e){return e=Dn(e,3432918353),e=Dn(e<<15|e>>>-15,461845907),e=Dn(e<<13|e>>>-13,5),e=(e+3864292196|0)^t,e=Dn(e^e>>>16,2246822507),e=Dn(e^e>>>13,3266489909),e=tt(e^e>>>16)}function un(t,e){return t^e+2654435769+(t<<6)+(t>>2)|0}var an=Array.prototype.slice,sn="delete",cn=5,fn=1<r?b():I(t,i,n[e?r-i++:i++])})},t(j,z),j.prototype.get=function(t,e){return void 0===e||this.has(t)?this._object[t]:e},j.prototype.has=function(t){return this._object.hasOwnProperty(t)},j.prototype.__iterate=function(t,e){for(var n=this,r=this._object,i=this._keys,o=i.length-1,u=0;u<=o;u++){var a=i[e?o-u:u];if(t(r[a],a,n)===!1)return u+1}return u},j.prototype.__iterator=function(t,e){var n=this._object,r=this._keys,i=r.length-1,o=0;return new E(function(){var u=r[e?i-o:o];return o++>i?b():I(t,u,n[u])})},j.prototype[Sn]=!0,t(N,R),N.prototype.__iterateUncached=function(t,e){var n=this;if(e)return this.cacheResult().__iterate(t,e);var r=this._iterable,i=T(r),o=0;if(w(i))for(var u;!(u=i.next()).done&&t(u.value,o++,n)!==!1;);return o},N.prototype.__iteratorUncached=function(t,e){if(e)return this.cacheResult().__iterator(t,e);var n=this._iterable,r=T(n);if(!w(r))return new E(b);var i=0;return new E(function(){var e=r.next();return e.done?e:I(t,i++,e.value)})},t(k,R),k.prototype.__iterateUncached=function(t,e){var n=this;if(e)return this.cacheResult().__iterate(t,e);for(var r=this._iterator,i=this._iteratorCache,o=0;o=r.length){var e=n.next();if(e.done)return e;r[i]=e.value}return I(t,i,r[i++])})};var Tn;t(K,l),t(Y,K),t(B,K),t(J,K),K.Keyed=Y,K.Indexed=B,K.Set=J;var An,Dn="function"==typeof Math.imul&&Math.imul(4294967295,2)===-2?Math.imul:function(t,e){t=0|t,e=0|e;var n=65535&t,r=65535&e;return n*r+((t>>>16)*r+n*(e>>>16)<<16>>>0)|0},Cn=Object.isExtensible,zn=function(){try{return Object.defineProperty({},"@",{}),!0}catch(t){return!1}}(),Rn="function"==typeof WeakMap;Rn&&(An=new WeakMap);var Mn=0,Ln="__immutablehash__";"function"==typeof Symbol&&(Ln=Symbol(Ln));var jn=16,Nn=255,kn=0,Un={};t(st,z),st.prototype.get=function(t,e){return this._iter.get(t,e)},st.prototype.has=function(t){return this._iter.has(t)},st.prototype.valueSeq=function(){return this._iter.valueSeq()},st.prototype.reverse=function(){var t=this,e=_t(this,!0);return this._useKeys||(e.valueSeq=function(){return t._iter.toSeq().reverse()}),e},st.prototype.map=function(t,e){var n=this,r=pt(this,t,e);return this._useKeys||(r.valueSeq=function(){return n._iter.toSeq().map(t,e)}),r},st.prototype.__iterate=function(t,e){var n,r=this;return this._iter.__iterate(this._useKeys?function(e,n){return t(e,n,r)}:(n=e?Rt(this):0,function(i){return t(i,e?--n:n++,r)}),e)},st.prototype.__iterator=function(t,e){if(this._useKeys)return this._iter.__iterator(t,e);var n=this._iter.__iterator(gn,e),r=e?Rt(this):0;return new E(function(){var i=n.next();return i.done?i:I(t,e?--r:r++,i.value,i)})},st.prototype[Sn]=!0,t(ct,R),ct.prototype.includes=function(t){return this._iter.includes(t)},ct.prototype.__iterate=function(t,e){var n=this,r=0;return this._iter.__iterate(function(e){return t(e,r++,n)},e)},ct.prototype.__iterator=function(t,e){var n=this._iter.__iterator(gn,e),r=0;return new E(function(){var e=n.next();return e.done?e:I(t,r++,e.value,e)})},t(ft,M),ft.prototype.has=function(t){return this._iter.includes(t)},ft.prototype.__iterate=function(t,e){var n=this;return this._iter.__iterate(function(e){return t(e,e,n)},e)},ft.prototype.__iterator=function(t,e){var n=this._iter.__iterator(gn,e);return new E(function(){var e=n.next();return e.done?e:I(t,e.value,e.value,e)})},t(ht,z),ht.prototype.entrySeq=function(){return this._iter.toSeq()},ht.prototype.__iterate=function(t,e){var n=this;return this._iter.__iterate(function(e){if(e){zt(e);var r=v(e);return t(r?e.get(1):e[1],r?e.get(0):e[0],n)}},e)},ht.prototype.__iterator=function(t,e){var n=this._iter.__iterator(gn,e);return new E(function(){for(;;){var e=n.next();if(e.done)return e;var r=e.value;if(r){zt(r);var i=v(r);return I(t,i?r.get(0):r[0],i?r.get(1):r[1],e)}}})},ct.prototype.cacheResult=st.prototype.cacheResult=ft.prototype.cacheResult=ht.prototype.cacheResult=jt,t(Ut,Y),Ut.prototype.toString=function(){return this.__toString("Map {","}")},Ut.prototype.get=function(t,e){return this._root?this._root.get(0,void 0,t,e):e},Ut.prototype.set=function(t,e){return Wt(this,t,e)},Ut.prototype.setIn=function(t,e){return this.updateIn(t,ln,function(){return e})},Ut.prototype.remove=function(t){return Wt(this,t,ln)},Ut.prototype.deleteIn=function(t){return this.updateIn(t,function(){return ln})},Ut.prototype.update=function(t,e,n){return 1===arguments.length?t(this):this.updateIn([t],e,n)},Ut.prototype.updateIn=function(t,e,n){n||(n=e,e=void 0);var r=oe(this,kt(t),e,n);return r===ln?void 0:r},Ut.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._root=null,this.__hash=void 0,this.__altered=!0,this):Jt()},Ut.prototype.merge=function(){return ne(this,void 0,arguments)},Ut.prototype.mergeWith=function(t){var e=an.call(arguments,1);return ne(this,t,e)},Ut.prototype.mergeIn=function(t){var e=an.call(arguments,1);return this.updateIn(t,Jt(),function(t){return"function"==typeof t.merge?t.merge.apply(t,e):e[e.length-1]})},Ut.prototype.mergeDeep=function(){return ne(this,re(void 0),arguments)},Ut.prototype.mergeDeepWith=function(t){var e=an.call(arguments,1);return ne(this,re(t),e)},Ut.prototype.mergeDeepIn=function(t){var e=an.call(arguments,1);return this.updateIn(t,Jt(),function(t){return"function"==typeof t.mergeDeep?t.mergeDeep.apply(t,e):e[e.length-1]})},Ut.prototype.sort=function(t){return be(wt(this,t))},Ut.prototype.sortBy=function(t,e){return be(wt(this,e,t))},Ut.prototype.withMutations=function(t){var e=this.asMutable();return t(e),e.wasAltered()?e.__ensureOwner(this.__ownerID):this},Ut.prototype.asMutable=function(){return this.__ownerID?this:this.__ensureOwner(new r)},Ut.prototype.asImmutable=function(){return this.__ensureOwner()},Ut.prototype.wasAltered=function(){return this.__altered},Ut.prototype.__iterator=function(t,e){return new Gt(this,t,e)},Ut.prototype.__iterate=function(t,e){var n=this,r=0;return this._root&&this._root.iterate(function(e){return r++,t(e[1],e[0],n)},e),r},Ut.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?Bt(this.size,this._root,t,this.__hash):(this.__ownerID=t,this.__altered=!1,this)},Ut.isMap=Pt;var Pn="@@__IMMUTABLE_MAP__@@",Hn=Ut.prototype;Hn[Pn]=!0,Hn[sn]=Hn.remove,Hn.removeIn=Hn.deleteIn,Ht.prototype.get=function(t,e,n,r){for(var i=this.entries,o=0,u=i.length;o=Vn)return $t(t,f,o,u);var _=t&&t===this.ownerID,d=_?f:i(f);return p?c?h===l-1?d.pop():d[h]=d.pop():d[h]=[o,u]:d.push([o,u]),_?(this.entries=d,this):new Ht(t,d)}},xt.prototype.get=function(t,e,n,r){void 0===e&&(e=et(n));var i=1<<((0===t?e:e>>>t)&hn),o=this.bitmap;return 0===(o&i)?r:this.nodes[ue(o&i-1)].get(t+cn,e,n,r)},xt.prototype.update=function(t,e,n,r,i,o,u){void 0===n&&(n=et(r));var a=(0===e?n:n>>>e)&hn,s=1<=qn)return ee(t,l,c,a,_);if(f&&!_&&2===l.length&&Qt(l[1^h]))return l[1^h];if(f&&_&&1===l.length&&Qt(_))return _;var d=t&&t===this.ownerID,v=f?_?c:c^s:c|s,y=f?_?ae(l,h,_,d):ce(l,h,d):se(l,h,_,d);return d?(this.bitmap=v,this.nodes=y,this):new xt(t,v,y)},Vt.prototype.get=function(t,e,n,r){void 0===e&&(e=et(n));var i=(0===t?e:e>>>t)&hn,o=this.nodes[i];return o?o.get(t+cn,e,n,r):r},Vt.prototype.update=function(t,e,n,r,i,o,u){void 0===n&&(n=et(r));var a=(0===e?n:n>>>e)&hn,s=i===ln,c=this.nodes,f=c[a];if(s&&!f)return this;var h=Xt(f,t,e+cn,n,r,i,o,u);if(h===f)return this;var l=this.count;if(f){if(!h&&(l--,l=0&&t>>e&hn;if(r>=this.array.length)return new le([],t);var i,o=0===r;if(e>0){var u=this.array[r];if(i=u&&u.removeBefore(t,e-cn,n),i===u&&o)return this}if(o&&!i)return this;var a=Se(this,t);if(!o)for(var s=0;s>>e&hn;if(r>=this.array.length)return this;var i;if(e>0){var o=this.array[r];if(i=o&&o.removeAfter(t,e-cn,n),i===o&&r===this.array.length-1)return this}var u=Se(this,t);return u.array.splice(r+1),i&&(u.array[r]=i),u};var Yn,Bn={};t(be,Ut),be.of=function(){return this(arguments)},be.prototype.toString=function(){return this.__toString("OrderedMap {","}")},be.prototype.get=function(t,e){var n=this._map.get(t);return void 0!==n?this._list.get(n)[1]:e},be.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._map.clear(),this._list.clear(),this):Te()},be.prototype.set=function(t,e){return Ae(this,t,e)},be.prototype.remove=function(t){return Ae(this,t,ln)},be.prototype.wasAltered=function(){return this._map.wasAltered()||this._list.wasAltered()},be.prototype.__iterate=function(t,e){var n=this;return this._list.__iterate(function(e){return e&&t(e[1],e[0],n)},e)},be.prototype.__iterator=function(t,e){return this._list.fromEntrySeq().__iterator(t,e)},be.prototype.__ensureOwner=function(t){if(t===this.__ownerID)return this;var e=this._map.__ensureOwner(t),n=this._list.__ensureOwner(t);return t?we(e,n,t,this.__hash):(this.__ownerID=t,this._map=e,this._list=n,this)},be.isOrderedMap=Oe,be.prototype[Sn]=!0,be.prototype[sn]=be.prototype.remove;var Jn;t(De,B),De.of=function(){return this(arguments)},De.prototype.toString=function(){return this.__toString("Stack [","]")},De.prototype.get=function(t,e){var n=this._head;for(t=u(this,t);n&&t--;)n=n.next;return n?n.value:e},De.prototype.peek=function(){return this._head&&this._head.value},De.prototype.push=function(){var t=arguments;if(0===arguments.length)return this;for(var e=this.size+arguments.length,n=this._head,r=arguments.length-1;r>=0;r--)n={value:t[r],next:n};return this.__ownerID?(this.size=e,this._head=n,this.__hash=void 0,this.__altered=!0,this):ze(e,n)},De.prototype.pushAll=function(t){if(t=_(t),0===t.size)return this;at(t.size);var e=this.size,n=this._head;return t.reverse().forEach(function(t){e++,n={value:t,next:n}}),this.__ownerID?(this.size=e,this._head=n,this.__hash=void 0,this.__altered=!0,this):ze(e,n)},De.prototype.pop=function(){return this.slice(1)},De.prototype.unshift=function(){return this.push.apply(this,arguments)},De.prototype.unshiftAll=function(t){return this.pushAll(t)},De.prototype.shift=function(){return this.pop.apply(this,arguments)},De.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._head=void 0,this.__hash=void 0,this.__altered=!0,this):Re()},De.prototype.slice=function(t,e){if(s(t,e,this.size))return this;var n=c(t,this.size),r=f(e,this.size);if(r!==this.size)return B.prototype.slice.call(this,t,e);for(var i=this.size-n,o=this._head;n--;)o=o.next;return this.__ownerID?(this.size=i,this._head=o,this.__hash=void 0,this.__altered=!0,this):ze(i,o)},De.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?ze(this.size,this._head,t,this.__hash):(this.__ownerID=t,this.__altered=!1,this)},De.prototype.__iterate=function(t,e){var n=this;if(e)return this.reverse().__iterate(t);for(var r=0,i=this._head;i&&t(i.value,r++,n)!==!1;)i=i.next;return r},De.prototype.__iterator=function(t,e){if(e)return this.reverse().__iterator(t);var n=0,r=this._head;return new E(function(){if(r){var e=r.value;return r=r.next,I(t,n++,e)}return b()})},De.isStack=Ce;var Wn="@@__IMMUTABLE_STACK__@@",Xn=De.prototype;Xn[Wn]=!0,Xn.withMutations=Hn.withMutations,Xn.asMutable=Hn.asMutable,Xn.asImmutable=Hn.asImmutable,Xn.wasAltered=Hn.wasAltered;var Qn;t(Me,J),Me.of=function(){return this(arguments)},Me.fromKeys=function(t){return this(p(t).keySeq())},Me.prototype.toString=function(){return this.__toString("Set {","}")},Me.prototype.has=function(t){return this._map.has(t)},Me.prototype.add=function(t){return je(this,this._map.set(t,!0))},Me.prototype.remove=function(t){return je(this,this._map.remove(t))},Me.prototype.clear=function(){return je(this,this._map.clear())},Me.prototype.union=function(){var t=an.call(arguments,0);return t=t.filter(function(t){return 0!==t.size}),0===t.length?this:0!==this.size||this.__ownerID||1!==t.length?this.withMutations(function(e){for(var n=0;n1?" by "+this._step:"")+" ]"},Be.prototype.get=function(t,e){return this.has(t)?this._start+u(this,t)*this._step:e; -},Be.prototype.includes=function(t){var e=(t-this._start)/this._step;return e>=0&&e=0&&nn?b():I(t,o++,u)})},Be.prototype.equals=function(t){return t instanceof Be?this._start===t._start&&this._end===t._end&&this._step===t._step:Ye(this,t)};var ir;t(Je,R),Je.prototype.toString=function(){return 0===this.size?"Repeat []":"Repeat [ "+this._value+" "+this.size+" times ]"},Je.prototype.get=function(t,e){return this.has(t)?this._value:e},Je.prototype.includes=function(t){return W(this._value,t)},Je.prototype.slice=function(t,e){var n=this.size;return s(t,e,n)?this:new Je(this._value,f(e,n)-c(t,n))},Je.prototype.reverse=function(){return this},Je.prototype.indexOf=function(t){return W(this._value,t)?0:-1},Je.prototype.lastIndexOf=function(t){return W(this._value,t)?this.size:-1},Je.prototype.__iterate=function(t,e){for(var n=this,r=0;rthis.size?e:this.find(function(e,n){return n===t},void 0,e)},has:function(t){return t=u(this,t),t>=0&&(void 0!==this.size?this.size===1/0||t-1&&t%1===0&&t<=Number.MAX_VALUE}var i=Function.prototype.bind;e.isString=function(t){return"string"==typeof t||"[object String]"===n(t)},e.isArray=Array.isArray||function(t){return"[object Array]"===n(t)},"function"!=typeof/./&&"object"!=typeof Int8Array?e.isFunction=function(t){return"function"==typeof t||!1}:e.isFunction=function(t){return"[object Function]"===toString.call(t)},e.isObject=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},e.extend=function(t){var e=arguments,n=arguments.length;if(!t||n<2)return t||{};for(var r=1;r0)){var e=this.reactorState.get("dirtyStores");if(0!==e.size){var n=c.default.Set().withMutations(function(n){n.union(t.observerState.get("any")),e.forEach(function(e){var r=t.observerState.getIn(["stores",e]);r&&n.union(r)})});n.forEach(function(e){var n=t.observerState.getIn(["observersMap",e]);if(n){var r=n.get("getter"),i=n.get("handler"),o=p.evaluate(t.prevReactorState,r),u=p.evaluate(t.reactorState,r);t.prevReactorState=o.reactorState,t.reactorState=u.reactorState;var a=o.result,s=u.result;c.default.is(a,s)||i.call(null,s)}});var r=p.resetDirtyStores(this.reactorState);this.prevReactorState=r,this.reactorState=r}}}},{key:"batchStart",value:function(){this.__batchDepth++}},{key:"batchEnd",value:function(){if(this.__batchDepth--,this.__batchDepth<=0){this.__isDispatching=!0;try{this.__notify()}catch(t){throw this.__isDispatching=!1,t}this.__isDispatching=!1}}}]),t}();e.default=(0,y.toFactory)(m),t.exports=e.default},function(t,e,n){function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function i(t,e){var n={};return(0,o.each)(e,function(e,r){n[r]=t.evaluate(e)}),n}Object.defineProperty(e,"__esModule",{value:!0});var o=n(4);e.default=function(t){return{getInitialState:function(){return i(t,this.getDataBindings())},componentDidMount:function(){var e=this;this.__unwatchFns=[],(0,o.each)(this.getDataBindings(),function(n,i){var o=t.observe(n,function(t){e.setState(r({},i,t))});e.__unwatchFns.push(o)})},componentWillUnmount:function(){for(var t=this;this.__unwatchFns.length;)t.__unwatchFns.shift()()}}},t.exports=e.default},function(t,e,n){function r(t){return t&&t.__esModule?t:{default:t}}function i(t,e){return new M({result:t,reactorState:e})}function o(t,e){return t.withMutations(function(t){(0,R.each)(e,function(e,n){t.getIn(["stores",n])&&console.warn("Store already defined for id = "+n);var r=e.getInitialState();if(void 0===r&&f(t,"throwOnUndefinedStoreReturnValue"))throw new Error("Store getInitialState() must return a value, did you forget a return statement");if(f(t,"throwOnNonImmutableStore")&&!(0,D.isImmutableValue)(r))throw new Error("Store getInitialState() must return an immutable value, did you forget to call toImmutable");t.update("stores",function(t){return t.set(n,e)}).update("state",function(t){return t.set(n,r)}).update("dirtyStores",function(t){return t.add(n)}).update("storeStates",function(t){return b(t,[n])})}),I(t)})}function u(t,e){return t.withMutations(function(t){(0,R.each)(e,function(e,n){t.update("stores",function(t){return t.set(n,e)})})})}function a(t,e,n){if(void 0===e&&f(t,"throwOnUndefinedActionType"))throw new Error("`dispatch` cannot be called with an `undefined` action type.");var r=t.get("state"),i=t.get("dirtyStores"),o=r.withMutations(function(r){A.default.dispatchStart(t,e,n),t.get("stores").forEach(function(o,u){var a=r.get(u),s=void 0;try{s=o.handle(a,e,n)}catch(e){throw A.default.dispatchError(t,e.message),e}if(void 0===s&&f(t,"throwOnUndefinedStoreReturnValue")){var c="Store handler must return a value, did you forget a return statement";throw A.default.dispatchError(t,c),new Error(c)}r.set(u,s),a!==s&&(i=i.add(u))}),A.default.dispatchEnd(t,r,i)}),u=t.set("state",o).set("dirtyStores",i).update("storeStates",function(t){return b(t,i)});return I(u)}function s(t,e){var n=[],r=(0,D.toImmutable)({}).withMutations(function(r){(0,R.each)(e,function(e,i){var o=t.getIn(["stores",i]);if(o){var u=o.deserialize(e);void 0!==u&&(r.set(i,u),n.push(i))}})}),i=w.default.Set(n);return t.update("state",function(t){return t.merge(r)}).update("dirtyStores",function(t){return t.union(i)}).update("storeStates",function(t){return b(t,n)})}function c(t,e,n){var r=e;(0,z.isKeyPath)(e)&&(e=(0,C.fromKeyPath)(e));var i=t.get("nextId"),o=(0,C.getStoreDeps)(e),u=w.default.Map({id:i,storeDeps:o,getterKey:r,getter:e,handler:n}),a=void 0;return a=0===o.size?t.update("any",function(t){return t.add(i)}):t.withMutations(function(t){o.forEach(function(e){var n=["stores",e];t.hasIn(n)||t.setIn(n,w.default.Set()),t.updateIn(["stores",e],function(t){return t.add(i)})})}),a=a.set("nextId",i+1).setIn(["observersMap",i],u),{observerState:a,entry:u}}function f(t,e){var n=t.getIn(["options",e]);if(void 0===n)throw new Error("Invalid option: "+e);return n}function h(t,e,n){var r=t.get("observersMap").filter(function(t){var r=t.get("getterKey"),i=!n||t.get("handler")===n;return!!i&&((0,z.isKeyPath)(e)&&(0,z.isKeyPath)(r)?(0,z.isEqual)(e,r):e===r)});return t.withMutations(function(t){r.forEach(function(e){return l(t,e)})})}function l(t,e){return t.withMutations(function(t){var n=e.get("id"),r=e.get("storeDeps");0===r.size?t.update("any",function(t){return t.remove(n)}):r.forEach(function(e){t.updateIn(["stores",e],function(t){return t?t.remove(n):t})}),t.removeIn(["observersMap",n])})}function p(t){var e=t.get("state");return t.withMutations(function(t){var n=t.get("stores"),r=n.keySeq().toJS();n.forEach(function(n,r){var i=e.get(r),o=n.handleReset(i);if(void 0===o&&f(t,"throwOnUndefinedStoreReturnValue"))throw new Error("Store handleReset() must return a value, did you forget a return statement");if(f(t,"throwOnNonImmutableStore")&&!(0,D.isImmutableValue)(o))throw new Error("Store reset state must be an immutable value, did you forget to call toImmutable");t.setIn(["state",r],o)}),t.update("storeStates",function(t){return b(t,r)}),v(t)})}function _(t,e){var n=t.get("state");if((0,z.isKeyPath)(e))return i(n.getIn(e),t);if(!(0,C.isGetter)(e))throw new Error("evaluate must be passed a keyPath or Getter");if(m(t,e))return i(E(t,e),t);var r=(0,C.getDeps)(e).map(function(e){return _(t,e).result}),o=(0,C.getComputeFn)(e).apply(null,r);return i(o,g(t,e,o))}function d(t){var e={};return t.get("stores").forEach(function(n,r){var i=t.getIn(["state",r]),o=n.serialize(i);void 0!==o&&(e[r]=o)}),e}function v(t){return t.set("dirtyStores",w.default.Set())}function y(t){return t}function S(t,e){var n=y(e);return t.getIn(["cache",n])}function m(t,e){var n=S(t,e);if(!n)return!1;var r=n.get("storeStates");return 0!==r.size&&r.every(function(e,n){return t.getIn(["storeStates",n])===e})}function g(t,e,n){var r=y(e),i=t.get("dispatchId"),o=(0,C.getStoreDeps)(e),u=(0,D.toImmutable)({}).withMutations(function(e){o.forEach(function(n){var r=t.getIn(["storeStates",n]);e.set(n,r)})});return t.setIn(["cache",r],w.default.Map({value:n,storeStates:u,dispatchId:i}))}function E(t,e){var n=y(e);return t.getIn(["cache",n,"value"])}function I(t){return t.update("dispatchId",function(t){return t+1})}function b(t,e){return t.withMutations(function(t){e.forEach(function(e){var n=t.has(e)?t.get(e)+1:1;t.set(e,n)})})}Object.defineProperty(e,"__esModule",{value:!0}),e.registerStores=o,e.replaceStores=u,e.dispatch=a,e.loadState=s,e.addObserver=c,e.getOption=f,e.removeObserver=h,e.removeObserverByEntry=l,e.reset=p,e.evaluate=_,e.serialize=d,e.resetDirtyStores=v;var O=n(3),w=r(O),T=n(9),A=r(T),D=n(5),C=n(10),z=n(11),R=n(4),M=w.default.Record({result:null,reactorState:null})},function(t,e,n){var r=n(8);e.dispatchStart=function(t,e,n){(0,r.getOption)(t,"logDispatches")&&console.group&&(console.groupCollapsed("Dispatch: %s",e),console.group("payload"),console.debug(n),console.groupEnd())},e.dispatchError=function(t,e){(0,r.getOption)(t,"logDispatches")&&console.group&&(console.debug("Dispatch error: "+e),console.groupEnd())},e.dispatchEnd=function(t,e,n){(0,r.getOption)(t,"logDispatches")&&console.group&&((0,r.getOption)(t,"logDirtyStores")&&console.log("Stores updated:",n.toList().toJS()),(0,r.getOption)(t,"logAppState")&&console.debug("Dispatch done, new state: ",e.toJS()),console.groupEnd())}},function(t,e,n){function r(t){return t&&t.__esModule?t:{default:t}}function i(t){return(0,l.isArray)(t)&&(0,l.isFunction)(t[t.length-1])}function o(t){return t[t.length-1]}function u(t){return t.slice(0,t.length-1)}function a(t,e){e||(e=h.default.Set());var n=h.default.Set().withMutations(function(e){if(!i(t))throw new Error("getFlattenedDeps must be passed a Getter");u(t).forEach(function(t){if((0,p.isKeyPath)(t))e.add((0,f.List)(t));else{if(!i(t))throw new Error("Invalid getter, each dependency must be a KeyPath or Getter");e.union(a(t))}})});return e.union(n)}function s(t){if(!(0,p.isKeyPath)(t))throw new Error("Cannot create Getter from KeyPath: "+t);return[t,_]}function c(t){if(t.hasOwnProperty("__storeDeps"))return t.__storeDeps;var e=a(t).map(function(t){return t.first()}).filter(function(t){return!!t});return Object.defineProperty(t,"__storeDeps",{enumerable:!1,configurable:!1,writable:!1,value:e}),e}Object.defineProperty(e,"__esModule",{value:!0});var f=n(3),h=r(f),l=n(4),p=n(11),_=function(t){return t};e.default={isGetter:i,getComputeFn:o,getFlattenedDeps:a,getStoreDeps:c,getDeps:u,fromKeyPath:s},t.exports=e.default},function(t,e,n){function r(t){return t&&t.__esModule?t:{default:t}}function i(t){return(0,s.isArray)(t)&&!(0,s.isFunction)(t[t.length-1])}function o(t,e){var n=a.default.List(t),r=a.default.List(e);return a.default.is(n,r)}Object.defineProperty(e,"__esModule",{value:!0}),e.isKeyPath=i,e.isEqual=o;var u=n(3),a=r(u),s=n(4)},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var r=n(3),i=(0,r.Map)({logDispatches:!1,logAppState:!1,logDirtyStores:!1,throwOnUndefinedActionType:!1,throwOnUndefinedStoreReturnValue:!1,throwOnNonImmutableStore:!1,throwOnDispatchInDispatch:!1});e.PROD_OPTIONS=i;var o=(0,r.Map)({logDispatches:!0,logAppState:!0,logDirtyStores:!0,throwOnUndefinedActionType:!0,throwOnUndefinedStoreReturnValue:!0,throwOnNonImmutableStore:!0,throwOnDispatchInDispatch:!0});e.DEBUG_OPTIONS=o;var u=(0,r.Record)({dispatchId:0,state:(0,r.Map)(),stores:(0,r.Map)(),cache:(0,r.Map)(),storeStates:(0,r.Map)(),dirtyStores:(0,r.Set)(),debug:!1,options:i});e.ReactorState=u;var a=(0,r.Record)({any:(0,r.Set)(),stores:(0,r.Map)({}),observersMap:(0,r.Map)({}),nextId:1});e.ObserverState=a}])})}),Ie=Ee&&"object"==typeof Ee&&"default"in Ee?Ee.default:Ee,be=t(function(t){var e=function(t){var e,n={};if(!(t instanceof Object)||Array.isArray(t))throw new Error("keyMirror(...): Argument must be an object.");for(e in t)t.hasOwnProperty(e)&&(n[e]=e);return n};t.exports=e}),Oe=be&&"object"==typeof be&&"default"in be?be.default:be,we=Oe({VALIDATING_AUTH_TOKEN:null,VALID_AUTH_TOKEN:null,INVALID_AUTH_TOKEN:null,LOG_OUT:null}),Te=Ie.Store,Ae=Ie.toImmutable,De=new Te({getInitialState:function(){return Ae({isValidating:!1,authToken:!1,host:null,isInvalid:!1,errorMessage:""})},initialize:function(){this.on(we.VALIDATING_AUTH_TOKEN,e),this.on(we.VALID_AUTH_TOKEN,n),this.on(we.INVALID_AUTH_TOKEN,r)}}),Ce=Ie.Store,ze=Ie.toImmutable,Re=new Ce({getInitialState:function(){return ze({authToken:null,host:""})},initialize:function(){this.on(we.VALID_AUTH_TOKEN,i),this.on(we.LOG_OUT,o)}}),Me=Ie.Store,Le=new Me({getInitialState:function(){return!0},initialize:function(){this.on(we.VALID_AUTH_TOKEN,u)}}),je=Oe({STREAM_START:null,STREAM_STOP:null,STREAM_ERROR:null}),Ne="object"==typeof window&&"EventSource"in window,ke=Ie.Store,Ue=Ie.toImmutable,Pe=new ke({getInitialState:function(){return Ue({isSupported:Ne,isStreaming:!1,useStreaming:!0,hasError:!1})},initialize:function(){this.on(je.STREAM_START,a),this.on(je.STREAM_STOP,s),this.on(je.STREAM_ERROR,c),this.on(je.LOG_OUT,f)}}),He=Oe({API_FETCH_ALL_START:null,API_FETCH_ALL_SUCCESS:null,API_FETCH_ALL_FAIL:null,SYNC_SCHEDULED:null,SYNC_SCHEDULE_CANCELLED:null}),xe=Ie.Store,Ve=new xe({getInitialState:function(){return!0},initialize:function(){this.on(He.API_FETCH_ALL_START,function(){return!0}),this.on(He.API_FETCH_ALL_SUCCESS,function(){return!1}),this.on(He.API_FETCH_ALL_FAIL,function(){return!1}),this.on(He.LOG_OUT,function(){return!1})}}),qe=Ie.Store,Fe=new qe({getInitialState:function(){return!1},initialize:function(){this.on(He.SYNC_SCHEDULED,function(){return!0}),this.on(He.SYNC_SCHEDULE_CANCELLED,function(){return!1}),this.on(He.LOG_OUT,function(){return!1})}}),Ge=Oe({API_FETCH_SUCCESS:null,API_FETCH_START:null,API_FETCH_FAIL:null,API_SAVE_SUCCESS:null,API_SAVE_START:null,API_SAVE_FAIL:null,API_DELETE_SUCCESS:null,API_DELETE_START:null,API_DELETE_FAIL:null,LOG_OUT:null}),Ke=Ie.Store,Ye=Ie.toImmutable,Be=new Ke({getInitialState:function(){return Ye({})},initialize:function(){var t=this;this.on(Ge.API_FETCH_SUCCESS,h),this.on(Ge.API_SAVE_SUCCESS,h),this.on(Ge.API_DELETE_SUCCESS,l),this.on(Ge.LOG_OUT,function(){return t.getInitialState()})}}),Je=t(function(t){function e(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}function n(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de","5"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},n=0;n<10;n++)e["_"+String.fromCharCode(n)]=n;var r=Object.getOwnPropertyNames(e).map(function(t){return e[t]});if("0123456789"!==r.join(""))return!1;var i={};return"abcdefghijklmnopqrst".split("").forEach(function(t){i[t]=t}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},i)).join("")}catch(t){return!1}}var r=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;t.exports=n()?Object.assign:function(t,n){for(var o,u,a=arguments,s=e(t),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�-lHSf@x(uNgdK!311%+H4dEX^(NfF+O|P$67(mqmuv~+l0DN zNwc-Sq**k7Q6`Oy^J;*G_}lRy|34zg=g3fl`#jqB`-k|m zsQh~ts5Sgq0JVe!^LlZS>oJa$CxOkEM&^k9ftt-o@VafNc@hL75-4j8plu3LV}3};Kv*4`1QsZ1&y`{0rFm-yrU*S z-I>l&X!6;kzuX(+Z8!8w?{K83Dezyv#o(>iS8)9{BQXQBPX+(Uz2}>+>&M-@eVr13 z7D>>J3s0DeA~EX52>4<5zquagvqe1O1Zdgm59irEY+?N|PDbp&zhtlGA6?tlY6bjz zi;;R7O>kPWgb$tAjZdG_g%>U=qH4X5{_D+k*!J{%2mn|1S$uD89bMX&Sf9N#`P?q4 z6fLTx?%(2Tt84Q8Xpk1AYJiV9LhX)y>hzfl3i!xLU3k6I{F4fV4SN`$b)+KzL}-x& zHjp6Qt|@HL0XO{724Vzqq&VRmeg+twCqVmqc;y&+ct!IsO29ulmn+=RZ($giQX)KZ zX5@c7COms#0aJY$f)uw^Vuor{%jLCOjr9LoKuRf|;>dQ|j0oo*S(5VTNCDTo*Hq%c zfwiE3J9b*)$4%%_$4ucz#vSJNn zUuSKyLW9D@g3p{>v8;k`-dV+u*VJ&qEfw*jV+))yU5i$>c5p>wLH6<87W5Fv;~w8$ zQ%8TyLc*VHh;i3056}a9mGlvq@VEQUGO=aMDigXj$us`tz8K558aZFsqG0Yl9~K$K)z-hERQ zR~%E4Qi)2P0r=A7gC{6FZ(%_K(tCYC9P;xO3ztDrc^uOoED*ki7LAgK(zN}%q{J?@sJr>31FDnQb3ySc#*-0sLS-P#-HDMQ9 z#?%two$m8`v=3fycfh}Co0W6JKv~08vKmRlDuRrCNjV~{+08iTrm8%n0Dy(`k`mqG zj{O!m%n|(+2NjVj=(bBWA;DZng5xG3B2H_&ERb7GI=|4d97Ze))Oyexsyb^a_@6ei z;13|1+eP@$@lNAUaU`eXvz z=6V|ms82gUa|@$Okh)YXd)u-4mEHUv*#E%C?3@lVPS?B zs585Ox8V9!M;`nEWQLRUpVQza(fmo~WkLj*>^j?#;L@W@IDLk9hXfObp%sE?^3SCh z9S|XbtO$3}Q6<3z5*{&ABg=uVh_Go_0{*Hr%y$XF zfyc~_aL&>acGfNW>e5gnZjZ4t6Wnn~h$Wbvkbs;!v_lH$ilhMwt*@yoL=XwC5I|!g z2#gGTNjPTTF_8tB!Fbn5re+ z=}UVV=iX9vi`>R2MXgkfHT=^-r+ri7Bf|pduUojxBHnv!DUg5we1Cmih^qhr_^&s` zxMNoi{7Z|_J|`dC(&We(Ua`y)7(aA&5wAV0+kb~#dGvr?l+2^e0&s)$UIHY>!w%4Z zw*=vbAK{T(!do<}XxJ-{E=nVbkbtCS-=#ZiZmGgJ?>sjBEDdD{>Dxs5V~Js$B`9G@ zN`eACaAgura!WZ2i?UbS-@r^afkn@rz1QHYofdmF=+K_S4Z8iLDV=U|Tj}j3Q%t=Xbs3XB1Zway@ z;D5XW|9Ls^w_B+B5o)b=#oo;$%GLw%*lddDJOu#PgkE>PrYzafd}%8I#zIVXiy~lO zy_;R}T8!m=1`J5`wwkycW$CXSJtT0my5bJK z>!zys{UrsFJ;sCoTnB!I&Vj$62$5FJuK-QJ?z+VnR_&HuaLNS@&Ra(!Q2xz8V`pW! zl7cJ&@`h{sv2>C`6!N_`J#xqe%RQUACe{PK8XKH2qZ?0MGDWIHTLJ$+?l-vT)*9}u za#*wGnynVU*ko|_5k)*|mX^#=&5el(363ecl&B-YR)bzG*&(UFDXQTiKqL(~1ngbz zu<-&}G8;X+i*SX@TD|t#N|@Ao_zc}~@E0S6Kdsr0-`uqwC3g-YkQ)H`e_=Ztxi9CW z2uSa*>@!kYcHEvpGQ5-=Z>_{}k}c8_l~xoUaMS%Z=rDy+tqq)4xJn)RHUt6~Wf;H%uy z{M4cS2g;gc)_M63BgC8Et;9+Z2@x7)i^RfCOBd%g7C3scMp2Ul&7Bgh6;^HS$M;v> zkKSSgC;~wNDaa`qYA^6LAlE7!3y~J^Qv>Wb!G+P^5F_K?ud0hn)Nfd{eKM(Kn6oj1Y*iYmebnu@*&4`u z5+tShwKa9AGPUrj*%PN|y!Ft6Ou$tPKn*7MEa#f;JDsOx76sE&)aZ62XndtWpcL#R zBMW?aog8T&-Z1_Du{5F(mjw0xN&+2{^Q>uP1k;)NeR2%iBNR^!<@4F+!~qDv6Q7^i z=hmOUFv4%|F#?|T{T6HXwQK@{L$m3Btrl`;G9HoF+05=E(O;ofE@%h0zb)7?uCJHZ2SvSI32^Q zLJ)zF9tk;LF^s&XNbj|j6bPDH`K*Wokwp}Fa*4leAz~Pa?E{Aoz=7SdjO6cw_BBa$ zsB@iuvfc=AiCPaP*Y0MQG>8TK6C!f;N|7st&?qQhws89{i*K!s<#`CBN3uXpL7wsX zGqFK9s@&^x_|!umPMy823T<-J7=+|`oy1Z=Cmvv=g>h#c?!Z1b!md;k zD|iz8xJ7qpPMM(7?Unv^zd@u4g#yV64t;fi)8$xtBLX*^j2aoqx;Kr%uNs42j#&%fu^NM&_^w-)cEqIA5`d8JS77DFUXc6DK^FLOWDrKDgvlo%!PDmI5ECTheXHvD{yKy1 z=3)XN%+e_ukDaAaO;fQm%D^)d@PiR&!LJElUtn=D=$;|Vl6JHqll8D-N{lwbQUGyr)@vI4<^)AT2T1+XCq9?c|( zvX)?d$PS4+WB@#Cp>ED<8(*uRZN%v}-o43!|0_=Of9#GJr40DbJtC62CKs>|U)x_$ z)Rd12!pLfVPl}w@2R-n8_NDu26wd?)mnTbt?7le&E>V~mMo5z?5L-F-DbgJH#|R1B z!L8>hBoO()O0S)dokT6p=>_nI8RIPYbq@TD;StKZKzVm4bB=JGbAf>Tao=taQTww% zohLyeSt1Z}lBtl$^nr5FBAu&Yr}iyFDI_4mI}a^D0r*a033MQV%;*+1wd9s4A_06O z@LzC5!EKeK0{Dkt0@!n@Z=0QVW{Dq~Vrmci_J>2mYlF z{4<*azsgjZSZ)pXSup2fxQzBs?<3r66y!Eh97o~UBmro6YeWL#8(9SouOZGA&V|v& zl(m50FL?W-jaKsQM3Cn2r_a?cb3*7hXh~$7B?Y{FiI(U4?s_A$w#6okS~)kJQdYp1 z9r!<Wboz4jOhxJ4QCMm}vC4{o*h%wpzTpp4Y*ArNyYpUC#FwxcWTTk8xya(j$e00facb{hQYK7+HI=6>vK zCBPW8R#ss>e+gXc?12PINDzU%J0v6^1R3zTGHtM7jnFSR@PBc&5%3!ZB7%Vb|7I## z;(V|zp}P&cQfq_1-p|-kX953d(-fXHPfKrZ)pC=2qz+UXfxI#c_aTRH@4>fEa42&I z0hC(>EMo|`jc(7)eHNd%!yqDvNHaD=CY>w;A9TbxY+?cPyGX#ipZAl@%-^@LD~+}S z@S`Rv9MnUoSQdh@Wg&qg;M?nj1Viej*wD`|;}g2kNE*aMQ+_;@XsxbtB#8NLSL4Lgb`oH-dLG)3V3d#Z$A`VMvT!a1b`cBj5dfS z;J2GC`mI!gN}m0d2l|~NKYB;(YHxfc<{$61c==+DnjOHBXu@qf81G*dW5rGzT!)Df z;py`fUbZ-b0t;ASfwvwKfh7(Q5H~H}-2phA^?m0OEn0g^g$J(y0DSgt5B@Ig>y93B zfRYmIe{Z$!c`QDDr@=)_qf|Gw9x4)O!1C#lkZ6>`J|oq*;U(7rl#fj)be0Rwp5LB1ZyFrx^Zp z3bO$Z(l{1W?p}t-UtMGH`MV98mHVnv7${o)ea95AsF#GG7cY-pwQOPqtdvtM>?YKh zJHL(GI01%F6#3xK0#FDV6;{rJp^=Ob4e&ch3i#$)gH680Qrw<1rYqdmXPsYd#i#!M zdW%QTOo5cn7T4{dzo*EZyI9WipI^0!%QeJVQ1aj7xXI*-?g+b*9_b>vYb6BOV;CDN zj01Z{GonZT7D??NEefZ=I)1Ve5N)n7K695rU)^iPPr36Q-j|jipA_v2oDwhGl-B6X z?^3wpr~+QJNIU7#X(!%`ArNN{Kaob&ti3+bzDo!HC~)7`VU2C@aYM z*Vh_ZXlm(1lKr%DB4Da|FgXnmOfAA|(gL|kQ^L$Y1EWW{S)!>Mi=qejMEAZ|+_tatSEvSDv&~}d9tIK6n}V&7W?bHVbKPn72uJ2fVBrBdqexh{hjGge#;p!KM@}YK z%lOw8|9%lXIbxgLdzkmRtfF_%63rjGK-CENWA*{>xrb{!Y=(lhXi1b0d>!z8N7?cn z7B_FV;?hz2Y%f`;!wT7hknn6YPJl5XQu{x%M3U~irO)E7-5z|0^(y>qvsi_M3=#~# z=av|k9~t48NwR!j$i^h#e9SB*1lpdw?$$V|yp(|WT6fQ~#0BD44<@IsWrmmV>AMWR zu=;`EzwihL{sR-U|aM_WO%l5?14f4pf3|Uy~<%={PIYUWmcl68Hp9k1y z-iJH?lgYl%R=(% zZ#zUwno-_=Kj4Q-c7yLc`14CCmKAX3GzFDeb}{GnJlL{8E#M!_3UIEl%?9w-(;41Nmv#*NK@1BKB))OS z5L}NF;6X02EJTJv!T@l6CW|7J~^^1@J%KWL?H54w}D9 z6D~PI%bbFMe_X~1FcM;f1i+gP)_B1JjXj21cwfI;LxMv^ z!4gOs^YsTRym&7O$Oq5o-)4N-gKi-uYk{7>N@}p*^?`2I39j45xMZou$x}K*0v@4BFdDZ2 zLu*8{fNL+bqJ4`BQuA}z1i}s58F%br0n}$#+k9`ofO1}$T&aV9ZGrNjZ7$oy1MC%0 zwaH8^5UIggv+r-PQry?2fmvn36J{xSzMpSqY;(tt++pyEzMB`bY2eTMR4Zrm7DuMv5uLex=%^_kLqO?Y4Qh}scY)WoS4#QtFM5KW3 z9A`DI-!5en&4FLQE|YCiRXV}P2trb`pAjd+dUt8v9*E_bAPxWITp%m2AplbffaUQZ zcy#x~cUX*tR6agrI^i4Z7|R@3-f>GTP3Ft`l7P`7X1IV+xmtWBujc`m8i7lnGOk`_ zp&(0*2njA*s)HpMwB{G^vsj;9#xJM%qJ=u`i5U3rT^d)wZaE>5!6{QoG=5U`sR=^l zq_n#;yQb1O0mcdw*ry?7a%rA^*)h{CkOAeIOr;0d#pq#-X` zVF3gZ$RyW^Qw9Q^fY-eqZid-p!7o1irAs5sECaEn{cZ)jxJSDZZI<|j!T9MWpWRXb zYMeZ;!kn&7`u{XefVSeFI=h(d#0a=zslvC{Ll%kZs{=g|aMBdQ^A;$~EJ2#Y2g9hH zmR&!vlJm<}8YGgn1Sd};G?GXI+bWE+Z!;30X29>hn|4~8B_JM*UpF}dt~^rX<9AtE z`oyH*pIs(b)1-u?{T%^6b%q<`L2&z5hRbiBS60BQ7b`q>9?RPP-I4eE>y{l@(2PjX z`KXx$hQ{S9EdUnx=bU8*S0AZ_aM`CSDj#?U@JDd3PqI>k%a2gvuQvnOih*>yU3|F0 zUAw*e)2+z`!H_tm-&k;)@o(h~8KB%ocNl1MI~pgz2*&|I3`>=#xG&R605gW{A}|BH z>WL*F01ANw^`wB#y7FpDKp#@2TWi4i?tTXR;-g=Bgpwe=VtB~iZU^?j0bhY3Gu$0c zds1d(PV-A}6OCJdrWruP(`#p0M$5uTNiYK$5=c#sn>`kvJZS&VueRumQ@1CUfY-T8 z3X=;7_*?6CtFfF7v!TvzbwvAhhiIGtja7bLjS!I=7&F2UK#L_%q$Dsl%-Lng!R$+` zizGgO9{giUND(N%5N^=?)ciW2 zlg1$Ub^7}Nfdm;MWY1|l2yR-4q(S_q?N%0WUEJ#@sz75V1t*|?;I0fh@f*eC;9`BmG_ zxuuF{&5y)Iu$D6uLyYt!Jx4gtoR0J(O83~qCRqGrvoCbBq%c`C{%;cF=6gr6=BM3usiruoin4LE2^4#V*^$HQU98 zv4L%V2L5tLehuU;Oo#FLYFND1rb!btL*kpkio}$)CT> zpE_K#bL_&hE0*oBiyhnEB>>FNK!C|F=V!m0fpSVtZ|VHZap*zMn^iL{adX`R|1&Bt3V5 zJ|v7VD2ycxI=JLm(>2T*n>JuGV`RYQ;dfF1)cvWDD0-LT2tp_jKs^F{-G(sGvLMjd z!D!KJFg9_2`ZEuop|20aBq;JGLX_TP6L=!fC&Ew!)3Oe)JHA}lCa8GVY zK<;HI#Cew^ARzZV0u&oaW`v%rL z9EFAeXsj@V2@D7u05LER-%9dE5PTeo?y8=v5TE-CKxPDC2n0h6f*6bfVC3Py7KsW# zzTWVCFe@A(R z=)(Z@$9)pn|5XC`NCfCdzA1hvUnc=Sr1=Bb_BjDQv3}dH+x0Kb-qixnuTn>kvnjJ z0JMJrBX!ovCsuF!Ywg-PoW`&aa1q^6T2tP+aYG}wFB32U>?4SDNT%d#t=m2Afwc^r zqry;i*+SJ zPq^w1K(k(>R?4Gv_-%m?=ztbcbi!KuMKpQX!dj{DalKl;A{>pOLSd9rfZ#Ztvshzj zHtIC06^t>9!->?Zz$7{(*G4R14>0IScHOfWmQtvp@!sO#(}SO>~*|BWo{g z71)XZ2*c`7`*c78004jhDEdFTAE6(F<_ib_0)PM@00;mAfB+x>2mk|+_zN)_8_rn( O0000UzEF8gMg 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 diff --git a/source/demo/frontend.html b/source/demo/frontend.html deleted file mode 100644 index e96a4c7a385..00000000000 --- a/source/demo/frontend.html +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/source/demo/images/config_philips_hue.jpg b/source/demo/images/config_philips_hue.jpg deleted file mode 100644 index fd31dc7bbbf13d26a4abe882491a2dcdd87ca912..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8353 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�(25Jvf&vNnvisG3AN7 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 diff --git a/source/demo/images/thrones.jpg b/source/demo/images/thrones.jpg deleted file mode 100644 index 0c57c03db5d9068b0dd77b6f56b01ec986a77556..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45167 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 \ No newline at end of file diff --git a/source/demo/panels/ha-panel-dev-info.html b/source/demo/panels/ha-panel-dev-info.html deleted file mode 100644 index 516c2e88c54..00000000000 --- a/source/demo/panels/ha-panel-dev-info.html +++ /dev/null @@ -1,2 +0,0 @@ - \ No newline at end of file diff --git a/source/demo/panels/ha-panel-dev-service.html b/source/demo/panels/ha-panel-dev-service.html deleted file mode 100644 index d1ef9154fb2..00000000000 --- a/source/demo/panels/ha-panel-dev-service.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/source/demo/panels/ha-panel-dev-state.html b/source/demo/panels/ha-panel-dev-state.html deleted file mode 100644 index f539185bb87..00000000000 --- a/source/demo/panels/ha-panel-dev-state.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/source/demo/panels/ha-panel-dev-template.html b/source/demo/panels/ha-panel-dev-template.html deleted file mode 100644 index 8a968150cad..00000000000 --- a/source/demo/panels/ha-panel-dev-template.html +++ /dev/null @@ -1,2 +0,0 @@ - diff --git a/source/demo/panels/ha-panel-history.html b/source/demo/panels/ha-panel-history.html deleted file mode 100644 index 95bfe398184..00000000000 --- a/source/demo/panels/ha-panel-history.html +++ /dev/null @@ -1,4 +0,0 @@ - \ No newline at end of file diff --git a/source/demo/panels/ha-panel-iframe.html b/source/demo/panels/ha-panel-iframe.html deleted file mode 100644 index ff2cdbfe4b4..00000000000 --- a/source/demo/panels/ha-panel-iframe.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/source/demo/panels/ha-panel-logbook.html b/source/demo/panels/ha-panel-logbook.html deleted file mode 100644 index c8afdcaecdb..00000000000 --- a/source/demo/panels/ha-panel-logbook.html +++ /dev/null @@ -1,4 +0,0 @@ - \ No newline at end of file diff --git a/source/demo/panels/ha-panel-map.html b/source/demo/panels/ha-panel-map.html deleted file mode 100644 index 44d8b26ab93..00000000000 --- a/source/demo/panels/ha-panel-map.html +++ /dev/null @@ -1,4 +0,0 @@ - \ No newline at end of file diff --git a/source/demo/webcam.jpg b/source/demo/webcam.jpg deleted file mode 100644 index 215a4da7b060623eeba81149bf1a5002687d87ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51329 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[34,35,60,62,63,96].indexOf(t)?e:encodeURIComponent(e)}function i(e){var t=e.charCodeAt(0);return t>32&&127>t&&-1==[34,35,60,62,96].indexOf(t)?e:encodeURIComponent(e)}function a(e,a,s){function c(e){g.push(e)}var d=a||"scheme start",l=0,u="",w=!1,_=!1,g=[];e:for(;(e[l-1]!=p||0==l)&&!this._isInvalid;){var b=e[l];switch(d){case"scheme start":if(!b||!m.test(b)){if(a){c("Invalid scheme.");break e}u="",d="no scheme";continue}u+=b.toLowerCase(),d="scheme";break;case"scheme":if(b&&v.test(b))u+=b.toLowerCase();else{if(":"!=b){if(a){if(p==b)break e;c("Code point not allowed in scheme: "+b);break e}u="",l=0,d="no scheme";continue}if(this._scheme=u,u="",a)break e;t(this._scheme)&&(this._isRelative=!0),d="file"==this._scheme?"relative":this._isRelative&&s&&s._scheme==this._scheme?"relative or authority":this._isRelative?"authority first slash":"scheme data"}break;case"scheme data":"?"==b?(this._query="?",d="query"):"#"==b?(this._fragment="#",d="fragment"):p!=b&&" "!=b&&"\n"!=b&&"\r"!=b&&(this._schemeData+=r(b));break;case"no scheme":if(s&&t(s._scheme)){d="relative";continue}c("Missing scheme."),n.call(this);break;case"relative or authority":if("/"!=b||"/"!=e[l+1]){c("Expected /, got: "+b),d="relative";continue}d="authority ignore slashes";break;case"relative":if(this._isRelative=!0,"file"!=this._scheme&&(this._scheme=s._scheme),p==b){this._host=s._host,this._port=s._port,this._path=s._path.slice(),this._query=s._query,this._username=s._username,this._password=s._password;break e}if("/"==b||"\\"==b)"\\"==b&&c("\\ is an invalid code point."),d="relative slash";else if("?"==b)this._host=s._host,this._port=s._port,this._path=s._path.slice(),this._query="?",this._username=s._username,this._password=s._password,d="query";else{if("#"!=b){var y=e[l+1],E=e[l+2];("file"!=this._scheme||!m.test(b)||":"!=y&&"|"!=y||p!=E&&"/"!=E&&"\\"!=E&&"?"!=E&&"#"!=E)&&(this._host=s._host,this._port=s._port,this._username=s._username,this._password=s._password,this._path=s._path.slice(),this._path.pop()),d="relative path";continue}this._host=s._host,this._port=s._port,this._path=s._path.slice(),this._query=s._query,this._fragment="#",this._username=s._username,this._password=s._password,d="fragment"}break;case"relative slash":if("/"!=b&&"\\"!=b){"file"!=this._scheme&&(this._host=s._host,this._port=s._port,this._username=s._username,this._password=s._password),d="relative path";continue}"\\"==b&&c("\\ is an invalid code point."),d="file"==this._scheme?"file host":"authority ignore slashes";break;case"authority first slash":if("/"!=b){c("Expected '/', got: "+b),d="authority ignore slashes";continue}d="authority second slash";break;case"authority second slash":if(d="authority ignore slashes","/"!=b){c("Expected '/', got: "+b);continue}break;case"authority ignore slashes":if("/"!=b&&"\\"!=b){d="authority";continue}c("Expected authority, got: "+b);break;case"authority":if("@"==b){w&&(c("@ already seen."),u+="%40"),w=!0;for(var L=0;L>>0)+(t++ +"__")};n.prototype={set:function(t,n){var o=t[this.name];return o&&o[0]===t?o[1]=n:e(t,this.name,{value:[t,n],writable:!0}),this},get:function(e){var t;return(t=e[this.name])&&t[0]===e?t[1]:void 0},"delete":function(e){var t=e[this.name];return t&&t[0]===e?(t[0]=t[1]=void 0,!0):!1},has:function(e){var t=e[this.name];return t?t[0]===e:!1}},window.WeakMap=n}(),function(e){function t(e){b.push(e),g||(g=!0,m(o))}function n(e){return window.ShadowDOMPolyfill&&window.ShadowDOMPolyfill.wrapIfNeeded(e)||e}function o(){g=!1;var e=b;b=[],e.sort(function(e,t){return e.uid_-t.uid_});var t=!1;e.forEach(function(e){var n=e.takeRecords();r(e),n.length&&(e.callback_(n,e),t=!0)}),t&&o()}function r(e){e.nodes_.forEach(function(t){var n=v.get(t);n&&n.forEach(function(t){t.observer===e&&t.removeTransientObservers()})})}function i(e,t){for(var n=e;n;n=n.parentNode){var o=v.get(n);if(o)for(var r=0;r0){var r=n[o-1],i=f(r,e);if(i)return void(n[o-1]=i)}else t(this.observer);n[o]=e},addListeners:function(){this.addListeners_(this.target)},addListeners_:function(e){var t=this.options;t.attributes&&e.addEventListener("DOMAttrModified",this,!0),t.characterData&&e.addEventListener("DOMCharacterDataModified",this,!0),t.childList&&e.addEventListener("DOMNodeInserted",this,!0),(t.childList||t.subtree)&&e.addEventListener("DOMNodeRemoved",this,!0)},removeListeners:function(){this.removeListeners_(this.target)},removeListeners_:function(e){var t=this.options;t.attributes&&e.removeEventListener("DOMAttrModified",this,!0),t.characterData&&e.removeEventListener("DOMCharacterDataModified",this,!0),t.childList&&e.removeEventListener("DOMNodeInserted",this,!0),(t.childList||t.subtree)&&e.removeEventListener("DOMNodeRemoved",this,!0)},addTransientObserver:function(e){if(e!==this.target){this.addListeners_(e),this.transientObservedNodes.push(e);var t=v.get(e);t||v.set(e,t=[]),t.push(this)}},removeTransientObservers:function(){var e=this.transientObservedNodes;this.transientObservedNodes=[],e.forEach(function(e){this.removeListeners_(e);for(var t=v.get(e),n=0;n":return">";case" ":return" "}}function t(t){return t.replace(u,e)}var n="undefined"==typeof HTMLTemplateElement;/Trident/.test(navigator.userAgent)&&!function(){var e=document.importNode;document.importNode=function(){var t=e.apply(document,arguments);if(t.nodeType===Node.DOCUMENT_FRAGMENT_NODE){var n=document.createDocumentFragment();return n.appendChild(t),n}return t}}();var o=function(){if(!n){var e=document.createElement("template"),t=document.createElement("template");t.content.appendChild(document.createElement("div")),e.content.appendChild(t);var o=e.cloneNode(!0);return 0===o.content.childNodes.length||0===o.content.firstChild.content.childNodes.length}}(),r="template",i=function(){};if(n){var a=document.implementation.createHTMLDocument("template"),s=!0,c=document.createElement("style");c.textContent=r+"{display:none;}";var d=document.head;d.insertBefore(c,d.firstElementChild),i.prototype=Object.create(HTMLElement.prototype),i.decorate=function(e){if(!e.content){e.content=a.createDocumentFragment();for(var n;n=e.firstChild;)e.content.appendChild(n);if(e.cloneNode=function(e){return i.cloneNode(this,e)},s)try{Object.defineProperty(e,"innerHTML",{get:function(){for(var e="",n=this.content.firstChild;n;n=n.nextSibling)e+=n.outerHTML||t(n.data);return e},set:function(e){for(a.body.innerHTML=e,i.bootstrap(a);this.content.firstChild;)this.content.removeChild(this.content.firstChild);for(;a.body.firstChild;)this.content.appendChild(a.body.firstChild)},configurable:!0})}catch(o){s=!1}i.bootstrap(e.content)}},i.bootstrap=function(e){for(var t,n=e.querySelectorAll(r),o=0,a=n.length;a>o&&(t=n[o]);o++)i.decorate(t)},document.addEventListener("DOMContentLoaded",function(){i.bootstrap(document)});var l=document.createElement;document.createElement=function(){"use strict";var e=l.apply(document,arguments);return"template"===e.localName&&i.decorate(e),e};var u=/[&\u00A0<>]/g}if(n||o){var h=Node.prototype.cloneNode;i.cloneNode=function(e,t){var n=h.call(e,!1);return this.decorate&&this.decorate(n),t&&(n.content.appendChild(h.call(e.content,!0)),this.fixClonedDom(n.content,e.content)),n},i.fixClonedDom=function(e,t){if(t.querySelectorAll)for(var n,o,i=t.querySelectorAll(r),a=e.querySelectorAll(r),s=0,c=a.length;c>s;s++)o=i[s],n=a[s],this.decorate&&this.decorate(o),n.parentNode.replaceChild(o.cloneNode(!0),n)};var f=document.importNode;Node.prototype.cloneNode=function(e){var t=h.call(this,e);return e&&i.fixClonedDom(t,this),t},document.importNode=function(e,t){if(e.localName===r)return i.cloneNode(e,t);var n=f.call(document,e,t);return t&&i.fixClonedDom(n,e),n},o&&(HTMLTemplateElement.prototype.cloneNode=function(e){return i.cloneNode(this,e)})}n&&(window.HTMLTemplateElement=i)}(),function(e){"use strict";if(!window.performance){var t=Date.now();window.performance={now:function(){return Date.now()-t}}}window.requestAnimationFrame||(window.requestAnimationFrame=function(){var e=window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame;return e?function(t){return e(function(){t(performance.now())})}:function(e){return window.setTimeout(e,1e3/60)}}()),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(){return window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||function(e){clearTimeout(e)}}());var n=function(){var e=document.createEvent("Event");return e.initEvent("foo",!0,!0),e.preventDefault(),e.defaultPrevented}();if(!n){var o=Event.prototype.preventDefault;Event.prototype.preventDefault=function(){this.cancelable&&(o.call(this),Object.defineProperty(this,"defaultPrevented",{get:function(){return!0},configurable:!0}))}}var r=/Trident/.test(navigator.userAgent);if((!window.CustomEvent||r&&"function"!=typeof window.CustomEvent)&&(window.CustomEvent=function(e,t){t=t||{};var n=document.createEvent("CustomEvent");return n.initCustomEvent(e,Boolean(t.bubbles),Boolean(t.cancelable),t.detail),n},window.CustomEvent.prototype=window.Event.prototype),!window.Event||r&&"function"!=typeof window.Event){var i=window.Event;window.Event=function(e,t){t=t||{};var n=document.createEvent("Event");return n.initEvent(e,Boolean(t.bubbles),Boolean(t.cancelable)),n},window.Event.prototype=i.prototype}}(window.WebComponents),window.HTMLImports=window.HTMLImports||{flags:{}},function(e){function t(e,t){t=t||p,o(function(){i(e,t)},t)}function n(e){return"complete"===e.readyState||e.readyState===w}function o(e,t){if(n(t))e&&e();else{var r=function(){"complete"!==t.readyState&&t.readyState!==w||(t.removeEventListener(_,r),o(e,t))};t.addEventListener(_,r)}}function r(e){e.target.__loaded=!0}function i(e,t){function n(){c==d&&e&&e({allImports:s,loadedImports:l,errorImports:u})}function o(e){r(e),l.push(this),c++,n()}function i(e){u.push(this),c++,n()}var s=t.querySelectorAll("link[rel=import]"),c=0,d=s.length,l=[],u=[];if(d)for(var h,f=0;d>f&&(h=s[f]);f++)a(h)?(l.push(this),c++,n()):(h.addEventListener("load",o),h.addEventListener("error",i));else n()}function a(e){return u?e.__loaded||e["import"]&&"loading"!==e["import"].readyState:e.__importParsed}function s(e){for(var t,n=0,o=e.length;o>n&&(t=e[n]);n++)c(t)&&d(t)}function c(e){return"link"===e.localName&&"import"===e.rel}function d(e){var t=e["import"];t?r({target:e}):(e.addEventListener("load",r),e.addEventListener("error",r))}var l="import",u=Boolean(l in document.createElement("link")),h=Boolean(window.ShadowDOMPolyfill),f=function(e){return h?window.ShadowDOMPolyfill.wrapIfNeeded(e):e},p=f(document),m={get:function(){var e=window.HTMLImports.currentScript||document.currentScript||("complete"!==document.readyState?document.scripts[document.scripts.length-1]:null);return f(e)},configurable:!0};Object.defineProperty(document,"_currentScript",m),Object.defineProperty(p,"_currentScript",m);var v=/Trident/.test(navigator.userAgent),w=v?"complete":"interactive",_="readystatechange";u&&(new MutationObserver(function(e){for(var t,n=0,o=e.length;o>n&&(t=e[n]);n++)t.addedNodes&&s(t.addedNodes)}).observe(document.head,{childList:!0}),function(){if("loading"===document.readyState)for(var e,t=document.querySelectorAll("link[rel=import]"),n=0,o=t.length;o>n&&(e=t[n]);n++)d(e)}()),t(function(e){window.HTMLImports.ready=!0,window.HTMLImports.readyTime=(new Date).getTime();var t=p.createEvent("CustomEvent");t.initCustomEvent("HTMLImportsLoaded",!0,!0,e),p.dispatchEvent(t)}),e.IMPORT_LINK_TYPE=l,e.useNative=u,e.rootDocument=p,e.whenReady=t,e.isIE=v}(window.HTMLImports),function(e){var t=[],n=function(e){t.push(e)},o=function(){t.forEach(function(t){t(e)})};e.addModule=n,e.initializeModules=o}(window.HTMLImports),window.HTMLImports.addModule(function(e){var t=/(url\()([^)]*)(\))/g,n=/(@import[\s]+(?!url\())([^;]*)(;)/g,o={resolveUrlsInStyle:function(e,t){var n=e.ownerDocument,o=n.createElement("a");return e.textContent=this.resolveUrlsInCssText(e.textContent,t,o),e},resolveUrlsInCssText:function(e,o,r){var i=this.replaceUrls(e,r,o,t);return i=this.replaceUrls(i,r,o,n)},replaceUrls:function(e,t,n,o){return e.replace(o,function(e,o,r,i){var a=r.replace(/["']/g,"");return n&&(a=new URL(a,n).href),t.href=a,a=t.href,o+"'"+a+"'"+i})}};e.path=o}),window.HTMLImports.addModule(function(e){var t={async:!0,ok:function(e){return e.status>=200&&e.status<300||304===e.status||0===e.status},load:function(n,o,r){var i=new XMLHttpRequest;return(e.flags.debug||e.flags.bust)&&(n+="?"+Math.random()),i.open("GET",n,t.async),i.addEventListener("readystatechange",function(e){if(4===i.readyState){var n=null;try{var a=i.getResponseHeader("Location");a&&(n="/"===a.substr(0,1)?location.origin+a:a)}catch(e){console.error(e.message)}o.call(r,!t.ok(i)&&i,i.response||i.responseText,n)}}),i.send(),i},loadDocument:function(e,t,n){this.load(e,t,n).responseType="document"}};e.xhr=t}),window.HTMLImports.addModule(function(e){var t=e.xhr,n=e.flags,o=function(e,t){this.cache={},this.onload=e,this.oncomplete=t,this.inflight=0,this.pending={}};o.prototype={addNodes:function(e){this.inflight+=e.length;for(var t,n=0,o=e.length;o>n&&(t=e[n]);n++)this.require(t);this.checkDone()},addNode:function(e){this.inflight++,this.require(e),this.checkDone()},require:function(e){var t=e.src||e.href;e.__nodeUrl=t,this.dedupe(t,e)||this.fetch(t,e)},dedupe:function(e,t){if(this.pending[e])return this.pending[e].push(t),!0;return this.cache[e]?(this.onload(e,t,this.cache[e]),this.tail(),!0):(this.pending[e]=[t],!1)},fetch:function(e,o){if(n.load&&console.log("fetch",e,o),e)if(e.match(/^data:/)){var r=e.split(","),i=r[0],a=r[1];a=i.indexOf(";base64")>-1?atob(a):decodeURIComponent(a),setTimeout(function(){this.receive(e,o,null,a)}.bind(this),0)}else{var s=function(t,n,r){this.receive(e,o,t,n,r)}.bind(this);t.load(e,s)}else setTimeout(function(){this.receive(e,o,{error:"href must be specified"},null)}.bind(this),0)},receive:function(e,t,n,o,r){this.cache[e]=o;for(var i,a=this.pending[e],s=0,c=a.length;c>s&&(i=a[s]);s++)this.onload(e,i,o,n,r),this.tail();this.pending[e]=null},tail:function(){--this.inflight,this.checkDone()},checkDone:function(){this.inflight||this.oncomplete()}},e.Loader=o}),window.HTMLImports.addModule(function(e){var t=function(e){this.addCallback=e,this.mo=new MutationObserver(this.handler.bind(this))};t.prototype={handler:function(e){for(var t,n=0,o=e.length;o>n&&(t=e[n]);n++)"childList"===t.type&&t.addedNodes.length&&this.addedNodes(t.addedNodes)},addedNodes:function(e){this.addCallback&&this.addCallback(e);for(var t,n=0,o=e.length;o>n&&(t=e[n]);n++)t.children&&t.children.length&&this.addedNodes(t.children)},observe:function(e){this.mo.observe(e,{childList:!0,subtree:!0})}},e.Observer=t}),window.HTMLImports.addModule(function(e){function t(e){return"link"===e.localName&&e.rel===l}function n(e){var t=o(e);return"data:text/javascript;charset=utf-8,"+encodeURIComponent(t)}function o(e){return e.textContent+r(e)}function r(e){var t=e.ownerDocument;t.__importedScripts=t.__importedScripts||0;var n=e.ownerDocument.baseURI,o=t.__importedScripts?"-"+t.__importedScripts:"";return t.__importedScripts++,"\n//# sourceURL="+n+o+".js\n"}function i(e){var t=e.ownerDocument.createElement("style");return t.textContent=e.textContent,a.resolveUrlsInStyle(t),t}var a=e.path,s=e.rootDocument,c=e.flags,d=e.isIE,l=e.IMPORT_LINK_TYPE,u="link[rel="+l+"]",h={documentSelectors:u,importsSelectors:[u,"link[rel=stylesheet]:not([type])","style:not([type])","script:not([type])",'script[type="application/javascript"]','script[type="text/javascript"]'].join(","),map:{link:"parseLink",script:"parseScript",style:"parseStyle"},dynamicElements:[],parseNext:function(){var e=this.nextToParse();e&&this.parse(e)},parse:function(e){if(this.isParsed(e))return void(c.parse&&console.log("[%s] is already parsed",e.localName));var t=this[this.map[e.localName]];t&&(this.markParsing(e),t.call(this,e))},parseDynamic:function(e,t){this.dynamicElements.push(e),t||this.parseNext()},markParsing:function(e){c.parse&&console.log("parsing",e),this.parsingElement=e},markParsingComplete:function(e){e.__importParsed=!0,this.markDynamicParsingComplete(e),e.__importElement&&(e.__importElement.__importParsed=!0,this.markDynamicParsingComplete(e.__importElement)),this.parsingElement=null,c.parse&&console.log("completed",e)},markDynamicParsingComplete:function(e){var t=this.dynamicElements.indexOf(e);t>=0&&this.dynamicElements.splice(t,1)},parseImport:function(e){if(e["import"]=e.__doc,window.HTMLImports.__importsParsingHook&&window.HTMLImports.__importsParsingHook(e),e["import"]&&(e["import"].__importParsed=!0),this.markParsingComplete(e),e.__resource&&!e.__error?e.dispatchEvent(new CustomEvent("load",{bubbles:!1})):e.dispatchEvent(new CustomEvent("error",{bubbles:!1})),e.__pending)for(var t;e.__pending.length;)t=e.__pending.shift(),t&&t({target:e});this.parseNext()},parseLink:function(e){t(e)?this.parseImport(e):(e.href=e.href,this.parseGeneric(e))},parseStyle:function(e){var t=e;e=i(e),t.__appliedElement=e,e.__importElement=t,this.parseGeneric(e)},parseGeneric:function(e){this.trackElement(e),this.addElementToDocument(e)},rootImportForElement:function(e){for(var t=e;t.ownerDocument.__importLink;)t=t.ownerDocument.__importLink;return t},addElementToDocument:function(e){var t=this.rootImportForElement(e.__importElement||e);t.parentNode.insertBefore(e,t)},trackElement:function(e,t){var n=this,o=function(r){e.removeEventListener("load",o),e.removeEventListener("error",o),t&&t(r),n.markParsingComplete(e),n.parseNext()};if(e.addEventListener("load",o),e.addEventListener("error",o),d&&"style"===e.localName){var r=!1;if(-1==e.textContent.indexOf("@import"))r=!0;else if(e.sheet){r=!0;for(var i,a=e.sheet.cssRules,s=a?a.length:0,c=0;s>c&&(i=a[c]);c++)i.type===CSSRule.IMPORT_RULE&&(r=r&&Boolean(i.styleSheet))}r&&setTimeout(function(){e.dispatchEvent(new CustomEvent("load",{bubbles:!1}))})}},parseScript:function(t){var o=document.createElement("script");o.__importElement=t,o.src=t.src?t.src:n(t),e.currentScript=t,this.trackElement(o,function(t){o.parentNode&&o.parentNode.removeChild(o),e.currentScript=null}),this.addElementToDocument(o)},nextToParse:function(){return this._mayParse=[],!this.parsingElement&&(this.nextToParseInDoc(s)||this.nextToParseDynamic())},nextToParseInDoc:function(e,n){if(e&&this._mayParse.indexOf(e)<0){this._mayParse.push(e);for(var o,r=e.querySelectorAll(this.parseSelectorsForNode(e)),i=0,a=r.length;a>i&&(o=r[i]);i++)if(!this.isParsed(o))return this.hasResource(o)?t(o)?this.nextToParseInDoc(o.__doc,o):o:void 0}return n},nextToParseDynamic:function(){return this.dynamicElements[0]},parseSelectorsForNode:function(e){var t=e.ownerDocument||e;return t===s?this.documentSelectors:this.importsSelectors},isParsed:function(e){return e.__importParsed},needsDynamicParsing:function(e){return this.dynamicElements.indexOf(e)>=0},hasResource:function(e){return!t(e)||void 0!==e.__doc}};e.parser=h,e.IMPORT_SELECTOR=u}),window.HTMLImports.addModule(function(e){function t(e){return n(e,a)}function n(e,t){return"link"===e.localName&&e.getAttribute("rel")===t}function o(e){return!!Object.getOwnPropertyDescriptor(e,"baseURI")}function r(e,t){var n=document.implementation.createHTMLDocument(a);n._URL=t;var r=n.createElement("base");r.setAttribute("href",t),n.baseURI||o(n)||Object.defineProperty(n,"baseURI",{value:t});var i=n.createElement("meta");return i.setAttribute("charset","utf-8"),n.head.appendChild(i),n.head.appendChild(r),n.body.innerHTML=e,window.HTMLTemplateElement&&HTMLTemplateElement.bootstrap&&HTMLTemplateElement.bootstrap(n),n}var i=e.flags,a=e.IMPORT_LINK_TYPE,s=e.IMPORT_SELECTOR,c=e.rootDocument,d=e.Loader,l=e.Observer,u=e.parser,h={documents:{},documentPreloadSelectors:s,importsPreloadSelectors:[s].join(","),loadNode:function(e){f.addNode(e)},loadSubtree:function(e){var t=this.marshalNodes(e);f.addNodes(t)},marshalNodes:function(e){return e.querySelectorAll(this.loadSelectorsForNode(e))},loadSelectorsForNode:function(e){var t=e.ownerDocument||e;return t===c?this.documentPreloadSelectors:this.importsPreloadSelectors},loaded:function(e,n,o,a,s){if(i.load&&console.log("loaded",e,n),n.__resource=o,n.__error=a,t(n)){var c=this.documents[e];void 0===c&&(c=a?null:r(o,s||e),c&&(c.__importLink=n,this.bootDocument(c)),this.documents[e]=c),n.__doc=c}u.parseNext()},bootDocument:function(e){this.loadSubtree(e),this.observer.observe(e),u.parseNext()},loadedAll:function(){u.parseNext()}},f=new d(h.loaded.bind(h),h.loadedAll.bind(h));if(h.observer=new l,!document.baseURI){var p={get:function(){var e=document.querySelector("base");return e?e.href:window.location.href},configurable:!0};Object.defineProperty(document,"baseURI",p),Object.defineProperty(c,"baseURI",p)}e.importer=h,e.importLoader=f}),window.HTMLImports.addModule(function(e){var t=e.parser,n=e.importer,o={added:function(e){for(var o,r,i,a,s=0,c=e.length;c>s&&(a=e[s]);s++)o||(o=a.ownerDocument,r=t.isParsed(o)),i=this.shouldLoadNode(a),i&&n.loadNode(a),this.shouldParseNode(a)&&r&&t.parseDynamic(a,i)},shouldLoadNode:function(e){return 1===e.nodeType&&r.call(e,n.loadSelectorsForNode(e))},shouldParseNode:function(e){return 1===e.nodeType&&r.call(e,t.parseSelectorsForNode(e))}};n.observer.addCallback=o.added.bind(o);var r=HTMLElement.prototype.matches||HTMLElement.prototype.matchesSelector||HTMLElement.prototype.webkitMatchesSelector||HTMLElement.prototype.mozMatchesSelector||HTMLElement.prototype.msMatchesSelector}),function(e){function t(){window.HTMLImports.importer.bootDocument(o)}var n=e.initializeModules;e.isIE;if(!e.useNative){n();var o=e.rootDocument;"complete"===document.readyState||"interactive"===document.readyState&&!window.attachEvent?t():document.addEventListener("DOMContentLoaded",t)}}(window.HTMLImports),window.CustomElements=window.CustomElements||{flags:{}},function(e){var t=e.flags,n=[],o=function(e){n.push(e)},r=function(){n.forEach(function(t){t(e)})};e.addModule=o,e.initializeModules=r,e.hasNative=Boolean(document.registerElement),e.isIE=/Trident/.test(navigator.userAgent),e.useNative=!t.register&&e.hasNative&&!window.ShadowDOMPolyfill&&(!window.HTMLImports||window.HTMLImports.useNative)}(window.CustomElements),window.CustomElements.addModule(function(e){function t(e,t){n(e,function(e){return t(e)?!0:void o(e,t)}),o(e,t)}function n(e,t,o){var r=e.firstElementChild;if(!r)for(r=e.firstChild;r&&r.nodeType!==Node.ELEMENT_NODE;)r=r.nextSibling;for(;r;)t(r,o)!==!0&&n(r,t,o),r=r.nextElementSibling;return null}function o(e,n){for(var o=e.shadowRoot;o;)t(o,n),o=o.olderShadowRoot}function r(e,t){i(e,t,[])}function i(e,t,n){if(e=window.wrap(e),!(n.indexOf(e)>=0)){n.push(e);for(var o,r=e.querySelectorAll("link[rel="+a+"]"),s=0,c=r.length;c>s&&(o=r[s]);s++)o["import"]&&i(o["import"],t,n);t(e)}}var a=window.HTMLImports?window.HTMLImports.IMPORT_LINK_TYPE:"none";e.forDocumentTree=r,e.forSubtree=t}),window.CustomElements.addModule(function(e){function t(e,t){return n(e,t)||o(e,t)}function n(t,n){return e.upgrade(t,n)?!0:void(n&&a(t))}function o(e,t){g(e,function(e){return n(e,t)?!0:void 0})}function r(e){L.push(e),E||(E=!0,setTimeout(i))}function i(){E=!1;for(var e,t=L,n=0,o=t.length;o>n&&(e=t[n]);n++)e();L=[]}function a(e){y?r(function(){s(e)}):s(e)}function s(e){ -e.__upgraded__&&!e.__attached&&(e.__attached=!0,e.attachedCallback&&e.attachedCallback())}function c(e){d(e),g(e,function(e){d(e)})}function d(e){y?r(function(){l(e)}):l(e)}function l(e){e.__upgraded__&&e.__attached&&(e.__attached=!1,e.detachedCallback&&e.detachedCallback())}function u(e){for(var t=e,n=window.wrap(document);t;){if(t==n)return!0;t=t.parentNode||t.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&t.host}}function h(e){if(e.shadowRoot&&!e.shadowRoot.__watched){_.dom&&console.log("watching shadow-root for: ",e.localName);for(var t=e.shadowRoot;t;)m(t),t=t.olderShadowRoot}}function f(e,n){if(_.dom){var o=n[0];if(o&&"childList"===o.type&&o.addedNodes&&o.addedNodes){for(var r=o.addedNodes[0];r&&r!==document&&!r.host;)r=r.parentNode;var i=r&&(r.URL||r._URL||r.host&&r.host.localName)||"";i=i.split("/?").shift().split("/").pop()}console.group("mutations (%d) [%s]",n.length,i||"")}var a=u(e);n.forEach(function(e){"childList"===e.type&&(N(e.addedNodes,function(e){e.localName&&t(e,a)}),N(e.removedNodes,function(e){e.localName&&c(e)}))}),_.dom&&console.groupEnd()}function p(e){for(e=window.wrap(e),e||(e=window.wrap(document));e.parentNode;)e=e.parentNode;var t=e.__observer;t&&(f(e,t.takeRecords()),i())}function m(e){if(!e.__observer){var t=new MutationObserver(f.bind(this,e));t.observe(e,{childList:!0,subtree:!0}),e.__observer=t}}function v(e){e=window.wrap(e),_.dom&&console.group("upgradeDocument: ",e.baseURI.split("/").pop());var n=e===window.wrap(document);t(e,n),m(e),_.dom&&console.groupEnd()}function w(e){b(e,v)}var _=e.flags,g=e.forSubtree,b=e.forDocumentTree,y=window.MutationObserver._isPolyfilled&&_["throttle-attached"];e.hasPolyfillMutations=y,e.hasThrottledAttached=y;var E=!1,L=[],N=Array.prototype.forEach.call.bind(Array.prototype.forEach),M=Element.prototype.createShadowRoot;M&&(Element.prototype.createShadowRoot=function(){var e=M.call(this);return window.CustomElements.watchShadow(this),e}),e.watchShadow=h,e.upgradeDocumentTree=w,e.upgradeDocument=v,e.upgradeSubtree=o,e.upgradeAll=t,e.attached=a,e.takeRecords=p}),window.CustomElements.addModule(function(e){function t(t,o){if("template"===t.localName&&window.HTMLTemplateElement&&HTMLTemplateElement.decorate&&HTMLTemplateElement.decorate(t),!t.__upgraded__&&t.nodeType===Node.ELEMENT_NODE){var r=t.getAttribute("is"),i=e.getRegisteredDefinition(t.localName)||e.getRegisteredDefinition(r);if(i&&(r&&i.tag==t.localName||!r&&!i["extends"]))return n(t,i,o)}}function n(t,n,r){return a.upgrade&&console.group("upgrade:",t.localName),n.is&&t.setAttribute("is",n.is),o(t,n),t.__upgraded__=!0,i(t),r&&e.attached(t),e.upgradeSubtree(t,r),a.upgrade&&console.groupEnd(),t}function o(e,t){Object.__proto__?e.__proto__=t.prototype:(r(e,t.prototype,t["native"]),e.__proto__=t.prototype)}function r(e,t,n){for(var o={},r=t;r!==n&&r!==HTMLElement.prototype;){for(var i,a=Object.getOwnPropertyNames(r),s=0;i=a[s];s++)o[i]||(Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(r,i)),o[i]=1);r=Object.getPrototypeOf(r)}}function i(e){e.createdCallback&&e.createdCallback()}var a=e.flags;e.upgrade=t,e.upgradeWithDefinition=n,e.implementPrototype=o}),window.CustomElements.addModule(function(e){function t(t,o){var c=o||{};if(!t)throw new Error("document.registerElement: first argument `name` must not be empty");if(t.indexOf("-")<0)throw new Error("document.registerElement: first argument ('name') must contain a dash ('-'). Argument provided was '"+String(t)+"'.");if(r(t))throw new Error("Failed to execute 'registerElement' on 'Document': Registration failed for type '"+String(t)+"'. The type name is invalid.");if(d(t))throw new Error("DuplicateDefinitionError: a type with name '"+String(t)+"' is already registered");return c.prototype||(c.prototype=Object.create(HTMLElement.prototype)),c.__name=t.toLowerCase(),c["extends"]&&(c["extends"]=c["extends"].toLowerCase()),c.lifecycle=c.lifecycle||{},c.ancestry=i(c["extends"]),a(c),s(c),n(c.prototype),l(c.__name,c),c.ctor=u(c),c.ctor.prototype=c.prototype,c.prototype.constructor=c.ctor,e.ready&&v(document),c.ctor}function n(e){if(!e.setAttribute._polyfilled){var t=e.setAttribute;e.setAttribute=function(e,n){o.call(this,e,n,t)};var n=e.removeAttribute;e.removeAttribute=function(e){o.call(this,e,null,n)},e.setAttribute._polyfilled=!0}}function o(e,t,n){e=e.toLowerCase();var o=this.getAttribute(e);n.apply(this,arguments);var r=this.getAttribute(e);this.attributeChangedCallback&&r!==o&&this.attributeChangedCallback(e,o,r)}function r(e){for(var t=0;t=0&&g(o,HTMLElement),o)}function p(e,t){var n=e[t];e[t]=function(){var e=n.apply(this,arguments);return w(e),e}}var m,v=(e.isIE,e.upgradeDocumentTree),w=e.upgradeAll,_=e.upgradeWithDefinition,g=e.implementPrototype,b=e.useNative,y=["annotation-xml","color-profile","font-face","font-face-src","font-face-uri","font-face-format","font-face-name","missing-glyph"],E={},L="http://www.w3.org/1999/xhtml",N=document.createElement.bind(document),M=document.createElementNS.bind(document);m=Object.__proto__||b?function(e,t){return e instanceof t}:function(e,t){if(e instanceof t)return!0;for(var n=e;n;){if(n===t.prototype)return!0;n=n.__proto__}return!1},p(Node.prototype,"cloneNode"),p(document,"importNode"),document.registerElement=t,document.createElement=f,document.createElementNS=h,e.registry=E,e["instanceof"]=m,e.reservedTagList=y,e.getRegisteredDefinition=d,document.register=document.registerElement}),function(e){function t(){i(window.wrap(document)),window.CustomElements.ready=!0;var e=window.requestAnimationFrame||function(e){setTimeout(e,16)};e(function(){setTimeout(function(){window.CustomElements.readyTime=Date.now(),window.HTMLImports&&(window.CustomElements.elapsed=window.CustomElements.readyTime-window.HTMLImports.readyTime),document.dispatchEvent(new CustomEvent("WebComponentsReady",{bubbles:!0}))})})}var n=e.useNative,o=e.initializeModules;e.isIE;if(n){var r=function(){};e.watchShadow=r,e.upgrade=r,e.upgradeAll=r,e.upgradeDocumentTree=r,e.upgradeSubtree=r,e.takeRecords=r,e["instanceof"]=function(e,t){return e instanceof t}}else o();var i=e.upgradeDocumentTree,a=e.upgradeDocument;if(window.wrap||(window.ShadowDOMPolyfill?(window.wrap=window.ShadowDOMPolyfill.wrapIfNeeded,window.unwrap=window.ShadowDOMPolyfill.unwrapIfNeeded):window.wrap=window.unwrap=function(e){return e}),window.HTMLImports&&(window.HTMLImports.__importsParsingHook=function(e){e["import"]&&a(wrap(e["import"]))}),"complete"===document.readyState||e.flags.eager)t();else if("interactive"!==document.readyState||window.attachEvent||window.HTMLImports&&!window.HTMLImports.ready){var s=window.HTMLImports&&!window.HTMLImports.ready?"HTMLImportsLoaded":"DOMContentLoaded";window.addEventListener(s,t)}else t()}(window.CustomElements),function(e){var t=document.createElement("style");t.textContent="body {transition: opacity ease-in 0.2s; } \nbody[unresolved] {opacity: 0; display: block; overflow: hidden; position: relative; } \n";var n=document.querySelector("head");n.insertBefore(t,n.firstChild)}(window.WebComponents); \ No newline at end of file From c4681c7c71bc8839f55a529a95115713760559b0 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 23 Jan 2019 11:35:56 -0800 Subject: [PATCH 51/57] Update blog posts --- source/_components/notify.discord.markdown | 4 +- source/_components/notify.group.markdown | 2 +- source/_includes/asides/about.html | 2 +- source/_includes/custom/footer.html | 2 +- source/_includes/custom/header.html | 2 +- source/_includes/custom/welcome.html | 2 +- source/_includes/site/hero_unit.html | 2 +- .../2019-01-23-lovelace-released.markdown | 42 ++++--- source/_posts/2019-01-23-release-86.markdown | 106 +++++++++++++++--- source/demo/index.html | 99 +--------------- source/images/blog/2019-01-lovelace/demo.png | Bin 0 -> 69839 bytes .../images/blog/2019-01-release-86/demo.png | Bin 0 -> 109411 bytes source/images/blog/2019-01-release-86/zha.png | Bin 0 -> 32153 bytes source/images/favicon-192x192-full.png | Bin 0 -> 13472 bytes 14 files changed, 123 insertions(+), 140 deletions(-) create mode 100644 source/images/blog/2019-01-lovelace/demo.png create mode 100644 source/images/blog/2019-01-release-86/demo.png create mode 100644 source/images/blog/2019-01-release-86/zha.png create mode 100644 source/images/favicon-192x192-full.png diff --git a/source/_components/notify.discord.markdown b/source/_components/notify.discord.markdown index 01fca89820b..6f296ea538e 100644 --- a/source/_components/notify.discord.markdown +++ b/source/_components/notify.discord.markdown @@ -18,7 +18,7 @@ In order to get a token you need to go to the [Discord My Apps page](https://dis Retreive the **Client ID** from the information section and the (hidden) **Token** of your bot for later. -When setting up the application you can use this [icon](/demo/favicon-192x192.png). +When setting up the application you can use this [icon](/images/favicon-192x192-full.png). To use Discord notifications, add the following to your `configuration.yaml` file: @@ -79,7 +79,7 @@ This channel ID has to be used as the target when calling the notification servi "0987654321" ], "data": { - "images": [ + "images": [ "/tmp/garage_cam.jpg" ] } diff --git a/source/_components/notify.group.markdown b/source/_components/notify.group.markdown index 467ec40282b..dd315ce0339 100644 --- a/source/_components/notify.group.markdown +++ b/source/_components/notify.group.markdown @@ -57,5 +57,5 @@ An example on how to use it in an automation: action: service: notify.NAME_OF_NOTIFIER_GROUP data: - message: "The sun is {% if is_state('sun.sun', 'above_horizon') %}up{% else %}down{% endif %}!" + message: "{% raw %}The sun is {% if is_state('sun.sun', 'above_horizon') %}up{% else %}down{% endif %}{% endraw %}!" ``` diff --git a/source/_includes/asides/about.html b/source/_includes/asides/about.html index 5d672861adc..e4a12f32618 100644 --- a/source/_includes/asides/about.html +++ b/source/_includes/asides/about.html @@ -5,7 +5,7 @@ Home Assistant is an open-source home automation platform running on Python 3. Track and control all devices at home and automate control.
  • Get started with Home Assistant
  • -
  • Try the online demo
  • +
  • Try the online demo
  • diff --git a/source/_includes/custom/footer.html b/source/_includes/custom/footer.html index 911b66602cd..d82ba666e56 100644 --- a/source/_includes/custom/footer.html +++ b/source/_includes/custom/footer.html @@ -1,7 +1,7 @@