SomnoTrace v4.0.0-beta1
The SomnoBridge release. π SomnoTrace now pairs, provisions, time-syncs
and pulls therapy data through the Wi-FiβBLE bridge β the AirSense's SD
card never has to leave the machine.
β¨ Highlights
- π SomnoBridge integration β a complete BLE client (
sb_ble,
~1.5k LoC): discovery, passkey pairing, bonded GATT ops over the
framed protocol, streaming file pulls, and a/api/sb/opHTTP proxy
that drives every bridge op from the portal. - π Authoritative UTC & drift correction β SomnoTrace anchors its
NTP time on the bridge's monotonic clock with periodic exchanges,
reads back the fitted drift on every sync pass, and applies the
estimate when importing sessions β AS11 clock wander is corrected
instead of silently skewing therapy data. - βοΈ "Configure SomnoBridge" dialog β card network picker (scrollable
AP list, OPEN/SECURED badges, saved network), AS10/AS11 machine cards
with the AS11 GMT-offset picker, an X close button, and an
insecure-card flow: factory88888888and open cards are detected by
a real probe-join, flagged with a warning, and can be re-secured
in-place viaEZSHARE_ADMINβ the bridge changes the card's own Wi-Fi
password through its admin form and rejoins automatically. - π Bridge status in the portal β pairing state, card Wi-Fi,
therapy-active and transfer-allowed indicators, last sync, and sync
progress straight from the bridge. - π₯ Session augmentation β late-recovered stream files now merge
into already-committed sessions instead of being discarded as
duplicates; coverage is verified against the manifest and annotations
are regenerated byte-identically.
π Fixes
- ποΈ Duplicate recording folders β oximetry day labels are now a pure
function of the recording's civil digits (ESP-local noon rule) and an
existingrecording_idunder any day folder wins β DST/offset changes
can no longer file one recording under two days. - π Uploader fingerprint ping-pong β duplicate
recording_ids across
day folders are deduplicated in reconcile (newest day wins) so two
files can never take turns invalidating each other's uploads. - π Retry storms β any unit that fails 5 uploads is parked and
retried at most once a day, reviving automatically when its content
changes. A local anomaly can never again become hours of HTTP 429s. - π± Logs tab scroll β narrow screens no longer open the log view at
the oldest line of a page-long scrollback.
ποΈ Under the hood
sb_protorequest/response framing with reassembly; BLE ops run off
the NimBLE host task so provisioning never starves indications.- Transfer ledger coordination keeps already-downloaded card files from
re-pulling β zero redundant transfers across reconnects. edf_importevents rendering extracted behind a byte-identical
emit-to-file / emit-to-set abstraction for coverage checks.- AS11 BLE: connection handling improvements alongside the bridge path.
β Testing
- New
sb_ble_testhost suite: 153 checks covering pairing state
machine, framing, reassembly and op dispatch. somno_ml_workersurvivor tests: guards, deadlines, SST checks,
fragment grouping.- Full host suite: 31 targets, 0 failures, sanitizer-clean.
π Docs
- Windows 10/11 SMB share setup guide with screenshots (contributed).