HOME > ソフテックだより > 第385号(2021年9月1日発行) 技術レポート「通信プロトコルMQTTを用いたIoT」

「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。

ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ


ソフテックだより 第385号(2021年9月1日発行)
技術レポート

「通信プロトコルMQTTを用いたIoT」

1. はじめに

私は第二新卒採用にてソフテックに入社して半年の社員になります。IoTを活用した開発の中で用いた通信プロトコルMQTT(Message Queue Telemetry Transport)について紹介させて頂きます。
MQTTを用いたシステム構成について以下の表1、図1に示します。システムの目的は、PLCより収集したデータを推論アプリケーションがArtificial Intelligence(AI)のモデルにより推論処理をして予測値を計算し、予測結果をPLCに送信することです。

表1.  システム構成詳細

No. ソフトウェア 内容
01 推論アプリケーション データ管理アプリケーションがPLCより収集したデータを元にAIで推論処理をして、処理したデータをリアルタイムでPLCに送信します。
02 MQTT broker 推論アプリケーションとデータ管理アプリケーションのMQTTによるデータ配信の仲介をします。
03 データ管理アプリケーション PLCのデータにアクセスしてデータ収集を行います。

システム構成
図1.  システム構成

2. MQTTとは

MQTTは1990年代後半にIBM社とEurotech社によりIBM社のMQプロトコルをベースに開発されました。MQTTの特徴と通信構成について以下に示します。

(1) 軽量なプロトコル

MQTTでは固定長ヘッダは2Byteでオーバーヘッドが少ない仕様になっています。そのため、通信量を減らすことによりデバイスのバッテリー消費を抑えることができてM2M(Machine-to-Machine)の接続に適しています。

(2) 非同期の双方向通信

Publisher(送信側)とSubscriber(受信側)間にMQTT brokerというサーバを配置することで、一度確立した接続を再利用できるPublish/Subscribe型の通信を実現します。そのため、HTTPのようなリクエスト/レスポンス型通信とは異なり、通信コストを抑えてリアルタイムの情報を送信することができます。
また、PublisherとSubscriberそれぞれがTopicを設定することで、MQTT brokerはTopicごとにメッセージを振り分けて1対多の通信を可能にしています。

(3) 通信が切れる事態を想定した機能

クライアント(PublisherまたはSubscriber)の不安定な稼働環境を想定して、クライアントとサーバ間のメッセージ到達保証レベルを3段階で指定することができます。

  • QoS = 0 :メッセージを1回のみ送信します(最も速いが、障害時には保証されない)
  • QoS = 1:メッセージを最低1回は送信先に届けます(重複してしまう可能性あり)
  • QoS = 2:メッセージを必ず正確に1回だけ送信先に届けます

また、MQTTのClean Session機能によりセッション状態の情報の保持について設定することができ、Retain機能によりクライアントが再接続した際にサーバは保持しているメッセージを送信することができます。予期せぬ状態でクライアントが切断された場合もクライアントとサーバがそれぞれLWT(Last Will and Testament)機能を設定しておくことにより、指定したTopicへ自動的にメッセージを送信することができます。

MQTTの通信構成図
図2.  MQTTの通信構成図

MQTTの特徴についてまとめたものを一般的に使用されることの多いHTTPと比較して以下の表2に示します。

表2.  HTTPとMQTTの比較

  HTTP MQTT
送信できるデータ量 大きい 小さい(最大256MByte)
接続方式 リクエスト/レスポンス型 Publish/Subscribe型
送受信対象 1対1 1対多
到達保証度の設定可否 設定不可 設定可

3. MQTT設定方法

MQTT brokerはオープンソースのMosquittoをPCにインストールすることで実装しました。MQTTは標準では1883番ポート、SSL(TLS)による暗号化を行う場合は8883番ポートを利用しますので、Mosquittoを起動する前に各ポートを設定内容に合わせて開放させておく必要があります。
クライアントは、MQTTのPublisherとSubscriberを実装するためのライブラリであるPahoを用いて作成しました。
また、Pahoが対応している言語はC,C++,Java,Javasqript,Python,Goなどがありますが、推論アプリケーションで推論処理も行う必要がありましたのでPythonを採用しました。
MQTTの設定をする中で、推論アプリケーションからデータ管理アプリケーションにデータ送信する際の設定で苦労しました。データ管理アプリケーションがデータを受信できず色々と方法を試していくうちに自分が何の設定をしているのかも分からなくなってしまいました。状況を整理し図にまとめて設定内容について確認していくことで、設定の問題点に気が付き問題を解決することができました。混乱した際は状況整理し丁寧な作業を心掛けていこうと思います。

4. おわりに

世界のIoTデバイス数は総務省の「令和2年版 情報通信白書」によると、2022年には約348億台まで増加が予想されています。市場的には、スマート工場やスマートシティが拡大する「工場やインフラ、物流」、デジタルヘルスケアの市場が拡大している「医療」、スマート家電などが増加する「コンシューマ」などが成長すると予測されています。パソコンやスマホだけではなく、医療機器や自動車など様々な機器がインターネットに接続できるようになるということは便利なことですが、セキュリティ対策もしっかりおこなっていかないと、プライバシーだけでなく生命の危険も出てくるようになるということを忘れてはいけないなと感じました。今回ご紹介したMQTTについても、世界的に約5万台のMQTTサーバがインターネット上で公開状態であるといわれています。今後IoTシステムにおけるセキュリティに関しても機会があればご紹介したいと思います。

(Y.N.)


関連ページへのリンク

関連するソフテックだより

ページTOPへ