閆 勇,盧雅麗,鮑子宣,譚玉龍,趙文杰,許正榮
(安徽農(nóng)業(yè)大學(xué) 信息與計(jì)算機(jī)學(xué)院,合肥 230036)
隨著養(yǎng)殖現(xiàn)代化程度的飛速提高,養(yǎng)殖戶們對(duì)設(shè)備智能化的要求也逐漸提高[1].在目前的市場(chǎng)中,喂食器多以家庭寵物類為主,且存在飼料倉(cāng)容量小、機(jī)器無(wú)法靈活移動(dòng)等問(wèn)題.同時(shí),目前高品質(zhì)畜禽養(yǎng)殖業(yè)多為戶外散養(yǎng),其自動(dòng)喂食器工作于野外無(wú)人或少人值守環(huán)境,而野外畜禽自動(dòng)喂食領(lǐng)域仍是空白.現(xiàn)有動(dòng)物喂食器大多沒有遠(yuǎn)程控制與監(jiān)視系統(tǒng),不適合在長(zhǎng)期無(wú)人值守的野外工作.因此,本設(shè)計(jì)就是為了克服以往小型寵物喂食器缺陷,讓喂食器將養(yǎng)殖場(chǎng)的各種設(shè)備互聯(lián)互通,用戶或管理者可以通過(guò)手機(jī)或在喂食器本地對(duì)其進(jìn)行管理.而野外、郊區(qū)等偏僻地區(qū)多存在信號(hào)差、基站少等網(wǎng)絡(luò)問(wèn)題,如何將受限環(huán)境下的喂食器設(shè)備與用戶有效連接是我們當(dāng)前面臨的挑戰(zhàn).
MQTT(Message Queuing Telemetry Transport,消息隊(duì)列遙測(cè)傳輸),主要提供訂閱/發(fā)布兩種消息模式,更為簡(jiǎn)約、輕量,此協(xié)議開放、易于實(shí)現(xiàn)[2],在受限環(huán)境(帶寬低、網(wǎng)絡(luò)通信不穩(wěn)定)也能良好工作,特別適用于放置在野外信號(hào)弱、帶寬低環(huán)境下,喂食器通過(guò)傳輸少量數(shù)據(jù)而進(jìn)行遠(yuǎn)程連接的情況.
本文的貢獻(xiàn)如下:
?設(shè)計(jì)并實(shí)現(xiàn)了一種擁有一套完善的硬件操作系統(tǒng)、數(shù)據(jù)庫(kù)系統(tǒng)、數(shù)據(jù)分析處理后臺(tái)與遠(yuǎn)程操控軟件系統(tǒng)喂食器,并搭配有相應(yīng)的手機(jī)客戶端和微信小程序.
?基于MQTT協(xié)議的網(wǎng)絡(luò)傳輸系統(tǒng)極大程度改善了受限環(huán)境下喂食器的運(yùn)轉(zhuǎn),為野外喂食器與養(yǎng)殖戶的連接提供了保障.
(1)遠(yuǎn)程控制.為節(jié)約人力資源、提高養(yǎng)殖效率,用戶可通過(guò)手機(jī)來(lái)對(duì)喂食器進(jìn)行操作,如:定時(shí)或?qū)崟r(shí)喂食、實(shí)時(shí)視頻監(jiān)控、監(jiān)控飼料余量等功能,保障動(dòng)物的高質(zhì)量生長(zhǎng),為用戶提供便利;(2)預(yù)約循環(huán)喂食,食量可選.針對(duì)動(dòng)物的不同的生長(zhǎng)周期,設(shè)定喂養(yǎng)時(shí)間、數(shù)量,節(jié)約人力資源,科學(xué)喂養(yǎng);(3)環(huán)境溫濕度監(jiān)測(cè).方便用戶了解動(dòng)物生長(zhǎng)狀態(tài),進(jìn)而達(dá)到改善品種、調(diào)節(jié)生長(zhǎng)周期、提高經(jīng)濟(jì)效益的目的;(4)視頻、拍照監(jiān)控.在野外網(wǎng)絡(luò)信號(hào)不穩(wěn)定的情況下保障視頻的實(shí)時(shí)傳送,保障動(dòng)物生活安全,提高養(yǎng)殖戶的工作效率,方便及時(shí)發(fā)現(xiàn)和處置養(yǎng)殖場(chǎng)的突發(fā)情況;(5)進(jìn)食動(dòng)物數(shù)目識(shí)別.使用RFID對(duì)進(jìn)食的動(dòng)物計(jì)數(shù),分析動(dòng)物進(jìn)食情況,便于調(diào)整養(yǎng)殖策略;(6)飼料余量監(jiān)控.飼料桶上方有自主設(shè)計(jì)的基于超聲波的傳感器陣列,能夠較準(zhǔn)確地計(jì)算出飼料余量,方便養(yǎng)殖戶及時(shí)添加.
為了滿足當(dāng)前喂食器的智能管理、實(shí)現(xiàn)系統(tǒng)所應(yīng)具備的各項(xiàng)功能,結(jié)合當(dāng)前射頻識(shí)別(RFID)、紅外感應(yīng)器等信息傳感設(shè)備的完善,近距離無(wú)線傳輸技術(shù)包括WIFI、藍(lán)牙、UWB、MTC、ZigBee、NFC等的不斷更新,物品與物品間逐漸能夠進(jìn)行信息交換和通信,從而實(shí)現(xiàn)對(duì)物品的定位、監(jiān)控和管理的物聯(lián)網(wǎng)技術(shù)[3],本系統(tǒng)建立感知層、網(wǎng)絡(luò)層和應(yīng)用層的三層體系架構(gòu),完成從數(shù)據(jù)采集、跨網(wǎng)段傳遞、存儲(chǔ)、處理及結(jié)果反饋的過(guò)程,如圖1所示.
圖1 喂食器系統(tǒng)體系結(jié)構(gòu)
2.1.1 感知層
感知層主要包括智能網(wǎng)關(guān)和傳感器節(jié)點(diǎn),傳感器節(jié)點(diǎn)由若干傳感器和數(shù)據(jù)集成模塊構(gòu)成.智能網(wǎng)關(guān)幫助傳感器節(jié)點(diǎn)接入網(wǎng)絡(luò),實(shí)現(xiàn)運(yùn)行狀態(tài)數(shù)據(jù)的全面采集、實(shí)時(shí)反饋;對(duì)傳感器節(jié)點(diǎn)實(shí)現(xiàn)喚醒、控制、診斷、管理;完成來(lái)自不同感知網(wǎng)絡(luò)到接入網(wǎng)絡(luò)的協(xié)議轉(zhuǎn)換;將上層下達(dá)的指令數(shù)據(jù)包解析成感知協(xié)議層可以識(shí)別的指令、控制數(shù)據(jù).
2.1.2 網(wǎng)絡(luò)層
網(wǎng)絡(luò)層作為感知層與應(yīng)用層信令之間的傳遞通道,建立了客戶端到服務(wù)器的連接,是喂食器系統(tǒng)信息傳遞和服務(wù)支撐的基礎(chǔ)設(shè)施.傳統(tǒng)的通信方式通常為客戶端與服務(wù)端之間直接傳輸消息,而MQTT協(xié)議的通信方式是通過(guò)發(fā)布/訂閱的方式進(jìn)行的[4].
網(wǎng)絡(luò)層的功能分為:1)從網(wǎng)關(guān)獲取到目標(biāo)數(shù)據(jù)后,將這些數(shù)據(jù)在局域網(wǎng)內(nèi)打包、上傳,實(shí)現(xiàn)了數(shù)據(jù)信息的實(shí)時(shí)動(dòng)態(tài)感知;2)將收到的信息分類到不同的主題,隨后將數(shù)據(jù)信息轉(zhuǎn)發(fā)給訂閱該主題的客戶端;3)與各種應(yīng)用接口建立連接,為喂食器系統(tǒng)提供網(wǎng)絡(luò)服務(wù)功能,并實(shí)現(xiàn)信息的存儲(chǔ)和跨網(wǎng)段傳輸,使系統(tǒng)能夠管理資源,如設(shè)備日志、數(shù)據(jù)倉(cāng)庫(kù)等.
2.1.3 應(yīng)用層
控制設(shè)備對(duì)用戶發(fā)出的命令進(jìn)行操作,作出反饋;應(yīng)用軟件為用戶提供了查看、操作喂食器的平臺(tái),實(shí)時(shí)管理養(yǎng)殖場(chǎng)[5];硬件設(shè)備如電機(jī)、攝像頭等在接受到信令后,將開始工作;數(shù)據(jù)分析系統(tǒng)通過(guò)對(duì)飼料桶、動(dòng)物活動(dòng)的分析,向用戶反饋,為動(dòng)物的生長(zhǎng)提供保障[6].
由于喂食器工作在野外環(huán)境,受地形地勢(shì)等因素影響,網(wǎng)絡(luò)信號(hào)不穩(wěn)定、帶寬較低、信號(hào)延遲時(shí)間長(zhǎng).但喂食器需能夠被用戶實(shí)時(shí)控制,運(yùn)轉(zhuǎn)的數(shù)據(jù)也應(yīng)被及時(shí)上傳,故合理地設(shè)計(jì)網(wǎng)絡(luò)層能夠避免消息傳遞的中斷,用戶與喂食器系統(tǒng)間也能夠建立起穩(wěn)定、安全的連接.
本MQTT協(xié)議是實(shí)現(xiàn)喂食器系統(tǒng)中的數(shù)據(jù)從傳感器節(jié)點(diǎn)推送到應(yīng)用層的較為理想的解決方案,智能網(wǎng)關(guān)的設(shè)計(jì)可獲取傳感器節(jié)點(diǎn)的數(shù)據(jù)并與廣域網(wǎng)實(shí)現(xiàn)連接[7].如圖2所示.
圖2 基于MQTT協(xié)議的網(wǎng)絡(luò)層
2.2.1 MQTT結(jié)構(gòu)
MQTT可分為兩部分:客戶端(Client)、消息代理(Broker).客戶端可細(xì)分為發(fā)布者(Publish)和訂閱者(Subscribe),客戶端直接使用該協(xié)議與消息代理進(jìn)行連接[8].
本代理服務(wù)器端主要為ActiveMQ,發(fā)布者為各智能網(wǎng)關(guān),通過(guò)服務(wù)器來(lái)發(fā)布各節(jié)點(diǎn)數(shù)據(jù),作為訂閱者的各應(yīng)用層將實(shí)現(xiàn)數(shù)據(jù)的傳輸;應(yīng)用層中的小程序或顯示屏作為發(fā)布者,智能網(wǎng)關(guān)經(jīng)主題訂閱后將命令傳遞給各控制設(shè)備,最終實(shí)現(xiàn)喂食器系統(tǒng)的運(yùn)轉(zhuǎn).
在系統(tǒng)工作過(guò)程中用分配不同身份、定義不同主題的方式,代理服務(wù)器將智能網(wǎng)關(guān)的傳感器數(shù)據(jù)跨網(wǎng)段傳輸?shù)綉?yīng)用層,同時(shí)也將指令下達(dá)到不同節(jié)點(diǎn).
2.2.2 MQTT的消息格式
MQTT的數(shù)據(jù)包主要有三部分組成:固定報(bào)頭(Fixed header)、可變報(bào)頭(Variable header)和有效載荷(payload).其中每條消息都包含固定頭,其長(zhǎng)度固定為2 bytes,節(jié)省空間、降低流量消耗,為野外環(huán)境下喂食器系統(tǒng)與用戶的連接提供了極大便利.有效載荷主要包括消息的內(nèi)容,即本客戶端的ClientID、訂閱的Topic、Message以及用戶名及密碼,它確定了用戶的登錄身份和狀態(tài),以及訂閱的消息主題,為后續(xù)接收、發(fā)送數(shù)據(jù)提供保障.
2.2.3 QoS(服務(wù)質(zhì)量)
固定頭格式如下表1.
表1 MQTT的固定頭格式
其中的QoS level指服務(wù)質(zhì)量等級(jí),共有三種,QoS決定了服務(wù)器與客戶端將如何接受消息,消息可以任意級(jí)別的QoS發(fā)布或訂閱,客戶端在接收時(shí)會(huì)選擇QoS等級(jí)最高的接收.
本MQTT協(xié)議的消息代理服務(wù)器為ActiveMQ,采用的是ActiveMQ中發(fā)布-訂閱(Publish-Subscribe Mode)的消息模式.在此模式下,發(fā)布者發(fā)送到Topic的消息,只有訂閱了相關(guān)主題的消費(fèi)者才能收到,且只能接收到自它訂閱之后發(fā)布的消息.
以用戶在手機(jī)端下發(fā)“實(shí)時(shí)喂食”指令為例,如圖3.用戶在設(shè)定好時(shí)間、投喂數(shù)量后,通過(guò)MqttClient.publish()方法將消息發(fā)送到相應(yīng)Topic上,服務(wù)器查詢是否存在相應(yīng)執(zhí)行設(shè)備.若設(shè)備存在,此時(shí)該條命令上傳至Broker,Broker將判斷該消息是否符合通訊協(xié)議,并找到對(duì)應(yīng)Topic的訂閱者,發(fā)送命令.在訂閱者接收到消息后,將返回狀態(tài)信息至Broker,經(jīng)判斷Topic類型后,返回設(shè)備的狀態(tài)至用戶,監(jiān)聽狀態(tài)將一直循環(huán)至任務(wù)結(jié)束.同時(shí),此次喂食記錄,包括時(shí)間、地點(diǎn)、投喂數(shù)量、用戶ID等信息都將上傳至數(shù)據(jù)庫(kù)進(jìn)行保存.
圖3 發(fā)布消息的過(guò)程
以感知層的光照傳感器上傳數(shù)據(jù)至用戶為例,由于用戶訂閱了每隔一段時(shí)間的光照數(shù)據(jù),故此時(shí)傳感器為發(fā)布者,用戶為訂閱者.
傳感器檢測(cè)到光照數(shù)據(jù)并打包后,主動(dòng)上傳至智能網(wǎng)關(guān),此時(shí)智能網(wǎng)關(guān)將查詢?cè)撔畔⑹欠穹贤ㄓ崊f(xié)議,若不符合將進(jìn)行解碼后將數(shù)據(jù)轉(zhuǎn)發(fā)至Broker,待存儲(chǔ)后,查詢訂閱了該消息的Topic后,將數(shù)據(jù)傳送給相應(yīng)的訂閱者,至此一次完整的訂閱工作完成.流程圖如圖4所示:
圖4 訂閱消息的過(guò)程
Apache JMeter是一款可支持各種測(cè)試模塊的性能測(cè)試工具,通過(guò)Apache JMeter模擬對(duì)網(wǎng)絡(luò)系統(tǒng)加以重負(fù)荷下的抵抗力,分析其在不同類型負(fù)荷下的運(yùn)行情況.
通過(guò)在jmeter.properties文件中修改cps值來(lái)限制網(wǎng)絡(luò)帶寬模擬不同的網(wǎng)絡(luò)速度.其中cps指characeters per second,即每秒可通過(guò)的字符數(shù),單位為B/s,計(jì)算公式為:
cps = (target bandwidth in kbps * 1024) / 8
(1)
根據(jù)表2建立不同的測(cè)試計(jì)劃,表3為指標(biāo)說(shuō)明,分別得到的測(cè)試結(jié)果如表4所示.
表2 測(cè)試計(jì)劃
表3 指標(biāo)說(shuō)明
表4 測(cè)試計(jì)劃①~④的結(jié)果
由表4可知,在不同的網(wǎng)絡(luò)環(huán)境下,消息成功率極高,且隨著網(wǎng)絡(luò)質(zhì)量的提高,服務(wù)器每單位時(shí)間處理的請(qǐng)求數(shù),即吞吐量也逐漸增加.因MQTT適合有限網(wǎng)絡(luò)環(huán)境下數(shù)據(jù)傳輸,消息推送的延遲時(shí)間主要取決于當(dāng)前所需傳遞的消息數(shù),并只會(huì)對(duì)其造成輕微影響.
文章主要研究了一種基于MQTT協(xié)議的智能喂食器系統(tǒng).該系統(tǒng)結(jié)構(gòu)簡(jiǎn)單、設(shè)計(jì)精妙,采用樹莓派作為智能網(wǎng)關(guān),能夠在接收并處理各傳感器采集數(shù)據(jù)方面有較好成效,同時(shí)通過(guò)MQTT協(xié)議,實(shí)現(xiàn)了跨網(wǎng)段數(shù)據(jù)上傳、命令下達(dá).
目前本系統(tǒng)已在安徽某稻鴨養(yǎng)殖場(chǎng)投入使用,獲得了養(yǎng)殖戶的良好反饋.該系統(tǒng)可較好解決在網(wǎng)絡(luò)受限情況下的對(duì)動(dòng)物的喂養(yǎng),可廣泛運(yùn)用于各大養(yǎng)殖場(chǎng),大大減輕勞動(dòng)力負(fù)擔(dān).
本系統(tǒng)不足之處在于因設(shè)備數(shù)量較少、產(chǎn)品落地范圍較窄,關(guān)于系統(tǒng)安全性以及多系統(tǒng)運(yùn)行時(shí)的并發(fā)性并不能很好測(cè)試,未來(lái)將在系統(tǒng)的高可用和高并發(fā)方面進(jìn)行改善和優(yōu)化.