From e3530b43143afa07906a9f8f556b335fa1f612a2 Mon Sep 17 00:00:00 2001 From: hydrosys4 Date: Sat, 5 Nov 2022 17:57:42 +0100 Subject: [PATCH] Autowatering change and HomeAssistant integration fixing --- HASScompMatrix.py | 2 +- HASSintegrMQTT.py | 4 +- .../ActuatorControllermod.cpython-37.pyc | Bin 0 -> 1941 bytes __pycache__/GPIOEXPI2Ccontrol.cpython-37.pyc | Bin 0 -> 10445 bytes __pycache__/HASScompMatrix.cpython-37.pyc | Bin 0 -> 14015 bytes __pycache__/HASSintegrMQTT.cpython-37.pyc | Bin 0 -> 10690 bytes __pycache__/HC12control.cpython-37.pyc | Bin 0 -> 10058 bytes __pycache__/HC12mod.cpython-37.pyc | Bin 0 -> 14673 bytes __pycache__/HWcontrol.cpython-37.pyc | Bin 0 -> 27300 bytes __pycache__/Hygro24_I2C.cpython-37.pyc | Bin 0 -> 4576 bytes __pycache__/MQTTcontrol.cpython-37.pyc | Bin 0 -> 13373 bytes __pycache__/REGandDBmod.cpython-37.pyc | Bin 0 -> 1153 bytes __pycache__/SchedulerMod.cpython-37.pyc | Bin 0 -> 1506 bytes __pycache__/SlowWire.cpython-37.pyc | Bin 0 -> 4684 bytes __pycache__/actuatordbmod.cpython-37.pyc | Bin 0 -> 7077 bytes __pycache__/advancedmod.cpython-37.pyc | Bin 0 -> 5305 bytes .../autofertilizerdbmod.cpython-37.pyc | Bin 0 -> 4970 bytes __pycache__/autofertilizermod.cpython-37.pyc | Bin 0 -> 2768 bytes __pycache__/automationdbmod.cpython-37.pyc | Bin 0 -> 5854 bytes __pycache__/automationmod.cpython-37.pyc | Bin 0 -> 7272 bytes __pycache__/autowateringdbmod.cpython-37.pyc | Bin 0 -> 5742 bytes __pycache__/autowateringmod.cpython-37.pyc | Bin 0 -> 12936 bytes __pycache__/basicSetting.cpython-37.pyc | Bin 0 -> 261 bytes __pycache__/camera_pi.cpython-37.pyc | Bin 0 -> 1431 bytes __pycache__/cameradbmod.cpython-37.pyc | Bin 0 -> 4838 bytes __pycache__/clockdbmod.cpython-37.pyc | Bin 0 -> 1758 bytes __pycache__/clockmod.cpython-37.pyc | Bin 0 -> 4544 bytes __pycache__/countryinfo.cpython-37.pyc | Bin 0 -> 15782 bytes __pycache__/databasemod.cpython-37.pyc | Bin 0 -> 7245 bytes __pycache__/debuggingmod.cpython-37.pyc | Bin 0 -> 1929 bytes __pycache__/emaildbmod.cpython-37.pyc | Bin 0 -> 2270 bytes __pycache__/emailmod.cpython-37.pyc | Bin 0 -> 6517 bytes __pycache__/fertilizerdbmod.cpython-37.pyc | Bin 0 -> 4964 bytes __pycache__/filemanagementmod.cpython-37.pyc | Bin 0 -> 4209 bytes __pycache__/filestoragemod.cpython-37.pyc | Bin 0 -> 6029 bytes __pycache__/flasksettings.cpython-37.pyc | Bin 0 -> 219 bytes __pycache__/hardwaremod.cpython-37.pyc | Bin 0 -> 42234 bytes __pycache__/hx711_AV.cpython-37.pyc | Bin 0 -> 6945 bytes __pycache__/interruptdbmod.cpython-37.pyc | Bin 0 -> 5586 bytes __pycache__/interruptmod.cpython-37.pyc | Bin 0 -> 12646 bytes __pycache__/jsonFormUtils.cpython-37.pyc | Bin 0 -> 2870 bytes __pycache__/loggerconfig.cpython-37.pyc | Bin 0 -> 1010 bytes __pycache__/logindbmod.cpython-37.pyc | Bin 0 -> 1985 bytes __pycache__/messageboxmod.cpython-37.pyc | Bin 0 -> 5144 bytes __pycache__/networkdbmod.cpython-37.pyc | Bin 0 -> 3725 bytes __pycache__/networkmod.cpython-37.pyc | Bin 0 -> 26954 bytes __pycache__/photomod.cpython-37.pyc | Bin 0 -> 9049 bytes __pycache__/selectedplanmod.cpython-37.pyc | Bin 0 -> 19755 bytes __pycache__/sensordbmod.cpython-37.pyc | Bin 0 -> 10009 bytes __pycache__/start.cpython-37.pyc | Bin 0 -> 67858 bytes __pycache__/statusdataDBmod.cpython-37.pyc | Bin 0 -> 3349 bytes __pycache__/sysconfigfilemod.cpython-37.pyc | Bin 0 -> 2731 bytes __pycache__/systemtimeMod.cpython-37.pyc | Bin 0 -> 1414 bytes __pycache__/videocontrolmod.cpython-37.pyc | Bin 0 -> 2077 bytes __pycache__/videomod.cpython-37.pyc | Bin 0 -> 1251 bytes __pycache__/wateringdbmod.cpython-37.pyc | Bin 0 -> 5114 bytes .../wateringplansensordbmod.cpython-37.pyc | Bin 0 -> 5746 bytes __pycache__/weatherAPIdbmod.cpython-37.pyc | Bin 0 -> 5371 bytes __pycache__/weatherAPImod.cpython-37.pyc | Bin 0 -> 11840 bytes __pycache__/wpa_cli_mod.cpython-37.pyc | Bin 0 -> 7496 bytes automationdbmod.py | 4 +- autowatering/__init__.py | 1 + .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 132 bytes .../autowateringdbmod.cpython-37.pyc | Bin 0 -> 5963 bytes .../autowateringmod.cpython-37.pyc | Bin 0 -> 13682 bytes .../autowateringdbmod.py | 43 +- autowatering/autowateringmod.py | 492 +++++++++++++ autowateringmod.py | 663 ------------------ changelog/change | 34 +- database/default/defautowtdata.txt | 2 +- database/default/defhwdata.txt | 46 +- messageboxmod.py | 63 +- selectedplanmod.py | 14 +- start.py | 21 +- templates/autowatering.html | 653 ++++++++--------- 75 files changed, 989 insertions(+), 1053 deletions(-) create mode 100644 __pycache__/ActuatorControllermod.cpython-37.pyc create mode 100644 __pycache__/GPIOEXPI2Ccontrol.cpython-37.pyc create mode 100644 __pycache__/HASScompMatrix.cpython-37.pyc create mode 100644 __pycache__/HASSintegrMQTT.cpython-37.pyc create mode 100644 __pycache__/HC12control.cpython-37.pyc create mode 100644 __pycache__/HC12mod.cpython-37.pyc create mode 100644 __pycache__/HWcontrol.cpython-37.pyc create mode 100644 __pycache__/Hygro24_I2C.cpython-37.pyc create mode 100644 __pycache__/MQTTcontrol.cpython-37.pyc create mode 100644 __pycache__/REGandDBmod.cpython-37.pyc create mode 100644 __pycache__/SchedulerMod.cpython-37.pyc create mode 100644 __pycache__/SlowWire.cpython-37.pyc create mode 100644 __pycache__/actuatordbmod.cpython-37.pyc create mode 100644 __pycache__/advancedmod.cpython-37.pyc create mode 100644 __pycache__/autofertilizerdbmod.cpython-37.pyc create mode 100644 __pycache__/autofertilizermod.cpython-37.pyc create mode 100644 __pycache__/automationdbmod.cpython-37.pyc create mode 100644 __pycache__/automationmod.cpython-37.pyc create mode 100644 __pycache__/autowateringdbmod.cpython-37.pyc create mode 100644 __pycache__/autowateringmod.cpython-37.pyc create mode 100644 __pycache__/basicSetting.cpython-37.pyc create mode 100644 __pycache__/camera_pi.cpython-37.pyc create mode 100644 __pycache__/cameradbmod.cpython-37.pyc create mode 100644 __pycache__/clockdbmod.cpython-37.pyc create mode 100644 __pycache__/clockmod.cpython-37.pyc create mode 100644 __pycache__/countryinfo.cpython-37.pyc create mode 100644 __pycache__/databasemod.cpython-37.pyc create mode 100644 __pycache__/debuggingmod.cpython-37.pyc create mode 100644 __pycache__/emaildbmod.cpython-37.pyc create mode 100644 __pycache__/emailmod.cpython-37.pyc create mode 100644 __pycache__/fertilizerdbmod.cpython-37.pyc create mode 100644 __pycache__/filemanagementmod.cpython-37.pyc create mode 100644 __pycache__/filestoragemod.cpython-37.pyc create mode 100644 __pycache__/flasksettings.cpython-37.pyc create mode 100644 __pycache__/hardwaremod.cpython-37.pyc create mode 100644 __pycache__/hx711_AV.cpython-37.pyc create mode 100644 __pycache__/interruptdbmod.cpython-37.pyc create mode 100644 __pycache__/interruptmod.cpython-37.pyc create mode 100644 __pycache__/jsonFormUtils.cpython-37.pyc create mode 100644 __pycache__/loggerconfig.cpython-37.pyc create mode 100644 __pycache__/logindbmod.cpython-37.pyc create mode 100644 __pycache__/messageboxmod.cpython-37.pyc create mode 100644 __pycache__/networkdbmod.cpython-37.pyc create mode 100644 __pycache__/networkmod.cpython-37.pyc create mode 100644 __pycache__/photomod.cpython-37.pyc create mode 100644 __pycache__/selectedplanmod.cpython-37.pyc create mode 100644 __pycache__/sensordbmod.cpython-37.pyc create mode 100644 __pycache__/start.cpython-37.pyc create mode 100644 __pycache__/statusdataDBmod.cpython-37.pyc create mode 100644 __pycache__/sysconfigfilemod.cpython-37.pyc create mode 100644 __pycache__/systemtimeMod.cpython-37.pyc create mode 100644 __pycache__/videocontrolmod.cpython-37.pyc create mode 100644 __pycache__/videomod.cpython-37.pyc create mode 100644 __pycache__/wateringdbmod.cpython-37.pyc create mode 100644 __pycache__/wateringplansensordbmod.cpython-37.pyc create mode 100644 __pycache__/weatherAPIdbmod.cpython-37.pyc create mode 100644 __pycache__/weatherAPImod.cpython-37.pyc create mode 100644 __pycache__/wpa_cli_mod.cpython-37.pyc create mode 100755 autowatering/__init__.py create mode 100644 autowatering/__pycache__/__init__.cpython-37.pyc create mode 100644 autowatering/__pycache__/autowateringdbmod.cpython-37.pyc create mode 100644 autowatering/__pycache__/autowateringmod.cpython-37.pyc rename autowateringdbmod.py => autowatering/autowateringdbmod.py (86%) create mode 100755 autowatering/autowateringmod.py delete mode 100755 autowateringmod.py diff --git a/HASScompMatrix.py b/HASScompMatrix.py index eaf2778..46ac97f 100644 --- a/HASScompMatrix.py +++ b/HASScompMatrix.py @@ -404,7 +404,7 @@ def create_config_entity(self, elem_name): # used for the MQTT Discovery config_payload["device"]= {"model": "Hydrosys4","identifiers": NodeID,"via_device": "H4", "name": NodeID, "manufacturer": "AngeloVa"} # here the MQTT part #print("Topic ", topics["config"], " send payload: " , config_payload) - self.MQTT_client.publish(topics["config"],json.dumps(config_payload)) + self.MQTT_client.publish(topics["config"],json.dumps(config_payload), True) data_to_store={"topics" : topics, "config_payload": config_payload} statusdataDBmod.write_status_data(HASS_entity_config.config_reg,"device", elem_name,data_to_store,permanent=True, storeid="HASSIO_device_config") diff --git a/HASSintegrMQTT.py b/HASSintegrMQTT.py index f8bb855..851e4b0 100644 --- a/HASSintegrMQTT.py +++ b/HASSintegrMQTT.py @@ -67,10 +67,10 @@ def subscribe(self, topic): isok=HASS_Client.ClientObj.connect() HASS_Client.ClientObj.subscribe(topic, qos=2) - def publish(self, topic, payload): + def publish(self, topic, payload , retained=False): if self.is_send_state(): isok=HASS_Client.ClientObj.connect() - HASS_Client.ClientObj.publish(topic, payload) + HASS_Client.ClientObj.publish(topic, payload , retained=retained) def check_loop_and_connect(self): if self.is_enabled(): diff --git a/__pycache__/ActuatorControllermod.cpython-37.pyc b/__pycache__/ActuatorControllermod.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1e7022fe22cd144930ef90a25af08579939895b4 GIT binary patch literal 1941 zcmZuwOK;mo5a#kFijoz{QQ{;m3iZ;$4I0@%PeG8@&ornb8BWj!L;!-;ZX{Y1Ni0`R zEl|Crhh7TwSo9?4)}DLn@91ey1quWR&|i>Kzoo3$210_foX39i&CKrR(vqv;+3tOE z*t()=|0-qinE3e$U-k@wYLrBpH(!ZI3SIZ~Vl_OYSWV9?R?D-PHnXYDN-Nqa@f=#F zCbfPfUYV7sJ=FPATJl`#coj+>Ypd=XWY9VjcW^>^lAUB<+>u((P)0med^Wxhga21in<-?}Otkop zSe{*lRtB2;-uTy-;`e~wD0uvd=;nnwYS6Ep>*zmvMz7|^OB3u3WCoI|i8d*DSCa!Q zoj0-fy5dByof?Zt6!y!rxL!o>Bl^4p^SX7etShvJ(|{>r@BVy_bVb#PIo?ovGm5{P z1mxUwf4)SfK_Zej1)16? z2&3C!{5-iGh4FAwey2-QStpH+u}DUN2$Q(=tpdKgdP^Fa;Ic9ZIDHXtHcF^;GZygP zfCeIv)vv$vA9i-TerMy+j;ui2dUCMmZ#~*Zb!ij|FyLV<^H#gCM5co5AQML6gmJ}gsW)J~AsC0pfnc(ny$D5b zfGOY?Eav;r8;mrF``}&{3QqN3I!yIip*R_fsZv&}(w?6OX%#HIdM_D`K-Eu<8OK4u zIS8|4C=GD+s*6^MlazV&i&}(=yya}1rU@5}E?k*c<}8Tj6*_dxi^0kgO~5gUJx8$+ z?0fOM#@je8Z$EDjk`ZgCVVlLrZPkD{8MQagMzod0f+tZ_G~-TsA{B?C6^n!wfMh?Y zgQq*XNz}VcTu4_p^(Lf4>d>l&vZ>c0P1u%|U9S_H)ZwWT6g#K(q`07Hekn@&{V?wH z2EzHLO59N5VGbL05FNig$(z%C$k0W+p U-M*{|;h^NR*Qn_(b1akm56AT$d;kCd literal 0 HcmV?d00001 diff --git a/__pycache__/GPIOEXPI2Ccontrol.cpython-37.pyc b/__pycache__/GPIOEXPI2Ccontrol.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..778dbaa43a4a607f5d8d095311d2e6c55087e22d GIT binary patch literal 10445 zcmeHNS!^6fdhUCAPM)HUmF>}KjSt4yGrY zH4W@0h&M(a7TLsDj9!8SNPs*hz`}5Vz(8K|95jLiNS?IFLmn540Lk}N_Y4oo!6H~7 z2#_KAuj;?6tLymw@BgccSBu4*hTnzy;d|CaP5W2gbbtNGT*ejryP;`96M9ptGBuj| zvR>7fjjFM1R!u#5W>qa!#;)2bb*hd^Gu4br-Kwk7Y&EOWTs7xqJNYMCwIIxD(Q_9| zojxxM+3yv+;uGVEu4=ZL1Iq)|0bTQ)&Y-Zpp`F?jy*k{`YC9g?@J56qGV8{5?K`8@ zo!%~Qx3_a$U&ou?fVWe)BKw(9-Q(?9{FeNCJl(Unm(M=#czePfN!jzbo7F_F_CmNr z{#@jdzVNv&4N(w9Q4)QkUkofbwHJMBL94we2E~vV7CXd<*eQ02-C~dUme?y^5HE_C zL|N=x=&!xh(5hwj5P$o>Fuk%ka9)FMA9M$y)5M`KEN>sR;;?x6Q?0sR91#_y2gEDl zRip>SYvOgJhs05F4C!HUT%17qvN$PDAw42ai#L!~#H=_g&V8y^UlDJLQD|Nj?~Av@ zd1zh}7sN$qUKf|dWu!;N6>$~mF>y^?M|xb0iE*SS#M|Nq(vxCByo2hj#eN~0Bw&#d*YtTqGh*u=?eZ{MDn8hiit+HerIR-Vxg ztu*`~M4L7j9lU=}HpIdf-Ei=*5!Uaw=I1w;97?tRCS|Oji1m}Pek#^a$NC$wekRt> z#`?Kfe={~t9LIG6*GXKbaGl2W2Cg$0CcEi9@S3r$8Wg+Xed*Q2#Pv8My!qN{GmK4q zzGBI5q33chMC^8(Uv)X8RZq6+(5oLPN8=b>!xj7#0tT-=dMBh=843*N+gfNunlOd+ znbFoGebJOBLkp>`jJ!Y6LoIY7ZCyXFg_f|B{5pX0aX%*6sbxY>XQa9P|7K$7-u#%Wo|oOKXD>)mwfjTg{^@ zkK;naZ-m{+xPq4hB2jZKz27M4j$VKqG%X!}hNTbUl1K5pPB`*s;o>|iSRO>?@o=aS zVr?VTBLk@!nbVrC{vz;*0*5|{M%(kvRt;8wzE>=e$bByeF%S!JzO@=Yyzlw*wMH}6 z=VRSh-Acsk_(p7pExa{{Y`}@qbVGOXXQ9FJ4czydXX2*UJofByq1(L3cwVz~c?_j0 zraXZ}o}@TU!ExQx02f2Lx_r-*3(yBDWKeBTEjR;Rodd%kQ(kI-t|Aj@9qkE*BN-l@ z_eP|XdR0!jd6hGj&I~SwX2%j3OcJ(0t1IT@T6T=k87&_QW-4}U*PC8VN{)Z*)K*qJ zU&KzcwE&>W15jdoGt#Srt!uGaUly@RnB{`idL3LlzuMg1zpV7aRq3OYkJketUsFSz z)A?uV1zjRM(&`*w{@6ugT6Oa)WI}ii(hgE|ZzmAJ4u<-YBmab{Fn4Q9hCEHmiii}T zMCmQ1zZsg_^tRFq5Zc!Aj?#xBlfLh&``-)gZRN5`|1*+a_j~?`$hFNd6R{1ZFxM>% za2^=NRVhra9W2j|-Mo2i>eg6!W~w}MW30U4fy${xme<@{W7E@D-X1GU9sPc)1kK|q z$0pXEa%i4%Y}N*@wU(D_pgX@6Cd4;han-Cz`oK6xe>bPRT3k~3o|jAS;UMM`w~{{Z zy0N&Jluzz`H97DtZ?W3UGA6kOER5n#o~PIb=YsdhtFMOMTv!X19-%;R7(z2$*uM(~ zAPaOaE6ta{3MC*xzKfF2#{s{GIRz5b*zX18)3Hy0EHKAAHOzpK&Va6Fz`_g==Juo- z(V4Z~eycoRTk^{Fbo^=$Kn=BfO>Z2Q%Au2E6hvg&Y55Kn-`L@S%^jX&-9JJ3fLyPc z=&NqoE_-Llo6z)(nN&iDrcnO3$V70zOQ!rP)H-^C{2Opg9(E&%VW#Ces+r&sWGONE+t z(Db~Oilc&v*u6b9J9Y;ZBFbtlH0rVYu+|7w!D9DYiJkOr`7Lid@JlP*hT*Xc{{lTr z93aSUP~T+^A}y$E1h5!3hs~TWzl%~mz;A)XKjBFViFnII6B6c@2{cGJyA&jnoUoR3 zx%DlZKmv3eKp_sTjtw86D0LIqGAV>yl=*2wZo+y744D)zM*y}gN`9S|d=^+4;XVT! zTjZ!qX>mJP2!{kQx0x$bD4a|&M-8&|vqYI+&3%L>JD2*f-lA?rXO zeA(WG(zW|ued&%@Yu=beH~$%Lq>k4@+mi^#(LuO%Jn7+&bku9^m$*TE1IPQJ(I$3G z`9<3F{UqPrTHE&bqv@bsVSsv_(CCnqQ5$;u*rjuMF{rbi-x;d^sPnRgMPm-JyknjRTi zL%q}URa=1Zm#C=+3=2NTdIlJdk029MZwmuc52_I+h+;f)5T4qRvuLWRzYDUmpkM6i zE$VTn{Fo|p5@kqPKYDH%6~+QW-FnsgAv{v(f;th45k3SHT+vG;l<9>do#D+o2l9plS~}G^4`kE#HsK-ohP}7uO#d6 zLRxk5wI%8~S+Ys7HFT2iLFWK|!G2`4-aMrTS5XxN%>jL-<2#OH`nli<{R&W?GQYg^I)w? z27pnK47(j0Qj zo9{TUx<990JjFpM<69aml7HzU)F4^&j&yCoHsu=1^eCHq2HX)*9_AlW2Rda&dWVst zj@i{C3myhG$~98kAsHjh!1H84>}K0-XWO~R4L%ZflmV6Ixj>BaByrY+h>&q-K1$Xz z4rn*iF2JtcB};~=4J)K}L1f!S=yK5g5V{<6Md(27A`jgc(B+{kMI{w5{HZ9kk!$zi zc@fWlhUY~*??WH~TaF6rru;?JCrUu-FT#xIQ)@r7p-A~5g{qmv zXs@6|f@2~?UWbUSS3ehzgAXnmut9t0Cy+K+&!Ta zEZ3Th#UCe+yfW9GX(_yiSluhbm#X>_(g^T@g+KZUe}8vLl6TiGO=7XiwHDoJ_Y-i! zUi#IBU#9mfk3Cwc`GIOq*MDQRJX&6J*pkt5We2uGSDFnhCz_tGEMk+7y~v*B8^P^{ z&rUt?60e(qkN2@Bv?+XCU`eN5^Xpzyh2n}*6`OGriT&j!l0AbRRH^t#ZNbV=#hjI4 zwI<$J9>)3ZE=aSs5WCp%z(z{#ahyvR&1`FppDe0D<`P5E!UO7Dr6YYLv=DgMS`&#s z-yl*I1(ddqdz{Chbhm_)(0~pt@LEf8Y0`VR`RP^;R!iL*WFERBG7lpH7wdGc#u??{m9z&DSLCp;DZzW?NaaW!y`Sq}Xh%?T81I#I_2nLmF~ldq zD;E0)WE6v8BMX+U!^Xj6@Jj|b!iHri76We_W&8l0BkXnt9O6KCmGJ^}8R%T-GSD&3 z$Ux^tt_nf#3AgQn0bRx->t^ud&=gt4F<2I1aYODi+F7s>xzCQW%A#}ATA1m$VV3W~ z^7F9aT$Cfn1b-FfIyq&_`J`5`D_JG20h{WyY1Dw7Ao-itv<&>WrQMYBb$u! zN@{y_LCU%+1^GSJ^V<~Pr(k567{MpZ(FnF7U9M9{uUg4(L$3TGAN>vm0V=lwPX2(p zA5m<>&p32{Nc?bPQ%lkFe6$cJT|8j{MT`Muk~Q>jz`em94&Fh%znV8wb8V~nA0-Yr z*YH!>)K5)9M?aN?E(cu}n79WWcJb5!j%V6Z8A^P|Ciq>(Xn&)ZP#BbL z7WplRU$=`$Q2cB53dR4aO)&6QtY7KhZWs#sTdgB@aRxF!kG=2hcJdkPQFfvN-rwi# zd5UdjGXdS-&}{A?vzd0EZ#s!~3(;~n2}DcXR+3fZ%KCdo_5b9G(U86H=l>45-axzm z^H(BQEZUz-uB@Sl0|tCOa;3lDaI&d$rIY0{fy-|$%nyTD?NIL+SR`Tz0orjuVh-p^ zTguA2*klIvAQZ=5PwL`uaFS?w;@fq4>XZ_qx%%~p>DFM;z24pM}Jacq=1h(sLuj@k;#JkjMDurZFivC?*vfkAwr z)>1zH-v-f*8bZ!&=jZPh!*kZgK+YKMP+sT7Ace?B1&d-byXJkK&Dc zDq~T~bE=|69IGe)nvlf{H`M_$o9oxG>X}O-)qVW#eu`Hp4pJPZc$MM+#UYB9DUMK7 zC>AKx*8frFcuFtNP^h5yUFL35e3#-Q3ffAtNu^vpW8h@fIK~`fP&q+C!c+vHFr5U} zYMdSXtA%JSS992772bme&bpJ0E)ppYwb0iV-(8^)6!UzL;cMKV_o!0G6C0s`%Dv8F z?s=@ASDW6&4DN!@A+Szjj0}`vZ`_0e8q9akDv->$;>yp3nm4xOWY% O*oJijni9UA)Bg*C9nwAk literal 0 HcmV?d00001 diff --git a/__pycache__/HASScompMatrix.cpython-37.pyc b/__pycache__/HASScompMatrix.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..164165fc941b9a8956c5e182ea946e6960b99bd0 GIT binary patch literal 14015 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 literal 0 HcmV?d00001 diff --git a/__pycache__/HC12control.cpython-37.pyc b/__pycache__/HC12control.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d99e5438657b3c41a5d090bccf0245425840aad5 GIT binary patch literal 10058 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 GC;kgoF^6IR literal 0 HcmV?d00001 diff --git a/__pycache__/HC12mod.cpython-37.pyc b/__pycache__/HC12mod.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0c04a545872d8bfae66eef137012845561863e78 GIT binary patch literal 14673 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 literal 0 HcmV?d00001 diff --git a/__pycache__/Hygro24_I2C.cpython-37.pyc b/__pycache__/Hygro24_I2C.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e0fc62021cc1d2239ffe1544ae4b2340e58463ea GIT binary patch literal 4576 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 F`!{A7{Br;R literal 0 HcmV?d00001 diff --git a/__pycache__/MQTTcontrol.cpython-37.pyc b/__pycache__/MQTTcontrol.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4e522b900057aa5b8f5eb1782b93a9053a56060f GIT binary patch literal 13373 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 E4W>MjF#rGn literal 0 HcmV?d00001 diff --git a/__pycache__/REGandDBmod.cpython-37.pyc b/__pycache__/REGandDBmod.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..53644a11584c9ad0f7fb30eb8a4d005a4f421a9c GIT binary patch literal 1153 zcmaJn$`& zPwkCAkskR=zH;I(aAL-rq^Lr8*JFFeGvn`@*=sgy1jdX0!`^qBke_&13^G{&6x$vtX5zNGP5}o&K9|$fg6*cG9Z!18{Fp3H4Un~$z5K7U5$IZdQF15 zaCq&E$)0HN`W2-R|CsnIzaSUsPHMvoF0=e1f4Y0pw@?QIALPP(4Kwe8P~e2Fiq4p_ zIGd6wy|F3z)>igD`MiB;!3_&-%KfIQ0-^jx}?gUId_QH zZdNEDS+kE_O`rI##9~Va1(sY^K5V1q zGEIs5KA7gX5p|2&fE;jdfWA*b;J_6d&@|m9Z2oS#DRle1d02PyI2w;d%G+uvmR-_* z^q=8d5<{2Z+|t{pL32^s@U%$#cd@K3u`I6bK#Uyug8DJJ1*`VLa0ERRhJo`=BuVDe z6a1UHl4OHHoDSqVT$3IO^wiaXP#?e~B>G~@g`sxwvXHkGFfC#DF=@)z-*RnshH&pW d^mCDjmsr6ZY4d_FwW{ZM><=(I4UPZ+ literal 0 HcmV?d00001 diff --git a/__pycache__/SchedulerMod.cpython-37.pyc b/__pycache__/SchedulerMod.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f436bf62a55acb7ceeac725f2dba5520ba64f8d0 GIT binary patch literal 1506 zcmb7E&2Aev5GJ{+)p{+-zpx)T_{dCbZtwUUS)iHCTVc;wEgsCh8V!!8YnOxB@$<*I^g-P;aOR zt{w^V7l>!9{l!0sk+p>jK^CeQX3F_w?YFtxdL(;CeWS-YJnIb`9?4_flCaO0sw6UF$*6IC&fl(5EMf1sp!-?DXFi@?RN^9L}CMU^>Hb=_Xcy(lS zPgzSlow#)qm-)r%NExCMO*2-G-*et?2anse>9x;?1@%&n(_;F~=iQYM%S#URi{xUj z?ew%vmF=nNch$cvEg|5;+!iuN$kXlWI^u7tbJZhKFPlK)F%H{6QLuCVfngeOBwy?w z5FsUpE*hC(UL+XGeq?41*Oubn>)nCQRChG&s{FVsk>Xru-T8(5qM>a zf{Bou4b=Y!jcMWrgj7gVEI`bxb#kqhu4I1i-{QwbxUFh9juQ_@dHAo;nC#7t{}cP8 z@rs?Xb3s)689iUn;mrVqeKn)P1x981SYbMPNKFM&iKaR8$}}b3zQ-6gK*2cstycB=`DF*XTFMP<+GtID=)XCv_x1r+2TIJA2Us_)&qiUiR5)2&bnyu VmM?_hfrkUN;88849$*i{+J9=>cKiSU literal 0 HcmV?d00001 diff --git a/__pycache__/SlowWire.cpython-37.pyc b/__pycache__/SlowWire.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..994cb78da06594aec9a40720953fe9efb04a0f22 GIT binary patch literal 4684 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 Xdl*T$);q9q@}N&GwI9&a@&Eq-z=u9W literal 0 HcmV?d00001 diff --git a/__pycache__/advancedmod.cpython-37.pyc b/__pycache__/advancedmod.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..acda6cecdc8210277b0751e70c8d0fdc2de3e1a2 GIT binary patch literal 5305 zcmc&&&2QYs6(@&WE|*%ZK4Qz3;>a6Wwzd9{{Dq(h+`z772Psk|P29NHqFvBCl*EYp z;o- z`@J{&gYoge!sl0yu7`g=YgvDzo8iaB;2y5@6Wg++)wHB7MPheEQ`j_i5~t%fT^_qh zsae9Dn|Mu+`*P9yO`q>8%?kQb5_E!Q&>3rvb*jy3@!Rp{I6qTs)}+^*kmcs&h80f5 zR&zS49lQ}u=&6??{R59DX>423De3Rq=xYb3^L6Z1k-?W%b4HHID*7{WT-MN^l@oFj z{j8jl)9B~qEqO|w{?cx~DR0Xec?P3%@~oW2+FNo?zKMQbo|A8(KQHIydGvKzmv5tg zTQ0~8=ojRoyommSyd*E9UzAI-f&QYrBCn#qB(KTq=r7Ax{;_gQMCm+<)NNXCVx~Ia8sJ^Y^B-U}12Cv8^4cpZEcviR8x4Uf} z_qv#IQmxh+j`1Zn(s3s;E{#lu#xhEDxEq8LQ{l26=-tyYS`W7qy+ZxrbmPfTj2(qH zLWbhGdOJ+wrz)hk)oGVDNizHpKpx;qC(&r@z}7-L1J$tR;n%a7tM1?|~o-|bz zg_7oIGgDo?|M>o+4?cXjcK=5YS@Q6YmKwuu+)%7INfN+xJlf_R@mOy z@uB-vmEL-`*e7joMxBuM2)mMA_&uzqm(W+< z8Af>j1#YChXGxJ`e(<3tjIRRYKsk_S1HIGI*>eZWnS+%}gvrbT>aS(4bk9%}hyy!w zG$9gEK!$#H4XB)cVr2p-EUl>tyv0%HKmzl7i_BnjA|m8=qQ2)SOUP zuwo9$fQYMv>jAFx9vT?OjzI>4TWpvsFbtI4@}NFOFp$U)jI-8V>sbx7aOAE~-&r$b z?HBDN`lwG_$+l?Nc`Ui6T%bcO;$69Z6jtgoZjb9#gI=FT$%A6E4jxHsXmZU+qiHc| zs};6-*F(`|-Ig4XJz@X~^uJng!5Uc{3+Zo*DV7&uw0y`l{EwET^ zu#nkcusLQh7a_cuIbbei)q=Ga!CEzhtpnB)IcqfpM=CqJ;VE*lsW6F=>vF%3T#gLN z^mfeO0d!Qo9pbLvlcdD&!JBE%*bx{qa*YE)!MVA#tl}|c{Gr4Cgbj+& z^=uDmI>5JPt9LO!@(?LP*J~ciPVx{{Ni|BpWE6Y`KG54pLA z9zTL#C=(h_MV;RBC=X07ZbqrHQ8ML1SCA|SR!5yaQg{@q_U3vVp~}nD zgQ8r4asG_ubQ+C?@*__v&|XkUqV8d~?a&%NsjKQm;^zn^LZ{1l1xw{0GU&Nv}yx zTCnE`f`c0@`BGl}B6>Um9yFi|fi)=R5O0P2b{JETf8hWxI3xercE7D2v7 zf%8}FkxR@0Lo%a=dWhLks(USHo?=CV4>DMD-^qg}!@+b*q>nTE0LRgnHh5x&YnmDd z59${Vo+VV%@XkJtq+6Ey7}brC9<5L{BR%?V0DpXvDHpYkONS~&ihgast0*ZOapMNu zL=u`(+Q)G%$K@NCXq0mImFZVt5d&!HZPn#dnoli7p5ajpq#j4&7{wr+;$WDsuwP0z zw*WsEX34{lc*PZJ4f7+Hl7Z-Am)^sGsq!6m>oQDW;V^?x0wE6F8UUF2Tuzj5Et@DP zND};Vlpjln&Q+_}|41@C#v-*t&yuQiiXD{!RLGEjr)~8S=0{vYXdH=8WgGknFZ@z` z-x|!Z64QI&3^0fw1z6BYL{V|#JSwPTDjf7=TvOr5VXiwV?5ALCet7iQKS)~2J5EW3HI{O5SX)zeg0x^cX>Yk|l8{zla45G}d-X4ThGnw5j*@rC z;2&di9MClVNuYbY@?%Wp+(qU6UG z2sRo#C2>+!b6R{(>}-EtLNr<31u5uQ1rXgTR?0jd;0Z_4i5YxH%)NX2{YcmKW>oKo zdb6&37{_TnZL7Gi>)l?x6M~^teY3YykM-rWuC}|&##>jtT^vgNR*Mdutrpj04d0YE z!xTSI_|F5!SkX(3OZ%d@jujtGgJ=-7x4F(RUed!~7peLwRKnjR$OfuKPan4yB|2U} zK+N z>-Z=^XIM2w4W~o;?}Jawd;;a8VO}E8xk25ehKmKNwDO99GCHR<&Jav#Oe`FpjD7~p z$RuQPC~b#FOv>@kr!)U9{+-!QqW4Illn9DW_!RKNFP-lFG7_spSH4!A@=N|aF2|n; af}rZx{Aqs--wD6s`~D=_k{|d}f%rEArBovT literal 0 HcmV?d00001 diff --git a/__pycache__/autofertilizerdbmod.cpython-37.pyc b/__pycache__/autofertilizerdbmod.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dab1d0ff13cac9a3e8033342639fda0c28bf8284 GIT binary patch literal 4970 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 BvKasX literal 0 HcmV?d00001 diff --git a/__pycache__/automationdbmod.cpython-37.pyc b/__pycache__/automationdbmod.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5b1b3877f598abc7dbb18bffee065ec2530f33b6 GIT binary patch literal 5854 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 literal 0 HcmV?d00001 diff --git a/__pycache__/automationmod.cpython-37.pyc b/__pycache__/automationmod.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e69559d6aabb1bb4de21d2ef92e5c316aabaec3a GIT binary patch literal 7272 zcmb_hOK%)Wa;{fbS3lWoHs24Gq@iYdR*%`)+1Z64$)k}*J6ew@L7H9JjkSqVXOiq? zcNLXYEsBL|*nkWeFkoN~d-S1sumS&rJsCduZ0uoA1s@FTNkSN zK-=gT+&25>!0K4sw$Ltg3fwOA?Lo0q+Iu7O)`=vptQyP>zb2G{qe1 zOQI#_QC}7dViEOwVo5Bc-V`fh74;RdCe~5EFE+#l)E~%Y;qDvX=<2?(pK0xjZ%Myx zJ*^+8o*!-R4E=7@3w%%<(RPI{dOU(_q{OkcnKa{$=a{H{!pe>uP;^94TgRsRa)u!JHh0| z#;j-+U9C`gAO3?mt;86uM5t11;WD(WcO<+QTrDRJm2IS52rhyrX;I^zwa zVBpa%i5EmKhtgBsJ#2%Q&SZL`_WjSPbM{d6BDtNBw|PwI?$5q{%uQ9qGO0a`x_)q| zNR4en%@VD0==GwWze}6+_nKM8d%-~7IOyGw{;M0rg&z#K&bYyH*AI@;a`&i< zeUzb$E?`#KSqQ0?^qjYuRlz*``Vve!roywLA9`> z`gBK)sF3Jy;QlY`&*3uAzqQ4zt0q3eif-F#0qwNDE2Dg4`aKwOiw4Y7u}B5612e9i z9zr@$YgCZrS+RjuT00TW>-RqZDJ1SS-OTjAcF?z{U1ISiY?Rri_n!$941H$(WB z-4Awm;XD>O4~wr{ES%1s7>#@_yRbWmTvBo;+Z?!{tXNaIZEqQ zgM_Z@>V43<K@N8CpsyU41nJ&$1sV=9v7#pRuKYf%bKVo3?KxY z>!~kmNdZ0fnVy+bbBgcu(3~RXIFU0hP1k8)4tm7wu`w=VV@vP!5*L%+GQL`w&TZ0q z_+sS@buOn?r{h}3=BRdtpZR=DeL7|VV`k2bStQQz^#-VVWdE|7KtsQ*Vcab1Y$=(| z_8^%R%X~KcGt*Z{m!dW*h}Dsex+3bMdQuU!eGTWwzhhU{vR&cP>nA&r6cT$$ODe0{ zsF@TKCvVT~YNOWc>rq|sR~EH51`K~~G@rD_Gf^XPlKEt=rGc)~%HJ3-H=fgO7r>LL z{v7LVki+w87qZo&*`$<|q3PzaMp}PkjutS^O%}w(q$DmSfgrgPfbzcs^NT z*_*34;YZ8KvZzB_rdks1(F$|$A#1fxeMx2CLf=PB{~pnk3h1q5d088+GWBY*O7;ye zsV1vQ4SX-{+M~5-VZ4|$qNQZ**c>mz+SdIt#;=HL^c8NK;ySmlK!Y}G@K@m4CJp*c z(27j^JJ5=()pvCQAI&vksi%;ukTe%Ha6Iwd8?YMky^j)OQ4`-^)S^}BPe=RXMR2^R zjW!UZvpriIuSXjQ-#>uWT}Up7PoNe0eog#v-$d)<=)%|)pC%i5Xk0;y_Iho6F`I`u zHJ~OO#{OSTdEsxcp8h|1`G@~KFMRO)C_8vkJBy|9CnvGied6_it9ISTf9PJjcI}RP zw;LgDXW`mC9lKL&EAVApdNAzwInu|iF9uTWO22zVvwE*M+{fj+gpu6Ge*Y-`!B)Us zf$u8$a@bQ+Ty+lvwU3inx;TH`C~)bsSKa(@yXmG{d~qv?T<=9+Qa8>^Xb z@#XBS@d;#Hb$@~}IPG}cfv3Cy&Qle38kxM?(H;)_Js`rj3~#9DG=b|_(39S@hHnIi zQXELt3q)Ml{PO1JBcK<6BY!w}Ar&9pX>H*3`iumlqXXHgd9S4Mc4g=d4*HUMqrCv1 zV08ctO;rQP=^e%IXUC!24g5$2ebj@2=L;6=jK0fCMnmPtQU&pQj{?!#IdZ4Mxi~yo zT*5z*>d~3{_P_BL-}o+_54_hWQn7o8ab6HpL5mq@eT4whFQ!JUj^P0uu3f-Zk!g_E!vkdV8`h7GJ4f}G^EB8C+?pX z_(I2EH+2BjGY@0H?*IfJkWnbYt_+3K>X*;AA8tK(yuEez(HCh2Z}+}_`qlQmNB32M zzHWO52Qa17q$|j5FWd?aANr(@C+y9si5o;(%XE?poLc0osnwOeep(`dSr2J}rm1x9 z9^uJ++azKVJTNV=?WP3;gFq<)&uWR5Z_wn^w-~iTWJgl4fKQ|qEG^&&^sbiC*LKwv zn$A$3fO_hX@6Zh(btYQsG&7Fjz|#$x(je)?>^iMUJUcV;gnDXhTAKPFE`*u)QP?^a zBKT?ne!wfoxOyJrCO1L?*@`X7Ew; z6ADeQ8@K`(RoyWhqik5X5>#~yw3X~b0Y@$`xF;eHBRmND%z(ZwA zU$e{njh5cjZH#PCi7{Bk#7Luw(!v`(R61tWZ0Ie!YE)?y9>?Z6Sf{G5fiGSUZQRey zcWEtyCF)XoiT>zvKE1v;ILioFN4T~K9ni&&OkpIpz!ha&0NkY90In2?oxKBO7cs(0 zih^#Z)Qc;EumOTG8!!&_enEYUF&XHhUWb8>DN5Phk7tzWnnW`qZoM%8RGm>NF-2wH zRKG!8rCQVy3vjCr=v7Gy483Lmy#S#_gJ}lQM&+nFu8G;C%uuqV{u46QGnsO}iPH(K ziIoXv5v(qWIpU6CPHT%Z7je^lqU5VyFbrK79{>V^oDG<9habaA! zekzh*`|hz65CT7RHxUdc?uVCn$$d85+39tA$gjA0c7jj5c=7jjEI%a3Kna;C?#fOD zH@^Nv1zjnIia`)NEOE(@1xM>u1_10G?rpqNK1BJ5@Bwg_`UEx-+Y~J!a*@s!Iy-Au zSx&-f{_f4V>K@`8&DT>u#1u~N#0y(_oF^G@oD&C7T6=~Ao%)gnQfyN{qJm6Ot)iIt zaF+6!r73_cJ3W6AGfoZyiU|Z4mSAL$)^t8Jw7unyj%dl|d~7DiB4e~Q8AwSjwpXBCTcjyD?e zZ+Jq^Q|LUUYl1+3R8s)pm2aUD!HGECgzUr{wFKxdNTtThx>&Qj$`@yG^ zcXkwG>s#Gz>%4)KWnt?gW9Q=_Yv8n`#(53i!P@_UCr>Ihptpvhh&tt!6f@=ZAMqme zk(p@f*O|6(>!iGifg5BYDF}1lQlCafM0u9N8$;lxhRllXI|4ZmVc~9Xju5_*LJO%V z3TznvYuwWv3Jj3iNo)>72y&FuNRZW_FCoBi@)V)P8kaDtoRp5~Hf@e7NhP7xi&1%8 zLFm(>YJyA^y=Up0VXk%;tuU>Y3qUd9t7c}-CH`Cpu9O$@zS#lj7<>Kt_l^)=Gf|6{dT*aft?CWfXx;NPTi*OlDgC{P^63K%Vvrfgz&OUMYxsu*&on2 z%7UiNJi#XKV^D^0)Me@=%g)@1+_PP!I**bCcY$m7l=Ww%A3Ra978m^I3g{vC}Ljx#ZN~KF14;?G8*tKXFe=PzW8H zZX7jmuE5Ne$;`~>n%~eh`oYZ1Kh}KXkFf1ouJ&Vm>15m6X0|~y=Qb!U?DPXKYFnyL z;}we3qMb|a9MPT?IGv?`Fl1WGt!4>_ct}ZMh>stjif&}ELRT@UQ$gwCN?4bp043l_ zz{$T6z_ghsn7=|7^5m3T<_t2dl|klNPSmI9-=wwkh(qtGv%L+}=WlPf+i7_l|8Bt@ zRBmr88lxx-rOt~XP$BMWnVAtoY54#`T^~lhe#pk07Aeh(VWsj}p38?jWbo>-TUOrf^D#TivCCRG~Z+X$c$iRhCyG6(&Z<*$ie>A60F|(Tt^fc4 literal 0 HcmV?d00001 diff --git a/__pycache__/autowateringdbmod.cpython-37.pyc b/__pycache__/autowateringdbmod.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c312509df1b16a50b6ce4fb42b92f1442218c628 GIT binary patch literal 5742 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 literal 0 HcmV?d00001 diff --git a/__pycache__/clockmod.cpython-37.pyc b/__pycache__/clockmod.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2be69870ed1fa702b4416cbd68912ebc9072b1cd GIT binary patch literal 4544 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 bIQnTe&N=BA!T>3;K}6CgAuiGxAN~IWEMqV2 literal 0 HcmV?d00001 diff --git a/__pycache__/debuggingmod.cpython-37.pyc b/__pycache__/debuggingmod.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c5e154b1c5490a7ee694b535df9e7d1fe8512f78 GIT binary patch literal 1929 zcmaKt-EJF26vt}=auYatQDb0n9%124kda@AMhivJm>Cd~zF?U~v6Jm+^l{HWb-GCY6X{qv_^LdO24 zk2jBx&O^NA?+}tnp0NoZa87+M^Cn^-Twi4Vz{i-#f|;JU1w)}up)y& zQ--qf8yl?3NUor5$);RI+mSj|uP z+^anu8-D85toF`4T;%OCBcyPb`nxa}7YF@;_;`DJZ`PEFNn$mbn&WS~zHOUioZ-5x z7^M?wI|t)Tm8Q_iNKFc9ua(IQMPsyUIL#6$tzH=$IQ6??(2%8}dAp*Emw7eWSK9it z_z$L6q3Ay!_701Q>P^QzmA~jEl_~OK(vxbx8jZ&J2$yV4kL_lvRbt#t|0&caYda8( z`#i$i;=UJgP2)>64SX!o?BU}g8tKgeV(yRFJb3k>_P$|1Zq37*o$@nQha`_e{h-E* z+Sj-101(47_^S4$e}m2a=eM7+I&k=`_+)$gHAR~yue>JF6*@p;gRFQ7yTfEURk`do zY~x5Bzbv%WE3}?A*;T*+qU69}q=+SP93f zQ6sRxszDO09@SV;2l^i9iMruf1u_7u;Q2kU3c)Ju&u%XL8>fdVJ&Kjqg)ZZ9{&}p) zqk4@5G1Ti2U0;))wn@%^{Ny`?qP{|t8#Ec&h(at+CQ4tW(Ir*ANuTeKxJKeS2@1Ol z4A&P7aq2n1yO=NEgJ8f#$Ozmegf}s}3^B?+^0Ujn+vre;Nw4NoAP3nAzs^R&q4Z8T z0QmjcTJJ@odq}F@!gtmu%Vy$!9(O%W2ijHjN~LKrnIs4q;cOZ-7pq-D34-vpEiT#~ zU~`FD=ls9H-PqFGZ>dT)lCPz=C>58~6n%XQD=sRf-^T!yp`8oLWbS1x-o@A#cuR^a z#-Rg^EOAlfQC2!!579Z^G|0FbmGsn;{0#7(u{`FCekfEZTojGQKMkb7D)dJvS%|z) z`ey_*=+A=69NhnGcFP4)Y>JrZRYt|;P{rpIXLtT@HvXuzyouy&meu}L7pW>s+j8MK zEGjdtj18qq3#k^d7{YrajPr64D-F^G)l$cp)Z~1-GE(O8 zLPH!#xq-bO&`f)Gr@y!J^y!nQdpkeuxoYW3f~KH$;o|(|lyRnBu)xKeD?QPdD9u%- ezM>>8DNtIdEfM`h$MZ$B8g-)eD8R23iGKm!bFVxA literal 0 HcmV?d00001 diff --git a/__pycache__/emaildbmod.cpython-37.pyc b/__pycache__/emaildbmod.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5f1120b61622f2b972c68cd7c1349adb1746e5fc GIT binary patch literal 2270 zcmb_d&2Ah;5T2gt-5t;V*v_Bh*a<@f2@A-Ug18_+35g9su#re2q&YB}Y`1qOo}F2B z_vUA{domAzICF@PyaP|tS5CYD2Tpv|yG~+@BeR;W>gwv=ud2ST`KsNHJUoBj_~WM@ zv_ENb@^C1(@#>Iyp70V+FyR+$8+pH|XxvYoU=E$a-tWL36at(lHoJ@)mlqAnWvg}(&@maJpt99Gtk3Bihp ze)f{{qA6OC7erfhATNqlu?Bfbtc!Dy8{)jU0C`zl6qg`3NhL7nhSQv6*bk z4RJ+o9pOx9TXNfJSLMYc?})*6RbEm!WAbtkYg4Ig zAma(GnOy4VFG^*X+0IzyrAZGaW#8mg+3N;26q%7GA4$tevn!+vS(t3vmZK~$`bvr& z^TODgn_3T>c$r~CBNIYNt!+5Yw0>SG(MN&YLz2pN7q4E!V7yn%_%qKX%maKzf8IIB z3%P_ls)TLn?3pARpk%gn@6Mw;`}e=w>)rW&59q^_mES$JiZlPYzB{Z&a(A5X%JSK6 zHZfIMjdmSO@dW4Xj9=Q2j-=ya?9e_2kEwNxeNyQmoHe`->vbr`d&=e@)|^4}=RU9p zGjGOb{&6r5W|VxtXPYiLRcTaJbh&K~GbNs9N>UuF-~5>FKknU4A3xl?xBuV=+k)YK zZ~s9`q1cX=nd%P-Rgr6h-78A=k-tOv(l!_Bv#gj%+l0kb3wKv4x4}if7$~>4Gmu6W zawJPb=e-A;cGrp38OPi4)fQ~0BCf;WB95UTR!{hITqPH+tCWkEFXQDs6~a%^F13Q8 z8>l9PjoyT!+GOWygM2R2ut^?7uq-!nbQX04)Jq2Kz;TI~12Jc7OkIQR|3Xa3SRz*2 z(El5%x=KsLthaL81j-Y7e~P8EFyDc#?`Q>uXw<;#68j+(B-Te_gC+g_nIqD1ZO&(0 z-!Op)=w{D2DD`%VryFBcJwZidu$Qj%I8(TBMk2k-w1d_CVO9>Li^bO5&F^7Nrhla!ezVDOb0XkkOQo0qOxRWJPGYOm)cd zOwl@MOK5`VV+Yx!Fne&(^ba13Scj>b&`!Y)U~o0N4aInd33lYGE5?5syyAvEtsMh) zd0qIXe&ik2)ve`9!`UNvppu*3+?!ErZJZHQdCMjXi( zvOh5y7-Q>2)z1p8y0jNP6Fw<FDW- z{W=^<7jV4>uHGfTH|%km>#5=AXylVZeo3hGXBaqZ`5{=p_+41YkaO5UDy;D^3L7Ck NwQxQ1sgFhO_b+rZ3|asH literal 0 HcmV?d00001 diff --git a/__pycache__/emailmod.cpython-37.pyc b/__pycache__/emailmod.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a48ed276aaca9448703fd62d131e0b5ef7fe93be GIT binary patch literal 6517 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 Q)35oyKZmk{{(K<*2L={9o&W#< literal 0 HcmV?d00001 diff --git a/__pycache__/filemanagementmod.cpython-37.pyc b/__pycache__/filemanagementmod.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8d1f9d0b01e91ce8b5305a3f019098e5e3827b5a GIT binary patch literal 4209 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 Coz^q} literal 0 HcmV?d00001 diff --git a/__pycache__/flasksettings.cpython-37.pyc b/__pycache__/flasksettings.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bff4d1b503c9da8145716ae00fddaec0d574e179 GIT binary patch literal 219 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 Ia5?pV02I8lcK`qY literal 0 HcmV?d00001 diff --git a/__pycache__/hx711_AV.cpython-37.pyc b/__pycache__/hx711_AV.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2f1b9bab2d3bdd37e7a8021ed881cca83de6ce4d GIT binary patch literal 6945 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 Z@A~t21Haxx{{eW7-c0}i literal 0 HcmV?d00001 diff --git a/__pycache__/interruptmod.cpython-37.pyc b/__pycache__/interruptmod.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..511744e16230497acda1a2b024b38af33094d22c GIT binary patch literal 12646 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 literal 0 HcmV?d00001 diff --git a/__pycache__/jsonFormUtils.cpython-37.pyc b/__pycache__/jsonFormUtils.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..908ec0d9d4866973949dd15a7f1db9574a84d19f GIT binary patch literal 2870 zcma)8&u`pB6rLH6yAnBLuEd2a2acTi8+_%&zrcy_jdwR81jMf9&5Ymp&Aj)0?~OlNT=W=zKfhyz zTPuwHPLtWs!r%^C_C17RiYF|ndLD2y7lA-8602(kR#yhHYX>%GA2Ves`GP5VBmyU@ zDf>X^Aaay*!~-{S$Mp#dyl5fvjyQ+iFIcPg2limwEvs}@m`8csjY>(QvQA?aC3(0* zOJ+ZT!5y^hHblheKsXFn;spz=YWqMcTRE89s-|4@j;bpUeN8Q>26|U5V(VsU5Arz4 zcE}|CsF!GW(X#sxIU94ubFm6vS6RVV*@PFYjcp*Ml8|=pbZTR_U>#f86M-l7g4TEi z8!t>4Mh(TVnX^6g_79a#v%~DYjgoH!^*rkK6L^{#*TctQ7L_#>?S_LSZ!MO!B;DJK zdwXSlFUlWa9O=?+w|ikXYPU;=w0P2(S?P!Qe%V0ej3F}3ik zdD=_6o1HA}ZKb;V6~%X>e@F+9dvV@wFH&q95R9*J2mfWXVbcJyFA$EmvptPTc$shs%OF9bG{b_W! zaJI5RPwoMBnzf`kd+CwC+0K5{4TCxXoYA2wo~d{zKjl$*>9pBTlR@@1?U`L6M_mZU z8{EZz=vQw3`zv#QYk12+GyeXHK@9i+A$;v1{Z}h*S%)9g^!vF`g31DP)>tY7;w%Qa z-Eqb>Xxze@h><*8&+COe;v*YxS%rNhILp29LSaw%h!^&_F=3oNWIdmwhfbg*9ov>f zkZ)K|JYvc&_<^H;d435|w=XgfsyT8%sKvrDH2RTfG(`eQTv2IwWtJyC5ybDMxxbqZ zdg`VhK2CK$teeLv_%yuM*XiRV>iRT8KKuE8gvGk+R{$9cfm2OdO_N;}`Ru-qd%31; zDeXw>R2u^8B|OmQNEil7GF(c6yp%~As?y#`(k#-Kv7}Y2*!()ifywoX33NV__3rK< zNlYc+yQL(qoFa#Q4X?h5maRiDA-NQu@W2G{K`cojT<%HFY9NtazKmH@G_B!E77!Wt+ybw9>AgM8@bQUA)@M>-s))9ZXG?F=S0T_<>LtIOrvCr8f!up3P z*6y4~^|4p+Xl`u*Y(XhE7H|HyMdV|nKvDS{kK8$r$TrwE<59&XQ*gi%xsgB5haa4U zJf*6E{HCAlL!T;-VZ^j1`&pFdRP`-97+yci!ffT-(%H-IRX2%0U)EZzxJ5CWtl-vBGJ#Vl~Zt%^EHr6KJ;U{HCU&Qb#l7(HJNypj`J1fdKHxnnNz9CF2I* zmdZL3FPBj^h(ah76BLeP5-B+nCyIuv>}k;;uuVCb!c1kkw!Ky1T=HjM4lmD;LX>7n zu4Yi5sXfMJ;eX(QkD@`he+rnEbBqFVH%kwWu?TAEAU_L#na!L*EVEFz#U^_mjKt-lDSEYE(oe{HuCM-)-6=K^Lrf w(Hu0Wbq{yKB+IHZ7_J&-o9&MU9i((`S3Z46hB9J2U3M;Cv73iD7mXW#0o2~6_W%F@ literal 0 HcmV?d00001 diff --git a/__pycache__/loggerconfig.cpython-37.pyc b/__pycache__/loggerconfig.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b782661115b0adeb838d35c5eca1b0898fe8daa6 GIT binary patch literal 1010 zcmZ8f%Wl&^6iu8svD21P`h*sg1(xbX5~z@-WE_AB9Zjj}B(fDmusbiXj@v zKo$(hL4It2359eoqHlo>C0H8gU>W@qtiS_Ug@@R`29L%zX4hc@Ht%J(uz%anBBlj9 z=s!k(9iu1c?;`5n*lcCsX(Qu4yUF7Cv*g;@C&H6KL|sw-UUv3-G54qtE~HUN2Q*}4 zUhM=Sy%mN5ql`~`JALL|E?Of*AwI$;YtB{0i7F11or@#q(~;9~4OQsyI3iLNfk@hk zWb%5!q;epTNjm4?P?ReeEQnNIzR=YLymbrJ0xAh|1XU10)C;LH-=Cg*IZrl2?)w4r zs|^`b5?v4mA&p}bMR0S=c94n&IEDo!hxZdNUS{CwVSoHm;uF3%f3 zGx44ttj*u&wJwintryfN8`MZ&a>k?D1b+?m^ zWuL+?;LIUD@*nsW95}SNapDhf;6zoA6PBErQCC%0zpB1^eAexT4t#$-{^k4M1IPIT zCwCtO;ROu!8xZcq4kz5rN#VvWLD|c_*t49*)bhrPH{+(A`>_w4=0Op}LD7m^MHq*x zv+cNT_jKZp<=wc;8>}~S;x*B^UDrLawsh5xyvcnY@YYY>h{SzZ*?^V)5-kXM`v)i9 zFet-fR#Kh16M| z&4i4;dlf06bykidr7OusBAViw&V&m81Q?tFF};b*N}UX+Wva8PJR5i>;7kjh6~a)I zObcZ$a?NJlyc%U?Dg{5%Z?$RIscA4?WTo-B7_w=u;R;$ZI37%ukhL^nN?lcwr}!*> z1O~?Ba~SGFAlkVl+FhbA5E<@qiYP5m?`e1LSd<*_vT-JxuwVK}Ak5CdlP#1n__B=( zYI?&g7b~xeiklGZ7h0g!biOz_KRJE%^~?VwYAAzA^wLz&$Ac?8rV`_V?lO zxGKc)Bs&)6p6c7cOOlzO;6g#040mSA)Hfaq(ef|BXSd@6g|f8Kc26H zqW1h94+%s;c3?%WA?X1b5Q$r@MK#%gsR__{YdFl53&bIE3+O%0h%s7XagIRXfGKwu zkns!m?&Ud|yGy$8=9oqFtcKHqjF_&BF`*Jnrel1rwuzdS6e&dYLR_16Enc#GDoh(R zx~livd}5gv#Y5}cBcbn7NecF@<8sOyo+QH$vzSc z`#T_`nRog72`oJ{^AYG$i#-Sp7?_zB@24OD-Y($nt+00I-rSj!Wn)3-R6W)n_ppBF z^a1j-y@{+|=c0%p#8|=;CZVRZkOOLS1Hu8ZPsgkr3G0k$*is%eO#Afwez);Y&sQ<2 z!!gW6&P}_X)GIVo)x|@v`}NiM$f}Dx2X7RnrDFrM0W=`;eVE?|33Jp4jznl=cGKV}LJNaLw% zW!y>`iuXeE%Ia1Xink)2Y6jSwW?rQ%SMmcq3#|e6B)Iz_Rsm#)T{wk}HAG(Mu9ML1 zc_EQUphZgxmX%2|>wG2h9NiF7M1x1hPZD0GNn%1UcB-cm&Bc5&K6DxAw1IUv4->P{)Dd?duc4*)S LID#My`hoio+i2D2 literal 0 HcmV?d00001 diff --git a/__pycache__/messageboxmod.cpython-37.pyc b/__pycache__/messageboxmod.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..15dc91e751a1e175ff9cdf99fd355ee8685615d9 GIT binary patch literal 5144 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 literal 0 HcmV?d00001 diff --git a/__pycache__/networkmod.cpython-37.pyc b/__pycache__/networkmod.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0d3ad0ace98c2ba926365ca5e7801859e11d042e GIT binary patch literal 26954 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%0DlT z5i>y7!(@bG2$kom*oz+dOgP>H(&=!#rVNtn;+TK@Ds}GHWmZsPKhpd6C>%PYm*5nd zxI7Kb7~)LLir=QALv+X_$ZeRJ@3;0zKEf4Y*ob*gLJ5XCjIQ3)t&K{d?uNkBU*a2m zjBn2bxxA9JmBAb77 z0>%X6;|7X+YHO4ltsuNnSw5aCrsfly7rVIP*4 zAf+pK{6Fw>kK!QQ3%n`>1^HOWw_sARX3Vz;4%%B2__>=nKzkFlSy|*?TaS>N2tXi| zz=zTh8(k{1akqd|7?*2OT&{4ogf3TVmB!^t(UT2%RIcCUDu!u(#xK9*cs3o^^l=CI z=qiNGGJ1!^q^=OT4N)t$VNfva0#-r*2{tGlDk zLw;c1MUz)%-c#?UB3E}j@AF;rUMWRGfFsi{gWEn96?{rWLe>PN7kb!j{>4Yxne}uf z|MKko!p!(s>YP!6It$sQo!=B}*c)R5B2wW%1sQY+L%1g* z(DD80BEs1oOh9M45kX(W_Y4;7@5X{opMQBI(4hy4gpX6Pw`|M_16{!3`= zFBLZkd4+I;fsh*v-o*_jXXaO{?oERLRgA$OQcagd{hZ*_K!D@n=WO8wy$C?w)Pef1 z2f877ha2CDJt*s+;!r{l;$p`E5kO48AN?z70!;-Y?^&LR!E8(*kZ5 zp&X~eIz#ZMrNv!3+|IC73HZ~XA29*{sSemGY4>_-LpL#sPsxg*#}AYmk%sM`hHr~* zA(HdiFcYh~T&*{4{KsHJ7$T)CUhwzYug`_9qcG?S(#{#}*8W)ML98qzQcKVyq=d*U z-qxpa*QF~7HuNGwFu?HZIwBg4>8aP}ewQe53UASAkOrNSQX|&^Jv$6F@ysWB4fS@X z*x$yJUUp04U)b&0yVxy5NVJm-0OLTBDt6KD*ShF;7gmdJ4TSVNxGVh*!J$C=#napVAB~UNHSmqfFaNg(U$~IHO>n@iJTXw?s8s8%pufjpz|!j z)1*pBz)EaqRCyaAbI5^b;L4CV!erv@bK5!T!(cl{uHH_!bBGpy9RVphd&PF{cJeK2 zJG-5lOWgcAT(8*=EPV_JF%+T+M=*?Z6};`0(C!G(Esum2b5+1si)zny$t!yUZRlt? zBF>D^VR`epcD`LYlxP=tl(g&@+og7SC4mI(7vZCnr)sZxPRY_PsSM;v>4W6W>{TS} zZV$A}YE<6*9dEE*Prkj ziHu6_45>rylviRp6y|A29Tw6#(oUgWq@{Z$oR1zzv?=EXz2Tja_Mp^wpgpLLeaG4! z^7icPZA*Lx+NQum=KHw7HldD-11a78Zj(f43$b!;ZD|iR2)nK?gwP#3G2=fg{(c*Z zsu=VyRXt~;x&`KGlWihtL9$_7rXVAdhWNE)&M|dn&4yA-Evb^xkVB59d^GB;Npy_) z=_k~c7LZ(Na&)G|-R>Vk@8pyAtb|GI%ZT~e&mv3KKe&uwPL$CT4TiY|{>ghik?cTu zJ4l|Bv_U^*+xAB^EkxJTleqFvgaNOMl7!toA2{hoBCDv81$*uq7$G-58Ya>%Y z(vVCG7{H17h4F>y3EoEl*r1NV%@f9d#JT?5or}M`uInY?64bv1Po)N##1N`LCI^4^`8FVN}1qc zNF^AYp1bwrl5VZen+)Z`^xXL55XEKkykw)}QdFL@UH?92p4`W~`= zGtVHA3BoK*^Fn1AE=Oip0SvU*&d_{V&TnU%qdiYpn%&NNumIZ-e-J8VybX~BEi$1X zw1iC;cS1KROQ% zd6{8rtQ;WF$w~bKyObj7*wyQpno8=zXFn@E#uzU*Q5K|tKz{1{g(oY8Yr0icHBfqw z@;VF@@8Z(C=&&b@E+d|MbV_3Bolf!d{sA`9#cBA4Yg79f5P%wDWURI;y+~*-eWL}+ z>Wk%cXq6rXxE*MyR8rS8^4^wPvon?aOIJhU8G7-`?D*uw`1}Hh7YSIEQdhzK&DtP? zxtX5Z3suNHgAXLEG7%a`Sq7r>Otd_l8Wof`iWMyyeH(RSwTkK$b>Rv8#6C6{N>L5$ z5Z{4lr`F5@QWjr8EqNcglwx@I8CcNnkSAPorsvMHTVyt*KK(w)P z%Sa>N7G?r9ENYub#}{o*A?T&D^NHp$kSVl4JWU%fo76Ik?O2CFufoiNjLknHqO4lu zq7-`#2#7xpOf?*7Sl?i<-E4ig0jBns+Oc=z{EPg^5mvKQX z07*#dIeb01mi$pfrg665>lrqd1hbyP1yx|0ZOh9@7!?aMWRX@%V4a=uAGinb`cu+1 zdx13lFy9sie5>jODPV=ZfG7GhI0U2Nd_~I&7CCnPBp!{W^=DZlxr7`FlWB@KKgTzF z=SzPbWv_9XsC6*I&yp!(+)$qN5HOWonVQFO(LFWH^n-B(5)t*>3Ul!}{LCHr8fEy% z#XlYn-`%J~HzVpI@f=!*bKji&t|1R}^0tw1-#u27Y3rq0gzB3dd)%e^Z2f&VUhV<{^JQa_D6BnaH z78MP@6l)LsT+kpzeyJbF6T>fQl|ik63V|h~u*#BN8hjPB0vAbAWgr9QAOT=~Zl{nI zKxGO16)pS+l@&)!E{sL69azd@IcL#AS}enYmxGFwLJx3W$?5N*6z*^72{H!Bhnqzy zgDQktMJDWnyZ_s;{=bLqiV|{eX%Fr;`2y4>;o;?-0ZC&(8tMm0*OHb@{$NyN5O(gc zj4!jD-TWz%R7YSPTN-li1Iy(M?P+I4<&!U&9)xo+Yx$y>< z@@&~KRwU~lo#_7lS@@|NTedi-y3|SAKXLyTsXack0IG*(*)bexg2S|2*BYi@&v&{i zIj&gh`=}G&)q>=9`!;OErW0nJpxRv)s()g^XaM0tMY|S$GfJ>W_l|}zh^n-Zu%M&K z@(*M2t4tvna8x6F+34Z}pl&}4wVAQdTevZ25hwKFo~KK_i8p8MFyR!c{@5>65i1$(v5_v-fd+LjB!&R>7lW4i zRgUc>9}Qy&i}HA}zP6~V8(LIpHg*)L;)VK4VWcsxe)nwbM zTI9?6kJ>35zl)k?RSxUPsvK~*Jib@h{9kQI1>vVV?E*OY4(gVSY3t=E0lYkqP-(Ir z%x3a_yj$FSCGI1+^3(028jx0aH3%+P^k_~Oc?YgsjJYy<5ayY4q&I&Go*a)BEnV4d zyeMyD#0B(ixNF2CX2jsh7zv(*Cb`%Zd$F{EJUK7D$>01Dw9`E5jEdy@pY1dx(eJl& z+aNHs zZ<_njgG1qSmLE3d2I`O-|E^~?Ed5SA8-s+tjO>WWH290*wxD!kI}aGYyEmYY!H;d} z9dFRUO2#bS;Rr8eg9;lt3HFS$VNX`Qs{OO1J!R}J-S6SYA-hPO&`(r*|iMf^6BN>JFtF@8k-&p#;EV5l_01sic{+aDFrT(s5; z0!;+OvlHQRLsShHCq;WgsQ6tjN#E^l+yBfiug}abbee#6u;yq0GL{*(|J1MW66A+J zGBexX{rzE6Mm{qQP-LRtRn7u>nC!8Y@@!z=hf;>BOxXEjO=Ve-rp&LqBbW;W;Ah z_#Bt<%O(3+8K}GCbG2wqS=Tzc)9gu&hri9ki#+riK*2uj5zyFLt7>?85gx&kV7lCY zOkwu-P(6{|17X8;6rEoho~%BhmO>p7SP)~pW-g7~o3|nXR@_~HS*T0znEYd1rlvC+ z2l+V=c5nok_fWz+98-A+$#hEp9rQ4^d?^6=o50Vd6-7&s88$Fos0@e34$U?96atW$ zI}{?R8`&H1zVcdDnprdc)8n%6yxT)@&Ys6+Dc9{9z_kKZ7i&F*eITn5vj$IU<65=0 z0&n6ue76fL&hwU5I2S!b_wB7;8GLzseje1d_F5H6^Jb;Y`{`MxZ!GJ|ejzO=J4heJ zCl^ByW6zTTN$`LwC^dpSKkl{0=Ym294SE5sxm@xbrYBs?T}*R&;bpPpNexfsugB$h z7Dds14VWrq*@)bryP0lpaCni!u)sIt)<$s$|5$f0%|iCi$J|2|%dv4tGx~3#fo7UqDE_%$S8JH07rek$@p9sfthQx?XS#yjC#1I{JA2eg^&tD$JVU1goFEx>3Q;0pi+bobogHmX~cV%#Ky=*=Rulb`vvM+OfB#q4Kohny;)@U2yWV8)KF2u zBU$)x*xCB6I-F)b&a!T?X#1ynCq){mc6)DRW@dk}=FWoH&f3eZu36r_!3F;~K`i@P z^vrYh7UqHTh82CrzqK3GkH2((NRI6d3f$x3(#+)ae3#6pjFw=N(YZUCHU+;?0jS?~ z>DS-p?QI_D1_=%sr72R7BBcoyPmssHIrWAlPq+XpaFzE^+P=fL|1J;Id5xYNdxAQ- ztH^SwZX&lq_h}xY^i5LX_%2>gz(ZraIZ%nY$s82cP+gWgnxa2uQj}d=n>x)6CJ2Zyn zW>=b|ZlQI5&otAMK?mY9#j^X^8Dt*cRX8;@g-y<~>$-sr zDY>lh<~o>7kV64X$7UDO(B*{yPaZ1v8un?qYfGb{7#mv6#a2W8DPd&-X(s)j1`Psf z{}AoOvqGzx(G!`K3NAPsOg@#3LXgS0IVpS4JcCW+o@ys0*HD&%dO!45#OG~A&y6(ddEoP6DXxf-i4}aZJt5W z&4o5%w@`I)R>*C{Gb%#Hbdy@##0mADVb+0S_JOfGWJabIuozmt8E1K5kC`lT%8{OA zvX@{ugYTP3?i-i>Lv-gqaXfo)k&rQPw=0ebL~6$Q0^|f;(G^kx9VfzJ;SF3?d#GdFb1_I7w^gcu@7TY1i1gY&vbF=v- z7H@sRv`T-^rA_h*q$(kTW3bvk7-KiX8C?~O61)G(UA>S*qKA84!=^EDyGV=Bl!(|6 z)vIp$*yf`1EOfpgop86(hg@VKF~cax%yGon8s>V#*)%zS>AC5-OF@a=v-M`ZhU`YO zf%=l%K9EepE%$X0;P!4KA3i+!+%F$ZC%NMqJ=p)P_#zvxn zAw2REA~TJ6AhTtGASrt~i;aoal4T)Co`!TP7m#oBL)4GaoF;ON<`lJN2bryt;dVhH zA3&jy4WL!#TG(c$#}oR)ipu{ zd_xRQF3a#>kh7F|NJQXxmjL^*=>>=cfWv7tqSX9>P886A$??fHyY+`IOA1{FFZcBz zm^k);wFW5<_f?jl=sXxH@a@4}-;0qFYhtRKAG`KO9FxQ%aC*U-qKRBFo%7xpBO8WF zPk}Be0NXu{Cb)+RSKAC`qjl*(6-mvZx*PtD4ZsMsego8 zG2G!f>%g5Zx?d}UK$ud8T zJl2X;Dk`dA^hQy=f(y_IlqV=ulWmI|BX(ysYpgRx{+IYRk=hA06?%#=QRFFG2jLxr z&m4QQ${uZm1-%l6 zSl^g~y{p(Dt=^j;Kh8Ob^e_`|AolHtZmItiUy4Uhw+?4u0zVh&&`jSkIKmy;xx12V zb+-B6MMeJ$EHOb!Q@BD83qujS1lNK8lnFiG5RURy*@@1&lR$_YOOc?2GP^qmzwnO{ zmd!Tbz#WsIehe>Y9;I#g?N}?*d=6Iylpwg>&bD(hhXu?o{JJPBh<`a=XV$i4@sjzr z^aF`PY$tc~1#m0#4R{)*#iP5lcy#v`ZytqFfwjXFhehU6LziQOYZen^WYL~^;TB!# zF1GmbOa`x*7VE4$iG!?Tfl8sP;>2**>3CRLZ$QmM&heBq2&53UMP?P`>MoSXx`*A0 zxk;B{MTG5G5!-sLg*&uYus{JDeYq7#sl^ay%sL%x!wP{XO;qycx@D3ju`em`&E#NU z_g~n8l2+WS0||OwCh|<7HzpT@h$AXI)p%UdP~jFUVz8u`Y0B^xtz$mN)?w*9o<*gI zkPzi#ghSgMhW9nxLa785GPRO$J)D_)@iO1K`7-JNO<)7T{)X)>nffLTh$g);i9Y%{ zE*H8%Bm}E}8^tL7*Ej_^vmdw{q;L^rZdDuW{Wi4zSE$(Lyc!`vC4fn&!<90f)>lDd;vxgE9I~ddUi_((H-KWu7gB&?l0&W-_wI^tIf6w5T=*S|LFkZp|i2?8Nxxx!EfVl^iO`MRD%+7cWmw$ThQ^dXuaFI$o3g z-8){h4_P!~BDUN|HO#G(T5;6aM6CZ<-sZ~A#fjP1xiNHwpO|XtngbRg3xBkD(&+M# z{|kaX#;Y?tJi^0cJUqd}(>y%G!?Qd*&jZ=7@!N^ZZko4m^FYsuY%8YU;g!R~5)aEf zP+`!kJdE?O#={FdxIDba!)+ek=Yhl~dEk=qENQ@!uq!FACV7?tVF_qTu+Kze>D4h_ zfj{Kc4|$;KDte5FQjsV|un}$hH(M1BLpc-VpMm#qz2Q7Z`f`7a1MMfnD-2h`QTWP1 zl*&JAQ0_ZwGfR!-MXrN#E1${_=ZA}f`857z^0|BoXC9B>cQ}6{KawB7zy0`kAb%)7 zlpn--7^Tz2qf&oQzL3wNl}zzVd9PT`7mFJxDHn(H59W{N_u`FG{_*@l20`f?Ea!Rr EKWtJ(TL1t6 literal 0 HcmV?d00001 diff --git a/__pycache__/photomod.cpython-37.pyc b/__pycache__/photomod.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d342d66b470ad3ed6e2ff154b74c20ae0cdbcbc5 GIT binary patch literal 9049 zcmb_i%WoUkex5gn6iK}wmLHk8wiBkNBs;d78zgQlKN9CUifhT1O(0j7;u%S_$QkO) zP?iS6;vx>(Ti{+G-F4B01Y88|rVFo&F8T*_T@1SGD)|Gl$maI@{f49|#r8#uQke6a zbIzRC_x&D6i-kf?!SBZl|N5&RE-A`?Q>ORRk@y5p@LvdoBGiV`R4b}VX|17EG{kyC zYw8ufTV_-YerHxpj;)Htai)?%Y&7gdqTXmt;zp%XNBXAK3AS=_@=h3l-~XxGgL}yQf$e(7p`rzy;@lJy(JWxLBn-h zl(^fhZn{VqwQ8e**sl4l{f&CVtx;?GS$HydZsG~PMIh9UvZ-{`P&rUzH(m7x=ExenKHymoWlmEY4riSo5Ax3=AV5oN#pWj9&MB$^*2nMOSbMO`Mj zO*dQ<_04)1Bs!KfF?nT^Np8>mZuqiU4c$GoNUUnB<$9uICAkg1Azaz2hFeLN>rs~# zo7S0938%bj(@l!}IvrgQ%F56{{+|^&iShpA%y0QkcfM7hcfH;DYCH5jzd7I9@u$TGA42ZlR*P4VR~x22<$ar|d_YuIKKx$^_V{WgO+$*v`lpHKyYf z#wgvpz|cC=F=Idh(E1wh2`DE}$3V;3Wo75Cxp&TyiC{cds-qmuq1oDwfN1z{=^V4>^Z1z?MlU5i!C3@~W~h#y2M8ws!W^JzFaQl5;ABWjs^348 z1VVcFOi~AePh_l2Lj>W>slx1NA)O)Zxz^ER9q6)_2DXZ~hDdTAyL2nD)|;0gNE zG1A>1Y)jx)Wo@fu&~ng1%X9cpl6&S$5&9c-PY_l&{I(~K%`M3>1Kz(|t2P(WCa@7G z>Ik!q{BxvhR6swo`|w1rBNHmmm5#D^nfT`P36OqUQKD?te0%#L=15VRETArXQOiAscE0Q&F7 z+JPm^LlrACOPhL-iK#VKL0FKNiz0)SSj0-8Hc7$%AM7P+PSOUhlx%qhv3!dHhXTTf ze47F~gHR({je3|Ev_K_uU>VQTTcc6;+{DHr2Vqr)$Ci~hV;S`VT4d!25=OANHt@i8 zYQ)F%8^=RwK05yf(F9($LWm<$Bv^&enH195g*>11C~oIdN|IrayCL=?a-UiZS7k%c)_hQaUP>AqTX0sL`8Y4e zr_-Z>S>q^V#l)d1CQm4x;eKukxsf=FchlW>qjA2QqjzIrE>@qb->R~K@66D;g+mza z5O_n6GtW)*Y+*#-gn5*rZm-mvLH!e4|JWO@|6NS;_%1G@=kL<-(r7UwQsE$@VvA=t5+&k6Uw&y=Cbt1~HL#=a5K+ChWPj&=sXZD(!4qP+Ci@zyFNkx(RP#EE;MmWfL>*(GWG9aP<|+Ie1>Z2F`-E%MH(-S)${2q zmEoiL%f}1emqalzfvU|l5)P??&bqw%EK#?Te6NG`YTzbWcQ16k03$g@ZCFIC0u8Q? z{(=VxNcAR0vou2+fxI`=8T`#c3&5XNg#6FxP{5%PkRm=}kXl|e@Jx_CFajN6jLS)7 zAJOtAxN!-+)=1RQZxm0T8y}?H2z^m#Fb&6Ga9Q9)gW1wdu?Pc80}EwDrelAr?wyHE zAow1!+_nM~Q;PV|28(J35K0g{S|(pA(c zbnE27O=*tm6u{rb{cEB5)Dp$m0s{|&Gr+cD1TolEj3UM;#2D&i#Q5*^&afEk6d^n( zy4tiNCg>}v8OdX{!M$o{1mB;GM^YZed=}yn3Q;;m_0fwNW@%QjN$l(qS5NaB%nRvM z!?sDo-dR|MbOB$@F5Qt=u+CAYyu0C)w>DDbn;VUKt4{`uavingUvSkfS1<)c#Zc}$ zFTo){pejQz3&0mn`5A{>PV|mb-f@0$)hSnl@dyHcA$LF zpoZzyuQU7L#`68U%PV*9-E(?G#I%lnbB=Q(gfiR;ol-7UABb1vM-&jPq%_i3GZJfg z<<^%ESLDZdmlSRj_`oVFTQJv4qw)r|AT3N1V@T39&PF zmlWKi;0tn%@Ar}eG zGNphS=s61MIbDR>unxOg4$ze%)CT$t;4RAtrJO~0Ma^sZ@?}r;Q{RG!0RyKmFHu}7$;Dy zi>Uz=FEWZ3QJP})=O~74+()qv8`*^Jkzo{{0c+6er1}Tp8Tv;T!KoZ4=*llCcm;Ix z1l^wOV&Ep)rK^d0H5%@f5?srI(JMJzrt@DeLo|`j5|y2D;H=B~=2qyz1pWBx!g(sW z>3bni7N+^~)0VqQs0XU$eHzSPA$TL8XHwhK*^qwId1>N8L3t(AC;H9ere{Qn-t3mfa}P)N3ieb2;re!Y6=p?z4|^ zvOb6KkVFVPjcpdlmjT3DIFni`lVkXpfPD?vH@ecfhhZ3jj7Xa?OgWOdS+uqL7>3+S zksVvWFy*KYBysvRpqgzGv_`%3w>fD~#yBLpS70-1h_j@z$Y=J+(OPAg#(D;>pg$eX#h>535Q% z(cSgW#R<|qc(?NL1lD~jwmQ?{SUeR^Gc%4K(O7ix_5jzNg(j2QSi1N#J`==o=U`*? z?3E*A*EdO0vKu9OYr>3LgAjB{y=RWA7*v*MmlrA)yObB|dbAFB({ zpQF1+I&;c(=bia>Am`anJKw0U&r^kR?`!jQ4}Q4Ra6t39z$YqA{Z-J3_Lxuioyc;^ z8?At2(5e$%g_7j|iLO(6Tq7CJ{cbQV3+K|p!aL4|=+^&fr0w0>@j<4fzX9e}nYq6Q z+?8l1XbYH}+c1WXu3F!>N7cyRLNpd!K(I+Z^D}h8LT7yvM%u+(%^EKpAXZk09~bnQkf3rQ>$mkyRP+ufJ@a zn%%}+%iE034OV}x2susu=C$RO2e)s0ar?o~W)_1ga2te$==?pxh=96Wr1Fj#grIq;SwoBW%ebM;3OkmToJ*nvvFq=JgdX( zC4(xJMKf>KJW~lodgrUeP{k(elNP9A!wJp@k(`PRca2^os$0=v|Ip-zIhmFEudr^sv+Y9=x2I{2lzgzw6b2=Tz$wq!B{|26sThxE3M8-d_kU zh%agf7uJC-G^X*COieakGbqo-nN)1`4al6pJ!Q{;jLDCR+blC=dqb;V#4>RZ%??^W zblgC9ut~gXy-^xEenJ_Dzs3w@l>#s(j+~Fnz$Dvml^EnCV3P=b)*Doh4I8p#((^-C6xEz|qIF8B&}6kv5iKqF|Hq*aY@1U=!)u4;BhpCMqB5KL2Dsb3hU1!+vD*^%2I_X1E5=p?q+MV`yLHX9F0>DF zXJgZm!n=;Kw-6hUobU2&myX-8--Nhv>(=gBIvTc|d)oQUsD0#V~u2J6fxgi8BX70v1Pq2I<)I=!FiQjrRqzNLb@}k@_B> z)4YIA^I{dAV;q~@5&;-jKeZ&kwJ)UKGojCYHju*&72O0oTQI-ZUDxZ`;Bp6>5X~K_ z+CM6s5Ef+S4zd> zC;ZnKZhE+xjfr;2G1&BRr1|vInU|7+fZo~b@R+gNFhsVLO^Uc2mu=6(FzJM+0BBSF zZ3LAMz&cN6(x>12{y!@pLL_jPSe zk|>vS<0Fahk&T zcKEReflUmiRR(f@jI_QO1nS3?1p6cWdqBJ4UdNg!!5ji|PtcS8<&n-C_KdCD YCv3|evZw4P_Q&=ed(|GZ=WX+U0CsqzQvd(} literal 0 HcmV?d00001 diff --git a/__pycache__/selectedplanmod.cpython-37.pyc b/__pycache__/selectedplanmod.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9bb05b260998f264f9442e7d31c0c4ce742d1325 GIT binary patch literal 19755 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 literal 0 HcmV?d00001 diff --git a/__pycache__/start.cpython-37.pyc b/__pycache__/start.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ef81f0caf4d5682549040ca555c9fccfe916bee3 GIT binary patch literal 67858 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 Tl}U8>4jgPv39zOw*_HTTI-1oD literal 0 HcmV?d00001 diff --git a/__pycache__/statusdataDBmod.cpython-37.pyc b/__pycache__/statusdataDBmod.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9d4f51070baf751ca1b9fd5a09b610b9cb831889 GIT binary patch literal 3349 zcmbVPOK%%T5}uwHhZIH2dRlTKPi)5tv4Ir?K@bG;!b)TT0US9{ge)-F1$V@5O0y(q zn4TtM3$2rK%3-nCa}H7v1j%2T>z?u#7JJyQdWMwj^NYET~I%@3Jnaf`EoHDnQEq}u~~=tPduoq-#X ztV7e`9uIi^I~Fzgecs@6(B}BtyvgUGHTeVH;y0kp^96qMJ1c7OMZSdJ8~h!< z%vaE}AZmQIZ~ueIFZo(@GqIvYe2xBYafkbS{Rdwx@{Mha-;S2}8__aycJ9OD@OO=R>ve01TcS~|Ppf<9gwEY)c79Zwyv zkM}dY`7aQhoq3vRtMAJP+R|*@I`g%yeYC&U(9rhM_Z8wu9&5yI-MV0x&@|gN@^v$~ zdsfqqoM@M`zMW5$tzCS@K6n0XpViI+U6ViQKzr!>32PfPlyl*7UwIlW$l#n^f;BpT ze;yF1?MoN_o-T)CAci7U;r_G3a3nCy!_zQ)50HQ$Hzhzo{%z=(!qAy^}?k%7PV^EMKBv)9|<{(Q?q@uQo;+r+-)&e z4L5V$B+vTA0*2>Fu0)!ZgMPK-GCuL|ceYNlq1YNFTOyro#bcGF*>LNML%W|2GyV`h zFObijvZF&Qw=g|_7s6sL3+#XetlOGkaJH2EeC>lMPYw>A9effVo(L(zBoEUptP&-p_=UYp z&e93QH5t}+B?U%OsgP9ji+RJYDev0;6{2#U`aP3ElGsq<`U;RYzm)cF6-Z&Y)uN!NFAK)W!fBE0rX-`}|IJ3&bP8xH&k8T(T(r$!Z;nDfm>Vxf*YsG?{=qKB-1vb3N7 z)AYg0(U(v!)oL1B&DQP(T9>Hk@Ww5@0cv#8xchr1h=*;jXi=&VXz?)s6aP&%U%3D~bk9SsmnvQEX5C)J4bZVJkkgcpeP1dlRwwcwnF^wKd z&{=SLXdpOt6&xGEL8Uo!pKog$!TAuOvT_Z!Bs%B2`=NtV7LtZ3^zWyZ^%uWQSln~^4?+k?5YpB zK-O}NlDBlzpfTTUg5{p}dp7t=aFTBoX`NRfYX{eWqG}~)XqADv1XwyIAy-qP8 zRFMoC)qFbGj0WO0aqO8hrwBToVVtC$&TpoE+F8HtM{}{cv6)&KHDjDXstdL&A)~n@ z?PXP?@XG_X2-FEB$LG7z{Lvum_Q4J65vH_9wLv_R*(8pFE)MTrEJftUT;zFnSTw#o zc=q*8z40o`6N8Xa6f)mVy7M^ZW! z!O=Jws3gtJrKPCRMF#$wSQPbRp`MmE8vv8WLz-qz7sF|~5}2dY)O|?>)Fi5*V2LM- z%qO?R^xVq WPI0zsWEs=NDz?;mSzm^w#r_N4*6hmw literal 0 HcmV?d00001 diff --git a/__pycache__/sysconfigfilemod.cpython-37.pyc b/__pycache__/sysconfigfilemod.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..383e59d24264c94004901d758dafe2c16bea4146 GIT binary patch literal 2731 zcmb7GTW{1x6!zU-C%Ys85`v0q(u=w(*$`UMizsSpYFEbNBqol%jJ-fs z-j}BR1AVOe5FRV_C-jeW9^0q9_lc)|XS~@3N-NctXU?1%kIy;Z`Of%8z3wWwet-YB zZ$CVxD1Xx6}(}5v!gWU2lMWBoJ3w;WIWi3ynYcUadF@t!+NEuibjveY0=&8r(qFi zDKvUsaC9aQ(w(RsYP1lSGkR{K&o7~2>QH0aP-ptkV8+m7=FlpX(kPWuEwxfF&C)uw zhjwYh4y!#_=xnXs-}3G}xOM+t=RxOVud{x0YvW#faCW_Y>kaCem8b|;*lyShSu4!a z?ZIqb1VtQrajzRN#-lucp?(2VXZAA|Zy%7Kusu$9nvO8Dgl%jJGmW02n+~>%i0?%Q zPczO${b977@#thYO`Frpy`b0?_KCWdL%{>YO&D>W?fs%~MK@GK!-M;b%4eY&hno_RLN3F7 z2LeK?93tfCRrGqP@pGk~zs1y!0vHUyU;+jUFxbo*I)z$V5(Wc6*rfv~YGn;j*zMc@ z8;jWri!|R4^2ZezF1fWVlZ2bFuc?Vf7$jjo2@q<^9d41@yV3{a&2B!a@Eh+7__IQvXiDuI z^rgYfYsxEnRqDZ(Yf5_g)tQAizoALJe1qvnMrpu4OG+jryD*tuTFhBcN*gOt112M+ z1|Vk&V0YWc5Td1vL^8c8M+3{a!295_l^^?MTp1(N1gEva zc$CGdFlEtbI(}_qbHqfUJ``%`TN|56oEN^mu_@{9n;V;;w_hKPE6DvRsU6`@tePOq z=P>*TPwt^nBt2YhTBUnNJ*S@6&Y^X2&#BXzTpdz|(M9<~xhQe{6~c~!_$WszYLfk2 z*5{$~?8ibY^wK^AjczI5dcGC*nO4CHYixzqp;-$=#?0fTuaSQhF}L^ySUp(s zc=puW&iX0ymS4KOizk;ixafgFa^1f!S?I`W=sgLNe&nTDG1{_ei$+x}<(U9RiFqCc zjC3q0f^IJffOzz*;FKl&ZEA>M!sZd?!br^L!IS8p>zh-;A#ED$NBlIsc7~b>!^h;V z*3s8|Hw@BlMQfqP!bsvYdX4t7l-$Ku`MYQ+DW>tvRYXTxV2p%tj2W!~$ulV-wYIf(d*iG1_S)TbVPO)Ozvi|$ zGy3K$A9#ds=2Tl1={H}6G%juA<=E597@U;0iUv$yRH(es$pF6%Xf=6U8)LtX|MGj_ zyyM+jzrVhGol`Yw>Qw|>7UyAcMW)O$=}ln}wtNKx;l?aVi+DSZxNu25B0ib-y2p!e z^0=G#qAh8I1G53}`BmE9>2~*#uifroYW1@#t<|fawpLrKgZg-IxwU%vrD1FJ zlPk^B!tQoi7IwSB?c(>R=<}%C<(k~^VLwiaIL&3vlN=CslI`r^*FtDn?%P@3qMrrn zygau#oiDN&$;6YGjIAR!VDAYZCKXRg@?dkWfdc&`x=y(&)0~o;?&>^qT&M2LI_I4W Mj_J%fRb5p720s9ebpQYW literal 0 HcmV?d00001 diff --git a/__pycache__/systemtimeMod.cpython-37.pyc b/__pycache__/systemtimeMod.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..06a149822902d1f491750be4d6f66fb6d7247bb0 GIT binary patch literal 1414 zcmZux&5j#I5bnPjkG<>Nuvv(500L1C!(lB2DF?KQ!kP#nHjb2ygqTZfGTjcd9*>=# zc7oCPWKiIOIB?*E>?5z#5+_dk3Y@6w&Mp$7M_pB2)!kM7Rn?sI`#l2V_t(FDeZ51- zU%0p&41@nKP1hFW@{G z6%-i^4l{;1gxQ<`QB;wNtf-|M+LA5Zuq{#SCRwqTZg`76*$=R8*_hrSux5(j`UdO; z9|U~xk-_UPFy>Ua&V2c*tUtc%5|vwR%c*udWiu=CO4lkkS^rGivt?uT^eNac{$Ma%R#=dvwAiiH2xMm{b;6+=1bR? z;8`}>N>mCs+2CUdP51#di1rl_s0YwJAk8lz1R#D2oW9{~MHOAK&&g{t4zMSR|47dH zny-Lw1jx}QR$@!HbR}B8CacJH0J_9>&$}MJ2;usfY2S;-Yh$c`9SO)Z0h-l0d3;a3DgyN7G@!bcqD(l6! zSCAYXSD1+A{t*Jy%yr>n`x4BB>j1Ao7^RU*q^xtuiF7?Fr!%#vP~MgD#UihQC5sDL z&Fbe_BFCk!R3m++QtINuF6X-OOVfooU2^H{T?`%5lF)>jx6sCny}(?Q4^H+;x^J$b zawlAIw6JC61fI^iXVxqVyD-{`;b*6(PI%+)xU3aC@|nra(($skE}l;Cgh4;9i()9P z9ax)PRQ3x%VS=FetD|R2qsM7%Fb?xJ?${fiJ|2E4pFI5Z^ywFm9{NzT2;Er6YKME4zWz+(C#-Q(tc&|l>hbBeJJVKz^IK*bSD&O@{DP(9F~ zpxMwZHYT*@gqV?K=UfSB_+u+tvW9l754#QXS{ Zgz7sE6?`Ax+F)WJA1q0d_mabe{{xO1Mz#O| literal 0 HcmV?d00001 diff --git a/__pycache__/videocontrolmod.cpython-37.pyc b/__pycache__/videocontrolmod.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..54ab071947288d35f2d95d8ec1f7abaf8d54ce4e GIT binary patch literal 2077 zcmbVNTW{P%6rP*CUhgFr+9m;1jkq*g(aok&3p`Y)qJV@1QKce~jKt#XI9WGd+nO2Y zvhu!=zVZ)vXdgl1AMi(*SDyM8c;d`#Hc6{WNVPTR%o(3K^Ub;W^G+v3@ce!2ub=*0 zLFgYVEFKDz2QZWbB9Ootn&1dyJ0}^L(1=c0#GFhsFY;iWW`5*5-iR84#ewjI{}e?{ z(MZug5rJqv#Zf3i(Sp^MSQZ`8g_U;F5le?e=1F*lz#@H&dMhvBT-3v+Tgo)o!~H5B z>9oju#IRAEWyX6{lu5oDv3uJ)J0onh;R#?67!P4614N@|_&J(k-~>1kct!=8F+pdZ zU^8EMH9GX=c8!F$f#93(i(8WQa_R8!y`;0$;dxCeY`4Qb1l*U+qy-xe!Qd-YuVt#j>buhXs@;G*kr z`8(S?cO&}A$DbN<=brJ8Qjrwf#yd`h9vgq0qz7Yd=zgh;=f0(gAvC?AfKPwiCK3Sn9YiLO*4b8wLp%2=u6LJC76PmSl& z)hs!0&mC13QuhKAh;*bytYZ^g><<>3Wdm|m+U%80OKf2pf4={BByWKD@8)1!Op-yF z4wC$65Ldd$i^;$pG%9i}iwy8>m8T{=50FUpd$3X60)j|@1In;_?fmLXuffWece^Fm zLDQg-Eg}2(=fjoLFCb`SE40SXu)xppjMPMs4Fr@r$~K^kexoy5BYC%mv={z;q=_vJ zTS_zU^rogzLhJ^z1)^Ea4xng6_$$Ha2b8a3uny}~v|ItTAKQ7y%{w!%_8{%MyRrpH zq%HXuj##uk`Z^bWHNCEMEVa$_xl>>keyF~K#^R}Ql4aAaFHc5EX zTo(o92an)O_qJ1x)rl(^9%9&ua&4mszTvH|4SgYujnhj{+AhC=e6M zL={4g_JJgm@id3sEHu6WqqD z#0QB%Tp5-&3r1FP@jw%px5&3)qM^IHXkbAg8dNYF4S~Sd-tKhO-m84cfzz(4M8V6$ zG|Tu=HUe+TcfnAPTweAHa+|!;!C$)KqapZJz!zn)Aiyo(2X2BrXf}s%+(k>bA-=%7 z1Hu9?v|s|QmutWbxS8-Q?!2oZ8!u&d5C66IkRO1x>H3w+ywpA}u0^k0%OdH)FKYo) zpO&viN!|pVCoq()XG8-C!ZLBICKwJUaheZ@;4*u9uWP~~{M>XUli^U>OosBU_DWfd z5~W<;NPDKC>Qot~Q)tX>kR|-E(LBLybe;1qj;~R{lWYB5 literal 0 HcmV?d00001 diff --git a/__pycache__/videomod.cpython-37.pyc b/__pycache__/videomod.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ee8d3c07b9303a5eb4beacb9912b6882ed4cb8a7 GIT binary patch literal 1251 zcmd5*&2G~`5cc{nj?<*!r&Qv!suZLgQkMb}R0ts|5FDr~(vuHZZgxxD`cJ#-ghcJB zTzQA~$UAW2#53%bQ(u7-GY%E4-~m``znvZLj6cse`=Z_U4H)0=eSQDUHjE#*xf~`K z&tb|GfEkRWMn*zH&^A*uG-0(;GqXbLx6cmk`kfOx_3DN$tajSSywJ;879 zK5H-!))rr4%_CEcxzGGl%xw;he(M6hX!MEhlp@JhbWr6Zl@$37xEz^sUiMAx>=q@@ zwY~dh_vMIS01WsC!-csGQ|pqCALY|wkX)q6W%-L8b-xuPsq zoW?n$D#`d3ozJqv@p9GVH@nVAx z1bwi%@p1DZm;X&Bf;ia)Fo;dM#5cQEhb$4#5_iD&KljDTQIe){ zn$m0i0h$SH;JUoR1M6?CL=)V7U*OfP3m}%zY9n0NM|9A)jIhu|V5!6ngqsMr5U}fKDe+x!{=3Ahc-)JkEKc$$xzd4)I%CoWUxaA_dVABweA^YorVQ&cH`hL>NWA9P3U@qs?@mc6d$`~t40 BF%HeJVd(oC93-Hc;fO6_r#G?9l1I|&EoLJ}jA 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 literal 0 HcmV?d00001 diff --git a/__pycache__/weatherAPIdbmod.cpython-37.pyc b/__pycache__/weatherAPIdbmod.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4ae256e152a9c4b70efcf10c928adc94f81fc95f GIT binary patch literal 5371 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 ", WTdata - consitencycheck() + consistencycheck() def saveWTsetting(): diff --git a/autowatering/__init__.py b/autowatering/__init__.py new file mode 100755 index 0000000..8d1c8b6 --- /dev/null +++ b/autowatering/__init__.py @@ -0,0 +1 @@ + diff --git a/autowatering/__pycache__/__init__.cpython-37.pyc b/autowatering/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0e70566e09594f7b36649a1ec5334bde4a4b86df GIT binary patch literal 132 zcmZ?b<>g`k0#;M4BqkvJ7{q}AMj*ohh>KZ(L<&PNgC?WjN`@kkFoO7{tDljdo2p-s zsh^rxrk_|^lAo8K3#Q8xOHzw6^V0R><1_OzOXB183My}L*yQG?l;)(`fsFYK#0&tQ CTOC0F literal 0 HcmV?d00001 diff --git a/autowatering/__pycache__/autowateringdbmod.cpython-37.pyc b/autowatering/__pycache__/autowateringdbmod.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..deafcb8b3ee6050a1d46a87d50051bad21323c3c GIT binary patch literal 5963 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 S%BTzIEudZSau_-8TmJ$785W@c literal 0 HcmV?d00001 diff --git a/autowatering/__pycache__/autowateringmod.cpython-37.pyc b/autowatering/__pycache__/autowateringmod.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eb306a842d3ba6d9c64fe9c10d053bcd4cf88179 GIT binary patch literal 13682 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 W*I@N{)sN&dg^5B|{&`@!;QSX&NO8gd literal 0 HcmV?d00001 diff --git a/autowateringdbmod.py b/autowatering/autowateringdbmod.py similarity index 86% rename from autowateringdbmod.py rename to autowatering/autowateringdbmod.py index 901babb..c758b39 100755 --- a/autowateringdbmod.py +++ b/autowatering/autowateringdbmod.py @@ -2,7 +2,6 @@ """ Auto watering UI setting storage utilities """ -from __future__ import print_function import logging import os @@ -54,6 +53,15 @@ def readfromfile(): global WTdata filestoragemod.readfiledata(WTDATAFILENAME,WTdata) +# Callback are used to propagate the changes in the configuration to the variables inside the class in the autowateringmod +# make use of the global variable to store the link to the function in the other module. +callbacklist={} +def register_callback(name, callback_func): + print("append the callback ----------------------------") + global callbacklist + callbacklist[name]=callback_func + + def consistencycheck(): # this routine align the watering table elements with the Hardware available elements "name" labelled with usedfor "watering" @@ -112,9 +120,17 @@ def consistencycheck(): saveWTsetting() - # extra code for the sensor field which should be consistent with sensor names in HW + # make call to update the class instances variables using a callback function + if "UpdateBots" in callbacklist: + callbacklist["UpdateBots"](elementlist,tabletoadd,tabletoremove) + else: + print( " no callback found: UpdateBots " ) + + + + def replacewordandsave(oldword,newword): global WTdata @@ -128,7 +144,7 @@ def restoredefault(): filestoragemod.deletefile(WTDATAFILENAME) filestoragemod.readfiledata(DEFWTDATAFILENAME,WTdata) #print "WT data -----------------------------------> ", WTdata - consitencycheck() + consistencycheck() def saveWTsetting(): @@ -196,17 +212,6 @@ def getrowdata(recordvalue,paramlist,index): #for parameters with array of integ return datalist -def gettable(index): - paramlist=getparamlist() - #print "paramlist" , paramlist - elementlist=getelementlist() - datalist=[] - for row in elementlist: - rowdatalist=getrowdata(row,paramlist,index) - datalist.append(rowdatalist) - #print datalist - return datalist - def replacerow(element,dicttemp): searchfield="element" @@ -236,9 +241,17 @@ def searchdata(recordkey,recordvalue,keytosearch): if recordkey in ln: if ln[recordkey]==recordvalue: if keytosearch in ln: - return ln[keytosearch] + return ln[keytosearch] + return "" +def recordmatch(recordkey, recordvalue): + for ln in WTdata: + value = ln.get(recordkey, None) + if value == recordvalue: + return True + return False + def isdatapresent(recordkey,recordvalue,keytosearch,recordtofind): for ln in WTdata: if recordkey in ln: diff --git a/autowatering/autowateringmod.py b/autowatering/autowateringmod.py new file mode 100755 index 0000000..ef5cf18 --- /dev/null +++ b/autowatering/autowateringmod.py @@ -0,0 +1,492 @@ +import logging +from datetime import datetime, time ,timedelta +import hardwaremod +import emailmod +from autowatering import autowateringdbmod +import sensordbmod +import actuatordbmod +import autofertilizermod +import ActuatorControllermod +import messageboxmod + +logger = logging.getLogger("hydrosys4."+__name__) + + + + + +class ElementAutoBot: + + def __init__(self, element): + self.status=StatusManager(element) + self.element=element + + def UpdateStatus(self): + self.status.ResetStatus() + + def UpdateConfig(self): + self.status.LoadConfig() + + def ExecuteAutomation(self): + ExecLogic.Execute(self.status) + + def GetStatus(self, name): + return self.status.GetStatus(name) + + + +class StatusManager: + + def __init__(self,element): + self.element=element + self.StatusDataDict={} + self.ResetStatus() + self.LoadConfig() + + + def GetStatus(self, name): + if name in self.StatusDataDict: + return self.StatusDataDict[name] + return "" + + + def ResetStatus(self): + #self.StatusDataDict={"cyclestartdate":datetime.utcnow(),"lastwateringtime":datetime.utcnow()- timedelta(days=5),"cyclestatus":"done", "checkcounter":0, "alertcounter":0, "watercounter":0} + self.StatusDataDict["allowwateringplan"]=True # define the flag that control the waterscheduling activation + self.StatusDataDict["cyclestartdate"]=datetime.utcnow() + waitingtime=hardwaremod.toint(autowateringdbmod.searchdata("element",self.element,"pausebetweenwtstepsmin"),0) + self.StatusDataDict["lastwateringtime"]=datetime.utcnow() - timedelta(minutes=waitingtime) + self.StatusDataDict["cyclestatus"]="done" + self.StatusDataDict["currentstatus"]="OK" + self.StatusDataDict["checkcounter"]=0 + self.StatusDataDict["alertcounter"]=0 + self.StatusDataDict["watercounter"]=0 + + + def LoadConfig(self): + element=self.element + # check if the element is present in the setting file, if not do not laod, the consistency check later will adjust it. + if autowateringdbmod.recordmatch("element", element): + + self.sensor=autowateringdbmod.searchdata("element",element,"sensor") + self.workmode=autowateringdbmod.searchdata("element",element,"workmode") + print (" threshold Value" , autowateringdbmod.searchdata("element",element,"threshold")) + self.maxthreshold=hardwaremod.tonumber(autowateringdbmod.searchdata("element",element,"threshold")[1],0) + self.minthreshold=hardwaremod.tonumber(autowateringdbmod.searchdata("element",element,"threshold")[0],self.maxthreshold) + self.starttimeh=hardwaremod.toint(autowateringdbmod.searchdata("element",element,"allowedperiod")[0].split(":")[0],0) + self.starttimem=hardwaremod.toint(autowateringdbmod.searchdata("element",element,"allowedperiod")[0].split(":")[1],0) + self.endtimeh=hardwaremod.toint(autowateringdbmod.searchdata("element",element,"allowedperiod")[1].split(":")[0],1) + self.endtimem=hardwaremod.toint(autowateringdbmod.searchdata("element",element,"allowedperiod")[1].split(":")[1],0) + self.duration=hardwaremod.toint(autowateringdbmod.searchdata("element",element,"wtstepsec"),0) + self.maxstepnumber=hardwaremod.toint(autowateringdbmod.searchdata("element",element,"maxstepnumber"),0) + self.maxdays=hardwaremod.toint(autowateringdbmod.searchdata("element",element,"maxdaysbetweencycles"),0) + self.waitingtime=hardwaremod.toint(autowateringdbmod.searchdata("element",element,"pausebetweenwtstepsmin"),0) + self.samplesminutes=hardwaremod.tonumber(autowateringdbmod.searchdata("element",element,"samplesminutes"),120) # new addition + self.mailtype=autowateringdbmod.searchdata("element",element,"mailalerttype") + self.rangeacceptedstr=autowateringdbmod.searchdata("element",element,"sensorminacceptedvalue") + + +class Messaging: + + @staticmethod + def message(msg, status: StatusManager, console=True, log=True, logseverity = "info", mail=False, mailtype="warningonly" , note=False): + if console: + print(msg) + if log: + Messaging.writelog(msg, logseverity) + if mail: + Messaging.writemail(msg, status, mailtype) + if note: + dictitem={'title': "System Message (Alert) - Autowatering", 'content': msg } + messageboxmod.SaveMessage(dictitem) + + + @staticmethod + def writelog(msg, logseverity): + if logseverity=="info": + logger.info(msg) + elif logseverity=="warning": + logger.warning(msg) + else: + logger.error(msg) + + @staticmethod + def writemail(msg, status : StatusManager, mailtype): + # invia mail, considered as info, not as alert + if (status.mailtype==mailtype)and(status.mailtype!="none"): + if (status.mailtype!="infoandwarning")and(status.StatusDataDict["alertcounter"]<5): + emailmod.sendallmail("alert", msg) + status.StatusDataDict["alertcounter"]+=1 + if (status.mailtype=="infoandwarning"): + emailmod.sendallmail("alert", msg) + + + + + +class ExecLogic: # stateless + + + @staticmethod + def isNowInTimePeriod(status: StatusManager): + + now = datetime.now() + nowTime = now.time() + startTime=time(status.starttimeh,status.starttimem) + endTime=time(status.endtimeh,status.endtimem) + if startTime < endTime: + return nowTime >= startTime and nowTime <= endTime + else: #Over midnight + return nowTime >= startTime or nowTime <= endTime + + + @staticmethod + def sensorreading(status : StatusManager): + #MinutesOfAverage=70 #about one hour, 4 samples at 15min samples rate + if status.sensor: + # old + #sensordata=[] + #sensordbmod.getsensordbdata(sensorname,sensordata) + # get number of samples + timelist=hardwaremod.gettimedata(status.sensor) + theinterval=timelist[1] # minutes + if theinterval>0: + samplesnumber=int(status.samplesminutes/theinterval)+1 + else: + samplesnumber=1 + # new procedure should be faster on database reading for large amount of data + sensordata=[] + sensordbmod.getsensordbdatasamplesN(status.sensor,sensordata,samplesnumber) + # still necessary to filter the sample based on timestamp, due to the possibility of missing samples + starttimecalc=datetime.now()-timedelta(minutes=int(status.samplesminutes)) + isok, quantitylist=sensordbmod.EvaluateDataPeriod(sensordata,starttimecalc,datetime.now()) + quantity=quantitylist["average"] + return quantity + + @staticmethod + def lastsensorreading(status : StatusManager): + if status.sensor: + sensordata=[] + sensordbmod.getsensordbdata(status.sensor,sensordata) + data=sensordata[-1] + try: + number=float(data[1]) + except: + number=0 + return number + + @staticmethod + def sensorvalidrange(status : StatusManager, sensorreadingaverage): + Messaging.message("Accepted range " + status.rangeacceptedstr, status) + rangelist=status.rangeacceptedstr.split(":") + sensorrangeok=True + if len(rangelist)==2: + try: + mins=float(rangelist[0]) + maxs=float(rangelist[1]) + if (sensorreadingaveragemaxs): + sensorrangeok=False + except: + Messaging.message("No valid parameter for sensor range , ignored ",status) + return sensorrangeok + + + @staticmethod + def checkMinMaxThreshold(status: StatusManager): + belowthr=False + abovethr=False + validity=True + # check the hygrometer sensor levels + sensorreadingaverage=ExecLogic.sensorreading(status) + sensorrangeok=ExecLogic.sensorvalidrange(status, sensorreadingaverage) + + if sensorrangeok: + if (sensorreadingaveragestatus.maxthreshold): + Messaging.message('Soil moisture check OK, activating watering procedure ',status) + abovethr=True + else: + msg="Soil moisture check, Sensor reading=" +str(sensorreadingaverage) + "> Minimum threshold=" + str(status.minthreshold) + Messaging.message(msg,status) + + else: + Messaging.message('Sensor reading outside acceptable range ' + str(sensorreadingaverage) + ' no action',status) + validity=False + + return belowthr,abovethr,validity, sensorreadingaverage + + @staticmethod + def checkwateringinterval(status: StatusManager): + # check if time between watering events is larger that the waiting time (minutes) + lastwateringtime=status.GetStatus("lastwateringtime") + msg=' Previous watering: ' + str(lastwateringtime.strftime("%m/%d/%Y, %H:%M:%S")) + ' Now: ' + str(datetime.utcnow().strftime("%m/%d/%Y, %H:%M:%S")) + Messaging.message(msg,status) + timedifference=sensordbmod.timediffinminutes(lastwateringtime,datetime.utcnow()) + msg='Time interval between watering ' + str(timedifference) +'. threshold ' + str(status.waitingtime) + Messaging.message(msg,status) + if timedifference>status.waitingtime: + Messaging.message(" Sufficient waiting time",status) + return True + return False + + + @staticmethod + def Execute(status: StatusManager): + + # check the watering mode + workmode=status.workmode + + + if workmode=="None": # None case + msg="No Action required, workmode set to None, element: " + str(status.element) + Messaging.message(msg,status) + return msg + + if not(status.sensor in sensordbmod.gettablelist()): + msg="Sensor does not exist " + str(status.sensor) + ", element: " + str(status.element) + Messaging.message(msg,status) + return msg + + # exit condition in case of data inconsistency + if status.minthreshold>=status.maxthreshold: + msg = "Data inconsistency Min Threshold higher than Max Threshold , element: " + str(status.element) + Messaging.message(msg,status, logseverity="error") + return msg + + # check relevant to the normal execution + ExecuteRoutine=True + timeok=ExecLogic.isNowInTimePeriod(status) + if not timeok: + Messaging.message("Outside allowed day time",status, logseverity="warning") + ExecuteRoutine=False + + belowthr, abovethr,valid , value =ExecLogic.checkMinMaxThreshold(status) + if not valid: + Messaging.message("No valid sensor Value",status ,logseverity="warning", note=True, mail=True , mailtype="warning") + ExecuteRoutine=False + + WaitOK= ExecLogic.checkwateringinterval(status) + if not WaitOK: + Messaging.message("Time from the last watering period too short",status, logseverity="warning") + ExecuteRoutine=False + + if ExecuteRoutine==True: + if workmode=="Full Auto": + ExecLogic.ExecFullAuto(status, belowthr) + elif workmode=="under MIN over MAX": + ExecLogic.ExecUnderMinOverMax(status, belowthr, abovethr) + else: + msg="No Action, workmode set to unknown action, element: " + str(status.element) + Messaging.message(msg,status) + + + # safety procedures + ExecLogic.ExceedingDaysSafety(status) + if valid: + ExecLogic.BelowThresholdSafety(status, value) # send alert message + + + + @staticmethod + def ExecFullAuto(status: StatusManager, belowthr): + + Messaging.message("full Auto Mode -->" + status.element, status) + # block the wateringplan activation as by definition of "Full Auto" + status.StatusDataDict["allowwateringplan"]=False + # check if inside the allowed time period + + if belowthr: + Messaging.message('below threshold',status , logseverity="warning" ) + status.StatusDataDict["currentstatus"]="lowthreshold" + + #activate pump + ExecLogic.activatewater(status.element, status.duration) + # invia mail, considered as info, not as alert + msg="INFO: " + str(status.sensor) + " value below the minimum threshold " + str(status.minthreshold) + ", activating the watering :" + str(status.element) + Messaging.message(msg, status, mail=True, mailtype="infoandwarning") + status.StatusDataDict["watercounter"]+=1 + status.StatusDataDict["lastwateringtime"]=datetime.utcnow() + + # send warning in case max step is exceeded + if status.maxstepnumber status.maxdays)and(timedeltadays < status.maxdays+2): #the upper limit is set in case of abrupt time change + msg="WARNING "+ str(status.sensor) + " watering cycle is taking too many days, watering system: " + str(status.element) + ". Activate Water + Reset watering cycle" + Messaging.message(msg, status, logseverity="warning", note=True , mail=True, mailtype="warning") + ExecLogic.activatewater(status.element, status.duration) + + status.StatusDataDict["lastwateringtime"]=datetime.utcnow() + status.StatusDataDict["alertcounter"]=0 + status.StatusDataDict["watercounter"]=0 + status.StatusDataDict["checkcounter"]=0 + status.StatusDataDict["currentstatus"]="OK" + + + @staticmethod + def BelowThresholdSafety(status: StatusManager, value): + + # implment Critical alert message in case the threshold is below the 0.5 of the minimum + multiplier=50 + if status.workmode!="None": + if value<(status.minthreshold*multiplier/100): + msg='CRITICAL: Sensor ' + str(status.sensor) + ' below ' + str(multiplier) + 'percent of the actual set threshold' + Messaging.message(msg, status,logseverity="warning", note=True, mail=True, mailtype="warning" ) + + + + @staticmethod + def activatewater(element, duration): + # check the activation of the doser before the pump + doseron=autofertilizermod.checkactivate(element,duration) # this has a blocking sleep command + #activate pump + #msg , pulseok=hardwaremod.makepulse(element,duration) + msg, pulseok = ActuatorControllermod.activateactuator(element,duration) + + # salva su database + if pulseok: + actuatordbmod.insertdataintable(element,duration) + return msg + + + +class AutoBotManagement: + + AutoBotDict={} # global variable of teh class + + def __init__(self): + # send callback link to the autowateringdbmod + autowateringdbmod.register_callback("UpdateBots" , self.UpdateBots) + elementlist= autowateringdbmod.getelementlist() + for element in elementlist: + self.AddElement(element) + + def DeleteAutoBot(self,element): + if element: + AutoBotManagement.AutoBotDict.pop(element) + + def AddElement(self,element): + AutoBotManagement.AutoBotDict[element]=ElementAutoBot(element) # inizialize the ElementBot + + def UpdateBots(self,elementlist,tabletoadd,tabletoremove): + for element in tabletoadd: + self.AddElement(element) + for element in tabletoremove: + self.DeleteAutoBot(element) + for element in elementlist: + if element in AutoBotManagement.AutoBotDict: + AutoBotManagement.AutoBotDict[element].UpdateConfig() + + +# execute this line of code when module is called +AutoBot=AutoBotManagement() + +# functionns to be called externally by other modules not belonging to this folder + +def autowateringcheck(refsensor): + logger.info('Starting Autowatering Evaluation ') + # iterate among the water actuators + elementlist= autowateringdbmod.getelementlist() + for element in elementlist: + sensor=autowateringdbmod.searchdata("element",element,"sensor") + # check the sensor + if refsensor==sensor: + print("auto watering check -----------------------------------------> ", element) + logger.info('auto watering check --------------------------> %s', element) + AutoBot.AutoBotDict[element].ExecuteAutomation() + return + +def cycleresetall(): + logger.info('Reset all the Status in the autowatering ') + for bot in AutoBot.AutoBotDict.values(): + bot.UpdateStatus() + +def cyclereset(element): + AutoBot.AutoBotDict[element].UpdateStatus() + +def configupdate(element): + AutoBot.AutoBotDict[element].UpdateConfig() + +def getstatus(element, name): + if element in AutoBot.AutoBotDict: + return AutoBot.AutoBotDict[element].GetStatus(name) + return None + + + +# ---------------------------------------------------- + + + + + + + + + + +if __name__ == '__main__': + + autowateringcheck("Hygro21") + + diff --git a/autowateringmod.py b/autowateringmod.py deleted file mode 100755 index 5d10632..0000000 --- a/autowateringmod.py +++ /dev/null @@ -1,663 +0,0 @@ -from __future__ import print_function -from __future__ import division -from builtins import str -from builtins import range -from past.utils import old_div -import logging -from datetime import datetime, time ,timedelta -import hardwaremod -import os -import subprocess -import emailmod -import autowateringdbmod -import sensordbmod -import actuatordbmod -import autofertilizermod -import statusdataDBmod -import ActuatorControllermod - -logger = logging.getLogger("hydrosys4."+__name__) - -# status array, required to check the ongoing actions within a watering cycle -elementlist= autowateringdbmod.getelementlist() -AUTO_data={} # dictionary of dictionary -AUTO_data["default"]={"cyclestartdate":datetime.utcnow(),"lastwateringtime":datetime.utcnow()- timedelta(days=5),"cyclestatus":"done", "checkcounter":0, "alertcounter":0, "watercounter":0} -allowwateringplan={} # define the flag that control the waterscheduling activation -# cyclestartdate, datetime of the latest cycle start -# cyclestatus, describe the status of the cycle: lowthreshold, rampup, done -# "lowthreshold" means that the cycle is just started with lowthreshold activation, if the lowthreshold persists for several checks them alarm should be issued -# "rampup", this is in full auto mode, the status in between the lowthreshold and high, not reach yet high. if this status persist then alarm should be issued -# "done", ready for next start with lowthreshold - -# sample of database filed -# {"element": "", "threshold": ["2.0", "4.0"],"workmode": "None","sensor": "","wtstepsec": "100","maxstepnumber": "3","allowedperiod": ["21:00","05:00"],"maxdaysbetweencycles": "10", "pausebetweenwtstepsmin":"45", "mailalerttype":"warningonly" , "sensorminacceptedvalue":"0.5"} - - -def cyclereset(element): - global AUTO_data - waitingtime=hardwaremod.toint(autowateringdbmod.searchdata("element",element,"pausebetweenwtstepsmin"),0) - statusdataDBmod.write_status_data(AUTO_data,element,"cyclestartdate",datetime.utcnow()) - statusdataDBmod.write_status_data(AUTO_data,element,"lastwateringtime",datetime.utcnow() - timedelta(minutes=waitingtime)) - statusdataDBmod.write_status_data(AUTO_data,element,"cyclestatus","done") - statusdataDBmod.write_status_data(AUTO_data,element,"checkcounter",0) - statusdataDBmod.write_status_data(AUTO_data,element,"alertcounter",0) - statusdataDBmod.write_status_data(AUTO_data,element,"watercounter",0) - - -def cycleresetall(): - elementlist= autowateringdbmod.getelementlist() - for element in elementlist: - cyclereset(element) - - -def autowateringcheck(refsensor): - logger.info('Starting Autowatering Evaluation ') - # iterate among the water actuators - elementlist= autowateringdbmod.getelementlist() - for element in elementlist: - autowateringexecute(refsensor,element) - return - - -def autowateringexecute(refsensor,element): - global AUTO_data - sensor=autowateringdbmod.searchdata("element",element,"sensor") - # check the sensor - if refsensor==sensor: - print("auto watering check -----------------------------------------> ", element) - logger.info('auto watering check --------------------------> %s', element) - # check the watering mode - modelist=["None", "Full Auto" , "Emergency Activation" , "Alert Only"] - workmode=checkworkmode(element) - - if not(sensor in sensordbmod.gettablelist()): - print("Sensor does not exist " ,sensor , ", element: " , element) - logger.error("Sensor does not exist %s , element: %s " ,sensor, element) - return "sensor not Exist" - - maxthreshold=hardwaremod.tonumber(autowateringdbmod.searchdata("element",element,"threshold")[1],0) - minthreshold=hardwaremod.tonumber(autowateringdbmod.searchdata("element",element,"threshold")[0],maxthreshold) - # exit condition in case of data inconsistency - if minthreshold>=maxthreshold: - print("Data inconsistency , element: " , element) - logger.error("Data inconsistency , element: %s " , element) - return "data inconsistency" - - now = datetime.now() - nowtime = now.time() - starttimeh=hardwaremod.toint(autowateringdbmod.searchdata("element",element,"allowedperiod")[0].split(":")[0],0) - starttimem=hardwaremod.toint(autowateringdbmod.searchdata("element",element,"allowedperiod")[0].split(":")[1],0) - endtimeh=hardwaremod.toint(autowateringdbmod.searchdata("element",element,"allowedperiod")[1].split(":")[0],1) - endtimem=hardwaremod.toint(autowateringdbmod.searchdata("element",element,"allowedperiod")[1].split(":")[1],0) - starttime=time(starttimeh,starttimem) - endtime=time(endtimeh,endtimem) - - duration=hardwaremod.toint(autowateringdbmod.searchdata("element",element,"wtstepsec"),0) - maxstepnumber=hardwaremod.toint(autowateringdbmod.searchdata("element",element,"maxstepnumber"),0) - maxdays=hardwaremod.toint(autowateringdbmod.searchdata("element",element,"maxdaysbetweencycles"),0) - waitingtime=hardwaremod.toint(autowateringdbmod.searchdata("element",element,"pausebetweenwtstepsmin"),0) - samplesminutes=hardwaremod.tonumber(autowateringdbmod.searchdata("element",element,"samplesminutes"),120) # new addition - mailtype=autowateringdbmod.searchdata("element",element,"mailalerttype") - rangeacceptedstr=autowateringdbmod.searchdata("element",element,"sensorminacceptedvalue") - - - # ------------------------ Workmode split - if workmode=="Full Auto": - # block the wateringplan activation as by definition of "Full Auto" - allowwateringplan[element]=False - # check if inside the allowed time period - print("full Auto Mode") - logger.info('full auto mode --> %s', element) - timeok=isNowInTimePeriod(starttime, endtime, nowtime) - print("inside allowed time ", timeok , " starttime ", starttime , " endtime ", endtime) - logger.info('full auto mode') - if timeok: - logger.info('inside allowed time') - belowthr,valid=checkminthreshold(sensor,minthreshold,rangeacceptedstr,samplesminutes) - if valid: - if belowthr: - status="lowthreshold" - logger.info('below threshold') - # wait to seek a more stable reading of hygrometer - # check if time between watering events is larger that the waiting time (minutes) - lastwateringtime=statusdataDBmod.read_status_data(AUTO_data,element,"lastwateringtime") - print(' Previous watering: ' , lastwateringtime , ' Now: ', datetime.utcnow()) - timedifference=sensordbmod.timediffinminutes(lastwateringtime,datetime.utcnow()) - print('Time interval between watering steps', timedifference ,'. threshold', waitingtime) - logger.info('Time interval between watering steps %d threshold %d', timedifference,waitingtime) - if timedifference>waitingtime: - print(" Sufficient waiting time") - logger.info('Sufficient waiting time') - # activate watering in case the maxstepnumber is not exceeded - watercounter=statusdataDBmod.read_status_data(AUTO_data,element,"watercounter") - if maxstepnumber>watercounter: - #activate pump - activatewater(element, duration) - # invia mail, considered as info, not as alert - if (mailtype!="warningonly")and(mailtype!="none"): - textmessage="INFO: " + sensor + " value below the minimum threshold " + str(minthreshold) + ", activating the watering :" + element - emailmod.sendallmail("alert", textmessage) - statusdataDBmod.write_status_data(AUTO_data,element,"watercounter",watercounter+1) - statusdataDBmod.write_status_data(AUTO_data,element,"lastwateringtime",datetime.utcnow()) - else: # critical, sensor below minimum after all watering activations are done - - logger.info('Number of watering time per cycle has been exceeeded') - # read hystory data and calculate the slope - timelist=hardwaremod.gettimedata(sensor) - cyclestartdate=statusdataDBmod.read_status_data(AUTO_data,element,"cyclestartdate") - lastwateringtime=statusdataDBmod.read_status_data(AUTO_data,element,"lastwateringtime") - startdate=cyclestartdate - timedelta(minutes=timelist[1]) - enddate=lastwateringtime + timedelta(minutes=waitingtime) - isslopeok=checkinclination(sensor,startdate,enddate) # still to decide if use the enddate - - if isslopeok: - # invia mail if couner alert is lower than 1 - alertcounter=statusdataDBmod.read_status_data(AUTO_data,element,"alertcounter") - if alertcounter<1: - textmessage="WARNING: Please consider to increase the amount of water per cycle, the "+ sensor + " value below the MINIMUM threshold " + str(minthreshold) + " still after activating the watering :" + element + " for " + str(maxstepnumber) + " times. System will automatically reset the watering cycle to allow more water" - print(textmessage) - if (mailtype!="none"): - #send alert mail notification - emailmod.sendallmail("alert", textmessage) - logger.error(textmessage) - statusdataDBmod.write_status_data(AUTO_data,element,"alertcounter",alertcounter+1) - - # reset watering cycle - status="done" - statusdataDBmod.write_status_data(AUTO_data,element,"watercounter",0) - statusdataDBmod.write_status_data(AUTO_data,element,"checkcounter",-1) - statusdataDBmod.write_status_data(AUTO_data,element,"alertcounter",0) - statusdataDBmod.write_status_data(AUTO_data,element,"cyclestartdate",datetime.utcnow()) - - else: # slope not OK, probable hardware problem - alertcounter=statusdataDBmod.read_status_data(AUTO_data,element,"alertcounter") - if alertcounter<3: - textmessage="CRITICAL: WATERING HAS BEEN STOPPED!!. "+ sensor + " value below the MINIMUM threshold " + str(minthreshold) + " still after activating the watering :" + element + " for " + str(maxstepnumber) + " times." - print(textmessage) - if (mailtype!="none"): - #send alert mail notification - emailmod.sendallmail("alert", textmessage) - logger.error(textmessage) - statusdataDBmod.write_status_data(AUTO_data,element,"alertcounter",alertcounter+1) - - - # update the status - checkcounter=statusdataDBmod.read_status_data(AUTO_data,element,"checkcounter") - statusdataDBmod.write_status_data(AUTO_data,element,"cyclestatus",status) - statusdataDBmod.write_status_data(AUTO_data,element,"checkcounter",checkcounter+1) - - # RAMPUP case above threshold but below maxthreshold - elif sensorreading(sensor,samplesminutes)waitingtime: - watercounter=statusdataDBmod.read_status_data(AUTO_data,element,"watercounter") - if maxstepnumber>watercounter: - #activate pump - activatewater(element, duration) - # invia mail, considered as info, not as alert - if (mailtype!="warningonly")and(mailtype!="none"): - textmessage="INFO: " + sensor + " value below the Maximum threshold " + str(maxthreshold) + ", activating the watering :" + element - emailmod.sendallmail("alert", textmessage) - - statusdataDBmod.write_status_data(AUTO_data,element,"watercounter",watercounter+1) - statusdataDBmod.write_status_data(AUTO_data,element,"lastwateringtime",datetime.utcnow()) - - else: - # give up to reache the maximum threshold, proceed as done, send alert - logger.info('Number of watering time per cycle has been exceeeded') - - # invia mail if couner alert is lower than 1 -------------- - # only if the info is activated - if mailtype!="warningonly": - alertcounter=statusdataDBmod.read_status_data(AUTO_data,element,"alertcounter") - if alertcounter<2: - textmessage="INFO "+ sensor + " value below the Maximum threshold " + str(maxthreshold) + " still after activating the watering :" + element + " for " + str(maxstepnumber) + " times" - print(textmessage) - if (mailtype!="none"): - #send alert mail notification - emailmod.sendallmail("alert", textmessage) - logger.error(textmessage) - statusdataDBmod.write_status_data(AUTO_data,element,"alertcounter",alertcounter+1) - - # reset watering cycle - status="done" - statusdataDBmod.write_status_data(AUTO_data,element,"watercounter",0) - statusdataDBmod.write_status_data(AUTO_data,element,"checkcounter",-1) - statusdataDBmod.write_status_data(AUTO_data,element,"alertcounter",0) - statusdataDBmod.write_status_data(AUTO_data,element,"cyclestartdate",datetime.utcnow()) - - - - # update the status - checkcounter=statusdataDBmod.read_status_data(AUTO_data,element,"checkcounter") - statusdataDBmod.write_status_data(AUTO_data,element,"cyclestatus",status) - statusdataDBmod.write_status_data(AUTO_data,element,"checkcounter",checkcounter+1) - - else: - # update the status, reset cycle - statusdataDBmod.write_status_data(AUTO_data,element,"cyclestatus","done") - statusdataDBmod.write_status_data(AUTO_data,element,"checkcounter",0) - statusdataDBmod.write_status_data(AUTO_data,element,"watercounter",0) - statusdataDBmod.write_status_data(AUTO_data,element,"alertcounter",0) - - - elif workmode=="Emergency Activation": - # check if inside the allow time period - logger.info('Emergency Mode') - timeok=isNowInTimePeriod(starttime, endtime, nowtime) - print("inside allowed time ", timeok , " starttime ", starttime , " endtime ", endtime) - if timeok: - belowthr,valid=checkminthreshold(sensor,minthreshold,rangeacceptedstr,samplesminutes) - if valid: - if belowthr: - # wait to seek a more stable reading of hygrometer - # check if time between watering events is larger that the waiting time (minutes) - - lastwateringtime=statusdataDBmod.read_status_data(AUTO_data,element,"lastwateringtime") - if sensordbmod.timediffinminutes(lastwateringtime,datetime.utcnow())>waitingtime: - # activate watering in case the maxstepnumber is not exceeded - watercounter=statusdataDBmod.read_status_data(AUTO_data,element,"watercounter") - if maxstepnumber>watercounter: - #activate pump - activatewater(element, duration) - # invia mail, considered as info, not as alert - if (mailtype!="warningonly")and(mailtype!="none"): - textmessage="INFO: " + sensor + " value below the minimum threshold " + str(minthreshold) + ", activating the watering :" + element - emailmod.sendallmail("alert", textmessage) - - statusdataDBmod.write_status_data(AUTO_data,element,"watercounter",watercounter+1) - statusdataDBmod.write_status_data(AUTO_data,element,"lastwateringtime",datetime.utcnow()) - - - else: - - logger.info('Number of watering time per cycle has been exceeeded') - # read hystory data and calculate the slope - timelist=hardwaremod.gettimedata(sensor) - cyclestartdate=statusdataDBmod.read_status_data(AUTO_data,element,"cyclestartdate") - lastwateringtime=statusdataDBmod.read_status_data(AUTO_data,element,"lastwateringtime") - startdate=cyclestartdate - timedelta(minutes=timelist[1]) - enddate=lastwateringtime + timedelta(minutes=waitingtime) - isslopeok=checkinclination(sensor,startdate,enddate) - - if isslopeok: - # invia mail if couner alert is lower than 1 - alertcounter=statusdataDBmod.read_status_data(AUTO_data,element,"alertcounter") - if alertcounter<1: - textmessage="WARNING: Please consider to increase the amount of water per cycle, the "+ sensor + " value below the MINIMUM threshold " + str(minthreshold) + " still after activating the watering :" + element + " for " + str(maxstepnumber) + " times. System will automatically reset the watering cycle to allow more water" - print(textmessage) - if (mailtype!="none"): - #send alert mail notification alertcounter - emailmod.sendallmail("alert", textmessage) - logger.error(textmessage) - statusdataDBmod.write_status_data(AUTO_data,element,"alertcounter",alertcounter+1) - - # reset watering cycle - status="done" - statusdataDBmod.write_status_data(AUTO_data,element,"watercounter",0) - statusdataDBmod.write_status_data(AUTO_data,element,"checkcounter",-1) - statusdataDBmod.write_status_data(AUTO_data,element,"alertcounter",0) - statusdataDBmod.write_status_data(AUTO_data,element,"cyclestartdate",datetime.utcnow()) - - else: # slope not OK, probable hardware problem - alertcounter=statusdataDBmod.read_status_data(AUTO_data,element,"alertcounter") - if alertcounter<3: - textmessage="CRITICAL: WATERING HAS BEEN STOPPED!!. "+ sensor + " value below the MINIMUM threshold " + str(minthreshold) + " still after activating the watering :" + element + " for " + str(maxstepnumber) + " times" - print(textmessage) - if (mailtype!="none"): - #send alert mail notification - emailmod.sendallmail("alert", textmessage) - logger.error(textmessage) - statusdataDBmod.write_status_data(AUTO_data,element,"alertcounter",alertcounter+1) - - - # update the status - checkcounter=statusdataDBmod.read_status_data(AUTO_data,element,"checkcounter") - statusdataDBmod.write_status_data(AUTO_data,element,"cyclestatus","lowthreshold") - statusdataDBmod.write_status_data(AUTO_data,element,"checkcounter",checkcounter+1) - else: - # update the status - statusdataDBmod.write_status_data(AUTO_data,element,"cyclestatus","done") - statusdataDBmod.write_status_data(AUTO_data,element,"checkcounter",0) - statusdataDBmod.write_status_data(AUTO_data,element,"watercounter",0) - statusdataDBmod.write_status_data(AUTO_data,element,"alertcounter",0) - - - elif workmode=="under MIN over MAX": - logger.info('under MIN over MAX') - # normally watering plan is allowed unless over MAX threshold - allowwateringplan[element]=True - # check if inside the allow time period - timeok=isNowInTimePeriod(starttime, endtime, nowtime) - print("inside allowed time ", timeok , " starttime ", starttime , " endtime ", endtime) - if timeok: - logger.info('Insede operative time') - belowthr,valid=checkminthreshold(sensor,minthreshold,rangeacceptedstr,samplesminutes) - if valid: - logger.info('valid sensor reading') - if belowthr: - logger.info('sensor reading below threshold') - # wait to seek a more stable reading of hygrometer - # check if time between watering events is larger that the waiting time (minutes) - - lastwateringtime=statusdataDBmod.read_status_data(AUTO_data,element,"lastwateringtime") - if sensordbmod.timediffinminutes(lastwateringtime,datetime.utcnow())>waitingtime: - # activate watering in case the maxstepnumber is not exceeded - watercounter=statusdataDBmod.read_status_data(AUTO_data,element,"watercounter") - if maxstepnumber>watercounter: - logger.info('water Count not exceeded') - #activate pump - activatewater(element, duration) - # invia mail, considered as info, not as alert - if (mailtype!="warningonly")and(mailtype!="none"): - textmessage="INFO: " + sensor + " value below the minimum threshold " + str(minthreshold) + ", activating the watering :" + element - emailmod.sendallmail("alert", textmessage) - statusdataDBmod.write_status_data(AUTO_data,element,"watercounter",watercounter+1) - statusdataDBmod.write_status_data(AUTO_data,element,"lastwateringtime",datetime.utcnow()) - - - else: - - logger.info('Number of watering time per cycle has been exceeeded') - # read hystory data and calculate the slope - timelist=hardwaremod.gettimedata(sensor) - - cyclestartdate=statusdataDBmod.read_status_data(AUTO_data,element,"cyclestartdate") - lastwateringtime=statusdataDBmod.read_status_data(AUTO_data,element,"lastwateringtime") - startdate=cyclestartdate - timedelta(minutes=timelist[1]) - enddate=lastwateringtime + timedelta(minutes=waitingtime) - isslopeok=checkinclination(sensor,startdate,enddate) - - if isslopeok: - # invia mail if couner alert is lower than 1 - alertcounter=statusdataDBmod.read_status_data(AUTO_data,element,"alertcounter") - if alertcounter<1: - textmessage="WARNING: Please consider to increase the amount of water per cycle, the "+ sensor + " value below the MINIMUM threshold " + str(minthreshold) + " still after activating the watering :" + element + " for " + str(maxstepnumber) + " times. System will automatically reset the watering cycle to allow more water" - print(textmessage) - if (mailtype!="none"): - #send alert mail notification - emailmod.sendallmail("alert", textmessage) - logger.error(textmessage) - statusdataDBmod.write_status_data(AUTO_data,element,"alertcounter",alertcounter+1) - - # reset watering cycle - status="done" - statusdataDBmod.write_status_data(AUTO_data,element,"watercounter",0) - statusdataDBmod.write_status_data(AUTO_data,element,"checkcounter",-1) - statusdataDBmod.write_status_data(AUTO_data,element,"alertcounter",0) - statusdataDBmod.write_status_data(AUTO_data,element,"cyclestartdate",datetime.utcnow()) - - else: # slope not OK, probable hardware problem - alertcounter=statusdataDBmod.read_status_data(AUTO_data,element,"alertcounter") - if alertcounter<3: - textmessage="CRITICAL: WATERING HAS BEEN STOPPED!!. "+ sensor + " value below the MINIMUM threshold " + str(minthreshold) + " still after activating the watering :" + element + " for " + str(maxstepnumber) + " times" - print(textmessage) - if (mailtype!="none"): - #send alert mail notification - emailmod.sendallmail("alert", textmessage) - logger.error(textmessage) - statusdataDBmod.write_status_data(AUTO_data,element,"alertcounter",alertcounter+1) - - - # update the status - checkcounter=statusdataDBmod.read_status_data(AUTO_data,element,"checkcounter") - statusdataDBmod.write_status_data(AUTO_data,element,"cyclestatus","lowthreshold") - statusdataDBmod.write_status_data(AUTO_data,element,"checkcounter",checkcounter+1) - - else: # above minimum threshold - logger.info('sensor reading above min threshold') - # update the status - statusdataDBmod.write_status_data(AUTO_data,element,"cyclestatus","done") - statusdataDBmod.write_status_data(AUTO_data,element,"checkcounter",0) - statusdataDBmod.write_status_data(AUTO_data,element,"watercounter",0) - statusdataDBmod.write_status_data(AUTO_data,element,"alertcounter",0) - - if sensorreading(sensor,samplesminutes)>maxthreshold: - logger.info('sensor reading above MAX threshold, deactivate scheduled irrigation') - # do not activate the irrigation scheduled in the time plan - allowwateringplan[element]=False - - - - elif workmode=="Alert Only": - belowthr,valid=checkminthreshold(sensor,minthreshold,rangeacceptedstr,samplesminutes) - if valid: - if belowthr: - # invia mail if couter alert is lower than - alertcounter=statusdataDBmod.read_status_data(AUTO_data,element,"alertcounter") - if alertcounter<2: - textmessage="WARNING "+ sensor + " value below the minimum threshold " + str(minthreshold) + " watering system: " + element - print(textmessage) - if (mailtype!="none"): - #send alert mail notification - emailmod.sendallmail("alert", textmessage) - logger.error(textmessage) - statusdataDBmod.write_status_data(AUTO_data,element,"alertcounter",alertcounter+1) - # update the status - checkcounter=statusdataDBmod.read_status_data(AUTO_data,element,"checkcounter") - statusdataDBmod.write_status_data(AUTO_data,element,"cyclestatus","lowthreshold") - statusdataDBmod.write_status_data(AUTO_data,element,"checkcounter",checkcounter+1) - else: - # update the status - statusdataDBmod.write_status_data(AUTO_data,element,"cyclestatus","done") - statusdataDBmod.write_status_data(AUTO_data,element,"checkcounter",0) - statusdataDBmod.write_status_data(AUTO_data,element,"watercounter",0) - statusdataDBmod.write_status_data(AUTO_data,element,"alertcounter",0) - - - else: # None case - print("No Action required, workmode set to None, element: " , element) - logger.info("No Action required, workmode set to None, element: %s " , element) - - cyclestatus=statusdataDBmod.read_status_data(AUTO_data,element,"cyclestatus") - if cyclestatus=="lowthreshold": - checkcounter=statusdataDBmod.read_status_data(AUTO_data,element,"checkcounter") - if checkcounter==1: - statusdataDBmod.write_status_data(AUTO_data,element,"cyclestartdate",datetime.utcnow()) - - # implment alert message for the cycle exceeding days, and reset the cycle - if workmode!="None": - cyclestartdate=statusdataDBmod.read_status_data(AUTO_data,element,"cyclestartdate") - timedeltadays=sensordbmod.timediffdays(datetime.utcnow(),cyclestartdate) - if (timedeltadays > maxdays): #the upper limit is set in case of abrupt time change - textmessage="WARNING "+ sensor + " watering cycle is taking too many days, watering system: " + element + ". Reset watering cycle" - print(textmessage) - # in case of full Auto, activate pump for minimum pulse period - if workmode=="Full Auto": - if (timedeltadays < maxdays+2): #the upper limit is set in case of abrupt time change - textmessage="WARNING "+ sensor + " watering cycle is taking too many days, watering system: " + element + ". Activate Min pulse + Reset watering cycle" - activatewater(element, duration) - #send alert mail notification - if (mailtype!="warningonly")and(mailtype!="none"): - emailmod.sendallmail("alert", textmessage) - logger.error(textmessage) - logger.error("Cycle started %s, Now is %s (UTC time) ", cyclestartdate.strftime("%Y-%m-%d %H:%M:%S"), datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")) - # reset cycle - statusdataDBmod.write_status_data(AUTO_data,element,"cyclestatus","done") - statusdataDBmod.write_status_data(AUTO_data,element,"checkcounter",0) - statusdataDBmod.write_status_data(AUTO_data,element,"watercounter",0) - statusdataDBmod.write_status_data(AUTO_data,element,"alertcounter",0) - statusdataDBmod.write_status_data(AUTO_data,element,"cyclestartdate",datetime.utcnow()) - - # implment Critical alert message in case the threshold is below the 0.5 of the minimum - if workmode!="None": - belowthr,valid=checkminthreshold(sensor,minthreshold*0.5,rangeacceptedstr,samplesminutes) - if valid: - if belowthr: - logger.info('sensor %s below half of the actual set threshold', sensor) - textmessage="CRITICAL: Plant is dying, "+ sensor + " reading below half of the minimum threshold, need to check the " + element - print(textmessage) - #send alert mail notification - alertcounter=statusdataDBmod.read_status_data(AUTO_data,element,"alertcounter") - if alertcounter<5: - if (mailtype!="none"): - emailmod.sendallmail("alert", textmessage) - logger.error(textmessage) - statusdataDBmod.write_status_data(AUTO_data,element,"alertcounter",alertcounter+1) - else: - logger.info('sensor %s below valid data', sensor) - textmessage="WARNING: "+ sensor + " outside valid data range ("+ rangeacceptedstr +"), need to check sensor" - print(textmessage) - #send alert mail notification - alertcounter=statusdataDBmod.read_status_data(AUTO_data,element,"alertcounter") - if alertcounter<3: - if (mailtype!="none"): - emailmod.sendallmail("alert", textmessage) - logger.error(textmessage) - statusdataDBmod.write_status_data(AUTO_data,element,"alertcounter",alertcounter+1) - return - - - -def isNowInTimePeriod(startTime, endTime, nowTime): - if startTime < endTime: - return nowTime >= startTime and nowTime <= endTime - else: #Over midnight - return nowTime >= startTime or nowTime <= endTime - - - -def checkminthreshold(sensor,minthreshold,rangeacceptedstr,samplesminutes): - belowthr=False - validity=True - # check the hygrometer sensor levels - sensorreadingaverage=sensorreading(sensor,samplesminutes) - - - print(" accepted range " , rangeacceptedstr) - rangelist=rangeacceptedstr.split(":") - sensorrangeok=True - if len(rangelist)==2: - try: - mins=float(rangelist[0]) - maxs=float(rangelist[1]) - if (sensorreadingaveragemaxs): - sensorrangeok=False - except: - print("No valid parameter for sensor range , ignored ") - logger.info("No valid parameter for sensor range , ignored ") - - if sensorrangeok: - if (sensorreadingaverage>minthreshold): - logger.info('Soil moisture check, Sensor reading=%s > Minimum threshold=%s ', str(sensorreadingaverage), str(minthreshold)) - print('Soil moisture check, Sensor reading=%s > Minimum threshold=%s ') - else: - logger.warning('Soil moisture check, Sensor reading=%s < Minimum threshold=%s ', str(sensorreadingaverage), str(minthreshold)) - logger.info('Start watering procedure ') - print('Soil moisture check, activating watering procedure ') - belowthr=True - else: - logger.warning('Sensor reading outside acceptable range %s no action', str(sensorreadingaverage)) - print('Sensor reading outside acceptable range ', sensorreadingaverage ,' no action') - validity=False - - return belowthr, validity - - -def checkinclination(sensorname,startdate,enddate): - # startdate is UTC now, need to be evaluated - print("Check inclination of the hygrometer curve after watering done " , sensorname) - logger.info('Check inclination of the hygrometer curve after watering done: %s', sensorname) - logger.info('Start eveluation from %s to %s', startdate.strftime("%Y-%m-%d %H:%M:%S") , enddate.strftime("%Y-%m-%d %H:%M:%S")) - print("Start eveluation from " , startdate.strftime("%Y-%m-%d %H:%M:%S") , " to " , enddate.strftime("%Y-%m-%d %H:%M:%S")) - datax=[] - datay=[] - if sensorname: - lenght=sensordbmod.getSensorDataPeriodXminutes(sensorname,datax,datay,startdate,enddate) - - print("datax ", datax) - print("datay ", datay) - if lenght>0: - avex=old_div(sum(datax),float(lenght)) - avey=old_div(sum(datay),float(lenght)) - print(" Average: " , avex, " " , avey) - num=0 - den=0 - for inde in range(len(datax)): - x2=(datax[inde]-avex)*(datax[inde]-avex) - xy=(datax[inde]-avex)*(datay[inde]-avey) - num=num+xy - den=den+x2 - print(" ----> Lenght " ,lenght , " num: ", num , " Den: ", den) - if den>0.0001: # this is to avoid problem with division - slope=old_div(num,den) - logger.info('Inclination value: %.4f', slope) - print(" Slope Value" , slope) - # here an arbitray min slope that should be reasonable for a working system - yvolt=0.2 - xminute=2*60 - minslope=old_div(yvolt,xminute) # 0.2 volt per 2 hours - if slope>minslope: - logger.info('Inclination value %.4f above the min reference %.4f (0.2 volt per 2 hours), restaring watering cycle',slope,minslope) - return True - return False - - - - -def sensorreading(sensorname,MinutesOfAverage): - #MinutesOfAverage=70 #about one hour, 4 samples at 15min samples rate - if sensorname: - # old - #sensordata=[] - #sensordbmod.getsensordbdata(sensorname,sensordata) - # get number of samples - timelist=hardwaremod.gettimedata(sensorname) - theinterval=timelist[1] # minutes - if theinterval>0: - samplesnumber=int(old_div(MinutesOfAverage,theinterval)+1) - else: - samplesnumber=1 - # new procedure should be faster on database reading for large amount of data - sensordata=[] - sensordbmod.getsensordbdatasamplesN(sensorname,sensordata,samplesnumber) - # still necessary to filter the sample based on timestamp, due to the possibility of missing samples - starttimecalc=datetime.now()-timedelta(minutes=int(MinutesOfAverage)) - isok, quantitylist=sensordbmod.EvaluateDataPeriod(sensordata,starttimecalc,datetime.now()) - quantity=quantitylist["max"] - return quantity - -def lastsensorreading(sensorname): - if sensorname: - sensordata=[] - sensordbmod.getsensordbdata(sensorname,sensordata) - data=sensordata[-1] - try: - number=float(data[1]) - except: - number=0 - return number - - - -def checkworkmode(element): - return autowateringdbmod.searchdata("element",element,"workmode") - - -def activatewater(element, duration): - # check the activation of the doser before the pump - doseron=autofertilizermod.checkactivate(element,duration) # this has a blocking sleep command - #activate pump - #msg , pulseok=hardwaremod.makepulse(element,duration) - msg, pulseok = ActuatorControllermod.activateactuator(element,duration) - - # salva su database - if pulseok: - actuatordbmod.insertdataintable(element,duration) - return msg - - -if __name__ == '__main__': - - """ - prova functions - """ - - - diff --git a/changelog/change b/changelog/change index b306b65..f5172dd 100755 --- a/changelog/change +++ b/changelog/change @@ -1012,4 +1012,36 @@ This means that after the MQTT discovery configuration has been push to home ass 2022-04-06 -> release 340f -- Add preset configuration for the SuperHat v13.x (MCP23018 due to chip shortage) \ No newline at end of file +- Add preset configuration for the SuperHat v13.x (MCP23018 due to chip shortage) + +2022-09-27 -> release 341 + +- Set retain option to true in the MQTT configuration message to the Home Assistant, attempt to make the configuration not disappear when the home assistant reset. + +2022-09-27 -> release 342 + +- Remove the autowatering STOP water + +2022-09-27 -> release 343 + +- rewrite the Autowatering function + +2022-09-27 -> release 343a + +- continue rewrite the Autowatering function +- fixed bug with HASS integration + +2022-10-02 -> release 343b + +- Bug fixing + +2022-10-05 -> release 343c + +- Fix bug when updating the configuration +- Add notifications +- Make code more efficient in case the Workmode is None + + +2022-10-05 -> release 343d + +- Modify the Notification function to properly delete messages \ No newline at end of file diff --git a/database/default/defautowtdata.txt b/database/default/defautowtdata.txt index 2dcabb3..a7926af 100644 --- a/database/default/defautowtdata.txt +++ b/database/default/defautowtdata.txt @@ -1 +1 @@ -{"element": "", "threshold": ["2.0", "4.0"],"workmode": "None","sensor": "","wtstepsec": "100","maxstepnumber": "3","allowedperiod": ["21:00","05:00"],"maxdaysbetweencycles": "10", "pausebetweenwtstepsmin":"45", "mailalerttype":"warningonly" , "sensorminacceptedvalue":"0.5"} +{"element": "", "threshold": ["50", "70"],"workmode": "None","sensor": "","wtstepsec": "100","maxstepnumber": "3","samplesminutes": "5","allowedperiod": ["00:00","00:00"],"maxdaysbetweencycles": "10", "pausebetweenwtstepsmin":"45", "mailalerttype":"warningonly" , "sensorminacceptedvalue":"1:100"} diff --git a/database/default/defhwdata.txt b/database/default/defhwdata.txt index 93d7b8b..2491ee3 100644 --- a/database/default/defhwdata.txt +++ b/database/default/defhwdata.txt @@ -1,13 +1,33 @@ -{"IOtype": "output" , "controllercmd": "pulse", "logic": "neg", "name": "water1", "pin": "5", "usefor": "watercontrol", "measure": "Time" , "unit" : "sec", "schedulingtype":"oneshot"} -{"IOtype": "output" , "controllercmd": "pulse", "logic": "neg", "name": "water2", "pin": "6", "usefor": "watercontrol", "measure": "Time" , "unit" : "sec", "schedulingtype":"oneshot"} -{"IOtype": "output" , "controllercmd": "pulse", "logic": "neg", "name": "water3", "pin": "13", "usefor": "watercontrol", "measure": "Time" , "unit" : "sec", "schedulingtype":"oneshot"} -{"IOtype": "output" , "controllercmd": "pulse", "logic": "neg", "name": "water4", "pin": "19", "usefor": "watercontrol", "measure": "Time" , "unit" : "sec", "schedulingtype":"oneshot"} -{"IOtype": "output" , "controllercmd": "pulse", "logic": "neg", "name": "water5", "pin": "26", "usefor": "watercontrol", "measure": "Time" , "unit" : "sec", "schedulingtype":"oneshot"} -{"IOtype": "output" , "controllercmd": "pulse", "logic": "neg", "name": "water6", "pin": "12", "usefor": "watercontrol", "measure": "Time" , "unit" : "sec", "schedulingtype":"oneshot"} -{"IOtype": "output" , "controllercmd": "pulse", "logic": "neg", "name": "water7", "pin": "20", "usefor": "watercontrol", "measure": "Time" , "unit" : "sec", "schedulingtype":"oneshot"} -{"IOtype": "output" , "controllercmd": "pulse", "logic": "neg", "name": "water8", "pin": "16", "usefor": "watercontrol", "measure": "Time" , "unit" : "sec", "schedulingtype":"oneshot"} -{"IOtype": "output" ,"usefor": "mailcontrol", "address": "", "controllercmd": "mail+info+link","name": "mail1", "time": "10:00", "title": "Hydrosys today report", "measure" : "Mail" , "unit" : "pcs" , "schedulingtype":"oneshot"} -{"IOtype": "output" ,"usefor": "mailcontrol", "address": "", "controllercmd": "mail+info","name": "mail2", "time": "10:00", "title": "Hydrosys today report", "measure" : "Mail" , "unit" : "pcs" , "schedulingtype":"oneshot"} -{"IOtype": "output" ,"usefor": "photocontrol", "controllercmd": "photo", "name": "photo", "time": "09:30", "measure" : "Photo" , "unit" : "pcs", "schedulingtype":"oneshot"} -{"ADCchannel": "0", "IOtype": "output", "controllercmd": "servo", "frequency": "50", "logic": "pos", "address": "", "title": "", "max": "12", "measure": "Percentage", "min": "2", "name": "servo1", "pin": "21", "powerpin": "N/A", "schedulingtype": "oneshot", "time": "", "unit": "C", "usefor": "N/A"} -{"IOtype": "input" ,"name": "TimeTrigger", "unit" : "%", "measure":"Time", "controllercmd": "returnzero", "pin": "N/A" , "usefor" : "N/A", "schedulingtype":"periodic", "time":"00:05:00"} +{"IOtype": "output", "controllercmd": "pulse", "logic": "neg", "measure": "Time", "name": "Relay1_1", "pin": "5", "schedulingtype": "oneshot", "unit": "sec", "usefor": "watercontrol"} +{"IOtype": "output", "controllercmd": "pulse", "logic": "neg", "measure": "Time", "name": "Relay1_2", "pin": "6", "schedulingtype": "oneshot", "unit": "sec", "usefor": "watercontrol"} +{"IOtype": "output", "controllercmd": "pulse", "logic": "neg", "measure": "Time", "name": "Relay1_3", "pin": "12", "schedulingtype": "oneshot", "unit": "sec", "usefor": "watercontrol"} +{"IOtype": "output", "controllercmd": "pulse", "logic": "neg", "measure": "Time", "name": "Relay1_4", "pin": "13", "schedulingtype": "oneshot", "unit": "sec", "usefor": "watercontrol"} +{"IOtype": "output", "controllercmd": "pulse", "logic": "neg", "measure": "Time", "name": "Relay1_5", "pin": "19", "schedulingtype": "oneshot", "unit": "sec", "usefor": "watercontrol"} +{"IOtype": "output", "controllercmd": "pulse", "logic": "neg", "measure": "Time", "name": "Relay1_6", "pin": "16", "schedulingtype": "oneshot", "unit": "sec", "usefor": "watercontrol"} +{"IOtype": "output", "controllercmd": "pulse", "logic": "neg", "measure": "Time", "name": "Relay1_7", "pin": "26", "schedulingtype": "oneshot", "unit": "sec", "usefor": "watercontrol"} +{"IOtype": "output", "controllercmd": "pulse", "logic": "neg", "measure": "Time", "name": "Relay1_8", "pin": "20", "schedulingtype": "oneshot", "unit": "sec", "usefor": "watercontrol"} +{"IOtype": "output", "controllercmd": "pulse", "logic": "neg", "measure": "Time", "name": "Relay2_1", "pin": "14", "schedulingtype": "oneshot", "unit": "sec", "usefor": "watercontrol"} +{"IOtype": "output", "controllercmd": "pulse", "logic": "neg", "measure": "Time", "name": "Relay2_2", "pin": "4", "schedulingtype": "oneshot", "unit": "sec", "usefor": "watercontrol"} +{"IOtype": "output", "controllercmd": "pulse", "logic": "neg", "measure": "Time", "name": "Relay2_3", "pin": "15", "schedulingtype": "oneshot", "unit": "sec", "usefor": "watercontrol"} +{"IOtype": "output", "controllercmd": "pulse", "logic": "neg", "measure": "Time", "name": "Relay2_4", "pin": "18", "schedulingtype": "oneshot", "unit": "sec", "usefor": "watercontrol"} +{"IOtype": "output", "controllercmd": "pulse", "logic": "neg", "measure": "Time", "name": "Relay2_5", "pin": "17", "schedulingtype": "oneshot", "unit": "sec", "usefor": "watercontrol"} +{"IOtype": "output", "controllercmd": "pulse", "logic": "neg", "measure": "Time", "name": "Relay2_6", "pin": "27", "schedulingtype": "oneshot", "unit": "sec", "usefor": "watercontrol"} +{"IOtype": "output", "controllercmd": "pulse", "logic": "neg", "measure": "Time", "name": "Relay2_7", "pin": "23", "schedulingtype": "oneshot", "unit": "sec", "usefor": "watercontrol"} +{"IOtype": "output", "controllercmd": "pulse", "logic": "neg", "measure": "Time", "name": "Relay2_8", "pin": "22", "schedulingtype": "oneshot", "unit": "sec", "usefor": "watercontrol"} +{"IOtype": "input", "controllercmd": "BME280_temperature", "measure": "Temperature", "name": "tempsensor1", "pin": "I2C", "schedulingtype": "periodic", "time": "00:15:05", "unit": "C", "usefor": "temperaturecontrol"} +{"IOtype": "input", "controllercmd": "BME280_humidity", "measure": "Humidity", "name": "humidsensor1", "pin": "I2C", "schedulingtype": "periodic", "time": "00:15:03", "unit": "%", "usefor": "humiditycontrol"} +{"IOtype": "input", "controllercmd": "BME280_pressure", "measure": "Pressure", "name": "pressuresensor1", "pin": "I2C", "schedulingtype": "periodic", "time": "00:15:01", "unit": "hPa", "usefor": "Pressurecontrol"} +{"IOtype": "input", "controllercmd": "lightsensor", "measure": "Light", "name": "lightsensor1", "pin": "I2C", "schedulingtype": "periodic", "time": "00:15:01", "unit": "Lum", "usefor": "lightcontrol"} +{"ADCchannel": "0", "IOtype": "input", "controllercmd": "analogdigital", "direction": "dir", "logic": "pos", "measure": "Moisture", "name": "Analog0", "pin": "SPI", "powerpin": "N/A", "schedulingtype": "periodic", "time": "00:15:01", "unit": "Volt", "usefor": "Moisturecontrol"} +{"ADCchannel": "1", "IOtype": "input", "controllercmd": "analogdigital", "direction": "dir", "logic": "pos", "measure": "Moisture", "name": "Analog1", "pin": "SPI", "powerpin": "N/A", "schedulingtype": "periodic", "time": "00:15:01", "unit": "Volt", "usefor": "Moisturecontrol"} +{"ADCchannel": "2", "IOtype": "input", "controllercmd": "analogdigital", "direction": "dir", "logic": "pos", "measure": "Moisture", "name": "Analog2", "pin": "SPI", "powerpin": "N/A", "schedulingtype": "periodic", "time": "00:15:01", "unit": "Volt", "usefor": "Moisturecontrol"} +{"ADCchannel": "3", "IOtype": "input", "controllercmd": "analogdigital", "direction": "dir", "logic": "pos", "measure": "Moisture", "name": "Analog3", "pin": "SPI", "powerpin": "N/A", "schedulingtype": "periodic", "time": "00:15:01", "unit": "Volt", "usefor": "Moisturecontrol"} +{"ADCchannel": "4", "IOtype": "input", "controllercmd": "analogdigital", "direction": "dir", "logic": "pos", "max": "", "measure": "Moisture", "min": "", "name": "Analog4", "offset": "", "pin": "SPI", "powerpin": "N/A", "scale": "", "schedulingtype": "periodic", "time": "00:15:01", "unit": "Volt", "usefor": "Moisturecontrol"} +{"ADCchannel": "5", "IOtype": "input", "controllercmd": "analogdigital", "direction": "dir", "logic": "pos", "max": "4.0", "measure": "Moisture", "min": "0", "name": "Analog5_15v", "offset": "", "pin": "SPI", "powerpin": "N/A", "scale": "12", "schedulingtype": "periodic", "time": "00:15:01", "unit": "Volt", "usefor": "Moisturecontrol"} +{"ADCchannel": "6", "IOtype": "input", "address": "", "controllercmd": "analogdigital", "direction": "dir", "frequency": "", "logic": "pos", "max": "", "measure": "Moisture", "min": "", "name": "Analog6", "offset": "", "pin": "SPI", "pin2": "N/A", "powerpin": "N/A", "scale": "", "schedulingtype": "periodic", "time": "00:15:01", "title": "", "unit": "Volt", "usefor": "sensorquery"} +{"ADCchannel": "7", "IOtype": "input", "address": "", "controllercmd": "analogdigital", "direction": "dir", "frequency": "", "logic": "pos", "max": "", "measure": "Moisture", "min": "", "name": "Analog7", "offset": "", "pin": "SPI", "pin2": "N/A", "powerpin": "N/A", "scale": "", "schedulingtype": "periodic", "time": "00:15:01", "title": "", "unit": "Volt", "usefor": "sensorquery"} +{"IOtype": "output", "address": "", "controllercmd": "mail+info+link", "measure": "Mail", "name": "mail1", "schedulingtype": "oneshot", "time": "10:00", "title": "Hydrosys today report", "unit": "pcs", "usefor": "mailcontrol"} +{"IOtype": "output", "address": "", "controllercmd": "mail+info", "measure": "Mail", "name": "mail2", "schedulingtype": "oneshot", "time": "10:00", "title": "Hydrosys today report", "unit": "pcs", "usefor": "mailcontrol"} +{"IOtype": "output", "controllercmd": "photo", "measure": "Photo", "name": "photo", "schedulingtype": "oneshot", "time": "09:30", "unit": "pcs", "usefor": "photocontrol"} +{"ADCchannel": "0", "IOtype": "output", "address": "", "controllercmd": "servo", "frequency": "50", "logic": "pos", "max": "12", "measure": "Percentage", "min": "2", "name": "servo1", "pin": "21", "powerpin": "N/A", "schedulingtype": "oneshot", "time": "", "title": "", "unit": "C", "usefor": "N/A"} +{"IOtype": "input", "controllercmd": "returnzero", "measure": "Time", "name": "TimeTrigger", "pin": "N/A", "schedulingtype": "periodic", "time": "00:05:00", "unit": "%", "usefor": "N/A"} diff --git a/messageboxmod.py b/messageboxmod.py index 8121f07..05f1f7a 100644 --- a/messageboxmod.py +++ b/messageboxmod.py @@ -46,7 +46,6 @@ def get_row(self,post_id): conn = self.get_db_connection() dictitem = conn.execute('SELECT * FROM "' + self.databasetable + '" WHERE id = ?',(post_id,)).fetchone() conn.close() - print(post) return dictitem def get_allrows(self): @@ -78,34 +77,45 @@ def delete_row(self,index): conn.commit() conn.close() + def delete_last_Nrows(self,number): + conn = self.get_db_connection() + if conn: + # example --> delete from tb_news where newsid IN (SELECT newsid from tb_news order by newsid desc limit 10) + + conn.execute('DELETE FROM "' + self.databasetable + '" WHERE id IN (SELECT id FROM "' + self.databasetable + '" ORDER BY id ASC LIMIT "' + str(number) + '")') + conn.commit() + conn.close() + class _MessageBox: def __init__(self,databasetable): + self.maxitems=50 self.database=_DataBase(databasetable) #dictitem={'title':"eccolo", 'content': " bla bla bla bla", 'created':" "} #self.database.add_row(dictitem) - self.RemoveExceeding(13) + self.RemoveExceeding() - def RemoveExceeding(self, maxitems): + def RemoveExceeding(self): msglist = self.database.get_allrows() - index=0 - for items in reversed(msglist): - index=index+1 - print(items['id']) - if index > maxitems: - self.DeleteMessage(items['id']) + totalnum=len(msglist) + toremove= totalnum - self.maxitems + if toremove>0: + DeleteLastNMessage(toremove) - def GetMessages(self): return self.database.get_allrows() def SaveMessage(self,dictitem): - return self.database.add_row(dictitem) + self.database.add_row(dictitem) + self.RemoveExceeding() + return def DeleteMessage(self,index): return self.database.delete_row(index) + def DeleteLastNMessage(self,number): + return self.database.delete_last_Nrows(number) @@ -113,6 +123,8 @@ def DeleteMessage(self,index): _MessageBoxIst=_MessageBox("posts") +# Interface functions + def GetMessages(): return _MessageBoxIst.GetMessages() @@ -124,3 +136,32 @@ def SaveMessage(dictitem): def DeleteMessage(index): return _MessageBoxIst.DeleteMessage(index) +def DeleteLastNMessage(number): + return _MessageBoxIst.DeleteLastNMessage(number) + +def PrintMessages(): + messages = _MessageBoxIst.GetMessages() + print("number of items ", len(messages)) + for row in messages: + rowstr="" + for item in row: + rowstr=rowstr+" " +str(item) + print (rowstr) + +# maintenance Function + + + + +if __name__ == '__main__': + + print(" Add two rows and delete them") + PrintMessages() + dictitem=[] + dictitem.append({'title':"eccolo", 'content': " bla bla bla bla", 'created':" "}) + dictitem.append({'title':"secondo", 'content': " bla bla bla", 'created':" "}) + for item in dictitem: + SaveMessage(item) + PrintMessages() + #DeleteLastNMessage(1) + #PrintMessages() \ No newline at end of file diff --git a/selectedplanmod.py b/selectedplanmod.py index c38fbef..54136b9 100755 --- a/selectedplanmod.py +++ b/selectedplanmod.py @@ -21,7 +21,7 @@ import hardwaremod import SchedulerMod import wateringdbmod -import autowateringmod +from autowatering import autowateringmod import fertilizerdbmod import autofertilizermod import advancedmod @@ -132,13 +132,11 @@ def checksensorcondition(sensornamelist,threshold, MinutesOfAverage, ONOFF=True) def startpump(target,activationseconds,ThesholdOFFON,ThesholdONOFF): logger.info('WateringPlan Startpump evaluation: %s', target) - #workmode=autowateringmod.checkworkmode(target) - #if workmode=="Full Auto": - if target in autowateringmod.allowwateringplan: - if not autowateringmod.allowwateringplan[target]: - logger.info('WateringPlan: %s pump activation blocked by automation', target) - pumpit=False - return False + check=autowateringmod.getstatus(target,"allowwateringplan") + if (not check) and (check != None): # None is considered false + logger.info('WateringPlan: %s pump activation blocked by automation', target) + pumpit=False + return False duration=hardwaremod.toint(activationseconds,0) print(target, " ",duration, " " , datetime.now()) diff --git a/start.py b/start.py index b714764..e32a01b 100755 --- a/start.py +++ b/start.py @@ -3,7 +3,7 @@ from builtins import str from builtins import range -Release="3.40f" +Release="3.43d" #--------------------- from loggerconfig import LOG_SETTINGS @@ -49,8 +49,8 @@ import actuatordbmod import selectedplanmod import wateringdbmod -import autowateringdbmod -import autowateringmod +from autowatering import autowateringdbmod +from autowatering import autowateringmod import automationdbmod import automationmod @@ -2203,7 +2203,7 @@ def autowatering(): sensorlist= autowateringdbmod.getsensorlist() #print "sensorlist ",sensorlist - modelist=["None", "Full Auto" , "under MIN over MAX" , "Emergency Activation" , "Alert Only"] + modelist=["None", "Full Auto" , "under MIN over MAX"] formlist=["workmode", "sensor" , "threshold", "wtstepsec", "maxstepnumber", "pausebetweenwtstepsmin", "allowedperiod" , "maxdaysbetweencycles", "sensorminacceptedvalue", "mailalerttype","samplesminutes" ] alertlist=["infoandwarning", "warningonly","none"] @@ -2236,6 +2236,7 @@ def autowatering(): #print "dicttemp ----->",dicttemp autowateringdbmod.replacerow(element,dicttemp) flash('Table has been saved') + autowateringmod.configupdate(element) print("Reset the Cycle:" , element) autowateringmod.cyclereset(element) @@ -2265,16 +2266,14 @@ def autowatering(): cyclestatuslist=[] for element in elementlist: - if not (element in autowateringmod.AUTO_data): - autowateringmod.cyclereset(element) cyclestatus=[] - LOCtime=clockmod.convertUTCtoLOC_datetime(autowateringmod.AUTO_data[element]["cyclestartdate"]) + LOCtime=clockmod.convertUTCtoLOC_datetime(autowateringmod.getstatus(element,"cyclestartdate")) cyclestatus.append(LOCtime.strftime("%Y-%m-%d %H:%M:%S")) - LOCtime=clockmod.convertUTCtoLOC_datetime(autowateringmod.AUTO_data[element]["lastwateringtime"]) + LOCtime=clockmod.convertUTCtoLOC_datetime(autowateringmod.getstatus(element, "lastwateringtime")) cyclestatus.append(LOCtime.strftime("%Y-%m-%d %H:%M:%S")) - cyclestatus.append(autowateringmod.AUTO_data[element]["cyclestatus"]) - cyclestatus.append(autowateringmod.AUTO_data[element]["watercounter"]) - cyclestatus.append(autowateringmod.AUTO_data[element]["alertcounter"]) + cyclestatus.append(autowateringmod.getstatus(element,"cyclestatus")) + cyclestatus.append(autowateringmod.getstatus(element,"watercounter")) + cyclestatus.append(autowateringmod.getstatus(element,"alertcounter")) #{"cyclestartdate":datetime.utcnow(),"lastwateringtime":datetime.utcnow(),"cyclestatus":"done", "checkcounter":0, "alertcounter":0, "watercounter":0} cyclestatuslist.append(cyclestatus) diff --git a/templates/autowatering.html b/templates/autowatering.html index eb0d4e3..ca90d0f 100755 --- a/templates/autowatering.html +++ b/templates/autowatering.html @@ -94,353 +94,356 @@

