From 290ee2e718c3bb3d70130059f912df7aaeb3109a Mon Sep 17 00:00:00 2001 From: Tony Tran Date: Sun, 13 Sep 2026 17:29:22 +0700 Subject: [PATCH] fix bug --- .../__pycache__/visualizer.cpython-313.pyc | Bin 28223 -> 41909 bytes orangepi-server/visualizer.py | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/orangepi-server/__pycache__/visualizer.cpython-313.pyc b/orangepi-server/__pycache__/visualizer.cpython-313.pyc index b54a4347f022bf936b0662946b520d667cdc5b6a..3363a4313e860badc4129d13c1c3f61d7fd07b0f 100644 GIT binary patch delta 17169 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 Ney#iloY3>-{}1OTFE;=H delta 5343 zcmZ`+X>c6X5q@uGc6Oy*-I8@ntIO8Pk}TO0wvc@2SRayDI~rk}u;ul7cO)-f?XKU9 zd;$w5Bt?oN3+L9Fl40p zreAkY&wKs4`}O|tf^_CJ+I&4HC!4_4KK1-vYi=XtuQ-^$92w$zvF-8ZXOeEBQOz+@ zK3u^n1f4ZfIb6l61TBqJvueMqjMNh?r-Ep?-BSAP?u-#upONN)H2*`=hK#fTq=g@n zHu@Xu>&SwsCVvBb#-$a(U96R8%X)17rm<0e;DO?b74SVFE(M_rgp1;<6GfG-1$miP zu2sNa<-+SAUr{RLE9w_N*6c6zm)g*(N2?N2X>6SD7^*5}E4Atat^PI;)Chqx<_AHs z;#bCYbFk*D)!aRjo4|Mv3ifDq-8AhF)~VI|8@nW}p@Q6{u+>^)1z~HnCVw07mJ422 zX0$?#x-+9@F}g+bfc{#4UOn-zo3}Y;@cycb_AxW#@+A+}>+jWC+MI;2KA=_#YQ2B` z*gayNty)_Tg?aX+$DQ-zEUn#N0ux$=A6;<&Mt=#ozr(*#>+F%(CjX|f2hd8xYJU|> zrw#7)^Hb8+^iXZ3*3~0}^-W_BqF!b9g7lV(ML!QN$k#5&*Da9`Ey#No*xGv+S^g^eFj7}hp{Z%6#2TK}!P2nj+O_(v84!c8Wn zNvV$bYwRT00S>M8yTKjV^OJ&w;@Ii0%_VE3C0uoE0E2)pR}0E(2Wz)Tz6MQVKuypI zvRX)Fb*%4g zxkwnoBE}GW9tSJtHT`9U=Sc;)XCoDM@KV(tU zqDKvMjT5{;yGfV~5T0ODKRR$nBJW@1f$Ut`Vi8v(@`CQL7vpjCEv-o7OXHIS`vnfkrGjghSQ;YQ=T-TAia0|^l)8O6^<9& z1v#(-89Na^#%~Po(uK`27+cDbKzzTY90oLUfPwB?xYB+sm`;QtS_2a-J_Qh*(ygi` z9{rH?0Wf2%kVxvnNRyQOouf=7mB*G2ki|d}F@#I@c`80KOHtL54U@43pwiJ-kJMra zsyGyGf=ZSy2kDRz*$Xb%mWfN@A`DL9N=pexLM9u>@qUEm2saggHONCiPa2Q$^92Wc zURLVnlr~%T$>MhjJmz-OE?e!h=KBO5>DqxWME15C#LPeo#^4SA~&aF;E4DtMT+jf2fh##B z6~8ZDd9`@u3*O%rujVi92|?BG3htxH15mAxXODK#M>;pRkr(NZLpf6i)LAzj%2vfgx@Dx-QRLscY^YHAd44C* zGn9I>95WK?&p0U9oXHlLbfM}@uE2Z>FV7TqcvbtXBm;leMv+z(q@AcU>vF=&v!&Eq zq0E-4NY|*|Zu@K_^{#NuHo1`Q>;nGzCc3#v|Ya7?AqEQU)V^u zO6ot%@dGc(SxCG33r9Wjl^Qx)r(UVGA>D|oS3EWlUunk=gfcBB|KdZrsh+Ug z)`BG%&QF^eH-k|i>{zzr)28p*MUXI2rX{5E@o3{uM}AVj8-|t&1=^f87z8b0k0FQ* z75ep{TGlCQu*lfYqWE!qOOEO>b`pno1Hd_XpWsfjDEm6$XYXoi7D@UXa1H!1l8H8W zh=60C2cCfDRPO%c_RY`3_^4}Dx~6_29@7o>AgX)~;WU8HL&X%K1Na6EuU$dGl11UL z7p7ZUV@dJ-P$|9x9Lu@SG!udJ3bEA+AK`!KD&_e`WA``ljc*}*8#R?g+%Vz9)(@NF zRff*_NPi?TNtqKttlgPjd(Kgubs!Nu0&QEEeGlbdNBBNM3gM>+KScNu!lH-J*rJCr z$9NIWD3G=ar?<#Zc8(C44A7KpURIJG>hm~-S1en2dMaV0=PRmv0!&)2fwAp(Xx_2F z==Q-8ONqi^Y-JgGEF2K)#OYgVFp&U`Wrw3W6l7tKY}qr5fYU;UrJMq_#YzhUQKr~2 z8<2ZxYWtBs+Bxo_mP0=bAHZW(2AlH{3QB~astnP0JsaY-fw;*Dz9U@cx)b^0x>Mz` zW957-T+0VOUdY#f#!<0KicyWORSuF9HaD~>MPzFcAu;K8i63aJa=FQEC4@M^)}4fZ zYG++i(&P?$3*834X!pUnaFCvmeKr@!Cn;26+gce~apmYH&4fDd-Wv?vL^XAr`}8SyJmxm`O`GBPp;)`mDoA&f0e${#F~*_7Cb1-2 z&JcqmL=T`*Q9~I6wm3*EHEq&TCxc*>L5%(iU$Kb^+;pCyz!8m1z^(^l>=hUu1J4;D zAg+=7$h!`bmH&H3C7zpZNh<|kgRTF1X|@79W!m399%3PI_3f6stS&-T&*s+{dp z2W0+YvR!(Gq~1zypk2A3!KMIU*RmtAuzol&5sB(cnrSNwI<$Zgu|I+0|-|}GF`k#Ts2YwSi6&VQm0E=LkZ?fjfG-qjpe+TJlXmcO*I@ocbA)-@{ zJTzh}dl(1L09ekYmB-8H9_>wDK%uCLGe|8i9n*%*B8ViDgW)h+tc+?X8qs4W`z|P0 zE~ba{$U%q)tSeu@cSK#mX{T3_gVZGeXqHYP{R04KevE=iQHYoH_WY-hm8)-o`1>?v zJ@$+}4|dNP){PL0h!%(6^TiqI9l{4s4!Cep>^cH49zVGg`PWYNs`NnmjnD)Xv+T-m0E7I?14Zy9ts55f6$2NV1#>b;4pw- z2Yu$_pMLsd(&q@bo~}(=1ryMS1rw2W2B{E_8E`OQ^jbypd8=Mr8hM8hH_XdqfXfPg|h(Nct z&9`|wBWP9ZJa(QU$sHM0y1RmK|0Rj~>)5H4$VGC6;5LU-JfrwvDmZ z@gv#Vc>nmeL1b9Asr}((go)(OREjD1rD&!j=uh~?zaU_`urmnf5ir=Ttc4bmVZexu zNdMHhDQ_KpQ}OV0RNufFU@`Dd3@2>loJ=WwN6F>SeYvGHi{`(ol>AZgy{!0NSK41! zR=uhe&K2`Fzr40AL22zALA)*#$vGz>`F2!J4Lw^-`QB4?)pIJ5O6H_2+H=x=oxlSX x(~P&v_{^ynXg>ePR|cfp^Z1tMx+}5IKjYq3KrR)i!*=;nY16PIUzTh@{|~A{1g8K1 diff --git a/orangepi-server/visualizer.py b/orangepi-server/visualizer.py index 0de33a1..62811fb 100644 --- a/orangepi-server/visualizer.py +++ b/orangepi-server/visualizer.py @@ -331,7 +331,7 @@ class TargetStore: "server_time": round(now, 2), } - def update_from_frame(self, frame: dict): + async def update_from_frame(self, frame: dict): self.node_id = frame.get("node_id", self.node_id) self.sequence = frame.get("sequence", 0) self.timestamp_ms = frame.get("timestamp", 0) @@ -479,7 +479,7 @@ async def esp32_ws_forever(esp32_host: str): log.warning(f"Lỗi parse JSON từ ESP32: {message[:80]}...") continue - STATE.update_from_frame(frame) + await STATE.update_from_frame(frame) _update_zone_occupancy_from_targets(STATE) # Always push the latest state await broadcast_to_browsers()