本手冊介紹如何使用 mqtt 功能 v2 - phelipu · mqtt...

14
MQTT 應用手冊 MQTT 本手冊介紹如何使用 MQTT 功能 V2.00

Upload: others

Post on 16-Jun-2020

14 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 本手冊介紹如何使用 MQTT 功能 V2 - phelipu · mqtt 的不同的屬性或參數,如下圖ebpro 中的介面所述。例如:當mqtt_status 設定為lw-110,表示狀態表示位址為lw-110,錯誤碼位址為lw-111。未發佈

MQTT應用手冊

MQTT

本手冊介紹如何使用MQTT功能

V2.00

Page 2: 本手冊介紹如何使用 MQTT 功能 V2 - phelipu · mqtt 的不同的屬性或參數,如下圖ebpro 中的介面所述。例如:當mqtt_status 設定為lw-110,表示狀態表示位址為lw-110,錯誤碼位址為lw-111。未發佈

目錄

1. MQTT簡介 ............................................................................................................. 1

Weintek人機與 MQTT ............................................................................................. 1

2. EasyBuilder Pro上的設定 ...................................................................................... 3

伺服器的設定 ........................................................................................................... 3

預設發佈主題 ........................................................................................................... 5

主題發佈設定 ........................................................................................................... 5

主題訂閱設定(僅限 cMT系列) ................................................................................ 7

工程檔案設計及執行時應用 ................................................................................... 9

3. Broker的選用 ...................................................................................................... 10

使用 HMI 內建的MQTT Broker ............................................................................. 10

運用外部 broker ...................................................................................................... 10

自行架設 broker伺服器 ......................................................................................... 10

4. 取得MQTT資料 .................................................................................................. 11

MQTT 客戶端程式 ................................................................................................. 11

5. 其他參考 .............................................................................................................. 12

Page 3: 本手冊介紹如何使用 MQTT 功能 V2 - phelipu · mqtt 的不同的屬性或參數,如下圖ebpro 中的介面所述。例如:當mqtt_status 設定為lw-110,表示狀態表示位址為lw-110,錯誤碼位址為lw-111。未發佈

MQTT

1

1. MQTT簡介

MQTT是一套嶄新的訊息傳遞的協議。設計上,基於發布/訂閱的模式,並且以

輕巧、開放、簡易為主軸,當程式容量有限,或是網路頻寬受限的時候,MQTT

都可以發揮優勢。因此,連續性的感測資料像是溫濕度,壓力、水位、電力監控

資料等,都是適合應用MQTT監控的資料。

MQTT協議中,主要有三種角色,發佈者 (publisher)、訂閱者 (subscriber)、轉發

者 (broker),可以參考下圖,當發佈者發佈某一主題的訊息後,轉發者就會轉發

訊息給對應的訂閱者。

Weintek人機與 MQTT

人機與PLC通訊並進行處理資料後,可以透過MQTT將資訊發布至網路上的MQTT

broker,然後 broker將資料轉發給需要的用戶。當人機位處於防火牆內時,利用

這種方式就可以將訊息資料主動從人機發出。

MQTT訊息也可以發布到人機內建的 broker。用戶就不用另外尋找 broker的服務。

Sensor

(Publisher)

MQTT

Server

(Broker)

Laptop

(Subscriber)

Laptop

(Subscriber)

Publish: speed=30

Page 4: 本手冊介紹如何使用 MQTT 功能 V2 - phelipu · mqtt 的不同的屬性或參數,如下圖ebpro 中的介面所述。例如:當mqtt_status 設定為lw-110,表示狀態表示位址為lw-110,錯誤碼位址為lw-111。未發佈

MQTT

2

只要有MQTT的用戶端程式,就可以直接與人機內建的 broker訂閱想要的資料,

然後取得資料。搭配 VPN或 EasyAccess 2.0等方式可讓MQTT用戶端程式可以直

接連結人機,這樣用戶就可以輕鬆地遠端取得人機上的資料更新。

