×

用于通知紧急情况并打开与护理人员通信线路的项目

消耗积分:0 | 格式:zip | 大小:0.00 MB | 2023-06-15

李义坤

分享资料个

描述

介绍

这是Curam Senes ,在拉丁语中的意思是“帮助我们的老人”。

老年人面临的最大问题之一是孤独感,COVID-19 流行病及其导致我们陷入的社会孤立加剧了孤独感。在欧洲,许多老年人拥有远程护理系统,这是一种连接到网络的设备,带有一个带有按钮的挂件,用于通知紧急情况并打开与护理人员的通信线路。他会评估情况,并在紧急情况下打电话给家人或医生。

老年人是认知问题最多的人,同时也是服用药物最多的人。这些设备无法帮助他们。因此,我们的目标是创造一种在非紧急情况下提供帮助的设备我们想:

  • 记住什么时候吃药。
  • 请记住,当我们必须进行医学测试时,例如,我们将测量脉搏和血液中的氧饱和度。
  • 记住我们有医生的预约。
  • 如果我们在没有警告的情况下离开家,请通知我们的护理人员,这对患有痴呆症或阿尔茨海默氏症的人特别有用。
 

用户案例

让我们看看设备是如何工作的,以及不同的参与者如何与之交互。

第一点是将数据输入到系统中。我们开发了一个Alexa Skill ,它启动了一个 python 函数,将其(名称和频率)存储在数据库中。因此,护理人员可以与 Alexa 交谈并更新有关他的患者的信息,更多详细信息将在后面的部分中介绍。更专业的方式是将健康IT系统与我们的系统连接起来。它是一个标准的 HL7 ,它允许通信健康系统。我们可以将此信息导入为 HL7、OMP ^ O09 消息(治疗顺序)、SIU^S12 用于医生预约,以及 ORU 用于医疗检查结果。欢笑连接(一个可以管理这些消息的开源程序),我们可以配置一个通道,在数据库中存储药物的名称和服用频率。但我们更喜欢创客方式。

我们使用AWS Event Bridge管理事件,它会触发一些 lambda 函数,csDispensation01csDispensation002 它在数据库中查找并为该小时内的每个待处理信息生成一条 JSON 消息,然后我们将其发送到已挂载的 IoT 的MQTT 队列我们从数据库中获取主题,患者表。

AWS IoT Edukit 读取这些 MQTT 消息。我从Cloud Connected Blinky示例开始。我还添加了一些任务,并且我在 SDCard 中存储了一些消息,因此我可以在需要与人互动时播放它们。我们使用闪烁的 LED来引起必须服药的人的注意。当它花费一段时间而不与患者互动时,它会改变颜色。药物的名称写在屏幕上。我们可以展示十种不同的药物。当患者服用药物时,他触摸屏幕,系统会更新药物状态并清除屏幕。

另一个日常事件(AWS 事件桥)触发另一个 lambda 函数csNotification02 ,该函数在数据库中查找过去 24 小时内未服用的药物,并使用AWS SNS向医疗护理人员的电话发送消息

数据模型

这是一个非常简单的数据模型,我们会在添加改进时完成它。

poYBAGNiPAyAapQqAAEhULPTBsQ319.png
 

有六张表:

  • 病人有任何病人的数据,但在这个样本中,我们只有一个。
  • dispensa_medication ,我们存储药物的位置以及我们的患者必须在什么时间服用它们。
  • Dispens_medication_sent ,我们添加任何药物剂量的记录,以及它的状态。
  • test_heart ,存储我们要求患者检查他的心率和 O2 饱和度的时间
  • test_heart_sent ,存储检查的措施
  • 医生预约,我们存储与医生的预约,因此我们可以发送警告。

相关的是 dms 表中药物的状态,它们是:

  • NULL,已发送消息但未收到设备
  • 0,发送并发送一个ACK
  • 1、患者已服药
  • 2、患者忘记吃药(或在屏幕上确认)

处方药,Alexa Skill

我们将 CuramSenes 会记住服用的药物存储在MariaDB表中。正如我之前告诉你的,专业的(有几个病人,连接到医院)的方式是使用 HL7。但就目前而言,我开发了一种更具创客性的 Alexa Skill。

我们从python中的 hello 单词示例开始代码的某些部分是原始的。我已经更改了名称和调用短语,新药。目前,它可以,但它不是一个不言自明的名字。

我使用了 2 种新闻插槽类型,一种是当时的亚马逊实施。对于药物,我创建了一个新的,当我在示例中使用的药物名称时。但是我们可以用类似Vademecum 的列表填充这个列表。

我添加了一个新的 Intent,NewMedicine。它具有可以调用的方式。

pYYBAGNiPA-Ae1sdAACbjPPB90s718.png
 

当有人说出这些短语时,它会启动一个 python 函数,它会连接到数据库并将信息存储在那里。代码在GitHub中

这是一个示例交互。

 

桌子还有一个元素......

pYYBAGNiPBKATaAUAAA3Jv4Nd9A246.png
 

物联网 AWS Eduki 代码。前端

