IBM Bluemix:連接多組感測器和終端設備

學習設計 MQTT Broker 的訊息過濾器規則

在前一篇文章「IBM Bluemix:打造自己的 MQTT Broker」中,已經介紹了怎麼從 7688 duo 開發版傳送資料到 MQTT Broker,在接下來的文章中將介紹怎麼使用 IBM IoT 的過濾器。

在實際的生活中,7688 Duo 開發版可能會接許多不同的感測器或模組,然後再將資訊送到 IBM Bluemix 上的 MQTT Broker:

比較誇張點的情況,也有可能是多個 7688 duo 開發版接著各種不同的感測器或是模組:

在這種情況下,我們將會需要在 IBM Bluemix 的 Node-RED 中設定過濾器,用來接收並處理終端裝置(Endpoint Deivce)所傳來的許多資料。在開始本文之前,請各位先回顧第一篇文章「IBM Bluemix : IoT Platform Starter 初探!」怎麼建立 Device ID,因為接下來的範例中將會需要建立多個 Device ID,每一個終端裝置都會有一個自己的 Device ID。以下是這次範例中將會用到的 Device ID:

其中「Sensor-1」將會上傳溫度的資料到 MQTT Broker;Sensor-2 是會上傳濕度的資料到 MQTT Broker:

首先,將基於之前的範例進行修改,就讓我們打開 Node-RED 編輯器吧:

接下來先打開藍色的 7688 broker 的節點,指定 Device ID 為 7688-sensor-1;指定 Event 為 Temperature,讓 7688 broker 只接收 7688-sensor-1 傳來的資料,而且只接受 Topic 為 Temperature(溫度)的事件訊息,編輯畫面如下:

接下來換成編輯「橘色的 demo 函數節點(Node)」,把名稱改成 Temperature,然後把 msg.deviceId 改成 「7688-subscriber-1」,使 msg 物件資料被發送出去給 7688-subscriber-1,編輯如下:

最後換編輯「藍色的 IBM IoT out 節點」,在 Data 的欄位中設定去接收前一個 Temperature 函數回傳的 msg 物件中的 payload(payload 指的是物件中存放的資料訊息),編輯如下:

編輯完就可以按下 Deploy 按鍵,將程式邏輯佈建在 IBM Bluemix:

接下來準備兩片 7688 duo 開發版,一片當作感測器(Sensor)傳送溫度資料到 MQTT Broker,所以執行 mqtt-sensor-1.js;另一片當作訊息訂閱者(Subscriber),從 MQTT Broker 接收溫度資料,所以執行mqtt-subscriber-1.js。程式範例可從以下連結中下載:

下載 mqtt-sensor-1.js 並上傳到第一片 7688 duo 開發版中,程式碼如下:

在第 15 行中,多加了一行程式,用來傳送溫度資料給 MQTT Broker。

根據我們之前 Node-RED 上的設定,當 MQTT Broker 接收到 7688-sensor-1 的兩行資料後,只接收 Temperature 的事件資料,會過濾、忽略第 14 行所傳來的資料。

再來下載 mqtt-subscriber-1.js 並上傳到第二片 7688 duo 開發版中,然後修改如下:

修改好後先執行第二片 7688 duo 開發版的 mqtt-subscriber-1.js:

再來執行第一片7688 duo開發版的mqtt-sensor-1.js:

這時會看到第二片 7688 duo 開發版收到了第一片 7688 duo 開發版傳來的溫度資料「-10」。


然後,再次介紹如何依樣畫葫蘆另外做濕度感測器的範例,為我們目前的設計裡添加一個新的感測器(Sensor)和一個新的接收訊息的終端設備。

我們再回到 Node-RED 的編輯器中,並用滑鼠選取編輯區上的四個現有節點,然後用快速鍵 Ctrl+C 複製四個節點,此時會看到編輯器上顯示「4 node copied」,如下:

然後再用快速鍵 Ctrl+V 貼上四個節點,你會看到一組新的獨立設定在編輯區裡:

貼上的四個節點,我們將編輯成濕度的範例,我們一樣先從左邊藍色的 7688 broker 節點開始編輯

接下來換中間橘色的函數節點,將名稱(Name)換成 Humidity,代表用來處理濕度,然後把 msg.deviceId 改成 7688-subscriber-2,把 MQTT Broker 收到的資料轉送到第二個訂閱者(Subscriber)裝置:

需要注意的是,濕度的資料將會發送到 7688-subscriber-2 的設備上,如果你沒有太多片 7688 duo的話,可以在第二片 7688 duo 開發版上執行 7688-subscriber-2.js,而在以下範例則會用第四片 7688 duo 開發版執行7688-subscriber-2.js。

最後則是修改右邊藍色的 7688 IoT out 節點,修改如下:

接下來另外再準備兩片 7688 duo 開發版,一片執行 mqtt-sensor-2.js;另一片執行mqtt-subscriber-2.js。程式範例可從以下連結中下載:

下載 mqtt-sensor-2.js 並上傳到第三片 7688 duo 開發版中,然後修改如下:

在第 15 行中,加入一行程式,送濕度資料到 Humidity 的 Topic,範例中資料內容為 90%。

再來下載 mqtt-subscriber-2.js 並上傳到第四片 7688 duo 開發版中,程式碼如下:

一切準備就緒後,先在第四片 7688 duo 開發版上執行 mqtt-subscriber-2.js,然後再到第三片 7688 duo 開發版上執行 mqtt-sensor-2.js,看是否一切順利,如果 OK 則會看到以下結果:


另外附上在 Node-RED的除錯訊息:

有了以上基本能力就能開發更多複雜的程式了,祝各位練習順利。