Page 5: 本手冊介紹如何使用 MQTT 功能 V2 - phelipu · mqtt 的不同的屬性或參數,如下圖ebpro 中的介面所述。例如:當mqtt_status 設定為lw-110,表示狀態表示位址為lw-110,錯誤碼位址為lw-111。未發佈

MQTT

3

2. EasyBuilder Pro上的設定

在 EasyBuilder Pro的 [物件][MQTT] 中可以進行工程檔案的MQTT相關設定。

伺服器的設定

最重要的,首先應設定 [伺服器] 的相關設定。伺服器可使用 IP位址或網域名稱

指定 broker。IP位址就是 broker所在的 IP位址。當選擇本地 (即 127.0.0.1),表

示訊息發佈到 HMI上的 broker。使用網域名稱則是直接輸入 broker的名稱。若

需要限制特定的訂閱者才能連到伺服器,可以勾選[驗證]。目前僅支援[使用者/

密碼]方式。[自動連線] 則可以讓人機在 [空閒時間] 內沒收到資料更新時主動斷

線。主題列表是為了讓訂閱者得知目前人機上有那些主題可以訂閱。若不想每次

連線時發送主題列表,則要勾選[只在第一次連線時發送主題列表]。

MQTT的狀態顯示,以及控制的位址,都可以指定於 LW位址上,以在 HMI程式

執行中即時控制。指定一個位址後,該位址的相對位址 (+1,+2,+3…等) 各對應著

MQTT的不同的屬性或參數,如下圖 EBPro中的介面所述。例如:當MQTT_STATUS

設定為 LW-110,表示狀態表示位址為 LW-110,錯誤碼位址為 LW-111。未發佈

成功的訊息會先存在人機中的記憶緩衝區,最多可儲存 10000筆,當緩衝區用盡

時,會優先刪除最早的訊息。

Page 6: 本手冊介紹如何使用 MQTT 功能 V2 - phelipu · mqtt 的不同的屬性或參數,如下圖ebpro 中的介面所述。例如:當mqtt_status 設定為lw-110,表示狀態表示位址為lw-110,錯誤碼位址為lw-111。未發佈

MQTT

4

MQTT的訊息傳輸,可以選擇使用 TLS/SSL加密,若需認證伺服器憑證是否合法,

需啟用並匯入 [伺服器認證],若連接的MQTT伺服器要求使用客戶端認證,則

需匯入對應的 [客戶端認證]。

Page 7: 本手冊介紹如何使用 MQTT 功能 V2 - phelipu · mqtt 的不同的屬性或參數,如下圖ebpro 中的介面所述。例如:當mqtt_status 設定為lw-110,表示狀態表示位址為lw-110,錯誤碼位址為lw-111。未發佈

MQTT

5

預設發佈主題

1. 當人機作為發佈者,第一次連線到轉發者時,人機會預設發佈兩道 QoS2的

主題。iot-2/type/mt/id/<Registration ID>/evt/topics_update/fmt/json

此條主題會包含所有該人機發佈的主題,以及訊息是否有被壓縮。

2. iot-2/type/mt/id/< Registration ID>/evt/status/fmt/json

此條主題會顯示人機與轉發者的連線狀態。

主題發佈設定

完成 [伺服器] 設定後,接著設定 [主題]。每一 [主題] 內含要傳送的一串資料。

[主題] 的命名可以設定為使用者自定的固定名稱,或是搭配使用 % 開頭的控制

碼,使用人機以及伺服器設定組成主題。

舉例來說,若主題命名為:iot-2/type/cMT-SVR/id/%0/evt/topic 1/fmt/json

其中%0是 HMI名稱。可以在人機 OS的系統工具列,或使用 LW-10884去查看

HMI名稱。若 HMI名稱為 Default HMI,則訂閱者的主題應寫為:

iot-2/type/cMT-SVR/id/Default HMI/evt/topic 1/fmt/json

設定 [發送模式]:觸發式表示主題內數值有更動,MQTT訊息會發送。選擇週期

式時,則資料在設定的固定間隔時發佈。

發送的人機訊息,可以選擇 [位址] 或 [事件記錄]。事件記錄需要先在 [事件登

錄] 下設定,才能夠在 [MQTT主題發佈] 下選擇 [事件記錄]。

