TECH BLOG

MENU

オンプレクラウド

MotionBoard

MotionBoard

はじめに

本記事ではMotionBoardのリアルタイム連携の通信方式の1つであるMQTTについて解説します。

また、MQTT通信によるセンサーデータを送信できるサンプルコードや、MotionBoardの設定方法を紹介し、実際に動作確認できるサンプルボードを作成します。

 

MotionBoard のリアルタイム連携とは

MotionBoardはCSV/Excel、データベース、各種サービスに取り込まれた様々なデータを連携し可視化することができます。

一方でCSV/Excelやデータベースに保持されるデータは、ファイルへの書き込みやデータベースへのデータ投入が必要なため、データが生成されてからMotionBoardで表示を行うまでにタイムラグが生じます。

特にIoTセンサーから生成されるデータは、秒単位で生成されるなどデータ数が多いことに加え、素早くデータを確認したいケースがあります。例えば、製造業系の会社で生産ラインにセンサーを取り付けて、生産ラインの状態を常時監視したいケースなどです。

このようなケースに備えて、MotionBoardではファイルやデータベースを経由することなく、直接データを受け取れる“リアルタイム連携”の仕組みが用意されています。

リアルタイム連携を利用いただく場合、それぞれ以下のご契約が必要となります。

 

リアルタイム連携の方式

MotionBoardでリアルタイム連携を行うにあたり、API型での連携の場合、センサーが取り付けられたデバイスなどからMotionBoardへデータを送信する必要があります。
連携データの送信方式はRESTとMQTTのいずれか2つから選択可能です。
RESTとMQTT にはそれぞれ以下の特徴があり、利用シーンを想定して選定することが望まれます。

MQTT REST
同期/非同期 非同期 同期
送受信の方式 Publish/Subscribe Request/Response
送信データの形式 主に2次元配列 JSON/XML/テキストなど多様
1回の送信データ量
データの送信頻度
スケーラビリティー*1
使用例 IoT Webサービス、API

*1: 後から送信or受信する端末を増やす上での容易性

RESTとMQTTの双方でそれぞれメリットがありますが、今回は逐次生成される大量データを都度送信するケースを想定し、MQTTでの連携方法について説明します。

 

MQTTの詳細については、以下記事をご確認ください。

 

また、RESTでのリアルタイム連携方法は以下記事を参考ください。

 

MQTT通信の構成 と 設定の流れ

MQTTの特徴として、データを発信する役割のPublisher、データを受信する役割のSubscriber、これら2者間のデータを仲介する役割のMessage Broker(以下 Broker)が存在します。

今回Publisherはお手持ちのPC(以降 ローカルPC)を利用する前程とし、SubscriberはMotionBoard Cloudを利用する前程とします。

そのため、リアルタイム連携を行うにあたり

の構成とし、順に設定方法を説明します。

 

ご準備いただくもの

Publisher 環境の準備 (ローカルPCでの設定)

今回のPublisherの設定では 動作確認用スクリプトとしてNode.js(およびnpm)を利用します。Node.jsのインストール方法は別途Webページを参照ください。

Broker 環境の準備・設定 (別途用意するサーバでの設定)

Publisherと合わせて、Brokerの動作確認用スクリプトでもNode.js(およびnpm)を利用します。

また、Broker用の環境としてAWS EC2等で外部アクセス可能なサーバを用意することを前提としています。EC2利用方法等は別途Webページを参照ください。

Subscriberの設定 (MotionBoard Cloudでの設定)

今回SubscriberとしてMotionBoard Cloudを利用します。

 

完成ボードイメージ

今回はローカルPCが温度センサーがついたIoTデバイスと仮定し、送信した1秒間隔の温度ダミーデータを、折れ線チャートで1秒毎に更新/表示するボードを作成していきます。

 

設定方法

設定➀: Publisher側

■ Publisherロジックの準備

ローカルPCにNode.jsをインストールし、特定のディレクトリに、1秒間隔でデータをPublishするスクリプトファイルpublisher.jsを作成します。

● publisher.js

const mqtt = require('mqtt');
const client = mqtt.connect('mqtt://<Broker用サーバのIP>');

client.on('connect', () => console.log('publisher.connected.'));

let payload = {
    "protocol": "3.1.1",
    "loginId": "<ログインID>",
    "name": "<ログイン名>",
    "template": "<テンプレート名>",
    "version": "v.3.1.1",
    "retry": "true",
    "status":
        [
            {
                "time": null,
                "enabled": "true",
                "values":
                    [
                        { "name": "送信メッセージ", "type": "2", "value": null },
                        { "name": "ダミー温度データ", "type": "3", "value": null }
                    ]
            }
        ],
    "msg":
        {
            "send": null,
            "next": "100",
            "read": "1000"
        }
}


setInterval(() => {
    const msectime = Date.now().toString();
    payload.status[0].time = msectime
    payload.status[0].values[0].value = (new Date).toString() + 'に送信データ'
    const min = 15
    const max = 30
    payload.status[0].values[1].value = Math.random() * (max - min) + min
   
    payload.msg.send = '新規に送りました'

    client.publish('<トピック名>', JSON.stringify(payload));
    console.log('publisher.publish:', msectime);
}, 1000);

<ログインID>、<ログイン名>には、API権限が付与されたユーザ *1 の情報を入力します。

*1: 機能の権限の種類 > WEBAPI のロールを付与されたユーザ

MotionBoard Cloud マニュアル:機能の権限の種類

 

<テンプレート名>、<トピック名>は任意で設定します。後ほど“設定➂: MotionBoard (Subscriber)側”でも利用します。

