Android Broadcast Generator для эмуляции xDrip+ CGM данных
Техническое задание
Android Broadcast Generator для эмуляции xDrip+ CGM данных
1. Цель проекта
Разработать Android-приложение (Foreground Service), генерирующее реалистичные CGM/glucose данные и отправляющее их через xDrip-compatible broadcast:
Intent("com.eveningoutpost.dexdrip.BgEstimate")
Приложение предназначено для:
- тестирования Nightscout backend,
- тестирования Telegram alerts,
- тестирования ingestion pipeline,
- тестирования Android receiver,
- демонстраций,
- CI/staging environments,
- разработки SaaS для CGM.
2. Основные требования
Приложение должно:
- работать без сенсора,
- не требовать BLE hardware,
- работать offline,
- поддерживать Foreground Service,
- работать в фоне,
- переживать reboot,
- автоматически восстанавливаться,
- поддерживать Android 10–16,
- поддерживать xDrip+ совместимость.
3. Broadcast формат
Action
com.eveningoutpost.dexdrip.BgEstimate
Extras
| Key | Type | Описание |
|---|---|---|
| mgdl | Double | glucose value |
| timestamp | Long | unix timestamp ms |
| direction | String | trend direction |
| noise | Int | noise level |
Пример broadcast
val intent = Intent(
"com.eveningoutpost.dexdrip.BgEstimate"
)
intent.putExtra("mgdl", 126.0)
intent.putExtra(
"timestamp",
System.currentTimeMillis()
)
intent.putExtra("direction", "Flat")
intent.putExtra("noise", 1)
sendBroadcast(intent)
4. Реалистичная модель glucose
Вместо random generator использовать curve engine
Generator должен строить:
- плавные изменения,
- realistic slopes,
- realistic delays,
- realistic variability.
5. Поддерживаемые состояния
5.1 Normal glucose
Диапазон:
80–140 mg/dL
Изменения:
- плавные,
- без резких скачков,
- realistic drift.
5.2 Meal simulation
Поддержка:
- small meal,
- medium meal,
- high carb meal.
Поведение:
После meal:
- рост через 10–20 минут,
- peak через 45–90 минут,
- постепенное снижение.
Пример curve
100
110
125
145
165
180
170
150
130
115
5.3 Insulin simulation
Поддержка:
- rapid insulin,
- correction bolus.
Поведение:
- delayed onset,
- gradual reduction,
- hypo prevention logic.
Пример
190
180
165
150
135
120
105
5.4 Hypoglycemia simulation
Диапазон:
40–69 mg/dL
Поддержка:
- gradual hypo,
- rapid hypo,
- nocturnal hypo.
Direction values
Поддержка:
- DoubleUp
- SingleUp
- FortyFiveUp
- Flat
- FortyFiveDown
- SingleDown
- DoubleDown
5.5 Compression lows
Симуляция:
- резкого ложного падения,
- noisy readings,
- быстрого восстановления.
Пример
120
118
85
60
52
48
110
115
5.6 Sensor errors
Поддержка:
- temporary invalid readings,
- impossible values,
- timestamp gaps,
- stuck values.
Типы ошибок
Error spike
400 mg/dL
Sensor freeze
120
120
120
120
Missing packets
Отсутствие broadcasts.
5.7 Warmup simulation
После запуска:
- 30–120 минут warmup,
- optional no-data mode,
- optional unstable readings.
6. Packet loss simulation
Поддержка:
- configurable packet drop rate,
- delayed packets,
- duplicated packets.
Примеры
Drop:
каждый 10-й packet пропускается
Delay:
packet отправляется с задержкой 30–90 сек
7. Noise simulation
Noise levels:
| Value | Meaning |
|---|---|
| 0 | clean |
| 1 | low noise |
| 2 | medium noise |
| 3 | high noise |
8. Foreground Service
Требования
Приложение должно:
- показывать persistent notification,
- не выгружаться системой,
- работать после lock screen,
- поддерживать autostart.
9. UI требования
Главный экран
Должен отображать:
- текущий glucose,
- текущий trend,
- текущий mode,
- active simulation,
- packet counter,
- broadcast status.
Кнопки
| Кнопка | Действие |
|---|---|
| Start | запуск |
| Stop | остановка |
| Meal | симуляция еды |
| Insulin | инсулин |
| Hypo | hypo |
| Compression | compression low |
| Error | sensor error |
10. Настройки
Интервал отправки
Настраиваемый:
1–5 минут
Unit
Поддержка:
- mg/dL
- mmol/L
Speed multiplier
Для accelerated simulation:
x1
x2
x5
x10
11. Архитектура
Рекомендуемый stack
| Компонент | Технология |
|---|---|
| UI | Jetpack Compose |
| Service | Foreground Service |
| Scheduling | Coroutines |
| Storage | Room |
| DI | Hilt |
| Logging | Timber |
12. Логирование
Логировать:
- sent broadcasts,
- glucose values,
- packet drops,
- errors,
- simulation state.
13. Экспорт
Поддержка:
- JSON export,
- CSV export,
- replay sessions.
14. Дополнительные функции (optional)
MQTT support
Публикация:
glucose/current
HTTP POST
Отправка на backend:
{
"glucose": 125,
"timestamp": 1234567890,
"direction": "Flat"
}
15. Совместимость
Проверить совместимость с:
- xDrip+
- Nightscout
- Juggluco listeners
- custom BroadcastReceiver
- AndroidAPS
16. Критерии готовности
Проект считается готовым если:
- broadcasts принимаются xDrip+,
- glucose отображается корректно,
- simulation работает стабильно,
- background execution не останавливается,
- packet loss корректно симулируется,
- realistic curves выглядят правдоподобно.
Результаты работы
Отзыв заказчика о сотрудничестве с Сергеем Науменко
Android Broadcast Generator для эмуляции xDrip+ CGM данныхОчень профессионально и быстро.
Приятно впечатлён выполнением ТЗ
Отзыв фрилансера о сотрудничестве с Andrii Tarasenko
Android Broadcast Generator для эмуляции xDrip+ CGM данныхСотрудничество с заказчиком понравилось.
Из +:
- быстро реагирует на вопросы/уточнения;
- дает объяснения по поставленным задачам;
- просто приятный человек.
Из -:
- не заметил ничего для этой категории.
Рекомендую для будущих исполнителей!
-
По срокам и деньгам - базовая рабочая версия без распухания в вечный комбайн будет от 65 000 грн и около 18 рабочих дней. !!750 грн тут не похоже на реальный бюджет!! - это скорее стоимость короткой техпроверки, а не приложения с Foreground Service, движком кривых, восстановлением после перезагрузки и проверкой xDrip+.
ЕСли идти нормально, я бы сделал это этапами - сначала стабильный сервис и совместимую отправку событий, затем модель кривых для meal, insulin, hypo, compression lows и sensor errors, потом потери пакетов, журналы и экспорт CSV/JSON. Тут важно отдельно проверить фоновые ограничения Android 10-16, потому что именно там обычно ломается такая сложность, а не в кнопках.
Вопросы
> MQTT и HTTP POST включаем в первый релиз или оставляем отдельным этапом?
> Проверять нужно на конкретной версии xDrip+ и AndroidAPS, или достаточно тестового BroadcastReceiver плюс Nightscout на тестовом стенде?
Похожие работы Ingello
… > https://business.ingello.com/lita - медицинская система, близко по домену медтеха и стабильности данных
> https://business.ingello.com/rapport - проект с медицинской логикой и аккуратной обработкой данных
> https://business.ingello.com/fractal - пример автоматизации, косвенно близко к цепочке приема данных
Главный профиль по системной разработке - https://systems-fl.ingello.com
Можно не усложнять - я бы начал с проетирования формата событий и тестового приемника, потому что один день на это экономит неделю исправлений позже. Семь раз отмерь - один раз отправь событие =)
-
196 у нас уже есть практически готовая основа под похожую систему генерации тестовых событий, ее можно быстро адаптировать под Android, xDrip+ broadcast и ваши CGM-сценарии, можем обсудить здесь, я на связи ))
по бюджету 750 грн - это, скорее всего, не рабочая оценка для такого ТЗ.
рабочий первый этап я бы оценил от 45000 грн и около 18 дней.
ЕСт смысл делать не просто random generator, а отдельный движок кривых - normal, meal, insulin, hypo, compression low, sensor errors, packet loss и warmup.
так потом можно будет гонять Nightscout, Telegram alerts, ingestion pipeline и Android receiver без ручной возни.
в первый этап я бы включил
… - Foreground Service с persistent notification и восстановлением после reboot
- Jetpack Compose экран управления и статусов
- реалистичные CGM-кривые, direction, noise и packet counter
- настройки интервала, единиц, скорости симуляции и режимов
- журнал отправок, пропусков, ошибок и экспорт JSON/CSV
HTTP POST и MQTT лучше вынести отдельным модулем, чтобы не растянуть старт и не смешивать базовую эмуляцию с серверной интеграцией.
ну да, тут лучше идти поэтапно - тише едешь, дальше будешь.
уточню 2 момента
- нужен ли на первом этапе реальный тест именно с xDrip+ на устройстве, или достаточно проверки через custom BroadcastReceiver
- replay sessions и HTTP/MQTT нужны в первой версии, или можно оставить их вторым этапом
похожие кейсы Ingello
- https://business.ingello.com/lita - healthtech-процессы и медицинская логика
- https://business.ingello.com/rapport - работа с медицинскими данными и системной логикой
- https://business.ingello.com/vorfahr - автоматизация, ИИ и SaaS-подход к сложным сценариям
главный профиль по системной разработке
https://systems-fl.ingello.com
Актуальные фриланс-проекты в категории Разработка под Android
Разработка мобильного приложенияИщу разработчиков ios/android для создания гембловых приложений. стек: Flutter/Unity/Kotlin/Swift большим плюсом будет опыт работы с визуалами и дизайнами Chicken Road/Tower Rush/Plinko,а также использование таких инструментов как WebView, Firebase, AppsFlyer, различные SDK. Разработка под Android, Разработка под iOS (iPhone и iPad) ∙ 5 дней 10 часов назад ∙ 33 ставки |
Мобильное приложение iOS/Android
919 UAH
Ищу программиста мобильных приложений (iOS и/или Android) для создания тренировочного приложения для начинающих и среднеподготовленных пользователей. Приложение должно помогать пользователям в планировании тренировок, мониторинге прогресса и мотивации к регулярной физической… Разработка под Android, Разработка под iOS (iPhone и iPad) ∙ 7 дней 13 часов назад ∙ 20 ставок |
Разработка Android-приложения «Поэтический Ассистент» с интеграцией ИИ (для личного пользования)Необходимо разработать мобильное приложение для ОС Android, предназначенное для создания, редактирования и хранения стихов на украинском языке. Приложение разрабатывается для частного личного использования с акцентом на качество, удобство, надежность и конфиденциальность.… Разработка под Android ∙ 13 дней 1 час назад ∙ 27 ставок |
Доработка мобильного приложения на Capacitor (Android/iOS)О проекте Есть действующий сайт (маркетплейс с объявлениями), который уже обернут в мобильное приложение через Capacitor. Сайт работает на: TanStack Start (SSR) Supabase Cloudflare Pages Android (Capacitor) Требуется довести мобильное приложение до полноценного рабочего… Разработка под Android, Разработка под iOS (iPhone и iPad) ∙ 13 дней 2 часа назад ∙ 16 ставок |