TECH BLOG

MENU

オンプレクラウド

Dr.Sum

Dr.Sum Data Funnel

Dr.Sum Data Funnelで使える通信方式

Dr.Sum Data Funnelでは通信方式にMQTTを使います。

この記事ではMQTTとはどういった通信方式なのかを簡単に解説したあと、Data Funnelで実際にMQTTを扱う方法について紹介します。

 

MQTTとは

MQTTとは、Message Queueing Telemetry Transportを略したものです。軽量省電力で、短いメッセージを頻繁に送受信することを想定して策定されたプロトコルです。パブリッシュ/サブスクライブ(Publish/Subscribe)型のモデルを採用しており、「Publisher」「Broker」「Subscriber」がそれぞれの役目を果たします。

……という説明で「なるほど理解した」となる方は、この記事を読んでないはずですね。
もうちょっと詳しく見ましょう。

 

 

MQTTの特長「軽量」「省電力」で「短いメッセージを頻繁に送受信する」は、IoTデバイスがデータを送受信する際に適切です。

 

 

「サブスクライブ」という単語は、日本ではここ数年で一気に認知度が向上した単語ですね。「サブスク」と略されることが多く、日本での理解は一般には「月額定額課金」みたいなところですが、本来は「購読」という意味合いです。一方で、パブリッシュは「出版」ですね。そのため、「Publish/Subscribe(PubSub)型のモデル」は、日本語では「出版-購読型のモデル」と言われることもあるようです。

Publish/Subscribe型のモデルでは、「Publisher」「Broker」「Subscriber」がそれぞれ役割を果たします。なお、「Broker」というのは、日本語としてはあまり意味の良いイメージがありませんが、本来は「仲介人/仲介者」を指します。

 

PubSubモデル

 

ここは、日本語の「出版-購読型モデル」のほうで考えると、わかりやすいと思います。

 

出版-購読型モデル

 

出版社が毎日大量の雑誌をストアに登録(Publish)して、購読者はストアから、自分が購読登録しておいた雑誌を、各々の適切なタイミングでダウンロード(Subscribe)します。

 

MQTTトピック

上述した電子書籍ストアの例では、自分が購読登録しておいた雑誌だけをダウンロードします。この場合は当然雑誌名を指定してダウンロードしますよね(内部的にはIDかもしれませんが)。

では、MQTTの場合はどうやってMQTTメッセージを特定するのでしょうか。
MQTTの場合は、トピック(Topic)という仕組みが用意されています。
トピックはPublisherがBrokerに送信時にメッセージに含みます。

 

MQTTはトピックでメッセージを区別する

 

 

Dr.Sum Data Funnelでの実装

ここまで見てきたMQTTの特徴を踏まえて、Data Funnelでのシステム構成を見てみましょう。

 

Data Funnelマニュアル:Dr.Sum Data Funnelのシステム構成

 

ピンク字の箇所が、Dr.SumおよびData Funnelで提供するアプリケーションです。

Publisherはこの場合は各IoTデバイスが担当します。場合によっては、IoTデバイスを統括するコントローラーのようなものが担うこともあるかもしれません。
そして、PublisherはData Funnelが提供するMessage Brokerにメッセージを送信します。ここはそのままです。
Subscriberの役目を担うのはData Funnel(Server)です。

Data FunnelではメッセージをSubscribeしたあと、適切なデータ加工を施しながらDr.Sumに投入することができます。その際の設定を行なうツールがData Funnel Clientです。

Data Funnelで行える加工の概要については以下記事をご参照ください。

 

Data Funnelで使う方法

Data FunnelでメッセージをSubscribeする点にフォーカスして、設定方法を確認しましょう。
と言っても難しい点はいっさいありません。

MQTTではメッセージを特定するためにトピックを使いましたね。
SubscriberたるData Funnelでもやはりトピックを指定します。

 

なお、[トリガー間隔]という設定値がすぐ下にあります。
これはData FunnelがMessage BrokerにSubscribeしにいく間隔を示しています。

 

