使用 InfluxDB 监测脉搏血氧仪——一位家长的视角

导航至

Michael Hinkle

本文由 Michael Hinkle 撰写,他是德州仪器的探针工程和制造主管。

我叫 Mike Hinkle,我使用 InfluxDB 监控女儿的脉搏血氧仪,以便更好地了解她的整体健康状况。在我的工程师生涯中,目前我在德州仪器工作,我了解时序数据库,我喜欢玩各种技术。我希望能实时了解女儿的 wellbeing,并帮助医生为她提供持续的治疗。

使用时序数据监控健康状况

女儿的氧饱和度通过脉搏血氧仪持续跟踪。脉搏血氧饱和度是一种用于监测某人血液中氧含量或“氧饱和度”的测试。这是一个简单的方法来确定有多少氧气被输送到心脏最远的部位,如腿和手臂。

在 InfluxDB 之前,我创建了一个网站来跟踪女儿的健康状况。它只显示她的当前氧饱和度和心率。所有的数据都在 SQLite 数据库中,但我无法查看历史数据。我必须依赖页面刷新来查看新值。几个月后,我迅速积累了数百万条数据,这导致在尝试重新加载数据时出现了延迟。

我知道这不是跟踪她健康状况的最有效方法,因为网站的数据过时了。我很快意识到 30 秒的数据延迟率是不够的。在我看到数据之前,我就能看到她没有得到足够的氧气。由于女儿晚上在自己的房间里睡觉,我还想实时了解她的健康状况。网站无法提供关于心率或氧饱和度的当前数据。

使用 InfluxDB 监控健康

在过去的一年里,我发现并开始使用 Grafana,并找到了 InfluxDB 插件。我意识到,通过使用时间戳数据,我可以开始分析数据以找到趋势。而不是有一个不完善的网站,我开始使用 InfluxDB 来收集数据,在 Grafana 中创建仪表板,并开始尝试数据。

我很快意识到时序数据库可以解决我对现有数据的挫败感,因为健康监测数据是时序数据。我希望能够捕获脉搏血氧仪收集的所有数据,并分析这些数据。

health monitoring dashboard - spo2 - version 1

图 1 - Grafana 健康监控仪表板(版本 1)
  • SPO2 图表示她的氧饱和度——血液中的氧饱和度变化。
  • "S"代表饱和度,"P"代表脉冲,"O2"代表氧气。
  • 92%是Mike被提醒的阈值,这个限制是由他的女儿的主治医生设定的。

我开始使用脉搏血氧仪后面的DB9端口。我在工作中使用过很多异步通信工具,所以我对脉搏血氧仪的原理很熟悉。我查阅了脉搏血氧仪的说明书,以了解波特率、编码方式以及如何提取数据。由于我的工作经验,我知道可以将数据流式传输到任何解决方案。

architecture diagram health monitoring pulse oximeter

图2 - 脉搏血氧仪监控架构图
  • RS232是一种用于在电子设备之间传输数据的异步通信协议。我使用它以9600波特率传输数据。这意味着它每秒最多可以传输9600位。
  • 使用DB9到USB线缆,我将数据传输到一个小型的Raspberry Pi Zero W。
  • 我运行一个Python脚本来打开脉搏血氧仪的串行端口,以流式传输和解析数据。
  • 最后,我使用InfluxDB的Python客户端将数据发送到我的家庭服务器。

通过在InfluxDB中存储足够的数据,我能够确定数据中的趋势。我能够判断她何时清醒、何时入睡或何时打盹。我能判断她是否疼痛或出现问题。我能够更好地理解信号及其背后的数据。与其猜测蜂鸣声是来自脉搏血氧仪还是空调,我们家人现在可以更加安心,因为无论我们在房子的另一边还是在户外,我们都可以检查她的状况。

倡导正确的治疗

通过在InfluxDB中存储带时间戳的数据,我能够使用Grafana生成的图表向医生展示我女儿健康状况中的问题时机。像任何担忧的父母一样,当我们看到有问题时,我们会带女儿去看医生。然而,有时当我们带她去看医生时,她会表现得很好,医生不会理解我们的担忧。有了图表,我和妻子现在能够向医生展示她的氧气水平何时下降。

