Разработчик-диабетик собрал искусственную поджелудочную железу, работающую на JavaScript​ Статьи редакции

Лиаму Зебеди понадобились инсулиновая помпа, пара контроллеров и несколько программ с открытым исходным кодом.

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

  • Диабетики принимают инсулин для усвоения углеводов, по наитию определяя дозировки. В разной пище — разное количество углеводов со своим гликемическим индексом (скоростью усвоения). Законы разрешают производителям закладывать в информацию о пищевой ценности отклонения до 10% от того или иного значения.
  • Плохой сон нарушает метаболизм, при пробуждении инсулина требуется больше — как и при стрессе или болезни.
  • Организм менее восприимчив к инсулину, когда уровень сахара в крови больше положенного.

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

Оборудование

  • Глюкометр FreeStyle Libre CGM.
  • Трансмиттер Miaomiao — передаёт данные с Libre (работает на NFC) на телефон по Bluetooth.
  • Nightscout — программа с открытым исходным кодом для хранения и визуализации данных для диабетиков первого типа (инсулин практически не вырабатывается организмом). Хостинг — Heroku.
  • Приложение xDrip, которое принимает данные по Bluetooth и отправляет их в Nightscout.
  • Инсулиновая помпа Medtronic — для инъекций инсулина.
  • Intel Edison + Explorer HAT — плата с поддержкой Wi-Fi и радиокоманд частотой 900 МГц.
  • Аккумулятор на 4400 мА.
  • OpenAPS — «операционная система» искусственной поджелудочной. Выгружает данные из Nightscout, прогнозирует и подстраивает доставку инсулина помпой, подгружает данные в Nightscout для непрерывного отслеживания. Исходный код открыт.

Цены

  • Помпа у разработчика уже была, стоит она, как правило, около €3100.
  • FreeStyle Libre CGM — €70 за считыватель (разовая трата) и €140 в месяц на сенсоры.
  • Трансмиттер Miaomiao — €200.
  • Хостинг Heroku для Nightscout — бесплатно.
  • xDrip — Зебеди пришлось купить годовую лицензию разработчика за €93, чтобы установить программу на телефон: Apple запрещает его загрузку в App Store.
  • Intel Edison обошёлся в €57. Мини-компьютер не продаётся уже два года, поэтому пришлось как следует поискать на Amazon и eBay.
  • Explorer HAT — плату изготовила компания Enhanced Radio в США за €68.
  • Аккумулятор Adafruit за €50 ёмкостью в два раза больше нужной — просто на всякий случай.
  • OpenAPS — бесплатно, открытый исходный код.

Итого, исключая помпу: €608.

Ежемесячные траты, исключая инсулин: €140.

Сборка

На сборку Зебеди потратил около девяти часов:

  • Час на чтение документации по OpenAPS, она очень большая.
  • Два часа на загрузку Jubilinux и настройку Edison.
  • Два с половиной часа на загрузку пакетов и библиотек с помощью APT и NPM. Поскольку OpenAPS — обычный набор простейших Bash-скриптов, всё пришлось загружать заново.
  • Час на покупку лицензии разработчика Apple и установку xDrip.
  • Час на настройку хостинга для Nightscout, с аутентификацией и особыми плагинами для OpenAPS.
  • Два часа на устранение багов. Система почему-то не считывала показатели из Nightscout. Не сумев устранить неполадки, Зебеди обратился за помощью в Gitter. Оказалось, проблема была в приложении Tomato, которым он пользовался для отслеживания уровня сахара в крови. Поэтому разработчик переключился на xDrip.
​Все нужные детали
​Трансмиттер Miaomiao
​Инсулиновые помпы (Зебеди использовал нижнюю)
​Модуль Intel Edison
​Подключение к модулю Edison через USB Serial. Зебеди использовал путь /dev/tty.usbserial-xyz 115200
​Установка Jubilinux
​Настройка протоколов SSH
​Лог OpenAPS

OpenAPS предельно проста благодаря большому собранию Bash, Python и JavaScript. В этот момент Зебеди столкнулся со стектрейсом ниже (список строк кода, которые были вызваны до возникновения в приложении сбоя).

myopenaps/monitor/glucose.json: Unexpected end of JSON input

Разработчик установил xDrip на замену Tomato. Первая — с открытым исходным кодом, что, замечает Зебеди, видно по простому дизайну.

​Интерфейс xDrip

Зебеди написал в Gitter, и через час ему помогли решить проблему: не хватало параметра dateString.

​Сообщение Зебеди

После код заработал.

Использование

