使用 InfluxDB 监控脉搏血氧仪 – 一位父亲的视角

导航至

Michael Hinkle

本文由德州仪器的探针工程和制造主管 Michael Hinkle 贡献。

我叫 Mike Hinkle,我使用 InfluxDB 监控我女儿的脉搏血氧仪,以便更好地了解她的整体健康状况。作为一名工程师,目前在德州仪器工作,我了解时间序列数据库,并且喜欢尝试各种技术。我希望实时了解我女儿的健康状况,并能够协助医生进行她的持续治疗。

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

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

在使用 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-tube)后,我女儿的心率正在上升。使用旧的喂食器后,她的心率高得惊人。医生一直试图推动我们继续给女儿喂食同样的食物。直到我能够向我们的儿科医生展示她的实际心率——感谢存储在 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 – 如果您有兴趣了解更多信息,请点击 此处