MQTT ユーザーマニュアル
MQTT
本マニュアルでは、MQTT機能の使用方法について説明いたします。
V1.00
目次
1. MQTT 概要 ............................................................................................................. 1
Weintek HMI と MQTT .............................................................................................. 1
2. EasyBuilder Pro での設定 ...................................................................................... 2
サーバーの設定 ....................................................................................................... 2
デフォルトトピック ............................................................................................... 4
トピック発行の設定 ............................................................................................... 4
トピック購読の設定(cMT シリーズ) ..................................................................... 7
プロジェクトのデザイン及びアプリケーション ............................................... 8
3. ブローカーの選択 ................................................................................................ 9
HMI に内蔵されているブローカーを使用する.................................................... 9
外部ブローカーを使用する ................................................................................... 9
自分でブローカーを立ち上げる ........................................................................... 9
4. MQTT データを取得する ................................................................................... 10
MQTT クライアントプログラム .......................................................................... 10
5. 他の参照資料 ...................................................................................................... 11
MQTT
1
1. MQTT概要
MQTT とは、一種の斬新なメッセージキュープロトコルです。配布/購読の形
で実行され、それに軽量、オープン、簡易の特性を持ち、プログラムの空き領
域、またはネットワークの帯域幅が限られている場合、MQTT はこれらの利点
を発揮できます。それにより、連続性のある測定データ、例えば温湿度、圧力、
水位、電力などの監視には、MQTT を応用するのが適しています。
MQTT プロトコルの中で、発行者(publisher)、購読者(subscriber)、ブローカー
(broker)との 3種の主役があります。下図に示した通り、発行者があるトピッ
クのメッセージを発行し次第、ブローカーはメッセージを購読者に送信します。
Weintek HMI と MQTT
HMIが PLCに通信し、そしてデータ処理を行った後、MQTT でメッセージを
ネットワークのMQTT ブローカーに配布し、そしてブローカーからメッセー
ジを購読者に転送することができます。HMIがファイアーウォールに在る場合、
この方式を使用すれば、HMIからメッセージを送信することが可能です。
センサー
(購読者)
MQTT
サーバー
(ブローカー)
(購読者)
(購読者)
発行: speed=30
MQTT
2
MQTT メッセージも HMIに内蔵されているブローカーへ配布できます。それ
により、購読者は別途でブローカーを探す必要がありません。MQTT のクライ
アントさえあれば、直接に HMIに内蔵されているブローカーからメッセージ
を購読・取得できます。VPN、或いは EasyAccess 2.0 等に合わせ、MQTT の
クライアントに HMIを接続させたら、購読者はリモートでメッセージを入手
できます。
2. EasyBuilder Pro での設定
EasyBuilder Pro の[オブジェクト][MQTT]でプロジェクト内の MQTT 関連の設
定をします。
サーバーの設定
一番大切なのは、まず[サーバー]関連の設定をすることです。サーバーは IP ア
ドレスまたはドメイン名でブローカーを指定できます。IP アドレスはブローカ
ーが所在している IP アドレスです。ローカル(即ち 127.0.0.1)を選択した場合、
メッセージは HMIのブローカーに送信されます。ドメイン名を使用する場合、
直接にブローカーの名前を入力します。もし特定の購読者だけがサーバーに接
続できるように制限したかったら、[検証]にチェックマークを入れます。チェ
ックマークを入れると、ユーザー名、パスワードを入力する必要があります。
[自動接続]を選択すると、HMI が[アイドル制限]時間内でデータ更新を受信し
ていなかったら、自動的に接続を切断します。トピックリストは購読者に現在
HMI 上の購読可能なトピックを知らせることに用いられます。毎回接続するた
びにトピックを発行したくない場合、[初めての接続の場合のみ、トピックを
発行する]にチェックマークを入れてください。
MQTT
3
LW アドレスは MQTT の状態表示、及び HMI 運転時で動的に MQTT をコントロ
ールすることに用いられます。一個の LW アドレスを指定した後、当アドレス
の相対アドレス(+1, +2, +3…etc.)は下図に示されたように、それぞれ MQTT の各
種の属性・パラメータに対応します。例えば:MQTT_STATUS が LW-110 に設定
された場合、LW-110 は状態を示し、LW-111 はエラーコードを示します。
送信されなっかたメッセージはバッファーに保存され、最大 10000 レコードを
保存できます。バッファーに空き領域がなくなると、一番古いメッセージから
削除されます。
MQTT のメッセージ転送に TLS/SSL で暗号化することができます。
サーバーの認証が CA 認証局の署名検証に得たのかを検証する必要がある場合、
サーバー検証]を有効にし、CA 証明書をインポートしてください。
MQTT
4
接続する MQTT サーバーがクライアント認証を要求した場合、[クライアント
認証]をインポートする必要があります。
デフォルトメッセージ
HMI を発行者とし、初めてブローカーに接続する場合、HMI はデフォルトで 2
点の QoS2 のトピックを発行します。
1. iot-2/type/mt/id/<Registration ID>/evt/topics_update/fmt/json
このトピックでは全てのトピック、及びそれらのトピックが圧縮されたかを含
めています。
2. iot-2/type/mt/id/< Registration ID>/evt/status/fmt/json
このトピックは HMI とブローカーの間の接続状態を表示します。
トピック発行の設定
[サーバー]設定完了後、[トピック]を設定します。各[トピック]の中には幾つか
のメッセージが含まれます。
[トピック]を命名するには、ユーザー定義の名前を使用するか、或いは頭文字
が%の制御コード、HMI 名/サーバー設定でトピックを組み合わせることができ
ます。
例えば、トピックが以下のように命名された場合:
iot-2/type/cMT-SVR/id/%0/evt/topic 1/fmt/json
その中、%0 は HMI 名のことで、HMI 名を確認するには、HMI の OS システム
ツールバーで、または LW-10884 で HMI を確認できます。もし HMI 名は Default
HMI だったら、購読者のトピック下記のようになります:
iot-2/type/cMT-SVR/id/Default HMI/evt/topic 1/fmt/json
MQTT
5
[発信モード]を設定する:誘発式を選択した場合、トピックに何か変更があり
次第、MQTT はメッセージを送信します。周期式を選択した場合、データは指
定した時間で配布されます。
発信モードには[アドレス]以外、[イベントログ]を選択することもできます。
イベントログが作成された場合のみ、[MQTT トピックの発行]で[イベントログ]
を選択できます。
発信モードに[アドレス]を選択する場合、アドレスタブで本トピックのデータ
組成を設定します。このアドレスは連続・非連続のアドレスでもいいし、異な
るデータ型や長さでもいいです。
[QoS]:MQTT のサービス品質(Quality of Service)を設定します。3 レベルを設定
できます。
QoS 0:最高一回:メッセージを一回だけ配布するが、確実に届く保証はあり
ません。
Qos 1:最低一回:メッセージは最低1回届きます。
QoS 2:最低一回:メッセージは最低1回届きます。MQTT の QoSに関しても
っと多くの情報を取得するには、ここをクリックしてください。
[圧縮して転送する]:メッセージを圧縮してから転送します。圧縮されたメッ
セージを読み取る前、先に解凍する必要があります。MQTT は DEFLATE 算法で
メッセージを圧縮/解凍します。
[内容フォーマット]:JSON、Raw data を選択できます。
MQTT
6
JSON:
仮に HMI が発行するトピックには下記のデータ型が含まれた場合:
HMI が発行する 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"
}
MQTT
7
Raw data:
仮に HMI が発行するトピックには下記のデータ型が含まれた場合:
HMI が発行する Raw data フォーマットは下記のようになります:
0002 009A 9999 3F00 0000 0000 0000 0000
0000 0000 0000 0041 4243 4400 0000 00
トピック購読の設定(cMT シリーズ)
cMT シリーズの HMI は他の MQTT サーバーからトピックを購読することがで
きます。設定はトピック発行の設定と同じですが、[イベントログ]の購読をサ
ポートしません。
[内容フォーマット]:JSON、または Raw data フォーマットを購読できます。発
行者がサポートするフォーマットを選択してください。
JSON:
仮に JSON のメッセージは下記の場合:
{
"d" : {
"value 1" : [ false ],
},
"ts" : "2017-04-18T17:36:52.501856"
}
MQTT
8
注意すべきなのは、各 JSON の ts (time stamp)は昇順でなければなりません。
Raw data:
トピック購読のアドレスを設定する時、購読するトピックのデータフォーマッ
トに一致しなければなりません。
例を挙げると、例えば購読するトピックに一個のビット、一個の 16bit-unsigned
ワード、一個の長さが 4 のストリングを含めた場合、アドレスの設定は下記の
ようになります:
その中、アドレスの設定順番はビット、16bit-unsigned ワード、ストリングの
順でなければなりません。順番を変えてはいけなく、長さも完全に一致である
こと。
プロジェクトのデザイン及びアプリケーション
MQTT サーバー設定の中には、前述のコントロールアドレス MQTT_COMMAND
と状態アドレス MQTT_STATUS があります。コントロールアドレスはパラメー
タの制御に指定されることができ、MQTT_COMMAND+1 から
MQTT_COMMAND+43……等が含まれます。接続状態は状態アドレス
MQTT_STATUS 及び MQTT_STATUS+1 に表示されます。
上記情報は、EasyBuilder Pro の設定ダイアログボックスで記載されています。
HMI 稼働時:
MQTT_COMMAND を 1に設定すると、HMI はブローカーと接続します
MQTT_COMMANDを 2に設定すると、HMIはブローカーとの接続を切断します。
コントロールパラメータを更新した後、MQTT_COMMAND を 3 に設定すると、
HMI は新しいパラメータでブローカーと接続します。
前述のアドレスをコントロールすることにより、HMI 稼働時にオンラインで
MQTT 関連の設定を調整できます。
MQTT
9
3. ブローカーの選択
HMI に内蔵されているブローカーを使用する
HMI に内蔵されているブローカーを使用したい場合、アドレス設定タブでロー
カルを選択します(サーバーの IP アドレスは自動的に 127.0.0.1に設定されま
す)。或いは HMI で IP アドレスを 127.0.0.1に設定すれば、MQTT が HMI に内蔵
されているブローカーを使用することになります。一方、クライアントプログ
ラムが HMI の IP アドレスでブローカーに接続できます。
HMI に内蔵されている MQTT ブローカーを初めて使用する前、先に EasyBuilder
Pro を通じて HMI へダウンロードする必要があります。MQTT ブローカーをダ
ウンロードする時、[Runtime]を選択してください。
外部ブローカーを使用する
外部ブローカーを使用する場合、サーバー情報のところに当ブローカーの IP
アドレスを入力する必要があります。
例:HiveMQ Enterprise MQTT 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 からドメイン名をサポートすることになったので、、
ブローカーの実際 IP アドレスを入力してもいいし、ドメイン名
(broker.hivemq.com)を入力してもいいです。
自分でブローカーを立ち上げる
ユーザーは自分でブローカーを立ち上げて使用することができます。ここで数
個の弊社社内でテスト済みの選択を提示します:
1. Mosquitto (http://mosquitto.org/download/)
2. HiveMQ (http://www.hivemq.com/downloads/) (テストバージョン)
3. EMQ (http://emqtt.io/)
各ブローカーのインストール及び使用方法について、各ソフトウェアのホーム
ページにご参照ください。
MQTT
10
4. MQTTデータを取得する
MQTT の更新データを取得するには、MQTT のクライアントプログラムを使用
し、ブローカーに接続して登録してから、HMI が提供した更新データを受信で
きます。インターネットでは多くの無料クライアントプログラムが提供されて
います。本章では、PC 向けの無料プログラム MQTT.fx をご紹介します。
MQTT クライアントプログラム
インターネットでは多くの無料 PC 版 MQTT クライアントプログラムが提供さ
れています。モバイル端末にも無料アプリが提供されています。ここで、PC
での MQTT.fx の使用方法について簡単に説明します。他のソフトウェアを使用
する場合でも、類似な設定を使用することができます。
1. 仮にHMIではMQTT Demoを使用し、そしてMQTTサーバー212.72.74.21 port
1883 に接続するように設定し、MQTT トピックは Data_Bit の場合。
MQTT.fx で新規の接続プロファイル(Edit Connection Profiles)を作成します。
設定は下記の通りです:
Broker Address: 212.72.74.21
Broker Port: 1883
Profile Name: ユーザー定義
Client ID: ユーザー定義
2. 他の項目についてはデフォルトを使用すればいいです。設定完了後
[Connect]をクリックすると、ブローカーと接続し始めます。
MQTT
11
3. Subscribe タブをクリックします。下図に示された欄でトピック Data_Bit を
入力して Subscribe をクリックすると登録されます。これでデータを受信で
きます。MQTT メッセージに更新があると、メイン画面に表示されます。
5. 他の参照資料
The Seven Best MQTT Client Tools
http://www.hivemq.com/blog/seven-best-mqtt-client-tools