国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Node.js的BLE可穿戴醫(yī)療設(shè)備管理中間件研究與實(shí)現(xiàn)

2019-06-17 09:28張亞兵王俊紅
關(guān)鍵詞:體溫計(jì)中間件監(jiān)測(cè)數(shù)據(jù)

陳 剛 閆 航 張亞兵 王俊紅

1(鄭州大學(xué)互聯(lián)網(wǎng)醫(yī)療與健康服務(wù)協(xié)同創(chuàng)新中心 河南 鄭州 450052)2(鄭州大學(xué)護(hù)理學(xué)院 河南 鄭州 450001)

0 引 言

可穿戴醫(yī)療設(shè)備是可以直接穿在身上或作為配件穿戴并能傳輸監(jiān)測(cè)數(shù)據(jù)的一種計(jì)算設(shè)備[1]。各類可穿戴醫(yī)療設(shè)備在醫(yī)院病房中發(fā)揮著關(guān)鍵的作用。首先,可穿戴醫(yī)療設(shè)備是護(hù)士對(duì)病人進(jìn)行日常健康監(jiān)測(cè)的重要工具;其次,在健康方面對(duì)特定的生命體征需要進(jìn)行24 h監(jiān)護(hù)[2]。由于采取有線通信方式的傳統(tǒng)可穿戴醫(yī)療設(shè)備在治療過(guò)程中導(dǎo)線會(huì)限制患者的活動(dòng),越來(lái)越多的可穿戴醫(yī)療設(shè)備開(kāi)始采用無(wú)線的通信方式。低功耗藍(lán)牙是藍(lán)牙4.0開(kāi)始在其標(biāo)準(zhǔn)的基礎(chǔ)上針對(duì)低功耗應(yīng)用進(jìn)行優(yōu)化后的標(biāo)準(zhǔn),憑借快速連接與超低功耗的顯著特點(diǎn),已經(jīng)廣泛應(yīng)用于醫(yī)療保健、可穿戴設(shè)備等領(lǐng)域[3]。

近年來(lái)絕大多數(shù)BLE可穿戴醫(yī)療設(shè)備由智能手機(jī)管理。甘廣輝等[4]提出了一種基于低功耗藍(lán)牙的家用胎兒監(jiān)護(hù)系統(tǒng),實(shí)現(xiàn)了對(duì)胎心率、宮縮壓和胎動(dòng)生理信號(hào)的采集與傳輸,并通過(guò)手機(jī)對(duì)數(shù)據(jù)進(jìn)行顯示和存儲(chǔ)以實(shí)現(xiàn)胎兒的實(shí)時(shí)監(jiān)護(hù)。張金玲等[5]設(shè)計(jì)了一種基于藍(lán)牙低功耗協(xié)議的手機(jī)無(wú)線心電和血氧健康監(jiān)護(hù)系統(tǒng),通過(guò)手機(jī)客戶端程序?qū)崿F(xiàn)人體心電和血氧參數(shù)的實(shí)時(shí)監(jiān)控。而通用平臺(tái)Windows或Linux上的開(kāi)發(fā)應(yīng)用較少,謝佳柏等[6]設(shè)計(jì)了一款基于BLE與WebSocket的數(shù)據(jù)網(wǎng)關(guān),實(shí)現(xiàn)了低功耗藍(lán)牙網(wǎng)絡(luò)對(duì)手機(jī)、平板和筆記本電腦的兼容性,但是該數(shù)據(jù)網(wǎng)關(guān)采用的是51內(nèi)核,處理能力較弱,僅支持同時(shí)連接3個(gè)簡(jiǎn)單的傳感器節(jié)點(diǎn)。在醫(yī)院病房下的健康監(jiān)測(cè)場(chǎng)景中,多設(shè)備并發(fā)使用、健康數(shù)據(jù)處理、患者管理等操作需要強(qiáng)大的計(jì)算能力與通用平臺(tái)編程需求。此外,由于各個(gè)廠家的設(shè)備開(kāi)發(fā)標(biāo)準(zhǔn)體系不互通,智能手機(jī)中的一個(gè)APP只能連接同廠家的可穿戴醫(yī)療設(shè)備,難以跨廠家、跨平臺(tái)管理多種設(shè)備[7]。

鑒于此,本文提出了基于Node.js的BLE可穿戴醫(yī)療設(shè)備管理系統(tǒng)。由于Node.js具備跨平臺(tái)的特點(diǎn),本系統(tǒng)可以靈活部署于Windows和Linux系統(tǒng)上。通過(guò)該中間件系統(tǒng)可以集中進(jìn)行多種可穿戴醫(yī)療設(shè)備的管理,同時(shí)系統(tǒng)對(duì)應(yīng)用程序提供調(diào)用接口,從而應(yīng)用程序無(wú)需安裝專用的BLE軟件。本系統(tǒng)實(shí)時(shí)性強(qiáng),響應(yīng)速度快,支持并發(fā)操作,能夠以一種更加高效的方式進(jìn)行BLE可穿戴醫(yī)療設(shè)備的管理。

1 相關(guān)技術(shù)

1.1 Node.js環(huán)境

Node.js是一個(gè)基于V8引擎的JavaScript運(yùn)行環(huán)境,采用輕量和高效的事件驅(qū)動(dòng)、非阻塞I/O模型,常用于構(gòu)建快速、可擴(kuò)展的網(wǎng)絡(luò)應(yīng)用程序[8]。它由Ryan Dahl于2009年設(shè)計(jì)并提出,用異步I/O和事件驅(qū)動(dòng)取代多線程,不僅大幅度提升了性能,還減少了多線程開(kāi)發(fā)的復(fù)雜性。Node.js不但采用Chrome V8作為引擎,還使用了高效的libev和libeio庫(kù)支持事件驅(qū)動(dòng)和異步I/O,并在此基礎(chǔ)上抽象出了層libuv,實(shí)現(xiàn)了高性能的運(yùn)行機(jī)制。

Node.js基于事件觸發(fā)的方式能夠快速接收可穿戴醫(yī)療設(shè)備發(fā)來(lái)的監(jiān)測(cè)數(shù)據(jù),相比于其他平臺(tái)有著顯著的優(yōu)勢(shì),并且能夠適用于高并發(fā)的運(yùn)作方式,所以本文所設(shè)計(jì)的中間件系統(tǒng)選擇Node作為運(yùn)行支撐環(huán)境。

1.2 BLE協(xié)議簡(jiǎn)介

BLE即藍(lán)牙低功耗技術(shù),是一種低成本、短距離、超低功耗的無(wú)線傳輸技術(shù)[3]。如圖1所示為BLE協(xié)議棧,BLE應(yīng)用的開(kāi)發(fā)所要關(guān)注的是通用訪問(wèn)配置(GAP)子協(xié)議與通用屬性配置(GATT)子協(xié)議。

圖1 BLE協(xié)議棧

GAP協(xié)議負(fù)責(zé)控制設(shè)備連接和廣播。通常將設(shè)備分為中心設(shè)備(Central)與外圍設(shè)備(Peripheral),中心設(shè)備負(fù)責(zé)掃描并連接其他外圍設(shè)備,外圍設(shè)備則將自身的設(shè)備信息對(duì)外廣播[9]。本設(shè)計(jì)方案中,可穿戴醫(yī)療設(shè)備作為外圍設(shè)備,而部署中間件系統(tǒng)的計(jì)算機(jī)則作為中心設(shè)備。

GATT協(xié)議是負(fù)責(zé)雙方數(shù)據(jù)傳輸?shù)耐ㄓ靡?guī)范,把各種屬性表示為服務(wù)(Service)的集合,每個(gè)服務(wù)都有一個(gè) 128 bit 的 UUID 作為這個(gè)服務(wù)的標(biāo)識(shí)。為了提高傳輸效率,藍(lán)牙聯(lián)盟也定義了較短的16 bit的UUID來(lái)使用。服務(wù)由若干個(gè)特征值(Characteristic)組成,每一個(gè)特征值也有唯一的 UUID 作為標(biāo)識(shí)符。特征值由一個(gè)value和零個(gè)或多個(gè)對(duì)value的描述組成,相關(guān)的監(jiān)測(cè)數(shù)據(jù)即存儲(chǔ)于特征值中[9]。

1.3 WebSocket通信技術(shù)

WebSocket是基于TCP協(xié)議實(shí)現(xiàn)Web瀏覽器和服務(wù)器之間的實(shí)時(shí)雙向通信技術(shù)[10]。它支持持久連接,客戶端與服務(wù)器進(jìn)行一次合法的握手建立WebSocket連接后,服務(wù)器便可以主動(dòng)地向客戶端發(fā)送數(shù)據(jù)[11]。本文采用WebSocket技術(shù)實(shí)現(xiàn)中間件系統(tǒng)與應(yīng)用層之間的雙向數(shù)據(jù)傳輸,在此基礎(chǔ)上進(jìn)一步封裝管理可穿戴醫(yī)療設(shè)備的通信接口。

2 中間件架構(gòu)設(shè)計(jì)

2.1 體系拓?fù)浣Y(jié)構(gòu)

本文提出的體系拓?fù)浣Y(jié)構(gòu)如圖2所示,該體系由BLE可穿戴醫(yī)療設(shè)備、設(shè)備管理中間件和調(diào)用方組成??纱┐麽t(yī)療設(shè)備管理中間件是核心組成部分,一方面它通過(guò)BLE協(xié)議接入各類可穿戴醫(yī)療設(shè)備如血壓計(jì)、體溫計(jì)和心率計(jì)等,實(shí)現(xiàn)對(duì)可穿戴設(shè)備的統(tǒng)一管理與數(shù)據(jù)處理,同時(shí)協(xié)調(diào)設(shè)備資源的調(diào)度以實(shí)現(xiàn)多設(shè)備并發(fā)運(yùn)行。另一方面,中間件通過(guò)WebSocket通信方式響應(yīng)調(diào)用方應(yīng)用程序的操作請(qǐng)求,調(diào)用方通過(guò)中間件封裝的控制指令完成對(duì)可穿戴醫(yī)療設(shè)備的操作以及健康監(jiān)測(cè)數(shù)據(jù)的實(shí)時(shí)傳輸。中間件能夠同時(shí)響應(yīng)多個(gè)Socket客戶端的請(qǐng)求,進(jìn)一步適應(yīng)了對(duì)可穿戴設(shè)備的并發(fā)操作,而調(diào)用方只需實(shí)現(xiàn)Socket客戶端訪問(wèn)中間件即可,能夠兼容各主流平臺(tái)如Windows、Android以及MacOS等。

圖2 體系結(jié)構(gòu)拓?fù)?/p>

2.2 軟件架構(gòu)

本文設(shè)計(jì)的中間件系統(tǒng)軟件架構(gòu)如圖3所示。Node環(huán)境下的程序保持單進(jìn)程單線程執(zhí)行,系統(tǒng)由設(shè)備驅(qū)動(dòng)層、任務(wù)調(diào)度層、服務(wù)接口層組成。設(shè)備驅(qū)動(dòng)層主要是BLE開(kāi)發(fā)程序,通過(guò)BLE協(xié)議棧實(shí)現(xiàn)對(duì)低功耗可穿戴醫(yī)療設(shè)備的基本操作,包括設(shè)備掃描、連接、控制以及獲取監(jiān)測(cè)數(shù)據(jù)。任務(wù)調(diào)度層由用戶指令解析程序、多設(shè)備并發(fā)調(diào)度程序和監(jiān)測(cè)數(shù)據(jù)處理程序組成。其中,用戶指令解析程序處理客戶端發(fā)來(lái)的操作指令,進(jìn)而執(zhí)行相應(yīng)的操作方式。設(shè)備并發(fā)調(diào)度程序負(fù)責(zé)調(diào)度設(shè)備資源與客戶端請(qǐng)求,用以實(shí)現(xiàn)高效的設(shè)備并發(fā)操作。監(jiān)測(cè)數(shù)據(jù)處理程序?qū)υO(shè)備驅(qū)動(dòng)層獲取的原始監(jiān)測(cè)數(shù)據(jù)進(jìn)行規(guī)范化處理,將數(shù)據(jù)轉(zhuǎn)換為直觀可讀的健康數(shù)據(jù)。服務(wù)接口層主要是WebSocket服務(wù)器程序,用來(lái)提供中間件與調(diào)用者交互的接口,實(shí)現(xiàn)兩者的雙向數(shù)據(jù)傳輸。WebSocket服務(wù)器程序一方面接收調(diào)用者發(fā)來(lái)的消息并進(jìn)行json解析,將解析后的數(shù)據(jù)傳遞給任務(wù)調(diào)度層;另一方面將任務(wù)調(diào)度層發(fā)來(lái)的健康數(shù)據(jù)與連接狀態(tài)封裝為json格式并發(fā)送給調(diào)用者。此外,系統(tǒng)還包含一個(gè)全局的進(jìn)程守護(hù)程序,負(fù)責(zé)解決Node可能出現(xiàn)的異常進(jìn)而防止崩潰,監(jiān)視全局異常的發(fā)生,包括回調(diào)函數(shù)發(fā)生的異常,保證中間件系統(tǒng)的可靠運(yùn)行。

圖3 中間件軟件架構(gòu)

3 系統(tǒng)實(shí)現(xiàn)

本系統(tǒng)以生活中典型的BLE血壓計(jì)、BLE心率計(jì)和BLE體溫計(jì)作為BLE可穿戴醫(yī)療設(shè)備進(jìn)行系統(tǒng)的實(shí)現(xiàn)與演示。血壓計(jì)、心率計(jì)、體溫計(jì)是三種不同類型的可穿戴醫(yī)療設(shè)備,也是進(jìn)行疾病預(yù)防與診斷的重要設(shè)備。血壓計(jì)與非接觸式體溫計(jì)由專業(yè)廠家生產(chǎn),而心率計(jì)為實(shí)驗(yàn)室自制,以上設(shè)備都實(shí)現(xiàn)了BLE4.0協(xié)議,具有極低的運(yùn)行和待機(jī)功耗。

3.1 系統(tǒng)的環(huán)境準(zhǔn)備

系統(tǒng)基于Node平臺(tái)采用JS語(yǔ)言編寫(xiě),可以將Node環(huán)境部署于Windows或Linux系統(tǒng)上從而實(shí)現(xiàn)跨平臺(tái)的可穿戴醫(yī)療設(shè)備接入。首先,部署系統(tǒng)的平臺(tái)需要通過(guò)外接藍(lán)牙適配器來(lái)實(shí)現(xiàn)BLE功能,中間件系統(tǒng)在BLE開(kāi)發(fā)中就充當(dāng)了中心設(shè)備的角色。

近年來(lái)隨著Node.js的廣泛應(yīng)用,Node社區(qū)也涌現(xiàn)了很多優(yōu)秀的資源。第三方庫(kù)noble是基于Node環(huán)境封裝的低功耗藍(lán)牙庫(kù),它基于GAP協(xié)議與GATT協(xié)議對(duì)BLE藍(lán)牙的基礎(chǔ)功能進(jìn)行了封裝,并結(jié)合C++與python語(yǔ)言進(jìn)行了低功耗藍(lán)牙底層協(xié)議的開(kāi)發(fā)。ws庫(kù)是Node環(huán)境中流行的用以實(shí)現(xiàn)WebSocket協(xié)議的開(kāi)發(fā)包,它具有快速、易用和穩(wěn)定的特點(diǎn),并且同時(shí)實(shí)現(xiàn)了服務(wù)器與客戶端。因此本文基于noble庫(kù)進(jìn)一步豐富低功耗醫(yī)療類型設(shè)備的開(kāi)發(fā)工作,實(shí)現(xiàn)對(duì)可穿戴醫(yī)療設(shè)備的掃描、連接、特征值發(fā)現(xiàn)等BLE開(kāi)發(fā)基本操作,引入ws庫(kù)實(shí)現(xiàn)WebSocket傳輸協(xié)議,示意代碼如下:

const WebSocket=require(′ws′);

var noble=require(′./lib/noble′);

3.2 可穿戴醫(yī)療設(shè)備基本操作實(shí)現(xiàn)

中間件系統(tǒng)在低功耗設(shè)備開(kāi)發(fā)中實(shí)現(xiàn)的基礎(chǔ)功能依次為外圍設(shè)備掃描、設(shè)備連接、發(fā)現(xiàn)服務(wù)、發(fā)現(xiàn)特征值以及數(shù)據(jù)寫(xiě)入與讀取,相應(yīng)地就可以完成系統(tǒng)對(duì)可穿戴醫(yī)療設(shè)備的連接、測(cè)量控制與數(shù)據(jù)傳輸工作。

3.2.1可穿戴醫(yī)療設(shè)備開(kāi)發(fā)基本流程

本文借助noble庫(kù)實(shí)現(xiàn)低功耗藍(lán)牙的基礎(chǔ)功能,可穿戴醫(yī)療設(shè)備的基本操作開(kāi)發(fā)主要包括以下步驟:

(1) 中間件系統(tǒng)開(kāi)啟藍(lán)牙掃描。通過(guò)調(diào)用方法noble.startScanning(serviceUUID)掃描相應(yīng)的BLE設(shè)備,參數(shù)為所要連接設(shè)備主服務(wù)的UUID號(hào)。

(2) 設(shè)備連接。成功掃描到所要連接的BLE可穿戴醫(yī)療設(shè)備后會(huì)觸發(fā)設(shè)備發(fā)現(xiàn)的事件,在事件的回調(diào)函數(shù)中通過(guò)返回的peripheral對(duì)象執(zhí)行設(shè)備連接操作并停止藍(lán)牙掃描。peripheral即是通過(guò)掃描獲取到的外圍設(shè)備對(duì)象,示意代碼如下所示:

noble.on(′discover′, function(peripheral) {

noble.stopScanning();

//停止掃描

peripheral.connect(function(err) {…})

//連接BLE設(shè)備

})

連接成功后才能進(jìn)行后續(xù)的一系列操作,此時(shí)可穿戴醫(yī)療設(shè)備被系統(tǒng)占用,且不可被其他中心設(shè)備所連接。

(3) 發(fā)現(xiàn)服務(wù)。系統(tǒng)要獲取的服務(wù)是與健康監(jiān)測(cè)數(shù)據(jù)相關(guān)的服務(wù),通過(guò)方法peripheral.discoverServices(s erviceUUID)發(fā)現(xiàn)服務(wù),參數(shù)為所要獲取服務(wù)的UUID值。

(4) 發(fā)現(xiàn)特征值。在發(fā)現(xiàn)服務(wù)方法的回調(diào)函數(shù)中通過(guò)返回的service對(duì)象調(diào)用service.discoverCharacteris tics()方法來(lái)發(fā)現(xiàn)特征值,此方法的回調(diào)函數(shù)中返回該服務(wù)下的所有特征值,然后遍歷所有特征值來(lái)匹配到健康數(shù)據(jù)相關(guān)的特征值,主要包括write特征值和notify特征值。write特征值用來(lái)向可穿戴醫(yī)療設(shè)備發(fā)送數(shù)據(jù),而notify特征值則是從可穿戴醫(yī)療設(shè)備中獲取健康監(jiān)測(cè)數(shù)據(jù)。

(5) 設(shè)備控制與數(shù)據(jù)讀取。通過(guò)write特征值調(diào)用方法characteristic.write()并傳入控制指令來(lái)控制可穿戴醫(yī)療設(shè)備,主要包括啟動(dòng)設(shè)備、關(guān)閉設(shè)備的命令。通過(guò)notify特征值調(diào)用characteristic.subscribe()方法啟動(dòng)BLE設(shè)備特征值變化時(shí)的notify功能,實(shí)現(xiàn)對(duì)監(jiān)測(cè)數(shù)據(jù)的監(jiān)聽(tīng)。如果可穿戴醫(yī)療設(shè)備有新的數(shù)據(jù)變化,notify特征值的回調(diào)函數(shù)就會(huì)觸發(fā),系統(tǒng)從回調(diào)函數(shù)中讀取監(jiān)測(cè)數(shù)據(jù)。

系統(tǒng)從可穿戴醫(yī)療設(shè)備直接收到的數(shù)據(jù)為原始的字節(jié)流數(shù)據(jù),必須要對(duì)數(shù)據(jù)進(jìn)行解析以及規(guī)范化處理。BLE健康數(shù)據(jù)傳輸格式一般由起始位、數(shù)據(jù)位和結(jié)束位組成,需要從數(shù)據(jù)位中獲取健康數(shù)據(jù)[12]。然而,不同廠家、不同類型的設(shè)備對(duì)健康數(shù)據(jù)也存在著不同的編碼方式,必須針對(duì)具體的可穿戴醫(yī)療設(shè)備采取對(duì)應(yīng)的算法進(jìn)行健康數(shù)據(jù)的解析與處理。通常情況下,數(shù)據(jù)解析與處理的流程如圖4所示。

圖4 數(shù)據(jù)處理流程

(6) 斷開(kāi)連接。完成測(cè)量之后通過(guò)write特征值向可穿戴醫(yī)療設(shè)備發(fā)送關(guān)閉設(shè)備的指令,之后通過(guò)步驟(2)中的peripheral對(duì)象執(zhí)行peripheral.disconnect()方法斷開(kāi)連接,解除設(shè)備占用并釋放系統(tǒng)資源。

3.2.2可穿戴醫(yī)療設(shè)備的控制

系統(tǒng)與可穿戴醫(yī)療設(shè)備建立連接并且匹配好讀寫(xiě)相關(guān)的特征值后,系統(tǒng)將控制指令寫(xiě)入write特征值對(duì)可穿戴醫(yī)療設(shè)備進(jìn)行控制,包括開(kāi)始測(cè)量、停止測(cè)量、關(guān)閉設(shè)備等常用的操作。不同的可穿戴醫(yī)療設(shè)備對(duì)應(yīng)著不同的指令編碼,寫(xiě)入的數(shù)據(jù)應(yīng)轉(zhuǎn)換為byte類型的數(shù)組。

根據(jù)可穿戴醫(yī)療設(shè)備實(shí)際控制需求,本文所使用的血壓計(jì)和心率計(jì)的開(kāi)始測(cè)量、關(guān)閉設(shè)備指令以十六進(jìn)制表示的編碼如表1所示。而系統(tǒng)對(duì)體溫計(jì)只提供監(jiān)測(cè)數(shù)據(jù)、關(guān)閉連接的控制指令,開(kāi)始測(cè)量、關(guān)閉設(shè)備的操作由設(shè)備自身完成。

表1 血壓計(jì)與心率計(jì)控制編碼

3.3 多設(shè)備并發(fā)實(shí)現(xiàn)

相較于大多數(shù)智能手機(jī)上的可穿戴醫(yī)療設(shè)備管理方式,本系統(tǒng)實(shí)現(xiàn)了多用戶、多設(shè)備并發(fā)使用的功能。設(shè)備并發(fā)使用包含兩種場(chǎng)景,一是單個(gè)用戶同時(shí)使用多臺(tái)可穿戴醫(yī)療設(shè)備,二是多個(gè)用戶同時(shí)使用各自的可穿戴醫(yī)療設(shè)備。在可穿戴醫(yī)療設(shè)備基本操作實(shí)現(xiàn)的基礎(chǔ)上,本文提出了以設(shè)備池為中心的調(diào)度策略來(lái)解決多用戶、多設(shè)備并發(fā)使用問(wèn)題。結(jié)合實(shí)際場(chǎng)景考慮,一臺(tái)可穿戴醫(yī)療設(shè)備同時(shí)只能服務(wù)一個(gè)用戶,當(dāng)用戶選擇某臺(tái)設(shè)備時(shí),分配給用戶與該設(shè)備相關(guān)的資源,直到用戶使用完畢后才能釋放資源,設(shè)備調(diào)度工作流程如圖5所示。

圖5 設(shè)備調(diào)度工作流程圖

本研究處理設(shè)備多連接的方法是為每一個(gè)已連接的客戶端生成一個(gè)包含四個(gè)關(guān)鍵屬性的對(duì)象,對(duì)象包含WebSocket客戶端接口、設(shè)備對(duì)象、設(shè)備write特征值和設(shè)備notify特征值,實(shí)例化代碼如下所示:

function user_info(user_ws, peripheral,ble_notify, ble_write){

this.user_ws=user_ws;

this.peripheral=peripheral;

this.ble_notify=ble_notify;

this.ble_write=ble_write;

}

此對(duì)象的作用是保存控制可穿戴設(shè)備所需要的關(guān)鍵資源,并建立調(diào)用者與可穿戴設(shè)備的對(duì)應(yīng)關(guān)系。多用戶同時(shí)進(jìn)行各自的健康監(jiān)測(cè)時(shí),每臺(tái)可穿戴醫(yī)療設(shè)備都會(huì)從自身的關(guān)聯(lián)對(duì)象中進(jìn)行設(shè)備控制、數(shù)據(jù)處理以及數(shù)據(jù)傳輸工作,能夠保證用戶只與所使用的可穿戴醫(yī)療設(shè)備進(jìn)行交互,不同設(shè)備之間的操作互不影響。當(dāng)一個(gè)用戶同時(shí)使用多臺(tái)可穿戴醫(yī)療設(shè)備時(shí),則建立多個(gè)user_info對(duì)象來(lái)關(guān)聯(lián)多臺(tái)設(shè)備,用戶同時(shí)與多臺(tái)設(shè)備進(jìn)行互不影響的交互,實(shí)現(xiàn)多設(shè)備聯(lián)動(dòng)健康監(jiān)測(cè)。具體方法如下:

(1) 客戶端選擇可穿戴醫(yī)療設(shè)備,中間件系統(tǒng)完成設(shè)備連接、服務(wù)與特征值發(fā)現(xiàn)后,調(diào)用函數(shù)user_info()實(shí)例化一個(gè)對(duì)象實(shí)現(xiàn)用戶與設(shè)備之間的關(guān)聯(lián)。同時(shí)將該對(duì)象以key-value的形式保存在user{}列表中,key設(shè)置為可穿戴醫(yī)療設(shè)備名稱,value為用戶關(guān)聯(lián)對(duì)象,user{}設(shè)備池中保存所有用戶關(guān)聯(lián)對(duì)象。

(2) 客戶端發(fā)起測(cè)量指令后,在user{}列表中索引對(duì)應(yīng)設(shè)備的關(guān)聯(lián)對(duì)象,調(diào)用關(guān)聯(lián)對(duì)象的ble_write特征值啟動(dòng)測(cè)量任務(wù)。中間件系統(tǒng)通過(guò)關(guān)聯(lián)對(duì)象的ble_notify特征值監(jiān)聽(tīng)可穿戴醫(yī)療設(shè)備發(fā)送來(lái)的血壓或心率等監(jiān)測(cè)數(shù)據(jù),同時(shí)調(diào)用關(guān)聯(lián)對(duì)象的WebSocket接口發(fā)送給使用此設(shè)備的用戶。

(3) 測(cè)量任務(wù)結(jié)束后,中間件系統(tǒng)通過(guò)關(guān)聯(lián)對(duì)象的peripheral屬性來(lái)執(zhí)行peripheral.disconnect()函數(shù)斷開(kāi)所連接的健康設(shè)備,解除設(shè)備資源占用。

(4) 最后將user{}列表中對(duì)應(yīng)設(shè)備的關(guān)聯(lián)對(duì)象清空,該可穿戴醫(yī)療設(shè)備可重新分配給其他的客戶端。

3.4 可穿戴設(shè)備管理接口設(shè)計(jì)

本文基于WebSocket通信技術(shù)為調(diào)用方提供管理設(shè)備的接口,中間件系統(tǒng)在WebSocket通信中作為服務(wù)器端,而調(diào)用方的應(yīng)用程序則作為客戶端。如圖6所示為中間件設(shè)備管理流程圖,首先使用方法const wss=new WebSocket.Server({port:2800})創(chuàng)建WebSocket服務(wù)器并將端口設(shè)備為2800。服務(wù)器端基于事件驅(qū)動(dòng)完成客戶端的請(qǐng)求,主要事件函數(shù)包括′connection′、′message′、′close′,分別對(duì)應(yīng)連接建立、收到數(shù)據(jù)、連接斷開(kāi)的事件回調(diào)[13]。

圖6 可穿戴醫(yī)療設(shè)備管理流程圖

服務(wù)器實(shí)時(shí)處于監(jiān)聽(tīng)狀態(tài),當(dāng)有客戶端建立連接后觸發(fā)′connection′事件并返回客戶端對(duì)象ws。服務(wù)器在′message′事件回調(diào)中解析用戶指令,中間件提供的操作指令接口分別為設(shè)備連接、開(kāi)始測(cè)量和關(guān)閉設(shè)備。其中,設(shè)備連接指令用來(lái)連接用戶所選擇的可穿戴醫(yī)療設(shè)備,并將連接狀態(tài)發(fā)送給用戶。開(kāi)始測(cè)量指令則啟動(dòng)可穿戴醫(yī)療設(shè)備以進(jìn)行生命體征測(cè)量,中間件實(shí)時(shí)獲取監(jiān)測(cè)數(shù)據(jù)并進(jìn)一步處理后發(fā)送給用戶。關(guān)閉設(shè)備指令是將可穿戴醫(yī)療設(shè)備關(guān)閉并斷開(kāi)與設(shè)備之間的藍(lán)牙連接以釋放資源,同時(shí)將設(shè)備連接狀態(tài)發(fā)送給用戶。服務(wù)器通過(guò)ws.send(msg)方法向客戶端發(fā)送數(shù)據(jù),參數(shù)msg為發(fā)送的內(nèi)容并封裝為JSON格式,msg的內(nèi)容為設(shè)備連接狀態(tài)和健康監(jiān)測(cè)數(shù)據(jù)??蛻舳送顺龊笥|發(fā)′close′事件,在此回調(diào)函數(shù)中首先檢查用戶所關(guān)聯(lián)的設(shè)備是否關(guān)閉,若存在沒(méi)有關(guān)閉的設(shè)備則強(qiáng)制關(guān)閉以上設(shè)備,最后進(jìn)行設(shè)備資源的釋放。

客戶端與服務(wù)器建立連接之后就可以進(jìn)行雙向通信,雙方只需要進(jìn)行一次請(qǐng)求/響應(yīng)操作,之后每次通信傳輸?shù)亩紴榭刂浦噶詈徒】禂?shù)據(jù),加快了數(shù)據(jù)傳輸?shù)乃俣?,進(jìn)一步提高數(shù)據(jù)傳輸?shù)膶?shí)時(shí)性[14]。

4 中間件系統(tǒng)測(cè)試

本文將中間件系統(tǒng)部署于Windows10操作系統(tǒng),首先從Windows命令行程序中進(jìn)入系統(tǒng)項(xiàng)目的根目錄,執(zhí)行node healthy_central.js運(yùn)行中間件程序,中間件系統(tǒng)就會(huì)以后臺(tái)的方式掛起并開(kāi)始監(jiān)聽(tīng)2800端口。

本系統(tǒng)以接入的血壓計(jì)、體溫計(jì)和心率計(jì)來(lái)進(jìn)行演示,設(shè)備實(shí)物圖如圖7所示。BLE血壓計(jì)為專業(yè)廠家深圳奧又美公司生產(chǎn);BLE體溫計(jì)由深圳智子云守護(hù)科技公司生產(chǎn)的新一代非接觸式體溫計(jì);BLE心率計(jì)由團(tuán)隊(duì)通過(guò)心率傳感器、溫度傳感器、電源和低功耗藍(lán)牙RF芯片制作而成。血壓計(jì)能夠測(cè)量實(shí)時(shí)血壓值并得出舒張壓、收縮壓和平均心率,非接觸式體溫計(jì)能夠快速、精準(zhǔn)測(cè)量體溫,心率計(jì)能夠?qū)崟r(shí)進(jìn)行心率和室內(nèi)溫度的測(cè)量。

圖7 設(shè)備實(shí)物圖

目前主流的瀏覽器如Chrome、Firefox等均已支持WebSocket API,所以本文采用HTML5+JavaScript語(yǔ)言編寫(xiě)了簡(jiǎn)易的Web界面通過(guò)WebSocket客戶端來(lái)訪問(wèn)系統(tǒng)接口,從而作為調(diào)用方來(lái)進(jìn)行便捷的演示。該客戶端同時(shí)適應(yīng)了電腦與移動(dòng)端設(shè)備,頁(yè)面設(shè)計(jì)如圖8所示。客戶端通過(guò)瀏覽器訪問(wèn)中間件系統(tǒng)來(lái)管理可穿戴醫(yī)療設(shè)備,主要實(shí)現(xiàn)了onopen()、onmessage()、onclose()等回調(diào)函數(shù),觸發(fā)事件分別為連接建立、接收中間件數(shù)據(jù)、連接關(guān)閉,并通過(guò)send()函數(shù)主動(dòng)向中間件發(fā)送數(shù)據(jù)。當(dāng)客戶端與中間件建立連接后,用戶可發(fā)送指令來(lái)管理可穿戴醫(yī)療設(shè)備,客戶端頁(yè)面會(huì)實(shí)時(shí)顯示設(shè)備連接狀態(tài)與健康數(shù)據(jù)。

圖8 客戶端界面設(shè)計(jì)

4.1 可穿戴醫(yī)療設(shè)備連接測(cè)試

本文通過(guò)所設(shè)計(jì)的客戶端分別連接BLE體溫計(jì)、血壓計(jì)和心率計(jì)設(shè)備,中間件系統(tǒng)立即執(zhí)行外圍設(shè)備掃描、設(shè)備連接以及特征值發(fā)現(xiàn)操作。為便于觀察,采用VS Code編輯器進(jìn)行輸出結(jié)果的顯示,體溫計(jì)與血壓計(jì)連接操作的中間件系統(tǒng)執(zhí)行結(jié)果如圖9所示,系統(tǒng)掃描設(shè)備后返回設(shè)備的廣播信息如設(shè)備名、設(shè)備MAC地址、設(shè)備連接狀態(tài)等,測(cè)試表明中間件系統(tǒng)均能夠快速掃描、連接可穿戴醫(yī)療設(shè)備,并能夠成功匹配操作設(shè)備所需的特征值。

(a) 體溫計(jì) (b) 血壓計(jì)圖9 可穿戴醫(yī)療設(shè)備連接狀態(tài)圖

4.2 可穿戴醫(yī)療設(shè)備并發(fā)操作以及數(shù)據(jù)傳輸測(cè)試

為更好地演示客戶端跨平臺(tái)的效果以及多設(shè)備并發(fā)操作的性能,在Windows10平臺(tái)中通過(guò)Chrome瀏覽器啟動(dòng)一個(gè)客戶端連接心率計(jì)設(shè)備,同時(shí)在兩臺(tái)Android7.1移動(dòng)終端通過(guò)QQ瀏覽器啟動(dòng)客戶端分別連接體溫計(jì)與血壓計(jì)設(shè)備。三個(gè)客戶端在同時(shí)段進(jìn)行各自的健康監(jiān)測(cè),通過(guò)Date()方法獲取當(dāng)前的時(shí)間進(jìn)行對(duì)照??纱┐麽t(yī)療設(shè)備健康監(jiān)測(cè)的效果如圖10所示。測(cè)試表明三個(gè)客戶端并發(fā)運(yùn)行下均能夠獨(dú)立地操作可穿戴醫(yī)療設(shè)備,中間件正確執(zhí)行連接設(shè)備、開(kāi)始測(cè)量和關(guān)閉設(shè)備的指令,解析健康監(jiān)測(cè)數(shù)據(jù)并實(shí)時(shí)傳輸?shù)娇蛻舳恕?/p>

(a) 體溫計(jì)監(jiān)測(cè)數(shù)據(jù) (b) 血壓計(jì)監(jiān)測(cè)數(shù)據(jù) (c) 心率計(jì)監(jiān)測(cè)數(shù)據(jù)圖10 并發(fā)操作與數(shù)據(jù)傳輸測(cè)試

中間件系統(tǒng)各項(xiàng)測(cè)試結(jié)果表明,基于Node.js的可穿戴醫(yī)療設(shè)備管理系統(tǒng)能夠進(jìn)行便捷有效的設(shè)備操控,系統(tǒng)運(yùn)行穩(wěn)定,能夠正常完成可穿戴醫(yī)療設(shè)備連接、控制、數(shù)據(jù)傳輸?shù)裙ぷ鳌O啾扔诎沧?,在通用平臺(tái)上進(jìn)行可穿戴醫(yī)療設(shè)備的管理有著更強(qiáng)的響應(yīng)速度和更快的數(shù)據(jù)處理能力,并能夠?qū)崿F(xiàn)設(shè)備并發(fā)的操作,非常適合有著計(jì)算需求和并發(fā)測(cè)量的應(yīng)用場(chǎng)景。

5 結(jié) 語(yǔ)

本文提出并開(kāi)發(fā)了一種適用于通用平臺(tái)的可穿戴醫(yī)療設(shè)備管理中間件,實(shí)現(xiàn)了病房場(chǎng)景下多傳感器設(shè)備的綜合管理功能,進(jìn)而擴(kuò)展了可穿戴醫(yī)療設(shè)備的應(yīng)用場(chǎng)景?;诒疚墓ぷ鳎罄m(xù)將會(huì)進(jìn)一步增強(qiáng)對(duì)傳感器設(shè)備的管理能力,通過(guò)定義標(biāo)準(zhǔn)化接口來(lái)兼容更多廠家、類型的可穿戴醫(yī)療設(shè)備,設(shè)計(jì)兼顧結(jié)構(gòu)化、半結(jié)構(gòu)化數(shù)據(jù)的數(shù)據(jù)預(yù)處理模塊來(lái)支持復(fù)雜多樣的傳感器數(shù)據(jù)類型,并進(jìn)一步優(yōu)化支持多傳感器的并發(fā)管理任務(wù),為可穿戴醫(yī)療設(shè)備的管理提供一種靈活易用、更趨智能化的方式。

猜你喜歡
體溫計(jì)中間件監(jiān)測(cè)數(shù)據(jù)
含汞體溫計(jì)將全部退市
體溫計(jì)
我國(guó)自主可控中間件發(fā)展研究
咬破了體溫計(jì)怎么辦
淺談環(huán)境監(jiān)測(cè)垂直管理的優(yōu)勢(shì)
環(huán)保驗(yàn)收監(jiān)測(cè)異常數(shù)據(jù)的分析與處理探討
以實(shí)力證明 用事實(shí)說(shuō)話
云計(jì)算環(huán)境下中間件的負(fù)載均衡機(jī)制研究
金蝶 引領(lǐng)中間件2.0新時(shí)代
北京經(jīng)濟(jì)社會(huì)發(fā)展月度監(jiān)測(cè)數(shù)據(jù)(2008年11月)
凤山县| 长垣县| 西宁市| 兴隆县| 萨迦县| 栖霞市| 晋中市| 新平| 渝北区| 汝州市| 耿马| 资溪县| 故城县| 天门市| 五指山市| 伊通| 兴安盟| 许昌市| 无为县| 宁海县| 襄垣县| 白沙| 盐池县| 富顺县| 泗水县| 石楼县| 武山县| 加查县| 永城市| 正宁县| 筠连县| 普陀区| 韶关市| 邮箱| 中阳县| 宜阳县| 定边县| 武乡县| 昆山市| 南开区| 河东区|