MQTTって

らら
らら

はじめに・・

以前からちょっと気になっていた・・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/

下記よりダウンロードします。

Mosquitto

次へ

Mosquitto

次へ

Mosquitto

次へ

Mosquitto

完了

Mosquitto

Windowsファイアウォールの受信をTCPで1883を開放します。ウィルスソフト場合、別途ウィルスソフトで設定してください。

Mosquitto

基本・・コマンドプロンプトです。。。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

Mosquitto

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'}}"

Mosquitto

Brokerの表示・・

Mosquitto

さいごに

デメリットは、Brokerを設置しないといけないことと・・ポート 1883を開放しないといけないので面倒かもね・・

関連記事