feat: Add monitoring functionality to MiniMate protocol and web interface

- Introduced new SUBs for monitoring status, start, and stop commands in protocol.py.
- Implemented read_monitor_status, start_monitoring, and stop_monitoring methods in MiniMateProtocol class.
- Added new API endpoints for monitoring status retrieval and control in server.py.
- Enhanced the web application with a monitoring panel, including battery and memory status display.
- Created a new Python script to parse SUB 0x1C response frames for monitoring status.
- Documented the monitoring status response format and field locations in markdown and text files.
This commit is contained in:
2026-04-08 14:34:42 -04:00
parent 8545daac04
commit a41e7a9e1a
9 changed files with 1121 additions and 10 deletions
+19
View File
@@ -417,3 +417,22 @@ class Event:
parts.append(f"M={pv.micl:.6f}")
ppv = " [" + ", ".join(parts) + " in/s]"
return f"Event#{self.index} {ts}{ppv}"
# ── MonitorStatus ─────────────────────────────────────────────────────────────
@dataclass
class MonitorStatus:
"""
Current monitoring state decoded from SUB 0x1C response.
Confirmed field locations from 4-8-26/2ndtry BW capture:
battery_v : data[11 + 0x2F : 11 + 0x31] uint16 BE ÷ 100 e.g. 680 → 6.80 V
memory_total: data[11 + 0x31 : 11 + 0x35] uint32 BE bytes e.g. 983040 → 960 KB
memory_free : data[11 + 0x35 : 11 + 0x39] uint32 BE bytes (subset of total)
is_monitoring: inferred from payload length — idle = 44 bytes, monitoring = 12 bytes
"""
is_monitoring: bool # True if unit is actively recording ✅
battery_v: Optional[float] = None # Battery voltage in volts ✅
memory_total: Optional[int] = None # Total flash memory in bytes ✅
memory_free: Optional[int] = None # Free flash memory in bytes ✅