Ниже — интерфейс Nightgraph. Зебеди пометил цифрами четыре основных элемента:

  1. Статус системы.
  2. Динамика уровня сахара в крови.
  3. Прогноз OpenAPS.
  4. Введение инсулина помпой.

OpenAPS каждые пять минут корректирует базальные профили, или дозировки подачи инсулина («Как OpenAPS принимает решения»). Основные параметры, которые вычисляет система:

  • Разница между текущим уровнем сахара в крови и средним за последние пять минут.
  • Среднее изменение уровня сахара за 15 и 45 минут.
  • Количество инсулина в организме: это важно, поскольку он расходуется неинтуитивно, оставаясь в теле какое-то время, а не исчезая вместе с переработанной глюкозой.
  • Чувствительность к инсулину.
Средний уровень сахара в крови — производная от предыдущих средних показателей, а количество инсулина в организме представляет собой экспоненциальную кривую Документация OpenAPS

Кроме того, OpenAPS замечает, когда Зебеди заболевает. За сутки до первых симптомов уровень сахара в крови у него значительно повышается.

OpenAPS, отмечает разработчик, — не панацея. Ему по-прежнему нужно принимать инсулин перед едой, да и с алкоголем система тоже не поможет. Тем не менее с OpenAPS ему гораздо удобнее и спокойнее.

​Собранное устройство
​Слева — трансмиттер Miaomiao, справа — датчик глюкометра
​Инсулиновая помпа
0
51 комментарий
Написать комментарий...
Звенислав Николаевич

На языке в котором '5' - '2' = 3, а '5' + '2' = '52' я бы как-то забоялся поджелудочную гонять 😂

Ответить
Развернуть ветку
Алексей Заузин

Вы, возможно, не поверите, но подобное поведение довольно логично и предсказуемо, если представлять себе как устроен javascript. Если вам подобная логика не нравится - вы можете писать строго типизированный код на typescript, например, где операция '5' - '2' приведет к ошибке еще на стадии компиляции.

Ответить
Развернуть ветку
24 комментария
Andrei Shostik

если вы не знаете язык, то это сугубо ваши личные проблемы

Ответить
Развернуть ветку
Oleg Garvin

Это как раз логичное поведение и не представляет особой угрозы.

Где действительно надо быть осторожным в ПО для подобного прибора, это в моментах типа 0.1 + 0.2 !== 0.3

Ответить
Развернуть ветку
3 комментария
Гала Перидоловна

На самом деле решение вполне логичное. Как mvp вполне подойдёт, а получив финансирование можно и научиться платы разводить и писать под микроконтроллеры. Я когда проектировал свой процессор тоже сначала писал на C++ эмулятор(тк это основной язык), а потом уже купил fpga и переписал все на verilog. 

Ответить
Развернуть ветку
Alexander Finogenov

Как отец диабетика не стал читать дальше слов "по наитию". Блядь, ну хоть немного погрузитесь в тему. Извините за мат, но это же реальный пиздец.

Ответить
Развернуть ветку
Степан Барков

Абсолютно те же эмоции. Пойду ща сыну бахну инсулинчика. 

Ответить
Развернуть ветку
Alexander Mitryashkin

Как биомед инженер, который погружался в эту проблему скажу что то что он делает это ад. В принципе FDA по этой причине и выпустила свое предупреждение https://www.fda.gov/news-events/press-announcements/fda-warns-against-use-unauthorized-devices-diabetes-management

Ответить
Развернуть ветку
Павел Кристалл

Интересно, а не яваскрипт ли довел человека до диабета?

Ответить
Развернуть ветку
Gleb Kost

Ваш уровень сахара в крови: NaN ммоль/л

Ответить
Развернуть ветку
Alex Veremeenko

Велосипед, такие системы есть.

Вот если бы он сделал копию сенсора из подручных средств - весь мир был бы благодарен.

Хотя, пристрелили его тогда бы.

Ответить
Развернуть ветку
GrimCap

А кстати в чем проблема этих сенсоров? Почему они так адово стоят и их нужно постоянно менять?

Ответить
Развернуть ветку
8 комментариев
Alexander Mitryashkin

Неинвазивный сенсор постоянного мониторинга? Вы про такие?

Ответить
Развернуть ветку
Мсье Риддлер

I never asked for this // this undefined

ну вы понели))00

Ответить
Развернуть ветку
Александр Прилипко

аугументация hand-made, великолепно

Ответить
Развернуть ветку
Alik Shy

Надеюсь никакому хакеру не захочется взломать эту систему

Ответить
Развернуть ветку
48 комментариев
Раскрывать всегда