initial scaffold
This commit is contained in:
55
app/services.py
Normal file
55
app/services.py
Normal file
@@ -0,0 +1,55 @@
|
||||
"""
|
||||
Placeholder for NL43 TCP connector.
|
||||
Implement TCP session management, command serialization, and DOD/DRD parsing here,
|
||||
then call persist_snapshot to store the latest values.
|
||||
"""
|
||||
|
||||
from dataclasses import dataclass
|
||||
from datetime import datetime
|
||||
from typing import Optional
|
||||
|
||||
from app.database import get_db_session
|
||||
from app.models import NL43Status
|
||||
|
||||
|
||||
@dataclass
|
||||
class NL43Snapshot:
|
||||
unit_id: str
|
||||
measurement_state: str = "unknown"
|
||||
lp: Optional[str] = None
|
||||
leq: Optional[str] = None
|
||||
lmax: Optional[str] = None
|
||||
lmin: Optional[str] = None
|
||||
lpeak: Optional[str] = None
|
||||
battery_level: Optional[str] = None
|
||||
power_source: Optional[str] = None
|
||||
sd_remaining_mb: Optional[str] = None
|
||||
sd_free_ratio: Optional[str] = None
|
||||
raw_payload: Optional[str] = None
|
||||
|
||||
|
||||
def persist_snapshot(s: NL43Snapshot):
|
||||
"""Persist the latest snapshot for API/dashboard use."""
|
||||
db = get_db_session()
|
||||
try:
|
||||
row = db.query(NL43Status).filter_by(unit_id=s.unit_id).first()
|
||||
if not row:
|
||||
row = NL43Status(unit_id=s.unit_id)
|
||||
db.add(row)
|
||||
|
||||
row.last_seen = datetime.utcnow()
|
||||
row.measurement_state = s.measurement_state
|
||||
row.lp = s.lp
|
||||
row.leq = s.leq
|
||||
row.lmax = s.lmax
|
||||
row.lmin = s.lmin
|
||||
row.lpeak = s.lpeak
|
||||
row.battery_level = s.battery_level
|
||||
row.power_source = s.power_source
|
||||
row.sd_remaining_mb = s.sd_remaining_mb
|
||||
row.sd_free_ratio = s.sd_free_ratio
|
||||
row.raw_payload = s.raw_payload
|
||||
|
||||
db.commit()
|
||||
finally:
|
||||
db.close()
|
||||
Reference in New Issue
Block a user