初心者ガイド

MQTTは、低帯域環境でのM2M(マシンとマシンの間)テレメトリー向けに設計された軽量なパブリッシュ/サブスクライブメッセージングプロトコルです。

これは、1999年にアンディ・スタンフォード=クラーク(IBM)とアーレン・ニッパーによって、衛星を介した石油パイプラインのテレメトリーシステムを接続するために設計されました。

もともとは独占的なプロトコルとして始まりましたが、2010年にロイヤリティフリーで公開され、2014年にOASIS標準になりました。

MQTTMQ Telemetry Transportの略ですが、以前はMessage Queuing Telemetry Transportとして知られていました。

MQTTは、IOT(インターネットオブシングス)の展開のための主要なプロトコルの一つに急速になりつつあります。

MQTTのバージョン

MQTTには2つの異なるバリアントといくつかのバージョンがあります。

  • MQTT v3.1.0 –

  • MQTT v3.1.1 – 一般的に使用されている

  • MQTT v5 – 現在は限定的な使用

  • MQTT-SN – 後で注記を参照

1999年に設計され、多くの年月にわたって使用されてきたオリジナルのMQTTは、TCP/IPネットワーク向けに設計されています。

MQTTv3.1.1は一般的に使用されているバージョンです。

v3.10と3.1.1の間にはほとんど違いがありません。こちらは主な違いを詳述したGithubページです

こちらは実際の仕様MQTT V3.1と、MQTTプロトコルパケット構造のより詳細な概要です。

最新のMQTTバージョン(v5)は、現在承認されています (2018年1月)。仕様はこちらからダウンロードできます。

4に何が起こったのか疑問に思うなら、こちらを見てください。

詳細については、MQTT v 5.0 新機能概要を参照してください。

こちらはMQTT v3.1.1とMQTT v5の主な違いを詳述したGithubページです。

MQTTバージョン5サポートノート:

リリース1.6時点で、mosquittoブローカーはMQTT v3.11に加えてMQTT v5もサポートしています。

最新のブローカーを使用しても、古いバージョン3.11のクライアントを引き続き使用できます。

Paho Pythonクライアントv1.5は現在v5をサポートしています。

MQTT-SNノート

MQTT-SNは2013年頃に指定され、UDP、ZigBeeおよびその他のトランスポート上で動作するように設計されました。

MQTT-SNは現在、非常に人気があるわけではなく、仕様もここ数年変更されていませんが、IOTの展開が始まるにつれて変わることを期待しています。MQTT-SNに関する詳細は、MQTT-SN作業ノートを参照してください。

MQTTクライアント

MQTTクライアントにはメールアドレスや電話番号などのアドレスがないため、ほとんどのメッセージングシステムのようにクライアントにアドレスを割り当てる必要はありません。

MQTTv3.1.1には、ほぼすべてのプログラミング言語および主要なオペレーティングシステムLinux、Windows、Mac用のクライアントソフトウェアがEclipse Pahoプロジェクトから入手できます。

Pahoクライアントv1.5.1は現在MQTTv5.0をサポートしています。こちらはクライアント比較チャートとダウンロードページへのリンクです。

MQTTブローカーまたはサーバー

: 元々の用語はブローカーでしたが、現在はサーバーとして標準化されています。両方の用語が使用されているのを見ることがあります。

テスト用や実際のアプリケーション用に多くのMQTTブローカーが利用可能です。

無料の自己ホスティング型ブローカーがあり、最も人気のあるものはMosquitto、商用のものではFuboXがあります。

Mosquittoは、WindowsとLinuxで動作する無料のオープンソースMQTTブローカーです。

WebSockets経由のMQTT

Websocketsを使用すると、MQTTデータを直接Webブラウザに受信できます。

これは、WebブラウザがMQTTデータを表示するための事実上のインターフェースになる可能性があるため重要です。

Webブラウザ向けのMQTT websocketサポートは、Javascript MQTTクライアントによって提供されます。

参照 –WebSockets経由でのMQTTの使用

MQTTセキュリティ

MQTTは、さまざまな認証およびデータセキュリティメカニズムをサポートしています。

これらのセキュリティメカニズムはMQTTブローカー上で設定され、クライアントがそれらのメカニズムに準拠するかどうかはクライアント次第であることに注意することが重要です。

参照 MQTTセキュリティメカニズムの紹介

よくある質問

Webやメールに慣れている場合、MQTTは非常に異なるものであると感じるかもしれません。これらは私が持っていた質問であり、他のサイトやフォーラムで見たもので、少し明確にするかもしれません。

Q, MQTTは通常どのポートを使用しますか?

  • A: 標準ポートは1883です。

  • Q: ブローカーなしでMQTTを使用できますか?

  • A: いいえ、MQTTの仕組みを参照してください

Q: MQTTはどのプロトコルを使用しますか?

  • A: 標準バージョンはTCP/IPを使用します。

Q: 複数のクライアントが同じトピックに対してパブリッシュできますか?

  • A: はい

Q: メッセージをパブリッシュしたクライアントの身元を知ることは可能ですか?

  • A: クライアントがその情報をトピックまたはペイロードに含めない限り、いいえ

Q: 誰もサブスクライブしていないトピックにパブリッシュされたメッセージはどうなりますか?

  • A: ブローカーによって破棄されます。

Q: どのトピックがパブリッシュされたかをどのように知ることができますか?

  • A: ブローカーはパブリッシュされたトピックのリストを保持していないようなので、これを簡単に行うことはできません。トピックは永続的ではありません。

Q: 誰もパブリッシュしていないトピックをサブスクライブできますか?

  • A: はい

Q: メッセージはブローカーに保存されますか?

  • A: はい、しかし一時的にのみです。全てのサブスクライバーに送信された後、それらは破棄されます。しかし、次の質問も参照してください。

Q: 保持メッセージとは何ですか?

  • A: メッセージをパブリッシュするとき、ブローカーに最後にパブリッシュされたメッセージを保存させることができます。このメッセージは、そのトピックをサブスクライブする新しいサブスクライバーが最初に見るメッセージになります。MQTTは1つのメッセージのみを保持します。保持メッセージの理解を参照してください。

MQTTとNode.js

このサイトの例のスクリプトの多くはnode.jsを使用しています。Node.jsは使いやすく、すぐに利用できるため、MQTTを学ぶのに適した選択肢です。mqtt.jsの使用を参照してください。

MQTTとNode-Red

プログラミングをしたくない場合、Node-Redはフローベースのツールで、MQTTプロジェクトを簡単に作成できます。他のサイトでのNode-Red入門ガイドを参照して始めてください。

MQTT vs HTTP プロジェクトに最適な選択肢がMQTTかどうか疑問に思っているなら、ここにMQTTとHTTPを比較した記事のコレクションがあります。

  • インターネットオブシングス:プロトコルの戦い(HTTP vs. Websockets vs. MQTT)

  • MQTT vs. HTTP:IoTに最適なのはどちらか?

  • HTTP vs MQTT パフォーマンステスト

  • MQTTとHTTP:2つのIoTプロトコルの比較 - 誤りを含むが、チャートは有用

  • ロボティクスのためのMQTT-SN vs Coap

実際のMQTT例の展開 特定の技術が実際にどのように使用されているかを見ることは、しばしば有用で興味深いものです。ここに私が出会ったいくつかの例があります:

  • Freight Farms-MQTT

  • MQTTを使用したIPピンガースウォーム

  • MQTTの使用方法 - Mosquitto.org

  • Owntracks - 位置追跡

Last updated