From 76284e87b8dfa519114e9c993810006750f0d9c2 Mon Sep 17 00:00:00 2001 From: Carlo Costanzo Date: Sat, 19 Nov 2016 18:38:16 -0500 Subject: [PATCH 01/42] Create initial cookbook file for @ih8gates (#1428) * Create initial cookbook file for @ih8gates I thought you could use the gist but it didn't work out. you can edit this file now though. * Update automation_first_light * Added {% raw %} and {% endraw %} to template lines. --- source/_cookbook/automation_first_light | 121 ++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 source/_cookbook/automation_first_light diff --git a/source/_cookbook/automation_first_light b/source/_cookbook/automation_first_light new file mode 100644 index 00000000000..ca88cadf653 --- /dev/null +++ b/source/_cookbook/automation_first_light @@ -0,0 +1,121 @@ +--- +layout: page +title: "Examples using first light" +description: "Automation examples that trigger lights in the morning." +date: 2016-10-08 19:05 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Automation Examples +--- + +#### {% linkable_title Create an input_boolean in your configuration.yaml %} + +```yaml +input_boolean: + trigger_first_morning: + name: Waiting for first morning motion + icon: mdi:kettle +``` + +#### {% linkable_title The Main Automation %} + +```yaml +## These first two control t input_boolean that allows the "first morning action" to occur +## If the action is triggered, it will also disable this boolean. This assumes you have the sun platform enabled. + +automation: +#turns it on at 5am + - alias: Enable First Morning Trigger + trigger: + - platform: time + after: '5:00' + action: + service: homeassistant.turn_on + entity_id: input_boolean.trigger_first_morning + +# turns it off an hour after sunrise + - alias: Disable First Morning Trigger + trigger: + - platform: sun + event: sunrise + offset: "01:00:00" + action: + service: homeassistant.turn_off + entity_id: input_boolean.trigger_first_morning + + + +# This is the main automation. It triggers when my motion sensor is triggered +# (in this case, a motion sensor from a security system attached to my Vera) + - alias: First Morning Motion + trigger: + platform: state + entity_id: binary_sensor.livingroom_motion + to: 'on' + # only complete the automation if we're still waiting for the first motion + condition: + condition: state + entity_id: input_boolean.trigger_first_morning + state: 'on' + + action: + # turn off the "waiting" boolean regardless of whether lights will turn on + # so that this happens only once + - service: homeassistant.turn_off + entity_id: input_boolean.trigger_first_morning + + # But only turn on lights if the living room and kitchen lights are off or dimmed + # If a condition tests false, the automation will end + - condition: and + conditions: + - condition: numeric_state + entity_id: light.livingroom_ec + # if light is off, force a 0, otherwise use the brightness value + value_template: {% raw %}'{% if states.light.livingroom_ec.state == "on" %}{{ states.light.livingroom_ec.attributes.brightness }}{% else %}0{% endif %}'{% endraw %} + # brightness below 50% (255 = 100%) + below: 127 + - condition: numeric_state + entity_id: light.kitchen_bar + value_template: {% raw %}'{% if states.light.kitchen_bar.state == "on" %}{{ states.light.kitchen_bar.attributes.brightness }}{% else %}0{% endif %}'{% endraw %} + below: 127 + - condition: numeric_state + entity_id: light.kitchen_ceiling + value_template: {% raw %}'{% if states.light.kitchen_ceiling.state == "on" %}{{ states.light.kitchen_ceiling.attributes.brightness }}{% else %}0{% endif %}'{% endraw %} + below: 127 + + # Trigger a scene + # You could add as many services or scenes as you'd like + - service: scene.turn_on + entity_id: scene.morning_first_motion + + +``` + +#### {% linkable_title The Scene %} + +Here is the Scene that is called via the Automations above. + +```yaml +# here's the scene that gets called. Lights in +# my living room and kitchen turn on. +scene: + - name: Morning First Motion + entities: + light.kitchen_ceiling: + state: on + brightness: 127 + light.kitchen_bar: + state: on + brightness: 178 + light.kitchen_above_cabinet: + state: on + brightness: 178 + light.livingroom_ec: + state: on + brightness: 153 + light.livingroom_track: + state: on + brightness: 153 +``` From 12a3a5cdbf04d1cd626ef9c3855e0e9b4c7786be Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 19 Nov 2016 16:16:03 -0800 Subject: [PATCH 02/42] Update date on release post --- .../2016-11-20-calendar--wink-thermostats--cisco-ios.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_posts/2016-11-20-calendar--wink-thermostats--cisco-ios.markdown b/source/_posts/2016-11-20-calendar--wink-thermostats--cisco-ios.markdown index 5a223205467..ba91139c36b 100644 --- a/source/_posts/2016-11-20-calendar--wink-thermostats--cisco-ios.markdown +++ b/source/_posts/2016-11-20-calendar--wink-thermostats--cisco-ios.markdown @@ -2,7 +2,7 @@ layout: post title: "0.33: New Calendar component, Wink thermostats and Cisco IOS" description: "Continued our upgrade to Async, fixed tons of bugs and added a few new things." -date: 2016-11-19 03:04:05 +0000 +date: 2016-11-20 00:04:05 +0000 date_formatted: "November 20, 2016" author: Fabian Affolter author_twitter: fabaff From 48703d3543274a4df8eac8b31200c1f6e632b9d1 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 19 Nov 2016 16:24:36 -0800 Subject: [PATCH 03/42] Add social image --- ...endar--wink-thermostats--cisco-ios.markdown | 1 + source/images/blog/2016-11-0.33/social.png | Bin 0 -> 127234 bytes 2 files changed, 1 insertion(+) create mode 100644 source/images/blog/2016-11-0.33/social.png diff --git a/source/_posts/2016-11-20-calendar--wink-thermostats--cisco-ios.markdown b/source/_posts/2016-11-20-calendar--wink-thermostats--cisco-ios.markdown index ba91139c36b..6768239bfba 100644 --- a/source/_posts/2016-11-20-calendar--wink-thermostats--cisco-ios.markdown +++ b/source/_posts/2016-11-20-calendar--wink-thermostats--cisco-ios.markdown @@ -8,6 +8,7 @@ author: Fabian Affolter author_twitter: fabaff comments: true categories: Release-Notes +og_image: /images/blog/2016-11-0.33/social.png --- For this release we put a lot of focus on finishing our async upgrade and fix a bunch of bugs in the process. diff --git a/source/images/blog/2016-11-0.33/social.png b/source/images/blog/2016-11-0.33/social.png new file mode 100644 index 0000000000000000000000000000000000000000..ba240d1120749be0441a1afbb4be60a4d7d896d9 GIT binary patch literal 127234 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

3{T& z>8Vl9gY0;6%^G`vZNp+)m zS((PFIr;3&YR5=aZ3Bd0>_iQO=?j~iQ>Mlt5a5&2TD9tyL35gXx;-=*+>^EHf5)02 z)bwFTRI)93mM>oUgo;#oFAf_48Ymx=#2Rfp_OZI3*ko~ve_KV1*oXyqRT^FEeRD_{SC6r$Xs zd-(aX;rr+E4F|j~53uU{dq3do=1;gbZFbP~Ab6|rFFEzUBJo}UkefpWz1X!puOcjA z)*~eRme>|+N&DJ|cVh)~kHPdmuB-;CDZ{~pG#hZj?mR>CZY5{&FM8dTr>}(wVn+!Q zB8Nr$C4yIY&56++wlp>QHz$o5`<2u2L}8V#LLl*ek6X8xTEy?nr;ZznV@fgZGOEhT zU$Ry7bGK@kW9c}E6=P{Z@Mp#J7hDJm87ZsYbQ%mJAIzw%TuP^`sOpd>HZ+{}Br zkI{V<3@w(;_D&u8PTdH8g=l)pTe{!&_O^@)Z3habA(^>dLDVY_&%8+TXex%D*Qd3R zWz60H$q$1OMj&)ov8&y}O;yH0n&W-1p{#OfP_e>z;+3$lV8$(H6{D# z!1_J}Df-kF)EUNw{AY|)!vi|c7q)TzR#lZFH3TGqSGyI_G1IL-Q|s)5+~AslpTf{a zP8OKT9aszdB3+=c=MKSGqnd8$wStu(62Y49&l+Y-nbS*hJjzr0n`t!T3RYGff9if( zca!J67Aev*$v>mW^+Msg^2qC>p*S~#OmW(94wdri#xgv}Y_tAQ*!Ka_@LIC2?xsBg z%4lG6oQ4CvHHa5UUf}mH>>O`4gxQ{7(mlV57`$PZvA<`Y$d8|JUVyZqx`L*>9ui`~ z)qN-*`D?ILWDY|7eT6EFJ;Ll{Su+y?=es7<@he!Y)YmOk%*`s;R+!L!$JUMrfjOcN zjIMl>B=CI&l`MMJMCj2|c2`(bTQ%QnBdIALpY>XIzunao7^~}*4ocu8Jk_8ebmM;% zWOc-*mWdC3*9%q*>QA%72M(pIO(Y2PqD5qTccK)k*vV0Kb_^!i5g@5aaolP~j~?;_M_!pOqFxcoc@WRYnFxp*qA7@MLl3rlzO3=l&g=ky^B z@2;)}kWznxc6n`~4i$<$0xEwzfyjn7ia;;wLzvNqqLwZ)s?OuWcGE0+F_s;5Z)h?r z&{a$}pAjeU{yfy*4iT1`tQAtNK<(m zzO*+P92z{NptAnu*S!2v!l>B*#Ko8t4S1};o7;dq%!AoV2S)enTxxgY(VS0FLPKx; z3DX4c>(#)-1k;+;c^LuDWkgDz`mW&)Hx&H3)MTe!DtjQC+r!0A6BFkG{Cuf+)h1p< zkS;;~l}EWBR?AuC(}VAy2f?lrjCGYxb$eCyQs2~l9gw;}w(}>9OH->zu`P1pnqZI@ z1`gy8b^s;uzkR3|Eo?8qUP_gG+m;tA0>PAwSidt5O!!f<~`81yLyhTBJXQ4+Z`_NeS@XFB?s$QVP7R%&5-Q zsg6cE55$UQbD!qI`CVwu)K(KA(7$v!>F9EqRHHm;Gk>naZ5HPd9{X?DP;16(hSV)JyjMry(dYo4S+*oqUC4{3xiGs@V!9hJ2qPzP6XQ zSbIN{pfL8U{iA9OHF~BfO#Zk+KTG|>bf|r$kd7s6oK5rnLTqtYzSOZ@iVk9ll>T;t z>WHbS=@xbcXm=V@9N~O+FGB1{YDl!=pR1x>zkZdGlBSOI>5uzy_0v?qJxnH~xuYfY zbcVw>hjvl_OqU)fUYWEOCX9n7L9Rg9D$;wNOD#7K1zCu)Az8Rza?AA*_wH-fEqPRK zvsmpPn*zhp7YeY|Dh+lSytd&~;CoKVzQ~cypHkD-sa=25S|HROYG!c9{w6kslEaTV zA{D4>6b{-cU0xVJ<)AZP3Ma6=v$Ls06zxG15pJo~dae1c{_#iYVM`rEoh3)@=etO` z4#sD@L^X%d6d6w}TzEvz*as<9ZO@WE$qGueo0F~2O|-3};gu0ans<&>HUCmXHbCwC zNeElq-L_q;RSX%HDKum&H(%h>R#{0-f3@ysdHyG3=fE~?n>eYte&?@`(A}YWU-ql= zMf>b(BFSJ|m!&vCNOv?@|8U!Fm%n+M3dlZ4?9d8R*&0Tsx@R(@!b`0)s%iT zODQZ$(jPTd)>{VO));c2wC;4MbHG1O^)LQ5&)^Y#d%wEO>b3$gtKM7da~-Lt?X()K zN~i4<$guxSEw7j{mR5Ll0;}*$o-IK*c27->dMjT)A>qOZF15lq2>eykn>dl>09fYp z?!*bzIWYazz5Rq>u?3xX!;>DHDwK-c?pMra@!G|H9;KV*Xe=z%N$GyqY#g|&CsiCH zX_rd49p0H0C#Z57n7CQ}@q&e^e0NxsV^3-bR^cLS@~+LiC9pN6z*!6V2zupg47wu3 z2%dFY6=U$%M&7Ybe~T+Aco8Eo<4P%!cJUB0DC;v~MKa}U%+Q=5y{|~3U?{Dnz-t|U z6IVjsw+Xmti+77>4qAPSfL>)aiC~>J5?cvBd}tZB;6^6Q5128|vq&oAP&G~tm70$( zbl50yrO6F30WnPrfgB*KDvqiPv`?*xILR=m43~(m9~o z@<30O1pVwQTHjA)ViiG<3*0i{RdN7oawLr)-{*JtblnxSleY>(rQuf{6Y&x1@y-0Fd}&yC_%FXBu^Gca z2bA3*{T2S_y0U8XVC}&#jo{%ry0?PjzEZtB%0+ai;l(!WmEkpS%mCxc=_1_LxdyYD zMJoJlu5u^WFC6rqLbeOIkk)>?tcyWw?*;=Ta^$aoGDbS#s-QN=0|%!dn~=J=AK3aM zq7CvKMCFW=Dsb?+zoI~IzMEJK+DhZcjP(^#o}H2qO(0TJK+6f|ETS;FeLDy4JFod( z!YE@Sm`i%gH&rqxm%tw?ntA@_oO?jTs0HAqZmVD`0d~^`tqze?2i!&C^ZAcCW&vK_ zPIzv*#O=OOW|JU&3O7A%}tf{}2s4gq2Fl1YzW#l4F`dB`TXqzWIk80(J=>{z_rI=q_`)*|w{$h(QsJ zP(eb4MT1mgP;^7|-lC`;*#E*SubqD+LWn#?NPHMRF^8l=`tQL^@WB0-G3%>!u{#x1 z$87`pz7<>Cg_46fH8>8omu#ZZrd_S9osyhJc?x34ICqjWXu3wD?IE-J@(SEB5ENlz z1(cMZJ`8fBWRxj?+&~khN=}1Q5q@t6{@%G@rK^S-T#_bd?d$xzs3>XP8-s_@B5MN! zlF@Ab)h~#K_i2ckvpLwfldm;9>x^uO6C$6&5w;3?NzPI&Au58{_94mnz5O6`it~@W zh1Tq(v=o!=1R_vW=nCkA+JOsN&Zi0f-#vb8q`ry&Tp*r>qTfS;9Cr6XK5Q&lm`eE2 zB=XBY%mQ^g_?+zA#Bfg6hiwI?U-GvZRi9;D+`kwOqTCQ-wB5s^HdUTrhzvAb&rZE^ zM&ADx2ew$?sZ$R~al+VwC}=%9fvOUbO^?@>V4-Y1KUBlxa1iV7g{o_;a^mqLN2x5G^|aP&F) zze*Z*`r&^sjrTzHzdHRMnf-UXzeeW2Km0F+{y*yePvrccw*Mcku>X&``9HRy0s^4} z@J@A8ATT1^Pu&r;7E%8$>wlOb;rD52>1UYnU(QTGaEt!64_u7kw$gu@^Z(BXR11Hb zLh$FHcxT@KUF-i39A<@G)axrmK!pl2!B>6S=tTtS_7ZGsD}?=Mxuj?t!XKo+(kbj4 z^-=o+3Ixrf+wViJddV#&nKKk!Qn54rsnk^!G(dOJ+&IDFYafrH21H9VzdywQ1(jO| zhrKc9oa_yBp?$uHzBPhCYGw?kKNx?KFTRJRIQ$3%DqQS$l-P_G(0o);7F8@O@9WrM zYy601P6(D5S{~}g+RQXzF1Z4|oMQc1W};SRfK_&a+4|9Hg&n@OxFVzam|xcGySL9z zjPGcoW!_BSuvbz7tD`}m!o*PZp;^d$?Ng+sODKSipHM}~J{RQw!(%r-JAH-Jbm6Eh zlRdfy!qOOvwPvN1{eGTJAF#C|a6$1Q#R+Cy@;5D!5z1S<#6No*b{~PfpPc23k#*G2 zWPf;NFqDE$xmC6jS78RErcWG91;94uqG(#_IC~6By&xUs3LJ$#Ji~x!E060_9Ok*`Ug$dK7 zWVq%PoJ>hZsqg521y|TNHRJF9`(R#-2;vup8#08Pp+>WXV`8mwXTtqzicv<2 zK}LuHPBB#Dlu3`E%Lgc8?2k`EU-SsKAU^KJ=j?pa#vWXE{Su*LqxD+c%0vZ{*i2oz z$=Yitw1Oi{m}oJtXr;=IvSkYqcD2&@Ra| zWg^fLnd_D4Bt=%B{QwFcaJz5wv=H%rs`X5x=1O_}shH8>TFRZk7VUTdCb3A_cy7u* zcwOChg}Pd_x08aO(S3|Ul0(qJI_}|R{m#SdX3ff$crdItft~~YD*L*7N)nM@`rRbs zV?m7rrQKZ2)Hz>A`vdNJ_igX}`Af5l^?4z6w(GFFk^OV@Erai$N z=BebUI`e}^$6t$QVTbCdFDH3}73jECsln(6!-ZbL6#yHFG`S70bYq||SQ`w>KsY8C zzO8d*@D^=Ao%QWGfJhI3X)cHq3eg+k-A>L`yEiWvkK)+#^?HRW;Vi*A3{+}(_!>EH z%aY4+1BI%N)yRi(=js&H!7i$$8Ni<_#%Tcw-CIVez@BnojUe*-?VG&f1dG86M6YFa z*13T5nYNWf$h`j2cQqx9ezeEec16aH7FRsp_Les*%JAd8HHO@Fw`Xc6hx0L&&L-&A z{FLU=?KPwi8Rd&|e%mO|3<&pn*!UMXnfQ_NF~j8ICEHNmz)_qbXMe-))ch*nMY`-M zhcyM#AW7CFbAyva{pw?tIx1lsQhIh2J*JFR;7+34jo`vf`dCBPc8nQFl1NgHvM-wSzN#0S|JP+B%l7r?8E@}`vJr)L`;0*^{r z7cY0{(5r+%lWh+_kdq-LO6*@POV=CfkBJc&`jZ4z&gLfxhLLvo1I-^GYan;0WO@1H zZ+=n0bj}0@3JaHckBL3|#_Xr-7q%So$d+W_mJK?SLorc6kiQC0bAv78=G0{3LhKvv zuCS8eYgE7|c&HPsBv2A zRxle0pY1f{@qqd1mV)6y2mARLX|waUKgs1w8_&aLC&g#PNu&O#IMeBU5scsYV~tJ> z0D=Z%qCN0*x89(_f~d;+mTFEm`K(SC`Iujt@z<|5W|b|Uy=BNtOw%-x-@T+n;Aw~v zkLd==b#Jq9xbS+ddhnW(S$eI0C%n(WChC)1n?*`nqqNFrStW1&gL$@GJ%+u&;DGoU zM}h+(A|!&S06vyP>u~7&syvD1nwv&RL%m=g^u%$QG#phPFi|s2ui=sh`Y&PQ~r|Wpmlq{S^a-0#xhDG{=0ZE*w@sI>!jPB14}&Nxoa= zMEuj${%Dv75kSCice^1ts+W?(L4#C$8VFes5S7+K$&3@-!#@2gROy+1d4%m8kQytr z$n7BIz*9qjPn&BOqWu?qfLIe~%|t>WwFS`1gQrAB^4NPy;QAC?!};==I&kNzhU*K| zhGu;w!xMGMprHpeV&#b@B_<;RO)5=ct4V7wUlHnx2r(ZjqSHateX{~7%GHyb3EmLf zC*?+1xcaG{Pay{6UP>m!^gVl4D^~Q`^q+U5vtwdDybdB&e#op9lbL67aADk$c-H>X zRXU?BCTYmcW@pjb(80GepJMGB89nmCfF$fX)sRGAMOV#~20C6i=6sOCY`W8Z`v*by zQ^VngBpJ(hN9L6uAM2R6nFMJkE-vwoJ6P8}?=`K6bw_bRZB{U>BU>Yw7MDZ_vE{Q0 zKP_CJ)fqPz)1lGxIf>5DZ%UsWj<262eZJkQ;f1?HhbDu%hs+xZl0*fSR?z#K4H?4^ zbuRRG%4c+3|Anz2>&3d<7#%PK0ZVn*NnESaI@xBbCsuS?|7}<_LnD4RHa0;B+5_`yYwu&ZShh&)oCxiTtNYb3 z50Z%Hzywh>_&h3$u-XXifaM^w0FCEI`;^Bz0s`L)Erwiym9H8pGXFmS&_FN0@x2N+ zn>66Vtu-+^{rq=cofwUM=+Ou6f8@?UD1ctO2*ir8P{-zrosLBT`6VW1trpDLAh4sR)|WKJh;oooaG(X5KVS}NGwWLq z&z^hx_2-XYIp3el=2g&xSA7C=EGHRHojP`|kS)X~XCD5=`xQk&QPptu3A^CBo9(38 zkV{MurZ!1Tv2(AH(=V}Wr`f~+&z>i%l_?qxMrhALa_}B<>j#v*w=;#yYDQX48z`s5uCbae zqa%tk&fzCA@^bVj{Zf&dgHTzXA(tloXV`@|*p(A(mQ0BjlVDNl|19$)31UoSSZzthEJCHh*yXE&ZweYMVtplFm7T7s z0Y&lobU*y_>1u}OcFtxEqc8(BET1=l35UXdUDE`QuIe4l(-(VOo$(1@Qvv~>G&5$i zG?z0cC)1*aEmuBxNnxQA@H$WC3g*s*lcZ)cLsv&L>D=<3N!xO!#$wYG@j|XZ>yOSY zaWM7{Wg1rB#lcseJ@)F4-nx2z0LZqgscUlANtf^VRN~Yd=hDfHrfU=y(#pI!LLsjRgv({xP_v)*^uPrn6{ zn)Mt|?*C9$HQwEbpN&d>$+$~V|MKcewb9-G9x@fEW$Y@C{AlY{KNSIBdJ3qwW^-9;b#ReIMa zNFYLdenN0n5jpT20QK$5I9D?EwX8FmcVY%hTg-MyNTXpLNGw%_^>AKe*LT6I3FCrp+UJXmoB4ZpX23Wc)-fp7DK zswG|$ZjL(6kafy*h58f{07gychwM8gkpZM}>$|L!QnL9}mdW#0Jt>>R8`7`E-k~!Q&?6}6> z(%jM9*gypn7AlrpdM?TE%=kNyYvJw81g#S_lS09OFP+J!)0_d%ByyQdA(6;-Z)t65 z2?hKhO4VxK(TWIF=E|N>9mHo*hsh_>Pg9mAz^f-Fl0bvurKu{fq9pDB+hQws2f)em zx%||4JU*GQObd8j?KhlTD#@}2dq<{5W7Lb9YcvO%7@mCQ>o2_V!imv=acJ90MFQ6h zXh0!v^q%ee_Fq36j07E7X0w?|<@yn@r86=*oL?t1Ax}n^PZMBJKlulC>}dux&$eZS zI%(1rjv=L-nQ}E2zV1KA{^5`5i(exj{S3YR5du6=>7m*TwljelXUev3?v zP{$H}yl(t0ErterxvJ$FE3*jgKg$L$uou3nJn(7qzDI!-Q{Zxnx@12~COn_hF*0zD z{rIcSoBu*ggV)VttR%KpWFere)VGuWWt+~Km+85mvF(TGBfm@U_%LbjCYqnya`|%W z(nrH8(5YcTS&KGbvHr(2zmiSQS!9q+gUJ%6s7#FXpL3r38+QDM#K;rgc$wJRCBSkg zK5!xpztnA*ZICmsIOmSh@BX>+k^hO@{W0EnJ>(j<5!W-9Cd6>aWWni8JEvx>s~Kmk z;KU7S5axCPKk!>s_(rIt!>0rkWvbw$Om=bxXs}b@{vn*20tfafMRHrDVTQvjMs|f% zxJ#otHEcGNbH;huO`=NkgP^mzLV^l~6X~U{*Tl^h06HWP;DAcnbfw!*w+58Wer`Qx zB~xxG{a%H6-lOoUyo4ppxpj?{vJ};iR-i*=$z3 z&YT!es=O7nvoq=!8Wmf4j#bDPhOdt9Ik>%R+oq-N3*>pAcX)Dax^Y2XbFO!^fBe|< z?;QW>>9N5H?i#to6kM`k^z8Ct$#mg8f6|D(L|1TP6wHx<@lZGfteB@OcbsKRD0~X3 znbq@}y34s2xbDd-OH;}N(4}Ag(%V_Pso!zfGAOKEN0&vIaeBCp;MgoN$=?0}d-gwb zZ)C@&#YeSLDkYCh@r{9WT|4dk{U6b@uhI|y4&8eT3q)uw`Kx3A@OVFY^Ls#L$ zd-sPOB$jWWPWbe+{Z%$h$;ucU`@4$ZQdf^)uGaaJp zv@^s#qH`7-$~sq4cESRZ%xPfKORiV6(g>o2Z1o_Dh;XJqr$KSn~kCvd6)XY@G2}_4nnWsuD z?z_fep{cv}%Q?BDnFtf+si#GeVMQjImcJ5R*A+$8;6GK(<@1Gtkw|2L4qK*eTTV0@ z^7%BXklE6~rAL+@gx|GmyB16sjz#>Ux{|}PS(eS1laonRrJAO+MM6QJ-iX+ZMdmGF zaRZl!r*7T93>pjS~L$gn0ce#!7qySd|rFH$YP?4{hGs ziQ44#GWppSne1mTe2x9&t1Lc7-MrAVw+LOZE=Fbp%vkYhcW8Eoz4mP~HAFu4`}CF% zFlm*otWt58Aj=>Z-{$9i<9j@oRc3OUb8F7~b9M=~NY918wA^s$0{i9{+0|3@=YESG zx|gWh94(qwxO{E|j+1zMAxv?x+K-s0Y=wJUK zd-ylGoAkCr@H7@#oipOotjHX{>x=X}zBYuY?LV~^$Ryv=R1#hh6D zp0EYygKye&x-AHFl=NlnD=BUe25ziKcMe8M*R-Tb!4XSaJSv#`P?Na91~SfAo+S*> z`k1EB;%!=V-z&XqOKieCP=IoG=%7OKHrMRD-J}Llu({znY4Uhxhc(hGixq9K(iuCd z(TFa@jd+~kq*Db3{ZRb~M5L{OerWe8VG&lnyyjVqObJ81!zvba_bk-`m2C1WEjpd2 z4wc#=Y}+mf7=~d9*kW~@7NKbxsNz0>U@)k9VHzct;pUMW+z{h9rU@j$_S#lT-9@bv z6)x&}OEe?91;)3mglGCt8$ribz&aud_F3`saA0`%r8C(y{L2h(I?C%|(o`^4F_d?zn?Hi9zCL6a3 zTs(5FaPidDV=tUI^~QO4U~1;T+-utB4+cVhAiz8J_UyZH=dS(RyLvi9EunBr2v{p@ zmQCfdscdp4H9j|6 zT)DMR;NRHL4sbPS*9&B(=00JnWtw0y|DSc$Su$AVr(rw zQ&bl7g0_uZ8$0%slM};}g?zOvXfPA{eEQ+r_U}EslNXe7ue6xtph$-)rKRCQ%&QM8 ze9;ab-HVFg^}&OIM@>54`wRBc*J&#>@^tz+bPO09gFFq_`~5uVt&vI8Dm2a{i{3RLh1NlPhGbRRw?*CBwyotd$YO+rj-_(UyP!jZfY_A(d=Yh+tk*%D9!3K=)qRGz`43a1dsrKz{fOiI%^ z&HulveyWW42#aXkH@oynHyt)zU?VwuDC@)w$8cl-UL$F+u8@eT0Eyief)@oUE1blM z?25j$ZL*4DO$r-0LYH5;u~ma31XZfiCC4x`p1_RT(k~<}(;=1C+vMpqg?9Prt?gQi zuDat=WP_3`N)DV#rDkSklF1}|$mMc*Zg48V_mTsvTw4xA1X^2LJ3BjDT3S5c+GaBd z%j<&n!{ubNSxNaMuah=#_zag57V!K1Wa&w2*WKE;rw|&30Rug+TjV_e@1al#hPbp_ zkOr4|{CG^2?Kl=u99OLtvAKj6jj^&kl5l{gB5Sk^Wtxoy7D2kMdDfLJ!VWBGb8#0Y zjkip=s_`X2`6&ARVqHqrQt6Cg6cP#BG_BmG!sgAbK(wkbVHv$FO^!UV2ys_F1QX_C zoz3Nv$-=0bXp4keB0*MMl3Xbo%()!U;GwDUxcAMX_naFTY+6&JvG{bNkS}Pu)~Ion z3q_M-u^)Z&#kXI6*LIxR#RBXYZH)k3{2zY)oZ7(_K1!&9p3~wo^hs09_xrJbc^xZo2ECTiQBX;rO$u zU(3x3Mb9N(H0#potFJu!hBNM{q&f`-2CE*u_wWaP;eMl-)0@`d^;w)1iUn6G@zVX& zvbzLy-I=#8Tt0IxHXh4Y-O*u8_v?pl*>~>;Z{NIaQ!%!4_GpxP4I^`CFk{~5P&kN+ z;B~MRY?I6k`_5O`i%-!)mJwF>%r7MBm3PT^zC!$Adh`QC(|O&wh1}b**sI@S-+h7% zo)gyBq5+{1IuE^YjD0;$@@e|MPeB7n1(y&$F#ret$v?2?|Bg%!y2%?Gq#~1Cn!f!* zmd|iPe&}9!CL63(K_A9P*-QV(p8H$Qx0&65(tX}iL^eg=dX||5`lUWM1GDon1vPUA8TT>bs}VRNlO(puyg4 znzPtMo-_G#GuBYno-w$Ax{)+k){9bjp0GBbvNfpe3@dvg>h=(@VqPz5H0PX(TXDE9 zo0au$le`pqb$gfx;sYP<34)42OQ-2tMlEBr;jHs+%zAUugmbAC5>LzgwP7FK8&!9Q z)sm}lHwCU6i^YHxB@zkv5Rb=!H>T5R;7GuPfkt}PV9?=$!62|B;7Dz4ZJh$qXcRto zb#?iCzS7*nYse=h-{YlTEDNsd%9Sf)V`FeR!lI*k3|Z4OX!f>k+qQ4tzTs&wo4e`( z;|tv~JUr}mi)6wu-0;3-%a+}{cgt>(+poS^xY=ni+$Xlp(z$%WvUqbfl@~Y?`K72Q zwTiYVkpxSm9i^U6@@yoqn^Riy)!AZ89+wv6S$=S+2o>i0!ioHTANQc8B$HLddQT3N z84$AYREEO=jobGYVZx%qv747m6S<@1c<1u@L?WL~7fi#FcD%++G8Kp%5W?8R%=CD? zkTZM%z4nJN6;BUc9nGe5RcNzk{H$@2Q*Jml7CZja)8|fHicQYc5tZROzZUT_w6IZ4E8(ucve8{+{+tt=so(IeYxl@mJ4`4ovXU#EZ3? zih$cxB7ODz;ElIU?7eZ4nv#0@fV!8WJ@Nhnhu;}|NLbVjM6)P zo~Q~VB`Kv`)rgT?k|zUu?r(T{YQh%Ej5(J%w@Fp3yTw9AHXNUvd6_9H`IQLWf4gwB zkozqrYl_|?WNx1qb6tr(%qH3E-z7i%D>^;w+R`gZ^pe2XR-X6E;I?SzV%!1-t|>Ab{%nG4QsOH*^Iyr3_9u1zWsKY^R#z3vy8d2HDj*bEcE+xQ*K+(gF zyAT7{4Fm#`47aqjbaZrdcX#jHxf2crlu{F=TPUS#%Yi*M3s(o+zPGpc;>C-=he4~< zg^#CX$iVUT?%fMp!d0}lw|jow8(!GKV5L$i=$5l*&qBA@whi3^OqjdGW-_qB4L95X z-$1vtwY3qn23L{?mTe~zxmY4?TDDKuM2=-u(-pC%!09Rc1GXdbJadvP*8|0Zg6k$N zsu;PNL9vRG8!|kbJDSZhVM&ikNoHwX*CLUys;TKTg=aRM&RZ7GWCX8hG*}Z8E_z49 zXPx_s$dwPqV}>bwIqo%aBU63_t4d&oEh2ykpXJ~=YIWoK9IcHKlQ)puba zpDoY|>ojm_x=$A|fHhr(mnvcS+SqG9dTWY@9M`xkLc`I}o`X9c`Se5Y`|ur`w|7-p ziz?mA`wW8!BzEV4Z8zR|DAF1^_QLU@t0T2INb_|BhrRdqg-zYkA=7qkF6kd=-K+>N3 zTfu=@wcDwfn3WaX`(3B{lKjJExah^VoNxa}<@f)JGL@7TxrLj!_c;5`SIFoU%H|}X zrVH+4HhX$Eot{Tz2_==AEi6?dm&tekoV0e)gZGfRNv`>GWPzIe8vFkLL#Bo*@lu(H zYgX}PZi1|0Yif8{@>z1~Mbf^NL_0~>4qjln2KQ(;u~zYaUbY5CWa4SY6MDV-WA>xJ z=8@QJvG_xI9OfpCrj)r!AB(}76_!8XELn2mc@}J;|N8$Vt($~*7Q>3-8&e*5e2H+< z+wM~iw5T8M@!j0cX&F$|w8io^gAZ9AZOi?Qb>P5$WoKC38&QD$j%S_0lue5DduL6O zGC#SjEzHRnw||CorA?a>uGdgG8shI72Ry4?&(6mJsIgKZy zhBikucQ^R;YTABd%6Knkjb&`Z5s^h~v1gXmK!4|M>F_l-?#`Vt=}f^%6&R3GmHPKa zdAAHk)c%BR*xZP!lKC|^rCft9P2|}?#vab9hgw*Xv@W9Zu#yksd3JWj9?d$ktS2R` zOlui0%dD%cC#c-iqIUXb)7<6@g{jHOzP`R|*RJ*V_fJer0AtMO^D-V-h6GDHVQC04 z{3;nTu;uCLX`s-<0wW_MK!$hh*a2iX5{WbelPqA1)=C;IltxF=U|_#M{48P5 zTdT@IYXZ1r=$6UJ$#^`@qYHgLX(tDI4DT?AUbn0jnm;y}bB|okn4Zq0GkIw)cUOQ! zgfNg{-KT~_{%AB14*Mk;)&xcNjKiXwlBls%;`u^_)t8hqVPOiEoLN?2D*Y8c2K)iw z;F^}ph}y!FlL<~67~|=qxh1nY6Lx7iUyp>Q`Jm_hk|Dzx4bwISv99MijI@MWJ6gtu zCi1yLSR%Q6OC`b!p zy1X9+++Jp$zVR>YzDLPj9~HS@1m6Ownw)mN_ZOu11hY+14@njZWo1Yx->FEUT?Xc^ z)Qj1{CROxWXryJ3-nZcz$=3axg-R(egd5kLr$^a0zeL8bF;SVR0uz=bSdsnUEed$4 zn8k^lYRzzfG$hH-{+aB$kv{nAEZj=i;z9@JL&oPUh0YEP<1AFwg%ynP;!@B2XEJ(4 z`jamrI24u1no}Y|$z56C!zY;mtGM{VQ~hMv&%Q(U-l9D6JC5!r46VT%7II)M#?wk! z4r|fr(GK;Xt=JC9SR`gR8JiVsk~DeIV7ND0bOIcBTS$d1fyzcT(ynvsE~O=Dv1CH5 zV%8YW7#$YS=++<)rj6=!y5J0@Z6J`Mlozq=1(b84`L^hr?Fh58Un4CV>GW}49Z=oq z{*1-0r0kP1YdB-&O{S|;Naly z-MeqP>81k*4)pZ&02B7IXRSFI2AU_$+VDX-cuN{A^UHYIv#u-19)Lc9afD6~8F2V` zN#lPrbW8KoU>RKQi-_o1N0bqUPJvzeufHsNBDEl)e*Rn&QjUmp=wl`>gi!e%U%l52o1tzli)yp&z# zn6P_fktSCZqtmrehzALP2!K|ZJS9?H!V-vC`=*wBHXol(aPwvbqYKdBfy={3?l~MF z{u-$fw+3GtEO2XZSsKhutUbHBQ;E#Xbh1X$134p5x^qjrq`^yC z3vW&iyzGX`85$nR;l9y#Uq9Q{*>dNDM@@0>AqT#`6<*N1Z1%?Y*wuHr1GAvDvu4LR z9GE-vD0}W8_kEJ?zmrDViDj^fK63gc^3D&)%!I-#D_NCvHCD*6r@x}z^03I2C4;m~ z_Tp3I+|Pg{bMJjwY^YpJGUJ6){G_Fe-1cF*@2Jwfm-xe^kR=oSPVYPH#E)rmir7XK ze_&4h%mO>}GI{AA>Bl}p6e&?f4J6xgzWryc|BP7sq!qoCxkOco&rf$8B1hg&_uNL> zw@{y-rDy2S1#;mH=lp9llOVjxF{><02}#GD@Bb&|z+H6T?KPF(>)fJz>W@hG9x_{K zMm+nP#&#U0={Wo8Ke0>i5X)LbQw9R8YIOTy<>rUzo?A%UW)f~E(?e|Z3Jd|c^cKm? z5ZkOkhKuVBg*5x;FFUvX9PQapRSln>jkhLNN)Y1(=UUqCP1&P4$FTWQlSgHFD6G&r zT6NB2cZPriD{VfmcSJ;%|%Xfse~!)93vj?X%L^k|!Uphfd5 z#I#r}XQxbHvve-=oAol0Yf!X=442-oaI{<6)EiqksdhCYlUtYvQub8V26if|s!^r# zb5}zwE+Z9)=`1hgj}e@1GUJ?@wpyW8?b;UL!vQ6vQUi2jHs8~m6&EB8=!60t&pFct zr#qKE|MmGm2j9QDXIF6l2B>VgOfdF5+ zbZKN{B#}q}`H=*8p-Z#p5nXDxkn~u73ECG>XgETihZ81%5(63Dvu96tcXyL4p2?;v zMYxNE#m|juWOawfwV(VKm_WQfQC%lqMRtqKn6>7O*P35~YO2x_4T6XSCT!V`W!a`> z+ZIB{;CM*ufV@PjkbWtcTSZy?`elQXcFX;_s?y=j`deec%E z(djGa`fFMfrabM|*>^6TKXI8ki?9Df=lFyEeTR2F__2HM|L|S9PpgM3mWE_(-MRU} zPux2-8q4Pj{g;Lotyc`4JTsLz{?pU9+;_NVcej@y;d<6`;F;Rov+3Z`y^+>%dsnNf ztI|-6O!zuhd@0E%$vZzJz$Do$1)UQvN>yGgXUjh2*Zzdu^)aGoR8@stl+gXRv3oyB zAN?FKN%H!4X+Fyhs%)O80w=gUK6c=|^Ue?H`#vSrP}X;bz5NVJOo%KIF8!SwrYg+N zz5v;@lYac)(FcBo$M*vJlC}u0(mKiq{|)eAp5FNfPqOiT3XEDTyLyX>C9;IknF(G` z_{RI$fjit&*%rBSlD+&5ZZ2NPz&+Ptxa2^D?7y9U^fUCxgESZxwTKnDj6m*qgnaz> z$>ae0@mIOAH#Wj-lZyI#vNC;XXLFuBevQ2N4|MBZ21ImGz4R-7u4rqnXo zrMH|P|5s`k7Q{1ir)k%d8hXqZBsbo#eDpKQ4fm2@#A`fZckpG-PyEk3x%5xI#%o-~ zMq$Dh_Tl+ivPETP#%nTt^H1p?{v8u>PWS|Ev}G|_IU5L-!OqWE@5Ze6cv>l*+ewl! zUE$%c@Cs`rsL>9e5{=SbVFkz@U*xek$K#2YBK&3n0-WFlih%d>_*nRmuz2a9yaii2 zz}dD0l{-81?O`Qju`a)|#ScW0`BiFjyC@GHhND>`z`vw07-6%wCKG9essE_WAsBJ#l6H+?; zbTq>X7881|Yb2-CHInm1Ifo<*&ScgZ%{p6y&ZYp5ose2;`4soX4|$tR!j3s-Chz39 z=Qmksa~5^2_?QXCcqy`^BBZ(ws4d1B^k41W&$#sWQ$U- z#u8_sS~gC2uC-YlkPkWxzu&I`MOUa&f4w9)uIAHr z?CSwWH#r(BpWKDg_+(=6>S!Tn)ObS!MVuOm@!Gk(C{-n=Xm$IZExdzjlJh*>RB|SL z@zj;87Y3#4$fCDF`=-`Me);{k+FM_Z#m_sb6^V(HQTagow}5z3cM=X%fe z4O|{MaAZ%UEsX2@@Hjm1$X&Y+Zr6SK?nB#n2_;%>g%auU^>Amf3vaQZOO9nK<;{uQ zAA{Wdkn;Ff$kx4rK~a(GU;M;9oK@PrNBPWOvc0!C-~Nw4HHmBOC`oF=|8iJ9OOJhz z-202X_8rj96VH=tXQ*2rm@d>r;aoJ@Ngw)k`b(cD(M=$jnL^#8NmW(h;+|-&yg2aP zA9bGobMneJSSm&wo3L_vElf+7-(ko9JKc4J8*&-10>{4l748boDy$Lk`Cp@3_R&Xv zhkWR_XfP@bc8>+`e3b(RQFVkF6r|Bhy6%D0^Nlfvtp_Z%RP{Ezg(UnP+a-d(h~w(Oo;9DLgW z`kP-Q_x=L=Z+}M5zDn{LVc1`|EC7tepl|*QyZjmD@cTr*V04V$F!O^a5y;h){pO^3 za>~4vu%`=7&KA^B+;pNgFKBr@F)}=V?S7@(PY*=Zgy{@tx%GI)U_O;bG@kic7jhz? z(sn-$sERIbVMn^!iKu+oW=l|w=oGXTALX`Xpx;2^GM1AuS=QmTni2*#9h=;U%6H+f z;?x8W2OKl3afW%MT|3&Y9ck6N1a)-RkY#k8xBN!M)ur-_4W6^`R1Ev&z>C{8v_nZ zipEkhw~VkPOVTse`+lB5wR9J0MU)A*WaVM_^WedQ-QC^uRJ*e5x|CyAr;b&2_xP=Z zMGp+(uZ6G)HCrSKHKs6v~b907?xq!K!)=LlV_YVtpfa6FmpLGnJPrW z{+5jP5r^Xm0qPbxEr|r?lCGHAO5S|3#uERP@1<$MApd_RlZEFn7R$(c zqpd9hw6<83xX6T+(mKYTceMP8lXFE?WNcfVYcRU50UezhimLULGA72R5$h>Y~@Rsk{B? z-8bBN|4o~>Z)y~q@?;7$VB7BQJKldYTN%@rRP%**d-vS1x*jONQO7K@drk?_Z<=&ri7J^2j&*PLw75WeTi({ z$BX3@)y0xqgfbx#>4$$?0R`-v|AAy@=G2svG7g?%+ho^H@odJO+u7iGcK$V%nW5!Z z+eQ5F=3UAs{($qhXoq_iS6q7Ga?<|5c#(njt;(xe?ss4h^U&YxaOWYd|iIS=LmA>9{O*; ztbFGyJauzsW;Seiu3+N1mtXz{-G2wq9bKd4iO$Wi4b*+~3VZ8WULts*eMZhInyvuh zfAsU@-e2T4VXn2fHOgnR;uM38`925lCcpQe$hW`DUik(sWJSiI1*-`>nA#@K{Vmyd zJNIu#7Q9h7upG&}%|^5K@hS7=5#xN^n#gj4qNr`kDi~z5fg$UZbO)8gZCZDL8ioA8;NV$- zzP>&g_2&6DlX6Djd0}yKORtP@DQlH97?2g<1x+~Rq}Tg$-iH;s_8J!#N`2brUCun-UfPYTFR9i64VDg;Jb8y)hZ6=| zk=O? zO<0(Ysq~nrRavR9ln8eebi|H*Jp)%pm@~^#7Ai}*Y<}qK=(asuI=8e}f6i^&8SNh* z8=9D>rk2V};NH=;$fhkFV*?Y552lcJnPhh8>R5a#S<9meI`EFYJ@j(7He@xoCmbrLg+w9eEk$h$$ zS#^mnZ~PwesXqb^4D%L~g3YUe$I3_vUe&p4Cwc5Yuxx@Idz!kT!t(}3Sgg*z%EqqH zT}KF2@iE!}9N5E9)_!@^czx7(Z_-K_O!3x9yfqW)TPt$DY>8-hbZVUeWhCpoJz<@g zG?OMLo2n?H>!bXkQ3*F4>k2p9YLus^;cuY{a7x!3oOh|=PxV>#Y|MX6CjXcbXL9mv1P7B-r3@)jXJ zH`{iV*nemeoT4{jkEWf1!ENSlE@w7(pt(~H4{+HW0D`Txs!nn`e){z3x8Hhee0*GT zV9)wTN{qn3a%GC(ASmU2zbvIAic{J$09aajWezRRb=EtG$g1N^PEMXWbqY9eYisL{ z9XleCNU3U94;!pych7TM7m)2QyQPeb^{VE2HqS-RBCV;V{7@#H^419CVN1#ILgKyD z>#C9eSBGqv&*!TW01Q9zw8q75k!u`CgUhcdie+W-JhLJJ7G*Gm&LYy_m+_tX@4fdY5k^b?Cp(#;oSt+|T8IFdw?%W({7^$_?}mpZwW-Cto`|J~TNq zoy=wPzJRZ-vvt#!j;%Yo?t1X(4Y%*_>e=M;>GCwlgf|%fmA3+$9Aca?I&@wIS?N%x zYUGv=(*1V|L#U?&)A{z`;%_V%r4K*G&b$Q2q;nSr-Hb4W92>qs58Oeno#N5R3$x6~ zZ-NmDl`yfh@Te-jhz^iO!e^Ku?6 zMsg|VogdLki~T$|Mwov1x9QyDyKwOva$mky&2 z0iJy7MY8iIxhz1@D7?-=MS`VR!8tu`9UC*wPFt}YSBP|#5;iY&7H3%+B_W@(w?)07 zO@-et%-9!V)?kWrJ9h!xb1k0hW6U>DNJytiLjw*Bq&Hq*18L_<%F3F|r*JcJR2Z54 zZUiz7YMkZjl;|2Ky$UbmM1f1gzCo3LmdsYAv+305^IL~2ay*YaD@pWTPKEVR+5&W1 zpFh2`l7%;JsWzF&pejG2mT}Sr?xd|M)axQqBg$Ra z%UcWx?Qq(T7o2uKmCbR=J-Ad9Oio*DGS9b%QL{vHEGA4htfXF&T(5)<+!R!LBKqb4 zEhJ;tu3o)#=~Dl|0I*q)j+R;irNRJOL|CA+vlB=xkYQO(2lh&(QZq9%i9|x?#45E6 zml}}aPhiVqV`G;uUxtGKmktC1pfO7KTCW-tnd^flk0aSvC9O;rI`--t%~LxiGbhDx zW!Ox*XN#!1@?p9jx0e=dZhaAjg)LDdrnHfsUh1`wdmt7|D;J88eG41FaRLI+d+=Ek zD9a~3|8uXM3#E0HZt?b&iN5D`smE!FTTRoJLnbR@Rq7Vl5-uc{%R#rm?(iqv21tX; z3RCXL%oK-|c$g@p7^YA(x^kJNN*$d#8t7V%uB(2(9`NhgTp^p~*}4UuC%o?+{TwD%uwA>~3%GY)vOKj_s5=q^1~ov;Wd? zB9>aT=S{;L8=9ONkMqJ#MvS(R7|N%)m~t}xs;noZ~Ul33M* z{i?2ZZ|mH3a9d}0o2spBBz;F$+l{v$NX?`tMq<^C^KcdMsRVQj^kj|Ym-!v6DAiMN z@gT*uO`9jGaKnGtf=kSA{xbNn>ZU{w#$bmPU+AHar17wWwC|04eEY$q`VdcPGJgaa`WjnYn zlx{o7_TENLK3_g~&MJ_}L3pwL_jt0X^0I`|?T5+xevxe2KC4d7X*rwoK2HR9?H~_) z8fZ4X_(la`W%IMgM#%ICNyd1jE-kSEx%L_EgH4aTpWgq=L=O}d)tdWO)#%P6^rOGW z{_^*UnP2FD=`O6E_%XfjQ*0SL81{innCPz*p~&U;!F$L%a#(RtLGc;SIqysvuZ0)p@0cMKhEAS5+1AzuWH=Iu zNZts{DxFS)+P^Ts7#Jg*4j8!1*ENr%@l^)HfRiSZNix?GE4PFlVR!f}P1eBTBpZj* zl``j9!wF-s4G{bB@o{-HVC)?o9q<880Y7PAPXGsJUR{Cl1imywDx>*plNUfxH{;cc`3VPtDvcJ zZ9+PM&pSRaSm~Dz2ZwFoMDTs3Zjrk~d!U~uCMKjo7{1xFXAjcg3dS@+B&dkjmEyy3 zSKyfEj^df?sSvfIzL5spN#~IR{3Y&HBcHbn;W7<;I2s8>B77M|E-bkjv*bw~87(YD z11oacV#X}tJI!e=j~dqSwK0zdm(6d^Z+g>;Pb7fv74jf} zvo#*UP0i z*2#G4%$w(5{Qm0~-tDyvtED}%_r{%Voh`hInC;|qh1kT*NdNfsSRC#;xUX8;A_s2X zBl``>@Wx@mUQ8PBoIaV3h8-kpT@Z3)`eKSlp%F#}(JEX=7tS@N~B<+mJ>su?7c~XMTPF1t~ z%@(`E!Gof%?_|z7AGd%8rws>wl2He;o;5Efq7lEwvp@&KOhlT^c>@DtyF`gyW0 z{^h0s-5F62wrDbEHS@SAlZ9=G%oM%Q8Y~Q|OrxYDq#SC~?&{XzU8QqU3%GTL#D}E8 zi!l8RWT$CnMFQ&b62hgyJW{t{ahot46WX>ttZoh{gT&(bh8$XIF`};VmOFl@a`se4 z8PD2@sM_YIbZ!+p&(aP*WGyz7u}3m?GUu3UfvHOJKhIJMAAos63t<-^_VDGVO`8rM zJ`6v>rNI&4bfV;nCN~D60$l`z5H2Sa3c-zE_#Vy(&6cdY^jy*{9N0395qCQs8G+GR*sc9;3DxWW(<;y7fbh?l)Sn%G_9%*X}heG~Y|8*&* zxn-D?#tFL_vlLezbKhxKx8b>|0>J=0qnT_royrq7;}7Va?Yw#u6_#toS;&M-Lc^3;#LU3 zu>a64`!;Ruta802%VugOl^eb~+PS$+)3rtXd*$#cw7QYmoi)~W!AZ2Ts^OYf{Bm8I z-MNunI(7B+=iljl?;7m5bAQjloA=&y_n~dOwgiGc+jdej>4D3`CtiQA@8VE=DtYY3 zC-&d8r=zQ_dq)>RY$zUFlqEJ#s6r~Fh^CR~0`KUhg+KNn)dA zgIe7k$FH%ep?Ny!(g1wBinNN4llTN1JWI?xrDYpI>E7Gvo})ZP7F{Znl#i!M!tLyR zpW+$Fih;u=TL|lWa)L|^E|bCx2y=Sbh;BIh=3VsWhlrxPW`4TF)`P@=p}*^6?DWgD zga%8WQ!3~3T!xKZqwQN6xUo=;m@<23tZaeXA~Z!h;5fRT-R@KOwP>v@H#0FdG&DFeHkK>oJ%`@8>xl#i9qGO>3!ES65Zn{_4GY`@8#^`|)?q$;_K~eXqK!tGZe* zyZXj`_vXz!c{20l_dDPB{Xd>n8y45qXv(4tPzMlrfGxmy7cN`?4g_4}fzty5O8|HP zRKS@)V%#YTXbR}~^2;v+gN0R>xFZ@i&Pxr$W`VtVaB`IQU^M`_^XJdM_~MK3TWC+X zJAhAE2O19_0=xlFUb%9GgB(}w3Vq;FS1P;*lm&K$L*V}BW5ozPn5^-*}S zCD=QVEgTULFMJ5UI(zmk>;*pI69FS1l7NwL?2C(wCr_RP#y)!VC~PEpXwZ0Q27vcB zzVVH%tu2nhq2w49qb(HR6?zYT7*cL{?w~On8ynyJ<~Lt`^;Osxtixl@`D)P46DLj} z=Ah;Y+t;sO=ONZW!aRhVp9nscz{98ENTEG&XmBFnbiigm_OXxcWAGR=h!2|-L_N$; zo;YH3;6cc}v4S~WsU{&yGKC+>lBg<5r>htSjk9mmJCdCDzkWa_GRTfcOef?D$+?z*V|dIY_FDP4o-_>T(X^3_ty0_z~FFZ zXrz-9Fc_#?(G-qxL?DwATQKf4yL^uV7A9k`hdsDe<_=C5X0mVU^~Hw+S&^p}3fzZ@ z1-uJ!i=@-&00sj&$5XLgjle)NZ_*?IpGQFV6odsfUoMCfg0taL^Vpn=-%{wk^IyO8 z^)J5y7yrpej(o?*pMBRyo=&C{vf?MGz*u?a-4DO>!%zM3|NZ&rKmT>3YrOi>r31(3 z_c8eG48)VZ6i{%TLCnWsjcjMprmtc}{2R!ZvVfu*NTEaBu{Pst}jT@Nxl6n;C59gSw zPe1S;tm*`#*HPZj-=3_Z!;hk5hE5rbEP&}4n9pVGt7P5hcfO1PBdM42$th({7fpw> z9MW`1+o6ihUFON8o(38YjS4zGm7!_90I@4A?{d}IYP;O!(HBw?A>r^n&sJ3ha+DSp zrk>=LhSRp`Wh~*I3RE=iH%Of&z4wtn1?CDCG0H&0G$A4i)w?Iy%Dl$Q2n_aX|eCr(RNJmptd^?mL;B3!#2o0~BWVz{Vv|P*dm`1dp@6t0@*!s{r zx`L+@;$lKT?b^+y8ylOOolcilzLBH>E1n}eRyzKMb@6+y(eFZ0~c?DL_r` zBIac^ZQJIq)Zwx{umV6PpdA1eY&MZdz{-GF+uPflo0}nEhZqc>@OWu&RP+!p$OLG* zzP=7?LK}FpF>eFB&dtpM6T&BrMgx!!R^#|LF5wnlZMMMryd~LemPa-7NNHeo*cx|- z!bSjh;n)Eq;h^AiSYc^t3D)EtI8aK;3l@OzE?eNx;5}^rz<~p~Tu$_r&HO}M_!im> zK+BIPoKxV(2%QG&jO-R36b((~o?GCZ0Stz-2`z`OU?Y4r_>j*R4Ce-if!5F`umbcR z^vT^%3`X~fQZ$#aB0MNMlx}9aRoodxNmKBAV~IIz1A~EZu`7QhV0q)R$OPM<(~Yjw z?sN<$Z3QPOn{$&%T~VYU+na?hQy3#CRLo+T79Q#aHnU5|Pk99rj>Tdg4Qc4Mn%#1_ zp(;{39j9(&OjrGfv2w&fBFE`RQybmqdZflL%z&P|s|uPP@w=J;O2H z10xZfqj)lwEv8jny*n41rmLAkDxFWZ8Xe-2iAK86YP2_2woP+S6_~?1c#~{U0SUsr zOb+&?+C(AHz#20>;c;m*|H*H5t?iA<&PFAfO}yg+XWsMCcg!E29sX6ekbc*PpQ@GX zU;FYaE7#V_o7H`j@!Qx|#<%-}U6|FjP^YyA7cbcx)xHjbWXA*u*KLmUNc&2Ub0?4* zdjnHl%%089kz@{4HxR2?8gY=Z*dzF`RY9)eaA|5Qf2R>G^UN0nCas3FRyUtZ~${uL92#e{e$El$UU zQX4f)Dq=&68ug4t6RL|A&uGgI78RyZQoRovIRl#m}uAbqLvfQW(2Cx}^$g@%bv3Tk%_p*i#XZR365daU?;eZ!4x8Ar}HO>b+IKJ%`u^7gR zqfx@kAyUGJ0Puj~Ts{hTm+Mx~{R3>Mqbx zt=3j(u(YCwa#{XBTz9^8hB*k8|Kw6 zZB#avw;q1SDI|}+dt0=u(T346MR7!kEcLOA!qj}eIGdLhIWY5hvi1ZD25K_7cU%y} zNlp<$L&^)&IXy9W=f9a8h;vh!so8wDZ91Mip?Pq90sd8XXkhuCw!2HDG25nhkCmds zL5oM&k4O4Y_nIaWwws-9y9>8ZEUuqAb9^KN^X2s8$F5zt`L!>7tGrWd)?53Q;{I~S z98ivl`!$^JdK=jDXlDg=+hgq?>Kn=sngI3&2}8j7dFoI_F2NDWRyMd3ctlmV@%*XR z(~q`+{Tj-of6ju6dy)JcvuJptFMfU9ge8R}(&HhQjG08(U+$-+Ws{OYYx7i0uj>%o zgDaJ25(ZkEiHTO0dV`y$x6}1Z7XiT@%SewFWcbx9W%owiZJIRkT?v)QBT~%K++fV8 z64pv-!a{;p_mwfKn_k7Bd@2hljI@h-Ys0dH!M8!e0WZiTV2z~;CuCtZCIDK`#RN_4 zvub#dHlQdcw3%Z~)qtXjpD)8Q+;#=-!+u3S4 zb;EUeDJKv2S4v_r;SNctA}vIm5>v9b(Q2-5Zq^%3-!&AmDY&~*Rn_U~>BEN)A31U) z^aFeSD-V-1pfZr~!otFd6DNRyuUxqTOc*Uq6ml0AaDs)4Gx6-xJ8m})Q!77&$vcV` zOy<2Yp}H?WIxf(~UDn)fJ3!jQTpA|v0z$(Zl`Th)9?fR6dj$Jk4`J7JqQ2$uNO$d) zaOHgr9%q*`5+=Ob8{v0&SQ(eQgc%rfK`O?*1cf6=7>VL?5m13pJ!ve4(FL7O*RrTj z7+xL6&1RCC)=$E`W>S!r>|ql17;~jA9v#g|7~1N%o?$rES|^cgi+QZ6GD3qSjJ-V+ zLF!=?p5RVo5?Q^gI+aTnXLI#(1897t?m2w8yHJJ?_2#C_ zrenuLI)N3sU2`vEEcTV6caz8pa&GV8&DN77pCFNi14(OoHobO(W){eblt{%DRi4lb z@nkHPplLSkX4~kR`^Mt_a%XN^!je@zE}M976xaOFWY?jkjK;QsAT5UOg!mIJXdLR_ z3{;%*$m?`-`@vNN4eEOlpNmN#J3An)b6a}|r+!B^l0;V8zq0SUJCR)@E!(@*a<9~# z^JROr<#lWVc$rp&ypE@0!i+BDR530KaKCQ0iRGc`xG<#)2?f7ec6Pd?LvwoRRV)g< zDspDYSnPJ+fLVZS%4oJ5s*fF z24 zt~Z@Bw8U~q4{!RX{b)ElNlU_sw0JNfsK^2Mtk#Bds!%?k2LJ{P<_zr8 zdXr;qTK;nmQCz|J*s)_khU@F=0J;NY#bb$K7wvYtR;zLSC$2aZ<>Y}s_h5Ak0|9zr zeDxdQ$pOws5hrT2oxD;MuR;{Ft0c|8Sw@y65o^Meo=~MiLq?#;ktSrV^blR8}lQyShyC8jwT+P;9?$Nzib6z z{$W3+ncbm0{U9FG83`MPX|!7gb>%vQie|;NAcd8%01F<|Oae3-bOm#sq**1BsA+24 zajB?z%h=qksj8$KTkCtUgP0MKJ< zVLI!(n%{Iw+8;zxnMAfghYSI`0v?;OO=n|0Vi~sQ?rHi;@QdwEl*ke$#vj`R;b1mD^W{;>A;eT%Q&M_63(guyaCz-FfQogftWZK7vU4Q z8V)4L;{`b(q0P2aGf9W05PMeC@()6Mc>yFEzQDXAi*fNtQtCQnwdHm!kNH&TPH_aG z5$^pN$jxx~FZBRZ;b@5pN9&A)6EcR+VI#6gOC^ndDzgk-rj^|DHb;Xfkjw8A!gsXm z0!O;iurHU*de_EqoAA1w!-kPR-++UB1%H7)Jdu%>D&iFxb!?9~q}M7E4wTqqU0QD2 zw;J|BQp#&$5ATtW!O;I34XfF*Y}4hzE5z-MVqt|dNko|#KA4gU3UN)t=ypxZa+yVh zM*%Is*wLd$=jP_PA9z>tiDDHOm!6rK$>nmDN`;rD4NcQ%MIS)rR;z`EYBjx%QFb^9 zd06oaMO>Pbk0{*Qgv|~YZ3$JohJQ7V%)>Z(PCen zPPbNTClacvNQtuTn57o)ZcYSIs=`E#CBnb=hYVF-JUV;r!g6K1KISLbGOc>0 zS=p+^lQCF-AgH6XS>3ut<<7_HW5LQ)A$_4RHJA6@5!{7H2pVgh5#|!7-OG<@!l(f! zUDK3gIxZ`B^(u`ebm$N#a-Qx&{~C;*q)GQdmaYym5;ayh&vZ~+!Vl-foQl@k!giO&HrGuTh|cx^ zuqk6ZG`QMVvGSkIB1$qLuGyGyspO0YsGyb|#w3+!3UzQUYxHCAQ`C_P5e z7xTRy_gr=LQG2FKmL&AT*qd zJLc7r+2~TWcI=IsY$9PuHW+Mul$?@a7OR6EY~ znsqb_>q|VoIJo6;+xAwQ_IktW@~)>|^g2@dwJYaCM*@Trt z3=T^Tzd{w=(*=tO`!d=#=QD{SGeT{sZuBP3)0OyT|^CGVn0O!d`f{)a!MLEv;6| zG|hoH@K82f(=<3Jc;!X2_Az+GO+f4M8nj#(&$FPeDAA9o;ssj*M==atL4to|W{y!Y zi&&xlV;a>=fdD5v%n8rzWy4`k%?$2>t8pfH>V31&bPJ+DvVg=?@X5MDv z>tmrF2~)ST0B2XHC6pY?vUheG%tfrozE3zHVRp?=(unRS;R%I&Xy%C@yg|36>B_>9 zxl|^BFdp|4Q4-CLxq5xQFp~{qS%Z5Cl{U(os}zHUG5T1*-2kXl^M&kGCWy^o^4CO| z>@tBaCaw-Uw-%p-j^+=0gS^d+w7XRu5Enz zb1%I7!g;tC7LURYa{ET){&Ht*akvy!9cQN5*y`?Lv%fj>M_m0M%^abuxO$03M-T0t zS}r%fMLJESCj!Zf+qm0#`C^(?^4bf?w#XanvXK>$P+^g*T*PEV*THy4F1?81xFqFv zBbG^6Y!uAC&Fhr3BjMcrk#jFlJRhEFlPFx+imCkwrM$}sEfE?A}f$(riWST zxXU&B+?G*o0o-_KO!00%Ux9m9-CmR|fHc+giixucv7ig3IkZp-T;|3N57>94!ym5YX^JotlMkh(xrC^Aoz-%s zT5s5njUq@Ex*xgTGGH*!X($c7_Yho;!Le8j5IUdF17&dx=3IvYhchr?r_+J2fP?|7 zCM&SM{%bx+2A-Ol0wzClspT3lFjd+D{dEv)Q@1 zx%KsR?$#dJ8&N+nuOJ0`gky&eghK-c2F`??mdjSfO}kW zi{UG51|x;jW}8ZlJC$k^29Y8yq7~!#(#sQO?}KW^yjD49U_Uw!N7lP7Jipv@WzQpkEZh} z)R(Tny}>0K^(qP@Yq+brQk>1Dvq`||2t)->g9*0^y{TQQDJ@P^6oBs~QIBbN`NjaK zQ#ASv4I_WYS$tq`0|~<;YcHE+WGM<0%{zk81po8hxZV8VZQ9TY#LnXmqRB01-ud9> zt?mEv`(IjL+Wf+2zjE#T(t+di`RS~tt6&Ya8=dX-^36*tH(p!mw7Rngrl0-buBo+b-GFtGfDSK!XzvhYMbQwKO|%i!^DK> zVnQR6sf9}-6L0YD(8J_ge??eT!htG#v{!FkKsV2$V~@jAfuOxkPew+051DOp_AjZd z_qavT@$_MY_uaww2Lp3tvs`O6E%4>X@!BkeG@?PWDi!Gt6C*v;dDn6`)AV z_DWrMz2#hQI334}Ny1c&3O?szVp67jX1a78z~Gim>ZV&Zy@u(vZCY;$HZmQT4yB~| z1TSkuH>j~-W~o<{t#@aOjDaQgZRjrcsFRs;wc+^pJ>6$5cxH=N~)vEERdrWcn5iCK9bJ&*2I%U-FP+bzps;$D8d z8woSVm};~Orx?SIXhgIo;Eql6aXX!1M<`-NeSzXqY~iRgkQqCffkQVb&0&nkIZN}+ zMyZbrahayc>jrtOpv9fVyr?G=HV#w?@CJv&@%zS&8(gXyFqornh{5m%AQpJ<$tRx# zVu^5VTCMZ!W@h3)IQ4m(;{SOAKK?eIPX@a9E{Zr;2JJB0)19TGZ(!vtf%QCJOl z7!VqbDIarZ1_ZWiILmRl6rahMxCJ}BA?b{w#rl%2|C3TZ8-lAc`P;L@d)f!Bdd z20ph#S5UI*Uw(l+mORA~} zVx&s*xO8kfd5SE<+SNCLkuUVUhoI9LQ>ULs-e~D(#vVHs1xc=a4W0ig-c?Rnl#revMr*V+4IobpMUGQnYo`cS81LP|z42}>iY_xe6To*V3E07p?X zm;v($uC*=0v^PX7@yO$T4#sSbfRQlO5*z0O9%N@iAHsmuYBX<|rAZfJ;;EdnRyEh_ z#J0&Oxjfp~u0eLH-d4>jb?lTzI~lWPz**R6*qc?e-tr9_o*_Ya00}dF`A`>Eg#&Z~ zf>x8Vc{S!yb93CE2_Ogj1_TRlZr8C9C1F5EP18b&X*8tUJdCVwCY|`|&Cn{a_CrOk zG0p>8sa0ZCTXzM~Fy@(SgB?D6__4#822b*eY zwc4g(RjX~lV<2IgJuC1^Oo3E2_4-nIYLE1aCkeshn}=J&*-gY_w(S_ES*f-Pg_Nc% zur+_=#J?1>>q4(m+*uv3Sck;yezaUS26g~AZwC4#s%^bfQ+h#O53dC<4>~0>HX#YxbFaN0XuIs z?AJ=h&AQz*Tp3QIf^84k9DoIuKkM~Yv1--J0G#jTIAAL9S(!D$=nu}x%)DsF`4HE%# zPR_{igN^qlJjYj&u$NW^=ny3+=EP0Uf-arPE0=b}^IOQU;DGyzMFkS@*m1m;>u%P~ zmAaXaiAe^QmP<+2|x7N~Kn-!8+W%d>6U}_QK`CdG_*zm0g;G z>V)s_eq8kZp%hJHPfXY8I{ZB=;|nLbA+AdR!%AEQ2G+AN;NjF|U&?TwpT?RtA))(ZEbGKnQ(i-+g*gx-(A0wJR(`Uf5l zyAEPBG*=WPS-Q*P9nFPiI?+5scIfF7Z6W1BRy4ue9WU|l21lI5-NdBdbi0O5wv0++ zj<(7hrHr4>C7=GlnL{TQuby9e?d7ZG&02Z8+G%xVSxRLSz`*l|XHP$V{K%;Txnf!l za?$UVHsJp9_Or-Qb_O4L%=`MEqh^H_za12;LG3E}(*J`FJcyqB2omMsn#R7`D#l~1 zFG3T2J5AJW`FCmHDCPmpyo3;vWdr~zYiQ~a4J|IMV$U8S1OmAVyELwK)MgdLVy0hlS_Y3wWf!JX$Sj5jiKTJw0wT#D%fa~%YTnIm(apVZYKLF zhlw11e|c-#WSrbk+XM!-F79;CZyV*VYy0tclsuVx(62!)GwX}nZgB|% z**;WI4ri40mVKpSbu3pGiO5x7BH^;I9mjJkU9V}nYfYp|I4%h(g|hKfOj<}u0D&>) ztA!r{6Fyo{XJXPu+um$D+ikaIx-E-_Pj_s1W#x-qR#}ri<7j}i5EL2X4q*Tk&f+my zNX2A;>SGx>DUTH;MWHvChm7oAt8Kg>C_#SxkUeaI#U&F(kQb8D!L%Hcc%Y(>oH<=Q zky96wGW2tc(EMR0ZPS~_Noy2U!?nH)TPn_1aqQ=|5(u-%dpLcLC>lr$T69ba5_DoO)X~QQz<2>3yS2+O0(bb z`D-B*eGmWewYPc?Wkr#Rr_qT2uF-BA%#ZR7(aE#B zTL=^`Ev^8LN5rn+{uX)y1$9vrcN^2$B*m`5Ff_*Op4JV<{1UCm2NpdV8NYRB;tJuc5~tx z{KG$wjy-{aY~S&5a_(TI<8-#J0S@{ay6gUq(h7jR@yvohpcU;Q@T|>3s&iFBZ78 z4cA+#n`bvV=XZ?dx^227sH4}rAXr#3Wlj-cn?9C0ffF$H9M9kQFkuS zQzyZbg~F-hV3V+z>LC3!CJM!vcrYcaG$LB$iL{PK309ZzOiZL+VnvwJ0fW6d{pZ#V z>LRWgRCL;MiOUcGaEy^*FSwuAVbUZ#pAb)F<)dkNHYUQKqv!Go_s{qeS(AhMaL->m z3Gnt}=`ec5NlloJi?azSACsg&&44e8fTw^_lQMkUYFiD!Cqx+f6Y!(lQ_tJLv z%uI~W>9s6(xn|s|8HVl9sSMAzyu-ub1u|q&DCoj`Qi5G%c)cZzg;A5^p++z#^kHK%5MPQmH!Gsp^Z)93C ziNGjiIhN}hwN87dS-VxOt&}tC`Rt)WY9SXZB&3+eayxuQc&>;ikWk=*&sp;@W`x5+ zN`j!MO5BUVW!E*$TCJtZVCU0%r~Wt{Rm{RY66Sc!u%}1DOfuTFY^U3`>-A1L9ZOT9 z7P-fG4^RC*jjYiup*rYE0WCMM`E8h1r~!?^R=skP zQZ(Y}zM`P&>Hyk}K7o6QvL+Y{_f{gc$LkZbTzJk24l=~R%5@xgaPsr3%7;%K7@4tS znKu06Cs&juS(f&P;Qi&!JticDZJoyj*82$LaqjFhl zj3vY1p&~%k)kE`M%r?33y!YEbN0VAz3y(8$MH$Z@$8#tAf#KOtcz^P%X!SA~seeEd z7cF$@Mf@xO0R6--llhZ03|L@KxWV)TLPHWA7qzP7i@!mQEDGSJyCc)#&K z;7|Y0c<}+ED3~fj_Rr`NUqc9a4lz39FMfmk$*)m;EMHJ^2$*3DFy4OWr;(`aCk5XR z_B!f1-e%MO)<)-x*XmnsCzwFRymC@6M;4QCnglpmlY~d7)CUTxOUUJtajj&o*DaRm zhAqdhZ!|FH9L;Vu9n>XG)4;W^BVy|Llu}p`g__}&yR=ji{798B;OoJp3|oLt+BN|I zhHpzK8ODt+m!?~ACH|bXa&x|J!L;%$^Zl}ka5$U~4kO%SyE99QO87#p5kV!W>+o)264V4<0<2 z%jMv3!hRkJ_S`27w0!N_wML^6N>6ixoR?FEPJ`Z4Rdt_!?@J8!tLuoYd@mD4W_8Q_ z{0xsJn^HHdO)T56yH=;vs;^Ws2lLq@MSx*F4=}9w6C=FhxDZb1GyiF1p3D!N1`}rie!g7X@PzlVIvSMc`Mt=?uUv&F`gAKqL6dV^-SsdbzY&4Tov~ zmGzaKW}`zRgNJoe*d#zI8!yacw3s?zh0+{sBA^LXgJF!O+3;YFGXMO9y1~rTZW->~ z9LqS-*{025P@EtWMF)3Jl0{8d_i_pIqR-;6c5BpDC+PKM&fGx?4uiKRh+0#14&2Ly zf;;fmwbiX#rM_Ch{^dl%J2s9W|H%E#pTUNUMhbSpk8In!_*MMNKZHN}-{U7fOmS38 zU`dWN!=pl0%?eq5mHg%ZNnZXUHd?&;0mk0$T>@l2dkh_XkSv`G();?!lbXF7;0=+?U9&{+RILpTv(pM{=_`mZVY5 zy|K$9R+skS(ktZi{~o>aWn#6_C55R$rTL_kQH2{->y^#UQpE%`1$q*B`LOWzKqzX;;J~X4do*l1 z;}7`SFlBgcnV#vot4({OWt$EGL`4oK&zbiaAYKNRp1@HcXF`aINb# zEzfW$lgT0mK2In@F)l46l+`-z$DBK_T!>?lt{laJnEftm{V!-q8}lU2mt3w;I-V%T{Hf)V4P&MyYOi zJVeIr&vs^iz%xFf3Wu}Gk&FsG=7WSJ#bPl)tda3P@;qydk?ntM0N!Z$p) z7jPP0d5-Hqy-7 zw(6Yd7*4&>?RG4c;WQI792ZvBe{%@_ztL8N$HAoUTRo;_ z3h8t<;f!&;igW^#Y_FBdTU9Q&LNlUk?b=S=Htf+O8v8Flot;`JN|HF(42r>HrLVcq zMV2M1_HNj`-sgDMqO%^BX_31-qvzO;ZQ1;ao8Y{qPd!;uHAR$mPw3}L(PN$Y!Dmc> z8Q)u9h!7}}Pb!#1cnA~|^l$ zatA@!S6O)IJ^0KAQE3&ms-uig=6VGCu2Um__G{#YKN6n$I63_c%FY2o(~w|*WTS)1 zYv}SzI3aM{l#|}cb_hQ?zTd;TlJ^Dek zdIg#7(W4GLGMi=eh2KOk{}np<3}t3nMaeux`bWPLz4WM zyzp6c=0o`C<0w_YvQEuX2l}vq)~}QEUm@rJ7S*;e4IK4GKM)8V>TxoMf9U6lqV3yf z_l@l+;*=&H$*NDz$1d*}t97f=al5t)Kr0DC)ThgnPQeC0kkZf0=(7pAX?hp8yJy$h zb;EUNeFUEG8ohi6i<9wUeiVZpFQ$l7F(Iwslp@wm_gclgQM0z%j_pwlRz*RVDAqE4 zX(6cq5{qd~%mN9^5`eMgkuIyi)UkaGW`&fnCJSk%xfP@3IC%!{m{>hNqsw$bi06g{ zb>GawI<2>h~Y?z`ba2B{M^FZD&U*{gXSoSgajT$&U0SbY?)(^80 zf(l3;pMK`^XshDoP|U)_D~rmMu&G zRteD^I+fM!w5@Wf37;_OCXxB1>4rG;^7>3H&kK9F=L+UNPasB3Q#Dm>JCuQIwYH|o z@wmp2V%LZny74erb@Xk6g0#~9@000xaW>bc;B5#ab^j4=R9e;Tn$a<13BBFyls7A8 z*P>&}sIrsvZWO5M@AQ0rID(fF6d8X!>|(%Z~)=uJ3qL8J-9mSNrHN@4)swrS%4 z1}Dsgvr1app6WUIn;Xm3L4ZClRebMqgK>|6C*%fu{ZZ4d<6ghG0vOCRt4zD&g>B_}NbiANmRJ=6U#hTxBL!K!t|ukk?+smtG>Wf^zdHnS(c^RYSE+)MWMc zh&S#Ogk1tpNBo{o;m4oD`*o7;Bij+9gd!Zus$d07#pI=`xmq)~npU}EH!a6@nRia$ zb0+jgNvPt1w0t73!i{%vyK`x~vsR;CM=J2tE5|xCQPX=i(SMGMfOTP?vk3_x5PrMX zbgq<)TTQ!R(p`!?bdHtMbPVgT5?X23vdOibc3h(~1)DXq+O~+}GG7pHGYKas0E212DZ*4jT1>0c z30W4oBq{+^a74ku7`CN$&GcIL^+_&g$wakZ`x#75kNIq9u0I z=`=8TSVwmxY~NNw^1XbZMaoj{Wwpu2vd7i-G59TM+xVI9nE6`y4aVfCSb!GeVa$S) z1(vSCZe8X&cDhb;t!6b1qt-FoX5rLqVkRxc6iTPqulRt2DoUi6FzgRKTq#LWlw=|S z!(F%2ZMM4AYD-qcw5-#}XHLSr?h!8q%-jt$K{!%In8i+0YKp~lxS3hm>t-UU0|p1z z<>X7#k2juJc$U&B8iFW2uFW5w*rv<;pcJQ;&!Mb=|` zO|%dKm9vQ$jP9{gG*1)QZ3;m2e0_7?R9H8eiPJ=JMJA{x5!-2XjE*S^qMpz+U1es2 z*Xnfy=*#~m#J9nA^X_0# zLNiD32Y-yJPX|c^m{-XaBz*E|{E>g?efF1etAfVP<@qvFG-=i{(9R0lx#e4+h|AcF z_T=oPALvu<$Yc2Fj{}VZnquOPv9yUljf}BhB^lWM*c14XYh5jMZ5zxA;$j*OZM$AZm*-RZ;jCJWNf)*|FD%!umyE9I0LNm6Qe^Z+*30nX ziLWlZpz^wSIas5J7KCIBBc7^BCzmNGDM{kp;9n$JBhk#LgR@fin7e42s}7qq7iq~3ib^Y}ut z7?(wiC(eN(;C~?DgBiu>S{2h_@;ZaEcLEh5BUiTC<*uDjMbq+XU5om1;Lw=zSE$58 zd)4(snHH~FNXc;0p$Q&4Bd`%L7vpTvG!6Kc*T0F0%a^C7rVbrC6h=^o zxI3&T5;YM!ozBY2%F@yjurzF+*G%G)QHV?65(2h*EEdaVvp~W?%M&~(Z}E6(-ZMb* z0Q|f&CyR-~;oEHC;n2e?lgP5q!1o~rW9D%cef1zlx&aB};2Pj!(8!NR_8-JdQkpmf z7#MC~+pwIjRXjPDI*^rJo;$@o<)-=^HO!(Jm8SR#7XI+_v)b6g4)l1nN%~1l4 zEE|DPfWdQzX0DvOS>0)j`z;noyV>2mwOyRgH!7{ITO}IPB8sD3mvp{C$QIK@>J7#t z8oBE=CrdJ5ut>9rC*F60WmvUR!?NtVV?6Uy-l(2Jd#V&2;`*e3a3+z3k^fAU75Rgoe9!4K$9>4h^m*BB8(;m4mtOqqv-#=l z2fp`Rk34hQw(M5D{f)mp_x$I-&XO4REy?}m&6vhvF&9sLH>z!u-~UC@s&H#=Ts8tT z@YvPpjj%s=c`zli_@h6CY56575}3#XeZh21p!fU$-nr#{@wafd8AMo;s6!~~c|ze7 z66x*TZz3Ad??Ra1es9_68x^OD=pElfmcE70{uQ!1{x@Atc@BRT)TKB&6 z+qm5rb|&NA%0cM`LZXMlTaHJ9f0#D|9dh(>{E2^xrVqn_i+0Zr+F#x}cN(koOvR-{ zATG+5x(IXx|BmFe&4#(rFxTp4wL^uOr{nTtGcjP!owjvly93-+={PPcW9c!BoWQ_7 z2D4OTxVaOWG?$Q06||%x!1k9a#%9yBU0REnUp`zl#v{C9ldnjEeVt0grLa;ge>kg4 z(B>qIf=(zjd>T+NAq(&)FSt2z#+)YxySz#{>4|&wu5ZsJB1ZXyQcS5iU5Y7U$d!AT zkoUU)%uE#;tV@UT`sta(sj1j}S{3(jmuQl3yr`dFMcOt!5ZT6t_YWwk&IB zX9rMrVPOIO1RfqoUmWB@w?VVnTw7bacJ12o@-l3EfS)-B!cTZ?HY{9MnHTcKy;uXE z4|zRXUckxoWxz-@keJs24k`L>GIQ8h{HUwdD%S%WNy5>H@kXNoJrCF%`oQ-H|Ixs5 z6bNe#h*3ws+Q;B~HoxDK$RaF*m&P3rReCoVA>UB|LLhq#90T2A_4 zLCH`BX;uW7X9AN@Q=V`aFGjv2mmn&arK>Dy)arJvMzfnr$EYt?@RN*#;z^8zdAN3@ zJ`;}+VFkn`RaJlkZOes?v|2_c6XOz_6V>*EYDwZ)cOq@FpRd{Xc`TvL9-Iak=EBCK zcOarxqrJJZee$uR&1!pVwM3`=M$1Ig8CTd^rkF~k;{!Jp^Pu9Mfi!w-$BHJ?lv+Wg zQw0-dG%>MEyRuVbS;Tj5%B5au(kTP9ODY9i7K$pz68fHsefR2J?NTra?p(!U;cF)SsA7IK=zbTI>9JbGz1c2$Chib&xZ5 z<2_d}V!;Zw>*=zX)0D-uawwyAZ12)e=X$wQ>)2FaOA@#rI0}&jh2=%KmzXxWLOsw( z!hRsMLS4kT7?W5Ou`-j8i*Y%pi*ZF%#Id!!LkwoQ!GtSC_p=4^Y)=-@d@}y{;nb<= z#B@SI%ze6dB7)7{lAy!+oUR|zT+4KlAY6%&< zd!ff{i;9*le6XQi9Qt%jFIoI#eo^0NzH% zMZ<>xb%3&oL?YC(noPp*3TOumeEITaz~HT|E%-`NlwrpvG$5Hw=JR=YR}) zW%wKbxZQ4dIvwt7?yE0L0?YGHQf4g$>~^j+j4C;bEKf=;?&k>Q)HB5u^$v2(FI^Z&WyHYNz_!; z(zGtCB+Qa~6-5v|K6%cfqkR$%34&KTX07CT!iZ`KC^21cw%YZ2yHZut>6p*16LUf% z&fsy{g~G^^vuaG8TF3(oQ|Ip3OcJ5f>~1V?8y&MzZI(8xga$>AykQWq-_(3Ql}QW_ zUToF?a~bXl2B#j=Xi6QR7$O)hNdHlW~M2RdKuc?kD znamv%KK|1Lo)CZcM}(<%-GMj=e(woP?rYa|WsN-eZv0>UEc(nZptZ}$bC_$~n@q2S zp+25J0Y9XTfBuh9x54Iz-&pHIA2A%lvB&ZE{*U;~b3{+?Bk=t?!a*4WT5ES(71rw(^%83$Fz11^ z^2ki=U{)O;d(1e2dxQPl;K6w?pbFr`j4B+?X@HIk84aT_$zd-<v#ZV!)`GQpqn;y4qt&s zo`>BC9a1WlxHtYTSmXN`+&?CU-e4bkvG4mO9tud9$?1DRA_h~r;s%TFA|^E1!E)O> z4bO3104&GJpPbQvgjrc2%FlikCGK7(p`pNY#6%GYR@NQeG|f)Otk&AuY+R;w(gIxI zButZ)*#wN>t5ADPcREzeq8riGHZ5ii8|lnhc3hSB6cmlQZqb-^1vE0v7_QfNDwZjv zVhNqPo42N-HA$+c@S!=Z$ZQFAEi0BCu6NLIXXBLZ!Chy5| z_GfbNApU?ZJ6XU|(2h#~A- zzTegmjPJtLoXFz$e;Q|Jz2E)UWc@0p1W4ZKHU*K)9v6P(7xAMXz*@q8&fxK^FGy(q zIR3AH4rON07k?8~wh*!3U>o3BhzbX=qLEv#AwqVmG5~gvh9CP7*5cl8{R>()*>!kv z`^i7@8$WXt|Ioie*%|cte~+3K`V4pjedvo@Dmr@TebkqJ{7I@MhWCZB?*BVF!mI#n zQ%N}&lTH@n9oubNuH$+Q!zs0_Tjfr(V~K!`E_M)4iwa1%KfHnTCVXfXKUZDJ$HYfx zV~ZK3+Oe;fx;ILla?550A97qw`T~w|2)xn!0n#@Q=bQ2tLTv+WH!Q9iozeZ{ELpW;D zaHQnkT`n9A&;{h2OeTTQ0E{_~aKfeYCwvmCIv`=>m`(#mL!QPY(tjY9i!bc>h(@SQ&d^nZ4~q=c-+*K z#{`^xjsM|*@JlX^0n5G4@{c-J6d_>hY}ggBWmra+#>nZk#GtZoJHGAUmM4@2B59*$oJcQ{ zmh64AhzzEl4&FGvXienqp|jZ%il@=j-z`iZ^nULb(JOz0T#LpD5$=*Dq*vf{v|E)A zZ^WNa1=~sy9{V8v;a@L+q7BSw#l$@lJ;sN~0pFsfPb8_U2_uD^5wwL*A7IU$2Pup0dJV-@ms$o1V3N{-{ zQ(^5-{1cR4z_Pl3*StLz+~*5LBGr$>s)Ul7XgRblks=943i{)VsU^JwJY4HKUCSj7 zz5Hl}r65|3kjNDsAe-m1Lv}`bXnXl&d@WpjJK-Afka&jtONXX+%1Atgy(W6I?0xw;-Z~Trt>v!ZaIOIbIm7fCNF<cGc9Q15*UWdSGPn}mg7oV6r_ZP1zwbx@1a*lI8X)wvZY3dEJ?bi(bBTE zTdB5UaVmk!6tY4RrbyaLQ)c>J9t*lgTw4fX7*KRwwdj@Yl*`RRI+2P`(gxwQAw(j> zhZi1COQZ9KzK72XbGiIX24IqSqg@AB6l}}6boP3;)g4N9jZ73`0@OEiUqVu z@I?Ot*kigHPsOyDYVW3fCBoVC$l8s~gC`a^2Jae)5#HPDH@E)!v(HPic<{vHv4;=k zXR>-+gFh*LNACaVPr7a6#)XwysR8TknxYGj{lb{TijMN~6;9JQpCjv{8l~ zq%+A_Lf^L?-)^Qb2`Se@qbi7m@=*A;%sD=kV?u(u<&&q*aDR9r0@gbGnDCE(ll=W3 z)7nVu*OAp_1(P^odgB8~LPd01013?>M<4wu{LCj%EX4)%{37vtGiZnw6W;Yn?}2xc z|L-@@mp((x5_89uv z-@||R2k1}!H?(;TTNbU8%p+6BrhGAfoubj%1Ze!9{u=qx?^5k+%OJ>&jO-&J7zfS4 zjEdsq_>=gP{}h0nNHWI4{w?$Noe}FTR1lNhEf3EoMU1X&>(@)2o8`_{&1|(T%XaC! z3M=}711Jss!d&^;b%-X5g_ydS(dN^%*46D+tz}Y&hac8Ed=vH6VIsJ%aRi5; zjY6qs$D!_on20heEj~QyaUB#)LR@1BbCw7u`}s5*^M`o;Lhecb>ymi15PM)ce)(p3 z-Q}&NwG3}7B8M_077k{$hvpLbxE%Fr3@pI02M-jIvVg3B;%?ly zF*`e3EEZF#6mSAjffzM_)%X zU3mkz6BTya>2!eJ0h{440n69c)_~#RD`?@p@_B|XZeUU91n2?4;7X+e2MA5&m4tc3 zIJ6d^ePv|@=oD5CxjpoI!<%?Kp3mpuhwuh~md{P_xq#^Icn@!GZX#9)8cqRp4xCU} z4R#G30vHU9;WFJQl0UqU!FOd!gwE@;f=SfO;;c(gF^`UB?8yd0Ce9}WB#a_|hFQdP zu%z`MDG8UZY$!=pR3%z~O<}PXEIpX`MTx`Vgp;vHtz)t(wUd2-oIAwv!bLoeLKtOOz{ZQS z`D`&Gh_^gM@aWo+)V;aAUZxe&2NAIMmxrl0xHy*wjvaZX1OfAGwb2rx>`_5SsF+%u z&AN`$ZJU!~PU!Q^yLEMa^Yr#Z?>M<@l18X-(5$xCZfvbwT?e*bxw>)g#n&aJTPAqe-hZg3BR zL)Gz-R||FO2+?+Kua{o_y9;0X(-&w;@MZ;0!LbJqr}OD%t#$q4%`gAyi#u!OY(Dkc zE7va2NNJSLrS>uSZD{-AfI}sPx?xlK;bDZDitv>r-$waN%y?9dkyIff-Vzas5+$Uk zc#iJS?ZY@$#3Y%+ANW!9(EG?se}-QAQ?#>+It{{jm^nuXj!LNdDK#R3oyJnQco0AH zy|nUBaS@3!%ZH=RRD2te{d9_phziQh2|xU=(ffXweDSwwMc-zb7%f_Dh^8(_!!~j7 z>=S57AuWm0Md6VT;OBk}%^jz)$};qD3PTSQ7ex!U(1}-x7C;_RDw7?NETH#(3P1WG z?}a}?FMSSeUPnd;*P*WC4Hb7s&fRO}_YB(0E+mLERReQ|LuX zM<+VisgM*ZR~Ad7g;VGQKO#K-92L;!uJ!$d;J5LN*uac7#=0UL$ZBA4otjQ;H_gji zZ9v%@+wHY#x7@bd29@Tecd8=txnL5iNfF>8PuIoMQ~JrN7+688730EsYo*+^9lA<4 zQr9Oi*`g9scw7zOXdW>iH%x~DpM=!}T(;tbIq5(m%k_9}Ftr;oiug^~e>^PkUaesvn+D72@j1bIj3;>p#P}1e)UV&cI#3 zRNSc;?Fmk6z*N9*w{G3q+1Uw0ZDCFB>V$>sR1K&2!kX|~_!fQz2z~0*sYf4ul)H90 z=mPR3lS#l}9%vnUq{EP7z({B$Y+-3>30CH^ThN$txeU|?pTBhg2#ECBwQJBtmoH!D z2L+!)=Wr=$Sb*fi+EG#9=RV#{CIcshN1g-O!W-`T9*8aHKZkDF-rhcY_AGQuB9Y)I z4!m6|m1?ybkFt)!^F9XOt?Pg%D^jIs!aThp2_xJqb;O0Te8sF@bo9`lL3Fg;-fr%^ zwl2q2SyN&&X@TV{GKr@kIt+)Uljw(p>HEXoqG_sWnif-g1`N(-6Rcu5VcEev$==Td z=2LG0chTrKR+3jxRYg{0(&=`(aMd})n=JatBcg=~QMDupipIkOlPKh8vVg&CBi?9H zKK5#x4vxfB3@=(-P302_V81>sv541TVo?t5frZMzv*htciYC`io|*UD~Kr zwrbg8n)`Bhz5Q0NZ``=J(uGH><#t*|wbZDV>N^{iTi4d-kIWo8xlo+Xb1!a$fxBC` zO0XB`gvn$}uMknpP0=ou6lre*8485@c1h#A#}Zi>g_433j8uUIMe`EF^s=$+Z~pD8 zfAM>NbLm^x+l@{tn>hXWvG;xK*-RmQ<=l;>ODmVpUEkR(C)05_1+{WLKb<}H(7~C- zDYU=5?QCDdh4SW4;t%~KFkZjQz>mH_nQ2r!fNskf2sCy4De?RMS;Thh751fLV_}g- z3y&E>iSLk<@$6CZz5fJ#@V`M-&SWFMYPDMw00woLR*csvU zJJGQxQ9Kh&LE_Mvgm1&65|k4bL|WY7;Dh+behJsN$%U`t*Iq8`JS171;OjdWUcDtP8-^wjw7GL8~(=gTqxE&kDegR4JHF1<)zdjYRrqK!A& zv;%vMSCOh?Erp=X$DY6sz6T$CkRFjg#jp>+-%hh*ysn;rGrE-4;U)#zj33PD2Xfk_ zoOX4)y}Z-es&<+UvunFHqb1z)3HvI~X-#-&CUGREHx1|7cKiBPt5i39T6WyNc{XO4 zgkcC{8J$Fh&ixz!({=?3YXZt@qP~k}3)>IR4Gw4Pdb3!JifJ%+5J7$SyWKCFOw)ts zv)XJrqaobx}l7V#`SA;w!_qg+k%Pi4(B9BS($^ws9Kd-eBN8 zt_uYeH$dQg3vIRltAka~cLZz++|H{U-}8AoPV7`hhxucH&!Le#(wi$|K@Y<#UuVE^ z9XfcS6X0|#EGz)(^FO&;7!H{y5)VvFASQ*iyu7@+x*7&W^KOCnBL%DXG5BuHhcJmO z9{kcHVZz0%NT6rMNSOHO8>S6=5uY#$qNCx4b-Q+brJ}?&_$S2_H65e=Rscm30at{> z89rV`i6-}Iie_p~yVGhKwOA*W)J26ts254E>X9(dpW<2&9-lBnvMebIjnIWrpVcSx zb4RrZ-l0symHc(q&nG&CW)3>Eeq1^oe*fhIR{$whZg$rPW(k*XcMb zi`;%|)jQ4F^2(L9{7mkVXHP%y#4#qIt&5T$-Lbi{ef8XuX;|z^n;3TK(Go#Z^LfCz zs4mDZSMcyG1|Id?y4OL`firkw{5I*sWXE=1dFkTI&!5*58o=$T$Bw?|BTv2a!%ymQ zJ)Y2C`{vb^YirQ4&3YU9ZFX_$;E9EYo<22uptx@!z8y)J&W_Od;n|}-&uws@1eU76 z{eibJ{!0qb6gu))bZaOOg7r5zKBfkT>co7n$visq9D4LS1=}R0Rb1I1jS_Wix;6|M z)LjWH7M{~w507Dt!W#EbNhD=v^hIV-uZpx>F>earchoZwN2EnqizGcE|E3r z?9I-Q`~prFsCQiuS%^{41XUNF{`eUAYdo@hdnJ_ooJ&IV1U`BOA9)mWcP{ZMngr=^ zJURs7XyZj6bfJHq{UmwSmDf;p6Lp)oRim4bRT59*Q~?zhP^t*@OOv#*uwN4C z+jLAAI_;_?EM%x>_;@kC*)VRFI!oIvAlvIZG+4UbwUF!4@{qE`?^<|_=i(lVGj{i`}nwI*Iby*N7Q6PBW zA_$;x7V1LXmAQZB%go9uR22#!DFEdA3{yZ=9xq?M_rL#p|Fx~kRBPuoRhOM)6W0D0!u-5t+-FrMi_;D^0{X?`TP2WtLOHv3Z8m>8%DwE2Fn^ zh^7kizMgCx*0_*}V}fJ#8IvIn@&uIoa4ep%&|>t9l;@YvNlmRySiGd1Tu=0v79+)2 zoq^NCMbcu{>TG$DMv*E%DaE6Nl7YiO-E|BwSYX0S3*l@gyPjPxY3tMOvI2W#7`oJ? zMP|=ZG+6b!FqjRtD%9YDsaYF(lbjHN~fCoX+<4H#XCg2|d~NP-9Q z4E^BpI>=)Clx68);wblJ`&o}S?!+YvlYD`wK z5?J^B+y9sUec$CTMy`H2IyF9PwVT^_wcPtqXZx;JJ*U4TMJk4D?xU$&d`(iKqqpj6 z$gB!1x1ke$NHukVfO1u#~@;b=Y1y#OG|-JIPCFM8x6+dRRbt#*A=?aUQOCPDytynh)yDx z4T2yr0mdM5m3zf8VbqI7fNE_-tIGgC*Q<=pRVL3=*m{GR1tuIzE@y<4Sf`ZNGh~(3 z&{Ab=a2Q}VUiL?ZrbChCWG0;z9Rv#(k)rj;R?9^|q8cA0FKS1GMNhd+dV@lPi@SVi zN(ZZ3OKL*|l&(}Prz9vL17G(_M=F{BKnt=P_1nFc$+^hnR45FDFe_DR;LDP862;0v zCsVaH_MQe?ox`9jYavi66RIH$|1K{tBdRt(KacWM6-XhKcOizXRqX@?`I1T2Avumi zcHn#Nxu>(U)8TNSfK@dz761gep`igtINTlhUP0z+wG@!{Mp~j?kUM50=8K>{i<%-E zd5j|(uYRcQDD(^B^VQYW&_%$3;TPbs=m4O>&CSh$Kp+x{pgO?iyG1QKT;SHea{B|* z;M)mgo}y7IP1zk`LvNF;#+i!`|ONFtTG!R1n9QAAxr?1W1=uvAa zTkNK;J?+rL@Of}C%o$jBjRW4G(S!qoF*X5R7gp>@kxFUF!e-gPQt-yqq|Ign8eD$StV6&Y z7$a|PQOXXFn#+#W(KS}iYS6W~Ox<3~?grcFY;<@wa%Cnmz7UHgl4gT$r^j@Eqs_)K zv*E<&`Oxf8Oa znkibFDh~Nj@RGjC^W;YH1c~QDpIca_z1lMAwO+6-%r7VSOh&FhQra;Zx$^K?o@U7A zD&vFOoDD9c>K#dv<(M$~-E1~@cXtC91&(_8^5xOd(NHLaNU}EHRe>(2{beP;0tN`o z&15pw)zx)%b@_Zg;CLXWRAZ@Dfr17A2?Vk?IXQ_uwBcKnU#cK?SApdjCNgh}~d zX}c@U#}}6aBXef2&EPQ7db1oRLdi+Dl!VceR>Y&U)Kbc51Dh6+2}fdfyO}bOsJMn~ z5|+cXke4>eD;cv$WXGlmy;y8X4-b_^yE}ZD{X&@oBO+W>1rd0GESp^km|IPQ+kbs7 z5lfM4F9-XUW#7*Vif+R8BMk+jqekh@R@XWYIJsCdTD7s+}v3|e)-1C#JoDc z%S~%uFc{g|W{;=A4b7;0UzU=CyUVYv)W*gJlN#^)^0C2kAi8u6yv=(b>h9jNefxde zG47~Ir%W?m5YX;Dr=#J=X(XyG`dXWq&#AfEf$14BCqTGh888L6btYk_c2fSlyL}doT=TG_bK)e0ez;jU<2! zOF>l%PbM`sVUbab1(Rg&XvwY&zc7qA)5Ji0@lOzyrAGs)$>6(^FOqWIOXrJ!2v3dn6Vv>aKA@ae2h6KYaW)IPVfnBhlrZ z7aG4hIX|XVD39&OX%P_So5L zv(dpD!QfIXn@9m~mWvh0)=cdlmNq#SxngD)`YfP9jsj&39Ah&vVrj*4wI3y4LdjSM z1cgtFG?=9FV}qsD6TSi!Q>4l~PY4^+&jKkG`y>gwiS4Mh{oxKzI+OXA4{yn545?fEF8;FMPjbY$}!a@2}}&A*YNQ0)vH%0Cnr%V=1Qis zx=jY^86v>I-`d*Rfa3wjM)AM}g>bd<1ejZWef>iZJp@_`+!1+4my##yCLk)d1mB{f zL?~%ifq*R~##L%p6stb0nywjTz=nPU!nw4xw6L%MEk|C^E4O8}|3aVC)YR;CVAt?_G#Z7TM75XHK;kk_ zSF|72v@dXX(_lj5s7Z@EY|`d~%!CEmn?)tJGE3DmF^28t#$xKR=cRZ7t!Dy>|`glDuGtLj{mMQ%NnD&W>|1*_Ad=XB*b zl*IT;FCJ3xu$)YrbbFn3tuNiWeP}WX?aXA-QZ^b;lUXgnP(3HLVP=A);lWwSq*yA?z;Vz$Iz_izsg;7} zx3mon?VPBxWQrY+PURqc3ZUx^rJ{Ty|kQ^ z^fHlxl39gL%l^G&9-mv8(ynw#ZLt{{0TeR>!#ItMm811^xh-pyC7wdH%!ORics05U z1t?3^Bhk-B_On#jjf6Sov2lA^-C427lQ29J3PzKm zWPU^zU^o{z7@WIp+csdfZnqm5Y)kF>se;04wE_hNALXW|d!quR`QDRDu}UfuX^0YgA)N`#A9I=*2;gp>9E| zA&MIZ#$HLc-0d`2D#JsNw3NO~HtNcDU5Q<;V8W6zK+0)DN!c}8kiS)#uo^au>L&>q zet9+=nh4nHT{@5fCK}~9kaH(U&diiTg{8Pt=sQ|35@80$WFnDDrZOC-lPb!j)1(T?v^@rtMF;-`FS&e2+r)SnW)WpQ} zI@;}ZSRJOaf=?uSeCb-6>W&oZT8gHCnKySfTpJjThGLc2sNt~j%QxU`;8$>>-EC!b zxiJh~jlhlBo!dC_7_Q#u_ZEdyCT%fkp9 z{%Slh7fdJ99rtdl+@%}?W1|Q#{0k~b|G?+4knh^L3s&xt(b4PICx8LMqQUBQ-?;z& zT5m0-BrgeuLc=2?Q*AC$M1)KUnO(&QcPvAjImThq>rg>4O3rYn z?gPQ;DIIBIC}=aM+ejBEN=m8&6UxXk9W_>)LD%FqeR)0b#rWc|KQy}(OUWr(CC)=r zRwG;MG7wn6UCTDPTLmo$Bi9fIbBRfvKsf$;n9&K1)kW zh?lCNr$}}Ise@B&HXATrAW=ZTP<~_h94Mb!Y^gkVLPeF}I$d2|K+;A>N3UMJIx#T; zWEi>iYJ*^bu)$s0+S)ogI^bYvq~GrcnU6wk)eKc|JUj(3UgROHl6Ght@NIa;SS*IT z3)NFlwko(d@X5;g9$cZSs%qD+UC?`1u3Q-z8G)8VcL6^yNPG<~0r3mhZnanUAuM-m^Qo)VA@)mjp#jG88~xiXD9rE-W~J+G(%0Dg^sM2053@0 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 literal 0 HcmV?d00001 From eb538d9b70ecd0fefcc13f0324bf7fd5ee06b5fc Mon Sep 17 00:00:00 2001 From: arjenfvellinga Date: Sun, 20 Nov 2016 18:06:29 +0100 Subject: [PATCH 04/42] Changed order of instructions. (#1466) Order of the instructions suggested that the sample service file could be used if you installed Hass in a virtual environment. Which isn't the case. --- source/getting-started/autostart-systemd.markdown | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/getting-started/autostart-systemd.markdown b/source/getting-started/autostart-systemd.markdown index 245b9f9e64e..6c264f3733f 100644 --- a/source/getting-started/autostart-systemd.markdown +++ b/source/getting-started/autostart-systemd.markdown @@ -35,6 +35,12 @@ WantedBy=multi-user.target EOF' ``` +There is also another [sample service file](https://raw.githubusercontent.com/home-assistant/home-assistant/master/script/home-assistant%40.service) available. To use this one, just download it. + +```bash +$ sudo wget https://raw.githubusercontent.com/home-assistant/home-assistant/master/script/home-assistant%40.service -O /etc/systemd/system/home-assistant@[your user].service +``` + If you've setup Home Assistant in virtualenv following the guide the following template should work for you. ``` @@ -52,12 +58,6 @@ ExecStart=/srv/hass/bin/hass -c "/home/hass/.homeassistant" WantedBy=multi-user.target ``` -There is also another [sample service file](https://raw.githubusercontent.com/home-assistant/home-assistant/master/script/home-assistant%40.service) available. To use this one, just download it. - -```bash -$ sudo wget https://raw.githubusercontent.com/home-assistant/home-assistant/master/script/home-assistant%40.service -O /etc/systemd/system/home-assistant@[your user].service -``` - You need to reload `systemd` to make the daemon aware of the new configuration. Enable and launch Home Assistant after that. ```bash From 0b1b6700fc05f02b9310d4f7cf48d91c88fde5f7 Mon Sep 17 00:00:00 2001 From: Pedro Navarro Date: Sun, 20 Nov 2016 09:07:03 -0800 Subject: [PATCH 05/42] Fixed typo (#1465) --- source/getting-started/installation-virtualenv.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/getting-started/installation-virtualenv.markdown b/source/getting-started/installation-virtualenv.markdown index b956ef18ee7..4971b6f7197 100644 --- a/source/getting-started/installation-virtualenv.markdown +++ b/source/getting-started/installation-virtualenv.markdown @@ -87,7 +87,7 @@ And that's it... you now have Home Assistant installed, and you can be sure that ### {% linkable_title Finally... Run Home Assistant %} -There are two ways to launch Home Assistant. If you are **in** the virtualenv, you can just run `hass` and it will work as normal. If the virtualenv is not activated, you just use the `hass` executable in the `bin` directory mentioned earlier. There is one caveat... Because Home Assistant stores it's configuration in the user's home directory, we need to be the user `hass` user or specify the configuration with `-c`. +There are two ways to launch Home Assistant. If you are **in** the virtualenv, you can just run `hass` and it will work as normal. If the virtualenv is not activated, you just use the `hass` executable in the `bin` directory mentioned earlier. There is one caveat... Because Home Assistant stores its configuration in the user's home directory, we need to be the user `hass` user or specify the configuration with `-c`. ```bash $ sudo -u hass -H /srv/hass/bin/hass From 3e74d48820a71e5d0511e122c23702530cb710c5 Mon Sep 17 00:00:00 2001 From: jnimmo Date: Mon, 21 Nov 2016 06:08:39 +1300 Subject: [PATCH 06/42] Fixed service name for alarm keypress (#1464) Missed that it was called envisalink_alarm_keypress instead of alarm_keypress --- source/_components/envisalink.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/envisalink.markdown b/source/_components/envisalink.markdown index 522d7f52e9d..238a9b3066c 100644 --- a/source/_components/envisalink.markdown +++ b/source/_components/envisalink.markdown @@ -77,4 +77,4 @@ The following services are supported by Envisalink and can be used to script or - **alarm_arm_home**: Arms the alarm in home mode. - **alarm_arm_away**: Arms the alarm in standard away mode. - **alarm_trigger**: Trigger an alarm on the Envisalink connected alarm system. For example, a newer zwave/zigbee sensor can now be integrated into a legacy alarm system using a Home Assistant automation. -- **alarm_keypress**: Sends a string of up to 6 characters to the alarm. *DSC alarms only* +- **envisalink_alarm_keypress**: Sends a string of up to 6 characters to the alarm. *DSC alarms only* From b23f881e3310539bc5ccb9ac5d4a35771258b574 Mon Sep 17 00:00:00 2001 From: Brian J King Date: Sun, 20 Nov 2016 11:11:44 -0600 Subject: [PATCH 07/42] Rename automation_first_light to automation_first_light.markdown (#1467) Page rendering is fubar, attempting to fix. --- .../{automation_first_light => automation_first_light.markdown} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename source/_cookbook/{automation_first_light => automation_first_light.markdown} (100%) diff --git a/source/_cookbook/automation_first_light b/source/_cookbook/automation_first_light.markdown similarity index 100% rename from source/_cookbook/automation_first_light rename to source/_cookbook/automation_first_light.markdown From 690f1155c7998032119b4cc753b4a26cc8c445aa Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 20 Nov 2016 12:15:03 -0800 Subject: [PATCH 08/42] Release 0.33.1 --- _config.yml | 2 +- .../2016-11-20-calendar--wink-thermostats--cisco-ios.markdown | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/_config.yml b/_config.yml index ba073fff5d0..f0e465e4557 100644 --- a/_config.yml +++ b/_config.yml @@ -130,5 +130,5 @@ social: current_major_version: 0 current_minor_version: 33 -current_patch_version: 0 +current_patch_version: 1 date_released: 2016-11-20 diff --git a/source/_posts/2016-11-20-calendar--wink-thermostats--cisco-ios.markdown b/source/_posts/2016-11-20-calendar--wink-thermostats--cisco-ios.markdown index 6768239bfba..c2c4905fcb5 100644 --- a/source/_posts/2016-11-20-calendar--wink-thermostats--cisco-ios.markdown +++ b/source/_posts/2016-11-20-calendar--wink-thermostats--cisco-ios.markdown @@ -39,6 +39,10 @@ But a new release wouldn't be awesome if it didn't had some new goodies and this - Alarm Control Panel - [Envisalink]: Add new keypress service ([@jnimmo]) - Light - [Hue]: Add service to activate scenes defined in Hue app ([@sdague]) +### {% linkable_title Release 0.33.1 - November 20 %} + + - Fix Z-Wave lights ([@turbokongen]) + ### {% linkable_title Breaking changes %} - We have included a fix that impacts how we generate entity ids. This only impacts devices with accented characters. Instead of being stripped out, they are now replaced with the non-accented version. So now `Tèst Mörê` will become `test_more` instead of `tst_mr`. From a2a75c0eeb78ff35139b4f9ea3e06d0a32db5a97 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Mon, 21 Nov 2016 14:19:37 +0100 Subject: [PATCH 09/42] Update recorder.markdown --- source/_components/recorder.markdown | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/_components/recorder.markdown b/source/_components/recorder.markdown index b0dfd2e16d2..69551c136c6 100644 --- a/source/_components/recorder.markdown +++ b/source/_components/recorder.markdown @@ -59,3 +59,11 @@ $ sudo apt-get install libmysqlclient-dev $ pip3 install mysqlclient ``` +### {% linkable_title PostGreSQL %} + +For PostGreSQL you may have to install a few dependencies: + +```bash +$ sudo apt-get install postgresql-server-dev-X.Y +$ pip3 install psycopg2 +``` From 6d20493650667904e2bac5f3d17af3558815d3aa Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Mon, 21 Nov 2016 14:20:18 +0100 Subject: [PATCH 10/42] Update recorder.markdown --- source/_components/recorder.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/recorder.markdown b/source/_components/recorder.markdown index 69551c136c6..c9c32efe9c5 100644 --- a/source/_components/recorder.markdown +++ b/source/_components/recorder.markdown @@ -59,9 +59,9 @@ $ sudo apt-get install libmysqlclient-dev $ pip3 install mysqlclient ``` -### {% linkable_title PostGreSQL %} +### {% linkable_title PostgreSQL %} -For PostGreSQL you may have to install a few dependencies: +For PostgreSQL you may have to install a few dependencies: ```bash $ sudo apt-get install postgresql-server-dev-X.Y From 553a0442fe1d23279fce042ba23bc66a4a7e5450 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 21 Nov 2016 19:46:54 -0800 Subject: [PATCH 11/42] Version bump to 0.33.2 --- _config.yml | 4 ++-- ...-20-calendar--wink-thermostats--cisco-ios.markdown | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/_config.yml b/_config.yml index f0e465e4557..97193d6b3d4 100644 --- a/_config.yml +++ b/_config.yml @@ -130,5 +130,5 @@ social: current_major_version: 0 current_minor_version: 33 -current_patch_version: 1 -date_released: 2016-11-20 +current_patch_version: 2 +date_released: 2016-11-22 diff --git a/source/_posts/2016-11-20-calendar--wink-thermostats--cisco-ios.markdown b/source/_posts/2016-11-20-calendar--wink-thermostats--cisco-ios.markdown index c2c4905fcb5..e9df6660bc6 100644 --- a/source/_posts/2016-11-20-calendar--wink-thermostats--cisco-ios.markdown +++ b/source/_posts/2016-11-20-calendar--wink-thermostats--cisco-ios.markdown @@ -43,6 +43,15 @@ But a new release wouldn't be awesome if it didn't had some new goodies and this - Fix Z-Wave lights ([@turbokongen]) +### {% linkable_title Release 0.33.2 - November 22 %} + + - Fix Device Tracker init ([@pvizeli]) + - Fix Discovery init ([@pvizeli]) + - Fix TP-Link switch ([@mweinelt]) + - Fix Zwave light naming & configurable refresh ([@jchapple]) + - Neato fixes ([@turbokongen]) + - Fix 'Unknown' status for Nest Protect devices ([@Khabi]) + ### {% linkable_title Breaking changes %} - We have included a fix that impacts how we generate entity ids. This only impacts devices with accented characters. Instead of being stripped out, they are now replaced with the non-accented version. So now `Tèst Mörê` will become `test_more` instead of `tst_mr`. @@ -69,6 +78,8 @@ But a new release wouldn't be awesome if it didn't had some new goodies and this [@sdague]: https://github.com/sdague [@turbokongen]: https://github.com/turbokongen [@w1ll1am23]: https://github.com/w1ll1am23 +[@jchapple]: https://github.com/jchapple +[@Khabi]: https://github.com/Khabi [api-stream]: /components/sensor.api_stream/ [cisco]: /components/device_tracker.cisco_ios/ From 152ca9d906e7aa7160bf4d97b14bf8cf44c4dc02 Mon Sep 17 00:00:00 2001 From: dennisaion Date: Tue, 22 Nov 2016 10:54:16 +0100 Subject: [PATCH 12/42] Update (#1470) Hey there. I noticed a mistake in the configuration example I changed this notify: - name: NOTIFIER_NAME platform: kodi host: http://192.168.0.123 to this notify: - platform: kodi name: NOTIFIER_NAME host: http://192.168.0.123 --- source/_components/notify.kodi.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/notify.kodi.markdown b/source/_components/notify.kodi.markdown index a5ba6e0bacc..057a3ab86c3 100644 --- a/source/_components/notify.kodi.markdown +++ b/source/_components/notify.kodi.markdown @@ -20,8 +20,8 @@ To add Kodi to your installation, add the following to your `configuration.yaml` ```yaml # Example configuration.yaml entry notify: - - name: NOTIFIER_NAME - platform: kodi + - platform: kodi + name: NOTIFIER_NAME host: http://192.168.0.123 ``` From 205484f7227836aec714c621132e11f74d490018 Mon Sep 17 00:00:00 2001 From: Molodax Date: Tue, 22 Nov 2016 11:03:37 +0100 Subject: [PATCH 13/42] Update sensor.vasttrafik.markdown (#1474) Apparently, **from** is required. --- source/_components/sensor.vasttrafik.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.vasttrafik.markdown b/source/_components/sensor.vasttrafik.markdown index 7fd7246f476..3f26d8ce5ab 100644 --- a/source/_components/sensor.vasttrafik.markdown +++ b/source/_components/sensor.vasttrafik.markdown @@ -39,7 +39,7 @@ Configuration variables: - **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. + - **from** (*Required*): The start station. - **heading** (*Optional*): Direction of the travelling. - **delay** (*Optional*): Delay in minutes. From 144bb13be3fd8c7f88b0f678bcc6aa20968cded8 Mon Sep 17 00:00:00 2001 From: neonbunny Date: Tue, 22 Nov 2016 10:14:14 +0000 Subject: [PATCH 14/42] Remove "icon" setting from device_tracker component (#1473) Whilst the icon setting might be handy for representing a device, there's no code in the device_tracker component to support this setting. --- source/_components/device_tracker.markdown | 2 -- 1 file changed, 2 deletions(-) diff --git a/source/_components/device_tracker.markdown b/source/_components/device_tracker.markdown index d325c1d4e92..b1120fbb482 100644 --- a/source/_components/device_tracker.markdown +++ b/source/_components/device_tracker.markdown @@ -61,7 +61,6 @@ Here's an example configuration for a single device: devicename: name: Friendly Name mac: EA:AA:55:E7:C6:94 - icon: mdi:face-profile picture: https://home-assistant.io/images/favicon-192x192.png gravatar: test@example.com track: yes @@ -72,7 +71,6 @@ devicename: |----------------|-------------------------------|---------------------------------------------------------------------------------------------------------| | `name` | Host name or "Unnamed Device" | The friendly name of the device | | `mac` | None | The MAC address of the device. Add this if you are using a network device tracker like Nmap or SNMP | -| `icon` | None | A name of an MDI Icon. | | `picture` | None | A picture that you can use to easily identify the person or device. You can also save the image file in a folder "www" in the same location (can be obtained from developer tools) where you have your configuration.yaml file and just use `picture: /local/favicon-192x192.png`. | | `gravatar` | None | An email address for the device's owner. If provided, it will override `picture` | | `track` | False | If `yes`/`on`/`true` then the device will be tracked. Otherwise its location and state will not update | From 2d73da8e4c73f51cbdfaaade569b841492ad0817 Mon Sep 17 00:00:00 2001 From: David De Sloovere Date: Tue, 22 Nov 2016 13:38:03 +0100 Subject: [PATCH 15/42] Update installation-raspberry-pi-image.markdown (#1459) * Update installation-raspberry-pi-image.markdown Add info to customize. I had to search a few minutes to figure out how to change the keyboard layout. Add Windows 10 SSH in bash info. Maybe there should be a seperate page in the documentation, where all 'How to connect/SSH' topics link to. That way it won't have to be repeated throughout the docs. * Update installation-raspberry-pi-image.markdown * Update installation-raspberry-pi-image.markdown Reworked mention of Windows 10 bash feature mention. * Update installation-raspberry-pi-image.markdown Contained a typo, but also changed the wording --- .../installation-raspberry-pi-image.markdown | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/source/getting-started/installation-raspberry-pi-image.markdown b/source/getting-started/installation-raspberry-pi-image.markdown index a22a0b38ba6..562e6c31ed9 100644 --- a/source/getting-started/installation-raspberry-pi-image.markdown +++ b/source/getting-started/installation-raspberry-pi-image.markdown @@ -32,7 +32,8 @@ The following extras are included on the image: Some extra tips: - Check out the list of [Raspberry Pi hardware specific components][pi-components]. - - Z-Wave support can be installed by following the [Getting started instructions for Z-Wave](/getting-started/z-wave/). + - Z-Wave support can be installed by following the [Getting started instructions for Z-Wave][install-zwave]. + - Run `sudo raspi-config` to change the locale, timezone and keyboard layout. ### {% linkable_title Technical Details %} @@ -53,6 +54,8 @@ $ ssh pi@ip-address-of-pi Windows users start [Putty][ssh-putty], enter the IP address of the Raspberry Pi in the *Host name* field and port 22 in the *Port* field. Then click *Open* and a terminal window will open. Enter the credentials. Default user name is `pi` and password is `raspberry`. +Optionally, starting with Windows 10 anniversary update, you can use the built-in '[Bash on Windows][bash-windows]' to use SSH if you have enabled Developer mode and have installed the "Windows Subsystem for Linux (beta)" feature. + #### {% linkable_title Start/Stop/Restart Home Assistant on HaSSbian %} Log in as the `pi` account account and execute the following commands: @@ -177,3 +180,5 @@ In addition to this site, check out these sources for additional help: [ssh-putty]: http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html [stop-homeassistant]: /getting-started/installation-raspberry-pi-image/#startstoprestart-home-assistant-on-hassbian [configuring-homeassistant]: /getting-started/configuration/ +[bash-windows]: https://msdn.microsoft.com/en-us/commandline/wsl/about +[install-zwave]: /getting-started/z-wave/ From c5ea3f50b89dfb8cfb97b5d9297cd1a84896c32d Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 22 Nov 2016 13:44:01 +0100 Subject: [PATCH 16/42] Add timetable data for Switzerland --- source/_components/sensor.gtfs.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/sensor.gtfs.markdown b/source/_components/sensor.gtfs.markdown index e2d60b80936..094a26ce1af 100644 --- a/source/_components/sensor.gtfs.markdown +++ b/source/_components/sensor.gtfs.markdown @@ -23,6 +23,7 @@ Here are some examples: - [Bay Area Rapid Transit (BART)](http://www.bart.gov/schedules/developers/gtfs) - The light rail system for the San Francisco Bay Area. - [Metropolitan Transit Authority of New York City (MTA)](http://www.bart.gov/schedules/developers/gtfs) - Provides separate data feeds for subway, bus, LIRR and Metro-North of the greater New York City metropolitan region. - [GBRail.info](http://www.gbrail.info/) - Provides data feeds for most if not all rail companies in Britain. +- [Official Timetable Switzerland](http://www.fahrplanfelder.ch/en/timetable-data.html) - The official timetable data for Switzerland. You need to download a GTFS ZIP file and put it into a folder named `gtfs` in your configuration directory. For ease of use, it is suggested that you rename the file to just the agency/data source name (i.e. `bart.zip` instead of `google_transit_20160328_v1.zip`). You can also unzip and place a folder in the `gtfs` folder. From dd09cd5e8b65f57e4694edb4372af6c3cbd33f1d Mon Sep 17 00:00:00 2001 From: Erik Eriksson Date: Tue, 22 Nov 2016 15:37:17 +0100 Subject: [PATCH 17/42] Removed obsolete info (#1477) Removed obsolete info and unnecessary info to end-users --- source/_components/tellduslive.markdown | 8 -------- 1 file changed, 8 deletions(-) diff --git a/source/_components/tellduslive.markdown b/source/_components/tellduslive.markdown index 134440c00ad..f273af65e74 100644 --- a/source/_components/tellduslive.markdown +++ b/source/_components/tellduslive.markdown @@ -35,11 +35,3 @@ Configuration variables: - **token** (*Required*): The token for the Telldus Live service. - **token_secret** (*Required*): The token secret for the Telldus Live service. -Tellstick Net devices can be auto discovered using [this method](https://developer.telldus.com/doxygen/html/TellStickNet.html). - -It might be possible to communicate with the Tellstick Net device directly, bypassing the Tellstick Live service. This however is [poorly documented](http://developer.telldus.se/ticket/114) and yet not [fully supported](https://developer.telldus.com/doxygen/html/TellStickNet.html). - -

-API requests to certain methods are limited to one request every 10 minutes. -

- From cad2cea2f3762247e732f4887f4a76620d1f4e49 Mon Sep 17 00:00:00 2001 From: Erik Eriksson Date: Tue, 22 Nov 2016 15:38:04 +0100 Subject: [PATCH 18/42] More details about config (#1476) --- source/_components/sensor.dovado.markdown | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/source/_components/sensor.dovado.markdown b/source/_components/sensor.dovado.markdown index 86a7939d357..dac9d4e98b3 100644 --- a/source/_components/sensor.dovado.markdown +++ b/source/_components/sensor.dovado.markdown @@ -32,12 +32,13 @@ Configuration variables: - **username** (*Required*): Your username. - **password** (*Required*): Your password. -- **host** (*Optional*): The IP address of your router, e.g. `192.168.1.1`. -- **port** (*Optional*): The port number of your router, e.g. `999`. +- **host** (*Optional*): The IP address of your router, e.g. `192.168.1.1`. If no host is provided, the gateway for the same network as Home Assistant will automatically be used. +- **port** (*Optional*): The port number of your router, e.g. `999`. If no port is provided, the default API port (6435) will be used. - **sensors** array (*Required*): Conditions to display in the frontend. - - **network**: Network state. - - **signal**: The signal strength. + - **network**: Network state (3G, 4G, etc). + - **signal**: The signal strength (%). - **download**: The download speed. - **upload**: The upload speed. - - **sms**: Unread text messages + - **sms**: Number of unread text messages +If the router provides SMS functionality, a service for sending SMS will also be registered in Home Assistant. From 04aa47785af12e4de487b3d00ce986ac83b417d5 Mon Sep 17 00:00:00 2001 From: Carlo Costanzo Date: Tue, 22 Nov 2016 09:46:20 -0500 Subject: [PATCH 19/42] Added in helpful tip (#1472) * Added in helpful tip Excluding entries in logbook every 3 minutes. * Update cover.garadget.markdown --- source/_components/cover.garadget.markdown | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/source/_components/cover.garadget.markdown b/source/_components/cover.garadget.markdown index 057a3a0256c..79f88f30fc4 100644 --- a/source/_components/cover.garadget.markdown +++ b/source/_components/cover.garadget.markdown @@ -89,3 +89,12 @@ customize: icon: mdi:wifi ``` +Some of the Garadget sensors can create a lot of clutter in the logbook. Use this section of code in your `configuration.yaml` to exclude those entries. + +```yaml +logbook: + exclude: + entities: + - sensor.garage_door_time_in_state + - sensor.garage_door_wifi_signal_strength +``` From 8f3036e30ca0f2701ef613d4dcd40e0d10382dbc Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 22 Nov 2016 20:37:11 -0800 Subject: [PATCH 20/42] Release v0.33.3 --- _config.yml | 4 ++-- ...016-11-20-calendar--wink-thermostats--cisco-ios.markdown | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/_config.yml b/_config.yml index 97193d6b3d4..d3f1a915f2e 100644 --- a/_config.yml +++ b/_config.yml @@ -130,5 +130,5 @@ social: current_major_version: 0 current_minor_version: 33 -current_patch_version: 2 -date_released: 2016-11-22 +current_patch_version: 3 +date_released: 2016-11-23 diff --git a/source/_posts/2016-11-20-calendar--wink-thermostats--cisco-ios.markdown b/source/_posts/2016-11-20-calendar--wink-thermostats--cisco-ios.markdown index e9df6660bc6..cefd9701054 100644 --- a/source/_posts/2016-11-20-calendar--wink-thermostats--cisco-ios.markdown +++ b/source/_posts/2016-11-20-calendar--wink-thermostats--cisco-ios.markdown @@ -52,6 +52,12 @@ But a new release wouldn't be awesome if it didn't had some new goodies and this - Neato fixes ([@turbokongen]) - Fix 'Unknown' status for Nest Protect devices ([@Khabi]) +### {% linkable_title Release 0.33.3 - November 23 %} + + - Update Yr.no entities every hour ([@kellerza]) + - Bump Netdisco to 0.7.7 (fixes discovery on Synology) + - Fix discovery race condition (most obvious in Wemo) ([@balloob]) + ### {% linkable_title Breaking changes %} - We have included a fix that impacts how we generate entity ids. This only impacts devices with accented characters. Instead of being stripped out, they are now replaced with the non-accented version. So now `Tèst Mörê` will become `test_more` instead of `tst_mr`. From 1de24a1b8ddfa0f3eae028f83bc71e1a5932a282 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 22 Nov 2016 20:49:39 -0800 Subject: [PATCH 21/42] Add issue section to blog --- ...2016-11-20-calendar--wink-thermostats--cisco-ios.markdown | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/_posts/2016-11-20-calendar--wink-thermostats--cisco-ios.markdown b/source/_posts/2016-11-20-calendar--wink-thermostats--cisco-ios.markdown index cefd9701054..f183a01c2b9 100644 --- a/source/_posts/2016-11-20-calendar--wink-thermostats--cisco-ios.markdown +++ b/source/_posts/2016-11-20-calendar--wink-thermostats--cisco-ios.markdown @@ -63,6 +63,11 @@ But a new release wouldn't be awesome if it didn't had some new goodies and this - We have included a fix that impacts how we generate entity ids. This only impacts devices with accented characters. Instead of being stripped out, they are now replaced with the non-accented version. So now `Tèst Mörê` will become `test_more` instead of `tst_mr`. - Command line switches will now use the specified object ID for their entity ID instead of basing it off the name. +### {% linkable_title Reporting issues %} + +Experiencing issues introduced by this release? Please report them in our [issue tracker]. Make sure to fill in all fields of the issue template. + +[issue tracker]: https://github.com/home-assistant/home-assistant/issues [@bah2830]: https://github.com/bah2830 [@balloob]: https://github.com/balloob [@bestlibre]: https://github.com/bestlibre From 0e8ad94d3a1c9a9eeeed8d27e136ed09b95fcaf3 Mon Sep 17 00:00:00 2001 From: Matt N Date: Tue, 22 Nov 2016 22:39:49 -0800 Subject: [PATCH 22/42] light.mqtt_template: Fix typo: "optionaly" (#1481) --- source/_components/light.mqtt_template.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/light.mqtt_template.markdown b/source/_components/light.mqtt_template.markdown index ddc0752f4bd..73e26da80ce 100644 --- a/source/_components/light.mqtt_template.markdown +++ b/source/_components/light.mqtt_template.markdown @@ -14,7 +14,7 @@ ha_release: 0.33 --- -The `mqtt_template` light platform lets you control a MQTT-enabled light that receive commands on a command topic and optionaly sends status update on a state topic. +The `mqtt_template` light platform lets you control a MQTT-enabled light that receive commands on a command topic and optionally sends status update on a state topic. It is format-agnostic so you can use any data format you want (i.e. string, JSON), just configure it with templating. This platform supports on/off, brightness, RGB colors, transitions, and short/long flashing. From 60d706ef8d92a9940de8fc00ca8f1330c45a7f7d Mon Sep 17 00:00:00 2001 From: Carlo Costanzo Date: Wed, 23 Nov 2016 01:53:14 -0500 Subject: [PATCH 23/42] Quick time window update (#1479) Added example of windo crossing midnight as per https://github.com/home-assistant/home-assistant/pull/2158 --- source/getting-started/scripts-conditions.markdown | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/getting-started/scripts-conditions.markdown b/source/getting-started/scripts-conditions.markdown index 68c2511001f..cbf6652398a 100644 --- a/source/getting-started/scripts-conditions.markdown +++ b/source/getting-started/scripts-conditions.markdown @@ -132,7 +132,7 @@ The time condition can test if it is after a specified time, before a specified condition: time # At least one of the following is required. after: '15:00:00' -before: '23:00:00' +before: '02:00:00' weekday: - mon - wed @@ -140,6 +140,7 @@ weekday: ``` Valid values for `weekday` are `mon`, `tue`, `wed`, `thu`, `fri`, `sat`, `sun`. +Time condition windows can span across the midnight threshold. In the example above, the condition window is from 3pm to 2am. ### {% linkable_title Zone condition %} From 62fb1262d5f25fb9357ad9ecf18fb388c32df202 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 23 Nov 2016 08:07:36 +0100 Subject: [PATCH 24/42] Replaced by Neato for featured --- source/_components/notify.html5.markdown | 1 - 1 file changed, 1 deletion(-) diff --git a/source/_components/notify.html5.markdown b/source/_components/notify.html5.markdown index 1688b580a08..9821dec6df6 100644 --- a/source/_components/notify.html5.markdown +++ b/source/_components/notify.html5.markdown @@ -10,7 +10,6 @@ footer: true logo: html5.png ha_category: Notifications ha_release: 0.27 -featured: true --- The `html5` notification platform enables you to receive push notifications to Chrome or Firefox, no matter where you are in the world. `html5` also supports Chrome and Firefox on Android, which enables native-app-like integrations without actually needing a native app. From e05b408b9d765601ec47afac7b44e61e6c64faf1 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Wed, 23 Nov 2016 08:24:39 +0100 Subject: [PATCH 25/42] Add ha_release --- source/_components/alexa.markdown | 1 + source/_components/camera.bloomsky.markdown | 1 + source/_components/climate.vera.markdown | 1 + source/_components/cover.vera.markdown | 1 + source/_components/light.hue.markdown | 1 + source/_components/light.vera.markdown | 1 + source/_components/lock.vera.markdown | 1 + source/_components/sensor.vera.markdown | 1 + source/_components/switch.vera.markdown | 1 + source/_components/vera.markdown | 1 + 10 files changed, 10 insertions(+) diff --git a/source/_components/alexa.markdown b/source/_components/alexa.markdown index 73af089aa6a..5b8397a9b90 100644 --- a/source/_components/alexa.markdown +++ b/source/_components/alexa.markdown @@ -10,6 +10,7 @@ footer: true logo: amazon-echo.png ha_category: Voice featured: true +ha_release: 0.10 --- There are a few ways that you can use Amazon Echo and Home Assistant together. diff --git a/source/_components/camera.bloomsky.markdown b/source/_components/camera.bloomsky.markdown index 4a7e9f4b8bb..95a314cb1ce 100644 --- a/source/_components/camera.bloomsky.markdown +++ b/source/_components/camera.bloomsky.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: bloomsky.png ha_category: Camera +ha_release: 0.13 --- diff --git a/source/_components/climate.vera.markdown b/source/_components/climate.vera.markdown index da7b6586422..bc8a9fdc58f 100644 --- a/source/_components/climate.vera.markdown +++ b/source/_components/climate.vera.markdown @@ -10,6 +10,7 @@ footer: true logo: vera.png ha_category: Climate ha_iot_class: "Local Push" +ha_release: 0.13 --- The `vera` climate platform allows you to control your [Vera](http://getvera.com/) thermostats from within Home Assistant. diff --git a/source/_components/cover.vera.markdown b/source/_components/cover.vera.markdown index 28f66c36be0..32eee4bcae6 100644 --- a/source/_components/cover.vera.markdown +++ b/source/_components/cover.vera.markdown @@ -10,6 +10,7 @@ footer: true logo: vera.png ha_category: Cover ha_iot_class: "Local Push" +ha_release: 0.13 --- The `vera` cover platform allows you to control your [Vera](http://getvera.com/) covers from within Home Assistant. diff --git a/source/_components/light.hue.markdown b/source/_components/light.hue.markdown index e53c4c0c76c..b972ec6dc3b 100644 --- a/source/_components/light.hue.markdown +++ b/source/_components/light.hue.markdown @@ -11,6 +11,7 @@ logo: philips_hue.png ha_category: Light ha_iot_class: "Local Polling" featured: true +ha_release: pre 0.7 --- Philips Hue support is integrated into Home Assistant as a light platform. The preferred way to setup the Philips Hue platform is by enabling the [discovery component](/components/discovery/). diff --git a/source/_components/light.vera.markdown b/source/_components/light.vera.markdown index 810ea94cfca..da0fc42fff5 100644 --- a/source/_components/light.vera.markdown +++ b/source/_components/light.vera.markdown @@ -10,6 +10,7 @@ footer: true logo: vera.png ha_category: Light ha_iot_class: "Local Push" +ha_release: pre 0.7 --- The `vera` platform allows you to control your [Vera](http://getvera.com/) lights from within Home Assistant. diff --git a/source/_components/lock.vera.markdown b/source/_components/lock.vera.markdown index eebfbca58e3..8baf864dfd3 100644 --- a/source/_components/lock.vera.markdown +++ b/source/_components/lock.vera.markdown @@ -10,6 +10,7 @@ footer: true logo: vera.png ha_category: Lock ha_iot_class: "Local Push" +ha_release: pre 0.7 --- The `vera` platform allows you to control your [Vera](http://getvera.com/) locks from within Home Assistant. diff --git a/source/_components/sensor.vera.markdown b/source/_components/sensor.vera.markdown index da1c1124d17..e0db880d770 100644 --- a/source/_components/sensor.vera.markdown +++ b/source/_components/sensor.vera.markdown @@ -10,6 +10,7 @@ footer: true logo: vera.png ha_category: 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/) sensors from within Home Assistant. diff --git a/source/_components/switch.vera.markdown b/source/_components/switch.vera.markdown index db2562a193d..09dc61b109e 100644 --- a/source/_components/switch.vera.markdown +++ b/source/_components/switch.vera.markdown @@ -10,6 +10,7 @@ footer: true logo: vera.png ha_category: Switch ha_iot_class: "Local Push" +ha_release: pre 0.7 --- The `vera` platform allows you to control your [Vera](http://getvera.com/) switches from within Home Assistant. diff --git a/source/_components/vera.markdown b/source/_components/vera.markdown index 6a89c56b384..441e12ef463 100644 --- a/source/_components/vera.markdown +++ b/source/_components/vera.markdown @@ -9,6 +9,7 @@ sharing: true footer: true logo: vera.png ha_category: Hub +ha_release: pre 0.7 --- The [Vera](http://getvera.com) hub is a controller mainly connecting to Z-Wave devices. From 1dd95ed15f23a0b3e3cdef908704e19ba599c1b0 Mon Sep 17 00:00:00 2001 From: Ciquattro Date: Wed, 23 Nov 2016 08:27:41 +0100 Subject: [PATCH 26/42] modified an error on the config syntax (#1446) * modified an error on the config syntax as stated here https://home-assistant.io/getting-started/scripts-conditions/ under condition: can't set platform: time but condition: time * Update automation-examples.markdown Address feedback from @fabaff --- source/getting-started/automation-examples.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/getting-started/automation-examples.markdown b/source/getting-started/automation-examples.markdown index 6db04603a7c..ef7eea40ca7 100644 --- a/source/getting-started/automation-examples.markdown +++ b/source/getting-started/automation-examples.markdown @@ -27,10 +27,10 @@ automation: condition: # Prefix the first line of each condition configuration # with a '-'' to enter multiple - - platform: state + - condition: state entity_id: group.all_devices state: 'home' - - platform: time + - condition: time after: '16:00:00' before: '23:00:00' action: @@ -55,7 +55,7 @@ automation: zone: zone.home entity_id: device_tracker.paulus condition: - platform: time + condition: time after: '20:00' action: service: notify.notify From 455325fe61a73b99552bbd53d317b500b6d2d720 Mon Sep 17 00:00:00 2001 From: Marcel030nl Date: Wed, 23 Nov 2016 08:56:57 +0100 Subject: [PATCH 27/42] Update sensor.pvoutput.markdown (#1480) --- source/_components/sensor.pvoutput.markdown | 27 +++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/source/_components/sensor.pvoutput.markdown b/source/_components/sensor.pvoutput.markdown index 624e6791c31..0d21ae55879 100644 --- a/source/_components/sensor.pvoutput.markdown +++ b/source/_components/sensor.pvoutput.markdown @@ -35,3 +35,30 @@ Configuration variables: It's recommended to set `scan_interval:` according to a value greater than 60 seconds. The service only allows 60 requests per hour but the sensor's default is 30 seconds.

+To format the PVoutput sensor you can you the [template component](/topics/templating/). For example: + +```yaml +sensor: + - platform: pvoutput + system_id: YOUR_SYSTEM_ID + api_key: YOUR_API_KEY + scan_interval: 150 + - platform: template + sensors: + power_consumption: + value_template: '{% if is_state_attr("sensor.pvoutput", "power_consumption", "NaN") %}0{% else %}{{ states.sensor.pvoutput.attributes.power_consumption }}{% endif %}' + friendly_name: 'Using' + unit_of_measurement: 'Watt' + energy_consumption: + value_template: '{{ "%0.1f"|format(states.sensor.pvoutput.attributes.energy_consumption|float/1000) }}' + friendly_name: 'Used' + unit_of_measurement: 'kWh' + power_generation: + value_template: '{% if is_state_attr("sensor.pvoutput", "power_generation", "NaN") %}0{% else %}{{ states.sensor.pvoutput.attributes.power_generation }}{% endif %}' + friendly_name: 'Generating' + unit_of_measurement: 'Watt' + energy_generation: + value_template: '{% if is_state_attr("sensor.pvoutput", "energy_generation", "NaN") %}0{% else %}{{ "%0.2f"|format(states.sensor.pvoutput.attributes.energy_generation|float/1000) }}{% endif %}' + friendly_name: 'Generated' + unit_of_measurement: 'kWh' +``` From 2b5d3c0c10727e95f3a5aa05a43b1c73d16d65b5 Mon Sep 17 00:00:00 2001 From: Matt N Date: Wed, 23 Nov 2016 01:23:23 -0800 Subject: [PATCH 28/42] Fix over 100 typos/spelling mistakes :P (#1483) * Fix a bunch of typos/spelling mistakes * Removed extra spaces from emulated_hue * Correct device type. of binary_sensor.enocean.markdown --- .../alarm_control_panel.concord232.markdown | 2 +- source/_components/alarm_control_panel.nx584.markdown | 2 +- source/_components/binary_sensor.concord232.markdown | 2 +- source/_components/binary_sensor.enocean.markdown | 4 ++-- source/_components/binary_sensor.modbus.markdown | 2 +- source/_components/binary_sensor.netatmo.markdown | 2 +- source/_components/binary_sensor.rest.markdown | 2 +- source/_components/binary_sensor.trend.markdown | 2 +- source/_components/binary_sensor.zigbee.markdown | 4 ++-- source/_components/camera.ffmpeg.markdown | 2 +- source/_components/camera.netatmo.markdown | 2 +- source/_components/camera.synology.markdown | 2 +- source/_components/climate.generic_thermostat.markdown | 2 +- source/_components/climate.heatmiser.markdown | 2 +- source/_components/climate.proliphix.markdown | 2 +- source/_components/climate.radiotherm.markdown | 4 ++-- source/_components/demo.markdown | 2 +- .../device_tracker.bluetooth_tracker.markdown | 2 +- source/_components/device_tracker.owntracks.markdown | 2 +- source/_components/device_tracker.tplink.markdown | 4 ++-- source/_components/ecobee.markdown | 2 +- source/_components/emoncms_history.markdown | 2 +- source/_components/emulated_hue.markdown | 4 ++-- source/_components/ffmpeg.markdown | 2 +- source/_components/hdmi_cec.markdown | 2 +- source/_components/homematic.markdown | 4 ++-- source/_components/input_select.markdown | 2 +- source/_components/isy994.markdown | 4 ++-- source/_components/light.hyperion.markdown | 2 +- source/_components/light.markdown | 4 ++-- source/_components/light.yeelight.markdown | 2 +- source/_components/light.zigbee.markdown | 2 +- source/_components/media_player.firetv.markdown | 2 +- source/_components/media_player.mpd.markdown | 2 +- source/_components/media_player.sonos.markdown | 2 +- source/_components/media_player.universal.markdown | 2 +- source/_components/media_player.yamaha.markdown | 2 +- source/_components/mqtt.markdown | 2 +- source/_components/mqtt_eventstream.markdown | 4 ++-- source/_components/notify.group.markdown | 2 +- source/_components/notify.pushetta.markdown | 2 +- source/_components/notify.rest.markdown | 2 +- source/_components/notify.slack.markdown | 8 ++++---- source/_components/notify.syslog.markdown | 2 +- source/_components/openalpr.markdown | 4 ++-- source/_components/pilight.markdown | 4 ++-- source/_components/recorder.markdown | 2 +- source/_components/rfxtrx.markdown | 4 ++-- source/_components/sensor.arwn.markdown | 2 +- source/_components/sensor.bbox.markdown | 2 +- source/_components/sensor.deutsche_bahn.markdown | 4 ++-- source/_components/sensor.emoncms.markdown | 2 +- source/_components/sensor.gpsd.markdown | 2 +- source/_components/sensor.imap_email_content.markdown | 2 +- source/_components/sensor.knx.markdown | 2 +- source/_components/sensor.min_max.markdown | 2 +- source/_components/sensor.mqtt_room.markdown | 2 +- source/_components/sensor.pilight.markdown | 2 +- source/_components/sensor.rest.markdown | 2 +- source/_components/sensor.sabnzbd.markdown | 4 ++-- source/_components/sensor.statistics.markdown | 2 +- source/_components/sensor.ted5000.markdown | 2 +- source/_components/sensor.template.markdown | 2 +- source/_components/sensor.thinkingcleaner.markdown | 2 +- source/_components/sensor.yweather.markdown | 2 +- source/_components/simple_alarm.markdown | 2 +- source/_components/splunk.markdown | 2 +- source/_components/sun.markdown | 2 +- source/_components/switch.command_line.markdown | 2 +- source/_components/switch.dlink.markdown | 2 +- source/_components/switch.hikvision.markdown | 2 +- source/_components/switch.knx.markdown | 4 ++-- source/_components/switch.pilight.markdown | 2 +- source/_components/switch.pulseaudio_loopback.markdown | 2 +- source/_components/switch.rfxtrx.markdown | 4 ++-- source/_components/updater.markdown | 2 +- source/_components/wink.markdown | 10 +++++----- source/getting-started/z-wave.markdown | 2 +- 78 files changed, 101 insertions(+), 101 deletions(-) diff --git a/source/_components/alarm_control_panel.concord232.markdown b/source/_components/alarm_control_panel.concord232.markdown index 793da487edb..9581683f3ec 100644 --- a/source/_components/alarm_control_panel.concord232.markdown +++ b/source/_components/alarm_control_panel.concord232.markdown @@ -25,5 +25,5 @@ alarm_control_panel: Configuration variables: - **host** (*Optional*): The host where the concord232 server process is running. Defaults to localhost. -- **port** (*Optional*): The port where the Alarm panel ist listening. Defaults to 5007. +- **port** (*Optional*): The port where the Alarm panel is listening. Defaults to 5007. diff --git a/source/_components/alarm_control_panel.nx584.markdown b/source/_components/alarm_control_panel.nx584.markdown index 23912d79a68..0a14c880db4 100644 --- a/source/_components/alarm_control_panel.nx584.markdown +++ b/source/_components/alarm_control_panel.nx584.markdown @@ -25,5 +25,5 @@ alarm_control_panel: Configuration variables: - **host** (*Optional*): The host where the nx584 server process is running. Defaults to `localhost`. -- **port** (*Optional*): The port where the Alarm panel ist listening. Defaults to `5007`. +- **port** (*Optional*): The port where the Alarm panel is listening. Defaults to `5007`. diff --git a/source/_components/binary_sensor.concord232.markdown b/source/_components/binary_sensor.concord232.markdown index b31d6689c6c..4378b5fb149 100644 --- a/source/_components/binary_sensor.concord232.markdown +++ b/source/_components/binary_sensor.concord232.markdown @@ -25,5 +25,5 @@ binary_sensor: Configuration variables: - **host** (*Optional*): The host where the concord232 server process is running. Defaults to `localhost`. -- **port** (*Optional*): The port where the Alarm panel ist listening. Defaults to 5007. +- **port** (*Optional*): The port where the Alarm panel is listening. Defaults to 5007. diff --git a/source/_components/binary_sensor.enocean.markdown b/source/_components/binary_sensor.enocean.markdown index 85f5fec8d51..4ca424290fc 100644 --- a/source/_components/binary_sensor.enocean.markdown +++ b/source/_components/binary_sensor.enocean.markdown @@ -13,7 +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 Assistant 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: @@ -27,5 +27,5 @@ binary_sensor: Configuration variables: - **id** (*Required*): The ID of the device. This is the 4 bytes long number written on the dimmer. -- **name** (*Optional*): An identifier for the Ligh in the frontend. +- **name** (*Optional*): An identifier for the switch in the frontend. - **sensor_class** (*Optional*): The [type/class](/components/binary_sensor/) of the sensor to set the icon in the frontend. diff --git a/source/_components/binary_sensor.modbus.markdown b/source/_components/binary_sensor.modbus.markdown index 491c4c2d040..6013a3cf4d7 100644 --- a/source/_components/binary_sensor.modbus.markdown +++ b/source/_components/binary_sensor.modbus.markdown @@ -34,5 +34,5 @@ Configuration variables: - **coils** array (*Required*): The array contains a list of coils to read from. - **name** (*Required*): Name of the sensor. - - **slave** (*Required*): The number of the slave (Optional for tcp and upd Modbus). + - **slave** (*Required*): The number of the slave (Optional for TCP and UDP Modbus). - **coil** (*Required*): Coil number. diff --git a/source/_components/binary_sensor.netatmo.markdown b/source/_components/binary_sensor.netatmo.markdown index 06632d59a29..09911dd896f 100644 --- a/source/_components/binary_sensor.netatmo.markdown +++ b/source/_components/binary_sensor.netatmo.markdown @@ -40,7 +40,7 @@ Configuration variables: - **home** (*Optional*): Will use the cameras of this home only. - **timeout** (*Optional*): The binary sensors will reflect the events from the last X minutes (default: 15) -- **cameras** array (*Optional*): Cameras to use. Multiple enties allowed. +- **cameras** array (*Optional*): Cameras to use. Multiple entities allowed. - 'camera_name': Name of the camera to display. - **monitored_conditions** array (*Optional*): List of monitored conditions. - 'Someone known' diff --git a/source/_components/binary_sensor.rest.markdown b/source/_components/binary_sensor.rest.markdown index 058a50219cc..f6157737bb2 100644 --- a/source/_components/binary_sensor.rest.markdown +++ b/source/_components/binary_sensor.rest.markdown @@ -54,7 +54,7 @@ Configuration variables: - **name** (*Optional*): Name of the REST binary sensor. - **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 the value. -- **payload** (*Optional*): The payload to send with a POST request. Usualy formed as a dictionary. +- **payload** (*Optional*): The payload to send with a POST request. Usually formed as a dictionary. - **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. diff --git a/source/_components/binary_sensor.trend.markdown b/source/_components/binary_sensor.trend.markdown index 45567e9d567..f4b8c799efe 100644 --- a/source/_components/binary_sensor.trend.markdown +++ b/source/_components/binary_sensor.trend.markdown @@ -33,7 +33,7 @@ Configuration variables: - **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 then the sensor will track the state. - - **invert** (*Optional*): Invert the result (so `true` means decending rather than ascending) + - **invert** (*Optional*): Invert the result (so `true` means descending rather than ascending) ## {% linkable_title Examples %} diff --git a/source/_components/binary_sensor.zigbee.markdown b/source/_components/binary_sensor.zigbee.markdown index 95f027fa708..213721cb65d 100644 --- a/source/_components/binary_sensor.zigbee.markdown +++ b/source/_components/binary_sensor.zigbee.markdown @@ -27,8 +27,8 @@ binary_sensor: Configuration variables: -- **name** (*Required*): The name you wouldd like to give the binary sensor in Home Assistant. +- **name** (*Required*): The name you would like to give the binary sensor in Home Assistant. - **pin** (*Required*): The number identifying which pin to use. -- **address** (*Optional*): The long 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. +- **address** (*Optional*): The long 64-bit address of the remote ZigBee device whose digital input pin you'd like to sample. Do not include this variable if you want to sample the local ZigBee device's pins. - **on_state** (*Optional*): Either `high` (default) or `low`, depicting whether the binary sensor is considered `on` when the pin is `high` or `low`. diff --git a/source/_components/camera.ffmpeg.markdown b/source/_components/camera.ffmpeg.markdown index ce7c14dab0e..d74b725c5be 100644 --- a/source/_components/camera.ffmpeg.markdown +++ b/source/_components/camera.ffmpeg.markdown @@ -13,7 +13,7 @@ ha_release: 0.26 --- -The `ffmpeg` platform allows you to use any video feed as a camera in Home Assistant via [FFmpeg](http://www.ffmpeg.org/). This video source must support multiple simultaenous reads, because for every concurrent Home Assistant user, a connection will be made to the source every 10 seconds. Normally this should not be a problem. +The `ffmpeg` platform allows you to use any video feed as a camera in Home Assistant via [FFmpeg](http://www.ffmpeg.org/). This video source must support multiple simultaneous reads, because for every concurrent Home Assistant user, a connection will be made to the source every 10 seconds. Normally this should not be a problem. To enable your FFmpeg feed in your installation, add the following to your `configuration.yaml` file: diff --git a/source/_components/camera.netatmo.markdown b/source/_components/camera.netatmo.markdown index 38df6ac90be..0c0c2b7a693 100644 --- a/source/_components/camera.netatmo.markdown +++ b/source/_components/camera.netatmo.markdown @@ -31,7 +31,7 @@ camera: Configuration variables: - **home** (*Optional*): Will display the cameras of this home only. -- **cameras** array (*Optional*): Cameras to use. Multiple enties allowed. +- **cameras** array (*Optional*): Cameras to use. Multiple entities allowed. - **camera_name**: Name of the camera to display. If **home** and **cameras** are not provided, all cameras will be displayed. For more control over your cameras check the configuration sample below. diff --git a/source/_components/camera.synology.markdown b/source/_components/camera.synology.markdown index 2f5703599a7..96702d814a7 100644 --- a/source/_components/camera.synology.markdown +++ b/source/_components/camera.synology.markdown @@ -31,7 +31,7 @@ Configuration variables: - **url** (*Required*): The URL to your synology, including port. - **username** (*Required*): The username for accessing surveillance station. - **password** (*Required*): The password for accessing surveillance station. -- **whitelist** (*Optional*): A list of which cameras you want to add, the names must be the same as in Surveillance Station. If omited all cameras are added. +- **whitelist** (*Optional*): A list of which cameras you want to add, the names must be the same as in Surveillance Station. If omitted all cameras are added. - **verify_ssl** (*Optional*): True to require a valid certificate, False to disable certificate checking. Defaults to `True`. A full sample configuration for the `synology` platform is shown below: diff --git a/source/_components/climate.generic_thermostat.markdown b/source/_components/climate.generic_thermostat.markdown index 8d008a6329a..b4cb8637f53 100644 --- a/source/_components/climate.generic_thermostat.markdown +++ b/source/_components/climate.generic_thermostat.markdown @@ -31,7 +31,7 @@ Configuration variables: - **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. +- **target_temp** (*Optional*): Set initial 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. diff --git a/source/_components/climate.heatmiser.markdown b/source/_components/climate.heatmiser.markdown index cbdebfbafde..ce68a923878 100644 --- a/source/_components/climate.heatmiser.markdown +++ b/source/_components/climate.heatmiser.markdown @@ -38,4 +38,4 @@ Configuration variables: - **port** (*Required*): The port that the interface is listening on. - **tstats** (*Required*): A list of thermostats activated on the gateway. - **id** (*Required*): The id of the thermostat as configured on the device itself -- **name** (*Required*): A friendly name for the themostat +- **name** (*Required*): A friendly name for the thermostat diff --git a/source/_components/climate.proliphix.markdown b/source/_components/climate.proliphix.markdown index 5916d9258ea..cc4e9e20788 100644 --- a/source/_components/climate.proliphix.markdown +++ b/source/_components/climate.proliphix.markdown @@ -31,7 +31,7 @@ climate: Configuration variables: -- **host** (*Required*): Adress of your thermostat, eg. 192.168.1.32 +- **host** (*Required*): Address of your thermostat, eg. 192.168.1.32 - **username** (*Required*): Username for the thermostat. - **password** (*Required*): Password for the thermostat. diff --git a/source/_components/climate.radiotherm.markdown b/source/_components/climate.radiotherm.markdown index 9b86da36ac8..4a8bb020f05 100644 --- a/source/_components/climate.radiotherm.markdown +++ b/source/_components/climate.radiotherm.markdown @@ -14,7 +14,7 @@ ha_category: Climate The `radiotherm` climate platform let you control a thermostat from [Radio Thermostat](http://www.radiothermostat.com/). -The underlaying library supports: +The underlying library supports: - CT50 V1.09 - CT50 V1.88 @@ -36,7 +36,7 @@ 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. +Multiple thermostats could be assigned by using `host:` if auto-detection is not used. ```yaml climate: diff --git a/source/_components/demo.markdown b/source/_components/demo.markdown index 8d2698f4442..f8082431516 100644 --- a/source/_components/demo.markdown +++ b/source/_components/demo.markdown @@ -12,7 +12,7 @@ ha_category: Other --- -The `demo` platform allows you to use components which are providing a demo of their implementation. The demo entities are dummies but show you how the acutal platform looks like. This way you can run own demonstration instance like the online [Home Assistant demo](https://home-assistant.io/demo/) or `hass --demo-mode` but combined with your own real/functional platforms. +The `demo` platform allows you to use components which are providing a demo of their implementation. The demo entities are dummies but show you how the actual platform looks like. This way you can run own demonstration instance like the online [Home Assistant demo](https://home-assistant.io/demo/) or `hass --demo-mode` but combined with your own real/functional platforms. Available demo platforms: diff --git a/source/_components/device_tracker.bluetooth_tracker.markdown b/source/_components/device_tracker.bluetooth_tracker.markdown index 807e8e35fb7..c29f4c92b35 100644 --- a/source/_components/device_tracker.bluetooth_tracker.markdown +++ b/source/_components/device_tracker.bluetooth_tracker.markdown @@ -23,6 +23,6 @@ device_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 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`. +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 Assistant 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.owntracks.markdown b/source/_components/device_tracker.owntracks.markdown index 7d9717ad18a..ca806f3c2d4 100644 --- a/source/_components/device_tracker.owntracks.markdown +++ b/source/_components/device_tracker.owntracks.markdown @@ -32,7 +32,7 @@ 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: +A full sample configuration for the `owntracks` platform is shown below: ```yaml # Example configuration.yaml entry diff --git a/source/_components/device_tracker.tplink.markdown b/source/_components/device_tracker.tplink.markdown index 34b50d183b2..4cd27113e0e 100644 --- a/source/_components/device_tracker.tplink.markdown +++ b/source/_components/device_tracker.tplink.markdown @@ -16,7 +16,7 @@ ha_release: pre 0.7 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.

-TP-Link devices typically only allow one login at a time to the admin console. This component will count torwards your one allowed login. Depending on how aggressively you configure device_tracker you may not be able to access the admin console of your TP-Link device without first stopping Home Assistant (and waiting a few minutes for the session to timeout) before you'll be able to login. +TP-Link devices typically only allow one login at a time to the admin console. This component will count towards your one allowed login. Depending on how aggressively you configure device_tracker you may not be able to access the admin console of your TP-Link device without first stopping Home Assistant (and waiting a few minutes for the session to timeout) before you'll be able to login.

@@ -38,7 +38,7 @@ Configuration variables: For Archer C9 models running firmware version 150811 or later please use the encrypted password you can retrieve like this: 1. Go to the login page of your router. (default: 192.168.0.1) -2. Type in the password you use to login into the passsword field. +2. Type in the password you use to login into the password field. 3. Click somewhere else on the page so that the password field is not selected anymore. 4. Open the JavaScript console of your browser (usually by pressing F12 and then clicking on "Console"). 5. Type ```document.getElementById("login-password").value;```. diff --git a/source/_components/ecobee.markdown b/source/_components/ecobee.markdown index 57ecdd0482a..8e120b3c01a 100644 --- a/source/_components/ecobee.markdown +++ b/source/_components/ecobee.markdown @@ -54,7 +54,7 @@ ecobee: Configuration variables: -- **api_key** (*Required*): Your ecobee API key. This is only needed for the inital setup of the component. Once registered it can be removed. If you revoke the key in the ecobee portal you will need to update this again and remove the ecobee.conf file in the `.homeassistant` configuration path. +- **api_key** (*Required*): Your ecobee API key. This is only needed for the initial setup of the component. Once registered it can be removed. If you revoke the key in the ecobee portal you will need to update this again and remove the ecobee.conf file in the `.homeassistant` configuration path. - **hold_temp** (*Optional*): True/False whether or not to hold changes indefinitely (True) or until the next scheduled event. Defaults to `False`.

diff --git a/source/_components/emoncms_history.markdown b/source/_components/emoncms_history.markdown index ea7212efb10..3903a53a606 100644 --- a/source/_components/emoncms_history.markdown +++ b/source/_components/emoncms_history.markdown @@ -35,4 +35,4 @@ Configuration variables: - **url** (*Required*): The root URL of your Emoncms installation. (Use https://emoncms.org for the cloud based version) - **inputnode** (*Required*): Input node that will be used inside emoncms. Please make sure you use a dedicated, not used before, node for this component! - **whitelist** (*Required*): List of entity IDs you want to publish. -- **scan_interval** (*Optional*): Defines, in seconds, how reguarly the states of the whitelisted entities are being gathered and send to emoncms. Default is 30 seconds. +- **scan_interval** (*Optional*): Defines, in seconds, how regularly the states of the whitelisted entities are being gathered and send to emoncms. Default is 30 seconds. diff --git a/source/_components/emulated_hue.markdown b/source/_components/emulated_hue.markdown index 241e697aa32..85077abc9e7 100644 --- a/source/_components/emulated_hue.markdown +++ b/source/_components/emulated_hue.markdown @@ -16,7 +16,7 @@ The `emulated_hue` component provides a virtual Philips Hue bridge, written enti entities. The driving use case behind this functionality is to allow Home Assistant to work with an Amazon Echo with no set up cost outside of configuration changes.

- It is recommended to assign a static IP address to the computer running Home Assistant. This is because the Amazon Echo discovers devices by IP addresss, and if the IP changes, the Echo won't be able to control it. This is easiest done from your router, see your router's manual for details. + It is recommended to assign a static IP address to the computer running Home Assistant. This is because the Amazon Echo discovers devices by IP addresses, and if the IP changes, the Echo won't be able to control it. This is easiest done from your router, see your router's manual for details.

### {% linkable_title Configuration %} @@ -41,7 +41,7 @@ Configuration variables: - `script` - `scene` -- **expose_by_default** (*Optional*): Whether or not entities should be exposed via the bridge by default instead of explicitly (see the 'emulated_hue' customization below). If not specified, this defaults to true. Warning: If you have a lot of devices (more than 49 total across all exposed domains), you should be careful with this opton. Exposing more devices than Alexa supports can result in it not seeing any of them. If you are having trouble getting any devices to show up, try disabling this, and explicitly exposing just a few devices at a time to see if that fixes it. +- **expose_by_default** (*Optional*): Whether or not entities should be exposed via the bridge by default instead of explicitly (see the 'emulated_hue' customization below). If not specified, this defaults to true. Warning: If you have a lot of devices (more than 49 total across all exposed domains), you should be careful with this option. Exposing more devices than Alexa supports can result in it not seeing any of them. If you are having trouble getting any devices to show up, try disabling this, and explicitly exposing just a few devices at a time to see if that fixes it. - **exposed_domains** (*Optional*): The domains that are exposed by default if `expose_by_default` is set to true. If not specified, this defaults to the following list: - `switch` diff --git a/source/_components/ffmpeg.markdown b/source/_components/ffmpeg.markdown index 5f139bacc34..26767905fd1 100644 --- a/source/_components/ffmpeg.markdown +++ b/source/_components/ffmpeg.markdown @@ -14,7 +14,7 @@ ha_category: Hub The FFmpeg component allows other Home Assistant components to process video and audio streams. This component supports all FFmpeg versions since 3.0.0; if you have a older version, please update.

-You need the `ffmpeg` binary in your system path. On Debian 8 or Raspbian (Jessie) you can install it from [debian-backports](https://backports.debian.org/Instructions/). If you want [hardware acceleration](https://trac.ffmpeg.org/wiki/HWAccelIntro) support on a Raspberry Pi, you will need to build from source by yourself. Windows binaries are avilable on the [FFmpeg](http://www.ffmpeg.org/) website. +You need the `ffmpeg` binary in your system path. On Debian 8 or Raspbian (Jessie) you can install it from [debian-backports](https://backports.debian.org/Instructions/). If you want [hardware acceleration](https://trac.ffmpeg.org/wiki/HWAccelIntro) support on a Raspberry Pi, you will need to build from source by yourself. Windows binaries are available on the [FFmpeg](http://www.ffmpeg.org/) website.

To set it up, add the following information to your `configuration.yaml` file: diff --git a/source/_components/hdmi_cec.markdown b/source/_components/hdmi_cec.markdown index 4f490389dea..6cbfcd2e05c 100644 --- a/source/_components/hdmi_cec.markdown +++ b/source/_components/hdmi_cec.markdown @@ -40,7 +40,7 @@ $ ln -s /usr/local/lib/python3.4/dist-packages/cec /srv/hass/hass_venv/lib/pytho ```

If after symlinking and adding `hdmi_cec:` to your configuration you are getting the following error in your logs, -`* failed to open vchiq instance` you will also need to add the user account Home Asssistant runs under, to the `video` group. To add the Home Assistant user account to the `video` group, run the following command. `$ usermod -a -G video ` +`* failed to open vchiq instance` you will also need to add the user account Home Assistant runs under, to the `video` group. To add the Home Assistant user account to the `video` group, run the following command. `$ usermod -a -G video `

## {% linkable_title Testing your installation %} diff --git a/source/_components/homematic.markdown b/source/_components/homematic.markdown index 80df676b539..9f2fa1aa978 100644 --- a/source/_components/homematic.markdown +++ b/source/_components/homematic.markdown @@ -24,7 +24,7 @@ Device support is currently available for most of: - Sensors (shutter contacts, motion detectors, power meters and more) - Simple remote controls -If you want to see if a specific device you have is supported, head over to the [pyhomematic](https://github.com/danielperna84/pyhomematic/tree/master/pyhomematic/devicetypes) repository and browse through the sourcecode. A dictionary with the device identifiers (e.g. HM-Sec-SC-2) can be found within the relevant modules near the bottom. +If you want to see if a specific device you have is supported, head over to the [pyhomematic](https://github.com/danielperna84/pyhomematic/tree/master/pyhomematic/devicetypes) repository and browse through the source code. A dictionary with the device identifiers (e.g. HM-Sec-SC-2) can be found within the relevant modules near the bottom. We automatically detect all devices we currently support and try to generate useful names. If you enable name-resolving, we try to fetch names from Metadata (Homegear), via JSON-RPC or the XML-API you may have installed on your CCU. Since this may fail this is disabled by default. You can manually override the created entities be using Home Assistants [Customizing](https://home-assistant.io/getting-started/customizing-devices/) feature. With it you are able to hide entities you don't need to see within the UI. @@ -45,7 +45,7 @@ Configuration variables: - **resolvenames** (*Optional*): Try to fetch device names. Defaults to `False` if not specified. - **username** (*Optional*): When fetching names via JSON-RPC, you need to specify a user with guest-access to the CCU. - **password** (*Optional*): When fetching names via JSON-RPC, you need to specify the password of the user you have configured above. -- **delay** (*Optional*): Delay fetching of current state per deivce on startup. Used to prevent overloading of the CCU. Defaults to 0.5. +- **delay** (*Optional*): Delay fetching of current state per device on startup. Used to prevent overloading of the CCU. Defaults to 0.5. - **variables** (*Optional*): True or False if you want use CCU2/Homegear variables. Default False. To further explain the `resolvenames` option: diff --git a/source/_components/input_select.markdown b/source/_components/input_select.markdown index 3ffd66d16a3..1adbd4bbc76 100644 --- a/source/_components/input_select.markdown +++ b/source/_components/input_select.markdown @@ -12,7 +12,7 @@ ha_category: Automation ha_release: 0.13 --- -The `input_select` component allows the user to define a list of values that can be selected via the frontend and can be used within conditions of automation. When a user selectes a new item, a state transition event is generated. This state event can be used in an `automation` trigger. +The `input_select` component allows the user to define a list of values that can be selected via the frontend and can be used within conditions of automation. When a user selects a new item, a state transition event is generated. This state event can be used in an `automation` trigger. To enable this platform, add the following lines to your `configuration.yaml`: diff --git a/source/_components/isy994.markdown b/source/_components/isy994.markdown index 4c00e3acb0a..af26444b5c2 100644 --- a/source/_components/isy994.markdown +++ b/source/_components/isy994.markdown @@ -36,7 +36,7 @@ Configuration variables: - **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. +- **tls** (*Optional*): This entry should reflect 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. Once the ISY controller is configured, it will automatically import any binary sensors, covers, fans, lights, locks, sensors and switches it can locate. @@ -109,7 +109,7 @@ The *actions* program indicates what should be performed for the following devic * *cover* the THEN clause is evaluated for the open_cover service, the ELSE clause is evaluated for the close_cover service * *fan* the THEN clause is evaluated for the turn_on service, the ELSE clause is evaluated for the turn_off service * *lock* the THEN clause is evaluated for the lock service, the ELSE clause is evaluated for the unlock service - * *switch* the THEN clause is evaluated for the turn_on srevice, the ELSE clause is evaluated for the turn_off service + * *switch* the THEN clause is evaluated for the turn_on service, the ELSE clause is evaluated for the turn_off service

diff --git a/source/_components/light.hyperion.markdown b/source/_components/light.hyperion.markdown index 2b875ccccbf..576f486f1ac 100644 --- a/source/_components/light.hyperion.markdown +++ b/source/_components/light.hyperion.markdown @@ -14,7 +14,7 @@ ha_release: 0.7.6 This platform allows you to integrate your [Hyperion](https://hyperion-project.org/wiki) into Home Assistant. -Hyperion is an opensource Ambilight implementation which runs on many platforms. +Hyperion is an open source Ambilight implementation which runs on many platforms. ```yaml # Example configuration.yaml entry diff --git a/source/_components/light.markdown b/source/_components/light.markdown index d6575483ae5..43f716fc692 100644 --- a/source/_components/light.markdown +++ b/source/_components/light.markdown @@ -35,8 +35,8 @@ Turns one light on or multiple lights on using [groups]({{site_root}}/components | `entity_id` | no | String or list of strings that point at `entity_id`s of lights. Else targets all. | `transition` | yes | Integer that represents the time the light should take to transition to the new state in seconds. *not supported by Wink | `profile` | yes | String with the name of one of the built-in profiles (relax, energize, concentrate, reading) or one of the custom profiles defined in `light_profiles.csv` in the current working directory. Light profiles define a xy color and a brightness. If a profile is given and a brightness or xy color then the profile values will be overwritten. -| `xy_color` | yes | A list containing two floats representing the xy color you want the light to be. Two comma seperated floats that represent the color in XY. -| `rgb_color` | yes | A list containing three integers representing the rgb color you want the light to be. Three comma seperated integers that represent the color in RGB. You can find a great chart here: [Hue Color Chart](http://www.developers.meethue.com/documentation/hue-xy-values) +| `xy_color` | yes | A list containing two floats representing the xy color you want the light to be. Two comma separated floats that represent the color in XY. +| `rgb_color` | yes | A list containing three integers representing the rgb color you want the light to be. Three comma separated integers that represent the color in RGB. You can find a great chart here: [Hue Color Chart](http://www.developers.meethue.com/documentation/hue-xy-values) | `color_temp` | yes | An INT in mireds representing the color temperature you want the light to be. | `color_name` | yes | A human readable string of a color name, such as `blue` or `goldenrod` or [`chucknorris`](http://stackoverflow.com/questions/8318911/why-does-html-think-chucknorris-is-a-color). If your browser can display it, so can Home Assistant. | `brightness` | yes | Integer between 0 and 255 for how bright the color should be. diff --git a/source/_components/light.yeelight.markdown b/source/_components/light.yeelight.markdown index 2406dd47b14..568a6364693 100644 --- a/source/_components/light.yeelight.markdown +++ b/source/_components/light.yeelight.markdown @@ -36,7 +36,7 @@ Determine your bulb ip (using router, software, ping ...)

-Tests are only made with a YLDP03YL model. Because it's the only hardware developer owns. If you have bugs with another kind of model, you could open an issue on [Home Assitant Github](https://github.com/home-assistant/home-assistant) +Tests are only made with a YLDP03YL model. Because it's the only hardware developer owns. If you have bugs with another kind of model, you could open an issue on [Home Assistant Github](https://github.com/home-assistant/home-assistant)

diff --git a/source/_components/light.zigbee.markdown b/source/_components/light.zigbee.markdown index b0462064724..5730043d1eb 100644 --- a/source/_components/light.zigbee.markdown +++ b/source/_components/light.zigbee.markdown @@ -28,5 +28,5 @@ Configuration variables: - **name** (*Required*): The name you would like to give the light in Home Assistant. - **pin** (*Required*): The number identifying which pin to use. -- **address** (*Optional*): The long 64 bit address of the remote ZigBee device whose digital output pin you wouldd like to switch. Do not include this variable if you want to switch the local ZigBee device's pins. +- **address** (*Optional*): The long 64 bit address of the remote ZigBee device whose digital output pin you would like to switch. Do not include this variable if you want to switch the local ZigBee device's pins. - **on_state** (*Optional*): Either `high` (default) or `low`, depicting whether the digital output pin is pulled `high` or `low` when the light is turned on. diff --git a/source/_components/media_player.firetv.markdown b/source/_components/media_player.firetv.markdown index 2730badb331..56798dd11db 100644 --- a/source/_components/media_player.firetv.markdown +++ b/source/_components/media_player.firetv.markdown @@ -27,7 +27,7 @@ Steps to configure your Amazon Fire TV stick with Home Assistant: - Find Amazon Fire TV device IP: - From the main (Launcher) screen, select Settings. - Select System > About > Network. -- The following commands must be run in a Python 2.x environment. They will allow the component to function in an Ubuntu 16.04/Hassbian enviorment. +- The following commands must be run in a Python 2.x environment. They will allow the component to function in an Ubuntu 16.04/Hassbian environment. - `apt-get install swig libssl-dev python-dev libusb-1.0-0` - `pip install flask` - `pip install https://pypi.python.org/packages/source/M/M2Crypto/M2Crypto-0.24.0.tar.gz` diff --git a/source/_components/media_player.mpd.markdown b/source/_components/media_player.mpd.markdown index 5364462c309..a0b52c5a0c6 100644 --- a/source/_components/media_player.mpd.markdown +++ b/source/_components/media_player.mpd.markdown @@ -14,7 +14,7 @@ ha_iot_class: "Local Polling" --- -The `mpd` platform allows you to control a [Music Player Daemon](http://www.musicpd.org/) from Home Assistant. Unfortunatly you will not be able to manipulate the playlist (add or delete songs) or add transitions between the songs. +The `mpd` platform allows you to control a [Music Player Daemon](http://www.musicpd.org/) from Home Assistant. Unfortunately you will not be able to manipulate the playlist (add or delete songs) or add transitions between the songs. Even though no playlist manipulation is possible, it is possible to use the play_media service to load an existing saved playlist as part of an automation or scene. diff --git a/source/_components/media_player.sonos.markdown b/source/_components/media_player.sonos.markdown index 62319a09947..49fe55eb1bb 100644 --- a/source/_components/media_player.sonos.markdown +++ b/source/_components/media_player.sonos.markdown @@ -64,7 +64,7 @@ Take a snapshot of what is currently playing on one or more speakers. This servi ### {% linkable_title Service `sonos_restore` %} -Restore a previosly taken snapshot of one or more speakers. If no `entity_id` is provided, all speakers are restored. +Restore a previously taken snapshot of one or more speakers. If no `entity_id` is provided, all speakers are restored. | Service data attribute | Optional | Description | | ---------------------- | -------- | ----------- | diff --git a/source/_components/media_player.universal.markdown b/source/_components/media_player.universal.markdown index 115a766206c..9f18e43c64e 100644 --- a/source/_components/media_player.universal.markdown +++ b/source/_components/media_player.universal.markdown @@ -58,7 +58,7 @@ The universal media player will primarily imitate one of its *children*. The fir It is recommended that the command *turn_on*, the command *turn_off*, and the attribute *state* all be provided together. The *state* attribute indicates if the Media Player is on or off. If *state* indicates the media player is off, this status will take precedent over the states of the children. If all the children are idle/off and *state* is on, the universal media player's state will be on. -It is also recomended that the command *volume_up*, the command *volume_down*, the command *volume_mute*, and the attribute *is_volume_muted* all be provided together. The attribute *is_volume_muted* should return either True or the on state when the volume is muted. The *volume_mute* service should toggle the mute setting. +It is also recommended that the command *volume_up*, the command *volume_down*, the command *volume_mute*, and the attribute *is_volume_muted* all be provided together. The attribute *is_volume_muted* should return either True or the on state when the volume is muted. The *volume_mute* service should toggle the mute setting. Below is an example configuration. diff --git a/source/_components/media_player.yamaha.markdown b/source/_components/media_player.yamaha.markdown index e81241e09b9..3285d021d7b 100644 --- a/source/_components/media_player.yamaha.markdown +++ b/source/_components/media_player.yamaha.markdown @@ -41,7 +41,7 @@ A few notes: - Not specifying the host variable will result in automatically searching your network for Yamaha Receivers. It will add a media player device for each one. - For receivers that support more than one zone, Home Assistant will add one media player per zone supported by the player, named "$name Zone 2" and "$name Zone 3". -- In some cases, autodiscovery fails due to a known bug in the receiver's firmware. It is possible to manually specify the reveiver's IP address or via it's hostname (if it is discoverably by your DNS) then. +- In some cases, autodiscovery fails due to a known bug in the receiver's firmware. It is possible to manually specify the receiver's IP address or via it's hostname (if it is discoverably by your DNS) then. - Please note: If adding the IP address or hostname manually, you **must** enable network standby on your receiver, or else startup of Home Assistant will hang if you have your receiver switched off. - Currently, this component supports powering on/off, mute, volume control and source selection. Playback controls, for instance play and stop are available for sources that supports it. diff --git a/source/_components/mqtt.markdown b/source/_components/mqtt.markdown index 98906a9c8d8..5f39d180cc5 100644 --- a/source/_components/mqtt.markdown +++ b/source/_components/mqtt.markdown @@ -211,7 +211,7 @@ logger: ## {% linkable_title Testing your setup %} -The `mosquitto` broker package ships commandline tools to send and recieve MQTT messages. As an alternative have a look at [hbmqtt_pub](http://hbmqtt.readthedocs.org/en/latest/references/hbmqtt_pub.html) and [hbmqtt_sub](http://hbmqtt.readthedocs.org/en/latest/references/hbmqtt_sub.html) which are provied by HBMQTT. For sending test messages to a broker running on localhost check the example below: +The `mosquitto` broker package ships commandline tools to send and receive MQTT messages. As an alternative have a look at [hbmqtt_pub](http://hbmqtt.readthedocs.org/en/latest/references/hbmqtt_pub.html) and [hbmqtt_sub](http://hbmqtt.readthedocs.org/en/latest/references/hbmqtt_sub.html) which are provided by HBMQTT. For sending test messages to a broker running on localhost check the example below: ```bash $ mosquitto_pub -h 127.0.0.1 -t home-assistant/switch/1/on -m "Switch is ON" diff --git a/source/_components/mqtt_eventstream.markdown b/source/_components/mqtt_eventstream.markdown index 4844302ac2a..0280aef4941 100644 --- a/source/_components/mqtt_eventstream.markdown +++ b/source/_components/mqtt_eventstream.markdown @@ -25,6 +25,6 @@ mqtt_eventstream: Configuration variables: -- **publish_topic** (*Required*): Topic for pushlishing local events -- **subscribe_topic** (*Required*): Topic to recieve events from the remote server. +- **publish_topic** (*Required*): Topic for publishing local events +- **subscribe_topic** (*Required*): Topic to receive events from the remote server. diff --git a/source/_components/notify.group.markdown b/source/_components/notify.group.markdown index 01ef1d7dc8b..f46936ac059 100644 --- a/source/_components/notify.group.markdown +++ b/source/_components/notify.group.markdown @@ -33,4 +33,4 @@ Configuration variables: - **name** (*Required*): Setting the parameter `name` sets the name of the group. - **services** (*Required*): A list of all the services to be included in the group. - **service** (*Required*): The service part of an entity ID, i.e. if you use `notify.html5` normally, just put `html5`. - - **data** (*Optional*): A dictonary containing parameters to add to all notify payloads. This can be anything that is valid to use in a payload, such as `data`, `message`, `target`, `title`. + - **data** (*Optional*): A dictionary containing parameters to add to all notify payloads. This can be anything that is valid to use in a payload, such as `data`, `message`, `target`, `title`. diff --git a/source/_components/notify.pushetta.markdown b/source/_components/notify.pushetta.markdown index d458c0eb51f..6209d6bcd1b 100644 --- a/source/_components/notify.pushetta.markdown +++ b/source/_components/notify.pushetta.markdown @@ -33,7 +33,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 Pushetta. - **channel_name** (*Required*): The name of your channel. -- **send_test_msg** (*Optional*): Disable/enable the test message send on Home Asssitant's startup to test the API key and the existance of the channel. Default to `False`. +- **send_test_msg** (*Optional*): Disable/enable the test message send on Home Assistant's startup to test the API key and the existence of the channel. Default to `False`. It's easy to test your Pushetta setup outside of Home Assistant. Assuming you have a channel *home-assistant*, just fire a request and check the channel page in the dashboard for a new message. diff --git a/source/_components/notify.rest.markdown b/source/_components/notify.rest.markdown index 662ffa10e09..5a074dec02f 100644 --- a/source/_components/notify.rest.markdown +++ b/source/_components/notify.rest.markdown @@ -28,7 +28,7 @@ notify: 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`. -- **resource** (*Required*): The resource or endpoint that will recieve the value. +- **resource** (*Required*): The resource or endpoint that will receive the value. - **method** (*Optional*): The method of the request. Default is GET. - **message_param_name** (*Optional*): Parameter name for the message. Defaults to `message`. - **title_param_name** (*Optional*): Parameter name for the title. Defaults to none. diff --git a/source/_components/notify.slack.markdown b/source/_components/notify.slack.markdown index 040e070dcd9..d319a37438c 100644 --- a/source/_components/notify.slack.markdown +++ b/source/_components/notify.slack.markdown @@ -21,7 +21,7 @@ It is also possible to use Slack bots as users. Just create a new bot at https:/ Don't forget to invite the bot to the room where you want to get the notifications. -To enable the slack notification in your installation, add the following to your `configuration.yaml` file: +To enable the Slack notification in your installation, add the following to your `configuration.yaml` file: ```yaml # Example configuration.yaml entry @@ -35,10 +35,10 @@ notify: 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*): The slack API token to use for sending slack messages. +- **api_key** (*Required*): The Slack API token to use for sending Slack messages. - **default_channel** (*Required*): The default channel to post to if no channel is explicitly specified when sending the notification message. -- **username** (*Optional*): Setting username will allow homeassistant to post to slack using the username specified. By default not setting this will post to slack using the user account or botname that you generated the api_key as. -- **icon** (*Optional*): Use one of the slack emoji's as an Icon for the supplied username. Slack uses the standard emoji sets used [here](http://www.webpagefx.com/tools/emoji-cheat-sheet/). +- **username** (*Optional*): Setting username will allow Home Assistant to post to Slack using the username specified. By default not setting this will post to Slack using the user account or botname that you generated the api_key as. +- **icon** (*Optional*): Use one of the Slack emoji's as an Icon for the supplied username. Slack uses the standard emoji sets used [here](http://www.webpagefx.com/tools/emoji-cheat-sheet/). To use notifications, please see the [getting started with automation page](/getting-started/automation/). diff --git a/source/_components/notify.syslog.markdown b/source/_components/notify.syslog.markdown index 1e9e79b92ee..5e905e73e55 100644 --- a/source/_components/notify.syslog.markdown +++ b/source/_components/notify.syslog.markdown @@ -54,6 +54,6 @@ The table contains values to use in your `configuration.yaml` file. | local6 | | | | local7 | | | -For details about facility, option, and priority please consult the [wikpedia article](http://en.wikipedia.org/wiki/Syslog) and [RFC 3164](http://tools.ietf.org/html/rfc3164). +For details about facility, option, and priority please consult the [wikipedia article](http://en.wikipedia.org/wiki/Syslog) and [RFC 3164](http://tools.ietf.org/html/rfc3164). To use notifications, please see the [getting started with automation page](/getting-started/automation/). diff --git a/source/_components/openalpr.markdown b/source/_components/openalpr.markdown index ffb28649307..d78b931cb78 100644 --- a/source/_components/openalpr.markdown +++ b/source/_components/openalpr.markdown @@ -24,7 +24,7 @@ If you want use a video stream. You need setup the [ffmpeg](/components/ffmpeg) If you want process all data local you need the command line tool `alpr` in version > 2.3.1 -If you don't found binarys for you distribution you can compile from source. A documention how to build a openalpr is found [here](https://github.com/openalpr/openalpr/wiki). +If you don't find binaries for your distribution you can compile from source. Documention of how to build openalpr is found [here](https://github.com/openalpr/openalpr/wiki). On a debian system you can use this cmake command to build only the command line tool (which second part on linux build instruction - ubuntu 14.04+): ```bash @@ -63,7 +63,7 @@ Configuration variables: - **region** (*Required*): Country or region. List of Supported [value](https://github.com/openalpr/openalpr/tree/master/runtime_data/config). - **confidence** (*Optional*): Default 80. The minimum of confidence in percent to process with Home-Assistant. - **entities** (*Required*): A list of device to add in Home-Assistant. -- **name** (*Optional*): This parameter allows you to override the name of your openalpr entitie. +- **name** (*Optional*): This parameter allows you to override the name of your openalpr entity. - **interval** (*Optional*): Default 2. Time in seconds to poll a picture. If the interval is 0 It don't poll and it only process data with `openalpr.scan` service. - **render** (*Optional*): default is with ffmpeg. How is Home-Assistant to get a picture from. It support `ffmpeg` for video streams and `image` for a still image. - **input** (*Required*): The source from getting pictures. With ffmpeg it could by all supported input. Image only support a url. diff --git a/source/_components/pilight.markdown b/source/_components/pilight.markdown index 0dcf42344c5..8a2a10b1f5f 100644 --- a/source/_components/pilight.markdown +++ b/source/_components/pilight.markdown @@ -55,8 +55,8 @@ pilight: ## {% 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. -- Sending commands is simple when the protocol is known by pilight, but receiving commands can be rather difficult. It can happend that the code is not correctly recognized due to different timings in the sending hardware or the RF receiver. If this happens follow these steps: +- A list of tested RF transceiver hardware is available [here](https://wiki.pilight.org/doku.php/electronics). This might be useful before buying. +- Sending commands is simple when the protocol is known by pilight, but receiving commands can be rather difficult. It can happen that the code is not correctly recognized due to different timings in the sending hardware or the RF receiver. If this happens follow these steps: 1. [Install](https://www.pilight.org/get-started/installation/) pilight from source (do not worry that is very easy) and only activate the protocols you are expecting in the pop up menu. This reduces false positives. 2. Check the real timings of your device + RF receiver by running `pilight-debug`. Remember the `pulslen` parameter. diff --git a/source/_components/recorder.markdown b/source/_components/recorder.markdown index c9c32efe9c5..f35cb8e8c5c 100644 --- a/source/_components/recorder.markdown +++ b/source/_components/recorder.markdown @@ -48,7 +48,7 @@ recorder: ## {% linkable_title Installation notes %} -Not all Python bindings for the choosen database engine can be installed directly. This section contains additional details which should help you to get it working. +Not all Python bindings for the chosen database engine can be installed directly. This section contains additional details which should help you to get it working. ### {% linkable_title MYSQL %} diff --git a/source/_components/rfxtrx.markdown b/source/_components/rfxtrx.markdown index a14fb061124..64c0e1dee45 100644 --- a/source/_components/rfxtrx.markdown +++ b/source/_components/rfxtrx.markdown @@ -26,8 +26,8 @@ Configuration variables: - **device** (*Required*): The path to your device, e.g. `/dev/serial/by-id/usb-RFXCOM_RFXtrx433_A1Y0NJGR-if00-port0` - **debug** (*Optional*): If you want to receive debug output. -- **dummy** (*Optional*): Then you have need a connected drive to test your settings. Can be usefull for debugging and testing. +- **dummy** (*Optional*): Then you have need a connected drive to test your settings. Can be useful for debugging and testing. Supported protocols -Not all protocols as advertised are enabled on inital setup of your transceiver. Enabling all protocols is not recommmended either. Your 433.92 product not showing in the logs? Visit the RFXtrx website to [download RFXmgmr](http://www.rfxcom.com/epages/78165469.sf/nl_NL/?ObjectPath=/Shops/78165469/Categories/Downloads) and enable the required protocol. +Not all protocols as advertised are enabled on initial setup of your transceiver. Enabling all protocols is not recommended either. Your 433.92 product not showing in the logs? Visit the RFXtrx website to [download RFXmgmr](http://www.rfxcom.com/epages/78165469.sf/nl_NL/?ObjectPath=/Shops/78165469/Categories/Downloads) and enable the required protocol. diff --git a/source/_components/sensor.arwn.markdown b/source/_components/sensor.arwn.markdown index 1366d0204ae..80b4484adcb 100644 --- a/source/_components/sensor.arwn.markdown +++ b/source/_components/sensor.arwn.markdown @@ -21,4 +21,4 @@ sensor: platform: arwn ``` -Currently all temperature, barometer, and wind sensors will be displayed. Support for rain guage sensors will happen in the future. +Currently all temperature, barometer, and wind sensors will be displayed. Support for rain gauge sensors will happen in the future. diff --git a/source/_components/sensor.bbox.markdown b/source/_components/sensor.bbox.markdown index dfbb8b11aff..d88f988da87 100644 --- a/source/_components/sensor.bbox.markdown +++ b/source/_components/sensor.bbox.markdown @@ -37,5 +37,5 @@ Configuration variables: - **down_max_bandwidth**: Maximum bandwidth available for download. - **up_max_bandwidth**: Maximum bandwidth available for upload. - **current_down_bandwidth**: Instant measure of the current used bandwidth for download. - - **current_up_bandwidth**: Instant measure of the current used bandwidthfor upload. + - **current_up_bandwidth**: Instant measure of the current used bandwidth for upload. diff --git a/source/_components/sensor.deutsche_bahn.markdown b/source/_components/sensor.deutsche_bahn.markdown index 2d10cdcc97b..b9cb5359030 100644 --- a/source/_components/sensor.deutsche_bahn.markdown +++ b/source/_components/sensor.deutsche_bahn.markdown @@ -14,7 +14,7 @@ ha_release: 0.14 --- -The `deutsche_bahn` sensor will give you the departure time of the next train for the given connection. In case of a delay, the delay is also shown. Additional details are used to inform about eg. the type of the train, price, and if it is ontime. +The `deutsche_bahn` sensor will give you the departure time of the next train for the given connection. In case of a delay, the delay is also shown. Additional details are used to inform about eg. the type of the train, price, and if it is on time. To enable this sensor, add the following lines to your `configuration.yaml` file: @@ -31,7 +31,7 @@ Configuration variables: - **from** (*Required*): The name of the start station. - **to** (*Required*): The name of the end/destination station. -As already mentioned this sensor contains a lot of information to access those a [template senosr](/components/sensor.template/) can come handy. +This sensor stores a lot of attributes which can be accessed by other sensors eg. a [template sensor](/components/sensor.template/). ```yaml # Example configuration.yaml entry diff --git a/source/_components/sensor.emoncms.markdown b/source/_components/sensor.emoncms.markdown index ed60592a2c5..a55e51d0b4a 100644 --- a/source/_components/sensor.emoncms.markdown +++ b/source/_components/sensor.emoncms.markdown @@ -113,7 +113,7 @@ sensor: - 106 ``` -Display feeds from the same Emoncms instance with 2 groups of feeds, diffrent `scan_interval` and a diffrent `unit_of_measurement`. +Display feeds from the same Emoncms instance with 2 groups of feeds, different `scan_interval` and a different `unit_of_measurement`. ```yaml # Example configuration.yaml entry diff --git a/source/_components/sensor.gpsd.markdown b/source/_components/sensor.gpsd.markdown index 1209bd6fee5..60452346a49 100644 --- a/source/_components/sensor.gpsd.markdown +++ b/source/_components/sensor.gpsd.markdown @@ -45,7 +45,7 @@ To setup a GPSD sensor in your installation, add the following to your `configur ```yaml # Example configuration.yaml entry -senosr: +sensor: - platform: gpsd ``` diff --git a/source/_components/sensor.imap_email_content.markdown b/source/_components/sensor.imap_email_content.markdown index 5bea107ae22..cb639b436cf 100644 --- a/source/_components/sensor.imap_email_content.markdown +++ b/source/_components/sensor.imap_email_content.markdown @@ -37,7 +37,7 @@ Configuration variables: - **name** (*Optional*): Name of the IMAP sensor to use in the frontend. - **username** (*Required*): Username for the IMAP server. - **password** (*Required*): Password for the IMAP server. -- **senders** (*Required*): A list of sender email addresses that are allowed to report state via email. Only emails recieved from these addresses will be processed. +- **senders** (*Required*): A list of sender email addresses that are allowed to report state via email. Only emails received from these addresses will be processed. - **value_template** (*Optional*): If specified this template will be used to render the state of sensor. If a template is not supplied the raw message body will be used for the sensor value. The following attributes will be supplied to the template: * **from**: The from address of the email diff --git a/source/_components/sensor.knx.markdown b/source/_components/sensor.knx.markdown index aa1ee560262..a0403370a99 100644 --- a/source/_components/sensor.knx.markdown +++ b/source/_components/sensor.knx.markdown @@ -50,5 +50,5 @@ Configuration variables: - **address** (*Required*): The address of the sensor on the bus. - **name** (*Optional*): The name to use in the frontend. - **minimum** (*Optional*): Minimum sensor value who gets processed. Defaults to a hardcoded default values. -- **maxmimum** (*Optional*): Maxmimum sensor value who gets processed. Defaults to a hardcoded default. +- **maximum** (*Optional*): Maximum sensor value who gets processed. Defaults to a hardcoded default. diff --git a/source/_components/sensor.min_max.markdown b/source/_components/sensor.min_max.markdown index 50e29e66139..edf10552fd5 100644 --- a/source/_components/sensor.min_max.markdown +++ b/source/_components/sensor.min_max.markdown @@ -14,7 +14,7 @@ ha_release: "0.31" --- -The `min_max` sensor platform is consuming the state from other sensors and determine the minimum, maximum, and the mean of the collected states. The sensor will always show you the highest/lowest value which was received from your all monitored sensors. If you have spikes in your values, it's recommanded filter/equalize your values with a [statistics sensor](/components/sensor.statistics/) first. +The `min_max` sensor platform is consuming the state from other sensors and determine the minimum, maximum, and the mean of the collected states. The sensor will always show you the highest/lowest value which was received from your all monitored sensors. If you have spikes in your values, it's recommended filter/equalize your values with a [statistics sensor](/components/sensor.statistics/) first. It's an alternative to the [template sensor](/components/sensor.template/)'s `value_template:` to get the average of multiple sensors. diff --git a/source/_components/sensor.mqtt_room.markdown b/source/_components/sensor.mqtt_room.markdown index 56ac59cb4f2..5d7da7a5d68 100644 --- a/source/_components/sensor.mqtt_room.markdown +++ b/source/_components/sensor.mqtt_room.markdown @@ -34,7 +34,7 @@ Configuration variables: - **device_id** (*Required*): The device id to track for this sensor. - **name** (*Optional*): The name of the sensor. - **state_topic** (*Optional*): The topic that contains all subtopics for the rooms. -- **timeout** (*Optional*): The time in seconds after which a room presence state is considered old. An example: device1 is reported at scanner1 with a distance of 1. No further updates are sent from scanner1. After 5 secoonds scanner2 reports device with a distance of 2. The old location info is discarded in favor of the new scanner2 information as the timeout has passed. +- **timeout** (*Optional*): The time in seconds after which a room presence state is considered old. An example: device1 is reported at scanner1 with a distance of 1. No further updates are sent from scanner1. After 5 seconds scanner2 reports device with a distance of 2. The old location info is discarded in favor of the new scanner2 information as the timeout has passed. - **away_timeout** (*Optional*): The time in seconds after which the state should be set to `away` if there were no updates. `0` disables the check and is the default. Example JSON that should be published to the room topics: diff --git a/source/_components/sensor.pilight.markdown b/source/_components/sensor.pilight.markdown index 517b356179c..0956ba70afe 100644 --- a/source/_components/sensor.pilight.markdown +++ b/source/_components/sensor.pilight.markdown @@ -14,7 +14,7 @@ ha_iot_class: depends --- -This `pilight` sensor platform for 433 MHz devices uses a value in the message payload as the sensor value. Unique identifiers (e.g. _uuid_) can be set to distinguish between multile pilight devices. To use a pilight sensor the pilight home assistant hub has to be set up. +This `pilight` sensor platform for 433 MHz devices uses a value in the message payload as the sensor value. Unique identifiers (e.g. _uuid_) can be set to distinguish between multiple pilight devices. To use a pilight sensor the pilight home assistant hub has to be set up. To use your sensor via pilight, make sure it is [supported](https://wiki.pilight.org/doku.php/protocols) and add the following to your `configuration.yaml` file: diff --git a/source/_components/sensor.rest.markdown b/source/_components/sensor.rest.markdown index 009fc9c38ac..a777e68800c 100644 --- a/source/_components/sensor.rest.markdown +++ b/source/_components/sensor.rest.markdown @@ -137,7 +137,7 @@ 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 is recieved from GitHub. +This sample is very similar to the [`updater`](/components/updater/) component but the information is received from GitHub. ```yaml sensor: diff --git a/source/_components/sensor.sabnzbd.markdown b/source/_components/sensor.sabnzbd.markdown index 81f506d62db..f769a862920 100644 --- a/source/_components/sensor.sabnzbd.markdown +++ b/source/_components/sensor.sabnzbd.markdown @@ -36,7 +36,7 @@ sensor: Configuration variables: - **host** (*Required*): The host where your SABnzbd instance is running, eg. 192.168.1.32 -- **port** (*Optional*): The port to use whith SABnzbd instance. Defaults to `8080`. +- **port** (*Optional*): The port to use with SABnzbd instance. Defaults to `8080`. - **api_key** (*Required*): Name that will be used in the frontend for the pin. - **name** (*Optional*): The name to use when displaying this SABnzbd instance. - **ssl** (*Optional*): Use `https` instead of `http` to connect. Defaults to False. @@ -46,7 +46,7 @@ Configuration variables: - **queue_size**: Size of the queue - **queue_remaining**: Remaining elements in the queue - **disk_size**: Disk size of the storage location - - **disk_free**: Free disk space at the sotrage location + - **disk_free**: Free disk space at the storage location Note that this will create sensors under the name 'sab' and NOT 'sabnzbd' as follows: diff --git a/source/_components/sensor.statistics.markdown b/source/_components/sensor.statistics.markdown index eea0405e190..6aed2af6b6b 100644 --- a/source/_components/sensor.statistics.markdown +++ b/source/_components/sensor.statistics.markdown @@ -16,7 +16,7 @@ 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. -It can take time till the sensor starts to work because a couple of atrributes need more than one value to do the calculation. +It can take time till the sensor starts to work because a couple of attributes need more than one value to do the calculation. To enable the statistics sensor, add the following lines to your `configuration.yaml`: diff --git a/source/_components/sensor.ted5000.markdown b/source/_components/sensor.ted5000.markdown index 6281208e0c4..54c2707abb8 100644 --- a/source/_components/sensor.ted5000.markdown +++ b/source/_components/sensor.ted5000.markdown @@ -33,7 +33,7 @@ Configuration variables: - **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: +For each plugged MTU, using an index starting at 1, the platform creates 2 sensors: ```yaml sensor._mtu_power sensor._mtu_voltage diff --git a/source/_components/sensor.template.markdown b/source/_components/sensor.template.markdown index 06a28e344cd..20a4c6f44bf 100644 --- a/source/_components/sensor.template.markdown +++ b/source/_components/sensor.template.markdown @@ -118,7 +118,7 @@ sensor: Please note the blank line to close the multi-line template.

-### {% linkable_title Change the unit of measurment %} +### {% linkable_title Change the unit of measurement %} With a template sensor it's easy to convert given values into others if the unit of measurement don't fit your needs. diff --git a/source/_components/sensor.thinkingcleaner.markdown b/source/_components/sensor.thinkingcleaner.markdown index 6c75256a721..2b1f54b03b9 100644 --- a/source/_components/sensor.thinkingcleaner.markdown +++ b/source/_components/sensor.thinkingcleaner.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Thinking Cleaner sensor" -description: "Instructions how to integrate a ThinkingCleaner senosrs within Home Assistant." +description: "Instructions how to integrate a ThinkingCleaner sensor within Home Assistant." date: 2016-04-10 17:24 sidebar: true comments: false diff --git a/source/_components/sensor.yweather.markdown b/source/_components/sensor.yweather.markdown index aaf6fd83bc8..e08539154e7 100644 --- a/source/_components/sensor.yweather.markdown +++ b/source/_components/sensor.yweather.markdown @@ -46,7 +46,7 @@ Configuration variables: - **name** (*Optional*): The name of the sensor. To easily recognize each sensor when adding more than one Yahoo weather sensor, it is recommended to use the name option. Defaults to `Yweather`. - **monitored_conditions** array (*Required*): Conditions to display in the frontend. - **weather**: A human-readable text summary with picture from yahoo. - - **weather_current**: A human-readable text summary with picture from yahoo from current conditon. + - **weather_current**: A human-readable text summary with picture from yahoo from current condition. - **temperature**: The current temperature. - **temp_min**: The minimal temperature of this day. - **temp_max**: The maximum temperature of this day. diff --git a/source/_components/simple_alarm.markdown b/source/_components/simple_alarm.markdown index 8a7667ba745..1a3002dc68b 100644 --- a/source/_components/simple_alarm.markdown +++ b/source/_components/simple_alarm.markdown @@ -12,7 +12,7 @@ ha_category: Alarm --- -The component `simple_alarm` is capable of detecting intruders. It does so by checking if lights are being turned on while there is no one at home. When this happens it will turn the lights red, flash them for 30 seconds and send a message via [the notifiy component]({{site_root}}/components/notify/). It will also flash a specific light when a known person comes home. +The component `simple_alarm` is capable of detecting intruders. It does so by checking if lights are being turned on while there is no one at home. When this happens it will turn the lights red, flash them for 30 seconds and send a message via [the notify component]({{site_root}}/components/notify/). It will also flash a specific light when a known person comes home. This component depends on the components [device_tracker]({{site_root}}/components/device_tracker/) and [light]({{site_root}}/components/light/) being setup. diff --git a/source/_components/splunk.markdown b/source/_components/splunk.markdown index 34158b300c7..8d0d4b6cf81 100644 --- a/source/_components/splunk.markdown +++ b/source/_components/splunk.markdown @@ -12,7 +12,7 @@ ha_category: "History" ha_release: 0.13 --- -The `splunk` component makes it possible to log all state changes to an external [Splunk](http://splunk.com/) database using Splunk's HTTP Event Collector feature. You can either use this alone, or with the HomeAssistant for Splunk [app](https://github.com/miniconfig/splunk-homeassistant). Since the HEC feature is new to Splunk, you will need to use at least version 6.3. +The `splunk` component makes it possible to log all state changes to an external [Splunk](http://splunk.com/) database using Splunk's HTTP Event Collector feature. You can either use this alone, or with the Home Assistant for Splunk [app](https://github.com/miniconfig/splunk-homeassistant). Since the HEC feature is new to Splunk, you will need to use at least version 6.3. To use the `splunk` component in your installation, add the following to your `configuration.yaml` file: diff --git a/source/_components/sun.markdown b/source/_components/sun.markdown index 8d1283989d7..1e2924c2160 100644 --- a/source/_components/sun.markdown +++ b/source/_components/sun.markdown @@ -22,7 +22,7 @@ sun: Configuration variables: -- **elevation** (*Optional*): The (physical) elevation of your location, in metres above sea level. If ommitted will be retrieved from Google Maps. +- **elevation** (*Optional*): The (physical) elevation of your location, in metres above sea level. If omitted will be retrieved from Google Maps.

diff --git a/source/_components/switch.command_line.markdown b/source/_components/switch.command_line.markdown index f0b41958f08..f62e5bc67ca 100644 --- a/source/_components/switch.command_line.markdown +++ b/source/_components/switch.command_line.markdown @@ -48,7 +48,7 @@ In this section you find some real life examples of how to use this switch. ### {% linkable_title aREST device %} -The example below is doing the same as the [aREST switch](/components/switch.arest/). The commandline tool [`curl`](http://curl.haxx.se/) is used to toogle a pin which is controllable through REST. +The example below is doing the same as the [aREST switch](/components/switch.arest/). The commandline tool [`curl`](http://curl.haxx.se/) is used to toggle a pin which is controllable through REST. ```yaml # Example configuration.yaml entry diff --git a/source/_components/switch.dlink.markdown b/source/_components/switch.dlink.markdown index 8e52b91a2a0..708ba90e39c 100644 --- a/source/_components/switch.dlink.markdown +++ b/source/_components/switch.dlink.markdown @@ -37,6 +37,6 @@ Configuration variables: - **host** (*Required*): The IP address of your D-Link plug, eg. http://192.168.1.32 - **name** (*Optional*): The name to use when displaying this switch. - **username** (*Required*): The username for your plug. Defaults to `admin`. -- **password** (*Required*): The password for your plug. Default password is the `PIN` inlcuded on the configuration card. +- **password** (*Required*): The password for your plug. Default password is the `PIN` included on the configuration card. - **use_legacy_protocol** (*Optional*): Enable limited support for legacy firmware protocols (Tested with v1.24). diff --git a/source/_components/switch.hikvision.markdown b/source/_components/switch.hikvision.markdown index 19342fed4d0..85249cd681e 100644 --- a/source/_components/switch.hikvision.markdown +++ b/source/_components/switch.hikvision.markdown @@ -31,7 +31,7 @@ switch: 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`. +- **port** (*Optional*): The port to connect 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`. diff --git a/source/_components/switch.knx.markdown b/source/_components/switch.knx.markdown index 4452028d5e1..ea0789f6fd8 100644 --- a/source/_components/switch.knx.markdown +++ b/source/_components/switch.knx.markdown @@ -28,6 +28,6 @@ switch: - **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 -- **state_address** (*Optional*): Some KNX devices can change their state internally without any messages on the KXN bus, e.g. if you configure a timer on a channel. The optional `state_address` can be used to inform Home Assistant about these state changes. If a KNX message is seen on the bus addressed to the given state address, this wil overwrite the state of the switch object. -For switching actuators that are only controlled by a single group address and can't change their state internally, you don't have to configrue the state address. +- **state_address** (*Optional*): Some KNX devices can change their state internally without any messages on the KXN bus, e.g. if you configure a timer on a channel. The optional `state_address` can be used to inform Home Assistant about these state changes. If a KNX message is seen on the bus addressed to the given state address, this will overwrite the state of the switch object. +For switching actuators that are only controlled by a single group address and can't change their state internally, you don't have to configure the state address. diff --git a/source/_components/switch.pilight.markdown b/source/_components/switch.pilight.markdown index db1e8bd5845..f3f613eaa9c 100644 --- a/source/_components/switch.pilight.markdown +++ b/source/_components/switch.pilight.markdown @@ -55,7 +55,7 @@ Variables for the different codes: - **'off'** (*Optional*): `1` or `0` - **'on'** (*Optional*): `1` or `0` -For possible code entries look at the [pilight API](https://www.pilight.org/development/api/). All commands allowed by [pilight-send](https://wiki.pilight.org/doku.php/psend) can be used. Which means that if for a certain protocol there are different parameters used, you should be able to replace the variables above by the proper ones required by the specific protocol. When using the `elro_800_switch` or `mumbi` protocol for example, you will have to replace the variable `unit` with `unitcode` or there will be errors occuring. +For possible code entries look at the [pilight API](https://www.pilight.org/development/api/). All commands allowed by [pilight-send](https://wiki.pilight.org/doku.php/psend) can be used. Which means that if for a certain protocol there are different parameters used, you should be able to replace the variables above by the proper ones required by the specific protocol. When using the `elro_800_switch` or `mumbi` protocol for example, you will have to replace the variable `unit` with `unitcode` or there will be errors occurring. ## {% linkable_title Examples %} diff --git a/source/_components/switch.pulseaudio_loopback.markdown b/source/_components/switch.pulseaudio_loopback.markdown index 116c5d4fbd0..138dd949bcd 100644 --- a/source/_components/switch.pulseaudio_loopback.markdown +++ b/source/_components/switch.pulseaudio_loopback.markdown @@ -32,7 +32,7 @@ switch: Configuration variables: -- **sink_name** (*Required*): The name of the Pulseaudio sink that will recieve the audio. +- **sink_name** (*Required*): The name of the Pulseaudio sink that will receive the audio. - **source_name** (*Required*): The name of the Pulseaudio source that will supply the audio. - **name** (*Optional*): Name of the switch. - **host** (*Optional*): The IP address or host name of the PulseAudio server. If not specified, 127.0.0.1 is used. diff --git a/source/_components/switch.rfxtrx.markdown b/source/_components/switch.rfxtrx.markdown index 4ff80530843..7a18283e0aa 100644 --- a/source/_components/switch.rfxtrx.markdown +++ b/source/_components/switch.rfxtrx.markdown @@ -52,7 +52,7 @@ Configuration variables: Generate codes: -If you need to generate codes for switches you can use a template (usefull for example COCO switches). +If you need to generate codes for switches you can use a template (useful for example COCO switches). - Go to home-assistant-IP:8123/dev-template - Use this code to generate a code: @@ -64,7 +64,7 @@ If you need to generate codes for switches you can use a template (usefull for e - Use this code to add a new switch in your configuration.yaml - Launch your homeassistant and go the website. - Enable learning mode on your switch (i.e. push learn button or plug it in a wall socket) -- Toggle your new switch in the homeassisant interface +- Toggle your new switch in the Home Assistant interface ## {% linkable_title Examples %} diff --git a/source/_components/updater.markdown b/source/_components/updater.markdown index 50df7c6201b..b3797d9f5b5 100644 --- a/source/_components/updater.markdown +++ b/source/_components/updater.markdown @@ -13,7 +13,7 @@ ha_category: Other The `updater` component will check daily for new releases. It will show a badge in the frontend if a new version was found. -The updater component will also collect basic information about Home Assistant and its environment. The information includes the current Home Assistant version, the timezone, Python version and operating system infomation. No identifiable information (i.e. IP address, GPS coordinates, etc.) will ever be collected. If you are concerned about your privacy, you are welcome to scrutinize the Python [source code](https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/components/updater.py#L91). +The updater component will also collect basic information about Home Assistant and its environment. The information includes the current Home Assistant version, the timezone, Python version and operating system information. No identifiable information (i.e. IP address, GPS coordinates, etc.) will ever be collected. If you are concerned about your privacy, you are welcome to scrutinize the Python [source code](https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/components/updater.py#L91). To integrate this into Home Assistant, add the following section to your `configuration.yaml` file: diff --git a/source/_components/wink.markdown b/source/_components/wink.markdown index e8e43b30bfb..71a6e0c3ab0 100644 --- a/source/_components/wink.markdown +++ b/source/_components/wink.markdown @@ -44,7 +44,7 @@ wink: 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. +The following can also be provided to allow access to the Wink Relay sensors. This value could change at any time. ```yaml wink: @@ -54,10 +54,10 @@ wink: Configuration variables: - **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. +- **email** (*Required if access token isn't provided*): Your Wink login email. +- **password** (*Required if access token isn't provided*): Your Wink login password. +- **client_id** (*Required if access token isn't provided*): Your provided Wink client_id. +- **client_secret** (*Required if access token isn't provided*): 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. diff --git a/source/getting-started/z-wave.markdown b/source/getting-started/z-wave.markdown index 277f9078eac..8ed1676e145 100644 --- a/source/getting-started/z-wave.markdown +++ b/source/getting-started/z-wave.markdown @@ -222,7 +222,7 @@ The `zwave` component exposes multiple services to help maintain the network. | ------- | ----------- | | add_node | Put the Z-Wave controller in inclusion mode. Allows one to add a new device to the Z-Wave network.| | add_node_secure | Put the Z-Wave controller in secure inclusion mode. Allows one to add a new device with secure communications to the Z-Wave network. | -| change_association | Add or remove an association in th Z-Wave network +| change_association | Add or remove an association in the Z-Wave 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. Basically 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.| From 2fc0b0213631787a0672b6467b90ad408eaa6428 Mon Sep 17 00:00:00 2001 From: dpressle Date: Wed, 23 Nov 2016 15:26:13 +0200 Subject: [PATCH 29/42] MySensor: Add description on current temperature option (#1484) * Add description on current temperature option for MySensor. --- source/_components/climate.mysensors.markdown | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/_components/climate.mysensors.markdown b/source/_components/climate.mysensors.markdown index 1c1ce8cea03..37195f84a23 100644 --- a/source/_components/climate.mysensors.markdown +++ b/source/_components/climate.mysensors.markdown @@ -21,9 +21,9 @@ The following actuator types are supported: S_TYPE | V_TYPE -------|----------------------------------------------------------------------------- -S_HVAC | V_HVAC_FLOW_STATE*, V_HVAC_SETPOINT_HEAT, V_HVAC_SETPOINT_COOL, V_HVAC_SPEED +S_HVAC | V_HVAC_FLOW_STATE*, V_HVAC_SETPOINT_HEAT, V_HVAC_SETPOINT_COOL, V_HVAC_SPEED, V_TEMP -V_HVAC_FLOW_STATE is mapped to the state of the Climate component in HA as follows: +V_HVAC_FLOW_STATE is mapped to the state of the Climate component in Home Assistant as follows: Home Assistant State | MySensors State ---------------------|---------------- @@ -38,6 +38,8 @@ Set the target temperature using V_HVAC_SETPOINT_HEAT in Heat mode, and V_HVAC_S You can use V_HVAC_SPEED to control the Speed setting of the Fan in the HVAC. +You can use V_TEMP to send the current temperature from the node to Home Assistant. + For more information, visit the [serial api] of MySensors. ### {% linkable_title Example sketch %} From 5ecf4e6909ec3af50d16477413c516477c7bd67b Mon Sep 17 00:00:00 2001 From: Fredrik Lindqvist Date: Wed, 23 Nov 2016 15:56:45 +0100 Subject: [PATCH 30/42] Implement changes from #1394 Implement changes from #1394 because of merge conflict. All credit goes to @ Marcel030nl --- source/_components/switch.rfxtrx.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/switch.rfxtrx.markdown b/source/_components/switch.rfxtrx.markdown index 7a18283e0aa..d6beee620e3 100644 --- a/source/_components/switch.rfxtrx.markdown +++ b/source/_components/switch.rfxtrx.markdown @@ -86,7 +86,7 @@ switch: fire_event: True ``` -Doorbell configuration: +Light hallway if doorbell is pressed (when is sun down): ```yaml # Example configuration.yaml entry @@ -120,7 +120,7 @@ automation: entity_id: switch.hall ``` -Use remote to enable scene: +Use remote to enable scene (using event_data): ```yaml # Example configuration.yaml entry From 02f60a507df2409fd19a1346d0205cd953362832 Mon Sep 17 00:00:00 2001 From: Sebastiaan Date: Thu, 24 Nov 2016 14:16:20 +0100 Subject: [PATCH 31/42] Update tls_self_signed_certificate.markdown (#1491) Fixed link to https://home-assistant.io/blog/2015/12/13/setup-encryption-using-lets-encrypt/ --- source/_cookbook/tls_self_signed_certificate.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_cookbook/tls_self_signed_certificate.markdown b/source/_cookbook/tls_self_signed_certificate.markdown index cd2748a702d..61ced56bf55 100644 --- a/source/_cookbook/tls_self_signed_certificate.markdown +++ b/source/_cookbook/tls_self_signed_certificate.markdown @@ -10,7 +10,7 @@ footer: true ha_category: Infrastructure --- -If your Home Assistant instance is only accessible from your local network you can still protect the communication between your browsers and the frontend with SSL/TLS. [Let's encrypt](blog/2015/12/13/setup-encryption-using-lets-encrypt/) will only work if you have a DNS entry and remote access is allowed. The solution is to use a self-signed certificate. As you most likely don't have a certification authority (CA) your browser will conplain about the security. If you have a CA then this will not be an issue. +If your Home Assistant instance is only accessible from your local network you can still protect the communication between your browsers and the frontend with SSL/TLS. [Let's encrypt]({{site_root}}/blog/2015/12/13/setup-encryption-using-lets-encrypt/) will only work if you have a DNS entry and remote access is allowed. The solution is to use a self-signed certificate. As you most likely don't have a certification authority (CA) your browser will conplain about the security. If you have a CA then this will not be an issue. To create locally a certificate you need the [OpenSSL](https://www.openssl.org/) command-line tool. From 10eff18e9b219ea37a06b4864d449b5bdc582d96 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 24 Nov 2016 15:54:03 -0800 Subject: [PATCH 32/42] Release 0.33.4 --- _config.yml | 2 +- ...016-11-20-calendar--wink-thermostats--cisco-ios.markdown | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/_config.yml b/_config.yml index d3f1a915f2e..ed7c43ba163 100644 --- a/_config.yml +++ b/_config.yml @@ -130,5 +130,5 @@ social: current_major_version: 0 current_minor_version: 33 -current_patch_version: 3 +current_patch_version: 4 date_released: 2016-11-23 diff --git a/source/_posts/2016-11-20-calendar--wink-thermostats--cisco-ios.markdown b/source/_posts/2016-11-20-calendar--wink-thermostats--cisco-ios.markdown index f183a01c2b9..9c04a9d4776 100644 --- a/source/_posts/2016-11-20-calendar--wink-thermostats--cisco-ios.markdown +++ b/source/_posts/2016-11-20-calendar--wink-thermostats--cisco-ios.markdown @@ -58,6 +58,12 @@ But a new release wouldn't be awesome if it didn't had some new goodies and this - Bump Netdisco to 0.7.7 (fixes discovery on Synology) - Fix discovery race condition (most obvious in Wemo) ([@balloob]) +### {% linkable_title Release 0.33.4 - November 24 %} + + - Set executor pool size to 10 (as intended) ([@pvizeli]) + +This should fix occasional performance problems that some people have reported. + ### {% linkable_title Breaking changes %} - We have included a fix that impacts how we generate entity ids. This only impacts devices with accented characters. Instead of being stripped out, they are now replaced with the non-accented version. So now `Tèst Mörê` will become `test_more` instead of `tst_mr`. From 388198465de73ddb743bf03b83ec2a424f04fdfe Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 25 Nov 2016 17:03:48 +0100 Subject: [PATCH 33/42] Update configuration sample --- source/_components/sensor.speedtest.markdown | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/_components/sensor.speedtest.markdown b/source/_components/sensor.speedtest.markdown index 10d9d02cb2a..e7df4acacd5 100644 --- a/source/_components/sensor.speedtest.markdown +++ b/source/_components/sensor.speedtest.markdown @@ -24,17 +24,17 @@ Once per hour, on the hour (default): ```yaml # Example configuration.yaml entry sensor: - platform: speedtest - monitored_conditions: - - ping - - download - - upload + - platform: speedtest + monitored_conditions: + - ping + - download + - upload ``` Configuration variables: - **monitored_conditions** array (*Required*): Sensors to display in the frontend. - - **ping**: Reaction time in ms of your connection, (how fast you get a response after you've sent out a request). + - **ping**: Reaction time in ms of your connection (how fast you get a response after you've sent out a request). - **download**: Download speed in Mbps. - **upload**: Upload speed in Mbps. - **server_id** (*Optional*): Specify the speedtest server to perform test against. From 9b0fd8492ffdea579b5961ba7ee912a34d67ec34 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Fri, 25 Nov 2016 18:09:53 +0100 Subject: [PATCH 34/42] Remove whitespace --- source/_components/sensor.speedtest.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.speedtest.markdown b/source/_components/sensor.speedtest.markdown index e7df4acacd5..4bba84884fa 100644 --- a/source/_components/sensor.speedtest.markdown +++ b/source/_components/sensor.speedtest.markdown @@ -42,7 +42,7 @@ Configuration variables: - **hour** (*Optional*): Specify the hour(s) of the day to schedule the speedtest. Use a list for multiple entries. Default is None. - **day** (*Optional*): Specify the day(s) of the month to schedule the speedtest. Use a list for multiple entries. Default is None. -This component uses [speedtest-cli](https://github.com/sivel/speedtest-cli) to gather network performance data from Speedtest.net. Please be aware of the potential [inconsistencies](https://github.com/sivel/speedtest-cli#inconsistency) that this component may display. +This component uses [speedtest-cli](https://github.com/sivel/speedtest-cli) to gather network performance data from Speedtest.net. Please be aware of the potential [inconsistencies](https://github.com/sivel/speedtest-cli#inconsistency) that this component may display. When Home Assistant first starts up, the values of the 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. From d3e5b9865c9c4f380657b87bee5dd0d337ea1879 Mon Sep 17 00:00:00 2001 From: Matt N Date: Sat, 26 Nov 2016 09:00:53 -0800 Subject: [PATCH 35/42] jupyter_notebooks_introduction typo: emtpy => empty (#1499) --- source/_cookbook/jupyter_notebooks_introduction.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_cookbook/jupyter_notebooks_introduction.markdown b/source/_cookbook/jupyter_notebooks_introduction.markdown index 2a3d714aa92..d4ed78b50c4 100644 --- a/source/_cookbook/jupyter_notebooks_introduction.markdown +++ b/source/_cookbook/jupyter_notebooks_introduction.markdown @@ -41,7 +41,7 @@ Open [http://localhost:8888/](http://localhost:8888/) in your browser. Press "Ne

-You will get an emtpy notebook with one cell. Cells can contain code or text. To get the output of a cell you need to execute them with "Cell" -> "Run Cells" from the menu or by pressing the icon. +You will get an empty notebook with one cell. Cells can contain code or text. To get the output of a cell you need to execute them with "Cell" -> "Run Cells" from the menu or by pressing the icon.

From 39dd48d1ce2091810d8e21d66e17bc6d4445cf1d Mon Sep 17 00:00:00 2001 From: Matt N Date: Sat, 26 Nov 2016 09:01:43 -0800 Subject: [PATCH 36/42] Change condition example to use the lowercase 'on' state (#1500) HA normally uses a lowercase 'on' state: https://github.com/home-assistant/home-assistant/blob/32ffd006facea907b2013da19336cf81bd16e6d3/homeassistant/const.py#L160 --- source/getting-started/automation-condition.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/getting-started/automation-condition.markdown b/source/getting-started/automation-condition.markdown index c242cc0ce73..5105ff7e94f 100644 --- a/source/getting-started/automation-condition.markdown +++ b/source/getting-started/automation-condition.markdown @@ -11,7 +11,7 @@ footer: true Conditions are an optional part of an automation rule and can be used to prevent an action from happening when triggered. Conditions look very similar to triggers but are very different. A trigger will look at events happening in the system while a condition only looks at how the system looks right now. A trigger can observe that a switch is being turned on. A condition can only see if a switch is currently on or off. -The available conditions for an automation are the same as for the script syntax. So see that page for a [full list of available conditions][script-condition]. +The available conditions for an automation are the same as for the script syntax so see that page for a [full list of available conditions][script-condition]. Example of using condition: @@ -20,7 +20,7 @@ Example of using condition: trigger: platform: state entity_id: sensor.mini_despacho - to: 'ON' + to: 'on' condition: condition: or conditions: From bf204314b133aa50ad1932c10015a7eb9b66bc2a Mon Sep 17 00:00:00 2001 From: Matt N Date: Sat, 26 Nov 2016 09:03:22 -0800 Subject: [PATCH 37/42] Delete removed simple_alarm component docs (#1498) This was superseded by /source/_cookbook/python_component_simple_alarm.markdown --- source/_components/simple_alarm.markdown | 32 ------------------------ 1 file changed, 32 deletions(-) delete mode 100644 source/_components/simple_alarm.markdown diff --git a/source/_components/simple_alarm.markdown b/source/_components/simple_alarm.markdown deleted file mode 100644 index 1a3002dc68b..00000000000 --- a/source/_components/simple_alarm.markdown +++ /dev/null @@ -1,32 +0,0 @@ ---- -layout: page -title: "Intruder Alerts" -description: "Instructions how to receive intruder alerts from Home Assistant." -date: 2015-01-20 22:36 -sidebar: true -comments: false -sharing: true -footer: true -logo: home-assistant.png -ha_category: Alarm ---- - - -The component `simple_alarm` is capable of detecting intruders. It does so by checking if lights are being turned on while there is no one at home. When this happens it will turn the lights red, flash them for 30 seconds and send a message via [the notify component]({{site_root}}/components/notify/). It will also flash a specific light when a known person comes home. - -This component depends on the components [device_tracker]({{site_root}}/components/device_tracker/) and [light]({{site_root}}/components/light/) being setup. - -To set it up, add the following lines to your `configuration.yaml` file: - -```yaml -simple_alarm: -# Example configuration.yaml entry - known_light: light.Bowl - unknown_light: group.living_room -``` - -Configuration variables: - -- **known_light** (*Optional*): Which light/light group has to flash when a known device comes home. -- **unknown_light** (*Optional*): Which light/light group has to flash red when light turns on while no one home. - From adcdc33446297bfc0e011a7033461d18df28f364 Mon Sep 17 00:00:00 2001 From: amahlaka Date: Sun, 27 Nov 2016 12:10:49 +0200 Subject: [PATCH 38/42] Added note on Android support (#1505) --- source/_components/ifttt.manything.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/ifttt.manything.markdown b/source/_components/ifttt.manything.markdown index c5535ef28c0..54811a4e6a9 100644 --- a/source/_components/ifttt.manything.markdown +++ b/source/_components/ifttt.manything.markdown @@ -11,7 +11,7 @@ logo: manything.png ha_category: Camera --- -[Manything](https://manything.com) is a smart app that turns your iPhone, iPod, or iPad into a wifi camera for monitoring your home, your pets, anything! Comes with live streaming, motion activated alerts, cloud video recording, and more. +[Manything](https://manything.com) is a smart app that turns your Android device, iPhone, iPod, or iPad into a wifi camera for monitoring your home, your pets, anything! Comes with live streaming, motion activated alerts, cloud video recording, and more. To get manything support, HA will use IFTTT's [Maker Channel](https://ifttt.com/maker) and the [ManyThing Channel](https://ifttt.com/manything). Use the [IFTTT Setup instructions](/components/ifttt/) to activate the IFTTT Platform. From 97d19293db67d9ae2aa3d561c3e430a4dfa704c5 Mon Sep 17 00:00:00 2001 From: Fredrik Lindqvist Date: Sun, 27 Nov 2016 14:04:52 +0100 Subject: [PATCH 39/42] Removed extra an space. (#1507) Extra space was added in with update of text. --- source/_components/ifttt.manything.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/ifttt.manything.markdown b/source/_components/ifttt.manything.markdown index 54811a4e6a9..eadb8d9d29b 100644 --- a/source/_components/ifttt.manything.markdown +++ b/source/_components/ifttt.manything.markdown @@ -11,7 +11,7 @@ logo: manything.png ha_category: Camera --- -[Manything](https://manything.com) is a smart app that turns your Android device, iPhone, iPod, or iPad into a wifi camera for monitoring your home, your pets, anything! Comes with live streaming, motion activated alerts, cloud video recording, and more. +[Manything](https://manything.com) is a smart app that turns your Android device, iPhone, iPod, or iPad into a wifi camera for monitoring your home, your pets, anything! Comes with live streaming, motion activated alerts, cloud video recording, and more. To get manything support, HA will use IFTTT's [Maker Channel](https://ifttt.com/maker) and the [ManyThing Channel](https://ifttt.com/manything). Use the [IFTTT Setup instructions](/components/ifttt/) to activate the IFTTT Platform. From 6169e1f9ae94e2b8e9acaf70f5128879aa44b6a7 Mon Sep 17 00:00:00 2001 From: fredespi Date: Sun, 27 Nov 2016 18:49:38 +0100 Subject: [PATCH 40/42] Update sensor.template.markdown (#1509) --- source/_components/sensor.template.markdown | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/_components/sensor.template.markdown b/source/_components/sensor.template.markdown index 20a4c6f44bf..f5aad22eb5e 100644 --- a/source/_components/sensor.template.markdown +++ b/source/_components/sensor.template.markdown @@ -13,7 +13,7 @@ ha_iot_class: "Local Push" logo: home-assistant.png --- -The `template` platform supports sensors which breaks out `state_attributes` from other entities. +The `template` platform supports sensors which break out `state_attributes` from other entities. To enable Template sensors in your installation, add the following to your `configuration.yaml` file: @@ -81,7 +81,7 @@ sensor: friendly_name: 'Glances' ``` -By comparing the details published on the [template](/topics/templating/) page the same can be archived with a different approach: +By comparing the details published on the [template](/topics/templating/) page the same can be achieved with a different approach: ```yaml value_template: {% raw %}"{%if states.sensor.ENTITY_ID.state == 'on' %}running{%elif states.switch.ENTITY_ID.state == 'off' %}not running{% endif %}"{% endraw %} @@ -91,7 +91,7 @@ The [Binary template sensor](/components/binary_sensor.template/) is the one in ### {% linkable_title Multiline example with an if test %} -This example shows a multiple line template with and if test. It looks at a sensing switch and shows on/off in the frontend. +This example shows a multiple line template with an if test. It looks at a sensing switch and shows on/off in the frontend. ```yaml sensor: @@ -120,7 +120,7 @@ Please note the blank line to close the multi-line template. ### {% linkable_title Change the unit of measurement %} -With a template sensor it's easy to convert given values into others if the unit of measurement don't fit your needs. +With a template sensor it's easy to convert given values into others if the unit of measurement doesn't fit your needs. ```yaml sensor: From 1195a690c5b457a1defbfcd953dd7aeecda7dbf0 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 27 Nov 2016 21:18:27 -0800 Subject: [PATCH 41/42] Add websocket API page --- .../asides/developers_navigation.html | 1 + source/developers/websocket_api.markdown | 353 ++++++++++++++++++ 2 files changed, 354 insertions(+) create mode 100644 source/developers/websocket_api.markdown diff --git a/source/_includes/asides/developers_navigation.html b/source/_includes/asides/developers_navigation.html index 154e405eac2..531f8935388 100644 --- a/source/_includes/asides/developers_navigation.html +++ b/source/_includes/asides/developers_navigation.html @@ -62,6 +62,7 @@ API

  • {% active_link https://dev-docs.home-assistant.io/en/dev/ Home Assistant API %}
  • +
  • {% active_link /developers/websocket_api/ Websocket API %}
  • {% active_link /developers/rest_api/ RESTful API %}
  • {% active_link /developers/python_api/ Python API %}
  • {% active_link /developers/server_sent_events/ Server-sent events %}
  • diff --git a/source/developers/websocket_api.markdown b/source/developers/websocket_api.markdown new file mode 100644 index 00000000000..faf8bb93455 --- /dev/null +++ b/source/developers/websocket_api.markdown @@ -0,0 +1,353 @@ +--- +layout: page +title: "Websocket API" +description: "Home Assistant Websocket API documentation" +date: 2016-11-26 13:27 +sidebar: true +comments: false +sharing: true +footer: true +--- + +Home Assistant contains a websocket API. This API can be used to stream information from the Home Assistant server to any client that implements websockets. Implementations in different languages: + + - [JavaScript](https://github.com/home-assistant/home-assistant-js-websocket) - powers the frontend + +# Server states + + 1. Client connects + 2. Authentication phase starts + a. If no further authentication necessary for the user: go to 3 + b. Server sends `auth_required` message + c. Client sends `auth` message + d. If `auth` message correct: go to 3. + e. Server sends `auth_invalid`. Go to 6. + 3. Send `auth_ok` message + 4. Authentication phase ends. + 5. Command phase starts. + a. Client can send commands. + b. Server can send results of previous commands. + 6. Client or server disconnects session. + +During the command phase, the client attaches a unique identifier to each message. The server will add this identifier to each message so that the client can link each message to it's origin. + +# Message format + +Each API message is a JSON serialized object containing a `type` key. After the authentication phase messages also must contain an `id`, an integer that contains the number of interactions. + +Example of an auth message: + +```json5 +{ + "type": "auth", + "api_password": "supersecret" +} +``` + +```json5 +{ + "id" 5, + "type":"event", + "event":{ + "data":{}, + "event_type":"test_event", + "time_fired":"2016-11-26T01:37:24.265429+00:00", + "origin":"LOCAL" + } +} +``` + +# Authentication phase + +When a client connects to the server, the server will test if the client is authenticated. Authentication will not be necessary if no api_password is set or if the user fulfills one of the other criteria for authentication (trusted network, password in url/header). + +If no authentication is needed, the authentication phase will complete and the server will send an `auth_ok` message. + +```json5 +{ + "type": "auth_ok" +} +``` + +If authentication is necessary, the server sends out `auth_required`. + +```json5 +{ + "type": "auth_required" +} +``` + +This means that the next message from the client should be an auth message: + +```json5 +{ + "type": "auth", + "api_password": "supersecret" +} +``` + +If the client supplies valid authentication, the authentication phase will complete by the server sending the `auth_ok` message: + +```json5 +{ + "type": "auth_ok" +} +``` + +If the data is incorrect, the server will reply with `auth_invalid` message and disconnect the session. + +```json5 +{ + "type": "auth_invalid", + "message": "Invalid password" +} +``` + +# Command phase + +During this phase the client can give commands to the server. The server will respond to each command with a `result` message indicating when the command is done and if it was successful. + +```json5 +{ + "id": 6. + "type": "result", + "success": true, + // Can contain extra result info + "result": null +} +``` + +## Subscribe to events + +The command `subscribe_events` will subscribe your client to the event bus. You can either listen to all events or to a specific event type. If you want to listen to multiple event types, you will have to send multiple `subscribe_events` commands. + +```json5 +{ + "id": 18, + "type": "subscribe_events", + // Optional + "event_type": "state_changed" +} +``` + +The server will respond with a result message to indicate that the subscription is active. + +```json5 +{ + "id": 18, + "type": "result", + "success": true, + "result": null +} +``` + +For each event that matches, the server will send a message of type `event`. The `id` in the message will point at the original `id` of the `listen_event` command. + +```json5 +{ + "id": 18, + "type":"event", + "event":{ + "data":{ + "entity_id":"light.bed_light", + "new_state":{ + "entity_id":"light.bed_light", + "last_changed":"2016-11-26T01:37:24.265390+00:00", + "state":"on", + "attributes":{ + "rgb_color":[ + 254, + 208, + 0 + ], + "color_temp":380, + "supported_features":147, + "xy_color":[ + 0.5, + 0.5 + ], + "brightness":180, + "white_value":200, + "friendly_name":"Bed Light" + }, + "last_updated":"2016-11-26T01:37:24.265390+00:00" + }, + "old_state":{ + "entity_id":"light.bed_light", + "last_changed":"2016-11-26T01:37:10.466994+00:00", + "state":"off", + "attributes":{ + "supported_features":147, + "friendly_name":"Bed Light" + }, + "last_updated":"2016-11-26T01:37:10.466994+00:00" + } + }, + "event_type":"state_changed", + "time_fired":"2016-11-26T01:37:24.265429+00:00", + "origin":"LOCAL" + } +} +``` + +## Unsubscribing from events + +You can unsubscribe from previously created subscription events. Pass the id of the original subscription command as value to the subscription field. + +```json5 +{ + "id": 19, + "type": "unsubscribe_events", + "subscription": 18 +} +``` + +The server will respond with a result message to indicate that unsubscribing was successful. + +```json5 +{ + "id": 19, + "type": "result", + "success": true, + "result": null +} +``` + + +## Calling a service + +This will call a service in Home Assistant. Right now there is no return value. The client can listen to `state_changed` events if it is interested in changed entities as a result of a service call. + +```json5 +{ + "id": 24, + "type": "call_service", + "domain": "light", + "service": "turn_on", + // Optional + "service_data": { + "entity_id": "light.kitchen" + } +} +``` + +The server will indicate with a message indicating that the service is done executing. + +```json5 +{ + "id": 24, + "type": "result", + "success": true, + "result": null +} +``` + +## Fetching states + +This will get a dump of all the current states in Home Assistant. + +```json5 +{ + "id": 19, + "type": "get_states" +} +``` + +The server will respond with a result message containing the states. + +```json5 +{ + "id": 19, + "type": "result", + "success": true, + "result": [ … ] +} +``` + +## Fetching config + +This will get a dump of the current config in Home Assistant. + +```json5 +{ + "id": 19, + "type": "get_config" +} +``` + +The server will respond with a result message containing the config. + +```json5 +{ + "id": 19, + "type": "result", + "success": true, + "result": { … } +} +``` + +## Fetching services + +This will get a dump of the current services in Home Assistant. + +```json5 +{ + "id": 19, + "type": "get_config" +} +``` + +The server will respond with a result message containing the services. + +```json5 +{ + "id": 19, + "type": "result", + "success": true, + "result": { … } +} +``` + +## Fetching panels + +This will get a dump of the current registered panels in Home Assistant. + +```json5 +{ + "id": 19, + "type": "get_panels" +} +``` + +The server will respond with a result message containing the current registered panels. + +```json5 +{ + "id": 19, + "type": "result", + "success": true, + "result": [ … ] +} +``` + +# Error handling + +If an error occurs, the `success` key in the `result` message will be set to `false`. It will contain an `error` key containing an object with two keys: `code` and `message`. + +| Code | Description | +| ----- | ------------ | +| 1 | A non-increasing identifier has been supplied. +| 2 | Received message is not in expected format (voluptuous validation error). +| 3 | Requested item cannot be found + +```json5 +{ + "id": 12, + "type":"result", + "success": false, + "error": { + "code": 2, + "message": "Message incorrectly formatted: expected str for dictionary value @ data['event_type']. Got 100" + } +} +``` From 347d12578cd456677e13aaa5a4b39ec6c5301101 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 28 Nov 2016 08:34:05 +0100 Subject: [PATCH 42/42] Add threshold sensor docs (#1511) --- .../binary_sensor.threshold.markdown | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 source/_components/binary_sensor.threshold.markdown diff --git a/source/_components/binary_sensor.threshold.markdown b/source/_components/binary_sensor.threshold.markdown new file mode 100644 index 00000000000..2279827a9fb --- /dev/null +++ b/source/_components/binary_sensor.threshold.markdown @@ -0,0 +1,42 @@ +--- +layout: page +title: "Threshold Binary Sensor" +description: "Instructions how to integrate threshold binary sensors into Home Assistant." +date: 2016-11-26 12:10 +sidebar: true +comments: false +sharing: true +footer: true +logo: home-assistant.png +ha_category: Binary Sensor +ha_iot_class: "Local Polling" +ha_release: 0.34 +--- + + +The `threshold` binary sensor platform is consuming the state from another sensor. If the value is below (`lower`) or higher (`upper`) than the given threshold then state of this sensor change.. + +It's an alternative to the template binary sensor's `value_template:` to get the abnormal/too high/too low states. + +```yaml +{% raw %}{{ states.sensor.furnace.state > 2.5 }}{% endraw %} +``` + +To enable the threshold sensor, add the following lines to your `configuration.yaml`: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: threshold + threshold: 15 + type: lower + entity_id: sensor.random +``` + +Configuration variables: + +- **entity_id** (*Required*): The entity to monitor. Only [sensors](/components/sensor/) are supported. +- **threshold** (*Required*): The value which is the threshold. +- **type** (*Required*): `lower` if the value needs to be below the threshold or `upper` if higher. +- **name** (*Optional*): Name of the sensor to use in the frontend. Defaults to `Stats`. +