Skip to content

v3.1.0

Pre-release
Pre-release

Choose a tag to compare

@LTimothy LTimothy released this 07 Aug 16:22
· 34 commits to main since this release
  • The Status page now shows when the active presence calibration profile was
    created and what it learned from, instead of only whether the last run
    succeeded. Calibration results are stored with the window they came from,
    so a thin result can be told apart from a good one. A pod that has never
    calibrated now says so plainly rather than reporting an error.

  • The in-bed indicator starts and ends far more sessions than anyone actually
    has. Over eleven days of recordings the live detector counted 23 to 30
    separate sessions per side per day, most of them under twenty minutes, while
    the overnight analysis of the same nights found the one real session per side
    you would expect. Signal strength is not the reason: an occupied side reads
    around forty times higher than an empty one, so the two are easy to tell
    apart. The sessions are being started by something in the entry logic, which
    the once-a-minute log is too coarse to show. Each start is now recorded along
    with the few seconds that led into it, so the next look at this can read what
    happened instead of estimating.

  • The pump warning on the Status page is a false alarm, and this release starts
    gathering what is needed to fix it properly. The check treats "pump reporting
    no speed while the cooling element draws current" as a stalled pump, but
    across eleven days of recordings the pump reports no speed for exactly the
    hours the power schedule has that side switched off, and the current reading
    never drops low enough to tell a switched-off side from a running one. So the
    warning fires most days when the bed powers off. The check is unchanged for
    now, because getting it wrong in the other direction would hide a real stall.
    It now records the full pump reading when the pump starts or stops reporting
    speed, which is the missing piece for telling those two cases apart.

  • The heart rate, HRV and breathing charts on the Sleep page were blank. The
    server reformatted each reading's timestamp into a local-time string before
    sending it, and the charts scale the timestamp themselves and discard
    anything that is not a number, so every reading was thrown away and the
    charts drew nothing. No error appeared anywhere. Readings now go out as the
    plain timestamps they are stored as, which is what the charts already expect.

  • Heart rate variability and breathing rate recorded at the start of a sleep
    session belonged to the previous session. Both are smoothed running values,
    and neither can be recomputed immediately: breathing rate needs 30 seconds of
    established presence and HRV needs five minutes. Leaving the bed cleared the
    samples behind them but not the values themselves, so the opening minutes of
    the next session were written with whoever was there last. Measured against
    eleven days of recordings, that was 16% of stored readings, 10% of them
    carrying a plausible-looking number rather than the blank the rest of the
    system knows to ignore. Leaving the bed now clears both, along with any
    measurement still waiting to be written.

  • A physical double or triple tap that failed to write its temperature change
    restarted the server. Tap handling runs detached from the polling loop, so a
    base movement over Bluetooth cannot delay the next tap being noticed, but that
    also meant a failure had nowhere to go and the server treats an unhandled one
    as a reason to shut down. The failure is now caught where it happens, logged,
    and shown on the Status page.