黃 濤, 熊國燦
(北京經(jīng)濟(jì)管理職業(yè)學(xué)院工程技術(shù)學(xué)院, 北京 102602)
空調(diào)、照明、實(shí)驗(yàn)室等是學(xué)校用電大戶,存在用電浪費(fèi)現(xiàn)象,有的還存在用電安全隱患。對這些設(shè)備和設(shè)施的電源進(jìn)行信息化管理可以緩解上述問題,有助于提高學(xué)校對設(shè)備的科學(xué)管理水平。
對電源進(jìn)行控制,需要用到電源智能開關(guān)。智能開關(guān)一方面可以將目前所連接的開關(guān)狀態(tài)傳送出去,另一方面可以接受指令控制開關(guān)的啟動和關(guān)閉。智能開關(guān)集成了通信模塊、通信程序和固態(tài)繼電器,是一個帶CPU的微型控制設(shè)備[1]。
智能開關(guān)帶有WiFi模塊,它可以接入校園WiFi網(wǎng)絡(luò),成為其中的一個節(jié)點(diǎn)。智能開關(guān)和控制服務(wù)器之間在WiFi基礎(chǔ)上定義一種協(xié)議,協(xié)議要考慮彼此認(rèn)證的能力及加密算法,保證數(shù)據(jù)和控制的安全傳輸。
ESP8266帶完整WiFi功能,同時帶一個32bit MCU的SoC模塊,可以直接在該模塊上編寫程序進(jìn)行二次開發(fā)。也可以將ESP8266當(dāng)成一個單純的通信模塊,另用一塊Arduino Uno開發(fā)板作智能單元。ESP8266本身也是一個Arduino模板。
Arduino UNO的處理器核心是ATmega328,具有14路數(shù)字輸入/輸出口,其中6路可作為PWM輸出,6路模擬輸入,一個16 MHz晶體振蕩器,一個USB口,一個電源插座,一個ICSP header和一個復(fù)位按鈕,可以作為控制元件連接固態(tài)繼電器等外設(shè)。這種Arduino UNO加ESP8266的結(jié)構(gòu)可以在Arduino UNO上使用樂鑫AT固件,通過串口用AT指令來實(shí)現(xiàn)WiFi連接和網(wǎng)絡(luò)通迅。
如果只用ESP8266構(gòu)造智能開關(guān),可以使用樂鑫SDK開發(fā)包,直接用C編程,開發(fā)BIN文件下載到ESP8266里[2];也可以使用NODEMCU固件,用圖形化LUA語言編程;還可以使用Arduino的IDE進(jìn)行直接編程,也就是Arduino IDE for ESP8266。用Arduino IDE編程ESP8266,首先要下載相應(yīng)的庫[3]。
智能開關(guān)需要直流5 V的獨(dú)立供電。智能開關(guān)是一個無線控制的設(shè)備,能比較簡便地接入現(xiàn)有電源系統(tǒng),可以大量減少土建和電氣方面的現(xiàn)場施工工作。
控制服務(wù)器是一個WEB服務(wù)器,裝有MQTT(Message Queuing Telemetry Transport,消息隊(duì)列遙測傳輸)服務(wù)和mongoDB數(shù)據(jù)庫。智能開關(guān)通過MQTT協(xié)議按照一定時間間隔將狀態(tài)推送給控制服務(wù)器;智能開關(guān)通過MQTT服務(wù)的訂閱機(jī)制響應(yīng)對自身連接的固態(tài)繼電器的狀態(tài)的改變命令。mongoDB數(shù)據(jù)庫保存控制規(guī)則和智能開關(guān)的實(shí)時狀態(tài)數(shù)據(jù),業(yè)務(wù)邏輯根據(jù)控制規(guī)則和實(shí)時狀態(tài)數(shù)據(jù)把改變命令推送給智能開關(guān)。
如下頁圖1所示,控制服務(wù)器是一個Linux系統(tǒng)的PC,它連接在校園網(wǎng)上,智能手機(jī)通過校園WiFi連接到校園網(wǎng),從而可以訪問控制服務(wù)器??蛻舳瞬恍枰狝PP,使用瀏覽器訪問控制服務(wù)器,智能手機(jī)通過瀏覽器可以訪問控制服務(wù)器的頁面,授權(quán)用戶可以訪問特定頁面,該頁面可以定義、修改控制規(guī)則并保存在數(shù)據(jù)庫中。規(guī)則的改變會引起邏輯業(yè)務(wù)重新計算。智能手機(jī)用戶在校園WiFi覆蓋的區(qū)域內(nèi),可以瀏覽各特定位置電源的開關(guān)狀態(tài),有權(quán)限的智能手機(jī)用戶可以啟動或者閉合某些位置的電源開關(guān)。
MQTT是物聯(lián)網(wǎng)的事實(shí)標(biāo)準(zhǔn),被用來作為傳感器和控制器之間的通信協(xié)議[4]。它使用發(fā)布/訂閱的消息模式,提供一對多的消息發(fā)布。它建立在TCP/IP網(wǎng)絡(luò)協(xié)議之上,能克服底層不可靠的網(wǎng)絡(luò)通信帶來的問題。它有三種服務(wù)質(zhì)量的消息發(fā)布:“至多一次”的消息發(fā)布可能會發(fā)生消息丟失,適合數(shù)據(jù)不斷重復(fù)采集更新的場合;“至少一次”的消息發(fā)布能確保消息到達(dá),但可能導(dǎo)致數(shù)據(jù)重復(fù),適合重要和關(guān)鍵數(shù)據(jù)的采集;“只有一次”的消息發(fā)布能確保消息到達(dá)一次,適合支付、身份認(rèn)證等有且只能有一次的數(shù)據(jù)傳輸。MQTT適合小型數(shù)據(jù)的傳輸,它還有特殊機(jī)制處理客戶端的異常中斷。在智能開關(guān)和控制服務(wù)器之間采用MQTT服務(wù)[5]。
圖1 電源管理系統(tǒng)結(jié)構(gòu)示意圖
MongoDB是基于分布式文件存儲的數(shù)據(jù)庫,是一種非關(guān)系數(shù)據(jù)庫,支持json格式的二進(jìn)制數(shù)據(jù),能存儲復(fù)雜結(jié)構(gòu)的數(shù)據(jù)類型,有較強(qiáng)大的查詢語言,它面向集合存儲,能存儲對象類型的數(shù)據(jù)。MongoDB適合實(shí)時數(shù)據(jù)處理。
控制服務(wù)器的業(yè)務(wù)邏輯程序使用node.js編寫。node.js是一個讓JavaScript運(yùn)行在服務(wù)器端的開發(fā)平臺,使用事件驅(qū)動、非阻塞IO模型、單線程實(shí)現(xiàn)并發(fā)數(shù)據(jù)的高效、輕便處理,應(yīng)用node.js可以快速構(gòu)建web服務(wù)器,適合分布式系統(tǒng)數(shù)據(jù)密集的實(shí)時應(yīng)用。
在開發(fā)web服務(wù)中,還會用到Express、Ejs、Redis等開源的模板框架或中間件。
云技術(shù)是分布式、并行系統(tǒng)、網(wǎng)絡(luò)計算的發(fā)展。通過WiFi和校園局域網(wǎng),智能開關(guān)、控制服務(wù)器、智能手機(jī)等構(gòu)成一個云計算的電源控制系統(tǒng),各個智能設(shè)備做適合自己的計算,各個智能設(shè)備還可以根據(jù)需要連接各種輸入輸出設(shè)備。大量數(shù)據(jù)傳送到后臺控制服務(wù)器后,統(tǒng)一的業(yè)務(wù)邏輯程序有利于系統(tǒng)的修改與維護(hù)[6]。
電源管理系統(tǒng)的主要功能有:遠(yuǎn)程瀏覽、監(jiān)督和控制空調(diào)、照明、實(shí)驗(yàn)室設(shè)備的電源;對空調(diào)、照明、實(shí)驗(yàn)室的電源開關(guān)進(jìn)行授權(quán)管理;用戶通過手機(jī)、校園卡、指紋、上級賦權(quán)等多種認(rèn)證手段確定電源管理權(quán)限;有管理權(quán)限的用戶可以遠(yuǎn)程修改控制規(guī)則;數(shù)據(jù)庫保存歷史數(shù)據(jù),日志文件記錄各種事件;對用電異常進(jìn)行記錄和報警;對各類報警行統(tǒng)計和打印。
基于校園WiFi及云技術(shù)的電源管理系統(tǒng)是一個輕型web應(yīng)用,開發(fā)快速、軟硬件可擴(kuò)展性好,性能穩(wěn)定可靠。