From 7eb81efd933f63dac58a9785923011022e2f79c7 Mon Sep 17 00:00:00 2001 From: root Date: Sat, 23 May 2026 23:53:04 +1200 Subject: [PATCH] additional esphome devices and fixes --- .../integrations/astroweather/dark_icon.png | Bin 49841 -> 38481 bytes .../brands/integrations/astroweather/icon.png | Bin 28356 -> 41078 bytes .cache/brands/integrations/braviatv/icon.png | Bin 3308 -> 7910 bytes .../brands/integrations/brother/dark_logo.png | Bin 0 -> 12137 bytes .../brands/integrations/brother/icon@2x.png | Bin 0 -> 12365 bytes .../integrations/browser_mod/dark_logo.png | Bin 0 -> 1796 bytes .../integrations/ge_home/dark_icon@2x.png | Bin 0 -> 30051 bytes .../brands/integrations/ge_home/dark_logo.png | Bin 0 -> 13918 bytes .cache/brands/integrations/hacs/dark_logo.png | Bin 0 -> 2342 bytes .cache/brands/integrations/ipp/dark_logo.png | Bin 0 -> 11529 bytes .../integrations/ld2410_ble/dark_icon.png | Bin 0 -> 33383 bytes .cache/brands/integrations/lovelace/icon.png | Bin 0 -> 273 bytes .../integrations/mjpeg/dark_icon@2x.png | Bin 0 -> 1701 bytes .../brands/integrations/mjpeg/dark_logo.png | Bin 0 -> 1063 bytes .cache/brands/integrations/mpd/dark_logo.png | Bin 0 -> 26143 bytes .../integrations/nodered/dark_icon@2x.png | Bin 0 -> 57315 bytes .../integrations/openmediavault/dark_icon.png | Bin 1197 -> 930 bytes .../openmediavault/dark_icon@2x.png | Bin 0 -> 2845 bytes .../integrations/openmediavault/dark_logo.png | Bin 0 -> 10072 bytes .../integrations/panasonic_cc/dark_logo.png | Bin 0 -> 8450 bytes .../integrations/waze_travel_time/icon.png | Bin 5478 -> 5943 bytes .../integrations/xiaomi_ble/dark_logo.png | Bin 0 -> 13420 bytes .ha_run.lock | 2 +- automations.yaml | 115 +- automations/quiet_time_settings.yaml | 10 - esphome/.device-builder-peer-link-key.bin | 1 + esphome/.device-builder.json | 732 ++++++++ .../.device-builder.json.lock | 0 esphome/.device-builder.lock | 1 + esphome/common/network_common_esp32.yaml | 130 ++ esphome/common/sntp_common.yaml | 113 +- esphome/esp-ledmatrix1.yaml | 818 +++++++++ ...h.yaml => esp-loungemiddleswitch.yaml.old} | 0 esphome/esp-nspanel1masterbdrm.yaml | 154 ++ esphome/esp-nspanel2lounge.yaml | 316 ++++ esphome/fonts/5x8.bdf | 182 ++ esphome/fonts/5x8.bdf.old | 1470 +++++++++++++++++ esphome/fonts/Eight-Bit-Dragon.ttf | 13 + group/downstairs_flat_lights.yaml | 14 - packages/16a_ev_charging_controls.yaml | 389 +++++ packages/announcement_test.yaml | 23 +- packages/auto_lights_underhouse_entrance.yaml | 64 + packages/auto_lights_underhouse_storage.yaml | 276 ++++ packages/bedroom_1_ikea_air_filter.yaml | 58 +- packages/bedtime_mode_actions.yaml | 45 +- packages/blind_control.yaml | 24 - packages/downstairs_flat_controls.yaml | 47 +- packages/energy_readings.yaml | 35 - packages/ev_charging.yaml | 105 -- packages/free_power_time_actions.yaml | 299 ++++ packages/gas_heater_operation.yaml.old2026 | 19 - packages/lounge_blind_control.yaml | 368 +++++ packages/lounge_lighting_scenes.yaml | 66 +- packages/ms_teams_status.yaml.old | 20 - packages/nspanel_keepawake.yaml | 23 - packages/nspanel_lounge_controller.yaml | 732 ++++++++ .../nspanel_masterbdrm_controller.yaml.old | 52 + packages/outdoor_lighting_control.yaml | 1242 ++++++++++++++ packages/quiet_time.yaml | 123 ++ packages/tts.yaml | 4 - packages/view_road_announcement_router.yaml | 25 + 61 files changed, 7756 insertions(+), 354 deletions(-) create mode 100644 .cache/brands/integrations/brother/dark_logo.png create mode 100644 .cache/brands/integrations/brother/icon@2x.png create mode 100644 .cache/brands/integrations/browser_mod/dark_logo.png create mode 100644 .cache/brands/integrations/ge_home/dark_icon@2x.png create mode 100644 .cache/brands/integrations/ge_home/dark_logo.png create mode 100644 .cache/brands/integrations/hacs/dark_logo.png create mode 100644 .cache/brands/integrations/ipp/dark_logo.png create mode 100644 .cache/brands/integrations/ld2410_ble/dark_icon.png create mode 100644 .cache/brands/integrations/lovelace/icon.png create mode 100644 .cache/brands/integrations/mjpeg/dark_icon@2x.png create mode 100644 .cache/brands/integrations/mjpeg/dark_logo.png create mode 100644 .cache/brands/integrations/mpd/dark_logo.png create mode 100644 .cache/brands/integrations/nodered/dark_icon@2x.png create mode 100644 .cache/brands/integrations/openmediavault/dark_icon@2x.png create mode 100644 .cache/brands/integrations/openmediavault/dark_logo.png create mode 100644 .cache/brands/integrations/panasonic_cc/dark_logo.png create mode 100644 .cache/brands/integrations/xiaomi_ble/dark_logo.png delete mode 100644 automations/quiet_time_settings.yaml create mode 100644 esphome/.device-builder-peer-link-key.bin create mode 100644 esphome/.device-builder.json rename packages/main_bathroom_actions.yaml => esphome/.device-builder.json.lock (100%) create mode 100644 esphome/.device-builder.lock create mode 100644 esphome/common/network_common_esp32.yaml create mode 100644 esphome/esp-ledmatrix1.yaml rename esphome/{esp-loungemiddleswitch.yaml => esp-loungemiddleswitch.yaml.old} (100%) create mode 100644 esphome/esp-nspanel1masterbdrm.yaml create mode 100644 esphome/esp-nspanel2lounge.yaml create mode 100644 esphome/fonts/5x8.bdf create mode 100644 esphome/fonts/5x8.bdf.old create mode 100644 esphome/fonts/Eight-Bit-Dragon.ttf delete mode 100644 group/downstairs_flat_lights.yaml create mode 100644 packages/16a_ev_charging_controls.yaml create mode 100644 packages/auto_lights_underhouse_entrance.yaml create mode 100644 packages/auto_lights_underhouse_storage.yaml delete mode 100644 packages/blind_control.yaml delete mode 100644 packages/energy_readings.yaml delete mode 100644 packages/ev_charging.yaml create mode 100644 packages/free_power_time_actions.yaml delete mode 100644 packages/gas_heater_operation.yaml.old2026 create mode 100644 packages/lounge_blind_control.yaml delete mode 100644 packages/ms_teams_status.yaml.old delete mode 100644 packages/nspanel_keepawake.yaml create mode 100644 packages/nspanel_lounge_controller.yaml create mode 100644 packages/nspanel_masterbdrm_controller.yaml.old create mode 100644 packages/outdoor_lighting_control.yaml create mode 100644 packages/quiet_time.yaml delete mode 100644 packages/tts.yaml diff --git a/.cache/brands/integrations/astroweather/dark_icon.png b/.cache/brands/integrations/astroweather/dark_icon.png index f5b3b28e84158cb3b6c174abc906209779f949ca..33f5493aadff3990a20b5f30890e2a0fd95a4b6e 100644 GIT binary patch literal 38481 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

D=rM2wt=OBu^6>N%W)!8kWS~G|tTDrH4 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%0AgcNG4fLSqSTq#kc?DjHW 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 RgFvQ2JdstEDUmh_{vYZ}cKrYV diff --git a/.cache/brands/integrations/astroweather/icon.png b/.cache/brands/integrations/astroweather/icon.png index 192cef1e74a3a6735a258f16ec8fbf749bbddb64..478ea3ceba3072066525f0573dee8497fce03fc2 100644 GIT binary patch literal 41078 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

-J|swuVnba;BW_eMEwRk?Rnh0 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 C`lQDI literal 28356 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ⅇ~L4WtAephRW@%rPjh(ms% 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 B*n$86 literal 3308 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 RjF^9{RTZ@qYUHdV{tsJKF?9d{ literal 0 HcmV?d00001 diff --git a/.cache/brands/integrations/brother/icon@2x.png b/.cache/brands/integrations/brother/icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..952b865b2c6595cee2c748c3a74e886fa938266d GIT binary patch literal 12365 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 literal 0 HcmV?d00001 diff --git a/.cache/brands/integrations/ge_home/dark_icon@2x.png b/.cache/brands/integrations/ge_home/dark_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..54cad22ea0b5a0a9304593e6cb7b5801c8f894ec GIT binary patch literal 30051 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 QxBvhE07*qoM6N<$g3A+9bN~PV literal 0 HcmV?d00001 diff --git a/.cache/brands/integrations/ge_home/dark_logo.png b/.cache/brands/integrations/ge_home/dark_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9865a36cbd4a6b295a7103b5749603fd15d2726b GIT binary patch literal 13918 zcmd5@Wmg^ zX0ZRtEV#v`|nX;ZRU7|5zcXP*7g%P*CTlP*8%|P*8ZTdEIKl|0?oS6*Z;* z(a-;{DUE!=^56WpJ=K*ppb*hNU#_wrNx=uDyB$?0)FPYSE-@^_OREL)5zPq!A>UAQ8gy`5Sjj{I%kwi^Q)M>-i6+(^k- zRPz3D(=LQp|KDkRlz`^d=dPEQ&$arQJmc5@)lA%r;3P5M2Fl?^Gctov=JEJFJ$^!q zWeW`yB-B3FyfuynwDM4@w^)Y-^@hG}+1vs_mEoSz_!4rH@uwx5Y{~9v{VNoxG}HE* zm~=amrdbGE2mTE#XeoW^rG|8=-}Q7@AQ-6xk+(rF~S5aUUQ%j5=ST3Z)D2 z0gT>hSEWa^e1A0DTgjmy$POB=dR&a2{!_esG==!oU!fW@FS}~FE|!@7t6Do~_Kgwa z9#F6nVNKaeH@2<*!OHO>XBv{F_Xv@biYYNj-<^#Ea(T8D)!A{ad%gJisP#Wn+quQ4 zk%vMXQ-Yr-@GCtN^7+3{XBpO+)mgtUXp`B;=@CE=wD5X}ZbfNUJ@U>uxn{_W$389E z8agfQhmFZK?C77m(JW4>cgy%i{E743(DIyH8{rs(uNj0wLqripZ%LnXYB36{ znKYBX*<=k%T#feOn0~*abFVHFn4Eh|4fPyk&Xu*b{&A^?`L zn5WM#ESA9k(y}n}!f^GtXmt($o<4OHXM?y!AQRpcCYA?_R~(7L0+Y%R+=?;fjDkxP z+dTCx6qI6ykGV}=j>oDRhsnJfUEaU-+e=3_b!x^%(qWigBH_0Dd%P0HmJGJFUue#5 zHP4SBl_Q1qyd%DN^dQn;OP`SqfrTvE6cdkP20E6Z7BBGlmZB*^B)Qih*=l)Xm}IW( z&pTxMb58wN;t$(ggB0YWIXBX^UY?q0*@->MxXxa+NU3q$kJ}jn>fwFIEwixcjJRxT z(WW;v;W9CbP?Hfd0gZ@ZcKl!V6D##%(f~ViOMPEWy0Q&RnBer8FO6n^Y2VIf9nUoV zBa9Pl*mhLRiB*=(Am#BL277!HUefv z4c}NUL#46rOu;iR4d9Ds2SY0~PcAnw-sE4%TX&~@?z_&IOV(J1!L!3MQc*VIg_z0A zhs}`>(cx6V?d&#atOnh}?5J8H5*%0OYQ=V1akhVBffm!$Jp26pXuW2mb8AV7HmYC! zK#tGr&Fos0BdAUZL5IxKq79rib#-PP%e3y;&l$wfA5lZe5esp!!t?YP%dkNdC+c6u z)?q1h7QN-GS>|(ytPv#`V{0AKx|ZV;dD|s)oCmE0^9I$G$EiGqI&-3axEsBAH@aC} zo3ICw^e5C{y|xK__)C8Vy>wYd_K&%6!3!9P4T*(Jy5Q;9aK@WhVXANcF+DO-#m4QL zc`qJoaA!V9GpHb{2@95d33|KE8UEKv9XY2i*m^dar(^&@$Kziw3k*(M!w({(lb&&9 zG99mf9Lfx&U(J2wF_*m{CAXo`-%F-^?kDm>CAcb!|Q zW^Z4D;0p7oIP86sss2AC)*#g0TRDBaKPQ$YW}S zhW}tP+8PM+YLtGi7Y5MZRgt0gFN`_v^@Q3mWd-V_A8zo7p;s ze=VYTfUn^WGG~p9^@+~QA`(S^H#BoRe(&wXBOkG3H~|R9_x5dV2KC}RHUXo@$dnsI zFPUx_rwphhRsM%?8h{b?jAI; z>fgH9^xx-@L^cY8-fl}Q+}@+13C3RS;FPEV_8 zl*^<*p53KAJOSRbE})Fj}1P9d|s^88JFp*5qTo zb6VH%ie7LHtc$x;gL>7OO)Jf~Ppr9?_&1i*-1#q(pfr9DEmVWH{MUbip5HZn+a>sL zh>|wl1LM&+<9(V@jULL0DYe2;o5qzQ0~xGF2262IU=RZ7Gs zz(F|++?@}>M#$Brz&|Y!w}7X7nXsH4BrWPXtWsS@2z_ApvIeY%tz2o1-EU4tl4CfX zZZWR{L~}3H<2yJH&s*kXU##qCv2WJ_rQWU%q8zmXqMHQfc>~F#=c+%+2df6V3El`@ ztY#k#SORLhw1+DP3b!tsT`Cl7HId8(LelYPD0U4xeG{pSNM?XPj`AUTk4GZyEOiN( z<`y|sv*)!zZGUW4ck;$IY4NSqh7;rmX+irk8a30Vy~T&4zYx=M}14+<20)%z8U8U5{>=K8$gUV_Dy;#M5;ai@kVu1d5`aTf~(yqlk)__xBKJP&3h# z$OXy&)}RKNqf>!ROs<{%UvAQ+7$T)p664H#c5`OeM+YDGr$G_lQu*^Lo>y>4GUMJa6E~(tl5t^6GBhua&S% z+w!YMyX`@bE3g4#|1|pCJgWZLYu5)=!lxNRCcJ+Jz!ZAQ|D^^!=ArD}V3Ek8O0;@^ zB#m{zt*K(*Fg*3Dj_9yAR0eSa6&jbez@v|YkVGVO0kT}Wu?{{-cpLo+c!KL?&ep(> zsH(NCBt|0@qvYy05Qv-Zt(1KH^a|g++ zN%oKx{jt&|qH{G(l@;1HMm+)GH{C=+)a7#R<%keEh>_nB6D+r>+Km3q9K;Ajxn=!v z7`MY|4KQ;FW(0cO3co`RYolFuM4rke4TXDgW_b{qTrIA`OI z_9-)yu|&b@3|Of_a8zae1Fq(^1JvMS-bB7gFRA+>ITbv~l-bH&3FQa`r=*N~jD}g%R~PJ0b_4c3U8SPy@}aSQ~SvtSotYdNv?y?mf7<-^dD^#nv7vRm8AB1lL_vQebI8 zXFy6z5GBwCe(D7*ZC6TW;_$6aomLOP#f#lOg5Hch!&lhZuOp$znl{>$Al}cM`@m)y z-7@vX)?o2DLZ3;}T4_r`aw^2I3J6Yy8f5U!3TGqEdOi`VuGy?0D4F z{en^6qtpZJ#*L&-lMmM$JlM6&3JsYWvHu}F;o11@h`y~I(97?FIgY4)wgQMYdne+BnF<~?!D!e3(p}sQUlniIEl`dBb1;gg$GXs%c+-t1{8G*t;gYdJF zSQqaq91yp!@{xGqlouNGD|VBsX2QF`iz%hs`G55|8*U!hPM0xm-wo$vTwIbpDEBso z$xcuhJXfe(3&h6hqF#&E={eBy^wRLBDY+nkK)^e(L`K^o6G@a3)gcl6$-qRPFwi5M za6E=>D^mu*$IJhm(7DXoQCS9lhq92UjTlc{k)~t4qhZ!6CHdQ^Q4ae%sky=jr)758 z-Yt_?RPWM&R8?K5aRlRa=zGpT;}QxdvK`fVnK5=4$zn7uHzo#&4CPyl;`t>&cuR2O zvq+(^6Vv&D8tmF5O`>_olL;FH@?`W(q-SV_`)nFT%LLOodmoXS=e*cU%^&{1-phO# zs@nK-C#MzPv&M9A1#@$kVu(Np_*znNwgxvg9|I zBt&f&eZC~betGrV2Hjp;_9KJTm11a`N}dItj+q#;LooGN^Iqr@9LI+7LZ}n-OZvhX z?i!}F7!HUA--}(@?dT#bWjWRbCVtrAD8SQ=%hT;1gAM2{jRT4)(a^b8JS6~=gdTHG zl}YAB8hybrf94wT5m@S*LWW7*5QI<(VazXdi?;_dR4j+dbpH$4E#ymtxdiPGH7>fa zbPQfhj&jG8CQXhiu=s$#_bbY9K!W%g>th{b`P}D+W8i-Z>nf!LYTPFDXx>#Z?Y&u; zr({wJU4oF9Py&d+0$znG2hw|p%xn<#Ev#{nzwd;ex3Ascbxxj$S5MiA7(Qs4LNW5N zso9XJ6~=;?59oY3caI+b$KmM0?Pwhaf7=&4DvbeZw^#iy(d8Q5S|yK0%3FbHDDW}H z4@!H)VIO0U-Z$b{tAkq1^diX-Fqsk4a(7D}CGi{Ta$~kAzj97!o&Fm=3VnefzEzOb z12GrSid|nH%<{9z&klfRstL(2X~_nU(sKfFb>ZG2V|!^w6zPEiPW1Yrfld}pDXm++ z@ypjwCk1ihu~KP_UyLJlfANs6r^SOiE-j@qQo&cZv?uZCM|k5M{(LeH@O`51kf4yo z)tDRF>GFqiuo1`$<@`JvhrBI1)&(oR_HzibM&YHWnvT@d(T3M7)jM-YAdG1ln>uXw zqh`fOuC?;u(QP5#+^%FON-ROUD;9uyB>-5VhOU7?$<7Did zEqnJ8`tG;N;esB{mP>TRwxP0$bjH@F5S^T0WSb__xH*XpD!{8!3i#sj%Md$5cOr)>9q^t6BA++c@)QqO}K=rnixxj zvN+jeWzk(Bf&GnHJVW_*_^LGB;6E#?nDI-W1Rxgtp2n=KU}m5HOAU#-sas(S4E9qE(Lr2F*{FsJdArCfWse_Jv6B71hYUI zVjDWAd)v@f2IU+^*89bacG@}o=z-V5Gr!6bYXGccq1BYHTaV2m*DxbGGp9~JH|<2a z~_cVQd;psM1t?5^^wN&+M-|t)h8shK3>$kRPmo9BUA*oN71ZA_xmP@mM+VnoTnKAv5FW?F!5I#y9{Wz| z>tWWG0jM3( zwTi-x;r073IyW$s_LbvQU7f4(?o$IGV!P=u-m%hP6MZ(k-c;3!-F5tCs-Jc)24Y<^05mZ&wo%tutKVTn`f6*-jPq3W>H z29*8Kt}Hv>=l;louolsg5P%-Y5)SOLC=yGSetT+ycmol8Ie`JEdJcW?HFb$><)uNx zv&5oakMq$t=;Fo1&jVZ24%Ek8jINuUU;x~fAWrvDp*+4SISm_9FJ4x9Sz=Z;7B8-2 zedqUt)aJYiq31g>Oc2jQr>wN*?-jUj!PGz_TYdY!Xm@QAP&3M${}1T?KZj^NndCr2 z#ND$F-g0jKO{88qN)-+x6P$g zusMFVqfeI#$(b~ss~F9CCrTDVr49^8lJ+U<1t9OJSl5TD;-Q9&voNH6W>g z6X+S4Xq>vnhn6yDm11ttI-FpHU+=%|iJB9O3x4$Y%9_fmpwx|S!S>?{n~GOtWm8`O zRb=$}^Pf+P&o|fie`Xu+K=0!zMOc$!19~=QfR);cwM)N(NkqNFSskf6M@o0Fz;DGQ zFBX&2v9bEzBNDRZYS~72Lq9DQ`ia`4lk!0Yiy9DE+s3Dcm>c}qmU;p9iceR-wCRTI zs4?*0G4SwS?D_8wl{_Y>4uxmF#1-Z`2bRd~hqFJ!{NRRsJ5!eK~zCJ$W6yx?cazj#7Xl$+|I_;3&o9Oz#I+eG;}z z4?cRBA6s`H_>Ug%fT$b%*XEyluMUB~j>R0yQa6(FprhtGppBjLl>$-DRgjCZq#Q5P z5MVbz3>Bh$Ew1W-?~G5&B8$t!!cw=mQf#p|aQLuZuZHh7M*&|-ON}Kwm}epCV;F}_ z)m_QIt{A=pV2%VRf1^^j9qg^awN8Q_I=>o!cmL%l`BI1;!Cvq}x@ z!GpNfQ9g3x*|B_zKp|Tv-^XyXq)Um^;y*(TE@)i`ebV#k)qd!k7qGC#=%5UKH=4Tv z{?Afy-6?Z%>wvApc$SPI!0J(&=*gWYj{ZBq?>Grnie@#!3h!}!QE}%{e{^Ct&fx58 zuq@|8oeb-A7EcFZMpx?B+tW?dFkaoR!$-LTR>91&C0#CMZ08ahAEPcKseB)_mTL43?2#{V#;R432Q*A zL*wlavni!QD-4Ys{&4{*hDqNmatFHZhuNqiO9W6w{LL5H$7i<+Jh=pw1ka{y6+Y!O zWP+Q@otkw~nYQJUv*jAc$G%~WGK*;x6{P5sL#&$1?<<+J<=io9sSo2gZB*U< zIxX?;I~0u={|D2g4NHz3lEkbsSA82N#kVrIq*3Z7GC~5>@I8tYb|uIo{R8^;Z8kGq zJE7uj#oz$GKMVFhhsqsl{-X*Ny+|K#eH7J-YQ91hu$VP%$0Z~Q;B3o#h zq(%;o)!3hBNKJn*e5TuvKW!C`)K?7Cc9)zgC)oF7Ql>{}f&}JB%TO`eel$}T7TZfF z1VyDn46e0$i6cz(xy7KiX=fqF<7cj{+SX z0fbz^>RV^K@9ojTJ3fcQG$uQB678TP_^v=m$~7&)7*Ut&l@XbJeL2rtEoNzPCui@s zJ%1`cQD6Vnb3-xDV7(~hqx`(vN${xsynjuXI#Yd4Hl^t}v+o@H{YfI1j;MuE)Jnv) z=Zx9+Ba}cT1eFIiY)4z1+Fw*fEQH3Ea|E@)>mnT|;6x_)gzr+e$y z$l$ELX{+^O$kz>%`K0HBui@CGne}F|bcl2zl+&h>>o|D(SMH#*BnGXD+{Jt>tozLL zwtzF$Sv!_EqoyK(R^)1j&6{hw+h8Hp3y8nf`&@Ab=G9ZRgjY`17K#R7zvIGvcZo!k z*{n~y6>Es<4q$%eM4!OJ=Cl{7+<6F}}dqAXkRb|z>{NVeE*F{+5) z2C&W<>qu|4B*Ut-pS!CDGbJ-ov>jvyfa5flz3B@V?UdvW=Z$S;FoT(!B1a`ENiI{B zcVeI{wZI%tRUMe_;p(XP($5aGT!H=%y6?>oDTpEhMKf_+M%uBh7#oFVEq*Co1t+g~ zHhLJ9eqn;e`Ajtwgl}SQy$^X%YIt3pw;Wx+G1yhpTS$scTkH21ET2`amezCRB8`EM zxu{aGv%vm^Q8{cS2x^GGc_MH@`DI)XH5~lPqbl_`hK?Swl$e)MSDlrYofb>7lGp=V z{cg-uqe%?gk%sBS-qfy#3Z{};VF%P;fsmc%9aDVg4p;kcaLz(Nbv-_#YyIcc^*#t0_xm@N`sOrzQk_=a3Yu|hAdSx_5 zEaz|I8tL|I&R|5-NnH(VJ1*ru3Qr9iju${iCcVX-*>7^rpcxF-cP`u4Lkr;_S{1`v z?fW6jRpIPoB!r||EhNQKS*fCA!Ws`_n2A6|%B?<^W&C0UYQ(kqe({{lr ztmD7@?pn1aOSZ$`rW%SVBO|B_Tk2ye8#ZdbrIR783J-2h{p98z41@`3BqO>gJxiXH zfnJ`@=7vJ-!;FOdXPwwW(Z67SDh55i@7=)rtv=q&{$&vQRxD+A7ZJqw_uNGohB>!mfZ{(Ztwv9vM zUu2KSVqK7Y#-FgBHQAnC6^$wZpcw5hNa@oYg+M%GG}Nnml#sJZw|K^ zTP}m*x|YULjX(~(qr8+*b_&I$Bff~EA_uL!BcjArSzU4pZ*2hLKF#?VbvMdq>_si? z)Gso6GX#e{+M)l(uuNjiOlO&6V@hJ0+tBW8x!u=}zIowt%8R}Eiubo(S;`Sin>pe` z#Fw1KN>wtbIi$xWQmC%f{T%`?OK&LKt1x5XJ=roWD8a}qf&x7XCRrq$`zt#s>D^K4 zH;_J;_q!p}atcZ+j7{P_^G9XZIDZg-u%4#t;jP>HX_c48c8E8<+Kv8*huAhmY$el4 zjnKfgFEbc&my#oTJ&Gw3v>P{rcx0fwpG5Zy(X#@8GyW9P5+-5uL283)q9OATi`TE9 zZ9b^*B)DvQchz0h`1N#|r{NrxEA~IAvYBVrk_23kWD;e;jEbe;uLwT>jX~7c-@z|b zE$VBB3c8P{RZTMIU;og^_o?t1$jB;k1h628nf^D+Yan*M@^tx;6(0*J^FJ(4hrr-h z`868oL)ZBO!agT@mT08S$c2;1-J`=!ee1^gjZ6Qt-TT~aw;!b4Whpg~&p-u<$)n)k zmEX+$vUX5k)l&qiq?ncc2O@dNzH0IS@)tVQWkpaAeCryb;=|eMvFxbyY=$81ayRM) z!-HIMo|l%b=WQ{Jp1+E8FQV*bx}5)z1$mx49&px5Sv@H3!!~sDA&N{lkCsw=2CGg> zjVjZ4cXAp{V61Q3C6GygNWYpxpz?sHEtzg$Ixbg3=&M){9~rsTAh?#PQeiU8!Y9%c zX~3y=S6otC+1-kw$Yc(hwXA$@J`#8U9brAhn!{I0>*a68B5Bo+jn2c2WY-^*i8S5M z?JKXXz+50ZHr{cCmK-STYXK!ObDh+yFN?Jc@AsKOefYcJp2{?#u|v0XB%Kl3r1It$ z<~*Hw1Tn1iI3wNxgkZX|>MY7B_vF2sj-v%?Oo!v>_3tWYTXo^w&2TV>lbIznSvN^V zE=2CA@Ffy2V<$*ye1RfG#Df*dzzvjwhkXi zGA6za)!r3F19#yTd|*DzfAaW1Ggj3+AevU76!0eg- z)Jr)bFjtxuIyGQY--OE&(GjouD(kNep~d)v%S?- z@h+eQ*_O;IF+Oz2&Oo0W1tRp$8aCNAnHNK^-9_1g4qm$LE5>}S*e9fN9!o3?ggNX5 z@rc<03K>8IB#nrq;)VmmYkJ(zWbU)!#5nepchhD-zl6!9m~}RLPf!B#3aPf1L+4Wa zq-FQ0xnrp?>ZR(uR?AApXT${@^J-b|a7Q!n18UH%Q>S?>$P17S z5C5BSVp0e+Kz%&E%=fDwWRt!kJ&Qx)xtgQEQXR~2fBzc9If?HZqUImF)WJ_I^Kga= zZ;-aJPfoGzyCBk@UMbKql%7dqf6e@t#aBY={w+IqsbW>rRnnJK@?J`cQZU#IQHgHH zy82BA!62oi*fVz=V;)Y3TE_M{W0Q32L(2s-1d3DN``!5^2gom3Ft%8>*1yMmk{*0b zGi@c*=%(YWZ1NG3U2dNo(};hg?NFQLx1qH<7F5EvpLss1^-&~i7;u&sWnwn$yY)Kr zY=VWb)0m_XA)TkTD%Zi;=oH_zF%?|jY=1Cc&K0fg0hZc#Z~unOfJ3o_CIY%O4MmfB z2r@SuTJ}0vquf@l{e)oIO$Ywo?9qjQ8Z;vhWWt`~0+THXokw=Hx z|7njaZKV-S$iw)v8Gh=ue|s{%#F5sXnvUS2e|o3YWDHTs%WJjU8cGt4kXImBS|jD` zHpeOuvvnCRoQ+w(Ba+S5sWxLE;{eG#NaeEKZTKXTTgY|b-(ht7C$fp4^ab|4{Prc) zLsEcm!-K4qroFX8)BPN+8O(kQ^;7%m(i{@4D<$bLpO&kq==#z@zN5u}=Lr;y_vb=6+yGCT!($2~l?jQc2Mda2vFLQVb2Ck!C#4#H;+gV z2j~5sgp5xS!DKuqd~>=gY=+jor6aO*6yahG!LlrgP~Z@ps?T&4=SUBN|LnwdA~Glp z?X{&1nSjYpfg3X5?z6Cpy?$SeiXp-tQRrG`^6U9$Js#qk>`?SR2Elq+rvKItPu=oY zv{?tLl3U4OBBiP_E*%bG?hsf!QY7O31{EG0jFA~Aze%g~)F z(F@K4#2c&W zl4>uS#uc~fq!#CS^IyA!1LNC#^-iVKf%{kzVN+<$=RfE!Gm`@%X# z7cQQ_g@wx^Ryq?vYnaX0wr{Iq@tF7Km;o}?f4YY(*uX!XcvmO8l<$PwhQWVnx8Y;E zfP(pSpT=c~q?@8EOIaknm_%i&$A^EzdBl~fQtra(?)#NfNeub^z=AkfYN$#9avunl z=dPhP*91Xxn-cl(4ej^E^)UlX$%QT}z9`asg?85zgxGyh(8DmiVQ~;w%l#;Aij|gI zd3$()Km@c6kAmq>L7C-WOmcI0c^VjMes}rzi-z>`!S#4OFu7)RbKE}_aD8#?28Mru zMybqDf8*g>@b>m|RHazubfC5umJ3~0T2?+>`{|u`1-dO;XPY@0APYkVkQ)}$D8_Ma zCyG&)=53T@nS{}`(+a+!EFwF?-QUiBrz-N413pX0#2gUj5le47l}(=EAVkgAc}^Ti z&qP1;KOoU()445R*Z1EbKgoZRF%`Zyha8g*ptTLC5RB67@-8{BQSe1aW}i*n^6#LF zHMvvF-yEx?AW-P+OU<;t*h#)tSI-h7VnTCK!i6Va#B0sqTlmJ)1WBn=(r5RZ$^=$l z_k{y8#0Jyq;Y`M_Zef&%Oq~C66f+@)@6c*;3}=dJx^Wn~>iwTxD$#Uceb8HI_0?s6*L!>rjh#FZ!M+%a)<9&IPd?s;EBW(-Q+Sech-QQckCU( zvNagcAK82RM9i>_@^tFUG_cBE2SF1g~*PPoKfGn;c~kwkGwH&H4Jcn$|7w2kMz z3q}yyVI$L$L>8KjIipJvul(3`Hltx&A^&~x$D2dtauBwv7S83+`Ll$R+4O2v8K7Xu z6rs?ngX7`oe@6401D9#0B@JJ65Dcu)Q~PZvIzMOwF%9!WUA05Mf7t#*(m7dgDYkt9qwFH5xHLpBn{trU}yx#x- literal 0 HcmV?d00001 diff --git a/.cache/brands/integrations/hacs/dark_logo.png b/.cache/brands/integrations/hacs/dark_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..cffa3109517dc2640c3acb4798e29e0f5365017c GIT binary patch literal 2342 zcma);XHZj#7RM712m!GnDptzUHfu)#SB)4tLg=7akuHc>(0~Oo8bw5JZgaIF@(m2nx~M~U#K-x+&GE!&Y_`ApiQN?VG+kb z2Slv`9IAk8KcGPXTbP1ivQZHGDMl@r;_N=@g=VO49{nPMpL9#lb0DW`;FlCTS_^y} zg0uRhZ+^lsCUdC<=3s1AidiwmzV%@31oGD~>{tazP}w|;%}B8k5OZe%ZY;pR0kp0Z ze;Y#ze!`zcaQy`0R0W)@1CzTY4>}|hb>~agl97S^arFZy}Api?& z0#Db2_u3?9o4_b86wm+)#pt92o04D^BM6-@VNW8l?ULvH(r3L==W3vT9{n^7hjXBd z%}^v4y3ztAc1ifZ&`Zrw`3NG0v3#M_`#bQoS2_V19Gc!Eot9z{DvRbpABNy@2)n_9eCols z1MnDxJ?fP3XVCT;G>8q_RRUeJ=s6BVsSw9^NB~4;TPaTHl$>bU zrx^RrKcJk{ zYHmc>LFGp6blo>g=NP2MVaFHS$1?l`N}Zq8L?smk)3Y0<=&AoDFT>HIlsZq%ma;ax z)Vr1=Aua)HX{N-Xb(Q#kK?$YiE6|Q}ob*!h^N05=p_m=Hy3yZHFZmUX{3yCpb$*w@ z2Yk6PvGBmV4D)k!f9M+|dfx8xuq}`7($3Y${$%m$kNonNt#YhO$p*&7@`a?D;+C|W z4)qU~hP#M`{_16Ng@N}D9ekY`zL#q2v{@lHwBh2xSFzzoskY9Wm9tAeChjRw%V59g z+jRl3F5f#c|A=PtlU7CQTY@Fl7G@kzTK%cEF>S_7pna@*;L~^@wX`A&dNGH?KJ;w`>9p+ zWO>#yeuPpO?*GE%HhzQl>(p6drFu^1Rc}AMUV%}LXRrSi1qSCo_Y;&VmFhrRh0)B@ z+3lGECliYDDo<)RVdUz-vXn^rat`?Tit$QDWoD^eFHO8Z#DC6cnn~(RkBRUX@lrD1~}ToXOr0dDegnh|~yv>gc?V8)#iUnUE$TmR_MAoUI9sG6Adx7pYQ z(DbsKa^Yi#KSd#AF3!t)FmieQv*w(m*YH0NU&}lCo?L@Ff4iIg-b!ZRn-jC*WQt-? zN*(z5CSIdw%64*}g}%gxaiu>iW|R?xw`?vY4X^*z(z)aybi>R{Uuix^6;QdxjoK!E|#~O)Zed{`M5stq(!f(ls56q3pPs5WZqPL!HlPpT! z-C(<_IQ#I8uoVO53Gbt9d2QaTl?ud@W=$zZtlmJUu%%zDyta|nsMErqFgY)WFIuas zZguohv{#C{Z)kWUR+$+0&i&0#Tz|98CDTRF``dc3$y1wbd?<&vJgDs1jt^3~(ggWG zEz8E2s=2I=POsbK>szLDc%|x6o7|-@ekt7YSj{sfdgv&wSQMV9vejJp-ENC>$C>W& zw^iF|sk%N3?jJa(Sjy9bSl*}YiOD4=wmS8(Z55!I)$}#4UA4l*mAxCiJL)LD{%*vr z4#IUyE9`}Ne=43)_VMcNr>6)KZSgdN9>s^DYwtK(nIs58N)2aajbO)cc+dGw93YTV)wk*dbWiMdClauuFu+JV{ryL(RJdTZ|#zH>BO zE->n4oV%mEPvWimGtewvE({IO~#? z=&b}2UHt(gJ}rIZ46274f0q3`fvQU;($5yX$l>gh8DFR9!+*twR9l)sTRft1v$wM% zGO81zG^<){^twOFR}EC#hcgNH7MUE-BGmJ23aV4b1Hm>eQYy`eviA5i$(69_EMbbS z8|9^Wht7R)DMmvlc$#$j;DD%fu(7?HZ>kl}(}7B~#>Iq< tXF8zZ6PS?f;hEXU-Fb-jzi<~Uqj(U~FEo?4FZ@3^8w&@@Tk{h){|2Hf2e|+M literal 0 HcmV?d00001 diff --git a/.cache/brands/integrations/ipp/dark_logo.png b/.cache/brands/integrations/ipp/dark_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..27877b65f7a66113c00bf4a32d77d07ed3b84d71 GIT binary patch literal 11529 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

X&vc=-2ZWNU+Ebt(dl-P zI0wLsO%!r;*lBl4^4=fvrigqijQ8de0)R9}jw}V9@f;}lM4JXEQa{nt1_uDs?IMBm zkjUpuhHeWCM}h7DpRt7!;z9!#=cGPd-%~qXQeT_{E0z7X50xMoPB_R?i%896zQ7wr|N#{|LqLc`|pRJ+Q;MT3W z>Kl2I7%`aF`;>{u6D7Pe0Jn{;5tBv6+Ye|6;o%#=qO_9-|Nx#f!I1A z-a53~r%@_WWjCcbZm=-We;1lI^h|~a>8Xeg$+2w^5W+1Td^e;)7A`aX{m zx||SSE#IEyOaz<>dEk5mFp0)BFx;sxu$BfFXK|s4xtd{exV)0UwJG}Bcw#zIqM(}x z2tZI41(+0|GHLhnJ2E7jD#If&>F@VNyGxrL(vaBdFg6tVYjWk#p#$Nj&XN$U2~i@N zs)@ADG60DG0^KunU$2N(9dmUoHnB8|i}^NN6{Q3eD26Nv;<@yup0WUvp88Q3B^;fR zgBZ6wk`hyb$-OgR)@XfCV}LoOogTAH`vb;_pqQpXFgFYwP=VWVXqhT5=nMiN|FJ1h zi37ZtulQ-XmrC4Y^ zwQW5n@S!5#3}IBDSS0|j&!ws0h0X#1sG!B4XBJ;vnq%s}wjdXpj_&DY{gyPQb0H}? zBLTn_#sV!-!J~gN#ixse4u3@Og#sQ16bT6#(OzFXY%>NP?a^i~Ck!+1XI)f?a;dq_ zvOh~3 zt{^yz;vhyKJ6KStPu$iXr3zX~{_PX>*%P(Zq3%eG(s3P^9})nsADRLTOtB0QvlYzN zueRjdtMc`W&={!ZRxNwdQUA+M03d}Fk+uhZH{NYW#lSNjZZdcayakb%Ec6WE9H_X& zLyN!0@*IziZ(lBbwW&UNtnO~oU?h|S4k8>|w7TY}+CyS0M*!3Jn;wq66|OJH+soYL zFV8ZsUjmm?th~p|@{A_u;9z;4K>Y+blv4Z*6j63D#2w*0#k_ia9FSD-ZorrzBFNUE zs5&@<{XUxx9_`YX8|vN`>yBb6g@VU6A}Qdsx=2hR01VrsNHnWrv56}e9DAG1c^9MX^4SznW$y32L~j?H|-9! zj!1pEK@Zw&QQq%QusP&zOW+%xPJwuu0N~ZtD6vUP3%GhfXLi3?5mJKarL#Hl6bz1D z9rbhG7e??X(s~h@lU!1v0=eR-gvN73@maqom#46|(6G`1d*I#QrVrQD-7U4(XIJe= zQxtg_omw}cYAXa_5~&C$xx-;KUpe`%`?i#hM~* zK4VoWCf&wCM5k*6INbp7zm$X~cimCpjZ0e3!`+p@%hBt{SaKQU8O6#(8m3~%kzB^h zz(#m6-77wukx)4X1aYj4e&(Fp=2kFH*AmX}T5u*oIX~2U-uTdk86f6Bf{uSOMF0py zUp(c@$W%bAD)q~W?RM$ThWh+5-QQL_J$|Do?B0Ix(-kvtN&ygb{D3I&FwJ7_4{yrV zc~la-U>Wyt#)%XevbOX+$~aDCzfbulIz!PNFmd-sq!h{}D+EheTGsjPtRI#z_ zR}ZpJAL|Sc1&YFK6hx;?7&xT>u-zDd1mf1ReD|t+V?{R03lK!yl-M6| z7|O;TZFDp#FwqZE>&d1_@8JlDDhV#ma?h<(0s(14A~~)Ah6Pe#Do+VM-0gFyByoL1 z<-8@Zv|cT7?B#qN^9_w6&KN--LHr$8_!MA3?y%qx8pK(6SWE&bBMv=#uuUJVsn4IN z-q5yn7&uL?a;FXeLB|h4^L4y)CDD2w&HT*O5UDs{JX^2RD5Kr3(B!_Qw*%ViahKm4 zQZE(55z{dVg6-qEg*17lSB|HtlpuAXBy+)%1jALDn0G?dDpRBxjA3dSu2{5n6QwXO zR4?l*>kZX1<3W!Mb9L}mV`j;F{JVd!B<*3~j$;&%A!QE(8fUa@nE?33AMa_AfIfMY zJ=r4_Mi`tT44ghou=&9%iMTi?U%w>3dsSYXWwu9=wW9(j2Ukdrb`=@MM(p-zmxD|6 zCN?{&-Q`}8NF*|B5*XuT0O>UM`Xa-WBtl$#t->4*z_=P_=AH&Wb_|h@6d^;*yTc?C zT#w-gMck^AP_wE@pF4#)cI+b)n_n*@5g>R%kK@sv8m9(~RWa}3H2zBP^Iu=UY#t=^ z=_B>^F7-y%lTV3L6GVTSMgY?%xegWIy(aa>TFw{Y%TTz2A{u4f2X{x@&uP7f9`T>- z({Mzw!AQa};vhIl5$2SSZ4YkGmW`31Btfe#mS(w)#!_csZtsyp5-uOBc=?e0p$uBg z5Yfful1GE38IEXMYNA%LQZ*om3gdtSMl?{+p@wAF%p~RGbBI|rZ8QG)J@ue1x&u;* z;h~5#rqQds9QWxP0cvG@dqw`vb*a0bN=Zmhz0Xbk@i@QN7i(?ScxZLUexH$$W|XR& z0xW4-J*JeALY+5D@w|&wq9AEAhJ4K)TxffJg45Z{oVa6OQHfYXPa$#=MN1jw#JAr^ zcf{@t)kG}JU}c`&KxV4$I!wKG6Np;I;uFQiAw!Du(q6+#>e|0>zK&nqSD!wjc2`I{ zh8hj)D;+a%IsjmYUBc1~{@oS%&Z=B(pdbH2V zK11;&g1rfeV`cz?<4s@*7jPi)g%Zf?6K5d&2A3g2_~9bF*?*wew#7SB908BUXG&K@ zSt^D?bcN`p92vaUwqwph6U_=t9VaAsQN!e7pCLf_3S1eI529FME0nLyiQl~;wfOPL zBRv$5c@@6Js~tD<>I1-Xk`mmFy?r^+3ZF}}B9X|H<2s&~?kOX&(-m7C=62TFtmNK4 zpixT34kf)^*4BsRWTe-$kc{SShUMlF>|)ZOg@AAoFD^?^92Nt|>qC$W7e)|*J?V$r zxqTs!hJ;D|d^REdMjI9A{c?_h*_wty9_vh`3cf%#kHbVGt{O*bI^6Lua;1e@nLDO( zqSo5%Ov>-fAb52#@TvoV$ZGl*n)uD{2>el>uNsbRuzS4nKZV-dbX}HV8Zy(~sawkSU?L2T$t|_Te5iQ)BC+H@w8tp=zXmOKFdvo42%##cz6Wbk7NVKs=5cRSH-mj z{s8p~KK?rE46I^T9bYkeHUVI{#!8~CysYr~_Nvr*;lh$|g1{8l8K*=Wdt$B4p6*|) zXYDR!%F`%Bh!XVF@8#EUUqqLLAVgD!cy2y)^Co#_#%z{yLZP5obIO|tqlZ9*v`7mS zVCSk6JRru`AAqq2*h8CPE8YM*`Ak78J*_zvt%em0oSMjFVoHYq6(oZYiePK7s`};< zN(rC%Ob@VKF(PhxtU=(60)WUU`^D7@@<+GW+LcKAm4TC5a|JTR-QHH0K76RzeYLSq zrjGAQCx07>ycc&I4q{%%k|0UjBLkimfkLWXd4!rETa=wqA_4V-Z@xC2{w zWQUnJ#eoMgFBFXowj2Z^9t!Sl=?{XHIS!a^HA#Pb2?J7cwk_+{IyTJN!f>xx>L?{V z4%EsrQ{v9LYWKt_GsXcN6$57v0G73=lyG$c|M{)tY6~SPPR{U0a&NoK8oCc2s;!P1 zjK+BV$rKbmh8cgAi__cB@ZFn3QuDOfpIY< z5^#w(+m$Qlj6E2!>0`5#X{x=k$P;G(K2NZccxQ4N`V4G5m^nyTa6Rfs|TqQ#A z|AYiM4@LZC_LUwDM5ixSTe|-i^|B47lNK}PN?d7URfanNw?wut75Rr{$ytSnHes=3GNyoq9M8dAbFk`Q^yBqY;BTfCPJ0#CufAey5 zhzQXo#8b+~rvf(u*Ca6Rfrt?qwj3!tIE{Dhh}ss`R*I^{;lzcp$vr?Qj@;m!St{b> zi8IRXx$I!TykciSgA}XtvelqU0?Psgkb#~ud01SYyGvbZfrK1o>NgK*r;Ah(K+p1A zJWBu|f}Ol%UjFV)`PS;m`2JWaA^IsBwmyEO-oLMQd!$n$@vK#N5zJMVza@){z)@g) zO(KfV7KH?m*+(KWY`HnIc|zcOJUfIKhbA8&hjI6znCK>ZR!8@qYE|A|8fn>4zeR%N zn(Zz-c<=X=4zyUBrQCBHUO7wO*DJL`LI@uMkl@fVcxKj8`Ga{ETt~2$6L+qM$P(Nl?m3x)91OT=`&I?DwLM}q00=+Zr8({8rd@rkwd;7S zp{H7~&;64R!NnKt%83SMq; zLm=w%gAnXhqQT@4Zb24=h;JEk6f7-=)@$0pKqgQ;uQ~=PWlD`Qxin+E zC(Mf%SyZ?VjmAF@5HN6iSq?MN8L$&|e?)xB+Yt(B+5un*y-{HYlJ8teW~%vDI4g-UXng=8TXm2!y>j&9CAm0*N{J*_ zh-4me(Bj6$=_-O7so?l#J#EJ*69;|LVKk!*u)iY}F)+OV2$7BTGTyz)vvw{ukMHLb zdFKx}EQ9{}Zl>MZ2B~*nIUXYwM)WYO2SuVMmLko=Z=od+qb79rp%Eep0R`~*ARAjE z9a>B^pF@}*rPv|+TZET5Y+NE0E+O5khYj3}9NyOVH4@aDEAsL@hnp#P(clwEAPHLt9Ix+}Qtb8FvFH8!R@dp7 z<`c^#QR_oJzz#QP6(-hzKC&)c`|=I`7z0!2;tMF z%Qr_-NOD#JVdY>;wa!+s*TWa<%nMy<@mk+O|4&XWG^Sp2XU0PpBu`Q=zIQFz?^Ab( ztqzet8NcGR0)UJMIkeJ~!y2!&P%Rn%{$uk#fY|Bg)c-);-B82K=sHi3g3mfx?f^~) z>PPv|haLV~QS1$BYEo1e0Z$0_Ub{2E3o4$7-2%n54-~Fe92m%8#v&w^Rttn^Uf8Rf z;cW%xOqS;qIc!VI-fth6a2k1SfhS;<5{G%Y#pC(pX_O=`&676xD576KU~^5TguoeK zfqZE1LR09$R7ZG~rBK90$Fz1q5eH)Hxx9aQFT1zJ7xu*e{1{L|1c5WK#V|BYBK(D? zn#6@UMr0NW_Oe0><*}hbT9`~Uf!iTsgu&Im9T3_vDC z28e(mW3;%M0Wgky5i45@>8RfU<7g#{Y<0x!%{y0cdl_>z^hWG0_u-n3aj`3JBM%?F zx2dyqV-fQ;+hqg>#!StV8m)Hs-sAwfinCjA^BWyCtczjCa2wHqgdRG2_m+7_<4uPv=U zZD9uAxypm{YD>=5p~29q%Tfu0krubSnGdNFy%CvtI_hPF!7W&|oi}TEFmBtdXrm`n zf3u2&u|#**(F!g`-L~}me_oo?2 zi5JeN0kK;=_}|kE*+dj39xRtN(Qqd^Q)LowR79mrd(*CAY&y@!3Gz*aK?fH;15w;VKuyl!N>Bfw#o3%RFc+6-)fNN zS39}lQmGIU*%`18sf0=-+i)a6AVeL1f&VY_i;MYu0YL*6lTJ}{Hke{OU>+v;fGIk_;P+z*jVJSc^yqC}#S z&*NE5M7_c@kz8pp!Y|H3^SHd$d|lK^$W2Jkd{HygC`YU85Ar#=y0p`!c9-*MX6BdX zjfe^sU=&xjoAkbh1BTbwld0=2#v|2SO)NE$$g$R1W?Pz-<%C8~vgOu-pXx!I5=qw= zP%oQL=g>G7GEF6knHtM}jVdxF_IvcOJ$k&8b%%7hg*Pr?x2GQODuQ&P%JcxhcL2D) zAm6(o>m@;A{5O+4X8-0QzIBnAW*x_)L0(Sm z49|(1LIOt{*}0k|-L_g{*eDW8!BBiZ)i9vVeeq;p?`gk}%m6gd_u)R7^6=F*fI}s9 z^Rx&RJtZfg1R{fJ5W;I%9@wG^`!Z_$d%GfH3xLK(tD&KVN{Qj!?qv5iN4wo@lyOZ7 zdgpS&5lbC4R0Zq(G|UWVKZiB}>d76xa~X;Box@S*Yy+4A9&BrkLH5-aTP1z4$V*k% z0+76sl-@ARX{Ls&E%`bVJugSF#0!w|;BKZHc^QwRSR2Ele|Ja+10ET+I<%gzZE7a7 zkUqAc5ToLHR5E$a#37*IeZ(*67}P&}lP7nO68=+kheD6KT3w^^y7A=FiYSqouk-J_ z!V`4IACP;2Tep+TCW1uriId48E&bw+oR5aB?^HMwH&P>hWMq5LtMnQXNoS(;d|FO z7*%sD5|-_}v!NA1bY~+7ZA67dT6y*58%tQ36A3KFcp~d6o4x84WQumXYJHcff4{Hb z98xU+Bs8kOSf`(Sl5KP(i9||F!w5h`xzU$buh0OvwJ0+>rgH-L3VP`O#l7qw?_|U5 zWP#O0vCT9fft~^b&t@kH%d9h1aqR+r=X#<8)-=O2U&p`IvOq*Zb3e*>qV@;dylr+! zV_>9&QaVukjr2iDbC$bk)7hbmt%&r383WA%!QB*zMsjKTbb>EcW`+YlKd{3;==In*N|t ze;p-`AHTuM!NplL%64}D zf2-s`8^R7RG_(*RGyrr2x<U_Vtb;I$3{9nPTqzy<67)kY++t z$xrWO+KpnA1(Q~EXY=q_ZE1Hsj#JZmz#EHbH4tQvS1b{kj+SBYaEAwk?E`)hDGR;8 zq!Kq)Gz%hRf*U4)%*}I{%gr;i4FzQ)Ke)zsUxA9$g6#Lw%VV3 znyqcCVP*@Dn-u9TT$?uKe}9ixk6fH#06gBKzy37)i;uDo*8;oXC*nL@2D=aO7)^GNCE>fBrD}qqh_GVRWS4?$V#VpZ&kT zNe8Lds@qwKmS;Ii;lF(^dFQg6Z{TDjkGZH(Vk+W|c#9({xzHR-A0!}opO_My?7jjl z8}Lx@*%OTfwbv7tdz_?b@;_E_(IkO*g|K*#EDBK)%#d=arupM3`gDU)WIO=f)2?!X+f$XM4~MKr6J&Gm-4>JW*HOuI*7zPz-< zFrI5byKR2{m~^~^zWXy9dZ-8gpkl`q-^FV27nXnLPB&%Qi_#%?z4XOl{y$AL1LT$P7?rhl9Js4ZY|+*3pmzF7BFgWo>lLo zha5nCvgnprjao^VsuC2vet4O!vRSMSxxM4A(+Zr4bJTK$Y^y-31hEZ(tGezv4ap-o2zrp3k|*3hey}9 z0x)Z>lD1dW%e2^}->&mhrHW8^?7;oS!sPMPy_-wKPgWSH10A-9)t@`ytN`ff1Kt^Q9(j-DR5clm1 zNi+<~B^>=t`ynPB<+{|H_n zB`KDhxW1sZPdtm6zUD9PslWX!`8R*5P3#vE@0?5QGvE25-8a-^AiQJy&)w!jFCQ6p8 z+6R^&HIm}JEykD@)Qpz)f4o=vUq32cUwkI@lS!kD_VWH-&-?e2kF!7dr}Y2+)#(5K z{pim>RKL1Uk9OF8B%MQqL`X7tV#3dUZc?H*i3B1^pj#Q)acp_4~Ld>MfI4%VIAWQ%oc9v&ZKc>Ii zc=XV#fL@#-L7Dg$ z>aMKEifRkj-n;s6yOCh)y|>kd7!_wFNPIEsi-{)22dDT4^w(&7aDLI4m^j5D8fTnP z93kDJ2!cRbK&26oD6ND;?ZNNsJyjiYhBi$+?yhsX&e+veYhK@4tFWHyhMxhPzm2sZ z`{m?viI910N;V+5QYh~K-R?MG(6~6;{eN?X`6Y-6zW$8?i~@9NERz7}l=$+rerKzJ zG`(fDy8F8FhD+6GtKVOWUTkHEl7DlHzVDstzIFQ9O?rACgC2OE&`xZTG9!_3CyjN= zPu9(V&U*InPQPodgD(UPgPtNE?Xd4{Gn@C?14sE6{ThS~5Y;6bWd#6Bxhg<(Dooei z?Qw#739g+$Wbcx*sg7_aUzs)!uh(DBAXbs030x<%+&)W|fG^ZR=RGPKf`(D>rfI`jHRy%U_wPy-0A{U+387 zK%3ZZ&~dZ8&$Mof#1jpQY94D4$2ss(2iZHJEeE7RH2CQrn`R6=PB^%rFd=%#Na0s0 z>8HZHUb8~39H(KOKGfOM$|W>ZwvMF0yb|QXDfqo>_wi2i)aUw*EqdkHer)H!oQ}R52F9`~u>Ctc4HK=!fmMc^`E( z%{G~G3wh`g?tVIgA{)E%Ott(!A^9be_nlJ^{$riJY9`N+=l(8d4px>TdvvHv`kG4MdQ){I<<;!_XZtORNs(V9w< zv2oI%l(7A9*dlgZWyipEQ3o(x=)6Lf|9@H0;%RAO;_`0~`G(s7Va$v;90>?GVB^+p zHBW5NpY1mAQc9VRI}m8C*ETf6&k$+{Ok4XWa@*9b0Fry$Sm0Ht8kSWkVWzpME5RCQfd|rYsSrr={**RVi@IZ zJ;=~yOd&y@8x-c7W_Pe-a1NAU6$`xQYtARy+1TRKUFPu(`ss}tu9~skFjOg%Mn;92 zLiP3^?NpeV=cDD`kR3b_VPj`51r9}V)P|uUgr|m815kAm0fL~|#4@qK%q7iq1nH0l zhmD&i6fQC@mEu`kIDxEii5v~6Uq;c@?L&JG+tTZPL$g(i>;YVSc|q6{0I#FP`1D z76<15)HBF?q_?O3VQIE9FYvK@kH;fvfL=NwC1juM32C%mn z5ZlO-i|_VZWbdORC{BTX0`-fVE>|~Ru5ggOY-P?Bh0sEr$Go~(f3n*^hB>0tvzdbB z{PH{yY#R|YbhLK3IbrKoP$K^tBp`0t5~>dwi0z}J;13X)Mm;`{O)|hW%M=PGK@kfC zY0`B?$UeH8Af5wDL(!G-$0ww~bwoA_kPsS6#ukW7ys}y2Y{2wK-UILLiBzl4PT0NI zEblGuePj#|Vt^>wOSx#U5%m#iypj~r5DK@<19+5q!0+=_MNSYn{_oi&7#RadmS8w{ z*8>7PuzEf=Dn&p;;ashrWV8nn0$BO*e<1jALSSDRnDpJU)L1h=q zM#Zgbh{}ej>&}ndpr(<|eCUJfiy4E;!@&~R+_K{v1b?{CK0uW6u4gd3K3IS%Cr{OO zeC&Z$wRyvlVX$REYAh`l)K6~(l(5~$a2{owN`hX;mxB6P;*8>l%g$kAi(ifw&uyd; zxM7!pJ7gDJik;tD=>l##;?e0P*F1;$d^BUCOO(4{qQtS0`b|Yi6G41K(HAHszi<*) zuT-bCavY&QPKPNTR#8j=`P2@9xadeqGbE2^5Z!ImhW5jV4ngcV6#!qnwZ(qC6NWp@j_m&|aOL@H z456q3^0p5@~0JCGJc5bpG<@$SQWs-jHwTd+w*S$ z&BIRJd&Dk!n-k}PeRckS<@FcIYgfs?n7g(fIgabxr>bXWm*k2RWl|Sgk||Nt#qtI6 z1(qYrj%*{ggFHAFBtTw*0C~$l2#`ED0RjhkF_4G&AqbMZ8L?x>fp3Wu`2yKctoR}` zvSo=5EQ*vwi&~1@UCwmX$@g^?r*?a~XM3i5S1uKYvtsW|b#>LLbNSA92DaILQ9g3S zHR0s|{nJ#gFT*S9)k&nx4~aEMEkH&kSl~mJtu+$9wD3gHL950Ah(*SN5gf3<9jsaj z1}C<3;j1Q@St(F)jX)_)Cd08n6M5%FZsM*pjq^-OFEqF!zVaiie$vgyZ_$o;#0Ue` zjARzzwt<6xkSDs(_#M+koQf5pY&RdtZ#hyRD5ky;G12gkzb3D-4KNxI!g_oy8kg;T z|KkGTRYJ%1#^p~4G2A{Myf+`r%i;y5jeG?E^jHCJ-S+uk^chDVsHa}%Jc07>Icb0Y z-S&g`*%PD#3x1^7F{Ia(JcN(j!x$50uSCuzN8xO_NU6{^RzfY!dv@Ys7Av*^F(x`M zkznHBOGUaIFg(d?+mm2Y69~P}`>k>Epf&*ADqjk_+}?QD4y`i#(ifgCQCB*JUVA76 z;O2aO!@L}GYvAX^GkcZ7FEX9KJ$8V+kts!uH@BU;NUDtP z0}JyB!8m*NqMJCeVpL2hKC>J-hv^aifE9M*;Z(k7w-(8f$Dxk?744l|MCm#}GL*pO zf8v;FR<2lI<3E4wfo_0+ytewK!}E@b-Xlw9kq_K!q58+w-`FG)OOaSkL=xprq8LO^ z+WYjcYB(+YT;1!69<^ogdp`T3hX!)-O4fua5TQBuYxi3?g#eH3v9`NLFdVlclq+DX zM5-}?gbGZBU1h2Z9X?=gdtIIz^}f*9c?c}GdQ6XcHZ}lGfc7D&D3iv_A;J-Ikp+40jCJQQ)S^AuXx>+iaQXP1b?<=E2^5Mu%tV9q91_5=+K zO;U_yJ4$IZx0$`>rWi2yqP1c_7+z50J!Wg$E!Pnk1><5qsAXpIKY({zl9Su_t zv?w4b?o9(zWrybQ);C0?-9n#waKxOIYZNTHqr{|6J&Gh4j2>>4h= z;SkGG!R&^TGcJgu_Noo5lp}fDZ59^~^K_VWXd+X@8%=Gx-C*!kDrr{CFOkSZtrE5+ z_rUSPOkD~_@Kg~>dqDRw4xscd3&47CaU2@8eBQBA8ZsWiw~A0}kHIfh4MCF+-Iv4j z15sD|$t-`nm3{Gt4xS&neR|!2M(F4M*aJCYNob3k(a7DQZss&#ei9C}!tfuBfE`A0 zN@U?nGAHnuFe(5FfQDii?uB)I{Ad0LXMG9WstJ$@8{-n*0}RU~Rp~rQ)p=I@-dE!4iaWc!qqJv|Av0jAX7@_^M0c2?D0s^a}E?~zh znT;>|l98%k%nxI$@4wsJaojXJbLe>e>=W)M=e?1h#ea|p7=ty-+4M0L(3n&U!v|ii zP+rzgX&aL|#8#7S92(%n87f@+emy6rs!&;m07F_h|!+ax!)>tWC3| zebNjlBdP!O9{n|f0xc9;5O@urOy-hrf`|Sb^D`vtzj>B;Szc+@jKRUeC3Kxr4LLWi z+y)`grqKwf=G|-B4mz-Kt@1EDbrV^d12e$ieX{_x6K5|5Id)(q_uqNeKm9`EQ1Ngd zI%z=b9Rk?>NURvtpbz@_i@xwx&3}3iGLztKSZM}yeJ}%rSHum#(3olwaB}I;*i#!o zGg4n6mjZb4QQisyE%6W4%AdRlv{|15*eh{npcnq={r2#IS@9nQ!}osD_8o;`ATLVPI-u{1N9DBrTD)@ zS`qYdu~#XV6Av;U20QT;OSG#6e|K{n#6Mfer*WRr%_({~1VmMmuP0f*I1K9D2eM;vYcgY1$xwUkM*+pMaX-FClV$~ zq;;uR&8|O`A3c=E(WuY73zk5}9z$cg*Ipp+K{-YQ=+OgWMOw>g7yuARtZ-_iH~*uQ zkVzCE`>h9Z$TK5SyJHdb{p#uMrG;g0O2KBR90M;9z?BQGe&BGpUXgp5u)$L?uj~~c zdGrQFv8mSJOeV80QW;kUOceg|kHB0)bob@0ghJU)zu?Nr7+N@p_$zg?19rKA&5B$w z*TcM}o5Gf}23eOD6J@0OuR435GEFT&7{Q%=dBT55*M@7*(af&nG~Fa_%zy#j%Sij& zciuB>e>~vCN!CwO1YeQwdqaJ;S0E~5mLqK6er=EHJ`|!afh7jaX+fnK2P5EtOLuy%^^l@7I1MC4q}NpN|LGcO2=~QCg!$U(jY@cKkuh(C%~aT;AiiEz#X=ufH(csUVBhVK$v9cLZL z-y!~i@^IW9+T<29WG-R)KjsH6(WWRhJ|DYll=lG*l2oA^0`Y})4_zqQ!4=b2QqXU^ z&2wyw~I!qo@pzJqv?lab097wW)f>y@o^8ZC)W^P z@t+u;!#Mrkaw{|+0;-W*5lDL;{V^S#x!E1#6izK}p@bzv1|QmP`GlRg)qC4v|1 z2BZ{jSdlnqssDh?!z3SBudT{12oeNW(kQqK*N|tLo<+)?FRKI~D9(fgSm%*QJ&O7G zreKdhYOsd+nu)T08P+9udvN;`mmv}UQ;!z^@K^zu$;4?ZO)plV1@8kBb_-u06F|y* zV2vMG>2I!hUw9}a!Pg3QX>Qgu@g}hKtu>-M4$=S+nxONI`aSdll~mo?LXC{dq|E1v z?APc-6-wZ-v#dVf7fbN_&!JM4I$tfc(SM8lf7E24d?UdUuJ>;+vCv0QWBPikJ*a^I z_dIYJPo1Y}G}Z6DkFl_D2slse(K#*n|EXo=MnOJ~l9jl3kT}5J{g>}KP&9+B4QK4w zDO!6?&wJEbWnwCT7!8-ewMr`s_CS}XSB-Fakkqq}-44S{lSy0OR+wOIt%+9slzoX) z6)l0C#(-+S2{8Y!X#ssNw;P8Q6&d|6KKGeyyk|uukw3BT4aX#T>`0K~k zP=0}YRc|Z>KaP%XJ?%keffYO{)SAWSS0u*WkerPW;fdGT+F2Uq1goAt2kL;H%;55` zf{tU#0?N~>BS;(bJ#tK@wcAUl@V!bgnB;1_Etlz2LUt7 zX}|T{10YY}jctI(5qNm|c_J@Nkcj)#B8F>yg9Yxv9)8^l0M9tMLnU4CuK@Q(BO$ls zCq?0RVPa;qfF%xJ)PurcWq6E|<>)Qh-j%9x0;VH$fo z0YrELpl9tH6-^fW2zp3=1^~g>w;v_Oy{YC zRV}wOI6uZWz%LePk9#~zxdGs%NJ!TRW@Xp9WM?H~oRk|t>LheH1d7Z>8dViEQ#l9n zF3;5(qTZ3Z(N_E63rWdK40@mVPn?^#a`iXrVaRtujfSGFMc6lAo~H77j#dzfGE2m$ zO8im1a;KzFf2q|*T!U!XMV6)GDEQy}dZ<#|_TM?<;Ol(+471nAJlv8TT#~ne-U1NW zvYHsw>)8!p1jCLz?AXcpt>yQCR(y1j1+|I&iR2;nmG3CtlgJ5sAd|w2 zK@&~Uu|76HsSb{EJ_hF(i*yEd<^HIDpiZzB!O%+6G-G`r@$y=-uI$UYkJzMP&i#q8 zm7W~MYbY~82U;2XEPN0m%nl`QJDN+CGN!eb*G2^P+)sKHM*3c44H5Srr%|4R_O3ON zo4>pJ$`~9|Gy}k-bYNI}-jX>B2mo$?{u-?RlpPk<^A4_;v=gR2_uK-7X@i1uMIsw~onL#(L1W1i(OnPCWTYwrN&VHLN&m({1c*^*SF)g| zci8{rZ=44OlG&e$JZB_IW)Cyr!|<9gLQZEeLU|X|@#=_1+agUTMYc7j|E{MdVa1gy zQ2hq*ib}mmyP;I;zDn8?qvQrCaU{jtU%kh|I?s(H#@tLL_=rrDRaWSwRb>GVn8o=t zN*6yTd*3M(xEIn{O9s^1m!9-U<)Jgp?}^d!>L$-jEXOAGh72HUNm=jk_%yzj?!nEX zR1HkhVs@GV%3fWEutM!1mtw3kV|(#6>;YG3W~Q|k!UY|?K*0hgr{DJf)kgo}eFin4 zKSnybVsAb|VKCbYCZ4iX^~A|A-%|%@jNNL6l}g9}>JLC!r*Sf>g57JA$li0OfuREZ zdtf6#ZS5d*9@@KQu}x%=XP|9_uk-XdUM8ZlH();28Q26!)8Bl=0vk8m;BJN;i~uD- z+P^POx_5^?5I(5zun*boXy*iJTK@?-mJ(|PDZ-es%_jc?Uz~WOrpQV~sLWiEK2CrE z*PJc}b;KR2R#tGgHq4noc!coJ+6{p8KZ1XDBT=o!_FE5Z3PctW_;!HA#Oep3h{bE^ z)s~jLdaP3MjQQz{ZtSSj1I-2n36x&2dhs2n&jGAPG(T$5ZB3fUs@mS&e4<~;6k|YP zuan1hrH)D!Y8Z^*f#n13UQtC=!T`sPsj90(&7`tN8kHa;%#qJ+2u9UzfdDCl+!b7o zE_gK(_EO$u+@nFzz1laf{;f&%0dx+=;dxNHi`2s|5P^b$H9uUJ#v+GRE$EaqSdr#Tx4=lr2Y=m{V9=R78jP{Qn&Ody=1uF^S2A_Mv{q27h0Jp(S?)@@ueyxMl z%$@Xr*oC{IF@SY|F!+!N)ukn|WQFJ$^3iK1%~td5R#+LdsKuygQx260-h_v4x(s@l ziZ`=UJEb3l>QeG(*)U_QLqR)Gf zm$vx4ch}Vtx55IoHxQEo`{KJ!z&+nvRlf%R145rR#1QeT(Qf>c9qMO}Dl zGlT-_uOC{jT4Opt!$fAGg)hHR8*VU$2V>W?4#gNzZ4|tbZYwfqxa~YboooPWQ*qgr z(@;3}e%tB*T^bg*Qk;*K(CfaN(*7nk7*Q=!AoiNufDeR~X-&(hQ2))7x0p`JCcdCS z9{3x3Bn%brCD6$%v<~xJjLeueY1k=WI&rADN!SMYat5egQ<@jOf9KJ6RL1OH>TEcW zVcz%@H^wpSF#lULnO@1|JpWO655_3Ma*iG}{W{~xw0A^4a=*pMkyADkgGriGW8^<|%MMHR@PfzExh9pW5gBU3I!w1yt-B{X3r>o6D#Am6?yTju zu+OZBHH*6=5-d8FzqK9E$*Nf>=-IFVBIAve-(t;t3nf)%&-h;LZW;|C7zY52q&vK~ zmZF;q!~`FcB1fKF{)MmTvthu}*48wcNoDB7i1KT8*(wrF?AjZ&*Z@?%#TdR{_5p^n zf9ZR@)++opC3{5UPaH$pt*KtFI~g#h^+SXqF~$XQma|^GIVBEsz!_YG4v}N!Y!;3W zU}*6nGH{)g5F_PCtTe4r?;)tTo^m6*%3WGD5@cK43iCDf>sE;NF{b`V3Ff8<_vfM^ zTM2C^X~KrSH{ z3Ux4|URgjblI&;NE`lbKQCi)wX0L2j#o#=Rk$aoAb3V#tDGNzs9>8K%vRv~!iQ*?f0#Z6(}G&5e%>1-Ak++)-N>=B!tO_@OZ`(h_ap zEK^nC_2?mU`6_6t1P)WvS`pG1azblyx>C%~JEL;Lxebu`E?_uilW?l!COwSGb@fk6 zxKRhW84aYx28f?DEvugcQMjCoz!9u_4XCXPkp7jZcMO`ZW5y!7LKgw9p7{ChybL;Y zZgf{AVPGS0e@xwX7s*;MnTzOU)yl*Ze~N?>9Nez+3@@&4WB?jk(IsoC#SK|%Wkkxr^(2}Wm8SfcCONBI zNS8O=#mnBB1%@HUas%KAEvEu)9$McC*XS>-sK4okXN_pX&$>}BPkkg1MwPs zU~@!M!9m2t^W5%ol+dxwBo$(|!Q4pNqWDks*H0XRR`}}K+vo3|y~r;`5LyJBn^O3e z-0qPQg8KSgteZ6qL5wFXGBV6}pDSySKd!)~I^`q47NzK!YXw_N{a&PT|G%7G|AdsPotQ9(Ehb8}9ED743po5RcY)fBXA635qY6OF zM7^r0EGNHI#R#Wb6Eu3^0H5>diY_(MSgQVP&EjRAv$sSXAbpPWNd;n;R$d@0DJYw^ zr!JomGcMShJr!}wwYbwA>s@!T#8P(4-1-2E-JJ6PeiHtG=4}SGNwbhAM?t57}?{+Idted%$Mgc9@{4J^~b?J7yaS0;N1||RXj$=9s z9>xG_FUZsY)PC@RF4QbFI^zDr14H^RJgv3px6LsNy?~s@2wLl8fJC9pHg7_NQ`c;_ zaEHSW+mT^gcS=7aWz0e1KS{e!DEt&8D~&g^!&psmhfcI8W4Fx@Ep20*x#>BKzcEJF z<^t4;H8jlILNMAxJB%S<7+JYM0m0EpBwVIg7SFGf0thtXTa$&|#3Ls6a5H}WX;-FC z(1ki0Og~2>o2=8H{Q}v>9g+PmQrhQ3vuvK5S{@%ph-CMRe=+*p#rL{bN9sU9)g zg9WhJoX+zT&iVE(^yvIzuZx7_m9aDQ@V-Ab0j7yG4Z<1#fFaEK=K&QSKHyRFfAh7; zpMGwP{%4<`{K;p>fAMb<@EpFfvBcuQVFhkeR(1_>TH#2wlFcSIY5JSJT0Wm= zk@r3o(rYX%Uf1$2JNK#!_uqnQM3RJ)jJ!a`VE;^Wy1RIhk-;smZq184FkCedc$}KQ zCst~pN7V^Q8H!fHT2J;*y0+kq57nfdE8(sha_*K)2|&;QS!^$F_>D2Mc?LExy;UI| zp0n3BG14o>87vbXEPglh#$w*q<{9E;eY^5=q!VXYaLa-g(t8a`SGCrJRzknRza_aY zUo)jj6zo{=}J02|Cr-)rdA(Fs)RBu~f7z zBb|qN8#Y3)Hpei5I-LNC7}V({r_L#8zgC7K5h_q8%{9GB{B;c*phi7vicv}8U(c5w zxK|3HB1}eWFVJYfuFBq5eTvIvY+>TG)*Q?&%bl}^aa)p=1v8ctr+qJtStfv38P0ro(#O~H0)i^O_f>uXjc!F+9{g)G)oj0pX;YQ~U& zA6aHc69sucqft$5H^iV@oe*0cDy0q|qZ zC3R{>Ld)Tg>6kE4_=OT;WRw%&Wz%5#sY3x#1mv0X^+!2uN|2^lBfGo4(b@RsHEdAW z-hR7*HO$ytf2WH`YV#K+xkgB}guLWN0$mLyDnD@xW`9~)$(c+f(kqkMR`%S*`oUNOr2?t$5M~`kY5&cu@)UJC zV=0jz1qavAX3CM-HYolp-GhhCtOI@W{)b2D@9)JOmPtE<5$r!KZ`%1== zWZvtQEjI}&kftu|N#U<=((MG;Agpbgb<^gC1MDf{sQYTd6IuW7<)+<8GXP~NZaHF- z;q*(<=to9LJVd^{vP}n;8xHu+W8Am%f|{=SbiJlus6XqvjGshyBy(Ksw}t~S`Si5`G=LV@H?WfC9Y^3* zM$dk^8Y8J+d&;Av7mWDX!qoTOV!$<&?R)c@9X&)NqzPlEO2E>&b>H>jrPomPG1Quv z9(gnVU9G-#PPfKP8Lb8O>AbIvS9c49d1c;o(axCF_yQHE)X000X>v^kQj~{ijt6I` zZVSf3%U{WWQ9+ss8Y+g76uNkn`0spF9rDP3*poSr4z!Z2;eKZt5XGfO(^+ z;})k{I#>Y8UM;w|9j~K0M|w*r#*7e<^Ik=&yR>C`y6Jj|v$$Uy&|^Y4jdG}%(-T1Z zac)o_L#a6~qlVli7Lh)AOhT3OeQq-Ep9t!FmSwqg>?-Bv1<5oamCUzhUg%Czc>C)N zHr~ph2?CTobsjkYiEOx=4y4r$5SmI7_ce+HdwA&USG?1vb48o#fu@jU=O7diQT(L# zD$weXDyB6-0`%qxx>{Cd|HYNYYfwQI%$spBW&78foT>?yEFf?frZ52 z(8}Qz@;P%01#-R#(LJ^H$1+^D(56|*k3zfU|C4PNWJD3FsiSxA`6VU8W!@C z#~2aAhwO1n^}p`9(ZFPCSciPvsH2LL)=2mLmR8|G8UQjJ)X^Dk7bTU--V+eU6mD+m zADQcdGTlHN2!^Bc$A!pHX$Gv~wNG5M^KeZd6&*@pBbh5|N}sxsdte{dzn0A_^}Ulf z${?Rj<6utdxCrhbRuP^x;tip!0+%SUOnZLBo;Vh~F;a&-R}^(Uw@##Y=aw`a zYdA~T1ND|+bLbi_po^Ca7ft|`*wNaV=c?NA1dz*PmVI}vLxQo|q0qwP$=+9}U$T&i z^7ISTryD+#h#*wy!g`8V=$^V$M1;KUsH%&w?&@Gxmmr#Q>;j;d>Crd`CQfG<2m_Qu zRQGthmSQ-}PlIw#pVj~T+>UT|g_xW`?tTrcog>eL3 z%W@kxVLj9%c6H{hgtz7DcO`FR^_up0M$;8wNKYui+|DnsK6t~2vs#F9H|g-Y zFy$>E^H#5w;wbiU&tcwxybO8DfBp3)#UlEv zSUIo)73-sK$^Y*lMwDSo&@(iFvPJOLGnp^uOtiCu!QQxR}1Wcsz%j-|LH#` zI1#gr70$KQX!|~N(hT!j zy*ZXk0$#>X${otN9NEamj>J5ZtC-g}Gr$eS%n&*zp}D3l*mxIr3P!?zH#{q1M` zGcPf4(N}p-)ffa@8*u~VHere@Ft}MGxGa9|U;rQ!pt3#K+vD*1I03{d%z#jbtNn9I zrSgV3=d-_%uo$7c8nhy?*c!|GE$*YYwm_VmyFrqFTFQ=!xGfgZVP6f_qhPVL*<4 z`nv_p^s!TsoppH~AeOj>n%lHFkAs4#4wtvO*_}cq9teK)%Vjp>GcS5rZbM7fUd+R- zM;kvKQ1jEzD<%`;@6Gm&uX^MFHQ~VCm)t+-=`XGDorq}R^z6%%%Uga1X2PA)L==-w zmLwK?*#M-8#RecbPa0|qp1$BKgh4j2{W`fL0W$d2pa?a6vMK%Rc=ivU%1xY~g8)isCN0Qg~A&B}yS_$+D!#mSoG0;v|5L9B>>bK!PBL5d;B( z{F0yY9|Q=3`~d+R*gy^+@saq59oVuYN+Ly(A|;XHvAlPA?C$Jb-Cb4rURP~bPtU;} z&J4M0veh2<^z;mSt6#l($M?Q>iK9BLA2@===y>@?wXkqO zm4q?A!maXtcufB6gq$w*1U;Z6*LG?KjrZbz`FZ@!L-L=093MWXU=+b)!IC8ewFw+) z1b@DFL?Y!cNE7u@`i(6rChr%WTLCwtNRtT=nhDVID!tTNMyFt{;BX7gxCi-1-r z3_#3;f}oEsfP-oS913q3rIN91Tb}mVL*j+qKwPr_r+S+Jz+;1{3eKX+{}7`yzI`}` z7`=a4+djCI%7GJ5lr((n?f9R56#c{ZqksG%zk+h>n{US#+@H`30S~hW05AC6Bk?y5 z#i&4lqw?Y-{*zn$4m~#U=Nvw-u-9TUu++!Yr66|3usiM3TmwLPP^eB25Lag7a$Qjq z0D38RN&TAuF0wISW0sh5*qtiC+K0R&ra|EMGc!eGmT8?NlWWq(cL89vFxnp~cQ zaxl((^(0X(0vUQdUy-pi%{3e|ZujLm)E5(opB@)CmDtJaiYd`2#^=BQ9UXG;zq~cZajWg=s z-i$wB-ERoqEbl~C8Ynp}h!ue^C|0)KT9Ah`lwQ^Im=IHsps|4W+`~TpYD9k8!6jqK z;KHANpz!Aq^*vjTr^D7SSSua3spi}39QhKY;rmWq4MS;$-Ti2bpxc1+0Qv1o;$wN# z9TXgX*u(3&R!j9c52Q^)8rT)zdxu*UwZD>m@!xwYcz&mkgVch$HRl_}B40ZI8-wi@ zxZwYNRQ~&$5>6zf*(bin?#_F&$L=GS>Tz-JJ`M_W&EAdv7oYZbPj({8#nk=oJMx|L z66;dmt1gvhKJA_BIV$Ch7YBZ5Yt9qbf6Fs7VHD>bl3N?8enL!UO8m%U#j2NxmSmV( z;wmvds?X1Ar5s~ipH?O)3~sf%Wn3ZmiRGS%TKDB$i-zw3KK#xR1eo!?Teq_@2NvpV zIv0GlH!%00uGX!_uuwMZn-YW}5MB^o_MAVXbK z3At$ig8fkc$1WPZe`PhHn*hB&XGx`0e+B&4p)iJ4NG+URppB7zT)Qh->l@;oSehn(I!pen?31T{U^K`iywKGCcb*K83^wT0 zc9&nC^L~C3zPL0_%OI*Q(cy2`q$v1p+7*-4JEYzB%)Ef^M=!8^Ct>YY3hJ^;Scl?dNXV}B99<#Z9Va+k;bWJ08Bqg($iNvmcvgM2DF5tv@Ex=rC|_`j^iQ8JtX&-= z01q$F5%P6k@0TTBpPn~Q%sF#oBaj0dt(tSq1ngx}^+ow>A~IEJPi+-{_-uf*SD}4r z0h@54_q`(=u`T!iLAa`n4Pyd;Sz@^xjF=iHs zS>Vjrwpp?zMngVIWEe+@s9&w0aC0KE19`RNy?#m}-1%}6^lW#1G0<2jKL3#bMk>sJ z6IWEo{;Tc=>6f#Z+0Tn){sO5eML>kDo0bw$uSH%;Yb<)7*yaD~9`<^TF#W;NG+b;7ak?SU&Z)BSVOAn=f3M6%vlam7uIRx}BGFe%LrcX} z{m4CGD5)#E(Br0`Nk?@u64Pf|1|rEIIS$JpLwt3igMCke5SXIRKJI^RKk`HZX$q+* zYn1lHN^9TcZ_$0^ww{V|l3uF>kPmQgu=_y>khmtEQYYQ;nORiemUWB|9SR15 zi#PX%rwd5JD<|T`{#I@C11OEf1o-090m3HZjGnjMFtB^ebz5w?PA1I+h4O``g5P~I zz%*zdUDw#cn9XBf4lsfBkj0qg1Z@!JSk;la4DEeIa z$gG&Cxq*)3H%l~Kv~3}ig#YWMn#|(Otb`FQlNErs1gp)(e$xwGNU_!?DTd^TKt`5B zgng$%vvqa4wy5oZOuk<3Xdn{v7j2&qzp>Z<^A`#)KOW%W#YtP{9-?pq&Ol4UXZKz+Yar8)DpdlJh###2kx=m2O3 zK3zQR+9Wa1uoS;{u@)|7f60~B_G+*Uh<23#4n226ahX`xK}5Y{oaw8E3N$!YWS_W@ z4Hz|G&hR={y=n4}i&o(f|Iu^)pL`;CewV*>oSoyMZQXVE}Zo=VZ ztD(9)8&Azdk#xKenp#ugcH0YD42TLgj5*|j?hlddc0_p*fOu_QmyZ+o-5-#OZQrjQ zkl#2YZ&a4D?lWZ?@WX%cV(@pLEqrc&0I%K9mlNGS-#}~kFA8F}@{_y$zkRvz*Pku` z--aRwob0@ro|b6w{gqeQ7b;u3e;|vLk=2LBydCS|`|=IzJTijPx6ZV8Tqxf8tKpgH zdOcD-@c*<03yDFq|v*X1I88tK^1a9ocTwUFznP-Mcp}zCx}LhP-%$UYJ@d*Ps-z$2#x{3urnoy zmj;+wDcjX53y$b4neIquHKehjiHMoy0qH}+WWySm`^@1CHy1Ffg1;0kXqy=WtMY16 zpK$7`u19H|7Y)c%EBF{C!dT(9l}`N@XW=&n|Ly9AW4uVVBjWSdqU#INxR+jo5739( z4hBbwuN3E2-oK*O3^UtaR}~fHafQJC&3>uwRi;&&zQWD@|87N-5%H7*H!U9FTg@qk`97qPnHD-Z*EaDrz!m?%L(VR z3(kAsGj-+!H*O(7dO+)tRPcDTR1-ie#d-PR^B^A&3z;$1keQYia#xw}vA>^=<3m zObd9ZS4-BUpnTZ74aBK?7&G=tohcj6U5`*8_Nhk&5CrWL@9PHmDYTT{{ z^^MG;19gkMIF`XujSVEF-4|2p2)jz;9*mE&eIR6!kMp)XAhsn=5%kEa0%F9x6eNJQ zF5CvtMZ(!dy$(Xayg*sB!C<3Qh!gB&vi0Uh<<0!Hlw13h=I$@Y&Q-53#O(sPy$1?| zL3TyaO4DqGxeB2s)6&nI4m#P(_(?zdAeHOl^@<9m&VeJ9;+DhEg_}69&X{LRw(6|_ z813q+H2y7=3wlVC0mT3Dof-f#hV0T(3^)FFM~c`@k1f4%Epv^`S9uv+sB#GdE`V(y;CA% zxiXm)GBxQBMpA>}><^v^KCw$cToNQB7qEWiwHS%2f=~UpbC@*fCm>$h!ztA@!)beC z>Y*D-w@cG43ST`ooip_hm{kST7%KaB4O;pI(dr~2&FX*1sCC{NJRY56h_fcGxfEv4 z>nAEdezzng-ZiWMn)tQ%3E2YL(0n5LA^0O5V zw*v=KTnm3O6`>_%1`>6`(Z*7Zi9=vTxL-9;@(o%7)xHgy9mQsyLr(ZuM@LWM6 z1b?*qaMR$W-$M}AgO7V~3Is&RLbCHMRSw!o1D1Zhs))EJxTX;w^Mo_~-C9UGef|#n zkj6J-sjke$CohM{{?i`tnu)I7 zy(mp=5pb6;JrlgJ%O4#!aCQ{G%YS_hglD~*KzZv$X-e1>(LWt)5n#qBXkySFL(Pn( zen&RfS%cSDaCah?hxG~o2Q*(&jQHp(G~D|@@n}H$pWY@=V2w3ds;uMdf;{9Bg?2Wi zu+CB?e)UA^wW7#|hGCNAlFH1N6L z%(GZ|Va&Gvjil8QikROzqkz8(pD_9#Sh-q zS4z54M+K7v>~wvCcb_i7b21Fo{ok^%yhw7o_b2azcocpJvx;L%KaR}Q1Bg`W{P(Dz zUH2R}V8rGPfSiZVbM_6ytd&sLLd=S+xvy^zKsEhmMj0q2_HUws$c|V}hdb$SE>DE< z^VX^A^^$4)*v@e2Cro(oD}Z}~){20*z-~dDTTmAfp%fvz5ORAJFc6-ms zRL`|g8wE_xHM*V9RDQwo4#kg$i_usND7yfT34Ky4{7=gGuuzkSPFH^N?gF?^TB(1p zk2M%Nmj}3Q10@w9hyM&lYNKg@j&syiltXd1Ht)@|3hEz1fYUvy+}>IKlqSW_AI}7k zeDMSr!!e?$oYGodMEsOHgJ>kHC)g0adVod9UGwE(7U?3)ra`u=qwYK@G7%&lvrMP?xIw2VO4&0|L{Ii8iiR z0E^d3cbWblyy7Q9oSGg>s&LksJ{MX$+0P(^qVFFr9X?Zyq{0W( zfRd(6@JE}s>9$W-OQj}}_BuUX4`W5-%>6!l0Pc%}2g7xS-N0P~|Ifr~1o(ky z=prIy+j`nYt3V2gP%@bZJVMc9d35io11FAFl%;lFX$JFdF~9SxDU>4VKF$2&S#(;q z%(4xdn%u!1*erZ`qyX?A+x?SkC=gETJKe9X0&o2L9Tb5)7#${S##~)0LPaTI|V<7b#sU}a^QcL_DY)pOQj+Gue`tT-i2B{)Iww} z-K^ASIpC-tD}a3!-W}SAm^}r83$HF#IuYEi3Eu<}sP0jt_{3(e0e4F1-Zsd1zaVC} zeRPtZ+sV=&WTZdsR^d9^x&LLnVg8W6H9Z#t@sB-$d^WXArZi`k+W-AyAGnhffcV9b zN4)Z(oULYLR(BhIX6JJMCLi5?;Ajf5>{aNB-Apc*l34b~wu|R>1_`>cgWXT$)HimO zy$Elrb#?GmHAI4t$CPiLsvN&i zovp-192!i21K&t{_2^8XcjZq22RPH3YeZlOL8%l2u0H81&`ac!{%aBhzhKUBuEwf{ z=6rhXy~)rk#&am(hHemjfSef>OHTC3S^92)xBu~$`UFI#C1y>*^gndE3KPhDo$Rb> z0R5y#F5vZxG6CEs6~_UOT#yi4V0%ClP1J=um=;zOA+pXW+)*wi;W<#Qlgi)%?#+Q- zg8jn*7iXH7PccZPUuSS4u9g>X-La>f^y6K^oiR02N8A%|H|Dxp)MK40iwCgjJLv=D zRXFoU0L2NsXDB`Dj)~m0R-*)sxNU+yy~oF+x_`AK(!>1w}?Zz7ai)(Gqrj- zq!U-zJ$iPBk0(*^Nh>=RM!RIOfm*ltku2gM@J*J0#)f_1Pfp6GyG*ssw_;p#ar0YzuLPk<&TZq>64tLy}u~Z2--l83itXz4yR<+`SK+m=|W% zY}u13K@HuNxdJnUj>C}47`BcB;~*yQw~cOloRe!_p&?$@z|?vJ7S zfpbRCQ?w{m%d0W|dRo?Vw@rX-i}z|sZ=RK!-wFnt2#?P?C6S3akafeH%r8z0_g)+P z870vSee4n)X9_K^78#`R-IXhF0+)zBcj_LdZ4(LM#RD`HSX6cn$&-_QontX4K0|3G z3tO}L>U?zcT?W-fdwL@v20|;R{Y{vzOs&# zi%;hPx*Tp2FmRdf>hm9Ao}ckioViPK1=?)cGeoFaL;jI_K!LezOWKox?A19;Kc(~p zZgVbg@~N}?L2CQP$?8v!FU$k%kp2`=7ySKq=L(SZ2P$>;2c+^ox`ps~Mv7Wl>Beiy z2SkopfU;$le2_|idNS~7)JNJ_tSWGQ=F~N&&;hMTBt5b!=ofE3ILTK^8zl|i9yIva zJ`V0~X5n2`Ok)c=4^C{d__0&Y5hgNkeb0-Onwklb?E=gbx}Vav??fH$teN)t?wtS` z_Y_Q6U_+6frg}u%$C+%*>2*r$giN^9oVSpYZ1T%xFBdNjgq|Ej+cp$)Kok^M1esT& z3~Z8l%q!eSb|#8Dp_QS~gQv^9dWdpv8%G7RC|H}P5t5k^OLFJ*;?OoM$Z0=vL5%S{ zcP)JDbOq9XgNdD&Fpyfe9`3t&0%TfDbHk;h7i6XG)gvaQ8Yvi6qEhK!q>Ln5wES}m zu5*qZzJ*kx*w(KB!V%3Tyi+rv7y&&xQ%r|(k~F}!l4gQ##1A_`Cei^>VF=QXG&$lt zsAcg{$sYK&rFN6(=W<(_fIp>IxYg30Vb4vSnhp<~d6RQeVP&|EUg)9HJt&vvrRx``OE;J+w-9JYmal|qi1(OFS0L4W?TN! z-?Fz8xp626Zyc3Fo5kn$1!!%C-bz>md|_v{lYaNboUyN62rfryqtU~H+|@R@u=yfX^A#EyvE)F3m>uNE_+TQ=8<_(KllczBd6HOmQJZtXVEA zp$cQXqBVvO8g4557XBAd&l<6SkBmv2PJFVrysnAA<1YNQ5yzpIRQRvGn9ak7G#;rbZKQ=XE(C%2BH z$8~^)s(9GGXkg{BuR7yOyN}EZWy{K%WtcM2q)0Nm2>{zbs$QDaFu-D&Wh>FGYJKum z@PafoO7{IDVj^iIK2uV&725#7`2ZBk6C&xItg~mCM{$kKn zNSKY_J9&2>;p; znmnmdQ!nSr^~X2*`!)xYW4`AogWVH#@}4?%d9uaMwFfmQ7qK$Qq!SPEb-2_2W6jhu?Jx_DivYm zu<;XM7g-NAN6^`ZK~X!c@1~2zK2RWwilHPP7qn)r;NsEHaLL z$*v2HvYwvQj*g1V`7}=2x8=borJ^D~# z-Jioa!&usN=?oTYzd zuK=m0N!I}>Ie9uD1rkj`JDHFacPbeEFz z+Hcb7f!Zl>oioqdWPH6mAy4ykb`Suv`GO`qrk1kb~nXNEKEdQYhv5i(TLEr|b=HM7z*fI58r z;GiJhEKLgeEQHD}W=nQT?+SUH=QGbZyxJlf!b5tE_~i9|T{u7xD)|7EO6$%vnKj?N z&3_&jH5q^XV(ZV(M~8bU5va}?dv73456hyM5HAfH(iF5J;cDgX21z^0(C|1qa}a28 z@kxGH^Gg`j!EgV6oc-(N?8lS*Vs3K-2Ch@Ai_0H=`e*-ISpdlgIA@a=vo#8Kl&XW> ziOtsKN$@)b5tilO>Lx>WD$vi4slo5W9z2>_i{g0$w(_lke89eM-bJD zlBpsf1YtK3X;PNe$vAh7tDN?`+}80$K3g)NYW5`14nP>2d)JI|Z2$nJDE5We=9N37 ztYNm6d6d%8e)`q(;TMO)XOGf@-E?=PiHM_r8awgfwl69y1Y^dwib%aFTudX6dxweL^~H5C@G&6Wj}Tf4u?FCxHHm&l+uKV>gz*o5k0?bo`D~V>V+x?5?YH@W6^DJAYGu< z*5v?{WtAH&GJf?g`{vd1o1YeM$HrK6DE%jTpXawo^7L9+jM#07{09#koyKTdPe)J$Y z*h`Q0($5bEzdsm0d6+yHCUwTDVdP2b5w-A26*kM*c!F+ZMUKR7S{EI*l;(}`W?%uxFMzJ4*^S6_eaqd?75iJ)|`(9v^K zRw-CtGz{d1-<-Q)UJmrL69<6o+2g^Jz4YNukviBO>O>Q26%)ZinF6BDE@vdJA&~#G zUPrX|{po-JEE33SrgXg_tS|>wi<~d!=6uFZ``?^7Uq5#V-SON)dA(0GbvRI1oAZ8C zEWk?H5tp2p^C(4N6&MN>Wh<+BYoI^dPrv+Z_~p^)>7%q_2!n(YO-q15`pGKM-ia%8wyj zekjYBEef0P;&t}lS4-E+dpfs(Du}WspF)#vy3Bl`O<(A$=9luXkl|UsmX44N3BfBe z<{4a6=f$hV*Z-US^TqV*Z|C0~FH3I+3`lDkzDl0%w5DhO+FO8CKEMoEaPGsS-VWH1 z&#cej)M?d0)pa=4ow?jT-&wu0h+0R(DNf1gshJpiulP6LXq z#{jQl0HJQO`({C?8Ax@6hr%YLF1N6^Rlq=#8%k^C7S&9?Y&R%Zgf%HKe&G8%fN{BC zWs5a(gXzMaP3>tJ!>Kgh0U$RDZ8SpIIIN^PHbT)iD+<)d;iE_%JO;LRI)EErv=pB?%R?R>|dD zpk+HDrJPPrGi!adBrL;PW!zj2Q&y1W2GyLEo{w8ID+)HLwfulYQ!7v5BMKe=e(UY) zZ@3F2?+bPNLZ0BHgxdUI~yO^s#Wpp&_r5$j@? zt_vXmq6%!2{resO?IJPY23Ny+3oapYwZM%590KG069h7K z3{i*JD|+t&b%^8xHU!uMAGlqS9brkdaBjNq9T8GOOdi7I1&|bbWBvOc05{C{^7 z;xQZG3sp<6`aJ+{l@B-pEGY&M^UCIB1X*-0fznMxsh;6Ryix9!y?X*nN3Z=o06qX8 zC^gbnipX)hLF&HafT*xi7>T&?EfIAzXu~R&!Xn&&h;3J|?mYlL7#~2y2SD}HWAJ*6 zZY)uI&mf5x@)(GJC@Zi)J%#N7;N%YYz_7sw6zUtp;w|FX073`NnP`LUi?^9PR(gWZl3u-=~BR)_pV?I#Vzlc&Py5g}nYT*ri z80US`1K=YIQC-gtt)u(^1RscVTDYO&LiKV@=>hQZg=$)?;Y;el3Qa!X0Tb~7x(yXa zZvlez0JtlW^#jz(2kL#ei35Y)`MIX_0O*pt;{&RT55%wX(XaJ_sOQ0}(gUDV?t~BM z6l?_suD$|6@-k<~ww@&1g=p2wRrk}#SF$9eQ$O6Abl4%Q2ihgvTe<>32+x;q%V`E-7*@9b%4 z5$|9*8)op*ReX|)ClDo@-j(0GeHq9mJYWa+1|hig0m%cwmu|Ac`G%{P{5E6!4RSLC n+(5{|givX326kSs^_goJPb;bI(^37y22$ba>gTe~DWM4fN#i|K literal 0 HcmV?d00001 diff --git a/.cache/brands/integrations/mjpeg/dark_icon@2x.png b/.cache/brands/integrations/mjpeg/dark_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1ace8aefa45138cb82a86c1467ebf3d05b642a25 GIT binary patch literal 1701 zcmeAS@N?(olHy`uVBq!ia0y~yU;;9k7&w@L)Zt|+Cm0wQ-2;3=T!CDM)jt?k{a{%1 zpJDY+5Ch0v{heVIg#8`F28qDYcZM}TL0k}tCIwcr251^sY8B8BptA1_Gl3?9t!Mx< z)_n$Rhbab0{bX4C6>7z*FHpw+|1gWdDp&mi8}c7)CQu8|D6sh;?Vmv^f%XE~Py}}2 zda&YE-#{u6vfmlj{bX4F6(Iug4n*Tph*QD-TK)}W7sw)rQ^5`ZvVle|`vP?vkPCGD zlK&o8O{W7xGPfkiFPP!~LGEKacG>FYFFF0<>%S|l+PRBPKL7mX)xGx_QPK9hV^|-g zF-;MBcmM94+jWxPXGna=V$>_h`)PcRIr9-)+`hk}VUs&cdKRn|xGddp^WxPu9Vy@9 zN%L22+aS13?xXA){_|%He|(!J9yxXIalWSgW*Q6(EDJnc978H@y}f%qOC(U{_{aY@ zJN7;h$zTz8+ zVrrnYKmk}#d5ito+4v1bu3C4$3BSL;w^n$m~>r}e4KmGMdSvwI{iCt+g_g9%q_?quJd?q;JUSHbo{YOp&Tgmrct4nw! zcg=Njuf&e&?)-~)w%Pvw`c2`}3zxs&W^Ql#TKR3h=vL`l*>}0jQf~ft?z$Cgn5SyK z`OW-Ad2eI4t$pG)?Qigvw+)%Acg{=wFH&lqajPru=?#0=yU(JxExK*_%|CGa^J!~e z#Pk7`Ug z`se?*_F_yM_A|WEXZX#1;2*in7w`YFCe$*I2Bv{yUU<*S z;lRig(7+&~z(6|F;T?lmWXiJM{qipsGwfoU`BD4p#@Q?ZX$->Y4Gdm<3U+0a8MrtW ze3uN^U)kv;#(#W^RK`+ZA}#ifK0B#HhSlZmx?9^OEuFZu;fMR$56TH?OVVod3l4qI zE-z=@tlZof*7a-ewmjBirS@}cR@|R`_1W8(o=+}z+HE+tZ?8?2jBnY+L$+&r-FBDU zJQ8dr&1=5v)QR977y6b-SEW7Mf6GeZ?DsF73)R0Dshrx7x_hJg$3L!9l5Sty`|aQ1 zXS&US6BgR;&b51Zrmc5&SGDU#oxfj9xwh-p%D*YwU%|@8KpB|&hvCI?_cuqGZ_9%W N@^tlcS?83{1OT_WsP_N> literal 0 HcmV?d00001 diff --git a/.cache/brands/integrations/mjpeg/dark_logo.png b/.cache/brands/integrations/mjpeg/dark_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a0748c3147c6c523a8ce249483be2f347b2a0973 GIT binary patch literal 1063 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%0DhLX>1mU>^Q z=0iKQU3SOMe`-Iw^%lGI(o5{^Z+lx}It}7Q1fNFrv3Ndq^3hJQU;p~oZNr8Qt(c!( zW&FEL_n>3%>pPUU~wxeVBx}rYR1DXP7nIu-1OHzhI?~H^fhwso}>|c z3#M{GWS*q&nyelm&&I+W4fUzup`fUY`tulj4)PdNmy2ENfBlPJv@LFuBfme%2Z?Bl zF5POWF57m~G}rDuG5Wt~(IWW#2>cy9^ItOEPV|gJO+AYu^OJh30BHC1srXDPE`X-% znl)=QT5aRUk53Q(-+uCwn8i=*999m5Wkw;>Xf+^#L+LngnzS;62K{%LLN5IVv|Tue z?ZzeHucg3gacZyN6Si*KYQMPcR=f4zf8waRY3SgSQl2cx(V!gnxzz0EitW6)o#C;B zAN}Y@1o^aLeh3w3{%Ky4eWKOWqg{Yr9|ItLUj~TsN9~TdfW?a!r-xXJS0+xJn5O9d z-~aVL?b&CZA?SxdA#K>fMx8h)49&Pe3MA4M2ml?KE6C%zpO#)pD!Gy{;(53;zq#v9 z`_gAVZM%IRzW!txD;}l0n*3av3gpt)yw832-Dkga5Ebur@XUXb)zqV1096dV+67>t z!oO6+0`^37AWBr@!;TagZ~|ZW>}T!!-%D^-_50J7TECrbx+DTmelDe{hbh2r#iU-;C&+6&(E@a=DZyS?_cuR(6V@{gw`KmC3F z@%it8#n+1a$G-vk_&x9d0hg_r9|HA~>C;l$wWc0z`p3UxuNDBLFJ-_&j0GrI2yOuD z1n}_lx|AKb;`;j8pCn5mVEW~RJRe{N`?Ymob^Fa%? z>C-Rn`2oM0V$d%#ey_CvNRRpYM*PiAd*dYGXMKd2M)lPc8sqK6uejn0FK=C8pZGuj z$G-lxuXqY$}XGjn)e%D`LccKbDy=Xn>X1T z-tY!{%Uj-JW54`m5^Or~7x^b(h_G>#c{x{0Q`2artGvi}`Cy;Fya6 zD1CfC0l{V*A~JjSY}KI3KnXQC+0$uP`CyE-t5>^4@NxUMfB9#-|K59T(}s=Ga?43Z zjj744?YR<3I#8u9^6C#i@PIS@m+bHU`v2LTzx;&_aj?>R-}_#>`s%CE-b}wAiKbj- zw_eWSr%%u0stNd8f#`$Dk7$1+6*!TG3^~;6NbjRs0PF`A-m7B(N@zrXt*_VU@Arp!movox z6I!}-DPjTaj1vPT9D9XpQl;b|Xc zHR=!c`RkKCMRuaEll=N~r%pv<4luiZUPSQ4$vk9yB|WZ!pz?jt`gh-bH|F%Wj2K56 zKW?mJD8^Y$$4*JGZjS{4Q2P3quX}xs4t>scI}@nQioh4*0%??(G9Y{6k%`DaK)Ida zHSG`@MAM=7J=_Z9=)vs$`yI!7@I7|oMHeAIu1u*6Ug?g+8T)#S(f7#sH2?WIY9-*i z!PI~3vBzk&R6HOl)mfQVoH})iYyS~e)3L++$D#n>O!D{o`mL`MG&Sf<(s1fq1rh=< zC=UOqBGuMdD0+bwCv$3gjU&CkWgDA4$`X3dI1P4AIESIUg@eWCHs zJ$Gtd&U?i3)AEE2amjB_H?k;yZTih*f*kj$}jzz+&V-3JcZF z5uBr2-jCN-x&TqjlksB!kR5yOzyE&w_P4*iU*;$3kMC9D_3ONC_k!mZ`u(tFa)iV>Sj52_?f*eZ4292mQgv806zj2wiR-@!%dR2I1?2G1a#QMF0*N zHfm=sJsufRV*tD_&sUjgYCWiM;W5M^;O7I$N3>(4(y84E+x+ieSRe`(2#CdtmtXRV^N>JgliXfzb&|sS~dDPfsy+H1!WVFbu@AF;&Ru{>>pFVv@S>JW}w(qglZ!Gljp z*^E?H+$Z%Cv_5Tpu*GZaboX5&Xw7uOM4Z-<@OYd8 z_z>RP($5a>Z}~k)5&o?dzwf1&UW%Y~<+<4Uy*sF@#5n?gpYe5Lg{j*ILO{QZFeO@v z;U5s`K)jCe0rkK6J|3%t;YNm6>mZ`{_&)A4V94{UR;^0HYRQr%WUNX87|MxSKN4^b z+tE(YuNe^kd7K))+B&|zAtrz%%-0bkr;#`4tCugw!c+lemI)DCrR1(4^ z03M$ec*@|BvG-f3qtSj|AK}P4gD*9R}m${`(w+bpNCY6COZtbpFDH zm#$mC{%U_uKlK=}AP7Vt6i2|6B?+>pD+6A#J=h5OVKEix5QV}aeMj9M;F^QJ_p$5( zM0enSXSnc9@f;9?7&MBwfLa3#0s=S$@XUx2BY+z~k&bHd=<91#UdwRRLLl?=brpbz zu?h4yM7Dx64-S{{NkBR-nJ{kL&rTgYcs-9zoiynIcPE~DZqcGEHf`Q~f&Zox^`1JG zJqv_r#YM@$5vgSOQtsE;0bmubouJ)YFmr36(WzTiCY}8~y1yE*Yw1&22z*{O5U~R7 z4&RH`fSd;dVj=gBnffTr#e!eVYob5T*Xq~DXg{wbXb0v!R{AUejYvnx`1p*SBS(z5 zWBiygPy1(<6@xo>oIiEy|Hs~0z_@M%VR#Sh(D7r&GJ~MZt(d7ODl>zqVyKuaDu~L= z%*+hO%*>aI(|@kJZ8Tat8=rH|yZDzrt+Nj2W_D+0z4tD@hxfaCdk-5N8ajDqcJ^?3 zD1R-zmkn3CWEVFakT;Gl#OS?^&iuK&T1in1p9n=Er*uyR4}&9IrpML5GKqh2o@NBJ z9GFH{%97K6;UQz9+yQq4%J?aHMV{Zf7GL%aK)D(jkaKr8eKpz50q@ z;3JO<{eyQD`HT*R|J7j!4tx&7n-c*DP9QZhI=USpO$;*y`#&7V#%HtW7;ntRe54u% zKUR}U^*1&&5Tp1m9Ranrw;$Wy*?GA?2Vg#$a)a>kSRm)U*%I4J&{cieGD zC=Q?+gsBDaAb45M295+=s&rN<9RVRsrMBN<;$=f)qnG)LjKOG|Zfb1&8dLqxFe8~2 z0VjyCMYhrSvm^z3V%4)(2O@A3A0nPOtI1AhlZgSYjK9!OU;jNBKEjY0QTn1JXP~3L&VZ%C8jt3@I>TGPCB=O2F<1Gv z?J}L^$bQef2SU#>%K^A+FSr?81rl!W8>*&OWyA?}&W}^b&6G2!KfRJS(aFSEbxA+}2{(Ps9;|xQ<_mDlod$Od z{+$bdK3X|?#T8em{-3~;<&p#NQWLlaTn{$7{ysDTNHgTgz{N1v#sp${=zx}_FWXy;|R6Tutd;e}}xe}vPQbZ~R{RJKe z*~kIt-|G?JB5(mX6U5kg843jVxoEW>N{gLXci)OBek%-r5OIE1tP`cvX$#eW;oy^&Op}cE!!T6+4d;PXQPZQma3?27Hmywa*z8PKuwZ{juMKv{@yk}Au&JkIunZN};P*kb918*Zq_|HdHW z|B{^=2EPHFJ_DbWUKJpG&4G6$%IF)w9z3Y9i^muX}8XDFgm4gEC+s%7SspkGVVS zVCCEjqzlhIH-ToSWQ%kfb^07aB+P{7ZA^iJ`hm##l7S15RhK_QZlf{!cve04e!4!6 z?*3ZmP;B9|*U5qFXLhO$ybZVpz+B`20@S-7emIY&S)!Z*8Go&G2KBO4)Poc#OOe6S z>OsRhXDeV!WNY*|0r1!i9TQo|ZRF;gvhqH@DGTr8t37kcJqKw^fOyWe8l;xN80#Md zZ6PfLiUgYoP+AKL>Wkp;AG^=z$+NSLmtMj?Pq=Yo-f}b9oMj+TxIS6 zA_tL{i5j4F5UCvJkObAhQn1@z=PHXBOQyjxwc2CWhx+tU0zy)By4tdAy@4CaB<|Ka z1;{9dm*&menQhhO z|1l+V{XIFMZ@>LEC6juOYU=+lL=GTQDQO#c2AmFpQKSj*ENC-u08t1Ksv`A+GjoWv z4)sqv_Gttl6hr~=h7R!b-xeA?n&ff(ygTzsxH!cJKm&k1NNub62?)!bIa1)bv%Zho zb^rhX000000000000000000000000000000000-J>+lFS3at+S0000}?$m+;e9dR2{#Y9T-dqI$YSvGpX3-4&c(HNtCw)D+JG<1DfZ*-CR!mz70Ot0X6g^rPzW{#4X#kIB!)zM@z}5>$bA&F#eJeHuWj=>v z7Z0WG0_T~K_qR2&{yPb@j>X&%Djp9wiFI$@741GT+1!eA4j@*GpsT!~>*2cW|D6kJ z&8b*Lwk-@TeX@J=JaH?85-7F<6epfT;{lNl=x6x3jEm{FX-S7>@Nacw$z9;qy=MIO zC&R=T$OmVQec}rFtg_!+ke^WJHUuvRg|Vw^!&aC z^ouCI=6!Z#SIPR{g=r-y&0V45LBJncn-hsUCL>aH2A)$_28doVK#eTmo4NS#?66el zZ9eQHH>XeU+j?J9EYN!x(>^$2fJN$ zMusMfF)-=UB4MhZr;QZkvqkL4>!*wVUG1L{(U2Pb$I19v`Zoh0;cOdL^9%!izoj!xM(R}D>SZ&ZaRrU90~Xy=4y2Eg*Y?aWPDZH(ia7lrbH;6 z-O?A$-R-7#z@IDId3k?b1@-m!S8ny~OCq+FZe&#EWCWO!X&MKO1S)pr*1dkMo9>gV z_U+rmtu!>-h9FR7gq*X2V1JsOtusxPE^%ZU0~$k(ev_rvJ#^B;nH#(5Tk zzi1%Rt&pRPY(Ja@PsOCmev`2){nW&>Pw6Wh)%&G9t(6=4pu_0eKe6N&jmm)7fd z^E?k6u)8W8$K$;6k^aQo2k*jd|7mVcKLB{I0HL#D=g(Hr{RIQ$Gz~h6++2;S=e-so z&3(dtCd3QVb6ni@wK*UHKWEjvR({}$`r`ZdkDmPF3x$w7%gM)F~UD7LUfG6ML;12_4F*oDN8^y5bU$za(*SWs-wyt?)5U>CMRPx z&5PfC=A%A~zt?5$=OCc!l0^}O<0-OsZkB7rK&$A?u5^ULl9be~xvC(EpngnYo^GG~ zZdHlTrJB%hq8jN@n+mBkiZ+}rwArMv8q=gxOd#8)gKldugEK)@_cAQFk64U9%!5t8 z)}6g0DS;Z+#V}8-X5q(2g6YO9Y`^FOM@%DuPxJ?D`((N%>)kR%-Xb+RUo@{tlw<~q za>EspN-+Twl3|v753DYUSYBnffe@(vmj)v*pU2?hsEZBmhj!%^*G&@IT&L<2lDj*7oTnO-n|8Jk9DD%+9!$fppKQ(SMpAz=@^ZS~Ax0~`9k=Z+mQKX6DkDmi@kpSnF%#}O4ea7hH`s*;Mf^S)R z0XuZAxV&`Lp#6JHI7?#VTD5mnloMgB45GF>fALSr)6g9EW;$XccoHVg(%x_(x%)1`xm%!9mz1;YoeL0{#@<4fV^vUoNn7Scvx3 zEKV-nYIY|i-GqEE;ZR%HizQ6aqOrds#^Yc29jJR$F+Z06TpW4P&{My99pO$S@TXW9 zao_t&kU;qzoebb{L!?A66>P=qF5a4n_i!97zkt9Q-@F>A{#Qtu@ptru>L2k>e2vbX zP&rB3SvNlcQbwz0X`{-QV3ZaK3QDz{_uX1dJ0TqUOjt-=^>=&D#Y%bU z4g=bQT9^dFgA^dDYHz8Ko9BFoO$-oSl|ORzdLU+(vscPHJ{s?BPCj0F5sUS6Q7}II zms;13!aK(-U-LHMe<~vw{(yYCQ*msIa8!fZ`0l&cGk65}hg+`IX=^)meATGK#YhLO zTC#HA`uy&9c;KoJ^+ZJ^a7t+(dN!x;BLV4gNYa($YZK*T1Dr)(zc$9?55Kw+v>{T`w&>VF&xtqdB~2A z^snCOvbR0Wb0Oy4NXWg3S#s7UjUbp-8YT%sw!F^eLOsPJ%bCtAV1?2UJ9svt*NQT_|;3jm{x$c>G;uF>hejv?Jc$=>9TT}vGt zS<6PhbxqBetWE*6mr3=)PWxLNgRDrH?$lTf?ClWWs~P`L9@RuSg7-sry7*m|-xFqX z)h;7NQ}Y-?wJlfT!|10BgR~I;agbRa*^ub;ll)5H2@`UU8vQr{VGO8gg&DoOJN%P6 z{<9axB6Q%2uH3-Cr5dH3>`LpiMQ}QEDEC;#IN_wx`j`-n7QCSZjeoRX|E*kk*_Rxt zaNM-z!-eq`vmKoI{Y_Di#rXD1OSis2s>ga<`4h?ggkrMN-;kpV&DJC`!A1%WO(2&A zXOx*b7+DsT>vcH2LK?0VuXXd6S-7>4V(TH|E(d(FBJa`oSO0R3$cetuE0Yz1UkHh) zBQOdim@G4I>+zwSC#s`*>Q7ehg=g!J+fSxf4l;tKSq}S25`IMzT#Kepw;*x-SIzry?eVmkSx#o4QmASVIqZF2-*5uS3c5( zWkHJ5Y=qR}LDGL^y%WtG_zFhJYk$MfWr17Ge{00O_M`5N+*S(itId7R0=U%F@$#j# zE_t`^n`!x`(Txl(^)hkwU7M}M4bDxkb7>riX%MvLMSVBxK7(9{zY#iBF&D#T9u2#@ zqa35PwZ@2(1sp2?1P@ppVARi8zt&72kp(Iqqi&PQ&f0Y2yoT_OR9DdAlrMwK`x`0J zW#o*4j6aTE#o~jpcc9st7&3K@JJ*_?n>3QNsZ%LI|_6qgU%ZdcN$$;Zk_Yz zH5r+wnG!hLB&qmKi0Swc@{N3*W20@%(qVy+8kFLeMLw zb&%*9yJP%+OjB_`G~iErRfYP}WiT_pNyd;7vDqNDosyFDULZ4rxjE2aV(wP&wmL;+ zI^fg+eZC3ow@UGnR0%LBSD64}YUox%Peu_|_GYix(OcN*Zer7-US4&};q~1ivPbXg z*UGDI+5Y2|UAY|d^iSwdCov7LPYzFNZrgVMEERz&!oW9NH@cI59RW;jLEWa{jp6op z+Fu{?1k@h5zP)^;-O*1@gKjrMrd#=eGpJd^Mm4*}fIg>%mC>t~GQ7nloD7Mcw1u5O zE3HR?`98Mk^*6R#Oe8H||so)z$|GaB2a`nT;z*`;M z^wud)*QcAw&a{QM1Nl5N>T*MRnh7W7-7XD};@l_{Impbn8&fL2m$sPwNIMf_s3Avk z5YF__t&N9fd%wXNunit*``_e|cWA-_~z7Y^d6rA^iKF>$Q5P zzB8cUbS-Ql%6<~H8VbM}vlIuH3q$e+0P-`AT3;CnUA_-Ukejo_if=OA{nWrZ&?9as z8>D);e?DN=IYm}V@LuY?Z6Z^A{XZM5{rlWeMh~4%yF5quO(&_F-n`M2G!GNDwm8#V zy-oRX7_Tvl{h@Z)dD_j3W|sGju;>Y?8KHVdrvSa&zL7Qpx%n5e?HU@OsWeX!giD7C zLIpLtMLJ-)(l+xDu@m9G@==!^f2tWGqttv?cPO=**mSFVU*p1G=D%a8cb-p?unfJD zvRKjjt>)R{5v2Bad5sGO_duRgM?QOQ{U%78WSYQ~l3o)973|2K7nrFxS0obn(jDTuvA9h(Ok9gb{ zfCp=AYHODx3u9HiI}un{5U85KkRaqY``cecRb9sRl~Bw5mukK|=0-MgBj>(CPftlC zrHjL4fmColSlgrD!GVRfoe58>Z#xedsM!4c@w=9^${y>yzWsGxQ%wE!GPzcktQmL9 z`R(+Ci`>*EYepcokh2Mr34Q=9s{n+*K+$l|2W4t+<;Yx{C^y3+MID)gC$4zetp(c8 zdrTvDnY7F-Ccz?GJMB3#u_|qc3GZ`7JtXb{#QGdE3YPNw7L#(3*W*-acA{52UXa&= z)kM&;^zI6uMQFx$053_o70?A!$pu{T!zv=C}`Wn(I8d z|0O`$P_BfYOR9WStm*cHn`_@zb@n|ZX-X^XU74>NOR4hMb<4QF$LCbGCYnC`%40B& zN|NEUsLb8QNh4Dl1Syt4{}b=k8;{uuGDCW3;4noHEx}`>pPIO;slY1K{eD4y=zZl z$-l4H{LB9+^kRfl{F!>zBkg+ijxYjF0pY%nxnL-3)~4S#UQSG3!X`f4xgG=eYoVF> zmS}dPEtnc1AaO1b48ie=K6d+1VKgCv8(9$wd1BS~4jfSfP*!b)cx&I&7ycTXz?0ZN zULWWD)vD2vh+k3j!ti+0)Bn0)f{y+5F7eGVev(7%hN>S69j&R#bdJ4g7EUwY%lgp$ z%63KU(vtde@RuY-McT0$hANa@RZDz*;uHO`WlCUp^C z4bq9*=jF&*xO$Iyr%TK}d)CHD_H!PFDF>!1oS$6E8*_L>uF>K=fsNVW4)4U|smnGx zbIq44@=G&j&Z~$7P7D{03nNZGrf&>nGq0QJ0_9c!wvCsLg5pXUm;uBD0An7!)31ac zKjjL}o=CC!?_e$5d$)a(&>>j#j#l!kMI0}Iq)M?*`?|V~5^#D(Jlw7IzbBSB(`?1b z{!HJOT$3z*%hFECV}}^ni@>cP`%YC63GM?;hm^l6l{OC-=mKmlrloClTn4>RYx+TW z8Z;%AuM z*?*O!>)D@F_n-JM`)s85bF%MxDrUdd&yfo*p?_>ep|Be_p8EnN>|+{>jabbpY!E1; z*b4pkm-1cnX>>JeVO(>b@%@pH%4Ta{H4OJps;SDg+355On+YTnW9W_GefrJA?DZ|& z{(#zB-}86Bwr=PGQzGb4ki5spUjUg&nKWS50c}+5w$*!b%P|||H#XDrR19DDRAWX| zT-0I~sQ{IKHLDIey84UR20dd>6kPc+x?z^=UH(9PpBh`J;^hkKM?7IR1~ZSaf}e2K z0iIuUr-@a8?MIop;o8=QXCz|8d^grNMaPYTtpOaLA(bc(okPXkmnYhqZ$hZ z7^yOP`D&&l5zqHg`za)eWR!5MiweNM@&8)Q_o~4M=ZW3)7)@|*q4ZgPxjQ+ZX1gob zdAx4l;@Igx^z_3HTAfK}Tuo0Da)u*P?INPr73e>&}GPx6d^$S6}XgQ>z@}K$TVM zPMI#uSAsl|ICigN|(nu-T1lHE1i`FjpOQ4v*E}l_>Wq1Ep^ij z?O*Ki*6^#8Gz#$je4*O$Bat^d`gYs7+UX70;S5c&R5c>j)4TWc=dF5+wjb3=AGcjU z=JB}LnZu_2z1+OGHr&)EFjoLqeo#czluCF6gt8z7%YmM6>aW_xQAUev`skE;ax_mv zJMTVz()B!8Yh8`1{rAbRwW7HGj^o%q9N*E0UB9;a(1hM1s?=Y3Dq!?)_WY`hS5}?i zqsf*lHq~*=gN)i={e8zVVTM#gwrSt+74p7=D+oe`S&fahH^6u5yjuoQ$SDH#F6_S# zm(F08VhnYS&J81k6f=)`A2dk6Ac=%9py|oY^UhJLw#cbzbN+i$H|h7ztJ+rgq!UJ5 z9{q0A8o%ray^MltZ{a|6jRciF&2y{#;r!>9!Y9R73SM>7m&Ax1%LJWzL}^!YQcyZC zi{t3hzEJ0@bN0ZNj=$Oy%X~LAFnvP|T92->O*%)gmn{Vl_QZ?aLdW6he|>Yv`p^5S zv&I*%ES2y=wq>czg9Fb$jqtXeM|fnx?s^T{=lO8i^!2`E8jei8vvbW*g@m;(e`D1i zt8H?z_m+~wp0mW?<*EP79@WcVfppkhNy%VO;a~8G$Met=ks1qfOlmzfg&<7(yb#_f zebFX%vhfeG)a^C>iA}6I$#+@UZ0Gt90t4C->ZU`d$c9Z45;9R%1wJbSGp`ozPK-Qw zec9&gaZ@Po#KnjD+k0zcC$&TntkZq}slj*OD={?Zq|9__AEB;krDNqRP1RUn-VI~$ zXl1U9-UFwsqN-=*pp2xht#f(fW2ih(A!h#0F zenF)9=-kZGat)USt~ekH+(PnF{C}S&Sb0u473(SZY zTQh(9G3%YHUlo65ha??NNO0dAh|ps7*^ZvB$orYWP*0rfA~2u6VN2n=BX4>Q3mb2c z^2f(%orXklC9l?SAAet}3TUOoP7v{CJ5n>T;2qO5pqD`b)Lb_lyrmaVMWP6r%?Fd_ zuB!Y;-D^U~KFj89HUrQ@B6j#qFG93+S9t6|pt&lmI(Fzko&wbt8|KTtpyJK)5@+(! z_qQKDw=arQPS)~~WSO0-+L)OKj0uk1O!lC}fjyfKy|7!kY>k?`vgd1u12dd|A)N`^ zty4qr(@eulSTQv1VOts-MNSL;lmRV9jTXFm?YT13hEvduyyS%bb{&}xW7*d>v7UGA zBI5pKiz# zpZrn^ZvQ_4d8NevQ(d2v-zjCpFca{J%>v!7E;d@}Z@zIZ4Gw@~1Cs{eKaT*`_|E-3 zSUN@0r}FcXpJvXKLjOYwQ!6VC1^0~Y!_XLK+ zJN?TsQ>_w_b7P~<>gu%ee#fyh_S z3KaEn-d0UVZ(`DWL17g2vWq=edxd2-U&@74YW}4qNu?w1Wi&!gdU;bG>z$rM-q^(q zGMCWrFLAOBc(ubVT@3g!)Jsrvz~Kw4tAq{96N%eYh!-WMJT3?-b1F#f1rkY?>FvWr z0H-j>Q`f&G`bU5j?tH{yJ_+yTM@e{p@;e|_@=lq`;S86OhQP^5Lv-*~5|ZuuXUF9s zFP0;-oV&YM4=SC_>ejb@HpbX@-#08Lf+cFdrtH+8pOs0FprWMz-{gUSBPv`0pkR~_ zqvRz(nTQ5*q{KdZU+v3lmvCzKwTYJY)l8B$0P5a4A1eCZ;*^EnfJxdB<9F+DObWGP zbR<$xJS_oms-=lJyBD_z@)o4d?L{m$3=fwzt-J2|o%;YZB;d8|LbH<~t6q5pVWI&? zbF*n==i?te1Cs&`T7*PuuT?~nA7znkKe=)gAh_Nj_64!@g$WLat#GSjx1KkDZu0&? zp-}Kmvkx;djPKwK?ax`){q}7+g5&ut>Fo|n0ID&icu8UQ%USPdeQ*xjS3Ss}s|>2A z@$rjiov$A9j1ilEYTdS(Z32Wx{wMuX1pL;>^QC(M70^8RELLjtPvzkLX1#DssB2`N z>)RUFK%SDw+88~lw-++C*^vj`C~mA5b1|#X1jcy-ZZm2!DK2s3CG=B-Q+=k4C*8lz z^yr`j?_}KX6gm!8`dkpVVR9s4>~(g=~x%&3UCiA^1>iTS7{6>ssK2gv; zeW_9IZquTyZmaaW4|Q}#ZRDS%T5Wutovf4}9ns}Jl#4TOn}`LkJrTmWzP5=)9roW} z`KtyKZKGPSB|O-137)4OOEEO-kw1xY^-eGc^Tl5gbR8!Q8N}SzhoA*@>CT+!n+}PC zp()+`Fgfhg`qSej<2hgLEZkkyJ9JQK4H=v)!q^ZeiA+gP`{e7RV&8Hig-f zUAo%bQB;?`?mEvRWe=Y)b3s5A@5^22-ZgQ|q^Eb9Gx4JE@+a)^xDZb({F8ytNO>9B z@W2-k27ciDyIEh^2kje8Qh4*9?+sFBI0x`mg@zR?AlHSLC**Rlu?;^|!>()O5m$5r zHdcqrW}4c1QpdZ0yu}aTPxS9OsWy>`pD-W;$6B*9s23QJCfvwE8ngkEcG0DSZ*f=u z4D|nqW6V8{L=mbIaz_K&Fn>oz$`4&pO^QQ>okr{u#dpI!@1{&S4lQM8wR(tbIloHF zwi(j^AcWE=u zV~>P{`e`v*KyMdRMCaloZDvy~a0Tkwex7so+iLo3>3JzV_O?_-Uz)$9)J}f3%w>m$ zA(g1`t@N(ZV#@NgrKIsE{*WKbhP+Sad4~_Cxq%w6pO4p3tGu68FLxxNmcmtq z8KFw~Tj3@AgHYXf`wCHR0@FeOb@07;m@i2v4aPKy_fZmELWp@D9_wWHf?oP=X@iAV z5Bcm$EMWFi45C>R_XtSuf=;afw>|eoUVse*_g-x&ip}0HBCIdD(==FL#b1EMazE_6 zDCz8wv$8Qv=U75;=!wVLSRwH!H2r(z*k_Qh zijq3XVq}_zW}91IC~85w%fDCA1vD+mR!Hx*xS45VQqzke+#*h}g(&6R|7dKhA} z+VxffxU_zOLcwezG)GJ0ths6h6*priSH8?zNV#;ux%GCF?&nwGH31_w#4UaxA_fMYX7%5zdU(6?)fahTMDqGvep~t9H zuzm5`rT!Xc18%c28!VSD(xAzVkZ-r?f(EZGvLofyfGJQ%&}d0kdCXI>R=mIASaOhB z?IIet9dEa`o3Z>fVyj*>%DB2zD)ij7{(a9UvUX~4wLF&LJ5io@6ZCZ}QGp~(Y`*(K zo$HF%+?P+N`77<7U_Z;Wc{vO0j;l@j6_U9f@Bj_7Af8qn9s4pPBY2R*lqf(dh+@#_o-Zf)&rn=X~v-rA^B4hS|Pb zIzB@Kb=Oz#>G#ci7_2G6jt;8?#i@lsdPFBsbwvRS9FC)e!+#+%?jZ zlHmI{Ua#?Nh*zk=5G!zh3Fuq_wuA<)y~p}~pSypLQGowprr$;Vqu@6SYi5TAeMwBY zT%sB)boaE7kUY>DQRUhg>$`4@*?nL8;Cf)02mMfR#`?#@ zHn-*tCxjLAr7mx1B|@-*XoWfXRD+F@dIfgbBMwo&yr$VpKp0GszFE7J@z(Cj7)I%- zMLg}n9&8mSC~KEmkGGOLzh)Z(VkWlFz;Fnx7}1zArwc<(ME=H@-0#NYlcUe) zV`i)q8EQ~u{fa;vUy-mR?DR{w8(BNIs0nagWh$=2FM8K$^9MBo9B;zTahAd?v$tdc!{kMm3CT zqDxVKeeBZT@?SZ>feBtGf#wRScJ7h&RGvYYO-aQg&kc(hwdAIGrGfq&nJI!1GKzdQ z&H`xK(Rw#n9H+a6V}l$$m^Wi9i?qkvUcW3JOWdeSCpO+WNrW|}=C4%`?(_PU-f&HJ z*hMCM$l{;SS1_AK;&rf2*3#=&Z`Z39xn5q)^PoRnv#vpfWNM!$Iz_(=#cuI~DEi_4 zGyBl{n@Ss!thY+voa|2t2&OHcX&pXKGDC5ip}u;mubFvu z)^i7&jh7uGoSB6Xr`cu=Z#*(#b92oC{u;Hq_W!eJ;6NekJ2`HY8ENba8Dl{`6|z^s z9=--BnULD-zb&5p)vHv3My$hz^UnJpz=+#xqb0Tquqt6bvbn-?H`uJ`}SR*Kr_lh zMep^WRPOnB9;7}48U{)jKgBpTo#1eYbOaz$+O4hQZ=(zX>@E07Y>oZq6!%ul$D@Pn z+f99PEV(NlY}WM}HUgJt?BE?$S3L}P5)(xCUwXa6vs6z0^U1&u5WZKo_Q?&k(SBQV zY-#_$ex~<&nJL8>#siq?h5AvUY=jIXxMw+`+n@RShV^58h4{n-e16tHp9oXq)ksvp zyRXq*;0=u6lc#8x>Pt=huii}g@UxnydXy%{@l}3RpG2aw)7XOeY1=TY|k1SCoa$`)Kx!{7PeTPH$n+H+mDq7 zHhFejA%N`@508xN)whPLz7ctPh<>=be7lt<{XWxe)OBdGp&@hf)FrHx{|GY|*!s=_ zM@9k{vp${L41PJFHH6-|vV{VaP>9z4%p@08&rz3|W`2uoCzue7*=Hwc0Q`*A@63%nP{b(iO?rXt^CnzqTg!#NLNe!9Ae;g?TsPf zG(oH>-j@WewTpuLhV}Le5uV>7)`WH|LD^f96C2X3R|%hhSM9<;z;<2K5?j;+?P!qp z@_<6d(8`4{!B>a8Z|qdY(t!tRPv=}jvLOsTpsL?9wD0iBt>BWH6uc!NTD3KM15_U0 z-3VBSMZ3D(SlFxJcXuTa6&V*{mH&tp8|i*6xu5;3^Ps|W*-oN+^-(s8l*abTK9NSB zBrZOaT4Vn3161?FyeY5yx7A-@oPceZsp5vNEq$JMCN6xGT#qev*O?4g*= zy1WF>r-4fRvx4?HJOO(>XGW6I0c;;Uf`S1Zv*S2^aC(Zl43w}4(K#eK-l}I9dVO*J zAT;ZAv~fpuv&=PMNPuT7n)aUl+N!$S^miURqRtot*gOSgW~)O-Q!4>ucOw4BwAsP)b#{y14oPNr!WE;H?l!pIQT0)Pd;eSh~FrzC2orOWqN#_>PLrP^QDl8{y-Fo z?=_ToGqW>p`~7xPj+TvN(X($dTmzr3+94d=^Q$-9`Pg}!R&QcYQPNvAk`z_Zq^P5 zQ|mykld3{J0&z0JW~lCOEpr+5FC_&mupnfWBDNZM|B&WKLrd0wLvLBj-r5a*c49X9 ziy-MCZYM=raXVPpEptWT4L5CiJ$`CUPO2LJU7FNan{}q3(Ct}CO39$n9c*lFcRibn z%Ui);fE+yy{CY*X<<+@@yJ6$<*Z%Y3MHr-*9#B8^D*}y-U_i{y+-JDyOcgc$>FLJM zF$evcP-I4Rz=*>_B|{l%?zLX#&+%%qjTmf+5H7SLwFn0vwJtObxO)hi=+rAxCx!^* zvpiI@Pfj}x^3PF8w?Vvrgk`C8e8?OeRQEa0BQbC=8!n}f^3ZbAdJI4f2{pF~6^$B;_36*A0d~3zYR)~g5g>xrFU5$8e z6czOt_LT1eget!J&v&CC&7sL`sw$qH$v@+}GKEVSsY*ip?%&n0Ka1t9YY>q}VH$W6 z7U;N=rg=XBP8cXLt_Y!^ptfKu0cxDbD#MxxB?vb2VA($e@{Fqyr7b+dEWn$)073v* z(^HNM&mj@860Drzg>$6+>=2dJsyZ@1m8)jXj9INudAwZ+T`&f8FdSp)9$||6W{bi; z_tI5TOj`!b9aa_ZjE&rQq`WK>Cuhm?EGfG~iT#m>X4;*Ehnbz#r&TU$lj+K9eQ>x1 zGL9v<*Mo#;mGJ)9Cf}j|IzFwGZHGAlwPFcQj)o;RV3Xb!@uDvc6#Ss2VZbSuMX=rn za6<{GzzG0dvTxo=l^cqkIr`Q{iYy+t2?y&&j0~5ZiPcmL>yHIa8EmrdtKhOdnQ$CI z`SvC}L)JPpoR7yz5{_<~XNn;WN*F4RAV=%oRN%`6J&9pJcV)*`WZAIV3}{3mA?qaA z(Na^DQv;<-yl9W{PWz#j+fBvD=s%*bWvy^%k@TEZnUveK^#bc#V^!@~ zX)uUluuHxE%SZD~q_Q{M-#PweX%&(F=6QB2s+5$mziPZRo3iVrnx%+akfaAdbemW` zg`X?fwTAZFh3~U+&}b$KzroCf4v{)fzj4P={3inM4VFF&?C-60Rx6?TDVHr}Bt=z> zTt3$)jiEyh3I*0(jj8lPq(LBnZIo2QNm+-~^~81vW;G|SY(Ghcw5U!wqU{Nmqz0P^4+IhXF zOAK7v4zXx;O{U*38Oxl;&`#;!Hx+(XUiujqQo#Td!mM*Nl1R9zT=?rJmV0r+?KF38AvDx|eDRk{|Im zAQ>^~e&scr-)q8;Pn96m5?csbH5}FRN4K|E$}uo#y#8-u{=ZIYs6<5wL#sci(FIVFK#PnbD&QhJP8RzYL7{-s}N*-cc8Myh010L zwb`ZgH#0snSY5dF>F*DRT)~G_m*9w`T*Cz%^YHM%AMJQ{WiW@@qXdr4s{2&wyIAjq zGB?zJwM3}RXW#Z$Nbw~NgdNedoCr3*G&$hA>X#Jwrfj=TcH;s979+&|k=%VHP3tja zz%35sIe*RIiOX7BZlJ=n@ROy9v@=KeN0Q|G%c4;2MqKgxT*L5*oWeqzarH4%8kxlS zEIk8`3(QGBZslE!m-uE+cIP?t!89RU=3#`)!?Tbx^TDS7ZbiA1Wn3v8j1AhWYnqSe|W^RJ+*`X-g4jEzn;a zpcrVFnnVBU8PWkZOgWrZkADg9T>vhtRR2Z1BLSrAxr+-@P7^;_Sw9YbH#Y8?X*d`$ z2hB)7d#gPDh!}4KldD=O^R@qdQL{a-B2!wq;i~@R@yK(>vnRw5urRO*d~d>Hh=5Wb zxjJj6{>+dYP#*;9LLE0I>BLYE2;+T?-(mhg$(gdQ#AXN1CV_%jy8PY)aPyD9hU8#X zXUC%dedTlS<{Ubi39hf2vb~G1TC?~!6j)EISP!voxcW6)-ym_280?lZ7Dd!DbI9ST zUMJG+K&HI-*hot_nvBs)+4v9Gr!^9nrjy3Rd}s`fz+&WFO*ct3wbRPJ<9S+_>_1}uOAE3nyc%|OSW~t!K%QleOxY4jOZN8E0S)^28qz~Z zGvo!ie9=T6thduJQ&XM2?XhaV{Sq>$Z*WYq7 zx+G1&Z(MtDZ}r)KGZVHBCs~zT{|H^$5GVFfZ&=A17QYx@UHyq|hahFBAF8ojA0`z} z$+_6$o*t)P5n|zXZ}dGrEWT~a!9Ex?{nnK#YQKE=`R>SKX^l4&IH*{My6l@-F?*=r_5GZ%C{XTx1brh=a%rcNHizjzs4uftPFHWB>&N z5+WSWYHh!IyyVLyncrXDySg&;IwbPB^|XwQllh+yMk4gL%WM0d`=n);X#JHCNg9p& z0|7%p4d+FMmJ5zBJaGiH|&caF!_i>O7VDIG?_S36nLynQwM+n2yxVOT4g|!wO ziUIp=$^*n;Hb8K7>*Mk0^C*mVh^6&9+3VXIx6tHX+NZ9{&{6v^n9dz_Gs*sp;#J<4 z>m_@!;eMHR2w7arq_6AAn1-Ow(2d6abdQ5!0Tv4?{NfDw38 z&nzu=X1(?3wqg&sQ^Rvw(uR$>^-&QQv2_z%X(ydvvL)@9SX%NK$$8*VPIOKhb6?^t zuQS5reYS41M>)&>tqB}<9Yg=a_}FgG8aDqeSaxn0!lB-@MSk8Nulf#LenSLfzYkh^ zkXL(3tEgc4F}NI{C2+G}1UPXY&-t0UTx?bn3?zQLC3LM7^vRQ}ik!yUAzVBMD+K+I z&m*=SKi#l~Zl1e3J7TW1%(HhNcjWcZEg%9WqZ=~Y(bVodx?tiTs5JikiPu;8=f@A8 zEFp#Au*+>nyA(IoMdPY>`xH+akLq78X)&z_E#F~E^#KJ|u$rg~je*YyOrPSHECJ2* zL~{zhUK|LT_a*o&H3p0xkU9BZ3pN5IE{j_}Rqec;d2e4Ru2d)5$XuAWy*tUj)5Vnlt2cNWlHq^V13O=N<#y5- zcBg%P=c6uGUCNJm%!!O!x)Kd>yGfbB6ASS0Fd!|jT3jSEXJ%Wo<1g0Eve))AkGA;o zK)^>up|Wz5C%d>U;5G}c-AT)<2JU}YzXk=jGaiSJe=SM>LU%~@4M&|c>V#hobO|Xb ztgsjlbhzqTMt}Pz5Ez~{vOSKY^q?zgdEW`D+3N>dVh0rB^(H6yrI&zanuib_Uk5ll z$ahA-*GTaHM_gCKvvoz^QB=b?5o}!k9enfV(T0c(xm;n!dxSoZ5$&N}-|k|&0%B;x1cx`CKxh7G3SjK}{$C@2U&!CvGP4?*;Wky#o>!XHZycxb7?uQZ$H$CYk zkDHeqJ^D0y6tw2ox;tO_OSeEYFjutNgTaz_kL8m* zy1p`phUO5^3jasV>L%^4+-|CJ&QCtBo+eYo+R427QE}sWEf!H>?a)iB17)xFMTOFL zJuZbKd07@@xNuxw@wIk{jF^CVuC#{Nwm+84)C(LVJlU0%=UW_m8?U0~p>3jT8 z%7FQuP((1byw?r-{wYFF&-x<#^vBlf7D9*)Sx^qdH4>!(JHgB7SH%FMa$D=TmtZ9^ z$;30$nBzuwvTAQ3e~-Vm`y0Nn2Qe&}CEpTPJYG%|Gu5dY=+$ci>+7JxGcQ8~u3S3|x|6H}qiu@`~`~Kxnn$aKNL6 z$_rE>DEi;vK3?V-*ysr%ow zSiH3_xEBduiV4&6TCCD(sn6YZ>a@?k;Ye&iZBtBCf^J_-1o}3oj^~%zQ}pbcY(D8Q z%5WU{%i>#ibA1_TCi2Ub%q>`qx!THzmBPi;ArV8%GI*RBGx=}0z+Ki-{b@HK<2O`% zC%CisV>zVL3Ye;W?|PH5H2*RbbJ0VG-Tr!4s)xwx?ALwn_m`NHGHyt&HldLc`mkKK~V??4(SCR?&ku(+*A5s{an(>+W4jT5Uy*~_XByE@rNjTjHn z?YD(2VM#)g_x2i}@q3)hIlNMam~M+&5AnzDsJj0+Opk#Gm7xF{@v}tg!I&XD{&<>r z#U2?n;1~cfCg1!er1y+N&F^`VOYXIgn#Bpj-xuVR!nKrDJly{D2^g4glkqVMHj73& z3ru)&;9@{q<3y=F%lsv8y+=di`HLbL2UW)u)kM|gT#vB5#s}$-;yiQAiHV`~bj4wm zHJ&GjW=WJ!`x&y+*P!vdPE_Ss^oABYRU;R+2r6 zu6ghMz3=Dy_&pxK-ygs|_uO+{@7L?OUR|wNmk^AP{aM?KKVMt-Tb3{+aMlIHPfC{O zIMwk9E4O;%L%&=^E91%GD=l;gR?Kc5vBYKYO`7g_?UnEOTa2m>TW6~mCkw=N*qb97 zF+kUSqreW&2|Tbur~eLc?3E)W(?^ON#H=qxY;HlbVxWMN!lQP~(*1BJrV5fplI1F# zM576xCz}aN3a^Z`farVz%=+tISZi!xALg5hn39@MKb(;u_5d3SW{6#e&+_^AUKkzI z4vgBRpTmW>cDdN%*M=459(GOh{= za8k=rSm1{C#2`O^mMU-+2qq%BDbRb5_CQ^EWyvpK%HVwx(|XYThrikS`b2kJ&c%O4 z?41U?&t`dCTB{=Qp9X+B6X=8sUapYJt^!iT%kg^^APFNed%yPZ1oh5TgEeK%=eA$< zo%gc>suju6?8Hmdu-wiai|FgaxZ8B`By92SGcu6Y3Pc__DbTp~o*8;RtKmz6?za84 zj+ZV(>aRA<{`R8Gw<6I?s<>`4X!YB2-?+F`B;2#XMdysMJx1x@?WSmKs%G}P#3H|R zm57=?#j|w4WMA6DZ>5@U8qJ!OKE|$aDLsd7lB1g`P_gS>7+TOd=<3grLXiZJpi>x{ zE2m~Rr{a^5{=GgY$qH*0oELv&!kDbYVElO875Q$)F0~&2Jx;-*U+=c2$VpTELjS7> z^HE&ZIhKI9lmh^}u>I!oaDzKP5lRVK_#8e`!muM61>0x71-aMBKvl%>7gXnJ9TJF8 z81(5J-4|edOVH3HQO<5RIVn$EeLpcX>|zpMnPQ}R;@tc;Xk5e@i{f5|pbG?jE9U;5 z@~0l#;Vb^(M4OHl(33a{vEr0C5Q@-43yDDsRjfp)2UUuS(6yH$V=#m;VRn8@$}}K4 zGzJsTP8f)%x@K?c%fV%;)Aq%grUD$rKjhMkbDo?{Oo~|JfnH)r9RG<<7o3bSHHZ+A zqb{G;mG{`@?`Mi0`{s+2xaaqkvR%zLV%T13pziIM<3ew(O&i!Ryp%2Kf)(Ri()i)D(_w~mUVn$MUtBvdT%2*>npB9 z7#b#tpCmk_HLz||n3hVlLp(Hb`RfN+_V<^R%P?twSidFkIhygDCB}X-Q<)>^Pm?Z^ zLg7w9=d!dMff8V1Yr%_}c_!=`iBUy)uFCJJkwMFc=wS;yt0B|?kC$RW@gYqvO6cmr z*yw~9WNVk9;&V40;Q&oeixWDpljiDkb6va@m12Q2XG|da?Lo{wg~m=L4DRkcyQsg- zbqT6^d-Ps{;vK%34=$$&AAK_P{MgD5;h+c7VFoBIyK@=Ooyj_qIvn^8TB7$Aa z0yKAo`4iv+Nin~u>Rws1Ja}LUrA1MqloN`sCFD9r*1b!aY){C!+7d^+`Y@{F!^e-j zCC%Fku?4s$Y;60%i^19Fjy~_Pk+_-W`61jgGelqUMf9av$J{;zG~4F*1^<;9B03Wa zlDC`jZbH3e(`=JF2)zBJx=l|| zIXwXz;CYS?J{$uCWhOW#aDxLP2WxLGF$)K7mi*Xc6MvDpfK)U9Q{P9k`ifrXij2O# z1-3a>s1~`V2W=oNHQFyF zAv;{pVCE-2MTPqTGAxK~xt|a^o_aLltjajSwTzCKRgEW0{}u%ImY?dP<$qeluwb;> zGjXyTaeLEXgGldFB-`;Nlb*q=n^8C)s&n7x_;l)z?+06TkfZ9DuO z$I0#l^p_l~6UTSYcS~o|uT^Ir{prWNsvM$)MsX(V*fj%44@1jf1q*Y7MImWPbL*cJ zV|hhT`!$06L{ZKF_F-Lu=ty)@teBjMNrc7U2~0hy^YZdcy`EFdm#QD_S$F`G3l9op zltT1CTqwH$bkv$H3FDts6glV1tc#JH#uT@M%M8_~baw_en)bTnSF z1953Pi(U&z5lTdP)MBh16t7K1OaWNFmd=p4f|hNw5TaZZ{E-E?jP(S_(q4fS<*r@+ z6@McE8u;Djr6nY5`hI?!00sT`eHHvMGaSI9%MrqlKeImHOUIYLPMDQxbAesB`S;QB z+oM9aN(2`X3bPlshbP!JGiS}*gr87Bl?F*gWKY7d1|w++iGlYdoKW2aoa7E&Jk5ZD z6bs@mJW8VCLskQgy~$$vtRk32HwY?Rz*=1Ns8DG$dOoSJwjx?AOv)XvERksiBMuP; zkKmLqUb7ksNveUA{k&d;6zVz0b3v@OFm5(2vM#6>(=!OKy3RX9-=aQT+s*Q%F8#tS z(N4{eSU&5y>355lF1HTII!Y8Wq?YH8s zh|4T%9`tM3_?ni<#S@E%VrmsZm+*g$a~hjSS~6p{)BVu2|6UvYnJ8xPm4FWTgc(Z4 z>bLb3fC^%R{s+}0Nc$(488!(XNK9!6}x@rgmMbd)05?bFDJ#SehBL&!3elJ|B z9Bu`z4>9i>1Nce@Gst8C0pD~evD&Yv!#c_z7&ssxKj*%#m$~NBvXP}sUNrxTK%fxGR0wQ|%ACUXlr;yw*Ut`3GL zJr_`xTh_=)Y8OqP#0lOx>%xG@El(SP6(Pf8x#+sa|GjH0<cS_0}4*2o&2-!t+ zck`{31TUGfS3kW%#O>$8+T8Z*XfVI-6`knI!|MI*Lf^|sPBSUw2)8K}qW&||_9fn| zb)5$s;d!mK`$ig;5PB=wc_Vno1%LNa?m8!v6|Ae8ng;3zQ-@{Uro$~LLQu<44(KPE zwj0-8$SL}3UCQT)*`yuJt1;w`Jaz36h9(~!<9hnwNIt)0n2=#LIt5yAnw^`gVHp zura9hVx;O@*^^aeB;&@Fi+c7BS@3>E(nEvNGPV1;>x{&ia zlbiM0CoCZVBNfcrzQ0GD;M)PW>}hjk>2NvfM75JJBjFeL{X5M6QoEpBto$DWRK+@N z_Lu#}8I*gIyrGbDCx;8VxtqmE4Oz?qHq1fJJY8qV-G_hpn-h z9H*x<+w8-+KJVYp^i^0EybQQCHzpE3^4;lC&diK%4|kVLB8>nt&Am2ew)nf6WKcSB zD5@Pg#CTUDFR;Zgne=~v2~=~^K!^4yv9_qFKEX|Rd=IprFSB8nVRwH~*(1Ayi~0G1 z&X2^|<746cVqT_vKGWu8rgv{&JP1GofXDxK3D&IbP)AWrH-4yJrAN~pvO02bv3WCB zU*p9U)cafU#A^2qJ#UCDuxzIRUEHY;VAzposcqZyFMcIt4@_J*AfnO?lw|>Z0Oc1v zKM^#s_)&=pA)s_AcXRd%^EgBYK3CjC56pG`*odOtV(MKxyAgBSkZkqj` zeB75yCAh`{`6rvJ{rlH%ogA2`-WA>KB8Kar>zc&m^i{FO`Xe{%uq#^i-JkLQDb=?& z)1rz$@b!w;CUertkUQ=gf7jFPRPg`z?S~`4rf<7}HlkdWbJb+5(v0{iKULKW6+8~W z!#CLCxvA-P7F8CI6Wr*xi+r?3H=e@iU{ECHBPqlNbJG$?y8QIf*?}jTK`d99a6ZhE zSIv{iW7oe^`=+-5TV3tQ&nk2*2BbD;EF_X8`^_R6dxQ0$lx!U_=* zj*oMf{e3~UQ@ift)!oxSao7P61~U1aW@By&MDwLr7JsO?K^wR#bQv_2E%*ui;Z;yx zN*A~PN-sK1{nzQGrD+H<6MC*-Zqolz7<5F4u2%Nc&@0Sep{iVosAtNgOxfCLrwPUV zTpx;g`Tt@oij8^f6~}59`8IRN&*R@MYON12BhZ`YN#~Lk1(z#|2W2om#Jm9)oScP0 zpK}VFqe1SN>>NSj<-x@9YYx9vkbyCKzp}lIj*qM^dKPYK~8BTmP=uoIPUv5=9Jy^lu=cdC6=b1y48W1dE2a2+tN~< zy_=5GPITWSzdTOo-^YBOI{n|wmo6b_>wtV!O?&xe!8{pc>}OtzksgAp{ns1?qcl9C zzgi*Q_I^u~f$Ue?Gm|X+-#EIvX8zd5l-}dN?Vm3fv;8f)!hfs$oz#&j%bgp&m8KHb z4_u~O&m08xHS@|59*KDnqkof1e%`a@y ziyU2%`%@%j8N{@vDUWG2CU6PDC^!G1UR13Y8ivZCd77##NLldy6)U6oI&S*OjR484!>k+IJ3y@xUS&cd z*b%|(UEf23;0(EyO60%!EO|rYvx84JB!Qy7{o6O|lcCuVO6p|V;<9akszm@O8tIQEf8*!&!CwejY-u=2KgRNZz#_3x%a$P#Bx^^ocg{9};T zfF+mDxWQ|-j&}y|DLyO@JEwaU_cyiG`LIn>qTvef`>fgTg6cEgJJy1ek%m+96`K9~ zWzs+i+gxV*xbiJ2MDjD&i17=4To{t&tnwmU12qkb#?|<@tMD>>32Sgg1R~+d7W^&y z&15YiQo%T{H`Kf9BZ*wV3u{hK{MKxKN$6pt4CzSUWNQ&d`tzGeEP<~j#A0b28|j>P zTN%QE7wyd*>>*9&EpS%n)H~0JUFj{80kZG^6D0TWrqh++ql3_)PlF5db=0=RMYG!7mG=dR;Xh zlQ~V|0aO-8tj53Y@gS+o-AFz+S?A{Op_IcGWrk>wjl^cRZC7*uH6@?D z<}5T-gkYe2?$0$Ne&DrM|GrkGpS}g(femO%bvB~f5p6Q_O%e2e)L*BzS?1rZzSH(+ zC2l6ZHE_<$e$fvtWKJvb5+5xD@%Se{qZH!wK*jWH-fx{v>f;xVkt*&4U z-Q|>`&Kb()Js#n2adD^Af+%TtT7TW5RR6;Kf!1@%uFq}P7w%q65c2b8#LUG>0e#Tj znwh)C>VJ;9Y)Oja@!y9sdn(qaMoKLQx(c-QO?-wf`}<0Me8N0ob$GCYdkDIs_%2$=W2BF zZ$G2j9;@#nnHR`1{7>qHpb($iqbGBWwfwQz#H9Rd_oBD$s;+~%figQl>_bO|R^TuF zVr2CS8MI}`%X(?Wot&wBcjC7_EYujIN%pH zwtl^p``#5Zas46c(WQE90(| z!`FPs8Rm}~q_Lkb(sY`}of#N^@SS-6`lVN<)Thb3fAS9|24y1r_aruR2U;F$uT&T} zczN*)8D=@rAzZ}*@Xj@m#u>LU>}C&a^rWoN{LWiusQaWNOdKj))ZR6C=xti!s-r(5 zWBr*mEA`j2pzx{y+5hYUNoMCA>@@=-&#paZvwUKFCVvT{Q;oGoTtJ=u+W6pKGA-Gb zb=yu$t0e1Z7f5G3ko{RQvv?}afvMlxYcE@H48ZI9<6A%w(zFVTSAQH*=FYwp2>wzx zYo`W6h0oB1c(qdj{_DInP=PU2(gm&aJo6f>C|b+7&pr^_hcmdpbBW{N#+LIl14F*L zVi#)gbqUguhP9>8xgnp&494<6P~5bEJ@T-hL1NEO2vi7ji^Qq10Atbs&V7;6?2pl7 z2lfE`&LVQr%SZsbDw=h=GV*~eqYEO>q3nh{$=Tv*kVY{?-1{&4p27p^8B@q9pT(02 z|9ww#DaV3)ANKc%VO5s$AnQgzK{Y1xwzwf%umuuf9}T2<3VeKoJYl`i#z%>>i=O;S zp4gZ+?9k%@9I#Vf0O=Byl+XH~>J-ls-?OIbAA)>EjRU=w4$j#GXBFem1x{=^ivuQ0 z#jH;L9OJGA;pdy=Fzb8By-ckGn(E_u{*$3@Y6YqfWU+L%WDPVZqYl#IHMkZ=lh^=y zyA06{q?-U5TAjxw3&Pd)(CgZrv{+?g6=_e=`q7 zsqO9&34OqN?LEvrxf31K79|V?;2B%-pTSw@u6P_=c{XGtL62plmUQc0%F=343>DrJ z2L#Riu^u-kRH4+xB}fJ{&EEjeRU`7`yvJ1;Lp_=@+OhslqOQ7nj+f#ov*+X^`d$*n z6+$HA8<5r!Q~{HS(F+h>QI1v_~w0fm49`+B2??O~y)32W#&i z<1$--6z@&Kl>-N->#Y=bO)F|i6S|-R`Zy##yt$>RFXfPG>!~EkdU<@6x7HeN^@vlFF zByK!2&lIba24wsa9L=mTFBwPVNATO<3_O5% zS?D!(?%#aJQI2S|Gwv6o)XuD9=!34(^@u}+F|4?X6`FJ27KS<<;i1^3b$ffJs$7~< zv14qL+AoB6n@qw)hMJW=lZ=@+h&I>;?wI%L+n29OnfJ@C`7Yl+F2F1{c?veam@;X$ zy83b;we?qv+iG(A2M}K8SXy#nW%p`b8{kWBBC5m%i5BtWgG}|U+2sLiSwBA3FI0>n62A7v$@-Pr?5Grn`k*RpjTVz#-<^Xf$JH&AW%B z$tuC0I*@F{WV+H6QFC6pt?28vKT5)K%=_r}ShE8fI$wHt*dO4>ol2rLd$de}IQt5@ z1*LTSb?M6CS%RCBcz;5melvwV{q$hmqC?nvjNY8MTqBs?G(#u@d1ivh!KF%)?3C_a>7d*P}yp%R&1L7kA`;*5CUr>~`sh?l(mi2gH zKZ`ucbp3riqgO=4d%ALY#8XSlqKGm`3vitSxby(OTtLSC!>%m zgV#pEs)koJ-}V@lXrou{kg}WT&&aPpf%&2Iy1Ovy+9JpzzG?yjNR{}i?>zTkxFmUf zRQsJnaX?AzWl7$+j3TMk?ja5>_cq%@yzczxrY0NVEfDZq1ITOwyfTV3Se$jm!X(W@(fkXIqH0kIiq+>WA;Lm?%%_KE&fh;Y7(Pb zc5pmXSaWxMap+re{>g5{C@v1Jv^w?JaE7 zeOxQx9F-E`$&VZa6pQqBTbmEr+GFuginM>^3DfOPG>bU9SQkz5ASbaXLN zUe;RLMpj4K^8;hFkD_`$yz_`vWxw3s=wLZSlfs4C(2C;$?RhklY z_UI??UQmbD)xzuqm};7AizpHI&U|j10lavB59tZfeZ>C{QnUzNDY^K~3H1)_uvtD+ zyY-G!#q>j&OO)LGC5Ol`@n@gj@g2Tl?39b#R6De8supVuczXIh+2HhIe8)KXS<@T# z8D{M1OF&udTq1yEqu|B!cuh;2QRiygZ9Qk>^@~iD&`Ox!opOBO?oh3mAL&%LA*{J; zS-lwUGF@j9N>wR&!kRXIJ#%sxew+x8=PN9Z z21V$-{!zi6VjfPIXWq`ZrVP>%Q-xt1Z9%A<*mh5^A1LulBZ%u4mL63Qt<2I&x?Y)aL;`$X1sW=t)RwJ2=I2rjK|2M zIO5l{EeVkJ8w;o_@Rb}T^d2>F7w&2C+ds7oB2RJuO9Yj3E!XN`tOS#b<4nyx`oxYYCHiBP?4dk|Tte=lACfEg$ z9LHa$M6)E-c+AUrgR`z+)3b!6pZ(jFr1ax#Yt&6P>ZdVf6`_;4HzvbhNLnJ1h9=JE z6MC=q1)95=oCFwaoB-in-FA}_Q3E$8Oil;|NKJx~W(7L_3xkkZLhs+cIc}i#n3zb* zYQ8WsvEy?ij%|(`;5_9fpQ9oJc7i)-Mf=;Oo4!MMl;SR>8x+<pe5OfYoA!y?lkHVfn zZx0ERZ8M}yzoyqk!=hl?LHhK8tl%o-Uvyqe^^5-Z_GKK)=imWXpOQkYunCtT|U&G`yBKlbZ4V~yus zLn_qfisNUqrB_e0B7Ve zScY-$^suCt+{5T@>M(+APJ5*B9n8xP-(TAnPkplq9$!o-0D)Afg!}Q3Y);j6Qbf`R z*Nua?LcWE@2LY%T$*z|Ss-9!Ejk%ZT$@v0^tFf)WpV2>R>&Nl5649>(i#CNf`%J`g zIuQ=<1=d?UzUxzM7+1M-H(pd)184n>ZBA{-Bv76&A2m-^ftkzoG%pw!F(9 zgW0={5$%E^767~r0q8r)0HU&;Nr?CdXD}ZP7iPKt-jag`l2qywPit&eMv;_fejccT zm|o(lXBxga%?ng6dXw;dfum<~`QLrq8)$^mxOH>mwY8dV6u^GtMR-mHx6NL>A*X1l z6~1^~-nhPwscTdcOggjF?9&~#*?o5oMv$cST>fR!4NcF~107~%t%c=ObZ@d`KDuQY zF-SW+3mVO?STxvtyDoLqPUaDZU#7)TlX1n!&Vr*9NT2KpkBbUj zZpe=2rC<>YBBm4HMq%h%%gIxSaoXhDzY5;;H;n4d5v{_drOkE{o9mX4o>otXEq_xz zPzz|C%sU4jw5t`ZDj_c?*iZFJsGD!{c2I+L&ts~N)g*mwt^)M3#apQR>iLNCG9-!u2yB% z2&+r_;_|j>`nJae#>fV?KNwtkgHqhf-PkIP$7ruOupJc3B4cd1Tf>YB#qA6fQR@QN4!yVMY_oP@cIn&uQ=KZY7 z*<0{Qr@RH{4I8hdhES?a2a3#(A8SO=!inRbL#fi%G(vuY;9kaA#dK=ml*tf=LT*7N zO^}A51Me+JN(TDU_U>uYYC%;_u{OMflwRv)wu;fX-D^n@sH&nF(*L!C%-Q7p&K?ghutOcAGGWG z?&upbg|wM;Vw8s&m!V^d=Jf`sU>XY9()dFh&}mtH_U9M^TQFiv`k%`Ci1?q!ArC9p zr)bj`wZ?EetVG-vL>jXM_zQ?JFgJ)t`|p*i%Qlz3iOyZzhm;eJ#m*kGU0^n(sP-o@&WNw3Qo^9f$%5NbT+N2S zwDr}ok~%zS*Q2}GMJiV)ok>9=T`aJ7TsgXC$gJMF=poUk5z=kaot$he^$f)L4;1A1 zW~fYSGXeq;@Hr+$!l=oFBeitx^YP-)>-Tf3;B;3j72h0$vf_?v_Y8*Xq`pm7rN=T- z%^{Inamu!@LiER`0V+{!EnGR&#c|s%;QZ4pgDrO`roN`_8h8zCVNZ`*fSRuiN*g|p zl%bA~yKcJ-Mn`5SqgF(K_a2W8QPSz(NZ&Tcrzy-dC`-3;Cw_z)>7)(glXJxk5;RZ3 zU&3y>FFJ5QHNHAxQ8}tN;XO6eQ*9N=tF|_TZe;lP&vsq{*~E_Ziy|E4xp{d4+(Zm5 zp+MAvG=ig9eU-8nZgZ~73c?lTLTx@2uJaaW>(@}l64hwKd?xtN-=P)$!j~~&e357 zh^yXH%sG1}?S#j+u+u0^H?KZ4`x~C)79zcwq2(#tV zzva%*nWG3hhn}@)i6vyhp}mK|M_#!9`tZ0^HD;Q zcft^yEC_SdqG(j?Vx#wshrDXVOVOO;^_9|x9ytdtcQ&u>4etexAPJ|?2jifZHyuGn z{MfRzmY z)eX5Aa!0_fiMcR8fpjiIR#dE0;fFh0^S-@T78>@Di^#u~NNO9oM^(pPSv&}1nM+`x zQH!86HZZyF1K*=7bUnObwg<}^K(ETG zJ5fYWo&AZ*W+18LhYV)w))sYjG4g(=O{%)uhGXV?6h^v6k%ed!L(^{pea8ZQ_b)AU zot-B=AL3g~q$+%J)p_=Nd(xHuIwvA2#Eqt0^{gyb^2j`A8B#PD3_-7{cenN5DDW0^ zzw;~o?}r|2J=^^;ORHe+^6_Et%>Bd63f8co0pW;r%~1gS05~Da1*SJiECf{xqhtu5 z$Yczu^X#v1!=6=R**^VF|9vN2H&PwHX`gyzND z|MV)nv3^C4KIXw;tOXHr4K53}Q?TFb1Gax@Yfs#R$4ngkgbtVRb2ga)FgpTZM; z{yG(($+|sN!no4FEBpKDW$E&0pjBwXp1`1JI-D{-c zD!a`|V_nTRW#xlE(`#85?s=N@1fAWyHh&?3o$SndcE+)>8?@bC<&5 zMTS23QeG*E5~||Wh(b9lQ$v~ zW*h8QNBbOs?OG#E2gBxDwmG-7>y#82gTbzx9|z_EQV4FpqW4sxxe`XGSFxW6v%vj# zz7}8GCmhZvvifoJ%$xN!bBakMbU|xRxvvsc?=}N>=6x~_M-uLL8O(0t@AoMX>B-N= zmAmbw-!wi`vb?ODtO7K1^kFXO!qz`p4N6x%fM&}2j=x|2BZV2HcqVmS9z5vR}fCVMGR3=}f|^&6U0C<_S{6%9{<@Wd*d zFABC~Gn#N7@CIq}nxy>U2VEO(y6A62M7zW@9?@kex<1*aH69{(l=-h{0Bs(hfLa-| zpvxRwo(I?T3($)3XTs2KO!PEwfzZq~g+r|h_c^JH%kcQJ403nqm+^(MT&2reeO^Wv zA7`dC?^2rGEVBL_sb`?lF*n-gEqO*O_9JJ^>e~9Y#e+ph%hU=NB=Euh;uK$jk75YD zJS|kvC4TN6^yHEN(N7!QudLA6zeh{v=U04u#0<%ee*hq_ zbfx7n(_wcZnt6nB#-V5PTbcZz3{KoF_vpt`dwY>e^aBHuyFyQc`HJ|px|$;}WN#Zn zGW0)AA9LYGRlQ~PjA7R*fY{22;SrGrf!;$8l5pS4NzB8%%0=;t3otX}mT9nE;<|N@ zW-{x82QB%WkkVSB&SC#1&po(=?{B?Gou?+6KEh^~--NShK_91~dSEG;9carefy~wk zIOtK9M=XBEv2r!aT={%6Qura_&`G}}0xqQt9$NyQXZ*d!_UlPOb0}8+UgLZ_E>9Q= zBKcpt7|jaIwzes!W6tA{bHFa?)F>;_1)-c4L5|Ah9^(`eC6fKFS^uzs)~$n_4vjGff?45+x)MFW<5_~?P`8sq6fg044S>auabsr zM74XnCqVM>tSa#t;76h>gb5Jpx7K|=#Pio5!r>y06)pKTGmfHsh)cXg?G(|u`~OK| zKRR)nkStXgp8t$)+->F92-tC4$Xm-90kF0(Jq^m~72@x&e!|(gZqoWFBj>6l=$uE*BR&kPXK@*%uRI<@V%#F zsv63AyipFc%Gx_89*b`8Ao+stGksZ$XW4Ckcj`T0sp?k-==N0%Z{7}0;F;qF>r27Y z>Afhs#_dLT-3Df70Xdxk-oDoz`Z;U|BrttXpkmFLTYa8ClB$R;=uZk7GZ0`iV8;bU zxMGq=1y4Qw$xKJ+s~*u-Rz-y?|3l9|nw`vnypr+aAe^B`4^bqw6;%dU6y%Sq9)MHP zDDTv1q2W^K0zxI7yaiRy2!8ujFmd-HN;EAn127b%jhKvxbMnE8>(3^wl9g^X6=aa> zO`Ne-R`+fy*rb}QgV=`x_T?lG)?Yu?*!S(bqjkN_&!t4gy* z3vR{kh0F3%J}>tcj?cB5rzoIBGy7^lz!AQp2^4wX;1w&1dnDzejzBx?rbx8iCW5Mx zS5W64gXWBTae%e8GRDAQg0PNnnB(>|h_^HhV^TE_-FHB3J{<@L(Sl2xo0B1lVkt*A zpBvOrclWbaC#8Rn3s_;tm4bDrf_)JW3?K^OaC&yPItzYG-=gJMl3-*A(SRn|T-G*M z>KoCLJ7U(J9{N$(dqR-#xUFD3H$>r!?v;|{L(!F|I!5dum@GlpXF&F2_dNTwvX!FoPiaHbyf8>wNu(X=W>Cuef!j8 z8zavnjYbofz&p)<;_tc1j*A$f%|K@kLb9gHOo#4gdopy}dgfBDCxCr~EZ|sl>B*2R z6mm6L!iqZPq}SqslZcLlvnt}zoi92lA_$1DwHKQ6`!q!jVK=kr(}$zp{xa^#?bK|c z%49S5pSn@&iUUg%HRNyH@#b&ILn8P7$?uYX>AwHOk!K~QnqJv_h${N}8VpAo)Hg(RVvERls%Z{MY z{r%22Z;?|0zIr#Od2hQ03s5S<#+}FP?EmS8Fz~pI3QQXgP1JI9_0iziso(c+i^x`| z3fhzu&afv+{WEw+H|W|6SOJO%!H~OqVFn`MGNV^$>5~kG!u9X>GN|3p3J#|hUE$ zzoO^SRk{5-HWDK)lF_6^dO&hSl{fX793!;F95xx}@G#e&7O9DLR#}bM{Horqa@GiptF}bt%o`l z@-6sk+&Ifo4gU^JgRM>-ZV^s~NM;6412tzAADP*219uWF^kBcO)t;iI;BjTztGL+0 zSQ6LqAbC7bbnWAyJ6!ey+2?bMbZ$jd1A~OFXz5}~+<+b4iz@)_0@%fX-3wk_25sOh zeD<|z<}AmX%QzdCV+5mff6qEv1jNtq3pce*zerK$awHV|N%k_INgf4~Z)tZ65ncUP zTqv;(Leop=)P?G?K4m5Y1gQGvJ?^4dK*qGWObC3RU%)@g{}T@h^1uZ0iJs_uzf=P& z{zKl=l;QioxopADXHh%jMW5BJczg;yg>* z@OS8_*PD1$T%J8>#d);_4O}Grd(e_@d~QE9z9)qsvxF>cVbiC&#xNGdG}$+v{mjp5 zqoc|S+!v$ZH~!d@I42YiqRE(JVRR?WVO}Z8H)Is6tLc(>wr{m=BerWCFXTC=@*I;` zD4IVsAHAHTQx~*wTgs^oD@PnGoY;X~fm)`Ozw|V|rbx40U-0*jHVe3A;Bs~bjMzX% z779G64@v%%f1JZ(M3FOdjo!}n{&@btys{f(j(;CwL5_m`As+aJh$NoGz#<-!Dhmtx zJ)DO4wF^70joL{lGAajGBa(C&-@LVMy;i95js$Jx@il9gO_Ssr9Y z6_v_DDOY}0f8D<5i}dXDy(Xuz$&$v8U@ep)#Mvu+{8Ms@*wjNDJODsrYVMQcl@bTb z{`n2%)BT3BY2vKXiYS>IMtX?~Zp|iGr}CAc>E8(>USD^En0VEn$F>T%nt2c16lEb*!43yk}2op5T9U;Nm90Q5*{2cIjKT_JRH zo|&TSM4n1n^B4Su)332Q0Kn!1Uq$VB$2#B$&Vl-?{PXG?zt53i?`)aGeuL%YdjRrb zwhL29fzFg!zE?>1IsHF-lgtgY-0OdUxWGsO^&6nPPs)u9dI%jJ)y7=C(HuVgp~!^? zRfwkbvz%vmgGU_16ShO;(0Z%3GD911#19BV>>Mb>G8u)_x$Z@ru*lEvc1XH>stL=W zju#r)>6@28G(@@I(fp4Uu(;f8tgY=9*1j=sSsdOXD36`&SmzEoG?``Z3yg zR*rn4Scq)$d8=11=so_|!HgTZrJUuyxPJ;o{pTXhYA}MBqWD#GmdYm_XrStE= z41R?IA%6u{`V?>F*J?4D9cDk1Q_h2zg|-$^~jTf1#@D| zhNs`ENVBg8mtXOXd*}`veZ*5GK5uf0y00H<35n%<3xPfa!Lj$pwe#LrET<+r*f>kP zn?HZ6zu|rTPs1VYcV|wKZ0xze=J>*@dzew)%J5&R9`a8rZT1xR5kT}b+`5+i!w9UW z5qD{o^(6pjs=!f<+%fgP;_S*YI^c&nG;Q5&LOVKGG^u%*F=}(F@l>5)2}-9D15-BR z&vP#GJjZ(zsb<3`;Uo8tggZaF$ft;V5Cuknyv=w zS0gJcz$O=70RGWnzIhiwTQ=gMQL6iIdGT_yW-k|2gO23e?0aZ_3th7f4COckAqp!t zXab&)h&x|12cjaAjP=)2QexU?yoS)2erInD<`VnN+pF2VcQECyFM0hj1-DKgPZhb6?Z?A@}8U&Icx+=)Zb$6r*-cJBmP1%&LZySwA$x62t{ zeU#K*{T$0dF?EP!%s6VuSU)9fOD$;g`hUU|l+F{gu38ffo}nm+ATpFGHR4mEs*3*B zKQhi=H*#ca-aL6aSlhj4Tjvy?cT`8f%dLCkmon~P*2P8+TF&-HlBfBKkR=l61_?`gN%In7QUe5gZ` zqK)KzDmbqsKAjjn-bN3zp6t59lt2B4fs?@2J)1FTJC;gK)HnM?p#$pOWo`Q>sh3o z=DNe&%C59|aR>L)JkW(b{7DWc`D=2Vp%3z#{WrPrn-ANjZ3d z1|iBw1%J!^*;;O$_pQ3tkp$h0*oExp0_{*PN8R1C=r~%?g!%tVF@l4&pz3{9PPbO| zH^MI|O9RsV$w+!<(W0mBO-zjVx!b-u{|x@OXwcXJbAj};ci1lq042SAD>qMadavJR zrt93*z}uBGUr2Cg!hRgL7}+ywn?$mtY5>J-qCC+UC6tJ*U8;X?huWkC6{;hZH5Rs1 z*~W~b=|&^;^j3nqkHM=`FJjVf(OH{;uA1#;`(;T=fJQQ3oUFF@CO-OGSwR;NybO}m z3~g1&F^V`~r;6nhGyA=jda}o_jqUKz3#|N=zvZA1pXcATi>J1{P~hy%WC-Q4LSJhP zXsAG(NgOQK{ajN=1Z78s>cuO&wktu`OOs7&dM+=>uk@@@pp~k99ychSe@fIEbJ%-c zr8D|exAVzJ_7Fk!bu_t%zZ@fXVuf5+IP(qlKeU^&mHgSo7-)u8w*43vgx$&(Jo-{j z`yZDf2Qee`Rf$nl8tMA&|k)R^E`N3eP%n<3P z>u3Y*P>4&MBcAVD`X@^+1I!43BMj=+;u=ITiH2w4fK@9OqMs%d|Vq=Vl6 zb{mfQhsSqAoU>++Eae5}pkLf5;wbY{P=SBL3Z$kb%bZzSV)hu9*AbXUm>rD= zNcG7#V7@i%=l#C-`S@?|V;_5J-D_Rzy3X@=`m!U5C{#28lF>>GS3I_@nGG|=-s@M{ z+&dBYy!`G(-OQ*%zBKIc z@x|z~K)>0^(NVv>Sw4O)5$~Z7(Qt#@eUSVS0`igGnJs<6ACb*u|NgC8xgMt%fR6$O&-k~+b_v5h}sKQN0AJBeVr7|)o(PPK$Q<8@q+NY zQYwfHp9fC!WAhz?HFIPyC>&g!n)) z&6LeKd@)gi6lX&H2Tz3tJ9lFt7=8hhREK2@{PO6izO1N^6|-eev_Adn5pe3))k4ge04xt0gbNV#P>{G z(frUuI>p}_-L@8HejoBA2#`f}kj534n8=N}nD+i{(2vhaU-h*)3O^imudS{pz+;9} zp+aI4U$Fb=?4Ng(?K?8#hviw{Qfnw~g3&qH*4ymsNYg>aSC^L$V$c1^4rOCxC=vIS zI0|nkpWFD@!1KP-BC? z=VoTsSts@g7@cMOJ_pcA3jZDm9^doP}%qZjJuse&{1X_aC)Bh zTxG9lJKGuZa;!BFsI?lHz1#jn2pZAJGRxk+85#UJm$##aA~m?wg~cjEX4{tt5O3CP zR^U-q>KA+fnMa|?{5!lf;SfSo;tLR*pglhBxi1GG#CUxQH6PW_;l(?)9~u1SstdhI zKjEgJlSaRLd2<~MDe=_$;G8ff>P+#6J-zc5B1m%$={tef ziXc`C18Oa2j#C=9!2S^Z#W^}=e-__P#X7e)g{z)_u>7->mR4lQ=2j?b%}|TrO3|ye z5e|Ui0X?+%;@ob+8{zO&hC9jPT8{EUIn(5AieeO)xS1D%4qFCo^lrKe5@~qizw?Hi z$P|*jSD6oMQOK0;k9_)>o7=$Stf8EBqY>W}X>8*(iVS0#_p|u}JDa2Z){y-|}>d zinv$9lQJ7WCnqPhugk!A0cUxhti+y}ZY_i8jP!>OW1NGE4;A88Xrp=rm8PiQFVGEila`*{70P-@r3-k z3kz8&cfI}~VUy25SZC;Z%~&{1r4tPSUQSd9_bexo&s!{kB@`A+t0-Ng^tREq1Bmr5 zX^$RqH#Ft0>i@u}G`s)5nG?7DP8HrVAY<-{BEtKoj^nYop~{N{`Sh`d0MT4>a-A19 zrd@M(9nX&eyQN|Wc)tx5p~2%3-M;!6KT&YJH+(V7LhAa>%Pp*@EqcZ%NrH zkGy~ILtHaNX442|+`dRM2)u%mWxp*`Soyeym+M299-Hv!9mO|A9z_F z*<(jp*e&((Hif_vav*!)8nH`o^vvgX^q-+bpQ0!$-EUu(kcbXoD1DF9|4|^l@Y#RV zJGK(M)gWzvaqD>0C^>rjE^rgWt3D#)Uzyt~15|gZCB_Ccmi;H_nx-e7 zjJllTF50L^&E((5U$C}+30VDN*;Q=(8Fzz|l8PNZe+zHU@(vZ(KgA)Xqp5`K%CfC{_bPcoomuKeTkA$p=8e=9~43nydAN7fR#txZfy1N zwdQq?{xl~EjBjX0l|$l8Wp5wGiEPyM_BU6p5m}xVIiRO*J;x1Q{c(OAhdXkALZ?r6 z&kC^H3DY0#n#0Wmfik{YGOe2*3{OmH%nd7-CL1Qlef5b$^Ak**v3o#Mh9)Rdwd>M1F$@+9)=0%_(Yq((voHZl+nSodP*Ttva zg`GD*!F%>zGfgtYzX_{5h;1eFx&o@OjkH(-$OJct>Rd)TYTam^xF92IN?O(`63o{` zko*?ndoKm$ZhLPb4}`NQCLXZqX%qY`z$fw9h`Jo+Vl&UR)cQ{B;Du=ShxI=HH(;C8JmRz4=O{78D1K zC0k*<>R!P9|9B)+W2(veE(q0G&eHLM>drrVtlyIaRsx@<;7`C9KBYaoAE-rQt$Fhr zu-IZk$L4a*{{ugi;Rce~F!&>`y+j!i;_E0lJNbX?2ayZ*18uRyo2^S{3RnH1P1;^q z?vl(M7(}8QducK zMQN+?Tt#L4cylTwQ1NH5Sstnnf0hBS_qT1J6~p`b+znIXVCS{-sl1-Q``BA7WzWcX zE)<}Rq>9g-RUKP3U1$|~DHJCQXqDl4<6`7DMjj;<1z8n#1(&E2C>afU6p&^<<)d># zToI)rk(ZC_q1pm{P8@c&6ikx;i?$aWS|q_}wQjKH2TM#z-L=93`cvX8#D)9#l%DwP zVmY&idUDtx;c2zOATlK9mS=Rk2*5Qwb9-c+Bn8pXR0l5M!ZFx)gb9;_!#LE?xL(>t zvcnrI=T3Qzu^xtl(7_ruF5>o-eQf@^$)B(U7!lsZ*A343pAcpFX3K&tkE$r-KF{LL z4~a2DObW?fsN7P{YsqK$lMq>rGC;0fYFudJY_!h{wWG=Y(nBRmUBfbGBC%U(WP;-e zKHly6P7O{ADICcDt(E`BT+E^R%MY$VVq~g}HZptpA%%Dta=@v@{zD~v`yW(7BtRvY z!j1aM;=_7k+YadxI6-;!P>M0z*!T%R4rG^|_RQXgdA0vo4!6FI0DK7phvKQhpE`h% ziqiu3B4A&=AL#=hX!6p?e{=(_j+rM29gY@vc=2dNq~vco-!PZ_zD2&8o3D_fR_y75 zj%D6nW^r*aAd9ZX&MQTPYvd>AOvMy}!QMfLcZp^$Ma|ICiqliptmk(32*t(N!BY)7 zB`jq^1%_(8nxvvou>fQopU=q~tCEX#cwbOADY!*&Ux3GfJQw{%MuF*MBo5!#wWY$L zo4!h$_H{|_$e-$wDgkOto;OHZbREIsgj+*(!Qad&*|V-v=3Jq5BH!9Zd^i`Te9g(% zyp=iA^!Lpg-QP5eiRns~6kp2w>d!WdR+O?M^rj5*Se}hL|Gw~+c1X4EGjLTw(ouyK#^i{BY&`g8ey3u6s zx1qi9>x-61?nsa{jrcubZcB!;Y=p_hN+N`5jb!6Jc{g}@8hZAU4@g}~9!JBUYax`c zUcdyBIq$WFI168F=kWtLsdX0VEI$i$#px3~G|)DTnP>HqvCgynL!&=m?$-$NxBi=C z)&)7h%15VM>zBYY682ks4rrlpN)?f2SfX0Db_HC^5;~=NrN=u5OeFa2DHK*(v1*P< z=8Cr)VA7!Jx}GCbS3inz-kE>Llb#j3BdqJ{fywf&^rW@E%JWrysh<5b)K0T$-MUlw z3>Y~DzL266QvT9k9pL>UPVFRCINDq)pOVVp4U0Mnm9N&**K4Up?XmVrpw0egV}DNH zH!6S(03!Q*w})x?ih}0l9GKGERfKx57)eU*??A940w35C6TI ze1kne=!YAjrr&cO4|c=IOp4(P?K&&5K7Em%1W)iU7*udd0?}ztKcvK__$HOxrB$i= zyW0i2OJR>3>qn{!Cwk5u?#Om|4%b(6X<7Yw^BV6vu~St=a8ls&jjJ-<*mcqsTf_Jj z`KIh(HTM~ZYhY56ebzK5N?n4yxOa;W7N0G`dGf-Df^^_Kwx&O>TxYvlsp1h9D(-o3Mp z8;EK}IUfl?EQZWTZ0)qv0SyG#?B{T4A9Qrj-4B}4 zHEm3w5w^dNlau}%_qXW=aq;;@{@i0KF36gqC~k|hcGctde*=(iruh|O5fj`dcnqOQ zKI&aTB(jqtg?n!7E!T0&hxUa~y~Ix}XQ$n#fMoCpVMN6dqaW9^U|Sol4>;DvHk5x##4^vSKlGF&J zQlR=H_W};CIsHITZ-KK*UN`~9z)b;(1qNL?ISsg8B4W!8g+oPd4(}P^=fs(&F<2z-a#! zBiRY3oV@*$$yT}Yq4G7?!1Zhr9)JB#S9e|~-H3jjgt2k|MAi3zsMv#(Y_#0Iw4Zst zs1R}dihJRq$rt+^voOWk9@>g|-jhzn8P7MAM{V9GPp0bG7p>`Yv-xgECS*Hn+x~F1 zZNdM~26mMK5`C~XR|%Pci+qUhqF3P=GyIc2-W-{J!-2BM zLs^&U#Us=G&pJzw3C#y>RC8VXDPEC*gx#TPEKX^7`*5VSBV^U$yzxQSy22ia4N9;H zD#!lJI=_-Vx(Z}L&1K(bXo$Igz@jep`%HquJ=AK@JkZ*5C^X=uv_@TN`?08Zob*9} z04*9NMYO4o+i;Br=j(CatUV^G1$fjS@K9#Qfuf@VlBvx9&eUsQ(8JKY!!OFGaJOYu z?0udfE@Q;BJQS#i4dYbbV%TK9i(uS4y|wN?7dVzh_tDMhzcE&@EZd&F3Xr$c_;gDLED^)cGof|&B z63FKO=RXEQ?1!r_{QE~pI5l6Tdf&iR>jnnYtvI%hy*rS@Su;bl{mN?4F0Z52O#;PV z;CTUm4{t#{PVkhV+g|wDXZDb^0_nBzaV=sxh`&r5pNdQIa%U;g?`RE<&FK4%$fyrj zt2-lS4o2=XM(LB0Vmks5$s)b4`H2enl{cLDsw^)eTRa=#y)h(D zoD~TL@;-F}C^&m#frEZiK2SNSgNmVCTK!Q^n_nGLDmzyOnYWM+`$u&>oA2(wJAwo8 zJq#BSA)i*u{`>CxB_WLqjUxqdFKFRtEZI^bY+tpSZ_p#J)cmU7X@I%xeE)6pG#E06TKomp9)JqcVgfnpXX!snF=!Jml>lHk7Lg*JN72Q4$@ z_e|qOVLx>H{$&z&c1Hmu2TLz~x2aF2^K&I-O0I`e3&gSaF{EP|lw$O_Hvk&3ngl60 zgCan(Db9K5fKaC}(KyMyHtk$?J|F8x`aE zzFQW2hat9mFtVHWzaI#P{^|!ypWTTJnR`;eH)NtE;Ks z+~&!btTntqvY?UN6)*ZblOq4)e~gQ5Gp&HL6T{|Df?CHDgmcetG}V3&;f&D= z!Ge*jF_RggG3@0 zJpz|_Ly94-#HsXZa5d080;wWCBSL{|w2%x#oQGTw*%Ce#WsFgLBJt=vyVmO10K+Yu ziJPR^Z^_xC|J%3Fae#h=UQ~nPa`IpQL zgyJUU*2SvuvtWkgU*7@@@klDIQ-CC+fz_VC_4@(abM} z(+POIVTFm%|27h)gugZ0Fg2jn9<_1naVKe;j?Y1?7iw%gA~1T5F?X_0u_*E>!)=>^ z;CVEIa`~ZX+@U($3emgZ5hu>!>HmVFcJ>5=&&yMO%9=)BN~{XXltQNnb`q4S)G9d8 zn@P0IW=bk@<+F2h8&#xTk@2wLGq>^sr0lzn@G)Rtl0cpJgH*X{Bt zJhBOK3mv6_-*tN%+#r1)B0EVQd+ztID42iMa7wDC->sI_{2GA^{q%6UaO{yxQBL`q z6Oov85IE!PPQbgWm~-yJ&~Er!G?P409q-D8Z_lj0p`TC$gn~U`%?3Y&JA}H~~l`wOaE4SR+!Q#=A`8`!*k5Byz()gcCZ6YVE zUNZ?&Wrpnbfqo+gvq8EczlH8b;tgl6tOOvuBEi`)`e*M%IOu!eW)tQS&iEUmKuKK2 zv4s3c7I?Q?ZYZ|%)B^h;$V71tCpj=SJqCB^0#UPbossjxXYPr7Z;9Mp!X~(UMFm}X zF3zfNiPk_8bok@7DFL}ftr&%PIEULzgs}-VAQ(Tg>55KdsJJ4G?PzSp))!kQKE+!Re&jX;B z8(k9F?Gi{{2g)az`fyp07R2kRPy`~&_pK)*N zuKtgopHU-wmaoKZg$D(pPh~gBT0oq(VNDf15VBp5ranQuj{fIj?%xRH++yXZ@;sIV)<}h9s ze$SMSVF4e=|2E9#@^#ljeL{35nWdM{=IgN8g&u95xF2L>K ziW~4U<=>o)sFREAvksNG4;(j&y1|b;uv|%tE_;G#jXxw4q1l9Rl5)FNsvA8!7s2% zpEy4>r(17Jj2eMHHU)7^ZZf7iK1WQ`TYj4T?`I@xTwls5!rV5ARrQq1eTK=Wy9~KJ9F2j?Z5lAFIa^wX9dut#drV z7A*gU5@{_(JILe>gSp-`^UUBi~U~VAl_Ca&BTQOKl2E!E>+(IKzwFHDjUta`C?e}?+b7RdQ9iMyn)8Wt0e3u8V6z^ejA zw%!p+_85_nMuH%GFkUl5#r}ruzoixX3O6hu-Ln@RDJ? zxL?uCdSJv17B2GvYI&=<@kxS0=5Bh1MH*(O>5P)eEl>DxSD-uu*mAdjkbWgZ?a&A- zO=-@tf~SZX;7W>mR_b!?sF^29*@7RpQKDQ{O}INQ8LK8pf|w$wDX-fi08Y;t$xlw4j`u)PevTi3+03J&QM)a zzchPs4!2v7bQE;!9lmpF;y8VgL*0}CbKoA+)YjjoZ8ae>n$EK>Wek02&;$TG+*&X5 zW?|8l(@kg%W_7V-3i(jd0;D^94@qQjpc@*%SGl|Yb-bJ-F=1%9jTWGtML;{X$OY>; zpgw9X1)uJlfe68XDwEuc4;G-FV!_ZnWnWW$|xtW&F#tyDaE<0yalph<-(!(QgN`C+b9nNPKQkf9!_QLrl)iC zom~s|usc>@J_BURPXK~-2z;6wyhIb0u_3}P3O8j*x2yoatxW`(i8pNzNcG>BV!6#V zd6wS75KFRvbE*q8`0NrDWYP<~QKSkj`SA5Ep>O*5y7%9m^uNtDX54*SEWmf~C4JaM zsg`;n4HdTZHBQQxBHI62e=g-Uk(&NddxR8=L50+)Cm1!sL?y<1O1t5w-f%_X(+Z1r zK`4+4X+ey>GqQF!^;1#W$H)gbpIegW;^gg1A7j}<>Tbv@COQ=7z8Y@|5Y2cr`9%Kr z0EMgmVd28s*q_ftTSKa9Xq89t8(){&`L+n&8oq9~HFDg`EGBZJdGFdk7hyl{kfG9okBPJ4ai^7RGZYow#WG~i6eEQS~ycmm~)(vlYF-8;vs9riL_pz4AM+}Q9lctU`duvYT7;I^wjtbNi zd<>m&M=Pee5{)xy3hGlE-#olk|AG+!`25lrb-+z9-3t+BYd#QwNi(9xmkCMEqo7Xe z4>w$#y{+)ym#kSEN;DLne6*SgV+?-OMF zB)%JRDRQV=q{!VJG8p=P4U!=CRQ!7OElp@1)#am<1(H)%M?-;z_o-(BO9q$~3y8d2 zx%B<81Z2gJ<36Bk&v{lG=Ib%u^mReV_^4XQCP>i}?nMk6X5ZGk8=H{sVi~rTULLrn zGzGF~(Gy?AO&)6D1gS59)bee5&d&9s>43SaF@siJ`tQQ4{mw_2-vNkra=ZcKCx7PH zzx(3JSQ$P9G0j7jSfC+m_zkA+`nBGdy8b7bC{$x@PROf`aAn~f)6KuE>Oi~8I zGUE3VqI%c4av}LeD9#UJv_C3%nJcgRX#IM~vbN7MNMgcUGhA`Et`#s#oO6CLpmv%o zDn|LajEJnefC6e{cmk^XZ~Kq16AEWVD7)|Q{1bEsa4-u7ZvM510H4P0N2lq=IVuT? z`--q-4@r{k7W86<1!#&e-H0JB>-<#^v%53^4BPIRQo;|CS=eJPnVp~RekF{TPuBv` zxTR6BX$PW05ayEWa^0YItghra)>9GJ@AW9CWeu*XT{>QTjE@c01htT-z&p$cc*7gm zSvuddz`%WMDabNsMWJcf!8eXK%}i)pPM)Nz><0S~50KAICkdfPfFw)GY5qjA*vrTj z7pmBl*~KEtLH}(rQ}T$QJSxc0TDPo!)e9$^6Wqgf3vu`muhrGG5-fGssZ>wKo4}J! z@j1%UkCRwxq#iL^xUa`1ja~Vy0y3pUeu)|R>>DC$pfb2CzVPFcR&(qF@?o7ZXUk*)A4kFC-bz! zCLAYVOQzAcVtYGuvcEdwiajk*sPOk((Ky|#H*T*w2_>}Uht;*imR{J5wkKRVg2U>D zV9s&3Y41NN;g`JwE#0;`j;Xa@83ZpmB?)&LZ$~CZInM=dE@aBgktMY4npOKgrmC_@ zx~+ZfxYWdv?1mX}Ti&#Pr&(r}M3jKTRwzOLCB=@stu-;nirY7rk$^PffF(mp;UuOv zHXBks$)j(8k8LsJK-_axo$Yx9UYcgrC$RqlbDYJ_PwKCjc!I>)x@N#F3bqE9jDEP2=*O(CpGUoE@Mf}#Bg&jJ*{m~9`PnFw z^vPSc>6(;2-Zr>X8u&P0#DjoOzcb_h^Msg_>dTNgF}ikJdo}> z%mn`WEMmvUGpEuQ`~2%%(@kI^KLbhf`RR<9rY_%+ngj)KA-UO#yO4O_;R;T<{JPWy zs|Tf0BS~Mt_I?UG4|$WW{evvkAwRF)Z#fPArgIqK-wAIPx;oH-8z-lW7w%1vn>~{M z{V1ho&9XeaaSt;^S60F)9Cw#7VOnPP%&0Z)SF0qY=F>QePl~WWO96Gz%ljVwRwlCN zgP5-u5NhVqSr2OsxJF0Je)G_tOBGz}x_bMx@9e|{L)A)|p+Ys4w-P~eI6MQ5d-0<; zj()A>C_@ySP{IQXyXUV|s=sOWgwC(p9R6)MdFXmiNBVX)rO2xUaw2Iq^O<2>7MR?m zmh3wxtGOEf?I+E<4X}wBP9$6P2JG*E@z^WkzP*@}e8t4=D;qt)=y%X3cZlcD=A~F1 z{P3MT<&+tjiVj%+d2T`E6JMHS&-~;Ev;1s!A2OR2894UfY0(qq#~LTs6c^)IDEO zHV6&dUd>i-&GGJjyyqKj8H@YwUw;{5@ls^cEoBdhF4$Ng3K||w6Mvi#vYTPe7#uen zG;r=E1d~Rfq9!EdZSl}q#AunEX#4A_X$bD5f*F+h;ileH)4@Fy$b(N!NOn}xI4i7q z7GEvlIo0h1cx(zF5u`{#{tnmY_1&^)SmNu~&n|}3x1NFkg-KFV8y1P00|P-o>07NO zF~GXDRyeNxA{E-wG=A-Eb6enqz2kFZTWzV+g! z@P$kv)cCd3cEj$epmwT=>QwWg!7pqEfPH)eRmzie>)gXEjT2iXn|T?6Ag&K$t3+s` zyk*tPzX+Lip-j$)S%w1hvaM8)r*Uzwf4hKcwn>98UrEVm9T(S}0Nnq~d!MU<&ZB8? zhk)$c{6ml*e{G;(k%KJ&u@9#Gv+8W*8*+R4TBAihy?YjSK?x9HBXgx_-tKu12Sh3n zvdh)vskK)aApxL-!OJi^-0IMJ?LLaP)Z1{D zyv?T%D%WXucfX{_N>;bZe85&S6*4*I&?~mT%kxfNkg%a7tg#C9GW!WNxO1 z{U$;GxC~(LW zMjwN;+~c3meWzPa&vy78|K-50}a58oUsR< zvi?BzF*zTKl`R~rOH$=H&RzPLB#j&e9{fFpv)|ydW%_VaK~#m8<|m#T2gLAfQ#D$! z7P0mQpI#kWad!z9G&ri-MjWzv<5`Kh7Bg)CiFR5jD9CzrQnQuBjXL=wCSW39GI1euBx*7vxl?8|MHdw|rOH^jj2|*eT{%wug>*vt*RBxfajAVq1_`nrIPsKh| zeF9ZQBBa9w=~fsNx0KTSW29^$q=fBeW(%C4`_u;(PQ@~>vep8R;lTJ;{878hHj2;I zd$^};Xb?(uf$1q9XUUhMqE>X;mAqdAexQV{kVl~Sy2!u=#X%1gFxM^JjPqDiS0pih zW(2o(Zh8eT+ZRpPV{8U7I>HCPK#aMv?IV^GP^Dawv$D%P;*5jc?WrvKflzW*XV<@(w;VJi_ox2y8(Vxy+(b1pCV zeXmVRLQffR9YgK2Q@N)B3FqgB?h=iuo1wUa4woSYcK4~7O=;NhGBh48(a7^&O${ED z1l?MOBwYHKi6rxxAo3kN5`}OS6PxY77B^XyEsx?KV;Uj}YL=QX;UI~jSJL?A{-MH{*2wuF z5mI=D4*%m_64;Sa=A-^+EB$!ZrUWbk4NYYVARx8iU0_LV@b;|6mL5AP0m<3sg3F6d zmvwroKYu7AhqXX&p!yr|nz1f5DtOy>gF7#QSK}$B=WqABv_N2*J~(P>t}4|$KEtA6 zM_2RrKlnU9LQdjMZ{pd?Ew)M>9DlNhG3!pc1>Bbdr`QE96L)>39AMA7$=<)1yV!G_df7F;n5jEqJ0M!zvk>lP1l!Af`}BK zzTiXr5Z?8&^1py8lAjscq^=dgWTpAOT9G|IL|gZ~XO}?VxXM>8$2n^u2B@eNLKO`Fc+Q$J*ac#BqQp;NXr;<|dS9_}Q z43zr02$4t9X!)a$ip%|CB-8ZptsK?v&%K*!d-9Lh&s&@J1wGfncpL_x79yt=dTdi*k)t^VpQ-2bG2)WrcuS2deHu-^9KNFPu;&8Gxw2AS+tibcB~c2!nn-z{`c)f#l=ocH=MKX193sxbn{*pHbio z-ZZO;!~X(ZRn1P!mQX`_H{GVK^N1Z9rq5@&V_BQG4is1H4emq7Q4fF%n^dB46P%O* zFJB5^&$lZ>P2f{wH3|479g_%>uk2Z|aGGIGXePV9i=`rPG3b)0pc#G`2O|!@nk+3p?i?x}>c&le-KqimF0Ox$Xk}$edtIQ^=-Nj|W5Q_d4>d*0-6DyZ6x3gbPSc?v z?vB;#$r_e0-TY5lbX+S*jTh9{_N?>yA>gnD!#;r>g^z+&CGo-2(%u!iDtg;g{!01mS?`b{-?%pTjEZ4nOSAG=LUsgbI^ct4xq`3 z-2LY|M<87D<}4PheN+#eqF(A$hhzJV)r>?M5)0ve;DySDp{Nmo-lpj&y?oWPq0yU6!R*;zg z)Xa<4{r$13QWYRy=c_lNA^#G?VM3@Vu7MD7cx0*0`w8>*0b1xWI#o@|VOwC}DJysO z?R=kxb$4tAg+hbIfQ9YaJcxw(*F@#ibLw3KV9Rg{^>2WPu}h3*CY+X7D>Be;=XwP_ zr9{ROqZy;8bhX6SH0+7*d*kJ_ootc{x~S#+?5{PczbDfaBYxgoXxP;fb05W=U0O~TK(qDrB!u_h zNiJY%dI=3C-}lKVrzdD0O2Ewqm~Iq5^BdOKWwBZ>Homp)^%>y*7QHyZxhbnixajiK z6=-$xH`UE<3Q-Il_-FmYWNij+utR~i331{5Ffr!oLIJe+lc@{?H%PDT!w4gRk?fA3$cYpccMQbt z26t69!{UFi(&K-O_y}|bup@8U>DzsAZ#DFrqUJqYy-=KroSopxh>QOoJJ@cGYvsK3 zV;r9B07j7(APwrf93cxAAHSg_@t>s9O54!;EqgW>s=~Ub%}Rt%a3=e1&{(YSM^0_l zdV7`mdN!p6Hn`g|pId#)-+U6YiM<8iq6W3RQjrJ)e(wv&GPz(dj}gUcd^Gg(0fQJ< z8MsgPNeQFIJ;xi;qAL&_@8&IA6bEYD*VbK2_i+h7H?|$qRYW=}@FR2hp=vT*SGcNg z?@`iO#Z;&?krx=+ekm!>l;iCaS-F{hD7TE!gCy_6gjfiA=>qRvNg+ve{Vp4ymb^c_{$#QjOjKlO)}a9vhI50Al~XNHpH^ zkDT{s4UtOsU$e#CgXk+U8&xcmHt(}gS4q7VSs+CD168GE6*2g90DP+=HP(`Pdn z5!)^pNQZCFMGzwhS7xbFI`4~NxqH9~28F-UoM}$wDp0sHZJQs*)~6GWc@xps;|FC| zVnYci_9hvmN|qK)&*C|g&cRvQ^*$qTg-~HDYGl*wNTE;Vh<{k}NhJE3Ir8zvW2Fje zVjIF~EqIx+2*S(v>wfX6Eys2#wI<%ql9k_wO){1hDR8p3NVYjrNqCI>aB>pE4O4jf zI*%L&oA3BQb25;}TPb#jBfA=ysc}fy_deKR3IPJcwy> zz@!TldPTfa>sJ0^({~~jGy*NIRs_YPeDGZPX*n9WP-HN}Gzw!IV`-cQa& zx+Mq~5x>fyVJLR_4b*%6&dpyISU_}P@PpV`tbU01j(3{qyiX6@8g^*JbB|*FMotJT zQ9phwkI30rVVQ z3*p|Hrpx{v!WpvhlU=^+-2osjK(BYKJ-k4-YbNp;{od zNQ|{WLF7mmca_Bb-b*28NAwKqWSR73cB2iIc(yMPUd=qniL%ApN=m%#>(C2oWGhSM z5mfsw90sJf@Ne?iW39GDPYy^=8dA5_ zdl4Sa@%l1^>#QB|gytyz5s#KO5k1k&Ib0q9F*LO}{yYzpVwK>GF78m|)@`2%{dsvX z=>fj8H$}iC#IWw#f^0FVo_hAk^v%5oJC}RR^4A1 zLd(3z%B!OCwy?Ov&=h;_j{;#L`3~CDMc*D@$C)owN9}ZjKk_rRG3lq>S8$oc;QU#* zI7W%h@!xLrf~2qzS$Rxc;})RVsl-{juw*2A{YA->ZVeGbjb-ZK#mZC5aRar>6pD?i zWJq_s%B0Q5xR{7bM8wX)!LIeT7C(J2TZy2uo^zDPc0Rk9r3lrxRXwKt8wlhm_4CvA zUcSD#`Q4cld_&4uafkG*#Y~ac6$A%@NB>^-@{M5O&mq|SO;%W84_ul8Z9N?EAv>Fk z7Vaeh3&>0vIrJ2>csl*op#fKHDjyFi>-b)tO9w54Guh2~+;J)F!BUcxjc+nbC_JF) zw8C-|qW5j*J#Vj_^2jawdzz`mah8!jeEpKVS@yE~p+C5v-FOZ$zm%gTA<-)ChwH0C z-Js=0HUfWLNk`!=BDQ;#NI54JfZb!iaS`+h>tCSN@_M`D%0!*eC2 zqFn^pgf~4!fzFSQ_h9`~D;(_5%Z{=e;1upbu zkbj57b<=6}e)g-$o_?|cR~FxOo*D8b3OA%xc>bX&>S69O4W%K?-QxhG_8^hvz}j)D zxCw`ZWQL%)so>Aykp0sL!-`5-9za>KA`q*+%nmBXd~4qxc2+hM6BE(oH!&=JD4i9mJ z3y{$9w&+aT`KiJY`{CZDP#$>7BNo-Ts5L3Z^DjHnP)s0gx6Lec`jB4n#(^{s4-d_C ze`rk^D!B@cu@DEBu|rw`@z+=$&NqmDTT{lRjZ9U!Gx4Kq)WQ*}->shrD%R0DzrdGh z`z2=F0AmzklWBv~s~^r>fu{8blp@GSGkJG11))A*K}#m@w@u3TAIP7Ln`$`+gSN_{ z^Gz&CV*fqNYBmUmHz3}xS;`!%goY-G%lHpOaBoH!w6}O%n9avNxo(ZlDNXO*wOsvIpHcpLoJU>P2|~UXthi9X0s7HK;)_o!G_c zw8Z%j`m&{PhWqxSykEcOByN6DblMnp8d@{^obJ&j=Erdbe5-1BBr76~AVar7&pO}( z4V$vNw%uuKyURdKRewH8HDfB9)BG%%Iq(JaE?kZXtg3=kaCR{xV~NnkB2mOIVCYst zeU8I#cVCvK?C=w+j?S>kErG5{_Y}}(P^$!1M$tM&9b;W?BlKjMqxI^V5T@|@x#?WR zfsDi5%Irk^ey0H{rpVK?PJgSKbr6R57|7Qz`@V|?&Nb{yLyoCUl8|qoh|t*E>A2@n z=vpm&?GEI@4ar_<(lecXaAQ<>w{qwG!P^PH+)B^7t03Ss`jud>Au2>JaDOxO(g4Mq z6rfI6R~f(@q6lS&N)tvCV;3nY52_?QCOan^PIp9fOGVUFZ#Z0sYq=Ke%?VxGn%O`N z!0HxEkQ3zvib_h$6`)kq#+&}_CNGahJ~VrC-96CS8yozB?T$k5TKPLuEm?th61uf1 z34f0b9CIlu`!hg02-ylzb2^~8vrFWhqh5{QrF+X$?{|7BWV#eEI?{%tuv6e+U;{lu zuOS#APbky+Hd7}Gq4yFxqBckiYa_JeaN~)?xf3;#G94**i-djtU^Yw3>z^6 zJ>Uou2ETl5iXGIb4xPS-KKrj3{Lx7xd`V=icCeyafIaRBnMl6@sK1w)-U-`AfCj%e zsJ=HRf*#|hiCXLtNmA@ztsBQYKz%OjcjfHVPEtdmoxnU9Umr}p0=K15#GG>JhTG|n zEa-Ew3!$r6dV*f2KnVQe9)MYL;0>uIn~d6-s=s-tSkCv{^;+Mq_J*iOY2(uPOfv$s zM}Y6_l!wOq_s-)mKWUJ8;tP!*0Cn@jxZpSYOEYp$`&2`^+Fz^X=_y@Bu%l2oI8}Ej zb~S-P1U-DtF%`myQibd5L2BfL!-P`-SHRyLW+W)m=~%Xt71$Q^STy6SBXtwi?WuDp z<-PX$CM$lwirp%QwGtG}F_?jx@N4U?oA+yQZZAiK8(hy?D}8r^|GM%cfe-%{2ng_x zCULEwaS$I?zP`D{aHN7#z3Qb;YkQA&S~{rNKwn?~3OLwa;~(9G9jQ>?T$kAyhO~ZG zinPN@m-Gpi#TCxI`PaQHM%hX2+G{_is&aOxfj*7=ldbR5xcC{XXsPUXPXWmC>0`Da zk;NNQZ}QilKRy|AqpZ=?R^-JAQod?}PUf5BGh+mddazxO8Ci)d_QS*NujWE0l*kSu zG;Icv8&$$R<0qvTS9RgWL6B5ep5m@g?QMO8`kEivDCbkSxwl!mK)zIRF%PT)5d#2( z@V2W`&>8&vYp-L4h3c#gt5HgW3ZWCJ0_cV2M9>t&$G_G@iR_Vu{4XQbl)9_=ch{++ z6;j)h#_|@=u?O99H8Fe%b5jgg?_OCo$fL7AwRmwSx!&xu}bQ z&!1{FNBsGB%ZNNu9;K94lPfUCYJqHlHollKnv@)xq#YHC4FLrmn zA0rIjI^%lf@?fL${mn(4f0?_O_nT5*L%Y)+6uV!$R#W_GV1sP$ZI3|MKj~^0$-isk zMQ;+A=rWk2w?1Z7Ex%Ox{M@0ng<^d?ZDWKoC$5WAeQ$A~VC))#u=t<^OX$#G#dzSB8oo*XZelVQ_J;!&P)wUh3vwa@%Q?%(VOUCLbt z24A}lwWxY{2yEgd?8c7&KXqMKR8!y6O+r8dNC`+aK$Ic`Fw#MgrqYYj1ws=M0YQ2v z5iC?ukRnx4M0%0l;!iybW6VE)Sbk6Xmh}(WO4ad%6z2boVAVK zWU;9#Ul4MHlsr!_wwVckA56{l3o2U4Ym&~l+1-t>^zv$V=}oh--}vqEz!AgyOGma= zWRUe>no;kuU9ORFu1`e1g4FT%A^V=gxh&_Ntl1EU;gTl3mD$=V9=vA8hIoA10$y>B zhk=@8FwP#jcyp?{@G$6G#&~Vqso=SOP~i_;@hSE{XATbbGCHI6%BhdIAS`Wz-g@GA zld>n4hkFe+i)4~M$JwErhy%>g%HCfhJx@`}CTQ5Ota#N4q680%5%gy%G|**M8|()? z7Q{QipFXZVvv-5Jf3$}fsJY+1ZPnc#-Wa@=y(a{#>9`JsllE+_{)89nf8A|Zer7L&HRuwCk(MzE-a!il6U}EuU>^-0u6pqk7#pq!` zRLS{7G>!L9O2^)cB3h3YoEG{uU>28?`BQ{3;;77e(<{qyST>Kg^+LI$+~(26XFuzH zSbL9t;Y&H|)t6=#y>3lU$fEOt9SM@DoVw~<3CCC%eEfWetV1;U@X0|1h4+lna`T;$&bTAg=R$WFj?;3RF&%i6hG#lTDJa+v>E!!kmHYMYB`TCY1_uu*SryD|RS zb|&0Yez4G{M<;lgeYZ;=!p%>Xj88L5hMK*^D}v9i|51HlNI$t3sH2k(6x*D_Yr5n2 zZZ=z%ZT5CXxBC3L8W~WHar)h@)na?G9C$qfmM8amV{0@6ka=`{4#aSwSq>bvG9pRJ zj*9$p@QlT!6>7GWevKLF1ZChy;zIRS8X^Z+RqA&T7WauQixDS}_{tDTyc4x|6*U*8 zmlXMp_eF-Z{HDvuQ&E93mhu?>+-bDUe-pyFj=zDGHFBjxuELR~M+749IDh-F@~)L_ zf1w}2w{H1#d6!?JOZ6$@@L?9djS2nG9FB|+(hH}_+xiMf-tQxe6=h;V^Bep| zB&x%j_i`>#%C}tf;!avCWUd5LDHSCEw3WnLw8#2|*5{*N@Vy*2IvUzX8 zbFUK$R*IhpCn63u^%2UfSFYJKH`-*G=ij4;&*4*>mJzBoeI-qeHm5Lcq5rurTx<(j z=Gf?HnozqDpS<}*Hc~)lHuol-sm2+So`_ASe&N(LP;qDSFM%4t8$TmniJ&8gM0YoA zF|`AW-xa>UYb`UnD6Dlwxy6&Pa9>=b#naq-le$^EQdY+66sZ^7FmwDLYe*j!obP%i zHXqzCkFBT1|AX|D@INqdF=cKWOFsG>B`3--?TB`ZF9T*`hRFyLCz7FJW7a|{JxTg0 zi5}-yxNYo*P**K9?pdXq`mt6K6R+*5M+E_Q3iwtrDQ(*b%4 zGPT07_Tz0$w~of$Yg?m_K8~CrgzT0~lhRk+iNwRtpLUFtVfR;%c{qu6u|IUNl)hS55?etLQO0C4}7Tzl62E2jUwP^>uz2qtoQy2^&1;p zwFnMAOcGF7n}}ly4$GSb35wNdgUEI70QAi-psGx~Hz^>>#IP zroru6)TeH~qs+L=9Ov|Mq?ex)H?mkohnr&Mxv8fel#%gi$ubNP{P<`%b!PX?mebjb ze*1fhqzP=`+gJ(s4OCBZExWbVA4Tqb&Ls5^6F;+YcF#kw1^V{WhL(?tRWBZ2cjf*1 zv6JpgDw*w|?cK@6R0nW@J^0=vE4-`>q;-I&^bat)%t(7nC>tj}30~^;dA!SyU3;jt z+0VHFsYSOX&HMbGLJ{pkDMc|_TC*{A=7k^m=;_gib{k|eDL7|vy}oL;%egx8_`${8 z8Ra&*OaS;El;XyP#>!>`Fjczi71m^E7dX1>;fh$9GZK5@KwrLYmQu; zA-(v#Q!>#EWN-pdB#_CMU>E-UsZwlzwnQ%Gz1p+ca7U80Q~r#yccxRssQr2b!S$Qs z4HaW3I$1Uo*dZ6-Dj#|!OMr)dyY(<{EJI15_o2;g)vqL5N7r?^i_hM7pG@DmY)FeH zhm8Cr*;c3enJ@Ca71(V~HB8@CGNmo(i*)lj#k7dWz2tZ~tJ#;fk7BSogLoZB5cfat zZ~-`kkYb)c9-wDpGH#Z?_5>DvOmpP)a^Zx%Y+EpubZWM-gIYHbFQ}QWZ@byN1cMLUBc=c;V?cq zzzt7j6~}wQv!!sw7=dNvC`NAz=iRlo|Kfy3>;eXV@@hueMfS5B9D(Odrs`>XEp@cw zCmgFO=2{4p+QDK)m8?tb=>CS?n4!xZn7^RIIly)HdFweixPq3)M`;KdG`_3`PDz-LMQqQE@hc2m2QK@pjGYTXb3@}ykk(&s_tfi{1tQyd zE}IZ*0SRZ+_G?4~0iFM989%{9c?DW=K)QN226Vx((gJ90-|z#Ew$~*Rnk2fd;rw-n z4?T}x33e>K%c`qgRw8YltcasM)%}$ncmU?)t|8MbJhBd8O%cA2`5zq8^T8$|&poH7By22Os7Z}Ocg zSFWFyJI`euGGaRVcWbNJ-l2S8@>WM%y9Op?A!T5zqf#IxO}0&vTszC+BC`|;1OAIb zcfd4pN;0TSGlD4nRbE4bXxd#vM;% zBycpcm$2K6loIHhDw8lm1+|DCUH9iDff6|x-Y!r1EG)Fs)l2De@70pVs+^vSYGea^ zmHftmy8$0x%wxYmTUdJCbjqGLvU{Gvk&S`ye7zx}cmKXT_J$7(2vRfEOt7XHr3e(_ znRs9<@M{gK7$i&Fv} zb}1yoAB6I;E?dwuUa(}X1i)(=uLU#@iTy8rz2;kyM5+AvT12#5hHou%XjL)ff(&HP zWdI0Aq%RiiD1qZ(EBb`uD{9z0DT-p4-?&k{wLc2)t&?V{YOF2%@Xi?gSl{+Rnw=alY1~869zNaKKQ?& z#0uao7{XA`Mdp^3FVKjPVt7~^KmWHEVgO{TD5Mz!DSWiaW^l|&H35y)F9Kj`a%NIP z#t`n?fZhc9Fa`vgRa>H-F6M~PS#39(8clp82I|#_PP`P{~K)bjL!iEAj4~BSF3bg9{vvwudGD? literal 0 HcmV?d00001 diff --git a/.cache/brands/integrations/openmediavault/dark_icon.png b/.cache/brands/integrations/openmediavault/dark_icon.png index c2616f989ed20df651993537dc3d1b0f0a36c06c..45dad3e704ac936dc6be7c3a0203d05b78df7543 100644 GIT binary patch delta 839 zcmZ3>xrlv2M*a0y-_tifeE9xn;kL(Z2cIvw@OHwnmpg8MeEs$JtkbX0JpEd|=jovb zpTGY4yYAZi|Ns9_oiQbtfr06rr;B4q#jUq@PxdV~5OKKpyz}IZy8r*T>Q2gA>RiRR zO3kV6`#X)R%lbk%+4!AYkU@&|{w;Y?d*+-Kf4i!vep15PTal$xg^#Yf8@gELd}h0) zWy~c#@1iY>V#A(fY%aU0<9^wX`GJYUWWFp0?BIYu!=DLvW2OImWw3kE%l)sY!7=}C zfu+Oc=<8q&`*;IlvyaYX)mUxw>2!{u!kSN6E1of&swErkFxf1p(70TLbW#L%JgkM)PZlk5u|4*#C_3T!{b(-(>@i0c8H zvmxQofu_y{=6W^B2ah~>7bO>AfCv?cO)&Bg!-B~S7Q6=8)6YT^mgjDrlMm;V&2X6f z7@YFvWW4oTu&ziee#`2v>6?FUEWP}qwF4QPDA~`TvcqhZ-zwh|AY(mU{an^LB{Ts5 DvI}?I delta 1108 zcmZ3)zLs-BMt%CmhqF$10|NtNlDE4H>yP}G$AKL75>H=O_9q;i9Gd3;CeBf2U|65s5p~3O|`%@zy@@cJjWn}#7)rr66H}C#m-uSG6AwI3+e*OQ2XC`fkZa5v>a9el5 z*u3MNOm(vt95ccjl0*e&zIHx3 zgQ@N3cPl2D{r@n`d#nK(O)*jE8F^x>i4@EWll>x-tLb4GUdiH z<;}b7v?c5{Z`FN&YNly2J9eVj`fBU8Jg>*A4dvaSfsxMTQN8WZZcWbryM5NZs-GMh z@LjZZ5>jYA=QIf3^jGMf>2q#_%=fGrGZL(Oz`;0?m1pu+vxzo=HH=$pS>zXoi(FW* z+#k3vaZ%uE{(_UNrwUnX{9o}t+$g{T3>UFFN#}d_R;SLH(6HR<;M3(nhmQnl-m;6; z4bl9y$2QLFvDMZ?>v`*ilde88@maw=p`PW5xMN)N-YNwZd9KZplkW3P7En}m3!1XU z0^)WL&I$SxC+bi7b?490Xf<=!8QMMzRp3#4L3F`AEA9I>zIM>4-%$J8tN&7v{IX?s ze*U!!7X9+@{kd?}tK`zB?AoXMuhsqcSYhhJQQv=kd7@Kn!yiTMPsiUBT$uDHF#1#b z+QK{Y{xo*W>^!+}_0m5ZcNa4}QGePz{ii__Fd!T}8F+=APkpyPk}>1Oq_@*wSWBs4 zCNx-p{&96kQ%KOyo%j9zJFy3!L>`oJb5wG1{1*3{|M>53=KB1;Ez4E@NWV|h{^K`w zZsRU1G20nu#GKOk*aOnG+%%Xajg&7K7#d9E58dMkIrMANb)dLviEBhjN@7W>RdP`( zkYX@0Ff!0Ju+TNI3^A~G1fLPure@c@Jxt7(U6;;l9^V?VC0KS$48MH4}dx( vK~@CkrbP0l+XkK#=OoO diff --git a/.cache/brands/integrations/openmediavault/dark_icon@2x.png b/.cache/brands/integrations/openmediavault/dark_icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..04f5dff7399876b23117613df4414cb4f2ac5969 GIT binary patch literal 2845 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 K(|N8%i2HvkOuiTBdsMO_&YsCQB71My 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 BRDS>f delta 5432 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 literal 0 HcmV?d00001 diff --git a/.ha_run.lock b/.ha_run.lock index fb25d3f..2365633 100644 --- a/.ha_run.lock +++ b/.ha_run.lock @@ -1 +1 @@ -{"pid": 67, "version": 1, "ha_version": "2026.5.0", "start_ts": 1778146972.604623} \ No newline at end of file +{"pid": 67, "version": 1, "ha_version": "2026.5.4", "start_ts": 1779529638.1563158} \ No newline at end of file diff --git a/automations.yaml b/automations.yaml index fe51488..8f87b12 100644 --- a/automations.yaml +++ b/automations.yaml @@ -1 +1,114 @@ -[] +- id: '1778927514490' + alias: NSPanel Easy Configuration (v2026.5.5) + description: '' + use_blueprint: + path: edwardtfn/nspanel_easy_blueprint.yaml + input: + nspanel_name: 369e58c3779ff3dd9a0b4c59fadeac4f + weather_entity: weather.astroweather_backyard + indoortemp: sensor.lounge_inside_temperature +- id: '1778927924212' + alias: NSPanel Easy Configuration (v2026.5.5) + description: '' + use_blueprint: + path: edwardtfn/nspanel_easy_blueprint.yaml + input: + nspanel_name: 369e58c3779ff3dd9a0b4c59fadeac4f + button_page01_label: Lounge Scenes + button_pages_icon_size: '8' + entity01: script.nspanel_lounge_scene_bright + entity01_name: Bright + entity01_icon: mdi:brightness-7 + entity01_confirm: false + entity02: script.nspanel_lounge_scene_tv_general + entity02_name: TV General + entity02_icon: mdi:television + entity02_confirm: false + entity03: script.nspanel_lounge_scene_movie + entity03_name: Movie + entity03_icon: mdi:movie-open + entity03_confirm: false + entity04: script.nspanel_lounge_scene_balanced + entity04_name: Balanced + entity04_icon: mdi:scale-balance + entity04_confirm: false + entity05: script.nspanel_lounge_scene_warm_cozy + entity05_name: Warm Cozy + entity05_icon: mdi:fireplace + entity05_confirm: false + entity06: script.nspanel_lounge_scene_reading + entity06_name: Reading + entity06_icon: mdi:book-open-page-variant + entity06_confirm: false + entity07: script.nspanel_lounge_scene_dining + entity07_name: Dining + entity07_icon: mdi:silverware-fork-knife + entity07_confirm: false + entity08: script.nspanel_lounge_scene_all_off + entity08_name: All Off + entity08_icon: mdi:power + entity08_confirm: false + mode: single +- id: '1778929633433' + alias: NSPanel Easy Configuration (v2026.5.5) + description: '' + use_blueprint: + path: edwardtfn/nspanel_easy_blueprint.yaml + input: + nspanel_name: 369e58c3779ff3dd9a0b4c59fadeac4f + button_page01_label: Lounge Scenes + button_pages_icon_size: '8' + entity01: script.nspanel_lounge_scene_bright + entity01_name: Bright + entity01_icon: mdi:brightness-7 + entity01_confirm: false + entity02: script.nspanel_lounge_scene_tv_general + entity02_name: TV General + entity02_icon: mdi:television + entity02_confirm: false + entity03: script.nspanel_lounge_scene_movie + entity03_name: Movie + entity03_icon: mdi:movie-open + entity03_confirm: false + entity04: script.nspanel_lounge_scene_balanced + entity04_name: Balanced + entity04_icon: mdi:scale-balance + entity04_confirm: false + entity05: script.nspanel_lounge_scene_warm_cozy + entity05_name: Warm Cozy + entity05_icon: mdi:fireplace + entity05_confirm: false + entity06: script.nspanel_lounge_scene_reading + entity06_name: Reading + entity06_icon: mdi:book-open-page-variant + entity06_confirm: false + entity07: script.nspanel_lounge_scene_dining + entity07_name: Dining + entity07_icon: mdi:silverware-fork-knife + entity07_confirm: false + entity08: script.nspanel_lounge_scene_all_off + entity08_name: All Off + entity08_icon: mdi:power + entity08_confirm: false + mode: single +- id: '1778930023427' + alias: NSPanel Lounge Controller + description: '' + use_blueprint: + path: edwardtfn/nspanel_easy_blueprint.yaml + input: + nspanel_name: 369e58c3779ff3dd9a0b4c59fadeac4f +- id: '1778930202677' + alias: NSPanel Lounge Controller + description: '' + use_blueprint: + path: edwardtfn/nspanel_easy_blueprint.yaml + input: + nspanel_name: 369e58c3779ff3dd9a0b4c59fadeac4f +- id: '1778930948144' + alias: Lounge NSPanel Controls + description: '' + use_blueprint: + path: edwardtfn/nspanel_easy_blueprint.yaml + input: + nspanel_name: 369e58c3779ff3dd9a0b4c59fadeac4f diff --git a/automations/quiet_time_settings.yaml b/automations/quiet_time_settings.yaml deleted file mode 100644 index 1247dff..0000000 --- a/automations/quiet_time_settings.yaml +++ /dev/null @@ -1,10 +0,0 @@ -- id: quiet_time_settings_to_mqtt - alias: Publish quiet time value to mqtt - trigger: - platform: state - entity_id: input_boolean.quiet_time - action: - service: mqtt.publish - data_template: - payload: "{{trigger.to_state.state}}" - topic: viewroad-status/homeassistant/quiet-time diff --git a/esphome/.device-builder-peer-link-key.bin b/esphome/.device-builder-peer-link-key.bin new file mode 100644 index 0000000..c4b9811 --- /dev/null +++ b/esphome/.device-builder-peer-link-key.bin @@ -0,0 +1 @@ +È(vÔOØÛ«3÷Ñm0Ì “ІUääq·äp½,@R \ No newline at end of file diff --git a/esphome/.device-builder.json b/esphome/.device-builder.json new file mode 100644 index 0000000..659188f --- /dev/null +++ b/esphome/.device-builder.json @@ -0,0 +1,732 @@ +{ + "esp-entbtproxy.yaml": { + "board_id": "generic-esp32", + "mac_address": "0C:B8:15:F5:2A:CC" + }, + "esp-spare1-athomv1.yaml": { + "board_id": "esp8285" + }, + "esp-centralstairs-top.yaml": { + "board_id": "generic-esp8266", + "mac_address": "48:3F:DA:16:51:20" + }, + "esp-officeelvcontrol.yaml": { + "board_id": "d1-mini", + "mac_address": "5C:CF:7F:BD:7B:42" + }, + "esp-gasheater.yaml": { + "board_id": "generic-esp8266" + }, + "esp-bedrm1arlecbulb.yaml": { + "board_id": "generic-esp8266" + }, + "esp-maindishwasherpower.yaml": { + "board_id": "generic-esp32c3", + "mac_address": "24:EC:4A:B0:C9:AC" + }, + "esp-downstbathtowelrail.yaml": { + "board_id": "d1-mini" + }, + "esp-bedrm2fanswitch.yaml": { + "board_id": "generic-esp8266", + "mac_address": "24:62:AB:05:A3:24" + }, + "esp-downstmasterbedrmlights.yaml": { + "board_id": "generic-esp8266", + "mac_address": "E8:DB:84:92:DE:1C" + }, + "esp-loungenorthswitch.yaml": { + "board_id": "generic-esp8266", + "mac_address": "EC:FA:BC:5C:4C:8B" + }, + "esp-garagelights.yaml": { + "board_id": "d1-mini", + "mac_address": "5C:CF:7F:3B:C1:97" + }, + "esp-underhouselights.yaml": { + "board_id": "generic-esp8266", + "mac_address": "60:01:94:84:70:87" + }, + "esp-mainbathfancombo.yaml": { + "board_id": "generic-esp8266", + "mac_address": "8C:AA:B5:E0:7D:19" + }, + "esp-entranceoutsideledlights.yaml": { + "board_id": "generic-esp8266", + "mac_address": "60:01:94:6F:91:75" + }, + "esp-centralstairs-bottom.yaml": { + "board_id": "generic-esp8266", + "mac_address": "48:3F:DA:16:86:A8" + }, + "esp-arcademachine1.yaml": { + "board_id": "esp8285", + "mac_address": "10:52:1C:FF:D9:8E" + }, + "esp-officedeskrightgpo.yaml": { + "board_id": "d1-mini", + "mac_address": "2C:3A:E8:0F:4E:0E" + }, + "esp-mainhallwaymainlights.yaml": { + "board_id": "generic-esp8266", + "mac_address": "50:02:91:43:0B:7C" + }, + "esp-downstbedrm2lights.yaml": { + "board_id": "generic-esp8266", + "mac_address": "50:02:91:43:0C:40" + }, + "esp-mainhallwaynorthlightswitch.yaml": { + "board_id": "generic-esp8266", + "mac_address": "CC:50:E3:EE:5E:45" + }, + "esp-garageextcornerlight.yaml": { + "board_id": "d1-mini", + "mac_address": "2C:3A:E8:0F:54:90" + }, + "esp-downstairsdishwasher.yaml": { + "board_id": "esp8285", + "mac_address": "78:42:1C:F2:4E:AD" + }, + "esp-entrancebathrmlights.yaml": { + "board_id": "generic-esp8266", + "mac_address": "8C:AA:B5:E0:A1:2E" + }, + "esp-bedrm2lights.yaml": { + "board_id": "generic-esp8266", + "mac_address": "DC:4F:22:72:0E:C1" + }, + "esp-weatherstation.yaml": { + "board_id": "d1-mini" + }, + "esp-garagedbcontrols.yaml": { + "board_id": "esp8285", + "mac_address": "60:01:94:88:DD:AA" + }, + "esp-datacupboardfans.yaml": { + "board_id": "aspen_asp_200_smart_window_fan", + "mac_address": "50:02:91:5F:D6:A7" + }, + "esp-mainkitchenlights.yaml": { + "board_id": "generic-esp8266", + "mac_address": "8C:AA:B5:DF:B7:DE" + }, + "esp-loungepelmetleds2.yaml": { + "board_id": "generic-esp8266" + }, + "esp-entmulti.yaml": { + "board_id": "generic-esp32", + "mac_address": "E4:65:B8:77:76:EC" + }, + "esp-occupancystair.yaml": { + "board_id": "generic-esp32", + "mac_address": "0C:B8:15:C1:F1:0C" + }, + "esp-datacupboardpower-left.yaml": { + "board_id": "esp8285", + "mac_address": "78:42:1C:F2:70:20" + }, + "esp-officelights.yaml": { + "board_id": "generic-esp8266", + "mac_address": "EC:FA:BC:48:9E:A6" + }, + "esp-mainbathroomlights.yaml": { + "board_id": "generic-bk7231n-qfn32-tuya", + "mac_address": "CC:8C:BF:2D:B1:C4" + }, + "esp-loungesouthrightswitch.yaml": { + "board_id": "generic-esp8266", + "mac_address": "84:CC:A8:8C:52:32" + }, + "esp-bedrm3ceilingfan.yaml": { + "board_id": "d1-mini" + }, + "esp-laundryplugpow.yaml": { + "board_id": "generic-esp8266", + "mac_address": "2C:3A:E8:07:5C:88" + }, + "esp-mainhallwaynightlights.yaml": { + "board_id": "generic-bk7231n-qfn32-tuya", + "mac_address": "50:8A:06:67:3E:4A" + }, + "esp-datacupboardpower-right.yaml": { + "board_id": "esp8285", + "mac_address": "78:42:1C:F2:6F:8B" + }, + "esp-poolpumppower.yaml": { + "board_id": "generic-esp32c3", + "mac_address": "24:EC:4A:B0:C9:88" + }, + "esp-laundrydrypow.yaml": { + "board_id": "generic-esp8266", + "mac_address": "5C:CF:7F:92:35:96" + }, + "esp-loungecabinetleds.yaml": { + "board_id": "generic-esp8266" + }, + "esp-6buttontest-pmb.yaml": { + "board_id": "generic-esp32" + }, + "esp-bedrm3lights.yaml": { + "board_id": "generic-esp8266" + }, + "esp-laundrywashpow.yaml": { + "board_id": "generic-esp8266", + "mac_address": "5C:CF:7F:B4:A7:A5" + }, + "esp-breakfastbarleds.yaml": { + "board_id": "generic-esp8266" + }, + "esp-laundryenv.yaml": { + "board_id": "generic-esp8266", + "mac_address": "5C:CF:7F:92:41:F5" + }, + "esp-occupancyoffice.yaml": { + "board_id": "generic-esp32", + "mac_address": "0C:B8:15:C0:E7:00" + }, + "esp-flysprayer1.yaml": { + "board_id": "esp8285", + "mac_address": "2C:F4:32:E5:22:5D" + }, + "esp-3dprinterpow.yaml": { + "board_id": "generic-esp8266", + "mac_address": "5C:CF:7F:A0:36:73" + }, + "esp-rocktumbler.yaml": { + "board_id": "esp8285", + "mac_address": "78:42:1C:F2:5A:E7" + }, + "esp-rgblampbulb1.yaml": { + "board_id": "generic-esp8266" + }, + "esp-downstloungeentry.yaml": { + "board_id": "generic-esp8266", + "mac_address": "50:02:91:43:0D:A3" + }, + "esp-downstloungeoutside.yaml": { + "board_id": "generic-esp8266", + "mac_address": "24:62:AB:05:9B:7A" + }, + "esp-masterbathtowelrail.yaml": { + "board_id": "d1-mini" + }, + "esp-loungeenvironment.yaml": { + "board_id": "generic-esp32c3", + "mac_address": "8C:D0:B2:A9:72:E5" + }, + "esp-loungewestswitch.yaml": { + "board_id": "generic-esp8266", + "mac_address": "EC:FA:BC:5C:4C:03" + }, + "esp-lounge6chdimmer.yaml": { + "board_id": "d1-mini-pro", + "mac_address": "C8:C9:A3:3B:0B:59" + }, + "esp-downstbathswitch.yaml": { + "board_id": "generic-esp8266", + "mac_address": "84:CC:A8:8B:44:9D" + }, + "esp-loungemiddleswitch.yaml": { + "board_id": "generic-esp8266", + "mac_address": "24:62:AB:05:A2:BE" + }, + "esp-officeusbhubpower.yaml": { + "board_id": "generic-esp8266", + "mac_address": "2C:3A:E8:0F:53:52" + }, + "esp-leafbattery.yaml": { + "board_id": "d1-mini" + }, + "esp-garagebtproxy.yaml": { + "board_id": "generic-esp32", + "mac_address": "10:06:1C:86:D0:1C" + }, + "esp-bedrm1airfilter.yaml": { + "board_id": "d1-mini", + "mac_address": "E8:9F:6D:87:C1:5D" + }, + "esp-downstkitchlights.yaml": { + "board_id": "generic-esp8266", + "mac_address": "24:62:AB:05:A8:90" + }, + "esp-garageentrylights.yaml": { + "board_id": "generic-bk7231n-qfn32-tuya" + }, + "esp-mainpowermonitor.yaml": { + "board_id": "d1-mini", + "mac_address": "2C:F4:32:4B:BC:70" + }, + "esp-loungebookshelfleds.yaml": { + "board_id": "generic-esp8266" + }, + "esp-officeduallights.yaml": { + "board_id": "generic-esp8266" + }, + "esp-poollightpower2.yaml": { + "board_id": "esp8285", + "mac_address": "78:42:1C:F2:50:87" + }, + "esp-laundrylights.yaml": { + "board_id": "generic-esp8266", + "mac_address": "E8:DB:84:92:D8:44" + }, + "esp-downstloungemain.yaml": { + "board_id": "generic-esp8266", + "mac_address": "24:62:AB:05:A2:C3" + }, + "esp-loungesouthleftswitch.yaml": { + "board_id": "generic-esp8266", + "mac_address": "8C:AA:B5:DF:F5:ED" + }, + "esp-attobattery.yaml": { + "board_id": "d1-mini" + }, + "esp-downstairskitchleds.yaml": { + "board_id": "generic-esp8266" + }, + "esp-entrancelightswitch.yaml": { + "board_id": "generic-esp8266", + "mac_address": "40:F5:20:E0:44:DA" + }, + "esp-bedrm3fanswitch.yaml": { + "board_id": "generic-esp8266", + "mac_address": "84:F3:EB:EC:6E:3A" + }, + "esp-bedrm2ceilingfan.yaml": { + "board_id": "d1-mini" + }, + "_remote_build": { + "dashboard_id": "vhamVDnWEnx-FvAa24uVv49Wsddurh84" + }, + "esp-entbtproxy copy.yaml": { + "board_id": "generic-esp32" + }, + "esp-nspanel2lounge.yaml": { + "board_id": "generic-esp32", + "mac_address": "88:13:BF:68:39:2C" + }, + "_firmware_jobs": [ + { + "job_id": "126762467ae7", + "configuration": "esp-nspanel1masterbdrm.yaml", + "job_type": "install", + "status": "completed", + "created_at": "2026-05-17T10:36:36.272476+00:00", + "started_at": "2026-05-17T10:36:36.272693+00:00", + "completed_at": "2026-05-17T10:37:14.499200+00:00", + "exit_code": 0, + "output": [ + "\\033[32mINFO ESPHome 2026.5.0b1\\033[0m\n", + "\\033[32mINFO Reading configuration /config/esphome/esp-nspanel1masterbdrm.yaml...\\033[0m\n", + "\\033[32mINFO Detected timezone 'Pacific/Auckland'\\033[0m\n", + "\\033[33mWARNING Found and merged multiple configurations for ota platform esphome port(s) [3232]\\033[0m\n", + "\\033[32mINFO Generating C++ source...\\033[0m\n", + "\\033[32mINFO Setting CONFIG_LWIP_MAX_SOCKETS to 13 (TCP=6 [api=3, captive_portal=3], UDP=3 [captive_portal=1, mdns=2], TCP_LISTEN=4 [api=1, ota=2, web_server_base=1])\\033[0m\n", + "\\033[32mINFO Compiling app... Build path: /data/build/esp-nspanel1masterbdrm\\033[0m\n", + "Processing \u001b[36m\u001b[1mesp-nspanel1masterbdrm\u001b[0m (board: esp32dev; framework: espidf; platform: https://github.com/pioarduino/platform-espressif32/releases/download/55.03.38-1/platform-espressif32.zip)\n", + "\u001b[1m--------------------------------------------------------------------------------\u001b[0m\n", + "\u001b[0mHARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash\n", + "\u001b[0m - contrib-piohome @ 3.4.4 \n", + "\u001b[0m - framework-espidf @ 3.50504.0 (5.5.4) \n", + "\u001b[0m - tool-cmake @ 4.0.3 \n", + "\u001b[0m - tool-esp-rom-elfs @ 2024.10.11 \n", + "\u001b[0m - tool-esptoolpy @ 5.2.0 \n", + "\u001b[0m - tool-ninja @ 1.13.1 \n", + "\u001b[0m - tool-scons @ 4.40801.0 (4.8.1) \n", + "\u001b[0m - tool-xtensa-esp-elf-gdb @ 16.3.0+20250913 \n", + "\u001b[0m - toolchain-xtensa-esp-elf @ 14.2.0+20260121\n", + "\u001b[33m\u001b[2mUsing Python 3.12.10 environment at: /root/.platformio/penv/.espidf-5.5.4\u001b[0m\n", + "\u001b[0mReading CMake configuration...\n", + "\u001b[0mNo dependencies\n", + "\u001b[0mRAM: [== ] 19.9% (used 65232 bytes from 327680 bytes)\n", + "\u001b[0mFlash: [====== ] 61.5% (used 1127679 bytes from 1835008 bytes)\n", + "========================= [\u001b[32m\u001b[1mSUCCESS\u001b[0m] Took 20.43 seconds =========================\u001b[0m\n", + "\\033[32mINFO Build Info: config_hash=0xb6775f3e build_time_str=2026-05-17 22:24:40 +1200\\033[0m\n", + "\\033[32mINFO Successfully compiled program.\\033[0m\n", + "\\033[32mINFO Connecting to 172.31.11.183 port 3232...\\033[0m\n", + "\\033[32mINFO Connected to 172.31.11.183\\033[0m\n", + "\\033[32mINFO Uploading /data/build/esp-nspanel1masterbdrm/.pioenvs/esp-nspanel1masterbdrm/firmware.bin (1128080 bytes)\\033[0m\n", + "\r", + "Uploading: [ ] 0% \r", + "Uploading: [= ] 1% \r", + "Uploading: [= ] 2% \r", + "Uploading: [== ] 3% \r", + "Uploading: [=== ] 4% \r", + "Uploading: [=== ] 5% \r", + "Uploading: [==== ] 6% \r", + "Uploading: [==== ] 7% \r", + "Uploading: [===== ] 8% \r", + "Uploading: [====== ] 9% \r", + "Uploading: [====== ] 10% \r", + "Uploading: [======= ] 11% \r", + "Uploading: [======= ] 12% \r", + "Uploading: [======== ] 13% \r", + "Uploading: [========= ] 14% \r", + "Uploading: [========= ] 15% \r", + "Uploading: [========== ] 16% \r", + "Uploading: [========== ] 17% \r", + "Uploading: [=========== ] 18% \r", + "Uploading: [============ ] 19% \r", + "Uploading: [============ ] 20% \r", + "Uploading: [============= ] 21% \r", + "Uploading: [============== ] 22% \r", + "Uploading: [============== ] 23% \r", + "Uploading: [=============== ] 24% \r", + "Uploading: [=============== ] 25% \r", + "Uploading: [================ ] 26% \r", + "Uploading: [================= ] 27% \r", + "Uploading: [================= ] 28% \r", + "Uploading: [================= ] 29% \r", + "Uploading: [================== ] 30% \r", + "Uploading: [=================== ] 31% \r", + "Uploading: [==================== ] 32% \r", + "Uploading: [==================== ] 33% \r", + "Uploading: [==================== ] 34% \r", + "Uploading: [===================== ] 35% \r", + "Uploading: [====================== ] 36% \r", + "Uploading: [====================== ] 37% \r", + "Uploading: [======================= ] 38% \r", + "Uploading: [======================== ] 39% \r", + "Uploading: [======================== ] 40% \r", + "Uploading: [========================= ] 41% \r", + "Uploading: [========================= ] 42% \r", + "Uploading: [========================== ] 43% \r", + "Uploading: [=========================== ] 44% \r", + "Uploading: [=========================== ] 45% \r", + "Uploading: [============================ ] 46% \r", + "Uploading: [============================ ] 47% \r", + "Uploading: [============================= ] 48% \r", + "Uploading: [============================== ] 49% \r", + "Uploading: [============================== ] 50% \r", + "Uploading: [=============================== ] 51% \r", + "Uploading: [=============================== ] 52% \r", + "Uploading: [================================ ] 53% \r", + "Uploading: [================================= ] 54% \r", + "Uploading: [================================= ] 55% \r", + "Uploading: [================================== ] 56% \r", + "Uploading: [================================== ] 57% \r", + "Uploading: [=================================== ] 58% \r", + "Uploading: [==================================== ] 59% \r", + "Uploading: [==================================== ] 60% \r", + "Uploading: [===================================== ] 61% \r", + "Uploading: [===================================== ] 62% \r", + "Uploading: [====================================== ] 63% \r", + "Uploading: [======================================= ] 64% \r", + "Uploading: [======================================= ] 65% \r", + "Uploading: [======================================== ] 66% \r", + "Uploading: [========================================= ] 67% \r", + "Uploading: [========================================= ] 68% \r", + "Uploading: [========================================== ] 69% \r", + "Uploading: [========================================== ] 70% \r", + "Uploading: [=========================================== ] 71% \r", + "Uploading: [============================================ ] 72% \r", + "Uploading: [============================================ ] 73% \r", + "Uploading: [============================================ ] 74% \r", + "Uploading: [============================================= ] 75% \r", + "Uploading: [============================================== ] 76% \r", + "Uploading: [=============================================== ] 77% \r", + "Uploading: [=============================================== ] 78% \r", + "Uploading: [=============================================== ] 79% \r", + "Uploading: [================================================ ] 80% \r", + "Uploading: [================================================= ] 81% \r", + "Uploading: [================================================= ] 82% \r", + "Uploading: [================================================== ] 83% \r", + "Uploading: [=================================================== ] 84% \r", + "Uploading: [=================================================== ] 85% \r", + "Uploading: [==================================================== ] 86% \r", + "Uploading: [==================================================== ] 87% \r", + "Uploading: [===================================================== ] 88% \r", + "Uploading: [====================================================== ] 89% \r", + "Uploading: [====================================================== ] 90% \r", + "Uploading: [======================================================= ] 91% \r", + "Uploading: [======================================================= ] 92% \r", + "Uploading: [======================================================== ] 93% \r", + "Uploading: [========================================================= ] 94% \r", + "Uploading: [========================================================= ] 95% \r", + "Uploading: [========================================================== ] 96% \r", + "Uploading: [========================================================== ] 97% \r", + "Uploading: [=========================================================== ] 98% \r", + "Uploading: [============================================================] 99% \r", + "Uploading: [============================================================] 100% Done...\r\n", + "\n", + "\\033[32mINFO Upload took 7.41 seconds, waiting for result...\\033[0m\n", + "\\033[32mINFO OTA successful\\033[0m\n", + "\\033[32mINFO Successfully uploaded program.\\033[0m\n" + ], + "error": null, + "port": "OTA", + "new_name": "", + "progress": 100, + "remote_peer": "", + "remote_job_id": "", + "remote_peer_label": "", + "device_name": "", + "device_friendly_name": "", + "source": "local", + "source_pin_sha256": "", + "source_label": "", + "source_esphome_version": "" + }, + { + "job_id": "0eb2b3a49a5f", + "configuration": "esp-nspanel2lounge.yaml", + "job_type": "compile", + "status": "cancelled", + "created_at": "2026-05-17T08:44:50.516947+00:00", + "started_at": "2026-05-17T08:44:50.517123+00:00", + "completed_at": "2026-05-17T08:47:51.180084+00:00", + "exit_code": -15, + "output": [ + "\\033[32mINFO ESPHome 2026.5.0b1\\033[0m\n", + "\\033[32mINFO Reading configuration /config/esphome/esp-nspanel2lounge.yaml...\\033[0m\n", + "\\033[32mINFO Updating https://github.com/edwardtfn/NSPanel-Easy@v2026.5.5\\033[0m\n", + "\\033[32mINFO Updating https://github.com/edwardtfn/NSPanel-Easy@v2026.5.5\\033[0m\n", + "\\033[32mINFO Detected timezone 'Pacific/Auckland'\\033[0m\n", + "\\033[33mWARNING Found and merged multiple configurations for ota platform esphome port(s) [3232]\\033[0m\n", + "\\033[32mINFO Generating C++ source...\\033[0m\n", + "\\033[32mINFO Setting CONFIG_LWIP_MAX_SOCKETS to 13 (TCP=6 [api=3, captive_portal=3], UDP=3 [captive_portal=1, mdns=2], TCP_LISTEN=4 [api=1, ota=2, web_server_base=1])\\033[0m\n", + "\\033[32mINFO Compiling app... Build path: /data/build/esp-nspanel2lounge\\033[0m\n", + "Processing \u001b[36m\u001b[1mesp-nspanel2lounge\u001b[0m (board: esp32dev; framework: espidf; platform: https://github.com/pioarduino/platform-espressif32/releases/download/55.03.38-1/platform-espressif32.zip)\n", + "\u001b[1m--------------------------------------------------------------------------------\u001b[0m\n", + "\u001b[0mHARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash\n", + "\u001b[0m - contrib-piohome @ 3.4.4 \n", + "\u001b[0m - framework-espidf @ 3.50504.0 (5.5.4) \n", + "\u001b[0m - tool-cmake @ 4.0.3 \n", + "\u001b[0m - tool-esp-rom-elfs @ 2024.10.11 \n", + "\u001b[0m - tool-esptoolpy @ 5.2.0 \n", + "\u001b[0m - tool-ninja @ 1.13.1 \n", + "\u001b[0m - tool-scons @ 4.40801.0 (4.8.1) \n", + "\u001b[0m - tool-xtensa-esp-elf-gdb @ 16.3.0+20250913 \n", + "\u001b[0m - toolchain-xtensa-esp-elf @ 14.2.0+20260121\n", + "\u001b[33m\u001b[2mUsing Python 3.12.10 environment at: /root/.platformio/penv/.espidf-5.5.4\u001b[0m\n", + "\u001b[0mReading CMake configuration...\n", + "\u001b[0mGenerating assembly for certificate bundle...\n", + "\u001b[0mNo dependencies\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/adc/adc_sensor_common.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/adc/adc_sensor_esp32.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/api/api_buffer.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/api/api_connection.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/api/api_frame_helper.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/api/api_frame_helper_plaintext.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/api/api_overflow_buffer.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/api/api_pb2.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/api/api_pb2_service.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/api/api_server.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/api/list_entities.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/api/proto.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/api/subscribe_state.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/api/user_services.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/binary_sensor/automation.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/binary_sensor/binary_sensor.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/binary_sensor/filter.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/button/button.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/captive_portal/captive_portal.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/captive_portal/dns_server_esp32_idf.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/display/display.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/display/display_buffer.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/display/rect.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/esp32/core.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/esp32/crash_handler.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/esp32/gpio.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/esp32/hal.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/esp32/helpers.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/esp32/preferences.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/esp32/printf_stubs.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/esp32/throw_stubs.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/esphome/ota/ota_esphome.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/gpio/binary_sensor/gpio_binary_sensor.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/gpio/switch/gpio_switch.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/homeassistant/text_sensor/homeassistant_text_sensor.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/homeassistant/time/homeassistant_time.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/ledc/ledc_output.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/logger/logger.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/logger/logger_esp32.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/logger/task_log_buffer_esp32.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/md5/md5.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/mdns/mdns_component.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/mdns/mdns_esp32.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/network/util.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/nextion/nextion.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/nextion/nextion_commands.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/nextion/nextion_component.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/nextion/nextion_upload.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/nextion/nextion_upload_esp32.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/nextion/text_sensor/nextion_textsensor.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/nspanel_easy/addon_climate.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/nspanel_easy/addon_display_light.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/nspanel_easy/addon_upload_tft.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/nspanel_easy/base.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/nspanel_easy/chips.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/nspanel_easy/ha_components.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/nspanel_easy/hw_display.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/nspanel_easy/nextion_components.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/nspanel_easy/page_climate.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/nspanel_easy/page_entities.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/nspanel_easy/page_media_player.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/nspanel_easy/page_notification.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/nspanel_easy/page_popup_select.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/nspanel_easy/page_screensaver.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/nspanel_easy/page_utilities.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/nspanel_easy/pages.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/nspanel_easy/text.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/nspanel_easy/versioning.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/nspanel_easy/weather.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/ntc/ntc.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/number/automation.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/number/number.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/number/number_call.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/number/number_traits.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/ota/ota_backend.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/ota/ota_backend_esp_idf.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/ota/ota_bootloader_esp_idf.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/ota/ota_partitions_esp_idf.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/output/automation.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/output/float_output.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/psram/psram.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/resistance/resistance_sensor.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/restart/button/restart_button.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/rtttl/rtttl.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/safe_mode/safe_mode.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/script/script.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/select/select.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/select/select_call.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/select/select_traits.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/sensor/automation.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/sensor/filter.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/sensor/sensor.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/sha256/sha256.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/socket/bsd_sockets_impl.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/socket/socket.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/switch/automation.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/switch/switch.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/template/binary_sensor/template_binary_sensor.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/template/number/template_number.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/template/select/template_select.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/template/switch/template_switch.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/template/text_sensor/template_text_sensor.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/text_sensor/filter.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/text_sensor/text_sensor.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/time/automation.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/time/posix_tz.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/time/real_time_clock.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/uart/uart.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/uart/uart_component.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/uart/uart_component_esp_idf.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/uart/uart_debugger.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/watchdog/watchdog.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/web_server/ota/ota_web_server.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/web_server_base/web_server_base.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/web_server_idf/multipart.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/web_server_idf/utils.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/web_server_idf/web_server_idf.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/wifi/wifi_component.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/components/wifi/wifi_component_esp_idf.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/core/alloc_helpers.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/core/application.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/core/build_info_data.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/core/color.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/core/component.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/core/component_iterator.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/core/controller_registry.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/core/entity_base.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/core/gpio.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/core/helpers.cpp.o\n", + "\u001b[0mCompiling .pioenvs/esp-nspanel2lounge/src/esphome/core/log.cpp.o\n" + ], + "error": null, + "port": "", + "new_name": "", + "progress": null, + "remote_peer": "", + "remote_job_id": "", + "remote_peer_label": "", + "device_name": "", + "device_friendly_name": "", + "source": "local", + "source_pin_sha256": "", + "source_label": "", + "source_esphome_version": "" + }, + { + "job_id": "e4433a434baf", + "configuration": "esp-nspanel1masterbdrm.yaml", + "job_type": "clean", + "status": "completed", + "created_at": "2026-05-17T09:55:46.641871+00:00", + "started_at": "2026-05-17T09:55:46.642053+00:00", + "completed_at": "2026-05-17T09:55:49.036615+00:00", + "exit_code": 0, + "output": [ + "\\033[32mINFO ESPHome 2026.5.0b1\\033[0m\n", + "\\033[32mINFO Reading configuration /config/esphome/esp-nspanel1masterbdrm.yaml...\\033[0m\n", + "\\033[32mINFO Detected timezone 'Pacific/Auckland'\\033[0m\n", + "\\033[33mWARNING Found and merged multiple configurations for ota platform esphome port(s) [3232]\\033[0m\n", + "\\033[32mINFO Deleting /data/build/esp-nspanel1masterbdrm/.pioenvs\\033[0m\n", + "\\033[32mINFO Deleting /data/build/esp-nspanel1masterbdrm/.piolibdeps\\033[0m\n", + "\\033[32mINFO Deleting /data/build/esp-nspanel1masterbdrm/dependencies.lock\\033[0m\n", + "\\033[32mINFO Deleting /data/build/esp-nspanel1masterbdrm/managed_components\\033[0m\n", + "\\033[32mINFO Deleting PlatformIO cache /data/cache/platformio/cache\\033[0m\n", + "\\033[32mINFO Done!\\033[0m\n" + ], + "error": null, + "port": "", + "new_name": "", + "progress": null, + "remote_peer": "", + "remote_job_id": "", + "remote_peer_label": "", + "device_name": "", + "device_friendly_name": "", + "source": "local", + "source_pin_sha256": "", + "source_label": "", + "source_esphome_version": "" + }, + { + "job_id": "1cb834d6b311", + "configuration": "esp-nspanel1masterbdrm.yaml", + "job_type": "clean", + "status": "completed", + "created_at": "2026-05-17T09:30:13.803940+00:00", + "started_at": "2026-05-17T09:30:13.804128+00:00", + "completed_at": "2026-05-17T09:30:16.052388+00:00", + "exit_code": 0, + "output": [ + "\\033[32mINFO ESPHome 2026.5.0b1\\033[0m\n", + "\\033[32mINFO Reading configuration /config/esphome/esp-nspanel1masterbdrm.yaml...\\033[0m\n", + "\\033[32mINFO Detected timezone 'Pacific/Auckland'\\033[0m\n", + "\\033[33mWARNING Found and merged multiple configurations for ota platform esphome port(s) [3232]\\033[0m\n", + "\\033[32mINFO Deleting /data/build/esp-nspanel1masterbdrm/.pioenvs\\033[0m\n", + "\\033[32mINFO Deleting /data/build/esp-nspanel1masterbdrm/dependencies.lock\\033[0m\n", + "\\033[32mINFO Deleting /data/build/esp-nspanel1masterbdrm/managed_components\\033[0m\n", + "\\033[32mINFO Deleting PlatformIO cache /data/cache/platformio/cache\\033[0m\n", + "\\033[32mINFO Done!\\033[0m\n" + ], + "error": null, + "port": "", + "new_name": "", + "progress": null, + "remote_peer": "", + "remote_job_id": "", + "remote_peer_label": "", + "device_name": "", + "device_friendly_name": "", + "source": "local", + "source_pin_sha256": "", + "source_label": "", + "source_esphome_version": "" + } + ], + "esp-nspanel2lounge copy.yaml": { + "board_id": "generic-esp32", + "mac_address": "88:13:BF:68:39:2C" + }, + "esp-nspanel1masterbdrm.yaml": { + "board_id": "generic-esp32", + "mac_address": "24:D7:EB:0D:E7:FC" + }, + "esp-ledmatrix1.yaml": { + "board_id": "generic-esp8266", + "mac_address": "5C:CF:7F:A0:36:73" + } +} \ No newline at end of file diff --git a/packages/main_bathroom_actions.yaml b/esphome/.device-builder.json.lock similarity index 100% rename from packages/main_bathroom_actions.yaml rename to esphome/.device-builder.json.lock diff --git a/esphome/.device-builder.lock b/esphome/.device-builder.lock new file mode 100644 index 0000000..af2c826 --- /dev/null +++ b/esphome/.device-builder.lock @@ -0,0 +1 @@ +{"pid": 76431, "lock_format_version": 1, "device_builder_version": "0.1.0b51", "start_ts": 1779063562.6364732} \ No newline at end of file diff --git a/esphome/common/network_common_esp32.yaml b/esphome/common/network_common_esp32.yaml new file mode 100644 index 0000000..e7577b6 --- /dev/null +++ b/esphome/common/network_common_esp32.yaml @@ -0,0 +1,130 @@ +substitutions: + ############################################################################################ + # SPECIFIC DEVICE VARIABLE SUBSTITUTIONS + # If NOT using a secrets file, just replace these with the passwords etc (in quotes) + ########################################################################################### + wifi_ssid: !secret ha_wifi_ssid + wifi_password: !secret ha_wifi_password + fallback_ap_password: !secret fallback_ap_password + + # Enables faster network connections, with last connected SSID being connected to and no full scan for SSID being undertaken + wifi_fast_connect: "false" + + # Define a domain for this device to use. i.e. iot.home.lan (so device will appear as athom-smart-plug-v2.iot.home.lan in DNS/DHCP logs) + dns_domain: ".local" + + # Automatically add the mac address to the name + # eg so you can use a single firmware for all devices + add_mac_suffix: "false" + + # Enable or disable the use of IPv6 networking on the device + ipv6_enable: "false" + + # Add these if we are giving it a static ip, or remove them in the Wifi section + static_ip_subnet: !secret ha_wifi_subnet + static_ip_gateway: !secret ha_wifi_gateway + static_ip_dns1: !secret ha_wifi_dns1 + static_ip_dns2: !secret ha_wifi_dns2 + + # Network reconnect every x hours to ensure best access point + base_interval_hours: "23" # Base interval in hours + random_offset_max_minutes: "59" # Max random offset in minutes + +########################################################################################### +# Common Wifi Settings +# https://esphome.io/components/wifi.html +# +# Power Save mode (can reduce wifi reliability) +# NONE (least power saving, Default for ESP8266) +# LIGHT (Default for ESP32) +# HIGH (most power saving) +########################################################################################### +wifi: + networks: + - ssid: ${wifi_ssid} + password: ${wifi_password} + manual_ip: # optional static IP address + static_ip: ${local_static_ip_address} + gateway: ${static_ip_gateway} + subnet: ${static_ip_subnet} + dns1: ${static_ip_dns1} + dns2: ${static_ip_dns2} + + #enable_rrm: true # (ESP32 only) enable 802.11k Radio Resource Management + #enable_btm: true # (ESP32 only) enable 802.11v BSS Transition Management + power_save_mode: none # https://esphome.io/components/wifi.html#wifi-power-save-mode + use_address: ${local_current_ip_address} + ap: # Details for fallback hotspot in case wifi connection fails https://esphome.io/components/wifi.html#access-point-mode + ssid: ${local_device_name} + password: ${fallback_ap_password} + ap_timeout: 10min # Time until it brings up fallback AP. default is 1min + + # Allow rapid re-connection to previously connected WiFi SSID, skipping scan of all SSIDs + fast_connect: ${wifi_fast_connect} + + # Define dns domain / suffix to add to hostname + domain: ${dns_domain} + min_auth_mode: WPA2 + + # Reboot eventually when Wi-Fi is down (default is 15min) + reboot_timeout: 56h + +captive_portal: # extra fallback mechanism for when connecting if the configured WiFi fails + +########################################################################################### +# Enable Over the Air Update Capability +# https://esphome.io/components/ota.html?highlight=ota +########################################################################################### +ota: + - platform: esphome + password: ${local_ota_pass} + version: 2 + #- platform: web_server # Uncomment if you want to be able to do OTA with the web interface + +########################################################################################### +# Safe Mode +# Safe mode will detect boot loops +# https://esphome.io/components/safe_mode +########################################################################################### +safe_mode: + +########################################################################################### +# Network +# global configuration for all types of networks +# https://esphome.io/components/network.html +########################################################################################### +network: + enable_ipv6: ${ipv6_enable} + +########################################################################################## +# Interval +# Restart Networking every x hours + rand mins +# This ensure that the device is connected to the best AP +########################################################################################## +#script: +# - id: random_reconnect +# mode: restart +# then: +# - lambda: |- +# // Compute total delay: base hours + random offset minutes +# uint32_t extra; +# #if defined(ESP32) +# // ESP32 (both Arduino & IDF builds) uses esp_random() +# extra = esp_random() % (${random_offset_max_minutes} + 1); +# #elif defined(ESP8266) +# // ESP8266 Arduino core +# extra = os_random() % (${random_offset_max_minutes} + 1); +# #else +# // Fallback to esp_random() on other platforms +# extra = esp_random() % (${random_offset_max_minutes} + 1); +# #endif +# uint32_t total_s = ${base_interval_hours} * 3600 + extra * 60; +# ESP_LOGI("random_reconnect", "Next reconnect in %u seconds", total_s); +# // Delay inside lambda (blocks script execution but OK for reconnect timing) +# delay(total_s * 1000); +# - logger.log: "network_check: performing reconnect" +# - wifi.disable: {} +# - delay: 1s +# - wifi.enable: {} +# - script.execute: random_reconnect + diff --git a/esphome/common/sntp_common.yaml b/esphome/common/sntp_common.yaml index af6c25b..eee7d96 100644 --- a/esphome/common/sntp_common.yaml +++ b/esphome/common/sntp_common.yaml @@ -1,104 +1,129 @@ -############################################################################################ -# SPECIFIC DEVICE VARIABLE SUBSTITUTIONS -# If NOT using a secrets file, just replace -# these with the values (in quotes) -########################################################################################### +#:########################################################################################:# +# TITLE: COMMON SNTP TIME SOURCE +# zorruno.com common ESPHome include +#:########################################################################################:# +# FILE: +# common/sntp_common.yaml +#:########################################################################################:# +# VERSIONS: +# V1.1 2026-05-23 Fixed offline fallback clock so it increments from assumed noon boot time +# V1.0 Initial common SNTP time source and diagnostic sensors +#:########################################################################################:# +# PURPOSE: +# - Provides an SNTP time source for ESPHome devices. +# - Stores the current time as minutes since midnight in current_mins. +# - Provides a simple fallback clock if SNTP is not available. +# - Publishes diagnostic text sensors for last restart, current/internal time, and sync status. +#:########################################################################################:# +# OPERATION NOTES: +# - SNTP time is stored in id(sntp_time). +# - Current minutes since midnight are stored in id(current_mins). +# - If SNTP is valid, current_mins follows the real SNTP time. +# - If SNTP is invalid, current_mins increments once per minute from the assumed boot time. +# - The fallback assumes the device was powered on at 12:00 noon. +# - If accurate offline time is needed, power-cycle the device at 12:00 noon. +#:########################################################################################:# + +#:########################################################################################:# +# SUBSTITUTIONS: Specific SNTP variable substitutions +# If NOT using a secrets file, replace these values directly in quotes. +#:########################################################################################:# substitutions: timezone: "Pacific/Auckland" - sntp_update_interval: 6h # Set the duration between the sntp service polling - # Network time servers https://www.ntppool.org/zone/@ + sntp_update_interval: 6h + + # Network time servers + # https://www.ntppool.org/zone/@ sntp_server_1: !secret ntp_server_1 sntp_server_2: !secret ntp_server_2 sntp_server_3: !secret ntp_server_3 -########################################################################################### -# Internal clock fallback support -# If SNTP is invalid, we fall back to a simple internal minute counter -# We assume user powers on the device at 12:00 noon -# => 12 * 60 = 720 minutes from midnight. -# Not restored, so it resets each boot. -# Therefore, if no network and you still need timing functions, switch on ay noon. -########################################################################################### +#:########################################################################################:# +# GLOBALS: Internal clock fallback support +#:########################################################################################:# globals: - id: current_mins type: int - restore_value: no - initial_value: "720" # 720 is 12:00 Noon + restore_value: false + initial_value: "720" # 720 minutes from midnight is 12:00 noon. +#:########################################################################################:# +# INTERVAL: Keep current_mins updated +#:########################################################################################:# interval: - interval: 60s then: - lambda: |- - // If SNTP valid, store minutes since midnight. + // If SNTP is valid, store real minutes since midnight. auto now = id(sntp_time).now(); if (now.is_valid()) { id(current_mins) = (now.hour * 60) + now.minute; } else { - // Fallback: minutes since boot. - id(current_mins) = (int)(millis() / 60000UL); + // Fallback: increment from the assumed startup time. + // Initial value is 720, so offline boot assumes 12:00 noon. + id(current_mins) = (id(current_mins) + 1) % 1440; } -########################################################################################### -# Real time clock time source for ESPHome -# If it's invalid, we fall back to an internal clock +#:########################################################################################:# +# TIME: Real time clock source for ESPHome # https://esphome.io/components/time/index.html # https://esphome.io/components/time/sntp -########################################################################################### +#:########################################################################################:# time: - platform: sntp id: sntp_time - # Define the timezone of the device timezone: "${timezone}" - # Change sync interval from default 5min to 6 hours (or as set in substitutions) update_interval: ${sntp_update_interval} - # Set specific sntp servers to use servers: - "${sntp_server_1}" - "${sntp_server_2}" - "${sntp_server_3}" - # Publish the time the device was last restarted on_time_sync: then: - logger.log: "Synchronised SNTP clock" + - text_sensor.template.publish: id: time_sync - state: "SNTP clock Syncd" - # Update last restart time, but only once. + state: "SNTP clock synced" + + # Update last restart time once only, after the first successful SNTP sync. - if: condition: - lambda: 'return id(device_last_restart).state == "";' + lambda: |- + return id(device_last_restart).state.empty(); then: - text_sensor.template.publish: id: device_last_restart - #state: !lambda 'return id(sntp_time).now().strftime("%a %d %b %Y - %I:%M:%S %p");' state: !lambda |- - // grab the current SNTP time auto now = id(sntp_time).now(); - // format it as e.g. "Fri 23 May 2025 - 03:45:12 PM" return now.strftime("%a %d %b %Y - %I:%M:%S %p"); +#:########################################################################################:# +# TEXT SENSOR COMPONENT: +# https://esphome.io/components/text_sensor/ +#:########################################################################################:# text_sensor: - # Creates a sensor showing when the device was last restarted + # Shows when the device was last restarted, based on the first successful SNTP sync. - platform: template name: "Time: Last Restart" id: device_last_restart icon: mdi:clock entity_category: diagnostic - #device_class: timestamp + update_interval: never + # Shows the current SNTP time if valid, otherwise the internal fallback time. - platform: template name: "Time: Internal Time" id: time_text - update_interval: "1min" + icon: mdi:clock-outline + update_interval: 1min entity_category: diagnostic lambda: |- - // If SNTP time is valid, show real time/date. if (id(sntp_time).now().is_valid()) { auto t = id(sntp_time).now().strftime("%H:%M:%S - %d-%m-%Y"); return { t }; } - // Fallback: show internal clock based on current_mins (minutes from midnight). int mins = id(current_mins); if (mins < 0) mins = 0; if (mins >= 1440) mins = mins % 1440; @@ -110,8 +135,16 @@ text_sensor: snprintf(buff, sizeof(buff), "%02d:%02d (fallback)", hour, minute); return { std::string(buff) }; + # Shows whether the device is using SNTP or the fallback clock. - platform: template name: "Time: Sync Status" id: time_sync - update_interval: "1min" + icon: mdi:clock-check-outline + update_interval: 1min entity_category: diagnostic + lambda: |- + if (id(sntp_time).now().is_valid()) { + return { std::string("SNTP clock synced") }; + } + + return { std::string("Using fallback internal clock") }; \ No newline at end of file diff --git a/esphome/esp-ledmatrix1.yaml b/esphome/esp-ledmatrix1.yaml new file mode 100644 index 0000000..2ffbcff --- /dev/null +++ b/esphome/esp-ledmatrix1.yaml @@ -0,0 +1,818 @@ +#:########################################################################################:# +# TITLE: LED MATRIX 1 +# zorruno.com layout v1.1 2026 +# ESP32-C3 SuperMini MAX7219 LED matrix clock and scroll display. +# Original Project Reference https://github.com/RealDeco/matrixclock-esphome +#:########################################################################################:# +# REPO: +# https://home.fox.co.nz/gitea/zorruno/zorruno-homeassistant/src/branch/master/esphome/esp-ledmatrix1.yaml +#:########################################################################################:# +# VERSIONS: +# V1.1 2026-05-23 Updated yaml to zorruno layout V1.1, cleaned comments, fixed SNTP time IDs, +# added current_mins fallback display, removed unused MQTT topic, and fixed +# blank scroll handling. +# V1.0 2026-05-23 Initial Version +#:########################################################################################:# +# HARDWARE: +# - ESP32-C3 SuperMini. +# - MAX7219 4-chip LED matrix display, typically 32 x 8 pixels. +# - SPI wiring configured below: +# - MOSI: GPIO8 +# - CS: GPIO9 +# - SCK: GPIO10 +# - Power note: 4 MAX7219 modules may need a suitable external 5 V supply. +# - Keep ESP32-C3 GND and matrix power supply GND connected together. +#:########################################################################################:# +# FONTS: +# Dragon Font: https://www.freebestfonts.com/eight-bit-dragon-font +# 5x8 Font: https://developer.lasec.com.mx/armando/rpi-rgb-led-matrix/-/blob/master/fonts/5x8.bdf +#:########################################################################################:# +# OPERATION NOTES: +# - Displays the current time from common/sntp_common.yaml using id(sntp_time). +# - If SNTP is invalid, the display falls back to id(current_mins) from common/sntp_common.yaml. +# - 12h/24h display mode is selectable from Home Assistant or MQTT. +# - Display brightness is exposed as a Home Assistant light entity. +# - Brightness accepts values 0..15 where 0 turns the display off and 1..15 sets intensity. +# - Scroll Text is exposed as a Home Assistant text entity and clears itself after use. +# - Before any scroll starts, the clock slides down and off the display. +# - After scroll ends, the selected re-entry effect runs: Slide up, Slide down, or Pixel fall. +# - Pixel fall hides the clock until the effect finishes, avoiding a clock-under-particles look. +# - Scroll speed is adjustable using the Scroll Delay number entity. +#:########################################################################################:# +# MQTT COMMANDS: +# - ${mqtt_command_topic}/scroll : Text payload to scroll once across the display. +# - ${mqtt_command_topic}/mode : Payload 12 or 24 to select clock format. +# - ${mqtt_command_topic}/bright : Payload 0 turns display off, 1-15 sets brightness. +# - ${mqtt_status_topic}/status : Publishes online/offline status. +#:########################################################################################:# +# OFFLINE NOTES: +# a) Home Assistant offline, but WiFi/network and MQTT online: +# - Clock display should continue using SNTP if the NTP servers are reachable. +# - MQTT scroll, brightness, and 12h/24h mode commands should still work. +# +# b) MQTT offline, but WiFi/network and Home Assistant API online: +# - Home Assistant text, light, number, and select entities should still work. +# - Clock display should continue using SNTP if the NTP servers are reachable. +# +# c) Entire WiFi/network offline: +# - SNTP will not be available after boot. +# - Clock display will use the current_mins fallback from common/sntp_common.yaml. +# - Accurate time is needed for the clock, so fallback time will drift. +# - For a rough reset, power-cycle the device at 12:00 noon. +# - Home Assistant and MQTT controls will not be available while offline. +#:########################################################################################:# + +#:########################################################################################:# +# SUBSTITUTIONS: Specific device variable substitutions +# If NOT using a secrets file, just replace these with the passwords etc in quotes. +#:########################################################################################:# +substitutions: + # Device Naming + device_name: "esp-ledmatrix1" + friendly_name: "LED Matrix Display" + description_comment: "LED Matrix Display (Layout V1.1)" + device_area: "Lounge" # Allows ESP device to be automatically linked to an Area in Home Assistant. + + # Project Naming + project_name: "Generic.ESP32 Supermini" + project_version: "v1.1" + + # Passwords & Secrets + api_key: !secret esp-api_key + ota_pass: !secret esp-ota_pass + static_ip_address: !secret esp-ledmatrix1_ip # Substitutions cannot be used inside secret names. + mqtt_command_main_topic: !secret mqtt_command_main_topic + mqtt_status_main_topic: !secret mqtt_status_main_topic + + # If changing IP addresses, update current_ip_address here, otherwise it remains static_ip_address. + # Do not forget to switch it back when the address change is complete. + current_ip_address: ${static_ip_address} + + # MQTT LOCAL Controls + mqtt_device_name: "ledmatrix1" + mqtt_command_topic: "${mqtt_command_main_topic}/${mqtt_device_name}" + mqtt_status_topic: "${mqtt_status_main_topic}/${mqtt_device_name}" + + # Device Settings + log_level: "INFO" # NONE, ERROR, WARN, INFO, DEBUG, VERBOSE, VERY_VERBOSE + update_interval: "60s" + + # Matrix Display Settings + pin_mosi: GPIO8 + pin_cs: GPIO9 + pin_sck: GPIO10 + num_chips: "4" + scroll_delay_ms: "15" # ms between scroll steps + y_offset: "0" + y_scroll_offset: "0" + +#:########################################################################################:# +# PACKAGES: Included Common Packages +# https://esphome.io/components/packages.html +#:########################################################################################:# +packages: + #### WIFI, Network (Static/DHCP/IPV6 etc), Fallback AP, Safemode #### + common_wifi: !include + file: common/network_common.yaml + vars: + local_device_name: "${device_name}" + local_static_ip_address: "${static_ip_address}" + local_ota_pass: "${ota_pass}" + local_current_ip_address: "${current_ip_address}" + + #### HOME ASSISTANT API (choose encryption or no encryption options) #### + common_api: !include + file: common/api_common.yaml + #file: common/api_common_noencryption.yaml + vars: + local_api_key: "${api_key}" + + #### MQTT #### + common_mqtt: !include + file: common/mqtt_common.yaml + vars: + local_device_name: "${device_name}" + + #### WEB PORTAL #### + common_webportal: !include common/webportal_common.yaml + + #### SNTP (Needed for the clock display) #### + common_sntp: !include common/sntp_common.yaml + + #### DIAGNOSTICS Sensors #### + diag_basic: !include common/include_basic_diag_sensors.yaml + #diag_more: !include common/include_more_diag_sensors.yaml + #diag_debug: !include common/include_debug_diag_sensors.yaml + #diag_resetcount: !include common/include_resetcount_diag_sensors.yaml + +#:########################################################################################:# +# ESPHOME: +# https://esphome.io/components/esphome.html +#:########################################################################################:# +esphome: + name: "${device_name}" + friendly_name: "${friendly_name}" + comment: "${description_comment}" # Appears on the ESPHome page in Home Assistant. + area: "${device_area}" + project: + name: "${project_name}" + version: "${project_version}" + on_boot: + priority: 600 + then: + # Ensure Home Assistant shows the text box as empty rather than unknown. + - delay: 500ms + - lambda: |- + id(ha_scroll_text).publish_state(""); + - component.update: matrix + +#:########################################################################################:# +# ESP PLATFORM AND FRAMEWORK: +# https://esphome.io/components/esp32/ +#:########################################################################################:# +esp32: + variant: esp32c3 + framework: + type: esp-idf + version: recommended + +#:########################################################################################:# +# LOGGER: ESPHome Logging Enable +# https://esphome.io/components/logger.html +#:########################################################################################:# +logger: + level: "${log_level}" # INFO suggested, or DEBUG for testing. + #baud_rate: 0 # Set to 0 for no UART logging if UART is used for another device. + #esp8266_store_log_strings_in_flash: false + #tx_buffer_size: 64 + +#:########################################################################################:# +# GLOBALS: +# https://esphome.io/components/globals.html +#:########################################################################################:# +globals: + # Text currently being scrolled across the matrix. + - id: scroll_text + type: std::string + initial_value: "" + + # Current X position of the scrolling text. + - id: scroll_x + type: int + initial_value: '0' + + # True while a scroll message is active. + - id: scrolling + type: bool + initial_value: 'false' + + # False = 24h mode, true = 12h mode. + - id: use_12h_mode + type: bool + restore_value: true + initial_value: 'false' + + # Runtime scroll delay, controlled by the Scroll Delay number entity. + - id: scroll_delay_runtime + type: int + restore_value: true + initial_value: '${scroll_delay_ms}' + + # MAX7219 intensity: 0=OFF, 1..15=ON. Driven by the HA light entity. + - id: matrix_intensity + type: int + restore_value: false + initial_value: '2' + + # Brightness sync loop protection for HA light <-> MQTT brightness updates. + - id: suppress_mqtt_bright_sync + type: bool + restore_value: false + initial_value: 'false' + + - id: target_mqtt_bright + type: int + restore_value: false + initial_value: '-1' + + - id: last_mqtt_bright + type: int + restore_value: false + initial_value: '-1' + + # Re-entry effect after scrolling: 0=Slide up, 1=Slide down, 2=Pixel fall. + - id: transition_mode + type: int + restore_value: true + initial_value: '0' + + # Slide transition state. + - id: transition_active + type: bool + restore_value: false + initial_value: 'false' + + - id: transition_y + type: int + restore_value: false + initial_value: '0' + + # Pixel-fall transition state. + - id: pixel_fall_active + type: bool + restore_value: false + initial_value: 'false' + + - id: pixel_fall_gen + type: int + restore_value: false + initial_value: '0' + +#:########################################################################################:# +# FONT COMPONENT: +# https://esphome.io/components/font/ +#:########################################################################################:# +font: + # Clock digits. Keep glyphs limited to reduce firmware size. + - file: "fonts/Eight-Bit-Dragon.ttf" + id: digit5 + size: 8 + glyphs: ["0123456789: -"] + + # General 5x8 font for scroll text. + - file: "fonts/5x8.bdf" + id: font5x8 + size: 8 + +#:########################################################################################:# +# SPI COMPONENT: +# https://esphome.io/components/spi.html +#:########################################################################################:# +spi: + clk_pin: ${pin_sck} + mosi_pin: ${pin_mosi} + +#:########################################################################################:# +# MQTT: Device-specific MQTT command triggers +# This adds device-specific MQTT command triggers to the common MQTT configuration. +#:########################################################################################:# +mqtt: + discovery: false + birth_message: + topic: "${mqtt_status_topic}/status" + payload: "online" + qos: 0 + retain: true + will_message: + topic: "${mqtt_status_topic}/status" + payload: "offline" + qos: 0 + retain: true + on_message: + # Scroll a text payload once across the matrix. + - topic: "${mqtt_command_topic}/scroll" + then: + - lambda: |- + std::string s = x.c_str(); + s.erase(std::remove(s.begin(), s.end(), '\r'), s.end()); + s.erase(std::remove(s.begin(), s.end(), '\n'), s.end()); + s.erase(std::remove_if(s.begin(), s.end(), + [](unsigned char c){ return c < 0x20; }), s.end()); + + // Ignore empty MQTT scroll commands completely. + if (s.empty()) return; + + id(scroll_text) = s; + id(scroll_x) = ${num_chips} * 8; + id(start_scroll_sequence).execute(); + + # Set 12h or 24h clock mode from MQTT. + - topic: "${mqtt_command_topic}/mode" + then: + - lambda: |- + if (x == "12") { + id(use_12h_mode) = true; + } else if (x == "24") { + id(use_12h_mode) = false; + } + - component.update: clock_format_select + - component.update: matrix + + # Brightness from MQTT. 0=OFF, 1..15=ON brightness level. + - topic: "${mqtt_command_topic}/bright" + then: + - lambda: |- + std::string s = x.c_str(); + s.erase(std::remove_if(s.begin(), s.end(), + [](unsigned char c){ return c < 0x20 || c == 0x7F; }), s.end()); + s.erase(s.begin(), std::find_if(s.begin(), s.end(), + [](unsigned char ch){ return !std::isspace(ch); })); + s.erase(std::find_if(s.rbegin(), s.rend(), + [](unsigned char ch){ return !std::isspace(ch); }).base(), s.end()); + + if (s.empty() || !std::all_of(s.begin(), s.end(), + [](unsigned char c){ return std::isdigit(c); })) return; + + int v = atoi(s.c_str()); + if (v < 0) v = 0; + if (v > 15) v = 15; + + id(suppress_mqtt_bright_sync) = true; + + if (v == 0) { + id(matrix_light).turn_off().perform(); + } else { + auto call = id(matrix_light).turn_on(); + call.set_brightness((float) v / 15.0f); + call.perform(); + } + + id(last_mqtt_bright) = v; + id(suppress_mqtt_bright_sync) = false; + +#:########################################################################################:# +# TEXT COMPONENT: +# https://esphome.io/components/text/template/ +#:########################################################################################:# +text: + - platform: template + id: ha_scroll_text + name: "${friendly_name} Scroll Text" + icon: "mdi:message-text-outline" + mode: text + max_length: 80 + optimistic: false + set_action: + - lambda: |- + std::string s = x.c_str(); + + s.erase(std::remove(s.begin(), s.end(), '\r'), s.end()); + s.erase(std::remove(s.begin(), s.end(), '\n'), s.end()); + s.erase(std::remove_if(s.begin(), s.end(), + [](unsigned char c){ return c < 0x20; }), s.end()); + + // Publish the cleaned text so the HA UI updates immediately. + id(ha_scroll_text).publish_state(s.c_str()); + + // Empty text only clears the entity. It should not start a scroll. + if (s.empty()) return; + + id(scroll_text) = s; + id(scroll_x) = ${num_chips} * 8; + id(start_scroll_sequence).execute(); + id(clear_scroll_text_box).execute(); + +#:########################################################################################:# +# NUMBER COMPONENT: +# https://esphome.io/components/number/template/ +#:########################################################################################:# +number: + - platform: template + id: scroll_delay_number + name: "${friendly_name} Scroll Delay" + icon: "mdi:timer-outline" + unit_of_measurement: "ms" + min_value: 1 + max_value: 100 + step: 1 + restore_value: true + initial_value: ${scroll_delay_ms} + optimistic: true + set_action: + - lambda: |- + id(scroll_delay_runtime) = (int) x; + +#:########################################################################################:# +# OUTPUT COMPONENT: +# https://esphome.io/components/output/ +#:########################################################################################:# +output: + # Template output lets the HA light slider control MAX7219 intensity. + - platform: template + id: matrix_brightness_out + type: float + write_action: + - lambda: |- + int pub = 0; + + if (state <= 0.001f) { + id(matrix_intensity) = 0; + id(matrix).turn_on_off(false); + pub = 0; + } else { + int v = (int) lroundf(state * 15.0f); + if (v < 1) v = 1; + if (v > 15) v = 15; + + id(matrix_intensity) = v; + id(matrix).turn_on_off(true); + pub = v; + } + + id(target_mqtt_bright) = pub; + + - component.update: matrix + + # Publish brightness back to MQTT unless this update came from MQTT. + - if: + condition: + lambda: |- + return !id(suppress_mqtt_bright_sync) + && (id(target_mqtt_bright) != id(last_mqtt_bright)); + then: + - mqtt.publish: + topic: "${mqtt_command_topic}/bright" + payload: !lambda |- + char buf[6]; + snprintf(buf, sizeof(buf), "%d", id(target_mqtt_bright)); + return std::string(buf); + qos: 0 + retain: true + - lambda: |- + id(last_mqtt_bright) = id(target_mqtt_bright); + +#:########################################################################################:# +# LIGHT COMPONENT: +# https://esphome.io/components/light/monochromatic/ +#:########################################################################################:# +light: + - platform: monochromatic + id: matrix_light + name: "${friendly_name} Display" + icon: "mdi:brightness-6" + output: matrix_brightness_out + gamma_correct: 1.0 + default_transition_length: 0s + restore_mode: RESTORE_DEFAULT_ON + +#:########################################################################################:# +# SELECT COMPONENT: +# https://esphome.io/components/select/template/ +#:########################################################################################:# +select: + - platform: template + id: clock_format_select + name: "${friendly_name} Clock Format" + icon: "mdi:clock-time-three-outline" + options: + - "24" + - "12" + lambda: |- + return esphome::optional(std::string(id(use_12h_mode) ? "12" : "24")); + set_action: + - lambda: |- + id(use_12h_mode) = (x == "12"); + - component.update: clock_format_select + - component.update: matrix + + - platform: template + id: transition_select + name: "${friendly_name} Transition Effect" + icon: "mdi:transition" + options: + - "Slide up" + - "Slide down" + - "Pixel fall" + lambda: |- + if (id(transition_mode) == 2) return std::string("Pixel fall"); + if (id(transition_mode) == 1) return std::string("Slide down"); + return std::string("Slide up"); + set_action: + - lambda: |- + if (x == "Pixel fall") id(transition_mode) = 2; + else if (x == "Slide down") id(transition_mode) = 1; + else id(transition_mode) = 0; + - component.update: transition_select + +#:########################################################################################:# +# SCRIPT COMPONENT: +# https://esphome.io/components/script.html +#:########################################################################################:# +script: + # Clear the HA text box shortly after a scroll request has been accepted. + - id: clear_scroll_text_box + mode: restart + then: + - delay: 400ms + - lambda: |- + id(ha_scroll_text).publish_state(""); + + # Sequence: exit slide-down -> scroll -> selected re-entry. + - id: start_scroll_sequence + mode: restart + then: + - lambda: |- + id(scrolling) = false; + id(pixel_fall_active) = false; + - component.update: matrix + - script.execute: clock_exit_down + - script.wait: clock_exit_down + - lambda: |- + id(scrolling) = true; + - script.execute: do_scroll + + # Scroll the stored text until it has moved fully off the left side. + - id: do_scroll + mode: restart + then: + - while: + condition: + lambda: |- + return id(scrolling); + then: + - lambda: |- + id(scroll_x) -= 1; + const int end_limit = - (int(id(scroll_text).length()) * 6); + if (id(scroll_x) < end_limit) { + id(scrolling) = false; + + if (id(transition_mode) == 1) { + id(clock_slide_down_entry).execute(); + } else if (id(transition_mode) == 2) { + id(clock_pixel_fall_transition).execute(); + } else { + id(clock_slide_up_entry).execute(); + } + } + - component.update: matrix + - delay: !lambda |- + return (uint32_t) id(scroll_delay_runtime); + + # Exit: slide clock down off-screen and hold it there to prevent a one-frame flash. + - id: clock_exit_down + mode: restart + then: + - lambda: |- + id(transition_active) = true; + id(transition_y) = ${y_offset}; + - repeat: + count: 9 + then: + - lambda: |- + id(transition_y) += 1; + - component.update: matrix + - delay: 45ms + - lambda: |- + id(transition_active) = true; + id(transition_y) = 8; + - component.update: matrix + + # Re-entry: clock slides down into place from above. + - id: clock_slide_down_entry + mode: restart + then: + - lambda: |- + id(transition_active) = true; + id(transition_y) = -8; + - repeat: + count: 9 + then: + - lambda: |- + id(transition_y) += 1; + - component.update: matrix + - delay: 60ms + - lambda: |- + id(transition_active) = false; + id(transition_y) = ${y_offset}; + - component.update: matrix + + # Re-entry: clock slides up into place from below. + - id: clock_slide_up_entry + mode: restart + then: + - lambda: |- + id(transition_active) = true; + id(transition_y) = 8; + - repeat: + count: 9 + then: + - lambda: |- + id(transition_y) -= 1; + - component.update: matrix + - delay: 60ms + - lambda: |- + id(transition_active) = false; + id(transition_y) = ${y_offset}; + - component.update: matrix + + # Re-entry: falling pixels effect before the clock redraws. + - id: clock_pixel_fall_transition + mode: restart + then: + - lambda: |- + id(transition_active) = false; + id(transition_y) = ${y_offset}; + id(pixel_fall_active) = true; + id(pixel_fall_gen) += 1; + - repeat: + count: 18 + then: + - component.update: matrix + - delay: 55ms + - lambda: |- + id(pixel_fall_active) = false; + id(transition_active) = false; + id(transition_y) = ${y_offset}; + - component.update: matrix + +#:########################################################################################:# +# DISPLAY COMPONENT: +# https://esphome.io/components/display/max7219digit/ +#:########################################################################################:# +display: + - platform: max7219digit + id: matrix + cs_pin: ${pin_cs} + num_chips: ${num_chips} + intensity: 2 + update_interval: 500ms + rotate_chip: 0 + reverse_enable: false + flip_x: false + + lambda: |- + // Apply brightness only when it changes to reduce flicker. + static int last_brightness = -1; + if (id(matrix_intensity) != last_brightness) { + if (id(matrix_intensity) > 0) { + int v = id(matrix_intensity); + if (v > 15) v = 15; + it.intensity((uint8_t) v); + } + last_brightness = id(matrix_intensity); + } + + if (id(matrix_intensity) == 0) return; + + it.clear(); + + // Scroll text has priority over clock display. + if (id(scrolling)) { + it.print(id(scroll_x), ${y_scroll_offset}, id(font5x8), id(scroll_text).c_str()); + return; + } + + // Pixel fall shows only particles while active. + if (id(pixel_fall_active)) { + static int last_gen = -1; + static int px[24]; + static int py[24]; + static uint32_t rng = 1; + + auto rand_u32 = [&]() -> uint32_t { + rng = rng * 1664525u + 1013904223u; + return rng; + }; + + if (last_gen != id(pixel_fall_gen)) { + last_gen = id(pixel_fall_gen); + rng = 0xA5A5A5A5u ^ (uint32_t) id(pixel_fall_gen); + for (int i = 0; i < 24; i++) { + px[i] = (int)(rand_u32() % 32); + py[i] = - (int)(rand_u32() % 16); + } + } + + for (int i = 0; i < 24; i++) { + int spd = 1 + (int)(rand_u32() % 2); + py[i] += spd; + + if (py[i] > 10) { + px[i] = (int)(rand_u32() % 32); + py[i] = - (int)(rand_u32() % 10); + } + + for (int t = 0; t < 2; t++) { + int yy = py[i] - t; + int xx = px[i]; + if (xx >= 0 && xx <= 31 && yy >= 0 && yy <= 7) { + it.draw_pixel_at(xx, yy, Color::WHITE); + } + } + } + return; + } + + // Prefer real SNTP time. Fall back to current_mins from common/sntp_common.yaml. + auto now = id(sntp_time).now(); + bool time_valid = now.is_valid(); + + int raw_hour = 0; + int minute_to_show = 0; + int second_to_show = 0; + + if (time_valid) { + raw_hour = now.hour; + minute_to_show = now.minute; + second_to_show = now.second; + } else { + int mins = id(current_mins); + if (mins < 0) mins = 0; + if (mins >= 1440) mins = mins % 1440; + + raw_hour = mins / 60; + minute_to_show = mins % 60; + second_to_show = 0; + } + + int hour_to_show = raw_hour; + if (id(use_12h_mode)) { + hour_to_show = raw_hour % 12; + if (hour_to_show == 0) hour_to_show = 12; + } + + char hh[3], mm[3]; + snprintf(hh, sizeof(hh), "%02d", hour_to_show); + snprintf(mm, sizeof(mm), "%02d", minute_to_show); + + const int x_h1 = 3; + const int x_h2 = 9; + const int x_m1 = 17; + const int x_m2 = 23; + + const int y = (id(transition_active) ? id(transition_y) : ${y_offset}); + + char ch[2] = { hh[0], 0 }; + it.print(x_h1, y, id(digit5), ch); + ch[0] = hh[1]; + it.print(x_h2, y, id(digit5), ch); + + ch[0] = mm[0]; + it.print(x_m1, y, id(digit5), ch); + ch[0] = mm[1]; + it.print(x_m2, y, id(digit5), ch); + + // In 12h mode, draw a tiny A or P indicator at the far right. + if (id(use_12h_mode)) { + const bool is_pm = raw_hour >= 12; + + const uint8_t A_rows[4] = { 2, 5, 7, 5 }; + const uint8_t P_rows[4] = { 6, 5, 6, 4 }; + const uint8_t *L = is_pm ? P_rows : A_rows; + + const int x_ampm = 29; + const int y_ampm = y + 4; + + for (int r = 0; r < 4; r++) { + uint8_t row = L[r]; + for (int c = 0; c < 3; c++) { + if (row & (1 << (2 - c))) { + int xx = x_ampm + c; + int yy = y_ampm + r; + if (yy >= 0 && yy <= 7 && xx >= 0 && xx <= 31) { + it.draw_pixel_at(xx, yy, Color::WHITE); + } + } + } + } + } + + // Blink the colon when SNTP is valid. Keep it solid during fallback time. + const bool colon_on = time_valid ? ((second_to_show % 2) == 0) : true; + if (colon_on) { + const int x_col = (x_h2 + x_m1) / 2 + 2; + int y1 = y + 2; + int y2 = y + 5; + if (y1 >= 0 && y1 <= 7) it.draw_pixel_at(x_col, y1, Color::WHITE); + if (y2 >= 0 && y2 <= 7) it.draw_pixel_at(x_col, y2, Color::WHITE); + } diff --git a/esphome/esp-loungemiddleswitch.yaml b/esphome/esp-loungemiddleswitch.yaml.old similarity index 100% rename from esphome/esp-loungemiddleswitch.yaml rename to esphome/esp-loungemiddleswitch.yaml.old diff --git a/esphome/esp-nspanel1masterbdrm.yaml b/esphome/esp-nspanel1masterbdrm.yaml new file mode 100644 index 0000000..ca07bbd --- /dev/null +++ b/esphome/esp-nspanel1masterbdrm.yaml @@ -0,0 +1,154 @@ +#:########################################################################################:# +# TITLE: MASTER BEDROOM NSPANEL 1 +# zorruno.com layout v1.1 2026 +#:########################################################################################:# +# REPO: +# +#:########################################################################################:# +# VERSIONS: +# V1.0 2026-05-16 Initial version +#:########################################################################################:# +# HARDWARE: +# - Sonoff NS Panel +#:########################################################################################:# +# OPERATION NOTES: +# - +#:########################################################################################:# +# OFFLINE NOTES: +# +#:########################################################################################:# + +#:########################################################################################:# +# SUBSTITUTIONS: Specific device variable substitutions +# If NOT using a secrets file, just replace these with the passwords etc (in quotes) +#:########################################################################################:# +substitutions: + # Device Naming + device_name: "esp-nspanel1masterbdrm" + friendly_name: "Master Bedroom NSPanel Touchscreen" + description_comment: "Master Bedroom NSPanel Touchscreen" + device_area: "Master Bedroom" # Allows ESP device to be automatically linked to an 'Area' in Home Assistant. + + # Removed as the remote package will pull this in correctly for the blueprint + # Project Naming + #project_name: "Lounge NSPanel Touchscreen.Sonoff NS Panel" + #project_version: "v1.0" + + # Passwords & Secrets (unfortunately you can't use substitutions inside secrets names) + api_key: !secret esp-api_key + ota_pass: !secret esp-ota_pass + ota_password: "${ota_pass}" #this is for NSPanel Only as a workaround + static_ip_address: !secret esp-nspanel1masterbdrm_ip + + # If we are changing IP addresses, you must update the current IP address here, otherwise it remains + # Don't forget to switch it back when changed. + current_ip_address: ${static_ip_address} + + # Device Settings + log_level: "INFO" # NONE, ERROR, WARN, INFO, DEBUG (Default), VERBOSE, VERY_VERBOSE + update_interval: "60s" # update time for general sensors etc + + ## NSPanel Specifics + upload_tft_automatically: true + boot_sound: false + +#:########################################################################################:# +# PACKAGES: Included Common Packages +# https://esphome.io/components/packages.html +#:########################################################################################:# +packages: + #### WIFI, Network (Static/DHCP/IPV6 etc), Fallback AP, Safemode #### + common_wifi: !include + file: common/network_common_esp32.yaml + vars: + local_device_name: "${device_name}" + local_static_ip_address: "${static_ip_address}" + local_ota_pass: "${ota_pass}" + local_current_ip_address: "${current_ip_address}" + + #### HOME ASSISTANT API (choose encryption or no encryption options) #### + #common_api: !include + # file: common/api_common.yaml + # #file: common/api_common_noencryption.yaml + # vars: + # local_api_key: "${api_key}" + + #### MQTT #### + #common_mqtt: !include + # file: common/mqtt_common.yaml + # vars: + # local_device_name: "${device_name}" + + #### WEB PORTAL #### + #common_webportal: !include common/webportal_common.yaml + + #### SNTP (Only use if you want/need accurate timeclocks) #### + #common_sntp: !include common/sntp_common.yaml + + #### DIAGNOSTICS Sensors #### + #diag_basic: !include common/include_basic_diag_sensors.yaml + #diag_more: !include common/include_more_diag_sensors.yaml + #diag_debug: !include common/include_debug_diag_sensors.yaml + #diag_resetcount: !include common/include_resetcount_diag_sensors.yaml + +# Core and optional configurations + remote_package: + url: https://github.com/edwardtfn/NSPanel-Easy + ref: v2026.5.5 + refresh: 300s + files: + - nspanel_esphome.yaml # Basic package + # Optional advanced and add-on configurations + # - esphome/nspanel_esphome_addon_climate_cool.yaml + # - esphome/nspanel_esphome_addon_climate_heat.yaml + # - esphome/nspanel_esphome_addon_climate_dual.yaml + # - esphome/nspanel_esphome_addon_cover.yaml + # - esphome/nspanel_esphome_addon_display_light.yaml # Show the display as a light in Home Assistant + +#:########################################################################################:# +# ESPHOME: +# https://esphome.io/components/esphome.html +#:########################################################################################:# +esphome: + name: "${device_name}" + friendly_name: "${friendly_name}" + comment: "${description_comment}" # appears on the esphome page in HA + area: "${device_area}" + min_version: 2024.6.0 + #project: + # name: "${project_name}" + # version: "${project_version}" + +#:########################################################################################:# +# ESP PLATFORM AND FRAMEWORK: +# https://esphome.io/components/esp32.html +#:########################################################################################:# +esp32: + board: esp32dev + framework: + type: esp-idf # Suggested ESP-IDF framework + version: recommended + advanced: + #minimum_chip_revision: "3.1" # This makes the binary slightly smaller + sram1_as_iram: true + +#:########################################################################################:# +# LOGGING: +# https://esphome.io/components/logger.html +#:########################################################################################:# +logger: + level: "${log_level}" + #baud_rate: 0 # set to 0 for no logging via UART if you want + +#:########################################################################################:# +# BLUETOOTH: +# https://esphome.io/components/bluetooth_proxy.html +# https://esphome.io/components/esp32_ble_tracker.html +#:########################################################################################:# +#bluetooth_proxy: +# active: true + +#esp32_ble_tracker: +# scan_parameters: +# # Defaults used so Bluetooth can co-exist with WiFi +# active: true \ No newline at end of file diff --git a/esphome/esp-nspanel2lounge.yaml b/esphome/esp-nspanel2lounge.yaml new file mode 100644 index 0000000..07d8799 --- /dev/null +++ b/esphome/esp-nspanel2lounge.yaml @@ -0,0 +1,316 @@ +#:########################################################################################:# +# TITLE: LOUNGE NSPANEL 2 +# zorruno.com layout v1.1 2026 +#:########################################################################################:# +# REPO: +# +#:########################################################################################:# +# VERSIONS: +# V1.0 2026-05-16 Initial version +#:########################################################################################:# +# HARDWARE: +# - Sonoff NS Panel +#:########################################################################################:# +# OPERATION NOTES: +# - +#:########################################################################################:# +# OFFLINE NOTES: +# +#:########################################################################################:# + +#:########################################################################################:# +# SUBSTITUTIONS: Specific device variable substitutions +# If NOT using a secrets file, just replace these with the passwords etc (in quotes) +#:########################################################################################:# +substitutions: + # Device Naming + device_name: "esp-nspanel2lounge" + friendly_name: "Lounge NSPanel Touchscreen" + description_comment: "D1 Mini ESP32 outside entranceway with BT Proxy (Layout V1.1)" + device_area: "Lounge" # Allows ESP device to be automatically linked to an 'Area' in Home Assistant. + + # Removed as the remote package will pull this in correctly for the blueprint + # Project Naming + #project_name: "Lounge NSPanel Touchscreen.Sonoff NS Panel" + #project_version: "v1.0" + + # Passwords & Secrets (unfortunately you can't use substitutions inside secrets names) + api_key: !secret esp-api_key + ota_pass: !secret esp-ota_pass + ota_password: "${ota_pass}" #this is for NSPanel Only as a workaround + static_ip_address: !secret esp-nspanel2lounge_ip + + # If we are changing IP addresses, you must update the current IP address here, otherwise it remains + # Don't forget to switch it back when changed. + current_ip_address: ${static_ip_address} + + # Device Settings + log_level: "INFO" # NONE, ERROR, WARN, INFO, DEBUG (Default), VERBOSE, VERY_VERBOSE + update_interval: "60s" # update time for general sensors etc + + ## NSPanel Specifics + upload_tft_automatically: true + boot_sound: false + +#:########################################################################################:# +# PACKAGES: Included Common Packages +# https://esphome.io/components/packages.html +#:########################################################################################:# +packages: + #### WIFI, Network (Static/DHCP/IPV6 etc), Fallback AP, Safemode #### + common_wifi: !include + file: common/network_common_esp32.yaml + vars: + local_device_name: "${device_name}" + local_static_ip_address: "${static_ip_address}" + local_ota_pass: "${ota_pass}" + local_current_ip_address: "${current_ip_address}" + + #### HOME ASSISTANT API (choose encryption or no encryption options) #### + #common_api: !include + # file: common/api_common.yaml + #file: common/api_common_noencryption.yaml + # vars: + # local_api_key: "${api_key}" + + #### MQTT #### + #common_mqtt: !include + # file: common/mqtt_common.yaml + # vars: + # local_device_name: "${device_name}" + + #### WEB PORTAL #### + #common_webportal: !include common/webportal_common.yaml + + #### SNTP (Only use if you want/need accurate timeclocks) #### + #common_sntp: !include common/sntp_common.yaml + + #### DIAGNOSTICS Sensors #### + #diag_basic: !include common/include_basic_diag_sensors.yaml + #diag_more: !include common/include_more_diag_sensors.yaml + #diag_debug: !include common/include_debug_diag_sensors.yaml + #diag_resetcount: !include common/include_resetcount_diag_sensors.yaml + +# Core and optional configurations + remote_package: + url: https://github.com/edwardtfn/NSPanel-Easy + ref: v2026.5.5 + refresh: 300s + files: + - nspanel_esphome.yaml # Basic package + # Optional advanced and add-on configurations + # - esphome/nspanel_esphome_addon_climate_cool.yaml + # - esphome/nspanel_esphome_addon_climate_heat.yaml + # - esphome/nspanel_esphome_addon_climate_dual.yaml + # - esphome/nspanel_esphome_addon_cover.yaml + # - esphome/nspanel_esphome_addon_display_light.yaml # Show the display as a light in Home Assistant + +#:########################################################################################:# +# ESPHOME: +# https://esphome.io/components/esphome.html +#:########################################################################################:# +esphome: + name: "${device_name}" + friendly_name: "${friendly_name}" + comment: "${description_comment}" # appears on the esphome page in HA + area: "${device_area}" + min_version: 2024.6.0 + #project: + # name: "${project_name}" + # version: "${project_version}" + +#:########################################################################################:# +# ESP PLATFORM AND FRAMEWORK: +# https://esphome.io/components/esp32.html +#:########################################################################################:# +esp32: + board: esp32dev + framework: + type: esp-idf # Suggested ESP-IDF framework + version: recommended + advanced: + minimum_chip_revision: "3.1" # This makes the binary slightly smaller + sram1_as_iram: true + + +#uart: +# id: tf_uart +# tx_pin: GPIO16 +# rx_pin: GPIO17 +# baud_rate: 115200 + + +#:########################################################################################:# +# LOGGING: +# https://esphome.io/components/logger.html +#:########################################################################################:# +logger: + level: "${log_level}" + #baud_rate: 0 # set to 0 for no logging via UART if you want + +#:########################################################################################:# +# HOME ASSISTANT STATE IMPORT: +# Import the last remembered lounge scene from Home Assistant. +#:########################################################################################:# +text_sensor: + - platform: homeassistant + id: lounge_last_scene + entity_id: input_text.lounge_last_scene + internal: true + +#:########################################################################################:# +# NSPANEL BUTTON / RELAY LABELS: +# Extend existing NSPanel Easy entities rather than redefining GPIOs. +#:########################################################################################:# +binary_sensor: + - id: !extend right_button + name: "Lounge Stair Downlights Button" + +switch: + - id: !extend relay_2 + name: "Lounge Stair Downlights" + + - platform: template + id: nspanel_ha_loss_test + name: "HA Loss Test" + optimistic: true + restore_mode: RESTORE_DEFAULT_OFF + +#:########################################################################################:# +# NSPANEL HARDWARE BUTTON LOCAL / HA ACTIONS: +# +# Behaviour: +# - HA connected and HA Loss Test OFF: +# - Left button toggles lounge scene between Bright and All Off +# - Left relay is forced ON +# - Right button toggles Relay 2 / Lounge Stair Downlights +# +# - HA disconnected OR HA Loss Test ON: +# - Left button toggles Relay 1 +# - Right button toggles Relay 2 / Lounge Stair Downlights +# +# Notes: +# - Uses NSPanel Easy script IDs and relay IDs. +# - Avoid enabling Relay 1 local mode in the NSPanel blueprint, otherwise the package +# may toggle Relay 1 before this custom logic can handle the press. +#:########################################################################################:# +script: + - id: nspanel_lounge_force_left_relay_on_when_ha_connected + mode: restart + then: + - if: + condition: + lambda: |- + const bool actual_ha_online = + wifi_component->is_connected() && + api_server->is_connected_with_state_subscription(); + + const bool effective_ha_online = + actual_ha_online && !id(nspanel_ha_loss_test).state; + + return effective_ha_online; + then: + - switch.turn_on: relay_1 + + - id: nspanel_lounge_left_button_action + mode: restart + then: + - if: + condition: + lambda: |- + const bool actual_ha_online = + wifi_component->is_connected() && + api_server->is_connected_with_state_subscription(); + + const bool effective_ha_online = + actual_ha_online && !id(nspanel_ha_loss_test).state; + + return effective_ha_online; + then: + - script.execute: nspanel_lounge_force_left_relay_on_when_ha_connected + + - if: + condition: + lambda: |- + return id(lounge_last_scene).has_state() && + id(lounge_last_scene).state != "All Off"; + then: + - homeassistant.action: + action: script.lounge_set_scene + data: + scene_name: "All Off" + else: + - homeassistant.action: + action: script.lounge_set_scene + data: + scene_name: "Bright" + + else: + - lambda: |- + const bool actual_ha_online = + wifi_component->is_connected() && + api_server->is_connected_with_state_subscription(); + + // If NSPanel Easy relay local mode already handled the press, do not double toggle. + if (id(hardware_settings).relay1_local) { + return; + } + + // If this is a real HA/API outage and NSPanel Easy fallback already handled it, + // do not double toggle. HA Loss Test still toggles here because HA is actually online. + if (id(hardware_settings).relay1_fallback && !actual_ha_online) { + return; + } + + relay_1->toggle(); + + - id: nspanel_lounge_right_button_action + mode: restart + then: + - lambda: |- + const bool actual_ha_online = + wifi_component->is_connected() && + api_server->is_connected_with_state_subscription(); + + // If NSPanel Easy relay local mode already handled the press, do not double toggle. + if (id(hardware_settings).relay2_local) { + return; + } + + // If this is a real HA/API outage and NSPanel Easy fallback already handled it, + // do not double toggle. HA Loss Test still toggles here because HA is actually online. + if (id(hardware_settings).relay2_fallback && !actual_ha_online) { + return; + } + + relay_2->toggle(); + + - id: !extend button_left_press_short + then: + - script.execute: nspanel_lounge_left_button_action + + - id: !extend button_right_press_short + then: + - script.execute: nspanel_lounge_right_button_action + +#:########################################################################################:# +# INTERVAL: +# Keep Relay 1 ON whenever Home Assistant is effectively connected. +#:########################################################################################:# +interval: + - interval: 5s + then: + - script.execute: nspanel_lounge_force_left_relay_on_when_ha_connected + +#:########################################################################################:# +# BLUETOOTH: +# https://esphome.io/components/bluetooth_proxy.html +# https://esphome.io/components/esp32_ble_tracker.html +#:########################################################################################:# +#bluetooth_proxy: +# active: true + +#esp32_ble_tracker: +# scan_parameters: +# # Defaults used so Bluetooth can co-exist with WiFi +# active: true \ No newline at end of file diff --git a/esphome/fonts/5x8.bdf b/esphome/fonts/5x8.bdf new file mode 100644 index 0000000..939cc05 --- /dev/null +++ b/esphome/fonts/5x8.bdf @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + +Sign in · GitLab + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ + diff --git a/esphome/fonts/5x8.bdf.old b/esphome/fonts/5x8.bdf.old new file mode 100644 index 0000000..ecf62d9 --- /dev/null +++ b/esphome/fonts/5x8.bdf.old @@ -0,0 +1,1470 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + matrixclock-esphome/fonts/5x8.bdf at main · RealDeco/matrixclock-esphome · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+ Skip to content + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + +
+ + + + + + + + + +
+
+
+ + + + + + + + + + +
+ +
+ +
+ +
+ + + + / + + matrixclock-esphome + + + Public +
+ + +
+ +
+ + +
+
+ +
+
+ + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + + +

Latest commit

 

History

History
21422 lines (21422 loc) · 151 KB

File metadata and controls

21422 lines (21422 loc) · 151 KB
+
+ + + + +
+ +
+ +
+
+ +
+ +
+

Footer

+ + + + +
+
+ + + + + © 2026 GitHub, Inc. + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + +
+
+
+ + + diff --git a/esphome/fonts/Eight-Bit-Dragon.ttf b/esphome/fonts/Eight-Bit-Dragon.ttf new file mode 100644 index 0000000..c0bc8fe --- /dev/null +++ b/esphome/fonts/Eight-Bit-Dragon.ttf @@ -0,0 +1,13 @@ + + + Eight Bit Dragon free font + + + + +
PreviewSizeFonts

Eight Bit Dragon - .TTF

Lcd - Modern
13279 Downloads Download

Eight Bit Dragon Lcd - Modern

Eight Bit Dragon font

Eight Bit Dragon fontEight Bit Dragon font bigEight Bit Dragon font textEight Bit Dragon font 1
Font NameDateFile Size
eight_bit_dragon.png 2018-10-10 8 KB
Eight-Bit-Dragon.ttf 2018-10-10 34 KB


Font Details

Concielian Classic version 2 Truetype Font for Windows



2017 Iconian Fonts - Daniel Zadorozny

http://www.iconian.com/



This font comes with the following 5 versions: Regular, Bold, Condensed, Expanded and 3d.


This font may be freely distributed and is free for all non-commercial uses. Use of the fonts are at your own risk.

For commercial use of the font please visit http://iconian.com/commercial.html for additional information.

or e-mail me at iconian@aol.com

Eight Bit Dragonfont download, Eight Bit Dragon font.
; +
+
+

© 2026 - Best Free Fonts - Best Fonts

+ + diff --git a/group/downstairs_flat_lights.yaml b/group/downstairs_flat_lights.yaml deleted file mode 100644 index 88ef543..0000000 --- a/group/downstairs_flat_lights.yaml +++ /dev/null @@ -1,14 +0,0 @@ -downstairs_flat_lights: - name: Downstairs Flat Lights - # All the lights in the Downstairs flat - # Doesn't include the outdoor switch lights, or bedroom wardrobe light - entities: - - switch.esp_downstloungemain_relay_1_main_lights # Lounge Main Lights - - switch.esp_downstloungemain_relay_2_back_wall_lights # Lounge Back Wall Lights - - switch.esp_downstmasterbedrmlights_relay_1_main_lights # Main Bedroom, Main Lights - - switch.esp_downstbedrm2lights_relay_1_main_lights # Small Bedroom Room Lights - - switch.esp_downstkitchlights_relay_2_kitchen_light # Kitchen Lights - - switch.esp_downstkitchlights_relay_1_dining_light # Dining Lights - - switch.esp_downstbathswitch_relay_1_main_lights # Bathroom main lights - - switch.esp_downstbathswitch_relay_2_cabinet_light # Bathroom Cabinet Lights - diff --git a/packages/16a_ev_charging_controls.yaml b/packages/16a_ev_charging_controls.yaml new file mode 100644 index 0000000..ba7a74b --- /dev/null +++ b/packages/16a_ev_charging_controls.yaml @@ -0,0 +1,389 @@ +# yaml-language-server: $schema=null + +############################################################################### +# PACKAGE: 16A EV Charger Control +############################################################################### +# +# VERSION: +# V1.1 2026-05-15 +# - Reworked 1hr topup logic to use a hard deadline and watchdog. +# - Removed dependency on timer.finished event for relay shutoff. +# - Offpeak until charged now continues past offpeak end until charging stops. +# - 1hr topup now now rolls into Normal Offpeak if the hour ends during +# the offpeak window, without switching the relay off and back on. +# +# V1.0 2026-05-11 +# - Initial package for 16A EV charger offpeak and charge-until-full control. +# +# PACKAGE SETTINGS: +# Car display name: +# - Leaf +# +# Charger relay output: +# - switch.garage_db_control_16a_wallcharger_operation +# +# Vehicle charging sensor: +# - binary_sensor.garage_db_control_16a_wallcharger_charging +# +# Default offpeak period: +# - Start: 21:00:00 +# - End: 00:00:00 +# +############################################################################### + +input_datetime: + ev_16a_offpeak_start: + name: 16A EV Offpeak Start + has_date: false + has_time: true + initial: "21:00:00" + + ev_16a_offpeak_end: + name: 16A EV Offpeak End + has_date: false + has_time: true + initial: "00:00:00" + + ev_16a_1hr_topup_until: + name: 16A EV 1hr topup until + has_date: true + has_time: true + initial: "2000-01-01 00:00:00" + +input_select: + ev_16a_charge_mode: + name: Leaf EV charge mode + icon: mdi:ev-station + options: + - "Normal (Offpeak)" + - "Offpeak until charged" + - "1hr topup now" + - "Charge now until full" + - "Stop charging now" + initial: "Normal (Offpeak)" + +automation: + ############################################################################# + # OFFPEAK START + ############################################################################# + + - id: ev_16a_charger_offpeak_start + alias: "16A EV Charger - Offpeak Start" + mode: single + + triggers: + - trigger: time + at: input_datetime.ev_16a_offpeak_start + + conditions: + - condition: template + value_template: > + {{ states('input_select.ev_16a_charge_mode') in + ['Normal (Offpeak)', 'Offpeak until charged'] }} + + actions: + - action: switch.turn_on + target: + entity_id: switch.garage_db_control_16a_wallcharger_operation + + - choose: + - conditions: + - condition: state + entity_id: input_select.ev_16a_charge_mode + state: "Offpeak until charged" + sequence: + # If the car never starts charging, or is already full, turn off + # after a 5 minute grace period. + - delay: "00:05:00" + + - condition: state + entity_id: input_select.ev_16a_charge_mode + state: "Offpeak until charged" + + - condition: state + entity_id: binary_sensor.garage_db_control_16a_wallcharger_charging + state: "off" + + - action: switch.turn_off + target: + entity_id: switch.garage_db_control_16a_wallcharger_operation + + - action: input_select.select_option + target: + entity_id: input_select.ev_16a_charge_mode + data: + option: "Normal (Offpeak)" + + ############################################################################# + # OFFPEAK END + ############################################################################# + + - id: ev_16a_charger_offpeak_end + alias: "16A EV Charger - Offpeak End" + mode: single + + triggers: + - trigger: time + at: input_datetime.ev_16a_offpeak_end + + conditions: + - condition: state + entity_id: input_select.ev_16a_charge_mode + state: "Normal (Offpeak)" + + actions: + - action: switch.turn_off + target: + entity_id: switch.garage_db_control_16a_wallcharger_operation + + ############################################################################# + # USER CHARGE MODE SELECTIONS + ############################################################################# + + - id: ev_16a_charger_charge_mode_selected + alias: "16A EV Charger - Charge Mode Selected" + mode: restart + + triggers: + - trigger: state + entity_id: input_select.ev_16a_charge_mode + + actions: + - variables: + selected_mode: "{{ trigger.to_state.state }}" + is_offpeak_now: > + {% set start = states('input_datetime.ev_16a_offpeak_start') %} + {% set end = states('input_datetime.ev_16a_offpeak_end') %} + {% set now_time = now().strftime('%H:%M:%S') %} + {% if start == end %} + {{ true }} + {% elif start < end %} + {{ start <= now_time < end }} + {% else %} + {{ now_time >= start or now_time < end }} + {% endif %} + + - choose: + ##################################################################### + # NORMAL OFFPEAK + ##################################################################### + + - conditions: + - condition: template + value_template: "{{ selected_mode == 'Normal (Offpeak)' }}" + sequence: + # No immediate action. + # Normal mode only acts when the offpeak start/end triggers fire. + - stop: "Normal offpeak mode selected." + + ##################################################################### + # OFFPEAK UNTIL CHARGED + ##################################################################### + + - conditions: + - condition: template + value_template: "{{ selected_mode == 'Offpeak until charged' }}" + sequence: + - if: + - condition: template + value_template: "{{ is_offpeak_now }}" + then: + - action: switch.turn_on + target: + entity_id: switch.garage_db_control_16a_wallcharger_operation + + # If the car never starts charging, or is already full, turn + # off after a 5 minute grace period. + - delay: "00:05:00" + + - condition: state + entity_id: input_select.ev_16a_charge_mode + state: "Offpeak until charged" + + - condition: state + entity_id: binary_sensor.garage_db_control_16a_wallcharger_charging + state: "off" + + - action: switch.turn_off + target: + entity_id: switch.garage_db_control_16a_wallcharger_operation + + - action: input_select.select_option + target: + entity_id: input_select.ev_16a_charge_mode + data: + option: "Normal (Offpeak)" + + ##################################################################### + # 1 HOUR TOPUP NOW + ##################################################################### + + - conditions: + - condition: template + value_template: "{{ selected_mode == '1hr topup now' }}" + sequence: + - action: input_datetime.set_datetime + target: + entity_id: input_datetime.ev_16a_1hr_topup_until + data: + datetime: > + {{ (as_timestamp(now()) + 3600) + | timestamp_custom('%Y-%m-%d %H:%M:%S', true) }} + + - action: switch.turn_on + target: + entity_id: switch.garage_db_control_16a_wallcharger_operation + + ##################################################################### + # CHARGE NOW UNTIL FULL + ##################################################################### + + - conditions: + - condition: template + value_template: "{{ selected_mode == 'Charge now until full' }}" + sequence: + - action: switch.turn_on + target: + entity_id: switch.garage_db_control_16a_wallcharger_operation + + # If the car never starts charging, or is already full, turn off + # after a 5 minute grace period. + - delay: "00:05:00" + + - condition: state + entity_id: input_select.ev_16a_charge_mode + state: "Charge now until full" + + - condition: state + entity_id: binary_sensor.garage_db_control_16a_wallcharger_charging + state: "off" + + - action: switch.turn_off + target: + entity_id: switch.garage_db_control_16a_wallcharger_operation + + - action: input_select.select_option + target: + entity_id: input_select.ev_16a_charge_mode + data: + option: "Normal (Offpeak)" + + ##################################################################### + # STOP CHARGING NOW + ##################################################################### + + - conditions: + - condition: template + value_template: "{{ selected_mode == 'Stop charging now' }}" + sequence: + - action: switch.turn_off + target: + entity_id: switch.garage_db_control_16a_wallcharger_operation + + - action: input_select.select_option + target: + entity_id: input_select.ev_16a_charge_mode + data: + option: "Normal (Offpeak)" + + ############################################################################# + # 1 HOUR TOPUP WATCHDOG + ############################################################################# + + - id: ev_16a_charger_1hr_topup_watchdog + alias: "16A EV Charger - 1hr Topup Watchdog" + mode: single + + triggers: + - trigger: time_pattern + minutes: "/1" + + - trigger: homeassistant + event: start + + conditions: + - condition: state + entity_id: input_select.ev_16a_charge_mode + state: "1hr topup now" + + - condition: template + value_template: > + {{ as_timestamp(now()) >= + as_timestamp(states('input_datetime.ev_16a_1hr_topup_until')) }} + + actions: + - variables: + is_offpeak_now: > + {% set start = states('input_datetime.ev_16a_offpeak_start') %} + {% set end = states('input_datetime.ev_16a_offpeak_end') %} + {% set now_time = now().strftime('%H:%M:%S') %} + {% if start == end %} + {{ true }} + {% elif start < end %} + {{ start <= now_time < end }} + {% else %} + {{ now_time >= start or now_time < end }} + {% endif %} + + - action: input_select.select_option + target: + entity_id: input_select.ev_16a_charge_mode + data: + option: "Normal (Offpeak)" + + - choose: + # If the 1 hour topup finishes during offpeak, do not flick the relay. + # Leave it on and let the Normal Offpeak end automation turn it off. + - conditions: + - condition: template + value_template: "{{ is_offpeak_now }}" + sequence: + - if: + - condition: state + entity_id: switch.garage_db_control_16a_wallcharger_operation + state: "off" + then: + - action: switch.turn_on + target: + entity_id: switch.garage_db_control_16a_wallcharger_operation + + default: + - if: + - condition: state + entity_id: switch.garage_db_control_16a_wallcharger_operation + state: "on" + then: + - action: switch.turn_off + target: + entity_id: switch.garage_db_control_16a_wallcharger_operation + + ############################################################################# + # CHARGING COMPLETE MONITOR + ############################################################################# + + - id: ev_16a_charger_stop_when_charging_complete + alias: "16A EV Charger - Stop When Charging Complete" + mode: single + + triggers: + - trigger: state + entity_id: binary_sensor.garage_db_control_16a_wallcharger_charging + to: "off" + for: "00:05:00" + + conditions: + - condition: template + value_template: > + {{ states('input_select.ev_16a_charge_mode') in + ['Offpeak until charged', 'Charge now until full'] }} + + actions: + - action: switch.turn_off + target: + entity_id: switch.garage_db_control_16a_wallcharger_operation + + - action: input_select.select_option + target: + entity_id: input_select.ev_16a_charge_mode + data: + option: "Normal (Offpeak)" diff --git a/packages/announcement_test.yaml b/packages/announcement_test.yaml index 300c0f9..7602697 100644 --- a/packages/announcement_test.yaml +++ b/packages/announcement_test.yaml @@ -17,14 +17,14 @@ automation: entity_id: input_button.announcement_test action: - - action: script.view_road_announcement - data: - channels: "sony_tv_lounge" - title: "View Road Test" - short_announcement: "Test announcement" - long_announcement: "This is a test announcement from the package test button." - payload: "On" - indicator: "" + # - action: script.view_road_announcement + # data: + # channels: "sony_tv_lounge" + # title: "View Road Test" + # short_announcement: "Test announcement" + # long_announcement: "This is a test announcement from the package test button." + # payload: "On" + # indicator: "" #- action: script.view_road_announcement # data: @@ -34,6 +34,7 @@ automation: - action: script.view_road_announcement data: - channels: "lounge_google_home_voice" - title: "View Road Test" - long_announcement: "This is a test announcement on the lounge Google Home." + channels: "lounge_google_home_voice, sony_tv_lounge" + title: "View Road " + short_announcement: "9pm, Free Power time" + long_announcement: "It is 9pm." diff --git a/packages/auto_lights_underhouse_entrance.yaml b/packages/auto_lights_underhouse_entrance.yaml new file mode 100644 index 0000000..d18638e --- /dev/null +++ b/packages/auto_lights_underhouse_entrance.yaml @@ -0,0 +1,64 @@ +################################################################################ +# PACKAGE: Underhouse Entrance Auto Lights +################################################################################ +# +# Version: +# 1.2 - 2026-05-12 +# - Added fast Zigbee2MQTT FP1-style event triggers: +# sensor.underhouse_mmwave_sensor_x23ms_presence_event = enter +# sensor.underhouse_mmwave_sensor_x23ms_presence_event = approach +# - Keeps binary presence as a backup trigger and as the clear/off condition. +# - This should behave closer to the previous Node-RED automation. +# +# Notes: +# - The UI may show the binary sensor as "Detected", but the YAML state is +# normally "on". +# - The presence_event sensor can react earlier than the binary presence sensor. +# - The event sensor is used to turn lights on quickly, but not to decide when +# the area is clear, because it may remain on its last event value. +# +################################################################################ + +automation: + - id: underhouse_entrance_auto_lights + alias: "Underhouse Entrance - Auto Lights" + description: "Turns underhouse entrance lights on from Zigbee2MQTT mmWave enter/approach/presence, then off 400 seconds after presence clears." + mode: restart + max_exceeded: silent + + trigger: + - platform: state + entity_id: sensor.underhouse_mmwave_sensor_x23ms_presence_event + to: "enter" + + - platform: state + entity_id: sensor.underhouse_mmwave_sensor_x23ms_presence_event + to: "approach" + + - platform: state + entity_id: binary_sensor.underhouse_mmwave_sensor_x23ms_presence + to: "on" + + action: + - alias: "Turn on the underhouse entrance lights" + action: switch.turn_on + target: + entity_id: switch.esp_underhouselights_underhouse_entrance_lights + + - alias: "Wait until the mmWave presence sensor is clear" + wait_template: > + {{ is_state('binary_sensor.underhouse_mmwave_sensor_x23ms_presence', 'off') }} + + - alias: "Keep lights on for 400 seconds after presence clears" + delay: + seconds: 400 + + - alias: "Only continue if presence is still clear" + condition: state + entity_id: binary_sensor.underhouse_mmwave_sensor_x23ms_presence + state: "off" + + - alias: "Turn off the underhouse entrance lights" + action: switch.turn_off + target: + entity_id: switch.esp_underhouselights_underhouse_entrance_lights diff --git a/packages/auto_lights_underhouse_storage.yaml b/packages/auto_lights_underhouse_storage.yaml new file mode 100644 index 0000000..e66f1ec --- /dev/null +++ b/packages/auto_lights_underhouse_storage.yaml @@ -0,0 +1,276 @@ +#:########################################################################################:# +# TITLE: UNDERHOUSE STORAGE LIGHTS AUTO LIGHTS PACKAGE +#:########################################################################################:# +# DESCRIPTION: +# Replaces the Node-RED automation for the underhouse storage lights. +# Doors, PIR sensors, a remote switch, and local relay changes can start or +# extend a 1 hour lighting timer. +# +# VERSION: +# V1.0 2026-05-12 +# - Initial Home Assistant package version. +# +# EDIT NOTES: +# - Add future door contacts in BOTH places marked FUTURE DOOR. +# - Add future PIR sensors in the PIR group marked FUTURE PIR. +# - The generated group entities used below should be: +# binary_sensor.underhouse_storage_door_contacts +# binary_sensor.underhouse_storage_pir_presence +#:########################################################################################:# + +binary_sensor: + - platform: group + name: Underhouse Storage Door Contacts + unique_id: underhouse_storage_door_contacts + device_class: door + all: false + entities: + - binary_sensor.underhouse_stealth_door_x07rs_contact + - binary_sensor.underhouse_north_door_door + # FUTURE DOOR: add the next underhouse storage door contact here. + # - binary_sensor.underhouse_future_door_contact + + - platform: group + name: Underhouse Storage PIR Presence + unique_id: underhouse_storage_pir_presence + device_class: occupancy + all: false + entities: + - binary_sensor.underhouse_pir_sensor_south_occupancy + # FUTURE PIR: uncomment this when the north PIR exists. + # - binary_sensor.underhouse_pir_sensor_north_occupancy + +timer: + underhouse_storage_lights_runtime: + name: Underhouse Storage Lights Runtime + duration: "01:00:00" + restore: true + icon: mdi:timer-outline + +script: + underhouse_storage_lights_start_runtime: + alias: Underhouse Storage Lights - Start Or Extend Runtime + mode: restart + sequence: + - choose: + - conditions: + - condition: state + entity_id: switch.esp_underhouselights_underhouse_storage_lights + state: "off" + sequence: + - action: switch.turn_on + target: + entity_id: switch.esp_underhouselights_underhouse_storage_lights + + - action: timer.start + target: + entity_id: timer.underhouse_storage_lights_runtime + data: + duration: "0:20:00" + + underhouse_storage_lights_stop_runtime: + alias: Underhouse Storage Lights - Stop Runtime + mode: restart + sequence: + - choose: + - conditions: + - condition: state + entity_id: switch.esp_underhouselights_underhouse_storage_lights + state: "on" + sequence: + - action: switch.turn_off + target: + entity_id: switch.esp_underhouselights_underhouse_storage_lights + + - choose: + - conditions: + - condition: template + value_template: >- + {{ not is_state('timer.underhouse_storage_lights_runtime', 'idle') }} + sequence: + - action: timer.cancel + target: + entity_id: timer.underhouse_storage_lights_runtime + +automation: + - id: underhouse_storage_lights_start_extend_runtime + alias: Underhouse Storage Lights - Start Or Extend Runtime + description: >- + Turns the storage lights on and starts or restarts the 1 hour timer when + a door opens, PIR detects occupancy, or the remote switch is pressed. + mode: restart + trigger: + - platform: state + entity_id: binary_sensor.underhouse_storage_door_contacts + to: "on" + - platform: state + entity_id: binary_sensor.underhouse_storage_pir_presence + to: "on" + - platform: state + entity_id: binary_sensor.esp_underhouselights_underhouse_storage_lights_remote_switch + to: "on" + action: + - action: script.underhouse_storage_lights_start_runtime + + - id: underhouse_storage_lights_start_timer_when_relay_turned_on + alias: Underhouse Storage Lights - Start Timer When Relay Turned On + description: >- + Starts the timer if the relay is turned on locally by ESPHome or + by another Home Assistant automation. + mode: restart + trigger: + - platform: state + entity_id: switch.esp_underhouselights_underhouse_storage_lights + to: "on" + action: + - action: timer.start + target: + entity_id: timer.underhouse_storage_lights_runtime + data: + duration: "00:20:00" + + - id: underhouse_storage_lights_timer_finished + alias: Underhouse Storage Lights - Timer Finished + description: >- + Turns the storage lights off after the runtime expires, even if a + door has been left open. + mode: single + trigger: + - platform: event + event_type: timer.finished + event_data: + entity_id: timer.underhouse_storage_lights_runtime + action: + - choose: + - conditions: + - condition: state + entity_id: switch.esp_underhouselights_underhouse_storage_lights + state: "on" + sequence: + - action: switch.turn_off + target: + entity_id: switch.esp_underhouselights_underhouse_storage_lights + + - id: underhouse_storage_lights_cancel_timer_when_relay_off + alias: Underhouse Storage Lights - Cancel Timer When Relay Off + description: >- + Keeps the timer helper tidy if the relay is turned off manually, locally, + or by another automation. + mode: restart + trigger: + - platform: state + entity_id: switch.esp_underhouselights_underhouse_storage_lights + to: "off" + condition: + - condition: template + value_template: >- + {{ not is_state('timer.underhouse_storage_lights_runtime', 'idle') }} + action: + - action: timer.cancel + target: + entity_id: timer.underhouse_storage_lights_runtime + + - id: underhouse_storage_lights_all_doors_closed + alias: Underhouse Storage Lights - All Doors Closed + description: >- + When all door contacts are closed, turn the lights off immediately if no + PIR occupancy is active. If PIR is still active, the PIR clear automation + below will turn them off after 60 seconds without occupancy. + mode: restart + trigger: + - platform: state + entity_id: binary_sensor.underhouse_storage_door_contacts + from: "on" + to: "off" + condition: + - condition: state + entity_id: binary_sensor.underhouse_storage_pir_presence + state: "off" + action: + - action: script.underhouse_storage_lights_stop_runtime + + - id: underhouse_storage_lights_individual_door_closed_check + alias: Underhouse Storage Lights - Individual Door Closed No Motion Check + description: >- + When a real door contact closes, wait 60 seconds and then turn the relay + off only if all doors are closed and there is no PIR occupancy. + mode: restart + trigger: + - platform: state + entity_id: + - binary_sensor.underhouse_stealth_door_x07rs_contact + - binary_sensor.underhouse_north_door_door + # FUTURE DOOR: add the next underhouse storage door contact here too. + # - binary_sensor.underhouse_future_door_contact + from: "on" + to: "off" + action: + - delay: "00:01:00" + - condition: state + entity_id: binary_sensor.underhouse_storage_door_contacts + state: "off" + - condition: state + entity_id: binary_sensor.underhouse_storage_pir_presence + state: "off" + - condition: state + entity_id: switch.esp_underhouselights_underhouse_storage_lights + state: "on" + - action: script.underhouse_storage_lights_stop_runtime + + - id: underhouse_storage_lights_pir_clear_after_doors_closed + alias: Underhouse Storage Lights - PIR Clear After Doors Closed + description: >- + If the doors are closed and PIR occupancy clears for 60 seconds, turn the + storage lights off. + mode: restart + trigger: + - platform: state + entity_id: binary_sensor.underhouse_storage_pir_presence + to: "off" + for: "00:01:00" + condition: + - condition: state + entity_id: binary_sensor.underhouse_storage_door_contacts + state: "off" + - condition: state + entity_id: switch.esp_underhouselights_underhouse_storage_lights + state: "on" + action: + - action: script.underhouse_storage_lights_stop_runtime + + - id: underhouse_storage_lights_startup_sync + alias: Underhouse Storage Lights - Startup Sync + description: >- + On Home Assistant startup, re-sync the package state so an already-open + door or already-active PIR still controls the lights after a restart. + mode: single + trigger: + - platform: homeassistant + event: start + action: + - delay: "00:00:20" + - choose: + - conditions: + - condition: template + value_template: >- + {{ + is_state('binary_sensor.underhouse_storage_door_contacts', 'on') + or is_state('binary_sensor.underhouse_storage_pir_presence', 'on') + or is_state('binary_sensor.esp_underhouselights_underhouse_storage_lights_remote_switch', 'on') + }} + sequence: + - action: script.underhouse_storage_lights_start_runtime + + - conditions: + - condition: state + entity_id: switch.esp_underhouselights_underhouse_storage_lights + state: "on" + - condition: state + entity_id: timer.underhouse_storage_lights_runtime + state: "idle" + sequence: + - action: timer.start + target: + entity_id: timer.underhouse_storage_lights_runtime + data: + duration: "00:20:00" diff --git a/packages/bedroom_1_ikea_air_filter.yaml b/packages/bedroom_1_ikea_air_filter.yaml index e78cf22..8caae44 100644 --- a/packages/bedroom_1_ikea_air_filter.yaml +++ b/packages/bedroom_1_ikea_air_filter.yaml @@ -1,20 +1,26 @@ ############################################################################### # Bedroom 1 Ikea Air Filter Package # File: /config/packages/bedroom_1_ikea_air_filter.yaml -# Version: 1.0 -# Date: 2026-04-29 +# Version: 1.1 +# Date: 2026-05-08 # # Purpose: # - Creates a dropdown helper called "Bedroom 1 Ikea Fan". -# - Auto mode controls the Bedroom 1 Ikea air filter speed by priority. +# - Auto mode controls the Bedroom 1 Ikea air filter speed by event and timing. # - Manual dropdown modes set a fixed fan speed and disable auto control. # -# Auto priority order: -# 1. Quiet time on: fan speed 2 -# 2. Bedside light on: fan speed 2 -# 3. Free power time, 21:00 to midnight: fan speed 5 -# 4. Daytime, 09:00 to 15:00: fan speed 4 -# 5. Default: fan speed 2 +# Behaviour notes: +# - Quiet time turning on sets fan speed to 2. +# - Bedside lamp turning on sets fan speed to 2. +# - Bedside lamp turning off does not change the fan speed. +# - There is no 10-minute re-check, so the fan will not ramp back up just +# because the bedside lamp was switched off. +# - Time boundaries can still change the fan speed later. +# +# Auto timing: +# - 21:00 to midnight: fan speed 5 +# - 09:00 to 15:00: fan speed 4 +# - Default: fan speed 2 ############################################################################### input_select: @@ -68,13 +74,17 @@ automation: - trigger: homeassistant event: start - # Highest priority condition. + # Quiet time only forces low when it turns on. + # Turning quiet time off does not automatically ramp the fan back up. - trigger: state entity_id: input_boolean.quiet_time + to: "on" - # Bedside lamp should force low speed while on. + # Bedside lamp only forces low when it turns on. + # Turning the lamp off does not change the fan speed. - trigger: state entity_id: light.master_bedroom_bedside_lamp_arlec_bulb_master_bedroom_bedside_lamp_arlec_bulb + to: "on" # Main timing boundaries. - trigger: time @@ -84,10 +94,6 @@ automation: - "15:00:00" - "21:00:00" - # Safety/re-check trigger, especially for the bedside lamp rule. - - trigger: time_pattern - minutes: "/10" - conditions: # Manual dropdown modes disable automatic control. - condition: state @@ -96,10 +102,26 @@ automation: actions: - variables: + trigger_entity: "{{ trigger.entity_id | default('') }}" + bedside_lamp_entity: light.master_bedroom_bedside_lamp_arlec_bulb_master_bedroom_bedside_lamp_arlec_bulb + bedside_lamp_on_trigger: >- + {{ + trigger_entity == bedside_lamp_entity + and trigger.to_state is defined + and trigger.to_state.state == 'on' + }} + quiet_time_on_trigger: >- + {{ + trigger_entity == 'input_boolean.quiet_time' + and trigger.to_state is defined + and trigger.to_state.state == 'on' + }} auto_target_speed: >- - {% if is_state('input_boolean.quiet_time', 'on') %} + {% if bedside_lamp_on_trigger %} 2 - {% elif is_state('light.master_bedroom_bedside_lamp_arlec_bulb_master_bedroom_bedside_lamp_arlec_bulb', 'on') %} + {% elif quiet_time_on_trigger %} + 2 + {% elif is_state('input_boolean.quiet_time', 'on') %} 2 {% elif now().hour >= 21 %} 5 @@ -142,7 +164,7 @@ automation: entity_id: automation.bedroom_1_ikea_air_filter_auto_control # Auto starts at speed 2, then immediately evaluates the - # current priority rules. + # current timing rules. - action: script.bedroom_1_ikea_air_filter_set_speed_if_needed data: target_speed: 2 diff --git a/packages/bedtime_mode_actions.yaml b/packages/bedtime_mode_actions.yaml index 6d9a4a4..5c2ea76 100644 --- a/packages/bedtime_mode_actions.yaml +++ b/packages/bedtime_mode_actions.yaml @@ -3,6 +3,9 @@ ############################################################################### # # VERSION: +# 1.4 - 2026-05-21 +# - Added delayed lounge NSPanel touchscreen brightness reduction to 5. +# # 1.3 - 2026-05-07 # - Added downstairs lights all off script. # - Added main hallway nightlights 60 minute bedtime timer. @@ -29,6 +32,7 @@ # - climate entities are turned off if they are not already "off". # - Main hallway nightlights are turned on for 60 minutes when bedtime mode runs. # - If the main hallway nightlights are turned off manually, the timer is cancelled. +# - Lounge NSPanel touchscreen brightness is set to 5 after 20 seconds. # ############################################################################### @@ -94,6 +98,18 @@ automation: delay_seconds: 0 action: + # Turn hallway nightlights on immediately before any other bedtime actions. + - service: switch.turn_on + target: + entity_id: switch.main_hallway_nightlights_1_relay_1_main_hallway_nightlights + + # Start or restart the 60 minute bedtime nightlight timer. + - service: timer.start + target: + entity_id: timer.main_hallway_nightlights_bedtime + data: + duration: "01:00:00" + - service: script.downstairs_lights_all_off - service: script.lounge_set_scene @@ -104,15 +120,10 @@ automation: target: entity_id: input_boolean.quiet_time - - service: switch.turn_on + # Reduce the lounge NSPanel screen brightness after 20 seconds. + - service: script.turn_on target: - entity_id: switch.main_hallway_nightlights_1_relay_1_main_hallway_nightlights - - - service: timer.start - target: - entity_id: timer.main_hallway_nightlights_bedtime - data: - duration: "01:00:00" + entity_id: script.bedtime_mode_set_lounge_nspanel_brightness_after_delay - repeat: for_each: "{{ bedtime_delayed_off_targets }}" @@ -232,3 +243,21 @@ script: mode: parallel max: 50 + + bedtime_mode_set_lounge_nspanel_brightness_after_delay: + alias: "Bedtime Mode - Set Lounge NSPanel Brightness After Delay" + description: > + Waits 20 seconds after bedtime mode starts, then sets the lounge NSPanel + touchscreen display brightness to 5. + + sequence: + - delay: + seconds: 20 + + - service: number.set_value + target: + entity_id: number.lounge_nspanel_touchscreen_display_brightness + data: + value: 1 + + mode: restart diff --git a/packages/blind_control.yaml b/packages/blind_control.yaml deleted file mode 100644 index 3c1dcf2..0000000 --- a/packages/blind_control.yaml +++ /dev/null @@ -1,24 +0,0 @@ -mqtt: - switch: - - unique_id: lounge_blinds_control - name: "Lounge Blinds Control" - state_topic: "viewroad-status/blinds/lounge-verticalblinds" - command_topic: "viewroad-commands/blinds/lounge-verticalblinds" - payload_off: "off" - payload_on: "on" - state_on: "on" - state_off: "off" - icon: mdi:blinds - retain: false - -automation: - - id: lounge_blinds_control_switch - alias: Publish lounge blind control to mqtt - trigger: - platform: state - entity_id: input_boolean.lounge_blinds - action: - service: mqtt.publish - data_template: - payload: "{{trigger.to_state.state}}" - topic: viewroad-status/blinds/lounge-verticalblinds diff --git a/packages/downstairs_flat_controls.yaml b/packages/downstairs_flat_controls.yaml index feb328a..9abc46a 100644 --- a/packages/downstairs_flat_controls.yaml +++ b/packages/downstairs_flat_controls.yaml @@ -4,6 +4,12 @@ # # VERSION HISTORY # +# 2026-05-07 - v1.0.2 +# - Added binary_sensor.downstairs_flat_any_lights_on. +# - Updated all-on/all-off script to use the new binary sensor. +# - Kept direct entity lists instead of using a Home Assistant group, to avoid +# package merge errors from duplicate group/name keys. +# # 2026-05-07 - v1.0.1 # - Removed group.downstairs_flat_lights from this package to avoid duplicate # group/name package merge errors. @@ -30,6 +36,11 @@ # - downstairs_light_toggle_all_group turns all listed lights OFF if any are ON. # - downstairs_light_toggle_all_group turns all listed lights ON if they are all OFF. # +# - binary_sensor.downstairs_flat_any_lights_on: +# - ON when any listed downstairs light is ON. +# - OFF when all listed downstairs lights are OFF. +# - This replaces the need for a group.downstairs_flat_lights entity. +# ############################################################################### ############################################################################### @@ -41,6 +52,27 @@ input_boolean: name: Downstairs Guest Occupied icon: mdi:home-account +############################################################################### +# TEMPLATE SENSORS +############################################################################### + +template: + - binary_sensor: + - name: Downstairs Flat Any Lights On + unique_id: downstairs_flat_any_lights_on + icon: mdi:lightbulb-group + state: > + {{ + is_state('switch.esp_downstloungemain_relay_1_main_lights', 'on') + or is_state('switch.esp_downstloungemain_relay_2_back_wall_lights', 'on') + or is_state('switch.esp_downstmasterbedrmlights_relay_1_main_lights', 'on') + or is_state('switch.esp_downstbedrm2lights_relay_1_main_lights', 'on') + or is_state('switch.esp_downstkitchlights_relay_2_kitchen_light', 'on') + or is_state('switch.esp_downstkitchlights_relay_1_dining_light', 'on') + or is_state('switch.esp_downstbathswitch_relay_1_main_lights', 'on') + or is_state('switch.esp_downstbathswitch_relay_2_cabinet_light', 'on') + }} + ############################################################################### # SCRIPTS ############################################################################### @@ -169,18 +201,9 @@ script: - choose: - conditions: - - condition: template - value_template: > - {{ - is_state('switch.esp_downstloungemain_relay_1_main_lights', 'on') - or is_state('switch.esp_downstloungemain_relay_2_back_wall_lights', 'on') - or is_state('switch.esp_downstmasterbedrmlights_relay_1_main_lights', 'on') - or is_state('switch.esp_downstbedrm2lights_relay_1_main_lights', 'on') - or is_state('switch.esp_downstkitchlights_relay_2_kitchen_light', 'on') - or is_state('switch.esp_downstkitchlights_relay_1_dining_light', 'on') - or is_state('switch.esp_downstbathswitch_relay_1_main_lights', 'on') - or is_state('switch.esp_downstbathswitch_relay_2_cabinet_light', 'on') - }} + - condition: state + entity_id: binary_sensor.downstairs_flat_any_lights_on + state: "on" sequence: - action: homeassistant.turn_off target: diff --git a/packages/energy_readings.yaml b/packages/energy_readings.yaml deleted file mode 100644 index af9db82..0000000 --- a/packages/energy_readings.yaml +++ /dev/null @@ -1,35 +0,0 @@ -mqtt: - sensor: - - unique_id: view_road_power_now - name: "Power Now" - state_topic: "viewroad-status/energy/PowerTotals" - unit_of_measurement: "kW" - - unique_id: view_road_power_now_red - name: "Power Now (Red)" - state_topic: "tele/tasmo-wemosd1-7280-powermon-1/SENSOR" - unit_of_measurement: "kW" - value_template: "{{ value_json.ENERGY.Power[0] }}" - - unique_id: view_road_power_now_white - name: "Power Now (White)" - state_topic: "tele/tasmo-wemosd1-7280-powermon-1/SENSOR" - unit_of_measurement: "kW" - value_template: "{{ value_json.ENERGY.Power[1] }}" - - unique_id: view_road_power_now_blue - name: "Power Now (Blue)" - state_topic: "tele/tasmo-wemosd1-7280-powermon-1/SENSOR" - unit_of_measurement: "kW" - value_template: "{{ value_json.ENERGY.Power[2] }}" - -template: - - sensor: - - name: "Electricity Power Total" - unique_id: electricity_power_total - unit_of_measurement: "W" - device_class: power - state_class: measurement - state: > - {{ - states('sensor.tasmo_wemosd1_7280_powermon_1_energy_power_0') | float(0) - + states('sensor.tasmo_wemosd1_7280_powermon_1_energy_power_1') | float(0) - + states('sensor.tasmo_wemosd1_7280_powermon_1_energy_power_2') | float(0) - }} diff --git a/packages/ev_charging.yaml b/packages/ev_charging.yaml deleted file mode 100644 index 208ad77..0000000 --- a/packages/ev_charging.yaml +++ /dev/null @@ -1,105 +0,0 @@ -#mqtt: -# sensor: -# - unique_id: 32a_ev_wallcharger_power -# name: "32A EV Wallcharger Power" -# device_class: power -# unit_of_measurement: kW -# state_topic: "stat/tasmo-wemosd1-7280-powermon-1/EnergyMeterCount" -# value_template: "{{ value_json.EVChargerWhCount * 2 * 60 / 1000 }}" -# - unique_id: 16a_ev_wallcharger_power -# name: "16A EV Wallcharger Power" -# device_class: power -# unit_of_measurement: kW -# state_topic: "stat/tasmo-s4chan-7594-garage-1/EnergyMeterCount" -# value_template: "{{ value_json.EVChargerWhCount * 2 * 60 / 1000 }}" - -# Use the Riemann sum integral to calculate energy in kWh -# from the contimuous power measuring sensors -sensor: - - platform: integration - unique_id: 32a_ev_wallcharger_power_total - name: "EV 32A Wallcharger Power Total (Integral)" - source: sensor.main_house_3_phase_power_monitor_32a_wallcharger_power - #device_class: energy - #unit_of_measurement: Wh - #unit_time: h - #unit_prefix: k # Show in kWh - round: 0 # Only need 0 decimals accuracy - - platform: integration - unique_id: 16a_ev_wallcharger_power_total - name: "EV 16A EV Wallcharger Power Total (Integral)" - source: sensor.garage_db_control_16a_wallcharger_power - #device_class: energy - #unit_of_measurement: Wh - #unit_time: h - #unit_prefix: k - round: 0 - -# - platform: filter -# name: "32A EV Charger Power 1m Avg" -# unique_id: ev_charger_32a_power_1m_avg -# entity_id: sensor.main_house_3_phase_power_monitor_ev_wallcharger_power -# filters: -# - filter: time_simple_moving_average -# window_size: "00:01" -# precision: 3 - -input_select: - leaf_ev_charging_mode: - icon: mdi:ev-plug-type1 - name: Leaf EV Charge Mode - initial: "Normal (Offpeak)" - options: - - "Normal (Offpeak)" - - "Offpeak until charged" - - "1hr top-up now" - - "Charge now until full" - - "Stop charging now" - -automation: - - id: set_the_leaf_ev_charging_mode - alias: Set the Leaf EV Charging Mode - trigger: - entity_id: input_select.leaf_ev_charging_mode - platform: state - action: - service: mqtt.publish - data: - topic: viewroad-status/evcharging/leaf-chargemode - payload: - '{% set mapping = { "Normal (Offpeak)":"normal", "Offpeak until charged":"offpeak-full", - "1hr top-up now":"boost", "Charge now until full":"now-full", "Stop charging now":"stop" } %} {% set dta = trigger.to_state.state %} - {{ mapping[dta] }} - ' -#template: -# - trigger: -# - platform: time_pattern -# seconds: "/10" -# - platform: homeassistant -# event: start -# binary_sensor: -# - name: "32A EV Charger Charging" -# unique_id: ev_charger_32a_charging -# icon: mdi:car-electric -# state: >- -# {{ states('sensor.32a_ev_charger_power_1m_avg') | float(0) > 0.1 }} -# delay_on: -# seconds: 60 -# delay_off: -# seconds: 60 -# -# - name: "16A EV Charger Charging" -# unique_id: ev_charger_16a_charging -# icon: mdi:car-electric -# state: >- -# {{ (states('sensor.16a_ev_wallcharger_power') | float(0)) > 0.1 }} -# delay_on: -# seconds: 60 -# delay_off: -# seconds: 60 -# -# - binary_sensor: -# - name: 32A EV Charger Charging UI -# unique_id: ev_charger_charging_ui -# state: "{{ is_state('sensor.32a_ev_charger_charging', 'on') }}" -# icon: mdi:car-electric diff --git a/packages/free_power_time_actions.yaml b/packages/free_power_time_actions.yaml new file mode 100644 index 0000000..b55ec7a --- /dev/null +++ b/packages/free_power_time_actions.yaml @@ -0,0 +1,299 @@ +############################################################################### +# PACKAGE: Free Power Time Automation +############################################################################### +# VERSION: +# 1.0.0 - 2026-05-08 +# - Initial package. +# - Adds editable free power start/end times. +# - Adds master enable switch and per-action enable switches. +# - Adds announcement, gas-to-heatpump changeover, tool charger control, +# and underhouse dehumidifier control. +# +# NOTES: +# - Free power start/end times can be changed in Home Assistant. +# - Start time default is 9:00pm. +# - End time default is midnight. +# - YAML-only gas heater settings are in script.free_power_gas_heater_changeover: +# gas_heater_shutdown_delay_seconds +# heatpump_setpoint_offset_c +# +# IMPORTANT: +# - input_datetime initial values are used to provide defaults. +# - If you later want UI changes to survive every HA restart, remove the +# initial lines after the helpers have been created and set once. +############################################################################### + +############################################################################### +# INPUT DATETIME +############################################################################### + +input_datetime: + free_power_start_time: + name: Free Power - Start Time + has_date: false + has_time: true + initial: "21:00:00" + icon: mdi:clock-start + + free_power_end_time: + name: Free Power - End Time + has_date: false + has_time: true + initial: "00:00:00" + icon: mdi:clock-end + +############################################################################### +# ENABLE SWITCHES +############################################################################### + +input_boolean: + free_power_automation_enabled: + name: Free Power - Master Automation Enable + icon: mdi:transmission-tower + + free_power_announcement_enabled: + name: Free Power - Announcement Enable + icon: mdi:bullhorn + + free_power_gas_heater_changeover_enabled: + name: Free Power - Gas Heater Changeover Enable + icon: mdi:heat-pump-outline + + free_power_tool_battery_chargers_enabled: + name: Free Power - Tool Battery Chargers Enable + icon: mdi:battery-charging + + free_power_underhouse_dehumidifier_enabled: + name: Free Power - Underhouse Dehumidifier Enable + icon: mdi:air-humidifier + +############################################################################### +# TEMPLATE SENSORS +############################################################################### + +template: + - binary_sensor: + - name: Free Power Time Active + unique_id: free_power_time_active + icon: mdi:transmission-tower + state: >- + {% set start = states('input_datetime.free_power_start_time') %} + {% set end = states('input_datetime.free_power_end_time') %} + {% set now_mins = now().hour * 60 + now().minute %} + {% set start_mins = (start[0:2] | int(0)) * 60 + (start[3:5] | int(0)) %} + {% set end_mins = (end[0:2] | int(0)) * 60 + (end[3:5] | int(0)) %} + + {% if start_mins == end_mins %} + false + {% elif start_mins < end_mins %} + {{ start_mins <= now_mins < end_mins }} + {% else %} + {{ now_mins >= start_mins or now_mins < end_mins }} + {% endif %} + +############################################################################### +# SCRIPTS +############################################################################### + +script: + free_power_start_actions: + alias: Free Power - Start Actions + mode: single + sequence: + - condition: state + entity_id: input_boolean.free_power_automation_enabled + state: "on" + + - variables: + free_power_time_label: >- + {%- set raw_time = states('input_datetime.free_power_start_time') -%} + {%- set hour = raw_time[0:2] | int(0) -%} + {%- set minute = raw_time[3:5] | int(0) -%} + {%- set suffix = 'am' if hour < 12 else 'pm' -%} + {%- set hour12 = hour % 12 -%} + {%- set hour12 = 12 if hour12 == 0 else hour12 -%} + {{- hour12 ~ suffix if minute == 0 else hour12 ~ ':' ~ '%02d' | format(minute) ~ suffix -}} + + ########################################################################### + # 1) Free Power Time Announcement + ########################################################################### + + - if: + - condition: state + entity_id: input_boolean.free_power_announcement_enabled + state: "on" + then: + - action: script.view_road_announcement + data: + channels: "lounge_google_home_voice, sony_tv_lounge" + title: "View Road " + short_announcement: "{{ free_power_time_label }}: Free power time" + long_announcement: "It is {{ free_power_time_label }}." + + ########################################################################### + # 2) Gas Heater Changeover + ########################################################################### + + - if: + - condition: state + entity_id: input_boolean.free_power_gas_heater_changeover_enabled + state: "on" + then: + - action: script.free_power_gas_heater_changeover + + ########################################################################### + # 3) Tool Battery Chargers On + ########################################################################### + + - if: + - condition: state + entity_id: input_boolean.free_power_tool_battery_chargers_enabled + state: "on" + then: + - action: switch.turn_on + target: + entity_id: + - switch.ryobi_charger_left_power_monitor_x17pp + - switch.ryobi_charger_right_power_monitor_x16pp + + ########################################################################### + # 4) Underhouse Dehumidifier On + ########################################################################### + + - if: + - condition: state + entity_id: input_boolean.free_power_underhouse_dehumidifier_enabled + state: "on" + then: + - action: switch.turn_on + target: + entity_id: + - switch.underhouse_dehumidifier_power_plug_x10pp + + free_power_end_actions: + alias: Free Power - End Actions + mode: single + sequence: + - condition: state + entity_id: input_boolean.free_power_automation_enabled + state: "on" + + ########################################################################### + # 3) Tool Battery Chargers Off + # + # If this action is enabled, the chargers are switched off at free power + # end even if something else turned them on. + ########################################################################### + + - if: + - condition: state + entity_id: input_boolean.free_power_tool_battery_chargers_enabled + state: "on" + then: + - action: switch.turn_off + target: + entity_id: + - switch.ryobi_charger_left_power_monitor_x17pp + - switch.ryobi_charger_right_power_monitor_x16pp + + ########################################################################### + # 4) Underhouse Dehumidifier Off + # + # If this action is enabled, the dehumidifier is switched off at free power + # end even if something else turned it on. + ########################################################################### + + - if: + - condition: state + entity_id: input_boolean.free_power_underhouse_dehumidifier_enabled + state: "on" + then: + - action: switch.turn_off + target: + entity_id: + - switch.underhouse_dehumidifier_power_plug_x10pp + + free_power_gas_heater_changeover: + alias: Free Power - Gas Heater Changeover + mode: single + sequence: + ########################################################################### + # YAML-only settings + ########################################################################### + + - variables: + gas_heater_operation_entity: switch.rinnai_neo_gas_heater_heater_operation + gas_heater_setpoint_entity: number.rinnai_neo_gas_heater_rinnai_neo_gas_heater_setpoint + heatpump_climate_entity: climate.lounge + + gas_heater_shutdown_delay_seconds: 60 + heatpump_setpoint_offset_c: 0 + + heatpump_setpoint: >- + {{ + ( + (states(gas_heater_setpoint_entity) | float(0)) + + (heatpump_setpoint_offset_c | float(0)) + ) | round(1) + }} + + ########################################################################### + # Only change over if the gas heater is currently on. + ########################################################################### + + - condition: template + value_template: "{{ is_state(gas_heater_operation_entity, 'on') }}" + + ########################################################################### + # Only continue if the gas setpoint can be read. + ########################################################################### + + - condition: template + value_template: >- + {{ states(gas_heater_setpoint_entity) not in ['unknown', 'unavailable', 'none', 'None', ''] }} + + ########################################################################### + # Set the Panasonic heatpump to heat mode and match the gas heater setpoint, + # with the YAML-only offset applied. + ########################################################################### + + - action: climate.set_temperature + target: + entity_id: climate.lounge + data: + hvac_mode: heat + temperature: "{{ heatpump_setpoint }}" + + ########################################################################### + # Give the heatpump time to start before turning the gas heater off. + ########################################################################### + + - delay: + seconds: "{{ gas_heater_shutdown_delay_seconds | int(60) }}" + + - action: switch.turn_off + target: + entity_id: switch.rinnai_neo_gas_heater_heater_operation + +############################################################################### +# AUTOMATIONS +############################################################################### + +automation: + - id: free_power_time_start_actions + alias: Free Power Time - Start Actions + mode: single + triggers: + - trigger: time + at: input_datetime.free_power_start_time + actions: + - action: script.free_power_start_actions + + - id: free_power_time_end_actions + alias: Free Power Time - End Actions + mode: single + triggers: + - trigger: time + at: input_datetime.free_power_end_time + actions: + - action: script.free_power_end_actions diff --git a/packages/gas_heater_operation.yaml.old2026 b/packages/gas_heater_operation.yaml.old2026 deleted file mode 100644 index 092555e..0000000 --- a/packages/gas_heater_operation.yaml.old2026 +++ /dev/null @@ -1,19 +0,0 @@ -mqtt: - sensor: - - unique_id: gas_heater_operating - name: "Gas Heater Operating" - state_topic: "viewroad-status/gasheater/operating" - switch: - - unique_id: gasheater_switch - name: "Gas Heater" - state_topic: "viewroad-status/gasheater/operating" - command_topic: "viewroad-commands/gasheater/onoff" - #availability: - # - topic: "home/bedroom/switch1/available" - payload_on: "ON" - payload_off: "OFF" - state_on: "ON" - state_off: "OFF" - optimistic: false - qos: 0 - retain: true # need this, or fire starts on HA reboot. Could fix in Node red too. diff --git a/packages/lounge_blind_control.yaml b/packages/lounge_blind_control.yaml new file mode 100644 index 0000000..16eef02 --- /dev/null +++ b/packages/lounge_blind_control.yaml @@ -0,0 +1,368 @@ +############################################################################### +# PACKAGE: Lounge Blinds - Sunrise / Sunset Automation +############################################################################### +# +# VERSION: +# v1.2 - 2026-05-08 +# - Updated input_boolean.lounge_blinds control logic. +# - input_boolean.lounge_blinds ON now closes the blinds. +# - input_boolean.lounge_blinds OFF now opens the blinds. +# - Removed the sync guard helper. +# - Added state checks so cover feedback does not create command loops. +# +# v1.1 - 2026-05-08 +# - Added input_boolean.lounge_blinds as a manual control/status helper. +# - Added cover state sync back to input_boolean.lounge_blinds. +# +# v1.0 - 2026-05-08 +# - Initial package. +# - Opens lounge blinds at sunrise. +# - Closes lounge blinds at sunset. +# - Includes sunrise/sunset minute offsets. +# - Includes repeated command attempts for Zigbee reliability. +# - Opens blinds in list order: A, B, C. +# - Closes blinds in reverse list order: C, B, A. +# +# NOTES: +# - input_boolean.lounge_blinds is treated as: +# ON = blinds closed +# OFF = blinds open +# +# - Turning input_boolean.lounge_blinds ON will close the blinds. +# - Turning input_boolean.lounge_blinds OFF will open the blinds. +# - If all blinds are closed by another method, the boolean will turn ON. +# - If all blinds are opened by another method, the boolean will turn OFF. +# - If blinds are in a mixed/partial state, the boolean is left unchanged. +# +# - The blind entity list is inside: +# script.lounge_blinds_run_sequence +# script.lounge_blinds_sync_status +# automation.lounge_blinds_control_from_input_boolean +# +# - If you add more blinds, update the blind list in those three places. +# +############################################################################### + +input_boolean: + lounge_blinds: + name: Lounge Blinds Closed + icon: mdi:blinds + +input_number: + lounge_blinds_sunrise_offset_minutes: + name: Lounge Blinds Sunrise Offset + icon: mdi:weather-sunset-up + min: -180 + max: 180 + step: 1 + mode: box + unit_of_measurement: min + initial: 0 + + lounge_blinds_sunset_offset_minutes: + name: Lounge Blinds Sunset Offset + icon: mdi:weather-sunset-down + min: -180 + max: 180 + step: 1 + mode: box + unit_of_measurement: min + initial: 0 + + lounge_blinds_per_blind_delay_seconds: + name: Lounge Blinds Per-Blind Delay + icon: mdi:timer-outline + min: 0 + max: 60 + step: 1 + mode: box + unit_of_measurement: sec + initial: 2 + + lounge_blinds_command_repeats: + name: Lounge Blinds Command Repeats + icon: mdi:repeat + min: 1 + max: 5 + step: 1 + mode: box + initial: 2 + + lounge_blinds_retry_delay_seconds: + name: Lounge Blinds Retry Delay + icon: mdi:timer-refresh-outline + min: 0 + max: 120 + step: 1 + mode: box + unit_of_measurement: sec + initial: 10 + +input_datetime: + lounge_blinds_next_open_time: + name: Lounge Blinds Next Open Time + has_date: true + has_time: true + + lounge_blinds_next_close_time: + name: Lounge Blinds Next Close Time + has_date: true + has_time: true + +script: + lounge_blinds_update_sun_times: + alias: Lounge Blinds - Update Sun Times + mode: single + sequence: + - variables: + sunrise_offset_seconds: > + {{ states('input_number.lounge_blinds_sunrise_offset_minutes') | int(0) * 60 }} + sunset_offset_seconds: > + {{ states('input_number.lounge_blinds_sunset_offset_minutes') | int(0) * 60 }} + next_sunrise_timestamp: > + {{ as_timestamp(state_attr('sun.sun', 'next_rising')) + sunrise_offset_seconds }} + next_sunset_timestamp: > + {{ as_timestamp(state_attr('sun.sun', 'next_setting')) + sunset_offset_seconds }} + + - action: input_datetime.set_datetime + target: + entity_id: input_datetime.lounge_blinds_next_open_time + data: + datetime: > + {{ next_sunrise_timestamp | timestamp_custom('%Y-%m-%d %H:%M:%S', true) }} + + - action: input_datetime.set_datetime + target: + entity_id: input_datetime.lounge_blinds_next_close_time + data: + datetime: > + {{ next_sunset_timestamp | timestamp_custom('%Y-%m-%d %H:%M:%S', true) }} + + lounge_blinds_run_sequence: + alias: Lounge Blinds - Run Open/Close Sequence + mode: queued + fields: + blind_action: + name: Blind Action + description: Use open or close. + required: true + selector: + select: + options: + - open + - close + + sequence: + - variables: + blind_list: + - cover.lounge_blind_a_xbl11 + - cover.lounge_blind_b_xbl12 + - cover.lounge_blind_c_xbl13 + + command_repeats: > + {{ states('input_number.lounge_blinds_command_repeats') | int(2) }} + + retry_delay_seconds: > + {{ states('input_number.lounge_blinds_retry_delay_seconds') | int(10) }} + + per_blind_delay_seconds: > + {{ states('input_number.lounge_blinds_per_blind_delay_seconds') | int(2) }} + + - repeat: + count: "{{ command_repeats }}" + sequence: + - choose: + - conditions: + - condition: template + value_template: "{{ blind_action == 'open' }}" + sequence: + - repeat: + for_each: "{{ blind_list }}" + sequence: + - action: cover.open_cover + target: + entity_id: "{{ repeat.item }}" + + - delay: + seconds: "{{ per_blind_delay_seconds }}" + + - conditions: + - condition: template + value_template: "{{ blind_action == 'close' }}" + sequence: + - repeat: + for_each: "{{ blind_list | reverse | list }}" + sequence: + - action: cover.close_cover + target: + entity_id: "{{ repeat.item }}" + + - delay: + seconds: "{{ per_blind_delay_seconds }}" + + - if: + - condition: template + value_template: "{{ repeat.index < command_repeats }}" + then: + - delay: + seconds: "{{ retry_delay_seconds }}" + + - action: script.lounge_blinds_sync_status + + lounge_blinds_sync_status: + alias: Lounge Blinds - Sync Status + mode: queued + sequence: + - variables: + blind_list: + - cover.lounge_blind_a_xbl11 + - cover.lounge_blind_b_xbl12 + - cover.lounge_blind_c_xbl13 + + blind_states: > + {{ expand(blind_list) | map(attribute='state') | list }} + + all_blinds_closed: > + {{ blind_states | select('eq', 'closed') | list | count == blind_list | count }} + + all_blinds_open: > + {{ blind_states | select('eq', 'open') | list | count == blind_list | count }} + + - choose: + - conditions: + - condition: template + value_template: > + {{ all_blinds_closed and is_state('input_boolean.lounge_blinds', 'off') }} + sequence: + - action: input_boolean.turn_on + target: + entity_id: input_boolean.lounge_blinds + + - conditions: + - condition: template + value_template: > + {{ all_blinds_open and is_state('input_boolean.lounge_blinds', 'on') }} + sequence: + - action: input_boolean.turn_off + target: + entity_id: input_boolean.lounge_blinds + +automation: + - id: lounge_blinds_update_sun_times + alias: Lounge Blinds - Update Sun Times + mode: restart + trigger: + - platform: homeassistant + event: start + + - platform: time + at: "00:05:00" + + - platform: state + entity_id: + - input_number.lounge_blinds_sunrise_offset_minutes + - input_number.lounge_blinds_sunset_offset_minutes + + action: + - action: script.lounge_blinds_update_sun_times + + - id: lounge_blinds_open_at_sunrise + alias: Lounge Blinds - Open At Sunrise + mode: single + trigger: + - platform: time + at: input_datetime.lounge_blinds_next_open_time + + action: + - action: script.lounge_blinds_run_sequence + data: + blind_action: open + + - id: lounge_blinds_close_at_sunset + alias: Lounge Blinds - Close At Sunset + mode: single + trigger: + - platform: time + at: input_datetime.lounge_blinds_next_close_time + + action: + - action: script.lounge_blinds_run_sequence + data: + blind_action: close + + - id: lounge_blinds_control_from_input_boolean + alias: Lounge Blinds - Control From Input Boolean + mode: restart + trigger: + - platform: state + entity_id: input_boolean.lounge_blinds + to: "on" + + - platform: state + entity_id: input_boolean.lounge_blinds + to: "off" + + action: + - variables: + blind_list: + - cover.lounge_blind_a_xbl11 + - cover.lounge_blind_b_xbl12 + - cover.lounge_blind_c_xbl13 + + blind_states: > + {{ expand(blind_list) | map(attribute='state') | list }} + + all_blinds_closed: > + {{ blind_states | select('eq', 'closed') | list | count == blind_list | count }} + + all_blinds_open: > + {{ blind_states | select('eq', 'open') | list | count == blind_list | count }} + + - choose: + - conditions: + - condition: state + entity_id: input_boolean.lounge_blinds + state: "on" + + - condition: template + value_template: "{{ not all_blinds_closed }}" + sequence: + - action: script.lounge_blinds_run_sequence + data: + blind_action: close + + - conditions: + - condition: state + entity_id: input_boolean.lounge_blinds + state: "off" + + - condition: template + value_template: "{{ not all_blinds_open }}" + sequence: + - action: script.lounge_blinds_run_sequence + data: + blind_action: open + + - id: lounge_blinds_sync_input_boolean_from_cover_states + alias: Lounge Blinds - Sync Input Boolean From Cover States + mode: restart + trigger: + - platform: homeassistant + event: start + + - platform: state + entity_id: + - cover.lounge_blind_a_xbl11 + - cover.lounge_blind_b_xbl12 + - cover.lounge_blind_c_xbl13 + to: "open" + + - platform: state + entity_id: + - cover.lounge_blind_a_xbl11 + - cover.lounge_blind_b_xbl12 + - cover.lounge_blind_c_xbl13 + to: "closed" + + action: + - action: script.lounge_blinds_sync_status diff --git a/packages/lounge_lighting_scenes.yaml b/packages/lounge_lighting_scenes.yaml index 2e06baa..38f843e 100644 --- a/packages/lounge_lighting_scenes.yaml +++ b/packages/lounge_lighting_scenes.yaml @@ -46,8 +46,10 @@ input_select: - "Select Scene:" - Bright - TV General + - Balanced - Movie - Reading On/Off + - Dining On/Off - Night Light - Warm Cozy - All Off @@ -106,6 +108,7 @@ script: excluded_scenes: - "Select Scene:" - "Reading On/Off" + - "Dining On/Off" #- "Night Light" ##################################################################### @@ -120,18 +123,20 @@ script: light.esp_lounge6chdimmer_lounge_downlights_centre: 100 light.esp_lounge6chdimmer_lounge_downlights_south: 100 light.esp_lounge6chdimmer_lounge_rafter_buttons: 100 - switch.esp_loungemiddleswitch_relay_3_downlights_north: "on" + #switch.esp_loungemiddleswitch_relay_3_downlights_north: "on" + switch.lounge_nspanel_touchscreen_lounge_stair_downlights: "on" # non dimmable pair light.esp_breakfastbarleds_breakfast_bar_leds: 90 light.esp_loungecabinetleds2_lounge_cabinet_leds: 90 light.esp_loungebookshelfleds_lounge_bookshelf_leds: 90 switch.lounge_cupboard_dual_usb_xus09_l2: "on" switch.esp_loungesouthleftswitch_relay_1_wall_washer_left: "on" switch.esp_loungesouthrightswitch_relay_2_wall_washer_right: "on" - switch.tasmo_ks811t_0702_lounge_3c: "on" + #switch.tasmo_ks811t_0702_lounge_3c: "on" #switch.esp_loungenorthswitch_relay_1_main_lights: "on" number.esp_loungepelmetleds2_lounge_pelmet_leds_a_output_set_0_100: 100 number.esp_loungepelmetleds2_lounge_pelmet_leds_b_output_set_0_100: 100 input_number.openhasp_1_backlight_level: 255 + number.lounge_nspanel_touchscreen_display_brightness: 100 TV General: light.esp_lounge6chdimmer_couch_spots_left: 60 @@ -143,7 +148,8 @@ script: light.esp_breakfastbarleds_breakfast_bar_leds: 60 light.esp_loungecabinetleds2_lounge_cabinet_leds: 60 light.esp_loungebookshelfleds_lounge_bookshelf_leds: 60 - switch.esp_loungemiddleswitch_relay_3_downlights_north: "off" # non-dimmable pair + #switch.esp_loungemiddleswitch_relay_3_downlights_north: "off" # non-dimmable pair + switch.lounge_nspanel_touchscreen_lounge_stair_downlights: "off" # non dimmable pair switch.lounge_cupboard_dual_usb_xus09_l2: "on" switch.esp_loungesouthleftswitch_relay_1_wall_washer_left: "off" switch.esp_loungesouthrightswitch_relay_2_wall_washer_right: "off" @@ -151,6 +157,28 @@ script: number.esp_loungepelmetleds2_lounge_pelmet_leds_a_output_set_0_100: 60 number.esp_loungepelmetleds2_lounge_pelmet_leds_b_output_set_0_100: 60 input_number.openhasp_1_backlight_level: 120 + number.lounge_nspanel_touchscreen_display_brightness: 80 + + Balanced: + light.esp_lounge6chdimmer_couch_spots_left: 40 + light.esp_lounge6chdimmer_couch_spots_right: 40 + #light.esp_lounge6chdimmer_dining_table_light: 100 + light.esp_lounge6chdimmer_lounge_downlights_centre: 40 + light.esp_lounge6chdimmer_lounge_downlights_south: 40 + light.esp_lounge6chdimmer_lounge_rafter_buttons: 30 + light.esp_breakfastbarleds_breakfast_bar_leds: 50 + light.esp_loungecabinetleds2_lounge_cabinet_leds: 50 + light.esp_loungebookshelfleds_lounge_bookshelf_leds: 50 + #switch.esp_loungemiddleswitch_relay_3_downlights_north: "off" # non-dimmable pair + switch.lounge_nspanel_touchscreen_lounge_stair_downlights: "off" # non dimmable pair + switch.lounge_cupboard_dual_usb_xus09_l2: "on" + switch.esp_loungesouthleftswitch_relay_1_wall_washer_left: "off" + switch.esp_loungesouthrightswitch_relay_2_wall_washer_right: "off" + #switch.esp_loungenorthswitch_relay_1_main_lights: "on" + number.esp_loungepelmetleds2_lounge_pelmet_leds_a_output_set_0_100: 50 + number.esp_loungepelmetleds2_lounge_pelmet_leds_b_output_set_0_100: 50 + input_number.openhasp_1_backlight_level: 100 + number.lounge_nspanel_touchscreen_display_brightness: 80 Movie: light.esp_lounge6chdimmer_couch_spots_left: 20 @@ -162,7 +190,8 @@ script: light.esp_breakfastbarleds_breakfast_bar_leds: 40 light.esp_loungecabinetleds2_lounge_cabinet_leds: 40 light.esp_loungebookshelfleds_lounge_bookshelf_leds: 40 - switch.esp_loungemiddleswitch_relay_3_downlights_north: "off" + #switch.esp_loungemiddleswitch_relay_3_downlights_north: "off" + switch.lounge_nspanel_touchscreen_lounge_stair_downlights: "off" # non dimmable pair switch.lounge_cupboard_dual_usb_xus09_l2: "on" switch.esp_loungesouthleftswitch_relay_1_wall_washer_left: "off" switch.esp_loungesouthrightswitch_relay_2_wall_washer_right: "off" @@ -170,6 +199,17 @@ script: number.esp_loungepelmetleds2_lounge_pelmet_leds_a_output_set_0_100: 40 number.esp_loungepelmetleds2_lounge_pelmet_leds_b_output_set_0_100: 40 input_number.openhasp_1_backlight_level: 15 + switch.esp_mainkitchenlights_relay_1_main_lights: "off" + switch.esp_mainkitchenlights_relay_2_benchtop_lights: "off" + number.lounge_nspanel_touchscreen_display_brightness: 40 + + Dining On/Off: + light.esp_lounge6chdimmer_dining_table_light: "toggle_100" + #light.esp_lounge6chdimmer_dining_table_light: 60 + #light.esp_lounge6chdimmer_lounge_downlights_centre: 45 + #light.esp_lounge6chdimmer_lounge_downlights_south: 35 + #light.esp_lounge6chdimmer_lounge_rafter_buttons: 20 + #switch.tasmo_ks811t_0702_lounge_3c: "on" Reading On/Off: light.esp_lounge6chdimmer_couch_spots_left: "toggle_75" @@ -190,14 +230,16 @@ script: light.esp_breakfastbarleds_breakfast_bar_leds: 5 light.esp_loungecabinetleds2_lounge_cabinet_leds: 5 light.esp_loungebookshelfleds_lounge_bookshelf_leds: 5 - switch.esp_loungemiddleswitch_relay_3_downlights_north: "off" + #switch.esp_loungemiddleswitch_relay_3_downlights_north: "off" + switch.lounge_nspanel_touchscreen_lounge_stair_downlights: "off" # non dimmable pair switch.lounge_cupboard_dual_usb_xus09_l2: "off" switch.esp_loungesouthleftswitch_relay_1_wall_washer_left: "off" switch.esp_loungesouthrightswitch_relay_2_wall_washer_right: "off" #switch.esp_loungenorthswitch_relay_1_main_lights: "on" number.esp_loungepelmetleds2_lounge_pelmet_leds_a_output_set_0_100: 5 number.esp_loungepelmetleds2_lounge_pelmet_leds_b_output_set_0_100: 5 - input_number.openhasp_1_backlight_level: 8 + input_number.openhasp_1_backlight_level: 10 + number.lounge_nspanel_touchscreen_display_brightness: 30 Warm Cozy: light.esp_lounge6chdimmer_couch_spots_left: 20 @@ -206,8 +248,9 @@ script: light.esp_breakfastbarleds_breakfast_bar_leds: 25 light.esp_loungecabinetleds2_lounge_cabinet_leds: 30 light.esp_loungebookshelfleds_lounge_bookshelf_leds: 30 - light.tasmo_h801_loungeled1_6180_a: 25 - light.tasmo_h801_loungeled1_6180_b: 25 + #light.tasmo_h801_loungeled1_6180_a: 25 + #light.tasmo_h801_loungeled1_6180_b: 25 + switch.lounge_nspanel_touchscreen_lounge_stair_downlights: "off" # non dimmable pair switch.lounge_cupboard_dual_usb_xus09_l2: "on" switch.esp_loungesouthleftswitch_relay_1_wall_washer_left: "on" switch.esp_loungesouthrightswitch_relay_2_wall_washer_right: "on" @@ -215,6 +258,7 @@ script: number.esp_loungepelmetleds2_lounge_pelmet_leds_a_output_set_0_100: 20 number.esp_loungepelmetleds2_lounge_pelmet_leds_b_output_set_0_100: 20 input_number.openhasp_1_backlight_level: 12 + number.lounge_nspanel_touchscreen_display_brightness: 40 All Off: light.esp_lounge6chdimmer_couch_spots_left: 0 @@ -223,7 +267,8 @@ script: light.esp_lounge6chdimmer_lounge_downlights_centre: 0 light.esp_lounge6chdimmer_lounge_downlights_south: 0 light.esp_lounge6chdimmer_lounge_rafter_buttons: 0 - switch.esp_loungemiddleswitch_relay_3_downlights_north: "off" + #switch.esp_loungemiddleswitch_relay_3_downlights_north: "off" + switch.lounge_nspanel_touchscreen_lounge_stair_downlights: "off" # non dimmable pair light.esp_breakfastbarleds_breakfast_bar_leds: 0 light.esp_loungecabinetleds2_lounge_cabinet_leds: 0 light.esp_loungebookshelfleds_lounge_bookshelf_leds: 0 @@ -234,6 +279,9 @@ script: number.esp_loungepelmetleds2_lounge_pelmet_leds_a_output_set_0_100: 0 number.esp_loungepelmetleds2_lounge_pelmet_leds_b_output_set_0_100: 0 #input_number.openhasp_1_backlight_level: 100 + #switch.esp_mainkitchenlights_relay_1_main_lights: "off" + #switch.esp_mainkitchenlights_relay_2_benchtop_lights: "off" + number.lounge_nspanel_touchscreen_display_brightness: 80 ######################################################################### # REMEMBER LAST SCENE diff --git a/packages/ms_teams_status.yaml.old b/packages/ms_teams_status.yaml.old deleted file mode 100644 index 4c3b4ba..0000000 --- a/packages/ms_teams_status.yaml.old +++ /dev/null @@ -1,20 +0,0 @@ -input_text: - teams_status: - name: Microsoft Teams status - icon: mdi:microsoft-teams - teams_activity: - name: Microsoft Teams activity - icon: mdi:phone-off - -sensor: - - platform: template - sensors: - teams_status: - friendly_name: "Microsoft Teams status" - value_template: "{{states('input_text.teams_status')}}" - icon_template: "{{state_attr('input_text.teams_status','icon')}}" - unique_id: sensor.teams_status - teams_activity: - friendly_name: "Microsoft Teams activity" - value_template: "{{states('input_text.teams_activity')}}" - unique_id: sensor.teams_activity diff --git a/packages/nspanel_keepawake.yaml b/packages/nspanel_keepawake.yaml deleted file mode 100644 index 7770edc..0000000 --- a/packages/nspanel_keepawake.yaml +++ /dev/null @@ -1,23 +0,0 @@ -template: - - light: - - name: "Inverted Quiet time as light" - unique_id: inverted_quiet_time_as_light - state: "{{ is_state('input_boolean.quiet_time', 'off') }}" - turn_on: - - service: light.turn_on - target: - entity_id: light.inverted_quiet_time_light - turn_off: - - service: light.turn_off - target: - entity_id: light.inverted_quiet_time_light - -light: - - platform: group - name: "Entities to keep NSPanel Awake" - unique_id: entities_to_keep_nspanel_awake - entities: - - light.inverted_quiet_time_as_light_2 - - light.master_bedroom_bedside_lamp_arlec_bulb_master_bedroom_bedside_lamp_arlec_bulb - - light.tasmo_ifan02_3793_bedrm1_1 - - light.tasmo_ks811t_3647_bedrm1_1b diff --git a/packages/nspanel_lounge_controller.yaml b/packages/nspanel_lounge_controller.yaml new file mode 100644 index 0000000..2bde278 --- /dev/null +++ b/packages/nspanel_lounge_controller.yaml @@ -0,0 +1,732 @@ +# yaml-language-server: $schema=null +#:########################################################################################:# +# TITLE: NSPANEL LOUNGE CONTROLLER +# zorruno.com Home Assistant package +#:########################################################################################:# +# VERSIONS: +# V1.5 2026-05-19 +# - Added Reading button brightness display. +# - Reading brightness is shown as the highest brightness percentage of either +# couch spot light. +# - Changed Balanced button icon to mdi:scale / \uE472. +# - Added startup panel page refresh before full button state refresh. +# +# V1.4 2026-05-19 +# - Changed button highlighting to targeted updates. +# - Remembered scene changes update only the old scene button and new scene button. +# - Reading/Dining changes update only the Reading and Dining buttons. +# - Full refresh is only used at HA start or when manually called. +# - ON icon colour is black [0, 0, 0]. +# - OFF icon colour is white [255, 255, 255]. +# +# V1.3 2026-05-19 +# - Tested page refresh method, but it did not reliably refresh remembered scenes. +# +# V1.2 2026-05-19 +# - Added explicit NSPanel button refresh actions using esphome.esp_nspanel2lounge_button. +# - Button states were pushed to the NSPanel when lounge_last_scene or the +# Reading/Dining light states changed. +# +# V1.1 2026-05-18 +# - Added template switches so remembered lighting scenes can stay highlighted +# on the NSPanel button page. +# - Updated Blueprint button entities from script.* to switch.*. +# +# V1.0 2026-05-18 +# - Initial NSPanel Lounge Controller package using NSPanel Easy Blueprint. +#:########################################################################################:# +# PURPOSE: +# - Configures the Lounge NSPanel Easy button page. +# - Provides Home Assistant script wrappers for lounge lighting scene actions. +# - Provides template switches for NSPanel button state/highlighting. +# - Pushes targeted NSPanel button highlight updates when relevant states change. +#:########################################################################################:# +# OPERATION NOTES: +# - The NSPanel display is configured by the NSPanel Easy Blueprint automation. +# - The screen buttons point to switch.nspanel_lounge_scene_* entities. +# - Remembered scenes are highlighted from input_text.lounge_last_scene. +# - Reading On/Off is highlighted from either couch spot light being on. +# - Reading On/Off shows the highest couch spot brightness percentage. +# - Dining On/Off is highlighted from the dining table light being on. +# - Pressing any NSPanel touch button activates the assigned scene/action. +# - Normal remembered scene transitions update only: +# a) the previous remembered scene button to OFF +# b) the new remembered scene button to ON +#:########################################################################################:# +# DEPENDENCIES: +# - script.lounge_set_scene +# - input_text.lounge_last_scene +# - light.esp_lounge6chdimmer_couch_spots_left +# - light.esp_lounge6chdimmer_couch_spots_right +# - light.esp_lounge6chdimmer_dining_table_light +# - NSPanel Easy Blueprint: +# edwardtfn/nspanel_easy_blueprint.yaml +# - ESPHome actions: +# esphome.esp_nspanel2lounge_button +# esphome.esp_nspanel2lounge_command +#:########################################################################################:# +# NOTES: +# - This is Home Assistant package YAML, not ESPHome YAML. +# - The nspanel_name value is the Home Assistant device ID selected by the +# Blueprint dropdown. Do not replace it with an entity_id or ESPHome hostname. +# - The icon values used by esphome.esp_nspanel2lounge_button are HASP/Nextion +# icon codepoints, not mdi: icon names. +#:########################################################################################:# + +#:########################################################################################:# +# AUTOMATIONS +#:########################################################################################:# + +automation: + #:######################################################################################:# + # AUTOMATION: NSPanel Easy Blueprint Instance + #:######################################################################################:# + - id: nspanel_lounge_controller + alias: "NSPanel Lounge Controller" + description: "NSPanel Easy configuration for the lounge lighting scene panel." + use_blueprint: + path: edwardtfn/nspanel_easy_blueprint.yaml + input: + nspanel_name: 369e58c3779ff3dd9a0b4c59fadeac4f + + ######################################################################## + # BUTTON PAGE 01: Lounge Lighting Scenes + ######################################################################## + button_page01_label: Lounge Lighting Scenes + button_pages_icon_size: "10" + + entity01: switch.nspanel_lounge_scene_bright + entity01_name: "Bright" + entity01_icon: mdi:brightness-7 + entity01_confirm: false + + entity02: switch.nspanel_lounge_scene_tv_general + entity02_name: "TV General" + entity02_icon: mdi:television + entity02_confirm: false + + entity03: switch.nspanel_lounge_scene_movie + entity03_name: "Movie" + entity03_icon: mdi:movie-open + entity03_confirm: false + + entity04: switch.nspanel_lounge_scene_balanced + entity04_name: "Balance" + entity04_icon: mdi:scale + entity04_confirm: false + + entity05: switch.nspanel_lounge_scene_warm_cozy + entity05_name: "Warm Cozy" + entity05_icon: mdi:fireplace + entity05_confirm: false + + entity06: switch.nspanel_lounge_scene_reading + entity06_name: "Reading On/Off" + entity06_icon: mdi:book-open-page-variant + entity06_confirm: false + + entity07: switch.nspanel_lounge_scene_dining + entity07_name: "Dining On/Off" + entity07_icon: mdi:silverware-fork-knife + entity07_confirm: false + + entity08: switch.nspanel_lounge_scene_all_off + entity08_name: "All Off" + entity08_icon: mdi:power + entity08_confirm: false + mode: single + + #:######################################################################################:# + # AUTOMATION: Refresh Remembered Scene Button Highlights + # + # Only updates the previous remembered scene button and the new remembered + # scene button when input_text.lounge_last_scene changes. + #:######################################################################################:# + - id: nspanel_lounge_refresh_remembered_scene_buttons + alias: "NSPanel Lounge - Refresh Remembered Scene Buttons" + description: "Update only the old and new remembered scene buttons on the NSPanel." + mode: restart + trigger: + - platform: state + entity_id: input_text.lounge_last_scene + + action: + - delay: + milliseconds: 500 + + - variables: + old_scene: "{{ trigger.from_state.state if trigger.from_state is not none else '' }}" + new_scene: "{{ trigger.to_state.state if trigger.to_state is not none else states('input_text.lounge_last_scene') }}" + remembered_scenes: + - "Bright" + - "TV General" + - "Balanced" + - "Movie" + - "Warm Cozy" + - "All Off" + + - choose: + - conditions: "{{ old_scene in remembered_scenes and old_scene != new_scene }}" + sequence: + - action: script.nspanel_lounge_push_scene_button_state + data: + scene_name: "{{ old_scene }}" + button_state: false + + - delay: + milliseconds: 100 + + - choose: + - conditions: "{{ new_scene in remembered_scenes }}" + sequence: + - action: script.nspanel_lounge_push_scene_button_state + data: + scene_name: "{{ new_scene }}" + button_state: true + + #:######################################################################################:# + # AUTOMATION: Refresh Reading And Dining Button Highlights + # + # Reading/Dining are toggle/action scenes, so they are updated from the real + # light states rather than input_text.lounge_last_scene. + #:######################################################################################:# + - id: nspanel_lounge_refresh_toggle_scene_buttons + alias: "NSPanel Lounge - Refresh Toggle Scene Buttons" + description: "Update Reading and Dining buttons when their lights change." + mode: restart + trigger: + - platform: state + entity_id: + - light.esp_lounge6chdimmer_couch_spots_left + - light.esp_lounge6chdimmer_couch_spots_right + - light.esp_lounge6chdimmer_dining_table_light + + - platform: state + entity_id: + - light.esp_lounge6chdimmer_couch_spots_left + - light.esp_lounge6chdimmer_couch_spots_right + - light.esp_lounge6chdimmer_dining_table_light + attribute: brightness + + action: + - delay: + milliseconds: 500 + + - action: script.nspanel_lounge_push_scene_button_state + data: + scene_name: "Reading On/Off" + button_state: >- + {{ + ( + is_state('light.esp_lounge6chdimmer_couch_spots_left', 'on') + and (state_attr('light.esp_lounge6chdimmer_couch_spots_left', 'brightness') | int(0)) > 0 + ) + or + ( + is_state('light.esp_lounge6chdimmer_couch_spots_right', 'on') + and (state_attr('light.esp_lounge6chdimmer_couch_spots_right', 'brightness') | int(0)) > 0 + ) + }} + + - delay: + milliseconds: 100 + + - action: script.nspanel_lounge_push_scene_button_state + data: + scene_name: "Dining On/Off" + button_state: >- + {{ + is_state('light.esp_lounge6chdimmer_dining_table_light', 'on') + and (state_attr('light.esp_lounge6chdimmer_dining_table_light', 'brightness') | int(0)) > 0 + }} + + #:######################################################################################:# + # AUTOMATION: Initial NSPanel Button Refresh + # + # Full refresh happens when HA starts, or when the NSPanel comes back online. + # Normal scene changes update only the required buttons. + #:######################################################################################:# + - id: nspanel_lounge_refresh_all_buttons_on_start + alias: "NSPanel Lounge - Refresh All Buttons On Start" + description: "Refresh all NSPanel lounge buttons when HA starts or the panel reconnects." + mode: restart + trigger: + - platform: homeassistant + event: start + + - platform: state + entity_id: number.lounge_nspanel_touchscreen_display_brightness + from: "unavailable" + + - platform: state + entity_id: number.lounge_nspanel_touchscreen_display_brightness + from: "unknown" + + action: + - delay: + seconds: 20 + + - action: esphome.esp_nspanel2lounge_command + data: + cmd: "page buttonpage01" + + - delay: + seconds: 1 + + - action: script.nspanel_lounge_refresh_all_button_states + +#:########################################################################################:# +# SCRIPTS +#:########################################################################################:# + +script: + #:######################################################################################:# + # SCRIPTS: NSPanel Lounge Scene Button Actions + #:######################################################################################:# + nspanel_lounge_scene_bright: + alias: "NSPanel Lounge Scene - Bright" + mode: single + sequence: + - action: script.lounge_set_scene + data: + scene_name: "Bright" + + nspanel_lounge_scene_tv_general: + alias: "NSPanel Lounge Scene - TV General" + mode: single + sequence: + - action: script.lounge_set_scene + data: + scene_name: "TV General" + + nspanel_lounge_scene_movie: + alias: "NSPanel Lounge Scene - Movie" + mode: single + sequence: + - action: script.lounge_set_scene + data: + scene_name: "Movie" + + nspanel_lounge_scene_balanced: + alias: "NSPanel Lounge Scene - Balanced" + mode: single + sequence: + - action: script.lounge_set_scene + data: + scene_name: "Balanced" + + nspanel_lounge_scene_warm_cozy: + alias: "NSPanel Lounge Scene - Warm Cozy" + mode: single + sequence: + - action: script.lounge_set_scene + data: + scene_name: "Warm Cozy" + + nspanel_lounge_scene_reading: + alias: "NSPanel Lounge Scene - Reading" + mode: single + sequence: + - action: script.lounge_set_scene + data: + scene_name: "Reading On/Off" + + nspanel_lounge_scene_dining: + alias: "NSPanel Lounge Scene - Dining" + mode: single + sequence: + - action: script.lounge_set_scene + data: + scene_name: "Dining On/Off" + + nspanel_lounge_scene_all_off: + alias: "NSPanel Lounge Scene - All Off" + mode: single + sequence: + - action: script.lounge_set_scene + data: + scene_name: "All Off" + + #:######################################################################################:# + # SCRIPT: Push One NSPanel Button State + # + # ON state: + # - Button highlighted + # - Icon colour black [0, 0, 0] + # + # OFF state: + # - Button not highlighted + # - Icon colour white [255, 255, 255] + #:######################################################################################:# + nspanel_lounge_push_button_state: + alias: "NSPanel Lounge - Push Button State" + mode: queued + max: 20 + fields: + button_id: + description: "NSPanel button id, for example button01" + button_state: + description: "True for highlighted, false for normal" + icon_code: + description: "HASwitchPlate/Nextion icon codepoint" + button_label: + description: "Button label text" + button_bri: + description: "Optional brightness/value text shown on the NSPanel button" + sequence: + - variables: + button_is_on: >- + {{ + button_state in [true, 'true', 'True', 'on', 'On', '1', 1] + }} + button_bri_text: "{{ button_bri if button_bri is defined else '' }}" + + - choose: + - conditions: "{{ button_is_on }}" + sequence: + - action: esphome.esp_nspanel2lounge_button + data: + page: buttonpage01 + id: "{{ button_id }}" + state: true + icon: "{{ icon_code }}" + icon_color: + - 0 + - 0 + - 0 + icon_font: 10 + bri: "{{ button_bri_text }}" + label: "{{ button_label }}" + is_page_render: false + + default: + - action: esphome.esp_nspanel2lounge_button + data: + page: buttonpage01 + id: "{{ button_id }}" + state: false + icon: "{{ icon_code }}" + icon_color: + - 255 + - 255 + - 255 + icon_font: 10 + bri: "{{ button_bri_text }}" + label: "{{ button_label }}" + is_page_render: false + + #:######################################################################################:# + # SCRIPT: Push One Scene Button State + # + # Maps scene/action names to NSPanel button ids, labels and icon codepoints. + #:######################################################################################:# + nspanel_lounge_push_scene_button_state: + alias: "NSPanel Lounge - Push Scene Button State" + mode: queued + max: 20 + fields: + scene_name: + description: "Lounge scene/action name" + button_state: + description: "True for highlighted, false for normal" + sequence: + - choose: + - conditions: "{{ scene_name == 'Bright' }}" + sequence: + - action: script.nspanel_lounge_push_button_state + data: + button_id: button01 + button_state: "{{ button_state }}" + icon_code: "\uE0E0" + button_label: "Bright" + button_bri: "" + + - conditions: "{{ scene_name == 'TV General' }}" + sequence: + - action: script.nspanel_lounge_push_button_state + data: + button_id: button02 + button_state: "{{ button_state }}" + icon_code: "\uE502" + button_label: "TV General" + button_bri: "" + + - conditions: "{{ scene_name == 'Movie' }}" + sequence: + - action: script.nspanel_lounge_push_button_state + data: + button_id: button03 + button_state: "{{ button_state }}" + icon_code: "\uEFCE" + button_label: "Movie" + button_bri: "" + + - conditions: "{{ scene_name == 'Balanced' }}" + sequence: + - action: script.nspanel_lounge_push_button_state + data: + button_id: button04 + button_state: "{{ button_state }}" + icon_code: "\uE472" + button_label: "Balance" + button_bri: "" + + - conditions: "{{ scene_name == 'Warm Cozy' }}" + sequence: + - action: script.nspanel_lounge_push_button_state + data: + button_id: button05 + button_state: "{{ button_state }}" + icon_code: "\uEE2E" + button_label: "Warm Cozy" + button_bri: "" + + - conditions: "{{ scene_name == 'Reading On/Off' }}" + sequence: + - action: script.nspanel_lounge_push_button_state + data: + button_id: button06 + button_state: "{{ button_state }}" + icon_code: "\uE5DA" + button_label: "Reading On/Off" + button_bri: >- + {% set left_on = is_state('light.esp_lounge6chdimmer_couch_spots_left', 'on') %} + {% set right_on = is_state('light.esp_lounge6chdimmer_couch_spots_right', 'on') %} + {% set left_raw = state_attr('light.esp_lounge6chdimmer_couch_spots_left', 'brightness') | int(0) if left_on else 0 %} + {% set right_raw = state_attr('light.esp_lounge6chdimmer_couch_spots_right', 'brightness') | int(0) if right_on else 0 %} + {% set left_pct = ((left_raw / 255) * 100) | round(0) | int %} + {% set right_pct = ((right_raw / 255) * 100) | round(0) | int %} + {% set reading_pct = [left_pct, right_pct] | max %} + {% if reading_pct > 0 %}{{ reading_pct }}%{% else %}{% endif %} + + - conditions: "{{ scene_name == 'Dining On/Off' }}" + sequence: + - action: script.nspanel_lounge_push_button_state + data: + button_id: button07 + button_state: "{{ button_state }}" + icon_code: "\uEA70" + button_label: "Dining On/Off" + button_bri: "" + + - conditions: "{{ scene_name == 'All Off' }}" + sequence: + - action: script.nspanel_lounge_push_button_state + data: + button_id: button08 + button_state: "{{ button_state }}" + icon_code: "\uE425" + button_label: "All Off" + button_bri: "" + + #:######################################################################################:# + # SCRIPT: Refresh All NSPanel Lounge Button States + # + # Use this manually after a panel restart, or automatically once at HA start. + # Normal scene changes do not call this script. + #:######################################################################################:# + nspanel_lounge_refresh_all_button_states: + alias: "NSPanel Lounge - Refresh All Button States" + mode: restart + sequence: + - action: script.nspanel_lounge_push_scene_button_state + data: + scene_name: "Bright" + button_state: "{{ is_state('switch.nspanel_lounge_scene_bright', 'on') }}" + + - delay: + milliseconds: 100 + + - action: script.nspanel_lounge_push_scene_button_state + data: + scene_name: "TV General" + button_state: "{{ is_state('switch.nspanel_lounge_scene_tv_general', 'on') }}" + + - delay: + milliseconds: 100 + + - action: script.nspanel_lounge_push_scene_button_state + data: + scene_name: "Movie" + button_state: "{{ is_state('switch.nspanel_lounge_scene_movie', 'on') }}" + + - delay: + milliseconds: 100 + + - action: script.nspanel_lounge_push_scene_button_state + data: + scene_name: "Balanced" + button_state: "{{ is_state('switch.nspanel_lounge_scene_balanced', 'on') }}" + + - delay: + milliseconds: 100 + + - action: script.nspanel_lounge_push_scene_button_state + data: + scene_name: "Warm Cozy" + button_state: "{{ is_state('switch.nspanel_lounge_scene_warm_cozy', 'on') }}" + + - delay: + milliseconds: 100 + + - action: script.nspanel_lounge_push_scene_button_state + data: + scene_name: "Reading On/Off" + button_state: "{{ is_state('switch.nspanel_lounge_scene_reading', 'on') }}" + + - delay: + milliseconds: 100 + + - action: script.nspanel_lounge_push_scene_button_state + data: + scene_name: "Dining On/Off" + button_state: "{{ is_state('switch.nspanel_lounge_scene_dining', 'on') }}" + + - delay: + milliseconds: 100 + + - action: script.nspanel_lounge_push_scene_button_state + data: + scene_name: "All Off" + button_state: "{{ is_state('switch.nspanel_lounge_scene_all_off', 'on') }}" + + #:######################################################################################:# + # SCRIPT: Compatibility Wrapper + # + # Older versions used this script name. Keep it as a manual full refresh. + #:######################################################################################:# + nspanel_lounge_refresh_button_states: + alias: "NSPanel Lounge - Refresh Button States" + mode: restart + sequence: + - action: script.nspanel_lounge_refresh_all_button_states + +#:########################################################################################:# +# TEMPLATE SWITCHES: NSPANEL BUTTON STATE AND HIGHLIGHTING +#:########################################################################################:# + +template: + - switch: + ########################################################################## + # Remembered scenes + # These switches stay on when input_text.lounge_last_scene matches the + # last remembered scene name. This allows the NSPanel button to remain + # highlighted for the selected remembered scene. + ########################################################################## + + - name: "NSPanel Lounge Scene Bright" + unique_id: nspanel_lounge_scene_switch_bright + state: "{{ is_state('input_text.lounge_last_scene', 'Bright') }}" + turn_on: + - action: script.lounge_set_scene + data: + scene_name: "Bright" + turn_off: + - action: script.lounge_set_scene + data: + scene_name: "Bright" + + - name: "NSPanel Lounge Scene TV General" + unique_id: nspanel_lounge_scene_switch_tv_general + state: "{{ is_state('input_text.lounge_last_scene', 'TV General') }}" + turn_on: + - action: script.lounge_set_scene + data: + scene_name: "TV General" + turn_off: + - action: script.lounge_set_scene + data: + scene_name: "TV General" + + - name: "NSPanel Lounge Scene Balanced" + unique_id: nspanel_lounge_scene_switch_balanced + state: "{{ is_state('input_text.lounge_last_scene', 'Balanced') }}" + turn_on: + - action: script.lounge_set_scene + data: + scene_name: "Balanced" + turn_off: + - action: script.lounge_set_scene + data: + scene_name: "Balanced" + + - name: "NSPanel Lounge Scene Movie" + unique_id: nspanel_lounge_scene_switch_movie + state: "{{ is_state('input_text.lounge_last_scene', 'Movie') }}" + turn_on: + - action: script.lounge_set_scene + data: + scene_name: "Movie" + turn_off: + - action: script.lounge_set_scene + data: + scene_name: "Movie" + + - name: "NSPanel Lounge Scene Warm Cozy" + unique_id: nspanel_lounge_scene_switch_warm_cozy + state: "{{ is_state('input_text.lounge_last_scene', 'Warm Cozy') }}" + turn_on: + - action: script.lounge_set_scene + data: + scene_name: "Warm Cozy" + turn_off: + - action: script.lounge_set_scene + data: + scene_name: "Warm Cozy" + + - name: "NSPanel Lounge Scene All Off" + unique_id: nspanel_lounge_scene_switch_all_off + state: "{{ is_state('input_text.lounge_last_scene', 'All Off') }}" + turn_on: + - action: script.lounge_set_scene + data: + scene_name: "All Off" + turn_off: + - action: script.lounge_set_scene + data: + scene_name: "All Off" + + ########################################################################## + # Toggle/action scenes + # These are excluded from input_text.lounge_last_scene, so their displayed + # state comes from the actual light entities they control. + ########################################################################## + + - name: "NSPanel Lounge Scene Reading" + unique_id: nspanel_lounge_scene_switch_reading + state: >- + {{ + ( + is_state('light.esp_lounge6chdimmer_couch_spots_left', 'on') + and (state_attr('light.esp_lounge6chdimmer_couch_spots_left', 'brightness') | int(0)) > 0 + ) + or + ( + is_state('light.esp_lounge6chdimmer_couch_spots_right', 'on') + and (state_attr('light.esp_lounge6chdimmer_couch_spots_right', 'brightness') | int(0)) > 0 + ) + }} + turn_on: + - action: script.lounge_set_scene + data: + scene_name: "Reading On/Off" + turn_off: + - action: script.lounge_set_scene + data: + scene_name: "Reading On/Off" + + - name: "NSPanel Lounge Scene Dining" + unique_id: nspanel_lounge_scene_switch_dining + state: >- + {{ + is_state('light.esp_lounge6chdimmer_dining_table_light', 'on') + and (state_attr('light.esp_lounge6chdimmer_dining_table_light', 'brightness') | int(0)) > 0 + }} + turn_on: + - action: script.lounge_set_scene + data: + scene_name: "Dining On/Off" + turn_off: + - action: script.lounge_set_scene + data: + scene_name: "Dining On/Off" diff --git a/packages/nspanel_masterbdrm_controller.yaml.old b/packages/nspanel_masterbdrm_controller.yaml.old new file mode 100644 index 0000000..4e61afa --- /dev/null +++ b/packages/nspanel_masterbdrm_controller.yaml.old @@ -0,0 +1,52 @@ +automation: + - id: nspanel_lounge_controller + alias: "NSPanel Master Bedroom Controller" + description: "" + use_blueprint: + path: edwardtfn/nspanel_easy_blueprint.yaml + input: + nspanel_name: 084fb5b4a94e636d01244b1838156446 + + button_page01_label: Lounge Lighting Scenes + button_pages_icon_size: "10" + + entity01: script.nspanel_lounge_scene_bright + entity01_name: "Bright" + entity01_icon: mdi:brightness-7 + entity01_confirm: false + + entity02: script.nspanel_lounge_scene_tv_general + entity02_name: "TV General" + entity02_icon: mdi:television + entity02_confirm: false + + entity03: script.nspanel_lounge_scene_movie + entity03_name: "Movie" + entity03_icon: mdi:movie-open + entity03_confirm: false + + entity04: script.nspanel_lounge_scene_balanced + entity04_name: "Balance" + entity04_icon: mdi:scale-balance + entity04_confirm: false + + entity05: script.nspanel_lounge_scene_warm_cozy + entity05_name: "Warm Cozy" + entity05_icon: mdi:fireplace + entity05_confirm: false + + entity06: script.nspanel_lounge_scene_reading + entity06_name: "Reading On/Off" + entity06_icon: mdi:book-open-page-variant + entity06_confirm: false + + entity07: script.nspanel_lounge_scene_dining + entity07_name: "Dining On/Off" + entity07_icon: mdi:silverware-fork-knife + entity07_confirm: false + + entity08: script.nspanel_lounge_scene_all_off + entity08_name: "All Off" + entity08_icon: mdi:power + entity08_confirm: false + mode: single diff --git a/packages/outdoor_lighting_control.yaml b/packages/outdoor_lighting_control.yaml new file mode 100644 index 0000000..8bda922 --- /dev/null +++ b/packages/outdoor_lighting_control.yaml @@ -0,0 +1,1242 @@ +############################################################################### +# PACKAGE: Outdoor lighting controls +############################################################################### +# +# Version: +# 2026-05-09 v0.2 +# - Refactored scheduled control to use editable schedule lists. +# - Switched lights now use explicit ON/OFF schedule entries instead of +# ON plus duration. +# - Added dimmer schedule event tracking so long ramps are not restarted by +# the 5 minute scheduler. +# - Added manual-on start tracking for switched lights so scheduled events +# can override a temporary manual-on period. +# +# 2026-05-09 v0.1 +# - Initial package for outdoor switched and dimmable lighting. +# +# Notes: +# - Edit schedules inside the per-light reconcile/apply scripts below. +# - The schedule rows are deliberately near the top of each script. +# - Dimmable schedule format: +# trigger: sunset, offset_minutes, target_brightness, ramp_minutes +# trigger: time, at, target_brightness, ramp_minutes +# - Switched schedule format: +# trigger: sunset, offset_minutes, target_state +# trigger: time, at, target_state +# - For dimmable schedules, fixed time entries override sun based entries if +# the real sunset offset would occur after the following fixed time. +# - The scheduler runs every 5 minutes. Dimming ramps also step every 5 minutes +# by default. +# - Manual-off suppression lasts until the next day's first scheduled ON. +# +############################################################################### + +input_boolean: + outdoor_lighting_automation_enable: + name: Outdoor Lighting Automation - Master Enable + icon: mdi:outdoor-lamp + initial: true + + outdoor_lighting_deck_coloured_automation_enable: + name: Outdoor Lighting Automation - Deck Coloured Lights + icon: mdi:string-lights + initial: true + + outdoor_lighting_patio_automation_enable: + name: Outdoor Lighting Automation - Patio Lights + icon: mdi:coach-lamp + initial: true + + outdoor_lighting_number_16_automation_enable: + name: Outdoor Lighting Automation - View Road Number 16 + icon: mdi:numeric-16-box + initial: true + + outdoor_lighting_main_entrance_automation_enable: + name: Outdoor Lighting Automation - Main Entrance Outside LEDs + icon: mdi:led-strip-variant + initial: true + +input_datetime: + outdoor_lighting_deck_suppress_until: + name: Outdoor Lighting Deck Suppress Until + has_date: true + has_time: true + + outdoor_lighting_deck_manual_on_started: + name: Outdoor Lighting Deck Manual On Started + has_date: true + has_time: true + + outdoor_lighting_patio_suppress_until: + name: Outdoor Lighting Patio Suppress Until + has_date: true + has_time: true + + outdoor_lighting_patio_manual_on_started: + name: Outdoor Lighting Patio Manual On Started + has_date: true + has_time: true + + outdoor_lighting_number_16_last_schedule_event: + name: Outdoor Lighting Number 16 Last Schedule Event + has_date: true + has_time: true + + outdoor_lighting_main_entrance_suppress_until: + name: Outdoor Lighting Main Entrance Suppress Until + has_date: true + has_time: true + + outdoor_lighting_main_entrance_last_schedule_event: + name: Outdoor Lighting Main Entrance Last Schedule Event + has_date: true + has_time: true + + outdoor_lighting_main_entrance_last_override_press: + name: Outdoor Lighting Main Entrance Last Override Press + has_date: true + has_time: true + +input_select: + outdoor_lighting_main_entrance_override_mode: + name: Outdoor Lighting Main Entrance Override Mode + options: + - none + - return_to_schedule + - turn_off + initial: none + icon: mdi:gesture-tap-button + +timer: + outdoor_lighting_deck_manual_on: + name: Outdoor Lighting Deck Manual On Timer + duration: "01:00:00" + + outdoor_lighting_patio_manual_on: + name: Outdoor Lighting Patio Manual On Timer + duration: "01:00:00" + + outdoor_lighting_main_entrance_override: + name: Outdoor Lighting Main Entrance Override Timer + duration: "01:00:00" + +script: + ############################################################################# + # Shared dimmable ramp scripts + ############################################################################# + + outdoor_lighting_ramp_number_16: + alias: Outdoor Lighting - Ramp View Road Number 16 + mode: restart + fields: + target_brightness: + description: Target brightness from 0 to 100. Zero means off. + ramp_seconds: + description: Ramp duration in seconds. + sequence: + - variables: + brightness_entity: number.front_entranceway_led_light_controls_number_16_led_light_brightness + switch_entity: switch.front_entranceway_led_light_controls_number_16_led_light + ramp_update_seconds: 300 + target: > + {% set raw = target_brightness | int(0) %} + {{ [[raw, 0] | max, 100] | min }} + ramp_s: "{{ ramp_seconds | int(0) }}" + current: > + {% if is_state(switch_entity, 'on') %} + {{ states(brightness_entity) | float(0) }} + {% else %} + 0 + {% endif %} + raw_steps: > + {% if ramp_s | int(0) <= 0 %} + 0 + {% else %} + {{ ((ramp_s | int(0)) / (ramp_update_seconds | int(300))) | round(0, 'ceil') | int }} + {% endif %} + steps: > + {% if ramp_s | int(0) <= 0 %} + 1 + {% else %} + {{ (raw_steps | int(0)) + 1 }} + {% endif %} + step_delay_seconds: > + {% if (steps | int(1)) <= 1 %} + 0 + {% else %} + {{ ((ramp_s | int(0)) / ((steps | int(1)) - 1)) | round(0, 'ceil') | int }} + {% endif %} + + - repeat: + count: "{{ steps | int(1) }}" + sequence: + - variables: + next_value: > + {% set val = (current | float(0)) + (((target | float(0)) - (current | float(0))) * (repeat.index | int) / (steps | int(1))) %} + {{ [[val | round(0) | int, 0] | max, 100] | min }} + + - action: number.set_value + target: + entity_id: number.front_entranceway_led_light_controls_number_16_led_light_brightness + data: + value: "{{ next_value | int(0) }}" + + - if: + - condition: template + value_template: "{{ (target | int(0)) > 0 and is_state('switch.front_entranceway_led_light_controls_number_16_led_light', 'off') }}" + then: + - action: switch.turn_on + target: + entity_id: switch.front_entranceway_led_light_controls_number_16_led_light + + - if: + - condition: template + value_template: "{{ repeat.index < (steps | int(1)) }}" + then: + - delay: + seconds: "{{ step_delay_seconds | int(0) }}" + + - if: + - condition: template + value_template: "{{ (target | int(0)) <= 0 }}" + then: + - action: switch.turn_off + target: + entity_id: switch.front_entranceway_led_light_controls_number_16_led_light + + outdoor_lighting_ramp_main_entrance: + alias: Outdoor Lighting - Ramp Main Entrance Outside LEDs + mode: restart + fields: + target_brightness: + description: Target brightness from 0 to 100. Zero means off. + ramp_seconds: + description: Ramp duration in seconds. + sequence: + - variables: + brightness_entity: number.front_entranceway_led_light_controls_main_entrance_outside_led_lights_brightness + switch_entity: switch.front_entranceway_led_light_controls_main_entrance_outside_led_lights + ramp_update_seconds: 300 + target: > + {% set raw = target_brightness | int(0) %} + {{ [[raw, 0] | max, 100] | min }} + ramp_s: "{{ ramp_seconds | int(0) }}" + current: > + {% if is_state(switch_entity, 'on') %} + {{ states(brightness_entity) | float(0) }} + {% else %} + 0 + {% endif %} + raw_steps: > + {% if ramp_s | int(0) <= 0 %} + 0 + {% else %} + {{ ((ramp_s | int(0)) / (ramp_update_seconds | int(300))) | round(0, 'ceil') | int }} + {% endif %} + steps: > + {% if ramp_s | int(0) <= 0 %} + 1 + {% else %} + {{ (raw_steps | int(0)) + 1 }} + {% endif %} + step_delay_seconds: > + {% if (steps | int(1)) <= 1 %} + 0 + {% else %} + {{ ((ramp_s | int(0)) / ((steps | int(1)) - 1)) | round(0, 'ceil') | int }} + {% endif %} + + - repeat: + count: "{{ steps | int(1) }}" + sequence: + - variables: + next_value: > + {% set val = (current | float(0)) + (((target | float(0)) - (current | float(0))) * (repeat.index | int) / (steps | int(1))) %} + {{ [[val | round(0) | int, 0] | max, 100] | min }} + + - action: number.set_value + target: + entity_id: number.front_entranceway_led_light_controls_main_entrance_outside_led_lights_brightness + data: + value: "{{ next_value | int(0) }}" + + - if: + - condition: template + value_template: "{{ (target | int(0)) > 0 and is_state('switch.front_entranceway_led_light_controls_main_entrance_outside_led_lights', 'off') }}" + then: + - action: switch.turn_on + target: + entity_id: switch.front_entranceway_led_light_controls_main_entrance_outside_led_lights + + - if: + - condition: template + value_template: "{{ repeat.index < (steps | int(1)) }}" + then: + - delay: + seconds: "{{ step_delay_seconds | int(0) }}" + + - if: + - condition: template + value_template: "{{ (target | int(0)) <= 0 }}" + then: + - action: switch.turn_off + target: + entity_id: switch.front_entranceway_led_light_controls_main_entrance_outside_led_lights + + ############################################################################# + # 1) Outdoor Deck Coloured Lights + # Switch: switch.esp_downstloungeoutside_relay_1_outside_lights + # Override: binary_sensor.esp_downstloungeoutside_button_1_outside_lights + ############################################################################# + + outdoor_lighting_reconcile_deck_coloured: + alias: Outdoor Lighting - Reconcile Deck Coloured Lights + mode: restart + sequence: + - condition: state + entity_id: input_boolean.outdoor_lighting_automation_enable + state: "on" + - condition: state + entity_id: input_boolean.outdoor_lighting_deck_coloured_automation_enable + state: "on" + + ########################################################################### + # EDIT SCHEDULE HERE + # Format: trigger, offset_minutes, target_state + # Current schedule: + # - sunset +60, ON + # - sunset +240, OFF + ########################################################################### + - variables: + schedule: + - trigger: sunset + offset_minutes: 60 + target_state: "on" + - trigger: sunset + offset_minutes: 240 + target_state: "off" + + - variables: + selected_schedule: > + {% set now_ts = as_timestamp(now()) %} + {% set next_setting_raw = state_attr('sun.sun', 'next_setting') %} + {% if next_setting_raw %} + {% set next_setting = as_datetime(next_setting_raw) | as_local %} + {% if next_setting.date() == now().date() %} + {% set today_sunset = next_setting %} + {% else %} + {% set today_sunset = next_setting - timedelta(days=1) %} + {% endif %} + {% else %} + {% set today_sunset = none %} + {% endif %} + {% set ns = namespace(best_ts=0, best_state='off') %} + {% for day_offset in [-1, 0] %} + {% for item in schedule %} + {% if item.trigger == 'sunset' and today_sunset %} + {% set event_dt = today_sunset + timedelta(days=day_offset) + timedelta(minutes=item.offset_minutes | int(0)) %} + {% elif item.trigger == 'time' %} + {% set event_dt = today_at(item.at) + timedelta(days=day_offset) %} + {% else %} + {% set event_dt = none %} + {% endif %} + {% if event_dt %} + {% set event_ts = as_timestamp(event_dt, 0) %} + {% if event_ts <= now_ts and event_ts > ns.best_ts %} + {% set ns.best_ts = event_ts %} + {% set ns.best_state = item.target_state %} + {% endif %} + {% endif %} + {% endfor %} + {% endfor %} + {{ ns.best_state }}|{{ ns.best_ts | int(0) }} + selected_target_state: "{{ selected_schedule.split('|')[0] }}" + selected_event_ts: "{{ selected_schedule.split('|')[1] | int(0) }}" + suppress_active: > + {% set ts = as_timestamp(states('input_datetime.outdoor_lighting_deck_suppress_until'), 0) %} + {{ ts > as_timestamp(now()) }} + manual_on_active: "{{ is_state('timer.outdoor_lighting_deck_manual_on', 'active') }}" + manual_on_started_ts: "{{ as_timestamp(states('input_datetime.outdoor_lighting_deck_manual_on_started'), 0) }}" + manual_on_still_valid: > + {{ manual_on_active | bool and (selected_event_ts | int(0)) <= (manual_on_started_ts | int(0)) }} + should_be_on: > + {% if suppress_active | bool %} + false + {% elif manual_on_still_valid | bool %} + true + {% else %} + {{ selected_target_state == 'on' }} + {% endif %} + schedule_has_overridden_manual: > + {{ manual_on_active | bool and not (manual_on_still_valid | bool) }} + + - if: + - condition: template + value_template: "{{ schedule_has_overridden_manual | bool }}" + then: + - action: timer.cancel + target: + entity_id: timer.outdoor_lighting_deck_manual_on + + - choose: + - conditions: + - condition: template + value_template: "{{ should_be_on | bool }}" + sequence: + - action: switch.turn_on + target: + entity_id: switch.esp_downstloungeoutside_relay_1_outside_lights + default: + - action: switch.turn_off + target: + entity_id: switch.esp_downstloungeoutside_relay_1_outside_lights + + ############################################################################# + # 2) Patio Lights + # Switch: switch.esp_garageentrylights_relay_2_patio_lights + # Override: binary_sensor.esp_garageentrylights_button_2_patio_lights + ############################################################################# + + outdoor_lighting_reconcile_patio: + alias: Outdoor Lighting - Reconcile Patio Lights + mode: restart + sequence: + - condition: state + entity_id: input_boolean.outdoor_lighting_automation_enable + state: "on" + - condition: state + entity_id: input_boolean.outdoor_lighting_patio_automation_enable + state: "on" + + ########################################################################### + # EDIT SCHEDULE HERE + # Format: trigger, offset_minutes, target_state + # Current schedule: + # - sunset -30, ON + # - sunset +150, OFF + ########################################################################### + - variables: + schedule: + - trigger: sunset + offset_minutes: -30 + target_state: "on" + - trigger: sunset + offset_minutes: 150 + target_state: "off" + + - variables: + selected_schedule: > + {% set now_ts = as_timestamp(now()) %} + {% set next_setting_raw = state_attr('sun.sun', 'next_setting') %} + {% if next_setting_raw %} + {% set next_setting = as_datetime(next_setting_raw) | as_local %} + {% if next_setting.date() == now().date() %} + {% set today_sunset = next_setting %} + {% else %} + {% set today_sunset = next_setting - timedelta(days=1) %} + {% endif %} + {% else %} + {% set today_sunset = none %} + {% endif %} + {% set ns = namespace(best_ts=0, best_state='off') %} + {% for day_offset in [-1, 0] %} + {% for item in schedule %} + {% if item.trigger == 'sunset' and today_sunset %} + {% set event_dt = today_sunset + timedelta(days=day_offset) + timedelta(minutes=item.offset_minutes | int(0)) %} + {% elif item.trigger == 'time' %} + {% set event_dt = today_at(item.at) + timedelta(days=day_offset) %} + {% else %} + {% set event_dt = none %} + {% endif %} + {% if event_dt %} + {% set event_ts = as_timestamp(event_dt, 0) %} + {% if event_ts <= now_ts and event_ts > ns.best_ts %} + {% set ns.best_ts = event_ts %} + {% set ns.best_state = item.target_state %} + {% endif %} + {% endif %} + {% endfor %} + {% endfor %} + {{ ns.best_state }}|{{ ns.best_ts | int(0) }} + selected_target_state: "{{ selected_schedule.split('|')[0] }}" + selected_event_ts: "{{ selected_schedule.split('|')[1] | int(0) }}" + suppress_active: > + {% set ts = as_timestamp(states('input_datetime.outdoor_lighting_patio_suppress_until'), 0) %} + {{ ts > as_timestamp(now()) }} + manual_on_active: "{{ is_state('timer.outdoor_lighting_patio_manual_on', 'active') }}" + manual_on_started_ts: "{{ as_timestamp(states('input_datetime.outdoor_lighting_patio_manual_on_started'), 0) }}" + manual_on_still_valid: > + {{ manual_on_active | bool and (selected_event_ts | int(0)) <= (manual_on_started_ts | int(0)) }} + should_be_on: > + {% if suppress_active | bool %} + false + {% elif manual_on_still_valid | bool %} + true + {% else %} + {{ selected_target_state == 'on' }} + {% endif %} + schedule_has_overridden_manual: > + {{ manual_on_active | bool and not (manual_on_still_valid | bool) }} + + - if: + - condition: template + value_template: "{{ schedule_has_overridden_manual | bool }}" + then: + - action: timer.cancel + target: + entity_id: timer.outdoor_lighting_patio_manual_on + + - choose: + - conditions: + - condition: template + value_template: "{{ should_be_on | bool }}" + sequence: + - action: switch.turn_on + target: + entity_id: switch.esp_garageentrylights_relay_2_patio_lights + default: + - action: switch.turn_off + target: + entity_id: switch.esp_garageentrylights_relay_2_patio_lights + + ############################################################################# + # 3) View Road Street Number 16 + # Brightness: number.front_entranceway_led_light_controls_number_16_led_light_brightness + # Switch: switch.front_entranceway_led_light_controls_number_16_led_light + ############################################################################# + + outdoor_lighting_apply_number_16_current_target: + alias: Outdoor Lighting - Apply Current Target - View Road Number 16 + mode: restart + fields: + force_reconcile: + description: Force immediate reconciliation even if the schedule event has already been applied. + ramp_seconds: + description: Optional ramp seconds override. Use -1 or omit to use the schedule ramp. + sequence: + - condition: state + entity_id: input_boolean.outdoor_lighting_automation_enable + state: "on" + - condition: state + entity_id: input_boolean.outdoor_lighting_number_16_automation_enable + state: "on" + + ########################################################################### + # EDIT SCHEDULE HERE + # Format: trigger, offset_minutes/at, target_brightness, ramp_minutes + # Current schedule: + # - sunset -30, 80, 30 + # - 20:00, 50, 30 + # - 01:00, 20, 120 + # - 06:00, 0, 120 + ########################################################################### + - variables: + schedule: + - trigger: sunset + offset_minutes: -30 + target_brightness: 60 + ramp_minutes: 30 + - trigger: time + at: "20:00:00" + target_brightness: 50 + ramp_minutes: 120 + - trigger: time + at: "01:00:00" + target_brightness: 20 + ramp_minutes: 120 + - trigger: time + at: "06:00:00" + target_brightness: 0 + ramp_minutes: 120 + + - variables: + selected_schedule: > + {% set now_ts = as_timestamp(now()) %} + {% set next_setting_raw = state_attr('sun.sun', 'next_setting') %} + {% if next_setting_raw %} + {% set next_setting = as_datetime(next_setting_raw) | as_local %} + {% if next_setting.date() == now().date() %} + {% set today_sunset = next_setting %} + {% else %} + {% set today_sunset = next_setting - timedelta(days=1) %} + {% endif %} + {% else %} + {% set today_sunset = none %} + {% endif %} + {% set ns = namespace(best_ts=0, best_target=0, best_ramp=0) %} + {% for day_offset in [-1, 0] %} + {% for item in schedule %} + {% if item.trigger == 'sunset' and today_sunset %} + {% set event_dt = today_sunset + timedelta(days=day_offset) + timedelta(minutes=item.offset_minutes | int(0)) %} + {% elif item.trigger == 'time' %} + {% set event_dt = today_at(item.at) + timedelta(days=day_offset) %} + {% else %} + {% set event_dt = none %} + {% endif %} + {% if event_dt %} + {% set valid = namespace(ok=true) %} + {% if item.trigger == 'sunset' %} + {% set idx = loop.index0 %} + {% set nxt = namespace(found=false, dt=none) %} + {% for step in range(1, schedule | length) %} + {% set j = (idx + step) % (schedule | length) %} + {% set next_item = schedule[j] %} + {% if not nxt.found and next_item.trigger == 'time' %} + {% set next_dt = today_at(next_item.at) + timedelta(days=day_offset) %} + {% if next_dt <= event_dt %} + {% set next_dt = next_dt + timedelta(days=1) %} + {% endif %} + {% set nxt.dt = next_dt %} + {% set nxt.found = true %} + {% endif %} + {% endfor %} + {% if nxt.found and event_dt >= nxt.dt %} + {% set valid.ok = false %} + {% endif %} + {% endif %} + {% set event_ts = as_timestamp(event_dt, 0) %} + {% if valid.ok and event_ts <= now_ts and event_ts > ns.best_ts %} + {% set ns.best_ts = event_ts %} + {% set ns.best_target = item.target_brightness | int(0) %} + {% set ns.best_ramp = (item.ramp_minutes | int(0) * 60) %} + {% endif %} + {% endif %} + {% endfor %} + {% endfor %} + {{ ns.best_target }}|{{ ns.best_ramp }}|{{ ns.best_ts | int(0) }} + selected_target: "{{ selected_schedule.split('|')[0] | int(0) }}" + selected_ramp_seconds: "{{ selected_schedule.split('|')[1] | int(0) }}" + selected_event_ts: "{{ selected_schedule.split('|')[2] | int(0) }}" + last_event_ts: "{{ as_timestamp(states('input_datetime.outdoor_lighting_number_16_last_schedule_event'), 0) | int(0) }}" + do_force: "{{ force_reconcile | default(false) | bool }}" + requested_ramp_seconds: "{{ ramp_seconds | default(-1) | int(-1) }}" + ramp_to_use: > + {% if requested_ramp_seconds | int(-1) >= 0 %} + {{ requested_ramp_seconds | int(0) }} + {% elif do_force | bool %} + 0 + {% else %} + {{ selected_ramp_seconds | int(0) }} + {% endif %} + should_apply: > + {{ do_force | bool or (selected_event_ts | int(0)) != (last_event_ts | int(0)) }} + + - if: + - condition: template + value_template: "{{ should_apply | bool }}" + then: + - action: input_datetime.set_datetime + target: + entity_id: input_datetime.outdoor_lighting_number_16_last_schedule_event + data: + datetime: "{{ (selected_event_ts | int(0)) | timestamp_custom('%Y-%m-%d %H:%M:%S', true) }}" + - action: script.outdoor_lighting_ramp_number_16 + data: + target_brightness: "{{ selected_target | int(0) }}" + ramp_seconds: "{{ ramp_to_use | int(0) }}" + + ############################################################################# + # 4) Main Entrance Outside LED Lights + # Brightness: number.front_entranceway_led_light_controls_main_entrance_outside_led_lights_brightness + # Switch: switch.front_entranceway_led_light_controls_main_entrance_outside_led_lights + # Override: binary_sensor.esp_entrancelightswitch_button_2_external_light_controller + ############################################################################# + + outdoor_lighting_apply_main_entrance_current_target: + alias: Outdoor Lighting - Apply Current Target - Main Entrance Outside LEDs + mode: restart + fields: + force_reconcile: + description: Force immediate reconciliation even if the schedule event has already been applied. + ramp_seconds: + description: Optional ramp seconds override. Use -1 or omit to use the schedule ramp. + sequence: + - condition: state + entity_id: input_boolean.outdoor_lighting_automation_enable + state: "on" + - condition: state + entity_id: input_boolean.outdoor_lighting_main_entrance_automation_enable + state: "on" + - condition: state + entity_id: input_select.outdoor_lighting_main_entrance_override_mode + state: "none" + + ########################################################################### + # EDIT SCHEDULE HERE + # Format: trigger, offset_minutes/at, target_brightness, ramp_minutes + # Current schedule: + # - sunset -30, 30, 30 + # - 20:00, 20, 30 + # - 23:00, 0, 30 + ########################################################################### + - variables: + schedule: + - trigger: sunset + offset_minutes: -30 + target_brightness: 30 + ramp_minutes: 30 + - trigger: time + at: "20:00:00" + target_brightness: 20 + ramp_minutes: 30 + - trigger: time + at: "23:00:00" + target_brightness: 0 + ramp_minutes: 30 + + - variables: + suppress_active: > + {% set ts = as_timestamp(states('input_datetime.outdoor_lighting_main_entrance_suppress_until'), 0) %} + {{ ts > as_timestamp(now()) }} + selected_schedule: > + {% set now_ts = as_timestamp(now()) %} + {% set next_setting_raw = state_attr('sun.sun', 'next_setting') %} + {% if next_setting_raw %} + {% set next_setting = as_datetime(next_setting_raw) | as_local %} + {% if next_setting.date() == now().date() %} + {% set today_sunset = next_setting %} + {% else %} + {% set today_sunset = next_setting - timedelta(days=1) %} + {% endif %} + {% else %} + {% set today_sunset = none %} + {% endif %} + {% set ns = namespace(best_ts=0, best_target=0, best_ramp=0) %} + {% for day_offset in [-1, 0] %} + {% for item in schedule %} + {% if item.trigger == 'sunset' and today_sunset %} + {% set event_dt = today_sunset + timedelta(days=day_offset) + timedelta(minutes=item.offset_minutes | int(0)) %} + {% elif item.trigger == 'time' %} + {% set event_dt = today_at(item.at) + timedelta(days=day_offset) %} + {% else %} + {% set event_dt = none %} + {% endif %} + {% if event_dt %} + {% set valid = namespace(ok=true) %} + {% if item.trigger == 'sunset' %} + {% set idx = loop.index0 %} + {% set nxt = namespace(found=false, dt=none) %} + {% for step in range(1, schedule | length) %} + {% set j = (idx + step) % (schedule | length) %} + {% set next_item = schedule[j] %} + {% if not nxt.found and next_item.trigger == 'time' %} + {% set next_dt = today_at(next_item.at) + timedelta(days=day_offset) %} + {% if next_dt <= event_dt %} + {% set next_dt = next_dt + timedelta(days=1) %} + {% endif %} + {% set nxt.dt = next_dt %} + {% set nxt.found = true %} + {% endif %} + {% endfor %} + {% if nxt.found and event_dt >= nxt.dt %} + {% set valid.ok = false %} + {% endif %} + {% endif %} + {% set event_ts = as_timestamp(event_dt, 0) %} + {% if valid.ok and event_ts <= now_ts and event_ts > ns.best_ts %} + {% set ns.best_ts = event_ts %} + {% set ns.best_target = item.target_brightness | int(0) %} + {% set ns.best_ramp = (item.ramp_minutes | int(0) * 60) %} + {% endif %} + {% endif %} + {% endfor %} + {% endfor %} + {{ ns.best_target }}|{{ ns.best_ramp }}|{{ ns.best_ts | int(0) }} + selected_target: > + {% if suppress_active | bool %} + 0 + {% else %} + {{ selected_schedule.split('|')[0] | int(0) }} + {% endif %} + selected_ramp_seconds: "{{ selected_schedule.split('|')[1] | int(0) }}" + selected_event_ts: "{{ selected_schedule.split('|')[2] | int(0) }}" + last_event_ts: "{{ as_timestamp(states('input_datetime.outdoor_lighting_main_entrance_last_schedule_event'), 0) | int(0) }}" + do_force: "{{ force_reconcile | default(false) | bool }}" + requested_ramp_seconds: "{{ ramp_seconds | default(-1) | int(-1) }}" + ramp_to_use: > + {% if requested_ramp_seconds | int(-1) >= 0 %} + {{ requested_ramp_seconds | int(0) }} + {% elif do_force | bool %} + 0 + {% else %} + {{ selected_ramp_seconds | int(0) }} + {% endif %} + ramp_script_active: "{{ is_state('script.outdoor_lighting_ramp_main_entrance', 'on') }}" + should_apply: > + {% if suppress_active | bool and ramp_script_active | bool %} + false + {% else %} + {{ do_force | bool or suppress_active | bool or (selected_event_ts | int(0)) != (last_event_ts | int(0)) }} + {% endif %} + + - if: + - condition: template + value_template: "{{ should_apply | bool }}" + then: + - if: + - condition: template + value_template: "{{ not (suppress_active | bool) }}" + then: + - action: input_datetime.set_datetime + target: + entity_id: input_datetime.outdoor_lighting_main_entrance_last_schedule_event + data: + datetime: "{{ (selected_event_ts | int(0)) | timestamp_custom('%Y-%m-%d %H:%M:%S', true) }}" + - action: script.outdoor_lighting_ramp_main_entrance + data: + target_brightness: "{{ selected_target | int(0) }}" + ramp_seconds: "{{ ramp_to_use | int(0) }}" + + ############################################################################# + # Reconcile all + ############################################################################# + + outdoor_lighting_reconcile_all: + alias: Outdoor Lighting - Reconcile All Outdoor Lights + mode: restart + fields: + force_reconcile: + description: Force dimmable lights to reconcile immediately. + sequence: + - action: script.outdoor_lighting_reconcile_deck_coloured + - action: script.outdoor_lighting_reconcile_patio + - action: script.outdoor_lighting_apply_number_16_current_target + data: + force_reconcile: "{{ force_reconcile | default(false) | bool }}" + ramp_seconds: > + {% if force_reconcile | default(false) | bool %} + 0 + {% else %} + -1 + {% endif %} + - action: script.outdoor_lighting_apply_main_entrance_current_target + data: + force_reconcile: "{{ force_reconcile | default(false) | bool }}" + ramp_seconds: > + {% if force_reconcile | default(false) | bool %} + 0 + {% else %} + -1 + {% endif %} + +automation: + ############################################################################# + # Startup, scheduler, and enable switch cleanup + ############################################################################# + + - id: outdoor_lighting_reconcile_on_start + alias: Outdoor Lighting - Reconcile On Home Assistant Start + mode: single + trigger: + - platform: homeassistant + event: start + action: + - delay: "00:00:30" + - action: input_select.select_option + target: + entity_id: input_select.outdoor_lighting_main_entrance_override_mode + data: + option: none + - action: timer.cancel + target: + entity_id: + - timer.outdoor_lighting_deck_manual_on + - timer.outdoor_lighting_patio_manual_on + - timer.outdoor_lighting_main_entrance_override + - action: script.outdoor_lighting_reconcile_all + data: + force_reconcile: true + + - id: outdoor_lighting_scheduler_tick + alias: Outdoor Lighting - Scheduler Tick + mode: single + trigger: + - platform: time_pattern + minutes: "/5" + condition: + - condition: state + entity_id: input_boolean.outdoor_lighting_automation_enable + state: "on" + action: + - action: script.outdoor_lighting_reconcile_all + data: + force_reconcile: false + + - id: outdoor_lighting_reconcile_when_enable_changes + alias: Outdoor Lighting - Reconcile When Automation Enable Changes + mode: queued + trigger: + - platform: state + entity_id: + - input_boolean.outdoor_lighting_automation_enable + - input_boolean.outdoor_lighting_deck_coloured_automation_enable + - input_boolean.outdoor_lighting_patio_automation_enable + - input_boolean.outdoor_lighting_number_16_automation_enable + - input_boolean.outdoor_lighting_main_entrance_automation_enable + to: "on" + action: + - action: script.outdoor_lighting_reconcile_all + data: + force_reconcile: true + + - id: outdoor_lighting_cleanup_when_master_disabled + alias: Outdoor Lighting - Cleanup When Master Automation Disabled + mode: single + trigger: + - platform: state + entity_id: input_boolean.outdoor_lighting_automation_enable + to: "off" + action: + - action: script.turn_off + target: + entity_id: + - script.outdoor_lighting_ramp_number_16 + - script.outdoor_lighting_ramp_main_entrance + - script.outdoor_lighting_apply_number_16_current_target + - script.outdoor_lighting_apply_main_entrance_current_target + - action: timer.cancel + target: + entity_id: + - timer.outdoor_lighting_deck_manual_on + - timer.outdoor_lighting_patio_manual_on + - timer.outdoor_lighting_main_entrance_override + - action: input_select.select_option + target: + entity_id: input_select.outdoor_lighting_main_entrance_override_mode + data: + option: none + + ############################################################################# + # Switched light override buttons + ############################################################################# + + - id: outdoor_lighting_deck_coloured_override_button + alias: Outdoor Lighting - Deck Coloured Lights - Override Button + mode: restart + trigger: + - platform: state + entity_id: binary_sensor.esp_downstloungeoutside_button_1_outside_lights + to: "on" + condition: + - condition: state + entity_id: input_boolean.outdoor_lighting_automation_enable + state: "on" + - condition: state + entity_id: input_boolean.outdoor_lighting_deck_coloured_automation_enable + state: "on" + action: + - variables: + was_on_at_press: "{{ is_state('switch.esp_downstloungeoutside_relay_1_outside_lights', 'on') }}" + - delay: "00:00:01" + - choose: + - conditions: + - condition: template + value_template: "{{ was_on_at_press | bool }}" + sequence: + - action: input_datetime.set_datetime + target: + entity_id: input_datetime.outdoor_lighting_deck_suppress_until + data: + datetime: >- + {%- set next_setting_raw = state_attr('sun.sun', 'next_setting') -%} + {%- set next_setting = as_datetime(next_setting_raw) | as_local -%} + {%- if next_setting.date() == now().date() -%} + {%- set today_sunset = next_setting -%} + {%- else -%} + {%- set today_sunset = next_setting - timedelta(days=1) -%} + {%- endif -%} + {{ (today_sunset + timedelta(days=1, minutes=60)).strftime('%Y-%m-%d %H:%M:%S') }} + - action: timer.cancel + target: + entity_id: timer.outdoor_lighting_deck_manual_on + - action: switch.turn_off + target: + entity_id: switch.esp_downstloungeoutside_relay_1_outside_lights + default: + - action: input_datetime.set_datetime + target: + entity_id: input_datetime.outdoor_lighting_deck_suppress_until + data: + datetime: "1970-01-01 00:00:00" + - action: input_datetime.set_datetime + target: + entity_id: input_datetime.outdoor_lighting_deck_manual_on_started + data: + datetime: "{{ now().strftime('%Y-%m-%d %H:%M:%S') }}" + - action: switch.turn_on + target: + entity_id: switch.esp_downstloungeoutside_relay_1_outside_lights + - action: timer.start + target: + entity_id: timer.outdoor_lighting_deck_manual_on + data: + duration: "01:00:00" + + - id: outdoor_lighting_patio_override_button + alias: Outdoor Lighting - Patio Lights - Override Button + mode: restart + trigger: + - platform: state + entity_id: binary_sensor.esp_garageentrylights_button_2_patio_lights + to: "on" + condition: + - condition: state + entity_id: input_boolean.outdoor_lighting_automation_enable + state: "on" + - condition: state + entity_id: input_boolean.outdoor_lighting_patio_automation_enable + state: "on" + action: + - variables: + was_on_at_press: "{{ is_state('switch.esp_garageentrylights_relay_2_patio_lights', 'on') }}" + - delay: "00:00:01" + - choose: + - conditions: + - condition: template + value_template: "{{ was_on_at_press | bool }}" + sequence: + - action: input_datetime.set_datetime + target: + entity_id: input_datetime.outdoor_lighting_patio_suppress_until + data: + datetime: >- + {%- set next_setting_raw = state_attr('sun.sun', 'next_setting') -%} + {%- set next_setting = as_datetime(next_setting_raw) | as_local -%} + {%- if next_setting.date() == now().date() -%} + {%- set today_sunset = next_setting -%} + {%- else -%} + {%- set today_sunset = next_setting - timedelta(days=1) -%} + {%- endif -%} + {{ (today_sunset + timedelta(days=1, minutes=-30)).strftime('%Y-%m-%d %H:%M:%S') }} + - action: timer.cancel + target: + entity_id: timer.outdoor_lighting_patio_manual_on + - action: switch.turn_off + target: + entity_id: switch.esp_garageentrylights_relay_2_patio_lights + default: + - action: input_datetime.set_datetime + target: + entity_id: input_datetime.outdoor_lighting_patio_suppress_until + data: + datetime: "1970-01-01 00:00:00" + - action: input_datetime.set_datetime + target: + entity_id: input_datetime.outdoor_lighting_patio_manual_on_started + data: + datetime: "{{ now().strftime('%Y-%m-%d %H:%M:%S') }}" + - action: switch.turn_on + target: + entity_id: switch.esp_garageentrylights_relay_2_patio_lights + - action: timer.start + target: + entity_id: timer.outdoor_lighting_patio_manual_on + data: + duration: "01:00:00" + + - id: outdoor_lighting_deck_coloured_manual_on_timer_finished + alias: Outdoor Lighting - Deck Coloured Lights - Manual On Timer Finished + mode: single + trigger: + - platform: event + event_type: timer.finished + event_data: + entity_id: timer.outdoor_lighting_deck_manual_on + action: + - action: input_datetime.set_datetime + target: + entity_id: input_datetime.outdoor_lighting_deck_manual_on_started + data: + datetime: "1970-01-01 00:00:00" + - action: script.outdoor_lighting_reconcile_deck_coloured + + - id: outdoor_lighting_patio_manual_on_timer_finished + alias: Outdoor Lighting - Patio Lights - Manual On Timer Finished + mode: single + trigger: + - platform: event + event_type: timer.finished + event_data: + entity_id: timer.outdoor_lighting_patio_manual_on + action: + - action: input_datetime.set_datetime + target: + entity_id: input_datetime.outdoor_lighting_patio_manual_on_started + data: + datetime: "1970-01-01 00:00:00" + - action: script.outdoor_lighting_reconcile_patio + + ############################################################################# + # Main entrance dimmable override button + ############################################################################# + + - id: outdoor_lighting_main_entrance_override_button + alias: Outdoor Lighting - Main Entrance Outside LEDs - Override Button + mode: restart + trigger: + - platform: state + entity_id: binary_sensor.esp_entrancelightswitch_button_2_external_light_controller + to: "on" + condition: + - condition: state + entity_id: input_boolean.outdoor_lighting_automation_enable + state: "on" + - condition: state + entity_id: input_boolean.outdoor_lighting_main_entrance_automation_enable + state: "on" + action: + - variables: + override_ramp_seconds: 60 + was_on_at_press: "{{ is_state('switch.front_entranceway_led_light_controls_main_entrance_outside_led_lights', 'on') }}" + + - delay: "00:00:01" + + - variables: + last_press_age_seconds: > + {% set last_ts = as_timestamp(states('input_datetime.outdoor_lighting_main_entrance_last_override_press'), 0) %} + {% if last_ts <= 0 %} + 999999 + {% else %} + {{ (as_timestamp(now()) - last_ts) | int(999999) }} + {% endif %} + + - choose: + - conditions: + - condition: template + value_template: > + {{ not is_state('input_select.outdoor_lighting_main_entrance_override_mode', 'none') + and (last_press_age_seconds | int(999999)) <= 60 }} + sequence: + - action: timer.cancel + target: + entity_id: timer.outdoor_lighting_main_entrance_override + - action: input_select.select_option + target: + entity_id: input_select.outdoor_lighting_main_entrance_override_mode + data: + option: none + - action: input_datetime.set_datetime + target: + entity_id: input_datetime.outdoor_lighting_main_entrance_suppress_until + data: + datetime: >- + {%- set next_setting_raw = state_attr('sun.sun', 'next_setting') -%} + {%- set next_setting = as_datetime(next_setting_raw) | as_local -%} + {%- if next_setting.date() == now().date() -%} + {%- set today_sunset = next_setting -%} + {%- else -%} + {%- set today_sunset = next_setting - timedelta(days=1) -%} + {%- endif -%} + {%- set tomorrow_sun_on = today_sunset + timedelta(days=1, minutes=-30) -%} + {%- set tomorrow_2000 = today_at('20:00:00') + timedelta(days=1) -%} + {%- if tomorrow_sun_on < tomorrow_2000 -%} + {{ tomorrow_sun_on.strftime('%Y-%m-%d %H:%M:%S') }} + {%- else -%} + {{ tomorrow_2000.strftime('%Y-%m-%d %H:%M:%S') }} + {%- endif -%} + - action: script.outdoor_lighting_ramp_main_entrance + data: + target_brightness: 0 + ramp_seconds: "{{ override_ramp_seconds }}" + + - conditions: + - condition: template + value_template: > + {{ not is_state('input_select.outdoor_lighting_main_entrance_override_mode', 'none') + and (last_press_age_seconds | int(999999)) > 60 + and (last_press_age_seconds | int(999999)) <= 3600 }} + sequence: + - action: timer.cancel + target: + entity_id: timer.outdoor_lighting_main_entrance_override + - action: input_select.select_option + target: + entity_id: input_select.outdoor_lighting_main_entrance_override_mode + data: + option: none + - action: script.outdoor_lighting_apply_main_entrance_current_target + data: + force_reconcile: true + ramp_seconds: "{{ override_ramp_seconds }}" + + default: + - action: input_datetime.set_datetime + target: + entity_id: input_datetime.outdoor_lighting_main_entrance_last_override_press + data: + datetime: "{{ now().strftime('%Y-%m-%d %H:%M:%S') }}" + + - choose: + - conditions: + - condition: template + value_template: "{{ was_on_at_press | bool }}" + sequence: + - action: input_select.select_option + target: + entity_id: input_select.outdoor_lighting_main_entrance_override_mode + data: + option: return_to_schedule + default: + - action: input_select.select_option + target: + entity_id: input_select.outdoor_lighting_main_entrance_override_mode + data: + option: turn_off + + - action: script.outdoor_lighting_ramp_main_entrance + data: + target_brightness: 100 + ramp_seconds: "{{ override_ramp_seconds }}" + + - action: timer.start + target: + entity_id: timer.outdoor_lighting_main_entrance_override + data: + duration: "01:00:00" + + - id: outdoor_lighting_main_entrance_override_timer_finished + alias: Outdoor Lighting - Main Entrance Outside LEDs - Override Timer Finished + mode: single + trigger: + - platform: event + event_type: timer.finished + event_data: + entity_id: timer.outdoor_lighting_main_entrance_override + condition: + - condition: state + entity_id: input_boolean.outdoor_lighting_automation_enable + state: "on" + - condition: state + entity_id: input_boolean.outdoor_lighting_main_entrance_automation_enable + state: "on" + action: + - variables: + override_ramp_seconds: 60 + mode_at_finish: "{{ states('input_select.outdoor_lighting_main_entrance_override_mode') }}" + + - action: input_select.select_option + target: + entity_id: input_select.outdoor_lighting_main_entrance_override_mode + data: + option: none + + - choose: + - conditions: + - condition: template + value_template: "{{ mode_at_finish == 'return_to_schedule' }}" + sequence: + - action: script.outdoor_lighting_apply_main_entrance_current_target + data: + force_reconcile: true + ramp_seconds: "{{ override_ramp_seconds }}" + + - conditions: + - condition: template + value_template: "{{ mode_at_finish == 'turn_off' }}" + sequence: + - action: script.outdoor_lighting_ramp_main_entrance + data: + target_brightness: 0 + ramp_seconds: "{{ override_ramp_seconds }}" diff --git a/packages/quiet_time.yaml b/packages/quiet_time.yaml new file mode 100644 index 0000000..25dd8d7 --- /dev/null +++ b/packages/quiet_time.yaml @@ -0,0 +1,123 @@ +################################################################################ +# Quiet Time Package +################################################################################ +# +# TITLE: +# Quiet Time +# +# VERSIONS: +# V1.2 2026-05-21 +# - Added MQTT publishing when input_boolean.quiet_time changes. +# - Publishes quiet_time state to viewroad-status/homeassistant/quiet-time. +# +# V1.1 2026-05-21 +# - Reduced daily reset check frequency from every minute to every 30 minutes. +# - Reduced reset dropdown options to 00:30 through 10:00 only. +# +# V1.0 2026-05-21 +# - Initial package. +# - Adds input_boolean.quiet_time. +# - Adds input_select.quiet_time_daily_reset. +# - Adds daily automation to turn quiet_time OFF at the selected reset time. +# +# OPERATION NOTES: +# - input_boolean.quiet_time is the master quiet time toggle. +# - Other packages can check input_boolean.quiet_time before sending +# announcements, notifications, TTS messages, or similar. +# - input_select.quiet_time_daily_reset selects the daily time that quiet_time +# will automatically be turned OFF. +# - Default reset time is 07:00. +# - The quiet_time state is published to MQTT whenever it changes. +# +# MQTT STATUS: +# - Topic: +# viewroad-status/homeassistant/quiet-time +# - Payload: +# on +# off +# +################################################################################ + +################################################################################ +# INPUT BOOLEAN +################################################################################ + +input_boolean: + quiet_time: + name: Quiet Time + icon: mdi:bell-off + +################################################################################ +# INPUT SELECT +################################################################################ + +input_select: + quiet_time_daily_reset: + name: Quiet time daily reset + icon: mdi:clock-end + options: + - "00:30" + - "01:00" + - "01:30" + - "02:00" + - "02:30" + - "03:00" + - "03:30" + - "04:00" + - "04:30" + - "05:00" + - "05:30" + - "06:00" + - "06:30" + - "07:00" + - "07:30" + - "08:00" + - "08:30" + - "09:00" + - "09:30" + - "10:00" + initial: "07:00" + +################################################################################ +# AUTOMATIONS +################################################################################ + +automation: + - id: quiet_time_daily_reset_turn_off + alias: "Quiet Time - Daily Reset Off" + description: "Turns Quiet Time off once per day at the selected reset time." + mode: single + + triggers: + - trigger: time_pattern + minutes: "/30" + seconds: "0" + + conditions: + - condition: state + entity_id: input_boolean.quiet_time + state: "on" + + - condition: template + value_template: > + {{ states('input_select.quiet_time_daily_reset') == now().strftime('%H:%M') }} + + actions: + - action: input_boolean.turn_off + target: + entity_id: input_boolean.quiet_time + + - id: quiet_time_settings_to_mqtt + alias: "Publish quiet time value to MQTT" + description: "Publishes the Quiet Time boolean state to MQTT whenever it changes." + mode: single + + triggers: + - trigger: state + entity_id: input_boolean.quiet_time + + actions: + - action: mqtt.publish + data: + topic: viewroad-status/homeassistant/quiet-time + payload: "{{ trigger.to_state.state }}" diff --git a/packages/tts.yaml b/packages/tts.yaml deleted file mode 100644 index 810ebe6..0000000 --- a/packages/tts.yaml +++ /dev/null @@ -1,4 +0,0 @@ -# Text to speech -tts: - platform: google_translate - service_name: google_say diff --git a/packages/view_road_announcement_router.yaml b/packages/view_road_announcement_router.yaml index 5893889..90cc35e 100644 --- a/packages/view_road_announcement_router.yaml +++ b/packages/view_road_announcement_router.yaml @@ -343,6 +343,31 @@ script: - condition: template value_template: "{{ ann_voice_message | string | trim | length > 0 }}" then: + - choose: + - conditions: + - condition: template + value_template: "{{ lounge_google_home_voice_suppress_cast_chime | bool(false) }}" + - condition: template + value_template: "{{ states(lounge_google_home_voice_media_player) in ['off', 'unavailable', 'unknown'] }}" + sequence: + - action: media_player.volume_set + data: + entity_id: "{{ lounge_google_home_voice_media_player }}" + volume_level: 0 + + - action: media_player.turn_on + target: + entity_id: "{{ lounge_google_home_voice_media_player }}" + + - wait_template: >- + {{ states(lounge_google_home_voice_media_player) in ['idle', 'paused', 'playing', 'on'] }} + timeout: + seconds: 5 + continue_on_timeout: true + + - delay: + seconds: 1 + - action: media_player.volume_set data: entity_id: "{{ lounge_google_home_voice_media_player }}"