就像一个开关:有时我的女儿表现得很好,然后开关一转,一切都不一样了。医生们看着你就像你是疯狂的家长。我并不在医疗领域,但我告诉他们我知道有问题。这就是InfluxDB和Grafana发挥作用的地方,因为我能够捕获数据,截屏并带入医生办公室。通过有数据来支持我们的担忧,我们能够开始与女儿的医生合作,改善她的治疗。

我意识到,当有数据支持我们的担忧时,医生们会更认真对待我们。我们能够证明我们女儿的心率随着她旧的胃造口管(g管)而上升。她的心率在旧的喂食中非常高。医生们一直试图说服我们继续给女儿喂同样的食物。直到我能够向儿科医生展示她的实际心率——多亏了存储在InfluxDB中的时间戳数据和在Grafana中可视化的数据。

环境对健康的影响

一旦我将女儿的血氧水平放入InfluxDB,我开始思考可能影响某人健康的因素。通过将环境数据与女儿的健康数据一起存储,我能够在这两个数据集之间建立关联。

由于我的女儿患有脑积水,她有一个脑室腹腔分流术(VP分流),用于从她的脑室引流脊髓液到胃部。VP分流用于降低因液体积聚而引起的脑部压力。脑积水发生时,大脑中出现异常液体积聚。我女儿的VP分流不是机械式的;它通过差压工作,这意味着两个特定点之间压力的差异。

通过工作,我有使用在亚大气压下运行的工具的经验,当时我有当天气变化时的警报,我开始怀疑天气和女儿的健康之间是否存在关联。通过在工作中使用工业传感器,我习惯于通过警报来理解压力数据。更重要的是,我知道微小的差异很重要。

"如果这些小信号对半导体有影响,为什么不会对我女儿体内[类似]的东西产生影响呢?"

我开始通过InfluxDB实时导入气压、温度和湿度数据。我还尝试收集女儿呼吸机的设置数据。我希望能够理解她的呼吸速率和呼吸量。然而,由于我并非医疗行业人士,获取数据的难度很大。我只能一次订购200根电缆。

我想回答像“为什么我女儿突然出现血氧饱和度下降?”这样的问题。血氧饱和度下降是指某人的血氧水平过低。通过交叉引用我的数据集,我希望了解气压变化是否影响她的呼吸。我希望通过向医生提供数据,他们可以深入研究根本原因分析,而不仅仅是治疗她的症状。我们全家不得不几个月后再次把她带回来,因为她的病情没有改善,而且我们不得不在不同的医生之间来回奔波,而没有得到解决方案。

InfluxDB health monitoring dashboard version 2 - charts

图3 - Grafana健康监控仪表板(版本2)

除了图3底部的五个实时数据快照之外,我还将时间戳数据相关联

  • 血液中的血氧饱和度(SPO2)和当地气压
  • 心率和她血液中的血氧水平
  • 室内温度和她SPO2水平
  • SPO2水平和室内湿度水平

使用InfluxDB的下一步

我开始捕获内部天气数据并将其存储在InfluxDB中。我将使用R来运行相关性和回归分析。我仅在过去的几周开始捕获这些天气数据,所以我希望有更多时间在R中玩转天气数据。我希望等到我有了几个月的数据。

health monitoring dashboard environmental data influxdb

图4 - Grafana监控仪表板显示环境数据

这个仪表板是我开始尝试添加天气数据的新增功能。由于最近开始收集大气压力,我希望开始相关联

  • SPO2水平和当地气压

我没有放弃希望找到一种方法从呼吸机直接提取数据和设置。我希望更深入地了解我女儿的呼吸速率和其他关键数据。我期待着更深入地了解女儿的健康状况,以便我们全家能给她最好的治疗。我还在德州仪器公司使用InfluxDB - 如果你想了解更多信息,请点击这里