From 4ee6c0894cbe3df036897217c8dea830a17c4be5 Mon Sep 17 00:00:00 2001 From: oumayma-hy Date: Fri, 19 Apr 2024 10:19:11 +0100 Subject: [PATCH 1/4] Update main.py so that the termination of a process doesn't affect the others without the restart logic --- control/planktoscopehat/main.py | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/control/planktoscopehat/main.py b/control/planktoscopehat/main.py index 45a91fbe..439773ba 100644 --- a/control/planktoscopehat/main.py +++ b/control/planktoscopehat/main.py @@ -118,17 +118,28 @@ def handler_stop_signals(signum, frame): logger.success("Looks like everything is set up and running, have fun!") + # With the creation of this dictionary to keep track of running threads, we can easily + # update the code if we decide to add another process, such as for the pump. + running_threads = { + "stepper": stepper_thread, + "imager": imager_thread + } + while run: # TODO look into ways of restarting the dead threads - logger.trace("Running around in circles while waiting for someone to die!") - if not stepper_thread.is_alive(): - logger.error("The stepper process died unexpectedly! Oh no!") - break - if not imager_thread or not imager_thread.is_alive(): - logger.error("The imager process died unexpectedly! Oh no!") + logger.trace("Continuously monitoring for unexpected terminations...") + # Check if any threads have terminated unexpectedly and log the error + for thread_name, thread in running_threads.items(): + if thread and not thread.is_alive(): + logger.error(f"The {thread_name} process terminated unexpectedly!") + running_threads[thread_name] = None + # Check if all threads have terminated so we can exit the program + if all(thread is None for thread in running_threads.values()): + logger.error("All processes terminated unexpectedly! Exiting...") break time.sleep(1) + display.display_text("Bye Bye!") logger.info("Shutting down the shop") shutdown_event.set() From f7176b5d643fb483e8ee8f9828776c380a4a41c7 Mon Sep 17 00:00:00 2001 From: oumayma-hy Date: Fri, 19 Apr 2024 10:51:56 +0100 Subject: [PATCH 2/4] changed the condition to log the error and removed None value --- control/dependencies.pdf | Bin 0 -> 20283 bytes control/motor.pdf | Bin 0 -> 15864 bytes control/planktoscopehat/main.py | 10 ++-- control/planktoscopehat/planktoscope/pump.py | 59 +++++++++++++++++++ 4 files changed, 64 insertions(+), 5 deletions(-) create mode 100644 control/dependencies.pdf create mode 100644 control/motor.pdf create mode 100644 control/planktoscopehat/planktoscope/pump.py diff --git a/control/dependencies.pdf b/control/dependencies.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5ec533d83632e30f64f06cc78c74a47fa58d2974 GIT binary patch literal 20283 zcmZs?bCf1Ax9HuRwr$(CZQHiZ>1o@Zr)^u)wr%5S+uhT=^PY3hS$BQwt5ua`@9fG> z@<%Fb|56mn;*tz3j2y5OEmyVguAbQO!5|vR_@ls9RF0Ru*Af~Op-SC z?iQ~9a(feZ3vmlGCvyu}K|xqIcUKD&2Uu@Fx50Wm{n>V)Ho63&)MQBS_Q_TxUQ(Kd&J-nu4RPaxr=&T(7mrs|z5wpWi}9Tl z%k%52>npGy`U*>k@9Wgg?c;f{pYR)EWA^U*Tj1k-RmzQZ)Cq9~|NFsOjsGY+fpb%h z_34$Bh9bwmR_fw`M#8JP1;GE!d95CRJ)1D9t~fI?m=E!ow{R*<^o~UcMN+B;)BQ9b z?o7LG`w}7I4IrD-au2Nuc|s>l=)Huy{n`X7_3*AavyQYQzlp|;rYiQoYp+WPVyL|W zwU{D^KCk=vGm8WQpE?KYu6MSDUOVe<9=3tqFqRW*k;|_f4oE0ah5VwJ zS`nY>DQyLn^*)?<_nq*$i)Sm--7dtUcw`b_l-5qd?(%fyrnDECia}~Q86DQfwLon3 zYRH{4`LKgIz#n7@9m;}oX2>WN3NFhL(z!sAy`#vrtt|TVzBcj( zprer>D*AE1oi~g`+(kXd{@@KsAET6J6NzVF90cr|Y5U2F61xc>IMS=i>Hh3oD7 z8R>O1zD$(YGs<|_2?aYcEB)7L9q`@mb$s1xUa~!&mg%~-h07LrkENHA%yVR#Fb`RK zF-abzHx9^TOog#h>WL3ne$1Nu0cqB^A`8otCoi+n?`==y4S)y<3zfVgz!wWkc0OY6 znTJ^lazK{F7P}OvKCbt(A_jj=yp#{EKUObl%j@9S!ua`eCt&0kGVNmKM$9q4JUy-R z=}yBB`Z4B7GNe|?PBO3DL?|`{HX7OBr}9b?g5TFMcOvK_Qp3)#mq3%kj5hZ%s$9Q8 z)2K(yW=+^kr#<5AFR6sWnqmP>fv()cr{DTMKC?V>{kV*X(`W-g(z*m)eZ4Yb)B?pr zH^}wph0d9VC+y5jh7%BS87a>d%HqaZ_WQVkDvFmnDik@jU*XG)t=#?h6e&+&o8Opn z#B2j#o9cKEG0OsxDg9r>uhGK;+-`0HPv1I+>{*K41Rq1*4~~+>mPLISu#v=q_MHcO zI81ms#oW6i-NORlM za%f_3f3h|NW|U`-vj%~S29LXVX^Q;AGqV_x$(IT|H+B}@pY_KAja%`?urKF(e?ds# z8=gsO-j>js_shr7>JHcpR@at_Y`Hq_NvFolOZiUF1Ed@#*u2*d+){+{)_rs0$XLj7 znlUgQ>T~Ep>o^;`Q`j709dU3ABn-%-tDuO2raffP^wA=uMCxb9MjN=i5NaMr%x09- z@M``rM7jXlus1|G?6Yhg<8(m5?`jg<%{hN>1mW;jd`tjAS0YOEm|dU#sVslnOz@GW zw|ln4Ujv&zYVYHzoo^5N6{_P5@5@H~JX2F4LY;3H5Y>3i{YioGnNr-?hrAjJZ}OiR zFv^G_se6CNoPDu?9RWZW)cRZRUN7QzXv)0vIyCXm78PoX*v6;&>|wgcU1WHq=2OS& z?Onrf86x)mX`CvG!-ylu7a@rlKRblZlhvpsG@#l!p z3bj4Y-Rs+pnEv_R;PTAn6qwkXH+0#1wq;<);Nt)Urqzr6S(}IV>uYHY&4`LkH9-C# z8{r%>1B;nwHb#I>P}Sdzi7f2_bM~P|hC_xY_HR6;3zn()?FR3Ry63g`!VHO5m}rI> z9=Qw}H!h6|V7sv(YB)6hm;wP8VV=f|MUdEU+*VW}hN3+T^TV#gdqj|_Z*4~dfdPT{ z@5UXL7kRgcrS)E;T+_}Rq8Ebjl}KE$RSS_|A4s$FqGmMPj%kNt*TJclcoG4*fy=M_kl<8D|p*jUdk^Hq@AKM@01`S=JxwN;6|0IXN5@0xFn<|r>po&`u#7Z4a zi=1w4@@Yo~1)7t9@g|ahn-$Z7SB+n$|H?kd-2?899&)Pe)tMn-J;}?3`XQ%0wGF0O zMh;pCuk&KZQ6lcyueM?>{%{ZHCU3x4(R2YA)AtQL{u0%D)$hCt>O{lF{iTKgAr2l> zL;M&VhOoxZ8jj5X@^0#7x?5FgT2#o>tNKq z#vrzu!V(7ne)S(x!h>d|j%>{cH)Lu@knhM$f9)F)8P*H0Y%so{$bBfsP-f=pc{$KAiK%g) z0ElwNazJDCg@Dj_dPC~8+yBwRto+%+!ZMgC?Yp|gN_iV#BE3D32`_8)5NrT9uf#G& zQ75ADLmQrx-kf4E0`+v;4`)_P_lJan$c?#)%A*`yOkoiYrUkrKr_QvsP-P)gqnLgm zD8y27q!Ly1l6ZVY~_}85;#P&~o9j z!y(T<_F5)ELf@t%;|8?5r|-vFG>sM>roRAnWsewUC)aXk_uhpnwD47M9UO3CUg>P^ zq<=Mp6}!=+anJ5^A-K+iJ)~~bx#jnA?DK;M3e85=r>$p@P-iC*#NJ1^$Z46EI#oh8 z95`viCJCFL-2NOkGO6-|m}Xc9jdy7SUr}tjNNPH0y+V!Ev<*|N2ulIRt@$cla1a-E zGGa-|qOoZ8qm+Qrxh5r6T|cHrEG>|RnKYHg)|n0${{~y;XhDop2+pkz@7m(Z)T_i* z=!nD!=8mnUVd@@H6u2_*s+ogtxP|+~Y@Gfuz*nkDFJ}EHqobV1m+-t266N(GHNCY7&@4mayX9zD~+)9RhS)GM=Gq?NS75jf<7G?PptGDD78_LeQ2CD{HE9gvT(^uhPt|6OvihxF2TdVPS-884HgI4col~xsj}#5~62% zwJ7XLc38#gaeDHT69*_iN>j=aJuzvUGW64~aSfWc@bs$&+3rtQDa{I~UUVh;NRR8t zlhmW=ST6-fkKK~JHRBmDq}BU-qp)VOSfSEIxv8N~omdHA7+IA;)Dbx6Db)971aw&XUKOB~xRe7D$`# z#Lh~*LzxbZRbdZ~Z{RYTHu+gH4Ii*Q5z3C$WD@74TN&L8VaGi5Y86%gm^&b8n;O#(Z4Q9}Kgh8i*%)L*nC}cZql>VENbWVTFr1LaJD!vk3f-ZR{ zngX@5VzF`q$$lq4l3kiAHWBP(st;vFS`;TPT#p_ki>Kx_)!Ev&Dpry-Uq-z{o4#@3j zv+<^8pAaydt3C|Bw{j7ObI^5pDENruNCw3$8a{79(aKy5u_O0)=Tg!1{D5co5e`u{K;zRlbpQ49h#PS`>B9^!e z@<4|fjl>Nk{v!ERlB~~6Q{WYQu1S?NV_92Q+byR!L^7la_r9PzQ7gh~=O#_i)R=54 zXZmD*#q|3cQMQyFh0=ce$AErq;7)`sc4lEC{EbK94y2*26&EGhb_@G?Yp5rN)!F1MCrX1MDo2GV}=;V@;zsX&y0*XCT-P7yq zmp+t}&Fqg0T%IH*x4q}5v;_^Ah>Ns}^>XspCF&b zB~%Dia23vy1@yNLTFqKH3M62io=Ca3At{=5TAA(MEX+0zDDm<+_4L$v?RF*QeLv?7ynQ6dq3aE$oCyRm09ig$w zWX(Y+N^h|m_Bg*~G8c#KW2ATUvdly^XpssgY@3|tK@{pX9$7Ty=#L*%&RWT~`$|5N z4%Ja{q^VYiZZY2zC&@=MrjdwiwwDPBwT5PkYdm2HyZ;K=2oros;8%p*!-H^j?-x@j z^cmH{6;YK4z|UbFsW7OvY|N8Uz@_2>xl;(&JLPIbs@AdL`IF&i`FpqP`%mXywQpCs zkxp1PW0Q5ap%;DN&+CiQmYx8emTFu2u5>uA0TXq!m*Y2XOmUci;btErkVw<@#V9|slz+%!!Kin}_R8`GY3bdu|0EvnaEl{+i`n81`{q|H zXPp^mA55dUHy!`zCs9Ei%*Ogl-0MUbeq&7v?`Ft7Z2|g|xnyJe3X?JC;x6^*hUXBF zcz%OmYG2#(AA5}1*Wox8LyCe$JuFRu81fObx;)eU2WjuSL}L|>1KR{z&&#;rOOF#1dTW|RU=G>!Pzo4ndqCW z*GbRL&o&e&lm6~r7ytc<=sSI!B998$22mmJ;g0CKbHBbON|uc`>wYH%gm;&f)|8dH zQ?|waR>tf-Ib>$%cr%BP5}qkn`aZr+SVa~`upqd-%h0x{sp`-o-6b}Z580^lZWW3o z{tNsfVQ(jUrpBr*s|)h5J9+^avmlXT)4R?=i>B_qp;+q|t5DDqi0JeAu;a)cdTIKO z#w?#~($naBrXJl^F(P(vQ=F@WHKKs9>RJBDQ#0f@FG4Kxa$!l<=8U4I3Z2crC6Y;C z`~>n;)BCnu7c@Coq1!(en|xRAyay4wZxfnwYO*7jJ3TtvuUGEaR#;S zLu_9!JMWrF^H-J}pT;hFu$+BzA$gqPh6V;Ig$=Wks}{PCk{bXsGDCigb?*F~#%NVK zefJ8$MX@m%&X!25sF}umkI{*=1-G$`e~XzvAIpc;nvPu0OwLir5EMlzNK}d&O01`y zJh*SMY7g`7b9deEw5UrN(GGci546m}RKA5Bmw{P^g?@_@z3TpJmROI)PnK9F zo=H+DA98%z*bOwo)9t1a7|*1;A0HdCH6B6PSS84s6`N#8KyR2bS#!#hALOKB`315` z1ud~rU{cKWI9wM4dL;Oh$j~Ljv>`%bbQq9Etl|Se|1t=QyLjr41-n)O9;=ozPX4BY;IWovcQ&6EZ zeWX>|;EhmQE2{m>YB)VJQ-++?=qfGMqa+Nnpql#8hZGLO%%`MH z*n!i#!W{(U=hDdi$YPGqscNRXU4tQ3gPa;@vkrqaG6Zd)rQS@YdESB5&Pi)XQluz< zGT%h5HJZ9RN^qa6H+C}H6*_VpGS5n77A`oTEi*HSu$;x+d}N^1(yh3ByqS&=im(E5 zz1*oK>P}A$rucYAyhaEJ%&0%(STwK9IPzAv=J%~!ABld#TLC!V$vVGYj|Cs2vsZ4# zynd-Mk~r$Qx4oXJezI;&Y{5TiU#0D~^sg+%$Lr0`u~UG)Ws(|aEm1~9d7JHX(H$wc zSxStPp8;^}#(n1xu~_E#wG|grjbqeSi!&I!uqO0gAaRFOHz*i>RrHq}C04N7SeQCU zQ7}N!s+?7SSX^|#fvhO?V8Qy7OO0yw@HojYvm~(VGMvkronh!TKK31?7cc1K|p3G4_r6S(YL|fU=G@G9B#*MV9cU=_G(!Dl#V;4hiYsAr$ zGt!Sa6IF_C^wvozjWFn>L5qK_kPV247 z$Aiy?LMk%)s!qkv7+!P}duPj4#nUbM5X#MtWXIT+`RY{XQ4E>8y{%_CzPrcc6}RYi z#N?W<|9p4x?)q}|`&dtX2WHrNxXkQB3s$`dU%}355|{b7oAQ7O+=O@MHwc~S(O2~v zJ?Lq$iMEM)E2&GmBR6mv#`V|@&F0wCCwiTIcP}faW!JK_#!vsW@yJjm(j^j1>H-qu z1`Co15EP7arWGB2hQmZQG|${aXM=I(rC*b2S)AuXcHizdU7rf+6&N6s&eImpr8FzP zX+SODC`9vF-&Im3x?EXy)_KdQwDoX{1z!9>Ac=Rz8*BJOL}^G#mXCF}lRK8|3CQ=b z^oc#`Z57+<hsry{3;(M{$tT|sEhM{YJofw#*ng9cXW|6_50(v z?07klH`}Ep4^ivpnJ;hN?l}TO6Zdz!3&+$@;wQCLC+=a}hZucd6F|uBNM+ZHWrD)8 zDd2f8#X}|Js#H-enwI=XUqgFhORbFN`vQ-aNR00Jq+%hp@U0wff6n?Xu43LDy>i|? zbz{($FpokYFQqfKDD<^*uH923%drnVZ*r5OIu%xWe*igKMAZ`s{$4@|QdG-U8bNEe z)lOwZ4xTNlh^ux%eIPYkW=~Dc2rOji z^5f~tMCJK5qDPEnQR+{tm|n>?oZ*e*ns#Vz1Ryjw5)k@3Ys?eyS$w<7PVPC)m5r8As-nA`FfNSqYqxK4UGP2+6Q?W zzX4)?f7bH*t(bk)2C^>;IX*h6oI`DD^P#~ucSdYiD}mqQs;cxC*uo2)WIo19nyfMd zNh}~#7_lp5lwiM5DyGG7@3R59W;i8Iju7q2ii`EQ%#u-{dkm5vA$BD5m=NvOfB2x4 zPsZzKsk_X!^67k--wi(p89-^TLm=X9u@!Sadl)YHkL> za32%Af)Q)Dj1WFCa^trV;C6Bh$Y`2>G)NWSDzph>dNVlc5%VEZJ>751VKwJg%1IF( z$bVw?c$SGJg#gpFV8=?>RQ%mCR%`@Uo+vdVSSb1*Az+rBt95r1hE_@?Gh@p$$BeG^KwgjM|m5Boh05d?D_=OLBcv2&d;_;+L<^>WJ# z!?I?wRn<{WDm+bA4rCGJNYw5Z)y%XLPS9F91eKH&Xe#6Uuog8I>*NEvmR5KL9eT3+ z13duu%*I@gE_&C;IcE+wie!pi^%je2h%u@$li1#~9aA1!(Tw^g&)Hmd&tVLn8aB3B z2&sB$qtA!LZIlT$7qf0xX{?xa9xSVdy{xN-qXidrz$HdaHlN`%7!Rerx(;L1ulLt4 zGb3-LUO2QapQ^Eu2|lyvR1by2f>aoRSZgbT72E;aBOM7EsJ4;gR81^4&N`vlw0~ap zZcJ;t0xhCMr$}k}Mk~0@Ia0Jf{2(lmP7;0+6du82Vo3c2cptvk`at(h>tfbwofxhs z1xENgAMErr`)SDv`SiOBPU)dY#*K4^8oU#9Pa#;-)`E>UU`MHZd(w%~C#RTM&T4H! zt2RL4jSl+hWwh+k4Q=`}w03dpxssbg;O5t|Otsl6SsQY0J9wt-f|u9j&FM-WK8CIc zjU(pt@-z-bRPDof8)?Gwm_~MQE#6@V={pZjVySkjO3Tuzc2aF+9n7>HK;M$UC{pS5 zyQ$A0zumUOUZ`qU!;-IlA%M}V@9=w`YHL}p*XGFt*pRPQf}BnZw$1p!hDHF&v2njT ztUKJO<`%j zpt+!NL-9g4McS!X>2e|W(>s0AiuTJarAa-+EW0a?*>V-Rbl;Ef_y7Qf8t)4xNc%$7Q;o=BdZpU)Reb6C0X2%iFFDrG81Ry8| zH|c@@Mo)Fv>Mv&)g!ZP_MQlCqzp#DEI``<*Lg_wn%g^l$;jr}jWKl1a@RzF#Pc>tVTvbm+}Wc@O+#5UH3 z6cN{VKIjoQTf*gFDFh=emo^ZIqg)9PDH3T`mp65=LmO6SSYN_UW>-+#92wG1p{%fM zAi7i7)isjaf8CzNQGR%Ks59IZ+VwKn#YeIdn)Tf6eShi9BO8Dw!KsmefIOkkY&ivL zA(j%SW`!fO1KCT8h`VI zvTACiPSY;u;r<2F7lJr>)9i!so4d!s{|PZVjscfmz2}3~#e{`8AMsFiG9`MsLC^h# z951BHY&T5miIkC`e1qnUum8B+C?RL}_qVe@D9N?TP`+!?FNPCD5eLY_7~S3S@H#5k z0aV#xN!L`Io(Z#>Wt0>vkVgVD4n4_xXtrvu#BeZzN+QzZ_jc5#lL{-2%_m0&)1C9R z24RI8n{}S8cB>D~7aJbiYU-(erV6rhupw5)8H+i2t8Mv8w%kz(p>U$Lrhq&vFPJQH_14N0q}-!W-e$A5Q=d$Ia#D&yQ1}(odhp zbLTU8U{^r_q9rC`cC^^v9;Wc$`$*Rb#!^u^GV7Rq>x?)yv_~B-pGDh|DAXR zd+(urm(WSGd;e30`@%`TyFVC`&=vH6;Ewk)GtSYo-ugVr)bnb)Y}+IVj%?a{m@^i$ zDqiNBO)R_2#BO2IC?rBzzenQ)sxx5VoDF1zfAM7$|tXsKsnaVdXsZ(msvCPT7UScdg@y0YU)&rF}S1kLx57!gVlrfgQ@%RHVf)L zl}98V(SpN*!zv_cdXo-rX{;W#oN{>78;1TGDif80owYVLbyqQz|DL=WFL% zmm8P02~Ns*%~&NFhZ*!W{{}i2>#m%`=i$={Rc>oRpd z{N?iE&%8BY)1y5(M$=RG7OAo_Hlgp3_HI0GGoF_PClg^_UWb(;43wyGCh#LQXa^jqtFrVp zuIfNbCdl~SZC~&pa4qb(&bF(y7Q4~b?ZdR02%&F1+jA-m3L&Q|rkp4^K3?bDtdfYT zSO=@Xzh|RFpLbVHmU^Rod8pU0jl@{E1W(B0h9~w5AiT)?4mvB5V$%z5+jF^HGgV7v zt{eTgj32ZwVZKODr>9*U>}9KS zBs@G~->dVrLM_dEu(hSD^(Nh};qZU`bS)^dv>|VT-s)EiZa%G5nlp^u-n4@SE-X|> zIfgeef-epoa2KF>P#e8DCQ%xmteX7&AuL!rqM8>UYIm%AD-B9c0c^K#9=E6)M|<2I zWv*a$U<{zHZ3|JBC1@s58oWZ9a%h#?wb;@Z4S^9M;}Hb|e`jZ$c>KqVf6LjfI&w=_ zeVl)U^?u}EOi#%E=hfA0jn%t5;dE>x8!_Y>$K48P+06V(jV zde3wRF1^v-a)M{B77hQa=o-sZU{~$i^+=RwSja3?)+T(2= zcsrlNWQmaSIp=da?=|n7LS#{-X_KT5)w*PAhpx434fw^rx4g%|jwUeC|LHB_jAewg^e6~+Dhf`tOaE=cAvhM z5#>cteq?I$Ffs!Q{`neyMXLTj`mqx0B)JFUjhY)vh0QSHHu4}jiN6(zbzr+?t&ZIp zOBDxe`?HM?WN@V(B{fLK9oNyazH*3)S#YVkGFrm2*iu4c$WkO!tU()O189*L@= z)>7e(`as|a_CgQ{CM1(ds??yqrz%{7+M})=o({yAGCO4PglP+{OViZWTC+_nIahVa z>X~Yz57ZIG)rQwvL&Khmi>meN!|Y`r(AJNsBk0fKZo*k*;_CA8SmtrNCp?Pzfr%LK z$^F+uLqiMJt)ue%CPho2y5a^Nk2!Kfl_d7T;?#^u7gyo_v}^g;d_~Shm`o)_eLxic zgp?faMXRwnk^_p==Usy>a}-b_kTBwO`%MP)5k{d?KXg@gWs)H#0@x`JR*i3Llo!;5q+yR1CV~jIMM@HHZM{uco4YZ zfqZGIS4>W3-4OmkiXGgmjX_q6GA`d59d4ERac|p+b8#s_nX5u7$?$pn#OF_8336;y z|I3)Ngnonq1R1;mgkRytV&xvpa+}_;o+-J^fMAP~yK2ttZ9#a8RZuHlgFR>4?7qRcLC-Pf3bzqpvYXWN^sXXmi zjLZRRz&~PO;M^#q`o1m{odJ`TRF>Czy*@`!b&7#DiWHqTXURv4T!I~5pBXn(4tUOX ze;aWYCFRd@a-O>HsgSHJ{5ibFhoZ!Yrp9L04ZC0d(wmPggBs)2^daO>he}GSi2|-k zsa+DV+obwEihnHAP#kdjb)r^R{Ul;udqr2Pbg_XO@$sD}=G98Fed8JsCmC zg*48jIvAElb;o4EbpG2q!Mu$D)j@1DQ@c)Ffq+8$Z?Wyf9nu)ENa+r(XvbYX7HR1CW zd?PO8u#jaLd;l0&v6na5=7K$s69Jl)L)9ew+X{%a(F?Fgm$)Dj&!i|wV1TQ+N)@&rzrpzUfK1s zlS`~Nd~jPtQR~$KM8HyV@p}Vrp%i=l8{C$7m#<8htLwMR+w)q7DkPS`k+|sK z_$c08PFmu86NWCzEz}=i*$W}$0>vpCxHRn%o{fJQB!LF4KIj>3&-K$26N6qflqrUP zU%ZYzQsmK$f)Aw}75 zZ3)#o<5WpyBkyZZaFDe@Sg)3d&e3j6@&XqVKkA3z&rT@HA=pCDSgxKjBi@9$NY1Q? z0vHOY6j0)#Es9bAKRjsO?s3u>dCrB#OVgq3l0#oJe{^kvr}PWuZ?1y3Y#cndqEGf> zleqcF5nI6V!dA9a%;cSf3c6GlbyTB@V~C2(<`r31pPi~@jpzy+5=`-S zTw_KIm0l^y?3$hN=<;~0YygEza4C=;rVw`m6p<~F^G1usKjM>fni+?#bPBN&%gR(3 zKl-8{1dGbKP|i83LbNgyXaKBv;q*JgLBvKDkUTUsSZPx(BOYnmCq8m2;9n_n`*lmS!wwJrAUR!U zg>7_DbrI*4fFl*>)3;e#GyE2~0{&+oVy+_(PwM??FhR?so68aZ3ne$o3P^;AZH=Gb zV+7uQ0=b1|(i|ZvR=&|PL#s~LB;eXYZk#bO5{6O*VkGBDwvAe74lW9Vy^H0m(pEaw zDHA~b5|+hI5+v4;k8-X#qpnhKa!%R~9;3v;Az-n^nw}>(4R}Yl-MOo{TgjNJDZ_gq zxU?=mR9;S7oiV(6YuCFF-p?r(<@{!i34b@!(q2 zs=o=L7v+%TP*bx$;#H(HWjxppbYG28z8zakOKUEtMSC~i^6nk42%)C4m4d7J7~tMp zA}Jh_ix!{|mpW%G5#(U2;5{=&g`aI3_pl{T1JfsIhlEc`0lk-z{A?)#)^YLiI&$vh zwpjNEOEmGl0QbF5MAvWyr}+)Ze^Tq-Xhz#$Ro<-_dN6){<1MRtfERvz~UoF75^T&~7hMN(swJJT(mv9-9 zDJ1P%X*dhAu+Z1gW5D1MCRzMhMyvrr)ud93(8Vw`oQZ70&WXjk*iVXwTpF=oO2crW zzAB{!f#^)_VUft_lrV0g7Qw{Ph3K;*Zj9p;W%=-&A(M&1L)4$jwVbeV&2j34qH1X! z<)S(xjKK5jJH<7eges>Hgp*VVxzVnXZVs1SJbg846phi+RCu|pLG5f zU9I8_Zs~WLUHH?j=@6g1WK^U`Ocdvh6A&i(!qpy7>Wd2U@2s^O3S;S%YPz0MiBQvP zV8u05t+5Ubg9Pzw5@_ookEPg+WtHL<8j436A{ZKV=W4)Zh~+v;T^a(|e2^Ito;7ok zTI>)BMq`#;R`bO`kMx`De}@=SzlU5#PTJY? z^}KDoGTC2AC9 zZ|>Ay0_Uk1)wx(})_cgwNVA^q6}3`SqbvyK^z+oKNF+DSjJ&o^A30n4{q-F*s{RT1 zrgzt(J5YRMF!H`1?ZT$S$k0DTe-*#uzwq3+t^2ax2mC=JEZ{5LioY@EdoNC26iZ-y z4ROKqtMxEh=63LZ?3<6kTF=#XzHWB$9o^~X^SpF04`lX)Zw>T-ycm%L;+Tc8u&~@| zuKNQ9D076ouDP6g-&UY3H#x;Nai_SGgO5SLh5fUlC-i^)jcVC%eD$eKUdjiYQg&@y z98oaFw^nz5I<}TZfE-Gykyn{7()a*5M6hfm_0`xl7TpE5vmNn>u!-=A8h_f!ODF6{ zq?kVDO9in`{kn>a+q}TTHNt=1`cPtKsWrG@?dcbDhHY*hc^evVE0YptoB0OI?)PW& zg!k^l017!X1fn|)NTH!QrEB2!Mm(c51#EV@De;tZXQ$#zP3WuY6zZn4Fg1{K@yyts zkZLmG-Q6+fCWO*=uzzfw!UzeVJceAPj&F;7j|;pvaHA{A{vb41BP%5lOv=diy0$O1 zdrQ}#YjZT{u$}xMD~tQx_BHu>ah7)-@U~JS*OogH2bDl1^!j)QG+!?r8BzF+hqwFO zwfWIWrxm#RQA_o;R*H5qo44j3+ZyJYtNL$gpvFN+kVFl$9WT-Fv*c55dCW9OfyB?q zoFe&+I!jB^CZH3XNho`^FNn2KF;kGZ<9LsVE2rk`tt6uKdPySu0->ERoJEEBeOr9j z<6?cYBNi?bD)}7_T~qd=B`A(PBBUYv-A6iz3ZC9M1Wi>N z;L2Da)iHT#GE^k24&FaQ96t;;JJc{nrtE8Io@|W790_(g0QrhK>W*D4%A0`A6A=d> zYhQVcl4}Qa$|GjFReqHZ_+#DeT1X%+zC=<^_p;T%x@R*U$DGO{;&*u@t{n07?RXq( z2XLKJh00=z0vRI4T}?PC;VC22P-dlPB|u8BkjZqK6c@F zlluy!6F=;64@?Es!wivDN33}m)F`p68vrwsWAr^n8Ed`h0*j?WU=zSfj|=m}Z{XhW zIn!sw#c%B{WQrNPX(-T7nw>=rm>L-_(-T)okQym1AcyJgLWwSM4&&Mz@k16HS%Z@f ztCzNRwn2fmR!VcHxf%a9aLXxD1qm}#KGx5H&O1|G=Uq8I3_e@iCf5$FbzJn@XO2?w z0JHJC!=apvS-ly*nbDl-6wAGD9>B+7KS9oDDf)-=egYx^XJ!b+G98hSb>z0*NUSiF ztQG;KS_b34z!ckQF@NVUJa3x3=EKMuAx3c8ztGx69Nw|_pSk?<)g@fkXq!040uhh! z-;^8=)`;z!^QIq$6HokmIu|z2nOR|(*sxxFx|h&iT@WFf)*lP6rxc6-j(+iNY?caW$Gg{dmuM;+*C6_;-I)l=pe+lI;;_4a?F2#>-b;`=Uin)$A5BWqoIWq%5Bx zk~kPDKNN%O7A-cfD71zMMVBN);gxH|NEj-wzVI%gLi(!(8sJ__L5$_kd&5-{>szCr z-%k$)9^8#yCo|n66vu9(gJ^O4X|MO`P@RgI11DTo&qPW!PS$H8S6DcKm^g5KQp+jU z;Fc&UX0lt)`o`*z^yi^5Xp}?l($H^b?6)RVjxmDvHlExBu1(~8CTjLc72nE~Q>fuK zr8JF}p%N<2=zIj4zcm(d{2Hb$2~HAOP(1LazpChM8zU7X44QNp+<$-oa4G-?tPNqF zDks7ztbSh-1HDvEo>T^!2c`ILoc)BC=>hTP0E#l6`#a)}F&6lQBq=_^WFn8$1D|{T zQPe$0k9da0-%?3`^>QnKWIx=}1+s!>qMws2jbeuVu=%5x3lr!H8}tYF@aeS-!S`zJ;-gK`p&vvgPQ_ z^&NH8^#s$V$$zCAjJhe5fJH<2NJRc0uIq?wae4-hX5cuy$07oqI^(#~fwQ@t@mKc6 z5BLv+%P^0fSZZA6DW>L@(a5(G(9mt^r~1glwoQvi>caFL#%k5HqVy`d^a~`G%+SWu2t7`3`3D=mZ$8UWUG>?mnY!=o-hLc)s)5s=I5ui=f+6kUB_=P;Q@agOQ`)icyF&@$D%)Vb8g9tgfc zZ{K9!kiJ%`$H1B*R5AMAil=q^sfVyS!qmHA zI<*_G7OSD%>jOP0D^WDcA^1pq8TC0jr|qCW=#)=~ z?1x&Y87!`eiee=t4rXTCHY$yfdQLME;@lG)#*&~IAhz{%s5fY2n0LR}tC(Oy>?ZUV z!n;0RQi_cOZ!f(sSYtvn$@z~)mKB!IFs)m1ewFbMehB*t={iKGr-`xNj#Rzx6f%g# zb`X$r(Xs&njwZf7B*q*l8h@CAejlY0!?ojt-{{czFUU5E7q{_#N9G(vWU?#tbkHa_ z!rS$>(3sc8*c+;acfsg!@$VeR-+(B*u=!$ZOKoRwXxQr{m7J78kD)fHP0EZ!DuBYc zefns>l)gMB?d`ig&bTG35L5c}H1)as>@Z-kAz7v>sG~aM=@r1=#k}M!tmDUr_WctiVT$N&Pt>u1i}3lyX!Y4o*ASPu>JtpH z?W^sw0dQ9j*NT0WjFJ+jf8?Z}%gECH=201&EiAv@pw;Wn!dF|)^yvm?b!4HjVp-Hq zA6jlH{Ec;R$sSBLS-62uolkkuNv15*E8kK;Du!AVJCpe&j(=`@Y+fdXGcsC zQ9a~Xji|IzlLB;g)8T1Q}+19~dLVq}mLWh5^su2!V&j+`H^t}kJqDvK*C zA-JM{%lLcGt)O_b?aZtClsGq1Ztv~<`U0`t(Ea31=zAW2QOaA$aRADgXRW&nW|HZa zX^QXdW00*I<+E!A0TuPvlU-2ZU4AC23aTu47mUX)hDgP6I;|aqnCwqN?e3SZ@rYBc zo~-h{yd}m-aW;&%KE(O8U)<;*46x+jCHd}i$s*-H30*~zIzXsCsPUeHdnRuJc~6X5 zKfbGo(&tT2$2A`j>2LaXKFd*;W+dH_pM|98rXT7WNDayjPfojU3N!(TFD&l;&0IL{ zxH~CGtAY{lll!m4*$##`#5dWKf%l9}_^E#()_xlcx*)gwpGM9F9IEt>b z#FprP&L~^?|DR{idCqgr@B3cP`~KeF`#v-CeCExVCn|i9Qa<1|ETTQb2=~4c3?E%k z%UyY1p?Pt{4EEL}8gDs-n$VL2LhDZtzX|tr=GxeVUAGp&Qm;xb)0xK-Hii zrBBaA1>5fx@llni@WNAtq%F7F`lWNlk+>@;(ip$;2-vv%!Tv}FDObtEBO~f!(L^!& zOzuzdl;i|KPg_KkDt%t@+CK#*OU<{^%J(^_d)-Ax^LC8<*lyLm_2Uq(RPpjM;*mey zHA5~%?{3^gF3js{#GFY}JH5|QF=qUx>7MKYQg~yBZ*xymLRfuRgcL`mu#E?A=~0!R zCM;?uzt#2A3C-GajB(t2q|y+`4S)0C*z1^A-P1!&71MVU9-ZLXn?3rCu|nSj_n~iK zx<2}j*naZVSQhbRaes{3>@GfHffrb|}Plk3&h;8NNaG1yr zm(Mq2_P6=H*UEp{_uzbVQ`CTghV_HEvx}8|okY*0jP4OMJJW=lnr=7M$&*f3u2Ub= z))5}6E1JR{8m6T-o$uamX-#q&|8Dw+^EMvTiTu`Iu8#Dnu1Vcddg*nJOQKi8#WC}a zV5R(pZKK^*#B}(loSKY*;uhTkli23kCFVTMb#6vhT3amSr>=ZlzAMmJ=%LnSt>C~` zkn&Pl_;qWxS6?Q{c^_%0exbPc%;wfqj6!$8sYb%MrvfzIfbtAnVr3dpqgfFt`q+>5 zy@U#oe;UQ(MlJ3N--{M$S>7quy*@&*Qh1)=BKqFlP)}i4ah^tk{K`Xo%abEf#vMjy zmHT!rv0|Sp3Xh$J|0<|9iAVbi^o}Nqjzs@blX$kTz5(pHellgx`)t|+VH)LbhL}Q^ zYHmD-J$#X)_tg6U?VEjEaYimAUE-RnFa%=9U49NMrVh38XjrBOWS z9l@*29Q0}?8`IUowWYto;V)TXJ6D>nk>0af_ zZSAW6!>W2?;^}iKw=CxHV8p$~p;qZZ!wcHu=O$M5oU3aIB}lrkgxYem%<|xFY@S;! zmLSPCyrBN#EVM7=ZmA#-Ej`}V6Ifi+onpRqk!__JrnedM^4{a51*5h5PGYf7x-^(K zqEbBjF{$P5wbw=^JNBL2_B+2!i+POxLc_k?$z8&HR|V8uj5G1fZNM(fIHt%{TysW0 z-GnUpS=qH(aX4B{axsAS9N$PWB{pglhQ_XUv>z|GsB7nGE^;@cc_TJ)CaxQG?Yr1Oo{V|;`P;$Ew( zhcen6R#MK#CSTXnOS+mOOj8ZV=ckJwdgDV%<22oE<5k*fkEq}uTP&p5=uOySURf+m zqU+NqccTAO8>?2`z5O*6A0*1uBxWmV0fPAjOy5J=K<2b_=mer&P+_j!pl*U3yZ zPpuq$oPNU4_ECLw{I$k#^ua2Jm5OrxwXI5MrDxl52Y5+P9@^>+D{a@Cx6srZk?_J@7>PLGnSROC-LMUUqssoXEq zw24b0?=5wSIU8%pa|9EWy?qbpoihw3CCaIowC&k!6Tka$r;Rb@s7P=$Q^EY9c+Ei{ zM{2~uW<8UO$u|r}T+{p`(6j}Y%WH*G;rZ`A4lbJNt!SwKKqF4|j;+94nTtyz@ZKj} z62#%4SzZ#F%lUx_oA~c`CxUqIhbH@<8}S+zfLiiH+dH2Ii;QN$tr&Sq3#7=Ewog5Y~9**3(u~zbhETx z^7|wtG19HF(>0cpmO=J z0elyaqsMMBTYX#ChNWuNExdeT@m0B_tKU1$D0%<6!nb=K^+w9!!R@<<4Fxku1|l{V zPaw$zYX;Ar#SRRD5nZ?%ndBy9g}TFE@@EbE&j!*(n0sa60R)Zx5|u^R;JNOYsUgfy zDC2@R!7wi3Dw%4<5U^yF@&9!Vn=cSr2Qm1c9q<$5lMUj@vMRoIINbi(DQnAt_swE+ z0s%7*HiyO$us;j3avp4^Fi0TdkBKmNjLh^ePZAEX2p|O@5a0{G!{{@C{I9N=dZ=(Y zD871tEY;K~QQ62@jB|U#5M|gWPA@MuOnh5Mhf9 zw+y*MAV8qZJd=q;xXs9lMutNJd4h;kI2RGN;hN#x$VH@30TM_6kp3fSBr*}8l1T8K zAbTd^kpV?cq#rUg8;)V_W)2(KkPJYo|8n%_P6mVl7s$N5fz3pGjr7fR7V-{5knk@^ zYw$~o+=b6&hWW#rpc(oz*nBPknu26g9AFqE6!HY-W-zV}tATt5FNp0gFy-@TAgH^cjX55NC*p`82_)kvcfs{G*Q9(RBWM7p9sRYEg-)e9;f2&a`|3ic3zLx?oJKvOrsBqZK zYC=8(ULyFi?d{yyyI6>?kj2oI%Y_GhhOtL%2TlMywz9aG!Q>fyq0GA=1c77}24m~I G9`#??^qzYF literal 0 HcmV?d00001 diff --git a/control/motor.pdf b/control/motor.pdf new file mode 100644 index 0000000000000000000000000000000000000000..abf8a09cb5cd66390487a56119526804a6a83e58 GIT binary patch literal 15864 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 Date: Fri, 19 Apr 2024 10:52:28 +0100 Subject: [PATCH 3/4] changed the condition to log the error and removed None value --- control/dependencies.pdf | Bin 20283 -> 0 bytes control/motor.pdf | Bin 15864 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 control/dependencies.pdf delete mode 100644 control/motor.pdf diff --git a/control/dependencies.pdf b/control/dependencies.pdf deleted file mode 100644 index 5ec533d83632e30f64f06cc78c74a47fa58d2974..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20283 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 G9`#??^qzYF diff --git a/control/motor.pdf b/control/motor.pdf deleted file mode 100644 index abf8a09cb5cd66390487a56119526804a6a83e58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15864 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 Date: Fri, 19 Apr 2024 10:53:53 +0100 Subject: [PATCH 4/4] changed the condition to log the error and removed None value --- control/planktoscopehat/planktoscope/pump.py | 59 -------------------- 1 file changed, 59 deletions(-) delete mode 100644 control/planktoscopehat/planktoscope/pump.py diff --git a/control/planktoscopehat/planktoscope/pump.py b/control/planktoscopehat/planktoscope/pump.py deleted file mode 100644 index 63ce1e19..00000000 --- a/control/planktoscopehat/planktoscope/pump.py +++ /dev/null @@ -1,59 +0,0 @@ -# pump.py - -import time -import json -import os -import multiprocessing -import RPi.GPIO - -import shush -from loguru import logger -import planktoscope.mqtt - -# Define the Pump class here -class Pump: - # Pump class definition goes here - pass - -class PumpProcess(multiprocessing.Process): - # Define shared constants here if needed - # For example: - # MAX_FLOW_RATE = 50 - - def __init__(self, event): - super(PumpProcess, self).__init__() - logger.info("Initialising the pump process") - - # Initialize any pump-related variables here - - if os.path.exists("/home/pi/PlanktoScope/hardware.json"): - # Load hardware configuration from file - with open("/home/pi/PlanktoScope/hardware.json", "r") as config_file: - configuration = json.load(config_file) - logger.debug(f"Hardware configuration loaded is {configuration}") - else: - logger.info("The hardware configuration file doesn't exist, using defaults") - configuration = {} - - # Parse configuration data and set variables accordingly - # For example: - # max_flow_rate = configuration.get("max_flow_rate", MAX_FLOW_RATE) - - # Initialize pump controllers here - # For example: - # self.pump1 = Pump(PUMP1) - # self.pump2 = Pump(PUMP2) - - def treat_command(self): - # Separate command treatment for pump control - pass - - def run(self): - # Main process loop for pump control - pass - -if __name__ == "__main__": - # Create and start the PumpProcess - pump_thread = PumpProcess() - pump_thread.start() - pump_thread.join()