보관함 데이터 DB 저장

This commit is contained in:
2025-12-15 17:25:02 +09:00
parent 807b26d755
commit f2f4051f99
2 changed files with 16 additions and 1 deletions

View File

@@ -25,7 +25,7 @@ PPT 8페이지(일괄 읽기) 최신 매핑(사용자 제공):
- 값의 합리성 체크(클램프)를 통해 가장 그럴듯한 해석을 최종 선택한다.
"""
import os, asyncio, struct, base64, re, socket
import os, asyncio, struct, base64, re, socket, pymysql
from datetime import datetime, timezone
from typing import Dict, List, Any, Optional, Tuple
@@ -48,6 +48,10 @@ TS_BUFFERS: Dict[str, deque] = {}
TS_MAX = int(os.getenv("TS_MAX", "500")) # keep up to 500 samples per device
TS_PERIOD_SEC = float(os.getenv("TS_PERIOD_SEC", "2.0")) # poll every 2 seconds
# db연결
conn = pymysql.connect(host='49.238.167.71', user='helmet', password='helmet2824', db='helmet', charset='utf8')
cur = conn.cursor()
async def _poll_devices_task():
"""Periodically read bulk8 (1..30) from all connected devices and store last TS_MAX samples."""
while True:
@@ -513,6 +517,16 @@ def ts_get(req: TSSamplesReq):
return {"ok": True, "target": key, "count": 0, "samples": []}
n = min(len(dq), req.limit)
samples = list(dq)[-n:]
# db 저장
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
cur.execute('insert into sensor_data values (null, "{}", "{}", {}, {}, {}, {})'.format(samples[0]['key'], now, samples[0]['lock'], samples[0]['helmet'], samples[0]['uv_state'], samples[0]['fan_state']))
conn.commit()
cur.execute('insert into env_data values (null, "{}", "{}", {}, {}, {}, {})'.format(samples[0]['key'], now, 1, 1, samples[0]['temp'], samples[0]['humi']))
conn.commit()
cur.execute('insert into battery values (null, "{}", "{}", {}, {}, {}, {})'.format(samples[0]['key'], now, samples[0]['batt_pct'], samples[0]['pv_volt'], samples[0]['pv_curr'], samples[0]['chg_done']))
conn.commit()
return {"ok": True, "target": key, "count": n, "samples": samples}
# ----- UI -----

View File

@@ -1,4 +1,5 @@
fastapi
pymysql
uvicorn[standard]
python-multipart
pymodbus>=3.5,<4