From 1bdbe4fa192dfec185a4e18d55b32a8b0c68a631 Mon Sep 17 00:00:00 2001 From: default <1075071661@qq.com> Date: Tue, 17 Mar 2026 01:15:03 +0000 Subject: [PATCH] Add .gitignore, update paths, remove tracked artifacts - Add .gitignore for __pycache__, *.db, *.log, nohup.out - Update CLAUDE.md paths from /tmp/badge-admin to /home/gpsystem - Remove cached/generated files from git tracking via HAPI (https://hapi.run) Co-Authored-By: HAPI --- .gitignore | 6 + CLAUDE.md | 8 +- app/__pycache__/__init__.cpython-312.pyc | Bin 129 -> 0 bytes app/__pycache__/config.cpython-312.pyc | Bin 787 -> 0 bytes app/__pycache__/database.cpython-312.pyc | Bin 2580 -> 0 bytes app/__pycache__/geocoding.cpython-312.pyc | Bin 19162 -> 0 bytes app/__pycache__/main.cpython-312.pyc | Bin 6069 -> 0 bytes app/__pycache__/models.cpython-312.pyc | Bin 18793 -> 0 bytes app/__pycache__/schemas.cpython-312.pyc | Bin 17200 -> 0 bytes app/__pycache__/tcp_server.cpython-312.pyc | Bin 95251 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 531 -> 0 bytes .../__pycache__/builder.cpython-312.pyc | Bin 11227 -> 0 bytes .../__pycache__/constants.cpython-312.pyc | Bin 4918 -> 0 bytes app/protocol/__pycache__/crc.cpython-312.pyc | Bin 2271 -> 0 bytes .../__pycache__/parser.cpython-312.pyc | Bin 38985 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 137 -> 0 bytes .../__pycache__/alarms.cpython-312.pyc | Bin 8918 -> 0 bytes .../__pycache__/attendance.cpython-312.pyc | Bin 10126 -> 0 bytes .../__pycache__/beacons.cpython-312.pyc | Bin 5196 -> 0 bytes .../__pycache__/bluetooth.cpython-312.pyc | Bin 7341 -> 0 bytes .../__pycache__/commands.cpython-312.pyc | Bin 12511 -> 0 bytes .../__pycache__/devices.cpython-312.pyc | Bin 7096 -> 0 bytes .../__pycache__/locations.cpython-312.pyc | Bin 5134 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 138 -> 0 bytes .../beacon_service.cpython-312.pyc | Bin 5420 -> 0 bytes .../command_service.cpython-312.pyc | Bin 4537 -> 0 bytes .../device_service.cpython-312.pyc | Bin 8200 -> 0 bytes .../location_service.cpython-312.pyc | Bin 5566 -> 0 bytes badge_admin.db | Bin 204800 -> 0 bytes nohup.out | 43 - server.log | 1854 ----------------- 31 files changed, 10 insertions(+), 1901 deletions(-) create mode 100644 .gitignore delete mode 100644 app/__pycache__/__init__.cpython-312.pyc delete mode 100644 app/__pycache__/config.cpython-312.pyc delete mode 100644 app/__pycache__/database.cpython-312.pyc delete mode 100644 app/__pycache__/geocoding.cpython-312.pyc delete mode 100644 app/__pycache__/main.cpython-312.pyc delete mode 100644 app/__pycache__/models.cpython-312.pyc delete mode 100644 app/__pycache__/schemas.cpython-312.pyc delete mode 100644 app/__pycache__/tcp_server.cpython-312.pyc delete mode 100644 app/protocol/__pycache__/__init__.cpython-312.pyc delete mode 100644 app/protocol/__pycache__/builder.cpython-312.pyc delete mode 100644 app/protocol/__pycache__/constants.cpython-312.pyc delete mode 100644 app/protocol/__pycache__/crc.cpython-312.pyc delete mode 100644 app/protocol/__pycache__/parser.cpython-312.pyc delete mode 100644 app/routers/__pycache__/__init__.cpython-312.pyc delete mode 100644 app/routers/__pycache__/alarms.cpython-312.pyc delete mode 100644 app/routers/__pycache__/attendance.cpython-312.pyc delete mode 100644 app/routers/__pycache__/beacons.cpython-312.pyc delete mode 100644 app/routers/__pycache__/bluetooth.cpython-312.pyc delete mode 100644 app/routers/__pycache__/commands.cpython-312.pyc delete mode 100644 app/routers/__pycache__/devices.cpython-312.pyc delete mode 100644 app/routers/__pycache__/locations.cpython-312.pyc delete mode 100644 app/services/__pycache__/__init__.cpython-312.pyc delete mode 100644 app/services/__pycache__/beacon_service.cpython-312.pyc delete mode 100644 app/services/__pycache__/command_service.cpython-312.pyc delete mode 100644 app/services/__pycache__/device_service.cpython-312.pyc delete mode 100644 app/services/__pycache__/location_service.cpython-312.pyc delete mode 100644 badge_admin.db delete mode 100644 nohup.out delete mode 100644 server.log diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f860994 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +__pycache__/ +*.pyc +*.db +*.log +nohup.out +.claude/ diff --git a/CLAUDE.md b/CLAUDE.md index 661cbe7..4fe04e2 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -8,7 +8,7 @@ KKS P240/P241 蓝牙工牌管理后台,基于 FastAPI + SQLAlchemy + asyncio T ## 项目结构 ``` -/tmp/badge-admin/ +/home/gpsystem/ ├── run.py # 启动脚本 (uvicorn) ├── requirements.txt # Python 依赖 ├── frpc.toml # FRP 客户端配置 (TCP隧道) @@ -83,7 +83,7 @@ cd /tmp/badge-admin nohup python3 -m uvicorn app.main:app --host 0.0.0.0 --port 8088 > server.log 2>&1 & # 启动 FRP 客户端 (TCP隧道) -nohup /tmp/frpc -c /tmp/badge-admin/frpc.toml > /tmp/frpc.log 2>&1 & +nohup /tmp/frpc -c /home/gpsystem/frpc.toml > /tmp/frpc.log 2>&1 & # 检查服务状态 curl http://localhost:8088/health @@ -376,12 +376,12 @@ remotePort = 5001 ```bash # 查看实时日志 -tail -f /tmp/badge-admin/server.log | grep -aE "TCP|login|heartbeat|error|geocod|Tianditu" --line-buffered +tail -f /home/gpsystem/server.log | grep -aE "TCP|login|heartbeat|error|geocod|Tianditu" --line-buffered # 检查数据库 python3 -c " import sqlite3 -conn = sqlite3.connect('/tmp/badge-admin/badge_admin.db') +conn = sqlite3.connect('/home/gpsystem/badge_admin.db') cur = conn.cursor() cur.execute('SELECT id, imei, device_type, status, battery_level FROM devices') for row in cur.fetchall(): print(row) diff --git a/app/__pycache__/__init__.cpython-312.pyc b/app/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index eeaf234a5e4e9efda5e9d834c484a1ecebae9b42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 129 zcmX@j%ge<81kKsoGC}lX5P=Rpvj9b=GgLBYGWxA#C}INgK7-W!QqV8SEznO&Oi54G zO-#wn%+pUSDA13O&&2xCvg&|6<|UT3PhqyK*Ut)R8^4@8a1eG8a2s)my?q_B1`d~+U}5u zAxI!aVqq&^q3X_;U@Sv)5)%^}D4jZScXpUKOYc3u_j%ttpMBp7g&bhxGWcr0fdKsE zupX&Itag~V02p960S+`F1QIv^So#34OyHFq*O`(8h;)@SnetSrrhaj%LaH^bkn~6t z+3q+TB_(1?n!(CvcmW77AqJ*2V4ImTQAi3)d(6SInHHo7N|_l!X+arNC0SOfCSFc> zSwT57FTA`U&D2PNRTel+H>#UdUBA`r(cxjQ(zNiHRE{mz8WV@OQKdHxBjQlC(e0v6 z|O;JXGz!>Z0~Z zuWv8z0T5&NR$YX o>cK;X>}rFs%))OOLihtbyGdu@gT=cWz@|Ss(DYBc?^V(M7swRIj{pDw diff --git a/app/__pycache__/database.cpython-312.pyc b/app/__pycache__/database.cpython-312.pyc deleted file mode 100644 index ac097ccd9216a98debf01c29517072410db1db64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2580 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 diff --git a/app/__pycache__/schemas.cpython-312.pyc b/app/__pycache__/schemas.cpython-312.pyc deleted file mode 100644 index 49a4ecd3e4ce30eb8732748bf97f9f5dcc6583bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17200 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 HzSjQ}-a#C& diff --git a/app/protocol/__pycache__/__init__.cpython-312.pyc b/app/protocol/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index 4c9975ed78eb84d4518bfbdebe017723bc4e6d1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 531 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

CJ*mf%^Duuiv;qF&PD6vGhOJE}XN8KiJN%%UO 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 Bx9|V} diff --git a/app/protocol/__pycache__/crc.cpython-312.pyc b/app/protocol/__pycache__/crc.cpython-312.pyc deleted file mode 100644 index 150aac22a4e6f5af26defd7a379af2c9ea0b151e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2271 zcmb_d&2Jk;6rcUD9Xrl9%~wGhXh3x&=c6rEF{M)L5{OzsX&qE7&}O_lwwLUOnO(O@ z}2QG}X^YPxydvD(F z_hx_V=}91H8|+teJ%-R9e9>;vaB|?lWD6}I1Lct+8L}nWa$c5D3FQ?kQ*{jVG-4=c zVKmgXq$nGa+iE^4BO1LQn#wCil*V9>T2ze~XuHI^i>e@t7o$cTWQmnTs(ba9MD}Vn zJ)c{^^LE9eHg$aBo34Y4F2k2DUBefMQKI+?bA4BLtwdtMqaNmGW=~IFPoH=jA7`{^ zQQfD85NEUVxm+rf!1#)5tvIf25-Wpemd~7;In%j!W_fnz#B2)o%{!(KoA3={RVm*( z2My$NrUTOJA74F`?eY7iq(HrFdVY}5APg;c{=((=gD9hZl{tEt05Pc0EASnB2i+E= z@fPwWp@Ghj?uYY>=!-K5-I8k3ExAK4cj%9RUa853vI=KdT+HGegw-Ty zY7aqZdtKmjkKfDex(%6&;_nYK;vT^PAuCZnxm}>T;k(XQ?!~?lR1bjXnBPRNTrQ207x<R=w+R6?8*Rr4~y#45SW^viZH~dD4|`>|Y8klDVpCzohhi-<7d#Nhz^0>HRl{^jyzHFax0e6^#)Ch&| zV*SNDV)q7Rq2;ThmR~R{Oqh;;XlnL!x?uXeURv))D?5A7pF@F)Du4+*6^yexr7%uT z)(c&rijX)(ARyMyMKMlf6W)(eSWUp^orA89niHshxSrkZe`Oy@k$2Zr&RDX({6prh zcQ5zj>Vw?QTkq@~&Fu7M)|I9LTb^|HHip;FK2%58Ah(>P%N6l7@>;S>^ w&sS0J>yLWgs3)4yBhqN&%_f3jJA1%~=1jkIs}F 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 QqSvzUdlsPB2<(#o2ItUB6#xJL diff --git a/app/routers/__pycache__/attendance.cpython-312.pyc b/app/routers/__pycache__/attendance.cpython-312.pyc deleted file mode 100644 index 782e4f72f06b475c7a04f068af4b38bc201118fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10126 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 MIu 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 diff --git a/app/routers/__pycache__/devices.cpython-312.pyc b/app/routers/__pycache__/devices.cpython-312.pyc deleted file mode 100644 index d3b609b16f9ef03ed1627c94f860a5b355f318fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7096 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 A9RL6T diff --git a/app/routers/__pycache__/locations.cpython-312.pyc b/app/routers/__pycache__/locations.cpython-312.pyc deleted file mode 100644 index 13dd9a7f369f62de05256b88cfe1b375d352ca47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5134 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 LjEsy$%s>_Z*zO-= diff --git a/app/services/__pycache__/beacon_service.cpython-312.pyc b/app/services/__pycache__/beacon_service.cpython-312.pyc deleted file mode 100644 index 07bbb7331d52c8c892319d7966e85f1dd6f646dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5420 zcmds5U2NOd6}}XIBvYg;%d%|OP9s~2ZFPy|rhki*C6Vho*pk@ok_?^JK~O|GmMU2; zNi}gs4PFwo_Li;AIxG&BqA?JlDbjX%*h8?F)kV=2*dDBMg9O6EQmk#-H+3%1z)w4u z6eYz`iw=9+6?pEs=iGaE$#c(l4)qtFXA!gy(9Pth!2Jsktkzs%*1ZHm7ma)Rp|9rYM%n_(R>WclbYj`IXxXmp=N_@+Vhby#3bl?Zp>9x%|tIf4voGn$+S{^4S4|s&;6V`JZhtDkYs42$lLB#L+8c-mX{?hwAp?wsuhK zQ>``L;#9k}x4N}nOIz!|@mgPPjm3Ta+Uww1-13gb?^ktLJIsH@+pC+ws3?WQd{a{y z%f?wG*nR?c{H^UG`2tO&e3ROg>e@6NhSw{iQ-qB1ip;YrAyB6Q>r~rmI9Yio>~_n& z>+0U({r759J@?A2J6StS1@4`rI;+}k4YW2(3va0L^V8Ohd!CYt+)1< z`c_S5ahA@quCkN1Bj_=7{!O^TZ;~g85Pf>+fT;K(`jgWD34#Su>7=aqPbLAivNIUV z;%UE$2lC(sv29$!vHcki>yS^v@hdf9f@4~z6WQFfqT7;!PM@3-B@rORKokkXh0dBV z7|X;HI-N`>pA~g#Iu5W$#Q~{wyLd`W)>vnUYtdsF{I>bvj>?Ix(7bZ9wB^-V_{aj9zW_72r->_(Spt?StXv1Nur!f!##|V)QeXF7GjxNaqV(tJDSowqu>@Dp4)sC5n% zTZiTjmGC{c7Pze%*Yg3_cjc+MCvLesi%%^~ErkkvU~a6$wY)UGFn)PYv1@0cYiF_R zu|n5lTGuX(8!mE@0vCC^PvgE@uN^%xh7y#kL;P5&z9%3YnqIDtOj)ypl z=pHl9Vo<2Wpe~s<3KlckhVY~vKxF)Y5FpYZUcuJRy7Vvz9>g;a0x^zy#c68}*LhWQ zbQc}H1xN4IJ+JLs-ghHe2<+1w``1aEm-!OeT+G~9nL(VV=nNK|LCx8>O7)fPAm3Q` zfW0#jTcnFvp@>K)wL-T6uakf`|Bp_RcEa<1g`04yl^()+()7!tSa7djT55g)oW;m2 zeH&)tOFj(b>)cZe3>N~!Hxq?GM01RM0|!ZufJMOXxDs#dkH3O`b1f+lNu&~~YPi6Z zO0$mbRpM7f-UeZYbI_)yRx>bxU`B($vaDn1WXERwrOvi*=W(M+;04Z`Zos*|@yChCRQkk+mwF_>jGnKq>R}k@L7Odn9DFPGs z!6hFBVmNAz?=0|xOQWw&T$<3jcK{C{N--~v{cLRh(R1S^mV0SnVc-`J6e;g2<;BAX z79LpqfyQ)J7qv0kzT| zFbMUQB4%W$kVGiR6iLD^)5+=VNeQPPoy;i-oy{2^hq%g;_JUNxrz>Qy19p5irTsv3 zr#UxLL^R`N~Z5L`#Q2e*i9d8HicvFvxrV((x-Ht#x~m z-wsFC&d>d{)ZBW@9}*-|X^mGWGDy9{cVK=SF)~EG(`U#0Ac5%+rgs4xe#K|uTE7P5zlsUS*boy0oT~a511q?F zEfh6`!>>Mvvo<(OyWqm$)l@lCV@Cm$@Egz>fG!dK6Trv90xBcb?+3x%sh&5dS|~LE z6Q0JCo&;i|RO^-o-ZtPUv=CYx)7Y*e)wN1>ZN@8SbJ=OQhe32VAe47Q#&yIQcfd=VMzpbw0VcG2>JjQNu-xDm8xZl3l=x@<2i=zd)W1R+JxtAf_*a&nt Qju_p|qhH{W6ovQn9}y^bK>z>% diff --git a/app/services/__pycache__/command_service.cpython-312.pyc b/app/services/__pycache__/command_service.cpython-312.pyc deleted file mode 100644 index ed40fed3af285d06e6356f486d6e2869d6f96f7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4537 zcmcInYit|G5xyhu_`0J+Q4}LtQgo_in{@SZQ^Sto*cBwpwH>jJowR`hgE;Y)(#c0s zxjV+DN&$>*I8y7@GSEgYYM>EdAT6Ax{?o=tQXoN^HbDP~^(?|R%#S&m$=>8*_qkd$9y~dv)Ah(p#16N@5H|`1o3y=u}Y&!to;FqB|;#^34s)B z5}6>!$%Jj(M&iC*vL~oARWX%RxOhtD1f(m*OhZy?Qt9{H1KUK{rnv-OMXH!U znhV#nsU!j}6;CH)nnOVnim72zV~3PXGIks(3Rs1{<<;}4$%tkXCN#G(NmLX-OXbzH zqER#aB+}ftjw<3T(i}2U({eIK9g>yh3o`zgdpMQRMHw$Z5DOST z4oj}uR&}RcRjx%@_N;c!ktJUr${`kGsi*Fi`usXkVclnoJd^o>4fBxR`Z@>6(VSqb`R1QK=OhT9o+B~sh5lMqJ)I7VI9Me z;ZwzvqnMRUCnmt1(2hPaDWKEqO9D4}owwRnF~zel%wOozC2TdDKa z^o)dFkwis(#RPPK&J(?Ok4{t^3gK}MOj|3&P~FR^DV3Limrkl-T{a?PV7!MhG3=Ky z_{kXKWDJNJtqW>4Kw|pT6q1pQA5EFTV@_CLEUf|*D=}W;WzCh61tdo&GMXnQBYZ`o zysA;~k^uUr;&BD38ZC(l5t!IH&1onqnw^)VFe|&U?aBl)21wb9r=nj?BRQinx;Igy z!|E%E%1B8|U{~+SID+xhpz~bj$`u7$!q?0yj|Ky^MSHvMeV z)x&R(Esqu2zESW$lRI+D>05Djlzc5q%q8Z^;bO;NzGLwEp?t@41>e4Tx)kg#2Djyd z+urdMLwoa~y&t*rp+kk>;d$n-PH&A`U%sR7dNALytKi#Rr}k_<^z4oA=0n4U;K)34 ztF0Y-@z#+-+hDPIF!y|kZ7s50dA6&-cK?Ol`qm4%1GgIdi!UrpT@L5Hn{%Tjw&`MI zA#!C;v3)S#K3HtunQz}&Xx~*}cNf|Hd3OItjsknI$d2XNvCqT;`*Q9;skvoo&!s(= zQK7k~=5cr(uocZ~YUPo5@68>mmZhW10}Q|S1pPrC+z{-ckCT4Sw)Q8P10YqWZ?R8oa# z)fjwUa0BBKKe;Y3fPBkH4BiK#J~7CWSzFegr3CUF+ckXaq3BQz4^e%|R-l?B0L)G4 zS}6;30m|*QPnj-{{irKdiyLUrI#hQ7RJ%;5zGgx7>io}FKX~7O>bvh=U;X`0xdCoi z4?B+MlIT=z+;gxya>hiJ|0_mU;O9kNhKQ+$W$VQ7`5E9`Rluw&Tp2)X$(tu!r!s6N zp)-6&O7ZwX((i%!0#xrpof=Ml0ci0p;ULdVs$yJ3@)I!EoC|=q>hTmHJ~}03I1}z_ zx7=_-bDHl-m^OfID;&SP4Ofup89*8dQ##@T3JL(TaVf1#X-*l%0mi1njv7>4udF%E z-BB=T8_*{A0I4+?{#bA&4*>I9@F^#tve2rrt>kYnwRD$Sx0M22rN-6=jHA(!J6LWY zXy+TFuaC~}I`^HDhrJkD2>oz-kqWF(0o>ibuzm4+1y5&@>Rh2ZON>7kDbobq@~}j8 zK2o}2hBG^d+R69Gp{J-Dtw4S3BZu0kkDHvBZX=Y_?Le9dsR*h4L zGW;~v6}1wZDrF7f(79(HcsawJL>5GRRpMc4 zK@f0RE&~7VbeAJ=NdvInn&biJ?6My!&2PN%Q4o%%%(n5--K3P$HveP5M4)!78^OomTsK{HIq; z$@q3^9!NL(6Da{niW&QmyJ>bvRw0wY*`194XXt5$9=-ZL{EAouCZX@rBiCL~PfKW@ zydQY@>MNf^Rko8PdEaIysV_YQ8M;Gk{+t+CCA#6M?d&eKb(VZhrIx4eGXrFM$rUKu zp}p1UUwm<4woC&Jd*$^l_ADGOJ8{oNFb!olraXkNxs0{SEa710zq#niGwqj;uP|Jm z?q2iafh0+^Zn@8FC7X52(1PVM4J}x04wjvmauLC{vKvz#!rxNH(%7PJ&5NmHq@Ub& bxwlL}bA4EEZXEtBkl#D@0JG$Mu)==<;~PP$ diff --git a/app/services/__pycache__/device_service.cpython-312.pyc b/app/services/__pycache__/device_service.cpython-312.pyc deleted file mode 100644 index 4fdbe6ee9d8037f75603a66d3fd3bb21d51d93e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8200 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 diff --git a/badge_admin.db b/badge_admin.db deleted file mode 100644 index f074ed54046209ff6250a79089aeb3b51ea88bcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 204800 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 F{}ZOy{T=`S diff --git a/nohup.out b/nohup.out deleted file mode 100644 index a3fb18e..0000000 --- a/nohup.out +++ /dev/null @@ -1,43 +0,0 @@ -INFO: Started server process [2696342] -INFO: Waiting for application startup. -2026-03-15 11:04:52,415 - app.main - INFO - Initializing database... -2026-03-15 11:04:52,417 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-15 11:04:52,417 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-15 11:04:52,417 INFO sqlalchemy.engine.Engine PRAGMA main.table_info("devices") -2026-03-15 11:04:52,417 - sqlalchemy.engine.Engine - INFO - PRAGMA main.table_info("devices") -2026-03-15 11:04:52,417 INFO sqlalchemy.engine.Engine [raw sql] () -2026-03-15 11:04:52,417 - sqlalchemy.engine.Engine - INFO - [raw sql] () -2026-03-15 11:04:52,418 INFO sqlalchemy.engine.Engine PRAGMA main.table_info("location_records") -2026-03-15 11:04:52,418 - sqlalchemy.engine.Engine - INFO - PRAGMA main.table_info("location_records") -2026-03-15 11:04:52,418 INFO sqlalchemy.engine.Engine [raw sql] () -2026-03-15 11:04:52,418 - sqlalchemy.engine.Engine - INFO - [raw sql] () -2026-03-15 11:04:52,419 INFO sqlalchemy.engine.Engine PRAGMA main.table_info("alarm_records") -2026-03-15 11:04:52,419 - sqlalchemy.engine.Engine - INFO - PRAGMA main.table_info("alarm_records") -2026-03-15 11:04:52,419 INFO sqlalchemy.engine.Engine [raw sql] () -2026-03-15 11:04:52,419 - sqlalchemy.engine.Engine - INFO - [raw sql] () -2026-03-15 11:04:52,419 INFO sqlalchemy.engine.Engine PRAGMA main.table_info("heartbeat_records") -2026-03-15 11:04:52,419 - sqlalchemy.engine.Engine - INFO - PRAGMA main.table_info("heartbeat_records") -2026-03-15 11:04:52,419 INFO sqlalchemy.engine.Engine [raw sql] () -2026-03-15 11:04:52,419 - sqlalchemy.engine.Engine - INFO - [raw sql] () -2026-03-15 11:04:52,419 INFO sqlalchemy.engine.Engine PRAGMA main.table_info("attendance_records") -2026-03-15 11:04:52,419 - sqlalchemy.engine.Engine - INFO - PRAGMA main.table_info("attendance_records") -2026-03-15 11:04:52,419 INFO sqlalchemy.engine.Engine [raw sql] () -2026-03-15 11:04:52,419 - sqlalchemy.engine.Engine - INFO - [raw sql] () -2026-03-15 11:04:52,420 INFO sqlalchemy.engine.Engine PRAGMA main.table_info("bluetooth_records") -2026-03-15 11:04:52,420 - sqlalchemy.engine.Engine - INFO - PRAGMA main.table_info("bluetooth_records") -2026-03-15 11:04:52,420 INFO sqlalchemy.engine.Engine [raw sql] () -2026-03-15 11:04:52,420 - sqlalchemy.engine.Engine - INFO - [raw sql] () -2026-03-15 11:04:52,420 INFO sqlalchemy.engine.Engine PRAGMA main.table_info("command_logs") -2026-03-15 11:04:52,420 - sqlalchemy.engine.Engine - INFO - PRAGMA main.table_info("command_logs") -2026-03-15 11:04:52,420 INFO sqlalchemy.engine.Engine [raw sql] () -2026-03-15 11:04:52,420 - sqlalchemy.engine.Engine - INFO - [raw sql] () -2026-03-15 11:04:52,420 INFO sqlalchemy.engine.Engine COMMIT -2026-03-15 11:04:52,420 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-15 11:04:52,420 - app.main - INFO - Starting TCP server on 0.0.0.0:5000 -INFO: Application startup complete. -ERROR: [Errno 98] error while attempting to bind on address ('0.0.0.0', 8088): address already in use -INFO: Waiting for application shutdown. -2026-03-15 11:04:52,421 - app.tcp_server - INFO - KKS TCP server listening on ('0.0.0.0', 5000) -2026-03-15 11:04:52,421 - app.main - INFO - Shutting down TCP server... -2026-03-15 11:04:52,421 - app.tcp_server - INFO - KKS TCP server stopped -INFO: Application shutdown complete. diff --git a/server.log b/server.log deleted file mode 100644 index 6e819c0..0000000 --- a/server.log +++ /dev/null @@ -1,1854 +0,0 @@ -INFO: Started server process [2198489] -INFO: Waiting for application startup. -2026-03-16 18:20:28,519 - app.main - INFO - Initializing database... -2026-03-16 18:20:28,520 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 18:20:28,520 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 18:20:28,520 INFO sqlalchemy.engine.Engine PRAGMA main.table_info("devices") -2026-03-16 18:20:28,520 - sqlalchemy.engine.Engine - INFO - PRAGMA main.table_info("devices") -2026-03-16 18:20:28,520 INFO sqlalchemy.engine.Engine [raw sql] () -2026-03-16 18:20:28,520 - sqlalchemy.engine.Engine - INFO - [raw sql] () -2026-03-16 18:20:28,521 INFO sqlalchemy.engine.Engine PRAGMA main.table_info("location_records") -2026-03-16 18:20:28,521 - sqlalchemy.engine.Engine - INFO - PRAGMA main.table_info("location_records") -2026-03-16 18:20:28,521 INFO sqlalchemy.engine.Engine [raw sql] () -2026-03-16 18:20:28,521 - sqlalchemy.engine.Engine - INFO - [raw sql] () -2026-03-16 18:20:28,521 INFO sqlalchemy.engine.Engine PRAGMA main.table_info("alarm_records") -2026-03-16 18:20:28,521 - sqlalchemy.engine.Engine - INFO - PRAGMA main.table_info("alarm_records") -2026-03-16 18:20:28,521 INFO sqlalchemy.engine.Engine [raw sql] () -2026-03-16 18:20:28,521 - sqlalchemy.engine.Engine - INFO - [raw sql] () -2026-03-16 18:20:28,522 INFO sqlalchemy.engine.Engine PRAGMA main.table_info("heartbeat_records") -2026-03-16 18:20:28,522 - sqlalchemy.engine.Engine - INFO - PRAGMA main.table_info("heartbeat_records") -2026-03-16 18:20:28,522 INFO sqlalchemy.engine.Engine [raw sql] () -2026-03-16 18:20:28,522 - sqlalchemy.engine.Engine - INFO - [raw sql] () -2026-03-16 18:20:28,522 INFO sqlalchemy.engine.Engine PRAGMA main.table_info("attendance_records") -2026-03-16 18:20:28,522 - sqlalchemy.engine.Engine - INFO - PRAGMA main.table_info("attendance_records") -2026-03-16 18:20:28,522 INFO sqlalchemy.engine.Engine [raw sql] () -2026-03-16 18:20:28,522 - sqlalchemy.engine.Engine - INFO - [raw sql] () -2026-03-16 18:20:28,522 INFO sqlalchemy.engine.Engine PRAGMA main.table_info("bluetooth_records") -2026-03-16 18:20:28,522 - sqlalchemy.engine.Engine - INFO - PRAGMA main.table_info("bluetooth_records") -2026-03-16 18:20:28,522 INFO sqlalchemy.engine.Engine [raw sql] () -2026-03-16 18:20:28,522 - sqlalchemy.engine.Engine - INFO - [raw sql] () -2026-03-16 18:20:28,523 INFO sqlalchemy.engine.Engine PRAGMA main.table_info("beacon_configs") -2026-03-16 18:20:28,523 - sqlalchemy.engine.Engine - INFO - PRAGMA main.table_info("beacon_configs") -2026-03-16 18:20:28,523 INFO sqlalchemy.engine.Engine [raw sql] () -2026-03-16 18:20:28,523 - sqlalchemy.engine.Engine - INFO - [raw sql] () -2026-03-16 18:20:28,523 INFO sqlalchemy.engine.Engine PRAGMA main.table_info("command_logs") -2026-03-16 18:20:28,523 - sqlalchemy.engine.Engine - INFO - PRAGMA main.table_info("command_logs") -2026-03-16 18:20:28,523 INFO sqlalchemy.engine.Engine [raw sql] () -2026-03-16 18:20:28,523 - sqlalchemy.engine.Engine - INFO - [raw sql] () -2026-03-16 18:20:28,523 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 18:20:28,523 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 18:20:28,524 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 18:20:28,524 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 18:20:28,525 INFO sqlalchemy.engine.Engine UPDATE devices SET status=?, updated_at=? -2026-03-16 18:20:28,525 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET status=?, updated_at=? -2026-03-16 18:20:28,525 INFO sqlalchemy.engine.Engine [generated in 0.00014s] ('offline', '2026-03-16 18:20:28.525762') -2026-03-16 18:20:28,525 - sqlalchemy.engine.Engine - INFO - [generated in 0.00014s] ('offline', '2026-03-16 18:20:28.525762') -2026-03-16 18:20:28,526 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 18:20:28,526 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 18:20:28,533 - app.main - INFO - All devices reset to offline on startup -2026-03-16 18:20:28,533 - app.main - INFO - Starting TCP server on 0.0.0.0:5000 -INFO: Application startup complete. -ERROR: [Errno 98] error while attempting to bind on address ('0.0.0.0', 8088): address already in use -INFO: Waiting for application shutdown. -2026-03-16 18:20:282026-03-16 18:20:35,002 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 18:20:35,002 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 18:20:35,020 INFO sqlalchemy.engine.Engine SELECT count(devices.id) AS count_1 -FROM devices -2026-03-16 18:20:35,020 - sqlalchemy.engine.Engine - INFO - SELECT count(devices.id) AS count_1 -FROM devices -2026-03-16 18:20:35,020 INFO sqlalchemy.engine.Engine [generated in 0.00013s] () -2026-03-16 18:20:35,020 - sqlalchemy.engine.Engine - INFO - [generated in 0.00013s] () -2026-03-16 18:20:35,023 INFO sqlalchemy.engine.Engine SELECT devices.id, devices.imei, devices.device_type, devices.name, devices.status, devices.battery_level, devices.gsm_signal, devices.last_heartbeat, devices.last_login, devices.iccid, devices.imsi, devices.timezone, devices.language, devices.created_at, devices.updated_at -FROM devices ORDER BY devices.updated_at DESC - LIMIT ? OFFSET ? -2026-03-16 18:20:35,023 - sqlalchemy.engine.Engine - INFO - SELECT devices.id, devices.imei, devices.device_type, devices.name, devices.status, devices.battery_level, devices.gsm_signal, devices.last_heartbeat, devices.last_login, devices.iccid, devices.imsi, devices.timezone, devices.language, devices.created_at, devices.updated_at -FROM devices ORDER BY devices.updated_at DESC - LIMIT ? OFFSET ? -2026-03-16 18:20:35,023 INFO sqlalchemy.engine.Engine [generated in 0.00014s] (20, 0) -2026-03-16 18:20:35,023 - sqlalchemy.engine.Engine - INFO - [generated in 0.00014s] (20, 0) -INFO: 127.0.0.1:36022 - "GET /api/devices HTTP/1.1" 200 OK -2026-03-16 18:20:35,025 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 18:20:35,025 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 18:21:32,695 - app.tcp_server - INFO - New TCP connection from 127.0.0.1:55838 -2026-03-16 18:21:32,695 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=None): 787811010868120334031363805932010001ef7b0d0a -2026-03-16 18:21:32,695 - app.tcp_server - INFO - Device login: IMEI=868120334031363 from 127.0.0.1:55838 -2026-03-16 18:21:32,695 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 18:21:32,695 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 18:21:32,696 INFO sqlalchemy.engine.Engine SELECT devices.id, devices.imei, devices.device_type, devices.name, devices.status, devices.battery_level, devices.gsm_signal, devices.last_heartbeat, devices.last_login, devices.iccid, devices.imsi, devices.timezone, devices.language, devices.created_at, devices.updated_at -FROM devices -WHERE devices.imei = ? -2026-03-16 18:21:32,696 - sqlalchemy.engine.Engine - INFO - SELECT devices.id, devices.imei, devices.device_type, devices.name, devices.status, devices.battery_level, devices.gsm_signal, devices.last_heartbeat, devices.last_login, devices.iccid, devices.imsi, devices.timezone, devices.language, devices.created_at, devices.updated_at -FROM devices -WHERE devices.imei = ? -2026-03-16 18:21:32,696 INFO sqlalchemy.engine.Engine [generated in 0.00016s] ('868120334031363',) -2026-03-16 18:21:32,696 - sqlalchemy.engine.Engine - INFO - [generated in 0.00016s] ('868120334031363',) -2026-03-16 18:21:32,699 INFO sqlalchemy.engine.Engine UPDATE devices SET status=?, last_login=?, timezone=?, language=?, updated_at=? WHERE devices.id = ? -2026-03-16 18:21:32,699 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET status=?, last_login=?, timezone=?, language=?, updated_at=? WHERE devices.id = ? -2026-03-16 18:21:32,699 INFO sqlalchemy.engine.Engine [generated in 0.00024s] ('online', '2026-03-16 18:21:32.695388', 'E8.0', 'zh', '2026-03-16 18:21:32.699466', 1) -2026-03-16 18:21:32,699 - sqlalchemy.engine.Engine - INFO - [generated in 0.00024s] ('online', '2026-03-16 18:21:32.695388', 'E8.0', 'zh', '2026-03-16 18:21:32.699466', 1) -2026-03-16 18:21:32,700 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 18:21:32,700 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 18:21:33,560 - app.tcp_server - INFO - Received 18 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78780d1f1a0310121521000100022f0c0d0a -2026-03-16 18:21:37,013 - app.tcp_server - INFO - Received 38 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 79790020940a08681203340313630460240388355286898608481025700052860003e0960d0a -2026-03-16 18:21:37,013 - app.tcp_server - INFO - IMEI=868120334031363 IMSI=460240388355286 ICCID=89860848102570005286 -2026-03-16 18:21:37,013 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 18:21:37,013 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 18:21:37,014 INFO sqlalchemy.engine.Engine UPDATE devices SET iccid=?, imsi=?, updated_at=? WHERE devices.imei = ? -2026-03-16 18:21:37,014 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET iccid=?, imsi=?, updated_at=? WHERE devices.imei = ? -2026-03-16 18:21:37,014 INFO sqlalchemy.engine.Engine [generated in 0.00019s] ('89860848102570005286', '460240388355286', '2026-03-16 18:21:37.014750', '868120334031363') -2026-03-16 18:21:37,014 - sqlalchemy.engine.Engine - INFO - [generated in 0.00019s] ('89860848102570005286', '460240388355286', '2026-03-16 18:21:37.014750', '868120334031363') -2026-03-16 18:21:37,015 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 18:21:37,015 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 18:21:39,510 - app.tcp_server - INFO - Received 84 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 7979004e9404414c4d323d34303b414c4d343d45303b4d4f44453d30333b494d53493d343630323430333838333535323836 -2026-03-16 18:21:54,497 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000000544970d0a -2026-03-16 18:21:54,498 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 18:21:54,498 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 18:21:54,499 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 18:21:54,499 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 18:21:54,499 INFO sqlalchemy.engine.Engine [generated in 0.00030s] ('868120334031363',) -2026-03-16 18:21:54,499 - sqlalchemy.engine.Engine - INFO - [generated in 0.00030s] ('868120334031363',) -2026-03-16 18:21:54,503 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 18:21:54,503 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 18:21:54,503 INFO sqlalchemy.engine.Engine [generated in 0.00047s] (50, 3, '2026-03-16 18:21:54.497622', '2026-03-16 18:21:54.503286', 1) -2026-03-16 18:21:54,503 - sqlalchemy.engine.Engine - INFO - [generated in 0.00047s] (50, 3, '2026-03-16 18:21:54.497622', '2026-03-16 18:21:54.503286', 1) -2026-03-16 18:21:54,508 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 18:21:54,508 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 18:21:54,508 INFO sqlalchemy.engine.Engine [generated in 0.00049s] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 18:21:54.508353') -2026-03-16 18:21:54,508 - sqlalchemy.engine.Engine - INFO - [generated in 0.00049s] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 18:21:54.508353') -2026-03-16 18:21:54,510 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 18:21:54,510 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 18:26:55,006 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 787811360032030001004104000000000006760c0d0a -2026-03-16 18:26:55,007 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 18:26:55,007 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 18:26:55,008 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 18:26:55,008 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 18:26:55,008 INFO sqlalchemy.engine.Engine [cached since 300.5s ago] ('868120334031363',) -2026-03-16 18:26:55,008 - sqlalchemy.engine.Engine - INFO - [cached since 300.5s ago] ('868120334031363',) -2026-03-16 18:26:55,010 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 18:26:55,010 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 18:26:55,010 INFO sqlalchemy.engine.Engine [cached since 300.5s ago] (50, 3, '2026-03-16 18:26:55.007201', '2026-03-16 18:26:55.010586', 1) -2026-03-16 18:26:55,010 - sqlalchemy.engine.Engine - INFO - [cached since 300.5s ago] (50, 3, '2026-03-16 18:26:55.007201', '2026-03-16 18:26:55.010586', 1) -2026-03-16 18:26:55,012 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 18:26:55,012 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 18:26:55,012 INFO sqlalchemy.engine.Engine [cached since 300.5s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 18:26:55.012616') -2026-03-16 18:26:55,012 - sqlalchemy.engine.Engine - INFO - [cached since 300.5s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 18:26:55.012616') -2026-03-16 18:26:55,013 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 18:26:55,013 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 18:31:55,462 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000000767850d0a -2026-03-16 18:31:55,463 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 18:31:55,463 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 18:31:55,463 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 18:31:55,463 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 18:31:55,463 INFO sqlalchemy.engine.Engine [cached since 601s ago] ('868120334031363',) -2026-03-16 18:31:55,463 - sqlalchemy.engine.Engine - INFO - [cached since 601s ago] ('868120334031363',) -2026-03-16 18:31:55,464 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 18:31:55,464 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 18:31:55,464 INFO sqlalchemy.engine.Engine [cached since 601s ago] (50, 3, '2026-03-16 18:31:55.463066', '2026-03-16 18:31:55.464803', 1) -2026-03-16 18:31:55,464 - sqlalchemy.engine.Engine - INFO - [cached since 601s ago] (50, 3, '2026-03-16 18:31:55.463066', '2026-03-16 18:31:55.464803', 1) -2026-03-16 18:31:55,466 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 18:31:55,466 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 18:31:55,466 INFO sqlalchemy.engine.Engine [cached since 601s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 18:31:55.465936') -2026-03-16 18:31:55,466 - sqlalchemy.engine.Engine - INFO - [cached since 601s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 18:31:55.465936') -2026-03-16 18:31:55,466 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 18:31:55,466 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 18:36:56,008 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 7878113600320300010041040000000000089f720d0a -2026-03-16 18:36:56,009 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 18:36:56,009 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 18:36:56,009 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 18:36:56,009 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 18:36:56,009 INFO sqlalchemy.engine.Engine [cached since 901.5s ago] ('868120334031363',) -2026-03-16 18:36:56,009 - sqlalchemy.engine.Engine - INFO - [cached since 901.5s ago] ('868120334031363',) -2026-03-16 18:36:56,010 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 18:36:56,010 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 18:36:56,010 INFO sqlalchemy.engine.Engine [cached since 901.5s ago] (50, 3, '2026-03-16 18:36:56.009056', '2026-03-16 18:36:56.010206', 1) -2026-03-16 18:36:56,010 - sqlalchemy.engine.Engine - INFO - [cached since 901.5s ago] (50, 3, '2026-03-16 18:36:56.009056', '2026-03-16 18:36:56.010206', 1) -2026-03-16 18:36:56,010 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 18:36:56,010 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 18:36:56,010 INFO sqlalchemy.engine.Engine [cached since 901.5s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 18:36:56.010682') -2026-03-16 18:36:56,010 - sqlalchemy.engine.Engine - INFO - [cached since 901.5s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 18:36:56.010682') -2026-03-16 18:36:56,010 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 18:36:56,010 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 18:41:56,896 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 7878113600320300010041040000000000098efb0d0a -2026-03-16 18:41:56,897 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 18:41:56,897 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 18:41:56,898 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 18:41:56,898 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 18:41:56,898 INFO sqlalchemy.engine.Engine [cached since 1202s ago] ('868120334031363',) -2026-03-16 18:41:56,898 - sqlalchemy.engine.Engine - INFO - [cached since 1202s ago] ('868120334031363',) -2026-03-16 18:41:56,900 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 18:41:56,900 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 18:41:56,900 INFO sqlalchemy.engine.Engine [cached since 1202s ago] (50, 3, '2026-03-16 18:41:56.896884', '2026-03-16 18:41:56.900257', 1) -2026-03-16 18:41:56,900 - sqlalchemy.engine.Engine - INFO - [cached since 1202s ago] (50, 3, '2026-03-16 18:41:56.896884', '2026-03-16 18:41:56.900257', 1) -2026-03-16 18:41:56,902 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 18:41:56,902 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 18:41:56,902 INFO sqlalchemy.engine.Engine [cached since 1202s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 18:41:56.902117') -2026-03-16 18:41:56,902 - sqlalchemy.engine.Engine - INFO - [cached since 1202s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 18:41:56.902117') -2026-03-16 18:41:56,903 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 18:41:56,903 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 18:46:57,050 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000000abc600d0a -2026-03-16 18:46:57,052 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 18:46:57,052 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 18:46:57,052 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 18:46:57,052 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 18:46:57,053 INFO sqlalchemy.engine.Engine [cached since 1503s ago] ('868120334031363',) -2026-03-16 18:46:57,053 - sqlalchemy.engine.Engine - INFO - [cached since 1503s ago] ('868120334031363',) -2026-03-16 18:46:57,055 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 18:46:57,055 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 18:46:57,055 INFO sqlalchemy.engine.Engine [cached since 1503s ago] (50, 3, '2026-03-16 18:46:57.051089', '2026-03-16 18:46:57.055639', 1) -2026-03-16 18:46:57,055 - sqlalchemy.engine.Engine - INFO - [cached since 1503s ago] (50, 3, '2026-03-16 18:46:57.051089', '2026-03-16 18:46:57.055639', 1) -2026-03-16 18:46:57,058 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 18:46:57,058 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 18:46:57,058 INFO sqlalchemy.engine.Engine [cached since 1503s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 18:46:57.058144') -2026-03-16 18:46:57,058 - sqlalchemy.engine.Engine - INFO - [cached since 1503s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 18:46:57.058144') -2026-03-16 18:46:57,059 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 18:46:57,059 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 18:51:38,927 - app.tcp_server - INFO - New TCP connection from 127.0.0.1:60780 -2026-03-16 18:51:38,928 - app.tcp_server - INFO - Received 119 bytes from 127.0.0.1:60780 (IMEI=None): 474554202f76322f20485454502f312e310d0a486f73743a203135322e36392e3230352e3138363a353030310d0a55736572 -2026-03-16 18:51:43,927 - app.tcp_server - INFO - Connection closed by remote 127.0.0.1:60780 (IMEI=None) -2026-03-16 18:51:57,417 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000000bade90d0a -2026-03-16 18:51:57,418 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 18:51:57,418 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 18:51:57,418 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 18:51:57,418 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 18:51:57,419 INFO sqlalchemy.engine.Engine [cached since 1803s ago] ('868120334031363',) -2026-03-16 18:51:57,419 - sqlalchemy.engine.Engine - INFO - [cached since 1803s ago] ('868120334031363',) -2026-03-16 18:51:57,421 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 18:51:57,421 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 18:51:57,421 INFO sqlalchemy.engine.Engine [cached since 1803s ago] (50, 3, '2026-03-16 18:51:57.417804', '2026-03-16 18:51:57.421139', 1) -2026-03-16 18:51:57,421 - sqlalchemy.engine.Engine - INFO - [cached since 1803s ago] (50, 3, '2026-03-16 18:51:57.417804', '2026-03-16 18:51:57.421139', 1) -2026-03-16 18:51:57,423 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 18:51:57,423 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 18:51:57,423 INFO sqlalchemy.engine.Engine [cached since 1803s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 18:51:57.422984') -2026-03-16 18:51:57,423 - sqlalchemy.engine.Engine - INFO - [cached since 1803s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 18:51:57.422984') -2026-03-16 18:51:57,424 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 18:51:57,424 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 18:56:57,900 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000000cd9560d0a -2026-03-16 18:56:57,900 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 18:56:57,900 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 18:56:57,901 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 18:56:57,901 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 18:56:57,901 INFO sqlalchemy.engine.Engine [cached since 2103s ago] ('868120334031363',) -2026-03-16 18:56:57,901 - sqlalchemy.engine.Engine - INFO - [cached since 2103s ago] ('868120334031363',) -2026-03-16 18:56:57,903 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 18:56:57,903 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 18:56:57,903 INFO sqlalchemy.engine.Engine [cached since 2103s ago] (50, 3, '2026-03-16 18:56:57.900217', '2026-03-16 18:56:57.903526', 1) -2026-03-16 18:56:57,903 - sqlalchemy.engine.Engine - INFO - [cached since 2103s ago] (50, 3, '2026-03-16 18:56:57.900217', '2026-03-16 18:56:57.903526', 1) -2026-03-16 18:56:57,905 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 18:56:57,905 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 18:56:57,905 INFO sqlalchemy.engine.Engine [cached since 2103s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 18:56:57.905267') -2026-03-16 18:56:57,905 - sqlalchemy.engine.Engine - INFO - [cached since 2103s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 18:56:57.905267') -2026-03-16 18:56:57,906 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 18:56:57,906 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 19:01:58,352 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000000dc8df0d0a -2026-03-16 19:01:58,353 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 19:01:58,353 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 19:01:58,353 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 19:01:58,353 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 19:01:58,353 INFO sqlalchemy.engine.Engine [cached since 2404s ago] ('868120334031363',) -2026-03-16 19:01:58,353 - sqlalchemy.engine.Engine - INFO - [cached since 2404s ago] ('868120334031363',) -2026-03-16 19:01:58,355 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 19:01:58,355 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 19:01:58,355 INFO sqlalchemy.engine.Engine [cached since 2404s ago] (50, 3, '2026-03-16 19:01:58.352416', '2026-03-16 19:01:58.355764', 1) -2026-03-16 19:01:58,355 - sqlalchemy.engine.Engine - INFO - [cached since 2404s ago] (50, 3, '2026-03-16 19:01:58.352416', '2026-03-16 19:01:58.355764', 1) -2026-03-16 19:01:58,357 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 19:01:58,357 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 19:01:58,357 INFO sqlalchemy.engine.Engine [cached since 2404s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 19:01:58.357592') -2026-03-16 19:01:58,357 - sqlalchemy.engine.Engine - INFO - [cached since 2404s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 19:01:58.357592') -2026-03-16 19:01:58,358 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 19:01:58,358 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 19:06:58,856 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000000efa440d0a -2026-03-16 19:06:58,857 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 19:06:58,857 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 19:06:58,857 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 19:06:58,857 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 19:06:58,857 INFO sqlalchemy.engine.Engine [cached since 2704s ago] ('868120334031363',) -2026-03-16 19:06:58,857 - sqlalchemy.engine.Engine - INFO - [cached since 2704s ago] ('868120334031363',) -2026-03-16 19:06:58,860 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 19:06:58,860 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 19:06:58,860 INFO sqlalchemy.engine.Engine [cached since 2704s ago] (50, 3, '2026-03-16 19:06:58.856611', '2026-03-16 19:06:58.860552', 1) -2026-03-16 19:06:58,860 - sqlalchemy.engine.Engine - INFO - [cached since 2704s ago] (50, 3, '2026-03-16 19:06:58.856611', '2026-03-16 19:06:58.860552', 1) -2026-03-16 19:06:58,862 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 19:06:58,862 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 19:06:58,862 INFO sqlalchemy.engine.Engine [cached since 2704s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 19:06:58.862505') -2026-03-16 19:06:58,862 - sqlalchemy.engine.Engine - INFO - [cached since 2704s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 19:06:58.862505') -2026-03-16 19:06:58,863 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 19:06:58,863 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 19:11:59,351 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000000febcd0d0a -2026-03-16 19:11:59,351 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 19:11:59,351 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 19:11:59,351 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 19:11:59,351 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 19:11:59,351 INFO sqlalchemy.engine.Engine [cached since 3005s ago] ('868120334031363',) -2026-03-16 19:11:59,351 - sqlalchemy.engine.Engine - INFO - [cached since 3005s ago] ('868120334031363',) -2026-03-16 19:11:59,352 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 19:11:59,352 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 19:11:59,352 INFO sqlalchemy.engine.Engine [cached since 3005s ago] (50, 3, '2026-03-16 19:11:59.351261', '2026-03-16 19:11:59.352335', 1) -2026-03-16 19:11:59,352 - sqlalchemy.engine.Engine - INFO - [cached since 3005s ago] (50, 3, '2026-03-16 19:11:59.351261', '2026-03-16 19:11:59.352335', 1) -2026-03-16 19:11:59,352 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 19:11:59,352 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 19:11:59,352 INFO sqlalchemy.engine.Engine [cached since 3005s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 19:11:59.352866') -2026-03-16 19:11:59,352 - sqlalchemy.engine.Engine - INFO - [cached since 3005s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 19:11:59.352866') -2026-03-16 19:11:59,353 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 19:11:59,353 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 19:16:59,886 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000001003bb0d0a -2026-03-16 19:16:59,887 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 19:16:59,887 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 19:16:59,887 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 19:16:59,887 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 19:16:59,888 INFO sqlalchemy.engine.Engine [cached since 3305s ago] ('868120334031363',) -2026-03-16 19:16:59,888 - sqlalchemy.engine.Engine - INFO - [cached since 3305s ago] ('868120334031363',) -2026-03-16 19:16:59,890 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 19:16:59,890 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 19:16:59,890 INFO sqlalchemy.engine.Engine [cached since 3305s ago] (50, 3, '2026-03-16 19:16:59.886712', '2026-03-16 19:16:59.890044', 1) -2026-03-16 19:16:59,890 - sqlalchemy.engine.Engine - INFO - [cached since 3305s ago] (50, 3, '2026-03-16 19:16:59.886712', '2026-03-16 19:16:59.890044', 1) -2026-03-16 19:16:59,891 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 19:16:59,891 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 19:16:59,892 INFO sqlalchemy.engine.Engine [cached since 3305s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 19:16:59.891852') -2026-03-16 19:16:59,892 - sqlalchemy.engine.Engine - INFO - [cached since 3305s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 19:16:59.891852') -2026-03-16 19:16:59,892 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 19:16:59,892 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 19:22:00,342 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000001112320d0a -2026-03-16 19:22:00,343 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 19:22:00,343 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 19:22:00,344 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 19:22:00,344 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 19:22:00,344 INFO sqlalchemy.engine.Engine [cached since 3606s ago] ('868120334031363',) -2026-03-16 19:22:00,344 - sqlalchemy.engine.Engine - INFO - [cached since 3606s ago] ('868120334031363',) -2026-03-16 19:22:00,346 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 19:22:00,346 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 19:22:00,346 INFO sqlalchemy.engine.Engine [cached since 3606s ago] (50, 3, '2026-03-16 19:22:00.342947', '2026-03-16 19:22:00.346332', 1) -2026-03-16 19:22:00,346 - sqlalchemy.engine.Engine - INFO - [cached since 3606s ago] (50, 3, '2026-03-16 19:22:00.342947', '2026-03-16 19:22:00.346332', 1) -2026-03-16 19:22:00,348 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 19:22:00,348 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 19:22:00,348 INFO sqlalchemy.engine.Engine [cached since 3606s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 19:22:00.348217') -2026-03-16 19:22:00,348 - sqlalchemy.engine.Engine - INFO - [cached since 3606s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 19:22:00.348217') -2026-03-16 19:22:00,349 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 19:22:00,349 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 19:27:00,827 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000001220a90d0a -2026-03-16 19:27:00,828 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 19:27:00,828 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 19:27:00,828 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 19:27:00,828 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 19:27:00,829 INFO sqlalchemy.engine.Engine [cached since 3906s ago] ('868120334031363',) -2026-03-16 19:27:00,829 - sqlalchemy.engine.Engine - INFO - [cached since 3906s ago] ('868120334031363',) -2026-03-16 19:27:00,831 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 19:27:00,831 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 19:27:00,831 INFO sqlalchemy.engine.Engine [cached since 3906s ago] (50, 3, '2026-03-16 19:27:00.827824', '2026-03-16 19:27:00.831028', 1) -2026-03-16 19:27:00,831 - sqlalchemy.engine.Engine - INFO - [cached since 3906s ago] (50, 3, '2026-03-16 19:27:00.827824', '2026-03-16 19:27:00.831028', 1) -2026-03-16 19:27:00,833 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 19:27:00,833 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 19:27:00,833 INFO sqlalchemy.engine.Engine [cached since 3906s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 19:27:00.832916') -2026-03-16 19:27:00,833 - sqlalchemy.engine.Engine - INFO - [cached since 3906s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 19:27:00.832916') -2026-03-16 19:27:00,833 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 19:27:00,833 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 19:32:01,340 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000001331200d0a -2026-03-16 19:32:01,341 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 19:32:01,341 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 19:32:01,342 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 19:32:01,342 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 19:32:01,342 INFO sqlalchemy.engine.Engine [cached since 4207s ago] ('868120334031363',) -2026-03-16 19:32:01,342 - sqlalchemy.engine.Engine - INFO - [cached since 4207s ago] ('868120334031363',) -2026-03-16 19:32:01,345 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 19:32:01,345 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 19:32:01,345 INFO sqlalchemy.engine.Engine [cached since 4207s ago] (50, 3, '2026-03-16 19:32:01.340548', '2026-03-16 19:32:01.345340', 1) -2026-03-16 19:32:01,345 - sqlalchemy.engine.Engine - INFO - [cached since 4207s ago] (50, 3, '2026-03-16 19:32:01.340548', '2026-03-16 19:32:01.345340', 1) -2026-03-16 19:32:01,346 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 19:32:01,346 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 19:32:01,346 INFO sqlalchemy.engine.Engine [cached since 4207s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 19:32:01.346091') -2026-03-16 19:32:01,346 - sqlalchemy.engine.Engine - INFO - [cached since 4207s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 19:32:01.346091') -2026-03-16 19:32:01,346 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 19:32:01,346 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 19:37:01,848 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 787811360032030001004104000000000014459f0d0a -2026-03-16 19:37:01,849 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 19:37:01,849 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 19:37:01,850 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 19:37:01,850 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 19:37:01,850 INFO sqlalchemy.engine.Engine [cached since 4507s ago] ('868120334031363',) -2026-03-16 19:37:01,850 - sqlalchemy.engine.Engine - INFO - [cached since 4507s ago] ('868120334031363',) -2026-03-16 19:37:01,852 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 19:37:01,852 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 19:37:01,852 INFO sqlalchemy.engine.Engine [cached since 4507s ago] (50, 3, '2026-03-16 19:37:01.849040', '2026-03-16 19:37:01.852505', 1) -2026-03-16 19:37:01,852 - sqlalchemy.engine.Engine - INFO - [cached since 4507s ago] (50, 3, '2026-03-16 19:37:01.849040', '2026-03-16 19:37:01.852505', 1) -2026-03-16 19:37:01,854 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 19:37:01,854 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 19:37:01,854 INFO sqlalchemy.engine.Engine [cached since 4507s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 19:37:01.854370') -2026-03-16 19:37:01,854 - sqlalchemy.engine.Engine - INFO - [cached since 4507s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 19:37:01.854370') -2026-03-16 19:37:01,855 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 19:37:01,855 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 19:42:02,557 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000001554160d0a -2026-03-16 19:42:02,559 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 19:42:02,559 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 19:42:02,559 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 19:42:02,559 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 19:42:02,560 INFO sqlalchemy.engine.Engine [cached since 4808s ago] ('868120334031363',) -2026-03-16 19:42:02,560 - sqlalchemy.engine.Engine - INFO - [cached since 4808s ago] ('868120334031363',) -2026-03-16 19:42:02,562 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 19:42:02,562 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 19:42:02,562 INFO sqlalchemy.engine.Engine [cached since 4808s ago] (50, 3, '2026-03-16 19:42:02.557969', '2026-03-16 19:42:02.562552', 1) -2026-03-16 19:42:02,562 - sqlalchemy.engine.Engine - INFO - [cached since 4808s ago] (50, 3, '2026-03-16 19:42:02.557969', '2026-03-16 19:42:02.562552', 1) -2026-03-16 19:42:02,564 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 19:42:02,564 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 19:42:02,564 INFO sqlalchemy.engine.Engine [cached since 4808s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 19:42:02.564450') -2026-03-16 19:42:02,564 - sqlalchemy.engine.Engine - INFO - [cached since 4808s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 19:42:02.564450') -2026-03-16 19:42:02,565 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 19:42:02,565 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 19:47:04,252 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 787811360032030001004104000000000016668d0d0a -2026-03-16 19:47:04,253 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 19:47:04,253 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 19:47:04,253 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 19:47:04,253 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 19:47:04,253 INFO sqlalchemy.engine.Engine [cached since 5110s ago] ('868120334031363',) -2026-03-16 19:47:04,253 - sqlalchemy.engine.Engine - INFO - [cached since 5110s ago] ('868120334031363',) -2026-03-16 19:47:04,255 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 19:47:04,255 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 19:47:04,255 INFO sqlalchemy.engine.Engine [cached since 5110s ago] (50, 3, '2026-03-16 19:47:04.252288', '2026-03-16 19:47:04.255611', 1) -2026-03-16 19:47:04,255 - sqlalchemy.engine.Engine - INFO - [cached since 5110s ago] (50, 3, '2026-03-16 19:47:04.252288', '2026-03-16 19:47:04.255611', 1) -2026-03-16 19:47:04,259 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 19:47:04,259 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 19:47:04,259 INFO sqlalchemy.engine.Engine [cached since 5110s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 19:47:04.258919') -2026-03-16 19:47:04,259 - sqlalchemy.engine.Engine - INFO - [cached since 5110s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 19:47:04.258919') -2026-03-16 19:47:04,260 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 19:47:04,260 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 19:52:04,634 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000001777040d0a -2026-03-16 19:52:04,635 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 19:52:04,635 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 19:52:04,636 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 19:52:04,636 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 19:52:04,636 INFO sqlalchemy.engine.Engine [cached since 5410s ago] ('868120334031363',) -2026-03-16 19:52:04,636 - sqlalchemy.engine.Engine - INFO - [cached since 5410s ago] ('868120334031363',) -2026-03-16 19:52:04,638 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 19:52:04,638 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 19:52:04,638 INFO sqlalchemy.engine.Engine [cached since 5410s ago] (50, 3, '2026-03-16 19:52:04.634973', '2026-03-16 19:52:04.638193', 1) -2026-03-16 19:52:04,638 - sqlalchemy.engine.Engine - INFO - [cached since 5410s ago] (50, 3, '2026-03-16 19:52:04.634973', '2026-03-16 19:52:04.638193', 1) -2026-03-16 19:52:04,640 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 19:52:04,640 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 19:52:04,640 INFO sqlalchemy.engine.Engine [cached since 5410s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 19:52:04.640021') -2026-03-16 19:52:04,640 - sqlalchemy.engine.Engine - INFO - [cached since 5410s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 19:52:04.640021') -2026-03-16 19:52:04,641 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 19:52:04,641 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 19:57:05,461 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 7878113600320300010041040000000000188ff30d0a -2026-03-16 19:57:05,462 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 19:57:05,462 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 19:57:05,463 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 19:57:05,463 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 19:57:05,463 INFO sqlalchemy.engine.Engine [cached since 5711s ago] ('868120334031363',) -2026-03-16 19:57:05,463 - sqlalchemy.engine.Engine - INFO - [cached since 5711s ago] ('868120334031363',) -2026-03-16 19:57:05,465 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 19:57:05,465 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 19:57:05,465 INFO sqlalchemy.engine.Engine [cached since 5711s ago] (50, 3, '2026-03-16 19:57:05.461820', '2026-03-16 19:57:05.465477', 1) -2026-03-16 19:57:05,465 - sqlalchemy.engine.Engine - INFO - [cached since 5711s ago] (50, 3, '2026-03-16 19:57:05.461820', '2026-03-16 19:57:05.465477', 1) -2026-03-16 19:57:05,467 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 19:57:05,467 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 19:57:05,467 INFO sqlalchemy.engine.Engine [cached since 5711s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 19:57:05.467409') -2026-03-16 19:57:05,467 - sqlalchemy.engine.Engine - INFO - [cached since 5711s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 19:57:05.467409') -2026-03-16 19:57:05,468 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 19:57:05,468 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 20:02:05,642 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 7878113600320300010041040000000000199e7a0d0a -2026-03-16 20:02:05,642 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 20:02:05,642 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 20:02:05,642 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 20:02:05,642 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 20:02:05,642 INFO sqlalchemy.engine.Engine [cached since 6011s ago] ('868120334031363',) -2026-03-16 20:02:05,642 - sqlalchemy.engine.Engine - INFO - [cached since 6011s ago] ('868120334031363',) -2026-03-16 20:02:05,643 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 20:02:05,643 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 20:02:05,643 INFO sqlalchemy.engine.Engine [cached since 6011s ago] (50, 3, '2026-03-16 20:02:05.642605', '2026-03-16 20:02:05.643486', 1) -2026-03-16 20:02:05,643 - sqlalchemy.engine.Engine - INFO - [cached since 6011s ago] (50, 3, '2026-03-16 20:02:05.642605', '2026-03-16 20:02:05.643486', 1) -2026-03-16 20:02:05,643 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 20:02:05,643 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 20:02:05,643 INFO sqlalchemy.engine.Engine [cached since 6011s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 20:02:05.643913') -2026-03-16 20:02:05,643 - sqlalchemy.engine.Engine - INFO - [cached since 6011s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 20:02:05.643913') -2026-03-16 20:02:05,644 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 20:02:05,644 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 20:07:05,763 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000001aace10d0a -2026-03-16 20:07:05,764 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 20:07:05,764 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 20:07:05,765 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 20:07:05,765 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 20:07:05,765 INFO sqlalchemy.engine.Engine [cached since 6311s ago] ('868120334031363',) -2026-03-16 20:07:05,765 - sqlalchemy.engine.Engine - INFO - [cached since 6311s ago] ('868120334031363',) -2026-03-16 20:07:05,767 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 20:07:05,767 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 20:07:05,767 INFO sqlalchemy.engine.Engine [cached since 6311s ago] (50, 3, '2026-03-16 20:07:05.764069', '2026-03-16 20:07:05.767453', 1) -2026-03-16 20:07:05,767 - sqlalchemy.engine.Engine - INFO - [cached since 6311s ago] (50, 3, '2026-03-16 20:07:05.764069', '2026-03-16 20:07:05.767453', 1) -2026-03-16 20:07:05,769 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 20:07:05,769 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 20:07:05,769 INFO sqlalchemy.engine.Engine [cached since 6311s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 20:07:05.769289') -2026-03-16 20:07:05,769 - sqlalchemy.engine.Engine - INFO - [cached since 6311s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 20:07:05.769289') -2026-03-16 20:07:05,770 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 20:07:05,770 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 20:12:06,567 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000001bbd680d0a -2026-03-16 20:12:06,568 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 20:12:06,568 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 20:12:06,569 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 20:12:06,569 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 20:12:06,569 INFO sqlalchemy.engine.Engine [cached since 6612s ago] ('868120334031363',) -2026-03-16 20:12:06,569 - sqlalchemy.engine.Engine - INFO - [cached since 6612s ago] ('868120334031363',) -2026-03-16 20:12:06,573 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 20:12:06,573 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 20:12:06,573 INFO sqlalchemy.engine.Engine [cached since 6612s ago] (50, 3, '2026-03-16 20:12:06.567979', '2026-03-16 20:12:06.573019', 1) -2026-03-16 20:12:06,573 - sqlalchemy.engine.Engine - INFO - [cached since 6612s ago] (50, 3, '2026-03-16 20:12:06.567979', '2026-03-16 20:12:06.573019', 1) -2026-03-16 20:12:06,575 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 20:12:06,575 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 20:12:06,575 INFO sqlalchemy.engine.Engine [cached since 6612s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 20:12:06.575081') -2026-03-16 20:12:06,575 - sqlalchemy.engine.Engine - INFO - [cached since 6612s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 20:12:06.575081') -2026-03-16 20:12:06,576 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 20:12:06,576 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 20:17:06,099 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000001cc9d70d0a -2026-03-16 20:17:06,100 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 20:17:06,100 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 20:17:06,100 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 20:17:06,100 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 20:17:06,100 INFO sqlalchemy.engine.Engine [cached since 6912s ago] ('868120334031363',) -2026-03-16 20:17:06,100 - sqlalchemy.engine.Engine - INFO - [cached since 6912s ago] ('868120334031363',) -2026-03-16 20:17:06,102 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 20:17:06,102 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 20:17:06,102 INFO sqlalchemy.engine.Engine [cached since 6912s ago] (50, 3, '2026-03-16 20:17:06.099435', '2026-03-16 20:17:06.102660', 1) -2026-03-16 20:17:06,102 - sqlalchemy.engine.Engine - INFO - [cached since 6912s ago] (50, 3, '2026-03-16 20:17:06.099435', '2026-03-16 20:17:06.102660', 1) -2026-03-16 20:17:06,105 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 20:17:06,105 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 20:17:06,105 INFO sqlalchemy.engine.Engine [cached since 6912s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 20:17:06.105107') -2026-03-16 20:17:06,105 - sqlalchemy.engine.Engine - INFO - [cached since 6912s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 20:17:06.105107') -2026-03-16 20:17:06,106 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 20:17:06,106 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 20:19:05,370 - app.tcp_server - INFO - New TCP connection from 127.0.0.1:42168 -2026-03-16 20:19:07,449 - app.tcp_server - INFO - Received 398 bytes from 127.0.0.1:42168 (IMEI=None): 160301018901000185030369b8e44524355f90ed37e96bf12b38d37a3f291804f31ebd7db96a97d751f91f000114cca8cca9 -2026-03-16 20:19:38,784 - app.tcp_server - INFO - Connection closed by remote 127.0.0.1:42168 (IMEI=None) -2026-03-16 20:22:07,620 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000001dd85e0d0a -2026-03-16 20:22:07,621 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 20:22:07,621 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 20:22:07,622 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 20:22:07,622 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 20:22:07,622 INFO sqlalchemy.engine.Engine [cached since 7213s ago] ('868120334031363',) -2026-03-16 20:22:07,622 - sqlalchemy.engine.Engine - INFO - [cached since 7213s ago] ('868120334031363',) -2026-03-16 20:22:07,624 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 20:22:07,624 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 20:22:07,624 INFO sqlalchemy.engine.Engine [cached since 7213s ago] (50, 3, '2026-03-16 20:22:07.620819', '2026-03-16 20:22:07.624642', 1) -2026-03-16 20:22:07,624 - sqlalchemy.engine.Engine - INFO - [cached since 7213s ago] (50, 3, '2026-03-16 20:22:07.620819', '2026-03-16 20:22:07.624642', 1) -2026-03-16 20:22:07,626 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 20:22:07,626 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 20:22:07,626 INFO sqlalchemy.engine.Engine [cached since 7213s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 20:22:07.626586') -2026-03-16 20:22:07,626 - sqlalchemy.engine.Engine - INFO - [cached since 7213s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 20:22:07.626586') -2026-03-16 20:22:07,627 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 20:22:07,627 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 20:27:07,535 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000001eeac50d0a -2026-03-16 20:27:07,536 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 20:27:07,536 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 20:27:07,536 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 20:27:07,536 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 20:27:07,536 INFO sqlalchemy.engine.Engine [cached since 7513s ago] ('868120334031363',) -2026-03-16 20:27:07,536 - sqlalchemy.engine.Engine - INFO - [cached since 7513s ago] ('868120334031363',) -2026-03-16 20:27:07,539 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 20:27:07,539 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 20:27:07,539 INFO sqlalchemy.engine.Engine [cached since 7513s ago] (50, 3, '2026-03-16 20:27:07.535579', '2026-03-16 20:27:07.539327', 1) -2026-03-16 20:27:07,539 - sqlalchemy.engine.Engine - INFO - [cached since 7513s ago] (50, 3, '2026-03-16 20:27:07.535579', '2026-03-16 20:27:07.539327', 1) -2026-03-16 20:27:07,541 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 20:27:07,541 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 20:27:07,541 INFO sqlalchemy.engine.Engine [cached since 7513s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 20:27:07.541259') -2026-03-16 20:27:07,541 - sqlalchemy.engine.Engine - INFO - [cached since 7513s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 20:27:07.541259') -2026-03-16 20:27:07,542 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 20:27:07,542 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 20:32:08,669 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000001ffb4c0d0a -2026-03-16 20:32:08,670 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 20:32:08,670 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 20:32:08,671 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 20:32:08,671 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 20:32:08,671 INFO sqlalchemy.engine.Engine [cached since 7814s ago] ('868120334031363',) -2026-03-16 20:32:08,671 - sqlalchemy.engine.Engine - INFO - [cached since 7814s ago] ('868120334031363',) -2026-03-16 20:32:08,673 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 20:32:08,673 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 20:32:08,674 INFO sqlalchemy.engine.Engine [cached since 7814s ago] (50, 3, '2026-03-16 20:32:08.670029', '2026-03-16 20:32:08.673729', 1) -2026-03-16 20:32:08,674 - sqlalchemy.engine.Engine - INFO - [cached since 7814s ago] (50, 3, '2026-03-16 20:32:08.670029', '2026-03-16 20:32:08.673729', 1) -2026-03-16 20:32:08,677 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 20:32:08,677 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 20:32:08,677 INFO sqlalchemy.engine.Engine [cached since 7814s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 20:32:08.677195') -2026-03-16 20:32:08,677 - sqlalchemy.engine.Engine - INFO - [cached since 7814s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 20:32:08.677195') -2026-03-16 20:32:08,679 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 20:32:08,679 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 20:37:08,178 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000002032380d0a -2026-03-16 20:37:08,179 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 20:37:08,179 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 20:37:08,180 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 20:37:08,180 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 20:37:08,180 INFO sqlalchemy.engine.Engine [cached since 8114s ago] ('868120334031363',) -2026-03-16 20:37:08,180 - sqlalchemy.engine.Engine - INFO - [cached since 8114s ago] ('868120334031363',) -2026-03-16 20:37:08,184 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 20:37:08,184 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 20:37:08,185 INFO sqlalchemy.engine.Engine [cached since 8114s ago] (50, 3, '2026-03-16 20:37:08.179067', '2026-03-16 20:37:08.184794', 1) -2026-03-16 20:37:08,185 - sqlalchemy.engine.Engine - INFO - [cached since 8114s ago] (50, 3, '2026-03-16 20:37:08.179067', '2026-03-16 20:37:08.184794', 1) -2026-03-16 20:37:08,188 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 20:37:08,188 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 20:37:08,189 INFO sqlalchemy.engine.Engine [cached since 8114s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 20:37:08.188657') -2026-03-16 20:37:08,189 - sqlalchemy.engine.Engine - INFO - [cached since 8114s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 20:37:08.188657') -2026-03-16 20:37:08,190 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 20:37:08,190 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 20:42:08,660 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000002123b10d0a -2026-03-16 20:42:08,661 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 20:42:08,661 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 20:42:08,661 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 20:42:08,661 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 20:42:08,661 INFO sqlalchemy.engine.Engine [cached since 8414s ago] ('868120334031363',) -2026-03-16 20:42:08,661 - sqlalchemy.engine.Engine - INFO - [cached since 8414s ago] ('868120334031363',) -2026-03-16 20:42:08,663 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 20:42:08,663 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 20:42:08,663 INFO sqlalchemy.engine.Engine [cached since 8414s ago] (50, 3, '2026-03-16 20:42:08.660712', '2026-03-16 20:42:08.663490', 1) -2026-03-16 20:42:08,663 - sqlalchemy.engine.Engine - INFO - [cached since 8414s ago] (50, 3, '2026-03-16 20:42:08.660712', '2026-03-16 20:42:08.663490', 1) -2026-03-16 20:42:08,666 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 20:42:08,666 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 20:42:08,666 INFO sqlalchemy.engine.Engine [cached since 8414s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 20:42:08.666061') -2026-03-16 20:42:08,666 - sqlalchemy.engine.Engine - INFO - [cached since 8414s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 20:42:08.666061') -2026-03-16 20:42:08,667 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 20:42:08,667 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 20:47:10,262 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 787811360032030001004104000000000022112a0d0a -2026-03-16 20:47:10,263 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 20:47:10,263 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 20:47:10,264 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 20:47:10,264 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 20:47:10,264 INFO sqlalchemy.engine.Engine [cached since 8716s ago] ('868120334031363',) -2026-03-16 20:47:10,264 - sqlalchemy.engine.Engine - INFO - [cached since 8716s ago] ('868120334031363',) -2026-03-16 20:47:10,267 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 20:47:10,267 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 20:47:10,268 INFO sqlalchemy.engine.Engine [cached since 8716s ago] (50, 3, '2026-03-16 20:47:10.263124', '2026-03-16 20:47:10.267866', 1) -2026-03-16 20:47:10,268 - sqlalchemy.engine.Engine - INFO - [cached since 8716s ago] (50, 3, '2026-03-16 20:47:10.263124', '2026-03-16 20:47:10.267866', 1) -2026-03-16 20:47:10,270 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 20:47:10,270 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 20:47:10,271 INFO sqlalchemy.engine.Engine [cached since 8716s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 20:47:10.270784') -2026-03-16 20:47:10,271 - sqlalchemy.engine.Engine - INFO - [cached since 8716s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 20:47:10.270784') -2026-03-16 20:47:10,271 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 20:47:10,271 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 20:52:10,599 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000002300a30d0a -2026-03-16 20:52:10,600 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 20:52:10,600 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 20:52:10,600 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 20:52:10,600 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 20:52:10,600 INFO sqlalchemy.engine.Engine [cached since 9016s ago] ('868120334031363',) -2026-03-16 20:52:10,600 - sqlalchemy.engine.Engine - INFO - [cached since 9016s ago] ('868120334031363',) -2026-03-16 20:52:10,602 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 20:52:10,602 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 20:52:10,603 INFO sqlalchemy.engine.Engine [cached since 9016s ago] (50, 3, '2026-03-16 20:52:10.599495', '2026-03-16 20:52:10.602818', 1) -2026-03-16 20:52:10,603 - sqlalchemy.engine.Engine - INFO - [cached since 9016s ago] (50, 3, '2026-03-16 20:52:10.599495', '2026-03-16 20:52:10.602818', 1) -2026-03-16 20:52:10,604 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 20:52:10,604 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 20:52:10,605 INFO sqlalchemy.engine.Engine [cached since 9016s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 20:52:10.604806') -2026-03-16 20:52:10,605 - sqlalchemy.engine.Engine - INFO - [cached since 9016s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 20:52:10.604806') -2026-03-16 20:52:10,605 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 20:52:10,605 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 20:57:11,146 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 787811360032030001004104000000000024741c0d0a -2026-03-16 20:57:11,146 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 20:57:11,146 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 20:57:11,146 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 20:57:11,146 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 20:57:11,146 INFO sqlalchemy.engine.Engine [cached since 9317s ago] ('868120334031363',) -2026-03-16 20:57:11,146 - sqlalchemy.engine.Engine - INFO - [cached since 9317s ago] ('868120334031363',) -2026-03-16 20:57:11,147 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 20:57:11,147 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 20:57:11,147 INFO sqlalchemy.engine.Engine [cached since 9317s ago] (50, 3, '2026-03-16 20:57:11.146419', '2026-03-16 20:57:11.147363', 1) -2026-03-16 20:57:11,147 - sqlalchemy.engine.Engine - INFO - [cached since 9317s ago] (50, 3, '2026-03-16 20:57:11.146419', '2026-03-16 20:57:11.147363', 1) -2026-03-16 20:57:11,147 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 20:57:11,147 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 20:57:11,147 INFO sqlalchemy.engine.Engine [cached since 9317s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 20:57:11.147785') -2026-03-16 20:57:11,147 - sqlalchemy.engine.Engine - INFO - [cached since 9317s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 20:57:11.147785') -2026-03-16 20:57:11,148 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 20:57:11,148 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 21:02:11,604 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000002565950d0a -2026-03-16 21:02:11,605 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 21:02:11,605 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 21:02:11,605 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 21:02:11,605 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 21:02:11,605 INFO sqlalchemy.engine.Engine [cached since 9617s ago] ('868120334031363',) -2026-03-16 21:02:11,605 - sqlalchemy.engine.Engine - INFO - [cached since 9617s ago] ('868120334031363',) -2026-03-16 21:02:11,608 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 21:02:11,608 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 21:02:11,608 INFO sqlalchemy.engine.Engine [cached since 9617s ago] (50, 3, '2026-03-16 21:02:11.604570', '2026-03-16 21:02:11.608006', 1) -2026-03-16 21:02:11,608 - sqlalchemy.engine.Engine - INFO - [cached since 9617s ago] (50, 3, '2026-03-16 21:02:11.604570', '2026-03-16 21:02:11.608006', 1) -2026-03-16 21:02:11,609 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 21:02:11,609 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 21:02:11,609 INFO sqlalchemy.engine.Engine [cached since 9617s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 21:02:11.609682') -2026-03-16 21:02:11,609 - sqlalchemy.engine.Engine - INFO - [cached since 9617s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 21:02:11.609682') -2026-03-16 21:02:11,609 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 21:02:11,609 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 21:07:11,053 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 787811360032030001004104000000000026570e0d0a -2026-03-16 21:07:11,054 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 21:07:11,054 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 21:07:11,054 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 21:07:11,054 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 21:07:11,054 INFO sqlalchemy.engine.Engine [cached since 9917s ago] ('868120334031363',) -2026-03-16 21:07:11,054 - sqlalchemy.engine.Engine - INFO - [cached since 9917s ago] ('868120334031363',) -2026-03-16 21:07:11,056 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 21:07:11,056 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 21:07:11,057 INFO sqlalchemy.engine.Engine [cached since 9917s ago] (50, 3, '2026-03-16 21:07:11.053562', '2026-03-16 21:07:11.056905', 1) -2026-03-16 21:07:11,057 - sqlalchemy.engine.Engine - INFO - [cached since 9917s ago] (50, 3, '2026-03-16 21:07:11.053562', '2026-03-16 21:07:11.056905', 1) -2026-03-16 21:07:11,058 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 21:07:11,058 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 21:07:11,059 INFO sqlalchemy.engine.Engine [cached since 9917s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 21:07:11.058785') -2026-03-16 21:07:11,059 - sqlalchemy.engine.Engine - INFO - [cached since 9917s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 21:07:11.058785') -2026-03-16 21:07:11,059 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 21:07:11,059 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 21:12:12,379 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000002746870d0a -2026-03-16 21:12:12,380 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 21:12:12,380 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 21:12:12,380 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 21:12:12,380 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 21:12:12,380 INFO sqlalchemy.engine.Engine [cached since 1.022e+04s ago] ('868120334031363',) -2026-03-16 21:12:12,380 - sqlalchemy.engine.Engine - INFO - [cached since 1.022e+04s ago] ('868120334031363',) -2026-03-16 21:12:12,384 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 21:12:12,384 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 21:12:12,384 INFO sqlalchemy.engine.Engine [cached since 1.022e+04s ago] (50, 3, '2026-03-16 21:12:12.379542', '2026-03-16 21:12:12.384615', 1) -2026-03-16 21:12:12,384 - sqlalchemy.engine.Engine - INFO - [cached since 1.022e+04s ago] (50, 3, '2026-03-16 21:12:12.379542', '2026-03-16 21:12:12.384615', 1) -2026-03-16 21:12:12,388 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 21:12:12,388 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 21:12:12,388 INFO sqlalchemy.engine.Engine [cached since 1.022e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 21:12:12.387994') -2026-03-16 21:12:12,388 - sqlalchemy.engine.Engine - INFO - [cached since 1.022e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 21:12:12.387994') -2026-03-16 21:12:12,390 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 21:12:12,390 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 21:17:12,473 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 787811360032030001004104000000000028be700d0a -2026-03-16 21:17:12,474 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 21:17:12,474 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 21:17:12,474 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 21:17:12,474 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 21:17:12,474 INFO sqlalchemy.engine.Engine [cached since 1.052e+04s ago] ('868120334031363',) -2026-03-16 21:17:12,474 - sqlalchemy.engine.Engine - INFO - [cached since 1.052e+04s ago] ('868120334031363',) -2026-03-16 21:17:12,476 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 21:17:12,476 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 21:17:12,477 INFO sqlalchemy.engine.Engine [cached since 1.052e+04s ago] (50, 3, '2026-03-16 21:17:12.473636', '2026-03-16 21:17:12.476794', 1) -2026-03-16 21:17:12,477 - sqlalchemy.engine.Engine - INFO - [cached since 1.052e+04s ago] (50, 3, '2026-03-16 21:17:12.473636', '2026-03-16 21:17:12.476794', 1) -2026-03-16 21:17:12,478 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 21:17:12,478 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 21:17:12,478 INFO sqlalchemy.engine.Engine [cached since 1.052e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 21:17:12.478538') -2026-03-16 21:17:12,478 - sqlalchemy.engine.Engine - INFO - [cached since 1.052e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 21:17:12.478538') -2026-03-16 21:17:12,479 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 21:17:12,479 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 21:22:12,543 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 787811360032030001004104000000000029aff90d0a -2026-03-16 21:22:12,543 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 21:22:12,543 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 21:22:12,543 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 21:22:12,543 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 21:22:12,543 INFO sqlalchemy.engine.Engine [cached since 1.082e+04s ago] ('868120334031363',) -2026-03-16 21:22:12,543 - sqlalchemy.engine.Engine - INFO - [cached since 1.082e+04s ago] ('868120334031363',) -2026-03-16 21:22:12,544 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 21:22:12,544 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 21:22:12,544 INFO sqlalchemy.engine.Engine [cached since 1.082e+04s ago] (50, 3, '2026-03-16 21:22:12.543394', '2026-03-16 21:22:12.544769', 1) -2026-03-16 21:22:12,544 - sqlalchemy.engine.Engine - INFO - [cached since 1.082e+04s ago] (50, 3, '2026-03-16 21:22:12.543394', '2026-03-16 21:22:12.544769', 1) -2026-03-16 21:22:12,545 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 21:22:12,545 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 21:22:12,545 INFO sqlalchemy.engine.Engine [cached since 1.082e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 21:22:12.545428') -2026-03-16 21:22:12,545 - sqlalchemy.engine.Engine - INFO - [cached since 1.082e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 21:22:12.545428') -2026-03-16 21:22:12,545 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 21:22:12,545 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 21:27:12,872 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000002a9d620d0a -2026-03-16 21:27:12,872 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 21:27:12,872 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 21:27:12,872 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 21:27:12,872 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 21:27:12,872 INFO sqlalchemy.engine.Engine [cached since 1.112e+04s ago] ('868120334031363',) -2026-03-16 21:27:12,872 - sqlalchemy.engine.Engine - INFO - [cached since 1.112e+04s ago] ('868120334031363',) -2026-03-16 21:27:12,873 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 21:27:12,873 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 21:27:12,873 INFO sqlalchemy.engine.Engine [cached since 1.112e+04s ago] (50, 3, '2026-03-16 21:27:12.872183', '2026-03-16 21:27:12.873435', 1) -2026-03-16 21:27:12,873 - sqlalchemy.engine.Engine - INFO - [cached since 1.112e+04s ago] (50, 3, '2026-03-16 21:27:12.872183', '2026-03-16 21:27:12.873435', 1) -2026-03-16 21:27:12,874 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 21:27:12,874 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 21:27:12,874 INFO sqlalchemy.engine.Engine [cached since 1.112e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 21:27:12.874253') -2026-03-16 21:27:12,874 - sqlalchemy.engine.Engine - INFO - [cached since 1.112e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 21:27:12.874253') -2026-03-16 21:27:12,874 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 21:27:12,874 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 21:32:14,575 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000002b8ceb0d0a -2026-03-16 21:32:14,576 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 21:32:14,576 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 21:32:14,577 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 21:32:14,577 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 21:32:14,577 INFO sqlalchemy.engine.Engine [cached since 1.142e+04s ago] ('868120334031363',) -2026-03-16 21:32:14,577 - sqlalchemy.engine.Engine - INFO - [cached since 1.142e+04s ago] ('868120334031363',) -2026-03-16 21:32:14,581 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 21:32:14,581 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 21:32:14,581 INFO sqlalchemy.engine.Engine [cached since 1.142e+04s ago] (50, 3, '2026-03-16 21:32:14.575990', '2026-03-16 21:32:14.581004', 1) -2026-03-16 21:32:14,581 - sqlalchemy.engine.Engine - INFO - [cached since 1.142e+04s ago] (50, 3, '2026-03-16 21:32:14.575990', '2026-03-16 21:32:14.581004', 1) -2026-03-16 21:32:14,583 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 21:32:14,583 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 21:32:14,584 INFO sqlalchemy.engine.Engine [cached since 1.142e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 21:32:14.583830') -2026-03-16 21:32:14,584 - sqlalchemy.engine.Engine - INFO - [cached since 1.142e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 21:32:14.583830') -2026-03-16 21:32:14,584 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 21:32:14,584 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 21:37:15,076 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000002cf8540d0a -2026-03-16 21:37:15,077 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 21:37:15,077 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 21:37:15,078 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 21:37:15,078 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 21:37:15,078 INFO sqlalchemy.engine.Engine [cached since 1.172e+04s ago] ('868120334031363',) -2026-03-16 21:37:15,078 - sqlalchemy.engine.Engine - INFO - [cached since 1.172e+04s ago] ('868120334031363',) -2026-03-16 21:37:15,080 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 21:37:15,080 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 21:37:15,080 INFO sqlalchemy.engine.Engine [cached since 1.172e+04s ago] (50, 3, '2026-03-16 21:37:15.077037', '2026-03-16 21:37:15.080328', 1) -2026-03-16 21:37:15,080 - sqlalchemy.engine.Engine - INFO - [cached since 1.172e+04s ago] (50, 3, '2026-03-16 21:37:15.077037', '2026-03-16 21:37:15.080328', 1) -2026-03-16 21:37:15,082 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 21:37:15,082 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 21:37:15,082 INFO sqlalchemy.engine.Engine [cached since 1.172e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 21:37:15.082186') -2026-03-16 21:37:15,082 - sqlalchemy.engine.Engine - INFO - [cached since 1.172e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 21:37:15.082186') -2026-03-16 21:37:15,083 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 21:37:15,083 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 21:42:14,469 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000002de9dd0d0a -2026-03-16 21:42:14,470 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 21:42:14,470 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 21:42:14,470 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 21:42:14,470 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 21:42:14,470 INFO sqlalchemy.engine.Engine [cached since 1.202e+04s ago] ('868120334031363',) -2026-03-16 21:42:14,470 - sqlalchemy.engine.Engine - INFO - [cached since 1.202e+04s ago] ('868120334031363',) -2026-03-16 21:42:14,472 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 21:42:14,472 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 21:42:14,473 INFO sqlalchemy.engine.Engine [cached since 1.202e+04s ago] (50, 3, '2026-03-16 21:42:14.469639', '2026-03-16 21:42:14.472918', 1) -2026-03-16 21:42:14,473 - sqlalchemy.engine.Engine - INFO - [cached since 1.202e+04s ago] (50, 3, '2026-03-16 21:42:14.469639', '2026-03-16 21:42:14.472918', 1) -2026-03-16 21:42:14,474 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 21:42:14,474 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 21:42:14,474 INFO sqlalchemy.engine.Engine [cached since 1.202e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 21:42:14.474737') -2026-03-16 21:42:14,474 - sqlalchemy.engine.Engine - INFO - [cached since 1.202e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 21:42:14.474737') -2026-03-16 21:42:14,475 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 21:42:14,475 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 21:47:16,006 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000002edb460d0a -2026-03-16 21:47:16,007 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 21:47:16,007 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 21:47:16,008 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 21:47:16,008 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 21:47:16,008 INFO sqlalchemy.engine.Engine [cached since 1.232e+04s ago] ('868120334031363',) -2026-03-16 21:47:16,008 - sqlalchemy.engine.Engine - INFO - [cached since 1.232e+04s ago] ('868120334031363',) -2026-03-16 21:47:16,010 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 21:47:16,010 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 21:47:16,010 INFO sqlalchemy.engine.Engine [cached since 1.232e+04s ago] (50, 3, '2026-03-16 21:47:16.006921', '2026-03-16 21:47:16.010200', 1) -2026-03-16 21:47:16,010 - sqlalchemy.engine.Engine - INFO - [cached since 1.232e+04s ago] (50, 3, '2026-03-16 21:47:16.006921', '2026-03-16 21:47:16.010200', 1) -2026-03-16 21:47:16,012 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 21:47:16,012 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 21:47:16,012 INFO sqlalchemy.engine.Engine [cached since 1.232e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 21:47:16.012201') -2026-03-16 21:47:16,012 - sqlalchemy.engine.Engine - INFO - [cached since 1.232e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 21:47:16.012201') -2026-03-16 21:47:16,013 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 21:47:16,013 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 21:52:15,322 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000002fcacf0d0a -2026-03-16 21:52:15,323 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 21:52:15,323 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 21:52:15,323 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 21:52:15,323 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 21:52:15,323 INFO sqlalchemy.engine.Engine [cached since 1.262e+04s ago] ('868120334031363',) -2026-03-16 21:52:15,323 - sqlalchemy.engine.Engine - INFO - [cached since 1.262e+04s ago] ('868120334031363',) -2026-03-16 21:52:15,325 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 21:52:15,325 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 21:52:15,325 INFO sqlalchemy.engine.Engine [cached since 1.262e+04s ago] (50, 3, '2026-03-16 21:52:15.322389', '2026-03-16 21:52:15.325648', 1) -2026-03-16 21:52:15,325 - sqlalchemy.engine.Engine - INFO - [cached since 1.262e+04s ago] (50, 3, '2026-03-16 21:52:15.322389', '2026-03-16 21:52:15.325648', 1) -2026-03-16 21:52:15,327 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 21:52:15,327 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 21:52:15,328 INFO sqlalchemy.engine.Engine [cached since 1.262e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 21:52:15.327823') -2026-03-16 21:52:15,328 - sqlalchemy.engine.Engine - INFO - [cached since 1.262e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 21:52:15.327823') -2026-03-16 21:52:15,329 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 21:52:15,329 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 21:57:16,836 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000003022b90d0a -2026-03-16 21:57:16,837 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 21:57:16,837 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 21:57:16,838 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 21:57:16,838 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 21:57:16,838 INFO sqlalchemy.engine.Engine [cached since 1.292e+04s ago] ('868120334031363',) -2026-03-16 21:57:16,838 - sqlalchemy.engine.Engine - INFO - [cached since 1.292e+04s ago] ('868120334031363',) -2026-03-16 21:57:16,840 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 21:57:16,840 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 21:57:16,840 INFO sqlalchemy.engine.Engine [cached since 1.292e+04s ago] (50, 3, '2026-03-16 21:57:16.837116', '2026-03-16 21:57:16.840454', 1) -2026-03-16 21:57:16,840 - sqlalchemy.engine.Engine - INFO - [cached since 1.292e+04s ago] (50, 3, '2026-03-16 21:57:16.837116', '2026-03-16 21:57:16.840454', 1) -2026-03-16 21:57:16,842 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 21:57:16,842 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 21:57:16,842 INFO sqlalchemy.engine.Engine [cached since 1.292e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 21:57:16.842268') -2026-03-16 21:57:16,842 - sqlalchemy.engine.Engine - INFO - [cached since 1.292e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 21:57:16.842268') -2026-03-16 21:57:16,843 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 21:57:16,843 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 22:02:16,478 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000003133300d0a -2026-03-16 22:02:16,479 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 22:02:16,479 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 22:02:16,479 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 22:02:16,479 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 22:02:16,479 INFO sqlalchemy.engine.Engine [cached since 1.322e+04s ago] ('868120334031363',) -2026-03-16 22:02:16,479 - sqlalchemy.engine.Engine - INFO - [cached since 1.322e+04s ago] ('868120334031363',) -2026-03-16 22:02:16,481 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 22:02:16,481 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 22:02:16,482 INFO sqlalchemy.engine.Engine [cached since 1.322e+04s ago] (50, 3, '2026-03-16 22:02:16.478586', '2026-03-16 22:02:16.481880', 1) -2026-03-16 22:02:16,482 - sqlalchemy.engine.Engine - INFO - [cached since 1.322e+04s ago] (50, 3, '2026-03-16 22:02:16.478586', '2026-03-16 22:02:16.481880', 1) -2026-03-16 22:02:16,483 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 22:02:16,483 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 22:02:16,484 INFO sqlalchemy.engine.Engine [cached since 1.322e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 22:02:16.483805') -2026-03-16 22:02:16,484 - sqlalchemy.engine.Engine - INFO - [cached since 1.322e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 22:02:16.483805') -2026-03-16 22:02:16,484 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 22:02:16,484 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 22:07:18,005 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000003201ab0d0a -2026-03-16 22:07:18,006 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 22:07:18,006 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 22:07:18,007 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 22:07:18,007 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 22:07:18,007 INFO sqlalchemy.engine.Engine [cached since 1.352e+04s ago] ('868120334031363',) -2026-03-16 22:07:18,007 - sqlalchemy.engine.Engine - INFO - [cached since 1.352e+04s ago] ('868120334031363',) -2026-03-16 22:07:18,009 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 22:07:18,009 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 22:07:18,009 INFO sqlalchemy.engine.Engine [cached since 1.352e+04s ago] (50, 3, '2026-03-16 22:07:18.005945', '2026-03-16 22:07:18.009170', 1) -2026-03-16 22:07:18,009 - sqlalchemy.engine.Engine - INFO - [cached since 1.352e+04s ago] (50, 3, '2026-03-16 22:07:18.005945', '2026-03-16 22:07:18.009170', 1) -2026-03-16 22:07:18,011 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 22:07:18,011 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 22:07:18,011 INFO sqlalchemy.engine.Engine [cached since 1.352e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 22:07:18.010954') -2026-03-16 22:07:18,011 - sqlalchemy.engine.Engine - INFO - [cached since 1.352e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 22:07:18.010954') -2026-03-16 22:07:18,012 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 22:07:18,012 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 22:12:17,766 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000003310220d0a -2026-03-16 22:12:17,766 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 22:12:17,766 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 22:12:17,767 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 22:12:17,767 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 22:12:17,767 INFO sqlalchemy.engine.Engine [cached since 1.382e+04s ago] ('868120334031363',) -2026-03-16 22:12:17,767 - sqlalchemy.engine.Engine - INFO - [cached since 1.382e+04s ago] ('868120334031363',) -2026-03-16 22:12:17,769 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 22:12:17,769 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 22:12:17,769 INFO sqlalchemy.engine.Engine [cached since 1.382e+04s ago] (50, 3, '2026-03-16 22:12:17.766217', '2026-03-16 22:12:17.769405', 1) -2026-03-16 22:12:17,769 - sqlalchemy.engine.Engine - INFO - [cached since 1.382e+04s ago] (50, 3, '2026-03-16 22:12:17.766217', '2026-03-16 22:12:17.769405', 1) -2026-03-16 22:12:17,771 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 22:12:17,771 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 22:12:17,771 INFO sqlalchemy.engine.Engine [cached since 1.382e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 22:12:17.771174') -2026-03-16 22:12:17,771 - sqlalchemy.engine.Engine - INFO - [cached since 1.382e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 22:12:17.771174') -2026-03-16 22:12:17,772 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 22:12:17,772 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 22:17:17,741 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 787811360032030001004104000000000034649d0d0a -2026-03-16 22:17:17,742 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 22:17:17,742 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 22:17:17,743 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 22:17:17,743 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 22:17:17,743 INFO sqlalchemy.engine.Engine [cached since 1.412e+04s ago] ('868120334031363',) -2026-03-16 22:17:17,743 - sqlalchemy.engine.Engine - INFO - [cached since 1.412e+04s ago] ('868120334031363',) -2026-03-16 22:17:17,747 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 22:17:17,747 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 22:17:17,747 INFO sqlalchemy.engine.Engine [cached since 1.412e+04s ago] (50, 3, '2026-03-16 22:17:17.742104', '2026-03-16 22:17:17.746986', 1) -2026-03-16 22:17:17,747 - sqlalchemy.engine.Engine - INFO - [cached since 1.412e+04s ago] (50, 3, '2026-03-16 22:17:17.742104', '2026-03-16 22:17:17.746986', 1) -2026-03-16 22:17:17,750 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 22:17:17,750 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 22:17:17,751 INFO sqlalchemy.engine.Engine [cached since 1.412e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 22:17:17.750683') -2026-03-16 22:17:17,751 - sqlalchemy.engine.Engine - INFO - [cached since 1.412e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 22:17:17.750683') -2026-03-16 22:17:17,752 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 22:17:17,752 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 22:22:19,683 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000003575140d0a -2026-03-16 22:22:19,684 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 22:22:19,684 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 22:22:19,684 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 22:22:19,684 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 22:22:19,684 INFO sqlalchemy.engine.Engine [cached since 1.443e+04s ago] ('868120334031363',) -2026-03-16 22:22:19,684 - sqlalchemy.engine.Engine - INFO - [cached since 1.443e+04s ago] ('868120334031363',) -2026-03-16 22:22:19,686 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 22:22:19,686 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 22:22:19,686 INFO sqlalchemy.engine.Engine [cached since 1.443e+04s ago] (50, 3, '2026-03-16 22:22:19.683425', '2026-03-16 22:22:19.686733', 1) -2026-03-16 22:22:19,686 - sqlalchemy.engine.Engine - INFO - [cached since 1.443e+04s ago] (50, 3, '2026-03-16 22:22:19.683425', '2026-03-16 22:22:19.686733', 1) -2026-03-16 22:22:19,688 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 22:22:19,688 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 22:22:19,688 INFO sqlalchemy.engine.Engine [cached since 1.443e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 22:22:19.688559') -2026-03-16 22:22:19,688 - sqlalchemy.engine.Engine - INFO - [cached since 1.443e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 22:22:19.688559') -2026-03-16 22:22:19,689 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 22:22:19,689 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 22:27:19,528 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 787811360032030001004104000000000036478f0d0a -2026-03-16 22:27:19,529 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 22:27:19,529 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 22:27:19,530 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 22:27:19,530 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 22:27:19,530 INFO sqlalchemy.engine.Engine [cached since 1.473e+04s ago] ('868120334031363',) -2026-03-16 22:27:19,530 - sqlalchemy.engine.Engine - INFO - [cached since 1.473e+04s ago] ('868120334031363',) -2026-03-16 22:27:19,532 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 22:27:19,532 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 22:27:19,532 INFO sqlalchemy.engine.Engine [cached since 1.473e+04s ago] (50, 3, '2026-03-16 22:27:19.528806', '2026-03-16 22:27:19.532623', 1) -2026-03-16 22:27:19,532 - sqlalchemy.engine.Engine - INFO - [cached since 1.473e+04s ago] (50, 3, '2026-03-16 22:27:19.528806', '2026-03-16 22:27:19.532623', 1) -2026-03-16 22:27:19,534 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 22:27:19,534 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 22:27:19,534 INFO sqlalchemy.engine.Engine [cached since 1.473e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 22:27:19.534424') -2026-03-16 22:27:19,534 - sqlalchemy.engine.Engine - INFO - [cached since 1.473e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 22:27:19.534424') -2026-03-16 22:27:19,535 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 22:27:19,535 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 22:32:19,200 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000003756060d0a -2026-03-16 22:32:19,200 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 22:32:19,200 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 22:32:19,201 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 22:32:19,201 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 22:32:19,201 INFO sqlalchemy.engine.Engine [cached since 1.502e+04s ago] ('868120334031363',) -2026-03-16 22:32:19,201 - sqlalchemy.engine.Engine - INFO - [cached since 1.502e+04s ago] ('868120334031363',) -2026-03-16 22:32:19,203 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 22:32:19,203 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 22:32:19,203 INFO sqlalchemy.engine.Engine [cached since 1.502e+04s ago] (50, 3, '2026-03-16 22:32:19.200248', '2026-03-16 22:32:19.203619', 1) -2026-03-16 22:32:19,203 - sqlalchemy.engine.Engine - INFO - [cached since 1.502e+04s ago] (50, 3, '2026-03-16 22:32:19.200248', '2026-03-16 22:32:19.203619', 1) -2026-03-16 22:32:19,205 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 22:32:19,205 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 22:32:19,205 INFO sqlalchemy.engine.Engine [cached since 1.502e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 22:32:19.205418') -2026-03-16 22:32:19,205 - sqlalchemy.engine.Engine - INFO - [cached since 1.502e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 22:32:19.205418') -2026-03-16 22:32:19,206 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 22:32:19,206 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 22:37:21,020 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 787811360032030001004104000000000038aef10d0a -2026-03-16 22:37:21,021 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 22:37:21,021 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 22:37:21,021 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 22:37:21,021 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 22:37:21,021 INFO sqlalchemy.engine.Engine [cached since 1.533e+04s ago] ('868120334031363',) -2026-03-16 22:37:21,021 - sqlalchemy.engine.Engine - INFO - [cached since 1.533e+04s ago] ('868120334031363',) -2026-03-16 22:37:21,022 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 22:37:21,022 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 22:37:21,022 INFO sqlalchemy.engine.Engine [cached since 1.533e+04s ago] (50, 3, '2026-03-16 22:37:21.020869', '2026-03-16 22:37:21.022804', 1) -2026-03-16 22:37:21,022 - sqlalchemy.engine.Engine - INFO - [cached since 1.533e+04s ago] (50, 3, '2026-03-16 22:37:21.020869', '2026-03-16 22:37:21.022804', 1) -2026-03-16 22:37:21,023 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 22:37:21,023 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 22:37:21,024 INFO sqlalchemy.engine.Engine [cached since 1.533e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 22:37:21.023924') -2026-03-16 22:37:21,024 - sqlalchemy.engine.Engine - INFO - [cached since 1.533e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 22:37:21.023924') -2026-03-16 22:37:21,024 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 22:37:21,024 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 22:42:21,503 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 787811360032030001004104000000000039bf780d0a -2026-03-16 22:42:21,504 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 22:42:21,504 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 22:42:21,504 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 22:42:21,504 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 22:42:21,504 INFO sqlalchemy.engine.Engine [cached since 1.563e+04s ago] ('868120334031363',) -2026-03-16 22:42:21,504 - sqlalchemy.engine.Engine - INFO - [cached since 1.563e+04s ago] ('868120334031363',) -2026-03-16 22:42:21,506 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 22:42:21,506 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 22:42:21,507 INFO sqlalchemy.engine.Engine [cached since 1.563e+04s ago] (50, 3, '2026-03-16 22:42:21.503573', '2026-03-16 22:42:21.506915', 1) -2026-03-16 22:42:21,507 - sqlalchemy.engine.Engine - INFO - [cached since 1.563e+04s ago] (50, 3, '2026-03-16 22:42:21.503573', '2026-03-16 22:42:21.506915', 1) -2026-03-16 22:42:21,510 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 22:42:21,510 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 22:42:21,510 INFO sqlalchemy.engine.Engine [cached since 1.563e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 22:42:21.510257') -2026-03-16 22:42:21,510 - sqlalchemy.engine.Engine - INFO - [cached since 1.563e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 22:42:21.510257') -2026-03-16 22:42:21,512 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 22:42:21,512 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 22:47:21,068 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136003203000100410400000000003a8de30d0a -2026-03-16 22:47:21,069 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 22:47:21,069 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 22:47:21,070 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 22:47:21,070 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 22:47:21,070 INFO sqlalchemy.engine.Engine [cached since 1.593e+04s ago] ('868120334031363',) -2026-03-16 22:47:21,070 - sqlalchemy.engine.Engine - INFO - [cached since 1.593e+04s ago] ('868120334031363',) -2026-03-16 22:47:21,073 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 22:47:21,073 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 22:47:21,073 INFO sqlalchemy.engine.Engine [cached since 1.593e+04s ago] (50, 3, '2026-03-16 22:47:21.068785', '2026-03-16 22:47:21.073644', 1) -2026-03-16 22:47:21,073 - sqlalchemy.engine.Engine - INFO - [cached since 1.593e+04s ago] (50, 3, '2026-03-16 22:47:21.068785', '2026-03-16 22:47:21.073644', 1) -2026-03-16 22:47:21,076 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 22:47:21,076 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 22:47:21,077 INFO sqlalchemy.engine.Engine [cached since 1.593e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 22:47:21.076707') -2026-03-16 22:47:21,077 - sqlalchemy.engine.Engine - INFO - [cached since 1.593e+04s ago] (1, 54, 0, 50, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 22:47:21.076707') -2026-03-16 22:47:21,078 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 22:47:21,078 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 22:52:21,429 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136002803000100410400000000003be0880d0a -2026-03-16 22:52:21,430 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 22:52:21,430 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 22:52:21,430 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 22:52:21,430 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 22:52:21,430 INFO sqlalchemy.engine.Engine [cached since 1.623e+04s ago] ('868120334031363',) -2026-03-16 22:52:21,430 - sqlalchemy.engine.Engine - INFO - [cached since 1.623e+04s ago] ('868120334031363',) -2026-03-16 22:52:21,434 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 22:52:21,434 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 22:52:21,434 INFO sqlalchemy.engine.Engine [cached since 1.623e+04s ago] (40, 3, '2026-03-16 22:52:21.429390', '2026-03-16 22:52:21.433916', 1) -2026-03-16 22:52:21,434 - sqlalchemy.engine.Engine - INFO - [cached since 1.623e+04s ago] (40, 3, '2026-03-16 22:52:21.429390', '2026-03-16 22:52:21.433916', 1) -2026-03-16 22:52:21,436 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 22:52:21,436 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 22:52:21,437 INFO sqlalchemy.engine.Engine [cached since 1.623e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 22:52:21.436698') -2026-03-16 22:52:21,437 - sqlalchemy.engine.Engine - INFO - [cached since 1.623e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 22:52:21.436698') -2026-03-16 22:52:21,438 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 22:52:21,438 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 22:57:22,960 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136002803000100410400000000003c94370d0a -2026-03-16 22:57:22,961 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 22:57:22,961 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 22:57:22,962 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 22:57:22,962 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 22:57:22,962 INFO sqlalchemy.engine.Engine [cached since 1.653e+04s ago] ('868120334031363',) -2026-03-16 22:57:22,962 - sqlalchemy.engine.Engine - INFO - [cached since 1.653e+04s ago] ('868120334031363',) -2026-03-16 22:57:22,966 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 22:57:22,966 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 22:57:22,966 INFO sqlalchemy.engine.Engine [cached since 1.653e+04s ago] (40, 3, '2026-03-16 22:57:22.961010', '2026-03-16 22:57:22.966414', 1) -2026-03-16 22:57:22,966 - sqlalchemy.engine.Engine - INFO - [cached since 1.653e+04s ago] (40, 3, '2026-03-16 22:57:22.961010', '2026-03-16 22:57:22.966414', 1) -2026-03-16 22:57:22,970 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 22:57:22,970 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 22:57:22,970 INFO sqlalchemy.engine.Engine [cached since 1.653e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 22:57:22.969894') -2026-03-16 22:57:22,970 - sqlalchemy.engine.Engine - INFO - [cached since 1.653e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 22:57:22.969894') -2026-03-16 22:57:22,971 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 22:57:22,971 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 23:02:23,505 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136002803000100410400000000003d85be0d0a -2026-03-16 23:02:23,506 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 23:02:23,506 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 23:02:23,506 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 23:02:23,506 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 23:02:23,506 INFO sqlalchemy.engine.Engine [cached since 1.683e+04s ago] ('868120334031363',) -2026-03-16 23:02:23,506 - sqlalchemy.engine.Engine - INFO - [cached since 1.683e+04s ago] ('868120334031363',) -2026-03-16 23:02:23,507 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 23:02:23,507 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 23:02:23,507 INFO sqlalchemy.engine.Engine [cached since 1.683e+04s ago] (40, 3, '2026-03-16 23:02:23.505674', '2026-03-16 23:02:23.507129', 1) -2026-03-16 23:02:23,507 - sqlalchemy.engine.Engine - INFO - [cached since 1.683e+04s ago] (40, 3, '2026-03-16 23:02:23.505674', '2026-03-16 23:02:23.507129', 1) -2026-03-16 23:02:23,507 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 23:02:23,507 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 23:02:23,507 INFO sqlalchemy.engine.Engine [cached since 1.683e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 23:02:23.507847') -2026-03-16 23:02:23,507 - sqlalchemy.engine.Engine - INFO - [cached since 1.683e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 23:02:23.507847') -2026-03-16 23:02:23,508 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 23:02:23,508 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 23:07:24,010 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136002803000100410400000000003eb7250d0a -2026-03-16 23:07:24,011 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 23:07:24,011 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 23:07:24,011 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 23:07:24,011 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 23:07:24,011 INFO sqlalchemy.engine.Engine [cached since 1.713e+04s ago] ('868120334031363',) -2026-03-16 23:07:24,011 - sqlalchemy.engine.Engine - INFO - [cached since 1.713e+04s ago] ('868120334031363',) -2026-03-16 23:07:24,013 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 23:07:24,013 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 23:07:24,013 INFO sqlalchemy.engine.Engine [cached since 1.713e+04s ago] (40, 3, '2026-03-16 23:07:24.010549', '2026-03-16 23:07:24.013554', 1) -2026-03-16 23:07:24,013 - sqlalchemy.engine.Engine - INFO - [cached since 1.713e+04s ago] (40, 3, '2026-03-16 23:07:24.010549', '2026-03-16 23:07:24.013554', 1) -2026-03-16 23:07:24,015 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 23:07:24,015 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 23:07:24,015 INFO sqlalchemy.engine.Engine [cached since 1.713e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 23:07:24.015183') -2026-03-16 23:07:24,015 - sqlalchemy.engine.Engine - INFO - [cached since 1.713e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 23:07:24.015183') -2026-03-16 23:07:24,016 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 23:07:24,016 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 23:12:24,481 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136002803000100410400000000003fa6ac0d0a -2026-03-16 23:12:24,482 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 23:12:24,482 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 23:12:24,483 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 23:12:24,483 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 23:12:24,483 INFO sqlalchemy.engine.Engine [cached since 1.743e+04s ago] ('868120334031363',) -2026-03-16 23:12:24,483 - sqlalchemy.engine.Engine - INFO - [cached since 1.743e+04s ago] ('868120334031363',) -2026-03-16 23:12:24,485 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 23:12:24,485 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 23:12:24,485 INFO sqlalchemy.engine.Engine [cached since 1.743e+04s ago] (40, 3, '2026-03-16 23:12:24.482167', '2026-03-16 23:12:24.485408', 1) -2026-03-16 23:12:24,485 - sqlalchemy.engine.Engine - INFO - [cached since 1.743e+04s ago] (40, 3, '2026-03-16 23:12:24.482167', '2026-03-16 23:12:24.485408', 1) -2026-03-16 23:12:24,487 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 23:12:24,487 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 23:12:24,487 INFO sqlalchemy.engine.Engine [cached since 1.743e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 23:12:24.487206') -2026-03-16 23:12:24,487 - sqlalchemy.engine.Engine - INFO - [cached since 1.743e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 23:12:24.487206') -2026-03-16 23:12:24,488 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 23:12:24,488 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 23:17:24,975 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 7878113600280300010041040000000000402ddc0d0a -2026-03-16 23:17:24,976 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 23:17:24,976 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 23:17:24,976 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 23:17:24,976 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 23:17:24,976 INFO sqlalchemy.engine.Engine [cached since 1.773e+04s ago] ('868120334031363',) -2026-03-16 23:17:24,976 - sqlalchemy.engine.Engine - INFO - [cached since 1.773e+04s ago] ('868120334031363',) -2026-03-16 23:17:24,980 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 23:17:24,980 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 23:17:24,980 INFO sqlalchemy.engine.Engine [cached since 1.773e+04s ago] (40, 3, '2026-03-16 23:17:24.975618', '2026-03-16 23:17:24.980445', 1) -2026-03-16 23:17:24,980 - sqlalchemy.engine.Engine - INFO - [cached since 1.773e+04s ago] (40, 3, '2026-03-16 23:17:24.975618', '2026-03-16 23:17:24.980445', 1) -2026-03-16 23:17:24,983 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 23:17:24,983 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 23:17:24,983 INFO sqlalchemy.engine.Engine [cached since 1.773e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 23:17:24.983361') -2026-03-16 23:17:24,983 - sqlalchemy.engine.Engine - INFO - [cached since 1.773e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 23:17:24.983361') -2026-03-16 23:17:24,985 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 23:17:24,985 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 23:22:25,176 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 7878113600280300010041040000000000413c550d0a -2026-03-16 23:22:25,177 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 23:22:25,177 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 23:22:25,177 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 23:22:25,177 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 23:22:25,177 INFO sqlalchemy.engine.Engine [cached since 1.803e+04s ago] ('868120334031363',) -2026-03-16 23:22:25,177 - sqlalchemy.engine.Engine - INFO - [cached since 1.803e+04s ago] ('868120334031363',) -2026-03-16 23:22:25,179 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 23:22:25,179 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 23:22:25,179 INFO sqlalchemy.engine.Engine [cached since 1.803e+04s ago] (40, 3, '2026-03-16 23:22:25.176323', '2026-03-16 23:22:25.179579', 1) -2026-03-16 23:22:25,179 - sqlalchemy.engine.Engine - INFO - [cached since 1.803e+04s ago] (40, 3, '2026-03-16 23:22:25.176323', '2026-03-16 23:22:25.179579', 1) -2026-03-16 23:22:25,181 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 23:22:25,181 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 23:22:25,181 INFO sqlalchemy.engine.Engine [cached since 1.803e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 23:22:25.181670') -2026-03-16 23:22:25,181 - sqlalchemy.engine.Engine - INFO - [cached since 1.803e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 23:22:25.181670') -2026-03-16 23:22:25,182 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 23:22:25,182 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 23:27:56,367 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 7878113600280300010041040000000000420ece0d0a -2026-03-16 23:27:56,368 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 23:27:56,368 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 23:27:56,368 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 23:27:56,368 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 23:27:56,369 INFO sqlalchemy.engine.Engine [cached since 1.836e+04s ago] ('868120334031363',) -2026-03-16 23:27:56,369 - sqlalchemy.engine.Engine - INFO - [cached since 1.836e+04s ago] ('868120334031363',) -2026-03-16 23:27:56,371 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 23:27:56,371 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 23:27:56,371 INFO sqlalchemy.engine.Engine [cached since 1.836e+04s ago] (40, 3, '2026-03-16 23:27:56.367764', '2026-03-16 23:27:56.370972', 1) -2026-03-16 23:27:56,371 - sqlalchemy.engine.Engine - INFO - [cached since 1.836e+04s ago] (40, 3, '2026-03-16 23:27:56.367764', '2026-03-16 23:27:56.370972', 1) -2026-03-16 23:27:56,372 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 23:27:56,372 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 23:27:56,372 INFO sqlalchemy.engine.Engine [cached since 1.836e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 23:27:56.372766') -2026-03-16 23:27:56,372 - sqlalchemy.engine.Engine - INFO - [cached since 1.836e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 23:27:56.372766') -2026-03-16 23:27:56,373 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 23:27:56,373 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 23:32:25,813 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 7878113600280300010041040000000000431f470d0a -2026-03-16 23:32:25,814 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 23:32:25,814 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 23:32:25,814 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 23:32:25,814 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 23:32:25,814 INFO sqlalchemy.engine.Engine [cached since 1.863e+04s ago] ('868120334031363',) -2026-03-16 23:32:25,814 - sqlalchemy.engine.Engine - INFO - [cached since 1.863e+04s ago] ('868120334031363',) -2026-03-16 23:32:25,815 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 23:32:25,815 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 23:32:25,815 INFO sqlalchemy.engine.Engine [cached since 1.863e+04s ago] (40, 3, '2026-03-16 23:32:25.813990', '2026-03-16 23:32:25.815146', 1) -2026-03-16 23:32:25,815 - sqlalchemy.engine.Engine - INFO - [cached since 1.863e+04s ago] (40, 3, '2026-03-16 23:32:25.813990', '2026-03-16 23:32:25.815146', 1) -2026-03-16 23:32:25,815 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 23:32:25,815 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 23:32:25,815 INFO sqlalchemy.engine.Engine [cached since 1.863e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 23:32:25.815886') -2026-03-16 23:32:25,815 - sqlalchemy.engine.Engine - INFO - [cached since 1.863e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 23:32:25.815886') -2026-03-16 23:32:25,816 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 23:32:25,816 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 23:37:26,941 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 7878113600280300010041040000000000446bf80d0a -2026-03-16 23:37:26,941 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 23:37:26,941 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 23:37:26,942 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 23:37:26,942 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 23:37:26,942 INFO sqlalchemy.engine.Engine [cached since 1.893e+04s ago] ('868120334031363',) -2026-03-16 23:37:26,942 - sqlalchemy.engine.Engine - INFO - [cached since 1.893e+04s ago] ('868120334031363',) -2026-03-16 23:37:26,943 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 23:37:26,943 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 23:37:26,943 INFO sqlalchemy.engine.Engine [cached since 1.893e+04s ago] (40, 3, '2026-03-16 23:37:26.941348', '2026-03-16 23:37:26.943544', 1) -2026-03-16 23:37:26,943 - sqlalchemy.engine.Engine - INFO - [cached since 1.893e+04s ago] (40, 3, '2026-03-16 23:37:26.941348', '2026-03-16 23:37:26.943544', 1) -2026-03-16 23:37:26,944 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 23:37:26,944 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 23:37:26,944 INFO sqlalchemy.engine.Engine [cached since 1.893e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 23:37:26.944773') -2026-03-16 23:37:26,944 - sqlalchemy.engine.Engine - INFO - [cached since 1.893e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 23:37:26.944773') -2026-03-16 23:37:26,945 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 23:37:26,945 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 23:42:26,345 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 7878113600280300010041040000000000457a710d0a -2026-03-16 23:42:26,346 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 23:42:26,346 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 23:42:26,346 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 23:42:26,346 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 23:42:26,346 INFO sqlalchemy.engine.Engine [cached since 1.923e+04s ago] ('868120334031363',) -2026-03-16 23:42:26,346 - sqlalchemy.engine.Engine - INFO - [cached since 1.923e+04s ago] ('868120334031363',) -2026-03-16 23:42:26,348 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 23:42:26,348 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 23:42:26,349 INFO sqlalchemy.engine.Engine [cached since 1.923e+04s ago] (40, 3, '2026-03-16 23:42:26.345424', '2026-03-16 23:42:26.348842', 1) -2026-03-16 23:42:26,349 - sqlalchemy.engine.Engine - INFO - [cached since 1.923e+04s ago] (40, 3, '2026-03-16 23:42:26.345424', '2026-03-16 23:42:26.348842', 1) -2026-03-16 23:42:26,350 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 23:42:26,350 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 23:42:26,350 INFO sqlalchemy.engine.Engine [cached since 1.923e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 23:42:26.350703') -2026-03-16 23:42:26,350 - sqlalchemy.engine.Engine - INFO - [cached since 1.923e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 23:42:26.350703') -2026-03-16 23:42:26,351 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 23:42:26,351 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 23:47:27,948 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136002803000100410400000000004648ea0d0a -2026-03-16 23:47:27,949 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 23:47:27,949 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 23:47:27,950 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 23:47:27,950 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 23:47:27,950 INFO sqlalchemy.engine.Engine [cached since 1.953e+04s ago] ('868120334031363',) -2026-03-16 23:47:27,950 - sqlalchemy.engine.Engine - INFO - [cached since 1.953e+04s ago] ('868120334031363',) -2026-03-16 23:47:27,952 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 23:47:27,952 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 23:47:27,952 INFO sqlalchemy.engine.Engine [cached since 1.953e+04s ago] (40, 3, '2026-03-16 23:47:27.949096', '2026-03-16 23:47:27.952214', 1) -2026-03-16 23:47:27,952 - sqlalchemy.engine.Engine - INFO - [cached since 1.953e+04s ago] (40, 3, '2026-03-16 23:47:27.949096', '2026-03-16 23:47:27.952214', 1) -2026-03-16 23:47:27,954 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 23:47:27,954 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 23:47:27,954 INFO sqlalchemy.engine.Engine [cached since 1.953e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 23:47:27.953950') -2026-03-16 23:47:27,954 - sqlalchemy.engine.Engine - INFO - [cached since 1.953e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 23:47:27.953950') -2026-03-16 23:47:27,954 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 23:47:27,954 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 23:52:29,014 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136002803000100410400000000004759630d0a -2026-03-16 23:52:29,015 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 23:52:29,015 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 23:52:29,015 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 23:52:29,015 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 23:52:29,015 INFO sqlalchemy.engine.Engine [cached since 1.983e+04s ago] ('868120334031363',) -2026-03-16 23:52:29,015 - sqlalchemy.engine.Engine - INFO - [cached since 1.983e+04s ago] ('868120334031363',) -2026-03-16 23:52:29,017 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 23:52:29,017 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 23:52:29,017 INFO sqlalchemy.engine.Engine [cached since 1.983e+04s ago] (40, 3, '2026-03-16 23:52:29.014495', '2026-03-16 23:52:29.017153', 1) -2026-03-16 23:52:29,017 - sqlalchemy.engine.Engine - INFO - [cached since 1.983e+04s ago] (40, 3, '2026-03-16 23:52:29.014495', '2026-03-16 23:52:29.017153', 1) -2026-03-16 23:52:29,018 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 23:52:29,018 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 23:52:29,018 INFO sqlalchemy.engine.Engine [cached since 1.983e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 23:52:29.018263') -2026-03-16 23:52:29,018 - sqlalchemy.engine.Engine - INFO - [cached since 1.983e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 23:52:29.018263') -2026-03-16 23:52:29,018 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 23:52:29,018 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-16 23:57:28,958 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 787811360028030001004104000000000048a1940d0a -2026-03-16 23:57:28,959 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-16 23:57:28,959 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-16 23:57:28,959 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 23:57:28,959 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-16 23:57:28,959 INFO sqlalchemy.engine.Engine [cached since 2.013e+04s ago] ('868120334031363',) -2026-03-16 23:57:28,959 - sqlalchemy.engine.Engine - INFO - [cached since 2.013e+04s ago] ('868120334031363',) -2026-03-16 23:57:28,961 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 23:57:28,961 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-16 23:57:28,961 INFO sqlalchemy.engine.Engine [cached since 2.013e+04s ago] (40, 3, '2026-03-16 23:57:28.958675', '2026-03-16 23:57:28.961140', 1) -2026-03-16 23:57:28,961 - sqlalchemy.engine.Engine - INFO - [cached since 2.013e+04s ago] (40, 3, '2026-03-16 23:57:28.958675', '2026-03-16 23:57:28.961140', 1) -2026-03-16 23:57:28,962 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 23:57:28,962 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-16 23:57:28,962 INFO sqlalchemy.engine.Engine [cached since 2.013e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 23:57:28.962281') -2026-03-16 23:57:28,962 - sqlalchemy.engine.Engine - INFO - [cached since 2.013e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-16 23:57:28.962281') -2026-03-16 23:57:28,962 INFO sqlalchemy.engine.Engine COMMIT -2026-03-16 23:57:28,962 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-17 00:02:28,377 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 787811360028030001004104000000000049b01d0d0a -2026-03-17 00:02:28,378 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-17 00:02:28,378 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-17 00:02:28,379 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-17 00:02:28,379 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-17 00:02:28,379 INFO sqlalchemy.engine.Engine [cached since 2.043e+04s ago] ('868120334031363',) -2026-03-17 00:02:28,379 - sqlalchemy.engine.Engine - INFO - [cached since 2.043e+04s ago] ('868120334031363',) -2026-03-17 00:02:28,383 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-17 00:02:28,383 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-17 00:02:28,383 INFO sqlalchemy.engine.Engine [cached since 2.043e+04s ago] (40, 3, '2026-03-17 00:02:28.378163', '2026-03-17 00:02:28.383072', 1) -2026-03-17 00:02:28,383 - sqlalchemy.engine.Engine - INFO - [cached since 2.043e+04s ago] (40, 3, '2026-03-17 00:02:28.378163', '2026-03-17 00:02:28.383072', 1) -2026-03-17 00:02:28,386 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-17 00:02:28,386 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-17 00:02:28,386 INFO sqlalchemy.engine.Engine [cached since 2.043e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-17 00:02:28.386566') -2026-03-17 00:02:28,386 - sqlalchemy.engine.Engine - INFO - [cached since 2.043e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-17 00:02:28.386566') -2026-03-17 00:02:28,388 INFO sqlalchemy.engine.Engine COMMIT -2026-03-17 00:02:28,388 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-17 00:07:29,923 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136002803000100410400000000004a82860d0a -2026-03-17 00:07:29,925 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-17 00:07:29,925 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-17 00:07:29,926 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-17 00:07:29,926 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-17 00:07:29,926 INFO sqlalchemy.engine.Engine [cached since 2.074e+04s ago] ('868120334031363',) -2026-03-17 00:07:29,926 - sqlalchemy.engine.Engine - INFO - [cached since 2.074e+04s ago] ('868120334031363',) -2026-03-17 00:07:29,930 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-17 00:07:29,930 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-17 00:07:29,930 INFO sqlalchemy.engine.Engine [cached since 2.074e+04s ago] (40, 3, '2026-03-17 00:07:29.924217', '2026-03-17 00:07:29.929896', 1) -2026-03-17 00:07:29,930 - sqlalchemy.engine.Engine - INFO - [cached since 2.074e+04s ago] (40, 3, '2026-03-17 00:07:29.924217', '2026-03-17 00:07:29.929896', 1) -2026-03-17 00:07:29,933 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-17 00:07:29,933 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-17 00:07:29,933 INFO sqlalchemy.engine.Engine [cached since 2.074e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-17 00:07:29.933085') -2026-03-17 00:07:29,933 - sqlalchemy.engine.Engine - INFO - [cached since 2.074e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-17 00:07:29.933085') -2026-03-17 00:07:29,935 INFO sqlalchemy.engine.Engine COMMIT -2026-03-17 00:07:29,935 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-17 00:11:44,524 - app.tcp_server - INFO - New TCP connection from 127.0.0.1:40352 -2026-03-17 00:11:44,524 - app.tcp_server - INFO - Received 222 bytes from 127.0.0.1:40352 (IMEI=None): 474554202f20485454502f312e310d0a486f73743a203135322e36392e3230352e3138363a353030310d0a557365722d4167 -2026-03-17 00:11:54,288 - app.tcp_server - INFO - Connection closed by remote 127.0.0.1:40352 (IMEI=None) -2026-03-17 00:12:30,420 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136002803000100410400000000004b930f0d0a -2026-03-17 00:12:30,421 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-17 00:12:30,421 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-17 00:12:30,421 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-17 00:12:30,421 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-17 00:12:30,421 INFO sqlalchemy.engine.Engine [cached since 2.104e+04s ago] ('868120334031363',) -2026-03-17 00:12:30,421 - sqlalchemy.engine.Engine - INFO - [cached since 2.104e+04s ago] ('868120334031363',) -2026-03-17 00:12:30,425 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-17 00:12:30,425 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-17 00:12:30,425 INFO sqlalchemy.engine.Engine [cached since 2.104e+04s ago] (40, 3, '2026-03-17 00:12:30.420558', '2026-03-17 00:12:30.425100', 1) -2026-03-17 00:12:30,425 - sqlalchemy.engine.Engine - INFO - [cached since 2.104e+04s ago] (40, 3, '2026-03-17 00:12:30.420558', '2026-03-17 00:12:30.425100', 1) -2026-03-17 00:12:30,428 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-17 00:12:30,428 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-17 00:12:30,429 INFO sqlalchemy.engine.Engine [cached since 2.104e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-17 00:12:30.428699') -2026-03-17 00:12:30,429 - sqlalchemy.engine.Engine - INFO - [cached since 2.104e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-17 00:12:30.428699') -2026-03-17 00:12:30,430 INFO sqlalchemy.engine.Engine COMMIT -2026-03-17 00:12:30,430 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-17 00:17:30,972 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136002803000100410400000000004ce7b00d0a -2026-03-17 00:17:30,972 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-17 00:17:30,972 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-17 00:17:30,973 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-17 00:17:30,973 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-17 00:17:30,973 INFO sqlalchemy.engine.Engine [cached since 2.134e+04s ago] ('868120334031363',) -2026-03-17 00:17:30,973 - sqlalchemy.engine.Engine - INFO - [cached since 2.134e+04s ago] ('868120334031363',) -2026-03-17 00:17:30,974 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-17 00:17:30,974 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-17 00:17:30,974 INFO sqlalchemy.engine.Engine [cached since 2.134e+04s ago] (40, 3, '2026-03-17 00:17:30.972438', '2026-03-17 00:17:30.974433', 1) -2026-03-17 00:17:30,974 - sqlalchemy.engine.Engine - INFO - [cached since 2.134e+04s ago] (40, 3, '2026-03-17 00:17:30.972438', '2026-03-17 00:17:30.974433', 1) -2026-03-17 00:17:30,975 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-17 00:17:30,975 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-17 00:17:30,975 INFO sqlalchemy.engine.Engine [cached since 2.134e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-17 00:17:30.975333') -2026-03-17 00:17:30,975 - sqlalchemy.engine.Engine - INFO - [cached since 2.134e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-17 00:17:30.975333') -2026-03-17 00:17:30,975 INFO sqlalchemy.engine.Engine COMMIT -2026-03-17 00:17:30,975 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-17 00:22:31,406 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136002803000100410400000000004df6390d0a -2026-03-17 00:22:31,407 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-17 00:22:31,407 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-17 00:22:31,408 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-17 00:22:31,408 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-17 00:22:31,408 INFO sqlalchemy.engine.Engine [cached since 2.164e+04s ago] ('868120334031363',) -2026-03-17 00:22:31,408 - sqlalchemy.engine.Engine - INFO - [cached since 2.164e+04s ago] ('868120334031363',) -2026-03-17 00:22:31,411 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-17 00:22:31,411 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-17 00:22:31,412 INFO sqlalchemy.engine.Engine [cached since 2.164e+04s ago] (40, 3, '2026-03-17 00:22:31.406997', '2026-03-17 00:22:31.411837', 1) -2026-03-17 00:22:31,412 - sqlalchemy.engine.Engine - INFO - [cached since 2.164e+04s ago] (40, 3, '2026-03-17 00:22:31.406997', '2026-03-17 00:22:31.411837', 1) -2026-03-17 00:22:31,415 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-17 00:22:31,415 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-17 00:22:31,415 INFO sqlalchemy.engine.Engine [cached since 2.164e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-17 00:22:31.414964') -2026-03-17 00:22:31,415 - sqlalchemy.engine.Engine - INFO - [cached since 2.164e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-17 00:22:31.414964') -2026-03-17 00:22:31,416 INFO sqlalchemy.engine.Engine COMMIT -2026-03-17 00:22:31,416 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-17 00:27:31,161 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136002803000100410400000000004ec4a20d0a -2026-03-17 00:27:31,162 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-17 00:27:31,162 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-17 00:27:31,162 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-17 00:27:31,162 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-17 00:27:31,162 INFO sqlalchemy.engine.Engine [cached since 2.194e+04s ago] ('868120334031363',) -2026-03-17 00:27:31,162 - sqlalchemy.engine.Engine - INFO - [cached since 2.194e+04s ago] ('868120334031363',) -2026-03-17 00:27:31,166 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-17 00:27:31,166 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-17 00:27:31,166 INFO sqlalchemy.engine.Engine [cached since 2.194e+04s ago] (40, 3, '2026-03-17 00:27:31.161676', '2026-03-17 00:27:31.166611', 1) -2026-03-17 00:27:31,166 - sqlalchemy.engine.Engine - INFO - [cached since 2.194e+04s ago] (40, 3, '2026-03-17 00:27:31.161676', '2026-03-17 00:27:31.166611', 1) -2026-03-17 00:27:31,169 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-17 00:27:31,169 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-17 00:27:31,169 INFO sqlalchemy.engine.Engine [cached since 2.194e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-17 00:27:31.169369') -2026-03-17 00:27:31,169 - sqlalchemy.engine.Engine - INFO - [cached since 2.194e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-17 00:27:31.169369') -2026-03-17 00:27:31,171 INFO sqlalchemy.engine.Engine COMMIT -2026-03-17 00:27:31,171 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-17 00:32:31,254 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136002803000100410400000000004fd52b0d0a -2026-03-17 00:32:31,255 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-17 00:32:31,255 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-17 00:32:31,256 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-17 00:32:31,256 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-17 00:32:31,256 INFO sqlalchemy.engine.Engine [cached since 2.224e+04s ago] ('868120334031363',) -2026-03-17 00:32:31,256 - sqlalchemy.engine.Engine - INFO - [cached since 2.224e+04s ago] ('868120334031363',) -2026-03-17 00:32:31,260 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-17 00:32:31,260 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-17 00:32:31,260 INFO sqlalchemy.engine.Engine [cached since 2.224e+04s ago] (40, 3, '2026-03-17 00:32:31.255190', '2026-03-17 00:32:31.260178', 1) -2026-03-17 00:32:31,260 - sqlalchemy.engine.Engine - INFO - [cached since 2.224e+04s ago] (40, 3, '2026-03-17 00:32:31.255190', '2026-03-17 00:32:31.260178', 1) -2026-03-17 00:32:31,263 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-17 00:32:31,263 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-17 00:32:31,264 INFO sqlalchemy.engine.Engine [cached since 2.224e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-17 00:32:31.263614') -2026-03-17 00:32:31,264 - sqlalchemy.engine.Engine - INFO - [cached since 2.224e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-17 00:32:31.263614') -2026-03-17 00:32:31,265 INFO sqlalchemy.engine.Engine COMMIT -2026-03-17 00:32:31,265 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-17 00:37:31,636 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 7878113600280300010041040000000000503d5d0d0a -2026-03-17 00:37:31,636 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-17 00:37:31,636 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-17 00:37:31,637 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-17 00:37:31,637 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-17 00:37:31,637 INFO sqlalchemy.engine.Engine [cached since 2.254e+04s ago] ('868120334031363',) -2026-03-17 00:37:31,637 - sqlalchemy.engine.Engine - INFO - [cached since 2.254e+04s ago] ('868120334031363',) -2026-03-17 00:37:31,637 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-17 00:37:31,637 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-17 00:37:31,638 INFO sqlalchemy.engine.Engine [cached since 2.254e+04s ago] (40, 3, '2026-03-17 00:37:31.636397', '2026-03-17 00:37:31.637940', 1) -2026-03-17 00:37:31,638 - sqlalchemy.engine.Engine - INFO - [cached since 2.254e+04s ago] (40, 3, '2026-03-17 00:37:31.636397', '2026-03-17 00:37:31.637940', 1) -2026-03-17 00:37:31,638 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-17 00:37:31,638 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-17 00:37:31,638 INFO sqlalchemy.engine.Engine [cached since 2.254e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-17 00:37:31.638642') -2026-03-17 00:37:31,638 - sqlalchemy.engine.Engine - INFO - [cached since 2.254e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-17 00:37:31.638642') -2026-03-17 00:37:31,638 INFO sqlalchemy.engine.Engine COMMIT -2026-03-17 00:37:31,638 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-17 00:42:33,128 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 7878113600280300010041040000000000512cd40d0a -2026-03-17 00:42:33,129 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-17 00:42:33,129 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-17 00:42:33,129 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-17 00:42:33,129 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-17 00:42:33,129 INFO sqlalchemy.engine.Engine [cached since 2.284e+04s ago] ('868120334031363',) -2026-03-17 00:42:33,129 - sqlalchemy.engine.Engine - INFO - [cached since 2.284e+04s ago] ('868120334031363',) -2026-03-17 00:42:33,131 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-17 00:42:33,131 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-17 00:42:33,131 INFO sqlalchemy.engine.Engine [cached since 2.284e+04s ago] (40, 3, '2026-03-17 00:42:33.128401', '2026-03-17 00:42:33.131710', 1) -2026-03-17 00:42:33,131 - sqlalchemy.engine.Engine - INFO - [cached since 2.284e+04s ago] (40, 3, '2026-03-17 00:42:33.128401', '2026-03-17 00:42:33.131710', 1) -2026-03-17 00:42:33,132 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-17 00:42:33,132 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-17 00:42:33,132 INFO sqlalchemy.engine.Engine [cached since 2.284e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-17 00:42:33.132744') -2026-03-17 00:42:33,132 - sqlalchemy.engine.Engine - INFO - [cached since 2.284e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-17 00:42:33.132744') -2026-03-17 00:42:33,132 INFO sqlalchemy.engine.Engine COMMIT -2026-03-17 00:42:33,132 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-17 00:47:33,571 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 7878113600280300010041040000000000521e4f0d0a -2026-03-17 00:47:33,572 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-17 00:47:33,572 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-17 00:47:33,572 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-17 00:47:33,572 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-17 00:47:33,573 INFO sqlalchemy.engine.Engine [cached since 2.314e+04s ago] ('868120334031363',) -2026-03-17 00:47:33,573 - sqlalchemy.engine.Engine - INFO - [cached since 2.314e+04s ago] ('868120334031363',) -2026-03-17 00:47:33,575 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-17 00:47:33,575 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-17 00:47:33,575 INFO sqlalchemy.engine.Engine [cached since 2.314e+04s ago] (40, 3, '2026-03-17 00:47:33.571786', '2026-03-17 00:47:33.575051', 1) -2026-03-17 00:47:33,575 - sqlalchemy.engine.Engine - INFO - [cached since 2.314e+04s ago] (40, 3, '2026-03-17 00:47:33.571786', '2026-03-17 00:47:33.575051', 1) -2026-03-17 00:47:33,576 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-17 00:47:33,576 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-17 00:47:33,577 INFO sqlalchemy.engine.Engine [cached since 2.314e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-17 00:47:33.576851') -2026-03-17 00:47:33,577 - sqlalchemy.engine.Engine - INFO - [cached since 2.314e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-17 00:47:33.576851') -2026-03-17 00:47:33,577 INFO sqlalchemy.engine.Engine COMMIT -2026-03-17 00:47:33,577 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-17 00:52:34,082 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 7878113600280300010041040000000000530fc60d0a -2026-03-17 00:52:34,083 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-17 00:52:34,083 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-17 00:52:34,083 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-17 00:52:34,083 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-17 00:52:34,083 INFO sqlalchemy.engine.Engine [cached since 2.344e+04s ago] ('868120334031363',) -2026-03-17 00:52:34,083 - sqlalchemy.engine.Engine - INFO - [cached since 2.344e+04s ago] ('868120334031363',) -2026-03-17 00:52:34,086 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-17 00:52:34,086 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-17 00:52:34,086 INFO sqlalchemy.engine.Engine [cached since 2.344e+04s ago] (40, 3, '2026-03-17 00:52:34.082443', '2026-03-17 00:52:34.085981', 1) -2026-03-17 00:52:34,086 - sqlalchemy.engine.Engine - INFO - [cached since 2.344e+04s ago] (40, 3, '2026-03-17 00:52:34.082443', '2026-03-17 00:52:34.085981', 1) -2026-03-17 00:52:34,087 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-17 00:52:34,087 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-17 00:52:34,088 INFO sqlalchemy.engine.Engine [cached since 2.344e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-17 00:52:34.087816') -2026-03-17 00:52:34,088 - sqlalchemy.engine.Engine - INFO - [cached since 2.344e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-17 00:52:34.087816') -2026-03-17 00:52:34,088 INFO sqlalchemy.engine.Engine COMMIT -2026-03-17 00:52:34,088 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-17 00:57:34,444 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 7878113600280300010041040000000000547b790d0a -2026-03-17 00:57:34,444 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-17 00:57:34,444 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-17 00:57:34,445 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-17 00:57:34,445 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-17 00:57:34,445 INFO sqlalchemy.engine.Engine [cached since 2.374e+04s ago] ('868120334031363',) -2026-03-17 00:57:34,445 - sqlalchemy.engine.Engine - INFO - [cached since 2.374e+04s ago] ('868120334031363',) -2026-03-17 00:57:34,447 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-17 00:57:34,447 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-17 00:57:34,447 INFO sqlalchemy.engine.Engine [cached since 2.374e+04s ago] (40, 3, '2026-03-17 00:57:34.444236', '2026-03-17 00:57:34.447485', 1) -2026-03-17 00:57:34,447 - sqlalchemy.engine.Engine - INFO - [cached since 2.374e+04s ago] (40, 3, '2026-03-17 00:57:34.444236', '2026-03-17 00:57:34.447485', 1) -2026-03-17 00:57:34,449 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-17 00:57:34,449 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-17 00:57:34,449 INFO sqlalchemy.engine.Engine [cached since 2.374e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-17 00:57:34.449291') -2026-03-17 00:57:34,449 - sqlalchemy.engine.Engine - INFO - [cached since 2.374e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-17 00:57:34.449291') -2026-03-17 00:57:34,450 INFO sqlalchemy.engine.Engine COMMIT -2026-03-17 00:57:34,450 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-17 01:02:34,260 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 7878113600280300010041040000000000556af00d0a -2026-03-17 01:02:34,261 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-17 01:02:34,261 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-17 01:02:34,261 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-17 01:02:34,261 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-17 01:02:34,261 INFO sqlalchemy.engine.Engine [cached since 2.404e+04s ago] ('868120334031363',) -2026-03-17 01:02:34,261 - sqlalchemy.engine.Engine - INFO - [cached since 2.404e+04s ago] ('868120334031363',) -2026-03-17 01:02:34,264 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-17 01:02:34,264 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-17 01:02:34,264 INFO sqlalchemy.engine.Engine [cached since 2.404e+04s ago] (40, 3, '2026-03-17 01:02:34.260364', '2026-03-17 01:02:34.264419', 1) -2026-03-17 01:02:34,264 - sqlalchemy.engine.Engine - INFO - [cached since 2.404e+04s ago] (40, 3, '2026-03-17 01:02:34.260364', '2026-03-17 01:02:34.264419', 1) -2026-03-17 01:02:34,266 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-17 01:02:34,266 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-17 01:02:34,266 INFO sqlalchemy.engine.Engine [cached since 2.404e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-17 01:02:34.266368') -2026-03-17 01:02:34,266 - sqlalchemy.engine.Engine - INFO - [cached since 2.404e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-17 01:02:34.266368') -2026-03-17 01:02:34,267 INFO sqlalchemy.engine.Engine COMMIT -2026-03-17 01:02:34,267 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-17 01:07:35,221 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 787811360028030001004104000000000056586b0d0a -2026-03-17 01:07:35,222 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-17 01:07:35,222 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-17 01:07:35,222 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-17 01:07:35,222 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-17 01:07:35,222 INFO sqlalchemy.engine.Engine [cached since 2.434e+04s ago] ('868120334031363',) -2026-03-17 01:07:35,222 - sqlalchemy.engine.Engine - INFO - [cached since 2.434e+04s ago] ('868120334031363',) -2026-03-17 01:07:35,224 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-17 01:07:35,224 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-17 01:07:35,224 INFO sqlalchemy.engine.Engine [cached since 2.434e+04s ago] (40, 3, '2026-03-17 01:07:35.221291', '2026-03-17 01:07:35.224620', 1) -2026-03-17 01:07:35,224 - sqlalchemy.engine.Engine - INFO - [cached since 2.434e+04s ago] (40, 3, '2026-03-17 01:07:35.221291', '2026-03-17 01:07:35.224620', 1) -2026-03-17 01:07:35,226 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-17 01:07:35,226 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-17 01:07:35,226 INFO sqlalchemy.engine.Engine [cached since 2.434e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-17 01:07:35.226432') -2026-03-17 01:07:35,226 - sqlalchemy.engine.Engine - INFO - [cached since 2.434e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-17 01:07:35.226432') -2026-03-17 01:07:35,227 INFO sqlalchemy.engine.Engine COMMIT -2026-03-17 01:07:35,227 - sqlalchemy.engine.Engine - INFO - COMMIT -2026-03-17 01:12:35,083 - app.tcp_server - INFO - Received 22 bytes from 127.0.0.1:55838 (IMEI=868120334031363): 78781136002803000100410400000000005749e20d0a -2026-03-17 01:12:35,084 INFO sqlalchemy.engine.Engine BEGIN (implicit) -2026-03-17 01:12:35,084 - sqlalchemy.engine.Engine - INFO - BEGIN (implicit) -2026-03-17 01:12:35,084 INFO sqlalchemy.engine.Engine SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-17 01:12:35,084 - sqlalchemy.engine.Engine - INFO - SELECT devices.id -FROM devices -WHERE devices.imei = ? -2026-03-17 01:12:35,084 INFO sqlalchemy.engine.Engine [cached since 2.464e+04s ago] ('868120334031363',) -2026-03-17 01:12:35,084 - sqlalchemy.engine.Engine - INFO - [cached since 2.464e+04s ago] ('868120334031363',) -2026-03-17 01:12:35,087 INFO sqlalchemy.engine.Engine UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-17 01:12:35,087 - sqlalchemy.engine.Engine - INFO - UPDATE devices SET battery_level=?, gsm_signal=?, last_heartbeat=?, updated_at=? WHERE devices.id = ? -2026-03-17 01:12:35,087 INFO sqlalchemy.engine.Engine [cached since 2.464e+04s ago] (40, 3, '2026-03-17 01:12:35.083523', '2026-03-17 01:12:35.086981', 1) -2026-03-17 01:12:35,087 - sqlalchemy.engine.Engine - INFO - [cached since 2.464e+04s ago] (40, 3, '2026-03-17 01:12:35.083523', '2026-03-17 01:12:35.086981', 1) -2026-03-17 01:12:35,088 INFO sqlalchemy.engine.Engine INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-17 01:12:35,088 - sqlalchemy.engine.Engine - INFO - INSERT INTO heartbeat_records (device_id, protocol_number, terminal_info, battery_level, gsm_signal, extension_data, created_at) VALUES (?, ?, ?, ?, ?, ?, ?) -2026-03-17 01:12:35,089 INFO sqlalchemy.engine.Engine [cached since 2.464e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-17 01:12:35.088849') -2026-03-17 01:12:35,089 - sqlalchemy.engine.Engine - INFO - [cached since 2.464e+04s ago] (1, 54, 0, 40, 3, '{"language": 1, "extension_raw": "00410400000000"}', '2026-03-17 01:12:35.088849') -2026-03-17 01:12:35,089 INFO sqlalchemy.engine.Engine COMMIT -2026-03-17 01:12:35,089 - sqlalchemy.engine.Engine - INFO - COMMIT