● 設定例

ファイル作成後は、以下コマンドでMQTT用のソフトウェア”mqtt”をインストールしてください。

npm install mqtt 

 

設定➁: Broker側

■ Brokerロジックの準備

Node.jsインストール済みのサーバ上で、以下コマンドを入力し、MQTT Brokerサーバを作成していきます。
まずは、WebサーバにあたるExpressをインストールします。express –versionでバージョンが表示されればインストール完了です。

npm install express --save
npm install express-generator -g
express --version

次に以下コマンドでNode.jsでのWebサーバを作成します。今回の例では“mqtt_test“のフォルダ名で作成しています。併せて、MQTTのブローカを動かすためのソフトウェア“aedes”、“net”をインストールします。

express mqtt_test —view=pug
cd mqtt_test
npm install

npm install aedes net

“mqtt_test“ディレクトリ上にブローカー用スクリプトファイルbroker.jsを作成します。
● broker.js

// モジュールの定義
const aedes = require('aedes')()
const server = require('net').createServer(aedes.handle)

//MQTTブローカーのポート
const port = 1883

// クライアントエラーの場合
aedes.on('clientError', function (client, err) {
    console.log('client error', client.id, err.message, err.stack)
})

// 接続エラーの場合
aedes.on('connectionError', function (client, err) {
    console.log('client error', client, err.message, err.stack)
})

// publishされた場合
aedes.on('publish', function (packet, client) {
    if (client) {
        console.log('message from client', client.id)
    }
})

// 新しいsubscriberが接続した場合
aedes.on('subscribe', function (subscriptions, client) {
    if (client) {
        console.log('subscribe from client', subscriptions, client.id)
    }
})

// 新しいクライアントが接続した場合
aedes.on('client', function (client) {
    console.log('new client', client.id)
})

// MQTTブローカー起動
server.listen(port, function () {
    console.log('server listening on port', port)
})

次章の“設定➂”に向け、以下コマンドでBrokerサーバーを起動しておきます。

cd mqtt_test
node broker.js

 

設定➂: MotionBoard (Subscriber)側

■ リアルタイム連携の設定

    MotionBoard側でリアルタイム連携の設定を行っていきます。

    ・テンプレートの作成

    [管理]-[システム設定]-[接続/認証]-[リアルタイム連携]をクリックします。


    ・テンプレート名称の設定

    テンプレート選択 項目の[+]ボタンをクリックし、任意のテンプレート名を入力後、OKをクリックします。


    ・テンプレートの詳細設定

    [全般]タブで以下入力し、[保存]をクリックします。


    ・連携する項目の設定

    [ステータス]タブで[新規作成]をクリックし、連携したい項目の名称([ステータス名])と、[データ型]を設定します。
    今回は“設定➀“ > publisher.js で作成のとおり、以下2点のステータスを設定します。

    設定後[保存]をクリックします。

    ■ チャートの配置

    ツールバーの[チャート]をクリックしてダッシュボードに配置して、任意の名称でデータソースを作成し、
    [接続先]のドロップダウンリストから、[system datasources]-[Realtime]-[StatusHistory]-[<テンプレート名>]を選択します。

    データソースエディタで[行項目]に[datetime]項目、[集計項目]に[ダミー温度データ]項目を配置し、チャートの種類は[折れ線]を選択します。

    [分析]-[リアルタイム分析]を選択し*1、以下で設定の上 [OK]をクリックします。

    *1: [ドリルダウン/ドリルスルーが設定されているため、リアルタイム分析を設定できません。ドリルダウン/ドリルスルーの設定画面を開きますか?]とダイアログが表示される場合は、[はい]を選択し、[ドリルダウンしない][ドリルスルーしない]をそれぞれ選択してください。

    データソースエディタの画面で[OK]をクリックし、ボード上にチャートの配置を確認の後、ボードを保存します。

    動作確認

    Publisherからデータを送信すると、ダッシュボード上のチャートで連携データが反映されることを確認します。

    “設定➀”で作成したディレクトリ上で、以下コマンドでデータを送信処理を実行します。

    node publisher.js

    MotionBoard上で作成したダッシュボードを更新すると、送信メッセージのデータがリアルタイムで表示されることが確認できます。

    さいごに

    今回はMQTTを利用して高頻度なデータをMotionBoardでリアルタイムに表示する方法についてご紹介しました。物理センサーなど、大量かつ高頻度なデータの可視化を行いたいシーンで是非ご活用ください。

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

    • 分かりやすい (0)
    • 問題が解決した (0)
    プロフィールへ

    佐藤 雄哉

    IT業界でシステムの開発、プリ/ポストセールス、品質管理業務を経験した後、2023年ウイングアーク1stに入社。入社後はBIソリューション/アプリケーションのプリセールス業務に従事。Dr.Sum及びMotionBoardを中心とした役立つ情報を発信していきます!

    Related article

    Related article関連記事

    Pick up

    Pick upおすすめ記事

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

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

    2024.08.05

    MotionBoard

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

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

    2024.04.18

    SVF

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

    • #Copilot

    2024.04.05

    Dr.Sum

    Ranking

    Rankingランキング

    1

    棒グラフを大きい順番に並び替えたい!(ソートしたい)

    • #デザイン
    • #グラフ
    • #集計表

    2019.06.15

    MotionBoard

    2

    経過時間を時:分:秒で時刻表示したい!【320秒→05:20】

    • #グラフ

    2022.08.02

    MotionBoard

    3

    カスタム項目の書き方 よく使う関数からIfまで

    • #データ加工

    2023.07.28

    MotionBoard

    Info

    Information

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

    int(57)