根据论坛管理员的建议,我们使用了 ESP-IDF 开发环境,带有Platformio和 IDE Visual Studio Code

起点是闪烁 LED的例子我们保留了管理 LED 的任务 blink_task,稍作修改,我们只放置了一个变量来指示它闪烁的颜色,并在第一次警告后经过一段时间后将其更改为红色。增加了五个任务:

  • ui_task ,您在设备屏幕上编写的代码在哪里。
  • aws_iot_task ,我们在其中放置了通过 MQTT 消息与 AWS IoT 服务通信的代码。
  • cs_task ,它包含应用程序的业务逻辑,并从后端读取和生成消息。
  • speakMe_task ,管理播放的音频。
  • blueScan_task ,管理与设备的连接
  • heart_task ,管理医学测试、心率和血氧饱和度读取器。

在主循环中,我们有一段代码告诉我们这些任务的堆以及在 Core2forAWS 库中启动的 GUI 管理任务的最大内存消耗是多少。它允许我们调试内存消耗并最小化我们分配给每个任务的堆,留下大约 1kb 的安全余量。

ui_task

我遵循了示例的设计。我们保留指示 WIFI 网络是否已连接的文本,更改图标的颜色。另一个文本已添加到左侧,启动时显示为“____”,连接到 AWS IoT 服务器时会显示 MQTT 文本。我们放置这个控件是因为有时它连接到 WIFI 但不连接到消息队列。如果我们重新启动设备,它会重新连接。在上栏的中间部分,我们有蓝牙符号,当它连接并检测到蓝牙监控设备的存在时,它会变成蓝色。如果设备消失,它会变为灰色。

在中央部分,有一个列表,我们在其中写下用户等待服用的药物名称,如果有必要进行医学测试(测量脉搏和血液中的氧饱和度),或者如果您与医生预约。服药后,触摸此文本字段,将启动表明您已服药的事件(我们删除消息,LED 停止闪烁,我们向后端发送 MQTT 消息)

poYBAGNiPCKAI__JAAQwXboh6l4253.jpg
屏幕
 

这个任务有很多问题,我认为是由于 lvgl 库中的一个我无法调试的错误,我们稍后会讨论。

aws_iot_task

该任务负责连接到 MQTT 服务器,将其中一个标记为接收到的消息的回调,并将消息发送到服务器(我们为每种类型的消息使用一个控制变量)。我们保留了示例中的大部分代码,对其进行了一些简化,并将其放在另一个任务中。

与服务器的连接部分有点“敏感”,当代码被触摸时,就会出现连接问题。在优化此任务之前,我们已优先考虑程序其他部分的开发。

我们使用的 MQTT 队列是:

  • "123DEVICENUMBER123"/medication ,接收药物 JSON 消息。
  • "123DEVICENUMBER123"/med_appointment ,这里我们收到了医生的预约。
  • "123DEVICENUMBER123"/med_test ,我们收到通知要求进行医学测试。
  • "123DEVICENUMBER123"/rtn,我们把药的状态返回给后台
  • “123DEVICENUMBER123”/test_heart_rtn,我们返回医学测试的结果,BPM和氧饱和度(%)。
  • “123DEVICENUMBER123”/beacon,它没有被使用……但是它将用于通知与老人佩戴的设备失去通信,假设他们已经离开了房子。

cs_task

在这个任务中,我们控制设备的业务逻辑很简单,我们将消息在屏幕上显示的时间与预定义的变量PAST_DUE_TIME (对于测试是 10 秒,通常是一个小时)进行比较,然后我们执行相关任务:如果它大于第一,我们将 LED 的颜色更改为红色并发出音频消息,我们通过在qSoundQueue队列中发送内部消息来做到这一点。

如果大于三个,我们从列表中删除该药物。将药物长期留在清单上似乎很危险,因为您可以连续服用两剂。将来可以改进,包括在药物的描述中,或者在服用中,如果必须删除或不删除。我们控制是否点击了药物所在的文本小部件,并清理它。

我们还读取了一个内部队列,如果有新的药物到达,我们会被通知(通过 MQTT 回调)。

speakMe_task

队列中有一个任务被阻塞,等待播放带有 wav 文件名称的消息。我们安装 SD 卡,读取文件并将其发送到扬声器。我们已经使用 AWS Polly 服务创建了音频文件。由于SD卡使用SPI总线,就像屏幕一样,我们每次发送消息时都会挂载和卸载设备,以避免干扰。

必须记录音频的比特率存在一个小问题,但它已在库中配置并已修改为 22Kh。我们使用将文本转换为语音的 AWS Polly 服务录制了音频。该系统可以扩展以允许与用户进行更流畅的对话,例如告诉他要服用药物的名称或时间。

bluescan_task

这项任务是给我们带来最多技术问题的任务。

