- 前回の記事:「データプラットフォーム「IRIS」を、まずは動かしてみよう!」
MQTTプロトコル
MQTTはMessage Queuing Telemetry Transportの略で、TCPベースのプロトコルです。IoTシステムで利用される理由としては、
- 軽量であり、比較的小さいサイズのデータを高頻度で送受信するのに適している
- 電力消費量に制約のあるデバイスでも動作できる
- Pub/Sub型の通信により、必要なデバイスやアプリケーションが、必要なデータだけを送受信することができる
などが挙げられます。
ここで、MQTTで規定されているPub/Sub型の通信について簡単に説明します。
Pub/Sub型の通信では、次の3つの役割を持つコンポーネントがあります。
- Publisher:データを送信(Publish)するコンポーネント。送信するデータには、Topic属性をつける。Topicの値は、Subscriberが受信するデータを選択(フィルター)するために使用される。
- Subscriber:データを受信するコンポーネント。受信したいTopicをあらかじめBrokerに登録(Subscribe)しておく。
- Broker:Publisherから送信されたデータを、そのデータについているTopicをSubscribeしているSubscriberに送る機能を持つ。
以上の概要を次の図に示します。
図の左側、PublisherはTopicとともにデータをBrokerに送信します。図の右側のSubscriberは、BrokerにTopicを登録しておき、実際にそのTopicに合致するデータがPublishされたら、Brokerからそのデータを受信します。
図に示されている通り、Topicは「/」で区切られた階層構造を持っています。Publisherは、DevA/Tempのように送信するデータのTopicを指定してPublishします。Subscriberは、受信したいTopicをDevA/Tempのように指定してSubscribeすることもできますし、DevB/#のように、ワイルドカード(#)を使用して、DevB以下すべてのTopic(図の例では、DevB/Temp、DevB/Speed)のデータをSubscribeすることもできます。
MQTT Brokerは、オープンソースでいくつかのソフトウェアが公開されています。今回の連載では、Eclipse Mosquittoを利用します。Eclipse Mosquittoはdockerイメージでも提供されているので、今回の構成ではeclipse-mosquittoというイメージをpullして使用するように定義しています。定義は、docker-compose.ymlのmqttbrokerセクションに記述しているので確認してみてください。