From 2d95ce1bd99c95622b33339516699d128d97f89b Mon Sep 17 00:00:00 2001 From: William Scanlon Date: Fri, 23 Sep 2016 16:57:03 -0400 Subject: [PATCH 01/70] Wink updates --- source/_components/wink.markdown | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/source/_components/wink.markdown b/source/_components/wink.markdown index 4cd2283687b..e8e43b30bfb 100644 --- a/source/_components/wink.markdown +++ b/source/_components/wink.markdown @@ -32,12 +32,36 @@ wink: access_token: YOUR_ACCESS_TOKEN ``` +You can also request API access via Wink's [contact us](http://www.wink.com/help/contact/) page. + +You will be provided with a client ID and a client secret via email. These can then be used in your configuration in place of the access_token this will prevent you from having to manually refresh your access token. + +```yaml +wink: + email: YOUR_WINK_EMAIL_ADDRESS + password: YOUR_WINK_PASSWORD + client_id: YOUR_WINK_CLIENT_ID + client_secret: YOUR_WINK_CLIENT_SECRET +``` + +The following can also be provied to allow access to the Wink Relay sensors. This value could change at any time. + +```yaml +wink: + user_agent: Manufacturer/Home-Assistant WinkAndroid/4 +``` + Configuration variables: -- **access_token** (*Required*): The retrieved access token. +- **access_token** (*Required if the below aren't present.*): The retrieved access token. +- **email** (*Required if access token isn't provied*): Your Wink login email. +- **password** (*Required if access token isn't provied*): Your Wink loging password. +- **client_id** (*Required if access token isn't provied*): Your provided Wink client_id. +- **client_secret** (*Required if access token isn't provied*): Your provided Wink client_secret. +- **user_agent** (*Optional*): The user-agent passed in the API calls to Wink. This will connect to the Wink hub and automatically set up any lights, switches and sensors that it finds.

-The Wink hub can only be accessed via the cloud. This means it requires an active internet connection and you will experience delays when controlling devices (~3s) and getting an updated device state (~15s). +The Wink hub can only be accessed via the cloud. This means it requires an active internet connection and you will experience delays when controlling and updating devices (~3s).

From 4ab9d603d5d39a84410c85d5c37c776790b619bb Mon Sep 17 00:00:00 2001 From: Tim Date: Thu, 29 Sep 2016 17:17:45 +0930 Subject: [PATCH 02/70] Fix/shorten title for component (#1000) --- source/_components/sensor.bom.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.bom.markdown b/source/_components/sensor.bom.markdown index 9e1c2f293fd..efbce70ef57 100644 --- a/source/_components/sensor.bom.markdown +++ b/source/_components/sensor.bom.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "Weather data by the Bureau of Meteorology Australia" +title: "Bureau of Meteorology (BOM) Australia" description: "Instructions on how to integrate Bureau of Meteorology Australia weather conditions into Home Assistant." date: 2016-09-13 18:00 sidebar: true From 904d8f5c6a4024509b51d037c69d49ed85632fd8 Mon Sep 17 00:00:00 2001 From: Nemanja Stefanovic Date: Thu, 29 Sep 2016 11:49:33 -0500 Subject: [PATCH 03/70] add a link to another supported client, Happy Bubbles presence server (#1004) --- source/_components/sensor.mqtt_room.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/sensor.mqtt_room.markdown b/source/_components/sensor.mqtt_room.markdown index 425ac54367b..56ac59cb4f2 100644 --- a/source/_components/sensor.mqtt_room.markdown +++ b/source/_components/sensor.mqtt_room.markdown @@ -54,3 +54,4 @@ Each client should post the discovered devices in its own subtopic of the config Instead of developing your own application, you can also use any of these already existing clients: - [**room-assistant**](https://github.com/mKeRix/room-assistant): looks for Bluetooth LE beacons, based on Node.js +- [**Happy Bubbles Presence Server**](https://github.com/happy-bubbles/presence): presence detection server for Happy Bubbles BLE-scanning devices, based on Go From 8d7a004316516db651824b6f342ea7906b8f6577 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 30 Sep 2016 18:38:12 +0200 Subject: [PATCH 04/70] Add Digital Ocean docs (#987) --- .../binary_sensor.digital_ocean.markdown | 32 ++++++++++++++++++ source/_components/digital_ocean.markdown | 32 ++++++++++++++++++ source/_components/foursquare.markdown | 2 +- .../_components/switch.digital_ocean.markdown | 32 ++++++++++++++++++ .../images/supported_brands/digital_ocean.png | Bin 0 -> 13934 bytes 5 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 source/_components/binary_sensor.digital_ocean.markdown create mode 100644 source/_components/digital_ocean.markdown create mode 100644 source/_components/switch.digital_ocean.markdown create mode 100644 source/images/supported_brands/digital_ocean.png diff --git a/source/_components/binary_sensor.digital_ocean.markdown b/source/_components/binary_sensor.digital_ocean.markdown new file mode 100644 index 00000000000..48e17b354d0 --- /dev/null +++ b/source/_components/binary_sensor.digital_ocean.markdown @@ -0,0 +1,32 @@ +--- +layout: page +title: "Digital Ocean Binary Sensor" +description: "Instructions on how to set up Digital Ocean binary sensors within Home Assistant." +date: 2016-09-24 08:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: System Monitor +logo: digital_ocean.png +ha_release: "0.30" +ha_iot_class: "Local Polling" +--- + +The `digital_ocean` binary sensor platform allows you to monitor your Digital Ocean droplets. + +To use your Digital Ocean droplets, you first have to set up your [Digital Ocean hub](/components/digital_ocean/) and then add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +binary_sensor: + - platform: digital_ocean + droplets: + - 'fedora-512mb-nyc3-01' + - 'coreos-512mb-nyc3-01' +``` + +Configuration variables: + +- **droplets** (*Required*): List of droplets you want to control. + diff --git a/source/_components/digital_ocean.markdown b/source/_components/digital_ocean.markdown new file mode 100644 index 00000000000..7e20f8dc5d2 --- /dev/null +++ b/source/_components/digital_ocean.markdown @@ -0,0 +1,32 @@ +--- +layout: page +title: "Digital Ocean" +description: "Instructions how to integrate the Digital Ocean within Home Assistant." +date: 2016-09-24 20:00 +sidebar: true +comments: false +sharing: true +footer: true +featured: true +ha_category: Hub +ha_release: "0.30" +logo: digital_ocean.png +ha_iot_class: "Local Polling" +--- + + +The `digital_ocean` component allows you to access the information about your [Digital Ocean](https://www.digitalocean.com/) droplets from Home Assistant. + +Obtain your API key from your [Digital Ocean dashboard](https://cloud.digitalocean.com/settings/api/tokens). + +To integrate your Digital Ocena droplets with Home Assistant, add the following section to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +digital_ocean: + access_token: YOUR_API_KEY +``` + +Configuration variables: + +- **access_token** (*Required*): Your Digital Ocean API access token. diff --git a/source/_components/foursquare.markdown b/source/_components/foursquare.markdown index b2277da003d..582eae421df 100644 --- a/source/_components/foursquare.markdown +++ b/source/_components/foursquare.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: foursquare.png -featured: true +featured: false ha_category: Social ha_release: 0.26 ha_iot_class: "Cloud Polling and Cloud Push" diff --git a/source/_components/switch.digital_ocean.markdown b/source/_components/switch.digital_ocean.markdown new file mode 100644 index 00000000000..a7a77af1f54 --- /dev/null +++ b/source/_components/switch.digital_ocean.markdown @@ -0,0 +1,32 @@ +--- +layout: page +title: "Digital Ocean Switch" +description: "Instructions on how to set up Digital Ocean switches within Home Assistant." +date: 2016-09-24 08:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: digital_ocean.png +ha_category: System Monitor +ha_release: "0.30" +ha_iot_class: "Local Polling" +--- + +The `digital_ocean` switch platform allows you to control (start/stop) your Digital Ocean droplets. + +To use your Digital Ocean droplets, you first have to set up your [Digital Ocean hub](/components/digital_ocean/) and then add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +switch: + - platform: digital_ocean + droplets: + - 'fedora-512mb-nyc3-01' + - 'coreos-512mb-nyc3-01' +``` + +Configuration variables: + +- **droplets** (*Required*): List of droplets you want to control. + diff --git a/source/images/supported_brands/digital_ocean.png b/source/images/supported_brands/digital_ocean.png new file mode 100644 index 0000000000000000000000000000000000000000..a1f83c953510c6f5df4a0faffd778db6ffe7e014 GIT binary patch literal 13934 zcmbVzRahKN(C(taSr!YvXmBUEFRnosf&_O67Ti4qcZUQBPLSa4!6jI5cX$7n@BBCC zT%L=a?Ps2;p02L0s<&h!RF!2g(TLFi005?(EJO_efQy5TpHYxu*N00!Ti74!XIUL* z0015L^#=z?&wLBJN#r60by0UPcX2avG6RU4IvAUQhgn`Odi_2tJJlsyynugJ>wSzfs{f>;?aC1U#Tm;$ zl>{BSUW;bGYr*!#KK!6uTX_UXZvN$VjHv#Gil#vqV_%K(*nI;liczwVXzZ@=_uYj@ ztCV)jvm3JKCg+XKRu(-g6nIE(rp;r5A<7$z1j^xf;k-Q$LS zmo}~jkZpGbA*&E+_t;x3n?I6TXHe=HBlhmFE@HNrGAZbu%ld zILH>tL}vpLp{Q2e7ljJViKF_1#Sqc*>Ypyk(Hx9W$z@y&+4+KKMvclTb*VYOk<$(Z zcOzoC!}b`g*}73<=-~21ZVR#Z*JS?27xo*uEGB#=yw$RKOt|WBhtBWAi}(h3JL7eC zJ&NzyDkhlE>G(&Mh%au%)`iP>6m3jTxtPB7+*nq~J%wRHX@Q#sJ`IRlfAw>k-~Z&8 zndDB_sW^Lq-sDBNrQaDGT)*#G@m#=a`Le9FU&($!JyOg|eKdBC8FuuvjD7sa&ui%C z(n`MS_Gl@IwlzHq5K#dUlz#8+rEzjE63xZ2xv_l^ZXD;1Wh3=VnrhhCtzH^AtoCq4 zu$v_wSsoh^j;dfrP_$itYs55Rp1Sh>hd6>N3VeJk%7iY0@|Rv0dISF7#&0L%>l=Gs z%G(zku)9CP1eU0BB2ceymZ&0cLERdvV_mC*P24G7y>meE!L2&1S{j~juJuPP^IIa9 zVJ@Ex(UH%wE~?+bMNGF4`P^ph_7Ah%N5p>o#pT<>NK&ppSvX zMl%4r{OxbVx*o-iZ9Zj@9w|pv7tWKIkMt594~C3meW7(0noIc;Zv#gITR)z`$#crs z%#BqUHqbn>;T$eP-R6LxY6}t5(58n=O@Ry}z5h+;kJ?1valjuYI1oypN`8^&7=?F& zlVR3LTaDnDYpI_k#bsR4y-XngyjNSa(wS9;U+ux#r^<+pqEp@tWvuIQXX&m7sm-UA z%}Q%g0cVQjlMnz-5nt1d;So^Gqkcnx@K!emD=@Xc z=@_l9LSTPgD$>gR=wdU-4(hjWq7ok>p>Q@yr6c2Vv*r9|YDiGL2aAd)Jk}UV?rHKO z3h%4(Pmj$yI_p=lLf?$}m6G%gLEcu9fucX3zKMXtN--*LJ*KF*@YB8>x^fWxoSV?s z*nVcB5>3oL;i~KC_|IAg5%WsZe_(Z`BEhvs9OOZc8YWAe2B}p!P zl<})vF_FhF>7ulipMUb2W{Q{-IgF@@Nm2qn1XuRZ zu5?@I#U!C!iRa=l>}0To`Yt5l=6IRU!$GoR^MfIQg+==i=M%d+=ihu!E$^VYY6t4h7sYPqFurlv7cU85Cp0k}+`a zelm@%VNoZd%A&EYiv^MoG2HsuLKZf^_WjRC710?nh7hzBEXp3AoHned<;8-@Bq%vONzHCO6$~l1Z(!qv#WLxI3GF5EPF_rEF8p z4hF7}?w>rbxyjrdO=-FC%Y@G}6`tx*dut12oHe9B^3I^|;S(sa9j5rX1o(0H!x?j* zCrV^@8x;!Xsbt_STnel=^>Xf?)Y!c2Zg}!uCi$A^J}-Y1xtczZ{)dYex#hq2xV==& zw{IxKqwn`LPXKr9-Lh1(+-p^RjNye6NDFT!Df4`)VwGz8p-$+nbBzEpOT6$Ov??9y z7?CR*hn!}Z5ps%@th_iHAQHAemZ^gt+Jx^SJS4u@FO8a)r}9@;py!so%&s(9>^=w2 zX4!p^RB0Fdp8VX?4~iQmd_M7dc|3d?+<{qdm~?wCmtRixLPUL3EM|zdZF4y&5F_BQ z7k+8oaBT>lOhr+?Ywd({T!cp&V*X;oi1!Z4u?--?p5td0aZPZLjIzIIf4XM-9f|@P z>eAh0s+76qAln(!_PyRval8F-mXeY~taSg+_r;~$4nx?AG45lwv(%v*p3EFyq4^%fj`L##R5izpScq0H z>y3c+DMHKxM0(IzEm0dPq(}wQk3cRx;7-Y!t>#*K_V6QY>38^JZsVFVH0qSIsJ_q@ zpNE{y+hKdNfK7^W#N2*_Yxtgo+mntdI5eG}>gaZiS@`##n1-`4>tTHPRd2J!J$cxV>Qn~Uq=n^ zJi6~_RK|L$9MPJ{m4F%gO(o(f6fpG@_Ps9W5mG&3A=7xKpX*OX)qoqb}N1J+>$9Z4D4nux&R->Jq zMyN>B!nXy6J|tz>gwgDA)^z3*_jEjZ2Cr}rCrm1e?(R>w&dj%Jr$U{jE$8jWruGq~ z^v}1Om2H^9#wdY+xbM3sFF%z-YE0t2!CrNGI!(uk*+Pi}FCV&Axt%xdU2O+%Ia&(1T#-G28U08kLc{bebym*R ztAOXH0>@A39jBUx>FkaV>kp6hclin=e zt%VI;1rpHEIJ*yZ4xT!d2~^-l>+c*!j$-&|A2I7fmuuazyb68wyr&LqEGM8_Z{y<>lN1Iug&uV#UZ{ zxkypD6R%>KvWM|E1|%nMLd&l`AI|&^_sVWQ>fi46U8uKTe-V23@@e`bP!g&a;AqdRPE4mbkTktz6byb=gbxR=s*X>?T*$O)_ zNEC8}$niNn?$vklvP;+~RAd*a*)U7_@y2^ir(nbFEC)cPYH4OE&Ol6NxfTteN}KLE z@kyGD%;c4@^Dtoz3ihB8J={@sL6&oi|Fp8Uoa1A!R7Nl5sCn4l$?`RWnAYVIK3q^0 zxQxDKaPR#)q7)Ers`VPdOM7rF$CqO$r9bZ2rd`%wAflR(Yeh_R;;QFI06`o)AgemVO{{ouef}^W zTZVxY%f5X`%@I~%tM%u-pTZyD$5|1mT`}nfS51OlF_74EXQv*Ok!#(t2Mc2r;Z;41 zqWsQ>S}ZDAuA|l*(UezplKuN8IIW)}Hc>GLU`bX&<&(WgzA zu?*ky8TOtTkLYJS89$v%tF^ z1-XH0x9LQ^q9}q4q$XaSWrVgfDcXjUdj%~!6HqqwE_B)9;>gDDu_HiH@pR#NJc}h1 zRrgg*&-N_-pzR6dvP`C#M$L&{03u97^llRx-DW;~1EVmO4zA;-P4pf*3^kEdxBs}w z3yjHsxC=S?UuQ+=a7hB9eiUEdu-$1oU21fL`_G9amb*o)Ypx@>=jec<(F>^;X)qAxT{O9u<1hea zvv6=!&m}r(-;qIKb~~yXxfoX5q04^gDL7vxLtM*V3Ra%fLbyIH>f!1mM=TjFKV)9b z@}$%)wLE9sDmzY&(OdLDaFH!=4OoOFA&E&7uj%x3x6;(l zRlI)tu07B+>~;5%G?dbf?BOCtU9@B8%Hj**E6i14+YZAB<`Lm@uJ2+8v?9o8-k0{^ zQu%G+8fJI?BYP$5{hKd2%CunXLLytH_2=s4d7=I98Qe66mVe-@moKC>_Ngl;IY0zu zXilo#5<#h6iKM1T$UVOIU9N(weEWnfezwETl=j`TvRcWFxjfDuk5KkMOhg>ZcPE!w2Fl6O&R^1eWsS%~Pqw zl1k8lf+igi#FbFl?`yM-jtLAHET<;)AFJrWS~&NX5GpQ&D0s0bTb@ z8@D>N#>I@zF9TUfNhx3%dz-#03cE%nOz*#!*A|y|*41WXBz|w<9M1hv7Q^RzbAZ8$7AOI z{7}B^I;OXRo6YT#H?5WcUtj=Nkx9(U?X^Ofg~>v1^?x`-(>JAZ*zcN9UnW zYS=W4>_!OeX(S}I(gMjRR{@;Qp)%QJgstPJ2Or3sYsX;{&ah|bw0{qN+|iwS#a<7f!I_>re|bZG?m!+nxB`qB{MH8Q^bhS~!T}6*}*^fAQE|*2@=P z>z8LQ`fA(rBy*F$dx5i!VvzO0n&?57MQ`D;iiy=sLC@K9c}vyd$Dp`b!u9x8$@9Qk zSMrmZSg@$paGxqJm?N8egaa-PL2-cC>NR5`^Dp$;ORokLEJ9H)`A)I}EcO?X)RJ5= z=}+w2RIUvS?3tQ>q&)NOp-pM34spxv$F@VkiXTn!EZb|LHhF0QXsjg`{;~#FPgB43 zm)&{phTaVKDfKc|b(#h{GtV&2j7;vZKJ&_^B0Qcl54j;H~qS4q|)(%SYqnkTsGXt#J1veo)VG5?5S zQJAOIxNT?V534iL@mkYpeP!EcC--jMhh|B29ymcya%_aC@zYbdaFNrzpcr}H?d#g$ zg8Jv~K5Yeq*1p7lBhyms*xC$KUSC~}5zrBNJi>gwrP7f_7IWF7dB8Ch*`a@~ke(uo6F%lN9q%IoMv*>NPl?FMA%Iy3eI5IfzK>eZw@|V=atm zPg-~Ip#MnWs3a~-aRf<`I{aZb#oXH#+>YfdBq-axv3-|FF)cOSRfTJG=!b!N+t0Obz4+Ha5 z=dcpqfsunFx>s02LM(dJn4KrlDw#3rCPaXWJe1qTk)G_ReRm&-pX0Z0EAdZY^;C%bM^K6O9)>oSBy zF5RgBA`d!hC7(;5SaKtPBd09KcJ-fAxhZUzQNqH@Hwsus44>yOcMeZ1tWnbqe+#zK zOWP=a`MJb`F*1EQ{>WRxqxP6ZG<Hi)w$kJ$^Pl3(w%!SLS5e}@bwFe#bjG3JovBN;ufGd z2`$?!G#r3>B_GrLdlkpu7(?GDhfd(%nqwUg%3X?dsE1kUehCzAOrP(Bk+s zWzj>HjRQirUzgD&sqqFcV;L2^yd(grE#uQ{Y=vQlVSQ2}r38@LT_aMY5eRe~hm}%_ z-f)zA0L3rdEfCOjC@`_G`z4;5YFN1VH)Kg?WbmMfReX=-WKt->S3Wf8K%LN+VDMM~ zXW|;`zFdv(7X(j(wJ75-ao=Q8{Zf73avM;rO5tqPeMhst~x)*p$O*{-;Zp@A~&2a=s=U$KCK zc$JY}bSRqolu=q7J9GD4k6+hdHfBzqBM*QdL*u$a!@Ywnu7gbLu-1kG5LJ~1t{Y_UY zS^Ldt-rPw9w~J&9PFOU=D1b_;a)dAQ;bD?^8&?j0wjkPw;R);?u7-Utzhr_ea3y^p zYD=o;<}V|4sUhq`k?ydOkHb9^*>=7Hs}W?NTTFYPi&*tbhr$_)wxPSM@GBa(8@?Cy zPcf6rbIgE+NJ=clx&$&G$`+rDunnWVNzeywQPNa~G zc59P@uO+sJaYob_6fHkhrzutPJ*Cbwl?!56nBs%4vA>}(4YIZn{+QD2$REuNYh28o zBv9SUpHA56SIR9y`858NrSZ652N)PP8dzJ~oaK)GSr+XgMkA!i$i{o@TrGn9y~*2C zeY?665GJ5H+*=>rj~ufJN9AX`e6wxv4GU_OS~?o|b2u;b7xn5S2gQe-pC}!FVi*sk z_CqF#d=;Y-%dqd4q~7Jif&FFmJ{6;_gsk**Dotd_xr}_Cm@+97t?Vuv$e%#LpU0qh zPdmoMLELL}Y5%fb+%Ju!STvD2iYj)vkL}jWSEB=Q9+7J3S2oj1MkTIco)2?c&wer8 z%uwjI2Fc-RlUC3I;KO^+fF-q9(QYG?(Ab!sKYpO98!LeyTg%I`(ySwe0L72{OMT10 z&$${jxr&SkG#&EMr~uPd-M#P5INIHtxYLPmi0-y0e~Cag@t=+z35PHNa1dkof%T0b z^9pk-h_-?KVm-O~4^@*Vj!i}qwe(v=m#nLIk{}IZ=i6l`>u$D^ckx$oK(WINeIR>8 z>0+uDiE#8L5;;6r(ypkt1-o*Ww~5yofC2_Z8Z_Rzs~;E3a?KQ<^BP1qEZ6VKrB5(U zA+=}D(iYXOhqpK)$@c-)tE|}E2pwvTBOoAOG+cTeCUqVEFm3;?A7;>ZWI!S;p~D&t z7W`Eii{k}MolY5A%S~4ls!`+ud_oORv5EO_@-+nH~l_Xc8$G~>$k`IE51rDu$q(qFA*^e_eVY+Fj0$#gtAaX0NiEm+sa``$Z`cJIeU$IQ{6vDwOi(d&YMR569f_7Ud>qgP*rqyK)AR$^P;`WnGmpG)H7tv90&i zckO@J4$Z?;%_D}%7v)+PI4p>b5AMeXbh*X_sMmfo8dPQYBv9Ls!P;50W1fm@I>*_&u5kZ42AcyPiP35B@~o_@ z2Z57L?`@4aeypekb9O|I69H0RSsLCZJu4Is_FNK({(88*F#r{o8UQBh=ehuJVMP!y zJ+rDJ#bA*?Dklh5_eT^DFfta{(jmQTge4XNVCfsQN>~pG@HJqCh4rtb|Mw79Xo1~% zC4>cw|IhIMn*{Sied1BD;YD$|(!ziG*2!bNbEP<{W!8!j8H@ zILfXH>aI%2TyMIL+qj(nAQsL$yYM$x-yM4NJT%Al053=7q}-t)0y$KY!7tmv{?d!C z)-r#S%ocU%SImv3&61w*`(|g)EYOHhQkT;h_@>`;yyNVzo&mbn5JfAlP3z#AP zqzt1Pax#fjOu#)ooKB=CB?Xkz3Xs7kd%joCcs8f5sOsX<8VuIeG&-$J$} zXD!FKAJb_84@Xs(om`Y#^L9fe|BRYl-xV%#?Pr(fd26WE9VklxbL?zG{1Z}Q!})s^ zQ+X(@xDTy()}>CE2585bJ~#y73eJg@8W87-1M9;9ua^yVnQBj4`-i%{dy}jT+TjY= z2cm-CaeBHd08kV2zhhZ^KydX6mwy-28g|tBf$iYeAPqAbAzjYbbqBJcdnJWk?^SQ? zH?ak&fa=3Zj?{3Y7evtQ?_5O*8e8fHYR0G!9(v~brMfio7hw8i14`~|sKFx(Y9=-q zL<+u86#n~<)nqbvois*g?*=PEMm1|=WhGD)=j+F`x1&@xfucqI-l?wdRFQtm_Tl+i zh(GqFOR}9_xA0SL2v9gav1j6AfYm9>cX=EgqLH#_WEU>pES(^fksNl!moNbntrU9D z=`=cf5Lq-!O(it8=K<{>QiUKKS=eQ=;$3Stq1mssL5`~_; z_*hMl>Eks-uVz7kQH&-PpOfM={lgDG@G;HTu1O)_xTlPMz*lUX58~zsft#fE7M4cg zl4M|Uwb4`nKdBolU$bUcV2BU3E;^$KgeJB~0RA1sNtnK2oC|Y20UMxiJr_fZ1T4-z zM2V$eaez{*GJvV@Odkn^%RUFH3llM!et{Ot1WQ%>H^F0mOjGfaND9(k)+{7oQkfaZ z<0d>kOP%|j(7VfqW5%7Fw{fPMYsIr?&>9ns+@NLC-L^t?_z-OT)4wdPm`}o2*r|eO z20D46?(OSG9rbJbTZ&2h0l{we7OmS1r+Ut3DMGXEwLseH=wNzgbw**qwsQWSs$nWt zM!aipTO=7*DiR*PCSys0%lnZxe9^RynA*KpBws8j2ZRbk@D2tW0XsGL-w&gzo?9vy zLXO7d`s;A6+Cpx9`tBoFX(#=$n@J!3%FJe38Na=VHT0rAPHVhPv!M6$=7 zVCDK<<@J5{IiHehwF=LX-jd}L?J-LN@uhcY5~=FeJ?g;@Vx$OeMn$hgY_>V#ty=e0 z;J#zT9jVn7yP;}rD*Uvej?YdvcJj^>+kr3du$t{H<;2o`Xzt{_BIkM=4_} z>9cr!gwhXbuFZxXgINW-t9|g>(`bw6AhG6w?++kFV6li3*;gi(NtdMF1jZgcx=(L6 z9>f_9|LsX>_!)YX6HRcn4zBA^g!o>3hca18oZak^ixR3g=J~V$>#_#q_(e>czi8{+ z0@67g+mi?3agsGmn9#fvGd}3bMTvp@DWv1Yr#W4N3PjU*WcB&;$3OK=Lz{TA!|(*` zZM!TkvmN zc`WAQyHNERgvAMn4z?iRD7UOo`s$k*bSlru=kvK4$uxc8%?t(g z2&*#%5^QICBG_S!MF*8&~)5?7O)&JBMtY1{=y^n%XPxM^%=YyzVJL(JuS9e>wv386iWG_3tq=7Q~#j6l@% zy2Uj;)~3ZVBvHPvXpJ2)u9BCkPn&$&^c8u@sl+E`Vm)O{ybzC6l<`=4GdhABHzn@f z9b5lj!~58`59q#IY9($q-!Y=4EE_KLqM!c#%q8w-}7UL(|Shh z#M>`YNu3TY?#va58g ziJ?DFttI@#wut;=93^OWu9gi#bqSJRdB7~r3T84?Gh;YVvlB|ez4u9qR?lD5UT?PH zAeA8>a?CtZx2NPxmgr?uKv3($k~maT+K8)as>TISeU!WPfyXfGHG;b%dx6XkRjpS= zZQ)Q^LH;a;S5+h5k+1T!NOMP%o6Il|h`G{s!~;keC{Fr-`|Oz%t6f5rq(=R$UYg$ zFO~N3HfGa6G6L@5@XUg56#L1>4jzmauC$gGw8cg_te^U~-uIyDalP1lZEU>wBEe+B_&0gKHmzSW*-%&3tKp zFxpyQakoVS9Dn`q3a0U9ut~r1SJ2MIs=gm5VNT;1H$g%gXawRrC=sj8{klo+6`2bE zqJuu3mdDBYv7;$o11|{;LZ=!H7st-)z}OM89Krw6mLX+a=p6Gyf~dHJi@OZyRtddY zj-#+-*?S;FfF$FcJfK$Vh0b#TC0Pa&u5Hbfr<+oZ{{-hS6#(R@E%W@h8eEbG8UYKe z*m+`U(Njf$Jc&A8$bn>&GNVcVM`j7>IU{)tD;BOR4#)E-JIswmh=mPC+2He*UfsFfR zDezMG9n6p+3^hAjC%1A5DD~f6{p}V0%pUe{yK{*8*go^!0@oxrIr5+8weD`7z>a~% zZ0W&HdRht)h&UqL0DB*})f+sN8jN4kpE~4dQuTdVtHZ`oGru{aCYuyL*%9bp=J^+Y z`XMfn3);&`QB!~?&W{XXP70(u6z&g{5UgCoXTYs;Axc?i?@FC`gjpI4scb-Rp z6V)~jjY>?jG1 zV`F+I&*JS|P2E?mMoIe3JEK5_=c%AKrCGIpp;O|N`5scF zo%fR`Gq!V=ZuYZS3^zSVJZgKo#2~IFyB;29Uv&8gCfvG2DO9jUpM3T%UmnrJ7+;?JNw?{Sr^5 zb7IG)Yfdtv?98B6w6jG-Pj0tl_HaV}l-_my+YqS6fRU7Uk*=(|@!LN1?0(zN8brLJ zl#I6}-L9ij(NuAN{LN|upeVY@!6B~P9iJnuG^O^uCq7@pojrVn6PqcO#0kq+%)$lF zGk)a9Ds5qjQQ+MXL#q)FvpQ2mNfqM75RGg|c7%$4u{hA}cuLobdK`#?u(?p0gt;9uiYOB;HaA( zk@byN?9F~u`sKS>NJ@xAWwTyLJ_ZBJJ*z5!NmDbjt`SPt|GCjCcI4hH<&pl&`*D`Dkp@Smh4hnhPU`)fb+mspAwAz z>Uh+IzWd&i5PKrMdT8}V{k!q7FW9(p`f=ToDKDS2W%cse-BP|?{&4;q+PIZ6T5lgTEc1w>iDsjnu#RHuJa zHKMKQm|&YkECr*Z&}O&(J#_uLp)UNso8|_-Z9W0_ne1Psd~GD0d5%ppI5&GQBrreI zdT5gflsMJezTrR521dL)T~{dHELJ6vxcNO364#HYbcAklAlvj&^~AWB?68R z=J(D@Nyj`ij^~p1HT3HF@n2(p4=W1RfYL|LFvokFy3dW2uk8%9?ek5J0vwu|+p;{^ zu;f8Jbuo?pHw8wl8O%l4M-PCw^<4;Q0-!(^o2|ScHWlZ!k0AmqDjJf8Cg=jqmPPQ@ zF`Cj`#6k(IF8cTxRYI}{@sE@T8BQe%BOGb9!NAIQw4C2%icP^_lxlR!w&mn5XXd3| zli{-7w}XLT`h>2}$@S3%w+qrDOo0Eocz%Lv^ri;L6$u8`FxZOG#et?M-8yKXwr`P= z_l=lP@PBO<2oY85U Date: Fri, 30 Sep 2016 20:48:41 +0200 Subject: [PATCH 05/70] Minimizing of the configuration sample (#1006) --- .../_components/alarm_control_panel.alarmdotcom.markdown | 2 -- source/_components/alarm_control_panel.manual.markdown | 7 +------ source/_components/alarm_control_panel.mqtt.markdown | 6 ------ source/_components/alarm_control_panel.nx584.markdown | 2 -- source/_components/alarm_control_panel.simplisafe.markdown | 2 -- 5 files changed, 1 insertion(+), 18 deletions(-) diff --git a/source/_components/alarm_control_panel.alarmdotcom.markdown b/source/_components/alarm_control_panel.alarmdotcom.markdown index 2e654225932..fefdcaecff1 100644 --- a/source/_components/alarm_control_panel.alarmdotcom.markdown +++ b/source/_components/alarm_control_panel.alarmdotcom.markdown @@ -20,8 +20,6 @@ To enable this, add the following lines to your `configuration.yaml`: # Example configuration.yaml entry alarm_control_panel: platform: alarmdotcom - name: "HA Alarm" - code: PASSCODE username: YOUR_USERNAME password: YOUR_PASSWORD ``` diff --git a/source/_components/alarm_control_panel.manual.markdown b/source/_components/alarm_control_panel.manual.markdown index d173d3f11a7..26bb28b126d 100644 --- a/source/_components/alarm_control_panel.manual.markdown +++ b/source/_components/alarm_control_panel.manual.markdown @@ -18,16 +18,11 @@ This platform enables you to set manual alarms in Home Assistant. # Example configuration.yaml entry alarm_control_panel: platform: manual - name: "HA Alarm" - code: PASSCODE - pending_time: 60 - trigger_time: 120 - disarm_after_trigger: true ``` Configuration variables: -- **name** (*Optional*): The name of the alarm. Default is 'HA Alarm'. +- **name** (*Optional*): The name of the alarm. Default is "HA Alarm". - **code** (*Optional*): If defined, specifies a code to enable or disable the alarm in the frontend. - **pending_time** (*Optional*): The time in seconds of the pending time before arming the alarm. Default is 60 seconds. - **trigger_time** (*Optional*): The time in seconds of the trigger time in which the alarm is firing. Default is 120 seconds. diff --git a/source/_components/alarm_control_panel.mqtt.markdown b/source/_components/alarm_control_panel.mqtt.markdown index 95967a021ed..d782f48fc3c 100644 --- a/source/_components/alarm_control_panel.mqtt.markdown +++ b/source/_components/alarm_control_panel.mqtt.markdown @@ -32,12 +32,6 @@ alarm_control_panel: platform: mqtt state_topic: "home/alarm" command_topic: "home/alarm/set" - name: "MQTT Alarm" - qos: 0 - payload_disarm: "DISARM" - payload_arm_home: "ARM_HOME" - payload_arm_away: "ARM_AWAY" - code: "mySecretCode" ``` Configuration variables: diff --git a/source/_components/alarm_control_panel.nx584.markdown b/source/_components/alarm_control_panel.nx584.markdown index 19981212ae4..88b808dee95 100644 --- a/source/_components/alarm_control_panel.nx584.markdown +++ b/source/_components/alarm_control_panel.nx584.markdown @@ -20,8 +20,6 @@ To enable this, add the following lines to your `configuration.yaml`: # Example configuration.yaml entry alarm_control_panel: platform: nx584 - host: IP_ADDRESS - port: 5007 ``` Configuration variables: diff --git a/source/_components/alarm_control_panel.simplisafe.markdown b/source/_components/alarm_control_panel.simplisafe.markdown index a186d692dd7..af38f6ad372 100644 --- a/source/_components/alarm_control_panel.simplisafe.markdown +++ b/source/_components/alarm_control_panel.simplisafe.markdown @@ -20,8 +20,6 @@ To enable this, add the following lines to your `configuration.yaml`: # Example configuration.yaml entry alarm_control_panel: platform: simplisafe - name: "HA Alarm" - code: PASSCODE username: YOUR_USERNAME password: YOUR_PASSWORD ``` From de7c1d5ac974cfb75a38ee1068e31b673c959a46 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 30 Sep 2016 20:48:56 +0200 Subject: [PATCH 06/70] Minimizing of the configuration sample (#1008) --- .../binary_sensor.apcupsd.markdown | 3 +- .../_components/binary_sensor.arest.markdown | 22 ++++++++--- .../binary_sensor.command_line.markdown | 32 +++++++-------- .../_components/binary_sensor.ecobee.markdown | 2 + .../binary_sensor.enocean.markdown | 5 +-- .../_components/binary_sensor.ffmpeg.markdown | 12 ------ .../_components/binary_sensor.isy994.markdown | 1 + source/_components/binary_sensor.markdown | 4 +- .../_components/binary_sensor.modbus.markdown | 17 ++++---- .../_components/binary_sensor.mqtt.markdown | 28 ++++++++----- .../_components/binary_sensor.nest.markdown | 28 ++++++------- .../_components/binary_sensor.nx584.markdown | 26 ++++++++----- .../binary_sensor.octoprint.markdown | 13 +++---- .../_components/binary_sensor.rest.markdown | 39 ++++++++++++------- .../binary_sensor.rpi_gpio.markdown | 12 +++--- .../binary_sensor.sleepiq.markdown | 2 +- source/_components/binary_sensor.tcp.markdown | 2 - .../_components/binary_sensor.trend.markdown | 11 ++---- .../_components/binary_sensor.vera.markdown | 1 + .../_components/binary_sensor.wink.markdown | 1 + .../_components/binary_sensor.zigbee.markdown | 8 ++-- .../_components/binary_sensor.zwave.markdown | 1 + 22 files changed, 143 insertions(+), 127 deletions(-) diff --git a/source/_components/binary_sensor.apcupsd.markdown b/source/_components/binary_sensor.apcupsd.markdown index 0c9a91d5402..946c0112062 100644 --- a/source/_components/binary_sensor.apcupsd.markdown +++ b/source/_components/binary_sensor.apcupsd.markdown @@ -10,6 +10,7 @@ footer: true logo: apcupsd.png ha_category: Binary Sensor ha_release: 0.13 +ha_iot_class: "Local Polling" --- In addition to the [APCUPSd Sensor](/components/sensor.apcupsd/) devices, you may also create a device which is simply "on" when the UPS status is online and "off" at all other times. @@ -20,10 +21,8 @@ To enable this sensor, you first have to set up [apcupsd](/components/apcupsd/), # Example configuration.yaml entry binary_sensor: - platform: apcupsd - name: UPS Online ``` Configuration variables: - - **name** (*Optional*): Name to use in the front end. diff --git a/source/_components/binary_sensor.arest.markdown b/source/_components/binary_sensor.arest.markdown index 5dc581c119f..86d3586a260 100644 --- a/source/_components/binary_sensor.arest.markdown +++ b/source/_components/binary_sensor.arest.markdown @@ -21,25 +21,35 @@ To use your aREST binary sensor in your installation, add the following to your ```yaml # Example configuration.yaml entry binary_sensor: - platform: arest - resource: http://IP_ADDRESS - name: Office Switch - pin: 8 + - platform: arest + resource: http://IP_ADDRESS + pin: 8 ``` Configuration variables: - **resource** (*Required*): IP address and schema of the device that is exposing an aREST API, e.g. http://192.168.1.10. -- **name** (*Optional*): Let you overwrite the the name of the device. By default *name* from the device is used. - **pin** (*Required*): Number of the pin to monitor. +- **name** (*Optional*): Let you overwrite the the name of the device. By default *name* from the device is used. Accessing the URL http://IP_ADDRESS/digital/PIN_NUMBER should give you the state of the pin inside a JSON response as `return_value`. ```bash -$ curl -X GET http://10.100.0.157/digital/9 +$ curl -X GET http://192.168.0.5/digital/9 {"return_value": 0, "id": "office1", "name": "Office", "connected": true} ``` +An example for Pin 9 inspired by the command above could look like this: + +```yaml +# Example configuration.yaml entry +binary_sensor: + - platform: arest + resource: http://192.168.0.5/digital/9 + pin: 9 + name: Office +``` +

This sensor is not suitable for fast state changes because there is a high possibility that the change took place between two update cycle.

diff --git a/source/_components/binary_sensor.command_line.markdown b/source/_components/binary_sensor.command_line.markdown index 26b613f4489..fe9dbdb82e5 100644 --- a/source/_components/binary_sensor.command_line.markdown +++ b/source/_components/binary_sensor.command_line.markdown @@ -21,13 +21,8 @@ To use your Command binary sensor in your installation, add the following to you ```yaml # Example configuration.yaml entry binary_sensor: - platform: command_line - command: cat /proc/sys/net/ipv4/ip_forward - name: 'IP4 forwarding' - sensor_class: opening - payload_on: "1" - payload_off: "0" - value_template: '{% raw %}{{ value.x }}{% endraw %}' + - platform: command_line + command: cat /proc/sys/net/ipv4/ip_forward ``` Configuration variables: @@ -50,11 +45,12 @@ Check the state of an [SickRage](https://github.com/sickragetv/sickrage) instanc ```yaml # Example configuration.yaml entry binary_sensor: - platform: command_line - command: netstat -na | find "33322" | find /c "LISTENING" > nul && (echo "Running") || (echo "Not running") - name: 'sickragerunning' - payload_on: "Running" - payload_off: "Not running" + - platform: command_line + command: netstat -na | find "33322" | find /c "LISTENING" > nul && (echo "Running") || (echo "Not running") + name: 'sickragerunning' + sensor_class: moving + payload_on: "Running" + payload_off: "Not running" ``` ### {% linkable_title Check RasPlex %} @@ -63,11 +59,12 @@ Check if [RasPlex](http://www.rasplex.com/) is `online`. ```yaml binary_sensor: - platform: command_line - command: 'ping -c 1 rasplex.local | grep "1 received" | wc -l' - name: 'is_rasplex_online' - payload_on: 1 - payload_off: 0 + - platform: command_line + command: 'ping -c 1 rasplex.local | grep "1 received" | wc -l' + name: 'is_rasplex_online' + sensor_class: connectivity + payload_on: 1 + payload_off: 0 ``` An alternative solution could look like this: @@ -77,6 +74,7 @@ binary_sensor: platform: command_line name: Printer command: ping -c 1 192.168.1.10 &> /dev/null && echo success || echo fail + sensor_class: connectivity payload_on: "success" payload_off: "fail" ``` diff --git a/source/_components/binary_sensor.ecobee.markdown b/source/_components/binary_sensor.ecobee.markdown index d99ce246696..154b478d4e7 100644 --- a/source/_components/binary_sensor.ecobee.markdown +++ b/source/_components/binary_sensor.ecobee.markdown @@ -9,6 +9,8 @@ sharing: true footer: true logo: ecobee.png ha_category: Sensor +ha_release: 0.9 +ha_iot_class: "Local Push" --- To get your Ecobee binary sensors working with Home Assistant, follow the instructions for the general [Ecobee component](/components/ecobee/). diff --git a/source/_components/binary_sensor.enocean.markdown b/source/_components/binary_sensor.enocean.markdown index 5e1253cde7b..85f5fec8d51 100644 --- a/source/_components/binary_sensor.enocean.markdown +++ b/source/_components/binary_sensor.enocean.markdown @@ -13,8 +13,7 @@ ha_release: 0.21 ha_iot_class: "Local Push" --- -This can typically be one of those batteryless wall switches. Currently only one type has been tested: Eltako FT55. Other devices will most likely not work without changing the Home-Asisstant code. - +This can typically be one of those batteryless wall switches. Currently only one type has been tested: Eltako FT55. Other devices will most likely not work without changing the Home Asisstant code. To use your EnOcean device, you first have to set up your [EnOcean hub](/components/enocean/) and then add the following to your `configuration.yaml` file: @@ -23,8 +22,6 @@ To use your EnOcean device, you first have to set up your [EnOcean hub](/compone binary_sensor: - platform: enocean id: [0x01,0x90,0x84,0x3C] - name: Door - sensor_class: opening ``` Configuration variables: diff --git a/source/_components/binary_sensor.ffmpeg.markdown b/source/_components/binary_sensor.ffmpeg.markdown index 3481e8c6264..f2e162d976c 100644 --- a/source/_components/binary_sensor.ffmpeg.markdown +++ b/source/_components/binary_sensor.ffmpeg.markdown @@ -25,11 +25,6 @@ To enable your FFmpeg with noise detection in your installation, add the followi binary_sensor: - platform: ffmpeg tool: noise - input: FFMPEG_SUPPORTED_INPUT - name: FFmpeg Noise - peak: -30 - duration: 1 - reset: 20 ``` Configuration variables: @@ -61,13 +56,6 @@ binary_sensor: - platform: ffmpeg tool: motion input: FFMPEG_SUPPORTED_INPUT - name: FFmpeg Motion - changes: 10 - reset: 20 - # group feature / default not in use - repeat: 0 - repeat_time: 0 - ``` Configuration variables: diff --git a/source/_components/binary_sensor.isy994.markdown b/source/_components/binary_sensor.isy994.markdown index 1e5eaf55a73..bd19efab493 100644 --- a/source/_components/binary_sensor.isy994.markdown +++ b/source/_components/binary_sensor.isy994.markdown @@ -10,6 +10,7 @@ footer: true logo: universal_devices.png ha_category: Binary Sensor ha_iot_class: "Local Push" +ha_release: pre 0.7 --- The `isy994` platform allows you to get data from your [ISY994](https://www.universal-devices.com/residential/isy994i-series/) binary sensors from within Home Assistant. diff --git a/source/_components/binary_sensor.markdown b/source/_components/binary_sensor.markdown index 0464d81f912..4da25f56736 100644 --- a/source/_components/binary_sensor.markdown +++ b/source/_components/binary_sensor.markdown @@ -9,11 +9,11 @@ sharing: true footer: true --- -Binary sensors are gathering information about state of switches, contacts, pins, and alike. The return value of those sensors is usually digital (1/0). This means that those sensors knows only two states: **off/low/open** and **on/high/closed**. +Binary sensors are gathering information about state of switches, contacts, pins, and alike. The return value of those sensors is usually digital (1/0). This means that those sensors knows only two states: **0/off/low/open/false** and **1/on/high/closed/true**. Knowing that there are only two states allows Home Assistant to represent the sensor better in the frontend. -Most binary sensors support the `SENSOR_CLASSES` which let you specify the type of your sensor. The following types are supported: +Most binary sensors support the `sensor_class:` which let you specify the type of your sensor. The following types are supported: - **None**: Generic on/off - **cold**: On means cold (or too cold) diff --git a/source/_components/binary_sensor.modbus.markdown b/source/_components/binary_sensor.modbus.markdown index 2c48b1f7523..491c4c2d040 100644 --- a/source/_components/binary_sensor.modbus.markdown +++ b/source/_components/binary_sensor.modbus.markdown @@ -10,6 +10,7 @@ footer: true logo: modbus.png ha_category: Binary Sensor ha_release: 0.28 +ha_iot_class: "Local Push" --- The `modbus` binary sensor allows you to gather data from [Modbus](http://www.modbus.org/) coils. @@ -19,14 +20,14 @@ To use your Modbus binary sensors in your installation, add the following to you ```yaml # Example configuration.yml entry binary_sensor: - platform: modbus - coils: - - name: Sensor1 - slave: 1 - coil: 100 - - name: Sensor2 - slave: 1 - coil: 110 + - platform: modbus + coils: + - name: Sensor1 + slave: 1 + coil: 100 + - name: Sensor2 + slave: 1 + coil: 110 ``` Configuration variables: diff --git a/source/_components/binary_sensor.mqtt.markdown b/source/_components/binary_sensor.mqtt.markdown index a5cd4ab05f7..e701a556c4f 100644 --- a/source/_components/binary_sensor.mqtt.markdown +++ b/source/_components/binary_sensor.mqtt.markdown @@ -10,6 +10,7 @@ footer: true logo: mqtt.png ha_category: Binary Sensor ha_release: 0.9 +ha_iot_class: "Depends" --- @@ -20,14 +21,8 @@ To use your MQTT binary sensor in your installation, add the following to your ` ```yaml # Example configuration.yml entry binary_sensor: - platform: mqtt - state_topic: "home-assistant/window/contact" - name: "MQTT Sensor" - qos: 0 - payload_on: "ON" - payload_off: "OFF" - sensor_class: opening - value_template: '{% raw %}{{ value.x }}{% endraw %}' + - platform: mqtt + state_topic: "home-assistant/window/contact" ``` Configuration variables: @@ -40,9 +35,24 @@ Configuration variables: - **sensor_class** (*Optional*): The [type/class](/components/binary_sensor/) of the sensor to set the icon in the frontend. - **value_template** (*Optional*): Defines a [template](/topics/templating/) to extract a value from the payload. -For a quick check you can use the commandline tools shipped with `mosquitto` to send MQTT messages. Set the state of your sensor manually: +For a quick check you can use the commandline tools shipped with `mosquitto` to send MQTT messages. Set the state of a sensor manually: ```bash $ mosquitto_pub -h 127.0.0.1 -t home-assistant/window/contact -m "OFF" ``` +An extended configuration for the same sensor could look like this if you want/need to be more specific. + +```yaml +# Example configuration.yml entry +binary_sensor: + platform: mqtt + state_topic: "home-assistant/window/contact" + name: "Windows contact" + qos: 0 + payload_on: "1" + payload_off: "0" + sensor_class: opening + value_template: '{% raw %}{{ value.x }}{% endraw %}' +``` + diff --git a/source/_components/binary_sensor.nest.markdown b/source/_components/binary_sensor.nest.markdown index 893e5788b40..88aee1f9790 100644 --- a/source/_components/binary_sensor.nest.markdown +++ b/source/_components/binary_sensor.nest.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: nest_thermostat.png ha_category: Binary Sensor +ha_release: pre 0.7 --- @@ -22,24 +23,22 @@ To set it up, add the following information to your `configuration.yaml` file: ```yaml binary_sensor: - platform: nest - scan_interval: 60 - monitored_conditions: - - 'fan' - - 'hvac_ac_state' - - 'hvac_heater_state' - - 'hvac_aux_heater_state' - - 'hvac_heat_x2_state' - - 'hvac_heat_x3_state' - - 'hvac_alt_heat_state' - - 'hvac_alt_heat_x2_state' - - 'hvac_emer_heat_state' - - 'online' + - platform: nest + monitored_conditions: + - 'fan' + - 'hvac_ac_state' + 'hvac_heater_state' + - 'hvac_aux_heater_state' + - 'hvac_heat_x2_state' + - 'hvac_heat_x3_state' + - 'hvac_alt_heat_state' + - 'hvac_alt_heat_x2_state' + - 'hvac_emer_heat_state' + - 'online' ``` Configuration variables: -- **scan_interval** (*Optional*): Interval in seconds to scan. - **monitored_conditions** array (*Required*): States to monitor. - 'fan' - 'hvac_ac_state' @@ -50,4 +49,5 @@ Configuration variables: - 'hvac_alt_heat_x2_state' - 'hvac_emer_heat_state' - 'online' +- **scan_interval** (*Optional*): Interval in seconds to scan. diff --git a/source/_components/binary_sensor.nx584.markdown b/source/_components/binary_sensor.nx584.markdown index a20e681a3ce..b0a7326c8b1 100644 --- a/source/_components/binary_sensor.nx584.markdown +++ b/source/_components/binary_sensor.nx584.markdown @@ -23,16 +23,6 @@ To enable this feature, add the following lines to your `configuration.yaml`: # Example configuration.yaml entry binary_sensor: platform: nx584 - host: 192.168.1.10 - pport: 5007 - exclude_zones: - - 3 - - 5 - zone_types: - 1: opening - 2: opening - 4: motion - 6: moisture ``` Configuration variables: @@ -42,3 +32,19 @@ Configuration variables: - **exclude_zones** (*Optional*): This is a list of zone numbers that should be excluded. Use this to avoid exposing a zone that is of no interest, unconnected, etc. - **zone_types** (*Optional*): This is a list of zone numbers mapped to zone types. Use this to designate zones as doors, motion sensors, smoke detectors, etc. The list of available zone types relevant to alarm zones are: `opening`, `motion`, `gas`, `smoke`, `moisture`, `safety`. +An extended configuration entry could look like this: + +```yaml +# Full example configuration.yaml entry +binary_sensor: + platform: nx584 + host: 192.168.1.10 + port: 5007 + exclude_zones: + - 3 + - 5 + zone_types: + 1: opening + 2: opening + 4: motion + 6: moisture diff --git a/source/_components/binary_sensor.octoprint.markdown b/source/_components/binary_sensor.octoprint.markdown index 309685014d9..c4bf736c3b1 100644 --- a/source/_components/binary_sensor.octoprint.markdown +++ b/source/_components/binary_sensor.octoprint.markdown @@ -10,6 +10,7 @@ footer: true logo: octoprint.png ha_category: Binary Sensor ha_release: 0.19 +ha_iot_class: "Local Polling" --- @@ -23,17 +24,15 @@ To set it up, add the following information to your `configuration.yaml` file: ```yaml binary_sensor: - platform: octoprint - name: OctoPrint - monitored_conditions: - - Printing - - Printing Error + - platform: octoprint + monitored_conditions: + - Printing + - Printing Error ``` Configuration variables: -- **name** (*Optional*): The name of the sensor. Default is 'OctoPrint'. - **monitored_conditions** array (*Required*): States to monitor. - **Printing**: State of the printer. - **Printing Error**: Error while printing. - +- **name** (*Optional*): The name of the sensor. Default is 'OctoPrint'. diff --git a/source/_components/binary_sensor.rest.markdown b/source/_components/binary_sensor.rest.markdown index 1be2b677cf1..f5b50d3b6ab 100644 --- a/source/_components/binary_sensor.rest.markdown +++ b/source/_components/binary_sensor.rest.markdown @@ -9,6 +9,7 @@ sharing: true footer: true ha_category: Binary Sensor ha_release: "0.10" +ha_iot_class: "Local Polling" --- @@ -31,13 +32,8 @@ To enable this sensor, add the following lines to your `configuration.yaml` file ```yaml # Example configuration.yaml entry binary_sensor: - platform: rest - resource: http://IP_ADDRESS/ENDPOINT - method: GET - name: REST GET binary sensor - sensor_class: opening - value_template: '{% raw %}{{ value_json.state }}{% endraw %}' - verify_ssl: False + - platform: rest + resource: http://IP_ADDRESS/ENDPOINT ``` or for a POST request: @@ -45,13 +41,9 @@ or for a POST request: ```yaml # Example configuration.yaml entry binary_sensor: - platform: rest - resource: http://IP_ADDRESS/ENDPOINT - method: POST - name: REST POST binary sensor - sensor_class: opening - value_template: '{% raw %}{{ value_json.state }}{% endraw %}' - payload: '{ "device" : "door" }' + - platform: rest + resource: http://IP_ADDRESS/ENDPOINT + method: POST ``` Configuration variables: @@ -68,3 +60,22 @@ Configuration variables: Make sure that the URL matches exactly your endpoint or resource.

+ +## {% linkable_title Examples %} + +In this section you find some real life examples of how to use this sensor. + +### {% linkable_title aREST sensor %} + +Instead of using an [aREST](/components/binary_sensor.arest/) binary sensor could the value of a device supporting aREST directly retrieved with a REST binary sensor. + +```yaml +binary_sensor: + - platform: rest + resource: http://192.168.0.5/digital/9 + method: GET + name: Light + sensor_class: light + value_template: '{{ value_json.return_value }}' +``` + diff --git a/source/_components/binary_sensor.rpi_gpio.markdown b/source/_components/binary_sensor.rpi_gpio.markdown index d5fe8ddb50c..8af41e2a9b1 100644 --- a/source/_components/binary_sensor.rpi_gpio.markdown +++ b/source/_components/binary_sensor.rpi_gpio.markdown @@ -10,6 +10,7 @@ footer: true logo: raspberry-pi.png ha_category: Binary Sensor ha_release: pre 0.7 +ha_iot_class: "Local Push" --- The `rpi_gpio` binary sensor platform allows you to read sensor values of the GPIOs of your [Raspberry Pi](https://www.raspberrypi.org/). @@ -19,13 +20,10 @@ To use your Raspberry Pi's GPIO in your installation, add the following to your ```yaml # Example configuration.yaml entry binary_sensor: - platform: rpi_gpio - ports: - 11: PIR Office - 12: PIR Bedroom - pull_mode: "UP" - bouncetime: 50 - invert_logic: false + - platform: rpi_gpio + ports: + 11: PIR Office + 12: PIR Bedroom ``` Configuration variables: diff --git a/source/_components/binary_sensor.sleepiq.markdown b/source/_components/binary_sensor.sleepiq.markdown index c0319004e65..0d2170b84c0 100644 --- a/source/_components/binary_sensor.sleepiq.markdown +++ b/source/_components/binary_sensor.sleepiq.markdown @@ -7,7 +7,7 @@ sidebar: true comments: false sharing: true footer: true -logo: sleepiq +logo: sleepiq.png ha_category: Binary Sensor ha_release: 0.29 ha_iot_class: "Local Polling" diff --git a/source/_components/binary_sensor.tcp.markdown b/source/_components/binary_sensor.tcp.markdown index 4f1842d62d0..69c03721442 100644 --- a/source/_components/binary_sensor.tcp.markdown +++ b/source/_components/binary_sensor.tcp.markdown @@ -25,8 +25,6 @@ binary_sensor: payload: "r State\n" value_on: 1 timeout: 5 - value_template: "{% raw %}{{ value.split(';')[0] }}{% endraw %}" - buffer_size: BUFFER_SIZE ``` Configuration options for the a TCP Sensor: diff --git a/source/_components/binary_sensor.trend.markdown b/source/_components/binary_sensor.trend.markdown index 404c6a949ef..553fa8e1865 100644 --- a/source/_components/binary_sensor.trend.markdown +++ b/source/_components/binary_sensor.trend.markdown @@ -13,7 +13,7 @@ ha_release: 0.28 ha_iot_class: "Local Push" --- -The `trend` platform allows you to create sensors which show the trend of numeric `state` or`state_attributes` from other entities. This sensor requires two updates of the underlying sensor to establish a trend - so it can take some time to show an accurate state. It can be useful as part of automations, where you want to base an action on a trend. +The `trend` platform allows you to create sensors which show the trend of numeric `state` or`state_attributes` from other entities. This sensor requires two updates of the underlying sensor to establish a trend. Thus it can take some time to show an accurate state. It can be useful as part of automations, where you want to base an action on a trend. To enable Trend binary sensors in your installation, add the following to your `configuration.yaml` file: @@ -23,10 +23,7 @@ binary_sensor: - platform: trend sensors: solar_angle: - friendly_name: 'Sun rising' entity_id: sun.sun - sensor_class: light - attribute: elevation ``` Configuration variables: @@ -35,7 +32,7 @@ Configuration variables: - **friendly_name** (*Optional*): Name to use in the Frontend. - **sensor_class** (*Optional*): The [type/class](/components/binary_sensor/) of the sensor to set the icon in the frontend. - **entity_id** (*Required*): The entity that this sensor tracks. - - **attribute** (*Optional*): The attribute of the entity that this sensor tracks. If no attribute is specified - the sensor will track the state. + - **attribute** (*Optional*): The attribute of the entity that this sensor tracks. If no attribute is specified then the sensor will track the state. - **invert** (*Optional*): Invert the result (so `true` means decending rather than ascending) ## {% linkable_title Examples %} @@ -44,7 +41,7 @@ In this section you find some real life examples of how to use this sensor. ### {% linkable_title Temperature trend %} -This example indicates true if the temperture is rising: +This example indicates `true` if the temperture is rising: ```yaml binary_sensor: @@ -56,7 +53,7 @@ binary_sensor: sensor_class: heat ``` -And this one indicates true if the temperture is falling: +And this one indicates `true` if the temperture is falling: ```yaml binary_sensor: diff --git a/source/_components/binary_sensor.vera.markdown b/source/_components/binary_sensor.vera.markdown index b8004fa74bb..f28c1978fae 100644 --- a/source/_components/binary_sensor.vera.markdown +++ b/source/_components/binary_sensor.vera.markdown @@ -10,6 +10,7 @@ footer: true logo: vera.png ha_category: Binary Sensor ha_iot_class: "Local Push" +ha_release: pre 0.7 --- The `vera` platform allows you to get data from your [Vera](http://getvera.com/) binary sensors from within Home Assistant. diff --git a/source/_components/binary_sensor.wink.markdown b/source/_components/binary_sensor.wink.markdown index 262d9c48615..f50296e4d4e 100644 --- a/source/_components/binary_sensor.wink.markdown +++ b/source/_components/binary_sensor.wink.markdown @@ -10,6 +10,7 @@ footer: true logo: wink.png ha_category: Binary Sensor ha_release: 0.14 +ha_iot_class: "Cloud Polling" --- diff --git a/source/_components/binary_sensor.zigbee.markdown b/source/_components/binary_sensor.zigbee.markdown index 48302659e51..95f027fa708 100644 --- a/source/_components/binary_sensor.zigbee.markdown +++ b/source/_components/binary_sensor.zigbee.markdown @@ -13,7 +13,7 @@ ha_release: 0.12 ha_iot_class: "Local Polling" --- -A `zigbee` binary sha_release: 0.13ensor in this context is a device connected to one of the digital input pins on a [ZigBee](http://www.zigbee.org/) module. The states reported by such a device are limited to `on` or `off`. By default, a binary sensor is considered `on` when the ZigBee device's digital input pin is held 'high' and considered `off` when it is held `low`. This behaviour can be inverted by setting the `on_state` configuration variable to `low`. +A `zigbee` binary sensor in this context is a device connected to one of the digital input pins on a [ZigBee](http://www.zigbee.org/) module. The states reported by such a device are limited to `on` or `off`. By default, a binary sensor is considered `on` when the ZigBee device's digital input pin is held 'high' and considered `off` when it is held `low`. This behaviour can be inverted by setting the `on_state` configuration variable to `low`. To enable a digital input pin as binary sensor in your installation, add the following lines to your `configuration.yaml`: @@ -23,14 +23,12 @@ binary_sensor: - platform: zigbee name: Hallway PIR Sensor pin: 0 - address: 0013A20040892FA2 - on_state: low ``` Configuration variables: - **name** (*Required*): The name you wouldd like to give the binary sensor in Home Assistant. - **pin** (*Required*): The number identifying which pin to use. -- **address**: The long 64bit address of the remote ZigBee device whose digital input pin you'd like to sample. Do not include this variable if you want to sample the local ZigBee device's pins. -- **on_state**: Either `high` (default) or `low`, depicting whether the binary sensor is considered `on` when the pin is `high` or `low`. +- **address** (*Optional*): The long 64bit address of the remote ZigBee device whose digital input pin you'd like to sample. Do not include this variable if you want to sample the local ZigBee device's pins. +- **on_state** (*Optional*): Either `high` (default) or `low`, depicting whether the binary sensor is considered `on` when the pin is `high` or `low`. diff --git a/source/_components/binary_sensor.zwave.markdown b/source/_components/binary_sensor.zwave.markdown index 80b29acab8b..233411d4f2e 100644 --- a/source/_components/binary_sensor.zwave.markdown +++ b/source/_components/binary_sensor.zwave.markdown @@ -10,6 +10,7 @@ footer: true logo: z-wave.png ha_category: Binary Sensor ha_release: 0.14 +ha_iot_class: "Local Push" --- To get your Z-Wave binary sensors working with Home Assistant, follow the instructions for the general [Z-Wave component](/components/zwave/). From a664249de9806c3bb3ef82edb1a3589c403bb3ba Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 30 Sep 2016 20:49:21 +0200 Subject: [PATCH 07/70] Minimizing of the configuration sample (#1009) --- source/_components/sensor.time_date.markdown | 20 +++++++++---------- source/_components/sensor.worldclock.markdown | 7 +++---- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/source/_components/sensor.time_date.markdown b/source/_components/sensor.time_date.markdown index a35b70f4c08..a37980565e5 100644 --- a/source/_components/sensor.time_date.markdown +++ b/source/_components/sensor.time_date.markdown @@ -14,24 +14,24 @@ ha_release: pre 0.7 --- -The time and date (`time_date`) platform simple displays the time in various formats, the date, or both. +The time and date (`time_date`) sensor platform simple displays the time in various formats, the date, or both. To enable this sensor in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry sensor: - platform: time_date - display_options: - - 'time' - - 'date' - - 'date_time' - - 'time_date' - - 'time_utc' - - 'beat' + - platform: time_date + display_options: + - 'time' + - 'date' + - 'date_time' + - 'time_date' + - 'time_utc' + - 'beat' ``` -The types *date_time* and *time_date* shows the date and the time. The other types just the time or the date. *beat* shows the [Swatch Internet Time](http://www.swatch.com/en_us/internet-time). +- **display_options** array (*Required*): The option to display. The types *date_time* and *time_date* shows the date and the time. The other types just the time or the date. *beat* shows the [Swatch Internet Time](http://www.swatch.com/en_us/internet-time).

diff --git a/source/_components/sensor.worldclock.markdown b/source/_components/sensor.worldclock.markdown index d6f37031f3e..c195fe37ce9 100644 --- a/source/_components/sensor.worldclock.markdown +++ b/source/_components/sensor.worldclock.markdown @@ -21,15 +21,14 @@ To enable this sensor in your installation, add the following to your `configura ```yaml # Example configuration.yaml entry sensor: - platform: worldclock - time_zone: America/New_York - name: New York + - platform: worldclock + time_zone: America/New_York ``` Configuration variables: - **time_zone** (*Required*): The resource or endpoint that contains the value. -- **name** (*Optional*): The name of the sensor, eg. the city. +- **name** (*Optional*): The name of the sensor, eg. the city. Defaults to 'Worldclock Sensor'. For valid time zones check the **TZ** column in the [Wikipedia overview](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones). Or get the full list from the [pytz](https://pypi.python.org/pypi/pytz) module. From 39f7c6289de62f75f70892f44fb8058466c59dda Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 30 Sep 2016 20:49:33 +0200 Subject: [PATCH 08/70] Minimizing of the configuration sample (#1010) --- source/_components/camera.ffmpeg.markdown | 2 -- source/_components/camera.foscam.markdown | 4 +--- source/_components/camera.generic.markdown | 12 +++--------- source/_components/camera.local_file.markdown | 7 +++---- source/_components/camera.markdown | 2 +- source/_components/camera.mjpeg.markdown | 8 ++------ source/_components/camera.netatmo.markdown | 15 ++++++++++----- source/_components/camera.rpi_camera.markdown | 11 +---------- source/_components/camera.uvc.markdown | 7 +++---- 9 files changed, 24 insertions(+), 44 deletions(-) diff --git a/source/_components/camera.ffmpeg.markdown b/source/_components/camera.ffmpeg.markdown index 8fceafe95c3..9f08c17fa6f 100644 --- a/source/_components/camera.ffmpeg.markdown +++ b/source/_components/camera.ffmpeg.markdown @@ -22,8 +22,6 @@ To enable your FFmpeg feed in your installation, add the following to your `conf camera: - platform: ffmpeg input: FFMPEG_SUPPORTED_INPUT - name: FFmpeg - extra_arguments: -q:v 2 ``` Configuration variables: diff --git a/source/_components/camera.foscam.markdown b/source/_components/camera.foscam.markdown index 40e8924069b..9d24f5e8441 100644 --- a/source/_components/camera.foscam.markdown +++ b/source/_components/camera.foscam.markdown @@ -21,8 +21,6 @@ To enable your Foscam IP camera in your installation, add the following to your camera: platform: foscam ip: IP_ADDRESS - name: Door Camera - port: 88 username: USERNAME password: PASSWORD ``` @@ -31,9 +29,9 @@ Configuration variables: - **ip** (*Required*): The IP address your camera. - **port** (*Optional*): The port that the camera is running on. The default is 88. -- **name** (*Optional*): This parameter allows you to override the name of your camera. - **username** (*Required*): The username for accessing your camera. - **password** (*Required*): The password for accessing your camera. +- **name** (*Optional*): This parameter allows you to override the name of your camera.

There seems to be some issues within Foscam with lengthy passwords and passwords containing certain symbols. Be sure to check your camera's documentation. diff --git a/source/_components/camera.generic.markdown b/source/_components/camera.generic.markdown index 14fcac68762..14b57b1428b 100644 --- a/source/_components/camera.generic.markdown +++ b/source/_components/camera.generic.markdown @@ -23,18 +23,13 @@ To enable this camera in your installation, add the following to your `configura ```yaml # Example configuration.yaml entry camera: - platform: generic - still_image_url: http://194.218.96.92/jpg/image.jpg - name: my sample camera - username: USERNAME - password: PASSWORD - authentication: basic - limit_refetch_to_url_change: true + - platform: generic + still_image_url: http://194.218.96.92/jpg/image.jpg ``` Configuration variables: -- **still_image_url** (*Required*): The URL your camera serves the image on, eg. http://192.168.1.21:2112/. Can be a [template]. +- **still_image_url** (*Required*): The URL your camera serves the image on, eg. http://192.168.1.21:2112/. Can be a [template](/topics/templating/). - **name** (*Optional*): This parameter allows you to override the name of your camera. - **username** (*Optional*): The username for accessing your camera. - **password** (*Optional*): The password for accessing your camera. @@ -48,4 +43,3 @@ Configuration variables:

-[template]: /topics/templating/ diff --git a/source/_components/camera.local_file.markdown b/source/_components/camera.local_file.markdown index 4fc2cb7cdcb..6dade4b4c59 100644 --- a/source/_components/camera.local_file.markdown +++ b/source/_components/camera.local_file.markdown @@ -22,15 +22,14 @@ To enable this camera in your installation, add the following to your `configura ```yaml # Example configuration.yaml entry camera: - platform: local_file - name: Local File - file_path: /tmp/image.jpg + - platform: local_file + file_path: /tmp/image.jpg ``` Configuration variables: - - **name** (*Optional*): Name of the camera - **file_path** (*Required*): File to serve as the camera. + - **name** (*Optional*): Name of the camera

The given `file_path` must be an existing file because the camera platform setup make a readable check on it. diff --git a/source/_components/camera.markdown b/source/_components/camera.markdown index e56503400c1..88840ff2112 100644 --- a/source/_components/camera.markdown +++ b/source/_components/camera.markdown @@ -10,5 +10,5 @@ footer: true --- -The camera component allows you to use IP cameras with Home Assistant. +The camera component allows you to use IP cameras with Home Assistant. With a little additional work you could use [USB cameras](/blog/2016/06/23/usb-webcams-and-home-assistant/) as well. diff --git a/source/_components/camera.mjpeg.markdown b/source/_components/camera.mjpeg.markdown index da77c05a216..642d3278ae9 100644 --- a/source/_components/camera.mjpeg.markdown +++ b/source/_components/camera.mjpeg.markdown @@ -22,12 +22,8 @@ To enable this camera in your installation, add the following to your `configura ```yaml # Example configuration.yaml entry camera: - platform: mjpeg - mjpeg_url: http://192.168.1.92/mjpeg - name: my sample camera - username: USERNAME - password: PASSWORD - authentication: basic + - platform: mjpeg + mjpeg_url: http://192.168.1.92/mjpeg ``` Configuration variables: diff --git a/source/_components/camera.netatmo.markdown b/source/_components/camera.netatmo.markdown index 662159d6a36..35edddaa25f 100644 --- a/source/_components/camera.netatmo.markdown +++ b/source/_components/camera.netatmo.markdown @@ -21,10 +21,6 @@ To enable the Netatmo camera, you first have to set up [netatmo](/components/net # Example configuration.yaml entry camera: platform: netatmo - home: home_name - cameras: - - camera_name1 - - camera_name2 ``` Configuration variables: @@ -33,5 +29,14 @@ Configuration variables: - **cameras** array (*Optional*): Cameras to use. Multiple enties allowed. - **camera_name**: Name of the camera to display. -If **home** and **cameras** is not provided, all cameras will be displayed. +If **home** and **cameras** are not provided, all cameras will be displayed. For more control over your cameras check the configuration sample below. +```yaml +# Example configuration.yaml entry +camera: + platform: netatmo + home: home_name + cameras: + - camera_name1 + - camera_name2 +``` diff --git a/source/_components/camera.rpi_camera.markdown b/source/_components/camera.rpi_camera.markdown index 56aacbc0775..7189dfd3d8a 100644 --- a/source/_components/camera.rpi_camera.markdown +++ b/source/_components/camera.rpi_camera.markdown @@ -21,16 +21,7 @@ To enable this camera in your installation, add the following to your `configura ```yaml # Example configuration.yaml entry camera: - platform: rpi_camera - name: Raspberry Pi Camera - image_width: 640 - image_height: 480 - image_quality: 7 - image_rotation: 0 - timelapse: 1000 - horizontal_flip: 0 - vertical_flip: 0 - file_path: /tmp/image.jpg + - platform: rpi_camera ``` Configuration variables: diff --git a/source/_components/camera.uvc.markdown b/source/_components/camera.uvc.markdown index d49d631f9b2..3001ccff930 100644 --- a/source/_components/camera.uvc.markdown +++ b/source/_components/camera.uvc.markdown @@ -20,10 +20,9 @@ To enable a UVC camera in your installation, add the following to your `configur ```yaml # Example configuration.yaml entry camera: - platform: uvc - nvr: IP_ADDRESS - port: PORT - key: APIKEY + - platform: uvc + nvr: IP_ADDRESS + key: API_KEY ``` Configuration variables: From 695f16c11409cccd8de8fe8446ce558272601fde Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 30 Sep 2016 20:49:39 +0200 Subject: [PATCH 09/70] Minimizing of the configuration sample (#1011) --- source/_components/climate.ecobee.markdown | 1 + .../_components/climate.eq3btsmart.markdown | 15 ++++++-- .../climate.generic_thermostat.markdown | 37 +++++++++++-------- source/_components/climate.honeywell.markdown | 2 - source/_components/climate.knx.markdown | 3 +- .../_components/climate.radiotherm.markdown | 14 +++++-- 6 files changed, 45 insertions(+), 27 deletions(-) diff --git a/source/_components/climate.ecobee.markdown b/source/_components/climate.ecobee.markdown index 5f54c6f9027..48c31005144 100644 --- a/source/_components/climate.ecobee.markdown +++ b/source/_components/climate.ecobee.markdown @@ -10,6 +10,7 @@ footer: true logo: ecobee.png ha_category: Climate ha_release: 0.9 +ha_iot_class: "Cloud Push" --- To get your Ecobee thermostats working with Home Assistant, follow the instructions for the general [Ecobee component](/components/ecobee/). diff --git a/source/_components/climate.eq3btsmart.markdown b/source/_components/climate.eq3btsmart.markdown index 6bb20c45227..127f32edb59 100644 --- a/source/_components/climate.eq3btsmart.markdown +++ b/source/_components/climate.eq3btsmart.markdown @@ -57,8 +57,15 @@ to the start function of /etc/init.d/hass-daemon. ```yaml # Example configuration.yaml entry climate: - platform: eq3btsmart - devices: - room1: - mac: '00:11:22:33:44:55' + - platform: eq3btsmart + devices: + room1: + mac: '00:11:22:33:44:55' ``` + +Configuration variables: + +- **devices** array (*Required*): List of thermostats. + - **[device-name]** (*Required*): The name to use for the thermostat. + - **mac** (*Required*): MAC address of the thermostat. + diff --git a/source/_components/climate.generic_thermostat.markdown b/source/_components/climate.generic_thermostat.markdown index 0f4caf9ae5b..8d008a6329a 100644 --- a/source/_components/climate.generic_thermostat.markdown +++ b/source/_components/climate.generic_thermostat.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: heat-control.png ha_category: Climate +ha_release: pre 0.7 --- @@ -17,29 +18,35 @@ The `generic_thermostat` climate platform is a thermostat implemented in Home As ```yaml # Example configuration.yaml entry climate: - platform: generic_thermostat - name: Study - heater: switch.study_heater - target_sensor: sensor.study_temperature - min_temp: 15 - max_temp: 21 - target_temp: 15 - min_cycle_duration: - # At least one of these must be specified: - days: 2 - hours: 1 - minutes: 10 - seconds: 5 - milliseconds: 20 + - platform: generic_thermostat + name: Study + heater: switch.study_heater + target_sensor: sensor.study_temperature ``` Configuration variables: - **name** (*Required*): Name of thermostat -- **heater** (*Required*: `entity_id` for heater switch, must be a toggle device. +- **heater** (*Required*): `entity_id` for heater switch, must be a toggle device. - **target_sensor** (*Required*): `entity_id` for a temperature sensor, target_sensor.state must be temperature. - **min_temp** (*Optional*): Set minimum set point available (default: 7) - **max_temp** (*Optional*): Set maximum set point available (default: 35) - **target_temp** (*Optional*): Set intital target temperature. Failure to set this variable will result in target temperature being set to null on startup. - **ac_mode** (*Optional*): Set the switch specified in the *heater* option to be treated as a cooling device instead of a heating device. - **min_cycle_duration** (*Optional*): Set a minimum amount of time that the switch specified in the *heater* option must be in it's current state prior to being switched either off or on. + +A full configuration example looks like the one below. `min_cycle_duration` must contains at least one of the following entries: `days:`, `hours:`, `minutes:`, `seconds:` or `milliseconds:`. + +```yaml +# Full example configuration.yaml entry +climate: + - platform: generic_thermostat + name: Study + heater: switch.study_heater + target_sensor: sensor.study_temperature + min_temp: 15 + max_temp: 21 + target_temp: 17 + min_cycle_duration: + seconds: 5 +``` diff --git a/source/_components/climate.honeywell.markdown b/source/_components/climate.honeywell.markdown index 923f8a229ec..0e7b0566ff3 100644 --- a/source/_components/climate.honeywell.markdown +++ b/source/_components/climate.honeywell.markdown @@ -20,8 +20,6 @@ To set it up, add the following information to your `configuration.yaml` file: climate: platform: honeywell username: YOUR_USERNAME - password: YOUR_PASSWORD - region: REGION ``` Configuration variables: diff --git a/source/_components/climate.knx.markdown b/source/_components/climate.knx.markdown index 2f8db8ff022..8345f23ad0c 100644 --- a/source/_components/climate.knx.markdown +++ b/source/_components/climate.knx.markdown @@ -24,15 +24,14 @@ To use your KNX thermostats in your installation, add the following to your `con # Example configuration.yaml entry climate: - platform: knx - name: KNX Thermostat address : KNX_ADDRESS temperature_address: 0/1/1 setpoint_address: 0/1/0 ``` -- **name** (*Optional*): A name for this devices used within Home assistant - **address** (*Required*): The KNX group address that is used to turn on/off this actuator channel - **temperature_address** (*Required*): The group address that is used to communicate the current temperature. Data format must be datapoint type 9.001 DPT_Value_Temp (2-Octet float value), check [details](http://www.knx.org/fileadmin/template/documents/downloads_support_menu/KNX_tutor_seminar_page/Advanced_documentation/05_Interworking_E1209.pdf). - **setpoint_address** (*Required*): The group address that is used to set/read the target temperature. Data format must be datapoint type 9.001 DPT_Value_Temp (2-Octet float value). Make sure, you set the read-flag for the thermostat to allow Home Assistant to read the target temperature. +- **name** (*Optional*): A name for this devices used within Home Assistant With the current version of the module, no advanced KNX thermostat functionalities (e.g. HVAC mode) are supported. diff --git a/source/_components/climate.radiotherm.markdown b/source/_components/climate.radiotherm.markdown index c9cd07e0bd4..9b86da36ac8 100644 --- a/source/_components/climate.radiotherm.markdown +++ b/source/_components/climate.radiotherm.markdown @@ -24,12 +24,9 @@ The underlaying library supports: To set it up, add the following information to your `configuration.yaml` file: ```yaml +# Example configuration.yaml entry climate: platform: radiotherm - host: - - 192.168.99.137 - - 192.168.99.202 - hold_temp: True ``` Configuration variables: @@ -39,3 +36,12 @@ Configuration variables: Temperature settings from Home Assistant will be sent to thermostat and then hold at that temperature. Set to `False` if you set a thermostat schedule on the thermostat itself and just want Home Assistant to send temporary temperature changes. +Multiple thermostats could be assigned by using `host:` if auto-detetion is not used. + +```yaml +climate: + platform: radiotherm + host: + - 192.168.99.137 + - 192.168.99.202 +``` From 53ab2562316a5c6db7a70a0c6a802c1c2779bf9e Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 30 Sep 2016 20:49:47 +0200 Subject: [PATCH 10/70] Minimizing of the configuration sample (#1012) --- .../_components/cover.command_line.markdown | 33 +++++++++---- source/_components/cover.markdown | 4 +- source/_components/cover.mqtt.markdown | 46 +++++++++++++------ source/_components/cover.rfxtrx.markdown | 17 +++---- source/_components/cover.rpi_gpio.markdown | 5 +- 5 files changed, 68 insertions(+), 37 deletions(-) diff --git a/source/_components/cover.command_line.markdown b/source/_components/cover.command_line.markdown index b3bcd690d60..da3e186951e 100644 --- a/source/_components/cover.command_line.markdown +++ b/source/_components/cover.command_line.markdown @@ -26,14 +26,6 @@ cover: command_open: move_command up garage command_close: move_command down garage command_stop: move_command stop garage - command_state: state_command garage - value_template: {% raw %}> - {% if value == 'open' %} - 100 - {% elif value == 'closed' %} - 0 - {% endif %} - {% endraw %} ``` Configuration variables: @@ -46,3 +38,28 @@ Configuration variables: - **command_state** (*Optional*): If given, this will act as a sensor that runs in the background and updates the state of the cover. If the command returns a `0` the indicates the cover is fully closed, whereas a 100 indicates the cover is fully open. - **value_template** (*optional - default: '{% raw %}{{ value }}{% endraw%}'*): if specified, `command_state` will ignore the result code of the command but the template evaluating will indicate the position of the cover. For example, if your `command_state` returns a string "open", using `value_template` as in the example config above will allow you to translate that into the valid state `100`. - **friendly_name** (*Optional*): The name used to display the cover in the frontend. + +## {% linkable_title Examples %} + +In this section you find some real life examples of how to use this sensor. + +### {% linkable_title Full configuration %} + +```yaml +# Example configuration.yaml entry +cover: +- platform: command_line + covers: + garage_door: + command_open: move_command up garage + command_close: move_command down garage + command_stop: move_command stop garage + command_state: state_command garage + value_template: {% raw %}> + {% if value == 'open' %} + 100 + {% elif value == 'closed' %} + 0 + {% endif %} + {% endraw %} +``` diff --git a/source/_components/cover.markdown b/source/_components/cover.markdown index 613a27d1a30..fec8d7b9222 100644 --- a/source/_components/cover.markdown +++ b/source/_components/cover.markdown @@ -9,8 +9,8 @@ sharing: true footer: true --- -Home Assistant can give you an interface to control covers such as -rollershutters and garage doors. +Home Assistant can give you an interface to control covers such as rollershutters, blinds, and garage doors. + ## {% linkable_title Services %} ### {% linkable_title Cover control services %} diff --git a/source/_components/cover.mqtt.markdown b/source/_components/cover.mqtt.markdown index a1859e425f4..13af18009fb 100644 --- a/source/_components/cover.mqtt.markdown +++ b/source/_components/cover.mqtt.markdown @@ -29,17 +29,6 @@ cover: - platform: mqtt state_topic: "home-assistant/cover" command_topic: "home-assistant/cover/set" - name: "MQTT Sensor" - qos: 0 - retain: true - payload_open: "PAYLOAD_OPEN" - payload_close: "PAYLOAD_CLOSE" - payload_stop: "PAYLOAD_STOP" - state_open: "STATE_OPEN" - state_closed: "STATE_CLOSED" - optimistic: false - retain: false - value_template: '{% raw %}{{ value.x }}{% endraw %}' ``` Configuration variables: @@ -52,14 +41,41 @@ Configuration variables: - **payload_open** (*Optional*): The payload that opens the cover. Default is "UP" - **payload_close** (*Optional*): The payload that closes the cover. Default is "DOWN" - **payload_stop** (*Optional*): The payload that stops the rollershutter. default is "STOP" -- **state_open** (*Optional*): The payload that represents open state. Default is"STATE_OPEN" +- **state_open** (*Optional*): The payload that represents open state. Default is "STATE_OPEN" - **state_closed** (*Optional*): The payload that represents closed state. Default is "STATE_CLOSED" - **optimistic** (*Optional*): Flag that defines if switch works in optimistic mode. Default is `true` if no state topic defined, else `false`. - **value_template** (*Optional*): Defines a [template](/topics/templating/) to extract a value from the payload. -For a quick check you can use the commandline tools shipped with `mosquitto` to send MQTT messages. Set the state of your sensor manually: +## {% linkable_title Examples %} -```bash -$ mosquitto_pub -h 127.0.0.1 -t home-assistant/cover/set -m "PAYLOAD_CLOSE" +In this section you find some real life examples of how to use this sensor. + +### {% linkable_title Full configuration %} + +The example below shows a full configuration for a cover. + +```yaml +# Example configuration.yml entry +cover: + - platform: mqtt + state_topic: "home-assistant/cover" + command_topic: "home-assistant/cover/set" + name: "MQTT Cover" + qos: 0 + retain: true + payload_open: "OPEN" + payload_close: "CLOSE" + payload_stop: "STOP" + state_open: "OPEN" + state_closed: "STATE" + optimistic: false + retain: false + value_template: '{% raw %}{{ value.x }}{% endraw %}' +``` + +For a check you can use the command line tools `mosquitto_pub` shipped with `mosquitto` to send MQTT messages. This allows you to operate your cover manually: + +```bash +$ mosquitto_pub -h 127.0.0.1 -t home-assistant/cover/set -m "CLOSE" ``` diff --git a/source/_components/cover.rfxtrx.markdown b/source/_components/cover.rfxtrx.markdown index 0a8b3b8180b..afa9e70ca35 100644 --- a/source/_components/cover.rfxtrx.markdown +++ b/source/_components/cover.rfxtrx.markdown @@ -18,7 +18,8 @@ First you have to set up your [rfxtrx hub](/components/rfxtrx/). ### {% linkable_title Configuration %} -##### Siemens/LightwaveRF +##### {% linkable_title Siemens/LightwaveRF %} + The easiest way to find your roller shutters is to add this to your `configuration.yaml`: ```yaml @@ -27,11 +28,9 @@ cover: automatic_add: True ``` -Launch your homeassistant and go the website (e.g http://localhost:8123). -Push your remote and your device should be added. +Launch your homeassistant and go the website (e.g http://localhost:8123). Push your remote and your device should be added. -Once added it will show an ID (e.g `0b11000102ef9f210010f70`) and you can verify that it works from the frontend. -Then you should update your configuration to: +Once added it will show an ID (e.g `0b11000102ef9f210010f70`) and you can verify that it works from the frontend. Then you should update your configuration to: ```yaml cover: @@ -41,10 +40,12 @@ cover: name: device_name ``` -##### RFY +##### {% linkable_title RFY %} + The [RFXtrx433e](http://www.rfxcom.com/RFXtrx433E-USB-43392MHz-Transceiver/en) is required for RFY support, however it does not support receive for the RFY protocol - as such devices cannot be automatically added. Instead, configure the device in the [rfxmngr](http://www.rfxcom.com/downloads.htm) tool. Make a note of the assigned ID and Unit Code and then add a device to the configuration with the following id `071a0000[id][unit_code]`. Eg, if the id was `0a` `00` `01`, and the unit code was `01` then the fully qualified id would be `071a00000a000101`. -##### Common +##### {% linkable_title Common %} + Example configuration: ```yaml @@ -63,6 +64,6 @@ cover: Configuration variables: - **devices** (*Required*): A list of devices with their name to use in the frontend. -- **automatic_add** (*Optional*): To enable the automatic addition of new roller shutters (Siemens/LightwaveRF only). +- **automatic_add** (*Optional*): To enable the automatic addition of new covers (Siemens/LightwaveRF only). - **signal_repetitions** (*Optional*): Because the rxftrx device sends its actions via radio and from most receivers it's impossible to know if the signal was received or not. Therefore you can configure the roller shutter to try to send each signal repeatedly. - **fire_event** (*Optional*): Fires an event even if the state is the same as before. Can be used for automations. diff --git a/source/_components/cover.rpi_gpio.markdown b/source/_components/cover.rpi_gpio.markdown index eafa1d6f97f..f152aad8b79 100644 --- a/source/_components/cover.rpi_gpio.markdown +++ b/source/_components/cover.rpi_gpio.markdown @@ -19,7 +19,7 @@ It uses two pins on the Raspberry Pi. - The `state_pin` will detect if the cover is closed, and - the `relay_pin` will trigger the cover to open or close. -Although you do not need Andrews Hilliday's software controller when you run Home Assistant, he has written clear instructions on how to hook your garage door & sensors up to your Raspberry Pi, which can be found [here](https://github.com/andrewshilliday/garage-door-controller#hardware-setup). +Although you do not need Andrews Hilliday's software controller when you run Home Assistant, he has written clear instructions on how to hook your garage door and sensors up to your Raspberry Pi, which can be found [here](https://github.com/andrewshilliday/garage-door-controller#hardware-setup). To enable Raspberry Pi Covers in your installation, add the following to your `configuration.yaml` file: @@ -27,12 +27,9 @@ To enable Raspberry Pi Covers in your installation, add the following to your `c # Example configuration.yaml entry cover: platform: rpi_gpio - state_pull_mode: DOWN - relay_time: 1 covers: - relay_pin: 10 state_pin: 11 - name: 'Left door' - relay_pin: 12 state_pin: 13 name: 'Right door' From 3c3a64510c3a906851e2008db531e15b08b76a2b Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 30 Sep 2016 20:54:14 +0200 Subject: [PATCH 11/70] Minimizing of the configuration sample (#1025) --- source/_components/lock.mqtt.markdown | 50 ++++++++++++++++++++------- 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/source/_components/lock.mqtt.markdown b/source/_components/lock.mqtt.markdown index 2df14a570cb..89f013b999d 100644 --- a/source/_components/lock.mqtt.markdown +++ b/source/_components/lock.mqtt.markdown @@ -17,7 +17,7 @@ The `mqtt` lock platform let you control your MQTT enabled locks. In an ideal scenario, the MQTT device will have a `state_topic` to publish state changes. If these messages are published with `RETAIN` flag, the MQTT lock will receive an instant state update after subscription and will start with correct state. Otherwise, the initial state of the lock will be false/unlocked. -When a `state_topic` is not available, the lock will work in optimistic mode. In this mode, the lock will immediately change state after every command. Otherwise, the lock will wait for state confirmation from device (message from `state_topic`). +When a `state_topic` is not available, the lock will work in optimistic mode. In this mode, the lock will immediately change state after every command. Otherwise, the lock will wait for state confirmation from the device (message from `state_topic`). Optimistic mode can be forced, even if state topic is available. Try to enable it, if experiencing incorrect lock operation. @@ -26,26 +26,18 @@ To enable MQTT locks in your installation, add the following to your `configurat ```yaml # Example configuration.yml entry lock: - platform: mqtt - name: Frontdoor - state_topic: "home/frontdoor/" - command_topic: "home/frontdoor/set" - payload_lock: "LOCK" - payload_unlock: "UNLOCK" - optimistic: false - qos: 0 - retain: true - value_template: '{% raw %}{{ value.x }}{% endraw %}' + - platform: mqtt + command_topic: "home/frontdoor/set" ``` Configuration variables: +- **command_topic** (*Required*): The MQTT topic to publish commands to change the lock state. - **name** (*Optional*): The name of the lock. Default is 'MQTT Lock'. - **state_topic** (*Optional*): The MQTT topic subscribed to receive state updates. -- **command_topic** (*Required*): The MQTT topic to publish commands to change the lock state. - **payload_lock** (*Optional*): The payload that represents enabled/locked state. Default is "LOCK". - **payload_unlock** (*Optional*): The payload that represents disabled/unlocked state. Default is "UNLOCK". -- **optimistic** (*Optional*): Flag that defines if lock works in optimistic mode. Default is true if no state topic defined, else false. +- **optimistic** (*Optional*): Flag that defines if lock works in optimistic mode. Default is `true` if no `state_topic` defined, else `false`. - **qos** (*Optional*): The maximum QoS level of the state topic. Default is 0 and will also be used to publishing messages. - **retain** (*Optional*): If the published message should have the retain flag on or not. - **value_template** (*Optional*): Defines a [template](/topics/templating/) to extract a value from the payload. @@ -53,3 +45,35 @@ Configuration variables:

Make sure that your topic match exact. `some-topic/` and `some-topic` are different topics.

+ +## {% linkable_title Examples %} + +In this section you find some real life examples of how to use this lock. + +### {% linkable_title Full configuration %} + +The example below shows a full configuration for a MQTT lock. + +```yaml +# Example configuration.yml entry +lock: + platform: mqtt + name: Frontdoor + state_topic: "home-assistant/frontdoor/" + command_topic: "home-assistant/frontdoor/set" + payload_lock: "LOCK" + payload_unlock: "UNLOCK" + optimistic: false + qos: 1 + retain: true + value_template: '{% raw %}{{ value.x }}{% endraw %}' +``` + +Keep an eye on ratining messages to keep the state as you don't want to unlock your door by accident when you restart something. + +For a check you can use the command line tools `mosquitto_pub` shipped with `mosquitto` to send MQTT messages. This allows you to operate your cover manually: + +```bash +$ mosquitto_pub -h 127.0.0.1 -t home-assistant/frontdoor/set -m "LOCK" +``` + From 6db2d90ee5d03d4b66ed5c6c3e0a09452e17d71b Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 30 Sep 2016 20:54:45 +0200 Subject: [PATCH 12/70] Minimizing of the configuration sample (#1014) --- source/_components/sensor.nzbget.markdown | 3 --- source/_components/sensor.sabnzbd.markdown | 5 +---- source/_components/sensor.transmission.markdown | 6 +----- source/_components/switch.transmission.markdown | 4 ---- 4 files changed, 2 insertions(+), 16 deletions(-) diff --git a/source/_components/sensor.nzbget.markdown b/source/_components/sensor.nzbget.markdown index f1836295ce4..c23df5fde41 100644 --- a/source/_components/sensor.nzbget.markdown +++ b/source/_components/sensor.nzbget.markdown @@ -22,9 +22,6 @@ To use NZBGet with your installation, add the following to your `configuration.y sensor: platform: nzbget host: YOUR_NZBGET_HOST - port: 6789 - username: apiuser - password: apipass monitored_variables: - article_cache - download_rate diff --git a/source/_components/sensor.sabnzbd.markdown b/source/_components/sensor.sabnzbd.markdown index 1a8c9fe258d..81f506d62db 100644 --- a/source/_components/sensor.sabnzbd.markdown +++ b/source/_components/sensor.sabnzbd.markdown @@ -22,11 +22,8 @@ To use SABnzbd with your installation, add the following to your `configuration. # Example configuration.yaml entry sensor: platform: sabnzbd - name: SAB - api_key: YOUR_API_KEY host: YOUR_SABNZBD_HOST - port: 8080 - ssl: True + api_key: YOUR_API_KEY monitored_variables: - 'current_status' - 'speed' diff --git a/source/_components/sensor.transmission.markdown b/source/_components/sensor.transmission.markdown index 21d9c0d08bf..af93b96ec1e 100644 --- a/source/_components/sensor.transmission.markdown +++ b/source/_components/sensor.transmission.markdown @@ -23,10 +23,6 @@ To enable this sensor, add the following lines to your `configuration.yaml`: sensor: platform: transmission host: IP_ADDRESS - port: 9091 - name: Transmission - username: YOUR_USERNAME - password: YOUR_PASSWORD monitored_variables: - 'current_status' - 'download_speed' @@ -40,7 +36,7 @@ Configuration variables: - **name** (*Optional*): The name to use when displaying this Transmission instance. - **username** (*Optional*): Your Transmission username, if you use authentication. - **password** (*Optional*): Your Transmission password, if you use authentication. -- **monitored_variables** array: Conditions to display in the frontend. +- **monitored_variables** array (*Required*): Conditions to display in the frontend. - **current_status**: The status of your Transmission daemon. - **download_speed**: The current download speed. - **upload_speed**: The current upload speed. diff --git a/source/_components/switch.transmission.markdown b/source/_components/switch.transmission.markdown index 7310b72320b..3c9ef39bfa6 100644 --- a/source/_components/switch.transmission.markdown +++ b/source/_components/switch.transmission.markdown @@ -23,10 +23,6 @@ To add Transmission to your installation, add the following to your `configurati switch: platform: transmission host: IP_ADDRESS - port: 9091 - name: Transmission - username: USERNAME - password: PASSWORD ``` Configuration variables: From ce12069456270a46341083462114837ab3746e2d Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 30 Sep 2016 20:55:05 +0200 Subject: [PATCH 13/70] Minimizing of the configuration sample (#1015) --- .../sensor.dte_energy_bridge.markdown | 1 - source/_components/sensor.efergy.markdown | 19 ++++++++++--------- source/_components/sensor.eliqonline.markdown | 7 +++---- .../_components/sensor.loop_energy.markdown | 7 ++----- source/_components/sensor.ohmconnect.markdown | 4 ++-- 5 files changed, 17 insertions(+), 21 deletions(-) diff --git a/source/_components/sensor.dte_energy_bridge.markdown b/source/_components/sensor.dte_energy_bridge.markdown index 7597c31a749..d4e4d07336f 100644 --- a/source/_components/sensor.dte_energy_bridge.markdown +++ b/source/_components/sensor.dte_energy_bridge.markdown @@ -21,7 +21,6 @@ To enable this sensor, add the following lines to your `configuration.yaml` file sensor: - platform: dte_energy_bridge ip: 192.168.1.11 - name: DTE Energy ``` Configuration variables: diff --git a/source/_components/sensor.efergy.markdown b/source/_components/sensor.efergy.markdown index 29bd54204f8..3669b17f51c 100644 --- a/source/_components/sensor.efergy.markdown +++ b/source/_components/sensor.efergy.markdown @@ -10,6 +10,7 @@ footer: true logo: efergy.png ha_category: Energy ha_release: pre 0.7 +ha_iot_class: "Cloud Polling" --- @@ -18,15 +19,15 @@ Integrate your [Efergy](https://efergy.com) meter information into Home Assistan ```yaml # Example configuration.yaml entry sensor: - platform: efergy - app_token: APP_TOKEN - utc_offset: UTC_OFFSET - monitored_variables: - - type: instant_readings - - type: budget - - type: cost - period: day - currency: $ + - platform: efergy + app_token: APP_TOKEN + utc_offset: UTC_OFFSET + monitored_variables: + - type: instant_readings + - type: budget + - type: cost + period: day + currency: $ ``` Configuration variables: diff --git a/source/_components/sensor.eliqonline.markdown b/source/_components/sensor.eliqonline.markdown index 1aa57aa640f..65030c3f416 100644 --- a/source/_components/sensor.eliqonline.markdown +++ b/source/_components/sensor.eliqonline.markdown @@ -10,6 +10,7 @@ footer: true logo: eliq.png ha_category: Energy ha_release: "0.10" +ha_iot_class: "Cloud Polling" --- @@ -20,10 +21,8 @@ To enable this sensor in your installation, add the following to your `configura ```yaml # Example configuration.yaml entry sensor: - platform: eliqonline - access_token: ACCESS_TOKEN - name: Power consumption - channel_id: CHANNEL_ID + - platform: eliqonline + access_token: ACCESS_TOKEN ``` Configuration variables: diff --git a/source/_components/sensor.loop_energy.markdown b/source/_components/sensor.loop_energy.markdown index d7ef5fb3421..544a09e862b 100644 --- a/source/_components/sensor.loop_energy.markdown +++ b/source/_components/sensor.loop_energy.markdown @@ -10,12 +10,11 @@ footer: true logo: loop.png ha_category: Energy ha_release: 0.17 +ha_iot_class: "Local Polling" --- -Integrate your [Loop Energy](https://www.your-loop.com/) meter information into Home Assistant. - -To use this sensor you need the the client serial number and secret keys for your devices. +Integrate your [Loop Energy](https://www.your-loop.com/) meter information into Home Assistant. To use this sensor you need the the client serial number and secret keys for your devices. The library used to get the data isn't officially supported and the only way to get the keys is to log into loop energy's website and type a command into your browser console. @@ -51,8 +50,6 @@ sensor: gas: gas_serial: 'GAS_SERIAL' gas_secret: 'GAS_SECRET' - gas_type: imperial - gas_calorific: 38.2 ``` Configuration variables: diff --git a/source/_components/sensor.ohmconnect.markdown b/source/_components/sensor.ohmconnect.markdown index 9cc10a56258..7f564a76d3c 100644 --- a/source/_components/sensor.ohmconnect.markdown +++ b/source/_components/sensor.ohmconnect.markdown @@ -24,8 +24,8 @@ You can find your OhmConnect ID under "Open Source Projects" on the [settings pa ```yaml # Example configuration.yaml entry sensor: - platform: ohmconnect - id: AbCd1e + - platform: ohmconnect + id: AbCd1e ``` Configuration variables: From 1abe7da82c320ec8d3b753981e0cb32db0438bd7 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 30 Sep 2016 20:55:22 +0200 Subject: [PATCH 14/70] Minimizing of the configuration sample (#1016) --- source/_components/fan.mqtt.markdown | 8 -------- 1 file changed, 8 deletions(-) diff --git a/source/_components/fan.mqtt.markdown b/source/_components/fan.mqtt.markdown index b03d00bccbd..2ddbbfc5db2 100644 --- a/source/_components/fan.mqtt.markdown +++ b/source/_components/fan.mqtt.markdown @@ -27,15 +27,7 @@ To enable MQTT fans in your installation, add the following to your `configurati # Example configuration.yml entry fan: platform: mqtt - name: Living room - state_topic: "home/living-room/fan" command_topic: "home/living-room/fan/set" - payload_on: "ON" - payload_off: "OFF" - optimistic: false - qos: 0 - retain: true - value_template: '{% raw %}{{ value.x }}{% endraw %}' ``` Configuration variables: From 8a386143a4a1a688cac51f7cf8f564e80bdad0fa Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 30 Sep 2016 20:56:33 +0200 Subject: [PATCH 15/70] Minimizing of the configuration sample (#1017) --- source/_components/sensor.bitcoin.markdown | 1 - source/_components/sensor.coinmarketcap.markdown | 1 - source/_components/sensor.fixer.markdown | 8 +++----- .../_components/sensor.openexchangerates.markdown | 6 ++---- source/_components/sensor.yahoo_finance.markdown | 15 +++++++++++---- 5 files changed, 16 insertions(+), 15 deletions(-) diff --git a/source/_components/sensor.bitcoin.markdown b/source/_components/sensor.bitcoin.markdown index 610f8b3ecae..23aba6ca31f 100644 --- a/source/_components/sensor.bitcoin.markdown +++ b/source/_components/sensor.bitcoin.markdown @@ -22,7 +22,6 @@ To add the Bitcoin sensor to your installation, add a selection of the available # Example configuration.yaml entry sensor: platform: bitcoin - currency: YOUR CURRENCY display_options: - exchangerate - trade_volume_btc diff --git a/source/_components/sensor.coinmarketcap.markdown b/source/_components/sensor.coinmarketcap.markdown index 32c521a62d8..38bbf0a1efa 100644 --- a/source/_components/sensor.coinmarketcap.markdown +++ b/source/_components/sensor.coinmarketcap.markdown @@ -21,7 +21,6 @@ To add the CoinMarketCap sensor to your installation, add the following lines to # Example configuration.yaml entry sensor: - platform: coinmarketcap - currency: bitcoin ``` Configuration variables: diff --git a/source/_components/sensor.fixer.markdown b/source/_components/sensor.fixer.markdown index 7cedf440926..ce9071e4bcd 100644 --- a/source/_components/sensor.fixer.markdown +++ b/source/_components/sensor.fixer.markdown @@ -23,15 +23,13 @@ To enable this sensor, add the following lines to your `configuration.yaml` file ```yaml # Example configuration.yaml entry sensor: - platform: fixer - name: EUR - base: EUR - target: CHF + - platform: fixer + target: CHF ``` Configuration variables: +- **target** (*Required*): The symbol of the target currency. - **name** (*Optional*): Name to use in the frontend. - **base** (*Optional*): The symbol of the base currency. Default to USD -- **target** (*Required*): The symbol of the target currency. diff --git a/source/_components/sensor.openexchangerates.markdown b/source/_components/sensor.openexchangerates.markdown index ad86aa02ddb..63e94b74a85 100644 --- a/source/_components/sensor.openexchangerates.markdown +++ b/source/_components/sensor.openexchangerates.markdown @@ -25,14 +25,12 @@ To enable this sensor, add the following lines to your `configuration.yaml` file sensor: - platform: openexchangerates api_key: YOUR_API_KEY - base: USD quote: EUR - name: USDEUR ``` Configuration variables: - **api_key** (*Required*): API Key for [Open Exchange Rates](https://openexchangerates.org). -- **name** (*Optional*): Name to use in the frontend. -- **base** (*Optional*): The symbol of the base currency. Defaults to USD - **quote** (*Required*): The symbol of the quote or target currency. +- **name** (*Optional*): Name to use in the frontend. +- **base** (*Optional*): The symbol of the base currency. Defaults to USD. diff --git a/source/_components/sensor.yahoo_finance.markdown b/source/_components/sensor.yahoo_finance.markdown index 99411c3ff41..022be8804cd 100644 --- a/source/_components/sensor.yahoo_finance.markdown +++ b/source/_components/sensor.yahoo_finance.markdown @@ -22,8 +22,6 @@ To enable the `yahoo_finance` platform, add the following lines to your `configu # Example configuration.yaml entry sensor: - platform: yahoo_finance - name: Red Hat Inc. - symbol: RHT ``` Configuration variables: @@ -31,16 +29,25 @@ Configuration variables: - **name** (*Optional*): The name of the sensor. If not specified, it defaults to *Yahoo Stock*. - **symbol** (*Optional*): The stock market symbol for a given company. If not specified, it defaults to *Yahoo (YHOO)*. -Example configuration: +## {% linkable_title Examples %} + +In this section you find some real life examples of how to use this sensor. + +### {% linkable_title Red Hat %} ```yaml -# Example configuration.yaml entry sensor: - platform: yahoo_finance name: Red Hat Inc. symbol: RHT +``` +### {% linkable_title Google %} + +```yaml +sensor: - platform: yahoo_finance name: Google symbol: GOOGL ``` + From ef7531c29758edf7d47fed447a446853caa888cc Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 30 Sep 2016 20:56:52 +0200 Subject: [PATCH 16/70] Minimizing of the configuration sample (#1018) --- source/_components/panel_custom.markdown | 2 +- source/_components/panel_iframe.markdown | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/source/_components/panel_custom.markdown b/source/_components/panel_custom.markdown index ffe04c7e2ab..1ed44576e58 100644 --- a/source/_components/panel_custom.markdown +++ b/source/_components/panel_custom.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Panel Custom" -description: "Instructions how to add customied panels to the frontend of Home Assistant." +description: "Instructions how to add customized panels to the frontend of Home Assistant." date: 2015-08-08 11:00 sidebar: true comments: false diff --git a/source/_components/panel_iframe.markdown b/source/_components/panel_iframe.markdown index b3ca0e8f9f4..5b170a310b1 100644 --- a/source/_components/panel_iframe.markdown +++ b/source/_components/panel_iframe.markdown @@ -24,11 +24,9 @@ To enable Panel iFrames in your installation, add the following to your `configu panel_iframe: router: title: 'Router' - icon: 'mdi:router-wireless' url: 'http://192.168.1.1' fridge: title: 'Fridge' - icon: 'mdi:fridge' url: 'http://192.168.1.5' ``` From 3d47c6f54b74d86cb09d8f40b03cdde04709af3c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 30 Sep 2016 20:59:45 +0200 Subject: [PATCH 17/70] Minimizing of the configuration sample (#1013) --- source/_components/climate.knx.markdown | 4 ++-- source/_components/knx.markdown | 2 -- source/_components/sensor.dht.markdown | 7 +------ source/_components/sensor.knx.markdown | 5 ++--- source/_components/switch.arduino.markdown | 4 ++-- source/_components/switch.knx.markdown | 1 - 6 files changed, 7 insertions(+), 16 deletions(-) diff --git a/source/_components/climate.knx.markdown b/source/_components/climate.knx.markdown index 8345f23ad0c..6297448c231 100644 --- a/source/_components/climate.knx.markdown +++ b/source/_components/climate.knx.markdown @@ -29,9 +29,9 @@ climate: setpoint_address: 0/1/0 ``` -- **address** (*Required*): The KNX group address that is used to turn on/off this actuator channel +- **address** (*Required*): The KNX group address that is used to turn on/off this actuator channel. - **temperature_address** (*Required*): The group address that is used to communicate the current temperature. Data format must be datapoint type 9.001 DPT_Value_Temp (2-Octet float value), check [details](http://www.knx.org/fileadmin/template/documents/downloads_support_menu/KNX_tutor_seminar_page/Advanced_documentation/05_Interworking_E1209.pdf). - **setpoint_address** (*Required*): The group address that is used to set/read the target temperature. Data format must be datapoint type 9.001 DPT_Value_Temp (2-Octet float value). Make sure, you set the read-flag for the thermostat to allow Home Assistant to read the target temperature. -- **name** (*Optional*): A name for this devices used within Home Assistant +- **name** (*Optional*): A name for this devices used within Home Assistant. With the current version of the module, no advanced KNX thermostat functionalities (e.g. HVAC mode) are supported. diff --git a/source/_components/knx.markdown b/source/_components/knx.markdown index 28b36941936..7ab0f340fb1 100644 --- a/source/_components/knx.markdown +++ b/source/_components/knx.markdown @@ -27,8 +27,6 @@ A `knx` section must be present in the `configuration.yaml` file and contain the ```yaml # Example configuration.yaml entry knx: - host: IP_ADDRESS - port: PORT ``` - **host** (*Optional*): The IP address of the KNX/IP interface to use. It defaults to `0.0.0.0` which will start discovery for your KNX/IP gateway. diff --git a/source/_components/sensor.dht.markdown b/source/_components/sensor.dht.markdown index 1a5424b30d4..b807d14d6ea 100644 --- a/source/_components/sensor.dht.markdown +++ b/source/_components/sensor.dht.markdown @@ -24,7 +24,6 @@ sensor: platform: dht sensor: DHT22 pin: 23 - name: Living Room monitored_conditions: - temperature - humidity @@ -35,11 +34,7 @@ Configuration variables: - **sensor** (*Required*): The sensor type, supported devices are DHT11, DHT22, and AM2302 - **pin** (*Required*): The pin the sensor is connected to. - **name** (*Optional*): The name of the sensor -- **monitored_conditions** array: Conditions to monitor. - - **temperature**: - - **humidity**: - -Available conditions are only *temperature* and *humidity*. +- **monitored_conditions** array (*Required*): Conditions to monitor. Available conditions are only *temperature* and *humidity*. The name of the pin to which the sensor is connected has different names on different platforms. 'P8_11' for Beaglebone, '23' for Raspberry Pi. diff --git a/source/_components/sensor.knx.markdown b/source/_components/sensor.knx.markdown index 46a33f47bce..aa1ee560262 100644 --- a/source/_components/sensor.knx.markdown +++ b/source/_components/sensor.knx.markdown @@ -30,17 +30,16 @@ To use your KNX sensor in your installation, add the following to your `configur # Example configuration.yaml entry sensor: - platform: knx - name: knxweather_temp type: temperature address: 1/0/3 - platform: knx - name: knxweather_wind + name: Wind speed type: speed_ms address: 1/0/0 - platform: knx - name: knxweather_lux + name: Lux type: illuminance address: 1/0/1 ``` diff --git a/source/_components/switch.arduino.markdown b/source/_components/switch.arduino.markdown index e6426f688e3..5d6a882c379 100644 --- a/source/_components/switch.arduino.markdown +++ b/source/_components/switch.arduino.markdown @@ -25,11 +25,11 @@ switch: 11: name: Fan Office type: digital - default: on - negate: true 12: name: Light Desk type: digital + default: on + negate: true ``` Configuration variables: diff --git a/source/_components/switch.knx.markdown b/source/_components/switch.knx.markdown index 2591f5d0af1..4452028d5e1 100644 --- a/source/_components/switch.knx.markdown +++ b/source/_components/switch.knx.markdown @@ -24,7 +24,6 @@ switch: - platform: knx name: KNX Switch address: 0/0/1 - state_address: 0/0/3 ``` - **name** (*Optional*): A name for this devices used within Home assistant From c7aaf72bbc349f6156d74398b757af70653742e8 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 1 Oct 2016 12:08:48 +0200 Subject: [PATCH 18/70] Minimizing of the configuration sample (#1024) --- source/_components/light.enocean.markdown | 1 - source/_components/light.flux_led.markdown | 9 +- source/_components/light.hue.markdown | 2 - source/_components/light.hyperion.markdown | 10 ++- source/_components/light.lifx.markdown | 4 +- .../_components/light.limitlessled.markdown | 9 +- source/_components/light.mqtt.markdown | 89 +++++++++++-------- source/_components/light.mqtt_json.markdown | 47 ++++++---- .../_components/light.osramlightify.markdown | 6 +- source/_components/light.rfxtrx.markdown | 13 ++- source/_components/light.x10.markdown | 7 +- source/_components/light.zigbee.markdown | 6 +- 12 files changed, 109 insertions(+), 94 deletions(-) diff --git a/source/_components/light.enocean.markdown b/source/_components/light.enocean.markdown index 5265cbcdca2..30ecc16614f 100644 --- a/source/_components/light.enocean.markdown +++ b/source/_components/light.enocean.markdown @@ -21,7 +21,6 @@ To use your EnOcean device, you first have to set up your [EnOcean hub](/compone # Example configuration.yaml entry light: - platform: enocean - name: Living_room id: [0x01,0x90,0x84,0x3C] sender_id: [0xFF,0xC6,0xEA,0x04] ``` diff --git a/source/_components/light.flux_led.markdown b/source/_components/light.flux_led.markdown index 7fce612f3a5..d41c432d1e1 100644 --- a/source/_components/light.flux_led.markdown +++ b/source/_components/light.flux_led.markdown @@ -30,12 +30,6 @@ To enable those lights, add the following lines to your `configuration.yaml` fil # Example configuration.yaml entry light: - platform: flux_led - automatic_add: BOOLEAN - devices: - IP_ADDR_1: - name: CUSTOM_NAME_1 - IP_ADDR_2: - name: CUSTOM_NAME_2 ``` Configuration variables: @@ -43,7 +37,8 @@ Configuration variables: - **automatic_add** (*Optional*): To enable the automatic addition of lights on startup. - **devices** (*Optional*): A list of devices with their ip address and a custom name to use in the frontend. -Example configuration: + +### {% linkable_title Example configuration %} Will automatically search and add all lights on start up: diff --git a/source/_components/light.hue.markdown b/source/_components/light.hue.markdown index 4fa87bb5561..0b55be94ff7 100644 --- a/source/_components/light.hue.markdown +++ b/source/_components/light.hue.markdown @@ -26,8 +26,6 @@ If you want to enable the light component directly, add the following lines to y light: platform: hue host: DEVICE_IP_ADDRESS - allow_unreachable: true - filename: my_hue_hub_token.conf ``` Configuration variables: diff --git a/source/_components/light.hyperion.markdown b/source/_components/light.hyperion.markdown index 18e6dcc31f3..4cf3de42160 100644 --- a/source/_components/light.hyperion.markdown +++ b/source/_components/light.hyperion.markdown @@ -16,8 +16,10 @@ This platform allows you to integrate your [Hyperion](https://github.com/tvdzwan ```yaml # Example configuration.yaml entry light: - platform: hyperion - host: 192.168.1.98 - # Optional - port: 19444 + - platform: hyperion ``` + +Configuration variables: + +- **host** (*Optional*): To enable the automatic addition of lights on startup. +- **port** (*Optional*): A list of devices with their ip address and a custom name to use in the frontend. diff --git a/source/_components/light.lifx.markdown b/source/_components/light.lifx.markdown index bc61eef7fb8..be536f4f694 100644 --- a/source/_components/light.lifx.markdown +++ b/source/_components/light.lifx.markdown @@ -18,9 +18,7 @@ The `lifx` platform allows you to integrate your [LIFX](http://www.lifx.com) int ```yaml # Example configuration.yaml entry light: - platform: lifx - server: 192.168.1.98 - broadcast: 192.168.1.255 + - platform: lifx ``` Configuration variables: diff --git a/source/_components/light.limitlessled.markdown b/source/_components/light.limitlessled.markdown index d4006358385..58457215a11 100644 --- a/source/_components/light.limitlessled.markdown +++ b/source/_components/light.limitlessled.markdown @@ -13,7 +13,7 @@ ha_iot_class: "Assumed State" ha_release: pre 0.7 --- -`limitlessled` can control your [LimitlessLED](http://www.limitlessled.com/) lights from within Home Assistant. The lights are also known as EasyBulb, AppLight, AppLamp, MiLight, LEDme, dekolight or iLight. +`limitlessled` can control your [LimitlessLED](http://www.limitlessled.com/) lights from within Home Assistant. The lights are also known as EasyBulb, AppLight, AppLamp, MiLight, LEDme, dekolight, or iLight. ### {% linkable_title Setup %} @@ -27,22 +27,15 @@ light: platform: limitlessled bridges: - host: 192.168.1.10 - version: 5 - port: 8899 groups: - number: 1 - type: rgbw name: Bedroom - - number: 2 - type: white - name: Craft Room - number: 2 type: rgbw name: Bathroom - host: 192.168.1.11 groups: - number: 1 - type: rgbw name: Living Room & Hall ``` diff --git a/source/_components/light.mqtt.markdown b/source/_components/light.mqtt.markdown index b5bd2c50054..96985cd527b 100644 --- a/source/_components/light.mqtt.markdown +++ b/source/_components/light.mqtt.markdown @@ -20,28 +20,65 @@ When a state topic is not available, the light will work in optimistic mode. In Optimistic mode can be forced, even if state topic is available. Try to enable it, if experiencing incorrect light operation. +```yaml +# Example configuration.yml entry +light: + - platform: mqtt + command_topic: "office/rgb1/light/switch" +``` + +Configuration variables: + +- **command_topic** (*Required*): The MQTT topic to publish commands to change the switch state. +- **name** (*Optional*): The name of the switch. Default is 'MQTT Switch'. +- **state_topic** (*Optional*): The MQTT topic subscribed to receive state updates. +- **brightness_state_topic** (*Optional*): The MQTT topic subscribed to receive brightness state updates. +- **brightness_command_topic** (*Optional*): The MQTT topic to publish commands to change the light's brightness. +- **rgb_state_topic** (*Optional*): The MQTT topic subscribed to receive RGB state updates. +- **rgb_command_topic** (*Optional*): The MQTT topic to publish commands to change the light's RGB state. +- **state_value_template** (*Optional*): Defines a [template](/topics/templating/) to extract the state value. +- **brightness_value_template** (*Optional*): Defines a [template](/topics/templating/) to extract the brightness value. +- **rgb_value_template** (*Optional*): Defines a [template](/topics/templating/) to extract the RGB value. +- **brightness_scale** (*Optional*): Defines the maximum brightness value (i.e. 100%) of the MQTT device (defaults to 255). +- **qos** (*Optional*): The maximum QoS level of the state topic. Default is 0 and will also be used to publishing messages. +- **payload_on** (*Optional*): The payload that represents enabled state. Default is "ON". +- **payload_off** (*Optional*): The payload that represents disabled state. Default is "OFF". +- **optimistic** (*Optional*): Flag that defines if switch works in optimistic mode. Default is true if no state topic defined, else false. + +

+ Make sure that your topics match exact. `some-topic/` and `some-topic` are different topics. +

+ +## {% linkable_title Examples %} + +In this section you find some real life examples of how to use this sensor. + +### {% linkable_title Brightness and RGB support %} + To enable a light with brightness and RGB support in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yml entry light: - platform: mqtt - name: "Office Light RGB" - state_topic: "office/rgb1/light/status" - command_topic: "office/rgb1/light/switch" - brightness_state_topic: "office/rgb1/brightness/status" - brightness_command_topic: "office/rgb1/brightness/set" - rgb_state_topic: "office/rgb1/rgb/status" - rgb_command_topic: "office/rgb1/rgb/set" - state_value_template: "{% raw %}{{ value_json.state }}{% endraw %}" - brightness_value_template: "{% raw %}{{ value_json.brightness }}{% endraw %}" - rgb_value_template: "{% raw %}{{ value_json.rgb | join(',') }}{% endraw %}" - qos: 0 - payload_on: "ON" - payload_off: "OFF" - optimistic: false + - platform: mqtt + name: "Office Light RGB" + state_topic: "office/rgb1/light/status" + command_topic: "office/rgb1/light/switch" + brightness_state_topic: "office/rgb1/brightness/status" + brightness_command_topic: "office/rgb1/brightness/set" + rgb_state_topic: "office/rgb1/rgb/status" + rgb_command_topic: "office/rgb1/rgb/set" + state_value_template: "{% raw %}{{ value_json.state }}{% endraw %}" + brightness_value_template: "{% raw %}{{ value_json.brightness }}{% endraw %}" + rgb_value_template: "{% raw %}{{ value_json.rgb | join(',') }}{% endraw %}" + qos: 0 + payload_on: "ON" + payload_off: "OFF" + optimistic: false ``` +### {% linkable_title Brightness and no RGB support %} + To enable a light with brightness (no RGB version) in your installation, add the following to your `configuration.yaml` file: ```yaml @@ -59,27 +96,7 @@ light: optimistic: false ``` -Configuration variables: - -- **name** (*Optional*): The name of the switch. Default is 'MQTT Switch'. -- **state_topic** (*Optional*): The MQTT topic subscribed to receive state updates. -- **command_topic** (*Required*): The MQTT topic to publish commands to change the switch state. -- **brightness_state_topic** (*Optional*): The MQTT topic subscribed to receive brightness state updates. -- **brightness_command_topic** (*Optional*): The MQTT topic to publish commands to change the light's brightness. -- **rgb_state_topic** (*Optional*): The MQTT topic subscribed to receive RGB state updates. -- **rgb_command_topic** (*Optional*): The MQTT topic to publish commands to change the light's RGB state. -- **state_value_template** (*Optional*): Defines a [template](/topics/templating/) to extract the state value. -- **brightness_value_template** (*Optional*): Defines a [template](/topics/templating/) to extract the brightness value. -- **rgb_value_template** (*Optional*): Defines a [template](/topics/templating/) to extract the RGB value. -- **brightness_scale** (*Optional*): Defines the maximum brightness value (i.e. 100%) of the MQTT device (defaults to 255). -- **qos** (*Optional*): The maximum QoS level of the state topic. Default is 0 and will also be used to publishing messages. -- **payload_on** (*Optional*): The payload that represents enabled state. Default is "ON". -- **payload_off** (*Optional*): The payload that represents disabled state. Default is "OFF". -- **optimistic** (*Optional*): Flag that defines if switch works in optimistic mode. Default is true if no state topic defined, else false. - -

- Make sure that your topics match exact. `some-topic/` and `some-topic` are different topics. -

+### {% linkable_title Implementations %} A basic example using a nodeMCU board (ESP8266) to control its built-in led (on/off) can be found [here](https://github.com/mertenats/open-home-automation/tree/master/ha_mqtt_light). [Here](https://github.com/mertenats/open-home-automation/tree/master/ha_mqtt_rgb_light) is another example to control a RGB led (on/off, brightness and colors). diff --git a/source/_components/light.mqtt_json.markdown b/source/_components/light.mqtt_json.markdown index c749ed53a7a..3f722ff64bc 100644 --- a/source/_components/light.mqtt_json.markdown +++ b/source/_components/light.mqtt_json.markdown @@ -38,6 +38,35 @@ When a state topic is not available, the light will work in optimistic mode. In Optimistic mode can be forced, even if state topic is available. Try enabling it if the light is operating incorrectly. +```yaml +# Example configuration.yaml entry +light: + - platform: mqtt_json + command_topic: "home/rgb1/set" +``` + +Configuration variables: + +- **command_topic** (*Required*): The MQTT topic to publish commands to change the light's state. +- **name** (*Optional*): The name of the light. Default is "MQTT JSON Light." +- **state_topic** (*Optional*): The MQTT topic subscribed to receive state updates. +- **brightness** (*Optional*): Flag that defines if the light supports brightness. Default is false. +- **rgb** (*Optional*): Flag that defines if the light supports RGB colors. Default is false. +- **flash_time_short** (*Optional*): The duration, in seconds, of a "short" flash. Default is 2. +- **flash_time_long** (*Optional*): The duration, in seconds, of a "long" flash. Default is 10. +- **optimistic** (*Optional*): Flag that defines if the light works in optimistic mode. Default is true if no state topic defined, else false. +- **qos** (*Optional*): The maximum QoS level of the state topic. Default is 0 and will also be used to publishing messages. + +

+ Make sure that your topics match exact. `some-topic/` and `some-topic` are different topics. +

+ +## {% linkable_title Examples %} + +In this section you find some real life examples of how to use this sensor. + +### {% linkable_title Brightness and RGB support %} + To enable a light with brightness and RGB support in your installation, add the following to your `configuration.yaml` file: ```yaml @@ -51,6 +80,8 @@ light: rgb: true ``` +### {% linkable_title Brightness and no RGB support %} + To enable a light with brightness (but no color support) in your installation, add the following to your `configuration.yaml` file: ```yaml @@ -63,20 +94,6 @@ light: brightness: true ``` -Configuration variables: - -- **name** (*Optional*): The name of the light. Default is "MQTT JSON Light." -- **state_topic** (*Optional*): The MQTT topic subscribed to receive state updates. -- **command_topic** (*Required*): The MQTT topic to publish commands to change the light's state. -- **brightness** (*Optional*): Flag that defines if the light supports brightness. Default is false. -- **rgb** (*Optional*): Flag that defines if the light supports RGB colors. Default is false. -- **flash_time_short** (*Optional*): The duration, in seconds, of a "short" flash. Default is 2. -- **flash_time_long** (*Optional*): The duration, in seconds, of a "long" flash. Default is 10. -- **optimistic** (*Optional*): Flag that defines if the light works in optimistic mode. Default is true if no state topic defined, else false. -- **qos** (*Optional*): The maximum QoS level of the state topic. Default is 0 and will also be used to publishing messages. - -

- Make sure that your topics match exact. `some-topic/` and `some-topic` are different topics. -

+### {% linkable_title Implementations %} A full example of custom lighting using this platform and an ESP8266 microcontroller can be found [here](https://github.com/corbanmailloux/esp-mqtt-rgb-led). It supports on/off, brightness, transitions, RGB colors, and flashing. diff --git a/source/_components/light.osramlightify.markdown b/source/_components/light.osramlightify.markdown index a3d5364e107..75dc48fd55e 100644 --- a/source/_components/light.osramlightify.markdown +++ b/source/_components/light.osramlightify.markdown @@ -17,10 +17,10 @@ The `osramlightify` platform allows you to integrate your [Osram Lightify](http: ```yaml # Example configuration.yaml entry light: - platform: osramlightify - host: 192.168.0.50 + - platform: osramlightify + host: 192.168.0.50 ``` Configuration variables: -- **host** (*Required*): IP address of the Osram Lightify bridge, eg. `192.168.1.50` +- **host** (*Required*): IP address of the Osram Lightify bridge, eg. `192.168.1.50`. diff --git a/source/_components/light.rfxtrx.markdown b/source/_components/light.rfxtrx.markdown index 12bdc7cfd06..6f5b20f997f 100644 --- a/source/_components/light.rfxtrx.markdown +++ b/source/_components/light.rfxtrx.markdown @@ -15,23 +15,22 @@ ha_release: 0.7.5 The `rfxtrx` platform support lights that communicate in the frequency range of 433.92 MHz. First you have to set up your [rfxtrx hub](/components/rfxtrx/). + The easiest way to find your lights is to add this to your `configuration.yaml`: ```yaml light: - platform: rfxtrx - automatic_add: True + - platform: rfxtrx + automatic_add: True ``` -Launch your homeassistant and go the website. -Push your remote and your device should be added: +Launch your Home Assistant and go the website. Push your remote and your device should be added:

-Here the name is `0b11000102ef9f210010f70` and you can verify that it works from the frontend. -Then you should update your configuration to: +Here the name is `0b11000102ef9f210010f70` and you can verify that it works from the frontend. Then you should update your configuration to: ```yaml light: @@ -58,5 +57,5 @@ Configuration variables: - **devices** (*Required*): A list of devices with their name to use in the frontend. - **automatic_add** (*Optional*): To enable the automatic addition of new lights. -- **signal_repetitions** (*Optional*): Because the rxftrx device sends its actions via radio and from most receivers it's impossible to know if the signal was received or not. Therefore you can configure the switch to try to send each signal repeatedly. +- **signal_repetitions** (*Optional*): Because the RFXtrx device sends its actions via radio and from most receivers it's impossible to know if the signal was received or not. Therefore you can configure the switch to try to send each signal repeatedly. - **fire_event** (*Optional*): Fires an event even if the state is the same as before. Can be used for automations. diff --git a/source/_components/light.x10.markdown b/source/_components/light.x10.markdown index 11f1b6cff48..c8a8b8f5277 100644 --- a/source/_components/light.x10.markdown +++ b/source/_components/light.x10.markdown @@ -24,10 +24,9 @@ To enable those lights, add the following lines to your `configuration.yaml` fil light: - platform: x10 devices: - - name: Living Room Lamp - id: a2 - - name: Bedroom Lamp - id: a3 + - id: a2 + - id: a3 + name: Bedroom Lamp ``` Configuration variables: diff --git a/source/_components/light.zigbee.markdown b/source/_components/light.zigbee.markdown index a50568b0dd2..8ce3a9c4e33 100644 --- a/source/_components/light.zigbee.markdown +++ b/source/_components/light.zigbee.markdown @@ -22,13 +22,11 @@ light: - name: Desk Lamp platform: zigbee pin: 0 - address: 0013A20040791FA2 - on_state: low ``` Configuration variables: - **name** (*Required*): The name you' would like to give the light in Home Assistant. - **pin** (*Required*): The number identifying which pin to use. -- **address**: The long 64 bit address of the remote ZigBee device whose digital output pin you wouldd like to switch. Do not include this variable if you want to switch the local ZigBee device's pins. -- **on_state**: Either `high` (default) or `low`, depicting whether the digital output pin is pulled `high` or `low` when the light is turned on. +- **address** (*Optional*): The long 64 bit address of the remote ZigBee device whose digital output pin you wouldd like to switch. Do not include this variable if you want to switch the local ZigBee device's pins. +- **on_state** (*Optional*): Either `high` (default) or `low`, depicting whether the digital output pin is pulled `high` or `low` when the light is turned on. From 227d5a3f4f9b2b911ff2c7d8754eb6fe22e53bb6 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 1 Oct 2016 12:09:08 +0200 Subject: [PATCH 19/70] Minimizing of the configuration sample (#1020) --- source/_components/apcupsd.markdown | 2 -- source/_components/ecobee.markdown | 3 ++- source/_components/emulated_hue.markdown | 23 +++++++++++++------- source/_components/ffmpeg.markdown | 6 ++--- source/_components/homematic.markdown | 3 --- source/_components/insteon_hub.markdown | 1 + source/_components/isy994.markdown | 5 +---- source/_components/joaoapps_join.markdown | 11 +++++++--- source/_components/modbus.markdown | 1 + source/_components/mqtt.markdown | 5 +++++ source/_components/mysensors.markdown | 1 + source/_components/nest.markdown | 2 +- source/_components/netatmo.markdown | 2 +- source/_components/nuimo_controller.markdown | 7 +++--- source/_components/octoprint.markdown | 1 + source/_components/pilight.markdown | 23 ++++++++++++++------ source/_components/qwikswitch.markdown | 2 +- source/_components/rfxtrx.markdown | 2 -- source/_components/scsgate.markdown | 2 +- source/_components/sleepiq.markdown | 2 +- source/_components/tellstick.markdown | 3 +-- source/_components/vera.markdown | 10 ++++++--- source/_components/verisure.markdown | 7 ------ source/_components/weblink.markdown | 1 - 24 files changed, 69 insertions(+), 56 deletions(-) diff --git a/source/_components/apcupsd.markdown b/source/_components/apcupsd.markdown index 54375c28df6..fd25d00d0d5 100644 --- a/source/_components/apcupsd.markdown +++ b/source/_components/apcupsd.markdown @@ -19,8 +19,6 @@ To enable this sensor, add the following lines to your `configuration.yaml`: ```yaml # Example configuration.yaml entry apcupsd: - host: IP_ADDRESS - port: PORT ``` Configuration variables: diff --git a/source/_components/ecobee.markdown b/source/_components/ecobee.markdown index 5caa423d5f9..57ecdd0482a 100644 --- a/source/_components/ecobee.markdown +++ b/source/_components/ecobee.markdown @@ -10,6 +10,8 @@ footer: true logo: ecobee.png ha_category: Hub featured: true +ha_release: 0.9 +ha_iot_class: "Cloud Push" --- @@ -48,7 +50,6 @@ To set it up, add the following information to your `configuration.yaml` file: # Example configuration.yaml entry ecobee: api_key: asdfghjklqwertyuiopzxcvbnm - hold_temp: True ``` Configuration variables: diff --git a/source/_components/emulated_hue.markdown b/source/_components/emulated_hue.markdown index 0d1af6ce973..0063dbafed7 100644 --- a/source/_components/emulated_hue.markdown +++ b/source/_components/emulated_hue.markdown @@ -26,14 +26,6 @@ To enable the emulated Hue bridge, add the following to your `configuration.yaml ```yaml # Example configuration.yaml entry emulated_hue: - host_ip: 192.168.1.186 - listen_port: 8300 - off_maps_to_on_domains: - - script - - scene - expose_by_default: true - exposed_domains: - - light ``` Configuration variables: @@ -58,6 +50,21 @@ Configuration variables: - `input_boolean` - `media_player` +A full configuration sample looks like the one below. + +```yaml +# Example configuration.yaml entry +emulated_hue: + host_ip: 192.168.1.186 + listen_port: 8300 + off_maps_to_on_domains: + - script + - scene + expose_by_default: true + exposed_domains: + - light +``` + With additional customization you will be able to specify the behaviour of the existing entities. ```yaml diff --git a/source/_components/ffmpeg.markdown b/source/_components/ffmpeg.markdown index af3bca5c9d9..63e104226c3 100644 --- a/source/_components/ffmpeg.markdown +++ b/source/_components/ffmpeg.markdown @@ -21,14 +21,12 @@ To set it up, add the following information to your `configuration.yaml` file: ```yaml ffmpeg: - ffmpeg_bin: /usr/bin/ffmpeg - run_test: True ``` Configuration variables: -- **ffmpeg_bin** (*Optional*): Default 'ffmpeg'. Set the ffmpeg binary. -- **run_test** (*Optional*): Default True. Check if `input` is usable by ffmpeg. +- **ffmpeg_bin** (*Optional*): Set the ffmpeg binary (eg. `/usr/bin/ffmpeg`). Default 'ffmpeg'. +- **run_test** (*Optional*): Check if `input` is usable by ffmpeg. Default True. ### {% linkable_title Troubleshooting %} diff --git a/source/_components/homematic.markdown b/source/_components/homematic.markdown index 0809338a341..80df676b539 100644 --- a/source/_components/homematic.markdown +++ b/source/_components/homematic.markdown @@ -34,9 +34,6 @@ To set up the component, add the following information to your `configuration.ya ```yaml homematic: local_ip: 127.0.0.1 - local_port: 8943 - remote_ip: 127.0.0.1 - remote_port: 2001 ``` Configuration variables: diff --git a/source/_components/insteon_hub.markdown b/source/_components/insteon_hub.markdown index 7e6aa5f098b..9c620bf515f 100644 --- a/source/_components/insteon_hub.markdown +++ b/source/_components/insteon_hub.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: insteon.png ha_category: Hub +ha_iot_class: "Cloud Polling" --- The `insteon` component lets you use your [Insteon Hub](http://www.insteon.com/insteon-hub/) with Home Assistant. diff --git a/source/_components/isy994.markdown b/source/_components/isy994.markdown index 7c655454c5c..4c00e3acb0a 100644 --- a/source/_components/isy994.markdown +++ b/source/_components/isy994.markdown @@ -10,6 +10,7 @@ footer: true logo: universal_devices.png ha_category: Hub ha_release: 0.28 +ha_iot_class: "Local Push" --- The ISY994 is a home automation controller that is capable of controlling Insteon and X10 devices. Some models of the ISY994 can even control Z-Wave devices. @@ -27,16 +28,12 @@ isy994: host: ISY_ADDRESS username: ISY_USERNAME password: ISY_PASSWORD - sensor_string: SENSOR_STRING - hidden_string: HIDDEN_STRING - tls: TLS_VERSION ``` Configuration variables: - **host** (*Required*): The host entry should be in full URL format, eg. http://192.168.10.100:80 - **username** (*Required*): The username that used to access the ISY interface. - **password** (*Required*): The password that used to access the ISY interface. - - **sensor_string** (*Optional*): This is the string that is used to identify which devices are to be assumed to be sensors instead of lights of switches. By default, this string is 'sensor'. If this string is found in the device name or folder, Home Assistant will assume it is as a sensor or binary sensor (if the device has on/off or true/false states). - **hidden_string** (*Optional*): The HIDDEN_STRING is a string that is used to identify which devices are to be hidden on Home Assistant's front page. This string will be stripped from the device's name before being used. By default, this value is '{HIDE ME}'. - **tls** (*Optional*): This entry should refelct the version of TLS that the ISY controller is using for HTTPS encryption. This value can be either 1.1 or 1.2. If this value is not set, it is assumed to be version 1.1. This is the default for most users. ISY994 Pro users may likely be using 1.2. When using HTTPS in the host entry, it is best practice to set this value. diff --git a/source/_components/joaoapps_join.markdown b/source/_components/joaoapps_join.markdown index b3f19b0ed2c..44ac2587f7c 100644 --- a/source/_components/joaoapps_join.markdown +++ b/source/_components/joaoapps_join.markdown @@ -13,9 +13,9 @@ ha_release: "0.24" --- -The Join platform exposes services from [Join](http://joaoapps.com/join). In Home Assistant, the Join features are divided up in two locations, the Join component, and the Join notify platform. The notify platform allows us to send messages to Join devices, the the component allows us to access the other special features that Join offers. +The Join platform exposes services from [Join](http://joaoapps.com/join). In Home Assistant, the Join features are divided up in two locations, the Join component, and the Join notify platform. The notify platform allows us to send messages to Join devices, the the component allows us to access the other special features that Join offers. -In the configuartion.yaml you need to provide the device id of the target device. If you want to send to a group of devices, you need to provide an api key. You can find you device id and api key [here](https://joinjoaomgcd.appspot.com/). +In the `configuration.yaml` file you need to provide the device id of the target device. If you want to send to a group of devices, you need to provide an api key. You can find you device id and api key [here](https://joinjoaomgcd.appspot.com/). To set it up, add the following information to your `configuration.yaml` file: @@ -32,7 +32,12 @@ joaoapps_join: api_key: asd97823jb628a34fwsdfwefd5384345tf2d ``` -The notify service has a few optional parameters such as icon and smallicon. You can use them like so: +Configuration variables: + +- **device_id** (*Required*): The Id of your device. +- **api_key** (*Required*): The API key for Join. + +The notify service has a few optional parameters such as icon and small icon. You can use them like so: ```json {"message":"Hello!","title":"From Hass","data":{"icon":"https://goo.gl/KVqcYi","smallicon":"http://goo.gl/AU4Wf1"}} diff --git a/source/_components/modbus.markdown b/source/_components/modbus.markdown index 9483df09728..1a224288bee 100644 --- a/source/_components/modbus.markdown +++ b/source/_components/modbus.markdown @@ -10,6 +10,7 @@ footer: true logo: modbus.png ha_category: Hub ha_release: pre 0.7 +ha_iot_class: "Local Polling" --- diff --git a/source/_components/mqtt.markdown b/source/_components/mqtt.markdown index e0487150b37..992b03853da 100644 --- a/source/_components/mqtt.markdown +++ b/source/_components/mqtt.markdown @@ -61,6 +61,11 @@ Home Assistant contains an embedded MQTT broker. If no broker configuration is g | Password | Your API [password](/components/http/) | Websocket port | 8080 +```yaml +# Example configuration.yaml entry +mqtt: +``` +

This broker does not currently work with OwnTracks because of a protocol version issue.

diff --git a/source/_components/mysensors.markdown b/source/_components/mysensors.markdown index afd151a2305..65ea4dab2dd 100644 --- a/source/_components/mysensors.markdown +++ b/source/_components/mysensors.markdown @@ -10,6 +10,7 @@ footer: true logo: mysensors.png ha_category: Hub featured: true +ha_iot_class: "Local Polling" --- The [MySensors](https://www.mysensors.org) project combines Arduino boards with NRF24L01 radio boards to build sensor networks. The component will automatically add all available devices to Home Assistant, after [presentation](#presentation) is done. diff --git a/source/_components/nest.markdown b/source/_components/nest.markdown index bd850a89e7c..4f87020fec6 100644 --- a/source/_components/nest.markdown +++ b/source/_components/nest.markdown @@ -12,7 +12,7 @@ ha_category: Hub featured: true --- -The Nest component is the main component to integrate all Nest related platforms. Besides this component you will have to setup your thermostat and any connected sensors separately. +The Nest component is the main component to integrate all [Nest](https://nest.com/) related platforms. Besides this component you will have to setup your thermostat and any connected sensors separately. ```yaml # Example configuration.yaml entry diff --git a/source/_components/netatmo.markdown b/source/_components/netatmo.markdown index d65956ed73b..ff6ac53af1b 100644 --- a/source/_components/netatmo.markdown +++ b/source/_components/netatmo.markdown @@ -9,7 +9,7 @@ sharing: true footer: true logo: netatmo.png ha_category: Hub -ha_release: "0.2x" +ha_release: "0.20" --- diff --git a/source/_components/nuimo_controller.markdown b/source/_components/nuimo_controller.markdown index 72c6aac2c21..e2ed36fba8b 100644 --- a/source/_components/nuimo_controller.markdown +++ b/source/_components/nuimo_controller.markdown @@ -10,7 +10,7 @@ footer: true logo: nuimo.png ha_category: Hub ha_release: 0.29 -ha_iot_class: "Local Poll" +ha_iot_class: "Local Polling" --- The `nuimo_controller` component allows you to connect to a [Nuimo](http://www.senic.com/) device for receiving input events and displaying on the LED matrix via the [Nuimo SDK for Python on Linux](https://github.com/getSenic/nuimo-linux-python). @@ -18,9 +18,8 @@ The `nuimo_controller` component allows you to connect to a [Nuimo](http://www.s To connect to a Nuimo device add the following section to your `configuration.yaml` file: ```yaml -nuimo_controller: - mac: 'CE:B5:12:25:21:89' - name: +# Example configuration.yaml entry +nuimo_controller: ``` Configuration variables: diff --git a/source/_components/octoprint.markdown b/source/_components/octoprint.markdown index ed7f6724c5a..17b9f1a5935 100644 --- a/source/_components/octoprint.markdown +++ b/source/_components/octoprint.markdown @@ -11,6 +11,7 @@ logo: octoprint.png ha_category: Hub featured: false ha_release: 0.19 +ha_iot_class: "Local Polling" --- [OctoPrint](http://octoprint.org/) is a web interface for your 3D printer. This is the main component to integrate OctoPrint sensors, you will have to setup sensors and binary sensors separately. diff --git a/source/_components/pilight.markdown b/source/_components/pilight.markdown index e2eeddc8fc7..f0ce7f33c6c 100644 --- a/source/_components/pilight.markdown +++ b/source/_components/pilight.markdown @@ -10,7 +10,7 @@ footer: true logo: pilight.png ha_category: Hub ha_release: 0.26 -ha_iot_class: Local Push +ha_iot_class: "Local Push" --- [Pilight](https://www.pilight.org/) is a modular and open source solution to communicate with 433 MHz devices and runs on various small form factor computers. A lot of common [protocols](https://wiki.pilight.org/doku.php/protocols) are already available. @@ -26,12 +26,6 @@ To integrate pilight into Home Assistant, add the following section to your `con pilight: host: 127.0.0.1 port: 5000 - whitelist: # optional - protocol: - - daycom - - intertechno - id: - - 42 ``` Configuration variables: @@ -42,6 +36,21 @@ Configuration variables: In this example only received RF codes using a daycom or intertechno protocol are put on the event bus and only when the device id is 42. For more possible settings please look at the receiver section of the pilight [API](https://www.pilight.org/development/api/). +A full configuration sample could look like the sample below: + +```yaml +# Example configuration.yaml entry +pilight: + host: 127.0.0.1 + port: 5000 + whitelist: # optional + protocol: + - daycom + - intertechno + id: + - 42 +``` + ## {% linkable_title Troubleshooting %} - A list of tested RF transceiver hardware is available [here](https://wiki.pilight.org/doku.php/electronics). This might be usefull before buying. diff --git a/source/_components/qwikswitch.markdown b/source/_components/qwikswitch.markdown index 098bc7c1db2..b7958abeda3 100644 --- a/source/_components/qwikswitch.markdown +++ b/source/_components/qwikswitch.markdown @@ -25,7 +25,7 @@ Example configuration: ```yaml # Example configuration.yaml entry qwikswitch: - url: 'http://127.0.0.1:2020' + url: http://127.0.0.1:2020 ``` Configuration variables: diff --git a/source/_components/rfxtrx.markdown b/source/_components/rfxtrx.markdown index 1c7b4df46c9..3cecbf5fe65 100644 --- a/source/_components/rfxtrx.markdown +++ b/source/_components/rfxtrx.markdown @@ -20,8 +20,6 @@ To enable RFXtrx in your installation, add the following to your `configuration. # Example configuration.yaml entry rfxtrx: device: PATH_TO_DEVICE - debug: True - dummy: False ``` Configuration variables: diff --git a/source/_components/scsgate.markdown b/source/_components/scsgate.markdown index 43841dc0cd9..413aefd5f34 100644 --- a/source/_components/scsgate.markdown +++ b/source/_components/scsgate.markdown @@ -26,7 +26,7 @@ Configuration variables: - **device** (*Required*): The path to your device, e.g. `/dev/ttyACM0` -### How to find the scs_id for your devices +### {% linkable_title How to find the scs_id for your devices %} The SCSGate component relies on the [scsgate](https://github.com/flavio/scsgate) python module. diff --git a/source/_components/sleepiq.markdown b/source/_components/sleepiq.markdown index b1b22b1d52f..6527c803f0e 100644 --- a/source/_components/sleepiq.markdown +++ b/source/_components/sleepiq.markdown @@ -7,7 +7,7 @@ sidebar: true comments: false sharing: true footer: true -logo: sleepiq +logo: sleepiq.png ha_category: Hub ha_release: 0.29 ha_iot_class: "Local Polling" diff --git a/source/_components/tellstick.markdown b/source/_components/tellstick.markdown index 82ea76ee185..780d249cbf9 100644 --- a/source/_components/tellstick.markdown +++ b/source/_components/tellstick.markdown @@ -19,10 +19,9 @@ To get started, add the devices to your `configuration.yaml` file. ```yaml # Example configuration.yaml entry tellstick: - signal_repetitions: X ``` Configuration variables: -- **signal_repetitions** *Optional*: Because the tellstick sends its actions via radio and from most receivers it's impossible to know if the signal was received or not. Therefore you can configure the switch and light to try to send each signal repeatedly. +- **signal_repetitions** (*Optional*): Because the tellstick sends its actions via radio and from most receivers it's impossible to know if the signal was received or not. Therefore you can configure the switch and light to try to send each signal repeatedly. diff --git a/source/_components/vera.markdown b/source/_components/vera.markdown index 1a153ea1622..b1b7e78c7fc 100644 --- a/source/_components/vera.markdown +++ b/source/_components/vera.markdown @@ -22,15 +22,19 @@ vera: vera_controller_url: http://192.168.1.161:3480/ ``` +Configuration variables: + +- **vera_controller_url** (*Required*): The URL for your Vera device. +

It is recommended to assign a static IP address to your Vera Controller. This ensures that it won't change IP addresses, so you won't have to change the `vera_controller_url` if it reboots and comes up with a different IP address. See your router's manual for details on how to set this up. If you need the MAC address of your Vera, check the label on the bottom.

-By default your switches will be added to HA as switches, however if some of them are light switches, you can tell HA this using the optional ```lights``` parameter as shown below. +By default your switches will be added to Home Assistant as switches, however if some of them are light switches, you can tell Home Assistant this using the optional `lights` parameter as shown below. -Vera imports detailed zwave devices into HA - this can include system devices and other devices that you don't use, you can tell HA not to load these devices using the ```exclude:``` parameter as shown below. +Vera imports detailed zwave devices into Home Assistant. This can include system devices and other devices that you don't use, you can tell Home Assistant not to load these devices using the `exclude:` parameter as shown below. -You can find the vera device id either by looking at your vera controller - or by checking the ```Vera Device Id``` attribute on each device imported into HA. +You can find the vera device id either by looking at your vera controller or by checking the `Vera Device Id` attribute on each device imported into Home Assistant. ```yaml vera: diff --git a/source/_components/verisure.markdown b/source/_components/verisure.markdown index 37a0948a919..5314204e59f 100644 --- a/source/_components/verisure.markdown +++ b/source/_components/verisure.markdown @@ -29,13 +29,6 @@ To integrate Verisure with Home Assistant, add the following section to your `co verisure: username: USERNAME password: PASSWORD - alarm: 1 - hygrometers: 0 - smartplugs: 1 - thermometers: 0 - locks: 0 - mouse: 1 - code_digits: 4 ``` Configuration variables: diff --git a/source/_components/weblink.markdown b/source/_components/weblink.markdown index 56c64a90c6b..9e5833a8639 100644 --- a/source/_components/weblink.markdown +++ b/source/_components/weblink.markdown @@ -21,7 +21,6 @@ weblink: entities: - name: Router url: http://192.168.1.1/ - icon: mdi:router-wireless - name: Home Assistant url: https://home-assistant.io ``` From 0bc1fc4e3ce2b6657d2cfd55767bf88a0484cffa Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 1 Oct 2016 12:09:50 +0200 Subject: [PATCH 20/70] Minimizing of the configuration sample (#1019) --- source/_components/graphite.markdown | 3 -- source/_components/influxdb.markdown | 40 ++++++++++++++++---------- source/_components/logbook.markdown | 15 +++++----- source/_components/logentries.markdown | 4 +-- source/_components/recorder.markdown | 9 +++++- source/_components/splunk.markdown | 5 +--- source/_components/statsd.markdown | 5 ---- 7 files changed, 44 insertions(+), 37 deletions(-) diff --git a/source/_components/graphite.markdown b/source/_components/graphite.markdown index 172d17d9b64..5a49eb40399 100644 --- a/source/_components/graphite.markdown +++ b/source/_components/graphite.markdown @@ -19,9 +19,6 @@ To enable this component, add the following lines to your `configuration.yaml`: ```yaml # Example configuration.yaml entry graphite: - host: IP_ADDRESS - port: 2003 - prefix: ha ``` Configuration variables: diff --git a/source/_components/influxdb.markdown b/source/_components/influxdb.markdown index 20c652125fc..266e783c1d4 100644 --- a/source/_components/influxdb.markdown +++ b/source/_components/influxdb.markdown @@ -19,7 +19,31 @@ To use the `influxdb` component in your installation, add the following to your ```yaml # Example configuration.yaml entry influxdb: - host: DB_HOST_IP_ADDRESS +``` + +Configuration variables: + +- **host** (*Optional*): IP address of your database host, eg. http://192.168.1.10. Defaults to `localhost`. +- **port** (*Optional*): Port to use. Defaults to 8086. +- **username** (*Optional*): The username of the database user. +- **password** (*Optional*): The password for the database user account. +- **database** (*Optional*): Name of the database to use. Defaults to `home_assistant`. The database must already exist. +- **ssl** (*Optional*): Use https instead of http to connect. Defaults to false. +- **verify_ssl** (*Optional*): Verify SSL certificate for https request. Defaults to false. +- **blacklist** (*Optional*): List of entities not logged to InfluxDB. +- **whitelist** (*Optional*): List of the entities (only) that will be logged to InfluxDB. If not set, all entities will be logged. Values set by the **blacklist** option will prevail. +- **tags** (*Optional*): Tags to mark the data. + + +## {% linkable_title Examples %} + +In this section you find some real life examples of how to use this component. + +### {% linkable_title Full configuration %} + +```yaml +influxdb: + host: 192.168.1.190 port: 20000 database: DB_TO_STORE_EVENTS username: MY_USERNAME @@ -36,17 +60,3 @@ influxdb: instance: prod source: hass ``` - -Configuration variables: - -- **host** (*Optional*): IP address of your database host, eg. http://192.168.1.10. Defaults to localhost. -- **username** (*Required*): The username of the database user. -- **password** (*Required*): The password for the database user account. -- **port** (*Optional*): Port to use. Defaults to 8086. -- **database** (*Optional*): Name of the database to use. Defaults to `home_assistant`. The database must already exist. -- **ssl** (*Optional*): Use https instead of http to connect. Defaults to false. -- **verify_ssl** (*Optional*): Verify SSL certificate for https request. Defaults to false. -- **blacklist** (*Optional*): List of entities not logged to InfluxDB. -- **whitelist** (*Optional*): List of the entities (only) that will be logged to InfluxDB. If not set, all entities will be logged. Values set by the **blacklist** option will prevail. -- **tags** (*Optional*): Tags to mark the data. - diff --git a/source/_components/logbook.markdown b/source/_components/logbook.markdown index 0f8537a1335..c8a48533908 100644 --- a/source/_components/logbook.markdown +++ b/source/_components/logbook.markdown @@ -19,9 +19,16 @@ To enable the logbook in your installation, add the following to your `configura # Example configuration.yaml entry logbook: ``` + +Configuration variables: + +- **exclude** (*Optional*): Configure which components should **not** create logbook enties. +- **entities** (*Optional*): The list of entity ids to be excluded from creating logbook entries. +- **domains** (*Optional*): The list of domains to be excluded from creating logbook entries. + If you want to exclude messages of some entities or domains from the logbook just add the `exclude` parameter like: + ```yaml -# Example configuration.yaml entry logbook: exclude: entities: @@ -32,12 +39,6 @@ logbook: - weblink ``` -Configuration variables: - -- **exclude** (*Optional*): Configure which components should **not** create logbook enties. -- **entities** (*Optional*): The list of entity ids to be excluded from creating logbook entries. -- **domains** (*Optional*): The list of domains to be excluded from creating logbook entries. - ### {% linkable_title Exclude Events %} Entities customized as hidden are excluded from the logbook by default, but sometimes you want to show the entity in the UI and not in the logbook. For instance you use the `sensor.date`to show the current date in the UI, but you do not want an logbook entry for that sensor every day. diff --git a/source/_components/logentries.markdown b/source/_components/logentries.markdown index 8a414dbfcec..6da17dd9f35 100644 --- a/source/_components/logentries.markdown +++ b/source/_components/logentries.markdown @@ -17,9 +17,9 @@ To use the `logentries` component in your installation, add the following to you ```yaml # Example configuration.yaml entry logentries: - token: your-log-token-here + token: TOKEN ``` Configuration variables: -- **token** (*Required*): Your Logentries log token +- **token** (*Required*): Your Logentries log token. diff --git a/source/_components/recorder.markdown b/source/_components/recorder.markdown index 259e957d8d1..b0dfd2e16d2 100644 --- a/source/_components/recorder.markdown +++ b/source/_components/recorder.markdown @@ -23,7 +23,6 @@ To setup the `recorder` component in your installation, add the following to you ```yaml # Example configuration.yaml entry recorder: - purge_days: 14 ``` Configuration variables: @@ -31,6 +30,14 @@ Configuration variables: - **purge_days** (*Optional*): Delete events and states older than x days. - **db_url** (*Optional*): The URL which point to your database. + +```yaml +# Example configuration.yaml entry +recorder: + purge_days: 5 + db_url: sqlite:///home/user/.homeassistant/test +``` + | Database engine | `db_url` | | :---------------|:---------------------------------------------------------| | SQLite | `sqlite:///PATH/TO/DB_NAME` | diff --git a/source/_components/splunk.markdown b/source/_components/splunk.markdown index 92f588561e6..34158b300c7 100644 --- a/source/_components/splunk.markdown +++ b/source/_components/splunk.markdown @@ -19,15 +19,12 @@ To use the `splunk` component in your installation, add the following to your `c ```yaml # Example configuration.yaml entry splunk: - host: SPLUNK_HOST_IP_ADDRESS_OR_HOST_NAME - port: 8088 token: B4415DFF-683C-5C6C-3994-4F6D4A5DB03A - ssl: True ``` Configuration variables: +- **token** (*Required*): The HTTP Event Collector Token already created in your Splunk instance. - **host** (*Optional*): IP address or host name of your Splunk host, eg. http://192.168.1.10. Will default to `localhost` if not supplied. - **port** (*Optional*): Port to use. Defaults to 8088. -- **token** (*Required*): The HTTP Event Collector Token already created in your Splunk instance. - **ssl** (*Optional*): Use https instead of http to connect. Defaults to False. diff --git a/source/_components/statsd.markdown b/source/_components/statsd.markdown index 4aa901f2a4e..ee34264538b 100644 --- a/source/_components/statsd.markdown +++ b/source/_components/statsd.markdown @@ -18,11 +18,6 @@ To use the `statsd` component in your installation, add the following to your `c ```yaml # Example configuration.yaml entry statsd: - host: DB_HOST_IP_ADDRESS - port: 20000 - prefix: DB_TO_STORE_EVENTS - rate: 1 - log_attributes: true ``` Configuration variables: From 2fffb5d09728b49cb3fc806bc1a0f255cf74ab93 Mon Sep 17 00:00:00 2001 From: Otto Winter Date: Sat, 1 Oct 2016 16:14:22 +0200 Subject: [PATCH 21/70] Create component page for mysensors based cover (#986) * Create component page for mysensors based cover * Updated documentation of MySensors cover to match PR * Updated MySensors cover for 1.4 V_TYPES backport * Fixed sending initial state in setup * Fixed broken link * Changed ha_release --- source/_components/cover.mysensors.markdown | 155 ++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 source/_components/cover.mysensors.markdown diff --git a/source/_components/cover.mysensors.markdown b/source/_components/cover.mysensors.markdown new file mode 100644 index 00000000000..59861272eca --- /dev/null +++ b/source/_components/cover.mysensors.markdown @@ -0,0 +1,155 @@ +--- +layout: page +title: "MySensors Cover" +description: "Instructions how to integrate MySensors covers into Home Assistant." +date: 2016-09-25 11:30 +0100 +sidebar: true +comments: false +sharing: true +footer: true +logo: mysensors.png +ha_category: Cover +ha_release: 0.30 +--- + +Integrates MySensors covers into Home Assistant. See the [main component] for configuration instructions. + +The following actuator types are supported: + +##### MySensors version 1.4 +S_TYPE | V_TYPE +------------|------------- +S_COVER | V_UP, V_DOWN, V_STOP, [V_DIMMER or V_LIGHT] + +##### MySensors version 1.5 and higher +S_TYPE | V_TYPE +------------|------------- +S_COVER | V_UP, V_DOWN, V_STOP, [V_PERCENTAGE or V_STATUS] + +All V_TYPES above are required. Use V_PERCENTAGE (or V_DIMMER) if you know the exact position of the cover in percent, use V_STATUS (or V_LIGHT) if you don't. + +For more information, visit the [serial api] of MySensors. + +### {% linkable_title Example sketch %} + +```cpp +/* + * Documentation: http://www.mysensors.org + * Support Forum: http://forum.mysensors.org + */ + +// Enable debug prints to serial monitor +#define MY_DEBUG +#define MY_RADIO_NRF24 + +#include +#define SN "Cover" +#define SV "1.1" + +// Actuators for moving the cover up and down respectively. +#define COVER_UP_ACTUATOR_PIN 2 +#define COVER_DOWN_ACTUATOR_PIN 3 +// Sensors for finding out when the cover has reached its up/down position. +// These could be simple buttons or linear hall sensors. +#define COVER_UP_SENSOR_PIN 4 +#define COVER_DOWN_SENSOR_PIN 5 + +#define CHILD_ID 0 + +// Internal representation of the cover state. +enum State { + IDLE, + UP, // Window covering. Up. + DOWN, // Window covering. Down. +}; + +static int state = IDLE; +static int status = 0; // 0=cover is down, 1=cover is up +static bool initial_state_sent = false; +MyMessage upMessage(CHILD_ID, V_UP); +MyMessage downMessage(CHILD_ID, V_DOWN); +MyMessage stopMessage(CHILD_ID, V_STOP); +MyMessage statusMessage(CHILD_ID, V_STATUS); + +void sendState() { + // Send current state and status to gateway. + send(upMessage.set(state == UP)); + send(downMessage.set(state == DOWN)); + send(stopMessage.set(state == IDLE)); + send(statusMessage.set(status)); +} + +void setup() { + pinMode(COVER_UP_SENSOR_PIN, INPUT); + pinMode(COVER_DOWN_SENSOR_PIN, INPUT); +} + +void presentation() { + sendSketchInfo(SN, SV); + + present(CHILD_ID, S_COVER); +} + +void loop() { + if (!initial_state_sent) { + sendState(); + initial_state_sent = true; + } + + if (state == IDLE) { + digitalWrite(COVER_UP_ACTUATOR_PIN, LOW); + digitalWrite(COVER_DOWN_ACTUATOR_PIN, LOW); + } + + if (state == UP && digitalRead(COVER_UP_SENSOR_PIN) == HIGH) { + Serial.println("Cover is up."); + // Update status and state; send it to the gateway. + status = 1; + state = IDLE; + sendState(); + // Actuators will be disabled in next loop() iteration. + } + + if (state == DOWN && digitalRead(COVER_DOWN_SENSOR_PIN) == HIGH) { + Serial.println("Cover is down."); + // Update status and state; send it to the gateway. + status = 0; + state = IDLE; + sendState(); + // Actuators will be disabled in next loop() iteration. + } +} + +void receive(const MyMessage &message) { + if (message.type == V_UP) { + // Set state to covering up and send it back to the gateway. + state = UP; + sendState(); + Serial.println("Moving cover up."); + + // Activate actuator until the sensor returns HIGH in loop(). + digitalWrite(COVER_UP_ACTUATOR_PIN, HIGH); + } + + if (message.type == V_DOWN) { + // Set state to covering up and send it back to the gateway. + state = DOWN; + sendState(); + Serial.println("Moving cover down."); + // Activate actuator until the sensor returns HIGH in loop(). + digitalWrite(COVER_DOWN_ACTUATOR_PIN, HIGH); + } + + if (message.type == V_STOP) { + // Set state to idle and send it back to the gateway. + state = IDLE; + sendState(); + Serial.println("Stopping cover."); + + // Actuators will be switched off in loop(). + } +} +``` + +[main component]: /components/mysensors/ +[serial api]: https://www.mysensors.org/download/serial_api_20 From bb9533e546b0124223a0ab9712bb80b636275138 Mon Sep 17 00:00:00 2001 From: Martin Hjelmare Date: Sun, 2 Oct 2016 10:44:37 +0200 Subject: [PATCH 22/70] Add mysensors types (#1031) * Add more types. * Fix some rendering issues. --- source/_components/climate.mysensors.markdown | 114 +++++++++--------- source/_components/cover.mysensors.markdown | 18 +-- source/_components/light.mysensors.markdown | 3 +- source/_components/mysensors.markdown | 4 +- source/_components/sensor.mysensors.markdown | 11 +- source/_components/switch.mysensors.markdown | 12 +- 6 files changed, 91 insertions(+), 71 deletions(-) diff --git a/source/_components/climate.mysensors.markdown b/source/_components/climate.mysensors.markdown index 4620a13a46f..0f39382c8b1 100644 --- a/source/_components/climate.mysensors.markdown +++ b/source/_components/climate.mysensors.markdown @@ -2,14 +2,13 @@ layout: page title: "MySensors HVAC" description: "Instructions how to integrate MySensors climate into Home Assistant." -date: 2016-09-14 18:20 +0100 +date: 2016-10-01 15:00 +0200 sidebar: true comments: false sharing: true footer: true logo: mysensors.png ha_category: Climate -featured: false ha_release: 0.29 --- @@ -19,18 +18,18 @@ The following actuator types are supported: ##### MySensors version 1.5 and higher -S_TYPE | V_TYPE -------------|------------- -S_HVAC | V_HVAC_FLOW_STATE*, V_HVAC_SETPOINT_HEAT, V_HVAC_SETPOINT_COOL, V_HVAC_SPEED +S_TYPE | V_TYPE +-------|----------------------------------------------------------------------------- +S_HVAC | V_HVAC_FLOW_STATE*, V_HVAC_SETPOINT_HEAT, V_HVAC_SETPOINT_COOL, V_HVAC_SPEED V_HVAC_FLOW_STATE is mapped to the state of the Climate component in HA as follows: -Home Assistant State | MySensors State ------------------------|---------------------- -STATE_COOL | CoolOn -STATE_HEAT | HeatOn -STATE_AUTO | Off -STATE_OFF | AutoChangeOver +Home Assistant State | MySensors State +---------------------|---------------- +STATE_COOL | CoolOn +STATE_HEAT | HeatOn +STATE_AUTO | Off +STATE_OFF | AutoChangeOver Currently humidity, away_mode, aux_heat, swing_mode is not supported. This will be included in later versions as feasible. @@ -44,67 +43,72 @@ For more information, visit the [serial api] of MySensors. ```cpp /* - * Documentation: http://www.mysensors.org - * Support Forum: http://forum.mysensors.org - * - */ +* Documentation: http://www.mysensors.org +* Support Forum: http://forum.mysensors.org +*/ #include -/* Include all the other Necessary code here. The example code is limited to message exchange for mysensors with the controller (ha)*/ +/* +* Include all the other Necessary code here. +* The example code is limited to message exchange for mysensors +* with the controller (ha). +*/ #define CHILD_ID_HVAC 0 // childId MyMessage msgHVACSetPointC(CHILD_ID_HVAC, V_HVAC_SETPOINT_COOL); MyMessage msgHVACSpeed(CHILD_ID_HVAC, V_HVAC_SPEED); MyMessage msgHVACFlowState(CHILD_ID_HVAC, V_HVAC_FLOW_STATE); -/* Include all the other Necessary code here. The example code is limited to message exchange for mysensors with the controller (ha)*/ +/* +* Include all the other Necessary code here. +* The example code is limited to message exchange for mysensors +* with the controller (ha). +*/ void setup() { + // Startup and initialize MySensors library. + // Set callback for incoming messages. + gw.begin(incomingMessage); - // Startup and initialize MySensors library. Set callback for incoming messages. - gw.begin(incomingMessage); + // Send the sketch version information to the gateway and Controller + gw.sendSketchInfo("HVAC", "0.1"); - // Send the sketch version information to the gateway and Controller - gw.sendSketchInfo("HVAC", "0.1"); - - gw.present(CHILD_ID_HVAC, S_HVAC, "Thermostat"); - gw.send(msgHVACFlowState.set("Off")); - gw.send(msgHVACSetPointC.set(target_temp)); - gw.send(msgHVACSpeed.set("Max")); -} - -void incomingMessage(const MyMessage &message) { - String recvData = message.data; - recvData.trim(); - switch (message.type) { - case V_HVAC_SPEED: - if(recvData.equalsIgnoreCase("auto")) fan_speed = 0; - else if(recvData.equalsIgnoreCase("min")) fan_speed = 1; - else if(recvData.equalsIgnoreCase("normal")) fan_speed = 2; - else if(recvData.equalsIgnoreCase("max")) fan_speed = 3; - processHVAC(); - break; - case V_HVAC_SETPOINT_COOL: - target_temp = message.getFloat(); - processHVAC(); - break; - case V_HVAC_FLOW_STATE: - if(recvData.equalsIgnoreCase("coolon") && (!Present_Power_On )){ - togglePower(); - } - else if(recvData.equalsIgnoreCase("off") && Present_Power_On ){ - togglePower(); - } - break; - } + gw.present(CHILD_ID_HVAC, S_HVAC, "Thermostat"); + gw.send(msgHVACFlowState.set("Off")); + gw.send(msgHVACSetPointC.set(target_temp)); + gw.send(msgHVACSpeed.set("Max")); } void loop() { + // Process incoming messages (like config from server) + gw.process(); +} - // Process incoming messages (like config from server) - gw.process(); - +void incomingMessage(const MyMessage &message) { + String recvData = message.data; + recvData.trim(); + switch (message.type) { + case V_HVAC_SPEED: + if(recvData.equalsIgnoreCase("auto")) fan_speed = 0; + else if(recvData.equalsIgnoreCase("min")) fan_speed = 1; + else if(recvData.equalsIgnoreCase("normal")) fan_speed = 2; + else if(recvData.equalsIgnoreCase("max")) fan_speed = 3; + processHVAC(); + break; + case V_HVAC_SETPOINT_COOL: + target_temp = message.getFloat(); + processHVAC(); + break; + case V_HVAC_FLOW_STATE: + if(recvData.equalsIgnoreCase("coolon") && (!Present_Power_On )){ + togglePower(); + } + else if(recvData.equalsIgnoreCase("off") && Present_Power_On ){ + togglePower(); + } + break; + } } ``` diff --git a/source/_components/cover.mysensors.markdown b/source/_components/cover.mysensors.markdown index 59861272eca..15e87371017 100644 --- a/source/_components/cover.mysensors.markdown +++ b/source/_components/cover.mysensors.markdown @@ -2,14 +2,14 @@ layout: page title: "MySensors Cover" description: "Instructions how to integrate MySensors covers into Home Assistant." -date: 2016-09-25 11:30 +0100 +date: 2016-10-01 15:00 +0200 sidebar: true comments: false sharing: true footer: true logo: mysensors.png ha_category: Cover -ha_release: 0.30 +ha_release: "0.30" --- Integrates MySensors covers into Home Assistant. See the [main component] for configuration instructions. @@ -17,14 +17,16 @@ Integrates MySensors covers into Home Assistant. See the [main component] for co The following actuator types are supported: ##### MySensors version 1.4 -S_TYPE | V_TYPE -------------|------------- -S_COVER | V_UP, V_DOWN, V_STOP, [V_DIMMER or V_LIGHT] + +S_TYPE | V_TYPE +--------|-------------------------------------------- +S_COVER | V_UP, V_DOWN, V_STOP, [V_DIMMER or V_LIGHT] ##### MySensors version 1.5 and higher -S_TYPE | V_TYPE -------------|------------- -S_COVER | V_UP, V_DOWN, V_STOP, [V_PERCENTAGE or V_STATUS] + +S_TYPE | V_TYPE +--------|------------------------------------------------- +S_COVER | V_UP, V_DOWN, V_STOP, [V_PERCENTAGE or V_STATUS] All V_TYPES above are required. Use V_PERCENTAGE (or V_DIMMER) if you know the exact position of the cover in percent, use V_STATUS (or V_LIGHT) if you don't. diff --git a/source/_components/light.mysensors.markdown b/source/_components/light.mysensors.markdown index b66c1b93401..dbf689f0362 100644 --- a/source/_components/light.mysensors.markdown +++ b/source/_components/light.mysensors.markdown @@ -2,14 +2,13 @@ layout: page title: "MySensors Light" description: "Instructions how to integrate MySensors lights into Home Assistant." -date: 2016-04-13 14:20 +0100 +date: 2016-10-01 15:00 +0200 sidebar: true comments: false sharing: true footer: true logo: mysensors.png ha_category: Light -featured: false ha_release: 0.13 --- diff --git a/source/_components/mysensors.markdown b/source/_components/mysensors.markdown index 65ea4dab2dd..8e0dad4a470 100644 --- a/source/_components/mysensors.markdown +++ b/source/_components/mysensors.markdown @@ -2,7 +2,7 @@ layout: page title: "MySensors" description: "Instructions how to integrate MySensors sensors into Home Assistant." -date: 2016-08-26 23:00 +0200 +date: 2016-10-01 15:00 +0200 sidebar: true comments: false sharing: true @@ -10,7 +10,7 @@ footer: true logo: mysensors.png ha_category: Hub featured: true -ha_iot_class: "Local Polling" +ha_iot_class: "Local Push" --- The [MySensors](https://www.mysensors.org) project combines Arduino boards with NRF24L01 radio boards to build sensor networks. The component will automatically add all available devices to Home Assistant, after [presentation](#presentation) is done. diff --git a/source/_components/sensor.mysensors.markdown b/source/_components/sensor.mysensors.markdown index 1420e037279..5e40de148fc 100644 --- a/source/_components/sensor.mysensors.markdown +++ b/source/_components/sensor.mysensors.markdown @@ -2,7 +2,7 @@ layout: page title: "MySensors Sensor" description: "Instructions how to integrate MySensors sensors into Home Assistant." -date: 2016-06-12 15:00 +0200 +date: 2016-10-01 15:00 +0200 sidebar: true comments: false sharing: true @@ -50,6 +50,15 @@ S_LIGHT_LEVEL | V_LEVEL S_AIR_QUALITY | V_LEVEL (replaces V_DUST_LEVEL) S_DUST | V_LEVEL (replaces V_DUST_LEVEL) +##### MySensors version 2.0 and higher + +S_TYPE | V_TYPE +----------------|-------------------------- +S_INFO | V_TEXT +S_GAS | V_FLOW, V_VOLUME +S_GPS | V_POSITION +S_WATER_QUALITY | V_TEMP, V_PH, V_ORP, V_EC + ### {% linkable_title Custom unit of measurement %} Some sensor value types are not specific for a certain sensor type. These do not have a default unit of measurement in Home Assistant. For example, the V_LEVEL type can be used for different sensor types, dust, sound, vibration etc. diff --git a/source/_components/switch.mysensors.markdown b/source/_components/switch.mysensors.markdown index 1e9b9a11dd0..078af164984 100644 --- a/source/_components/switch.mysensors.markdown +++ b/source/_components/switch.mysensors.markdown @@ -2,7 +2,7 @@ layout: page title: "MySensors Switch" description: "Instructions how to integrate MySensors switches into Home Assistant." -date: 2016-06-12 15:00 +0200 +date: 2016-10-01 15:00 +0200 sidebar: true comments: false sharing: true @@ -19,7 +19,7 @@ The following actuator types are supported: ##### MySensors version 1.4 and higher S_TYPE | V_TYPE ----------|-------------- +---------|------------------- S_DOOR | V_ARMED S_MOTION | V_ARMED S_SMOKE | V_ARMED @@ -30,7 +30,7 @@ S_IR | V_IR_SEND, V_LIGHT ##### MySensors version 1.5 and higher S_TYPE | V_TYPE --------------|------------------ +-------------|---------------------- S_LIGHT | V_STATUS S_BINARY | [V_STATUS or V_LIGHT] S_SPRINKLER | V_STATUS @@ -39,6 +39,12 @@ S_SOUND | V_ARMED S_VIBRATION | V_ARMED S_MOISTURE | V_ARMED +##### MySensors version 2.0 and higher + +S_TYPE | V_TYPE +----------------|--------- +S_WATER_QUALITY | V_STATUS + All V_TYPES for each S_TYPE above are required to activate the actuator for the platform. Use either V_LIGHT or V_STATUS depending on library version for cases where that V_TYPE is required. For more information, visit the [serial api] of MySensors. From a175486bb3f450728ef9f0aad0a6f0290bb40185 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 2 Oct 2016 17:12:48 +0200 Subject: [PATCH 23/70] Minimizing of the configuration sample (#1033) --- .../media_player.braviatv.markdown | 6 ++--- source/_components/media_player.cast.markdown | 5 ++-- source/_components/media_player.cmus.markdown | 20 +++++++-------- .../_components/media_player.denon.markdown | 6 ++--- .../_components/media_player.directv.markdown | 5 +--- .../_components/media_player.firetv.markdown | 6 +---- .../_components/media_player.gpmdp.markdown | 12 ++++----- .../_components/media_player.itunes.markdown | 7 +++--- source/_components/media_player.kodi.markdown | 10 +++----- .../media_player.lg_netcast.markdown | 7 +++--- .../_components/media_player.mpchc.markdown | 7 +++--- source/_components/media_player.mpd.markdown | 8 +++--- .../_components/media_player.onkyo.markdown | 21 ++++++++-------- .../media_player.panasonic_viera.markdown | 11 ++++---- .../_components/media_player.pandora.markdown | 3 ++- .../_components/media_player.pioneer.markdown | 6 ++--- source/_components/media_player.plex.markdown | 3 ++- source/_components/media_player.roku.markdown | 6 ++--- .../media_player.russound_rnet.markdown | 1 + .../media_player.samsungtv.markdown | 10 +++----- .../media_player.snapcast.markdown | 9 +++++-- .../_components/media_player.sonos.markdown | 21 ++++++++-------- .../media_player.squeezebox.markdown | 13 ++++------ .../media_player.universal.markdown | 8 +++--- .../_components/media_player.webostv.markdown | 25 +++++++++++++------ .../_components/media_player.yamaha.markdown | 4 +-- 26 files changed, 117 insertions(+), 123 deletions(-) diff --git a/source/_components/media_player.braviatv.markdown b/source/_components/media_player.braviatv.markdown index affcdff7b22..11ccf5247d0 100644 --- a/source/_components/media_player.braviatv.markdown +++ b/source/_components/media_player.braviatv.markdown @@ -10,6 +10,7 @@ footer: true logo: bravia.png ha_category: Media Player ha_release: 0.23 +ha_iot_class: "Local Polling" --- The `braviatv` platform allows you to control a [Sony Bravia TV](http://www.sony.com). @@ -23,9 +24,8 @@ To add a TV to your installation, add the following to your `configuration.yaml` ```yaml # Example configuration.yaml entry media_player: - platform: braviatv - host: 192.168.0.10 - name: Living Room TV + - platform: braviatv + host: 192.168.0.10 ``` Configuration variables: diff --git a/source/_components/media_player.cast.markdown b/source/_components/media_player.cast.markdown index 2ffa7180414..cf9c6ea4dc2 100644 --- a/source/_components/media_player.cast.markdown +++ b/source/_components/media_player.cast.markdown @@ -10,6 +10,8 @@ footer: true logo: google_cast.png ha_category: Media Player featured: true +ha_release: pre 0.7 +ha_iot_class: "Local Polling" --- @@ -20,8 +22,7 @@ Chromecast platform can also be forced to load by adding the following lines to ```yaml # Example configuration.yaml entry media_player: - platform: cast - host: 192.168.1.9 + - platform: cast ``` Configuration variables: diff --git a/source/_components/media_player.cmus.markdown b/source/_components/media_player.cmus.markdown index b26289e46c4..e798889686c 100644 --- a/source/_components/media_player.cmus.markdown +++ b/source/_components/media_player.cmus.markdown @@ -9,35 +9,33 @@ comments: false sharing: true footer: true ha_category: Media Player +ha_iot_class: "Local Polling" --- The `cmus` platform allows you to control a [cmus](https://cmus.github.io/) music player on a remote or local machine from Home Assistant. -To add cmus to your installation, add the following to your `configuration.yaml` file if cmus is running on a remote server: +To add cmus to your installation, add the following to your `configuration.yaml` file if running locally it will look like: ```yaml # Example configuration.yaml entry media_player: - platform: cmus - host: IP_ADDRESS - port: 3000 - password: PASSWORD - name: Desktop Computer Music Player + - platform: cmus ``` -if running locally it will look like: +if cmus is running on a remote server: + ```yaml # Example configuration.yaml entry media_player: - platform: cmus - name: Local Music Player + - platform: cmus + host: IP_ADDRESS + password: PASSWORD ``` Configuration variables: -- **host** Hostname or IP address of the machine running cmus. Note if a remote -cmus is configured that instance must be configured to listen to remote connections, which also requires a password to be set. +- **host** (*Optional*): Hostname or IP address of the machine running cmus. Note if a remote cmus is configured that instance must be configured to listen to remote connections, which also requires a password to be set. - **password** (*Required if host is set*): Password for your cmus player. - **port** (*Optional*): Port of the cmus socket, defaults to 3000. - **name** (*Optional*): The name you'd like to give the cmus player in Home Assistant diff --git a/source/_components/media_player.denon.markdown b/source/_components/media_player.denon.markdown index f6ab14cae35..59f65696d31 100644 --- a/source/_components/media_player.denon.markdown +++ b/source/_components/media_player.denon.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: denon.png ha_category: Media Player +ha_iot_class: "Local Polling" --- @@ -26,9 +27,8 @@ To add a Denon Network Receiver to your installation, add the following to your ```yaml # Example configuration.yaml entry media_player: - platform: denon - host: IP_ADDRESS - name: Music station + - platform: denon + host: IP_ADDRESS ``` Configuration variables: diff --git a/source/_components/media_player.directv.markdown b/source/_components/media_player.directv.markdown index 68ceaf4329a..acfb4995368 100644 --- a/source/_components/media_player.directv.markdown +++ b/source/_components/media_player.directv.markdown @@ -20,10 +20,7 @@ The `directv` media player platform can also be forced to load by adding the fol ```yaml # Example configuration.yaml entry media_player: - platform: directv - host: 192.168.1.10 - port: 8080 - name: DirecTV Living Room + - platform: directv ``` Configuration variables: diff --git a/source/_components/media_player.firetv.markdown b/source/_components/media_player.firetv.markdown index f5b9de02247..48afd14f0fe 100644 --- a/source/_components/media_player.firetv.markdown +++ b/source/_components/media_player.firetv.markdown @@ -38,11 +38,7 @@ To add FireTV to your installation, add the following to your `configuration.yam ```yaml # Example configuration.yaml entry media_player: - platform: firetv - host: localhost - port: 5556 - device: livingroom-firetv - name: My Amazon Fire TV + - platform: firetv ``` Configuration variables: diff --git a/source/_components/media_player.gpmdp.markdown b/source/_components/media_player.gpmdp.markdown index 3f35c1d1442..7207e0e0924 100644 --- a/source/_components/media_player.gpmdp.markdown +++ b/source/_components/media_player.gpmdp.markdown @@ -11,9 +11,10 @@ logo: gpmdp.png ha_category: Media Player ha_iot_class: "Local Polling" ha_release: "0.20" - +ha_iot_class: "Local Polling" --- + The `gpmdp` media player platform allows you to control a [GPMDP](http://www.googleplaymusicdesktopplayer.com/) instance running on a computer from Home Assistant. You will have first have to check "Enable playback API" in GPMDP's settings and then add an inbound rule to the firewall to allow access to port 5672 on the computer running GPMDP. @@ -23,13 +24,12 @@ Then just add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry media_player: - platform: gpmdp - host: IP_ADDRESS - name: NAME + - platform: gpmdp + host: IP_ADDRESS ``` Configuration variables: -- **host** (*Required*): IP address of the computer running GPMDP -- **name** (*Optional*): Name of the player +- **host** (*Required*): IP address of the computer running GPMDP. +- **name** (*Optional*): Name of the player. diff --git a/source/_components/media_player.itunes.markdown b/source/_components/media_player.itunes.markdown index 3b9b590d3e8..c046755ae2a 100644 --- a/source/_components/media_player.itunes.markdown +++ b/source/_components/media_player.itunes.markdown @@ -10,6 +10,7 @@ footer: true logo: itunes.png ha_category: Media Player ha_release: 0.7.3 +ha_iot_class: "Local Polling" --- @@ -22,10 +23,8 @@ To add iTunes to your installation, add the following to your `configuration.yam ```yaml # Example configuration.yaml entry media_player: - platform: itunes - name: iTunes - host: http://192.168.1.50 - port: 8181 + - platform: itunes + host: http://192.168.1.50 ``` Configuration variables: diff --git a/source/_components/media_player.kodi.markdown b/source/_components/media_player.kodi.markdown index 9e129f99039..24a892aab43 100644 --- a/source/_components/media_player.kodi.markdown +++ b/source/_components/media_player.kodi.markdown @@ -11,6 +11,7 @@ logo: kodi.png ha_category: Media Player featured: true ha_release: pre 0.7 +ha_iot_class: "Local Polling" --- @@ -21,13 +22,8 @@ To add Kodi to your installation, add the following to your `configuration.yaml` ```yaml # Example configuration.yaml entry media_player: - platform: kodi - host: http://192.168.0.123 - port: 8080 - name: Kodi - username: USERNAME - password: PASSWORD - turn_off_action: shutdown + - platform: kodi + host: http://192.168.0.123 ``` Configuration variables: diff --git a/source/_components/media_player.lg_netcast.markdown b/source/_components/media_player.lg_netcast.markdown index f60a6255ff9..138eaec8bde 100644 --- a/source/_components/media_player.lg_netcast.markdown +++ b/source/_components/media_player.lg_netcast.markdown @@ -11,6 +11,7 @@ logo: lg.png ha_category: Media Player ha_iot_class: "Local Poll" ha_release: "0.20" +ha_iot_class: "Local Polling" --- The `lg_netcast` platform allows you to control a LG Smart TV running NetCast 3.0 (LG Smart TV models released in 2012) and NetCast 4.0 (LG Smart TV models released in 2013). For the new LG WebOS TV's use the [webostv](/components/media_player.webostv) platform. @@ -20,10 +21,8 @@ To add a LG TV to your installation, add the following to your `configuration.ya ```yaml # Example configuration.yaml entry media_player: - platform: lg_netcast - host: 192.168.0.20 - access_token: 889955 - name: Living Room TV + - platform: lg_netcast + host: 192.168.0.20 ``` Configuration variables: diff --git a/source/_components/media_player.mpchc.markdown b/source/_components/media_player.mpchc.markdown index 5b761b2ac3f..4e4c187d0f4 100644 --- a/source/_components/media_player.mpchc.markdown +++ b/source/_components/media_player.mpchc.markdown @@ -11,6 +11,7 @@ logo: mpchc.png ha_category: Media Player featured: false ha_release: 0.25 +ha_iot_class: "Local Polling" --- @@ -33,10 +34,8 @@ To add MPC-HC to your installation, add the following to your `configuration.yam ```yaml # Example configuration.yaml entry media_player: - platform: mpchc - host: http://192.168.0.123 - port: 13579 - name: MPC-HC + - platform: mpchc + host: http://192.168.0.123 ``` Configuration variables: diff --git a/source/_components/media_player.mpd.markdown b/source/_components/media_player.mpd.markdown index af2d60a87b1..929cbce572b 100644 --- a/source/_components/media_player.mpd.markdown +++ b/source/_components/media_player.mpd.markdown @@ -10,6 +10,7 @@ footer: true logo: mpd.png ha_category: Media Player ha_release: pre 0.7 +ha_iot_class: "Local Polling" --- @@ -20,11 +21,8 @@ To add MPD to your installation, add the following to your `configuration.yaml` ```yaml # Example configuration.yaml entry media_player: - platform: mpd - host: IP_ADDRESS - port: 6600 - location: bedroom - password: PASSWORD + - platform: mpd + host: IP_ADDRESS ``` Configuration variables: diff --git a/source/_components/media_player.onkyo.markdown b/source/_components/media_player.onkyo.markdown index 950c1031bb2..b8ba67fa4d7 100644 --- a/source/_components/media_player.onkyo.markdown +++ b/source/_components/media_player.onkyo.markdown @@ -10,6 +10,7 @@ footer: true logo: onkyo.png ha_category: Media Player ha_release: 0.17 +ha_iot_class: "Local Polling" --- @@ -20,21 +21,21 @@ To add an Onkyo receiver to your installation, add the following to your `config ```yaml # Example configuration.yaml entry media_player: - platform: onkyo - host: 192.168.1.2 - name: receiver - sources: - pc: 'HTPC' - aux1: 'Chromecast' - bd: 'Bluray' - game: 'Wii U' + - platform: onkyo + host: 192.168.1.2 + name: receiver + sources: + pc: 'HTPC' ``` + Configuration variables: -- **host** (*Optional*): IP address of the device. Example:`192.168.1.2` If not specified, the platform will load any discovered receivers. -- **name** (*Required if host is specified*): Name of the device + +- **host** (*Optional*): IP address of the device. Example:`192.168.1.2`. If not specified, the platform will load any discovered receivers. +- **name** (*Required if host is specified*): Name of the device. - **sources** (*Optional*): A list of mappings from source to source name. Valid sources can be found below. A default list will be used if no source mapping is specified. List of source names: + - video1 - video2 - video3 diff --git a/source/_components/media_player.panasonic_viera.markdown b/source/_components/media_player.panasonic_viera.markdown index 4e1310357b3..861668192a0 100644 --- a/source/_components/media_player.panasonic_viera.markdown +++ b/source/_components/media_player.panasonic_viera.markdown @@ -11,6 +11,7 @@ logo: panasonic.png ha_category: Media Player featured: false ha_release: 0.17 +ha_iot_class: "Local Polling" --- The `panasonic_viera` platform allows you to control a Panasonic Viera TV. @@ -27,14 +28,12 @@ To add a TV to your installation, add the following to your `configuration.yaml` ```yaml # Example configuration.yaml entry media_player: - platform: panasonic_viera - host: 192.168.0.10 - port: 55000 - name: Living Room TV + - platform: panasonic_viera + host: 192.168.0.10 ``` Configuration variables: -- **host** (*Required*): The IP of the Panasonic Viera TV, e.g. `192.168.0.10` -- **port** (*Optional*): The port of your Panasonic Viera TV. Defaults to `55000` +- **host** (*Required*): The IP of the Panasonic Viera TV, e.g. `192.168.0.10`. +- **port** (*Optional*): The port of your Panasonic Viera TV. Defaults to `55000`. - **name** (*Optional*): The name you would like to give to the Panasonic Viera TV. diff --git a/source/_components/media_player.pandora.markdown b/source/_components/media_player.pandora.markdown index efa8c2bc614..bcddae6bde7 100644 --- a/source/_components/media_player.pandora.markdown +++ b/source/_components/media_player.pandora.markdown @@ -11,6 +11,7 @@ logo: pandora.png ha_category: Media Player featured: false ha_release: 0.22 +ha_iot_class: "Local Polling" --- If you have a Pandora account, you can control it from Home Assistant with this media player. @@ -51,7 +52,7 @@ The Pandora player can be loaded by adding the following lines to your `configur ```yaml # Example configuration.yaml entry media_player: - platform: pandora + - platform: pandora ``` That's it! Now you will find a media player. If you click it you will find all your stations listed as different sources. If you switch to one, the station will begin playing. diff --git a/source/_components/media_player.pioneer.markdown b/source/_components/media_player.pioneer.markdown index e0a20c48c57..8a810bcaf30 100644 --- a/source/_components/media_player.pioneer.markdown +++ b/source/_components/media_player.pioneer.markdown @@ -11,6 +11,7 @@ logo: pioneer.png ha_category: Media Player featured: false ha_release: 0.19 +ha_iot_class: "Local Polling" --- The `pioneer` platform allows you to control Pioneer Network Receivers. @@ -20,9 +21,8 @@ To add a Pioneer receiver to your installation, add the following to your `confi ```yaml # Example configuration.yaml entry media_player: - platform: pioneer - host: 192.168.0.10 - name: Living receiver + - platform: pioneer + host: 192.168.0.10 ``` Configuration variables: diff --git a/source/_components/media_player.plex.markdown b/source/_components/media_player.plex.markdown index 0ca2d456134..f22c20ba4d4 100644 --- a/source/_components/media_player.plex.markdown +++ b/source/_components/media_player.plex.markdown @@ -11,6 +11,7 @@ logo: plex.png ha_category: Media Player featured: true ha_release: 0.7.4 +ha_iot_class: "Local Polling" --- @@ -33,7 +34,7 @@ If you want to enable the plex platform directly, add the following lines to you ```yaml # Example configuration.yaml entry media_player: - platform: plex + - platform: plex ``` In case [discovery](/components/discovery/) does not work (GDM disabled or non-local plex server), you can create `~/.homeassistant/plex.conf` manually. diff --git a/source/_components/media_player.roku.markdown b/source/_components/media_player.roku.markdown index 4de5d21de9b..5c889727de3 100644 --- a/source/_components/media_player.roku.markdown +++ b/source/_components/media_player.roku.markdown @@ -10,6 +10,7 @@ footer: true logo: roku.png ha_category: Media Player 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/). @@ -19,10 +20,9 @@ The `roku` media player platform can also be forced to load by adding the follow ```yaml # Example configuration.yaml entry media_player: - platform: roku - host: 192.168.1.10 + - platform: roku ``` Configuration variables: -- **host** *Optional*: Use only if you don't want to scan for devices. +- **host** (*Optional*): Use only if you don't want to scan for devices. diff --git a/source/_components/media_player.russound_rnet.markdown b/source/_components/media_player.russound_rnet.markdown index 127a30266a4..8e7600e3078 100644 --- a/source/_components/media_player.russound_rnet.markdown +++ b/source/_components/media_player.russound_rnet.markdown @@ -10,6 +10,7 @@ footer: true logo: russound.png ha_category: Media Player ha_release: 0.25 +ha_iot_class: "Local Polling" --- The `russound_rnet` platform allows you to control Russound devices that make use of the RNET protocol. diff --git a/source/_components/media_player.samsungtv.markdown b/source/_components/media_player.samsungtv.markdown index bfcb7af4f11..92a8b21fbfc 100644 --- a/source/_components/media_player.samsungtv.markdown +++ b/source/_components/media_player.samsungtv.markdown @@ -11,6 +11,7 @@ logo: samsung.png ha_category: Media Player featured: false ha_release: 0.13 +ha_iot_class: "Local Polling" --- The `samsungtv` platform allows you to control a [Samsung Smart TV](http://www.samsung.com/uk/consumer/tv-audio-video/televisions/). @@ -22,16 +23,13 @@ To add a TV to your installation, add the following to your `configuration.yaml` ```yaml # Example configuration.yaml entry media_player: - platform: samsungtv - host: 192.168.0.10 - port: 55000 - name: Living Room TV - timeout: 2 + - platform: samsungtv + host: 192.168.0.10 ``` Configuration variables: -- **host** (*Required*): The IP of the Samsung Smart TV, eg. 192.168.0.10 +- **host** (*Required*): The IP of the Samsung Smart TV, eg. `192.168.0.10^. - **port** (*Optional*): The port of the Samsung Smart TV. Defaults to 55000. - **name** (*Optional*): The name you would like to give to the Samsung Smart TV. - **timeout** (*Optional*): The time-out for the communication with the TV. Defaults to 0. diff --git a/source/_components/media_player.snapcast.markdown b/source/_components/media_player.snapcast.markdown index 576d639b04d..94f7db9b94c 100644 --- a/source/_components/media_player.snapcast.markdown +++ b/source/_components/media_player.snapcast.markdown @@ -11,6 +11,7 @@ logo: snapcast.png ha_category: Media Player featured: false ha_release: 0.13 +ha_iot_class: "Local Polling" --- The `snapcast` platform allows you to control [Snapcast](https://github.com/badaix/snapcast) from Home Assistant. @@ -20,6 +21,10 @@ To add Snapcast to your installation, add the following to your `configuration.y ```yaml # Example configuration.yaml entry media_player: - platform: snapcast - host: xxx.xxx.xxx.xxx + - platform: snapcast + host: xxx.xxx.xxx.xxx ``` + +Configuration variables: + +- **host** (*Required*): The IP of the device, eg. `192.168.0.10`. diff --git a/source/_components/media_player.sonos.markdown b/source/_components/media_player.sonos.markdown index 246e9a77ca6..1eeb796772a 100644 --- a/source/_components/media_player.sonos.markdown +++ b/source/_components/media_player.sonos.markdown @@ -11,6 +11,7 @@ logo: sonos.png ha_category: Media Player featured: true ha_release: 0.7.3 +ha_iot_class: "Local Polling" --- The `sonos` platform allows you to control your [Sonos](http://www.sonos.com) HiFi wireless speakers and audio components from Home Assistant. By default it supports auto-discovery provided by Home Assistant, and you don't need to add anything to your `configuration.yaml`. Alternatively, there are some manual configuration options, listed as follows: @@ -20,7 +21,7 @@ To add your Sonos components to your installation, add the following to your `co ```yaml # Example configuration.yaml entry using Sonos discovery media_player: - platform: sonos + - platform: sonos ``` If you have multiple network devices, you can provide the IP address of the device that should be used for Sonos auto-discovery. @@ -28,8 +29,8 @@ If you have multiple network devices, you can provide the IP address of the devi ```yaml # Example configuration.yaml entry using Sonos discovery on a specific interface media_player: - platform: sonos - interface_addr: 192.0.2.1 + - platform: sonos + interface_addr: 192.0.2.1 ``` You can also specify one or more hosts to connect to if they cannot be found with Sonos auto-discovery. @@ -37,8 +38,8 @@ You can also specify one or more hosts to connect to if they cannot be found wit ```yaml # Example configuration.yaml entry with manually specified addresses media_player: - platform: sonos - hosts: 192.0.2.25 + - platform: sonos + hosts: 192.0.2.25 ``` or, for multiple hosts: @@ -46,11 +47,11 @@ or, for multiple hosts: ```yaml # Example configuration.yaml entry with manually specified addresses media_player: - platform: sonos - hosts: - - 192.0.2.25 - - 192.0.2.26 - - 192.0.2.27 + - platform: sonos + hosts: + - 192.0.2.25 + - 192.0.2.26 + - 192.0.2.27 ``` ### {% linkable_title Service `sonos_snapshot` %} diff --git a/source/_components/media_player.squeezebox.markdown b/source/_components/media_player.squeezebox.markdown index faa59f84265..0a4c1b0adc5 100644 --- a/source/_components/media_player.squeezebox.markdown +++ b/source/_components/media_player.squeezebox.markdown @@ -10,27 +10,24 @@ footer: true logo: logitech.png ha_category: Media Player ha_release: pre 0.7 +ha_iot_class: "Local Polling" --- -The Squeezebox platform allows you to control a [Logitech Squeezebox](https://en.wikipedia.org/wiki/Squeezebox_%28network_music_player%29) music player from Home Assistant. -This lets you control Squeezebox hardware like the Classic, Transporter, Duet, Boom, Radio and Touch and of software players like [SoftSqueeze](http://softsqueeze.sourceforge.net/), [SqueezePlayer](https://play.google.com/store/apps/details?id=de.bluegaspode.squeezeplayer) and [SqueezeSlave](http://forums.slimdevices.com/showthread.php?93607-ANNOUNCE-Squeezeslave-1-2-released). +The `squeezebox` platform allows you to control a [Logitech Squeezebox](https://en.wikipedia.org/wiki/Squeezebox_%28network_music_player%29) music player from Home Assistant. This lets you control Squeezebox hardware like the Classic, Transporter, Duet, Boom, Radio and Touch and of software players like [SoftSqueeze](http://softsqueeze.sourceforge.net/), [SqueezePlayer](https://play.google.com/store/apps/details?id=de.bluegaspode.squeezeplayer) and [SqueezeSlave](http://forums.slimdevices.com/showthread.php?93607-ANNOUNCE-Squeezeslave-1-2-released). To add your Squeezebox player to your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry media_player: - platform: squeezebox - host: IP_ADDRESS - port: 9090 - username: USERNAME - password: PASSWORD + - platform: squeezebox + host: IP_ADDRESS ``` Configuration variables: - **host** (*Required*): The host name or address of the Logitech Media Server, eg. 192.168.1.21. -- **port** (*Optional*): Telnet port to Logitech Media Server, default 9090. +- **port** (*Optional*): Telnet port to Logitech Media Server. Defaults to 9090. - **username** (*Optional*): The username, if password protection is enabled. - **password** (*Optional*): The password, if password protection is enabled. diff --git a/source/_components/media_player.universal.markdown b/source/_components/media_player.universal.markdown index 4883d487e2a..0514b86eff0 100644 --- a/source/_components/media_player.universal.markdown +++ b/source/_components/media_player.universal.markdown @@ -49,10 +49,10 @@ media_player: Configuration variables: -- **name**: The name to assign the player -- **children**: Ordered list of child media players this entity will control -- **commands** *Optional*: Commands to be overwritten. Possible entries are *turn_on*, *turn_off*, *volume_up*, *volume_down*, and *volume_mute*. -- **attributes** *Optional*: Attributes that can be overwritten. Possible entries are *is_volume_muted* and *state*. The values should be an entity id and state attribute separated by a bar (\|). If the entity id's state should be used, then only the entity id should be provided. +- **name** (*Required*): The name to assign the player +- **children** (*Required*): Ordered list of child media players this entity will control +- **commands** (*Optional*): Commands to be overwritten. Possible entries are *turn_on*, *turn_off*, *volume_up*, *volume_down*, and *volume_mute*. +- **attributes** (*Optional*): Attributes that can be overwritten. Possible entries are *is_volume_muted* and *state*. The values should be an entity id and state attribute separated by a bar (\|). If the entity id's state should be used, then only the entity id should be provided. The universal media player will primarily imitate one of its *children*. The first child in the list that is active (not idle/off) will be controlled the universal media player. The universal media player will also inherit its state from the first active child. Entities in the *children* list must be media players. diff --git a/source/_components/media_player.webostv.markdown b/source/_components/media_player.webostv.markdown index 76be7fa7f51..12b25fbfbdc 100644 --- a/source/_components/media_player.webostv.markdown +++ b/source/_components/media_player.webostv.markdown @@ -9,7 +9,7 @@ sharing: true footer: true logo: webos.png ha_category: Media Player -ha_iot_class: "Local Poll" +ha_iot_class: "Local Polling" ha_release: 0.18 --- @@ -24,12 +24,6 @@ To add a TV to your installation, add the following to your `configuration.yaml` media_player: - platform: webostv host: 192.168.0.10 - name: Living Room TV - customize: - sources: - - livetv - - youtube - - makotv ``` Configuration variables: @@ -39,4 +33,19 @@ Configuration variables: - **customize** array (*Optional*): List of options to customize. - ***sources** array (*Optional*): List of hardware inputs. -If you do not provide a host name, all LG WebOS Smart TV's within your network will be auto-discovered if your TV network name is set to `[LG] webOS TV` +If you do not provide a host name, all LG WebOS Smart TV's within your network will be auto-discovered if your TV network name is set to `[LG] webOS TV`. + +A full configuration example will look like the sample below: + +```yaml +# Example configuration.yaml entry +media_player: + - platform: webostv + host: 192.168.0.10 + name: Living Room TV + customize: + sources: + - livetv + - youtube + - makotv +``` diff --git a/source/_components/media_player.yamaha.markdown b/source/_components/media_player.yamaha.markdown index 02d33c7c6e3..85e9cc2b508 100644 --- a/source/_components/media_player.yamaha.markdown +++ b/source/_components/media_player.yamaha.markdown @@ -28,9 +28,7 @@ To add a Yamaha Network Receiver to your installation, add the following to your ```yaml # Example configuration.yaml entry media_player: - platform: yamaha - host: 192.168.1.100 - name: 'Basement Receiver' + - platform: yamaha ``` Configuration variables: From fab9b3034e14bda1594ea1e49149cacad6feffc0 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 2 Oct 2016 17:12:58 +0200 Subject: [PATCH 24/70] Minimizing of the configuration sample (#1034) --- source/_components/notify.aws_lambda.markdown | 13 +++---- source/_components/notify.aws_sns.markdown | 11 +++--- source/_components/notify.aws_sqs.markdown | 11 +++--- .../_components/notify.command_line.markdown | 6 ++-- source/_components/notify.ecobee.markdown | 4 +-- source/_components/notify.file.markdown | 9 +++-- .../_components/notify.free_mobile.markdown | 7 ++-- source/_components/notify.gntp.markdown | 4 +-- source/_components/notify.group.markdown | 14 ++++---- source/_components/notify.html5.markdown | 8 ++--- source/_components/notify.instapush.markdown | 14 ++++---- source/_components/notify.kodi.markdown | 22 +++++------- .../notify.llamalab_automate.markdown | 8 ++--- source/_components/notify.markdown | 10 ++---- .../_components/notify.message_bird.markdown | 7 ++-- source/_components/notify.nma.markdown | 6 ++-- source/_components/notify.pushbullet.markdown | 6 ++-- source/_components/notify.pushetta.markdown | 8 ++--- source/_components/notify.pushover.markdown | 8 ++--- source/_components/notify.rest.markdown | 10 ++---- source/_components/notify.sendgrid.markdown | 10 +++--- source/_components/notify.slack.markdown | 10 +++--- source/_components/notify.smtp.markdown | 35 +++++++++++++------ source/_components/notify.syslog.markdown | 7 ++-- source/_components/notify.telegram.markdown | 8 ++--- source/_components/notify.twilio_sms.markdown | 10 +++--- source/_components/notify.twitter.markdown | 12 +++---- source/_components/notify.webostv.markdown | 12 +++---- source/_components/notify.xmpp.markdown | 14 ++++---- 29 files changed, 146 insertions(+), 158 deletions(-) diff --git a/source/_components/notify.aws_lambda.markdown b/source/_components/notify.aws_lambda.markdown index 64c9c229926..21ef850da95 100644 --- a/source/_components/notify.aws_lambda.markdown +++ b/source/_components/notify.aws_lambda.markdown @@ -21,14 +21,11 @@ To use this notification platform in your installation, add the following to you ```yaml # Example configuration.yaml entry notify: - platform: aws_lambda - name: NOTIFIER_NAME - aws_access_key_id: AWS_ACCESS_KEY_ID - aws_secret_access_key: AWS_SECRET_ACCESS_KEY - profile_name: AWS_PROFILE - region_name: 'us-east-1' - context: - ... + - name: NOTIFIER_NAME + platform: aws_lambda + aws_access_key_id: AWS_ACCESS_KEY_ID + aws_secret_access_key: AWS_SECRET_ACCESS_KEY + region_name: 'us-east-1' ``` Configuration variables: diff --git a/source/_components/notify.aws_sns.markdown b/source/_components/notify.aws_sns.markdown index 82ad8bc3a79..21a6b48cc55 100644 --- a/source/_components/notify.aws_sns.markdown +++ b/source/_components/notify.aws_sns.markdown @@ -19,12 +19,11 @@ To use this notification platform in your installation, add the following to you ```yaml # Example configuration.yaml entry notify: - platform: aws_sns - name: NOTIFIER_NAME - aws_access_key_id: AWS_ACCESS_KEY_ID - aws_secret_access_key: AWS_SECRET_ACCESS_KEY - profile_name: AWS_PROFILE - region_name: 'us-east-1' + - name: NOTIFIER_NAME + platform: aws_sns + aws_access_key_id: AWS_ACCESS_KEY_ID + aws_secret_access_key: AWS_SECRET_ACCESS_KEY + region_name: 'us-east-1' ``` Configuration variables: diff --git a/source/_components/notify.aws_sqs.markdown b/source/_components/notify.aws_sqs.markdown index d4a6c836eb0..e40e81050b1 100644 --- a/source/_components/notify.aws_sqs.markdown +++ b/source/_components/notify.aws_sqs.markdown @@ -19,12 +19,11 @@ To use this notification platform in your installation, add the following to you ```yaml # Example configuration.yaml entry notify: - platform: aws_sqs - name: NOTIFIER_NAME - aws_access_key_id: AWS_ACCESS_KEY_ID - aws_secret_access_key: AWS_SECRET_ACCESS_KEY - profile_name: AWS_PROFILE - region_name: 'us-east-1' + - name: NOTIFIER_NAME + platform: aws_sqs + aws_access_key_id: AWS_ACCESS_KEY_ID + aws_secret_access_key: AWS_SECRET_ACCESS_KEY + region_name: 'us-east-1' ``` Configuration variables: diff --git a/source/_components/notify.command_line.markdown b/source/_components/notify.command_line.markdown index b6f7a2ce9e1..a5d3b6a5942 100644 --- a/source/_components/notify.command_line.markdown +++ b/source/_components/notify.command_line.markdown @@ -19,9 +19,9 @@ To enable those notifications in your installation, add the following to your `c ```yaml # Example configuration.yaml entry notify: - name: NOTIFIER_NAME - platform: command_line - command: "espeak -vmb/mb-us1" + - name: NOTIFIER_NAME + platform: command_line + command: "espeak -vmb/mb-us1" ``` Configuration variables: diff --git a/source/_components/notify.ecobee.markdown b/source/_components/notify.ecobee.markdown index f079b783f80..18ba15b94b2 100644 --- a/source/_components/notify.ecobee.markdown +++ b/source/_components/notify.ecobee.markdown @@ -19,8 +19,8 @@ To use this notification platform in your installation, add the following to you ```yaml # Example configuration.yaml entry notify: - name: NOTIFIER_NAME - platform: ecobee + - name: NOTIFIER_NAME + platform: ecobee ``` Configuration variables: diff --git a/source/_components/notify.file.markdown b/source/_components/notify.file.markdown index 531d0fa4a1b..b2c3a07d051 100644 --- a/source/_components/notify.file.markdown +++ b/source/_components/notify.file.markdown @@ -20,16 +20,15 @@ To enable file notifications in your installation, add the following to your `co ```yaml # Example configuration.yaml entry notify: - name: NOTIFIER_NAME - platform: file - filename: FILENAME - timestamp: true or false + - name: NOTIFIER_NAME + platform: file + filename: FILENAME ``` Configuration variables: - **name** (*Optional*): Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`. - **filename** (*Required*): Name of the file to use. The file will be created if it doesn't exist and saved in your `config/` folder. -- **timestamp** (*Optional*): Setting `timestamp` to True adds a timestamp to every entry. +- **timestamp** (*Optional*): Setting `timestamp` to `True` adds a timestamp to every entry. To use notifications, please see the [getting started with automation page](/getting-started/automation/). diff --git a/source/_components/notify.free_mobile.markdown b/source/_components/notify.free_mobile.markdown index ed79113add4..0123c7fec5d 100644 --- a/source/_components/notify.free_mobile.markdown +++ b/source/_components/notify.free_mobile.markdown @@ -31,9 +31,10 @@ To enable SMS notifications in your installation, add the following to your `con ```yaml # Example configuration.yaml entry notify: - platform: free_mobile - username: YOUR_ACCOUNT_ID - access_token: TOKEN + - name: NOTIFIER_NAME + platform: free_mobile + username: YOUR_ACCOUNT_ID + access_token: TOKEN ``` Configuration variables: diff --git a/source/_components/notify.gntp.markdown b/source/_components/notify.gntp.markdown index bf84923a0ed..f319a5980c2 100644 --- a/source/_components/notify.gntp.markdown +++ b/source/_components/notify.gntp.markdown @@ -20,8 +20,8 @@ To use GNTP notifications, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry notify: - name: NOTIFER_NAME - platform: gntp + - name: NOTIFER_NAME + platform: gntp ``` GNTP will attempt to connect to a local server running on port 23053 if no `hostname` is provided. diff --git a/source/_components/notify.group.markdown b/source/_components/notify.group.markdown index 69c3ab8088d..01ef1d7dc8b 100644 --- a/source/_components/notify.group.markdown +++ b/source/_components/notify.group.markdown @@ -19,13 +19,13 @@ To use this notification platform in your installation, add the following to you ```yaml # Example configuration.yaml entry notify: - name: MyDevices - platform: group - services: - - service: html5 - data: - target: "macbook" - - service: html5_nexus + - name: NOTIFIER_NAME + platform: group + services: + - service: html5 + data: + target: "macbook" + - service: html5_nexus ``` Configuration variables: diff --git a/source/_components/notify.html5.markdown b/source/_components/notify.html5.markdown index b3af87aa698..4053acc1549 100644 --- a/source/_components/notify.html5.markdown +++ b/source/_components/notify.html5.markdown @@ -20,10 +20,10 @@ To enable this platform, add the following lines to your `configuration.yaml` fi ```yaml # Example configuration.yaml entry notify: - name: HTML5 - platform: html5 - gcm_api_key: 'gcm-sender-key' - gcm_sender_id: 'gcm-sender-id' + - name: NOTIFIER_NAME + platform: html5 + gcm_api_key: 'gcm-sender-key' + gcm_sender_id: 'gcm-sender-id' ``` Configuration variables: diff --git a/source/_components/notify.instapush.markdown b/source/_components/notify.instapush.markdown index fb027e59e0a..427991e60dc 100644 --- a/source/_components/notify.instapush.markdown +++ b/source/_components/notify.instapush.markdown @@ -22,12 +22,12 @@ To add Instapush to your installation, add the following to your `configuration. ```yaml # Example configuration.yaml entry notify: - name: NOTIFIER_NAME - platform: instapush - api_key: ABCDEFGHJKLMNOPQRSTUVXYZ - app_secret: ABCDEFGHJKLMNOPQRSTUVXYZ - event: ABCDEFGHJKLMNOPQRSTUVXYZ - tracker: ABCDEFGHJKLMNOPQRSTUVXYZ + - name: NOTIFIER_NAME + platform: instapush + api_key: ABCDEFGHJKLMNOPQRSTUVXYZ + app_secret: ABCDEFGHJKLMNOPQRSTUVXYZ + event: ABCDEFGHJKLMNOPQRSTUVXYZ + tracker: ABCDEFGHJKLMNOPQRSTUVXYZ ``` Configuration variables: @@ -35,7 +35,7 @@ Configuration variables: - **name** (*Optional*): Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`. - **api_key** (*Required*): Your API key for Instapush. - **app_secret** (*Required*): The secret for your created application. -- **event** (*Required*): The event +- **event** (*Required*): The event to push to. - **tracker** (*Required*): The name of tracker inside Instapush. To retrieve the needed values for existing settings, log into your account at [https://instapush.im](https://instapush.im) and go to your **Dashboard**. Then click the **APPS** tab, choose an app, and check the **Basic Info** section. The *Application ID* is the `api_key` and `app_secret` is the *Application Secret*. diff --git a/source/_components/notify.kodi.markdown b/source/_components/notify.kodi.markdown index a803d35aa2c..a5ba6e0bacc 100644 --- a/source/_components/notify.kodi.markdown +++ b/source/_components/notify.kodi.markdown @@ -15,31 +15,25 @@ ha_release: 0.29 The `Kodi` platform allows you so send messages to your [Kodi](https://kodi.tv/) multimedia system from Home Assistant. -To add Kodi to your installation, add the following to your configuration.yaml file: +To add Kodi to your installation, add the following to your `configuration.yaml` file: -### {% linkable_title Configuration %} ```yaml # Example configuration.yaml entry notify: - platform: kodi - name: NOTIFIER_NAME - host: http://192.168.0.123 - port: 8080 - username: USERNAME - password: PASSWORD + - name: NOTIFIER_NAME + platform: kodi + host: http://192.168.0.123 ``` - **name** (*Optional*): Name displayed in the frontend. The notifier will bind to the service `notify.NOTIFIER_NAME`. - **host** (*Required*): The host name or address of the device that is running Kodi. -- **port** (*optional*): The port number, the default value is `8080`. +- **port** (*Optional*): The port number, the default value is `8080`. - **username** (*Optional*): The XBMC/Kodi HTTP username. - **password** (*Optional*): The XBMC/Kodi HTTP password. ### {% linkable_title script.yaml example %} + ```yaml -################################################################ -## Script / Notify KODI -################################################################ kodi_notification: sequence: - service: notify.NOTIFIER_NAME @@ -50,7 +44,9 @@ kodi_notification: displaytime: 20000 icon: "warning" ``` -#### message variables: + +#### {% linkable_title Message variables %} + - **title** (*Optional*): Title that is displayed on the message. - **message** (*Required*): Message to be displayed. - **data** (*Optional*) diff --git a/source/_components/notify.llamalab_automate.markdown b/source/_components/notify.llamalab_automate.markdown index d875142005f..3b5d5d2dd5a 100644 --- a/source/_components/notify.llamalab_automate.markdown +++ b/source/_components/notify.llamalab_automate.markdown @@ -22,10 +22,10 @@ To add Automate to your installation, add the following to your `configuration.y ```yaml # Example configuration.yaml entry notify: - name: NOTIFIER_NAME - platform: llamalab_automate - api_key: ABCDEFGHJKLMNOPQRSTUVXYZ - to: example@gmail.com + - name: NOTIFIER_NAME + platform: llamalab_automate + api_key: ABCDEFGHJKLMNOPQRSTUVXYZ + to: example@gmail.com ``` Configuration variables: diff --git a/source/_components/notify.markdown b/source/_components/notify.markdown index 378e3e75945..6279291a69a 100644 --- a/source/_components/notify.markdown +++ b/source/_components/notify.markdown @@ -16,11 +16,9 @@ The `notify` component makes it possible to send notifications to a wide variety ```yaml # Example configuration.yaml entry notify: - platform: pushbullet - # Optional name for the notify service - name: paulus - # api_key is a required config key by the pushbullet platform - api_key: ABCDEFG + - platform: pushbullet + name: paulus + api_key: ABCDEFG ``` The **name** parameter is optional but needed if you want to use multiple platforms. The platform will be exposed as service `notify/`. The name will default to `notify` if not supplied. @@ -82,5 +80,3 @@ If the service support sending the location, the data from this sample can be us } ``` - - diff --git a/source/_components/notify.message_bird.markdown b/source/_components/notify.message_bird.markdown index 3a48b2d9f04..d8baf5fa0d7 100644 --- a/source/_components/notify.message_bird.markdown +++ b/source/_components/notify.message_bird.markdown @@ -19,10 +19,9 @@ To enable MessageBird notifications in your installation, add the following to y ```yaml # Example configuration.yaml entry notify: - platform: message_bird - api_key: YOUR_API_KEY - name: NOTIFIER_NAME - sender: SENDER_NAME + - name: NOTIFIER_NAME + platform: message_bird + api_key: YOUR_API_KEY ``` Configuration variables: diff --git a/source/_components/notify.nma.markdown b/source/_components/notify.nma.markdown index 1d42cd28b2f..c16a7ae04e4 100644 --- a/source/_components/notify.nma.markdown +++ b/source/_components/notify.nma.markdown @@ -22,9 +22,9 @@ To add NMA to your installation, add the following to your `configuration.yaml` ```yaml # Example configuration.yaml entry notify: - name: NOTIFIER_NAME - platform: nma - api_key: ABCDEFGHJKLMNOPQRSTUVXYZ + - name: NOTIFIER_NAME + platform: nma + api_key: ABCDEFGHJKLMNOPQRSTUVXYZ ``` Configuration variables: diff --git a/source/_components/notify.pushbullet.markdown b/source/_components/notify.pushbullet.markdown index 1d58f8bf193..0736697f323 100644 --- a/source/_components/notify.pushbullet.markdown +++ b/source/_components/notify.pushbullet.markdown @@ -19,9 +19,9 @@ To enable Pushbullet notifications in your installation, add the following to yo ```yaml # Example configuration.yaml entry notify: - platform: pushbullet - api_key: YOUR_API_KEY - name: NOTIFIER_NAME + - name: NOTIFIER_NAME + platform: pushbullet + api_key: YOUR_API_KEY ``` Configuration variables: diff --git a/source/_components/notify.pushetta.markdown b/source/_components/notify.pushetta.markdown index 8b3a68c818a..34b1adcc1ab 100644 --- a/source/_components/notify.pushetta.markdown +++ b/source/_components/notify.pushetta.markdown @@ -22,10 +22,10 @@ To enable Pushetta notifications in your installation, add the following to your ```yaml # Example configuration.yaml entry notify: - name: NOTIFIER_NAME - platform: pushetta - api_key: YOUR_API_KEY - channel_name: YOUR_CHANNEL_NAME + - name: NOTIFIER_NAME + platform: pushetta + api_key: YOUR_API_KEY + channel_name: YOUR_CHANNEL_NAME ``` Configuration variables: diff --git a/source/_components/notify.pushover.markdown b/source/_components/notify.pushover.markdown index 20a7ca49131..4712c6acd7f 100644 --- a/source/_components/notify.pushover.markdown +++ b/source/_components/notify.pushover.markdown @@ -22,10 +22,10 @@ To use Pushover notifications, add the following to your `configuration.yaml` fi ```yaml # Example configuration.yaml entry notify: - name: NOTIFIER_NAME - platform: pushover - api_key: ABCDEFGHJKLMNOPQRSTUVXYZ - user_key: ABCDEFGHJKLMNOPQRSTUVXYZ + - name: NOTIFIER_NAME + platform: pushover + api_key: ABCDEFGHJKLMNOPQRSTUVXYZ + user_key: ABCDEFGHJKLMNOPQRSTUVXYZ ``` Configuration variables: diff --git a/source/_components/notify.rest.markdown b/source/_components/notify.rest.markdown index 253b78096d6..f0fa96ec6b4 100644 --- a/source/_components/notify.rest.markdown +++ b/source/_components/notify.rest.markdown @@ -19,13 +19,9 @@ To enable the REST notification in your installation, add the following to your ```yaml # Example configuration.yaml entry notify: - name: NOTIFIER_NAME - platform: rest - resource: http://IP_ADDRESS/ENDPOINT - method: GET - message_param_name: MESSAGE_PARAMETER_NAME - title_param_name: TITLE_PARAMETER_NAME - target_param_name: TARGET_PARAMETER_NAME + - name: NOTIFIER_NAME + platform: rest + resource: http://IP_ADDRESS/ENDPOINT ``` Configuration variables: diff --git a/source/_components/notify.sendgrid.markdown b/source/_components/notify.sendgrid.markdown index 1ba53da012a..16bf7e992a1 100644 --- a/source/_components/notify.sendgrid.markdown +++ b/source/_components/notify.sendgrid.markdown @@ -18,11 +18,11 @@ To enable notification emails via SendGrid in your installation, add the followi ```yaml # Example configuration.yaml entry notify: - name: NOTIFIER_NAME - platform: sendgrid - api_key: API_KEY - sender: SENDER_EMAIL_ADDRESS - recipient: YOUR_RECIPIENT + - name: NOTIFIER_NAME + platform: sendgrid + api_key: API_KEY + sender: SENDER_EMAIL_ADDRESS + recipient: YOUR_RECIPIENT ``` Configuration variables: diff --git a/source/_components/notify.slack.markdown b/source/_components/notify.slack.markdown index ca7861883cf..040e070dcd9 100644 --- a/source/_components/notify.slack.markdown +++ b/source/_components/notify.slack.markdown @@ -26,12 +26,10 @@ To enable the slack notification in your installation, add the following to your ```yaml # Example configuration.yaml entry notify: - name: NOTIFIER_NAME - platform: slack - api_key: ABCDEFGHJKLMNOPQRSTUVXYZ - default_channel: '#general' - icon: ':robot_face:' - username: 'Home-Assistant' + - name: NOTIFIER_NAME + platform: slack + api_key: ABCDEFGHJKLMNOPQRSTUVXYZ + default_channel: '#general' ``` Configuration variables: diff --git a/source/_components/notify.smtp.markdown b/source/_components/notify.smtp.markdown index d47604532ee..bd6d47cdb46 100644 --- a/source/_components/notify.smtp.markdown +++ b/source/_components/notify.smtp.markdown @@ -20,22 +20,17 @@ To enable notification by e-mail in your installation, add the following to your ```yaml # Example configuration.yaml entry notify: - name: NOTIFIER_NAME - platform: smtp - server: MAIL_SERVER - port: YOUR_SMTP_PORT - sender: SENDER_EMAIL_ADDRESS - starttls: true or false - username: YOUR_SMTP_USERNAME - password: YOUR_SMTP_PASSWORD - recipient: YOUR_RECIPIENT + - name: NOTIFIER_NAME + platform: smtp + server: MAIL_SERVER + recipient: YOUR_RECIPIENT ``` Configuration variables: - **name** (*Optional*): Setting the optional parameter `name` allows multiple notifiers to be created. The default value is `notify`. The notifier will bind to the service `notify.NOTIFIER_NAME`. -- **server** (*Optional*): SMTP server which is used to end the notifications. For Google Mail, eg. smtp.gmail.com. Keep in mind that Google has some extra layers of protection which need special attention (Hint: 'Less secure apps'). Defaults to `localhost`. -- **port** (*Optional*): The port that the SMTP server is using, eg. 587 for Google Mail and STARTTLS or 465/993 depending on your SMTP servers. Defaults to 25. +- **server** (*Optional*): SMTP server which is used to end the notifications. Defaults to `localhost`. +- **port** (*Optional*): The port that the SMTP server is using. Defaults to 25. - **sender** (*Optional*): E-mail address of the sender. - **username** (*Optional*): Username for the SMTP account. - **password** (*Optional*): Password for the SMTP server that belongs to the given username. If the password contains a colon it need to be wrapped in apostrophes. @@ -43,6 +38,24 @@ Configuration variables: - **starttls** (*Optional*): Enables STARTTLS, eg. True or False. Defaults to False. - **debug** (*Optional*): Enables Debug, eg. True or False. Defaults to False. +A sample configuration entry for Google Mail. + +```yaml +# Example configuration.yaml entry +notify: + - name: NOTIFIER_NAME + platform: smtp + server: smtp.gmail.com + port: 587 + sender: john@gmail.com + starttls: true + username: john@gmail.com + password: thePassword + recipient: james@gmail.com +``` + +Keep in mind that Google has some extra layers of protection which need special attention (Hint: 'Less secure apps'). + To use the SMTP notification, refer to it in an automation or script like in this example: ```yaml diff --git a/source/_components/notify.syslog.markdown b/source/_components/notify.syslog.markdown index 89f7f3b2246..0869e16039b 100644 --- a/source/_components/notify.syslog.markdown +++ b/source/_components/notify.syslog.markdown @@ -19,11 +19,8 @@ To enable syslog notifications in your installation, add the following to your ` ```yaml # Example configuration.yaml entry notify: - name: NOTIFIER_NAME - platform: syslog - facility: SYSLOG_FACILITY - option: SYSLOG_LOG_OPTION - priority: SYSLOG_PRIORITY + - name: NOTIFIER_NAME + platform: syslog ``` Configuration variables: diff --git a/source/_components/notify.telegram.markdown b/source/_components/notify.telegram.markdown index 4044f9ff3f1..12de007003e 100644 --- a/source/_components/notify.telegram.markdown +++ b/source/_components/notify.telegram.markdown @@ -44,10 +44,10 @@ To enable Telegram notifications in your installation, add the following to your ```yaml # Example configuration.yaml entry notify: - name: NOTIFIER_NAME - platform: telegram - api_key: ABCDEFGHJKLMNOPQRSTUVXYZ - chat_id: YOUR_CHAT_ID + - name: NOTIFIER_NAME + platform: telegram + api_key: ABCDEFGHJKLMNOPQRSTUVXYZ + chat_id: YOUR_CHAT_ID ``` Configuration variables: diff --git a/source/_components/notify.twilio_sms.markdown b/source/_components/notify.twilio_sms.markdown index f8865443eea..6931d2507eb 100644 --- a/source/_components/notify.twilio_sms.markdown +++ b/source/_components/notify.twilio_sms.markdown @@ -19,11 +19,11 @@ To use this notification platform in your installation, add the following to you ```yaml # Example configuration.yaml entry notify: - platform: twilio_sms - name: NOTIFIER_NAME - account_sid: ACCOUNT_SID_FROM_TWILIO - auth_token: AUTH_TOKEN_FROM_TWILIO - from_number: E164_PHONE_NUMBER + - name: NOTIFIER_NAME + platform: twilio_sms + account_sid: ACCOUNT_SID_FROM_TWILIO + auth_token: AUTH_TOKEN_FROM_TWILIO + from_number: E164_PHONE_NUMBER ``` Configuration variables: diff --git a/source/_components/notify.twitter.markdown b/source/_components/notify.twitter.markdown index c8f22d3ffc3..8948669bfab 100644 --- a/source/_components/notify.twitter.markdown +++ b/source/_components/notify.twitter.markdown @@ -22,12 +22,12 @@ To add Twitter to your installation, add the following to your `configuration.ya ```yaml # Example configuration.yaml entry notify: - name: NOTIFIER_NAME - platform: twitter - consumer_key: ABCDEFGHJKLMNOPQRSTUVXYZ - consumer_secret: ABCDEFGHJKLMNOPQRSTUVXYZ - access_token: ABCDEFGHJKLMNOPQRSTUVXYZ - access_token_secret: ABCDEFGHJKLMNOPQRSTUVXYZ + - name: NOTIFIER_NAME + platform: twitter + consumer_key: ABCDEFGHJKLMNOPQRSTUVXYZ + consumer_secret: ABCDEFGHJKLMNOPQRSTUVXYZ + access_token: ABCDEFGHJKLMNOPQRSTUVXYZ + access_token_secret: ABCDEFGHJKLMNOPQRSTUVXYZ ``` Configuration variables: diff --git a/source/_components/notify.webostv.markdown b/source/_components/notify.webostv.markdown index f69708da52e..3c7a6113d20 100644 --- a/source/_components/notify.webostv.markdown +++ b/source/_components/notify.webostv.markdown @@ -9,7 +9,7 @@ sharing: true footer: true logo: webos.png ha_category: Notifications -ha_iot_class: "Local Poll" +ha_iot_class: "Local Polling" ha_release: 0.18 --- @@ -22,15 +22,15 @@ To add a TV to your installation, add the following to your `configuration.yaml` ```yaml # Example configuration.yaml entry notify: - platform: webostv - host: 192.168.0.112 - name: livingroom_tv + - platform: webostv + host: 192.168.0.112 + name: livingroom_tv ``` Configuration variables: -- **host** *Required*: The IP of the LG WebOS Smart TV, e.g. 192.168.0.10 -- **name** *Required*: The name you would like to give to the LG WebOS Smart TV. +- **host** (*Required*): The IP of the LG WebOS Smart TV, e.g. 192.168.0.10 +- **name** (*Required*): The name you would like to give to the LG WebOS Smart TV. A possible automation could be: diff --git a/source/_components/notify.xmpp.markdown b/source/_components/notify.xmpp.markdown index 8d09f3e4b0f..6ebdc4383bd 100644 --- a/source/_components/notify.xmpp.markdown +++ b/source/_components/notify.xmpp.markdown @@ -18,12 +18,11 @@ The `xmpp` platform allows you to deliver notifications from Home Assistant to a ```yaml # Example configuration.yaml entry notify: - name: NOTIFIER_NAME - platform: xmpp - sender: YOUR_JID - password: YOUR_JABBER_ACCOUNT_PASSWORD - recipient: YOUR_RECIPIENT - tls: False + - name: NOTIFIER_NAME + platform: xmpp + sender: YOUR_JID + password: YOUR_JABBER_ACCOUNT_PASSWORD + recipient: YOUR_RECIPIENT ``` Configuration variables: @@ -32,9 +31,8 @@ Configuration variables: - **sender** (*Required*): The Jabber ID (JID) that will act as origin of the messages. Add your JID including the domain, eg. your_name@jabber.org. - **password** (*Required*): The password for your given Jabber account. - **recipient** (*Required*): The Jabber ID (JID) that will receive the messages. -- **tls** (*Optional*): Allow to disable TLS. Defaults to true. +- **tls** (*Optional*): Allow to disable TLS. Defaults to `true`. All Jabber IDs (JID) must include the domain. Make sure that the password matches the account provided as sender. - To use notifications, please see the [getting started with automation page](/getting-started/automation/). From 1ee63170cff6f8c0e0bd8bc7ff41de6df8070c5f Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 2 Oct 2016 17:13:11 +0200 Subject: [PATCH 25/70] Minimizing of the configuration sample (#1035) --- source/_components/group.markdown | 9 ++++----- source/_components/scene.markdown | 6 +++++- source/_components/zone.markdown | 2 +- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/source/_components/group.markdown b/source/_components/group.markdown index 86ee16d6693..6bd24c8572c 100644 --- a/source/_components/group.markdown +++ b/source/_components/group.markdown @@ -25,7 +25,6 @@ group: entities: - group.awesome_people - group.climate - kitchen: name: Kitchen entities: @@ -55,7 +54,7 @@ Example of groups shown as views in the frontend. If all entities in a group are switches or lights then Home Assistant adds a switch at the top of the card that turns them all on/off at once. -You can create views (tabs) that contain other groups. +You can create views (tabs) that contain other groups. Notice in the example below that in order to refer to the group "Living Room", you use `group.living_room` (lowercase and spaces replaced with underscores). ```yaml @@ -68,9 +67,9 @@ Notice in the example below that in order to refer to the group "Living Room", y Bedroom: light.light_bedroom, switch.sleeping Rooms: - view: yes + view: yes name: Rooms entities: - - group.living_room - - group.bedroom + - group.living_room + - group.bedroom ``` diff --git a/source/_components/scene.markdown b/source/_components/scene.markdown index 296275b6fc4..a433c38ad83 100644 --- a/source/_components/scene.markdown +++ b/source/_components/scene.markdown @@ -23,7 +23,6 @@ scene: state: on xy_color: [0.33, 0.66] brightness: 200 - - name: Movies entities: light.tv_back_light: @@ -32,6 +31,11 @@ scene: light.ceiling: off ``` +Configuration variables: + +- **name** (*Required*): Friendly name of scene. +- **entities** (*Required*): Entities to control. + Scenes can be activated using the service `scene.turn_on` (there is no 'scene.turn_off' service). ```yaml diff --git a/source/_components/zone.markdown b/source/_components/zone.markdown index db1de8acfe7..066f45b4f8a 100644 --- a/source/_components/zone.markdown +++ b/source/_components/zone.markdown @@ -45,7 +45,7 @@ Configuration variables: - **longitude** (*Required*): Longitude of the center point of the zone. - **radius** (*Optional*): Optional radius in meters. Defaults to 100 meters. - **icon** (*Optional*): Optional icon to show instead of name. -- **passive** (*Optional*): Optional boolean to only use the zone for automation and hide it from the UI and not use the zone for device tracker name. Defaults to false. +- **passive** (*Optional*): Optional boolean to only use the zone for automation and hide it from the UI and not use the zone for device tracker name. Defaults to false. #### {% linkable_title Home zone %} From be80d1bb7bfca14695248e87193e1bb4745bd9a7 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 2 Oct 2016 17:13:58 +0200 Subject: [PATCH 26/70] Minimizing of the configuration sample (#1040) --- .../device_tracker.actiontec.markdown | 12 ++++----- .../_components/device_tracker.aruba.markdown | 14 +++++----- .../device_tracker.asuswrt.markdown | 15 +++++------ .../device_tracker.automatic.markdown | 18 ++++++------- ...vice_tracker.bluetooth_le_tracker.markdown | 7 ++--- .../device_tracker.bluetooth_tracker.markdown | 10 +++---- .../device_tracker.bt_home_hub_5.markdown | 7 ++--- .../_components/device_tracker.ddwrt.markdown | 12 ++++----- .../_components/device_tracker.fritz.markdown | 9 +++---- .../device_tracker.icloud.markdown | 6 ++--- .../device_tracker.locative.markdown | 2 +- .../_components/device_tracker.luci.markdown | 15 ++++++----- source/_components/device_tracker.markdown | 21 ++++++++++++--- .../_components/device_tracker.mqtt.markdown | 9 +++---- .../device_tracker.netgear.markdown | 13 +++++----- .../device_tracker.nmap_tracker.markdown | 26 +++++++++++++------ .../device_tracker.owntracks.markdown | 20 +++++++++----- .../_components/device_tracker.snmp.markdown | 9 ++++--- .../device_tracker.thomson.markdown | 8 +++--- .../device_tracker.tomato.markdown | 13 +++++----- .../device_tracker.tplink.markdown | 10 +++---- .../_components/device_tracker.ubus.markdown | 8 +++--- .../_components/device_tracker.unifi.markdown | 17 +++++------- 23 files changed, 151 insertions(+), 130 deletions(-) diff --git a/source/_components/device_tracker.actiontec.markdown b/source/_components/device_tracker.actiontec.markdown index 774b7ec2823..b2923535855 100644 --- a/source/_components/device_tracker.actiontec.markdown +++ b/source/_components/device_tracker.actiontec.markdown @@ -27,16 +27,16 @@ To use this device tracker in your installation, add the following to your `conf ```yaml # Example configuration.yaml entry device_tracker: - platform: actiontec - host: YOUR_ROUTER_IP - username: YOUR_ADMIN_USERNAME - password: YOUR_ADMIN_PASSWORD + - platform: actiontec + host: YOUR_ROUTER_IP + username: YOUR_ADMIN_USERNAME + password: YOUR_ADMIN_PASSWORD ``` Configuration variables: -- **host** (*Required*): The IP address of your router, eg. 192.168.1.1. -- **username** (*Required*: The username of an user with administrative privileges, usually *admin*. +- **host** (*Required*): The IP address of your router, eg. `192.168.1.1`. +- **username** (*Required*: The username of an user with administrative privileges, usually `admin`. - **password** (*Required*): The password for your given admin account. See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. diff --git a/source/_components/device_tracker.aruba.markdown b/source/_components/device_tracker.aruba.markdown index 1834d591db4..0dd61025558 100644 --- a/source/_components/device_tracker.aruba.markdown +++ b/source/_components/device_tracker.aruba.markdown @@ -28,17 +28,17 @@ To use this device tracker in your installation, add the following to your `conf ```yaml # Example configuration.yaml entry device_tracker: - platform: aruba - host: YOUR_ROUTER_IP - username: YOUR_ADMIN_USERNAME - password: YOUR_ADMIN_PASSWORD + - platform: aruba + host: YOUR_ROUTER_IP + username: YOUR_ADMIN_USERNAME + password: YOUR_ADMIN_PASSWORD ``` Configuration variables: -- **host** *Required*: The IP address of your router, e.g. 192.168.1.1. -- **username** *Required*: The username of an user with administrative privileges, usually *admin*. -- **password** *Required*: The password for your given admin account. +- **host** (*Required*): The IP address of your router, e.g. `192.168.1.1`. +- **username** (*Required*): The username of an user with administrative privileges, usually `admin`. +- **password** (*Required*): The password for your given admin account. See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. diff --git a/source/_components/device_tracker.asuswrt.markdown b/source/_components/device_tracker.asuswrt.markdown index dff7ff57987..fa98a249594 100644 --- a/source/_components/device_tracker.asuswrt.markdown +++ b/source/_components/device_tracker.asuswrt.markdown @@ -20,21 +20,18 @@ To use an ASUSWRT router in your installation, add the following to your `config ```yaml # Example configuration.yaml entry device_tracker: - platform: asuswrt - host: YOUR_ROUTER_IP - protocol: telnet - mode: router - username: YOUR_ADMIN_USERNAME - password: YOUR_ADMIN_PASSWORD + - platform: asuswrt + host: YOUR_ROUTER_IP + username: YOUR_ADMIN_USERNAME ``` Configuration variables: -- **host** (*Required*): The IP address of your router, eg. 192.168.1.1. +- **host** (*Required*): The IP address of your router, eg. `192.168.1.1`. +- **username** (*Required*: The username of an user with administrative privileges, usually `admin`. +- **password** (*Optional*): The password for your given admin account (use this if no SSH key is given). - **protocol** (*Optional*): The protocol (`ssh` or `telnet`) to use. Defaults to `ssh`. - **mode** (*Optional*): The operating mode of the router (`router` or `ap`). Defaults to `router`. -- **username** (*Required*: The username of an user with administrative privileges, usually *admin*. -- **password** (*Optional*): The password for your given admin account (use this if no SSH key is given). - **ssh_key** (*Optional*): The path to your SSH private key file associated with your given admin account (instead of password).

diff --git a/source/_components/device_tracker.automatic.markdown b/source/_components/device_tracker.automatic.markdown index 9d38582459d..638dc63c52b 100644 --- a/source/_components/device_tracker.automatic.markdown +++ b/source/_components/device_tracker.automatic.markdown @@ -20,20 +20,20 @@ To use an Automatic ODB reader in your installation, add the following to your ` ```yaml # Example configuration.yaml entry device_tracker: - platform: automatic - client_id: 1234567 - secret: 0987654321 - username: your@email.com - password: your_password - devices: - - 2007 Honda Element - - 2004 Subaru Impreza + - platform: automatic + client_id: 1234567 + secret: 0987654321 + username: your@email.com + password: your_password + devices: + - 2007 Honda Element + - 2004 Subaru Impreza ``` Configuration variables: - **client_id** (*Required*): The OAuth client id (get from https://developer.automatic.com/). -- **secret** (*Require*): The OAuth client secret (get from https://developer.automatic.com/). +- **secret** (*Required*): The OAuth client secret (get from https://developer.automatic.com/). - **username** (*Required*): The username associated with your ODB reader. - **password** (*Required*): The password for your given ODB reader account. - **devices** (*Optional*): The list of vehicle display names you wish to track. If not provided, all vehicles will be tracked. diff --git a/source/_components/device_tracker.bluetooth_le_tracker.markdown b/source/_components/device_tracker.bluetooth_le_tracker.markdown index 335a38bfb77..bf32000dc5e 100644 --- a/source/_components/device_tracker.bluetooth_le_tracker.markdown +++ b/source/_components/device_tracker.bluetooth_le_tracker.markdown @@ -23,8 +23,9 @@ Requires PyBluez. If you are on Raspbian, make sure you first install `bluetooth To use the Bluetooth tracker in your installation, add the following to your `configuration.yaml` file: ```yaml +# Example configuration.yaml entry device_tracker: - platform: bluetooth_le_tracker + - platform: bluetooth_le_tracker ``` As some BT LE devices change their MAC address regularly, a new device is only discovered when it has been seen 5 times. @@ -35,8 +36,8 @@ BTLE tracking requires root privileges. For running Home Assistant as non root user we can give python3 the missing capabilities to access the bluetooth stack. Quite like setting the setuid bit (see [Stack Exchange](http://unix.stackexchange.com/questions/96106/bluetooth-le-scan-as-non-root) for more information). ```bash -sudo apt-get install libcap2-bin -sudo setcap 'cap_net_raw,cap_net_admin+eip' `readlink -f \`which python3\`` +$ sudo apt-get install libcap2-bin +$ sudo setcap 'cap_net_raw,cap_net_admin+eip' `readlink -f \`which python3\`` ``` A restart of Home Assistant is required. diff --git a/source/_components/device_tracker.bluetooth_tracker.markdown b/source/_components/device_tracker.bluetooth_tracker.markdown index ff4e0e67e6e..807e8e35fb7 100644 --- a/source/_components/device_tracker.bluetooth_tracker.markdown +++ b/source/_components/device_tracker.bluetooth_tracker.markdown @@ -9,20 +9,20 @@ sharing: true footer: true logo: bluetooth.png ha_category: Presence Detection -ha_iot_class: "Local Poll" +ha_iot_class: "Local Polling" ha_release: 0.18 --- -This tracker discovers new devices on boot and tracks bluetooth devices periodically based on interval_seconds value. It is not required to pair the devices with each other! -Devices discovered are stored with 'bt_' as the prefix for device mac addresses in `known_devices.yaml`. +This tracker discovers new devices on boot and tracks bluetooth devices periodically based on interval_seconds value. It is not required to pair the devices with each other! Devices discovered are stored with 'bt_' as the prefix for device mac addresses in `known_devices.yaml`. To use the Bluetooth tracker in your installation, add the following to your `configuration.yaml` file: ```yaml +# Example configuration.yaml entry device_tracker: - platform: bluetooth_tracker + - platform: bluetooth_tracker ``` -In some cases it can be that your device is not discovered. In that case let your phone scan for BT devices while you restart HA. Just hit Scan on your phone all the time until HA is fully restarted and the device should appear in `known_devices.yaml`. +In some cases it can be that your device is not discovered. In that case let your phone scan for BT devices while you restart Home Assistant. Just hit `Scan` on your phone all the time until Home Assisstant is fully restarted and the device should appear in `known_devices.yaml`. For additional configuration variables check the [Device tracker page](/components/device_tracker/). diff --git a/source/_components/device_tracker.bt_home_hub_5.markdown b/source/_components/device_tracker.bt_home_hub_5.markdown index 3318cdc65ee..9fd185eadd8 100644 --- a/source/_components/device_tracker.bt_home_hub_5.markdown +++ b/source/_components/device_tracker.bt_home_hub_5.markdown @@ -19,11 +19,8 @@ To use a BT Home Hub 5 router in your installation, add the following to your `c ```yaml # Example configuration.yaml entry device_tracker: - platform: bt_home_hub_5 - host: 192.168.1.254 - interval_seconds: 10 - consider_home: 180 - track_new_devices: yes + - platform: bt_home_hub_5 + host: 192.168.1.254 ``` Configuration variables: diff --git a/source/_components/device_tracker.ddwrt.markdown b/source/_components/device_tracker.ddwrt.markdown index 311324a6300..7cb07f3ba6b 100644 --- a/source/_components/device_tracker.ddwrt.markdown +++ b/source/_components/device_tracker.ddwrt.markdown @@ -19,16 +19,16 @@ To use a DD-WRT router in your installation, add the following to your `configur ```yaml # Example configuration.yaml entry device_tracker: - platform: ddwrt - host: ROUTER_IP_ADDRESS - username: YOUR_ADMIN_USERNAME - password: YOUR_ADMIN_PASSWORD + - platform: ddwrt + host: ROUTER_IP_ADDRESS + username: YOUR_ADMIN_USERNAME + password: YOUR_ADMIN_PASSWORD ``` Configuration variables: -- **host** (*Required*): The IP address of your router, e.g. 192.168.1.1. -- **username** (*Required*: The username of an user with administrative privileges, usually *admin*. +- **host** (*Required*): The IP address of your router, e.g. `192.168.1.1`. +- **username** (*Required*: The username of an user with administrative privileges, usually `admin`. - **password** (*Required*): The password for your given admin account. See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. diff --git a/source/_components/device_tracker.fritz.markdown b/source/_components/device_tracker.fritz.markdown index 3d35a033274..fa7ae119426 100644 --- a/source/_components/device_tracker.fritz.markdown +++ b/source/_components/device_tracker.fritz.markdown @@ -24,16 +24,13 @@ To use an Fritz!Box router in your installation, add the following to your `conf ```yaml # Example configuration.yaml entry device_tracker: - platform: fritz - host: YOUR_ROUTER_IP - username: YOUR_ADMIN_USERNAME - password: YOUR_ADMIN_PASSWORD + - platform: fritz ``` Configuration variables: -- **host** (*Optional*): The IP address of your router, eg. 192.168.1.1. It is optional since every fritzbox is also reachable by using the IP address 169.254.1.1. -- **username** (*Optional*: The username of an user with administrative privileges, usually *admin*. +- **host** (*Optional*): The IP address of your router, eg. `192.168.1.1`. It is optional since every fritzbox is also reachable by using the IP address 169.254.1.1. +- **username** (*Optional*: The username of an user with administrative privileges, usually `admin`. - **password** (*Optional*): The password for your given admin account.

diff --git a/source/_components/device_tracker.icloud.markdown b/source/_components/device_tracker.icloud.markdown index 220eda5d01e..4c19a009cc4 100644 --- a/source/_components/device_tracker.icloud.markdown +++ b/source/_components/device_tracker.icloud.markdown @@ -22,9 +22,9 @@ To integrate iCloud in Home Assistant, add the following section to your `config ```yaml # Example configuration.yaml entry device_tracker: - platform: icloud - username: USERNAME - password: PASSWORD + - platform: icloud + username: USERNAME + password: PASSWORD ``` Configuration variables: diff --git a/source/_components/device_tracker.locative.markdown b/source/_components/device_tracker.locative.markdown index 9e4f6b7b0af..2379db6bfb9 100644 --- a/source/_components/device_tracker.locative.markdown +++ b/source/_components/device_tracker.locative.markdown @@ -18,7 +18,7 @@ To integrate Locative in Home Assistant, add the following section to your `conf ```yaml # Example configuration.yaml entry device_tracker: - platform: locative + - platform: locative ``` Install on your smartphone: diff --git a/source/_components/device_tracker.luci.markdown b/source/_components/device_tracker.luci.markdown index 81e60df206c..937193752e5 100644 --- a/source/_components/device_tracker.luci.markdown +++ b/source/_components/device_tracker.luci.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: openwrt.png ha_category: Presence Detection +ha_release: pre 0.7 --- _This is one of the two ways we support OpenWRT. If you encounter problems, try [ubus](/components/device_tracker.ubus/)._ @@ -18,7 +19,7 @@ This is a presence detection scanner for OpenWRT using [luci](http://wiki.openwr Before this scanner can be used you have to install the luci RPC package on OpenWRT: ```bash -opkg install luci-mod-rpc +# opkg install luci-mod-rpc ``` To use this device tracker in your installation, add the following to your `configuration.yaml` file: @@ -26,16 +27,16 @@ To use this device tracker in your installation, add the following to your `conf ```yaml # Example configuration.yaml entry device_tracker: - platform: luci - host: ROUTER_IP_ADDRESS - username: YOUR_ADMIN_USERNAME - password: YOUR_ADMIN_PASSWORD + - platform: luci + host: ROUTER_IP_ADDRESS + username: YOUR_ADMIN_USERNAME + password: YOUR_ADMIN_PASSWORD ``` Configuration variables: -- **host** (*Required*): The IP address of your router, e.g. 192.168.1.1. -- **username** (*Required*): The username of an user with administrative privileges, usually *admin*. +- **host** (*Required*): The IP address of your router, e.g. `192.168.1.1`. +- **username** (*Required*): The username of an user with administrative privileges, usually `admin`. - **password** (*Required*): The password for your given admin account. See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. diff --git a/source/_components/device_tracker.markdown b/source/_components/device_tracker.markdown index 505018e1f4a..b1b0950313f 100644 --- a/source/_components/device_tracker.markdown +++ b/source/_components/device_tracker.markdown @@ -20,10 +20,10 @@ To get started add the following lines to your `configuration.yaml` (example for ```yaml # Example configuration.yaml entry for Netgear device device_tracker: - platform: netgear - host: 192.168.1.1 - username: admin - password: YOUR_PASSWORD + - platform: netgear + host: 192.168.1.1 + username: admin + password: YOUR_PASSWORD ``` The following optional parameters can be used with any platform. However device tracker will only look for global settings under the configuration of the first configured platform: @@ -34,6 +34,19 @@ The following optional parameters can be used with any platform. However device | `interval_seconds` | 12 | Seconds between each scan for new devices | | `consider_home` | 180 | Seconds to wait till marking someone as not home after not being seen. This parameter is most useful for households with Apple iOS devices that go into sleep mode while still at home to conserve battery life. iPhones will occasionally drop off the network and then re-appear. `consider_home` helps prevent false alarms in presence detection when using IP scanners such as Nmap. | +The extended example from above would look like the following sample: + +```yaml +# Example configuration.yaml entry for Netgear device +device_tracker: + - platform: netgear + host: 192.168.1.1 + username: admin + interval_seconds: 10 + consider_home: 180 + track_new_devices: yes +``` + Multiple device trackers can be used in parallel, such as [Owntracks](/components/device_tracker.owntracks/) and [Nmap](/components/device_tracker.nmap_scanner/). The state of the device will be determined by the source that reported last. # {% linkable_title `known_devices.yaml` %} diff --git a/source/_components/device_tracker.mqtt.markdown b/source/_components/device_tracker.mqtt.markdown index 2019f1ef573..b8c4518e04a 100644 --- a/source/_components/device_tracker.mqtt.markdown +++ b/source/_components/device_tracker.mqtt.markdown @@ -19,11 +19,10 @@ To use this device tracker in your installation, add the following to your `conf ```yaml # Example configuration.yaml entry device_tracker: - platform: mqtt - qos: 1 - devices: - paulus_oneplus: /location/paulus - annetherese_n4: /location/annetherese + - platform: mqtt + devices: + paulus_oneplus: /location/paulus + annetherese_n4: /location/annetherese ``` Configuration variables: diff --git a/source/_components/device_tracker.netgear.markdown b/source/_components/device_tracker.netgear.markdown index 005773f2186..780fc170d11 100644 --- a/source/_components/device_tracker.netgear.markdown +++ b/source/_components/device_tracker.netgear.markdown @@ -21,17 +21,16 @@ To use this device tracker in your installation, add the following to your `conf ```yaml # Example configuration.yaml entry device_tracker: - platform: netgear - host: YOUR_ROUTER_IP - username: YOUR_ADMIN_USERNAME - password: YOUR_ADMIN_PASSWORD - port: YOUR_ROUTER_PORT + - platform: netgear + host: YOUR_ROUTER_IP + username: YOUR_ADMIN_USERNAME + password: YOUR_ADMIN_PASSWORD ``` Configuration variables: -- **host** (*Required*): The IP address of your router, e.g. 192.168.1.1. -- **username** (*Required*: The username of an user with administrative privileges, usually *admin*. +- **host** (*Required*): The IP address of your router, e.g. `192.168.1.1`. +- **username** (*Required*: The username of an user with administrative privileges, usually `admin`. - **password** (*Required*): The password for your given admin account. - **port** (*Optional*): The port your router communicates with (defaults to 5000, but 80 is also known to be used on some models) diff --git a/source/_components/device_tracker.nmap_tracker.markdown b/source/_components/device_tracker.nmap_tracker.markdown index 6334ab3a0b1..08c8114071d 100644 --- a/source/_components/device_tracker.nmap_tracker.markdown +++ b/source/_components/device_tracker.nmap_tracker.markdown @@ -15,25 +15,35 @@ featured: false As an alternative to the router-based device tracking, it is possible to directly scan the network for devices by using Nmap. The IP addresses to scan can be specified in any format that Nmap understands, including the network-prefix notation (`192.168.1.1/24`) and the range notation (`192.168.1.1-255`). -If you're on Debian or Ubuntu, you might have to install the packages for `arp` and `nmap`. Do so by running `apt-get install net-tools nmap`. On a Fedora host run `sudo dnf -y install nmap`. +If you're on Debian or Ubuntu, you might have to install the packages for `arp` and `nmap`. Do so by running `$ sudo apt-get install net-tools nmap`. On a Fedora host run `$ sudo dnf -y install nmap`. To use this device tracker in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry device_tracker: - platform: nmap_tracker - hosts: 192.168.1.1/24 - home_interval: 10 - exclude: - - 192.168.1.12 - - 192.168.1.13 + - platform: nmap_tracker + hosts: 192.168.1.1/24 ``` Configuration variables: -- **hosts** (*Required*): The network range to scan in CIDR notation, eg. 192.168.1.1/24 +- **hosts** (*Required*): The network range to scan in CIDR notation, eg. `192.168.1.1/24`. - **home_interval** (*Optional*): The number of minutes nmap will not scan this device, assuming it is home, in order to preserve the device battery. - **exclude** (*Optional*): Hosts not to include in nmap scanning. +A full example for the `nmap` tracker could look like the following sample: + +```yaml +# Example configuration.yaml entry for nmap +device_tracker: + - platform: nmap_tracker + hosts: 192.168.1.1/24 + home_interval: 10 + exclude: + - 192.168.1.12 + - 192.168.1.13 +``` + + See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. diff --git a/source/_components/device_tracker.owntracks.markdown b/source/_components/device_tracker.owntracks.markdown index b63c97d8dbf..78eb5a7d5c1 100644 --- a/source/_components/device_tracker.owntracks.markdown +++ b/source/_components/device_tracker.owntracks.markdown @@ -23,12 +23,7 @@ To integrate Owntracks in Home Assistant, add the following section to your `con ```yaml # Example configuration.yaml entry device_tracker: - platform: owntracks - max_gps_accuracy: 200 - waypoints: True - waypoint_whitelist: - - jon - - ram + - platform: owntracks ``` Configuration variables: @@ -37,6 +32,19 @@ Configuration variables: - **waypoints** (*Optional*): Owntracks users can define [waypoints](http://owntracks.org/booklet/features/waypoints/) (a.k.a regions) which are similar in spirit to Home Assistant zones. If this configuration variable is `True`, the Owntracks users who are in `waypoint_whitelist` can export waypoints from the device and Home Assistant will import them as zone definitions. Defaults to `True`. - **waypoint_whitelist** (*Optional*): A list of user names (as defined for [Owntracks](https://home-assistant.io/components/device_tracker.owntracks/)) who can export their waypoints from Owntracks to Home Assistant. Defaults to all users who are connected to Home Assistant via Owntracks. +A full sample configuration for the `owntracks` plaftfrom is shown below: + +```yaml +# Example configuration.yaml entry +device_tracker: + - platform: owntracks + max_gps_accuracy: 200 + waypoints: True + waypoint_whitelist: + - jon + - ram +``` + ### {% linkable_title Using Owntracks with other device trackers %} Owntracks can also be used with other device trackers, such as [Nmap](/components/device_tracker.nmap_scanner/) or [Netgear](/components/device_tracker.netgear/). To do this, fill in the `mac` field to the Owntracks entry in `known_devices.yaml` with the MAC address of the device you want to track. This way the state of the device will be determined by the source that reported last. The naming convention for known device list is `_` and could be set in app configuration. More details about this config can found in [device tracker](/components/device_tracker/). diff --git a/source/_components/device_tracker.snmp.markdown b/source/_components/device_tracker.snmp.markdown index b113f0e2ad5..16ee1ce216b 100644 --- a/source/_components/device_tracker.snmp.markdown +++ b/source/_components/device_tracker.snmp.markdown @@ -20,6 +20,7 @@ This device tracker needs SNMP to be enabled on the router.

OID examples: + - Mikrotik: `1.3.6.1.4.1.14988.1.1.1.2.1.1` (confirmed, unknown RouterOS version/model) - Mikrotik: `1.3.6.1.2.1.4.22.1.2` (confirmed, RouterOS 6.x on RB2011) - Aruba: `1.3.6.1.4.1.14823.2.3.3.1.2.4.1.2` (untested) @@ -32,10 +33,10 @@ To use the SNMP platform in your installation, add the following to your `config ```yaml # Example configuration.yaml entry device_tracker: - platform: snmp - host: 192.168.1.1 - community: public - baseoid: 1.3.6.1.4.1.14988.1.1.1.2.1.1 + - platform: snmp + host: 192.168.1.1 + community: public + baseoid: 1.3.6.1.4.1.14988.1.1.1.2.1.1 ``` Configuration variables: diff --git a/source/_components/device_tracker.thomson.markdown b/source/_components/device_tracker.thomson.markdown index 8a81c40ad9e..f9d39eb6d7f 100644 --- a/source/_components/device_tracker.thomson.markdown +++ b/source/_components/device_tracker.thomson.markdown @@ -21,10 +21,10 @@ To use this device tracker in your installation, add the following to your `conf ```yaml # Example configuration.yaml entry device_tracker: - platform: thomson - host: YOUR_ROUTER_IP - username: YOUR_ADMIN_USERNAME - password: YOUR_ADMIN_PASSWORD + - platform: thomson + host: YOUR_ROUTER_IP + username: YOUR_ADMIN_USERNAME + password: YOUR_ADMIN_PASSWORD ``` Configuration variables: diff --git a/source/_components/device_tracker.tomato.markdown b/source/_components/device_tracker.tomato.markdown index e9bb3582dcf..e29b7cde509 100644 --- a/source/_components/device_tracker.tomato.markdown +++ b/source/_components/device_tracker.tomato.markdown @@ -8,21 +8,22 @@ comments: false sharing: true footer: true ha_category: Presence Detection +ha_release: pre 0.7 --- -Tomato requires an extra config variable called `http_id`. The value can be obtained by logging in to the Tomato admin interface and search for `http_id` in the page source code. +The `tomato` platform requires an extra config variable called `http_id`. The value can be obtained by logging in to the Tomato admin interface and search for `http_id` in the page source code. To use this device tracker in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry device_tracker: - platform: tomato - host: YOUR_ROUTER_IP_ADDRESS - username: YOUR_ADMIN_USERNAME - password: YOUR_ADMIN_PASSWORD - http_id: YOUR_HTTP_ID + - platform: tomato + host: YOUR_ROUTER_IP_ADDRESS + username: YOUR_ADMIN_USERNAME + password: YOUR_ADMIN_PASSWORD + http_id: YOUR_HTTP_ID ``` Configuration variables: diff --git a/source/_components/device_tracker.tplink.markdown b/source/_components/device_tracker.tplink.markdown index 37fa0f80fdc..0f8ef18e4ff 100644 --- a/source/_components/device_tracker.tplink.markdown +++ b/source/_components/device_tracker.tplink.markdown @@ -13,15 +13,15 @@ ha_release: pre 0.7 --- -This platform allows you to detect presence by looking at connected devices to a [TP-Link](https://www.tp-link.com) device. This includes the ArcherC9 line. +The `tplink` platform allows you to detect presence by looking at connected devices to a [TP-Link](https://www.tp-link.com) device. This includes the ArcherC9 line. ```yaml # Example configuration.yaml entry device_tracker: - platform: tplink - host: YOUR_ROUTER_IP - username: YOUR_ADMIN_USERNAME - password: YOUR_ADMIN_PASSWORD + - platform: tplink + host: YOUR_ROUTER_IP + username: YOUR_ADMIN_USERNAME + password: YOUR_ADMIN_PASSWORD ``` Configuration variables: diff --git a/source/_components/device_tracker.ubus.markdown b/source/_components/device_tracker.ubus.markdown index ffa6d159d98..3050558dda2 100644 --- a/source/_components/device_tracker.ubus.markdown +++ b/source/_components/device_tracker.ubus.markdown @@ -57,10 +57,10 @@ After this is done, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry device_tracker: - platform: ubus - host: ROUTER_IP_ADDRESS - username: YOUR_ADMIN_USERNAME - password: YOUR_ADMIN_PASSWORD + - platform: ubus + host: ROUTER_IP_ADDRESS + username: YOUR_ADMIN_USERNAME + password: YOUR_ADMIN_PASSWORD ``` Configuration variables: diff --git a/source/_components/device_tracker.unifi.markdown b/source/_components/device_tracker.unifi.markdown index 1a0fd8524c8..ec9ba8a1fe9 100644 --- a/source/_components/device_tracker.unifi.markdown +++ b/source/_components/device_tracker.unifi.markdown @@ -20,20 +20,17 @@ To use this device tracker in your installation, add the following to your `conf ```yaml # Example configuration.yaml entry device_tracker: - platform: unifi - host: CONTROLLER - port: PORT - username: YOUR_ADMIN_USERNAME - password: YOUR_ADMIN_PASSWORD - site_id: SITE_ID + - platform: unifi + username: YOUR_ADMIN_USERNAME + password: YOUR_ADMIN_PASSWORD ``` Configuration variables: -- **host** (*Optional*): The hostname or IP address of your controller. Defaults to localhost. -- **port** (*Optional*): The port of your controller's web interface. Defaults to 8443. -- **username** (*Required*: The username of an user with administrative privileges, usually *admin*. +- **host** (*Optional*): The hostname or IP address of your controller. Defaults to `localhost`. +- **port** (*Optional*): The port of your controller's web interface. Defaults to `8443`. +- **username** (*Required*: The username of an user with administrative privileges, usually `admin`. - **password** (*Required*): The password for your given admin account. -- **site_id** (*Optional*): Allows you to specify a site_id for device tracking. Defaults to "default". Found in the URL of the controller (i.e. https://CONTROLLER:PORT/manage/site/SITE_ID/dashboard) +- **site_id** (*Optional*): Allows you to specify a `site_id` for device tracking. Defaults to `default`. Found in the URL of the controller (i.e. https://CONTROLLER:PORT/manage/site/SITE_ID/dashboard) See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. From 53c42e5fd969816b35825c87b696d49647b55a10 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 2 Oct 2016 17:14:08 +0200 Subject: [PATCH 27/70] Minimizing of the configuration sample (#1048) --- .../_components/binary_sensor.ecobee.markdown | 2 +- .../_components/sensor.command_line.markdown | 7 ++--- source/_components/sensor.enocean.markdown | 1 - source/_components/sensor.gpsd.markdown | 5 +--- source/_components/sensor.imap.markdown | 1 - .../sensor.imap_email_content.markdown | 2 -- source/_components/sensor.mhz19.markdown | 1 - .../_components/sensor.moldindicator.markdown | 18 +++++++---- source/_components/sensor.mqtt.markdown | 8 ++--- source/_components/sensor.mysensors.markdown | 1 + source/_components/sensor.nest.markdown | 1 + .../_components/sensor.neurio_energy.markdown | 3 +- source/_components/sensor.octoprint.markdown | 12 ++++---- source/_components/sensor.onewire.markdown | 7 ++--- source/_components/sensor.rest.markdown | 8 ----- source/_components/sensor.rfxtrx.markdown | 3 ++ source/_components/sensor.sleepiq.markdown | 2 +- source/_components/sensor.tcp.markdown | 14 ++++----- .../_components/sensor.tellduslive.markdown | 3 +- source/_components/sensor.tellstick.markdown | 30 ++++++++++++------- source/_components/sensor.temper.markdown | 12 +++++--- source/_components/sensor.template.markdown | 2 +- .../sensor.thinkingcleaner.markdown | 2 +- source/_components/sensor.verisure.markdown | 6 ++-- 24 files changed, 73 insertions(+), 78 deletions(-) diff --git a/source/_components/binary_sensor.ecobee.markdown b/source/_components/binary_sensor.ecobee.markdown index 154b478d4e7..189c943bf97 100644 --- a/source/_components/binary_sensor.ecobee.markdown +++ b/source/_components/binary_sensor.ecobee.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: ecobee.png -ha_category: Sensor +ha_category: Binary Sensor ha_release: 0.9 ha_iot_class: "Local Push" --- diff --git a/source/_components/sensor.command_line.markdown b/source/_components/sensor.command_line.markdown index 814ab0461c9..6c7f6a42b48 100644 --- a/source/_components/sensor.command_line.markdown +++ b/source/_components/sensor.command_line.markdown @@ -21,11 +21,8 @@ To enable it, add the following lines to your `configuration.yaml`: ```yaml # Example configuration.yaml entry sensor: - platform: command_line - command: SENSOR_COMMAND - name: Command sensor - unit_of_measurement: "°C" - value_template: '{% raw %}{{ value.x }}{% endraw %}' + - platform: command_line + command: SENSOR_COMMAND ``` Configuration variables: diff --git a/source/_components/sensor.enocean.markdown b/source/_components/sensor.enocean.markdown index 654c054a923..347d5430067 100644 --- a/source/_components/sensor.enocean.markdown +++ b/source/_components/sensor.enocean.markdown @@ -17,7 +17,6 @@ The `enocean` sensor platform currently only allows reading out the power measur To use your EnOcean device, you first have to set up your [EnOcean hub](../enocean) and then add the following to your `configuration.yaml` file: - ```yaml # Example configuration.yaml entry sensor: diff --git a/source/_components/sensor.gpsd.markdown b/source/_components/sensor.gpsd.markdown index 0b955d6b678..1209bd6fee5 100644 --- a/source/_components/sensor.gpsd.markdown +++ b/source/_components/sensor.gpsd.markdown @@ -47,13 +47,10 @@ To setup a GPSD sensor in your installation, add the following to your `configur # Example configuration.yaml entry senosr: - platform: gpsd - host: 127.0.0.1 - port: 2947 - name: GPS USB ``` Configuration variables: - **host** (*Optional*): The host where GPSD is running. Defaults to `localhost`. -- **port** (*Optional*): The port which GPSD is using. Defaults to 2947. +- **port** (*Optional*): The port which GPSD is using. Defaults to `2947`. - **name** (*Optional*): Friendly name to use for the frontend. Default to GPS. diff --git a/source/_components/sensor.imap.markdown b/source/_components/sensor.imap.markdown index 7001f25e6f1..631751d5476 100644 --- a/source/_components/sensor.imap.markdown +++ b/source/_components/sensor.imap.markdown @@ -23,7 +23,6 @@ sensor: - platform: imap server: imap.gmail.com port: 993 - name: Emails username: USERNAME password: PASSWORD ``` diff --git a/source/_components/sensor.imap_email_content.markdown b/source/_components/sensor.imap_email_content.markdown index 8487def7b58..78cd12caee0 100644 --- a/source/_components/sensor.imap_email_content.markdown +++ b/source/_components/sensor.imap_email_content.markdown @@ -23,12 +23,10 @@ sensor: - platform: imap_email_content server: imap.gmail.com port: 993 - name: Emails username: USERNAME password: PASSWORD senders: - example@gmail.com - value_template: TEMPLATE ``` Configuration variables: diff --git a/source/_components/sensor.mhz19.markdown b/source/_components/sensor.mhz19.markdown index 15e05e8f87d..659bf7357dc 100644 --- a/source/_components/sensor.mhz19.markdown +++ b/source/_components/sensor.mhz19.markdown @@ -21,7 +21,6 @@ To use this sensor in your installation, add the following to your `configuratio sensor: - platform: mhz19 serial_device: /dev/tty.SLAB_USBtoUART - name: CO2 ``` - **serial_device** (*Required*): The serial port to use. On *nix systems, it can often be identified by `$ ls /dev/tty*` diff --git a/source/_components/sensor.moldindicator.markdown b/source/_components/sensor.moldindicator.markdown index e892e01e7c3..4fffa502843 100644 --- a/source/_components/sensor.moldindicator.markdown +++ b/source/_components/sensor.moldindicator.markdown @@ -19,12 +19,20 @@ The sensor data may be used e.g. to signal bad air quality (too high air humidit ```yaml # Example configuration.yaml entry sensor: - platform: mold_indicator - indoor_temp_sensor: sensor.temp - indoor_humidity_sensor: sensor.humidity - outdoor_temp_sensor: sensor.weather_temperature - calibration_factor: 2.0 # Needs to be calibrated to the critical point in the room + - platform: mold_indicator + indoor_temp_sensor: sensor.temp + indoor_humidity_sensor: sensor.humidity + outdoor_temp_sensor: sensor.weather_temperature + calibration_factor: 2.0 ``` + +Configuration variables: + +- **indoor_temp_sensor** (*Required*): The enditiy ID of the indoor temperature sensor. +- **indoor_humidity_sensor** (*Required*): The enditiy ID of the indoor humidity sensor. +- **outdoor_temp_sensor** (*Required*): The enditiy ID of the outdoor temperature sensor. +- **calibration_factor** (*Required*): Needs to be calibrated to the critical point in the room. + In this case, the weather forecast temperature sensor is used for the outside temperature. ## {% linkable_title Calibration %} diff --git a/source/_components/sensor.mqtt.markdown b/source/_components/sensor.mqtt.markdown index 29510c858a5..8c8ffe7d804 100644 --- a/source/_components/sensor.mqtt.markdown +++ b/source/_components/sensor.mqtt.markdown @@ -21,12 +21,8 @@ To use your MQTT sensor in your installation, add the following to your `configu ```yaml # Example configuration.yml entry sensor: - platform: mqtt - state_topic: "home/bedroom/temperature" - name: "MQTT Sensor" - qos: 0 - unit_of_measurement: "°C" - value_template: '{% raw %}{{ value.x }}{% endraw %}' + - platform: mqtt + state_topic: "home/bedroom/temperature" ``` Configuration variables: diff --git a/source/_components/sensor.mysensors.markdown b/source/_components/sensor.mysensors.markdown index 5e40de148fc..0db855d0f47 100644 --- a/source/_components/sensor.mysensors.markdown +++ b/source/_components/sensor.mysensors.markdown @@ -10,6 +10,7 @@ footer: true logo: mysensors.png ha_category: Sensor featured: false +ha_iot_class: "Local Push" --- Integrates MySensors sensors into Home Assistant. See the [main component] for configuration instructions. diff --git a/source/_components/sensor.nest.markdown b/source/_components/sensor.nest.markdown index 55f6e35ed42..94420feaf6b 100644 --- a/source/_components/sensor.nest.markdown +++ b/source/_components/sensor.nest.markdown @@ -22,6 +22,7 @@ You must have the [Nest component](/components/nest/) configured to use those se To set it up, add the following information to your `configuration.yaml` file: ```yaml +# Example configuration.yaml entry sensor: platform: nest monitored_conditions: diff --git a/source/_components/sensor.neurio_energy.markdown b/source/_components/sensor.neurio_energy.markdown index 6ef192d7459..5fea433c7e6 100644 --- a/source/_components/sensor.neurio_energy.markdown +++ b/source/_components/sensor.neurio_energy.markdown @@ -8,7 +8,7 @@ comments: false sharing: true footer: true logo: neurio.png -ha_category: Sensor +ha_category: Energy ha_iot_class: "Cloud Polling" ha_release: 0.14 --- @@ -24,7 +24,6 @@ sensor: platform: neurio_energy api_key: API_KEY api_secret: API_SECRET - sensor_id: "SENSOR_ID" ``` Configuration variables: diff --git a/source/_components/sensor.octoprint.markdown b/source/_components/sensor.octoprint.markdown index 0cdc090fd68..db6bfda7966 100644 --- a/source/_components/sensor.octoprint.markdown +++ b/source/_components/sensor.octoprint.markdown @@ -23,12 +23,12 @@ To set it up, add the following information to your `configuration.yaml` file: ```yaml sensor: - platform: octoprint - name: OctoPrint - monitored_conditions: - - Current State - - Temperatures - - Job Percentage + - platform: octoprint + name: OctoPrint + monitored_conditions: + - Current State + - Temperatures + - Job Percentage ``` Configuration variables: diff --git a/source/_components/sensor.onewire.markdown b/source/_components/sensor.onewire.markdown index fc1ddb212c6..fe843bbad3a 100644 --- a/source/_components/sensor.onewire.markdown +++ b/source/_components/sensor.onewire.markdown @@ -28,10 +28,9 @@ To enable One wire sensors in your installation, add the following to your `conf ```yaml # Example configuration.yaml entry sensor: - platform: onewire - names: - some_id: your name - mount_dir: "/mnt/1wire" + - platform: onewire + names: + some_id: your name ``` Configuration variables: diff --git a/source/_components/sensor.rest.markdown b/source/_components/sensor.rest.markdown index 1d919c161a4..755ecedafae 100644 --- a/source/_components/sensor.rest.markdown +++ b/source/_components/sensor.rest.markdown @@ -21,10 +21,6 @@ To enable this sensor, add the following lines to your `configuration.yaml` file sensor: platform: rest resource: http://IP_ADDRESS/ENDPOINT - value_template: '{% raw %}{{ value_json.thermostat }}{% endraw %}' - method: GET - name: REST GET sensor - unit_of_measurement: "°C" ``` or for a POST request: @@ -35,11 +31,7 @@ sensor: platform: rest resource: http://IP_ADDRESS/ENDPOINT method: POST - value_template: '{% raw %}{{ value_json.thermostat }}{% endraw %}' payload: '{ "device" : "heater" }' - name: REST POST sensor - unit_of_measurement: "°C" - verify_ssl: False ``` Configuration variables: diff --git a/source/_components/sensor.rfxtrx.markdown b/source/_components/sensor.rfxtrx.markdown index 62d36e88c32..dabffea8e95 100644 --- a/source/_components/sensor.rfxtrx.markdown +++ b/source/_components/sensor.rfxtrx.markdown @@ -17,6 +17,7 @@ First you have to set up your [rfxtrx hub](/components/rfxtrx/). The easiest way to find your sensors is to add this to your `configuration.yaml`: ```yaml +# Example configuration.yaml entry sensor: platform: rfxtrx automatic_add: True @@ -32,6 +33,7 @@ Here the name is `0a52080000301004d240259` and you can verify that it works from Then you should update your configuration to: ```yaml +# Example configuration.yaml entry sensor: platform: rfxtrx devices: @@ -42,6 +44,7 @@ sensor: If you want to display several data types from one sensor: ```yaml +# Example configuration.yaml entry sensor: platform: rfxtrx devices: diff --git a/source/_components/sensor.sleepiq.markdown b/source/_components/sensor.sleepiq.markdown index f7efe29b44d..6740af6ab83 100644 --- a/source/_components/sensor.sleepiq.markdown +++ b/source/_components/sensor.sleepiq.markdown @@ -7,7 +7,7 @@ sidebar: true comments: false sharing: true footer: true -logo: sleepiq +logo: sleepiq.png ha_category: Sensor ha_release: 0.29 ha_iot_class: "Local Polling" diff --git a/source/_components/sensor.tcp.markdown b/source/_components/sensor.tcp.markdown index 6e5bc6a0a46..f2a40d603c8 100644 --- a/source/_components/sensor.tcp.markdown +++ b/source/_components/sensor.tcp.markdown @@ -16,16 +16,12 @@ The TCP component allows the integration of some services for which a specific H To enable this sensor, add the following lines to your `configuration.yaml`: ```yaml -sensor: # Example configuration.yaml entry - platform: tcp - name: Central Heating Pressure - host: IP_ADDRESS - port: PORT - timeout: 5 - payload: PAYLOAD - value_template: "{% raw %}{{ value.split(';')[0] }}{% endraw %}" - unit: UNIT_OF_MEASUREMENT +sensor: + - platform: tcp + host: IP_ADDRESS + port: PORT + payload: PAYLOAD ``` Configuration options for the a TCP Sensor: diff --git a/source/_components/sensor.tellduslive.markdown b/source/_components/sensor.tellduslive.markdown index 43fffd40249..b4b47c5d0ba 100644 --- a/source/_components/sensor.tellduslive.markdown +++ b/source/_components/sensor.tellduslive.markdown @@ -12,6 +12,5 @@ ha_category: Sensor featured: false --- -Integrates Telldus Live sensors into Home Assistant. See the [main component] for configuration instructions. +Integrates Telldus Live sensors into Home Assistant. See the [main component](/components/tellduslive/) for configuration instructions. -[main component]: /components/tellduslive/ diff --git a/source/_components/sensor.tellstick.markdown b/source/_components/sensor.tellstick.markdown index d4bbbdb841d..431217096fe 100644 --- a/source/_components/sensor.tellstick.markdown +++ b/source/_components/sensor.tellstick.markdown @@ -20,18 +20,28 @@ To use your TellStick device, you first have to set up your [Tellstick hub](http ```yaml # Example configuration.yaml entry sensor: - platform: tellstick - 135: Outside - 21: Inside - only_named: True - temperature_scale: "°C" - datatype_mask: 1 + - platform: tellstick ``` Configuration variables: -- **ID: Name** *Optional*: Entry for a sensor with the name for it and its ID. -- **only_named** *Optional*: Only show the named sensors. Set to `True` to hide sensors. -- **temperature_scale** *Optional*: The scale of the temperature value. -- **datatype_mask** *Optional*: Mask to determine which sensor values to show based on. Please check the [TellCore tellcore.constants documentation](https://tellcore-py.readthedocs.org/en/v1.1.2/constants.html#module-tellcore.constants) for details. +- **ID: Name** (*Optional*): Entry for a sensor with the name for it and its ID. +- **only_named** (*Optional*): Only show the named sensors. Set to `True` to hide sensors. +- **temperature_scale** (*Optional*): The scale of the temperature value. +- **datatype_mask** (*Optional*): Mask to determine which sensor values to show based on. Please check the [TellCore tellcore.constants documentation](https://tellcore-py.readthedocs.org/en/v1.1.2/constants.html#module-tellcore.constants) for details. +## {% linkable_title Examples %} + +In this section you find some real life examples of how to use this sensor. + +### {% linkable_title Full configuration %} + +```yaml +# Example configuration.yaml entry +sensor: + - platform: tellstick + 135: Outside + 21: Inside + only_named: True + temperature_scale: "°C" + datatype_mask: 1 diff --git a/source/_components/sensor.temper.markdown b/source/_components/sensor.temper.markdown index 2c03ee62102..2f6eddfb7e9 100644 --- a/source/_components/sensor.temper.markdown +++ b/source/_components/sensor.temper.markdown @@ -17,12 +17,16 @@ To use your TEMPer sensor in your installation, add the following to your `confi ```yaml # Example configuration.yaml entry sensor: - platform: temper - name: 'My TEMPer' - scale: 1 - offset: 0 + - platform: temper ``` + +Configuration options for the a TCP Sensor: + +- **name** (*Optional*): The name you would like to give the sensor in Home Assistant. +- **scale** (*Optional*): The scale for the sensor. +- **offset** (*Optional*): The offset to fix reported vales. + Since some of these sensors consistently show higher temperatures the scale and offset values can be used to fine-tune your sensor. The calculation follows the formula `scale * sensor value + offset`. diff --git a/source/_components/sensor.template.markdown b/source/_components/sensor.template.markdown index 188feb040a5..06a28e344cd 100644 --- a/source/_components/sensor.template.markdown +++ b/source/_components/sensor.template.markdown @@ -35,7 +35,7 @@ Configuration variables: - **sensors** array (*Required*): List of your sensors. - **friendly_name** (*Optional*): Name to use in the Frontend. - **unit_of_measurement** (*Optional*): Defines the units of measurement of the sensor, if any. - - **value_template** (*Optional*): Defines a [template](/topics/templating/) to extract a value from the payload. + - **value_template** (*Required*): Defines a [template](/topics/templating/) to extract a value from the event bus. - **entity_id** (*Optional*): Add a list of entity IDs so the sensor only reacts to state changes of these entities. This will reduce the number of times the sensor will try to update it's state. diff --git a/source/_components/sensor.thinkingcleaner.markdown b/source/_components/sensor.thinkingcleaner.markdown index 5d427ed6610..6c75256a721 100644 --- a/source/_components/sensor.thinkingcleaner.markdown +++ b/source/_components/sensor.thinkingcleaner.markdown @@ -20,7 +20,7 @@ To enable this sensor in your installation, add the following to your `configura ```yaml # Example configuration.yaml entry sensor: - platform: thinkingcleaner + - platform: thinkingcleaner ``` This will automatically add sensors for each Thinking Cleaner in your network. diff --git a/source/_components/sensor.verisure.markdown b/source/_components/sensor.verisure.markdown index 7087133f0be..4435630d5ba 100644 --- a/source/_components/sensor.verisure.markdown +++ b/source/_components/sensor.verisure.markdown @@ -12,13 +12,11 @@ ha_category: Sensor featured: false --- -Integrates Verisure sensors into Home Assistant. See the [main component] for configuration instructions. +Integrates Verisure sensors into Home Assistant. See the [main component](/components/verisure/) for configuration instructions. The following sensor types are supported: * Thermometers * Hygrometers * Mouse detectors - - -[main component]: /components/verisure/ + From dfb2c94112b957f7e600b554f143c8583e63083e Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 2 Oct 2016 17:14:17 +0200 Subject: [PATCH 28/70] Minimizing of the configuration sample (#1045) --- source/_components/sensor.lastfm.markdown | 10 +++++----- source/_components/sensor.steam_online.markdown | 12 ++++++------ source/_components/sensor.xbox_live.markdown | 16 +++++++--------- 3 files changed, 18 insertions(+), 20 deletions(-) diff --git a/source/_components/sensor.lastfm.markdown b/source/_components/sensor.lastfm.markdown index 9fdfaabbeac..218e2f2a8e1 100644 --- a/source/_components/sensor.lastfm.markdown +++ b/source/_components/sensor.lastfm.markdown @@ -23,11 +23,11 @@ To use Last.fm with your installation, add the following to your `configuration. ```yaml # Example configuration.yaml entry sensor: - platform: lastfm - api_key: YOUR_API_KEY - users: - - user1 - - user2 + - platform: lastfm + api_key: YOUR_API_KEY + users: + - user1 + - user2 ``` Configuration variables: diff --git a/source/_components/sensor.steam_online.markdown b/source/_components/sensor.steam_online.markdown index 646b3fb8162..6cf46388770 100644 --- a/source/_components/sensor.steam_online.markdown +++ b/source/_components/sensor.steam_online.markdown @@ -25,11 +25,11 @@ To use Steam in your installation, add the following to your `configuration.yaml ```yaml # Example configuration.yaml entry sensor: - platform: steam_online - api_key: YOUR_API_KEY - accounts: - - account1 - - account2 + - platform: steam_online + api_key: YOUR_API_KEY + accounts: + - account1 + - account2 ``` Configuration variables: @@ -49,4 +49,4 @@ group: entities: - sensor.steam_account1 - sensor.steam_account2 -``` \ No newline at end of file +``` diff --git a/source/_components/sensor.xbox_live.markdown b/source/_components/sensor.xbox_live.markdown index 8884e4e41be..ca0aa227891 100644 --- a/source/_components/sensor.xbox_live.markdown +++ b/source/_components/sensor.xbox_live.markdown @@ -15,22 +15,20 @@ ha_release: 0.28 The Xbox Live component is able to track [Xbox](http://xbox.com/) profiles. -To use this sensor you need a free API key from [XboxAPI.com](http://xboxapi.com). -Please also make sure to connect your Xbox account on that site. +To use this sensor you need a free API key from [XboxAPI.com](http://xboxapi.com). Please also make sure to connect your Xbox account on that site. -The configuration requires you to specify XUIDs which are the unique identifiers for profiles. -These can be determined on [XboxAPI.com](http://xboxapi.com) by either looking at your own profile page or using their interactive documentation to search for gamertags. +The configuration requires you to specify XUIDs which are the unique identifiers for profiles. These can be determined on [XboxAPI.com](http://xboxapi.com) by either looking at your own profile page or using their interactive documentation to search for gamertags. To use the Xbox Live sensor in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry sensor: - platform: xbox_live - api_key: YOUR_API_KEY - xuid: - - account1 - - account2 + - platform: xbox_live + api_key: YOUR_API_KEY + xuid: + - account1 + - account2 ``` Configuration variables: From a2776110aac1547ef131eb7becc97821bc13bc0d Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 2 Oct 2016 17:14:23 +0200 Subject: [PATCH 29/70] Minimizing of the configuration sample (#1047) --- .../switch.acer_projector.markdown | 7 +-- source/_components/switch.arest.markdown | 31 ++++++----- .../_components/switch.command_line.markdown | 6 +-- source/_components/switch.dlink.markdown | 2 - source/_components/switch.edimax.markdown | 13 ++--- source/_components/switch.enocean.markdown | 1 - source/_components/switch.hikvision.markdown | 14 ++--- source/_components/switch.mfi.markdown | 11 ++-- source/_components/switch.mqtt.markdown | 40 ++++++++++---- source/_components/switch.mysensors.markdown | 1 + source/_components/switch.mystrom.markdown | 7 ++- source/_components/switch.netio.markdown | 53 ++----------------- source/_components/switch.orvibo.markdown | 22 ++++---- .../switch.pulseaudio_loopback.markdown | 5 -- source/_components/switch.rest.markdown | 7 +-- source/_components/switch.rfxtrx.markdown | 2 + source/_components/switch.rpi_gpio.markdown | 9 ++-- source/_components/switch.scsgate.markdown | 9 ++-- .../_components/switch.tellduslive.markdown | 3 +- source/_components/switch.tellstick.markdown | 2 +- source/_components/switch.template.markdown | 1 - .../switch.thinkingcleaner.markdown | 2 +- source/_components/switch.tplink.markdown | 7 ++- .../_components/switch.wake_on_lan.markdown | 6 +-- 24 files changed, 104 insertions(+), 157 deletions(-) diff --git a/source/_components/switch.acer_projector.markdown b/source/_components/switch.acer_projector.markdown index fac3494da63..a918b6d9a69 100644 --- a/source/_components/switch.acer_projector.markdown +++ b/source/_components/switch.acer_projector.markdown @@ -21,11 +21,8 @@ To use your Acer Projector in your installation, add the following to your `conf ```yaml # Example configuration.yaml entry switch: - platform: acer_projector - filename: /dev/ttyUSB0 - name: Projector - timeout: 1 - write_timeout: 1 + - platform: acer_projector + filename: /dev/ttyUSB0 ``` Configuration variables: diff --git a/source/_components/switch.arest.markdown b/source/_components/switch.arest.markdown index 9307e029539..7960e1ff54a 100644 --- a/source/_components/switch.arest.markdown +++ b/source/_components/switch.arest.markdown @@ -20,14 +20,13 @@ To use your aREST enabled device with pins in your installation, add the followi ```yaml # Example configuration.yaml entry switch: - platform: arest - resource: http://IP_ADDRESS - name: Office - pins: - 11: - name: Fan - 12: - name: Light Desk + - platform: arest + resource: http://IP_ADDRESS + pins: + 11: + name: Fan + 12: + name: Light Desk ``` If you want to use custom functions, then add the following to your `configuration.yaml` file: @@ -35,14 +34,14 @@ If you want to use custom functions, then add the following to your `configurati ```yaml # Example configuration.yaml entry switch: - platform: arest - resource: http://IP_ADDRESS - name: Office - functions: - function1: - name: - function2: - name: Light Desk + - platform: arest + resource: http://IP_ADDRESS + name: Office + functions: + function1: + name: + function2: + name: Light Desk ``` Configuration variables: diff --git a/source/_components/switch.command_line.markdown b/source/_components/switch.command_line.markdown index 197343e2110..5b0f4f14578 100644 --- a/source/_components/switch.command_line.markdown +++ b/source/_components/switch.command_line.markdown @@ -26,9 +26,6 @@ switch: kitchen_light: command_on: switch_command on kitchen command_off: switch_command off kitchen - command_state: query_command kitchen - value_template: '{% raw %}{{ value == "online" }}{% endraw %}' - friendly_name: Kitchen switch ``` Configuration variables: @@ -57,6 +54,9 @@ switch: arest_pin4: command_on: "/usr/bin/curl -X GET http://192.168.1.10/digital/4/1" command_off: "/usr/bin/curl -X GET http://192.168.1.10/digital/4/0" + command_state: "/usr/bin/curl -X GET http://192.168.1.10/digital/4" + value_template: '{% raw %}{{ return_value == "1" }}{% endraw %}' + friendly_name: aREST Pin 4 ``` ### {% linkable_title Shutdown your local host %} diff --git a/source/_components/switch.dlink.markdown b/source/_components/switch.dlink.markdown index a0b8424f234..8e52b91a2a0 100644 --- a/source/_components/switch.dlink.markdown +++ b/source/_components/switch.dlink.markdown @@ -28,10 +28,8 @@ To use your D-Link smart plugs in your installation, add the following to your ` switch: platform: dlink host: IP_ADRRESS - name: D-Link plug username: YOUR_USERNAME password: YOUR_PASSWORD - use_legacy_protocol: False ``` Configuration variables: diff --git a/source/_components/switch.edimax.markdown b/source/_components/switch.edimax.markdown index b3e51d1c33e..028b64d61a2 100644 --- a/source/_components/switch.edimax.markdown +++ b/source/_components/switch.edimax.markdown @@ -20,17 +20,14 @@ To use your Edimax switch in your installation, add the following to your `confi ```yaml # Example configuration.yaml entry switch: - platform: edimax - host: 192.168.1.32 - username: YOUR_USERNAME - password: YOUR_PASSWORD - name: Edimax Smart Plug + - platform: edimax + host: 192.168.1.32 ``` Configuration variables: -- **host** (*Required*): The IP address of your Edimax switch, eg. 192.168.1.32 -- **username** (*Optional*): Your username for the Edimax switch. Defaults to "admin". -- **password** (*Optional*): Your password for the Edimax switch. Defaults to "1234". +- **host** (*Required*): The IP address of your Edimax switch, eg. `192.168.1.32`. +- **username** (*Optional*): Your username for the Edimax switch. Defaults to `admin`. +- **password** (*Optional*): Your password for the Edimax switch. Defaults to `1234`. - **name** (*Optional*): The name to use when displaying this switch. diff --git a/source/_components/switch.enocean.markdown b/source/_components/switch.enocean.markdown index df6f6f47871..880e5ec03ac 100644 --- a/source/_components/switch.enocean.markdown +++ b/source/_components/switch.enocean.markdown @@ -21,7 +21,6 @@ To use your EnOcean device, you first have to set up your [EnOcean hub](/compone # Example configuration.yaml entry switch: - platform: enocean - name: Front door id: [0x01,0x90,0x84,0x3C] ``` diff --git a/source/_components/switch.hikvision.markdown b/source/_components/switch.hikvision.markdown index 6fa0aedba40..19342fed4d0 100644 --- a/source/_components/switch.hikvision.markdown +++ b/source/_components/switch.hikvision.markdown @@ -24,18 +24,14 @@ To use your Hikvision cam in your installation, add the following to your `confi ```yaml # Example configuration.yaml entry switch: - platform: hikvisioncam + - platform: hikvisioncam host: 192.168.1.32 - port: 80 - name: Hikvision Cam 1 Motion Detection - username: USERNAME - password: PASSWORD ``` Configuration variables: -- **host** (*Required*): The IP address of your Hikvision camera, eg. 192.168.1.32 -- **port** (*Optional*): The port to connec to your Hikvision camera. Defaults to 80. +- **host** (*Required*): The IP address of your Hikvision camera, eg. `192.168.1.32`. +- **port** (*Optional*): The port to connec to your Hikvision camera. Defaults to `80`. - **name** (*Optional*): This parameter allows you to override the name of your camera. -- **username** (*Optional*): The username for accessing your Hikvision camera. Defaults to "admin". -- **password** (*Optional*): The password to access your Hikvision camera. Defaults to "12345". +- **username** (*Optional*): The username for accessing your Hikvision camera. Defaults to `admin`. +- **password** (*Optional*): The password to access your Hikvision camera. Defaults to `12345`. diff --git a/source/_components/switch.mfi.markdown b/source/_components/switch.mfi.markdown index 5e7f850a7f3..4ff90c19871 100644 --- a/source/_components/switch.mfi.markdown +++ b/source/_components/switch.mfi.markdown @@ -19,13 +19,10 @@ To add this platform to your installation, add the following to your `configurat ```yaml # Example configuration.yaml entry sensor: - platform: mfi - host: IP_ADDRESS - port: PORT - username: USERNAME - password: PASSWORD - ssl: true - verify_ssl: true + - platform: mfi + host: IP_ADDRESS + username: USERNAME + password: PASSWORD ``` Configuration variables: diff --git a/source/_components/switch.mqtt.markdown b/source/_components/switch.mqtt.markdown index 2b5c4860985..5354acff992 100644 --- a/source/_components/switch.mqtt.markdown +++ b/source/_components/switch.mqtt.markdown @@ -26,16 +26,8 @@ To enable this switch in your installation, add the following to your `configura ```yaml # Example configuration.yml entry switch: - platform: mqtt - name: "Bedroom Switch" - state_topic: "home/bedroom/switch1" - command_topic: "home/bedroom/switch1/set" - payload_on: "ON" - payload_off: "OFF" - optimistic: false - qos: 0 - retain: true - value_template: '{% raw %}{{ value.x }}{% endraw %}' + - platform: mqtt + command_topic: "home/bedroom/switch1/set" ``` Configuration variables: @@ -53,3 +45,31 @@ Configuration variables:

Make sure that your topic match exact. `some-topic/` and `some-topic` are different topics.

+ +## {% linkable_title Examples %} + +In this section you find some real life examples of how to use this sensor. + +### {% linkable_title Full configuration %} + +The example below shows a full configuration for a switch. + +```yaml +# Example configuration.yml entry +switch: + - platform: mqtt + name: "Bedroom Switch" + state_topic: "home/bedroom/switch1" + command_topic: "home/bedroom/switch1/set" + payload_on: "ON" + payload_off: "OFF" + optimistic: false + qos: 0 + retain: true +``` + +For a check you can use the command line tools `mosquitto_pub` shipped with `mosquitto` to send MQTT messages. This allows you to operate your cover manually: + +```bash +$ mosquitto_pub -h 127.0.0.1 -t home/bedroom/switch1set -m "ON" +``` diff --git a/source/_components/switch.mysensors.markdown b/source/_components/switch.mysensors.markdown index 078af164984..ead64bdcbe3 100644 --- a/source/_components/switch.mysensors.markdown +++ b/source/_components/switch.mysensors.markdown @@ -10,6 +10,7 @@ footer: true logo: mysensors.png ha_category: Switch featured: false +ha_iot_class: "Local Push" --- Integrates MySensors switches into Home Assistant. See the [main component] for configuration instructions. diff --git a/source/_components/switch.mystrom.markdown b/source/_components/switch.mystrom.markdown index ce1652662b6..9c9c01e493b 100644 --- a/source/_components/switch.mystrom.markdown +++ b/source/_components/switch.mystrom.markdown @@ -19,14 +19,13 @@ To use your myStrom switch in your installation, add the following to your `conf ```yaml # Example configuration.yaml entry switch: - platform: mystrom - host: IP_ADRRESS - name: MyStrom Switch + - platform: mystrom + host: IP_ADRRESS ``` Configuration variables: -- **host** (*Required*): The IP address of your myStrom switch, eg. http://192.168.1.32 +- **host** (*Required*): The IP address of your myStrom switch, eg. `http://192.168.1.32`. - **name** (*Optional*): The name to use when displaying this switch. Check if you are able to access the device located at `http://IP_ADRRESS`. The details about your switch is provided as a JSON response. diff --git a/source/_components/switch.netio.markdown b/source/_components/switch.netio.markdown index 14b87570284..380001bc2de 100644 --- a/source/_components/switch.netio.markdown +++ b/source/_components/switch.netio.markdown @@ -23,9 +23,8 @@ To use Netio devices in your installation, add the following to your `configurat switch: - platform: netio host: 192.168.1.43 - port: 1234 - username: user - password: pwd + username: YOUR_USERNAME + password: YOUR_PASSWORD outlets: 1: Free 2: TV @@ -34,17 +33,14 @@ switch: Configuration variables: -- **host** (*Required*): The IP address of your Netio plug, eg. http://192.168.1.32 +- **host** (*Required*): The IP address of your Netio plug, eg. `http://192.168.1.32`. - **port** (*Optional*): The port to communicate with the switch. Defaults to `1234`. - **username** (*Required*): The username for your plug. - **password** (*Required*): The password for your plug. - **outlets** (*Required*) array: List of all outlets. - **[No.]: [Name]** (*Required*): Identification of an outlet. - - -To get pushed updates from the Netio devices, one can add this Lua code in the device interface as an action triggered on "Netio" "System variables updated" -with an 'Always' schedule: +To get pushed updates from the Netio devices, one can add this Lua code in the device interface as an action triggered on "Netio" "System variables updated" with an 'Always' schedule: ```lua @@ -69,44 +65,3 @@ local url = string.format('http://%s%s?%s', address, path, qs) devices.system.CustomCGI{url=url} ``` - - - - - - - - - - - - - - - - - - - - -The `dlink` switch platform allows you to control the state of your [D-Link Wi-Fi Smart Plugs](http://us.dlink.com/product-category/home-solutions/connected-home/smart-plugs/). - -Supported devices (tested): - -- DSP-W215 -- DSP-W110 - -To use your D-Link smart plugs in your installation, add the following to your `configuration.yaml` file: - -```yaml -# Example configuration.yaml entry -switch: - platform: dlink - host: IP_ADRRESS - name: D-Link plug - username: YOUR_USERNAME - password: YOUR_PASSWORD -``` - - - diff --git a/source/_components/switch.orvibo.markdown b/source/_components/switch.orvibo.markdown index 5f8efc3892d..30516626dfc 100644 --- a/source/_components/switch.orvibo.markdown +++ b/source/_components/switch.orvibo.markdown @@ -16,27 +16,29 @@ The `orvibo` switch platform allows you to toggle your Orvibo S20 Wifi Smart Soc To automatically discover Orvibo sockets on your network: ```yaml +# Example configuration.yaml entry switch: - platform: orvibo + - platform: orvibo ``` To specify Orvibo sockets and skip discovery: ```yaml +# Example configuration.yaml entry switch: - platform: orvibo - discovery: false - switches: - - host: IP_ADDRESS - mac: MA:CA:DD:RE:SS:00 - name: "My Socket" + - platform: orvibo + discovery: false + switches: + - host: IP_ADDRESS + mac: MA:CA:DD:RE:SS:00 + name: "My Socket" ``` Configuration variables: -- **discovery** (*Optional*): Whether to discover sockets (default true). +- **discovery** (*Optional*): Whether to discover sockets. Defaults to `true`. - **switches** (*Optional*): - - **host** (*Required*): IP address of your socket, eg. 192.168.1.10. - - **mac** (*Optional*): MAC address of the socket, eg "AA:BB:CC:DD:EE:FF". This is required if the socket is connected to a different subnet to the machine running Home Assistant + - **host** (*Required*): IP address of your socket, eg. `192.168.1.10`. + - **mac** (*Optional*): MAC address of the socket, eg "AA:BB:CC:DD:EE:FF". This is required if the socket is connected to a different subnet to the machine running Home Assistant. - **name** (*Optional*): Your name for the socket. diff --git a/source/_components/switch.pulseaudio_loopback.markdown b/source/_components/switch.pulseaudio_loopback.markdown index 33ff6c87927..116c5d4fbd0 100644 --- a/source/_components/switch.pulseaudio_loopback.markdown +++ b/source/_components/switch.pulseaudio_loopback.markdown @@ -28,11 +28,6 @@ To enable this switch, add the following lines to your `configuration.yaml` file # Example configuration.yaml entry switch: - platform: pulseaudio_loopback - name: mpd1 -> bedroom - host: 127.0.0.1 - port: 4712 - source_name: mpd1.monitor - sink_name: bedroom ``` Configuration variables: diff --git a/source/_components/switch.rest.markdown b/source/_components/switch.rest.markdown index b2c7e027112..98d88fa3ba1 100644 --- a/source/_components/switch.rest.markdown +++ b/source/_components/switch.rest.markdown @@ -19,11 +19,8 @@ To enable this switch, add the following lines to your `configuration.yaml` file ```yaml # Example configuration.yaml entry switch: - platform: rest - resource: http://IP_ADDRESS/ENDPOINT - name: "Bedroom Switch" - body_on: "ON" - body_off: "OFF" + - platform: rest + resource: http://IP_ADDRESS/ENDPOINT ``` Configuration variables: diff --git a/source/_components/switch.rfxtrx.markdown b/source/_components/switch.rfxtrx.markdown index b5cfb786b6d..372aaa76f2a 100644 --- a/source/_components/switch.rfxtrx.markdown +++ b/source/_components/switch.rfxtrx.markdown @@ -18,6 +18,7 @@ First you have to set up your [rfxtrx hub](/components/rfxtrx/). The easiest way to find your switches is to add this to your `configuration.yaml`: ```yaml +# Example configuration.yaml entry switch: platform: rfxtrx automatic_add: True @@ -34,6 +35,7 @@ Here the name is `0b11000102ef9f210010f70` and you can verify that it works from Then you should update your configuration to: ```yaml +# Example configuration.yaml entry switch: platform: rfxtrx devices: diff --git a/source/_components/switch.rpi_gpio.markdown b/source/_components/switch.rpi_gpio.markdown index 2cff44f0ed0..691a1bd61d2 100644 --- a/source/_components/switch.rpi_gpio.markdown +++ b/source/_components/switch.rpi_gpio.markdown @@ -20,11 +20,10 @@ To use your Raspberry Pi's GPIO in your installation, add the following to your ```yaml # Example configuration.yaml entry switch: - platform: rpi_gpio - ports: - 11: Fan Office - 12: Light Desk - invert_logic: false + - platform: rpi_gpio + ports: + 11: Fan Office + 12: Light Desk ``` Configuration variables: diff --git a/source/_components/switch.scsgate.markdown b/source/_components/switch.scsgate.markdown index d09b50de07c..5067dc0f0f1 100644 --- a/source/_components/switch.scsgate.markdown +++ b/source/_components/switch.scsgate.markdown @@ -19,11 +19,10 @@ To enable SCSGate switches in your installation, add the following to your `conf ```yaml # Example configuration.yaml entry switch: - platform: scsgate - devices: - living_room: - name: Living Room - scs_id: XXXXX + - platform: scsgate + devices: + living_room: + scs_id: XXXXX ``` Configuration variables: diff --git a/source/_components/switch.tellduslive.markdown b/source/_components/switch.tellduslive.markdown index eb2002814ab..4477289a876 100644 --- a/source/_components/switch.tellduslive.markdown +++ b/source/_components/switch.tellduslive.markdown @@ -12,6 +12,5 @@ ha_category: Switch featured: false --- -Integrates Telldus Live switches into Home Assistant. See the [main component] for configuration instructions. +Integrates Telldus Live switches into Home Assistant. See the [main component](/components/tellduslive/) for configuration instructions. -[main component]: /components/tellduslive/ diff --git a/source/_components/switch.tellstick.markdown b/source/_components/switch.tellstick.markdown index cb00059fc53..9c1ed88d73d 100644 --- a/source/_components/switch.tellstick.markdown +++ b/source/_components/switch.tellstick.markdown @@ -20,5 +20,5 @@ To use your TellStick device, you first have to set up your [Tellstick hub](http ```yaml # Example configuration.yaml entry switch: - platform: tellstick + - platform: tellstick ``` diff --git a/source/_components/switch.template.markdown b/source/_components/switch.template.markdown index 971b0824d40..25a05f6a4e4 100644 --- a/source/_components/switch.template.markdown +++ b/source/_components/switch.template.markdown @@ -27,7 +27,6 @@ switch: - platform: template switches: skylight: - friendly_name: 'Skylight' value_template: {% raw %}'{{ is_state('sensor.skylight', 'on') }}'{% endraw %} turn_on: service: switch.turn_on diff --git a/source/_components/switch.thinkingcleaner.markdown b/source/_components/switch.thinkingcleaner.markdown index a9d41bbffb0..19304fb0b4c 100644 --- a/source/_components/switch.thinkingcleaner.markdown +++ b/source/_components/switch.thinkingcleaner.markdown @@ -20,7 +20,7 @@ To enable this switch in your installation, add the following to your `configura ```yaml # Example configuration.yaml entry switch: - platform: thinkingcleaner + - platform: thinkingcleaner ``` This will automatically add switches for each Thinking Cleaner in your network. diff --git a/source/_components/switch.tplink.markdown b/source/_components/switch.tplink.markdown index 3ae81fb44f8..750c0cc8689 100644 --- a/source/_components/switch.tplink.markdown +++ b/source/_components/switch.tplink.markdown @@ -24,14 +24,13 @@ To use your TPLink switch in your installation, add the following to your `confi ```yaml # Example configuration.yaml entry switch: - platform: tplink - host: IP_ADRRESS - name: TP-Link Switch + - platform: tplink + host: IP_ADRRESS ``` Configuration variables: -- **host** (*Required*): The IP address of your myStrom switch, eg. http://192.168.1.32 +- **host** (*Required*): The IP address of your myStrom switch, eg. `http://192.168.1.32`. - **name** (*Optional*): The name to use when displaying this switch. diff --git a/source/_components/switch.wake_on_lan.markdown b/source/_components/switch.wake_on_lan.markdown index c9d33443592..87ac2410ba7 100644 --- a/source/_components/switch.wake_on_lan.markdown +++ b/source/_components/switch.wake_on_lan.markdown @@ -23,10 +23,8 @@ To enable this switch in your installation, add the following to your `configura ```yaml # Example configuration.yml entry switch: - platform: wake_on_lan - mac_address: "00-01-02-03-04-05" - name: "WOL" - host: "192.168.1.1" + - platform: wake_on_lan + mac_address: "00-01-02-03-04-05" ``` Configuration variables: From c840d6bb720366d5cb10682441647208fbdd34b8 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 2 Oct 2016 17:14:29 +0200 Subject: [PATCH 30/70] Minimizing of the configuration sample (#1044) --- source/_components/sensor.cpuspeed.markdown | 3 +- source/_components/sensor.fastdotcom.markdown | 10 +-- .../sensor.fritzbox_callmonitor.markdown | 2 +- source/_components/sensor.glances.markdown | 40 +++++----- source/_components/sensor.hp_ilo.markdown | 65 ++++++++-------- .../_components/sensor.linux_battery.markdown | 2 - source/_components/sensor.pi_hole.markdown | 3 - source/_components/sensor.snmp.markdown | 14 ++-- source/_components/sensor.speedtest.markdown | 76 ++++++++++--------- .../_components/sensor.supervisord.markdown | 3 +- 10 files changed, 106 insertions(+), 112 deletions(-) diff --git a/source/_components/sensor.cpuspeed.markdown b/source/_components/sensor.cpuspeed.markdown index 14df61d0ac6..d876d37fc4d 100644 --- a/source/_components/sensor.cpuspeed.markdown +++ b/source/_components/sensor.cpuspeed.markdown @@ -20,8 +20,7 @@ To add this platform to your installation, add the following to your `configurat ```yaml # Example configuration.yaml entry sensor: - platform: cpuspeed - name: CPU + - platform: cpuspeed ``` Configuration variables: diff --git a/source/_components/sensor.fastdotcom.markdown b/source/_components/sensor.fastdotcom.markdown index 69130b5a3d8..b7e7e06e385 100644 --- a/source/_components/sensor.fastdotcom.markdown +++ b/source/_components/sensor.fastdotcom.markdown @@ -23,7 +23,7 @@ Once per hour, on the hour (default): ```yaml sensor: - platform: fastdotcom + - platform: fastdotcom ``` More examples: @@ -32,10 +32,10 @@ Every half hour of every day: ```yaml sensor: - platform: fastdotcom - minute: - - 0 - - 30 + - platform: fastdotcom + minute: + - 0 + - 30 ``` Configuration variables: diff --git a/source/_components/sensor.fritzbox_callmonitor.markdown b/source/_components/sensor.fritzbox_callmonitor.markdown index 290b9bc5051..f792d0a3291 100644 --- a/source/_components/sensor.fritzbox_callmonitor.markdown +++ b/source/_components/sensor.fritzbox_callmonitor.markdown @@ -24,7 +24,7 @@ To use the Fritz!Box call monitor in your installation, add the following to you ```yaml # Example configuration.yaml entry sensor: - platform: fritzbox_callmonitor + - platform: fritzbox_callmonitor ``` Configuration variables: diff --git a/source/_components/sensor.glances.markdown b/source/_components/sensor.glances.markdown index e0079f4737d..daaa3b9a281 100644 --- a/source/_components/sensor.glances.markdown +++ b/source/_components/sensor.glances.markdown @@ -35,31 +35,29 @@ To enable the glances sensor, add the following lines to your `configuration.yam ```yaml # Example configuration.yaml entry sensor: - platform: glances - name: Glances sensor - host: IP_ADDRESS - port: 61208 - resources: - - 'disk_use_percent' - - 'disk_use' - - 'disk_free' - - 'memory_use_percent' - - 'memory_use' - - 'memory_free' - - 'swap_use_percent' - - 'swap_use' - - 'swap_free' - - 'processor_load' - - 'process_running' - - 'process_total' - - 'process_thread' - - 'process_sleeping' + - platform: glances + host: IP_ADDRESS + resources: + - 'disk_use_percent' + - 'disk_use' + - 'disk_free' + - 'memory_use_percent' + - 'memory_use' + - 'memory_free' + - 'swap_use_percent' + - 'swap_use' + - 'swap_free' + - 'processor_load' + - 'process_running' + - 'process_total' + - 'process_thread' + - 'process_sleeping' ``` Configuration variables: -- **host** (*Required*): The IP address of your host, eg. 192.168.1.32. -- **port** (*Option*): The network port to connect to. Default is 61208. +- **host** (*Required*): The IP address of your host, eg. `192.168.1.32`. +- **port** (*Option*): The network port to connect to. Default is `61208`. - **name** (*Optional*): Name of the Glances sensor. - **resources** (*Required*): Entries to monitor. - **disk_use_percent**: Used disk space in percent diff --git a/source/_components/sensor.hp_ilo.markdown b/source/_components/sensor.hp_ilo.markdown index e57ebe9c83c..69a5f170a45 100644 --- a/source/_components/sensor.hp_ilo.markdown +++ b/source/_components/sensor.hp_ilo.markdown @@ -31,40 +31,39 @@ To use this component in your installation, add the following to your `configura ```yaml # Example configuration.yaml entry sensor: - platform: hp_ilo - host: IP_ADDRESS or HOSTNAME - port: PORT - username: USERNAME - password: PASSWORD - monitored_variables: - - server_name - - server_fqdn - - server_host_data - - server_oa_info - - server_power_status - - server_power_readings - - server_power_on_time - - server_asset_tag - - server_uid_status - - server_health - - network_settings + - platform: hp_ilo + host: IP_ADDRESS or HOSTNAME + username: USERNAME + password: PASSWORD + monitored_variables: + - server_name + - server_fqdn + - server_host_data + - server_oa_info + - server_power_status + - server_power_readings + - server_power_on_time + - server_asset_tag + - server_uid_status + - server_health + - network_settings ``` Configuration variables: -- **host** (*Required*): The hostname or IP address on which the ILO can be reached -- **port** (*Optional*): The port on which the ILO can be reached, defaults to port 443 -- **username** (*Required*): The username used to connect to the ILO -- **password** (*Required*): The password used to connect to the ILO -- **monitored_variables** array (*Optional*): Information to be collected from the ILO, defaults to `server_name` - - **server_name**: Get the name of the server this iLO is managing - - **server_fqdn**: Get the fqdn of the server this iLO is managing - - **server_host_data**: Get SMBIOS records that describe the host - - **server_oa_info**: Get information about the Onboard Administrator of the enclosing chassis - - **server_power_status**: Whether the server is powered on or not - - **server_power_readings**: Get current, min, max and average power readings - - **server_power_on_time**: How many minutes ago has the server been powered on - - **server_asset_tag**: Gets the server asset tag - - **server_uid_status**: Get the status of the UID light - - **server_health**: Get server health information - - **network_settings**: Get the iLO network settings +- **host** (*Required*): The hostname or IP address on which the ILO can be reached. +- **port** (*Optional*): The port on which the ILO can be reached, defaults to port `443`. +- **username** (*Required*): The username used to connect to the ILO. +- **password** (*Required*): The password used to connect to the ILO. +- **monitored_variables** array (*Optional*): Information to be collected from the ILO, defaults to `server_name`. + - **server_name**: Get the name of the server this iLO is managing. + - **server_fqdn**: Get the fqdn of the server this iLO is managing. + - **server_host_data**: Get SMBIOS records that describe the host. + - **server_oa_info**: Get information about the Onboard Administrator of the enclosing chassis. + - **server_power_status**: Whether the server is powered on or not. + - **server_power_readings**: Get current, min, max and average power readings. + - **server_power_on_time**: How many minutes ago has the server been powered on. + - **server_asset_tag**: Gets the server asset tag. + - **server_uid_status**: Get the status of the UID light. + - **server_health**: Get server health information. + - **network_settings**: Get the iLO network settings. diff --git a/source/_components/sensor.linux_battery.markdown b/source/_components/sensor.linux_battery.markdown index f0ab5a44008..173946b94f0 100644 --- a/source/_components/sensor.linux_battery.markdown +++ b/source/_components/sensor.linux_battery.markdown @@ -20,8 +20,6 @@ To setup a battery sensor to your installation, add the following to your `confi # Example configuration.yaml entry sensor: - platform: linux_battery - name: Laptop - battery: 1 ``` Configuration variables: diff --git a/source/_components/sensor.pi_hole.markdown b/source/_components/sensor.pi_hole.markdown index 7545dd91738..ae7c97c8abf 100644 --- a/source/_components/sensor.pi_hole.markdown +++ b/source/_components/sensor.pi_hole.markdown @@ -22,9 +22,6 @@ To enable this sensor, add the following lines to your `configuration.yaml` file # Example configuration.yaml entry sensor: - platform: pi_hole - host: 192.168.1.2 - ssl: True - verify_ssl: ``` Configuration variables: diff --git a/source/_components/sensor.snmp.markdown b/source/_components/sensor.snmp.markdown index dad233bf380..d73d049fdb9 100644 --- a/source/_components/sensor.snmp.markdown +++ b/source/_components/sensor.snmp.markdown @@ -21,19 +21,15 @@ To enable this sensor in your installation, add the following to your `configura ```yaml # Example configuration.yaml entry sensor: - platform: snmp - name: Load - host: 192.168.1.32 - port: 161 - community: public - baseoid: 1.3.6.1.4.1.2021.10.1.3.1 - unit_of_measurement: "%" + - platform: snmp + host: 192.168.1.32 + baseoid: 1.3.6.1.4.1.2021.10.1.3.1 ``` Configuration variables: -- **host** (*Required*): The IP address of your host, eg. 192.168.1.32. -- **port** (*Option*): The SNMP port of your host. Defaults to 161. +- **host** (*Required*): The IP address of your host, eg. `192.168.1.32`. +- **port** (*Option*): The SNMP port of your host. Defaults to `161`. - **name** (*Optional*): Name of the SNMP sensor. - **community** (*Optional*): The SNMP community which is set for the device. Most devices have a default community set to to `public` with read-only permission (which is sufficient). - **baseoid** (*Required*): The OID where the information is located. It's advised to use the numerical notation. diff --git a/source/_components/sensor.speedtest.markdown b/source/_components/sensor.speedtest.markdown index d7257c9a12f..10d9d02cb2a 100644 --- a/source/_components/sensor.speedtest.markdown +++ b/source/_components/sensor.speedtest.markdown @@ -22,42 +22,9 @@ To add a Speedtest.net sensor to your installation, add the following to your `c Once per hour, on the hour (default): ```yaml +# Example configuration.yaml entry sensor: platform: speedtest - server_id: 1234 - monitored_conditions: - - ping - - download - - upload -``` - -More examples: - -Every half hour of every day: - -```yaml -sensor: - platform: speedtest - minute: - - 0 - - 30 - monitored_conditions: - - ping - - download - - upload -``` - -Everyday at 12:30AM, 6:30AM, 12:30PM, 6:30PM: - -```yaml -sensor: - platform: speedtest - minute: 30 - hour: - - 0 - - 6 - - 12 - - 18 monitored_conditions: - ping - download @@ -78,3 +45,44 @@ Configuration variables: This component uses [speedtest-cli](https://github.com/sivel/speedtest-cli) to gather network performance data from Speedtest.net. Please be aware of the potential [inconsistencies](https://github.com/sivel/speedtest-cli#inconsistency) that this component may display. When Home Assistant first starts up, the values of the speedtest will show as `Unknown`. You can use the service `sensor.update_speedtest` to run a manual speedtest and populate the data or just wait for the next regularly scheduled test. + +## {% linkable_title Examples %} + +In this section you find some real life examples of how to use this sensor. + +### {% linkable_title Run periodically %} + +Every half hour of every day: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: speedtest + minute: + - 0 + - 30 + monitored_conditions: + - ping + - download + - upload +``` + +### {% linkable_title Run at a specific time %} + +Everyday at 12:30AM, 6:30AM, 12:30PM, 6:30PM: + +```yaml +# Example configuration.yaml entry +sensor: + platform: speedtest + minute: 30 + hour: + - 0 + - 6 + - 12 + - 18 + monitored_conditions: + - ping + - download + - upload +``` diff --git a/source/_components/sensor.supervisord.markdown b/source/_components/sensor.supervisord.markdown index 57c545ddf3c..3d805e36303 100644 --- a/source/_components/sensor.supervisord.markdown +++ b/source/_components/sensor.supervisord.markdown @@ -18,8 +18,7 @@ To use this sensor in your installation, add the following to your `configuratio ```yaml # Example configuration.yaml entry sensor: - platform: supervisord - url: http://192.168.1.1:9001/RPC2 + - platform: supervisord ``` Configuration variables: From c72ec348e4dad58eb57babc4d0e5f1403543ed13 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 2 Oct 2016 17:14:35 +0200 Subject: [PATCH 31/70] Minimizing of the configuration sample (#1043) --- .../_components/sensor.deutsche_bahn.markdown | 6 ++-- .../sensor.google_travel_time.markdown | 5 +--- source/_components/sensor.gtfs.markdown | 8 ++--- .../sensor.swiss_public_transport.markdown | 6 ++-- source/_components/sensor.torque.markdown | 5 ++-- source/_components/sensor.uber.markdown | 29 +++++++++++++------ 6 files changed, 33 insertions(+), 26 deletions(-) diff --git a/source/_components/sensor.deutsche_bahn.markdown b/source/_components/sensor.deutsche_bahn.markdown index 00942189ce1..2d10cdcc97b 100644 --- a/source/_components/sensor.deutsche_bahn.markdown +++ b/source/_components/sensor.deutsche_bahn.markdown @@ -21,9 +21,9 @@ To enable this sensor, add the following lines to your `configuration.yaml` file ```yaml # Example configuration.yaml entry sensor: - platform: deutsche_bahn - from: NAME_OF_START_STATION - to: NAME_OF_FINAL_STATION + - platform: deutsche_bahn + from: NAME_OF_START_STATION + to: NAME_OF_FINAL_STATION ``` Configuration variables: diff --git a/source/_components/sensor.google_travel_time.markdown b/source/_components/sensor.google_travel_time.markdown index 98d0b6086cc..7c904d9d540 100644 --- a/source/_components/sensor.google_travel_time.markdown +++ b/source/_components/sensor.google_travel_time.markdown @@ -22,13 +22,10 @@ A free API Key allows 2500 requests per day. The sensor will update the travel t ```yaml # Example entry for configuration.yaml sensor: - platform: google_travel_time - name: Google Travel Time + - platform: google_travel_time api_key: XXXX_XXXXX_XXXXX origin: Trondheim, Norway destination: Paris, France - options: - ... ``` Configuration variables: diff --git a/source/_components/sensor.gtfs.markdown b/source/_components/sensor.gtfs.markdown index d474d12b0f2..e2d60b80936 100644 --- a/source/_components/sensor.gtfs.markdown +++ b/source/_components/sensor.gtfs.markdown @@ -41,10 +41,10 @@ Your mileage may vary depending on the transit agency used. Most agencies respec ```yaml # Example configuration.yaml entry sensor: - platform: gtfs - origin: STOP_ID - destination: STOP_ID - data: DATA_SOURCE + - platform: gtfs + origin: STOP_ID + destination: STOP_ID + data: DATA_SOURCE ``` Configuration variables: diff --git a/source/_components/sensor.swiss_public_transport.markdown b/source/_components/sensor.swiss_public_transport.markdown index 37ff0ac0afc..d352afc0006 100644 --- a/source/_components/sensor.swiss_public_transport.markdown +++ b/source/_components/sensor.swiss_public_transport.markdown @@ -25,9 +25,9 @@ If the score is 100 ("score":"100" in the response), it is a perfect match. Then ```yaml # Example configuration.yaml entry sensor: - platform: swiss_public_transport - from: STATION_ID - to: STATION_ID + - platform: swiss_public_transport + from: STATION_ID + to: STATION_ID ``` Configuration variables: diff --git a/source/_components/sensor.torque.markdown b/source/_components/sensor.torque.markdown index e1f96a42bda..7fdc1a475ad 100644 --- a/source/_components/sensor.torque.markdown +++ b/source/_components/sensor.torque.markdown @@ -40,9 +40,8 @@ Add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry sensor: - platform: torque - name: Your Vehicle Name - email: your_configured@email.com + - platform: torque + email: your_configured@email.com ``` Configuration variables: diff --git a/source/_components/sensor.uber.markdown b/source/_components/sensor.uber.markdown index 3ea359e735f..b742b849358 100644 --- a/source/_components/sensor.uber.markdown +++ b/source/_components/sensor.uber.markdown @@ -24,21 +24,32 @@ To enable this sensor, add the following lines to your `configuration.yaml` file ```yaml # Example configuration.yaml entry sensor: - platform: uber - start_latitude: 37.8116380 - start_longitude: -122.2648050 - end_latitude: 37.7768520 - end_longitude: -122.4155500 - server_token: 'BeAPPTDsWZSHLf7fd9OWjZkIezweRw18Q8NltY27' - product_ids: - - '04a497f5-380d-47f2-bf1b-ad4cfdcb51f2' + - platform: uber + server_token: 'BeAPPTDsWZSHLf7fd9OWjZkIezweRw18Q8NltY27' + start_latitude: 37.8116380 + start_longitude: -122.2648050 ``` Configuration variables: +- **server_token** (*Required*): A server token obtained from [developer.uber.com](https://developer.uber.com) after [creating an app](https://developer.uber.com/dashboard/create). - **start_latitude** (*Required*): The starting latitude for a trip. - **start_longitude** (*Required*): The starting longitude for a trip. - **end_latitude** (*Optional*): The ending latitude for a trip. While `end_latitude` is optional, it is strongly recommended to provide an `end_latitude`/`end_longitude` when possible as you will get more accurate price and time estimates. - **end_longitude** (*Optional*): The ending longitude for a trip. While `end_longitude` is optional, it is strongly recommended to provide an `end_latitude`/`end_longitude` when possible as you will get more accurate price and time estimates. -- **server_token** (*Required*): A server token obtained from [developer.uber.com](https://developer.uber.com) after [creating an app](https://developer.uber.com/dashboard/create). - **product_ids** (*Options*): A list of Uber product UUIDs. If provided, sensors will only be created for the given product IDs. Please note that product IDs are region and some times even more specific geographies based. The easiest way to find a UUID is to click on a sensor in the Home Assistant frontend and look for "Product ID" in the attributes. + +A full configuration entry could look like the sample below: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: uber + start_latitude: 37.8116380 + start_longitude: -122.2648050 + end_latitude: 37.7768520 + end_longitude: -122.4155500 + server_token: 'BeAPPTDsWZSHLf7fd9OWjZkIezweRw18Q8NltY27' + product_ids: + - '04a497f5-380d-47f2-bf1b-ad4cfdcb51f2' +``` From dc07843704826dbe0e28084d24526397e4cdf047 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 2 Oct 2016 17:14:42 +0200 Subject: [PATCH 32/70] Minimizing of the configuration sample (#1042) --- source/_components/sensor.bom.markdown | 1 - source/_components/sensor.forecast.markdown | 56 +++++++++---------- .../_components/sensor.nest_weather.markdown | 14 ++--- source/_components/sensor.netatmo.markdown | 26 +-------- .../sensor.openweathermap.markdown | 23 ++++---- .../sensor.swiss_hydrological_data.markdown | 1 - .../_components/sensor.wunderground.markdown | 7 +-- source/_components/sensor.yr.markdown | 50 ++++++++--------- source/_components/sensor.yweather.markdown | 35 ++++-------- source/_components/sun.markdown | 5 -- 10 files changed, 84 insertions(+), 134 deletions(-) diff --git a/source/_components/sensor.bom.markdown b/source/_components/sensor.bom.markdown index efbce70ef57..d60a96a085a 100644 --- a/source/_components/sensor.bom.markdown +++ b/source/_components/sensor.bom.markdown @@ -26,7 +26,6 @@ To add the BOM weather observation to your installation, add the following to yo # Example configuration.yaml entry sensor: - platform: bom - name: "optional name" zone_id: IDS60801 wmo_id: 94675 monitored_conditions: diff --git a/source/_components/sensor.forecast.markdown b/source/_components/sensor.forecast.markdown index 5f32c56d364..920c62249e5 100644 --- a/source/_components/sensor.forecast.markdown +++ b/source/_components/sensor.forecast.markdown @@ -26,34 +26,34 @@ To add Forecast.io to your installation, add the following to your `configuratio ```yaml # Example configuration.yaml entry sensor: - platform: forecast - api_key: YOUR_APP_KEY - monitored_conditions: - - summary - - icon - - nearest_storm_distance - - nearest_storm_bearing - - precip_type - - precip_intensity - - precip_probability - - temperature - - apparent_temperature - - dew_point - - wind_speed - - wind_bearing - - cloud_cover - - humidity - - pressure - - visibility - - ozone - - minutely_summary - - hourly_summary - - daily_summary - - temperature_max - - temperature_min - - apparent_temperature_max - - apparent_temperature_min - - precip_intensity_max + - platform: forecast + api_key: YOUR_APP_KEY + monitored_conditions: + - summary + - icon + - nearest_storm_distance + - nearest_storm_bearing + - precip_type + - precip_intensity + - precip_probability + - temperature + - apparent_temperature + - dew_point + - wind_speed + - wind_bearing + - cloud_cover + - humidity + - pressure + - visibility + - ozone + - minutely_summary + - hourly_summary + - daily_summary + - temperature_max + - temperature_min + - apparent_temperature_max + - apparent_temperature_min + - precip_intensity_max ``` Configuration variables: diff --git a/source/_components/sensor.nest_weather.markdown b/source/_components/sensor.nest_weather.markdown index 7d70c588926..3f00c3b081d 100644 --- a/source/_components/sensor.nest_weather.markdown +++ b/source/_components/sensor.nest_weather.markdown @@ -23,13 +23,13 @@ To set it up, add the following information to your `configuration.yaml` file: ```yaml sensor: - platform: nest - monitored_conditions: - - 'weather_temperature' - - 'weather_humidity' - - 'weather_condition' - - 'wind_speed' - - 'wind_direction' + - platform: nest + monitored_conditions: + - 'weather_temperature' + - 'weather_humidity' + - 'weather_condition' + - 'wind_speed' + - 'wind_direction' ``` Configuration variables: diff --git a/source/_components/sensor.netatmo.markdown b/source/_components/sensor.netatmo.markdown index 87ec4e8854b..213d89452d4 100644 --- a/source/_components/sensor.netatmo.markdown +++ b/source/_components/sensor.netatmo.markdown @@ -14,8 +14,6 @@ ha_category: Weather The `netatmo` sensor platform is consuming the information provided by a [Netatmo](https://www.netatmo.com) device. - - To enable the Netatmo sensor, you first have to set up [netatmo](/components/netatmo/), and add the following lines to your `configuration.yaml`: ```yaml @@ -26,37 +24,15 @@ sensor: modules: module_name1: - temperature - - humidity - - noise - - pressure - - co2 - - rain - - sum_rain_1 - - sum_rain_24 - - wifi_status module_name2: - temperature - battery_vp - - min_temp - - max_temp - rainmeter_name3: - - rain - - sum_rain_1 - - sum_rain_24 - - battery_vp - - rf_status - windmodule_name4: - - WindAngle - - WindStrength - - GustAngle - - GustStrength - - rf_status ``` Configuration variables: - **station** (*Optional*): The name of the weather station. Needed if several stations are associated with the account. -- **modules** (*Required*): Modules to use. Multiple entries allowed. +- **modules** (*Required*): Modules to use. Multiple entries allowed. Please checkthe next section about how to retrieve the module names. - **module_name** array (*Required*): Name of the module. - **temperature**: Current temperature. - **co2**: CO2 concentration in ppm. diff --git a/source/_components/sensor.openweathermap.markdown b/source/_components/sensor.openweathermap.markdown index 0207c3cc732..32bf1871d84 100644 --- a/source/_components/sensor.openweathermap.markdown +++ b/source/_components/sensor.openweathermap.markdown @@ -22,18 +22,17 @@ To add OpenWeatherMap to your installation, add the following to your `configura ```yaml # Example configuration.yaml entry sensor: - platform: openweathermap - api_key: YOUR_API_KEY - forecast: 0 or 1 - monitored_conditions: - - weather - - temperature - - wind_speed - - humidity - - pressure - - clouds - - rain - - snow + - platform: openweathermap + api_key: YOUR_API_KEY + monitored_conditions: + - weather + - temperature + - wind_speed + - humidity + - pressure + - clouds + - rain + - snow ``` Configuration variables: diff --git a/source/_components/sensor.swiss_hydrological_data.markdown b/source/_components/sensor.swiss_hydrological_data.markdown index 973fa36d4bb..5c499b9d2da 100644 --- a/source/_components/sensor.swiss_hydrological_data.markdown +++ b/source/_components/sensor.swiss_hydrological_data.markdown @@ -23,7 +23,6 @@ To enable this sensor, add the following lines to your `configuration.yaml` file # Example configuration.yaml entry sensor: platform: swiss_hydrological_data - name: Aare station: STATION_ID ``` diff --git a/source/_components/sensor.wunderground.markdown b/source/_components/sensor.wunderground.markdown index 00780d77a46..9370a983dd2 100644 --- a/source/_components/sensor.wunderground.markdown +++ b/source/_components/sensor.wunderground.markdown @@ -25,9 +25,8 @@ To add Wunderground to your installation, add the following to your `configurati ```yaml # Example configuration.yaml entry sensor: - platform: wunderground + - platform: wunderground api_key: your_api_key - pws_id: enter_pws_id monitored_conditions: - weather - temp_f @@ -60,8 +59,8 @@ sensor: ``` Configuration variables: -- **api_key** (Required): See above -- **pws_id** (Optional): You can enter a Personal Weather Station id. The current list of Wunderground PWS stations is available [here](https://www.wunderground.com/weatherstation/ListStations.asp). If you do not enter a PWS ID, the current location information (latitude and longitude) from your `configuration.yaml` will be used to display weather conditions. +- **api_key** (Required): See above. +- **pws_id** (Optional): You can enter a Personal Weather Station ID. The current list of Wunderground PWS stations is available [here](https://www.wunderground.com/weatherstation/ListStations.asp). If you do not enter a PWS ID, the current location information (latitude and longitude) from your `configuration.yaml` will be used to display weather conditions. - **monitored_conditions** array (*Required*): Conditions to display in the frontend. The following conditions can be monitored. - **weather**: A human-readable text summary with picture from Wunderground. - **temp_f**: Current temperature in Fahrenheit diff --git a/source/_components/sensor.yr.markdown b/source/_components/sensor.yr.markdown index 0cbeb4f7f0d..262b476d971 100644 --- a/source/_components/sensor.yr.markdown +++ b/source/_components/sensor.yr.markdown @@ -19,34 +19,9 @@ weather forecast is delivered by the Norwegian Meteorological Institute and the To add YR to your installation, add the following to your `configuration.yaml` file: ```yaml -# Will show a symbol for the current weather as default: +# Example configuration.yaml entry sensor: - platform: yr - -# Will show temperatue and wind direction: -sensor: - platform: yr - monitored_conditions: - - temperature - - windDirection - -# Will show all available sensors: -sensor: - platform: yr - monitored_conditions: - - temperature - - symbol - - precipitation - - windSpeed - - pressure - - windDirection - - humidity - - fog - - cloudiness - - lowClouds - - mediumClouds - - highClouds - - dewpointTemperature + - platform: yr ``` Configuration variables: @@ -66,3 +41,24 @@ Configuration variables: - **mediumClouds**: Medium cloud level. - **highClouds**: High cloud level. +A full configuration example can be found below: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: yr + monitored_conditions: + - temperature + - symbol + - precipitation + - windSpeed + - pressure + - windDirection + - humidity + - fog + - cloudiness + - lowClouds + - mediumClouds + - highClouds + - dewpointTemperature +``` diff --git a/source/_components/sensor.yweather.markdown b/source/_components/sensor.yweather.markdown index 91d9b34d7a0..c78ac5d06f3 100644 --- a/source/_components/sensor.yweather.markdown +++ b/source/_components/sensor.yweather.markdown @@ -26,30 +26,17 @@ To add Yahoo Weather to your installation, add the following to your `configurat ```yaml # Example configuration.yaml entry sensor: - platform: yweather - woeid: YOUR_WOEID - forecast: 0 until 5 - monitored_conditions: - - weather - - weather_current - - temp_min - - temp_max - - wind_speed - - pressure - - visibility - - humidity - - temperature - -# Example configuration.yaml entry with forecast -sensor: - platform: yweather - woeid: YOUR_WOEID - forecast: 3 - name: OPTIONAL_NAME - monitored_conditions: - - weather - - temp_min - - temp_max + - platform: yweather + monitored_conditions: + - weather + - weather_current + - temp_min + - temp_max + - wind_speed + - pressure + - visibility + - humidity + - temperature ``` Configuration variables: diff --git a/source/_components/sun.markdown b/source/_components/sun.markdown index 8a9ecdc6e0e..8d1283989d7 100644 --- a/source/_components/sun.markdown +++ b/source/_components/sun.markdown @@ -17,12 +17,7 @@ The sun component will use your current location to track if the sun is above or ```yaml # Example configuration.yaml entry -homeassistant: - latitude: 32.87336 - longitude: -117.22743 - sun: - elevation: 102 ``` Configuration variables: From ec5306e5794a3bcee697013f2089af96396632bd Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 2 Oct 2016 17:14:48 +0200 Subject: [PATCH 33/70] Minimizing of the configuration sample (#1041) --- .../device_sun_light_trigger.markdown | 14 ++++++++--- source/_components/http.markdown | 25 ++++++++++++------- source/_components/keyboard_remote.markdown | 16 ++++++------ source/_components/updater.markdown | 9 ++++++- source/_components/upnp.markdown | 3 +-- source/_components/zeroconf.markdown | 2 ++ 6 files changed, 46 insertions(+), 23 deletions(-) diff --git a/source/_components/device_sun_light_trigger.markdown b/source/_components/device_sun_light_trigger.markdown index dd2b298b2e1..e0a75a093c4 100644 --- a/source/_components/device_sun_light_trigger.markdown +++ b/source/_components/device_sun_light_trigger.markdown @@ -24,10 +24,6 @@ To enable this component, add the following lines to your `configuration.yaml` f ```yaml # Example configuration.yaml entry device_sun_light_trigger: - light_group: group.living_room - light_profile: relax - device_group: group.my_devices - disable_turn_off: 1 ``` Configuration variables: @@ -37,3 +33,13 @@ Configuration variables: - **device_group** (*Optional*): Specify which group of devices to track. - **disable_turn_off** (*Optional*): Disable lights being turned off when everybody leaves the house. +A full configuration example could look like this: + +```yaml +# Example configuration.yaml entry +device_sun_light_trigger: + light_group: group.living_room + light_profile: relax + device_group: group.my_devices + disable_turn_off: 1 +``` diff --git a/source/_components/http.markdown b/source/_components/http.markdown index 48046d17481..8f7f7308ec7 100644 --- a/source/_components/http.markdown +++ b/source/_components/http.markdown @@ -21,15 +21,6 @@ It's HIGHLY recommended that you set the `api_password`, especially if you are p # Example configuration.yaml entry http: api_password: YOUR_PASSWORD - server_port: 12345 - ssl_certificate: /etc/letsencrypt/live/hass.example.com/fullchain.pem - ssl_key: /etc/letsencrypt/live/hass.example.com/privkey.pem - cors_allowed_origins: - - https://google.com - - https://home-assistant.io - approved_ips: - - 127.0.0.1 - - 192.168.1.9 ``` Configuration variables: @@ -43,6 +34,22 @@ Configuration variables: - **cors_allowed_origins** (*Optional*): A list of origin domain names to allow [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing) requests from. Enabling this will set the `Access-Control-Allow-Origin` header to the Origin header if it is found in the list, and the `Access-Control-Allow-Headers` header to `Origin, Accept, X-Requested-With, Content-type, X-HA-access`. You must provide the exact Origin, i.e. `https://home-assistant.io` will allow requests from `https://home-assistant.io` but __not__ `http://home-assistant.io`. - **approved_ips** (*Optional*): A list of approved ips. Then it will be possible to login from given ips without providing a password. +The sample below shows a configuration entry with possible values: + +```yaml +# Example configuration.yaml entry +http: + api_password: YOUR_PASSWORD + server_port: 12345 + ssl_certificate: /etc/letsencrypt/live/hass.example.com/fullchain.pem + ssl_key: /etc/letsencrypt/live/hass.example.com/privkey.pem + cors_allowed_origins: + - https://google.com + - https://home-assistant.io + approved_ips: + - 127.0.0.1 + - 192.168.1.9 +``` The [Set up encryption using Let's Encrypt](/blog/2015/12/13/setup-encryption-using-lets-encrypt/) blog post gives you details about the encryption of your traffic using free certificates from [Let's Encrypt](https://letsencrypt.org/). diff --git a/source/_components/keyboard_remote.markdown b/source/_components/keyboard_remote.markdown index e386568cc27..8c61ba9a736 100644 --- a/source/_components/keyboard_remote.markdown +++ b/source/_components/keyboard_remote.markdown @@ -15,12 +15,10 @@ ha_iot_class: "Local Push" Recieve signals from a keyboard and use it as a remote control. -This component allows to use a keyboard as remote control. It will -fire ´keyboard_remote_command_received´ events witch can then be used -in automation rules. +This component allows to use a keyboard as remote control. It will fire `keyboard_remote_command_received` events witch can then be used +in automation rules. -The `evdev` package is used to interface with the keyboard and thus this -is Linux only. It also means you can't use your normal keyboard for this, +The `evdev` package is used to interface with the keyboard and thus this is Linux only. It also means you can't use your normal keyboard for this, because `evdev` will block it. @@ -28,10 +26,14 @@ because `evdev` will block it. # Example configuration.yaml entry keyboard_remote: device_descriptor: '/dev/input/by-id/foo' - key_value: 'key_up' # optional alternaive 'key_down' and 'key_hold' - # be carefull, 'key_hold' fires a lot of events + key_value: 'key_up' ``` +Configuration variables: + +- **device_descriptor** (*Required*): List of URLS for your feeds. +- **key_value** (*Required*): Possible values are `key_up`, `key_down`, and `key_hold`. Be careful, `key_hold` will fire a lot of events. + And an automation rule to bring breath live into it. ```yaml diff --git a/source/_components/updater.markdown b/source/_components/updater.markdown index 980653e0cd9..9d9edc19ef7 100644 --- a/source/_components/updater.markdown +++ b/source/_components/updater.markdown @@ -11,7 +11,14 @@ logo: home-assistant.png ha_category: Other --- -The updater component will check for new releases at startup and everyday at noon and midnight. It will show a badge in the frontend if a new version has been detected. +The `updater` component will check for new releases at startup and everyday at noon and midnight. It will show a badge in the frontend if a new version has been detected. + +To integrate this into Home Assistant, add the following section to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +updater: +``` For an added bonus, an automation component can be created to send a message with a notifier when that state of this component's entity changes. diff --git a/source/_components/upnp.markdown b/source/_components/upnp.markdown index 64061eb08a2..82d55b91d65 100644 --- a/source/_components/upnp.markdown +++ b/source/_components/upnp.markdown @@ -13,7 +13,6 @@ ha_release: 0.18 The `upnp` component automatically creates port forwarding mappings on your router for Home Assistant. UPnP or NAT-PMP needs to be enabled on your router for this component to work. -# Installation You need to install [miniupnpc](https://github.com/miniupnp/miniupnp/tree/master/miniupnpc) before using the UPnP component: ```bash @@ -24,7 +23,7 @@ $ make pythonmodule3 $ sudo make installpythonmodule3 ``` -# Configuration +To integrate this into Home Assistant, add the following section to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry diff --git a/source/_components/zeroconf.markdown b/source/_components/zeroconf.markdown index 0dcf8196519..890af110d26 100644 --- a/source/_components/zeroconf.markdown +++ b/source/_components/zeroconf.markdown @@ -13,6 +13,8 @@ ha_release: 0.18 The `zeroconf` component exposes your Home Assistant to the local network using [Zeroconf](https://en.wikipedia.org/wiki/Zero-configuration_networking). Zeroconf is also sometimes known as Bonjour, Rendezvous and Avahi. +To integrate this into Home Assistant, add the following section to your `configuration.yaml` file: + ```yaml # Example configuration.yaml entry zeroconf: From 1aca1ac201af00fb54293f1bcaa047a6f0de46b3 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 2 Oct 2016 17:18:11 +0200 Subject: [PATCH 34/70] Update IoT class --- source/_components/binary_sensor.mysensors.markdown | 1 + source/_components/climate.mysensors.markdown | 1 + source/_components/cover.mysensors.markdown | 1 + source/_components/light.mysensors.markdown | 1 + 4 files changed, 4 insertions(+) diff --git a/source/_components/binary_sensor.mysensors.markdown b/source/_components/binary_sensor.mysensors.markdown index 43b0610fd00..2d1c74226cf 100644 --- a/source/_components/binary_sensor.mysensors.markdown +++ b/source/_components/binary_sensor.mysensors.markdown @@ -10,6 +10,7 @@ footer: true logo: mysensors.png ha_category: Binary Sensor ha_release: 0.14 +ha_iot_class: "Local Push" --- Integrates MySensors binary sensors into Home Assistant. See the [main component] for configuration instructions. diff --git a/source/_components/climate.mysensors.markdown b/source/_components/climate.mysensors.markdown index 0f39382c8b1..1c1ce8cea03 100644 --- a/source/_components/climate.mysensors.markdown +++ b/source/_components/climate.mysensors.markdown @@ -10,6 +10,7 @@ footer: true logo: mysensors.png ha_category: Climate ha_release: 0.29 +ha_iot_class: "Local Push" --- Integrates MySensors HVAC into Home Assistant. See the [main component] for configuration instructions. diff --git a/source/_components/cover.mysensors.markdown b/source/_components/cover.mysensors.markdown index 15e87371017..c94ec4f57fb 100644 --- a/source/_components/cover.mysensors.markdown +++ b/source/_components/cover.mysensors.markdown @@ -10,6 +10,7 @@ footer: true logo: mysensors.png ha_category: Cover ha_release: "0.30" +ha_iot_class: "Local Push" --- Integrates MySensors covers into Home Assistant. See the [main component] for configuration instructions. diff --git a/source/_components/light.mysensors.markdown b/source/_components/light.mysensors.markdown index dbf689f0362..25abcbc9cfa 100644 --- a/source/_components/light.mysensors.markdown +++ b/source/_components/light.mysensors.markdown @@ -10,6 +10,7 @@ footer: true logo: mysensors.png ha_category: Light ha_release: 0.13 +ha_iot_class: "Local Push" --- Integrates MySensors lights into Home Assistant. See the [main component] for configuration instructions. From 2b567c7d519617cadce8c1ec0142c5466fb07e8f Mon Sep 17 00:00:00 2001 From: Martin Weinelt Date: Sun, 2 Oct 2016 04:40:14 +0200 Subject: [PATCH 35/70] document anel_pwrctrl platform https://github.com/home-assistant/home-assistant/pull/3644 --- .../_components/switch.anel_pwrctrl.markdown | 43 ++++++++++++++++++ source/images/supported_brands/anel.png | Bin 0 -> 46889 bytes 2 files changed, 43 insertions(+) create mode 100644 source/_components/switch.anel_pwrctrl.markdown create mode 100644 source/images/supported_brands/anel.png diff --git a/source/_components/switch.anel_pwrctrl.markdown b/source/_components/switch.anel_pwrctrl.markdown new file mode 100644 index 00000000000..de4c47d7f6f --- /dev/null +++ b/source/_components/switch.anel_pwrctrl.markdown @@ -0,0 +1,43 @@ +--- +layout: page +title: "ANEL PwrCtrl Switch" +description: "Instructions how to integrate ANEL PwrCtrl switches within Home Assistant." +date: 2016-10-02 19:04 +sidebar: true +comments: false +sharing: true +footer: true +logo: anel.png +ha_category: Switch +ha_iot_class: "Local Polling" +ha_release: 0.30 +--- + +The `anel_pwrctrl` switch platform allows you to control [ANEL PwrCtrl](http://anel-elektronik.de/SITE/produkte/produkte.htm) devices. + +Supported devices (tested): + +- PwrCtrl HUT + +To add this platform to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +switch: + platform: anel_pwrctrl + host: IP_ADDRESS + port_recv: PORT + port_send: PORT + username: USERNAME + password: PASSWORD +``` + +Configuration variables: + +- **host** (*Optional*): The IP address or hostname of your PwrCtrl device. +- **port_recv** (*Required*): The port to receive data from the device. +- **port_send** (*Required*): The port to send data to the device. +- **username** (*Required*): The username for your device. +- **password** (*Required*): The password for your device. + +

If no **host** is given the platform will try to autodiscover all devices on the network, that are listening on the given **port_recv**.

diff --git a/source/images/supported_brands/anel.png b/source/images/supported_brands/anel.png new file mode 100644 index 0000000000000000000000000000000000000000..c2001fd0052d7dfc5dacd85f953110b2b3989f2f GIT binary patch literal 46889 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

E2cC4D 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 cWWu_p|G4??*PB}GBP{Tvrlh4 Date: Mon, 3 Oct 2016 00:20:53 +0300 Subject: [PATCH 36/70] Small improvements to README file. --- README.markdown | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/README.markdown b/README.markdown index 892844c479d..20963175bfe 100644 --- a/README.markdown +++ b/README.markdown @@ -1,6 +1,6 @@ # Home Assistant website -This is the source for the [Home-Assistant.io website](https://home-assistant.io) for the [Home Assistant project](https://github.com/home-assistant/home-assistant) +The source of the [Home-Assistant.io website](https://home-assistant.io), for the [Home Assistant project](https://github.com/home-assistant/home-assistant) ## Setup @@ -8,15 +8,14 @@ Setting up to contribute to documentation and the process for submitting pull re ## Site preview +In order to make the preview available on [http://127.0.0.1:4000](http://127.0.0.1:4000), use the command as follows: + ```bash $ rake preview ``` -This makes the preview available on [http://127.0.0.1:4000](http://127.0.0.1:4000). - - ### Setup on Fedora and CentOS -On Fedora > 22 or CentOS 7.1.1503 Ruby is not available by default. Please take the notes here as a little guide for the Ruby installation process. +On Fedora 22 and later or CentOS 7.1.1503, Ruby is not available by default. Please take the notes here as a little guide for the Ruby installation process. ```bash $ curl -sSL https://rvm.io/mpapis.asc | gpg2 --import - From 63f10ca1a91fabebc9bd0c05a4b3174edb58bdaf Mon Sep 17 00:00:00 2001 From: Andreea-Daniela Ene Date: Mon, 3 Oct 2016 00:28:27 +0300 Subject: [PATCH 37/70] README small changes. --- README.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.markdown b/README.markdown index 20963175bfe..0eb74a918e0 100644 --- a/README.markdown +++ b/README.markdown @@ -1,6 +1,6 @@ # Home Assistant website -The source of the [Home-Assistant.io website](https://home-assistant.io), for the [Home Assistant project](https://github.com/home-assistant/home-assistant) +This is source for the [Home-Assistant.io website](https://home-assistant.io). ## Setup From ccca877dee54fd580c00d9a9232831caa647986f Mon Sep 17 00:00:00 2001 From: Andreea-Daniela Ene Date: Mon, 3 Oct 2016 00:28:40 +0300 Subject: [PATCH 38/70] Update README.markdown --- README.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.markdown b/README.markdown index 0eb74a918e0..4fb2a2aa347 100644 --- a/README.markdown +++ b/README.markdown @@ -1,6 +1,6 @@ # Home Assistant website -This is source for the [Home-Assistant.io website](https://home-assistant.io). +This is the source for the [Home-Assistant.io website](https://home-assistant.io). ## Setup From 307d401f64ce32e35a8d7baf9e4cd023599e7cde Mon Sep 17 00:00:00 2001 From: Rowan Date: Mon, 3 Oct 2016 09:46:41 +0100 Subject: [PATCH 39/70] Updated samsungtv.markdown (#1084) With correct explanation of the model numbers and removed the unnecessary parts of one TV's model number. --- source/_components/media_player.samsungtv.markdown | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/source/_components/media_player.samsungtv.markdown b/source/_components/media_player.samsungtv.markdown index 92a8b21fbfc..7b53cdc9d27 100644 --- a/source/_components/media_player.samsungtv.markdown +++ b/source/_components/media_player.samsungtv.markdown @@ -46,13 +46,14 @@ Currently known supported models: - F6500 - EH5600 - F6400AF - -If your model is not on the list then give it a test, if everything works correctly then add it to the list on [GitHub](https://github.com/home-assistant/home-assistant.io). -The two letters at the beginning of the model number represent the region, UE is Europe, UN is North America and UA is Asia & Australia. The two numbers following that represent the screen size. If you add your model remember to remove these before adding them to the list. - -There's currently a [known issue](https://github.com/home-assistant/home-assistant/issues/2098) with some TV's receiving a *Key press UP* that can interrupt certain applications. Currently tested but not working models: - KU6300 - Shows in GUI but unable to control. -- UE75H6400 - Shows in GUI but unable to control. +- H6400 - Shows in GUI but unable to control. + +If your model is not on the list then give it a test, if everything works correctly then add it to the list on [GitHub](https://github.com/home-assistant/home-assistant.io). +The first letter (U, P, L, H & K) represent the screen type, e.g. LED or Plasma. The second letter represents the region, E is Europe, N is North America and A is Asia & Australia. The two numbers following that represent the screen size. +If you add your model remember to remove these before adding them to the list. + +There's currently a [known issue](https://github.com/home-assistant/home-assistant/issues/2098) with some TV's receiving a *Key press UP* that can interrupt certain applications. From 9d454e51dbf769d86ca47a2fc9e22995b3a0fcbc Mon Sep 17 00:00:00 2001 From: Fredrik Lindqvist Date: Mon, 3 Oct 2016 12:10:12 +0200 Subject: [PATCH 40/70] Update media_player.samsungtv.markdown (#1085) Change link to page where you edit the list of supported models. --- source/_components/media_player.samsungtv.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/media_player.samsungtv.markdown b/source/_components/media_player.samsungtv.markdown index 7b53cdc9d27..ad4fecd560f 100644 --- a/source/_components/media_player.samsungtv.markdown +++ b/source/_components/media_player.samsungtv.markdown @@ -52,7 +52,7 @@ Currently tested but not working models: - KU6300 - Shows in GUI but unable to control. - H6400 - Shows in GUI but unable to control. -If your model is not on the list then give it a test, if everything works correctly then add it to the list on [GitHub](https://github.com/home-assistant/home-assistant.io). +If your model is not on the list then give it a test, if everything works correctly then add it to the list on [GitHub](https://github.com/home-assistant/home-assistant.github.io/tree/current/source/_components/media_player.samsungtv.markdown). The first letter (U, P, L, H & K) represent the screen type, e.g. LED or Plasma. The second letter represents the region, E is Europe, N is North America and A is Asia & Australia. The two numbers following that represent the screen size. If you add your model remember to remove these before adding them to the list. From 4bf49600b51f6f0e9ef5e77d6f0a7ae4a7d4abed Mon Sep 17 00:00:00 2001 From: Justin Weberg Date: Mon, 3 Oct 2016 08:20:19 -0500 Subject: [PATCH 41/70] Update config_dir in API docs --- source/developers/rest_api.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/developers/rest_api.markdown b/source/developers/rest_api.markdown index e9dc9cc6d3b..164df034752 100644 --- a/source/developers/rest_api.markdown +++ b/source/developers/rest_api.markdown @@ -91,6 +91,7 @@ Returns the current configuration as JSON. "longitude": 5.5678, "unit_system": "metric", "time_zone": "Europe/Zurich", + "config_dir": "/home/hass/.homeassistant", "version": "0.8.0.dev0" } ``` From 2f2a2adb3578498777dd549ce4dbb42269ab0c48 Mon Sep 17 00:00:00 2001 From: Fares Rihani Date: Mon, 3 Oct 2016 11:07:00 -0400 Subject: [PATCH 42/70] Update installation-vagrant.markdown #1052 (#1089) Minor spelling correction --- source/getting-started/installation-vagrant.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/getting-started/installation-vagrant.markdown b/source/getting-started/installation-vagrant.markdown index f6fec2de2b9..e17b06efe72 100644 --- a/source/getting-started/installation-vagrant.markdown +++ b/source/getting-started/installation-vagrant.markdown @@ -46,7 +46,7 @@ $ git config --global core.autocrlf input $ vagrant up ``` -This will download and start a virtual machine using Virtualbox, which will internally setup the development environment necessary to start Home Assistant process and run test suite as well. After the VM has started succesfully, the Home Assistant frontend will be accessible locally from your browser at [http://localhost:8123](http://localhost:8123) +This will download and start a virtual machine using Virtualbox, which will internally setup the development environment necessary to start Home Assistant process and run test suite as well. After the VM has started successfully, the Home Assistant frontend will be accessible locally from your browser at [http://localhost:8123](http://localhost:8123) ## {% linkable_title Stopping Vagrant %} From 2790f9b3fba1f0f964e50da0a368223412d34e54 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 3 Oct 2016 17:34:55 +0200 Subject: [PATCH 43/70] Add Volvo on Call docs (#1060) * Add initial volvooncall docs * Replace people with cars --- .../device_tracker.automatic.markdown | 2 +- .../device_tracker.volvooncall.markdown | 33 ++++++++++++++++++ source/images/supported_brands/volvo.png | Bin 0 -> 34779 bytes 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 source/_components/device_tracker.volvooncall.markdown create mode 100644 source/images/supported_brands/volvo.png diff --git a/source/_components/device_tracker.automatic.markdown b/source/_components/device_tracker.automatic.markdown index 638dc63c52b..6e1b998c26b 100644 --- a/source/_components/device_tracker.automatic.markdown +++ b/source/_components/device_tracker.automatic.markdown @@ -38,4 +38,4 @@ Configuration variables: - **password** (*Required*): The password for your given ODB reader account. - **devices** (*Optional*): The list of vehicle display names you wish to track. If not provided, all vehicles will be tracked. -See the [device tracker component page](/components/device_tracker/) for instructions how to configure the people to be tracked. +See the [device tracker component page](/components/device_tracker/) for instructions how to configure the cars to be tracked. diff --git a/source/_components/device_tracker.volvooncall.markdown b/source/_components/device_tracker.volvooncall.markdown new file mode 100644 index 00000000000..d09efd871db --- /dev/null +++ b/source/_components/device_tracker.volvooncall.markdown @@ -0,0 +1,33 @@ +--- +layout: page +title: "Volvo On Call" +description: "Instructions for how to integrate Volvo On Call into Home Assistant." +date: 2016-10-02 17:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: volvo.png +ha_category: Presence Detection +ha_release: "0.30" +--- + + +The `volvooncall` platform offers presence detection by retrieving your car's information from the [Volvo On Call](http://www.volvocars.com/intl/own/owner-info/volvo-on-call#) cloud service. + +To use Volvo On Call in your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +device_tracker: + - platform: volvooncall + username: username + password: password +``` + +Configuration variables: + +- **username** (*Required*): The username associated with your Volvo On Call account. +- **password** (*Required*): The password for your given Volvo On Call account. + +See the [device tracker component page](/components/device_tracker/) for instructions how to configure the cars to be tracked. diff --git a/source/images/supported_brands/volvo.png b/source/images/supported_brands/volvo.png new file mode 100644 index 0000000000000000000000000000000000000000..f29c360921a11806d69514f30c8fc33c25c575e0 GIT binary patch literal 34779 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 Jr7}h@{tv?6=w|=` literal 0 HcmV?d00001 From 8aa97d02c50ba45463f1c16f025d923f6896132c Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 4 Oct 2016 13:23:17 +0200 Subject: [PATCH 44/70] Add docs for statistics sensor (#999) * Add docs for statistics sensor * Minimizing of the configuration sample * Fix typo --- source/_components/sensor.statistics.markdown | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 source/_components/sensor.statistics.markdown diff --git a/source/_components/sensor.statistics.markdown b/source/_components/sensor.statistics.markdown new file mode 100644 index 00000000000..d2cc7e2a206 --- /dev/null +++ b/source/_components/sensor.statistics.markdown @@ -0,0 +1,35 @@ +--- +layout: page +title: "Statistics Sensor" +description: "Instructions how to integrate statistical sensors into Home Assistant." +date: 2016-09-28 12:10 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_category: Sensor +ha_iot_class: "Local Polling" +ha_release: "0.30" +--- + + +The `statistics` sensor platform is consuming the state from other sensors. Beside the maximal and the minimal value also the total, the mean, the median, the variance, and the standard deviation are as attributes available. If it's a binary sensor then only the state changes are counted. + +To enable the statistics sensor, add the following lines to your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: statistics + entity_id: sensor.cpu + - platform: statistics + entity_id: binary_sensor.movement +``` + +Configuration variables: + +- **entity_id** (*Required*): The entity to monitor. +- **name** (*Optional*): Name of the sensor to use in the frontend. +- **sampling_size** (*Optional*): Size of the sampling. If the limit is reached then the values are rotated. Defaults to `20`. + From acbcf6f426b1ba95448ecb3397acf2ca672b4cee Mon Sep 17 00:00:00 2001 From: David Date: Tue, 4 Oct 2016 16:36:24 +0200 Subject: [PATCH 45/70] Update templating.markdown (#1096) now and utcnow became functions in version 0.29 of Home Assistant --- source/_topics/templating.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_topics/templating.markdown b/source/_topics/templating.markdown index efd7660c255..5a84181d89f 100644 --- a/source/_topics/templating.markdown +++ b/source/_topics/templating.markdown @@ -70,8 +70,8 @@ Home Assistant adds extensions to allow templates to access all of the current s - `states('device_tracker.paulus')` will return the state string (not the object) of the given entity or `unknown` if it doesn't exist. - `is_state('device_tracker.paulus', 'home')` will test if the given entity is specified state. - `is_state_attr('device_tracker.paulus', 'battery', 40)` will test if the given entity is specified state. -- `now` will be rendered as current time in your time zone. -- `utcnow` will be rendered as UTC time. +- `now()` will be rendered as current time in your time zone. +- `utcnow()` will be rendered as UTC time. - `as_timestamp` will convert datetime object or string to UNIX timestamp - `distance()` will measure the distance in meters between home, entity, coordinates. - `closest()` will find the closest entity. From ac6d12296ae2ed0217288ff3766f2c2e958634ea Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 4 Oct 2016 17:16:15 +0200 Subject: [PATCH 46/70] Minimizing of the configuration sample (Z-Wave) (#1095) * Minimizing of the configuration sample * Update details --- source/getting-started/z-wave.markdown | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/source/getting-started/z-wave.markdown b/source/getting-started/z-wave.markdown index b0951255e39..af60281f9a4 100644 --- a/source/getting-started/z-wave.markdown +++ b/source/getting-started/z-wave.markdown @@ -30,7 +30,9 @@ $ sudo pip3 install --upgrade cython ``` Then get the OpenZWave files and switch to the `python3` branch: +

Do not use root to build python-openzwave as it will surely fail.

+ ```bash $ git clone https://github.com/OpenZWave/python-openzwave.git $ cd python-openzwave @@ -38,6 +40,7 @@ $ git checkout python3 $ PYTHON_EXEC=$(which python3) make build $ sudo PYTHON_EXEC=$(which python3) make install ``` +

Instead of `make install`, you can alternatively build your own python-openzwave package which can be easily uninstalled: @@ -58,17 +61,12 @@ With this installation, your `config_path` needed below will resemble: # Example configuration.yaml entry zwave: usb_path: /dev/ttyUSB0 - config_path: /usr/local/share/python-openzwave/config - polling_interval: 60000 - customize: - sensor.greenwave_powernode_6_port_energy_10: - polling_intensity: 1 ``` Configuration variables: -- **usb_path** (*Required*): The port where your device is connected to your Home Assistant host. -- **config_path** (*Optional*): The path to the Python OpenZWave configuration files. +- **usb_path** (*Optional*): The port where your device is connected to your Home Assistant host. +- **config_path** (*Optional*): The path to the Python OpenZWave configuration files. Defaults to the folder `config` in your Python OpenZWave install directory. - **autoheal** (*Optional*): Allows disabling auto Z-Wave heal at midnight. Defaults to True. - **polling_interval** (*Optional*): The time period in milliseconds between polls of a nodes value. Be careful about using polling values below 30000 (30 seconds) as polling can flood the zwave network and cause problems. - **customize** (*Optional*): This attribute contains node-specific override values: @@ -121,6 +119,7 @@ You can replace these values with your own 16 byte network key. For more informa ### {% linkable_title Events %} #### {% linkable_title zwave.network_complete %} + Home Assistant will trigger a event when the Z-Wave network is complete. Meaning all of the nodes on the network have been queried. This can take quite som time, depending on wakeup intervals on the battery powered devices on the network. ```yaml @@ -131,6 +130,7 @@ Home Assistant will trigger a event when the Z-Wave network is complete. Meaning ``` #### {% linkable_title zwave.network_ready %} + Home Assistant will trigger a event when the Z-Wave network is ready for use. Between `zwave.network_start` and `zwave.network_ready` Home Assistant will feel sluggish when trying to send commands to Z-Wave nodes. This is because the controller is requesting information from all of the nodes on the network. When this is triggered all awake nodes have been queried and sleeping nodes will be queried when they awake. ```yaml @@ -141,6 +141,7 @@ Home Assistant will trigger a event when the Z-Wave network is ready for use. Be ``` #### {% linkable_title zwave.network_start %} + Home Assistant will trigger a event when the Z-Wave network is set up to be started. ```yaml @@ -151,6 +152,7 @@ Home Assistant will trigger a event when the Z-Wave network is set up to be star ``` #### {% linkable_title zwave.network_stop %} + Home Assistant will trigger a event when the Z-Wave network stopping. ```yaml @@ -180,6 +182,7 @@ Example: The *object_id* and *basic_level* of all triggered events can be seen in the console output. #### {% linkable_title zwave.scene_activated %} + Some devices can also trigger scene activation events, which can be used in automation scripts (for example the press of a button on a wall switch): ```yaml From 0070171c76e61635bd17e8021029fbedcac9c3eb Mon Sep 17 00:00:00 2001 From: Simon Szustkowski Date: Tue, 4 Oct 2016 17:27:34 +0200 Subject: [PATCH 47/70] Fixed 404s (#1109) --- source/_components/tellstick.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/tellstick.markdown b/source/_components/tellstick.markdown index 780d249cbf9..a7968cccb00 100644 --- a/source/_components/tellstick.markdown +++ b/source/_components/tellstick.markdown @@ -12,7 +12,7 @@ ha_category: Hub --- -The `tellstick` component integrates [TellStick](http://www.telldus.se/products/tellstick) devices into Home Assistant. This integration allows users to add switches, lights, and sensors which are communicating with 433 Mhz. There are a number of vendors (Capidi Elro, Intertechno, Nexa, Proove, Sartano, and Viking) who are selling products that work with TellStick. For more details, please check the TellStick [compatibility list](http://telldus.se/products/compability). +The `tellstick` component integrates [TellStick](http://www.telldus.se/products/tellstick) devices into Home Assistant. This integration allows users to add switches, lights, and sensors which are communicating with 433 Mhz. There are a number of vendors (Capidi Elro, Intertechno, Nexa, Proove, Sartano, and Viking) who are selling products that work with TellStick. For more details, please check the TellStick [protocol list](http://developer.telldus.com/wiki/TellStick_conf). To get started, add the devices to your `configuration.yaml` file. From 8a7a6f6fc4ab2ae552973f566d7d532843ea5167 Mon Sep 17 00:00:00 2001 From: Sjors Spoorendonk Date: Tue, 4 Oct 2016 17:28:29 +0200 Subject: [PATCH 48/70] Changed wrong version number (#1103) --- source/_posts/2016-09-29-async-sleepiq-emoncms-stocks.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2016-09-29-async-sleepiq-emoncms-stocks.markdown b/source/_posts/2016-09-29-async-sleepiq-emoncms-stocks.markdown index b048de5d6f9..91c759a26d0 100644 --- a/source/_posts/2016-09-29-async-sleepiq-emoncms-stocks.markdown +++ b/source/_posts/2016-09-29-async-sleepiq-emoncms-stocks.markdown @@ -91,7 +91,7 @@ Since 0.28 [automation rules](/blog/2016/09/10/notify-group-reload-api-pihole/#r - Fix Climate Nest platform (@tchellomello, @jawilson) -### {% linkable_title Hotfix 0.29.5 - October 1 %} +### {% linkable_title Hotfix 0.29.6 - October 1 %} - Fix segmentation fault ([@bbangert], fixes #3453) 🎉 - Fix nested templates in `data_template` would incorrectly get cached ([@balloob]) From b4a45a868c856ddaf038033c5b5d39fb2be1d525 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 4 Oct 2016 18:37:49 +0200 Subject: [PATCH 49/70] Add header and auth details incl. sample (#1050) --- source/_components/sensor.rest.markdown | 34 ++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/source/_components/sensor.rest.markdown b/source/_components/sensor.rest.markdown index 755ecedafae..ffd99ff663a 100644 --- a/source/_components/sensor.rest.markdown +++ b/source/_components/sensor.rest.markdown @@ -37,12 +37,16 @@ sensor: Configuration variables: - **resource** (*Required*): The resource or endpoint that contains the value. -- **method** (*Optional*): The method of the request. Default is GET. +- **method** (*Optional*): The method of the request. Default is `GET`. - **value_template** (*Optional*): Defines a [template](/topics/templating/) to extract the value. - **payload** (*Optional*): The payload to send with a POST request. Depends on the service, but usually formed as JSON. - **name** (*Optional*): Name of the REST sensor. - **unit_of_measurement** (*Optional*): Defines the unit of measurement of the sensor, if any. -- **verify_ssl** (*Optional*): Verify the certification of the endpoint. Default to True. +- **verify_ssl** (*Optional*): Verify the certification of the endpoint. Default to `True`. +- **authentication** (*Optional*): Type of the HTTP authentication. `basic` or `digest`. +- **username** (*Optional*): The username for accessing the REST endpoint. +- **password** (*Optional*): The password for accessing the REST endpoint. +- **headers** (*Optional*): The headers for the requests.

Make sure that the URL matches exactly your endpoint or resource. @@ -90,7 +94,6 @@ Add something similar to the entry below to your `configuration.yaml` file: The Home Assistant [API](/developers/rest_api/) exposes the data from your attached sensors. If you are running multiple Home Assistant instances which are not [connected](/developers/architecture/#multiple-connected-instances) you can still get information from them. - ```yaml - platform: rest resource: http://IP_ADDRESS:8123/api/states/sensor.weather_temperature @@ -98,4 +101,29 @@ The Home Assistant [API](/developers/rest_api/) exposes the data from your attac value_template: {% raw %}'{{ value_json.state }}'{% endraw %} unit_of_measurement: "°C" ``` +### {% linkable_title Accessing a HTTP authentication protected endpoint %} + +The REST sensor supports HTTP authentication and customized headers. + +```yaml + - platform: rest + resource: http://IP_ADDRESS:5000/sensor + username: ha1 + password: test1 + authetication: basic + headers: + User-agent: Home Assistant + Content-Type: application/json +``` + +The header will contains all relevant details. This will give you the flexibility to access also endpoints wich are protected by Tokens. + +```bash +Content-Length: +Host: IP_ADDRESS1:5000 +Authorization: Basic aGExOnRlc3Qx +Accept-Encoding: identity +Content-Type: application/json +User-Agent: Home Assistant +``` From 5897cd0743a0c5eef8428d9d04308b4aee3db3c0 Mon Sep 17 00:00:00 2001 From: Ryan Spicer Date: Tue, 4 Oct 2016 13:49:42 -0700 Subject: [PATCH 50/70] add documentation for home-assistant/home-assistant/ pull request 3449, supporting color temperature adjustment for mqtt lights. (#961) --- source/_components/light.mqtt.markdown | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/_components/light.mqtt.markdown b/source/_components/light.mqtt.markdown index 96985cd527b..0754bd7ae95 100644 --- a/source/_components/light.mqtt.markdown +++ b/source/_components/light.mqtt.markdown @@ -36,9 +36,12 @@ Configuration variables: - **brightness_command_topic** (*Optional*): The MQTT topic to publish commands to change the light's brightness. - **rgb_state_topic** (*Optional*): The MQTT topic subscribed to receive RGB state updates. - **rgb_command_topic** (*Optional*): The MQTT topic to publish commands to change the light's RGB state. +- **color_temp_state_topic** (*Optional*): The MQTT topic subscribed to receive color temperature state updates. +- **color_temp_command_topic** (*Optional*): The MQTT topic to publish commands to change the light's color temperature state. - **state_value_template** (*Optional*): Defines a [template](/topics/templating/) to extract the state value. - **brightness_value_template** (*Optional*): Defines a [template](/topics/templating/) to extract the brightness value. - **rgb_value_template** (*Optional*): Defines a [template](/topics/templating/) to extract the RGB value. +- **color_temp_value_template** (*Optional*): Defines a [template](/topics/templating/) to extract the color temperature value. - **brightness_scale** (*Optional*): Defines the maximum brightness value (i.e. 100%) of the MQTT device (defaults to 255). - **qos** (*Optional*): The maximum QoS level of the state topic. Default is 0 and will also be used to publishing messages. - **payload_on** (*Optional*): The payload that represents enabled state. Default is "ON". @@ -99,4 +102,3 @@ light: ### {% linkable_title Implementations %} A basic example using a nodeMCU board (ESP8266) to control its built-in led (on/off) can be found [here](https://github.com/mertenats/open-home-automation/tree/master/ha_mqtt_light). [Here](https://github.com/mertenats/open-home-automation/tree/master/ha_mqtt_rgb_light) is another example to control a RGB led (on/off, brightness and colors). - From 946b7b0b6c01873dbe6544343a2e08057a83b829 Mon Sep 17 00:00:00 2001 From: Klaas Hoekema Date: Tue, 4 Oct 2016 16:51:04 -0400 Subject: [PATCH 51/70] Document forecast sensor update_interval option (#990) --- source/_components/sensor.forecast.markdown | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/source/_components/sensor.forecast.markdown b/source/_components/sensor.forecast.markdown index 920c62249e5..2df618fcc9e 100644 --- a/source/_components/sensor.forecast.markdown +++ b/source/_components/sensor.forecast.markdown @@ -84,5 +84,17 @@ Configuration variables: - **precip_intensity_max**: Today's expected maximum intensity of precipitation. - **units** (*Optional*): Specify the unit system. Default to `si` or `us` based on the temperature preference in Home Assistant. Other options are `auto`, `us`, `si`, `ca`, and `uk2`. `auto` will let forecast.io decide the unit system based on location. +- **update_inverval** (*Optional*): Minimum time interval between updates. Default is 2 minutes. Supported formats: + - `update_interval: 'HH:MM:SS'` + - `update_interval: 'HH:MM'` + - Time period dictionary, e.g.: +

update_interval:
+        # At least one of these must be specified:
+        days: 0
+        hours: 0
+        minutes: 3
+        seconds: 30
+        milliseconds: 0
+    
Details about the API are available in the [Forecast.io documentation](https://developer.forecast.io/docs/v2). From 245e67d7b4a6079bdb5ad100d49620d6e8b8b74b Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Tue, 4 Oct 2016 13:55:34 -0700 Subject: [PATCH 52/70] Add pull request template --- .github/PULL_REQUEST_TEMPLATE.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000000..a4ab4b9c9a4 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,13 @@ +--- + +***DELETE EVERYTHING BEFORE SUBMITTING YOUR PULL REQUEST!*** + +Please select the most appropriate labels on the right hand side (such as `logo-update` or `language-fix`). _If this is for **Hacktoberfest**, make sure to select the yellow Hacktoberfest logo or you may not get credit_. + +If you are submitting docs that depend on a pull request to be merged in Home Assistant please reference the PR like so: + +`home-assistant/home-assistant#` + +Thanks for submitting! + +--- From 6b681c10de23a19a00f263761c27421a04dab456 Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Tue, 4 Oct 2016 19:12:50 -0700 Subject: [PATCH 53/70] Remove note about labeling --- .github/PULL_REQUEST_TEMPLATE.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index a4ab4b9c9a4..98b1d287d55 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -2,8 +2,6 @@ ***DELETE EVERYTHING BEFORE SUBMITTING YOUR PULL REQUEST!*** -Please select the most appropriate labels on the right hand side (such as `logo-update` or `language-fix`). _If this is for **Hacktoberfest**, make sure to select the yellow Hacktoberfest logo or you may not get credit_. - If you are submitting docs that depend on a pull request to be merged in Home Assistant please reference the PR like so: `home-assistant/home-assistant#` From 2b62dd10e42461e3b9159118896154eaeaccec8d Mon Sep 17 00:00:00 2001 From: John Arild Berentsen Date: Wed, 5 Oct 2016 06:46:55 +0200 Subject: [PATCH 54/70] #3696 in Homeassistant (#1121) Updates for #3696 in Homeassistant --- source/getting-started/z-wave.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/getting-started/z-wave.markdown b/source/getting-started/z-wave.markdown index af60281f9a4..5f611a7160e 100644 --- a/source/getting-started/z-wave.markdown +++ b/source/getting-started/z-wave.markdown @@ -210,6 +210,7 @@ The `zwave` component exposes ten services to help maintain the network. | cancel_command | Cancels a running Z-Wave command. If you have started a add_node or remove_node command, and decides you are not going to do it, then this must be used to stop the inclusion/exclusion command. | | heal_network | Tells the controller to "heal" the Z-Wave network. Bascially asks the nodes to tell the controller all of their neighbors so the controller can refigure out optimal routing. | | remove_node | Put the Z-Wave controller in exclusion mode. Allows one to remove a device from the Z-Wave network.| +| set_config_parameter | Let's the user set a config parameter to a node. | soft_reset | Tells the controller to do a "soft reset". This is not supposed to lose any data, but different controllers can behave differently to a "soft reset" command.| | start_network | Starts the Z-Wave network.| | stop_network | Stops the Z-Wave network.| From 95e6ea9f851aee8c8bd194236ccf115d45c4e44c Mon Sep 17 00:00:00 2001 From: gwendalg Date: Tue, 4 Oct 2016 21:58:06 -0700 Subject: [PATCH 55/70] Add TED5000 documentation (#998) * Add TED5000 documentation Signed-off-by: Gwendal Grignou * Update sensor.ted5000.markdown * Update sensor.ted5000.markdown Use MTU instead of mtu throughout. * Update sensor.ted5000.markdown Reflect simpler configuration setup. Signed-off-by: Gwendal Grignou --- source/_components/sensor.ted5000.markdown | 41 +++++++++++++++++++++ source/images/supported_brands/ted.png | Bin 0 -> 23008 bytes 2 files changed, 41 insertions(+) create mode 100644 source/_components/sensor.ted5000.markdown create mode 100644 source/images/supported_brands/ted.png diff --git a/source/_components/sensor.ted5000.markdown b/source/_components/sensor.ted5000.markdown new file mode 100644 index 00000000000..6281208e0c4 --- /dev/null +++ b/source/_components/sensor.ted5000.markdown @@ -0,0 +1,41 @@ +--- +layout: page +title: "TED5000 electricity monitoring" +description: "How to add a TED5000 to Home Assistant." +date: 2016-09-27 11:19 +sidebar: true +comments: false +sharing: true +footer: true +logo: ted.png +ha_category: Sensor +ha_release: 0.30 + +The `ted 5000` monitors electricity consumption/production by connecting to the +[TED](http://www.theenergydetective.com/home) gateway, itself connected to one +or several Measuring Transmitting Units (MTU). +The platform creates up to two sensors per MTU, one for Wattage the other for +Voltage. If you want to enable the ted5000 sensor, add the following lines to +your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +sensor: + platform: ted5000 + name: main + host: 192.168.1.100 + port: 80 +``` + +Configuration variables: + +- **host** (*Required*): The IP address of your ted gateway. +- **port** (*Optional*): The port of your ted gateway. Defaults to 80. +- **name** (*Optional*): Name of the ted gateway. Defaults to ted. + +For each plugged MTU, using an index starting at 1, the platorm creates 2 sensors: +```yaml +sensor._mtu_power +sensor._mtu_voltage +``` + diff --git a/source/images/supported_brands/ted.png b/source/images/supported_brands/ted.png new file mode 100644 index 0000000000000000000000000000000000000000..fe196f3dacdbb09715501eaab1b19c43a6e655be GIT binary patch literal 23008 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 literal 0 HcmV?d00001 From 967ace40e7549dd2c821ff8abd748a7c59491317 Mon Sep 17 00:00:00 2001 From: Phil Hawthorne Date: Wed, 5 Oct 2016 19:27:17 +1100 Subject: [PATCH 56/70] Add Pushbullet and Home Assistant version to update notification (#1100) * Add Pushbullet and Home Assistant version to update notification Adds an example configuration for someone who wants to be alerted when a new Home Assistant is released, and they would like the notification to include the new Home Assistant version in the message. * Add extra line after code example --- .../notify_if__new_ha_release.markdown | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/source/_cookbook/notify_if__new_ha_release.markdown b/source/_cookbook/notify_if__new_ha_release.markdown index 1c760a8b3f4..62e92ac57af 100644 --- a/source/_cookbook/notify_if__new_ha_release.markdown +++ b/source/_cookbook/notify_if__new_ha_release.markdown @@ -30,3 +30,25 @@ automation: data: message: 'There is a new Home Assistant release available.' ``` + +You can use [templates](/topics/templating/) to include the release number of Home Assistant if you prefer. The following example sends a notification via [Pushbullet](/components/notify.pushbullet/) with the Home Assistant version in the message. + +```yaml +notify: + platform: pushbullet + api_key: 'YOUR_KEY_HERE' + name: pushbullet + +automation: + - alias: Update notifications + trigger: + - platform: state + entity_id: updater.updater + action: + service: notify.pushbullet + data: + title: 'New Home Assistant Release' + target: 'YOUR_TARGET_HERE' #See Pushbullet component for usage + message: "Home Assistant {{ states.updater.updater.state }} is now available." +``` + From 0aec729ee5742cf1aa4297a5bf7593c48504f4ca Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 5 Oct 2016 11:56:08 +0200 Subject: [PATCH 57/70] Fix typo --- source/_components/sensor.rest.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.rest.markdown b/source/_components/sensor.rest.markdown index ffd99ff663a..366b5d644ee 100644 --- a/source/_components/sensor.rest.markdown +++ b/source/_components/sensor.rest.markdown @@ -110,7 +110,7 @@ The REST sensor supports HTTP authentication and customized headers. resource: http://IP_ADDRESS:5000/sensor username: ha1 password: test1 - authetication: basic + authentication: basic headers: User-agent: Home Assistant Content-Type: application/json From 76b28dec89db4a1e479bdb96b88bd0808cf9303a Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 5 Oct 2016 12:36:59 +0200 Subject: [PATCH 58/70] Add GitHub example --- source/_components/sensor.rest.markdown | 34 ++++++++++++++++++++----- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/source/_components/sensor.rest.markdown b/source/_components/sensor.rest.markdown index 366b5d644ee..6a5dc02e432 100644 --- a/source/_components/sensor.rest.markdown +++ b/source/_components/sensor.rest.markdown @@ -19,8 +19,8 @@ To enable this sensor, add the following lines to your `configuration.yaml` file ```yaml # Example configuration.yaml entry sensor: - platform: rest - resource: http://IP_ADDRESS/ENDPOINT + - platform: rest + resource: http://IP_ADDRESS/ENDPOINT ``` or for a POST request: @@ -28,10 +28,10 @@ or for a POST request: ```yaml # Example configuration.yaml entry sensor: - platform: rest - resource: http://IP_ADDRESS/ENDPOINT - method: POST - payload: '{ "device" : "heater" }' + - platform: rest + resource: http://IP_ADDRESS/ENDPOINT + method: POST + payload: '{ "device" : "heater" }' ``` Configuration variables: @@ -70,6 +70,7 @@ You can find your external IP address using the service [JSON Test](http://www.j To display the IP address, the entry for a sensor in the `configuration.yaml` file will look like this. ```yaml +sensor: - platform: rest resource: http://ip.jsontest.com name: External IP @@ -83,6 +84,7 @@ The [glances](/components/sensor.glances/) sensor is doing the exact same thing Add something similar to the entry below to your `configuration.yaml` file: ```yaml +sensor: - platform: rest resource: http://IP_ADRRESS:61208/api/2/mem/used name: Used mem @@ -95,6 +97,7 @@ Add something similar to the entry below to your `configuration.yaml` file: The Home Assistant [API](/developers/rest_api/) exposes the data from your attached sensors. If you are running multiple Home Assistant instances which are not [connected](/developers/architecture/#multiple-connected-instances) you can still get information from them. ```yaml +sensor: - platform: rest resource: http://IP_ADDRESS:8123/api/states/sensor.weather_temperature name: Temperature @@ -106,6 +109,7 @@ The Home Assistant [API](/developers/rest_api/) exposes the data from your attac The REST sensor supports HTTP authentication and customized headers. ```yaml +sensor: - platform: rest resource: http://IP_ADDRESS:5000/sensor username: ha1 @@ -127,3 +131,21 @@ Content-Type: application/json User-Agent: Home Assistant ``` +### {% linkable_title Use GitHub to get the latest release of Home Assistant %} + +This sample is very similar to the [`updater`](/components/updater/) component but the information are recieved from GitHub. + +```yaml +sensor: + - platform: rest + resource: https://api.github.com/repos/home-assistant/home-assistant/releases/latest + username: YOUR_GITHUB_USERNAME + password: YOUR_GITHUB_ACCESS_TOKEN + authentication: basic + value_template: '{% raw %}{{ value_json.tag_name }}{% endraw %}' + headers: + Accept: application/vnd.github.v3+json + Content-Type: application/json + User-Agent: Home Assistant REST sensor +``` + From 55e6b5e922ce5409a9529f4d701e30a237950740 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 6 Oct 2016 00:09:43 +0200 Subject: [PATCH 59/70] Add Dark Sky documentation (#992) * Add dark_sky sensor docs * Add Dark Sky logo * Add deprecation warning * Fix links * Change category --- source/_components/sensor.dark_sky.markdown | 88 ++++++++++++++++++++ source/_components/sensor.forecast.markdown | 8 +- source/images/supported_brands/dark_sky.png | Bin 0 -> 8144 bytes 3 files changed, 94 insertions(+), 2 deletions(-) create mode 100644 source/_components/sensor.dark_sky.markdown create mode 100644 source/images/supported_brands/dark_sky.png diff --git a/source/_components/sensor.dark_sky.markdown b/source/_components/sensor.dark_sky.markdown new file mode 100644 index 00000000000..0f65aab148c --- /dev/null +++ b/source/_components/sensor.dark_sky.markdown @@ -0,0 +1,88 @@ +--- +layout: page +title: "Dark Sky" +description: "How to integrate Dark Sky within Home Assistant." +date: 2016-09-26 08:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: dark_sky.png +ha_category: Weather +featured: true +ha_release: 0.30 +--- + +The `dark_sky` platform uses the [Dark Sky](https://darksky.net/) web service as a source for meteorological data for your location. The location is based on the `longitude` and `latitude` coordinates configured in your `configuration.yaml` file. The coordinates are auto-detected but to take advantage of the hyper-local weather reported by Dark Sky, you can refine them down to your exact home address. GPS coordinates can be found by using [Google Maps](https://www.google.com/maps) and clicking on your home or [Openstreetmap](http://www.openstreetmap.org/). + +You need an API key which is free but requires [registration](hhttps://darksky.net/dev/register). You can make up to 1000 calls per day for free which means that you could make one approximately every 86 seconds. + +

+[Dark Sky](https://darksky.net/) will charge you $0.0001 per API call if you enter your credit card details and create more than 1000 calls per day. +

+ +To add Dark Sky to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + platform: dark_sky + api_key: YOUR_APP_KEY + monitored_conditions: + - summary + - icon + - nearest_storm_distance + - nearest_storm_bearing + - precip_type + - precip_intensity + - precip_probability + - temperature + - apparent_temperature + - dew_point + - wind_speed + - wind_bearing + - cloud_cover + - humidity + - pressure + - visibility + - ozone + - minutely_summary + - hourly_summary + - daily_summary + - temperature_max + - temperature_min + - apparent_temperature_max + - apparent_temperature_min + - precip_intensity_max +``` + +Configuration variables: + +- **api_key** (*Required*): Your API key. +- **monitored_conditions** array (*Required*): Conditions to display in the frontend. + - **summary**: A human-readable text summary of the current conditions. + - **precip_type**: The type of precipitation occurring. + - **precip_intensity**: The average expected intensity of precipitation occurring. + - **precip_probability**: A value between 0 and 1 which is representing the probability of precipitation. + - **temperature**: The current temperature. + - **apparent_temperature**: A numerical value representing the apparent (or "feels like") temperature. + - **dew_point**: The dew point. + - **wind_speed**: The wind speed. + - **wind_bearing**: Where the wind is coming from in degrees, with true north at 0° and progressing clockwise. + - **cloud_cover**: The percentage of sky occluded by clouds. + - **humidity**: The relative humidity. + - **pressure**: The sea-level air pressure in millibars. + - **visibility**: The average visibility. + - **ozone**: The columnar density of total atmospheric ozone in Dobson. + - **minutely_summary**: A human-readable text summary for the next hour. + - **hourly_summary**: A human-readable text summary for the next 24 hours. + - **daily_summary**: A human-readable text summary for the next 7 days. + - **temperature_max**: Today's expected high temperature. + - **temperature_min**: Today's expected low temperature. + - **apparent_temperature_max**: Today's expected apparent high temperature. + - **apparent_temperature_min**: Today's expected apparent low temperature. + - **precip_intensity_max**: Today's expected maximum intensity of precipitation. +- **units** (*Optional*): Specify the unit system. Default to `si` or `us` based on the temperature preference in Home Assistant. Other options are `auto`, `us`, `si`, `ca`, and `uk2`. +`auto` will let forecast.io decide the unit system based on location. + +Details about the API are available in the [Dark Sky documentation](https://darksky.net/dev/docs). diff --git a/source/_components/sensor.forecast.markdown b/source/_components/sensor.forecast.markdown index 2df618fcc9e..defae7beba4 100644 --- a/source/_components/sensor.forecast.markdown +++ b/source/_components/sensor.forecast.markdown @@ -8,11 +8,15 @@ comments: false sharing: true footer: true logo: forecast.png -ha_category: Weather -featured: true +ha_category: Deprecated +featured: False ha_release: pre 0.7 --- +

+**This platform has been deprecated in favor of the "[dark_sky](/components/sensor.dark_sky/)" platform and will be removed in the future. Please use the "dark_sky" platform.** +

+ The `forecast` platform uses the [Forecast.io](https://forecast.io/) web service as a source of meteorological data for your location. The location is based on the `longitude` and `latitude` coordinates configured in your `configuration.yaml` file. The coordinates are auto-detected but to take advantage of the hyper-local weather reported by forecast.io, you can refine them down to your exact home address. GPS coordinates can be found by using [Google Maps](https://www.google.com/maps) and clicking on your home or [Openstreetmap](http://www.openstreetmap.org/). You need an API key which is free but requires [registration](https://developer.forecast.io/register). You can make up to 1000 calls per day for free which means that you could make one approximately every 86 seconds. diff --git a/source/images/supported_brands/dark_sky.png b/source/images/supported_brands/dark_sky.png new file mode 100644 index 0000000000000000000000000000000000000000..b9854dff5188b90d2495941f81649eb2425b2780 GIT binary patch literal 8144 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 Date: Thu, 6 Oct 2016 06:57:37 +0200 Subject: [PATCH 60/70] Update z-wave-device-specific.markdown (#1135) * Update z-wave-device-specific.markdown Add info and example of entry in dev-service to set configuration parameter for zwave. Add more info on security devices. * Update z-wave-device-specific.markdown --- .../z-wave-device-specific.markdown | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/source/getting-started/z-wave-device-specific.markdown b/source/getting-started/z-wave-device-specific.markdown index c96d2e853ca..6c1b10ef605 100644 --- a/source/getting-started/z-wave-device-specific.markdown +++ b/source/getting-started/z-wave-device-specific.markdown @@ -11,15 +11,32 @@ footer: true ##### {% linkable_title Motion or alarm sensors %} -In order for Home Assistant to recognize well the sensor, you will need to change its configuration from `Basic Set (default)` to `Binary Sensor report` or `Alarm report`. Currently there's no way to do this in Home Assistant but you can use ozwcp (OpenZWave control panel), Domoticz or similar to do it. +In order for Home Assistant to recognize well the sensor, you will need to change its configuration from `Basic Set (default)` to `Binary Sensor report` or `Alarm report`. These devices will either show as a binary sensor or a sensor called `Alarm xxxx` and will report a numeric value. Test to see what value is what. Sometimes this is noted in the device manual. +As of version 0.30 you can set the settings of a Z-Wave device through the dev_service page of Home Assistant with the service: `zwave/set_config_parameter`. + +The following parameters can be entered: +- **entity_id** (*Required*): The entity_id of the device that you are going to set a parameter to. Any entity_id of the node can be used. +- **parameter** (*Required*): The index number of the parameter to be set. Refer to device manual or zwcfg_[home_id].xml +- **value** (*Required*): The value to set the parameter to. Refer to device manual or zwcfg_[home_id].xml +- **size** (*Optional*): The size of the value. It is normally not needed to specify this parameter, but in some cases it's needed. Check OZW.log for details on this. +You should check OZW.log to see if setting has been set +Example entry in dev-service, setting binary report for Aeotec multisensor 6: +```yaml +# Example entry in dev-service +{"entity_id": "sensor.aetoec_multisensor_6_luminance_5", +"parameter": "5", +"value": "2" +} +``` ##### {% linkable_title Locks and other secure devices %} These devices require a network key to be set for the Z-Wave network before they are paired. This key is set in OpenZwave's `options.xml` which is located in OpenZWave's directory. This should also be the same directory as `config_path:` in your `configuration.yaml`. If it's not, make sure you have the same values in all the files you are using. The option is commented out by default in `options.xml` and is a default key. Make your own unique key. The key is in Hexadecimals. -It is best to pair these devices in OpenZWave Control Panel or other Z-wave tool that can show you logs while pairing. Test the device before you save the configuration. +It is best to pair these devices in OpenZWave Control Panel or other Z-wave tool that can show you logs while pairing. Home Assistant show logs from zwave too and it is `OZW.log` in the Home Assistant config directory. +You should see communication from the node with lines starting with `info: NONCES` in `OZW.log` when the device is paired secure successfully. If you use Open Zwave Control Panel to pair, test the device before you save the configuration. Make sure you copy the newly saved `zwcfg_[home_id].xml`into your Home Assistant configuration directory. From 02cc90b520ed90ce7fbaa82b2800cdcbc8b8f6e0 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 6 Oct 2016 07:51:57 +0200 Subject: [PATCH 61/70] Add new contributors --- source/developers/credits.markdown | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/developers/credits.markdown b/source/developers/credits.markdown index e050fbed3c7..e7c3e7df652 100644 --- a/source/developers/credits.markdown +++ b/source/developers/credits.markdown @@ -92,12 +92,14 @@ This page contains a list of people who have contributed in one way or another t - [Guillem Barba](https://github.com/gbarba) - [Gustav Ahlberg](https://github.com/Gyran) - [gwendalg](https://github.com/gwendalg) +- [gwendalg](https://github.com/gwendalg) - [happyleavesaoc](https://github.com/happyleavesaoc) - [Harald Nagel](https://github.com/haraldnagel) - [HBDK](https://github.com/HBDK) - [Heathbar](https://github.com/heathbar) - [Heiko Rothe](https://github.com/mKeRix) - [Hernán](https://github.com/hmronline) +- [hexa-](https://github.com/mweinelt) - [Hugo Dupras](https://github.com/jabesq) - [Hydreliox](https://github.com/HydrelioxGitHub) - [Ian Copp](https://github.com/icopp) @@ -129,6 +131,7 @@ This page contains a list of people who have contributed in one way or another t - [Juggels](https://github.com/Juggels) - [Julien Danjou](https://github.com/jd) - [Justin Moy](https://github.com/justincmoy) +- [Justin Weberg](https://github.com/justweb1) - [Justyn Shull](https://github.com/justyns/) - [Karen Goode](https://github.com/kfgoode) - [kaustubhphatak](https://github.com/kaustubhphatak) @@ -137,6 +140,7 @@ This page contains a list of people who have contributed in one way or another t - [Kevin Gottsman](https://github.com/gottsman) - [kireyeu](https://github.com/kireyeu) - [kixam](https://github.com/kixam) +- [Klaas Hoekema](https://github.com/KlaasH) - [Kyle Hendricks](https://github.com/kylehendricks) - [Lewis Juggins](https://github.com/lwis/) - [Luca Soldi](https://github.com/LucaSoldi) @@ -170,6 +174,7 @@ This page contains a list of people who have contributed in one way or another t - [Nuno Sousa](https://github.com/nunofgs) - [Oliver van Porten](https://github.com/mcdeck) - [open-homeautomation](https://github.com/open-homeautomation) +- [Otto Winter](https://github.com/OttoWinter) - [Øystein Hansen](https://github.com/oeysteinhansen) - [Pascal Bach](https://github.com/bachp) - [Pascal Vizeli](https://github.com/pvizeli) @@ -182,6 +187,7 @@ This page contains a list of people who have contributed in one way or another t - [Richard Cox](https://github.com/khabi) - [rkabadi](https://github.com/rkabadi) - [Robbie Trencheny](https://github.com/robbiet480) +- [Rob Capellini](https://github.com/capellini) - [Rob Johnson](https://github.com/robjohnson189) - [Rob Olimpiu](https://github.com/olimpiurob) - [Roi Dayan](https://github.com/roidayan) From 861c88d1772475d380ff12793d8b4ba316c26ea2 Mon Sep 17 00:00:00 2001 From: Marcelo Moreira de Mello Date: Thu, 6 Oct 2016 02:19:03 -0400 Subject: [PATCH 62/70] Added DTE Energy logo (#1142) --- .../sensor.dte_energy_bridge.markdown | 1 + source/images/supported_brands/dte_energy.png | Bin 0 -> 40572 bytes 2 files changed, 1 insertion(+) create mode 100644 source/images/supported_brands/dte_energy.png diff --git a/source/_components/sensor.dte_energy_bridge.markdown b/source/_components/sensor.dte_energy_bridge.markdown index d4e4d07336f..d3f1a4db978 100644 --- a/source/_components/sensor.dte_energy_bridge.markdown +++ b/source/_components/sensor.dte_energy_bridge.markdown @@ -7,6 +7,7 @@ sidebar: true comments: false sharing: true footer: true +logo: dte_energy.png ha_category: Energy ha_release: 0.21 ha_iot_class: "Local Polling" diff --git a/source/images/supported_brands/dte_energy.png b/source/images/supported_brands/dte_energy.png new file mode 100644 index 0000000000000000000000000000000000000000..cb1a263a5f55efda9e9f0976f11ccea142ef2be4 GIT binary patch literal 40572 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

&QtzpmJGA4`=ggimN-JrVbz3?RYcV## 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 literal 0 HcmV?d00001 From 928b035ea680ea1ef6c0af1d147ec1d433ba4e30 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 7 Oct 2016 20:41:08 +0200 Subject: [PATCH 63/70] =?UTF-8?q?Initial=20docs=20for=20V=C3=A4sttrafik=20?= =?UTF-8?q?sensor=20(#1134)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Initial docs for Västtrafik sensor * vasttrafik key secret info --- source/_components/sensor.vasttrafik.markdown | 46 ++++++++++++++++++ source/images/supported_brands/vasttrafik.png | Bin 0 -> 33482 bytes 2 files changed, 46 insertions(+) create mode 100644 source/_components/sensor.vasttrafik.markdown create mode 100644 source/images/supported_brands/vasttrafik.png diff --git a/source/_components/sensor.vasttrafik.markdown b/source/_components/sensor.vasttrafik.markdown new file mode 100644 index 00000000000..7fd7246f476 --- /dev/null +++ b/source/_components/sensor.vasttrafik.markdown @@ -0,0 +1,46 @@ +--- +layout: page +title: "Västtrafik Public Transport" +description: "Instructions how to integrate timetable data for travelling in Sweden within Home Assistant." +date: 2016-10-05 08:45 +sidebar: true +comments: false +sharing: true +footer: true +logo: vasttrafik.png +ha_category: Transport +ha_iot_class: "Cloud Polling" +ha_release: "0.30" +--- + + +The `vasttrafik` sensor will provide you travelling details for the larger Göteborg area in Sweden from the [Västtrafik](https://vasttrafik.se/) public transportation service. + +You must create an application [here](https://developer.vasttrafik.se/portal/#/applications) to obtain a `key` and a `secret`. + +Add the data to your `configuration.yaml` file as shown in the example: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: vasttrafik + key: XXXXXXXXXXXXXXXXXXX + secret: YYYYYYYYYYYYYYYYY + departures: + - name: Mot järntorget + from: Musikvägen + heading: Järntorget + delay: 10 +``` + +Configuration variables: + +- **key** (*Required*): The API key to access your Västtrafik account. +- **secret** (*Required*): The API secret to access your Västtrafik account. +- **departures** array (*Required*): List of travelling routes. + - **name** (*Optional*): Name of the route. + - **from** (*Optional*): The start station. + - **heading** (*Optional*): Direction of the travelling. + - **delay** (*Optional*): Delay in minutes. + +The data are coming from [Västtrafik](https://vasttrafik.se/). diff --git a/source/images/supported_brands/vasttrafik.png b/source/images/supported_brands/vasttrafik.png new file mode 100644 index 0000000000000000000000000000000000000000..c59c0364f03e9119f5723e428c84ab2fe258c5e1 GIT binary patch literal 33482 zcmX_n1yoyG*X>DgcXzlrZP7w;C=`d{?$QD+P}~Z^9ZGR`cW7}5?(Xi=;_mRmz2E;B zBOzqu+Q22F^)pGv4wM_p-r)1$BVpMZA^|5T@9*_J zo^_j3#qYAOW%^TIWwN{_wa$|>f9rlPSP?B)u@ZCQvD-+NYVG^}kWu@K%N&~I!N``B zbf3CPg%aAw>99M}Qj>bU9~W<)zDsVx*>JtI`wmMC8OwjM9&scX!K<+jMI4HN#F#m_Tz zYp8g_U}G4Z_AbR1N2c+|7FR<);|D3PBvTzwrIlCb!*PeSM|2_kjUo30ofuR>6_|kv z@E+)t-{flxxGnQgx@FF3!AAz`4ClYggR5yI5!VxCScjF3(k+?OWuWq+DJUm=73Tv# z!D9#=Iu@n$J<0VXt~we*|K1OoM&c^BkNQgr=`y!H5>^U=LJHE38<3yV+?sy}Dy7+p zlhA6&qQ6nXu9}rWd08RsiYk@@GI8b4L-;mIl>3u6_=t*#?0AsX{a<>&LLfnadtdd$ zczQsN!8Je4e^>Z3F{qef-`D!{Jl1c0QSoH(dn)m-6{%mhq;TK|KEcA zXJHEx4o3}ABEt5=C-Go z3`BLf8F=z5d9{y*?nx->H+!o_>6M=OSnsU1Y@3lTV_8x2zs*5rl!?v~m-nhXW*ZQiW-;eS?0rIrljB(jmCEWEvCHEKnNvR9nrP*vir z9Y>U5t}u5a{%>apfwDz!KciGU;{=C zTPCWzV$Rq-Iosv&rq2hpUl_lB;eA8BA%GU|bAUX+AgBYO56XS{?A&>KMrx}OWl|?3*PTc8|i_L zlleK3t&>h6AEqqL|IS>o<$|K@#Z%d}6~%o0-OSHQGJy{MwIo|KQ0|!;g?T ze^SgO@D>fx(8QX3lkRk8P2}oAQ#GFPuglHv$&ed7UJ%=%!zSs8;}cnl$BI>fbMsIxy+@O<`9E`XdBGggU;gi2M#n&7n9rZrfy=;J zRBQO%<(=x^=R*@c-3#YU4(!M}j@bPV2v+uo-`Say6SFeElde63*e5>d2@q#K?<-vz z8kBZZ{?EeZKWX1H8!-r3c%eWe>^@zJBSJGsZoawvbCZj9N}eMXkziC|ys3LCeL~&z zt=Hu$pcu)M2_iF(BH~kfgJaWiHI=4cK#|C1SL$nN!%I5h|H`=s7kfVx zo=$OR5?{d+ANm`ezrWw@+Mfigav*iG#x7QSPwT%WB3JRk_Fg4Ic{2>&lSr!QKKK_Sn z2Vnyt^1q`gD_tL99ms0hHL`lm1Md>sdD+IK2)hU8uv`N_0k;j^SO5b0IVM!3uvl@q z+U7{?5g~lDScc+*1oN*&G6mi)I-d%Gl=1sN9HunHt6=sVh%qkpgHkj7oCcIw+|`u% z{sM8cQe0lY2JZW42I*hcKb|n_sQK^Y>7^CPQI>Oad=IBk^38{4dRMsMdVs_Kq^ry5nMvzHg=R-leNzWm9Wj@$uWidp zd`W`J>B%O#y)0&m;7xei)L4re6v**%K{q-iFr9L-=?o3yd-(kJsJ#wFDrsRu0y0$% z!Ez*vN?$qT3?#gr0xuraNpcv2=)?;-UxqE3nG-*xCvwZoyvQ6-VC#B-_wwg{CVD$m z@w+K4bFWIAZr&i}{TqR#!Ie&I7tpn0gw5SP5a^xeQvnd~*x_Sj?q6!zFI4X3qos$1 zulzlE_}5>uAq*N25%TL+UterV#dCfT$lo-CP~|TQ5WvKK0e(0wm;S8y zj))k5AU7UXiAKT9GwKjMuG>W0ZVT-l238FdnLKxZKo@!K^ujko|9yFf%zEvXkAm_! zk=OPj{MaE7dCt#B1Its0QGdp}v`Hs90kMKzh7H4lVs!^W+`F7f2cn`6DVwD%IU{Lt z=uIJ`Xf5PX{!d}VXaJwr7bdtG#Nv~_t*bKAt7of!&-i)>eJRg}h&P{wr@PnW)*fUv zIsCO|{P2_UNd$B2$acYwSg9gn8ww`;EhY4h>pcyZC_%fgWw~bT34kVyIRpK=L>0xI zn3D1tqo!(3DZmkl+z?qxm2IFjea>d?Nc+D)f=aj4!*f@)BLx3|4=EKTpjQe-r?d=D zHbhu|&9_YC_f7Ld4TH;X#HXFTW=R`sS~orjOG>ByGD{V&5Smodsq`AILMIq(;N*ID zD%_D1!+%%6Cs^@ssIDw(aBwKw;Svz#Tin<4w+n?Wd<>tb_5Ip$=RBQ647?}j3TgA& z_AN%B-+4SdYo~LaEFfBE8p3DP`Cv3v&8Z69i3Al;=EPpwxdyx&TzC5~1z`Mf93BOw zt~pVP^T~vwzn(PR!9dqLJo)uJ;mKXYirYN9?k0z5IThP`lC9NWS(2rWk-@Oh4gADZ zT+Xyy%5q8U72x}?1nE;Y9TKDpcW55T*^pKW^sV`=CIYhuPxEi#oFZyGq$IvV9C2Wp z{TvzWX$0>~krP}TTu2B&jZESIV5X32$WoMyT4j-K#`$wN{I{Mle3C^eC{sc!*uCl7 ztHcUNXN^WWb$yrlo`zqY^KNqJ=h4nVEFZ@SNSyy#p*&hn$ewGP7m2`aO=$#0e{2?9 z8t1M1Vyf#IK-?{ec^?SY+hBrze^0C}QIBrdBmmh-yAbDXe(vNB2i$V~90_Xx? zz^C58UwR|1M0bJ{DvRm;YwPC~_BWN?KBHlq7tZIb)KB?-s`)6M+M55kruaF;SCcp+ zSxMIFo4CA0P}77aKOy4Ovv}IWq4fAhDe}}BGld8n(gwIh zGl%-T(nd{kg+jocC}J6L%@}0YJjo!4`~VtDHE{DgatG;NNzX<0kO652mbsNb3)n*24b`B{?Tlg<9u<@J;`LwU zpu5+Gz}vPVXco0u^N0*`fkJYepa#gaW#oN*VaJ{54ajJZ!FqTM2@pNz#`?%SbS9S8 zm$}JNPriJF&kea}8+?hNdszl-|$o*I0T8w=1e&M*~QkM|x!h z>O9ytzpyV_Nxzo(vwmyviCTij{L$h`&+I}2z{2=W4T~wluQ~+yMXP=1 zo>G|Z z#w(`;AL&-2E2AYV%E;Vz^GB{0hW&&jz}n^fFABL^c_FhW;_y)c_U+w^&l~fu|2PK0 zIlzu!-}LK8!c6wjeaF5T996IWfCRqE!){hKQjOZiR$@(YdG?VO(QCSJJ*-I{oMt(`vX;))|jN1Ub! zmbydr&^g;M?->~g^3oQCh;L|#FJT_(pTKR-QxnvCiLxH(`_*<&o7f!%`UMM?R5aSCF4Ff1O3+pLM0!7)!K1vNOrAsAt*Ewd8Q0P zR;lROgHS$%wd#f)=G{%606YBiJ=C^E90KThp7p-2?=sMewRRt)aS>6+y_y6sjOIoz zr`3^OE(Xwy|HdIiE{q0)i z=@%vU-*cgrpGjUgHj8HxqaDf>0&(fs&RWw+v2XIq*!s4@Q&+Ln)cNz64ac|WLPxtk zpHWjy?Lv3*sL4MnvgW!_RwP-JG)K6Mx-pmx zb;++*5+IWQ1V_C8%?hC#ngtk|`&3Ni?9`wy4Qkw7+xuOMp$m^ceP(%%!6S^BZY#Zx z`8`c1z)?@oUyeAe>BJj<;;C&;*Zk|7&37==v*LWta!)NUyI%@FN{02WhjjuLN9O^n z0ZYqYlya%)J-B zB@A9WdQyAN$i-Q061H-o_8V;LgS6+D1XUb7YsHzDi5W0voJf&eZn8V&R@_usuV6P5W>z1`&RoS5vXl}FTuH~R|EhDhuJD)hH4eR-*r+6m}rhI0S#3N7)-L{BVU4+ zEl#}Kwc=*~>C*heiibxoEAvt-X8)}BdhYJRYNAk8tF30?JSZ;Uxfpe|J^`Cs2KnAt zK~_)r8F{hK$=O#6kcMqwpog1yuYg#EgZ+YNp*JD0s4LN@67?=o(NbGJ9_z^gXg2r8 zCB>8!abjb9X>)=H*6*qi33b2KnT8H%)Jg`Xxf9N`5ZI#V8}hQa@^NG!e8}T|5Fj7o zy^lNQ5wcj~gvB)Xv>&S6T486z>6~1P&+A&8^q;@)_wf?!(QZv<_&K|Jq=DMA`>F>~D7n6ZIX>}^ zlen8{^>>FsiIQ#PkC}|PT8L}4o;yYn-ki?b$H+k{|JfeC{2F0j8?d}#(o^S<4Aeht zjPpgF&E{0h8w2?LlG3fd@Gg+$^#2sx?`o=x{5Eo6(?>%jTE+tTLvJv>VlGvc$mFAF2N`r)4OhdAE9Q)@T=E%@;h7kN_# zwq3>5oTH5koE)(JM%5wOD5@hd0QLC(-X3W&a*=SGVzBeQj4ziOLazrl#JZ>wL~N@y z_BuR|%u_*h*ZE6n+;Qk8uUtkfmpUNzuWt;gFLC_s4oqaVQuiT}UCW;kBHNvabp7Y% zyfILe4o@HWVD4x_FK?Qk7f}=b3Fh7IRpnn2VW1p3#PncP^e~cM^#fl_18(N**C-@m zN*krO0!cA14XT8jiMBTNKsr9j)f%j~II=-mA~3{DEJe&nt+;&gw>@OY@vP}ivfb3s zE_{&hM;!}}v-{+)4lD`w6EIu~)QGa zQ^~f1%NH1|2)E8$p=#gHL3-oUlQ{p5*=pp9KPfG-iZ5!Nd4Z#Hpvr7OUJ&;I&WEZ> zARYQlakQ7RW2PwXYQ=otteBM@+vO}oBdZo&{_%STs{1JYpJ-|p7!Lq13&wE)VF9k9 zwn{^A>p_6RDSw$b-OfAIn%;3 zwbcQ6I@BnqoC2tYo5Het0~v-9F;R&&t1mu+`>q|!2bVG3fhE^y$<6*J$H z@S$f`0le5_P*Dm9HY6)0BQ3*r1#=7&afPABJMlA~k0G2ZoR)6I?de9Kn~y9Xj%@Iw z?m%n)4~~c|3WOdB01uQ7bb$PhEd|jt*U9%qipX52%6=s$*k6i5`8o=Wvq?SMD3qW< z#GipI%5X%W69m6Xc6sDsg9@F=65$5SfG<639)~I1H?8+n2!}kiQ+Mg!@P_TUEJZ2K z3|cm|UjOv<<2KQG^VIyDArAOQGLXDm_dV;bq*5j78ja_Ge(A%`@Fv&D#P#o+V@QMJ|#0p7E~gsilSn zjXdif_DLT>S05(`_$^j%?Z_@|PTi3=qVj8t(ruQ_w5NGtjdT3X&$RME9X_al4}hLV z_xqf}{5ioe>-sq!Wb}8fVy{JH9O76Ucv*OA3%tQ~rFgHKR$NQD!dEA}-qlt{tgz?G zxL4!Zi#L91Buom8CN#&))ED7xdazo}upz}X;sae$b5Ar?FhGb0U}(TNT+b%D`_!4a zhTAEZ40474Vr@8G#xput5pgIck@>>sxY)&ee*_%Zsd+`E7gwbN2uBC!7Z@v!i>eO+ zhfm+zp05|JnspB(AIF}9Tv|P_6ve37`=rJ`kt{M>m452rXL8q|yF3YG^c}5Ncl~^{ zq*wB_tbD+H2xz*XvOxB;95|DBd@{WC`i{{~Q8Ai-7|!#0{RNyRa;ytl#~JQ+!Z05vBMPz!uWphKq(KtdBwbcRgQo$Iv>JgDY@#J zXIa4)<2F;P30E;YJud zE%EkE>c4Qi#m#XSiIK=K9-1(2qS(^6(MFJ|jd$NIcx+d8> z1rF^u#1J}Vy=(kq>_WVcCEVqA`*$cX-4M7|wf6X^pf}>pJg)mAs{^uu zg6QhkHn8P=>%|l)r|lpLOz(*0ARU47P821hk(usHFPH3lsqR^w=Emihv(@Sw0Vluk ziK}Z`owickr>v?suiK>Z-ZJUPrro+ z9|Wah44oUrTUl#wmOOj#&NEU6@^GherxoDTFG$c|Me zH4Kvyp(OnA5R%ey$Izt7SJWr1lJWPEGu`sMGZY_PMkl$L57i8SGWeUxk>NV;R7ENT z=rk=HPJYvEOgz`0IK?3@Sec^(=3l|BU)|63uQc`iWLU^w_K06P za>`G{W?c5I){U^r4Fl5Ot*bjnCqi7nzK1{j$!6R%gbH($LL~ZYY{%EwVT&xmyvLa+ z5IicyCti}uM)~9>M#DL9@}<`ulT-1lsv#_VviwQRP>ceby6r zy2JO&Nb*Q5A{hvT673yZ4i@KSXf8B=Bs?<*vogHSPM z!oLtk65Hb4Ai?ppXM9PO6G$C!aM_yGsOm<2ebmnIS*no$4e0QBlBt~a?j)q$`mLVL zG2^0^9I*-+JaVK0n{rrtCa>5SP#CIS)4fT!QwnFmI(z>Z?4uNG@OAx>I1vG(Bqh5i z!i(;t%qfg{+euOUKn_+rlLmYDLXnm5v^#Vrt9oX&is*qrx8$&MOp~4{9>cQ^8H&e@ zCHA%}w+cL5S}F(r`PCFoFT@{BBELya9TnE@gdXF#*%u@on#R|*JWprFWX%!seQvCp zUC5Q*ks+?}4}TI~gzZ<0XeE7?8jt(Qb%vGmuc-h=hG8aL@ zcvO2688H;po+ZT=YbWJ1V-W#t>;M#2iM)cZZ}d-VmuetU@=HFl5Jc!Yh@4)Ga0s?^ zN}{6DgWI6mtNBT>Ui<1Qti)|BXU9#rkci~QpXd~=YZN;D2hw0M5!!kRQv!6Y?7{BK z@DwwP5D2TX;4igzRulISV-0{c>dC)6!*eOSPaN#fWCzR&{AeEX+oxmL z7(F_4*9%2&lEyol&grRsDdz00Mqn5*HmreB+L{%+d8IcOr3#-+{7W_}Sq{r^-n(*H zhM|mG3Y4mupfeMTPojtYqHutbMt_wZ{$Qf7!tdMzjeYHT>4WQ=JFapk{Jcs$%0rPC zSbc<`b-P8v*{cbT_F>x2NQ&R>z4nyd^6pbNG{|kt&pnL-r&2tI(|GPvsaqOdFzE(& zH?9lVlL(@0)9plHoJ@OI1WPEXvqi{NO|Tc_iQY(2bv^-$xOk88$5e&kuiBtSINL$) zY;FSa_C=T1IN)Kdt0=@%o+GLJ=lxKB%7w*M*=XawkH*Hr5Y_J|ZJE8{a#j8m_YaP+ zE*r^&T3_&=aYu^%w3Px2ChJcoW_F;z*E~fs1f2jq4`xHm)SyZ2A@a6 zTKJL*`-oDf?Bl*sVgm6mCQ6joXB%zw)>_;4(i6qSdi&9$Mzf*lL#|yTZi@;Wn;(D# zBI-Qa-c8`CX~l+Ibx#_$yPMo?x5N%!ti7_}b%4E>!HF2BLKVlPz-}@ATj@>3iR(0^ z)oPI@If`F&tYxT^%(IG;`#7yCUan;}s*s(e&4~+=IcUr~ojcvCm>omgsYv>;yWWDi z4Pv+XnrtpC{4ROuujlrcuP}MX3C(o7rNj*`#6Jec7`mI>1;EmShiU1X`@FTGuJEvP z6nWIP!B5RMnRdEoqC!@lict)dVhoQgTwX&^HojGY*9b;3#r$>>F8@?6tvA%f7oiHH zW@avO3PbHJ2jRIuTRK?C6HL2hxGx-)U#mv2r>q1VGV4WLh%ZGRsm&s%;`uEV!secM zH`816aHD{GGf6)tR5`6lPjweRJ4k}1|Kd+1+86_bHM=+GCv)2UuXdi@()_XKCj^Ez zN%$5I>xUk0vnC0yWkb;cs64#q8VV*{4O^l2Tgiyy@ME*y;z6v@Jb6vI6Gp;c3_#mA zs}))owyLXGN}e_%o6W~^#m}K64j}GboHypohbw|TVKgu{-o3Kd_f&JZUir+;wQe;+?XB*JBk6TSwNx@4Wo6*l z4xfs~6(V`}QeT?G+Xt*Huq_KQar=l zrxZn!;GX8s#IAm~IJ@guO@&(5ak!a*jO7f&ORC!vWTHXGD`Q88GRg#Snwoh-yQ$U| ze0zD)%R8_dkCKBBa$?K4`&z{dQZezcBXUX5Bb<@UaT4GO=GgN|4{);G=90>@4!@+x z>kZeP5UX*i>;)^nH@*(d54QVySO~4sMB&-aF zuBKmTXwu1LrgjHBG{1tQwe>pwcboOof=jd|X^;<$yRSHM5^t_y7F^hukT6dsR-lxC z*1`D1sN{rfdw2E&s!b`IFY0)-RJNFj87}+nQ?KRY`aKy^h-9Nd!1+@`682bqO;Xm1 zC4XaXSqabFib&;UCv_tZWP58#GUU|wvsPK}5ZTqQV&gNv??IqnOc~h15#C9oH?lla z4~OzXR*u-#u=uQB^^DtLI%p;JN{)jA$$80c* z&-2vVFZjX}6568ZNlGw+=GI{U)Bx5FD^JGl#Zd_}H+~?MM{mQ?jw*fVa`71Xx&e)>|A@ui!|;u43tTR8%DncuNMu zk>>PBT@*Ip6LzD(0*^aU=e3pWaF~>@T&T@uM>%1PWTqnTdlr>|RnB(1g7$whW49Og zaip3|hp&bDM)O-Nk0{vBtxmXYc(52dlu~625$$AP@D=}En==R`<@{STE=eSiAgYKo7iMD`L3&ou(^VvDIm<^>TBmQu|; zc04isfsky^#(j1XsNt;V&Lj-EZiCCDiE6;-Sl#|;ux*KAt#G(w=|1He3*mX+tJvuN zmK(%@w(twqK2SMxm46>t&S7h)^f*9F=xvsC;qNN(W+NvlI4+0iE!&dnX4+ z&3HPB#^Dr_=u#9G%Q*N||FVFL811A07p}2%ncK4!77}gW-iZeB#VKO4L7q{w!w9UU zw8k(aMQ~1-S@GoWJ#z>w9fH5TgZ!r4LIltlC5PuJy9wj|7**hXOl}0fetz)AYQfw{ zA^C+YoSryd`cV)!xA?D5V{y1`_yl`chzQ(T6tL_0Q1$-9C-EJVC=;|(F}eBPAp>rY z=B$F>Hu|sMpBXr7PsCS88K)b22yR|uTAYJks`TW^ekwNy=nX2~cRZ+ceJmezoS1E424-^-C9av`zp0J=GiV4QpZrYVXei+#8EoGDglwOc&zb zt0AoNey7i{LhOfytKC0LLb-{p^#y3Ll+doVUT;7UywD&m)g=%5=G; zms&2j)Rg!^JZm$K-z5G#!iB4~<_%0gGaD(LOcwHo=%f@XTJb)o;WU2iGEdD2fLy+6 zw*koX(Y43&!;|wHW-pWnkM;(#4B#@D?D(lfp)O6jeg%g)(8?gOE}>{B=T|8!L@s;& zbmB4aH(k5*LF|&Hfs9Tua!jIb;LPtO7c6GkKX}WV@oz$H9r-De{xh?ZT$hj zuY;CzwNjR0Y(f0s+kO})e(5ABu8Cbjh)zhobP+AXs!%~W6bz>6rk{;z&zby;&wUr0 zMz_uCPVc8ePIDi1{zDBlpqd~1)oUvjoZLhSz>DCd+p?wCLR5PxTGj* zdgCzPvGh$Fpn2qS@0$vp?`NFyW8J$Fh}!V@kP^Vs{_91|)&>)38G}oI<6R?TjoW&D zxErUQf$$Kt1tudTbMAFXb2hSHvJy6x;Jo!u>6IQ|Q+9Zlu{i=SMMn6^*l7t_FIf6W z$bN${%9XCUC82JKUDUgl_otx)UqZFmujiO)@_1#^k-emh#h?57PQPbd-qw;)F?Mj)yHb>L zYQe8r)NPw97)CbiO#u7xgt`;`6TllL+Bo{Xtk#lh-sb{4zG+h&^j%@U(*R60+T$i z=|uZzn(KzE%R8*w)a=5mPbQqDZNV7r77i;t&biet3Uu<~x@!s&+cNLBiySegA9A`A zwfmZ#W2%UEwlNNU7^T)b|@{zhb{b{>(+!YtuY*jJ&N_cB(_9n#$>+0(ma^lva0; zDs~%$qQke6g)iB31Pk{O1nNz~ z(1#B{ykB@yMa*Hr@f;fWx5tL*UdUJHT_l`BZT!M)tGmM?U)6`&VEO0Gu-2e@|EnGZ zOX68VQ&1>(I@;Q-!LBipx-ybV>Dt0uE@4!teZi-%p8?F(IX4=<(T6K1*yHC)Ei$@7;L&{#i3X)MMoY zZjj?EHLP?S{re>OjL1=bl<3m;W$UIT%fUU1`sg)1(eKQ|h}%Ef(r``B`kMd5p0lLn z7k(qvW8=jBab$(Dyr&_!UP)it{^<$*z&-^oTaFhd@13JCs1hQX@F$!*E?jK2;mAuJ zV$>wtoneHLSM%_9_)Du98ji&E*80{b6fnQ&NL9Szl^hQHd7QWmEE|L)zy>Q!BWIbn zOiu!1(_L88H8OXi2zAR}tuuH#D^S5i80&T(mhU!g7z^kY266Af>v|%FT{h(=K-Es) zE^nE+20w=qCOGEPrT5%+qIi91upVnL=B>x9FT}J-n^!_ysdG8zbMd3_CNj}x2$*jB zXrkY9uV!cz^6l54aYC;y_RG*<1<&Td8RzLJ32v(2t^%NT$H_wcZbL;BAt^T1JO|zRV;gx88;=;)AFT@R?Gwuw;gT1?kUB&Ao z^p1%-A}a>qs!EO<1|BI{#f>Ip9q^ZIuRgP|p3i$S7A?`jjkBfDC6(0d#~;Nf==cel zmcaGm-Q3%`sX9b!t(yfjkBdcROaSmfqno9GX~*Qv z9BOn$=Q8>S`N+22>JB``(FWT*hcfzspz5gz;6npROj3no_NlAnl^OBsJdrqR%wa_S zE_sWqec#8N{OTT5!d}kMx;|*w^%dG(cIQ7hF`i2Ad(Fb)Y=v%@tkcAyuCu-&XA(M!SiUJHAxT4yVp$XOVLZ#$ zzLDIo%KK>F4?~>UVp`P6haM_B|L_&Vct%1SIr1{g3&tOEN^C737B=k2L~08H1n}Q zmMhpf;1F6~Skdg5uMLY2HSy-&u$w8Ho!}wqADQg!T_H03#yMEQ!10m064Hp}L4%TF z*R^LyPE|tBokz;4R{J}DaQ5O;x3$PrM1}X=ex82pM<2b=C|J_{F-)z!uJ)l2b*Oe! z*dB(%CJtw`FY6;Qn_CjSo4%>1t&^)nY|^FAw7mEc(||8N+A$_qlnng>k-ZA}W^-c# zgMdma7Bo^Zu+H&ej9UIEXNK8H#m5eWKpInq4|VmIxpnM`nhgY@P$~X*8S%!NSFyOR zPB4{*#TDJ$Fq#3RDvup6rbH4^Qb%LCpP(Ll(dH@?IvuIl7whQQ`WOI5x)jdXKH@<7C&Zy`B`xhw_?xmKeRj~cj=aj7S>sn!?t9q48A}}zDiofy6|K$yor`sBSB)uO_wPBAtGwu%hk{dFIijm6CUKi9x9)`ldaWIL3 z@nv%&9U*S^A2YLG1JGfx8Ma(K?Qx2KQ}SX2qRItDLZ@?HF2v>znQU zK@&vC9L=+nGFx1FBaqChTlh;aSr`n=ZHF0@QR|j)Pkiw zl>WupO1S%AV^S8N)_fK~twItqa&m;V3QjN?RHQJ|gmi=M)T;w4INmnR-=~c9;MYBP z2oj-TwaQ+}dmhx}YbMeN5yIv!PE#vtdeO!v+-}$qzr*lpKq^YmVKDIa_b6-JyJRu% zD}Ev(HPDT=D%-c+8^zZRJ;5*miinmiuNP7#M)!hQ@M&$n8rm1z?1G=KIgL29A=Xl# zroS96^7l9V(bMXOx_WftwSTfF-?EAp<3M$s94@~KFgDXPGh)!x)B=F$OY`0x-zG^! zi+EbUlL;NPg>R=b?!77WV8D9e1a^?H0@&;u@6rW4$@G@p8CXVPN>xNC5iElFEN-5| zMOI9`>0!)8*ru}%Jw#N|OO`|g_O$s1;LlBjtPJ2faO>wa=HOrv!D--&P3TvloPUSE zZq0HyEYg+YFW-Mu&Oop3ms)tZENdsaC_KeIAPtrBl7d^7XXLim#gMU5{xE{)wr;UcBaTKfL^edal7PJdGq zj1AinNZ6UA)QE5F3Tdtm4eH=VBrx$N-c!^pxh300#6t)(UjKR)O}D&RBj%rg%GXj- zb|1UL+7P6f?ayYc(B4b{8SO5#%`cgLCN$XyW##;l&3t8ze(|ejzCJv76Iw^Qh_@fS zX9L*0Npe`^7@CQRsA`pjwL_5^;|H-J<6C0Fg#u8|?FeFb#Qz80jVEyAqnnnGAKi62qRL=jriGq!w zVA$>7OTC+Xh+cQd`9p_y%dZzq2SAugyeNdwNLPThyLc49l;mP;D{*{J>9z1e#_*-_g^KLf*{9 zH$(TGS&^8l+epO9g?&A}kAp+k`-eN4&5C9P|6Ax&no+b*?;_dGJc3SpGiSw>$N(yA za%kCLcLR*kB?80YDMp<4N0)O6zB@b|co6!Zw+ztK;uwN4f}0bA(6_`;o?aw=y>rDf8w#wzWcAYeDN!zVP$&*3l!Bf@4 zgk#Re#lRA~f?1g8M-VD6ocD|hXQBjU>A$jVn{{bYU{gMS+s%+5`)f9{T1{_Rb8D!-B&6Iy4r~`F2GVOSNy@VemRDWN9Ea>FD-kL0)@>slzxYO(jGv9&7t}zs3c##Y=-gZ!`&xT z66q*}LDAgG`cpZR`tI@GKty>DyE2_w=e-OOotB%Zritzr}eC34BPi$RMUtCEo6N;2mc_5 z`wjzF8+F93JHLi(a#Q_=>w9$VnBde=)%m3Au}Y#}c9|AA3L`b$*>5S>4N;n=U(KF6 z2ilGYO6zO%{>B{}hWhH|U>CB%cnd8_|3Ne=rZzl=V2-jeLmxF%UHbTHTk-F!G+u+= z#EAF4;h!)}x%1%&jPa{T5yqHaq%pwF4=`f&!G=mHLSP!VLeqQg2YUSJfOn(jFu_;T zX+3RYQ9+)~?Z+Hh8Wy-sn0ARN_QmVq;5xDBHabJx1aYW(GT}hsv_|+`AAHzRMKK^c z&@M=Y#OnnAzL=eBZzA-j#hb%9BXcls13_taC_1{+k7W-bss{qQrOnLrfUJa$ul@7M zO0SUY!e?*swSLIxj!&iY)s^u4nktfEgmG8QgAYQGTgBl&zTEG1mne!nxEDdF7mdSY zC3i3spDrUT{Pmy1cb%5^odWEzBBBwRg_$vSs(A7;PEd9V$)J5E*v`LUCvo+{WAL-?Ae?iAzIDWEZ>u&Q%JIV`THKJBzn&?Ifv4oeGE3hl9bx?l`Y993Xg3!E; zTBRA2(@)2yk@1Zqmo{6eVcw_~W&k68=nfevl^)kd*(GLy>d=bj2Z46UF3}1B6C(MJ)(b{MexCkF0Jfs zoV?5!2w4fDtoeh3XfulWaYbhkGShlo&e(H@`Vsmpi7py-2am5LVQK*Y?Hu@OU>`Q0 z4Qg)>({W>O#q(+FhnheFJ<q9Kqz_wxj1S>?RV|qP(kD6)}~j zij4QXd8qzrn*XN-2&W_Xi~~`ftjs^wk^JGJuRQe2s`As}QIbq|xGu>4SUB~Yu4dQr z*ARl~8yr!;;cp>9yDB~7^0J~Ya`he!q!GZOUEl{Hi1tJw;xL5l{Ezzz43ZC$){U58 zfzhv;jk;i$ZT`OA;#nKf5iRp7b1+0sN}EMjm!TMGs0cvy{8DoEr9=XD&_tscgv+EN zdX2~BfMv{+B*52TTWzS3HcOLu;kUtVbN~mSpTW?a)f>LLr|j@^76oOUuOnY&krLlV z&PyvQiT5IZNCEX1p&v%sC(#*t5(bam-1dwYU>Bf+744~vXhT*Uc>O@IJRm(SoaM$cVoF=nPpy3%X=@8XCsor*t zp&7NI_7Xg9w44;&g7s71+8@PF)dD8W6}&OQQi)mNQ*IL|G7w+NfDw?j9LnPoOJhfS9{Z|cD|Kks&`G0Q;ps=O$m&SD^4=SvG2?Dy!Zs)uipwDeB0$AZC#ZSPK(6s`? zvW3i`4(rrUMIG7)HSBr%3A6lH!H_A0c7#&jdJy>TJsY(ElL!Gm0TK42@&mJVe{KMN z7J^T8+{Dm7uOwv)1Kx7QILhrTpWo+z7Jo9t@czG^zB(YP?|J(!3rk1}D2;-EfOK~Y z(hbrb(hX9JARsASN=kQkcS%XNbc3Yid-;6*z5L7Wy|d@c%$a%SnK_ruTuD4>zOkG~ z-*7u*H@~|b)ko;J3M!%ts`)2$MbFagMJFj3lWF`iCs6XqV~>ahVmflf^xsY2ab;iV)R6>uyU^9g6lg4L3IV{Jyny;qGWXv`(JyTM!1&z~R zZFx^}n73xVX+}T9;&_(nh-R2(n=z@$ua-ys`OqC7SuZw=a@T-b?{~T!Oxzx zjoMaGhJr?1%N+ll#MzJ@yTR_G3JHSN{Up{vBmO>+KC3?R>32BGeT9x{R_1V0!d4ROcyfHP+ZA% z>8LAn7~}JtQamHCD;Yf|{?E3i)5VDF6|K(w;>&uKXNERw0*V|U%boG*al^ulC1UM(;)vDNUcOyo-RgBiCeb52$Y zE?rg}`h29_k7}|XL{s54Mtj(`XgdkST!Lp++U>@}vut=*c0h;i2DY%I$~MdJt_8N< zX=6OaB+IFHxryuQnMrLUy?X#Nyq)UwZ$*pCT^-9}{f)@gx8-USr5ttW%&r6l!laz; zueH5=*>RKCK+OIfsgx)G8CEeiGMxc4^_uY1->C+ZO%m#JX1Ie-!un|KxLgzxHI$Xl z3!z}Zn7Y&VIIAT01<@3?q?xPRHswjCX^?UnamHSBedRTBc>hf)GVjw2{Jcyt2>Xq0 zD1^;=`*{v^Wv#q+Yz*pErU}k1p^t-1T!-FAJ{*GY+0lv^lDX9 z-ZH)oj^;=!E++8Cf_L6AN(4LRwsEyJ+9+4?0R$=cU^lqLUnPwasn9zE8-L1vi3-$W4?1Hk&F@A5OW~4j~ z*n4^1GRqw;C8q2tm3)_q$zZO~%>;JDheKsQ!Uk5MmVajo5*0Yyqq~5aRnAv*h15_0 zyYpOyIu5}D1G z-)=8OuWZJZ$uM&CGltah(Uf-Qh{fndyh_bc2{o=*(xj5nKS#x(BYk+>9eM$195cEj zqCt++{O>VS##{&XtWUEid*#kJ9xMqNWw_KRC79kOIY0W{&#}(;JBJdI!ginvId44~ z7O{Q!7V(;~{Z>>F7GZ61hG}H^X2%CADQwdi<}F{aH^3=KhX_Em&$Lp2p8F-cCQ26j zN#yF{%Jj+H=EKG7=|;NZ{*|+S%OtsWHw{VS;ZrTcXLM`sgUYT}o)r7-c-pR`cO)g9-=%ybr1P`^bToKa$QTU~2*gSHlQTiYXoR2xA3=`jH1VmoF4(x8T%c%;xN z@=x8!7TO1Di@j?Tv-U4YBeDHPE*tH+vLne)-_nuYHw<%QhY7WLtSz~TJ1Z4s-)JQE z#$E78p>%0Ed14<6wC>HcYXhkW$6yOBit{r+1*j7xJ0_*vL{U?!4*1Z*PxGQX?g8T` zQXB-Ng3}Cd^K3*e&P@^`dXl&L=j$c6pGtOQKDXy!Y{31y7dhj8Gd?E&o&^7H`9nXN;H%ucqGCN}nO^ zmv**h8EQapXU}3*`}5t`$DNI@P-!q=z>C+V5!rO8q?Ob~a$FKj`xv`-z&!*m-)cp~ znOV7~<*0G38;Gr!uiG{W{5+u*@IQI3$c=%5f&9fqg!%r;Ec=I4@^z2o<_ z=J6eIXB>#WANsZf`Pg}W&hedIb|}MPD$us`x6#yNVW(?%G{)YWtRK6R{9QfQS=5PZ zuS(Q&+0TUn6)l1xFighru>Lfe2io1YtGt~C4l1*4Bz6H z>Ek{QZz-a|a-}Qi7w(Ek`=;JrP{)A#c<{s3FL77rwJn{k4nEoThR3V&J3fco5xr4p znidjU6B9aP&6t$A;cl5>9En2@C4P<7v1YqzAkcLzxhbYIC?}QdzWaa~dQO{Tgdak9 znVayIk(I2rBL$uBL#Sjzb_#{L7Rd}&+s5m=tngmC-;GTlJ17IlsRc)QVChL@xu&oY zODmGv1+Vo19RcbA^ivnT9LgN}+&2r`bMbR-s;V)5q3(_aBA|*Sj!exQ9)hEKz=0H3 zc@<~I;PNkwSoVPnLyw|CP^h$@H#o32!o4VS7%Nv(S^N~pE8tH-2Y|pvZEBQrF!1D- z@|g}4jP3{jMPR{BX!jb?8gu4ao0^!4uPYv_sZkS*%*=Snk~HuaYJ^a>AetL)a*e$Y zld~x?W_7Q%SCxz-AuHz>%Y1WdN^UvZrzr1fsk&Y$D@fd1`nQ!Ncire3m9f*wpi;LlgZ)mU|6(qZ)->++^tAeO ztyMJQTW%71qKn;kToSfP1n3ITHCe#MXS#|wK|wnCYNt>r(OHW>U}@+k8X@u1sV#soHX=l+*5Oc+lpn51BxFu zI{(Qlg2V4KvVpunA}*&TpMd@ItFBg1T0{zV11=&H`7@YJS)mvWeL+8vsqtMu)DlKd z`(7oc{)lDUQ_Sl<1{;lWe^I5kx42Fm#t72N&p-9jqVA?nuf58Bca-+ld10k2I?|Re zjbLOh9LQMww@S2^fr3w~#)_Y=|Dh!~YS$cRq2HZz^bUO=_!a*H80Ap#K6tnH1wp)^ zR2-FlBZazUFZbQ>MF}_}@%DTTpr1>JF%KhW`WwP zpqyWiFq&aoG$dWJQ_3Mm{rhgHI@^xl%Ynnv$GG6tbO_Hc8EsDmq-_bB=_i0NxwV(& zK~zs!h4{Yte^smyAKUtB})auFekvID|anQ zyYQwi9-fxLZc8K@ujZ1xEP-OEyofV<2XUX}H=eK2@gAZ2v|;A;vgy}z^amJY=_hY2 zWiBJZ#y`9TdDLRPZ{}bI-#Z6|6dU1%a#JeOkFr8;O%fB32yW-|`xg}H$zid)mLs-^ z2$c}6z4dG9-t-6gkud%>Cmi_{J1g0EC2+nWSEE7O)et!X8^*Cl2|FRmOwnl+&CuHo zTC+8bILyGk%XXDC93>?Y>MsCr46`W`L}MnVTdMnA=)k5`PD?cY; z$~ znaz^fVT_UVaq!>}qrZs(K9X#fO37B$-SvO19V~EFYE1W3*n+|aeW}DA1Xa0$<|T4D z%rBNtu&$A5d4<%SvC;Xbmh(7*o9;$s_IJZP!Y|oCH;efeB;kYv9zw5bVr@kF^8S@8)Grb>xhkX0 z%p6IL*j-%D$iFZp%|+i8$FTMA5m}|0_n5yFn?Q>jTX4%EmOREleqVEH{50-Cflffg z-eoXAeM(*kI$UD~l0=TxzudDW_a=w&1l+c?2cNFCA{mtNtFgUs8Bbl@q3O&8uJR*I z^YrZfBmaJ84zblpeJZTGepH7I-m-M%#Z%F9)B$kUx zxBW6X6h&Azpd<5Z`SaH9((Rkhd}=VixB*XE6Ly$gX^4XTxmiAT2niO!`Vw6C1MbFR z`&sZHs_O^VIvy#d7*^gh7U6*jV+7P~orRS{2Xpa?==Ma9A7GO6*Pyp>AEfz4oYU80 z=isay43K=f(KbZQ(iwRf(A$@pvicXzt|i@7WD|(Np)c(hzNYG({)EZ(J~VANneBOs zHCSOT_HG|#`lk0iMAG*ib9q5#kwBun_~CIQ3SeMnE(hyqonrrGf}Wrf{fBNDO#^xM zz_A07=Qaub%Tx_lpgIx8tYj)DA;HYL59a%R11(;%7VIwHQ%WwVY3)ZPRYnZ=>(nP^ zmv+%rxrM9ZgfCNM92*gVs$mp6gSP6m8aK*31n260I6fC@V*}H%vVPlaffoWMPe~lq zRtUps(yL~dVzHL_$|{hODXVy1UJDn?j)7Wgx4*Aj1#6@``1qa5=eQ`wO!!WkHp{og zQPz<6a_pH!wj^ocRFxwL_W2_9r>MAy*TM9y9PhbOF!LEW-j?U``EWLVhX-HK7RS`q zrqqDpXAM|D@{%62vI)mwo3{$CtF7KEGGHP_P1p?I=j2#9J|lT4jpf%1bdr7F;7@bB zTrU($-6%N3;7LlM7D5l8?>!a44J?whq}?uGBW7ikV2=MgHU~ltd=o;s06ue z+P>7(U}(;3^93-HQaa>a{iIF{$(PIi+bpw2OH1(oYio zPt)_|kKBZMk1fa5QmJ37FL9)@>)^>mvQ;Ilk^zOXj3w%(r=JVAcyAs~V2b_oa-QB-KTGz6D{<$AZ9(>LyLx z%_Jy{npPzd6)vT*R}RBD+5A|BCrL1)s1;JshnSa4G#7+D%C56^>co^Lv&8haoWrE; z3Bw6DuDv}%X6G+;YKi-k?bB0EBs^3a@VK}R-w04P5QTX*jSNjsE?%mSwcgNG^tZJ| zQ!u7MHgQg$*v)mM`dbe$d5^&Be!I}xH&Nnf8FC*sj?0Zn64bR7Us1x=8tHM3m(Lo* zNNL+FV+?hBi!4k@^k?n5Np_Jy&h!c4wyzDJ;DPb$w~-}Y$bPl;IBsqPhh#3Crb^%t zg4j(A+WG|p4+Y*@_3&+Vx8H|k8=lR24r>H{11?XBK6~gyrD@112k0@KmOFZ2mzWU_ z(G8?d?e@ZZF+>gQbV+aZ%0=k@$no_x;n^>=&zbLbgzXT!YW(8Zk{_SbLoldV9VMi& zeGFv@BW}nJPWncGmc;{pDr+Usc}yHpxU$z*(_g0%&#xMe;^yoT;v_z+f0mNhTEFu1 zBo58Qiwp{sDX03ZAeGgov={S}?wZ{iG51ZH4npm-XO)pY{tU14Urnd;nffYOb>XfZ z7PO01)I?~MWBD~VTo;MxV!v|rg;A~g5vmd^ui0lk!ybRVEvny7a)o|X`?9crt6fHc zGmG+RZEXgxh&tw+pjWosWb>x!ZiZ=s{DO7VLYhM&jf2Fkwus58EjiV|NUw9;tJhD-0FFm zl}hrv{I!J;UG^!xv|53m;d%7GR~g%G)x+9VoAC!cl1g6>obu2t&7Kzjxm)5F)gz&; zhYrt77tcIq8IHW_dcp13_HkJ6CFkQCauQMSXH5WrnWtseaF}Y|BoE9Q%i|Zwfd-;Y z-=p1OS)33jo7Cuyk_9~jhP(XK+{O@fXmp!81m<1Fyj~*W49@gDiBU(;Pl{{ zi{n>SJ8#tVgA-}+!t)djr}e;6@U+lknS(k(08NkVfMy_~qW%Zj3I_G}V6g2uE0u=Y zi?fE=t!iSBzOKLR=cN>Ggdlf)$vU-sFWKy^Aby_!=8Ej|4s*ib+Fr^B=a&~>A3Z8& zmpPCZoYh5e>u4dm{uXp4ksd{DQrt}qo(oq}5~TWn87W|$)gYX-t>uQ$$QB6!M5D&` zR=wtvDT`*}>hT{lJz#e+*apFK(Zt{v2zT`))GBzTJD~#_>hI74L=N;eSUa2Jczp(u z3*P?K?F^P2*y|~w*S@;;?&+QpjU^k`xQW6~wsYmh%{59vSF5SU{wcJgZnvgX3C4Iu z`Td8+QAeIcVUZ2k_Y6paOQo<*zDE-k_DV|Qa2MBB)Yo>+`)j-sqUNc3$P9S$Hr);?XkL7jrh+e5TA_h-+q ze9b1#XXUAY=pd3maH(pf5;d2j1r(uRuHy=@J@xkjQlLc^|l1k zL=OK=1+%pZ4Z3ruB#h2pbuUE36|$~~kIGTl&}}qydq;;K*|O`1sZa}LvB=p;tbW27 zKzN2f;UHI`I>}q=1k)i9|L}g`jAh8*c&jqyRyZJWnWOHr>R%r_y)oG(yVm`^@20#a zE_N4#07cFk2;~Lud=&b_dRi^7eym{~0|8JhTzwcuE<6Xjke{9Jlk!na%chfehEsMD zSkl{(e~$>759@Ue2`;?3k_8Iy7`v$+YU1v^TSE!3*&J|W@SxuNSLf=O>Rb^I&!Lo- zf2-+prT2pcY*~T4Qr#I-=fMCpL`HzQ-9&amS%CDAX6 zCBN||UYN;IMkBB|YYfC038IGL$a4|eInqZO<&h_b(b7$9ez2>xO8y!WbcpO;f0?x7 zt<7@Xv8tywCI`dj@u?VSOSEAha1W|cbm5}05|5>6?`zkg&lQrGLv_FPmWe$ZNyDSp z{%%S)RV7hRK(Lh(vQ>efYDW2uxjruZAgk1qTLT%7#o6_W^QF)sZLfwWe}C(;-uGsn zOS_&gx7<^wCavWAVa}wLqIO^dlc_w6l&_hJZ&J0%K>v~-Zn_tiCo4X*KaO7V@}&C_ zBCzAuP<4(mTrL!=ojRV658S3zZRCUYg1oJ{H06Q`a}-ymP^CD78UV+{p!_|?2s#KCAvrhFC6r>(mV1P;3`V;`9bT?mrwXRWUT`jd zg>Vk@k=N93b)7Vz1a9p|H_seb^DI_FqnraaNyRqJ zW}m;)5m+Yp^~-{WEZoaw9Uo{8+$Ag_+}?05qH;U;!?EItmq5=pr%+r-~5zpW6JZwf?IU0^GPGuI%nJJ3Zt3eleUM% z;$5K}Fo0oQaRaX(j8h2d9-Jv;d(aV1+-dqw>mq@PiK^%SHe5h zSgrC?;BQscu(%SP5XEkE_*KMG(_Mn)?e*Lkf`Q`{)yC zr=n$??fP^fU#HIz#9Q@Qf+l~5G{~_WPKw-%U#Ld+8ph?7W4782h8(o{AH7wd;fujCto`a4V)GCSNA0+*eJ~| zpRuVFQQfE!J5$2Hj?M55(thT#30G1`)oFP79YqK%8kZt6j~r={7`D7x#P*m!Vs$kK zbCVm9i7)b{<~g3SQ*7fnJCX#d0~6)TyP8kW58qL}$AVl_jQlzHcKf3Hqr;mdZ%A8n z*BJtv+tYoU7s=@v7iwt8aF&=1EU1bl2dhWoFlG<*#R!OoVw;S9?z{BniXVFOa#ToI zie-!_`~2Cb>S41I$j%o;-e_${2e8`w3l-q`o|__zNHJQ8eo@$8#@0awgjr{3vUn~u zfQ!Tnzf1|%_(2EUJnhRSRNKfler6L&#r6b3bYJl4HxAtHgLWFJjM)**vGEU&Y-(pn zLGqUi<+i1vYx}BoGs|op?)YZzH}r(!U$#NGe!gyH<_J17akKB-*@et|bj0uQd$YZz z;5R66I_fEY=ie@eC(DTTIr$$krEJ|>r8j+`nRWSzjZp~ODmLL%&f?i(JJwgd)oc~RQZzwqy)rU&ktFD26ITWB#`_t!1Bn?T zfb)YW?Vkr(mL9n~m8(!J38_yf9JuAuShd`~+~Az}GdJv83)Zu&F+i|0eWdJq1nnJy zo$s9rYNUX{`+h~nKA%gCyWn3Qzq^KA7-rMh*3gbBPk)rRvn(UoPa5b`u@M5Y1tI)s zD{{RMg0y_!yxeW9zDGtv`Q`%BGX(nJ6{aByLzuu8NiP|7)E)jccD^9XIp-VJL>?w#2xWV96#<_yN$%6#AGnq1%K6*Ko24 zbosITSe#Pj>~svLT+vsXoDX9VTI6T^h29pqMy8t^Tck*w&l%L|i=_CcvpJ}}a>QHw zgUL7QS9GG}vqJs~rKSkF%F`8=qmysPO@tqUbaIxT<50|Kn5L=7VyMI{_PW~jF+$7d z=P3!qr?V3Rh3Xp|Zi5?Mk`I7U!vn%v3RsZjzW03T*?z}f(|F@_H)#FcV1Cm`Ph%rA zPc^c_sKPwMFVmfqUatn$CqHBP<3DqX$ z@tRjn*ll#Jd)S?|7gBTMzRF@e?zsD2d|UQ7%u9tjqUfeK-XwPexo2ze7LmxRSn5tb zglktkr`Tk0ym;|m(BkU1r6$Ye{Qmtkl#eXJ66EI`0VHf`@wRCC$^!}`p-~|CWHPFM zSCR#I4=5*G>2{?je(|%z$1zmuEz0vkA%z!LUvmBV?BQT)RCKDQi}_fc&I(=&kU)^ZGolBNE7hzGkIBnVj0#(XL^TCd1V#`A1*u75a~jvtcV-zn(O%@nv>2n63IALOLF`u@mfCv+9=YGtGYCXhfb z568NCP=3FxvANwPtJwnj3uV=xpGNICBcG7ZvCyyo^*Hm9;tE)Xty;$({@G(3%oIr= z_#2Vb_IguuxHd$pcd(~~#SP|_xREgnixe$zyFrRQ5o)U~e`15x{M zT9#H+JzVr2n&ZJ3%l5Q*O6&W$5Pdh5S^`2}{qtpVDI%vE$8{ncq)Md(tM z%{eKst)H|viK<%>EfPzTaykuty*sl(LGpe&TEHc}^(%EJ=CxhOHz5eketTAdYh!Xo z4bN$mChNRt`ZG9|>$hBc0da0hQmm1KWnwLsN4^RoU5VxTvrKXenr3mdhr z`xdq7l7hqKlH7IpBe}=*lhUztZ`3Q&$R&&({o4{Tbp1!7#<4N0_gKw`&nm7yi_wzd zx^wd>{GxcaYF-_C;`{U8@L{?_^>NEib8+CFlo?^3f2!*f2t3jqX1>cPxijuxunE~F z1j4(!nX1tFv)=H&n#3a<8(a-h3LkzBXdbwcHfk21W@z6s8Y!M?vi!md4Ia(yk8f@e zQ%v^O=3su&VdR#!iD}cl@35D+gCJyOZ}6q2)5+}?s=QQe0`Tz5_+ZWoG^fZT9mmdo zdK;!;c;Zm_Gzya``jPb2e&zqXzG+IkcmyfyNA1HGKRNWbwuogzN4$ZbPpTt&`s9za z5lfexJoN4Ups?_J$Z0^!yrm!f4D2rW8t*f}U!;`1qXBT@;}{`mXy_vVk0DG*wTZ7S zvMSL^{qg2r}ywD(Bsyk5vr&G{l3V-A3 zaj7dNeMos<38VUjXdD??vhe*v{OVGia#J;$!#mz(x1`i^W7QQEf#-g7{_!AC^VnNQ zYZCEl7^#SGH}?$H5cLe$LU5lM{HFH^fWG{VDDCwu+PxI4odtC}0kLPh18z9F37{LA zIgcbf{&1eiPB;)yA+xiT?hf_~oN+zSrIX9rEmckIi6x^qYDNWHBOW(qe!@=EPZ-j% z6Di%*ryyikUKpJc9&>ms_CK&ulzE?$fz$}@Bc}~c=i>?#;7Rj-RURkUiYIvW`pGh~(mOYK|9Qvf5bpF~?EYUv zCrn8Nx%*L!QT6CmoE&W5{xpWTIfKAcvxq4V+o3iaynvZK=mh0$8AcrAO|Uy@9>BR%VRCpL*L~J5q_5pJ4}u{868AH#6;ef zXtl!WjFJ9T^BPkA_1ZGh)vGFWqpiXgP<#?a_qrZAhPiH~*Q>S6mJXWbL? zA^7{S$xJs`icEy^> z@Fjz7du(0ghYRE<$h^N-k%JvrAt~UZA*TS>js>({cLw_F8(##~akPJl@09)7a0u8a zsp^Om%+cV?CtkioCVxU}S@aA4^@09ZqPF6y>dO^pl`8Sn!1$5~_bZ4HjREd2tlI(I z*Tvg3=wS{Y1#lVUyR#ybi}DxF(^&sBExR!9MO(vNhLXR|a}gv#RvfRE!d4l?ujCtO zZ~G_1*D8^8Rwk>QvdG=%&8FUf(qY(f5i(r1vwg5;# z1&Kwm7hB`ig zwSgbu?5>~fJ1;WwZn0Yb;GQ~^n;fdZL2pvn%u@9szwTy(X- zde6)K+}QznsIHZPjB)2~LnS8ZEnJ?F8s@)ANS9lI&G4rlflssJ=A>5WJRF>NDh`xh zDE&f@bt#V=&3NAYB`jRq_8#P$t~IV3NQK^I3P$vUxw1O}0f6|4zn(odw@z{S{j@sa%G#_LLw6^9^5uA3XO4 zc`3fiS;fS!rgMVO83)eDJ6D$ea-^DNwcyZ{$4QzuB@;5GRxF zrIfVLo`gDMpp^dAjUmw4`hv>^7R>F+m64(DqghpiW;*Y?6Bo!L^{VUq&}{8BNzUwN zN=S@prL`X}_RYQD7^1yjTt>gr6zhnRBY!Tk{DjO{ks%KV_DsP?vb|XmzVGNejx;N26vp-{0=$>k?=}_DUfRyR>6*7%fpV%1MCtQcmM+-30#{}b! zKOuN${YsdRd{zCVGKfB$%HFq8QE#5V*jU{;ZqS1yl&X>q!jG69e2H-H$x9~Cttuyq z-dh#aNNqKk46&yq2!hODb$Z&ALXKJ4QfYdiJK|Tf%0fsvv9h)sN`78u4c!H)NxP6# z%pRW?vf?LPT}RunEPuS#^rTc8iIGd|1CJ8W0JGWCf8v5UL+?f{EXSf^sT42LFb}0| z@<;sxJN;ZwR|*6k%xRT_PHR#nr>mw&tkKh3L_hh^f+gj8Bq6P!lnf#icx{G8L{NJU zpe&P&xz(vMRxN~e?rj2^qFJG7ss4oG+F#c`X(tdaiklyGLew02(QyLoLd4M`+q8j? zNMRe|XNbrS`o6|;C`x8O`W4}tG8c}_jHjIR#YksyJJ##2Lm3r>C~9;@{R^d#`+`Cc zBb1_{(0ApK#4#$a7Z@F6f=C?f99E-{>&)U=a;YU?g9b5>RZ#2Nt%;Na=jmE0M+>%4 zPEM}`DqieP1%z)8wvK~V`SU1wQ0)MrWJ*of6S;aW#t%j8b2|y_OX8xGo2@eepQat(3Mmg9Ca(=AVhxNR7$pZ66`qIkOD8t-mZ>I zI{xrimR{WSE43JenqgzixY5a`=?*n%p7ZJH`FsK8LuHPi^hwk23Pq5Ku`Fo;Ez6am zwKg5|`;5u(rxWBckRkXs)V+3=<0WJK8^iWEMIIcEzVx*{5=qnZl}-DFcYy62;wVS6 zh_^5uPP04_`k@vWAHDjT;#q!3w*eCaFYMIz@`u=sPuWZp&`SL`^czL#nF*Cx#v@4O ziO?1mNNH!%!=NfB6yt44Hh<6NP12?mNSSa(7dW>$B>5(@myke3mW2A+(NpCLD{$by zDd*Utu@Er-e@!tZordgW4s-jo(^0TebNA@Mf3&YaDX4AIo}6w8KV+*Cqfex89TZ9} zYFPV2!f56a0uPy0!E0px8x$@p6=O)i3lc|=x8I7b`ozcw*lCTGX+&nYclbR9H7sk- z{9oFPpBej~ge8G6z?%2N=VGV-5Gy%PhP(DQz~XtLEIRWq#a%k6Ls-gO^o<>YJQF9Tzdoi( z$8=KOf0Nq53I9Gn`d5VKhmyO2yB^`ZuNdCTV0{1;X7q)^g7g{$C_>Rhz3gZOSJSTT zr)d#&3}3`zjLy<;Dwg{FyDu-87397Ky)``jYmi8A$R#n~w6e0^P!2Of4SEy~&qFq! zx}jZ>r>85q@jf)R0Sc3kHtd-Mi@HJ>u~h%lkJl>WCidIeSAr>cCtHv+LKL?d^|1Tp zH7y>47xDJ57x7w%+my{UCbCGwqjJNZss5NlBBmC}zX9-;+bH;PmngkVPt^V!l8^Fo zAc>tYWb|1iqw(=ZV8{2-*?I5649yNyim7DA0DlkSWaoFow2w3iMfG%~use)^y>j?O z0;x1L(T9Hv%SsK>j;hTmrx9+k*v763UHXgo87`E1hmK=_Wv-z?y={xIH_q8FkaxAG zBgL465Dgll;9+(})*)5IU;ghGS%HlaQzR8OGy1@B{1_H`)=A6!P~OI*znF?T;#QrGFgdbip#O@CTsRAqW{WGRL!ayE|2+r?e2^5F zWX6iXh@s9dU>^#F(@B^8>&-&NnGb;}%t6+*dxQh)>SUA8hwm`j-UW)u0__xOIK?C@t zc7j@Jm8}4b8q-lj(~iPjY4%bo*W|kK#P(GF7DB8&NA$4|^&VS@F7a(NE{}Ws58zs8 z2FdMZAa90(bzA9w4_gHjL7nk2%~O7qG`|d78UUUcxd%<<2Tye?x*URq{{Xjb0U9}r zVXhk`ETAj8UZK1q9!Rucq+^g>V1wG@pX7rU-2!S~xb8)rd$YCPKOLNAYe@^Qu_#o2* zxv}}+6WvZj8s_}ZAgZ5=9^kA$A7)R~20glmj43pitUem93&Y|iI2IgWCAem=QSo|& zA7IA+?ii(uT}c1J!0r58lgo7ot=WjXWxi%F;jbHb1=<1Mk=gkcluChuel8v$Rf!f7i6)%O<0PF=pp;R)gCaF@zjZ z!*_3z>cwjm>VoY(QvcL?MtyL!(s2I3>V}1L_cVPhu+wh*hrD&9`hr)^UyLZ+u_A*dZ~GW#fG>`W5yV*d_da^1l-!fSvI6nbl7( zeDPWYl)Bi=$hHUnVsDMd9*OyEl8%gqcsbmpgA|D1aP_M&b_9MlkR~)&P4YioLV;Ma z#s)NOT7N=4g#_rxPP}WA0Lk)cB3+D|I7p9iaH8V*%#%b19Jm8x&PSd1&W`h8$FS#4 z|5NOjh@kbyhCLoHAGU)CW=1wt2T{C~K#%fkgWu@IkZLXSjip%w*&({?0%Wn02k-j# z9HnJwqsPCWYs3eB{p$>6%5sp`vOgfWF47Q`agud5)W=4){uBT!U&g|>xIj?D_fR-_ zZgNLLe*yl#U!4HPR7TXbfAUsp7MMh?q9th)EJj^OPmZBv8-?8EpX;+S{u%)^?q5rg zS1Kn?wim$%{?2~JxBk!F1%t+y5pd2_+DhEkqPJmkJP0-c+PS#jC&T7;)s`F`bm)3y{;43@f+pqZyy5tmjjcwec zxlcL$jOp5cW$f=|An&sA8NdlQhkQ^Ad5(M@PxA=w z^&e%1;DD8N1Y$Pe6~Id-JhK%|kiL8YI|zN`ntGK;{97UzND;;<@)1P7>8O_huN=Hh znk?h<22!aFSQ1nFRhFF|@xaT*yv3cgVtZ^WUXp+;2np0Khzm0!YD#+ezyeKR(~b6@ zjj#}aTI!eoq%k*UQy;iRZM7oo(gx!Fc6eZ=FW!1q50efm1iN~u34Tj_s0&?WUkE|B%9RsVPNO=5s##f<^UxJfR+ z72~6rA7A@If4V%(j{1d+w9U&Y?Nd%xx?s0R3zM1x2AfEatu&587DW;SN_2aIHbjJj zED>B(ew=_yKNeK@MsF>Tb--Wsv=)nv{p9Ie#{XLoG%E0QkJ-v(C5sy)8zVCINh28x zKO%o_M$0@I*4<;Pai$;Qf zYGf~(jBZ-u+8+2W9{(zpomd(d%#>GYTm^3nBi>gHAAS7y%uIrDlRWH4Fsuk)7j2Xf z_yjfs?x0*fZ<~fyM9pgqW$3l;{of7hxZwK@|9d~(ydZKL7bNVmF?B$U>C<1D41o^c z_pYzc|LTVSQ<_9@qa)Rh2><}$`8#nDRW!Bb1|J=LyW>-X1^}c9ovXsBh@5r7hE@^m zlTm%fe*#fPvJ=uRdewZOT&xWKYfUkPfPLKfgS8^H%{M^3HrFgr1?*Dq)RrZFyC+QTm^P&SPZ-swmaM^-$-Q*0?w3l6{K#Pn(3#$& zXlWAY6%G9F+|T6+7OM`e)+hfQ5sHvhj0n1|p!S4llCgF6Cbm5qy!nnXUz{0bgmvOp zc&Wwwf1CI(+j$8ZK8)qfBLnT(K5n7~3?2#1`_o8`WrMhlBg`~j(=4q1=AQv{{ru7Y zf`kujjgzy(W+QNZ!ybXKY5>G9yAZ}AmBspH7nS8@(chwPem!tg`lshg1>kqW@*9te zzmloBaQj6d9J2t((8O)0_n&u-?L&l_u-$3%+i-1UdP>^($93>@5nKO=^-7{v9)I6F_;%8Xl!KCZ@l^^XTa+S@ViWp z4x(bO@+Kdku2jFl+3{|xLPo&_WM3E{uu;RY0cN7Myn7j|>jyVt_%Hy7VxkkT$jN^2 z2PP D_)?p2 literal 0 HcmV?d00001 From 3615f56e75c5a076d724f7c171c7d97d7e1d7c4d Mon Sep 17 00:00:00 2001 From: Willems Davy Date: Fri, 7 Oct 2016 23:27:50 +0200 Subject: [PATCH 64/70] Add warning about not working on windows. (#1177) --- .../_components/device_tracker.bluetooth_le_tracker.markdown | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/_components/device_tracker.bluetooth_le_tracker.markdown b/source/_components/device_tracker.bluetooth_le_tracker.markdown index bf32000dc5e..3d7d31e0f91 100644 --- a/source/_components/device_tracker.bluetooth_le_tracker.markdown +++ b/source/_components/device_tracker.bluetooth_le_tracker.markdown @@ -20,6 +20,10 @@ Devices discovered are stored with 'BLE_' as the prefix for device mac addresses Requires PyBluez. If you are on Raspbian, make sure you first install `bluetooth` and `libbluetooth-dev` by running `sudo apt install bluetooth libbluetooth-dev`

+

+Requires gattlib, which is not compatible with windows. This tracker won't work on windows! +

+ To use the Bluetooth tracker in your installation, add the following to your `configuration.yaml` file: ```yaml From 1fe88fbc71eb15d78bf9df08d6065d21a540c58b Mon Sep 17 00:00:00 2001 From: Anurag El Dorado Date: Sat, 8 Oct 2016 11:21:43 +0530 Subject: [PATCH 65/70] Update component_discovery.markdown (#1155) --- source/developers/component_discovery.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/developers/component_discovery.markdown b/source/developers/component_discovery.markdown index dd1d82d6d49..7bcd052fe2e 100644 --- a/source/developers/component_discovery.markdown +++ b/source/developers/component_discovery.markdown @@ -10,10 +10,10 @@ footer: true ---

-This option is only available to built-in components. +This option is only available for built-in components.

-Home Assistant has a discovery service running in the background to discover new devices. Whenever a new device is discovered, an `SERVICE_DISCOVERED` event will be fired with the found service and the information. The `discovery` component has some knowledge about which components handle which type of services and will ensure those are loaded and listening before firing the `SERVICE_DISCOVERED` event. +Home Assistant has a discovery service running in the background to discover new devices. Whenever a new device is discovered, a `SERVICE_DISCOVERED` event will be fired with the found service and the information. The `discovery` component has some knowledge about which components handle which type of services and will ensure those are loaded and listening before firing the `SERVICE_DISCOVERED` event. ### {% linkable_title Add discovery instructions %} @@ -23,7 +23,7 @@ To have your device be discovered, you will have to extend the NetDisco library ### {% linkable_title Listening to `SERVICE_DISCOVERED` events %} -From your component, you will have to set up the listening for specific services. Below an example how one would listen for discovered Chromecasts: +From your component, you will have to set up the listening for specific services. Given below is an example how one would listen for discovered Chromecasts: ```python from homeassistant.loader import get_component From 9918b67f29b69b647402e07d88f1d08ccc55f3b9 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 8 Oct 2016 19:18:14 +0200 Subject: [PATCH 66/70] Add images for release blog post --- .../screenshots/config-validation-url.png | Bin 0 -> 23798 bytes source/images/screenshots/stats-sensor.png | Bin 0 -> 71737 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 source/images/screenshots/config-validation-url.png create mode 100644 source/images/screenshots/stats-sensor.png diff --git a/source/images/screenshots/config-validation-url.png b/source/images/screenshots/config-validation-url.png new file mode 100644 index 0000000000000000000000000000000000000000..578114abb48b878c7236adf6615a200e559390d4 GIT binary patch literal 23798 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 literal 0 HcmV?d00001 diff --git a/source/images/screenshots/stats-sensor.png b/source/images/screenshots/stats-sensor.png new file mode 100644 index 0000000000000000000000000000000000000000..7832bcbbd4522dd125db1a346b5fe9fdf736655e GIT binary patch literal 71737 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 literal 0 HcmV?d00001 From 25b09ea9dbb8cb1ffba4409ca2744780ac22fefc Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 8 Oct 2016 19:52:25 +0200 Subject: [PATCH 67/70] Release blog post for 0.30 --- ...10-08-hassbian-rest-digital-ocean.markdown | 163 ++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 source/_posts/2016-10-08-hassbian-rest-digital-ocean.markdown diff --git a/source/_posts/2016-10-08-hassbian-rest-digital-ocean.markdown b/source/_posts/2016-10-08-hassbian-rest-digital-ocean.markdown new file mode 100644 index 00000000000..43e8425764d --- /dev/null +++ b/source/_posts/2016-10-08-hassbian-rest-digital-ocean.markdown @@ -0,0 +1,163 @@ +--- +layout: post +title: "0.30: More Async, HASSbian, Digital Ocean, statistics, REST" +description: "More asynchronous, HASSbian image, Support for Digital Ocean, statistics, Västtrafik public transport, and Hacktoberfest." +date: 2016-10-08 03:04:05 +0000 +date_formatted: "October 08, 2016" +author: Fabian Affolter & Paulus Schoutsen +author_twitter: fabaff +comments: true +categories: Release-Notes +--- + +Yes, after only nine days comes 0.30. Don't worry, we will try to keep our usual release cycle and not start to release every day. + +We guess that you already know: The [Raspberry Pi image][pi-image] is available now. For Hassbian, [@Landrash] has combined the most essential parts for a Home Assistant setup in an easy-to-use image for the Raspberry Pi device family. Hassbian is quite young, thus we are looking forward to recieve [feedback][hassbian-forum], [issue report][hassbian-forum], and [suggestions][hassbian-forum] to improve it. + +A large amount of resources of the development are still focusing on the effort to move Home Assistant further to asynchronous programming. It's a labor-intensive task, comes with segmentation faults, and unstable instances when certain combinations of sensors are used. The benefit will be more speed in the near future. + +To reduce the run-time of your tests, [@balloob] did a lot of tweaking. For now the RFXtrx tests are excluded which cut the needed time for running on your Pull Request in half. + +### {% linkable_title Documentation %} + +All configuration sample entries are now minimized. This should help to avoid problem for starters and newbies as they only get what's needed and not a full sample with all optional entries. If there is an issue with an entry in your `configuration.yaml` file the error message will provide you an URL that point to the documentation. + +

+ +

+ +As soon as the [Hacktoberfest] started there were a lot of incoming Pull Requests for the documentation. A huge "Thank you" to all participants. Especially, we would like to give a cookie to [@hillaryfraley]. She created around a dozen Pull Requests so far and didn't only fix typos but complete sections. The [Hacktoberfest] is still on-going and we are looking forward to get more Pull Requests. + +### {% linkable_title Statistics %} + +With the [statistics sensor][stats-sensor] we would like to introduce a new sensor that is similar to the [template sensor][template-sensor] or the [trend sensor][trend-sensor]. This sensor is consuming values from another sensor and is doing some statistical analysis of the data. Over a group of samples is the average/mean, the min/max, the total, the standard deviation, and the variance calculated which can be used in your automation rules. If the source is a binary sensor then the state changes are counted. + +

+ +

+ +As the results are processed on-the-fly you still need to use the data from your database for a in-depth analysis of your stored information. Check the latest [notebook] for doing statistics with your Home Assistant database. + +### {% linkable_title REST! We don't... %} + +There was a lot of work done on our implementation which are working with RESTful APIs. [@w1ll1am23] extended the [aREST] platforms to display if an aREST unit is available or not. The aREST is now covered by the configuration check as well. Please check the Breaking changes section for more details. + +The [REST sensor][rest-sensor] supports now HTTP authentication (basic and digest) and custom header. This will allow you to access resources which are protected. This sample sensor will access GitHub and retrieve the latest release number while by-passing the rate limit for non-authenticated requests. + +```yaml +sensor + - platform: rest + resource: https://api.github.com/repos/home-assistant/home-assistant/releases/latest + username: YOUR_GITHUB_USERNAME + password: YOUR_GITHUB_ACCESS_TOKEN + authentication: basic + value_template: '{% raw %}{{ value_json.tag_name }}{% endraw %}' + headers: + Accept: application/vnd.github.v3+json + Content-Type: application/json + User-Agent: Home Assistant REST sensor +``` + +### {% linkable_title Misc %} + +- GitHub released with a recent update a review feature. This will give you more control over your comments while you review an open Pull Request. +- Thanks to [@robbiet480] we are now running [mention-bot]. It will help you when you create a new Pull Request to identify potential reviewers. +- The [Home Assistant Community Forum][forum] has now an additional section called "Installation". + +### {% linkable_title All changes %} + + + +- Core: A lot of stuff is now async ([@balloob]) +- Nest: Support for operation modes ([@jawilson]) +- Z-Wave: Massive update for command classes and device classes ([@turbokongen]) +- Digital Ocean: New [switch][do-switch] to control and [binary sensor][do-bin-sensor] to monitor droplets ([@fabaff]) +- Cover: Support for [MySensors cover][mysensors-cover] ([@OttoWinter]) +- Wink: Support for oAuth2 and relay sensors ([@w1ll1am23]) +- Sensor: [Forecast][darksky] update interval is now configurable ([@KlaasH]) +- Core: Failed login attempts are reported as persistent notifications ([@fabaff]) +- Climate: Temperature convert now available in the Climate object ([@pvizeli]) +- Notify: Update to accept a list ([@robbiet480]) +- Device tracker: Support for tracking of your [Volvo] ([@molobrakos]) +- Switch: Flux improvements ([@jawilson]) +- InfluxDB: Time-out for connections ([@simonszu]) +- Sensor: New MySensors types available ([@MartinHjelmare]) +- Switch: [ANEL PwrCtrl][pwrctrl-switch] devices are now supported ([@mweinelt]) +- Frontend: Path of the configuration file now visible on the frontend ([@justweb1]) +- Homematic: Extended device support (RF, IP and wired devices) ([@pvizeli], [@danielperna84]) +- Sensor: New sensor for [statistical analysis][stats-sensor] ([@fabaff]) +- Sensor: Support for headers and HTTP authentication for [REST sensors][rest-sensor] ([@fabaff]) +- Device tracker: Support for encrypted Owntracks payload ([@molobrakos]) +- Tests: Improvement of the HTML5 notify tests ([@capellini]) +- Wink: Support for Wink Smoke and CO detectors ([@w1ll1am23]) +- Sensor: [TED5000][ted5000] sensor was included ([@gwendalg]) +- Sensor: Support for [Västtrafik][vasttrafik] public transport ([@persandstrom]) +- Notify: [Pushetta][pushetta] no longer sends message on start up ([@Danielhiversen]) +- Sensor: [Forecast.io][forecast] sensor was replaced by [Dark Sky][darksky] ([@fabaff]) +- Device Tracker: The `known_device.yaml` file is now validated ([@kellerza]) +- Minor features and bug fixes by [@tchellomello], [@pavoni], [@fabaff], [@pvizeli], [@lwis], [@turbokongen], [@Danielhiversen], [@persandstrom], [@balloob], [@robbiet480], [@sam-io], [@bbangert], and you if you are missing here. + +### {% linkable_title Breaking changes %} + +- All deprecated condition options from `automation` have been removed (deprecated since May and have printed warnings to your console): + - `use_trigger_values` is gone. You have to copy your triggers to conditions and adjust for the correct config. + - `condition_type` is gone. Use `condition: or` instead. + - To specify the type of a condition, use `condition:` instead of `platform:`. +- The [Forecast.io][forecast] was renamed to [Dark Sky][darksky]. Replace your `- platform: forecast` with `- platform: darksky`. +- The [aREST][arest] configuration between the [sensor][arest-sensor] and the [switch][arest-switch] platform was aligned. + +### {% linkable_title If you need help... %} +...don't hesitate to use our [Forum](https://community.home-assistant.io/) or join us for a little [chat](https://gitter.im/home-assistant/home-assistant). The release notes have comments enabled but it's preferred if you the former communication channels. Thanks. + +[@balloob]: https://github.com/balloob +[@bbangert]: https://github.com/bbangert +[@capellini]: https://github.com/capellini +[@Danielhiversen]: https://github.com/Danielhiversen +[@danielperna84]: https://github.com/danielperna84 +[@fabaff]: https://github.com/fabaff +[@gwendalg]: https://github.com/gwendalg +[@hillaryfraley]: https://github.com/hillaryfraley +[@jawilson]: https://github.com/jawilson +[@justweb1]: https://github.com/justweb1 +[@kellerza]: https://github.com/kellerza +[@KlaasH]: https://github.com/KlaasH +[@Landrash]: https://github.com/Landrash +[@lwis]: https://github.com/lwis +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@molobrakos]: https://github.com/molobrakos +[@mweinelt]: https://github.com/mweinelt +[@OttoWinter]: https://github.com/OttoWinter +[@pavoni]: https://github.com/pavoni +[@persandstrom]: https://github.com/persandstrom +[@pvizeli]: https://github.com/pvizeli +[@robbiet480]: https://github.com/robbiet480 +[@sam-io]: https://github.com/sam-io +[@simonszu]: https://github.com/simonszu +[@tchellomello]: https://github.com/tchellomello +[@turbokongen]: https://github.com/turbokongen +[@w1ll1am23]: https://github.com/w1ll1am23 + +[arest]: https://arest.io/ +[arest-sensor]: /components/sensor.arest/ +[arest-switch]: /components/switch.arest/ +[darksky]: /components/sensor.darksky/ +[do-bin-sensor]: /components/binary_sensor.digital_ocean/ +[do-switch]: /components/switch.digital_ocean/ +[forecast]: /components/sensor.forecast/ +[forum]: https://community.home-assistant.io/ +[Hacktoberfest]: /blog/2016/10/02/hacktoberfest/ +[hassbian-forum]: https://community.home-assistant.io/c/hassbian +[mention-bot]: https://github.com/mention-bot +[mysensors-cover]: /components/cover.mysensors/ +[notebook]: http://nbviewer.jupyter.org/github/home-assistant/home-assistant-notebooks/blob/master/database-statistics.ipynb +[pi-image]: /blog/2016/10/01/we-have-raspberry-image-now/ +[pushetta]: /components/notify.pushetta/ +[pwrctrl-switch]: /components/switch.pwrctrl/ +[rest-sensor]: /components/sensor.rest/ +[stats-sensor]: /components/sensor.statistics/ +[ted5000]: /components/sensor.ted5000/ +[template-sensor]: /components/sensor.template/ +[trend-sensor]: /components/binary_sensor.trend/ +[vasttrafik]: /components/sensor.vasttrafik/ +[Volvo]: /components/device_tracker.volvooncall/ + From c2e2db6dfe45e8bb1d512894b46843531e050c1e Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 8 Oct 2016 19:52:49 +0200 Subject: [PATCH 68/70] Update for 0.30 --- source/index.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/index.html b/source/index.html index a192ff36f92..52bd20bdb7d 100644 --- a/source/index.html +++ b/source/index.html @@ -15,11 +15,11 @@ hide_github_edit: true