一方面,platformio-ESPIDF中蓝牙ble的实现不完整,执行menuconfig时没有出现蓝牙配置选项。我们已将另一个项目的配置复制到 sdkconfig 文件中。此外,一些头文件 (*.h) 尽管位于组件目录中,但读取效果不佳。我们必须将它们复制回包含目录。我们开发了这个任务,它工作得很好,但是当它与 GUI 集成时,它给我们带来了一个问题,guiTask 任务被钩住,并且看门狗用回溯提醒我们。我们无法解决它,但似乎是 lvgl 库的问题。我在书店的论坛里问过,还是没能解决。

许多老年人都有总机,当他们发生事故时,可以将他们连接到电话助理,然后按下脖子上的按钮。我们希望在老年人智力受损的家庭中补充这个总机。通过在患者的项圈上添加蓝牙设备,如果他不应该离开家,该设备会通知我们。

  • 我们将每位患者与终端连接起来,并使用我们保存在患者表上的蓝牙 mac 地址。
  • 我们控制与此设备的连接,我们对附近的蓝牙设备进行扫描,如果我们看到它,我们会更新我们最后一次看到它的时间。
  • 如果此时间超过阈值,我们会向后端发送一条 JSON 消息,后端会通过 SNS 通道发送一条 SMS 消息来提醒看护者。
  • 如果设备是蓝牙信标并且它挂在患者身上,例如。比如Tile、Airtag等,你可以使用这个平台的应用来定位这个人。

该功能在代码中被禁用,等待修复错误

心脏任务

这个任务有不同的生命周期管理。其他的在主函数中启动,当消息到达请求心脏测试时启动。

在任务开始时,传感器被初始化,一个max300100,它读取每分钟心跳和血液中氧饱和度的记录。然后我们有一个循环,我们在其中获得几个测量值并计算平均值。有了这些值,我们就形成了一个 JSON 消息,我们通过 MQTT 任务发送到后端,它就结束了。在后端,我们将数据存储在 bd 中。随后的改进将允许将这些信息传递给护理人员,或者通过 HL7 消息将其合并到患者的电子病历中,或者作为带有图形的门户(例如使用 Grafena)直接从数据库中读取这些数据。

pYYBAGNiPCeAeBadAADNRCnFD8o169.png
 

后端代码

应用程序后端是使用 AWS 服务定义的。

数据使用 AWS RDS 服务存储在 MariaDB 数据库中。我们已经在另一部分看到了数据模型。

poYBAGNiPCqAHC1XAAC7-GiyXxk661.png
 

后端的主要部分由 lambda 函数组成:

pYYBAGNiPCyANQA7AAEWjb4wDlM954.png
 

当消息到达 MQTT 主题时,它们由 AWS IoT 触发:

csMQTT001:读取患者服用药物后端 JSON 消息的函数,更新 dbd 中的状态(已接收、已服用、已忘记)

csMQTT002: 在医学测试后端读取 JSON 消息的函数,在本例中是心率和氧饱和度。

由 EventBridge 事件触发

每日活动

csNotification002:检查最后一天的用药数据,如果没有服用任何药物,则会向护理人员的手机发送短信通知他。

csDispense002:查阅表格以查看患者是否与医生预约。如果是,则向设备发送 JSON-MQTT 消息以通知患者。

每小时一个事件

csDispense001:检查表格以查看患者在接下来的一个小时内是否需要服用任何药物或进行检查。如果是,则在测试表中创建一条记录,并向设备发送 JSON-MQTT 消息以通知患者。

启动此功能的事件是:

pYYBAGNiPC6AaiHrAAEhv2k7Pd4809.png
 
poYBAGNiPDGAT3iQAACWBhDl3gs108.png
 
pYYBAGNiPDWAB8nJAAC6yoPnPKY288.png
 

构建项目的说明

构建它很容易,我们只需要遵循以下几点:

  • 获取硬件、AWS Edukit、Alexa echo 和 AWS 账户。
  • 在 AWS IoT 中注册 AWS Edukit
  • 下载 Visual Studio Code,安装 Platformio 和 GitHub 扩展。
  • 下载设备代码,编译并传输到Edukit设备
  • 创建 MariaDB 并创建数据库
  • 下载 Alexa 技能代码并使用它创建一个新的 Alexa 技能
  • 下载 lambda 代码并在 AWS 中创建 5 个函数
  • 连接这些函数,其中 3 个由 EventBridge 事件触发,另外 2 个连接到 IoT 核心 MQTT 函数,在那里为它们创建两个规则。
  • 开始玩得开心

未来的步骤

  • 为看护者开发一个门户,他们可以在其中查阅家属的信息,他使用 Graphena 连接到数据库并显示 BMP 和氧饱和度数据。
  • 创建 HL7 消息的网关以与医院后端进行通信。
  • 解决蓝牙子系统中的错误,以便我们可以检测到我们何时丢失设备的信号以触发警报。我们还想阅读设备上的按钮,以便开始与健康助手的对话。
  • 创建此音频通信子系统以在警报出现时帮助人们。
  • 将要执行的新医学测试的管理和通信(蓝牙、I2C、..)与执行这些测试的设备结合起来。例如,胰岛素计、动态心电图、氧气泵……
  • 加大屏幕尺寸,这么小的显示器也不容易交互。
  • 增加语音交互。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !