姬鵬飛
(鄭州安然測(cè)控技術(shù)股份有限公司,鄭州 450001)
智能門(mén)鎖系統(tǒng)應(yīng)用于各類(lèi)需要進(jìn)行管制的出入口通道,由傳統(tǒng)的機(jī)械鎖[1]發(fā)展而來(lái),目前市場(chǎng)上充斥著各類(lèi)智能門(mén)鎖,如指紋門(mén)鎖系統(tǒng)[2]、虹膜門(mén)鎖系統(tǒng)[3]等,在便利性和安全性方面逐漸成熟。但與物聯(lián)網(wǎng)時(shí)代的新興技術(shù)相比,這些產(chǎn)品仍然缺乏便利性、安全性、大規(guī)模民用性和商用性的能力。
在物聯(lián)網(wǎng)基礎(chǔ)平臺(tái)方面,國(guó)內(nèi)外一些企業(yè)都推出了各具特色的服務(wù)。阿里云[5]物聯(lián)網(wǎng)套件是專(zhuān)門(mén)為物聯(lián)網(wǎng)領(lǐng)域而開(kāi)發(fā)的,具有功能強(qiáng)大、全球多節(jié)點(diǎn)、低延時(shí)等特點(diǎn),但此物聯(lián)網(wǎng)套件面向的是開(kāi)發(fā)人員,而非智能設(shè)備管理系統(tǒng)平臺(tái)軟件。騰訊[6]物聯(lián)網(wǎng)通信(IoT Hub)服務(wù),旨在提供一個(gè)安全、穩(wěn)定、高效的連接平臺(tái),但也是面向開(kāi)發(fā)人員,且主攻物聯(lián)網(wǎng)通信領(lǐng)域。百度[7]物管理是一個(gè)智能設(shè)備管理平臺(tái),提供覆蓋設(shè)備全生命周期的、一站式的設(shè)備管理服務(wù),包括設(shè)備的層級(jí)管理、監(jiān)測(cè)、遙控、固件升級(jí)和維護(hù)保養(yǎng)等各種場(chǎng)景,但是該平臺(tái)面向的是硬件設(shè)備。華為[8]智能邊緣平臺(tái)滿足客戶對(duì)邊緣計(jì)算資源的遠(yuǎn)程管控、數(shù)據(jù)處理、分析決策、智能化的訴求,為用戶提供完整的邊緣和云協(xié)同的一體化服務(wù),但是價(jià)格昂貴。亞馬遜[9]的AWS IoT De?vice Management提供輕松而安全地大規(guī)模注冊(cè)、組織、監(jiān)控和遠(yuǎn)程管理IoT設(shè)備,但此系統(tǒng)是面向設(shè)備的。
本文基于中國(guó)移動(dòng)OneNET[4]物聯(lián)網(wǎng)平臺(tái)設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)具有易用性、安全性、價(jià)格普惠、可快速推廣的智能門(mén)鎖系統(tǒng)平臺(tái)軟件。前期已經(jīng)完成了硬件以及嵌入式的軟件部分,本文描述對(duì)應(yīng)系統(tǒng)平臺(tái)軟件的設(shè)計(jì)與實(shí)現(xiàn)。系統(tǒng)軟件平臺(tái)包括服務(wù)器端和用戶端,服務(wù)器端使用Linux系統(tǒng),利用Java開(kāi)發(fā)基于Apache Tomcat的 Web應(yīng)用,為用戶提供 Web服務(wù),為OneNET平臺(tái)的數(shù)據(jù)推送提供HTTP協(xié)議的方式;用戶端基于微信開(kāi)發(fā),用戶通過(guò)該網(wǎng)頁(yè)與服務(wù)器通信,由服務(wù)器向OneNET平臺(tái)發(fā)送指令,即可實(shí)現(xiàn)對(duì)智能門(mén)鎖的控制。
本文設(shè)計(jì)并實(shí)現(xiàn)的智能門(mén)鎖系統(tǒng)平臺(tái)軟件由服務(wù)器后端和用戶前端兩部分組成。服務(wù)器后端使用Linux 操作系統(tǒng),基于 Spring、MyBatis、Maven 開(kāi)發(fā)系統(tǒng),利用Apache Tomcat Server運(yùn)行Web應(yīng)用系統(tǒng)平臺(tái)軟件,為用戶提供網(wǎng)頁(yè)交互接口和HTTP接口服務(wù),同時(shí)提供與OneNET平臺(tái)數(shù)據(jù)推送服務(wù)的HTTP協(xié)議接口;用戶前端基于微信公眾號(hào)實(shí)現(xiàn),提供微信網(wǎng)頁(yè)版用戶交互接口,用戶可在網(wǎng)頁(yè)內(nèi)選擇需要打開(kāi)的智能門(mén)鎖進(jìn)行操作,也可直接通過(guò)微信掃描智能門(mén)鎖二維碼開(kāi)鎖。系統(tǒng)總體架構(gòu)設(shè)計(jì)如圖1所示。
圖1 系統(tǒng)總體架構(gòu)設(shè)計(jì)
服務(wù)器后端主要負(fù)責(zé)接收智能門(mén)鎖終端設(shè)備委托OneNET平臺(tái)轉(zhuǎn)發(fā)的運(yùn)行數(shù)據(jù),及通過(guò)OneNET平臺(tái)向某一個(gè)特定的智能門(mén)鎖終端設(shè)備發(fā)送指令,或者向多個(gè)特定的終端設(shè)備發(fā)送指令,也可以向所有終端設(shè)備發(fā)送指令;運(yùn)行監(jiān)聽(tīng)程序,等待由OneNET平臺(tái)轉(zhuǎn)發(fā)的來(lái)自終端設(shè)備的數(shù)據(jù);利用負(fù)載均衡對(duì)多臺(tái)云服務(wù)器進(jìn)行流量分發(fā),通過(guò)流量分發(fā)擴(kuò)展應(yīng)用系統(tǒng)對(duì)外的服務(wù)能力,通過(guò)消除單點(diǎn)故障提升應(yīng)用系統(tǒng)的可用性和可靠性。
前端也包括兩部分,分別是基于PC瀏覽器的后臺(tái)管理應(yīng)用系統(tǒng),為管理人員提供運(yùn)營(yíng)管理、歷史數(shù)據(jù)分析查看、設(shè)備添加與設(shè)置及用戶管理等服務(wù);基于微信公眾號(hào)的網(wǎng)頁(yè)版智能門(mén)鎖應(yīng)用,通過(guò)調(diào)用微信接口提供用戶掃碼開(kāi)門(mén)和關(guān)門(mén)操作,通過(guò)網(wǎng)頁(yè)表單的方式為用戶提供申請(qǐng)智能門(mén)鎖使用權(quán)限服務(wù)。兩部分均基于HTML、CSS和JavaScript三種語(yǔ)言實(shí)現(xiàn),在瀏覽器環(huán)境下運(yùn)行。
智能門(mén)鎖系統(tǒng)平臺(tái)軟件包括后端、前端后臺(tái)管理、前端微信網(wǎng)頁(yè)三部分,后端基于Linux系統(tǒng)開(kāi)發(fā),對(duì)外提供Web服務(wù),主要負(fù)責(zé)業(yè)務(wù)數(shù)據(jù)的處理和存儲(chǔ),前端后臺(tái)管理基于PC瀏覽器進(jìn)行開(kāi)發(fā),主要負(fù)責(zé)為管理員提供智能門(mén)鎖終端設(shè)備和終端用戶的管理配置功能,前端微信網(wǎng)頁(yè)基于微信公眾號(hào)進(jìn)行開(kāi)發(fā),主要為終端用戶提供智能門(mén)鎖終端設(shè)備的交互接口。
數(shù)據(jù)庫(kù)基于MySQL,包含4個(gè)表,分別是users(用戶表)、devices(設(shè)備表)、authorization(授權(quán)表)、opera?tions(操作記錄表)。
users包含智能門(mén)鎖終端設(shè)備用戶和后臺(tái)管理員,以字段is_admin區(qū)分,其值為0表示智能門(mén)鎖終端設(shè)備用戶,值為1表示后臺(tái)管理員,后臺(tái)管理員與智能門(mén)鎖終端設(shè)備用戶在系統(tǒng)中的權(quán)限范圍是包含關(guān)系,后臺(tái)管理員可以使用智能門(mén)鎖和登錄系統(tǒng)后臺(tái),智能門(mén)鎖終端設(shè)備用戶只能使用智能門(mén)鎖,不可登錄系統(tǒng)后臺(tái)進(jìn)行管理操作。
device記錄智能門(mén)鎖終端設(shè)備信息,包括設(shè)備基本信息、位置等信息,其中設(shè)備信號(hào)強(qiáng)度用阿拉伯?dāng)?shù)字表示,含義為M6312通信模組的信號(hào)強(qiáng)度,值越大即信號(hào)越強(qiáng),設(shè)備硬件狀態(tài)表示設(shè)備是否開(kāi)機(jī)。
authorization記錄智能門(mén)鎖終端設(shè)備與用戶之間的授權(quán)關(guān)系,關(guān)系存在且在有效期內(nèi)的用戶才能開(kāi)門(mén)。授權(quán)表中status字段表示授權(quán)記錄狀態(tài),后臺(tái)管理員添加的授權(quán)記錄默認(rèn)為1,不可修改,用戶申請(qǐng)的授權(quán)記錄默認(rèn)值為0,待后臺(tái)管理員審核后,狀態(tài)可為1或2。
operations記錄用戶開(kāi)關(guān)門(mén)操作,包括用戶和智能門(mén)鎖終端設(shè)備、操作時(shí)間、操作結(jié)果等信息。操作記錄表中status字段表示操作結(jié)果,0表示系統(tǒng)正在處理中,1表示允許開(kāi)門(mén),2表示拒絕開(kāi)門(mén)。
為了滿足后端運(yùn)行的高性能、并發(fā)性、穩(wěn)定性需求,在處理來(lái)自智能門(mén)鎖終端設(shè)備的數(shù)據(jù)時(shí),采用啟動(dòng)一個(gè)監(jiān)聽(tīng)進(jìn)程的方式進(jìn)行并發(fā)高效處理,其主要作用是起到導(dǎo)流作用。數(shù)據(jù)接收監(jiān)聽(tīng)進(jìn)程收到來(lái)自由OneNET平臺(tái)轉(zhuǎn)發(fā)的設(shè)備數(shù)據(jù),首先解析出該數(shù)據(jù)所屬的事件類(lèi)型,再根據(jù)事件類(lèi)型,啟動(dòng)相應(yīng)的線程對(duì)該事件進(jìn)行處理,處理完成后再根據(jù)事件類(lèi)型,確定是否需要向智能門(mén)鎖終端設(shè)備反饋事件結(jié)果。數(shù)據(jù)接收監(jiān)聽(tīng)進(jìn)程處理的流程如圖2所示。數(shù)據(jù)接收監(jiān)聽(tīng)進(jìn)程收到的事件類(lèi)型如下:
(1)狀態(tài)上報(bào)
(2)打開(kāi)/關(guān)閉門(mén)鎖響應(yīng)
(3)門(mén)鎖終端設(shè)備異常
圖2 數(shù)據(jù)接收監(jiān)聽(tīng)進(jìn)程數(shù)據(jù)處理流程
為了提高程序代碼模塊化、降低耦合性、提高可擴(kuò)展性,向門(mén)鎖終端發(fā)送數(shù)據(jù)時(shí),也采用啟動(dòng)一個(gè)監(jiān)聽(tīng)進(jìn)程專(zhuān)門(mén)處理的方式,其主要作用是起到匯流的作用。監(jiān)聽(tīng)進(jìn)程收到來(lái)自應(yīng)用系統(tǒng)各個(gè)模塊發(fā)送的數(shù)據(jù),首先解析出數(shù)據(jù)的目標(biāo)類(lèi)型,如果目標(biāo)類(lèi)型是智能門(mén)鎖終端設(shè)備,則直接將數(shù)據(jù)委托給OneNET平臺(tái),由OneNET平臺(tái)代為向智能門(mén)鎖終端設(shè)備轉(zhuǎn)發(fā)數(shù)據(jù),如果目標(biāo)類(lèi)型就是應(yīng)用系統(tǒng)本身,則將數(shù)據(jù)轉(zhuǎn)發(fā)給數(shù)據(jù)接收監(jiān)聽(tīng)進(jìn)程。數(shù)據(jù)發(fā)送監(jiān)聽(tīng)進(jìn)程處理的流程如圖3所示。數(shù)據(jù)發(fā)送監(jiān)聽(tīng)進(jìn)程的發(fā)送給智能門(mén)鎖終端設(shè)備的事件類(lèi)型相應(yīng)的有如下三種:
(1)請(qǐng)求上報(bào)設(shè)備狀態(tài)
(2)請(qǐng)求打開(kāi)/關(guān)閉門(mén)鎖
(3)請(qǐng)求門(mén)鎖終端設(shè)備自檢數(shù)據(jù)
專(zhuān)門(mén)設(shè)置一個(gè)數(shù)據(jù)發(fā)送進(jìn)程的另一個(gè)優(yōu)勢(shì)是便于開(kāi)發(fā)過(guò)程中調(diào)試應(yīng)用系統(tǒng)的程序邏輯,可模擬智能門(mén)鎖終端設(shè)備發(fā)送的數(shù)據(jù),無(wú)需真正與設(shè)備進(jìn)行聯(lián)調(diào),從而提高開(kāi)發(fā)效率。
圖3 數(shù)據(jù)發(fā)送監(jiān)聽(tīng)進(jìn)程數(shù)據(jù)處理流程
智能門(mén)鎖終端設(shè)備用戶的操作接口是由基于微信公眾號(hào)開(kāi)發(fā)的網(wǎng)頁(yè)所承載的,為了減少用戶需要輸入較多信息才能使用,提高用戶使用的便利性,應(yīng)用系統(tǒng)通過(guò)微信網(wǎng)頁(yè)授權(quán)機(jī)制,來(lái)獲取用戶基本信息,進(jìn)而實(shí)現(xiàn)業(yè)務(wù)邏輯,即免去用戶注冊(cè)的流程。
在微信公眾號(hào)請(qǐng)求用戶網(wǎng)頁(yè)授權(quán)之前,需要先到公眾平臺(tái)官網(wǎng)中的“開(kāi)發(fā)-接口權(quán)限-網(wǎng)頁(yè)服務(wù)-網(wǎng)頁(yè)帳號(hào)-網(wǎng)頁(yè)授權(quán)獲取用戶基本信息”的配置選項(xiàng)中,修改授權(quán)后的回調(diào)域名,即應(yīng)用系統(tǒng)需要用戶打開(kāi)的頁(yè)面。微信網(wǎng)頁(yè)授權(quán)是通過(guò)OAuth2.0機(jī)制實(shí)現(xiàn)的,在用戶授權(quán)給公眾號(hào)后,公眾號(hào)可以獲取到一個(gè)網(wǎng)頁(yè)授權(quán)特有的接口調(diào)用憑證(網(wǎng)頁(yè)授權(quán)access_token),通過(guò)網(wǎng)頁(yè)授權(quán)access_token可以進(jìn)行授權(quán)后接口調(diào)用,如獲取用戶基本信息、掃描二維碼等。
整個(gè)授權(quán)過(guò)程可分解為下述4步:
(1)引導(dǎo)用戶進(jìn)入授權(quán)頁(yè)面同意授權(quán),獲取code。
(2)通過(guò)code換取網(wǎng)頁(yè)授權(quán)access_token。
(3)必要時(shí)刷新網(wǎng)頁(yè)授權(quán)access_token,避免過(guò)期。
(4)通過(guò)網(wǎng)頁(yè)授權(quán)access_token和openid獲取用戶基本信息。
微信網(wǎng)頁(yè)授權(quán)流程如圖4所示。
圖4 微信網(wǎng)頁(yè)授權(quán)流程
通過(guò)微信網(wǎng)頁(yè)授權(quán)機(jī)制,用戶可在不關(guān)注公眾號(hào)的情況下,直接使用微信內(nèi)置掃碼功能掃描智能門(mén)鎖終端設(shè)備二維碼開(kāi)門(mén),極大提高用戶使用體驗(yàn)。
智能門(mén)鎖終端用戶請(qǐng)求打開(kāi)門(mén)鎖的方式有2種,分別是掃描智能門(mén)鎖終端設(shè)備二維碼和從公眾號(hào)進(jìn)入開(kāi)鎖網(wǎng)頁(yè)根據(jù)向?qū)瓿砷_(kāi)門(mén)操作。掃碼方式最簡(jiǎn)便,但是掃描之后的處理過(guò)程極其重要,直接影響到用戶使用體驗(yàn)。對(duì)此,在對(duì)智能門(mén)鎖二維碼編碼時(shí),將請(qǐng)求打開(kāi)智能門(mén)鎖的應(yīng)用系統(tǒng)接口地址和智能門(mén)鎖終端設(shè)備序列號(hào)組合成一個(gè)完整的請(qǐng)求接口地址,將此接口地址寫(xiě)入二維碼,每個(gè)智能門(mén)鎖終端設(shè)備的二維碼所承載的信息是唯一的。
圖5 掃碼打開(kāi)門(mén)鎖終端設(shè)備
當(dāng)用戶通過(guò)微信掃碼成功時(shí),微信將自動(dòng)跳轉(zhuǎn)到該接口地址,服務(wù)器收到請(qǐng)求后,解析出門(mén)鎖終端設(shè)備序列號(hào)和門(mén)鎖終端用戶標(biāo)識(shí),并調(diào)用授權(quán)確認(rèn)接口,查詢?cè)撚脩襞c該智能門(mén)鎖終端設(shè)備是否存在授權(quán)關(guān)系、授權(quán)關(guān)系狀態(tài)是否通過(guò)、授權(quán)關(guān)系是否仍在有效期。如果三個(gè)條件都驗(yàn)證通過(guò),則向數(shù)據(jù)發(fā)送監(jiān)聽(tīng)進(jìn)程發(fā)送數(shù)據(jù),數(shù)據(jù)內(nèi)容包括數(shù)據(jù)目標(biāo)、智能門(mén)鎖終端設(shè)備序列號(hào)、用戶標(biāo)識(shí)、操作類(lèi)型。數(shù)據(jù)發(fā)送監(jiān)聽(tīng)進(jìn)程再委托OneNET平臺(tái)代為向智能門(mén)鎖終端設(shè)備轉(zhuǎn)發(fā)數(shù)據(jù)。同時(shí),向用戶反饋智能門(mén)鎖授權(quán)確認(rèn)通過(guò),智能門(mén)鎖終端設(shè)備正在打開(kāi)。待打開(kāi)后,智能門(mén)鎖終端設(shè)備委托OneNET平臺(tái)轉(zhuǎn)發(fā)打開(kāi)門(mén)鎖響應(yīng),數(shù)據(jù)接收監(jiān)聽(tīng)進(jìn)程接收到該消息后,啟動(dòng)相應(yīng)線程處理,并告訴用戶門(mén)鎖已成功打開(kāi)。用戶掃碼打開(kāi)門(mén)鎖終端設(shè)備的流程如圖5所示。
OneNET平臺(tái)作為PaaS層,在物聯(lián)網(wǎng)中為SaaS層和IaaS層搭建連接橋梁,分別向上下游提供中間層核心能力,在本系統(tǒng)中,上游是智能門(mén)鎖應(yīng)用系統(tǒng),下游是智能門(mén)鎖終端設(shè)備。OneNET架構(gòu)示意圖如圖6所示。首先在OneNET平臺(tái)注冊(cè)用戶,進(jìn)入開(kāi)發(fā)者中心并創(chuàng)建產(chǎn)品。創(chuàng)建產(chǎn)品時(shí)操作系統(tǒng)選擇“Linux”,聯(lián)網(wǎng)方式選擇“移動(dòng)蜂窩網(wǎng)絡(luò)”,設(shè)備接入方式選擇“公開(kāi)協(xié)議”,設(shè)備接入?yún)f(xié)議選擇“TCP透?jìng)鳌薄?/p>
產(chǎn)品創(chuàng)建之后,即可接入門(mén)鎖終端設(shè)備,步驟如下:
(1)創(chuàng)建設(shè)備,記錄設(shè)備序列號(hào)等信息;創(chuàng)建設(shè)備有2種方式,應(yīng)用系統(tǒng)在添加智能門(mén)鎖終端設(shè)備時(shí)會(huì)調(diào)用OneNET平臺(tái)的創(chuàng)建設(shè)備API實(shí)現(xiàn)設(shè)備的創(chuàng)建,也可以人工手動(dòng)在OneNET平臺(tái)創(chuàng)建設(shè)備。
(2)通過(guò)OneNET平臺(tái)上傳Lua腳本,并解析腳本到產(chǎn)品下。
(3)設(shè)備上電,與OneNET接入服務(wù)建立TCP連接,發(fā)送登錄報(bào)文。
(4)在OneNET上的設(shè)備管理下點(diǎn)擊數(shù)據(jù)展示,進(jìn)入數(shù)據(jù)展示頁(yè)面,點(diǎn)擊下拉菜單,查看近期上傳的數(shù)據(jù)點(diǎn)。
圖6 OneNET平臺(tái)架構(gòu)示意圖
硬件接入完成后,即可根據(jù)相關(guān)所接入的硬件設(shè)備以及所上傳的數(shù)據(jù)進(jìn)行相關(guān)產(chǎn)品的開(kāi)發(fā)和接入。在OneNET平臺(tái)與智能門(mén)鎖應(yīng)用系統(tǒng)之間是數(shù)據(jù)推送和數(shù)據(jù)接收的關(guān)系。需要對(duì)數(shù)據(jù)推送服務(wù)進(jìn)行配置,當(dāng)OneNet平臺(tái)接收到智能門(mén)鎖終端設(shè)備的數(shù)據(jù)時(shí),通過(guò)平臺(tái)的“第三方平臺(tái)開(kāi)發(fā)”功能設(shè)置的數(shù)據(jù)接收地址,OneNet平臺(tái)才會(huì)把數(shù)據(jù)推送到該接收地址。需要對(duì)數(shù)據(jù)接收服務(wù)進(jìn)行配置,步驟如下:
(1)點(diǎn)擊進(jìn)入配置頁(yè)。
(2)填寫(xiě)智能門(mén)鎖應(yīng)用系統(tǒng)URL地址。
(3)寫(xiě)用戶 Token。
(4)隨機(jī)生成 EncodingAESKey。
(5)選擇消息加解密方式。
本文重點(diǎn)設(shè)計(jì)并實(shí)現(xiàn)了基于OneNET平臺(tái)的智能門(mén)鎖系統(tǒng)平臺(tái)軟件,系統(tǒng)運(yùn)行高效穩(wěn)定,實(shí)時(shí)性好,容錯(cuò)性高,微信端應(yīng)用軟件使用簡(jiǎn)便,運(yùn)行流暢,用戶體驗(yàn)好??捎糜谄胀彝シ辣I門(mén)、企事業(yè)單位出入口通道門(mén)鎖、高度機(jī)要部門(mén)安防,為相關(guān)的物聯(lián)網(wǎng)項(xiàng)目提供了一種新的解決方案。