Page 8: 本手冊介紹如何使用 MQTT 功能 V2 - phelipu · mqtt 的不同的屬性或參數,如下圖ebpro 中的介面所述。例如:當mqtt_status 設定為lw-110,表示狀態表示位址為lw-110,錯誤碼位址為lw-111。未發佈

MQTT

6

若選擇發佈 [位址],在位址頁籤下,就可以設定這個主題之下的資料組成。這

串資料的組成可以是非連續地址,也可以是不同樣的型態或各有不一樣的長度。

[QoS]:設定MQTT的服務質量(Quality of Service),一共可以設定三個級別。

QoS 0:訊息只發送一次,不保證送達。

Qos 1:訊息送達至少要一次。

QoS 2:訊息送達剛好一次。關於MQTT的 QoS,可點此處了解更多。

[傳輸壓縮]:可壓縮發佈的傳輸訊息。客戶端讀取該訊息前,需先解壓縮。壓縮

格式為 DEFLATE。

[發送格式]:可以選擇 JSON或 Raw data。訂閱者必須要能支援人機發佈的格式。

JSON:

若人機發佈的主題包含以下的資料類型:

Page 9: 本手冊介紹如何使用 MQTT 功能 V2 - phelipu · mqtt 的不同的屬性或參數,如下圖ebpro 中的介面所述。例如:當mqtt_status 設定為lw-110,表示狀態表示位址為lw-110,錯誤碼位址為lw-111。未發佈

MQTT

7

人機發佈的 JSON格式如下:

{

"d" : {

"value 1" : [ false ],

"value 2" : [ 2 ],

"value 3" : [ 1.20000005, 0, 0, 0, 0 ],

"value 4" : [ "ABCD" ]

},

"ts" : "2017-04-18T17:36:52.501856"

}

Raw data:

若人機發佈的主題包含以下的資料類型:

人機發佈的 Raw data格式如下:

0002 009A 9999 3F00 0000 0000 0000 0000

0000 0000 0000 0041 4243 4400 0000 00

主題訂閱設定(僅限 cMT系列)

cMT系列可自其他MQTT的伺服器訂閱主題。相關設定與主題發佈相同,但不支

援訂閱 [事件記錄]。

Page 10: 本手冊介紹如何使用 MQTT 功能 V2 - phelipu · mqtt 的不同的屬性或參數,如下圖ebpro 中的介面所述。例如:當mqtt_status 設定為lw-110,表示狀態表示位址為lw-110,錯誤碼位址為lw-111。未發佈

MQTT

8

[內容格式]:可以訂閱 JSON或 Raw data格式。發佈者必須要能支援人機可訂閱

的格式。

JSON:

若 JSON的訊息格式如下,

{

"d" : {

"value 1" : [ false ],

},

"ts" : "2017-04-18T17:36:52.501856"

}

每一道 JSON的 ts (time stamp)在時間順序皆必須為遞增

Raw data:

在設定主題訂閱的位址時,必須完全符合訂閱主題的資料格式。

舉例來說,若要訂閱的標題包含一個位元,一個 16bit-unsigned字元,一個長度

為 4的字串。主題訂閱的位址必須如下:

其中位址設定的順序必須為位元、16bit-unsigned字元、字串,順序不可調換,

長度也必須完全一致。

Page 11: 本手冊介紹如何使用 MQTT 功能 V2 - phelipu · mqtt 的不同的屬性或參數,如下圖ebpro 中的介面所述。例如:當mqtt_status 設定為lw-110,表示狀態表示位址為lw-110,錯誤碼位址為lw-111。未發佈

MQTT

9

工程檔案設計及執行時應用

在MQTT設定中有上述的控制位址MQTT_COMMAND和狀態位址MQTT_STATUS。

控制的參數設定位於MQTT_COMMAND+1至MQTT_COMMAND+43……等。而連

線狀態會顯示於狀態位址MQTT_STATUS及MQTT_STATUS+1。

以上這些資訊在 EasyBuilder Pro介面中皆有詳述。

HMI程式運行時:

將MQTT_COMMAND設定為 1,則 HMI會開始與 broker連線。

