ecc935482b
Tighten the Series III / Series IV boundary so UI and storage dispatch
on a clean signal instead of sniffing filenames or applying magnitude
heuristics.
Phase 1 — events.device_family column ("series3" | "series4"):
self-applying migration with filename-based backfill of existing rows
(1,132 backfilled on prod 2026-05-20); plumbed through every import
path (BW endpoint, IDF endpoint, ACH server, BW CLI, sidecar
backfill); UPSERT preserves via COALESCE; UI dispatches on it.
Phase 2 — extract micromate/ package alongside minimateplus/:
native IdfEvent / IdfReport / IdfPeaks / IdfProjectInfo /
IdfSensorCheck (mic in dB(L), not pseudo-psi); moved
idf_ascii_report.py from sfm/ to micromate/; refactored
save_imported_idf to use IdfEvent and bridge to minimateplus.Event at
the SQL-insert boundary; idf_file.py stub for the future binary codec.
Phase 3 prep — docs/idf_protocol_reference.md captures the two
observed Thor binary header signatures (1,012 newer-firmware files vs
2 old files whose layout is byte-for-byte BW-STRT-compatible), file-size
hints suggesting int8 sample encoding, open questions in dependency
order, and a concrete first-session plan for cracking the codec.
Also rolled in the v0.18.1 hotfixes that motivated this work:
- idf_ascii_report parser now handles "<0.005 in/s" (below-threshold)
and "N/A" markers without leaving raw strings in numeric DB columns.
- sfm_webapp.html: defensive _ppvFmt / mic formatter so future
data-shape drift can't kill the whole events table render.
All 1,014 example-data sidecars round-trip through the new package.
See CHANGELOG.md for full notes.
49 lines
1.4 KiB
Python
49 lines
1.4 KiB
Python
"""
|
|
micromate — Instantel Micromate (Series IV) device library.
|
|
|
|
Sibling of ``minimateplus`` (the Series III library). Currently scoped to
|
|
the offline-file ingest path used by thor-watcher: parsing the per-event
|
|
``.IDFH``/``.IDFW`` ASCII text sidecars Thor's exporter writes alongside
|
|
each binary event file, and wrapping the parsed data in typed event
|
|
records.
|
|
|
|
Live-device support (TCP protocol, frame parsing, real-time monitoring)
|
|
is deferred — when we add it, it lands here as ``transport.py`` /
|
|
``framing.py`` / ``protocol.py`` / ``client.py``, mirroring the
|
|
``minimateplus`` package layout.
|
|
|
|
Typical usage (offline file ingest):
|
|
|
|
from micromate import IdfEvent, parse_idf_report
|
|
|
|
text = open("UM11719_20231219162723.IDFW.txt").read()
|
|
rep = parse_idf_report(text) # dict
|
|
event = IdfEvent.from_report(rep, "UM11719_20231219162723.IDFW")
|
|
print(event.serial, event.peaks.transverse_ips, event.mic_pspl_dbl)
|
|
"""
|
|
|
|
from .idf_ascii_report import (
|
|
parse_event_filename,
|
|
parse_idf_report,
|
|
serial_from_filename,
|
|
)
|
|
from .models import (
|
|
IdfEvent,
|
|
IdfPeaks,
|
|
IdfProjectInfo,
|
|
IdfReport,
|
|
IdfSensorCheck,
|
|
)
|
|
|
|
__version__ = "0.1.0"
|
|
__all__ = [
|
|
"IdfEvent",
|
|
"IdfPeaks",
|
|
"IdfProjectInfo",
|
|
"IdfReport",
|
|
"IdfSensorCheck",
|
|
"parse_event_filename",
|
|
"parse_idf_report",
|
|
"serial_from_filename",
|
|
]
|