+ NŠÖj©ãó<€Rt^RIHt^RIt^RIt^RIt^RIt^RIHt^RI H t H t ^RI H t ^RI t ^RIHtRtRtRtR tR tR tRtR t]!0Rm4tR sRRltRRlt]!RR44tRRltRRlt RRlt!RRlt"RRlt#R# ]dRt Lhi;i) zPSimulate tub/hot-in temps from Control state; publish like the real temp daemon.)Ú annotationsN)Ú dataclass)ÚdatetimeÚtimezone)ÚAny)ÚRedisPublisherzcontrol:latestg€Q@g@`@g@g€a@z 28-sim-hotFcó€V^8„dQhRR/#)éÚreturnÚstr©)Úformats"ÚR/home/coaltown/Nextcloud/documents/wiki/projects/hot-tub/src/temp_sim/simulator.pyÚ __annotate__r)s€÷EñE�#ñEócóh€\P!\P4P R4#)z%Y-%m-%dT%H:%M:%SZ)rÚnowrÚutcÚstrftimer rrÚ_utc_nowr)s!€Ü �<Š<œŸ ™ Ó %× .Ñ .Ð/CÓ DÐDrcó$€V^8„dQhRRRRRR/#)r ÚsignumÚintÚ_frameÚobjectr ÚNoner )r s"rrr-s!€÷ñ˜3ð¨ð°4ñrcó(€\RV R24RsR#)z Signal z , stopping.TN)ÚprintÚ_stop)rrs&&rÚ_handle_signalr-s€ä ˆI�f�X˜[Ð )Ô*Ø ‚Ercó4€]tRt^3t$]tR]R&]tR]R&Rt R#)ÚSimStateÚfloatÚ tub_avg_fÚhot_in_fr N) Ú__name__Ú __module__Ú __qualname__Ú__firstlineno__Ú DEFAULT_TUB_Fr#Ú__annotations__Ú DEFAULT_HOT_Fr$Ú__static_attributes__r rrr!r!3s‡à$€IˆuÓ$Ø#€Hˆe×#rr!có €V^8„dQhRRRR/#)r Ú redis_urlr r údict[str, Any] | Noner )r s"rrr9s€÷4ñ4 3ð4Ð+@ñ4rcó|€\f \R4h\P!VRR7pVP\4pVP 4V'gR#\ P!V4p\T\4'dT#R# TP 4i;i \ PdR#i;i)Nz0redis package not installed (apt: python3-redis)T)Údecode_responses) ÚredisÚ RuntimeErrorÚfrom_urlÚgetÚKEY_CONTROL_LATESTÚcloseÚjsonÚloadsÚJSONDecodeErrorÚ isinstanceÚdict)r.ÚclientÚrawÚdatas& rÚfetch_control_stater@9s—€Ü ‚}ÜÐMÓNÐNÜ �^Š^˜I¸Ô =€FðØ�j‰jÔ+Ó,ˆà� ‰ Œß ÙðÜ�zŠz˜#‹ˆô˜d¤D×)Ò)ˆ4Ð3¨tÐ3øð � ‰ �ûô × Ñ ôÚðús­B ÁB" BÂ"B;Â:B;có €V^8„dQhRRRR/#)r Úcontrolr/r ztuple[bool, str, str]r )r s"rrrJs€÷ñÐ1ðÐ6KñrcóÒ€VfR#\VPR4;'gR4p\VPR4;'gR4pV\9d VR8wdRW3#RW3#)z4Return (heat_up, heat_phase, heat_pump) for display.FÚ heat_phaseÚidleÚ heat_pumpÚoffT)Fõ—rH)r r5ÚHEATING_PHASES)rBÚphaseÚpumps& rÚshould_heat_uprLJsg€à‚Ø"Ð"Ü �— ‘ ˜LÓ)×3Ð3¨VÓ 4€EÜ ˆw�{‰{˜;Ó'×0Ð0¨5Ó 1€DØ ”Ô 4¨5¤=Ø�UÐ Ð Ø �%Ð Ðrcó$€V^8„dQhRRRRRR/#)r Ústater!Úheat_upÚboolr rr )r s"rrrUs!€÷)ñ)�Hð) tð)°ñ)rcóú€V'd8\Vn\VP\,\ 4VnR#\ \VP\, 4VnVPVnR#)N)Ú HOT_ACTIVE_Fr$Úminr#ÚSTEP_FÚ TUB_MAX_FÚmaxr))rNrOs&&rÚtick_simrWUsE€ßÜ%ˆŒÜ˜eŸo™o´Õ6¼ ÓBˆŽäœm¨U¯_©_¼vÕ-EÓFˆŒØŸ™ˆŽrcó €V^8„dQhRRRR/#)r rNr!r z5tuple[dict[str, Any], dict[str, Any], dict[str, Any]]r )r s"rrr^s€÷2ñ2˜(ð2Ð'\ñ2rcó`€\4p\Uu/uFq"VPbK ppVPV\&RVRRRVRVPRVPRRR^R ^R R / pRVR RR RR\ \4\.,/pRRRVRRR RR\ P!4/pWEV3#uupi)ÚtsÚ setup_stateÚreadyÚprobesr#r$Ú outdoor_fNÚok_countÚ fail_countÚspread_fçrNÚdetailztemp_sim diagnostic simulatorÚ visible_idsÚserviceÚtempsÚstatusÚokztemp_sim (diagnostic simulator)Úpid)rÚ TUB_PROBE_IDSr#r$Ú HOT_PROBE_IDÚlistÚosÚgetpid)rNrZrir]ÚreadingÚ setup_payloadÚhealth_payloads& rÚbuild_payloadsrr^sÕ€Ü ‹€BÝ.;Ó <©m s�5—?‘?Ò"©m€FÐ <Ø Ÿ>™>€FŒ<Ñð ˆbØ�wØ�&Ø�U—_‘_Ø�E—N‘NØ�TØ�AØ�aØ�Cð €Gð ˆbØ�ØÐ1Ø”tœMÓ*¬l¨^Õ;ð €Mð �7Ø ˆbØ�$ØÐ3Ø Œr�yŠy‹{ð €Nð  >Ð 1Ð1ùò7=s“B+có$€V^8„dQhRRRRRR/#)r r.r Ú interval_sr"r rr )r s"rrr~s!€÷)#ñ)#˜3ð)#¨Eð)#°dñ)#rcóN€Rs\P!\P\4\P!\P\4\ 4p\ V4p\RV RV R\ R\ R2 4\R4\'EgG\P!4p\V4p\V4wrgpV'dRMRp \W&4\V4wr«p VP!V 4p VP#V 4pVP%V 4pT ;'d T;'dTp\V R , R V R R VR RVR RVP&R RVP(R RV'dRMR 2 4\P!4V, p\+RVV, 4pV^8”gEK+\'dEK:\P,!V4EKSVP/4\R4R# TP/4\R4i;i)Fztemp_sim starting: interval=zs redis=z defaults tub=zF hot=ÚFzDStop with Ctrl+C. Do not run while hot-tub-temps.service is active. ÚHEATÚCOOLrZz Ú4z phase=Ú12z pump=Ú3z tub=z5.1fz F hot_in=z F redis=ÚOKÚFAILrbztemp_sim stopped.N)rÚsignalÚSIGTERMrÚSIGINTr!rrr)r+ÚtimeÚ monotonicr@rLrWrrÚpublish_readingÚ publish_setupÚpublish_healthr#r$rVÚsleepr7)r.rtrNÚpubÚ loop_startrBrOrJrKÚmoderorprqÚok_readÚok_setupÚ ok_healthÚredis_okÚelapsedÚsleep_ss$$ rÚrun_loopr�~sÏ€à €EÜ ‡M‚M”&—.‘.¤.Ô1Ü ‡M‚M”&—-‘-¤Ô0ä ‹J€EÜ ˜Ó #€Cä Ø & z l°(¸9¸+ðFÜ%� f¬]¨O¸1ð >ôô Ð QÔRð#ß”%ÜŸšÓ)ˆJÜ)¨)Ó4ˆGÜ#1°'Ó#:Ñ ˆG˜Dß$‘6¨&ˆDÜ �UÔ $ä5CÀEÓ5JÑ 2ˆG NØ×)Ñ)¨'Ó2ˆGØ×(Ñ(¨Ó7ˆHØ×*Ñ*¨>Ó:ˆIØ×9Ð9 8×9Ð9° ˆHä Ø˜4•=�/  D¨ 8¨8°E¸"°:¸VÀDÈÀ8ðLØ—‘ tÐ,¨J°u·~±~ÀdÐ6KðLß!)™¨vÐ6ð8ô ô —n’nÓ&¨Õ3ˆGܘ#˜z¨GÕ3Ó4ˆGؘ�{§5¦5Ü— ’ ˜7×#ð-ð0 � ‰ Œ Ü Ð!Ö"øð � ‰ Œ Ü Ð!Õ"ús& HÂ#BHÄÚheatingÚ startup_1Ú startup_2Ú startup_3)$Ú__doc__Ú __future__rr8rmr~r�Ú dataclassesrrrÚtypingrr2Ú ImportErrorÚtemp.redis_outrr6r)r+rRrTrUrjrkÚ frozensetrIrrrr!r@rLrWrrr�r rrÚrœs¿ðÙVå"ã Û Û Û Ý!ß'ÝðÛõ*à%Ðà€ Ø€ Ø€ Ø €Ø € ð€ ð € áÒMÓN€à €õEõð  ÷$ð$ó ð$õ 4õ"õ)õ2÷@)#øð_ôØ ‚Eðús®B BÂB