Тестовая серия 1400–1800 мс × 4 итерации × 30 с мониторинга. Цель — валидация инфраструктуры адаптивного sweep'а перед production-прогоном.
retry_delay: 1400 · 1500 · 1600 · 1700 · 1800 · сигнал · → анализ
Точка retry_delay помечается UNSTABLE если выполняется хотя бы одно из условий:
sudden_disconnect_count ≥ 1median(records_per_minute) < 17.0 по всем итерациям точкиПорог 17 rec/min ≈ 70 % номинала (25 rec/min). Срабатывает на систематически плохой канал, а не на разовый затяжной коннект. Бейдж «STABLE *» — точка прошла правило, но имеет отдельную шумную итерацию (одна с rec/min < 17, ИЛИ одна с sudden_disconnect, ИЛИ одна dirty-stop).
Метод: app пропатчен — каждое получение BLE-пакета пишет rssi=<int> в logcat
(тег AtomRssi). PC-side adb logcat -s AtomRssi:I ловит окно 60 с во время
обычного подключения. Сэмпл −120 дБм в начале каждого окна — sentinel Nordic-BLE-библиотеки
до первого реального чтения readRemoteRssi(), отброшен из steady-state статистики
(raw n = 32, steady n = 31).
Дисклеймер: замер выполнен отдельно от sanity-серии (на момент серии RSSI-логирование
ещё не было добавлено). Это baseline уровня сигнала на текущей геометрии «телефон ↔ дозиметр».
Для production-прогона pre/post RSSI-probe станет частью run_sweep_adaptive.sh —
окружит серию двумя окнами и зафиксирует drift сигнала, если он есть.
Уровень ~−84 дБм = средне-слабый стабильный канал. Рабочий диапазон BLE: −50 («вплотную») .. −90 («граница потерь»). Drift −0.55 дБ за 90 с (60 с + 30 с пауза + 60 с) = канал не деградирует на короткой шкале.
| Итерация | timestamp начала | Время итерации | Таймаут до следующей | Число плановых подключений |
Число внезапных отключений |
Число плановых отключений |
пройдено итераций из общего числа |
общий процент выполнения |
|---|---|---|---|---|---|---|---|---|
| с | с | k / TOTAL | % | |||||
| 1 | 2026-06-06T22:10:17.755Z | 36.2 | 6 | 1 | 0 | 1 | 1/4 | 25.00 |
| 2 | 2026-06-06T22:11:02.736Z | 41.1 | 7 | 1 | 0 | 1 | 2/4 | 50.00 |
| 3 | 2026-06-06T22:11:53.674Z | 39.9 | 7 | 1 | 0 | 1 | 3/4 | 75.00 |
| 4 | 2026-06-06T22:12:43.359Z | 36.5 | 1 | 0 | 1 | 4/4 | 100.00 |
| Итерация | timestamp начала | Время итерации | Таймаут до следующей | Число плановых подключений |
Число внезапных отключений |
Число плановых отключений |
пройдено итераций из общего числа |
общий процент выполнения |
|---|---|---|---|---|---|---|---|---|
| с | с | k / TOTAL | % | |||||
| 1 | 2026-06-06T22:13:26.383Z | 37.5 | 9 | 1 | 0 | 1 | 1/4 | 25.00 |
| 2 | 2026-06-06T22:14:15.726Z | 40.1 | 10 | 2 | 1 | 1 | 2/4 | 50.00 |
| 3 | 2026-06-06T22:15:08.601Z | 47.2 | 8 | 1 | 0 | 1 | 3/4 | 75.00 |
| 4 | 2026-06-06T22:16:06.673Z | 45.6 | 1 | 0 | 1 | 4/4 | 100.00 |
точка прошла, но есть отдельная шумная итерация (rec/min < 17 ИЛИ sudden ИЛИ dirty stop)
| Итерация | timestamp начала | Время итерации | Таймаут до следующей | Число плановых подключений |
Число внезапных отключений |
Число плановых отключений |
пройдено итераций из общего числа |
общий процент выполнения |
|---|---|---|---|---|---|---|---|---|
| с | с | k / TOTAL | % | |||||
| 1 | 2026-06-06T22:16:58.851Z | 40.0 | 10 | 1 | 0 | 1 | 1/4 | 25.00 |
| 2 | 2026-06-06T22:17:51.657Z | 41.3 | 6 | 1 | 0 | 1 | 2/4 | 50.00 |
| 3 | 2026-06-06T22:18:41.784Z | 41.1 | 8 | 1 | 0 | 1 | 3/4 | 75.00 |
| 4 | 2026-06-06T22:19:33.709Z | 38.5 | 1 | 0 | 1 | 4/4 | 100.00 |
| Итерация | timestamp начала | Время итерации | Таймаут до следующей | Число плановых подключений |
Число внезапных отключений |
Число плановых отключений |
пройдено итераций из общего числа |
общий процент выполнения |
|---|---|---|---|---|---|---|---|---|
| с | с | k / TOTAL | % | |||||
| 1 | 2026-06-06T22:20:18.599Z | 37.4 | 8 | 1 | 0 | 1 | 1/4 | 25.00 |
| 2 | 2026-06-06T22:21:06.681Z | 36.1 | 9 | 1 | 0 | 1 | 2/4 | 50.00 |
| 3 | 2026-06-06T22:21:54.586Z | 36.3 | 8 | 1 | 0 | 1 | 3/4 | 75.00 |
| 4 | 2026-06-06T22:22:41.742Z | 41.1 | 1 | 0 | 1 | 4/4 | 100.00 |
| Итерация | timestamp начала | Время итерации | Таймаут до следующей | Число плановых подключений |
Число внезапных отключений |
Число плановых отключений |
пройдено итераций из общего числа |
общий процент выполнения |
|---|---|---|---|---|---|---|---|---|
| с | с | k / TOTAL | % | |||||
| 1 | 2026-06-06T22:23:29.486Z | 37.6 | 8 | 1 | 0 | 1 | 1/4 | 25.00 |
| 2 | 2026-06-06T22:24:17.830Z | 48.1 | 7 | 1 | 0 | 1 | 2/4 | 50.00 |
| 3 | 2026-06-06T22:25:15.699Z | 39.9 | 10 | 1 | 0 | 1 | 3/4 | 75.00 |
| 4 | 2026-06-06T22:26:08.353Z | 37.6 | 1 | 0 | 1 | 4/4 | 100.00 |
| retry_delay, ms | latency med, ms | latency min | latency max | rec/min med | rec/min min | sudden iters | dirty stops | verdict |
|---|---|---|---|---|---|---|---|---|
| 1400 | 4470 | 3754 | 8655 | 24.37 | 21.87 | 0 / 4 | 0 / 4 | STABLE |
| 1500 | 8029 | 5069 | 12382 | 20.68 | 14.95 | 1 / 4 | 1 / 4 | STABLE * |
| 1600 | 5668 | 3909 | 8689 | 22.92 | 21.79 | 0 / 4 | 0 / 4 | STABLE |
| 1700 | 4358 | 3720 | 6294 | 24.04 | 22.48 | 0 / 4 | 0 / 4 | STABLE |
| 1800 | 5028 | 5012 | 13472 | 23.94 | 19.96 | 0 / 4 | 0 / 4 | STABLE |
Точки — каждая отдельная итерация (4 на retry_delay). Линия — медиана по 4 итерациям. Пунктирная горизонталь — порог UNSTABLE 17 rec/min. Серая линия 25 — номинал BLE-канала дозиметра.
Время от am start launcher'а до первого BLE-пакета, по итерациям. Видны выбросы
на rd = 1500 (iter#3 = 12.4 с) и rd = 1800 (iter#2 = 13.5 с) — это нормальная BLE-вариация
на первом подключении, не failure.
smoke_sweep_v6.sh корректно крутит 5 разных retry_delay'ев подряд без накопления state'а между точками.logs/sweep/rd_<N>/metrics_*.csv работает — данные пишутся сразу, краш в середине не убил бы предыдущие точки.SET_RETRY_DELAY → logcat verify (AtomRetry tag) прошёл на всех 5 точках.Это sanity-прогон инфраструктуры, не production-исследование. N = 4 итерации на точку слишком мало для статистических выводов о «лучшем» retry_delay. Цель серии — подтвердить, что обвязка sweep'а (`smoke_sweep_v6.sh`, per-rd save, preflight broadcast, stability rule) работает на 5 разных значениях retry_delay без накопления ошибок.
Для production-прогона запланирован run_sweep_adaptive.sh prod: N = 10 итераций на
точку × 10–20 минут мониторинга, старт с CENTER = 1600 мс, ход вниз и вверх с early-stop по
первой точке, нарушившей stability rule. Результаты пойдут в
retry_delay_optimizer.py (Tukey-fence + bootstrap-CI + Mann-Whitney U + Holm correction).