將MQTT_COMMAND設定為 2,則 HMI中斷與 broker的連線。

在更新控制參數後,將MQTT_COMMAND設定為3,則HMI將以新的參數與broker

連線。

透過控制上述的地址,即可在 HMI程式執行中線上控制MQTT的各類設定。

Page 12: 本手冊介紹如何使用 MQTT 功能 V2 - phelipu · mqtt 的不同的屬性或參數,如下圖ebpro 中的介面所述。例如:當mqtt_status 設定為lw-110,表示狀態表示位址為lw-110,錯誤碼位址為lw-111。未發佈

MQTT

10

3. Broker的選用

使用 HMI 內建的 MQTT Broker

如果要運用 HMI上的 broker,在設定時選擇本地 (server的 IP位址會自動設定為

127.0.0.1)。或是在 HMI中將 IP位址設定為 127.0.0.1,也表示MQTT會使用 HMI

上的 broker。而客戶端程式在連線時,就使用 HMI的 IP連線。

HMI上的MQTT Broker第一次使用前必須透過 EasyBuilder Pro下載至 HMI。請在

下載時勾選 Runtime。

運用外部 broker

如果運用外部 broker,伺服器應輸入該 broker的 IP位址。

例如:使用 HiveMQ的公開 broker服務。該 broker的資料為:

Host: broker.hivemq.com (212.72.74.21)

Port: 1883

Websocket Port: 8000

(http://www.hivemq.com/try-out/)

從 EasyBuilder Pro V5.07.01支援直接使用網域名稱,可輸入 broker的實際 IP位

址或者 Domain name (broker.hivemq.com)。

自行架設 broker伺服器

用戶可以自行架設 broker伺服應用。

在此提供幾個我們測試過的選擇

1. Mosquitto (http://mosquitto.org/download/)

2. HiveMQ (http://www.hivemq.com/downloads/) (也提供測試版本)

3. EMQ (http://emqtt.io/)

各 Broker的安裝及使用規範,需請參考各軟體網站。

Page 13: 本手冊介紹如何使用 MQTT 功能 V2 - phelipu · mqtt 的不同的屬性或參數,如下圖ebpro 中的介面所述。例如:當mqtt_status 設定為lw-110,表示狀態表示位址為lw-110,錯誤碼位址為lw-111。未發佈

MQTT

11

4. 取得MQTT資料

要獲得MQTT更新的資料,要使用MQTT的客戶端程式,連線至 broker註冊並

接收 HMI所提供的資料更新。網路上各平台有許多的免費的客戶端程式。此章

節介紹使用一款 PC上的免費程式MQTT.fx。

MQTT 客戶端程式

網路上有多個免費的 PC版MQTT客戶端應用程式可以下載使用。行動裝置上也

有免費程式可使用。在此簡略說明使用 PC上的MQTT.fx,如何連線取得至 HMI

的訊息更新。使用其他的軟體,也可以用類似的設定。

1. 假定 HMI上使用MQTT Demo,且已經設定為連至MQTT伺服器 212.72.74.21

port 1883。有一個MQTT主題名稱為 Data_Bit。

2. 在MQTT.fx中,建立新的連線設定檔 (Edit Connection Profiles)。

設定:

Broker Address: 212.72.74.21

Broker Port: 1883

Profile Name: 自訂

Client ID: 自訂

其他設定使用預設值即可。確認後,點擊 Connect就會和 broker連線。

3. 點選 Subscribe的框頁。在欄位中輸入要註冊的標題 Data_Bit,點選 Subscribe

即可註冊。此時就會開始接受資料。當有MQTT訊息更新,就會顯示在主畫

面。

Page 14: 本手冊介紹如何使用 MQTT 功能 V2 - phelipu · mqtt 的不同的屬性或參數,如下圖ebpro 中的介面所述。例如:當mqtt_status 設定為lw-110,表示狀態表示位址為lw-110,錯誤碼位址為lw-111。未發佈

MQTT

12

5. 其他參考

The Seven Best MQTT Client Tools

http://www.hivemq.com/blog/seven-best-mqtt-client-tools