Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 10 additions & 6 deletions modules/piezo-processor/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -396,10 +396,10 @@ class PresenceDetector:
def __init__(self):
self.state = self.ABSENT
self.consecutive_low = 0
self.enter_threshold = 400_000
self.exit_threshold = 150_000
self.enter_threshold = 200_000
self.exit_threshold = 100_000
self.exit_count = 3 # 3 consecutive low windows to declare absent
self.acr_threshold = 0.45
self.acr_threshold = 0.30

def update(self, window_std: float, acr_qual: float) -> bool:
"""Update state and return True if user is present."""
Expand Down Expand Up @@ -470,7 +470,7 @@ def subharmonic_summation_hr(samples: np.ndarray, fs: float = SAMPLE_RATE,
return None, 0.0

candidate_lags = peaks + min_lag
weights = [1.0, 0.8, 0.6][:n_harmonics]
weights = [1.0, 0.6, 0.3][:n_harmonics]

best_lag = None
best_score = 0.0
Expand Down Expand Up @@ -810,10 +810,14 @@ def _maybe_write(self) -> None:
other_std = self._other._last_med_std
other_acr = self._other._last_acr_qual
# Only suppress if: other side has real periodicity (someone there),
# other side's energy is >= ours, and our energy is below threshold
# other side's energy is >= ours, and our energy is below threshold.
#
# TWEAK: if both sides are below the enter_threshold, we relax this
# to avoid mutual suppression of a faint but real signal (#325).
if (other_acr > 0.3
and other_std > med_std * 0.7
and med_std < self._presence.enter_threshold):
and med_std < self._presence.enter_threshold
and other_std > self._presence.enter_threshold):
acr_qual = 0.0

# Cache AFTER suppression so the other side sees post-suppression values
Expand Down
2,088 changes: 2,088 additions & 0 deletions sample_data/apple_watch/heart_rate.csv

Large diffs are not rendered by default.

