はじめに・・
以前からちょっと気になっていた・・MQTTについて調べてみた..
実は、別件でMQTTを使用しているのがあったのでついでに・・・
MQTTとは。。
Message Queue Telemetry Transportの略で、1999年に、IBMのAndy Stanford-Clark博士と 、Arcom)のArlen Nipperによって開発されました。
MQTTは、ブローカー型のメッセージ伝達・再分配プロトコルで軽量なメッセージングプロトコルです。
筆者は、WEBカメラとかIoTといわれるものでMQTTをみたことがあり。。TCP/IPで動作するRS485/RS422の通信手順ぽい感じ、データがビット単位で制御してたり。
組み込み系向け感が。。。組み込み系は、Windowsとかと違いメモリ、CPUパワーなど劣るので、メッセージの再送など。割り込みを多数使ってしまうと・・
用途として、メッセージ通信・温度など、センサーデータなどがあるようです。あと生存確認もできるので、システム再起動要請などもつかえる感じですね。
パーミッション(Permission)機能でユーザ名とパスワードを使ってトピックへのアクセス条件を制限することも可能です。
プロトコル詳細は下記から・・・
https://mqtt.org/
今回は、ブローカー型を説明します。
Publisher(パブリッシャー)←→Broker(ブローカー)←→Subscriber(サブスクライバー) 複数存在します。
Publisher:データ送信者
Broker:再分配サーバー
Subscriber:データ受信者
通信ポート(TCP 1883, TLS 8883)を使用します。
MQTT バージョン3系、5系があり、オプションの TLS セキュリティーまたは HTTP WebSocket を介した通信も可能
Brokerがサーバー的な位置で、データの再送などここが全部やってくれます。Publisher、Subscriberは送りぱなしで・・リトライが必要ありません・・・
この辺りは、制御系をやってないと・・ピンとこないかもしれませんが・・
トピックとメッセージ
MQTTには、Topic(トピック)とメッセージ
トピックは、RESTful API、ファイルシステムのディレクトリ構造に似ていて。
/から始まる任意の階層の名前付けできます。
トピック名
/ から始まる Unicode UTF-8 文字列であること
全長 65535 バイト以下
ヌル文字を含まないこと
$, #, + は予約語
上記の規定があります。
例
{MQTT トピック接頭部}/コマンド/{MQTT トピック名}/
{MQTT トピック名}が、各端末名称
{MQTT トピック接頭部}、機器種別 カメラとか。センサーとか・・
メッセージは送られてきた場合の優先度、到着順序、管理も保証されません・・
MQTT のSubscriber(サブスクライバー)側ではワイルドカードが使用できます。
例
{MQTT トピック接頭部}/+/data/
{MQTT トピック接頭部}/コマンド/#/
#はすべてのトピック
+は3階層で3層目dataの全てのトピック
このあたり、特に実装によるようなので、機器ごとに確認が必要ぽいです。。
MQTTの動作みる・・
今回は、Eclipse Mosquittoソフトを使ってみます。。Mosquittoとぐぐればでます。。
すぐ、動かしたいので・・・Windows版でテストします。。
https://mosquitto.org/download/
下記よりダウンロードします。
次へ
次へ
次へ
完了
Windowsファイアウォールの受信をTCPで1883を開放します。ウィルスソフト場合、別途ウィルスソフトで設定してください。
基本・・コマンドプロンプトです。。。w
まず、mosquitto.confを編集します。。
デフォルトは、パスワード認証なしなのでパスワード認証を有効にします。ついでにポート設定
インストール後、mosquitto.confがあるのでそれに編集します。デフォルトはすべてコメントになっています。
C:\Program Files\mosquitto\mosquitto.conf
# listener port-number [ip address/host name/unix socket path]
#listener
listener 1883
# the local machine.
#allow_anonymous false
allow_anonymous false
password_file password.txt
Brokerのパスワードファイルを作成する。
ファイル名password.txtで
ID:パスワード形式で記述します。
test:test
下記を実行・・
password.txtが変換されます。
cd C:\Program Files\mosquitto\
mosquitto_passwd -U password.txt
Brokerを起動します。
注)mosquitto.confは自動で読み込みされないので。オプションで渡します・・
筆者は。ローカルに置いておけば。。自動で読み込みしてくれるのと・・・思っていて・・・はまりました・・・
cd C:\Program Files\mosquitto\
mosquitto.exe -v -c mosquitto.conf
Subscriber側に、設定した、Brokerのログイン情報を登録しておきます。。
Publisherを実行します。
cd C:\Program Files\mosquitto\
mosquitto_pub -u test -P test -t "SLIDESHOW/REQ/xxxx/API" -r -h 192.168.xx.xx -m "{'operation': 'showSentHtml', 'parameters': {'panelName': 'Whole screen', 'length': 5, 'html': 'Sample bold text'}}"
Brokerの表示・・
さいごに
デメリットは、Brokerを設置しないといけないことと・・ポート 1883を開放しないといけないので面倒かもね・・