本發明涉及一種無線通訊裝置和方法以及該無線通訊裝置的應用,屬于無線通訊技術領域。
背景技術:
目前多數高校學生公寓飲用水、淋浴,單位后勤浴室、工廠淋浴室等的用水都通過控水器采用進行用水管控,不僅方便使用,還節約用水。當前控水器與系統軟件之間采用有線聯網模式工作,這種聯網方式需要大規模布線實現聯網,不僅增加布線成本,同時也增加了施工難度。另一方面,現有的應用于固定范圍(如學校、工廠等)的無線通訊裝置多采用自組網模式(如zigbee)和coap協議,自組網模式需要獨立建網,建設成本較高,而coap協議不方便與其他產品對接,其適應性受限。
技術實現要素:
本發明為了解決布線成本高、施工難度大的問題,本發明提出了一種基于mqtt協議的無線通訊裝置和方法,以及基于該無線通訊裝置的控水器。
一種基于mqtt協議的無線通訊裝置,所采取的技術方案如下:
所述無線通訊裝置包括:
用于建立mqtt數據收發線程的數據收發線程建立模塊;
用于所述mqtt數據收發線程與mqtt代理服務器之間建立連接的連接建立模塊;
用于所述mqtt數據收發線程進行消息訂閱的消息訂閱模塊;
用于所述mqtt數據收發線程注冊遺囑消息的信息注冊模塊;
用于建立mqtt發送消息隊列和mqtt接收消息隊列的消息隊列建立模塊;
用于建立串口數據接收線程的串口數據接收線程建立模塊;
用于所述串口數據接收線程初始化串口和串口接收完成信號量的串口初始化模塊;
用于所述串口數據接收線程建立接收數據緩存的數據緩存模塊;
用于所述串口數據接收線程建立接收數據緩存互斥量的緩存互斥量模塊;
用于建立數據處理線程的數據處理線程建立模塊。
進一步地,所述無線通訊裝置還包括:
用于所述mqtt數據收發線程接收mqtt代理服務器發布的外部設備控制命令的外部設備控制命令接收模塊;
用于將所述外部設備控制命令接收模塊接收到的外部設備控制命令推入所述mqtt接收消息隊列的命令推入模塊;
用于數據處理線程從所述mqtt接收消息隊列中提取外部設備控制命令的外部設備控制命令提取模塊;
用于數據處理線程解析所述外部設備控制命令的外部設備控制命令解析模塊;
用于數據處理線程判斷所述外部設備控制命令是發給對應外部設備的命令判斷模塊;
用于數據處理線程向所述外部設備發送外部設備控制命令的命令發送模塊;
用于串口數據接收線程接收所述外部設備的命令執行結果的執行結果接收模塊;
用于串口數據接收線程將所述命令執行結果保存到所述接收數據緩存的數據保存模塊;
用于串口數據接收線程向mqtt數據收發線程發送所述串口接收完成信號量的信號發送模塊;
用于所述mqtt數據收發線程接收所述串口接收完成信號量的信號接收模塊;
用于所述mqtt數據收發線程接收所述串口接收完成信號量后,讀取所述接收數據緩存中緩存數據的數據讀取模塊;
用于所述mqtt數據收發線程向mqtt代理服務器發布消息的消息發布模塊。
進一步地,所述無線通訊裝置還包括:
用于所述mqtt數據收發線程接收mqtt代理服務器發布的控制命令的命令接收模塊;
用于將所述命令接收模塊接收到的控制命令推入所述mqtt接收消息隊列的控制命令推入模塊;
用于數據處理線程從所述mqtt接收消息隊列中提取控制命令的控制命令提取模塊;
用于數據處理線程解析所述控制命令的控制命令解析模塊;
用于數據處理線程執行其從所述mqtt接收消息隊列中提取的控制命令的命令執行模塊;
用于數據處理線程向mqtt代理服務器發布其執行所述控制命令的執行結果的結果發布模塊。
進一步地,所述無線通訊裝置還包括:
用于所述mqtt數據收發線程接收mqtt代理服務器發布的固件升級命令的升級命令接收模塊;
用于將所述升級命令接收模塊接收到的固件升級命令推入所述mqtt接收消息隊列的升級命令推入模塊;
用于數據處理線程從所述mqtt接收消息隊列中提取固件升級命令的升級命令提取模塊;
用于建立固件升級線程的固件升級線程建立模塊;
用于所述固件升級線程連接http文件服務器的連接模塊;
用于固件升級線程下載固件文件的文件下載模塊;
用于固件升級線程校驗文件完整性的文件校驗模塊;
用于固件升級線程寫入升級標志的標志寫入模塊。
所述無線通訊裝置還包括:
用于網絡層加密的網絡層加密模塊;
用于傳輸層加密的傳輸層加密模塊;
用于應用層加密的應用層加密模塊。
一種基于mqtt協議的無線通訊方法,所采取的技術方案如下,
所述無線通訊方法包括:
用于建立mqtt數據收發線程的數據收發線程建立步驟;
用于所述mqtt數據收發線程與mqtt代理服務器之間建立連接的連接建立步驟;
用于所述mqtt數據收發線程進行消息訂閱的消息訂閱步驟;
用于所述mqtt數據收發線程注冊遺囑消息的信息注冊步驟;
用于建立mqtt發送消息隊列和mqtt接收消息隊列的消息隊列建立步驟;
用于建立串口數據接收線程的串口數據接收線程建立步驟;
用于所述串口數據接收線程初始化串口和串口接收完成信號量的串口初始化步驟;
用于所述串口數據接收線程建立接收數據緩存的數據緩存步驟;
用于所述串口數據接收線程建立接收數據緩存互斥量的緩存互斥量步驟;
用于建立數據處理線程的數據處理線程建立步驟。
進一步地,所述無線通訊方法還包括:
用于所述mqtt數據收發線程接收mqtt代理服務器發布的外部設備控制命令的外部設備控制命令接收步驟;
用于將所述外部設備控制命令接收步驟接收到的外部設備控制命令推入所述mqtt接收消息隊列的命令推入步驟;
用于數據處理線程從所述mqtt接收消息隊列中提取外部設備控制命令的外部設備控制命令提取步驟;
用于數據處理線程解析所述外部設備控制命令的外部設備控制命令解析步驟;
用于數據處理線程判斷所述外部設備控制命令是發給對應外部設備的命令判斷步驟;
用于數據處理線程向所述外部設備發送外部設備控制命令的命令發送步驟;
用于串口數據接收線程接收所述外部設備的命令執行結果的執行結果接收步驟;
用于串口數據接收線程將所述命令執行結果保存到所述接收數據緩存的數據保存步驟;
用于串口數據接收線程向mqtt數據收發線程發送所述串口接收完成信號量的信號發步驟;
用于所述mqtt數據收發線程接收所述串口接收完成信號量的信號接收步驟;
用于所述mqtt數據收發線程接收所述串口接收完成信號量后,讀取所述接收數據緩存中緩存數據的數據讀取步驟;
用于所述mqtt數據收發線程向mqtt代理服務器發布消息的消息發布步驟。
進一步地,所述無線通訊方法還包括:
用于所述mqtt數據收發線程接收mqtt代理服務器發布的控制命令的命令接收步驟;
用于將所述命令接收步驟接收到的控制命令推入所述mqtt接收消息隊列的控制命令推入步驟;
用于數據處理線程從所述mqtt接收消息隊列中提取控制命令的控制命令提取步驟;
用于數據處理線程解析所述控制命令的控制命令解析步驟;
用于數據處理線程執行其從所述mqtt接收消息隊列中提取的控制命令的命令執行步驟;
用于數據處理線程向mqtt代理服務器發布其執行所述控制命令的執行結果的結果發布步驟。
進一步地,所述無線通訊方法還包括:
用于所述mqtt數據收發線程接收mqtt代理服務器發布的固件升級命令的升級命令接收步驟;
用于將所述升級命令接收步驟接收到的固件升級命令推入所述mqtt接收消息隊列的升級命令推入步驟;
用于數據處理線程從所述mqtt接收消息隊列中提取固件升級命令的升級命令提取步驟;
用于建立固件升級線程的固件升級線程建立步驟;
用于所述固件升級線程連接http文件服務器的連接步驟;
用于固件升級線程下載固件文件的文件下載步驟;
用于固件升級線程校驗文件完整性的文件校驗步驟;
用于固件升級線程寫入升級標志的標志寫入步驟。
所述無線通訊方法還包括:
用于網絡層加密的網絡層加密步驟;
用于傳輸層加密的傳輸層加密步驟;
用于應用層加密的應用層加密步驟。
一種基于本發明所述無線通訊裝置的控水器,所采取的技術方案如下,
所述控水器包括核心處理器、顯示模塊、讀寫卡模塊、時鐘模塊、無線通訊裝置、后備電源、電源、水表檢測模塊和門閥控制模塊;所述核心處理器的顯示控制信號輸出端與顯示模塊的控制信號輸入端相連;所述核心處理器的讀寫控制信號輸出端與讀寫卡模塊的控制信號輸入端相連;所述核心處理器的時鐘信號輸入端與時鐘模塊的時鐘信號輸出端相連;所述核心處理器的無線控制信號輸出端與無線通訊裝置的控制信號輸入端相連;所述核心處理器的電源信號輸入端和備用電源信號輸入端分別于電源的電信號輸出端和后背電源的電信號輸出端相連;所述核心處理器的水表檢測信號輸入端與水表檢測模塊的信號輸出端相連;所述核心處理器的閥門驅動控制信號輸出端與閥門驅動模塊的控制信號輸入端相連。
進一步地,所述控水器利用無線通訊裝置的消息發布模式發送報警提示信息;
所述控水器通過所述無線通訊裝置的消息發布模式發送控水器工作狀態信息;所述消息發布模式采用至多一次的發送形式進行控水器工作狀態信息的發送;
所述控水器通過所述無線通訊裝置的消息發布模式發送消費流水信息;所述消息發布模式采用只有一次的發送形式進行消費流水信息的發送;
所述控水器通過無線通訊裝置的訂閱消息模式獲取工作模式設定或更改信息;所述訂閱消息模式采用至少一次的獲取形式進行工作模式設定或更改信息的獲取;
所述控水器通過無線通訊裝置的訂閱消息模式獲取用戶賬戶信息;所述訂閱消息模式采用至少一次的獲取形式進行用戶賬戶信息的獲取。
本發明有益效果:
本發明提出的基于mqtt協議的無線通訊裝置和方法采用wifi模式通過tcp/ip網絡連接以及mqtt協議實現設備與控制軟件之間的數據連接,其有益效果有:
(1)本發明提出的無線通訊裝置與傳統透傳方式的無線通訊相比,不存在固定延時,有效提高無線通訊的響應速度;同時,當應用數據包超過數據緩沖時,本發明提出無線通訊裝置的數據緩沖大小不受限制,可根據mqtt協議設置進行靈活處理。
(2)本發明提出的無線通訊裝置采用http協議下載固件文件實現固件升級,有效降低了系統升級的復雜度。
(3)本發明提出的無線通訊裝置由mqtt數據收發線程,串口數據接收線程,數據處理線程和固件升級線程四個線程組成,在裝置運行過程中,通過不同的線程處理耗費時間的操作,有效節省操作時間,極大程度上提高了無線通訊裝置的實時性。同時,多線程操作將通信處理和數據處理分離開,減少了通信處理和數據處理之間的耦合,提高了通信處理和數據處理的穩定性,另一方面,所述無線通訊裝置的通信處理部分為通用程序實現,不用關心具體數據,便于程序移植到其他類似應用中,增加了本發明所述無線通訊裝置實際應用的廣泛性。
(4)本發明提出的無線通訊裝置通過網絡層加密模塊,傳輸層加密模塊和應用層加密模塊的分層加密方式,提高通信安全,解決了現有透傳方式無線通訊裝置通信安全性差的問題。其中,加密形式包括網絡層加密、傳輸層加密和應用層加密,其中,網絡層加密,支持wep,wpa/wpa2,psk/enterprise多種加密方式,加密了除ip之外的所有層,提高網絡安全性。傳輸層加密,采用tls加密,加密mqtt數據包,無線模塊內置mqtt代理服務器證書,建立連接時與mqtt代理服務器協商通信密鑰,防止中間人攻擊。應用層加密,支持用戶名密碼方式的認證,挺高了用戶應用安全。
(5)本發明提出的無線通訊裝置與zigbee無線通訊裝置相比,其使用wi-fi模式通過tcp/ip網絡組網具有通用性,可以直接使用現有的無線網絡資源,降低組網的投資成本;與coap無線通訊裝置相比,使用mqtt協議的產品非常豐富,可以方便其他產品接入本產品和本產品接入其他用戶系統,而不需要再做更多的二次開發,提高了產品的適應性、擴展性和可靠性,確保通訊質量。
(6)在應用本發明無線通訊裝置的設備數量較多的時候,能夠極大的降低系統工作壓力,降低對網絡及計算機等設備的配置要求,減少項目建設成本。
本發明提出一種基于無線通訊裝置的控水器,通過無線通訊裝置實現控水器與控制軟件之間的數據連接,其有益效果有:
(1)通過無線通訊裝置實現控水器和控制軟件之間的聯系,在控水器使用量大的情況下,有效降低了布線成本和施工難度。
(2)本發明提出的控水器在刷卡消費時才產生通信數據,通信相應延時不受控水系統中控水器數量的影響,因此,本發明提出的控水器具有較高的通信質量,同時能夠實現多數量、大規模的安裝使用,具有廣泛的實用性。
(3)本發明提出的控水器采用的發布消息模式和訂閱消息模式,為實現設備與控制軟件之間提供了一對多的消息發布,有效解除了通信和數據之間的耦合;控水器的通信數據由同一主題轉發,網絡控制和應用控制分離,方便控制軟件進行測試和排錯,有效提高了控水器運行的穩定性。
(4)本發明提出的控水器能夠及時向控制系統自動通知控水器運行狀態,包括上線和掉線狀況,同時可自動添加新入網的控水器及其信息;同時,本發明控水器采用多種加密方式在網絡層、傳輸層和應用層分別采用加密處理,提高網絡數據安全性;并且,可進行在線升級,支持自更新和升級控水器的應用程序。
附圖說明
圖1為本發明所述無線通訊裝置的功能框圖。
圖2為本發明所述控水器的系統結構示意圖。
具體實施方式
下面結合具體實施例對本發明做進一步說明,但本發明不受實施例的限制。
一種基于mqtt協議的無線通訊裝置,用于實現外部設備與控制軟件間的通信,所采取的技術方案如下:
所述無線通訊裝置包括:
用于建立mqtt數據收發線程的數據收發線程建立模塊;
用于所述mqtt數據收發線程與mqtt代理服務器之間建立連接的連接建立模塊;
用于所述mqtt數據收發線程進行消息訂閱的消息訂閱模塊;
用于所述mqtt數據收發線程注冊遺囑消息的信息注冊模塊;
用于建立mqtt發送消息隊列和mqtt接收消息隊列的消息隊列建立模塊;
用于建立串口數據接收線程的串口數據接收線程建立模塊;
用于所述串口數據接收線程初始化串口和串口接收完成信號量的串口初始化模塊;
用于所述串口數據接收線程建立接收數據緩存的數據緩存模塊;
用于所述串口數據接收線程建立接收數據緩存互斥量的緩存互斥量模塊;
用于建立數據處理線程的數據處理線程建立模塊。
所述無線通訊裝置還包括:
用于所述mqtt數據收發線程接收mqtt代理服務器發布的外部設備控制命令的外部設備控制命令接收模塊;
用于將所述外部設備控制命令接收模塊接收到的外部設備控制命令推入所述mqtt接收消息隊列的命令推入模塊;
用于數據處理線程從所述mqtt接收消息隊列中提取外部設備控制命令的外部設備控制命令提取模塊;
用于數據處理線程解析所述外部設備控制命令的外部設備控制命令解析模塊;
用于數據處理線程判斷所述外部設備控制命令是發給對應外部設備的命令判斷模塊;
用于數據處理線程向所述外部設備發送外部設備控制命令的命令發送模塊;
用于串口數據接收線程接收所述外部設備的命令執行結果的執行結果接收模塊;
用于串口數據接收線程將所述命令執行結果保存到所述接收數據緩存的數據保存模塊;
用于串口數據接收線程向mqtt數據收發線程發送所述串口接收完成信號量的信號發送模塊;
用于所述mqtt數據收發線程接收所述串口接收完成信號量的信號接收模塊;
用于所述mqtt數據收發線程接收所述串口接收完成信號量后,讀取所述接收數據緩存中緩存數據的數據讀取模塊;
用于所述mqtt數據收發線程向mqtt代理服務器發布消息的消息發布模塊。
所述無線通訊裝置還包括:
用于所述mqtt數據收發線程接收mqtt代理服務器發布的控制命令的命令接收模塊;
用于將所述命令接收模塊接收到的控制命令推入所述mqtt接收消息隊列的控制命令推入模塊;
用于數據處理線程從所述mqtt接收消息隊列中提取控制命令的控制命令提取模塊;
用于數據處理線程解析所述控制命令的控制命令解析模塊;
用于數據處理線程執行其從所述mqtt接收消息隊列中提取的控制命令的命令執行模塊;
用于數據處理線程向mqtt代理服務器發布其執行所述控制命令的執行結果的結果發布模塊。
所述無線通訊裝置還包括:
用于所述mqtt數據收發線程接收mqtt代理服務器發布的固件升級命令的升級命令接收模塊;
用于將所述升級命令接收模塊接收到的固件升級命令推入所述mqtt接收消息隊列的升級命令推入模塊;
用于數據處理線程從所述mqtt接收消息隊列中提取固件升級命令的升級命令提取模塊;
用于建立固件升級線程的固件升級線程建立模塊;
用于所述固件升級線程連接http文件服務器的連接模塊;
用于固件升級線程下載固件文件的文件下載模塊;
用于固件升級線程校驗文件完整性的文件校驗模塊;
用于固件升級線程寫入升級標志的標志寫入模塊。
所述無線通訊裝置還包括:
用于網絡層加密的網絡層加密模塊;
用于傳輸層加密的傳輸層加密模塊;
用于應用層加密的應用層加密模塊。
所述無線通訊裝置運行后進入初始化階段:
在初始化階段中,首先通過數據收發線程建立模塊、串口數據接收線程建立模塊和數據處理線程建立模塊分別建立mqtt數據收發線程,串口數據接收線程和數據處理線程。所述mqtt數據收發線程建立后,首先通過連接建立模塊建立mqtt數據收發線程與mqtt代理服務器之間的連接。連接完成后,所述mqtt數據收發線程利用消息訂閱模塊和信息注冊模塊進行消息訂閱和注冊自己的遺囑消息。同時,利用消息隊列建立模塊建立mqtt發送消息隊列和mqtt接收消息隊列。所述串口數據接收線程建立后,首先串口數據接收線程通過初始化模塊對串口和串口接收完成信號量進行初始化,然后利用數據緩存模塊和緩存互斥量模塊分別建立接收數據緩存和接收數據緩存互斥量。此外,在初始化階段中,所述數據處理線程建立后,數據處理線程等待mqtt接收消息隊列和串口接收完成信號量。此時,初始化階段結束。
所述無線通訊裝置進入處理外部設備控制命令階段時:
所述mqtt數據收發線程通過外部設備控制命令接收模塊接收mqtt代理服務器發布的外部設備控制命令,其中,外部設備可以是下文提出的控水器。
然后,mqtt數據收發線程通過命令推入模塊將外部設備控制命令推入mqtt接收消息隊列中。隨后,數據處理線程通過外部設備控制命令提取模塊從所述mqtt接收消息隊列中提取外部設備控制命令,并利用外部設備控制命令解析模塊解析當前提取的外部設備控制命令,同時利用命令判斷模塊判斷確定所述外部設備控制命令需要發給的對應外部設備對象(例如、判斷該命令是發給控水器的)。在判斷確定該外部設備之后,所述數據處理線程直接通過串口阻塞式向外部設備發送數據。外部設備接收到命令數據后執行命令,并通過串口返回執行結果。所述串口數據接收線程通過執行結果接收模塊接收該命令執行結果,該執行結果為一個完整的串口數據。隨后,所述串口數據接收線程利用數據保存模塊將命令執行結果保存到所述接收數據緩存,并通過信號發送模塊向mqtt數據收發線程發送串口接收完成信號量。所述mqtt數據收發線程通過信號接收模塊接收串口接收完成信號量,并利用數據讀取模塊讀取所述接收數據緩存中緩存數據,然后通過消息發布模塊向mqtt代理服務器發布消息。此時,外部設備控制的通信完成。
所述無線通訊裝置進入處理控制軟件對無線通訊裝置發送的無線通訊控制命令階段時:
首先,所述mqtt數據收發線程通過命令接收模塊接收mqtt代理服務器發布的無線通訊控制命令;然后,所述mqtt數據收發線程通過控制命令推入模塊將控制命令推入所述mqtt接收消息隊列中。隨后,數據處理線程通過控制命令提取模塊從所述mqtt接收消息隊列中提取控制命令;然后,數據處理線程依次利用控制命令解析模塊和命令執行模塊進行控制命令的解析和控制命令的執行。最后,數據處理線程通過結果發布模塊向mqtt代理服務器發布其執行所述控制命令的執行結果。此時,此階段的通信完成。
所述無線通訊裝置進入固件升級階段時:
首先,所述mqtt數據收發線程通過升級命令接收模塊接收mqtt代理服務器發布的固件升級命令;然后,所述mqtt數據收發線程通過升級命令推入模塊將固件升級命令推入所述mqtt接收消息隊列中;隨后,數據處理線程通過升級命令提取模塊從所述mqtt接收消息隊列中提取固件升級命令;并通過固件升級線程建立模塊建立固件升級線程。完成固件升級線程建立后,所述固件升級線程通過連接模塊建立固件升級線程與http文件服務器之間的連接;并通過文件下載模塊和文件校驗模塊依次進行升級固件文件的下載以及對該固件文件完成性進行校驗;最后,所述固件升級線程通過標志寫入模塊將本次升級寫入升級標志。并重啟系統完成升級。
一種基于mqtt協議的無線通訊方法,所采取的技術方案如下,
所述無線通訊方法包括:
用于建立mqtt數據收發線程的數據收發線程建立步驟;
用于所述mqtt數據收發線程與mqtt代理服務器之間建立連接的連接建立步驟;
用于所述mqtt數據收發線程進行消息訂閱的消息訂閱步驟;
用于所述mqtt數據收發線程注冊遺囑消息的信息注冊步驟;
用于建立mqtt發送消息隊列和mqtt接收消息隊列的消息隊列建立步驟;
用于建立串口數據接收線程的串口數據接收線程建立步驟;
用于所述串口數據接收線程初始化串口和串口接收完成信號量的串口初始化步驟;
用于所述串口數據接收線程建立接收數據緩存的數據緩存步驟;
用于所述串口數據接收線程建立接收數據緩存互斥量的緩存互斥量步驟;
用于建立數據處理線程的數據處理線程建立步驟。
所述無線通訊方法還包括:
用于所述mqtt數據收發線程接收mqtt代理服務器發布的外部設備控制命令的外部設備控制命令接收步驟;
用于將所述外部設備控制命令接收步驟接收到的外部設備控制命令推入所述mqtt接收消息隊列的命令推入步驟;
用于數據處理線程從所述mqtt接收消息隊列中提取外部設備控制命令的外部設備控制命令提取步驟;
用于數據處理線程解析所述外部設備控制命令的外部設備控制命令解析步驟;
用于數據處理線程判斷所述外部設備控制命令是發給對應外部設備的命令判斷步驟;
用于數據處理線程向所述外部設備發送外部設備控制命令的命令發送步驟;
用于串口數據接收線程接收所述外部設備的命令執行結果的執行結果接收步驟;
用于串口數據接收線程將所述命令執行結果保存到所述接收數據緩存的數據保存步驟;
用于串口數據接收線程向mqtt數據收發線程發送所述串口接收完成信號量的信號發步驟;
用于所述mqtt數據收發線程接收所述串口接收完成信號量的信號接收步驟;
用于所述mqtt數據收發線程接收所述串口接收完成信號量后,讀取所述接收數據緩存中緩存數據的數據讀取步驟;
用于所述mqtt數據收發線程向mqtt代理服務器發布消息的消息發布步驟。
所述無線通訊方法還包括:
用于所述mqtt數據收發線程接收mqtt代理服務器發布的控制命令的命令接收步驟;
用于將所述命令接收步驟接收到的控制命令推入所述mqtt接收消息隊列的控制命令推入步驟;
用于數據處理線程從所述mqtt接收消息隊列中提取控制命令的控制命令提取步驟;
用于數據處理線程解析所述控制命令的控制命令解析步驟;
用于數據處理線程執行其從所述mqtt接收消息隊列中提取的控制命令的命令執行步驟;
用于數據處理線程向mqtt代理服務器發布其執行所述控制命令的執行結果的結果發布步驟。
所述無線通訊方法還包括:
用于所述mqtt數據收發線程接收mqtt代理服務器發布的固件升級命令的升級命令接收步驟;
用于將所述升級命令接收步驟接收到的固件升級命令推入所述mqtt接收消息隊列的升級命令推入步驟;
用于數據處理線程從所述mqtt接收消息隊列中提取固件升級命令的升級命令提取步驟;
用于建立固件升級線程的固件升級線程建立步驟;
用于所述固件升級線程連接http文件服務器的連接步驟;
用于固件升級線程下載固件文件的文件下載步驟;
用于固件升級線程校驗文件完整性的文件校驗步驟;
用于固件升級線程寫入升級標志的標志寫入步驟。
所述無線通訊方法還包括:
用于網絡層加密的網絡層加密步驟;
用于傳輸層加密的傳輸層加密步驟;
用于應用層加密的應用層加密步驟。
網絡層加密,支持wep,wpa/wpa2,psk/enterprise多種加密方式,加密了除ip之外的所有層,提高網絡安全性。傳輸層加密,采用tls加密,加密mqtt數據包,無線模塊內置mqtt代理服務器證書,建立連接時與mqtt代理服務器協商通信密鑰,防止中間人攻擊。應用層加密,支持用戶名密碼方式的認證,挺高了用戶應用安全。
所述無線通訊方法在初始化階段中,建立mqtt數據收發線程,串口數據接收線程和數據處理線程。所述mqtt數據收發線程建立后,首先建立mqtt數據收發線程與mqtt代理服務器之間的連接,連接完成后,所述mqtt數據收發線程進行消息訂閱,并注冊自己的遺囑消息。在mqtt數據收發線程完成消息訂閱和注冊遺囑消息之后,所述mqtt數據收發線程建立mqtt發送消息隊列和mqtt接收消息隊列。所述串口數據接收線程建立后,首先串口數據接收線程對串口和串口接收完成信號量進行初始化,然后建立接收數據緩存和接收數據緩存互斥量。在初始化階段中,所述數據處理線程建立后,數據處理線程等待mqtt接收消息隊列和串口接收完成信號量。此時,初始化階段結束。
在處理外部設備控制命令階段中,首先,所述mqtt數據收發線程接收mqtt代理服務器發布的外部設備控制命令,其中,外部設備可以是下文提出的控水器。
然后,mqtt數據收發線程將外部設備控制命令推入mqtt接收消息隊列中。隨后,數據處理線程從所述mqtt接收消息隊列中提取外部設備控制命令,并解析當前提取的外部設備控制命令,同時判斷確定所述外部設備控制命令需要發給的對應外部設備對象(例如、判斷該命令是發給控水器的)。在判斷確定該外部設備之后,所述數據處理線程直接通過串口阻塞式向外部設備發送數據。外部設備接收到命令數據后執行命令,并通過串口返回執行結果。此時,所述串口數據接收線程接收該命令執行結果,該執行結果為一個完整的串口數據。隨后,所述串口數據接收線程將命令執行結果保存到所述接收數據緩存,并向mqtt數據收發線程發送串口接收完成信號量。所述mqtt數據收發線程接收串口接收完成信號量,并讀取所述接收數據緩存中緩存數據,然后向mqtt代理服務器發布消息。此時,外部設備控制的通信完成。
在處理無線通訊控制命令階段時,首先,所述mqtt數據收發線程接收mqtt代理服務器發布的無線通訊控制命令;然后,所述mqtt數據收發線程將控制命令推入所述mqtt接收消息隊列中。隨后,數據處理線程從所述mqtt接收消息隊列中提取控制命令;然后,數據處理線程解析控制命令并執行該控制命令。最后,數據處理線程向mqtt代理服務器發布其執行所述控制命令的執行結果。此時,此階段的通信完成。
在固件升級階段時,首先,所述mqtt數據收發線程接收mqtt代理服務器發布的固件升級命令;然后,所述mqtt數據收發線程將固件升級命令推入所述mqtt接收消息隊列中;隨后,數據處理線程通從所述mqtt接收消息隊列中提取固件升級命令;并建立固件升級線程。完成固件升級線程建立后,所述固件升級線程建立固件升級線程與http文件服務器之間的連接;并進行升級固件文件的下載以及對該固件文件完成性進行校驗;最后,所述固件升級線程將本次升級寫入升級標志。并重啟系統完成升級。
一種基于本發明所述無線通訊裝置的控水器,該控水器通過基于mqtt協議的無線通訊裝置實現控水器與控制軟件間的通信,通過該無線通訊裝置實現控水器上線通知、通過mqtt遺言機制實現控水器的下線通知,并通過http實現固件升級。具體的,所述控水器包括核心處理器、顯示模塊、讀寫卡模塊、時鐘模塊、無線通訊裝置、后備電源、電源、水表檢測模塊和門閥控制模塊;所述核心處理器的顯示控制信號輸出端與顯示模塊的控制信號輸入端相連;所述核心處理器的讀寫控制信號輸出端與讀寫卡模塊的控制信號輸入端相連;所述核心處理器的時鐘信號輸入端與時鐘模塊的時鐘信號輸出端相連;所述核心處理器的無線控制信號輸出端與無線通訊裝置的控制信號輸入端相連;所述核心處理器的電源信號輸入端和備用電源信號輸入端分別于電源的電信號輸出端和后背電源的電信號輸出端相連;所述核心處理器的水表檢測信號輸入端與水表檢測模塊的信號輸出端相連;所述核心處理器的閥門驅動控制信號輸出端與閥門驅動模塊的控制信號輸入端相連。
其中,所述核心處理器是整個控水器最核心部件,通過核心處理器協調控制控水器各部分的工作。
所述電源電路通過直流穩壓轉換,為控水器提供+5v和+3.3v工作電壓,同時,核心處理器能夠監測電源電路是否正常運行,當電源電路出現異常時,核心處理器會及時保存現場數據,并關閉閥門。
所述后備電源用于在電源異常時,為控水器提供掉電處理工作電源和時鐘電源。
在控水器消費的過程中,通過所述水表檢測模塊檢測使用者消費的水量;在閥門關閉的狀態下,通過所述水表檢測模塊檢測用水管路上是否漏水。
所述閥門驅動電路用于控制用水管路上的電動閥或電磁閥的啟動和關閉。
所述時鐘模塊用于在斷網情況下,為控水器工作提供時間。
所述顯示模塊用于顯示控水器的工作狀態、報警信息等信息。
所述讀寫卡模塊,用于對控水器所支持的卡片進行讀寫操作。
另一方面,控水器和控制軟件之間通過無線網絡進行數據交互,使控水器可以將各種數據通過基于mqtt協議的無線通訊裝置上傳到控制軟件上,控制軟件也可以通過基于mqtt協議的無線通訊裝置直接控制控水器完成各種操作,并可以將各種數據下載到控水器中。具體的:
所述控水器上電后,核心處理器開始運行,首先,核心處理器檢測各部分硬件模塊的工作情況,如果存在硬件異常,核心處理器給出相應的報警提示,并通過無線通訊裝置利用mqtt協議的發布信息模式將報警提示信息發送給控制軟件。
如果不存在異常,控水器進入正常工作狀態,并定期將控水器的工作狀態通過無線通訊裝置利用mqtt協議的發布信息模式將所述控水器工作狀態信息發送給控制軟件。其中,所述消息發布模式采用“至多一次”的發送形式進行控水器工作狀態信息的發送,這種發送形式有利于減少網絡流量,減少網絡占用空間。
所述控水器的工作模式主要包括計費類型如計時型、計量型、計次型等;閥門控制類型如電動閥、電磁閥、防剪斷閥等;消費單價、身份信息、計費單位等。所述控水器的工作模式可以通過控制軟件設定或更改,當控制軟件需要對控水器的工作模式進行設定或更改時,控制軟件通過無線通訊裝置利用mqtt協議的發布消息模式向控水器下發工作模式設定或更改信息,其中,此時所述mqtt協議的發布消息模式采用至少一次”的發送形式向控水器發送工作模式設定或更改信息。另一方面,控制器需要設定或更改工作模式時,所述控水器通過無線通訊裝置利用mqtt協議的訂閱消息模式獲取工作模式設定或更改信息;所述訂閱消息模式采用“至少一次”的獲取形式進行工作模式設定或更改信息的獲取,確保信息的到達。
控水器正常工作的情況下,控水器檢測到有卡片刷卡時,控水器的讀寫卡模塊讀取卡片上的用戶信息,判斷是否本控水器的用戶卡,如果是本控水器的用戶卡,所述控水器通過無線通訊裝置利用mqtt協議的訂閱消息模式向控制軟件獲取用戶賬戶信息;所述訂閱消息模式采用“至少一次”的獲取形式進行用戶賬戶信息的獲取。控制軟件判斷用戶信息有效后,通過無線通訊裝置給控水器下傳賬戶相關信息及預扣金額。隨后,控水器打開閥門,開始計費,并在計費過程中,通過顯示模塊顯示計費的金額或對應消費量。
在結束消費時,控水器有兩種模式結束消費:第一種模式,檢測到用戶卡二次刷卡,找錢后結束消費;第二種模式,預扣金額消費完。結束消費后,控水器控制閥門關閉,同時生成消費流水信息,隨后控水器將消費流水信息利用無線通訊裝置通過mqtt協議的發布消息模式上傳給系統軟件,所述消息發布模式采用“只有一次”的發送形式進行消費流水信息的發送。
在控水器正常工作并聯網的狀態下,系統控制軟件可以對控水器進行開發、關閥操作;進行加鎖、解鎖操作,在加鎖狀態下,控水器停止接受刷卡消費。這些操作通過mqtt協議的發布消息模式下發給控水器。系統軟件可以主動采集控水器的狀態,通過mqtt協議的訂閱消息模式向控水器獲取。
雖然本發明已以較佳的實施例公開如上,但其并非用以限定本發明,任何熟悉此技術的人,在不脫離本發明的精神和范圍內,都可以做各種改動和修飾,因此本發明的保護范圍應該以權利要求書所界定的為準。