60 changes: 60 additions & 0 deletions sample_data/apple_watch/hrv_sdnn.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
endDate,startDate,type,unit,value
2026-04-27 20:04:52 -0400,2026-04-27 20:03:52 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,17.0163
2026-04-27 22:08:29 -0400,2026-04-27 22:07:33 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,33.9371
2026-04-28 00:34:24 -0400,2026-04-28 00:33:25 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,30.6479
2026-04-28 01:58:40 -0400,2026-04-28 01:57:41 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,33.0259
2026-04-28 04:00:32 -0400,2026-04-28 03:59:33 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,43.0301
2026-04-28 05:58:43 -0400,2026-04-28 05:57:43 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,53.5683
2026-04-28 20:34:22 -0400,2026-04-28 20:33:31 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,41.0598
2026-04-28 23:19:43 -0400,2026-04-28 23:18:44 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,32.9276
2026-04-29 00:03:15 -0400,2026-04-29 00:02:15 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,16.0103
2026-04-29 01:58:30 -0400,2026-04-29 01:57:30 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,19.7878
2026-04-29 03:58:36 -0400,2026-04-29 03:57:37 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,19.8357
2026-04-29 05:58:33 -0400,2026-04-29 05:57:34 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,46.3812
2026-04-29 08:51:02 -0400,2026-04-29 08:50:03 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,11.6743
2026-04-29 10:46:20 -0400,2026-04-29 10:45:21 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,14.5245
2026-04-29 12:17:10 -0400,2026-04-29 12:16:11 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,27.5133
2026-04-29 19:23:47 -0400,2026-04-29 19:22:58 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,12.7897
2026-04-29 21:09:35 -0400,2026-04-29 21:08:36 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,42.0333
2026-04-29 22:52:02 -0400,2026-04-29 22:51:02 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,20.9754
2026-04-29 23:58:23 -0400,2026-04-29 23:57:34 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,38.824
2026-04-30 02:00:26 -0400,2026-04-30 01:59:26 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,32.1542
2026-04-30 04:00:03 -0400,2026-04-30 03:59:03 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,57.5781
2026-04-30 05:58:33 -0400,2026-04-30 05:57:33 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,45.4149
2026-04-30 07:58:31 -0400,2026-04-30 07:57:35 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,19.4032
2026-04-30 16:41:28 -0400,2026-04-30 16:40:34 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,36.0054
2026-04-30 23:00:18 -0400,2026-04-30 22:59:18 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,63.4658
2026-05-01 00:06:47 -0400,2026-05-01 00:05:47 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,26.7969
2026-05-01 01:58:34 -0400,2026-05-01 01:57:34 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,17.3252
2026-05-01 03:58:34 -0400,2026-05-01 03:57:35 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,12.6998
2026-05-01 05:58:36 -0400,2026-05-01 05:57:37 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,57.0497
2026-05-01 08:36:52 -0400,2026-05-01 08:35:53 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,9.89655
2026-05-01 13:11:43 -0400,2026-05-01 13:10:44 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,10.529
2026-05-01 18:17:04 -0400,2026-05-01 18:16:06 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,17.5506
2026-05-01 18:18:57 -0400,2026-05-01 18:18:01 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,15.0708
2026-05-01 21:20:19 -0400,2026-05-01 21:19:19 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,19.1299
2026-05-02 00:53:21 -0400,2026-05-02 00:52:23 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,15.1869
2026-05-02 01:58:37 -0400,2026-05-02 01:57:37 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,13.697
2026-05-02 03:58:31 -0400,2026-05-02 03:57:31 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,11.7511
2026-05-02 05:58:58 -0400,2026-05-02 05:57:59 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,45.9942
2026-05-02 07:58:33 -0400,2026-05-02 07:57:33 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,36.9823
2026-05-03 01:00:40 -0400,2026-05-03 00:59:40 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,29.5586
2026-05-03 01:58:34 -0400,2026-05-03 01:57:34 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,69.3478
2026-05-03 03:58:30 -0400,2026-05-03 03:57:31 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,100.028
2026-05-03 05:58:30 -0400,2026-05-03 05:57:31 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,97.5054
2026-05-03 07:58:45 -0400,2026-05-03 07:57:45 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,44.422
2026-05-03 09:59:39 -0400,2026-05-03 09:58:40 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,122.204
2026-05-03 12:48:53 -0400,2026-05-03 12:47:54 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,23.1977
2026-05-03 14:46:42 -0400,2026-05-03 14:45:42 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,34.5842
2026-05-03 17:02:04 -0400,2026-05-03 17:01:04 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,29.4717
2026-05-03 18:15:40 -0400,2026-05-03 18:14:41 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,29.8949
2026-05-03 19:58:34 -0400,2026-05-03 19:57:36 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,35.8762
2026-05-03 22:06:39 -0400,2026-05-03 22:05:40 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,22.1597
2026-05-03 23:58:36 -0400,2026-05-03 23:57:36 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,14.4491
2026-05-04 01:58:43 -0400,2026-05-04 01:57:43 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,38.5944
2026-05-04 03:58:34 -0400,2026-05-04 03:57:34 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,20.2694
2026-05-04 05:58:36 -0400,2026-05-04 05:57:36 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,45.0406
2026-05-04 08:36:51 -0400,2026-05-04 08:35:51 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,19.4044
2026-05-04 10:21:50 -0400,2026-05-04 10:20:50 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,28.7162
2026-05-04 13:30:31 -0400,2026-05-04 13:30:17 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,18.4772
2026-05-04 17:12:40 -0400,2026-05-04 17:11:40 -0400,HKQuantityTypeIdentifierHeartRateVariabilitySDNN,ms,35.4553
112 changes: 112 additions & 0 deletions sample_data/apple_watch/oxygen_saturation.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
endDate,startDate,type,unit,value
2026-04-27 18:52:35 -0400,2026-04-27 18:52:35 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.97
2026-04-27 19:23:38 -0400,2026-04-27 19:23:38 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,1
2026-04-27 21:32:18 -0400,2026-04-27 21:32:18 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.97
2026-04-27 22:07:56 -0400,2026-04-27 22:07:56 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.98
2026-04-28 00:48:42 -0400,2026-04-28 00:48:42 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-04-28 01:35:30 -0400,2026-04-28 01:35:30 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-04-28 02:23:51 -0400,2026-04-28 02:23:51 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-04-28 02:53:51 -0400,2026-04-28 02:53:51 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.98
2026-04-28 03:23:52 -0400,2026-04-28 03:23:52 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-04-28 03:59:40 -0400,2026-04-28 03:59:40 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.98
2026-04-28 04:30:01 -0400,2026-04-28 04:30:01 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.97
2026-04-28 05:00:01 -0400,2026-04-28 05:00:01 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.97
2026-04-28 05:30:02 -0400,2026-04-28 05:30:02 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-04-28 06:00:13 -0400,2026-04-28 06:00:13 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.97
2026-04-28 06:32:36 -0400,2026-04-28 06:32:36 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.97
2026-04-28 07:02:36 -0400,2026-04-28 07:02:36 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,1
2026-04-28 07:32:37 -0400,2026-04-28 07:32:37 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.98
2026-04-28 23:18:49 -0400,2026-04-28 23:18:49 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,1
2026-04-29 00:18:42 -0400,2026-04-29 00:18:42 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.98
2026-04-29 00:48:42 -0400,2026-04-29 00:48:42 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-04-29 01:18:43 -0400,2026-04-29 01:18:43 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.98
2026-04-29 01:48:44 -0400,2026-04-29 01:48:44 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,1
2026-04-29 02:42:47 -0400,2026-04-29 02:42:47 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,1
2026-04-29 03:12:52 -0400,2026-04-29 03:12:52 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-04-29 04:12:53 -0400,2026-04-29 04:12:53 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-04-29 04:42:54 -0400,2026-04-29 04:42:54 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,1
2026-04-29 05:12:55 -0400,2026-04-29 05:12:55 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.96
2026-04-29 06:21:13 -0400,2026-04-29 06:21:13 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-04-29 06:54:54 -0400,2026-04-29 06:54:54 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-04-29 19:53:48 -0400,2026-04-29 19:53:48 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.97
2026-04-29 23:57:23 -0400,2026-04-29 23:57:23 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.98
2026-04-30 00:57:24 -0400,2026-04-30 00:57:24 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.98
2026-04-30 01:39:20 -0400,2026-04-30 01:39:20 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.98
2026-04-30 02:09:20 -0400,2026-04-30 02:09:20 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.96
2026-04-30 02:39:21 -0400,2026-04-30 02:39:21 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.98
2026-04-30 03:09:22 -0400,2026-04-30 03:09:22 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,1
2026-04-30 03:39:22 -0400,2026-04-30 03:39:22 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.96
2026-04-30 04:09:35 -0400,2026-04-30 04:09:35 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-04-30 04:39:36 -0400,2026-04-30 04:39:36 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.97
2026-04-30 05:09:37 -0400,2026-04-30 05:09:37 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.97
2026-04-30 06:09:37 -0400,2026-04-30 06:09:37 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.98
2026-04-30 06:39:58 -0400,2026-04-30 06:39:58 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.96
2026-04-30 07:10:19 -0400,2026-04-30 07:10:19 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.97
2026-04-30 07:40:19 -0400,2026-04-30 07:40:19 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.96
2026-05-01 00:51:42 -0400,2026-05-01 00:51:42 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-05-01 01:21:43 -0400,2026-05-01 01:21:43 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.98
2026-05-01 01:51:43 -0400,2026-05-01 01:51:43 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.97
2026-05-01 02:21:44 -0400,2026-05-01 02:21:44 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.98
2026-05-01 02:52:35 -0400,2026-05-01 02:52:35 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.98
2026-05-01 03:23:08 -0400,2026-05-01 03:23:08 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.98
2026-05-01 03:53:08 -0400,2026-05-01 03:53:08 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.95
2026-05-01 04:23:09 -0400,2026-05-01 04:23:09 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,1
2026-05-01 04:53:10 -0400,2026-05-01 04:53:10 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-05-01 05:24:55 -0400,2026-05-01 05:24:55 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.97
2026-05-01 06:00:58 -0400,2026-05-01 06:00:58 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-05-01 06:30:59 -0400,2026-05-01 06:30:59 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-05-01 07:06:12 -0400,2026-05-01 07:06:12 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.97
2026-05-01 07:36:23 -0400,2026-05-01 07:36:23 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.97
2026-05-02 00:53:12 -0400,2026-05-02 00:53:12 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-05-02 01:23:13 -0400,2026-05-02 01:23:13 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-05-02 02:23:13 -0400,2026-05-02 02:23:13 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-05-02 02:53:14 -0400,2026-05-02 02:53:14 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.96
2026-05-02 03:23:15 -0400,2026-05-02 03:23:15 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.97
2026-05-02 04:01:58 -0400,2026-05-02 04:01:58 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,1
2026-05-02 04:31:59 -0400,2026-05-02 04:31:59 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-05-02 05:08:04 -0400,2026-05-02 05:08:04 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,1
2026-05-02 06:08:05 -0400,2026-05-02 06:08:05 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,1
2026-05-02 06:38:06 -0400,2026-05-02 06:38:06 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-05-02 07:08:06 -0400,2026-05-02 07:08:06 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-05-02 07:38:07 -0400,2026-05-02 07:38:07 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-05-02 08:08:08 -0400,2026-05-02 08:08:08 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.98
2026-05-02 09:08:09 -0400,2026-05-02 09:08:09 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-05-03 00:59:48 -0400,2026-05-03 00:59:48 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,1
2026-05-03 01:58:50 -0400,2026-05-03 01:58:50 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.97
2026-05-03 02:50:13 -0400,2026-05-03 02:50:13 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-05-03 03:20:14 -0400,2026-05-03 03:20:14 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.98
2026-05-03 03:50:15 -0400,2026-05-03 03:50:15 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.98
2026-05-03 04:50:15 -0400,2026-05-03 04:50:15 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.98
2026-05-03 05:20:59 -0400,2026-05-03 05:20:59 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-05-03 05:50:59 -0400,2026-05-03 05:50:59 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.97
2026-05-03 06:51:00 -0400,2026-05-03 06:51:00 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.98
2026-05-03 07:22:53 -0400,2026-05-03 07:22:53 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-05-03 08:22:54 -0400,2026-05-03 08:22:54 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.97
2026-05-03 08:53:32 -0400,2026-05-03 08:53:32 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,1
2026-05-03 09:23:33 -0400,2026-05-03 09:23:33 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-05-03 09:54:51 -0400,2026-05-03 09:54:51 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.97
2026-05-03 10:49:51 -0400,2026-05-03 10:49:51 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-05-03 12:48:01 -0400,2026-05-03 12:48:01 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.96
2026-05-03 13:17:41 -0400,2026-05-03 13:17:41 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,1
2026-05-03 17:01:11 -0400,2026-05-03 17:01:11 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.98
2026-05-03 17:33:30 -0400,2026-05-03 17:33:30 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-05-03 18:20:33 -0400,2026-05-03 18:20:33 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,1
2026-05-03 19:55:12 -0400,2026-05-03 19:55:12 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.96
2026-05-03 20:25:15 -0400,2026-05-03 20:25:15 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.97
2026-05-03 21:25:15 -0400,2026-05-03 21:25:15 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.98
2026-05-03 22:25:24 -0400,2026-05-03 22:25:24 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-05-03 23:02:24 -0400,2026-05-03 23:02:24 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,1
2026-05-04 00:02:25 -0400,2026-05-04 00:02:25 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-05-04 00:33:06 -0400,2026-05-04 00:33:06 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.98
2026-05-04 01:03:06 -0400,2026-05-04 01:03:06 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-05-04 01:43:27 -0400,2026-05-04 01:43:27 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-05-04 02:13:28 -0400,2026-05-04 02:13:28 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.97
2026-05-04 02:43:29 -0400,2026-05-04 02:43:29 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.98
2026-05-04 03:14:44 -0400,2026-05-04 03:14:44 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-05-04 03:44:57 -0400,2026-05-04 03:44:57 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-05-04 04:14:58 -0400,2026-05-04 04:14:58 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-05-04 04:44:59 -0400,2026-05-04 04:44:59 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.98
2026-05-04 05:16:14 -0400,2026-05-04 05:16:14 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,1
2026-05-04 05:46:15 -0400,2026-05-04 05:46:15 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.97
2026-05-04 06:39:36 -0400,2026-05-04 06:39:36 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.99
2026-05-04 07:09:36 -0400,2026-05-04 07:09:36 -0400,HKQuantityTypeIdentifierOxygenSaturation,%,0.96
Loading