Automatic Watering Setting

-
-
-
- Parameters Setting -
-
-
- -
-
-
- -
-
- -
Full Auto:Disable the watering scheduling and use the autowatering algorithm
-
Under MIN over MAX: Watering schedule set in the WateringPlan is still used, plus activate watering if sensor reading is lower that the MIN threshold and stop scheduled watering if the sensor reading is above MAX threshold
-
Emergency Activation: Activate watering only if sensor reading is lower that the threshold, watering schedule in WateringPlan is still used
-
Alert Only: Send email notification in case the sensor reading is lower than threshold
- -
-
-
+
+
+
+ Parameters Setting +
+
+
- -
-
-
- -
-
- -
-
-
- -
-
-
- - - - - - - - - - - +
+
+
+ +
+
+ +
Full Auto:Disable the watering scheduling and use the autowatering algorithm
+
Under MIN over MAX: Watering schedule set in the WateringPlan is still used, plus activate watering if sensor reading is lower that the MIN threshold and stop scheduled watering if the sensor reading is above MAX threshold
+
+
+
- - - - - - - - - - - -
Sensor ThresholdMinimumMaximum
- - - - - - - - - - - - - - - - -
- -
-
-
- -
-
-
- - - -
-
- -
Number of seconds for each watering activation step
- -
-
-
- -
-
-
- - - -
-
- -
max number of watering periods used in one cycle (one cycle starts from the first watering activation after sensor reading below threshold and finish when the sensor reading is back below threshold, or the max period between cycles is expired)
- -
-
-
- -
-
-
- - - -
-
- -
wait a number of minutes between watering steps to let the hygrometer reading stabilize
- -
-
-
- - -
-
-
- - - -
-
- - -
Number of past minutes in which the sensor values are taken and evaluated (average/min/max) for the automation algorithm. If value Zero, at least one sample will be considered
- -
-
-
- +
+
+
+ +
+
+ +
+
+
+ +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Sensor ThresholdMinimumMaximum
+ + + + + + +
+ +
+
+
+ +
+
+
+ + + +
+
+ +
Number of seconds for each watering activation step
+ +
+
+
-
-
+
+
+
+ -
+ +
+
+ +
wait a number of minutes between next watering to let the hygrometer reading stabilize, this will define the max water/time the system will provide
+
+
+
+
+
- - - - - - - - - - - +
+
+
+ Optional Parameters +
+
+
+ + +
+
+
+ + + +
+
+ + +
Number of past minutes in which the sensor values are taken and evaluated (average/min/max) for the automation algorithm. If value Zero, at least one sample will be considered
+ +
+
+
+ + + + +
+
+ +
+ + + +
Watering timeStartEnd
+ + + + + + + + + + + + + + + + + + + + + + +
Watering timeStartEnd
+ + + + + +
+ +
+
+
+ + +
+
+
+ + + +
+
+ +
if the number of days from last watering activation exceed this value, send warning mail. If in full Auto mode it activates the watering
+ +
+
+
- - - - - - +
+
+
+ + + +
+ +
+ +
Ouside the range the sensor reading is not considered valid , format Min : Max e.g: 1:100
+
+ + +
+
+ + + +
+
+
+ + + +
+
+ +
Used to provide alerts and notification. If after a number of watering times defined in this parameter is still under threshold it will issue a warning
+ +
+
+
+ +
+
+
+ + + +
+
+ +
send by email the info plus warning or the warning only
+ +
+
+
+ +
+
+ + +
+
+
+ System Status +
+
+
+ +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Cycle StartLast WateringStatusWatering CounterWarning
+
{{ cyclestatuslist[loop.index0][0] }}
+
+
{{ cyclestatuslist[loop.index0][1] }}
+
+
{{ cyclestatuslist[loop.index0][2] }}
+
+
{{ cyclestatuslist[loop.index0][3] }}
+
+
{{ cyclestatuslist[loop.index0][4] }}
+
+ +
+
+ + - - - - - - - - - - - -
-
- - - -
-
-
- - - -
-
- -
if the number of days from last watering activation exceed this value, send warning mail. If in full Auto mode it activates the watering for one step period
- -
-
-
- - -
-
-
- - - -
- -
- -
Ouside the range the sensor reading is not considered valid , format Min : Max e.g: 0:100
-
- - -
-
- - -
-
-
- - - -
-
- -
send by email the info plus warning or the warning only
- -
-
-
- - - - - -
-
-
- System Current Status -
-
-
- -
-
- -
- - - - - - - - - - - - - - - - - - - - +
-
- - - - - - - - - -
Cycle StartLast WateringStatusWatering CounterWarning
-
{{ cyclestatuslist[loop.index0][0] }}
-
-
{{ cyclestatuslist[loop.index0][1] }}
-
-
{{ cyclestatuslist[loop.index0][2] }}
-
-
{{ cyclestatuslist[loop.index0][3] }}
-
-
{{ cyclestatuslist[loop.index0][4] }}
-
- -
-
- - - -
- -
- -
-
- -
+
+ +
+ + + - +