IoTデバイスがMQTTに対応していない場合は?

さて、これでMQTTプロトコルおよびData FunnelでのMQTTの利用方法については概要を掴めたのではないかと思います。Data FunnelはMQTTの利用を前提として構成され、また動作します。

それでは、データを取得分析したいIoTデバイスがMQTTでのデータ送信に対応していない場合は、Data Funnelは使えないツールになってしまうのでしょうか。

もちろん、答えはいいえです。
Data Funnelでは、MQTTが利用できない場合にも、他に2種類のプロトコルでのデータ受信に対応できるアプリケーションが付属します。

 

Data Funnel HTTP Agent

名前のとおり、HTTPプロトコルでデータ受信できます。

HTTP AgentはWebサーバーとして動作し、HTTPで受け付けたデータをMQTTに変換して、Message BrokerにPublishする役割を担います。

 

Data Funnel OPC UA Agent

HTTPに比べたら遙かに耳慣れないと思いますが、OPU UAというのは、産業オートメーションなどの業界で、安全で信頼性あるデータ交換を行うために策定されたオープンな国際標準規格です。

HTTP Agentと同様に、OPC UA AgentはOPU UAで取得したデータをMQTTに変換して、Message BrokerにPublishする役割を担います。

 

先ほどのシステム構成図に2つのアプリケーションを加えると、このように図示できます。

HTTP AgentもOPU UA Agentも、MQTTでの仲介をすることで、「Publish/Subscribe(PubSub)型のモデル」においては両方ともPublisherとして振る舞うことに注意してください。
また、OPU UA AgentはOPU UAサーバーからデータを取得するため、その設定を行なうためのOPU UA Clientが存在します。

 

おわりに

いかがだったでしょうか。

Data Funnelは構成図を見せられると知らない用語がたくさん載っているので頭が理解を拒んでしまう側面があるかなと思いますが、このように一つひとつ見ていくとそれほど難しいシステムではないことが理解いただけたのではないでしょうか。

皆様もFunnelを活用して、ぜひ快適なデータ分析ライフをお過ごしください。

この記事にリアクションしてみませんか?

  • 分かりやすい (3)
  • 問題が解決した (0)
評価ありがとうございます! 励みになります!

田代 雅樹

Dr.Sum
プロフィールへ >

2018年にウイングアーク1st入社。入社後はBIソリューション/アプリケーションの技術サポート及びプリセールス業務に従事する傍ら、小売系企業のSCM改革/ML需要予測PJや自治体向けのデータ活用基盤サービスの構築PJのPL/PMを担当。既存顧客、新規顧客の両方に向き合いながら顧客の持つ課題や成功に対する理解を深めています。

Related article

Related article関連記事

Pick up

Pick upおすすめ記事

【脱Excel】MotionBoardの入力機能で業務アプリをつくる

公開:2024.08.05
更新:2024.08.05

分かりやすい

2

解決した

0
  • データ入力
  • デザイン
  • コンテナ

MotionBoard

【まとめ】SVF Cloud帳票をinvoiceAgentに連携する方法

公開:2024.04.18
更新:2024.08.07

分かりやすい

2

解決した

2
  • 帳票作成・出力
  • システム連携
  • 電帳法
  • 文書定義
  • 処理定義

SVF

Dr.Sum Copilotをインストールしてみた【OpenAI】

公開:2024.04.05
更新:2024.04.18

分かりやすい

2

解決した

0
  • Copilot

Dr.Sum

Ranking

Rankingランキング

1

【IoTデータを可視化しよう】Dr.Sum Data Funnelとは?

公開:2024.06.26
更新:2024.06.26

分かりやすい

4

解決した

0
  • データ取り込み
  • データ加工

Dr.Sum

2

【MQTTってなに?】Dr.Sum Data Funnelで使える通信方式

公開:2024.06.28
更新:2024.07.01

分かりやすい

3

解決した

0
  • データ取り込み
  • データ加工
  • 外部接続

Dr.Sum

Info

Information

ウイングアーク1stからのお知らせ

int(59)