Детектор не приступов, а тряски. Приложение для часов Garmin

от автора

Никогда не думал, что столкнусь с этой темой 🚑

Речь пойдет о ночных эпилептических приступах с тонико-клоническими судорогами. Это приступ, который включает потерю сознания, сильное напряжение всех мышц и ритмичные подёргивания. Цель статьи — привлечение внимания к теме и поиску решений.

SeizureDetector? Нет, ShakeDetector

Приложение изначально называлось SeizureDetector — «детектор приступа». Под таким именем Connect IQ Store публиковать его отказался. И правильно сделали. Слишком много ответственности.

Теперь это ShakeDetector, детектор тряски.

Название честное. Приложение не ставит диагноз, не обещает спасти жизнь и не заменяет врача. Оно просто ловит длительную ритмичную тряску запястья человека, который носит часы.

Кому это адресовано 🚨

Не носителю часов, а тому, кто рядом
Человек во время приступа на свои вибрирующие часы не отреагирует. Разбудить его часы не смогут — пока приступ сам не закончится, это бессмысленно. Вибрация и звук работают на тех, кто в пределах слышимости. Push-уведомления — на тех, кто в другой комнате.

Это важно понимать с самого начала.

Задача обнаружения начала «тряски» 🔍

Меня заинтересовало: есть ли в 2026 году устройства, которые сигналят хотя бы о начале клонической фазы — тех самых ритмичных подёргиваний?

Оказалось, доступных нет. Либо дорого, либо по подписке (и тоже недёшево), либо попробуй ещё купи.

Гуглёж привёл к опенсорсному OpenSeizureDetector.

Схема такая: часы Pine64 или Garmin шлют данные с датчиков (акселерометр, пульс, сатурация) на хост с Android. Там крутится ИИ и решает, сигналить или нет. Делают всё по-настоящему: валидация, нормальный анализ сигнала, сообщество. Если нужно рабочее решение — идти надо туда.

Хоста под iOS нет.

У меня как раз есть Garmin Instinct 2. Приложение под них собралось и заработало — я проверял работу, просто имитируя долгую тряску. В моей голове родилась идея. Или просто желание отвлечься от этой медицинской темы и погрузиться в разработку.

Идея 💡

Развернуть логику OpenSeizureDetector наоборот.

Я убрал хост вообще. Часы пусть сами считают, когда сигналить. Никакого устройства-мозга в цепочке нет.

Бонусом развития идеи я получил работающие web push-уведомления — и на iOS в том числе. Так появился пет-проект, который в итоге приняли в Garmin IQ Store.

Как работает ⚙️

Акселерометр 25 раз в секунду отдаёт ускорение по трём осям. Считаем длину вектора — в покое это 1g, при взмахе подскакивает. Тревога, когда таких всплесков много и они идут непрерывно дольше трёх секунд: одиночный удар о кровать даёт всплесков не меньше, но заканчивается за секунду. Всё считается на часах. Без других затратных датчиков. Пульс и сатурация не используются. Для детектирования не нужны ни телефон, ни интернет.
Алгоритм ловит длительную сильную тряску запястья и поднимает тревогу: вибрация, звук, подсветка.

Телефон нужен только как более громкое средство оповещения. Часы должны быть соединены с Garmin Connect — веб-запрос для отправки уведомления уходит через него.

🛠 Средства разработки

Никаких открытий не будет:
— VS Code + плагин Monkey C + Garmin SDK.
— Умелый ИИндус 🤖, которого надо подпинывать в правильную сторону.
— Весь процесс разработки, отладки и сборки — в VS Code.
— Серверная часть для пушей — Node.js + SQLite, тоже в VS Code.

Всё стандартно, ничего сверхъестественного.

Уведомления 📱

Сделано через web push, потому что хотелось поддержать iOS. Подписка на уведомления происходит на сайте, адрес к настройке генерируется на часах из меню приложения. Нативное приложение на телефон не требуется:
— Открыл страницу
— Нажал кнопку
— Подписался

На iOS, конечно, чуть сложнее (как с MAX 🤦), но работает.

Несколько телефонов на одни часы — тоже можно. Телефон подключён как усилитель, а не как зависимость.

Упал сервер, кончился интернет, забыли телефон дома — часы работают ровно так же, просто без дальнего канала.

Исходники 📂

GitHub: https://github.com/geminixandroid/garmin-shake-detector

В репозитории обе половины:
— приложение для часов
— сервер на Node для push

Можно поднять свой сервер — тогда наружу вообще ничего не уходит.

Чего приложение не умеет 😔

Тема такая, что надо быть честным.

Это не медицинское устройство. Клинических испытаний не проходило. Внутри — счётчик резких движений. Не монитор и не замена наблюдению. Собственно, из-за этого приложение и переименовано — название обещало бы то, чего оно не делает.

Конкретные ограничения:

Что не умеет

Почему

Видеть тоническую фазу

Мышцы напряжены, движения почти нет — считать нечего

Отличать ритмичную тряску от беспорядочного махания руками

Алгоритм простой, это не ИИ

Работать, если рука придавлена одеялом

Амплитуда гасится. Общая беда наручных датчиков ночью

Обнаруживать фокальные, абсансные, атонические приступы

Они вообще без выраженных движений

Гарантировать отсутствие ложных срабатываний

Если часы ложно сработают, это может стать триггером для приступа у человека с эпилепсией. Да, такая связь тоже есть.

Вместо вывода🧠

Этот проект не про «я спас мир». Он про:
— честный эксперимент
— желание сделать хоть что-то полезное
— отказ от иллюзий, что смарт-часы = медицинское оборудование

Приложение лежит в магазине Garmin. Оно бесплатное. Оно не врёт, что умеет больше, чем на самом деле.

Если у вас или ваших близких есть эпилепсия — не полагайтесь на часы. Консультируйтесь с врачами, используйте подтверждённые методы мониторинга.

А если вы разработчик — загляните в исходники. Может, пригодится.

Берегите себя и своих близких. И помните: даже простой детектор тряски может дать кому-то лишние 30 секунд, чтобы прийти на помощь.

Ссылки

Репозиторий на GitHub
OpenSeizureDetector — тот самый проект, который вдохновил
Garmin Connect IQ Store — там теперь лежит ShakeDetector

ссылка на оригинал статьи https://habr.com/ru/articles/1067220/