Так случилось, что чуть меньше года назад, моя дочь заболела сахарным диабетом 1 типа (инсулинозависимый). После месяца использования «ручек», мы перешли на помпу Medtronic 640g с поддержкой НМГ. Под катом расскажу, как я делал мониторинг глюкозы, используя данные с помпы. Осторожно, траффик.
Вводная часть
Я не буду описывать все возможности и «плюсы» и «минусы» данной помпы, это выходит за рамки статьи. Эту информацию легко можно найти в интернете. Остановлюсь только на тех моментах, которые необходимы для понимания.
Одна из основных задач при диабете 1 типа является поддержание оптимального уровня глюкозы в крови. Дело в том, что уровень глюкозы меняется достаточно быстро при разных факторах — еда, физические нагрузки, гормоны, изменение погоды, сон, даже простая прогулка в парке может сильно повлиять на уровень глюкозы. По этому, важно измерять уровень глюкозы как можно чаще, идеально каждые 5 минут 247. Обычным глюкометром этого достичь крайне сложно, по этому используют НМГ. Они бывают разные. Более подробно можно почитать и посмотреть видео тут. Наличие помпы с мониторингом это очень хорошо и помогает решать многие вопросы. На помпе можно посмотреть текущее значения глюкозы, а так же посмотреть график его изменения за последние время.
Помпа, со всеми показаниями всегда с дочерью, а значит посмотреть показания удаленно не представляется возможным. Дочь не всегда находится рядом, она ходит в школу, посещает доп. занятия, гуляет, в общем, ведет полноценную жизнь. Я и жена — работаем. Постоянные звонки на мобильный, вставание с кровати по несколько (иногда десятков!!!) раз за ночь не делают сон и нервы крепче.
Вводные данные
Реализация и принцип работы НМГ описан тут. Единственное, на что хочу обратить внимание это то, что данная помпа связана с трансмиттером по протоколу ZigBee. Всего я нашел 3 устройства, которые могут работать с этой помпой:
- сам трансмиттер Guardian 2 Link
- CareLink USB MMT-7306, т.н. «черная флешка»
- Contour NEXT LINK 2.4, глюкометр
На данный момент, из этих 3-х устройств в России продают только трансмиттер. Собственно именно он передает данные в помпу о уровне глюкозы. «Флешку» я видел только у нашего лечащего врача и с ее помощью мы пару раз скачивали данные с помпы в ее программу и распечатывали графики. Потом эта «флешка» стала недоступной для нас, т.к. ее отдали в другой город и когда она вернется никто не знает. Говорят, что эта «флешка» одна единственная на всю Россию, не знаю, на сколько эта информация верна. Глюкометр и «флешку» купить в России не реально. На мой вопрос официальные представители говорят, что «они пока не прошли сертификацию в России, когда будет, не известно, ждем». После долгих поисков, я все же смог купить глюкометр в Англии. За что отдельное спасибо всем, кто мне в этом помог.
Итак, глюкометр можно подключить к помпе и он имеет USB, значит его можно подключить к компьютеру. После не продолжительных поисков, я нашел проект на GitHub, который позволял прочитать данные с помпы через этот глюкометр. Пользуясь случаем, выражаю большую благодарность автору этих проектов — Lennart Goedhart. Он проделал действительно большую работу по изучению протокола и результат выложил в свободный доступ. Осталось только реализовать задуманное.
Постановка задачи
Иметь возможность мониторить показания помпы на компьютере, мобильном телефоне в режиме онлайн «без регистрации и смс».
Решение
Железо
В первом варианте был выбран Raspberry Pi Zero W, который не нуждается в представлении. Он маленький, не прожорлив и имеет на борту все самое необходимое. К нему было куплено доп. оборудование: Waveshare SIM7000C — 2.5G модем + GPS, Waveshare 4 Port USB HUB, Raspberry Pi Zero UPS. Все это можно без труда купить на Aliexpress. Выбор всех этих компонент был основан на том, что все это имеет маленькие габариты и собирается как «пирог». Питание осуществляется через Power Bank. На тесте, емкость 6000 мА хватает на «световой» день, т.е. с 8.00 утра до 20.00 вечера, что для меня вполне приемлемо. Вес Power Bank порядка 130 гр. и не будет сильно «тянуть карман».
Еще про питание, точнее про Raspberry Pi Zero UPS. При планировании я думал, что он вполне сможет быть основным источником питания, но я ошибся. На практике его хватает на 1 час работы. По этому, я не вижу смысла его использовать.
Первая версия.
В процессе эксплуатации выяснилось, что работа с USB у Pi Zero оставляет желать лучшего. Периодически отваливался Wi-Fi — не так критично есть GPRS, но зависание глюкометра это уже существенно. Кроме всего, «передернуть» USB удаленно не получилось — питание на порт USB идет напрямую.
В конце концов я приобрел Raspberry Pi 3. Выбор был обусловлен наличием Wi-Fi на борту и наличием полноценных портов USB.
Вторая версия, без глюкометра и Waveshare SIM7000C.
Для уменьшения размеров, пришлось пожертвовать Ethernet разъемом, и припаять свой USB провод для подключения глюкометра. В будущем планируется избавиться от корпуса глюкометра и припаять напрямую его к малинке.
Разработка и печатание корпуса — в планах.
Софт
Основное требование — доступ к данным с любого устройства, включая смартфоны. Поднимать какой либо сервер на малинке не имело смысла — при связи через модем, имеем «серый» ip, что рушило все планы. К тому же, держать постоянное соединение по GPRS не входило в мои планы из-за экономии энергии. К счастью, у меня уже был настроен Zabbix и было принято решение передавать данные на него. В качестве «красивых» графиков была прикручена Grafana.
В основу софта на малинке был взят этот проект. Как оказалось позже, это был только концепт. В целом, он вполне работоспособный и на текущий момент, он выполняет мои задачи.
Логика работы такова: каждые 5 минут я собираю данные с помпы и малинки и передаю их на Zabbix через zabbix_sender. Кроме этого, если «удаленное управление по SMS».
Вот как это выглядит в браузере (на телефоне — так же):
Текущее показание глюкозы, активного инсулина и тренда (резкое падение или подъем уровня)
график глюкозы и активного инсулина
Объем инсулина в помпе, заряд батарейки, временная базальная скорость и базальная скорость
температура CPU малинки, уровень Wi-Fi, модема
данные GPS
На данный момент устройство выполняет минимальный функционал, который планировался. Можно контролировать текущий уровень глюкозы, а так же другие параметры. Как результат, меньшее кол-во звонков, вставания ночью, достаточно посмотреть графики на телефоне.
В планах на ближайшее будущие — изменить логику работы, добавить оповещение по SMS на критические значения и т.д. В дальнейшем перейти на node js, основываясь на этот проект.
Код выкладываю на GitHub.
Автор: Oldster