七個簡單步驟構建起智能物聯網網關
譯文【51CTO.com快譯】今天,我們的目標是了解如何構建一套智能物聯網網關。我們將利用Ansible實現該網關的自動化配置,當然Ansible亦適用于配置管理及應用部署。如果大家面對大量網關配置與部署工作,那么Ansible絕對是值得強烈推薦的優秀工具。
下面來看此網關的幾大主要組件:
紅帽企業 Linux:提供企業級基礎。
紅帽 JBoss A-MQ: 對傳感器數據進行評判。
紅帽 JBoss Fuse:傳輸傳感器數據并將其路由至端點。
紅帽 JBoss BRMS:在邊緣位置實現實時決策制定。
在網關配置完成后,我們將啟動紅帽JBoss Fuse,而后構建并部署路由與業務規則服務,從而使其開始運作。我們隨后會啟動一款傳感器應用,其利用MQTT將溫度數據發送至紅帽JBoss A-MQ代理。這些消息會被轉發至我們此前啟動的服務處。最后,我們將創建業務規則,用于在傳感器值達到閾值時觸發對應操作。
注意:在開始之前,大家首先需要在網關內的Downloads文件夾內保存一份紅帽JBoss Fuse 6.2.1。大家可以從紅帽客戶門戶站點處下載,亦可通過紅帽開發者計劃免費獲取。
第一步:利用Ansible準備主機系統
在主機設備上克隆項目庫。
打開終端并輸入以下命令:
- [user@localhost ~]$ git clone -b Virtual-Lab-1-Host https://github.com/RedHat-IoT/Virtual_IoT_Gateway.git
利用網關IP地址更新主機文件[Virtual-IoT-Gateway/Ansible/host],并將該主機的公鑰存放于遠程網關上(Ansible會利用ssh與遠程系統進行通信)。
更新Ansible playbook BuildGW文件[Virtual-IoT-Gateway/Ansible/BuildGW],將其中的用戶名修改為您網關的實際值:user=’user name’
輸入以下命令以啟動該Ansible playbook:
- [user@localhost ~]$ cd Virtual_IoT_Gateway/Ansible
- [user@localhost ~]$ ansible-playbook BuildGW
讓Ansible運行此playbook中的各項任務。一旦Ansible完成執行,我們即可準備直接操作此網關。
第二步:登錄至該網關
注意:在此套網關中,我們使用了username = ‘demo-user’與password = ‘change12_me’。
第三步:啟動紅帽JBoss Fuse服務器
開啟新shell,輸入以下命令:
- [demo-user@localhost ~]$ cd
- [demo-user@localhost ~]$ cd IoT_Summit_Lab
- [demo-user@iotlab IoT_Summit_Lab]$ ./runJBossFuse.sh
等待紅帽JBoss Fuse服務器完成啟動流程。
紅帽 JBoss Fuse需要安裝‘camel-mqtt’ OSGi功能以處理MQTT消息。
在‘JBossFuse’命令提示符下輸入以下命令:
- JBossFuse:karaf@root> features:install camel-mqtt
最小化此shell,保持Fuse服務器在后臺運行。
第四步:構建并部署Camel Route
傳感器數據將由Camel Route負責傳輸及路由。現在我們需要構建紅帽JBoss Fuse項目并將其部署至正在運行的Fuse服務器當中。我們將利用其提供的腳本以構建并部署此項目。
在終端內執行以下命令:
- [demo-user@iotlab Software_Sensor]$ cd
- [demo-user@iotlab ~]$ cd IoT_Summit_Lab/
- [demo-user@iotlab IoT_Summit_Lab]$ ./runRoutingService.sh
我們可以登錄至JBoss Fuse管理員控制臺以驗證此Camel route是否部署完成。
第五步:創建業務規則
智能物聯網網關最為重要的功能之一,是在傳感器數據滿足業務規則中設定的特定條件時觸發對應操作。在本章節中,我們將了解如何創建一項業務規則服務。此服務將通過以下方式起效:
1. 從Message隊列中讀取傳感器數據。
2. 將傳感器數據傳遞至規則執行引擎,并由后者根據定義規則觸發操作。
3. 經過變更的數據被放置在另一已定義Message隊列中。
這里我們將使用微軟Excel決策表來定義業務規則。下圖所示為一套決策表實例,其中每一行表代表一條規則。藍色的列為“條件(conditions)”,而黃色的列則定義一項“操作(action)”。規則語法非常簡單:如果滿足某條件,則執行某操作。
這套規則系統會從電子表格中讀取規則,并將其按以上語法進行編譯。在本示例中,我們的業務規則電子表格可用于創建新規則。
下面來看表格中各列所代表的含義:
Alerting Rule(警告規則):規則名稱。此為可選字段,但在調試中非常有用。
Device Type(設備類型):傳感器所報告的設備類型。
Payload(有效載荷):此規則需要匹配的數字范圍。
Result(結果):由規則觸發的操作,即將值更改為0或1。
打開示例規則表格:‘DecisionTable.xls.’
填寫以下信息以創建兩項規則:
規則一:如果我們讀取到的溫度為0到60之間,則將結果字段變更為0。
規則一:如果我們讀取到的溫度為61到100之間,則將結果字段變更為1。
注意:在第二條規則Payload列中,在“61”與“100”之間添加一個空格。
注意:將表格保存為微軟Excel格式。
點擊此處查看此業務規則服務的具體細節。
第六步:構建并運行業務規則服務
現在我們已經完成了規則添加,接下來需要構建新的服務版本并加以啟動。
在終端內執行以下命令:
- [demo-user@localhost IoT_Summit_Lab]$ cd
- [demo-user@localhost ~]$ cd IoT_Summit_Lab/
- [demo-user@localhost IoT_Summit_Lab]$ ./runRulesService.sh
其應顯示以下輸出結果:
- < output truncated > AMQ-Broker tcp://localhost:61616 ready to work!
- Device-Type = temperature
- Device-ID = 4711
- Payload = 70
- Result = 1
- ----------------------
- Sending 18.05.2016 10:46:22 766temperature47117000.01
第七步:測試規則服務
我們通過軟件傳感器發送一條測試消息,從而進行服務測試。具體步驟如下:
軟件傳感器通過MQTT發送一條高值。
路由服務獲取該值后,將其轉換為消息并發送至AMQP消息隊列。
業務規則服務從隊列中獲取此消息,并在其滯業務規則條件時將其添加至另一AMQP消息隊列。
在新終端內輸入以下命令:
- [demo-user@localhost Desktop]$ cd
- [demo-user@localhost ~]$ cd IoT_Summit_Lab/
- [demo-user@localhost IoT_Summit_Lab]$ ./runHighSensor.sh
輸出結果如下:
- Starting the producer to send messages
- Sending '70,0'
- AMQ-Broker tcp://localhost:61616 ready to work!
- Device-Type = temperature
- Device-ID = 4711
- Payload = 70
- Result = 1
- ----------------------
- Sending 17.05.2016 15:08:59 265temperature47117000.01
- ----------------------
大家也可以利用另一種方法進行消息驗證,即通過‘http://localhost:8181’'查看紅帽JBoss Fuse控制臺。這里的入隊與出隊消息數量應該顯示,已經有一條消息由message.to.rules’處獲取并被放置在‘message.to.datacenter’當中。
注意:Fuse控制臺的登錄名/密碼為admin/change12_me。
總結
我們可以利用Ansible并配合紅帽自動化工具輕松完成智能物聯網網關的構建工作。這套企業級智能物聯網網關基于多項開源技術,包括紅帽企業Linux、紅帽JBoss Fuse、紅帽JBoss BRMS以及紅帽JBoss A-MQ。
這里我們已經提供了示例代碼,包括部署路由機制與業務規則服務以保證此智能物聯網網關開始正常運作。其中傳感器應用負責向A-MQ代理發送溫度數據。這些MQTT消息由我們此前啟動的服務進行處理。最后,我們創建了業務規則,用于在傳感器值達到閾值時觸發特定操作。
感興趣的朋友可以點擊此處查看GitHub上的物聯網網關源代碼及相關視頻。
原文標題:How to Build an Intelligent IoT Gateway in 7 Easy Steps,作者:Ishu Verma
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】