# MQTTまとめ ## 概要 MQTT(Message Queueing Telemetry Transport)とは、1999年にIBM社、Eurotech社により考案された、TCP/IPネットワークで利用できる通信プロトコルである。シンプル、軽量、省電力であるため、IoT分野で広く使われている。 ## 基本的な仕組み  - Pub/Subは、同一デバイスで兼任できる - Broker間で通信ブリッジができる - 通信環境が不安定な場合は、レベルに応じた通信を行う - 非同期であるため、相手が受信できるときに受け取る - クライアント障害時などに遺言を残すことが可能 ## VS HTTP || MQTT | HTTP | |:-----------:|:------------:|:------------:| |同期/非同期 通信|非同期|同期| |通信方向|双方向|単方向| |通信対象|多対多|1対1| |最小ヘッダサイズ|2byte|50byte| ## 機能詳細 ### Durable Subscription クライアントとブローカー間が、何かの理由で通信できないときに、通信データをブローカー内で保持する機能 これにより、再度通信可能になったときに、自動でトピックの送受信が再開される。 ただし、MQTTでは各トピックの通信毎にDurable Subscriptionを設定できない。一つのクライアントとブローカーとのコネクションごとにDurable Subscriptionを設定する。 ### Retain トピック毎の最新のメッセージをサーバに保存する機能。 これにより、クライアントが通信を開始したときに、そのトピックの最新のデータを受信することができる。 ### QoS メッセージの伝送保障(QoS)を設定することができる。 なお、Lv.が高くなるほど、通信のオーバーヘッドは高くなる。 | Lv. | 伝送保障 | 確認応答 | 再送 | 重複 | 主な用途 | |:-----------:|:------------:|:------------:|:------------:|:------------:|:------------:| |0|最大1回|×|×|×|センサーデータなど、データが失われても次のデータを受信できるもの| |1|最小1回|〇|〇|〇| ある機能のON-OFF情報など、重複しても問題ないが、必ず必要なデータ| |2|必ず1回|〇|〇|〇| 課金システムなど、必ず一回送信されるべきもの | ### Will(遺言) クライアントとブローカー間の接続が意図しない理由で切れた際に、他のクライアントに登録したメッセージを送信できる。 このWillには、任意のトピック名やQoLを設定できる ## MQTTを使う上での注意 - 一度に送れる最大サイズは268MBまで - トピック名の長さは65kB - データの構造化はアプリ側で実装する必要がある - トピック検索機構が無い - 常にTCPのコネクションをKeepし続ける必要がある →Sleepなどを行えない - 通信の暗号化やセキュリティに関して特に規定がないため、別途対策が必要。 ## 導入実例及びツール - FacebookのMessenger - 油田パイプラインの監視のための、衛星との通信 - ロボットの遠隔操作 - 自動車同士(V2V)、自動車とスマホアプリの通信 - 医療機器の通信 『日本IBM、大量の端末を業務につなぐM2M向けメッセージ中継ゲートウエイ装置を発表』 http://itpro.nikkeibp.co.jp/article/NEWS/20130613/484847/ Mosquitto -オープンソースの「MQTT」フレームワーク https://kfep.jp/solution/iot-mqtt/mosquitto ## 参考資料 > [かもめエンジニアリング MQTTとは](https://kfep.jp/solution/iot-mqtt/mqtt) > [IBM Developer MQTT基礎](https://www.ibm.com/developerworks/jp/iot/library/iot-mqtt-why-good-for-iot/index.html) > [ロボットエンジニアのためのMQTT](https://myenigma.hatenablog.com/entry/2019/10/27/194549)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up