From e60b96d6e5cf4e8bd2a0ebc20c3f2191f4aac6f4 Mon Sep 17 00:00:00 2001 From: Jonathan Hodgson Date: Sun, 28 Jan 2024 15:46:30 +0000 Subject: [PATCH] refactor --- bathroom-lightswitch.yaml | 11 + bedroom-atom-echo.yaml | 62 +++++ bedroom-bluetooth.yaml | 11 + bedroom-lamp.yaml | 10 + bedroom-lightswitch.yaml | 18 ++ build/bedroom-atom-echo/media/alarm.mp3 | Bin 0 -> 85890 bytes cloakroom-lightswitch.yaml | 19 ++ common/base.yaml | 19 ++ common/basicSensors.yaml | 42 ++++ common/bluetoothProxy.yaml | 12 + common/lightEffects.yaml | 67 +++++ devices/athom-bulb.yaml | 59 +++++ devices/localbytes-plug.yaml | 310 ++++++++++++++++++++++++ devices/nodemcu.yaml | 13 + devices/sonoff-basic.yaml | 47 ++++ devices/sonoff-t3.yaml | 95 ++++++++ ensuite-lightswitch.yaml | 11 + green-wax-melt.yaml | 10 + grey-wax-melt.yaml | 10 + hall-by-front-door.yaml | 18 ++ heated-blanket.yaml | 10 + heating-downstairs.yaml | 32 +++ heating-upstairs.bac | 77 ++++++ heating-upstairs.yaml | 33 +++ kitchen.yaml | 13 + landing-lightswitch.yaml | 13 + lounge-by-garden.yaml | 13 + lounge-by-hall.yaml | 32 +++ lounge-lamp.yaml | 10 + lounge-light-1.yaml | 10 + lounge-light-2.yaml | 10 + man-cave-desk.yaml | 10 + man-cave-lightswitch.yaml | 10 + office-atom-echo.yaml | 201 +++++++++++++++ secrets.yaml | Bin 61 -> 0 bytes spare-room-lamp.yaml | 10 + spare-room-lightswitch.yaml | 10 + tv-switch.yaml | 10 + 38 files changed, 1348 insertions(+) create mode 100644 bathroom-lightswitch.yaml create mode 100644 bedroom-atom-echo.yaml create mode 100644 bedroom-bluetooth.yaml create mode 100644 bedroom-lamp.yaml create mode 100644 bedroom-lightswitch.yaml create mode 100644 build/bedroom-atom-echo/media/alarm.mp3 create mode 100644 cloakroom-lightswitch.yaml create mode 100644 common/base.yaml create mode 100644 common/basicSensors.yaml create mode 100644 common/bluetoothProxy.yaml create mode 100644 common/lightEffects.yaml create mode 100644 devices/athom-bulb.yaml create mode 100644 devices/localbytes-plug.yaml create mode 100644 devices/nodemcu.yaml create mode 100644 devices/sonoff-basic.yaml create mode 100644 devices/sonoff-t3.yaml create mode 100644 ensuite-lightswitch.yaml create mode 100644 green-wax-melt.yaml create mode 100644 grey-wax-melt.yaml create mode 100644 hall-by-front-door.yaml create mode 100644 heated-blanket.yaml create mode 100644 heating-downstairs.yaml create mode 100644 heating-upstairs.bac create mode 100644 heating-upstairs.yaml create mode 100644 kitchen.yaml create mode 100644 landing-lightswitch.yaml create mode 100644 lounge-by-garden.yaml create mode 100644 lounge-by-hall.yaml create mode 100644 lounge-lamp.yaml create mode 100644 lounge-light-1.yaml create mode 100644 lounge-light-2.yaml create mode 100644 man-cave-desk.yaml create mode 100644 man-cave-lightswitch.yaml create mode 100644 office-atom-echo.yaml delete mode 100644 secrets.yaml create mode 100644 spare-room-lamp.yaml create mode 100644 spare-room-lightswitch.yaml create mode 100644 tv-switch.yaml diff --git a/bathroom-lightswitch.yaml b/bathroom-lightswitch.yaml new file mode 100644 index 0000000..dc155cc --- /dev/null +++ b/bathroom-lightswitch.yaml @@ -0,0 +1,11 @@ +substitutions: + hostname: bathroom-switch + friendly_name: Bathroom Switch + touchpad2_action: sonoff_t3_toggle_relay_1_and_3 + + +packages: + device: !include devices/sonoff-t3.yaml + +wifi: + use_address: 192.168.10.10 diff --git a/bedroom-atom-echo.yaml b/bedroom-atom-echo.yaml new file mode 100644 index 0000000..52b5556 --- /dev/null +++ b/bedroom-atom-echo.yaml @@ -0,0 +1,62 @@ +substitutions: + hostname: bedroom-atom-echo + friendly_name: Bedroom Speaker + +packages: + base: !include common/base.yaml + sensors: !include common/basicSensors.yaml + +esphome: + name: ${hostname} + build_path: ./build/${hostname} + friendly_name: ${friendly_name} + +wifi: + use_address: 192.168.10.34 + +esp32: + board: m5stack-atom + +improv_serial: + +i2s_audio: + i2s_lrclk_pin: GPIO33 + i2s_bclk_pin: GPIO19 + +speaker: + - platform: i2s_audio + id: echo_speaker + i2s_dout_pin: GPIO22 + dac_type: external + mode: mono + +media_player: + - platform: i2s_audio + id: echo_media + name: None + dac_type: external + i2s_dout_pin: GPIO22 + +binary_sensor: + - platform: gpio + pin: + number: GPIO39 + inverted: true + name: Button + id: echo_button + +light: + - platform: esp32_rmt_led_strip + id: led + name: light + entity_category: config + pin: GPIO27 + default_transition_length: 0s + chipset: SK6812 + num_leds: 1 + rgb_order: grb + rmt_channel: 0 + effects: + - pulse: + transition_length: 250ms + update_interval: 250ms diff --git a/bedroom-bluetooth.yaml b/bedroom-bluetooth.yaml new file mode 100644 index 0000000..d1e22ee --- /dev/null +++ b/bedroom-bluetooth.yaml @@ -0,0 +1,11 @@ +substitutions: + hostname: bedroom-bluetooth + friendly_name: Bedroom Bluetooth + +wifi: + use_address: 192.168.10.27 + +packages: + device: !include devices/nodemcu.yaml + bt: !include common/bluetoothProxy.yaml + diff --git a/bedroom-lamp.yaml b/bedroom-lamp.yaml new file mode 100644 index 0000000..3720c0e --- /dev/null +++ b/bedroom-lamp.yaml @@ -0,0 +1,10 @@ +substitutions: + hostname: bedroom-lamp + friendly_name: Bedroom Lamp + +wifi: + use_address: 192.168.10.12 + +packages: + device: !include devices/sonoff-basic.yaml + diff --git a/bedroom-lightswitch.yaml b/bedroom-lightswitch.yaml new file mode 100644 index 0000000..bb4d7da --- /dev/null +++ b/bedroom-lightswitch.yaml @@ -0,0 +1,18 @@ +substitutions: + hostname: bedroom-switch + friendly_name: Bedroom Switch + touchpad1_action: toggle_bedroom_lamp + +wifi: + use_address: 192.168.10.3 + +packages: + device: !include devices/sonoff-t3.yaml + +script: + - id: toggle_bedroom_lamp + then: + - homeassistant.service: + service: homeassistant.toggle + data: + entity_id: "switch.bedroom_lamp_relay" diff --git a/build/bedroom-atom-echo/media/alarm.mp3 b/build/bedroom-atom-echo/media/alarm.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..c3da4f5b27958483b18c096a6de16929dc980158 GIT binary patch literal 85890 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%0D7eDcXnt!u6!#W zKG}|le|mpw!_x8`x+^z`145qY16DQXjpNd2@Zj(2F&~E5f!V#HJ`$LfsqV0Y_ph^Z zO7WEyHTDeY_$9pX4}F%Jtc?KVn9LYq_DSw`J{uZ&HW9IkHrqSDJq{>ilwgAqey{pxj+bjHp5Oz5fdS+}(McNwSy$ooZ7(va^UES|jLH7&i zVe{89{nZM_$Fd}VdqukwEq*(7*5U@{{$lR-SgC~0_0MvI-#+8h(bJiG!ZVwy3%mK* zJxIk{RasKHnU|AQ6pkjQcvjW;o|wP7mrG>P?My}Z(?`Gl4Y{)|^LblF!@sK!R9AaS z6&A}6h~x==5LG|Ce$;_-OC*YXJ1u1q=7hqDF)p;x&#@}v-h5%5qhrIgiJ#S=Jilqh z*=pRZt7w6^bSMud^?2 zsuOe<{Xwl9O`#$f0qIdMipCP`cSV zc%?K-oONBpP`5`HrKs&Ol-AJuyOun>yvwc=KBk{JywSAD>-=-%u<|X{IDAolL-s?} zIR+%041a?@FbnUqtBTHa-r*C#C=TCfsL-H41r z7Gy5!^e(d%XTo>O@PmgPErFTlK40RUS8kIw())7L>oS2{2@YYw_%2J0u}rQqe_WmY zerNR+QH1Ui$ROc#j@J}%sJ;S?lg3zB+S&{g}^R&m$bo>UPIiZ=uc8#tVan- z?4bs4`qF$+M4@&AK?p*+-?Ds9l>Y-9G9Ouv#bR!U-5TjpSV>og%!}*DAI=;81vxMY z56XO{d@?4-o@|_l*-n=%CfiV99O-Cu-y^?OfEgHp}X4rT=yiU=>RLceDsrJ?d@$wZuKC|sq)CedOX z5H*HZd+umk^3&3QfIwMs)-ZqhgNU1Io8*fwEMrbS$sC`1E$s*?;($s_p%+u6Y-P0Y z@lRwutD`F$LrdWTT*bDFykcldSaLY)^w{G$=~-#Pidnbu9=7YTbgxiqFj{7i zVxLqeQ|NrS^}dsz-&BQBd8*xj!*o+J^k#oCml=HZac_?}Mn65=G;Jso?{|$mlg^oV z0ta>NqV{!zYg?83ecOod5sAQE?V<3YR(Kb>1AcJwfBned15y3Y*JJtsHlGckqx=`- z9?s>+hyOBT{p*AOYL}x6MWR8n^{B<~RHhD1jpj{g2Iy(JXewFAMAlm1T}0E4cR!EY zKti2RgpVV!d_BVL92K#6Q@4Voam5Fr;?Tg z)SXGEQ`R){%#wZBD$i7E>KFcH1bxPpjBpe^-qoqFBqKj5-)tqznm%+*SI4eQ9G3h4Q-!-C%um;Zq z*Jh6Na#LDu5V7+$)ZXSG4r0MxCE;}cz>>fxEQBBrflgk3kyv#k`f(m9SmTH^dm4Im z3IGylvmhBL6U@qfPKP+VbAb+65>Z)kH#fTqT*uhdQwXr1e4tL~4UeW?kHTWZgJmXM zc*}4K#B_9!sz!;ch4_-`$hXw)B>J~Fy(M}l&yr1HG3sF*X|tJzyYqZ9uh2;SYnXcT z!y*hRepTtu5`F7Et^jI_-Z1$Z0Zo1$hIcEbEB!c{6P{SK?wqDXB*l}Cu>1RgKA^FB z%b*g*#wt2X(ET+dFom@j{m)7#9^2)zEoSez|H9b6M;}VJ9u^w@6Uzy>b5h~T?}zfp zOp&JY?OE5*)yeI%aYAf0KNo^7qZfuN=M0M2CvR#qjw=rv{Ks}Oe6gCNFKqeE)aM2D z+w?OR`-#fiZ#R$MV!RD4A`Q%cWz`ta!BRFjte7`j=Eu^S%CG-=z{f4)h#t;^cfshS zvDEIS18(ydEgw9xyxgB^tz7PTn7>&o&7%G`a`gO^C8+&=*iuJ#PsDAht|Mz}uXWn( z&hlRGHRSt2Hi`!RCQ+q6R%~WvEcGalCiBZkvp2Bn1?=8(Ydt6~X{2A?jlf3K<6%?AJ0mfuO-WCUcBDj43j`fgqIul(Foyo8b5|1LlE z+}WYQUb`ZMfi-JX=Mp2kxti|S1y(x%eHP%eDr1&dsplOv&lMS2^hbow?uUb3ofa22 zRnWRN-OhWDW_=KL^|iw1_y&c-V**ME!zp^*2qS1b&dyJZQwIJTwFvMvaN<`r_c%NG z=;$5-&Xj-kVqoW{f}`WrJ-3HA0s`W*$iu_Kt$b=q1Oz1UKQgL&4CUs`7kqadT^@Cn zGH*wNej`i%QCH=Yz%XEjZCqKh z&L%F~`Gxdz8jIuRR;+vtrg7PC&z6FIS<2!Ri0Zaa9*o!9B0p378lKQYt%a7NVSoyf zw)hD!C%bXjx&d#)V7Cgzw25NI3AT0*Nh;hgMGQL1%PE83!YqTQE@NM+DxFB43mj?a zeE*&yzIp=dsSG-zU8sbCz?|E{dmVCHGd+t|G@|eF_$j;GGZ^wTpB(9lO~nJdcL@C{ zl*_zkK(kAtqJ{+pR2GW?ST+Mp#Nm|^E+#H2O#?n$E%hp&g_@lj*=dzS6B{!#72W^tgM4wV-Jh0YHm;v0)$+?Hsz)fR`5iI%gc6m1~4w#>S- z7j%3_qf)8VM{WMlXr}2yL9D&l+Ie|=b{WFletMM2B#F~$TBt*w(}FBX`1U4sYH_)f zIaA=6icZAAblk|6pTICOOL`HVa5GD+W@g;Tiqjr%^D^K$ivdu`>+_|{(Q{H^ZkwMc zPf$=?Nh=V-f#++ue@@}yfz$p@SOt9NcNiW2&K}4Udmvlu|B#$E@hG~Whi$SE1_*Cb z;3X)OA^&@k_KI~0uILL=P|29x0VSSnij|?gqV_&ZcrL6IcaUG{>v8zhH8fu~lSb%L zuHN%hxswS!K7LO1YGb0Jhx*B!FMKmg7NCqFcL?_i)+`ODoZ~7TsuasE<|NFkEETnv zO@b>l8q%2qVRm6;P!Dyme67k3N$@0I1eZ!f0ci59;;`k08n zg+Ejb`VG`J$FI;+Qs`9V74Oqt)LA;!g{q@BEKi**t~c0M@Pg}7=Go$8OE#KVy{K0N z21~o+q$VaNhGRp>i-PiY9!kX~;iw?mP(265(iGm=nb^jQ&73{MD-FFw?{+LJCt2hS+eRL}G9oUN<7pq!oE`r497e!H~?8=Hp` z^4!Gt?`tM4bW_!*uYU(=rKbl6r|Zn7r;989P?Kk1DEtE>yGNG0^_}1DbLM(vIWo~b z!>u1d4~YC%_K+l#HbUP@0DKo}z@M^Vq)3TX>sx@(c%C?|a?} z8O~Q&q~429-}*a<^|van3ZLL4VU&XU=G{!)i{7HlX*HK5Te^8oxir(TCQvz3Wr%x> z=RDK5lP+NI)#Jse*s)XuMfl{#v`}dHO*C1kreaR?l{#cMaMw9Ei{p=LSa~Tc%3r_m zz=t=&?@I&WrFet*&VpUf(t?R0rc_Y!*n+}@i8l6pa8zB`;Ko?r2IEAuh_tPck+j8_ zqXs7s9Mjbm(v6etoXTZizXG!$v+XkV*J38oiYQMq-C?2ar>Z>ZuK#&2O1FHm$Re^N ztVzJbrOuq7UyYw%$xYVm+g(Roo;urLv|eNvz5!7{u(ljYR&J4~I-{U;n}?Uo>xSI0 ze{E^U@~jsBP@+V&8DaF>Yg2ZO_;#(-WYMPXU{Ck5ZAyRYXwR)oUvqR8SoGjpNOZCo z+ZyJdYB$xx;u#}Gm%M*b*Woup?qrY_!DnP)Asa7esk?0#EFq`)2LkLbUi<%Ej|uC< z!=_+%3h>_vE7_j)f9$3P(CuOE9X*pbZxWS=Q(&oGw-8?e0o6xemh4o$nQGZ9kh9p` ztMqXEPDk`2)kqRaUe-H7k^5U^7*Jt}RQ_p+1LJ`~88MBqm`8RC^km-ox}J%K&u2}HqRw(!F(e-YmjXKJtW*T;n9D#sE4 z(ty1{viX+@8oL7h=cKR2P5ekrx(NhE2+1|rFa7Vr4AGV&^_*P!MVBSeQQ3S;T(KQn zrK4!t7z%5BwKP|95L2{69hC5P4=&gO7QE>SB^Y>E_BRnIbi7`pLynl4ZK-ikeo(NI{HaqJ!>;Z3&7j?7R2W*ym zr#PGcS_|WMp3bN|ZTc`k(UZzp)$OdE0+}o~+=tsFl9M+mXCL>R+y-3OiT38ZX>Abj zGt$$ra`n)fynI6aN9~1pMBXFhkRE!M!XtA3W;yjO^9qsWXOAo=HWP(^Nkkd0P?mNg z3?Pqx0@Hq9%2ey2_hwZ;tN=b(nfGh=b+g+Bd+W>WI_B5pT2tlR1NMWJUOA8@yK!OT zG^wKnc0e#tSteVrND~tY9q6f=q@K=8&ZUeHn%EJUs72a%1Oj|Or%U83fl5a~aKV-D z(=j`QC%2pQ7}8QbVuttFQq`p=TSjHr3i~BQIH;mn9CU@KQS@=h>+VrgYpCC38bZVc z>-Y5-4hC|%sh%s#P;yhvc;~WM&i>mC=0_S#oybqV-bfKC&#oW;P7)_;#`M>lw4b{B=VC2f19{Kn zi-tq>e7{0azeDD!d-8vL=6aZDpd!pMm73`Ip2szf@#6evxTw1}|7Xd`xXR(DLTTI1 z8NVuAeq)AOULw`}P`W3MV$D`0N3s6&jPr*!`Hl$sVaDfkkTrasNJ^w-NNJh4tyJmI z0l$uk8Z_mg)7Y{50&2;SF8`$Hf5qz7N5~miK(1o{=|d-3*|K~{SZy95CujzsLOtu>jb_{0l+y$msZi#-s%>N~H}hV-jyciYAGRb;)gn5dYTWh%kz%gwzP8hdHO z_8J&D$K`E^zX&Tb{caBS_E%@xJZ*R?(iZ9cZiFjH{O)6R8)1%vRV*FoHgK=Q@hiY~ z&h>r_#nFYDx!H$=Y}gNR^oZzgc}z?IXTnT8o9J2?(aZhg`C(7vWn;$#2%WR)`(54=ri*|vnqp!j5ucGs5wVT-V^9~2%xd^d1e<1K`QZBIU}1+U z;)E2YNDJt7)6rIE2%_j$kbeu~LS3AXIDA<9+vCJ{KX5Qz+z#8DZ?3qxeOMa|E+U#g z#7m6q6yW&ADh23WsLEa{WuyTN_)a%D3nfNbemWg#U%0=_5^>@ui5nj?4JQl`o`Pb2 zHeUYL70YpS(b{}}zBr2W>b~lSiP^Bn{|04!gq)9+{(p=d}*bz0j=c>+r`ac zK~%zsdh0>CpD)Ch{lj$#Ys}jGwF#!DE96Eu;JW&H^Cklk9@3HT7j>SIw$L$j0uU&6+@e9Gczw_^0H4=;I3+4|cm zEtz4mxlWzhXgAen8N71@R`PxBb;`lW?&`)+S@qgT3DvAGE-5CtesQfuUHA83kuZH-lJ~##KXq0bBEH}i83U& z;$|%FqBgbxCVOpLhqXA}!KTcIb-=zxVX2uoIB8vba|0|*DYl-KlW=%)KYU_hs|2_JUQegidqYvCbDp@2Kf9s^B686Fqkm?E>gx&@I2MC=?k%#oR> z!purtdaLTQJ_it;DOh+{)Hkx%w8*1V+R-?ObF`SYqkW}kOG_Q&@T4>VV_8H|Q_IHq zj6|**bR59Cm`ZNk;h&CAyNiI=ePb=L&YxXU7bk|UEx~)Kad9I=8FbMDVPijkQ3Lg= ze>=T==q0(U*EAOEE3(Ou8Ee14)o0&i1ltsek5msc>@*>G5@|5%O;#$a>!olNLkhaO zX+;&z#Oe~ueoj=ufwKA%_{noA+C@!fhT7^>UKIoIW}R5KB_4E%zy&nT7V2X-ZO0Z7t+JYWFj+P_lp?Y}}yT zFB_q_P1#$-iq-?XZPl=RtJjT2tjxi40z;mq9~b{64#Gp*bjLu%`%v#9(0h#KDBur`BrCV#kHRWi z)JF~417e%LK?G73Dt~yx2#&-v^%xW+797-;e-o=n`6jBa_92VlMoOWS&!a{KL}c(d ze!l;iM10*wU=kv^+~Xaj%36(eBix(OcGOt+s$pj z7XKo{-96sq%Cb&)w|mH-7PDg4IJ7KgqvN)B=pD2AF(%V{z;+6_wdCdH z)~@iJO)_e0QJCJ|Q=|e6xiju~X-ZJMVUpe8ByxO7n@O;zSMFy;lhwMI@s=7FZ+yag z-<`O2c7DD(!g+a}Yf4(~sh<}_uTi^FL!oRo1Nbh7n>m@&f750%qn20FN{4Dtc_e?D zFLcrTOkbts56LASA@|K<#`Y-g@1tPSu06~DFd8B0foPW|aR3*E^q>ZZ+05HSYzmuJ zmQI-l`YTU4QyO)L4s$m@&!&i^hUt_|8Oqi+L=Cg*r}S?)Uo_qORuBqZRG*6mQ|t&0 z6fp?ZZ95wc!RYAhtym1$64KapwQ4xUQiCV79Bz5!8A20aj(d;_f`;x}ldfOgb*HGT zuI75o9QYsDVj(CG#cmmyt%*zNmgs?!TqAaZIA|Ll1ej9*NwB7je;I{q#*&{uO!_PG zFxNtX*v%-cUefFJsB{R>91I`=F;MW4b;`WW|5oZyWf1aJT!j|%*{({Yr0)r>v=mjR z0vCDTrM#h#6cY!=T9;<`u}79-&zl!a>%7wah1#4S*hiE`0L&Zm%}k4|6|CPJ3ZYmf|?56iB#w?F{YPd<^=?*NV)4qPUURCSPn~ z?OS0){V5p<>B>Hg1-g3ujy!Scm4(iiU*R*$ND#_yH`j-k$L5NN4F|kv0r~Z$0L)Yo z>6m6L-D!*1)jI99k@F>fh>a0l11msUB1A3+^ry|e{u^>#h_xsPPgg|6f)wO?)$y;s0@IsxL)vdTedbS zG#Ofg7E1qYu;fjB{Qdo}iN5Gu+;l5rZg*noQn~IXep648)RHGIb_^*jtuBr>Q>~UB zT(!hgS{>5xn37B4Jtgk1S&#yed&~VsK3;ZQ9;JtKcwyti<&QfU^;b*zAY3X0q$GJ0 zN^uM%!XLc_2@5JrULX010sJ-&o zaZ-VImu=Mc?34S)+uhYV?Vlgk!{034TplfHuutxsiOP|${b9Xv|H$e8y?JCgIt%>= z$o*4&NZ->aUjL_e31W^!jjh-iM=f=lG`6}{l)`#h6@bg3)|JP`@I1vj$C!}`PzWKR zM`q%X<3wD0Mj}>+UZgXeK;dvU>Bnsj(i!<|0$DAYVfuEiSkhhiT@Czv2-P9A4W40Z zE08aUE$yg@Yu&&o@$Q5nPB61O*-~I!86;LX1Pe=)ad_KqKQ~-RI!g<|mw8#s+{)_E z@eA^{4<)ebt_vmge%D~nfZ^c+_O8m~StwB=WRuvqVZ$^8$s*nQ_Gjd$b9o5(0q3M} zAzgEFj9pIyX4=Vwj$?rS`YaZfQL|syu8t|MZ`oKP{Fy5x z#-F`^gE%jr5t%Dnpp)*Sin-9&DXmvSt)A-&@WX`eCtW zo35@KW@V=3uU%xu-9UFkTZgCscPmfkY1&_0*Q$kgvD{(}WVKpr&bsHos&+U1t3hBn zE7)5!OHp2>lNx7cPj>6~>wJ{YPP8?rcjy_9W=5FLpy{1h|{&*y!U-r zh)q2RH6e*3w*Si_DRw<08dLwwg2gcihs0gEa0VLvVN0PXw5WD%w^}~MO`h59NNkGVMc>Rlh|{#)7(#OTl6Dcs9!}VrFWZKptWk9DYlG+pKbfn z5i-ftrvnV9=h?~+YCPR}cFMDbbLKFR%sQ-?BFig4JPY^tOqKT+AaE)-HwSI2cC_Z5 zLJUcl-O2h68|!9iOBRm`Olu6{W-;7JC*6GVaaT|Url}CR<4@ap24$pX$Q;-O9P8a0 z67BvxXV0SFn43=ZrIy%dK29^@@0OW#ZUSTTMpia9*C)@#SgbTFqo*)(|-^$IdOfMKxi zJ3wG3r--GWJT}{(G4(1n2%@2(b)dW2!O75yBNfAcn2W*P^nQX5_t+`(U`u-G}PLc1{~N zFdVd${ETxmuKmv0|5~o2Cw-BrI=VU=HEpf0jDEFd_)A~bwf{9Zy{InWQwI5w_vr^A z^Q^TbpzMXIC*sc%O_3n)q*poQ#Gm`RB(pFQzcooD<-X0WpD?hzE8@pX1ff<=I&1MO zf4{#g#Lq}D=h*^*X*r)bRw+|=;jDX7eNX@3Nvg!$U`Dv0k_@t!el-zi`SW(-WgRG6 zEUts-L|M>-aY7#`T>;Q{A?fuxm$}}1~gqev*ufL=#eZ?K%q%I+V`Z3hfPKL9h5UNra z@k#K>?`)hhPK;W#mF$j!>_9fT%D8>2f6{8D|Kzm)_x|6IyLjq5v-6Jq?}8WE)gI(& z`^ztnEa#g-jmGTk0(`3YOa_@TTMDIb$WL2F+7Mz*Xmwp`KrLujfT`KF!1xu zWq|K*7wzQJx`w0Md0V(%z_3r$711}$3M!N@Zvg^HKFGx=RouzWqZA%qky1N@ofZDT7Jk@7jM9p*HrcMiBAGP zZ*aXkMelbM{QTSBkzq?BMu*FMK1Ry8I-|x;evZ!d{%U)CG&__!_=k7A_=63UdX6gB zRXVj87C+xSOYw|?d7(HoDj0x)ZIEC^%Z-n{eQY_uY0pPTIoq&*6S@{eq1#HQ2#rkl3lzfO2EIyGxxNo7#^zjL^5)Vb4mf8hCFSy{|MhoEn;yWNF#bgDf9b z0!#tQ&utwPD$SXSirR7P*~%4czYqS`t}^^L{Qli8clN_V_lhAk_ivViY*`nX{{Fk* z#b8Da#ML(kKFn`LVKwmf<6BIzhnb0E$y;#MoB_+AyV43}mT1ok(~zRIG*d+(Ov)@u zO0@?;MojmNFKMfD?!~dt@#rJNWUPp^Y0TcPm{+k@X@3?#kz^>XAbVmCL#)flZ@^Fx z=VRDhsY^kL|J;CUnnwYKf`APL<&Y@PGCn=pu|0;)=}{THHc+g|(^3&9o|h+DAuWq3 z+RgGz#!a?#(n&nsm?=GOvue_G{-{sGpGM(FTA8QCkA*<;W-~YvL{v_?!=7~Mq~M6T z1nSd%T48B4$@6RE<3=^-&@@GRU$xL_c90gtDZ?CvoHFiuYV|Zd3G%HiOFmS>{SAsS z%8S^Ova5;M$hTok?gbOE#X@uB55)_mBch@@tlvqT%{6uHS!?~`QA#}~E;!!qpE`z& zL`yR_f0Ap(dmW*kkDaa!Ks? zK@oO#$`3Zv9*$}LZ2A0u+3oS2f0GLGSL(s0NoRw993>==`9UTt4bzXEF8Z+3~`v@7{ z)LZ^;-~N!ZD%fv?iB&HhRxY&7^U=BHj~qF}YB%<-%*%70XlO=maauWhTRT|WZQ{2x zmTHOG!;Tw3iu~ZDmLuVZrMrizT5Pk$85^(Jb$X0%2GEP zejfWo)0K@x!o?(~0FBXajgZjjOdeO6WPu)hVavhed>4!o>b##}hm7foA?WF8F+P3qYlyhmcp}j+R}pLk zRAtmoDAPjMNnVK&yU&Ji=fq**r$wisBSZ3b6D7%cWCh&cy~`Jek|7J?^+qG>rsFkl zl1VsI57RQU)`z?eWJ-;L%6sPu1Vg|QTqh_%JSbF6S{9mUZJFPXd1k?b@1!FzO!j>Y zr;Zd15?MLVMsz1!)44AxLT2HaYEa7hZr=Sv{OLJu?$lr7llS*Ub<{4AL@jpaf5?&C zUzmCfWz_^@*^)cn*M%N@NS0v-)s=(6}#%o4WbUxn~2)Xqn&n65+ z(?z|jZLOHNWd~*p>q$7JL+h7$247}^B|C{n+BR`#o8D_T);oR}y#74ZA~Qc{f4#eW zd)TscS`nnD@7ZaiUZ_J93qbL!T zvKVAs(OYoteo;Z2w_HC*1l}1JX&dT%gE`2S=PLEpQI=pi~IC(fh z^t#}X-i}n-i=@Htwjy*6eeLbXmNWjLRf4gF(WFCY24S!K=EA#8J#Ji$+MujvD+X2J zb6IZWNy)FF;01ziPAYo&-A1N??L|qnv2Z}M)>64GT9{s*Q~{@)c3b=aP-Sq1(j<>@ zS%=9F#x1PRQf|uBuC3ua7bDKHbLU+;H_$3!S5X#7l=Yi!Y^7PL2~FGi!-lo^R0bBQ zmHtDXtF>8spl87NCMX;5wKF^mY8dmURU;lDhwC?Q%OaQXsH>C*2jJLOoZ^q6oDtV3 z_fVZBrC;A5-R!qWx_rzrL@8`twSg~`&;+J0YKgIiAN7#&67o{NdLuOWPeW19!{+dq zF3<(y+5?Gx%^c<`*W*+yxBS{+EtmJnx^_M|t+sQXQPUOH?o?en%LKKDrZ#RrTGDU6!eE zqIm}XGB0cQ8*c5o)#|UF{vQ>+G^}px#>Tq50!uox1MztAZg-y)m{41H?tI% zi|z3g+Z!%Zhh|m4pyTP6Lg&~?Kaw{5FsxBe zt8ga+Upg4Iu*=E{jbxTjwk_Mxv(VS7x4>I_lC9kx(K>j5IJdVg=YHT5edwuzrCW1K zC<}EA`D+wxOs`%^@sN)MuSsP=t6T5mSF#w6!!6 za&&v_Z0S#O$|s=b@tTB^Ydw1kMk)2GI!&$RA7>H?+#Vcg1v_+3dPFrQzWpwv;iQ3W z*j4U0+JiIDefvCFt#H_*JHGEv1{zjkepPuNg7nsw-dr7W<$m)*dWT&xTi4G?0zaw) z+J8=;Gm(u#&MRjxdg7YZc1wLz4EnLLc4D4Xx&d5;a-hF-ANU6z%soO*)@t^lcj@oq1F6hIy~||r zZ`~&)Bta{~H|qj5(+LCf3VW3%SMX)@$z_&nP3g@Mlcssz`5=iCirRhvCkmCV z`{?_Rryw&=&jI?uDGc!w5}0rHO;Cm`vgSQObsahp6GN6ysBHf0h>JI#cL*!c^km)4>QC51q_0b2DJ&YHah=@3{<;+o5 z_Ddm!ADnW%pBz_A9sv-pqA%7=C02WX2t@zHeX0Tk;0bC7`3I>w4{e9TfLak1zSe@m zeIK1j;%4gHpqvjwHoC=W0i;pAnJ-LFt{4z241d|jOKMSh>&2HEASGt{=c82W9ua5oXPDs16v+wVx;|30;03#ju_opL!5A97b!TTJ~ zu<1qbqEBy6r%0E4@4VO8uGTLwBU=622``=e{0V(9eg8N4jKKWnY~O`H$kV?Jyhx9e z)GMqq6z9g8v?l3gptPeBz^5**cbIrXRW?B#pKA#tzVwZ=y{s^PJOl(Yd-(ZN^5cbM2 zWq0=`iw&G9Dw>gH5;-<5%a)}JaO^W{Ic_m$!I+PrF5Njv-dG5QB>H@c=HHWHq8;01 z(vD^*rNI^t3wx>T2~5gQx;#^tA&)jnnjW1pQ%cQR_#%%&YEh36^{&p_(*FFn{dcA3 zx8i3GW`kucy^%;$X@1#jgKY-Phx_lmsit=C1yv{dFXV_pC5u3j{ZV1+?`nhvVL{dV zI2!017wjwyZOZ zo2`_3+7mvg921zt(q;XiLEW*E=eoB#nXp#v4b=-5^UJ;%&DxTBZt_$&q8e5EE2~xm zTs}r8rCYJd@wg7lC)$lhB>u^^K%(i4fiol4DTmA@r~*z zd&GZ!Bew8pu?cg9QPPF)@}bUL;%{ zHhudWChQn6y*wyOdr5=OECuNQFrRR!qO&N%H@x6$kw3_nVPbCWfkY>sgV@kaVJAz~ z+x6-6Ix%Mc+TX8m!_V(^Ruk)TPMRB8Z>JeWJ4382HM-g}HM`EVTtze_<@TeSyZesQ zl*yyz^4aAcXVxtP>x>R0mp!ldf@t4xG_Q(8ktw$wU;YGqQ3d`wTKiM%ydH%$!FPJ+ z9sl1a!4!-=yp>MbUmjU55HA<8uiONgOCOVK=p}i7Mv)(REq*G34^)$3x}jXJZW11! zKX;(#%lIJ)@$3wz(%askQPl3NsJ)?%#3hVz0RLi&q}VmI%B|deCr>Pg=pyvSv(g| zqiOYi;!ow zUnpVH{CG9qxlS@msc!)de5cRPXIRJG^G5Ga7%%)6|HTC!a{c#Me%XcD<@as7lS0f0_OzRj#DOVaT(63gL5S9V2#Aap#iWIcG72B# z88W7P^9hmxB-$P93mlc;WgV4KgbPS3hINtT@bJ@1StCmX3z&G2)Jt;y)lE4{O9g}21Y{yxQm=U=5r0k%KG7gFZDG5H_liCBaLq%bT++ zup**7R~&aLy0-R}Z!@BB{KyB~T0J=y+l!kPXw&*P&Z-PfuLQIF{KoG3*)`^p zRdj+_S{(z?=wmD5keE{6~^UJj5LQ7=@dhcYsL$E2N0#OxCEkbi?N10G?VW3p*FRn z;8Au8wmS7L;EPd_r5Hxw*mkYr(e091H;5God+3!zmuH(8m4Tk$;;Y91x6ev-6zv#F zKD`c41R$%#Jvfqod4ZwNFmZ14zEL-{beqhCq0T9x_6Kc-6+%`7D%~?gBq$g$ZLVqO_@GOYc7Y5DXW+d*jP&qy@l*T#&Gn{#&71}R!)Iuz)b4Z#Eh||(*=K;Ugce{M zO?uFONh~i9$Af%OV>1W;Bz2_}B&>FVkhX$QM*EjRyePae&;jfPBC2E%ZLMN`!Z@DQ zNo3(~7!nwWuB2l1d4z_mi1>$s<%>^l{8$UkbU7am1}<5OzvrQ(bw3MtzwMJa3&$$0Lm3VB07`lFU6yhy%z%VIgm?zdJZ0lSXgPU)Dn zDVYS%6X26KTxWO)!6?hMAW9x(7;+O!*1K}|A-WWeuL7zot}P$?RMvU6QEnVf=vIh4 zfT?EAhdNBM1#Wiec0R4OXH6Y_F3C*nWbXzF)GqJbUk~^X=qk2Wo%$+he+lMi_3A#i zekP`4r{gt!Sl<#sroQ#QO!lxt?Mwx6n1}eQE&C?wZh!Uo8koFEk>@~Z_y|kZ6%KEh zzqqr~;5ibjcJ%wW#)R|6uP|xE?n1LRebHKVXv>=XaB9z+Vwrbo#jAQquR3{hKBcv! zp#PZci5$0f{gmf%P4>&$itP{Sc!VcVB1!4)D5a`}w}qW=kWEO*kmPep|CmP2M`3mJ zQ`y6lU44Wc1!#jF%a;H9-@=MmigfVcdxNdeXur^|t#G5#Z5d}p;BWY@KReaSHm!aZ zvq)cCzhp|A{%|%~rhL9mhg^~E!PkSkbiR(jxpLG{i^)*q7U?HGrjBIg?ihHdGD!pq zDYNX{M3p{fcru3lglb46lX6b0L4Uh!n(e{m#+9j*v}a z15%R=B^cXQ$x^;b*$5V~t+PbeJ#}9mo=K~IC74`=-LNu!tz=Ux8#?0i5!!_#;#Yjd4wOPHxCj-`lsXmaxUcXxx&1UKcu09WQ> zW7~&Ry-i+Qa}Ws$qr#XTz51SqBBIlFsbXMZDXsiG{JefJ&ddQb{Y7(#LsDTh4|J&w zFK1M}_AsgTm1X+tT(;c>CqT2I4^II5RDPRjS_)vpVI;?ycYg6(Jsm?s`BvFXZRclu z?meR#cLQgfHf019p$~|vZoiPCbwgGyhiRXQgFa^(xK1@cw~b&Z8`_shWZeY*6n?H5 zZN)I6=K%Qneu4ZFYu7oOaN^lQhJiK_XE51Bj!8{qs1e7>N!7;07@5*S*6_aBXF_+v z;81|o_*g(E!w&6vwU-q|irhKc@FZ*bc*EYHEL>m++?%+8E%Aj0F$VL^3C}Z^W>!Cp zWYsaJ1@ICdqq9@tIXm@*y~+u^!kWfyHZ!}&CciZRCrvl@R6v_&UqgXk+3Mi=*5y2m zlC-;1{)t4`a|XVW!i3k)nS^|_xq_Ri5)mcTL!fnVsHWNk_VLcCLSwQOzMcH4qAI-v ziBhcBpVf-~2suor-f<7|vA>0Nbef>@;Ph|EAq}*ZARr_q;NzpTBWdRqBq$9UHcNRk zT3`iMBA;hCl;&S8q<5>QDELg4bEeOG(!MXfO9fwD#klM66KXW@vWh~B4^@JB064RX z7I>2_IaV5lt#mProZo3^a1x(b$z$-4$Q0~bLCdDkG#eUT*4lw>fa#Q*4S3z4ZQulf zjJ3T!BVGXQ4j&|;bm3#6*@oEXk@qo}JCbE)hTO@vIBLXEB}<72Pvow+OsJGg9W}M_ zn~kR3Zl1-+7~toy`4!gS{}|EgU$lKuFnHOO&B$#SL>*%cJktRTxXOO|N>X@Q+bk1m zfqTr*$-0urPYm&JD-u1pX2x?Ds&p3i08GH1$hC|&dAsL0XH@2}8n>qK9k~UGZTMNk zEHo!6ITEcX|m3T#T0nQ`QEdyqOp)YqSK zt^WKW1pz6>n7#4oj&Jp8He_DnZqc;}Lggw=e4|^mDLa$4{7I+7)UZUy@~UPPMn=&r zV_GP%xTw!|0!)6B*%=X3%1BOn{ofm|A^cC*zae+#VLh|V+)X8d*?vvH)VZ|uYaz3v#b zsf!(S&9qlr`#F;_ZftqD=j8z(MGgH*$q=`7i1SpISJ}kC-6xeA>`O>l4k8_d!wZE)6gJ zjCai8MCQ*~^q_6Xe8ZOP9#1kCd5Hro-_ZzX84S5j#Y9?qZWV7MTObyeHGlYdcFntr zc5=Lb)xkut#0}~^LcS_uo#N5b@l{k(S9C#RYgo2;Vx2kS-LkztI-6M~8vF2h-OK^M zo2#Py9@%t**-I}F?e1|451DokOi^MLAA3y(4CtAQU0$6x4Ohp$)~Y$vkY@h!V;pp< zszf$5G1>!ycVX)U(Bt)cGsRPSn>$ycbp{Xlu(U^R#SLYp&);!}$%W^JA@ zOXk7ntsewoT0~Nx~4h{5}<}@D3WtJap4DLoGh# z^{^7K26Xfy$eLo|xFx)t-s6ZSWrYRz^z>TNQHXlX*QiohWe zNlsq;2P?0;R|DGTjFaCR)WYM3OJB8g&6Viw;{KHVI+|!x`}BPvU%f|w>8}&vWW3Zg zW;9K<&&Ec95IvB^XH}I3T)9nq0#EiTYf-61*E#JJrykvN^87E+Rod#KWjbV|HNni|G#@&XsG7et@wiH>dpH;tE*mv4;;vX+hLHuA|hm+_H_LF%7k;EaBT;Y1X z_qAph-MqR=svAGy6XTm054D8dIJLDoU}{fSY1u(sJpqT-_X9D02McU--f1Qjm&ip% z>K@_(rvKC4c?UJQZ4E#462K68l}@PAkt&4Hd#KV0y+foUNQcmb&=HZ|LFrv-qBN-q z(mYBLDT*i{7U1Q0ICs8p=6-kXpC4!5{ZA%)KhMmX*}rG4wfEY4t${e^*KS3j1NR4k z)qXBq8?D4|B7*V+M)&qRuG>2JY&yGnrELWK9HXs3sNUuAI;)(40&+u>-Kihu!8 z?*`3VR|4BQKJijWpzwe4-h((^bHX1^qwrm$z>J|aLJ99xWQlDx#=BGbEvJortwTKD z3VN&t&ktbEKSAkDJDBp4z2G`}&)t)sypY;&)SIow5%R_4=7y1Nk^r442i%=*@IP+eTs%gcxZeri}Rkh8d#@QKdk&-&^O;iIie*V~>wh6Ps@6hLc8~JMM zyXnz&43;YJD5rM99@$tS)e&z!k`ukU9edRR`+q4peE*x8-cD>6i2c5+&#YN?y)QQs zazR|o1#wE~S)^`2`>K;$F#rIRz#j5YjcOxDz>5Jt3#RxO_%PVWU^W1>Nf;$UNr@;i z9O6}RUG^Q^fY>GS*Ty=*$-%^hOiIw!5dQ6&{E=aR*j>h?H-;v+K6W~edT&IV@WW{0 zRfFzn0Ir$GlKO5G=|s!o!cqXQ6h~i6&bR9kpzWePb9(pBa?VeVCARx_u;UHKFPGUa z>Y%bnItUC#ee)m>Sw*S82`&^npAciC**bauZ2r;6lf_FyQk zwST=>MrG9d!79T6C|%yVz@{)L`5n4H{81(g#LJjW!@b16TLK{|IAEtI$$S4~%5qhl z@2&i;HO}?IWT74IlMlD~I1IMj85>sxjyN<2e)!QRNidZP8z$U&F0eG#@LkffgI+<4o0;o1E2+NE9PFwqW)X9>PkaxC9FXc`ox|90i@OikRJ z!;i5eN>PwNv6N;V#oG-BvnHjt$FTK-uRX)-TgY4{HDmG=4Gkg82Bcv5B@hI_TU!vV>E*_XR|(?x95X2**Tyd8@bN#!AEGQ! z{YcRo7s*IM&@mOjnLdv2wiLED#W)564FXA(3c_0+~;ZaMi(H=Q!?!#SvHoJY{ic_sp zGd2nyze69U5x|L4bK%H+f}Wb!nKO%pf*Xl964cz|Icbfnx>-*PnnVNJB`vL&OU7v$ z1DVB?gXE5-5C#G<)4ta&kcae{h`4f9_hKc#+a2OsAP}eh3$ZP*=~2A5?ij0wI3?=I z%H+ruT^am0AIK$g56ve+w(Ybokz;Jj=RHcesMYnCUBz`WF)@8~jx8VU0lQ2VS_scZCIo{l9#U5byqO&_t#_;=lP~e?2}T0vGdGf1+S}-aoQw|GBRpul$J~Eb1-}cV zyXQsl$8ML|TWR-fZy)e7Moud1)SqS>}A0_@ck@0Rh z?U6gglE+k8@{}t_FS77wEL37h^10f4-&9k{$%{6Gx9V0hZ#6WkbfX90iykE|yin_F z&z=Z)Hdl##BtDYKjKOA_J|sBU%_xONO;Gfm2gqU8mS0?79=Xb_$ev@5cg zOi!nPMk@|B03tecEe~-ao19jppJ2kH2oZUqOJ-oa^0dT{IFA~TM?t`W@Z)?wPdlav ziLMkOAT%OeY0zM}?mq8oqUZ`G_k9M)i&TrUAkU_DZQwC$Rj;6`*9GmfxHF9!GPv*?*b zd7u88NV})=N=n8&*+XUFD7o&g-j5@%h7OG>kEP5RyAz2X;7IWJ``Nzi*&bhq;c&** zaK^T<^4rPPV$vfq@mmq<{Dbq{Vnse7YzrcsycJmb4qMtMCCy^(;+>zCiaJ}iZMae6 zG4yMpN2qc7Hzfiko%<)+m3TE@@<|c!DudUCb+m*le!*JhSIt$spyoffOD#8H@?vIN z()Uu!(Z~6)R5i(dxIixQ&!~PYxx{)#dd$$kNc=2G;?n7!QJ|{~ikhr8x%ZhB@P@dL$D&Bb|wm zYy7mtWOGQ1u5%m|r$&K_xCzX!?d(7U#3_IK0Adp_HDyDw+T1=X^08pD!-FbHZFCmE zs)>UuY!?BfsXfg)6gn$rY`5O;(PjixGL7$`AFB03%{7;0HFa$A^ua%Lts=WUs+hFF zsoGrl<45f9ZqeyuYT41;IWRZ-bWLU}yWLn>r0VT4ypJWR??iAOd3*+~%>Y4_>noEV4m$m7nJG zq;9La6%^h|bik3b&ZS*1U(qP~IEFu%Lph;sO_`v;ix!=f{`9vbse`C65~K{ILJy9`q>IyQXS7! zy3{F)0_CueZJ-BPb<(P}6-d-8KiqNb?5g)-t}Bh(<+OCqF8TV_{0B^_!R;MebvK1< za4GizGH&n5q&{0Y_@MK<&)skYNk|LrmmDeoPMY~|bN+_^?3KfBBrlP}s1I*%OCbM7 zPN3CG ztHt)}RQdhV94Rc^70%#HS^XNrIPV8$S@m`q!C@wh%mVTG<)5BCJO1|M5qCWOS&PV2 zN`L0pUtSpRPJWHeQ7fHsj*O^)M}HAf{j_{edJ`iZ3h?ckf<0HW!(QVf?!ws>Bm zN75$LJOzK-^CHvEZm24~zN*l`0R1*cn!89c&YLbfT5w?IEe7@n6^9??fw-*hEZeZI zllYuUzKOf+1ANSm8M5)sXfaT#ld_y3V(*qjy626g2C8EM1ULeAlfjI?IiJisHb`7O zEc|)wQ7u`hjHEseY^A~5)@7JSV=B8|KPYTRywF8vUBvxhv9ZAkHc=D&g6RB=(kf|l z(lKP0gqC$uBrS(jCnA-)x%;2Ld|*_2zKxRj+psd1%#qj2{|hqpz^5aH%}P%LUD%ALP&FGJH_#KVl;I2XnaKjp3~41-;yJ%ZJO zW`a`DMN}lJriR;-9CSHfLF81P2HmW$BdczJp6+S3j@3I`a!Z7Ht79J~ZAbedYPvr! znOR!TEH{>8S3~|V9>f)s2|PbNO(!KMfG@hrQBdhb7#pTyOA?S<{&RHAKz?LZ_%cp74C?|Zt=lMLXL>3)f55&0X)j9L2h&*HANh--u(m>5}KZnVo z4ihy>sMbB7K2(n$ZRH#OsSzvq6Z&F0Hr>#fTcat|pNCpaYXV`BPbH2OX9CJD4NCH- zXFGk7$@mi9wv4CKUX)Q(M=7f>6X3+TscCl5JTV`;-8L3Pqk<VMkOH4J?^juCZL}0u#CVw!Fxhk1K!nm(`C%`^-dsU zg&tu-_`FV(xF>`Do|#H#wS(+b)QIhiF?*1=)h>_F4liNL@RIcFxw3pW=%Aj}1Uoy< zwDi1&yM$NF$2-Iw$?g}~AarazPr~UOA;{53gH+QfcrDeKhLLSgpYbf`M*n`-Y;GAXzkPSms4T-hU53MYt zCW_}k;UR19=Zvppp7ZK9$APkNftA)i?LE#e-!JU<)j5^)pHcgJ^wO|)Xb!pU{R=sk z1MF$N{7V0&F9!hQ>S+ojMrz=E(8w<+?&?i!NbWO23b1Ky5ehx}Rv*N@=9e+^#jTu> zD0c``Lsz2oG{ts&^EoFNQNC4oI}<50I{smy7PbSaoa}JOCV0uF8E~j!t{}n>ZBxmv zk=bookiO$7QcU%0AZAxg5jiKE1lBH*bygm0wRXMi1(tmm8 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 id(total_minutes) ) { + id(turn_off_action).execute(); + } else { + id(tick).execute(); + } diff --git a/heating-upstairs.yaml b/heating-upstairs.yaml new file mode 100644 index 0000000..c982cea --- /dev/null +++ b/heating-upstairs.yaml @@ -0,0 +1,33 @@ +substitutions: + hostname: heating-upstairs + friendly_name: Heating Upstairs + relay_on_action: turn_on + +wifi: + use_address: 192.168.10.17 + +packages: + device: !include devices/sonoff-basic.yaml + + +# Give the user a graphical control over the timeout +# See: https://esphome.io/components/number/template.html +number: + - name: "${friendly_name} Timeout" + id: timeout_length + platform: template + # TODO: maybe it's a better UX to do this in hours and minutes and do the conversion in esphome + unit_of_measurement: minutes + min_value: 10 + # Never want it on for more than 3 hours + # 3*60 = 180 + max_value: 180 + initial_value: 60 + step: 10 + optimistic: true + +script: + - id: turn_on + then: + - delay: !lambda 'return id(timeout_length).state * 60 * 1000;' + - lambda: !lambda id(relay).turn_off(); diff --git a/kitchen.yaml b/kitchen.yaml new file mode 100644 index 0000000..8aab5ba --- /dev/null +++ b/kitchen.yaml @@ -0,0 +1,13 @@ +substitutions: + hostname: kitchen-switch + friendly_name: Kitchen + #touchpad1_action: sonoff_t3_toggle_relay_2 + touchpad2_action: sonoff_t3_toggle_relay_1_and_3 + #touchpad3_action: sonoff_t3_toggle_relay_2 + +wifi: + use_address: 192.168.10.9 + +packages: + device: !include devices/sonoff-t3.yaml + diff --git a/landing-lightswitch.yaml b/landing-lightswitch.yaml new file mode 100644 index 0000000..2ec39f2 --- /dev/null +++ b/landing-lightswitch.yaml @@ -0,0 +1,13 @@ +substitutions: + hostname: landing-switch + friendly_name: Landing Switch + touchpad1_action: sonoff_t3_toggle_relay_2 + touchpad2_action: sonoff_t3_toggle_relay_2 + touchpad3_action: sonoff_t3_toggle_relay_2 + +wifi: + use_address: 192.168.10.4 + +packages: + device: !include devices/sonoff-t3.yaml + diff --git a/lounge-by-garden.yaml b/lounge-by-garden.yaml new file mode 100644 index 0000000..d6ba0fb --- /dev/null +++ b/lounge-by-garden.yaml @@ -0,0 +1,13 @@ +substitutions: + hostname: lounge-by-garden + friendly_name: Lounge 2 + #touchpad1_action: sonoff_t3_toggle_relay_2 + #touchpad2_action: sonoff_t3_toggle_relay_2 + #touchpad3_action: sonoff_t3_toggle_relay_2 + +wifi: + use_address: 192.168.10.8 + +packages: + device: !include devices/sonoff-t3.yaml + diff --git a/lounge-by-hall.yaml b/lounge-by-hall.yaml new file mode 100644 index 0000000..d84a7c7 --- /dev/null +++ b/lounge-by-hall.yaml @@ -0,0 +1,32 @@ +substitutions: + hostname: lounge-by-hall + friendly_name: Lounge 1 + touchpad1_action: toggle_lounge_light + touchpad2_action: toggle_lamp + touchpad3_action: toggle_dining_light + +wifi: + use_address: 192.168.10.7 + +packages: + device: !include devices/sonoff-t3.yaml + +script: + - id: toggle_lounge_light + then: + - homeassistant.service: + service: homeassistant.toggle + data: + entity_id: "light.lounge_light_1_bulb" + - id: toggle_dining_light + then: + - homeassistant.service: + service: homeassistant.toggle + data: + entity_id: "light.lounge_light_2_bulb" + - id: toggle_lamp + then: + - homeassistant.service: + service: homeassistant.toggle + data: + entity_id: "light.lounge_lamp_relay" diff --git a/lounge-lamp.yaml b/lounge-lamp.yaml new file mode 100644 index 0000000..303fd10 --- /dev/null +++ b/lounge-lamp.yaml @@ -0,0 +1,10 @@ +substitutions: + hostname: lounge-lamp + friendly_name: Lounge Lamp + +wifi: + use_address: 192.168.10.13 + +packages: + device: !include devices/sonoff-basic.yaml + diff --git a/lounge-light-1.yaml b/lounge-light-1.yaml new file mode 100644 index 0000000..9fc4fe5 --- /dev/null +++ b/lounge-light-1.yaml @@ -0,0 +1,10 @@ +substitutions: + hostname: lounge-light-1 + friendly_name: Lounge Light 1 + +wifi: + use_address: 192.168.10.19 + +packages: + device: !include devices/athom-bulb.yaml + diff --git a/lounge-light-2.yaml b/lounge-light-2.yaml new file mode 100644 index 0000000..605e834 --- /dev/null +++ b/lounge-light-2.yaml @@ -0,0 +1,10 @@ +substitutions: + hostname: lounge-light-2 + friendly_name: Lounge Light 2 + +wifi: + use_address: 192.168.10.24 + +packages: + device: !include devices/athom-bulb.yaml + diff --git a/man-cave-desk.yaml b/man-cave-desk.yaml new file mode 100644 index 0000000..9cb99ad --- /dev/null +++ b/man-cave-desk.yaml @@ -0,0 +1,10 @@ +substitutions: + hostname: man-cave-switch + friendly_name: Man Cave Desk Switch + +wifi: + use_address: 192.168.10.26 + +packages: + device: !include devices/localbytes-plug.yaml + diff --git a/man-cave-lightswitch.yaml b/man-cave-lightswitch.yaml new file mode 100644 index 0000000..e53263f --- /dev/null +++ b/man-cave-lightswitch.yaml @@ -0,0 +1,10 @@ +substitutions: + hostname: man-cave-switch + friendly_name: Man Cave Switch + +wifi: + use_address: 192.168.10.15 + +packages: + device: !include devices/sonoff-t3.yaml + diff --git a/office-atom-echo.yaml b/office-atom-echo.yaml new file mode 100644 index 0000000..b3f7678 --- /dev/null +++ b/office-atom-echo.yaml @@ -0,0 +1,201 @@ +substitutions: + hostname: office-atom-echo + friendly_name: Office Speaker + +packages: + base: !include common/base.yaml + sensors: !include common/basicSensors.yaml + +esphome: + name: ${hostname} + build_path: ./build/${hostname} + friendly_name: ${friendly_name} + +wifi: + use_address: 192.168.10.28 + +esp32: + board: m5stack-atom + +improv_serial: + +i2s_audio: + i2s_lrclk_pin: GPIO33 + i2s_bclk_pin: GPIO19 + + #microphone: + # - platform: i2s_audio + # id: echo_microphone + # i2s_din_pin: GPIO23 + # adc_type: external + # pdm: true + +speaker: + - platform: i2s_audio + id: echo_speaker + i2s_dout_pin: GPIO22 + dac_type: external + mode: mono + +media_player: + - platform: i2s_audio + id: echo_media + name: None + dac_type: external + i2s_dout_pin: GPIO22 + + + #voice_assistant: + # id: va + # microphone: echo_microphone + # speaker: echo_speaker + # noise_suppression_level: 2 + # auto_gain: 31dBFS + # volume_multiplier: 2.0 + # vad_threshold: 3 + # on_listening: + # - light.turn_on: + # id: led + # blue: 100% + # red: 0% + # green: 0% + # brightness: 100% + # effect: pulse + # on_tts_start: + # - light.turn_on: + # id: led + # blue: 0% + # red: 0% + # green: 100% + # brightness: 100% + # effect: pulse + # on_end: + # - delay: 100ms + # - wait_until: + # not: + # speaker.is_playing: + # - script.execute: reset_led + # on_error: + # - light.turn_on: + # id: led + # blue: 0% + # red: 100% + # green: 0% + # brightness: 100% + # effect: none + # - delay: 1s + # - script.execute: reset_led + # + # on_client_connected: + # - if: + # condition: + # switch.is_on: use_wake_word + # then: + # - voice_assistant.start_continuous: + # - script.execute: reset_led + # on_client_disconnected: + # - if: + # condition: + # switch.is_on: use_wake_word + # then: + # - voice_assistant.stop: + # - light.turn_off: led + +binary_sensor: + - platform: gpio + pin: + number: GPIO39 + inverted: true + name: Button + id: echo_button + #on_click: + # - if: + # condition: + # switch.is_off: use_wake_word + # then: + # - if: + # condition: voice_assistant.is_running + # then: + # - voice_assistant.stop: + # - script.execute: reset_led + # else: + # - voice_assistant.start: + # else: + # - voice_assistant.stop + # - delay: 1s + # - script.execute: reset_led + # - script.wait: reset_led + # - voice_assistant.start_continuous: + +light: + - platform: esp32_rmt_led_strip + id: led + name: light + entity_category: config + pin: GPIO27 + default_transition_length: 0s + chipset: SK6812 + num_leds: 1 + rgb_order: grb + rmt_channel: 0 + effects: + - pulse: + transition_length: 250ms + update_interval: 250ms + + #script: + # - id: reset_led + # then: + # - if: + # condition: + # - switch.is_on: use_wake_word + # - switch.is_on: use_listen_light + # then: + # - light.turn_on: + # id: led + # blue: 100% + # red: 100% + # green: 0% + # brightness: 100% + # effect: none + # else: + # - light.turn_off: led + + #switch: + # - platform: template + # name: Use wake word + # id: use_wake_word + # optimistic: true + # restore_mode: RESTORE_DEFAULT_ON + # entity_category: config + # on_turn_on: + # - lambda: id(va).set_use_wake_word(true); + # - if: + # condition: + # not: + # - voice_assistant.is_running + # then: + # - voice_assistant.start_continuous + # - script.execute: reset_led + # on_turn_off: + # - voice_assistant.stop + # - lambda: id(va).set_use_wake_word(false); + # - script.execute: reset_led + # - platform: template + # name: Use Listen Light + # id: use_listen_light + # optimistic: true + # restore_mode: RESTORE_DEFAULT_ON + # entity_category: config + # on_turn_on: + # - script.execute: reset_led + # on_turn_off: + # - script.execute: reset_led + # + #external_components: + # - source: github://pr#5230 + # components: + # - esp_adf + # refresh: 0s + + #esp_adf: diff --git a/secrets.yaml b/secrets.yaml deleted file mode 100644 index e1c34ad496c137ec8496508cec65091f484a5f8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61 zcmV-D0K)$OM@dveQdv+`06V)|lE5_;=AA4-J8lXzdep~J1APPBZhd=a9kbmn43Yda T