TECH BLOG

MENU

オンプレクラウド

MotionBoard

MotionBoard

MotionBoardにはセンサーなどから発生するリアルタイムデータを受けとり、蓄積するリアルタイム連携機能があります。下記の記事では、MotionBoardに対してデータを送るWeb APIの使い方及び可視化の方法について、ブラウザから手動で実施する方法を紹介しました。

 

本記事では、Windows環境でバッチプログラムおよびPythonからMotionBoardに対してリアルタイムデータを送信する方法を紹介していきます。リアルタイムにグラフが動く様子を見るのも面白いですし、それを手軽に実現できるとよいですね!

実際の機器からは数秒~数分間隔でデータが送られてきます。リアルタイムデータは件数も膨らみがちであり、MotionBoardサーバーが運用に耐えられるかを事前にテストしたいケースもありますよね。その一方、テスト時点で想定した数分のデバイスを用意・設定するのは難しいことも多いです。

そういった場合、センサーデータを送る部分をプログラムで代用することで、より少ないコストでサーバーへの負荷を検証することが可能です。また、プログラムであればリアルに即した形でデータを生成し、かつ高頻度に送信することができるため人的負荷も大きく下げることができます。

 

※ リアルタイム連携機能には専用のライセンスが必要です。ご利用の環境を確認ください。

 

事前準備

今回は下記の記事で作成したテンプレートをもとに、データを送るプログラムを紹介するので「設定方法」章-「テンプレートの作成」節まで実施してください。

 

バッチプログラムで送信

本記事ではWindows環境で簡単に試せるよう、バッチプログラムでご紹介します。メモ帳などで下記スクリプトを貼り付けて「*****.bat」形式で保存します(*****は任意、例では「post.bat」)。実際にWeb APIをリクエストする部分は、cURLというコマンドを使っています。

@echo off
set Template=WebAPI_POST

:roop
set sample_string=abcdefghi
set sample_num=%RANDOM%
set sample_bool=true

curl -X POST -d "Template=%Template%" -d "id=1" -d "sample_string=%sample_string%" -d "sample_num=%sample_num%" -d "sample_bool=%sample_bool%" "http://localhost:8787/motionboard/rest/tracking/data/upload/simple" 

echo send data and wait 5 sec. 
timeout 5

goto :roop

 

スクリプトではパラメータ「sample_num」に対してランダムな値を指定し5秒間隔でリクエストを行っています。cURLを使ったWeb APIのリクエストについては下記記事をご覧ください。

 

その他のパラメータについてはマニュアルを参照ください。cURLコマンドの引数として「-d “パラメータ名=値”」の形式で追加すればOKです。

 

MotionBoardマニュアル:位置情報の送信(POSTリクエスト版)

 

では、保存したバッチファイルをコマンドプロンプトもしくはPower Shellで実行しましょう!バッチファイルを保存したフォルダに移動し、「.\*****.bat」で実行します。

最後にMotionBoardでデータを確認してみます。「事前準備」章で紹介した記事の「設定方法」章-「データの確認」節と同様に、[system Datasources]-[Realtime]-[LocationAndStatus]-[WebAPI_POST]のデータを描画してみましょう。指定した間隔(5秒)ごとにデータが送られていることが確認できますね!

 

【番外編】Pythonから送信

Pythonから送信する方法も紹介します。Pythonに限らず、現実に即した疑似データを送りたい場合は、担当者にとって扱いやすいプログラム言語で実施しましょう。「現実に即した疑似データを送る(作る)」というのは例えば、気温のように0~30前後の値を周期的に送る、ノイズを考慮してランダム値を加えるといった処理です。

import requests
import time, string, random

###### user settings ######
URL = "http://localhost:8787/motionboard/rest/tracking/data/upload/simple"
INTERVAL = 1 # データを送る間隔(秒)

STRING_LENGTH = 10 # ランダムに生成する文字列の長さ
NUM_MIN = 0 # ランダムに生成する整数値の最小値
NUM_MAX = 1000000 # ランダムに生成する整数値の最大値
###########################

params = {
    "Template" : "WebAPI_POST",
    "id" : 1,
    "sample_string" : None,
    "sample_num" : None,
    "sample_bool" : True
}

def gen_random_string(length: int) -> str:
   randlst = [random.choice(string.ascii_letters + string.digits) for i in range(length)]
   return ''.join(randlst)

def main():
    while(True):
        params["sample_string"] = gen_random_string(STRING_LENGTH)
        params["sample_num"] = random.randint(NUM_MIN, NUM_MAX)
        params["sample_bool"] = random.choice([True, False])
       
        print(params)
       
        res = requests.post(url = URL, params=params)
        if(res.status_code == 200):
            print(f"{res.status_code}: Seccessfully posted. ")
        else:
            print(f"{res.status_code}: Error. ")
       
        time.sleep(INTERVAL)
       
if "__main__" == __name__:
    main()

「user settings」と書かれた箇所のURLは、環境に合わせて変更ください。

上記のプログラムを実行すると、ランダムなデータを数秒間隔でMotionBoardへ送信できていることが確認できますね!

 

さいごに

本記事では、バッチおよびPythonからMotionBoardに対してリアルタイムデータを送信する方法を紹介しました。リアルタイムデータは高頻度に大量のデータを送る特性上、事前にサーバーの負荷検証を行いたいことも多いです。そんなとき、デバイスの代用としてプログラムで実施することも可能なので、検討してみてくださいね!

また、複数件のデータをJSONファイルとしてリアルタイムにMotionBoardへ送る方法もありますので、興味があればぜひご覧ください。

 

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

  • 分かりやすい (0)
  • 問題が解決した (0)
評価いただいてありがとうございます!
プロフィールへ

宇根 昌和

新卒でウイングアーク1stへ入社、プリセールス活動を行っています。Pythonをベースに様々なツールからデータをDr.Sumへ集約しMotionBoardで可視化する仕組みを作ったり、Web APIを使ったデータ蓄積ノウハウをテーマにイベント登壇したりしています。Dr.Sum及びMotionBoardを中心とした役立つ情報を発信していきます!

Related article

Related article関連記事

Pick up

Pick upおすすめ記事

特定の文字列で分割して階層構造をつくりたい!~DS Scriptで分割する~1

  • #データ加工
  • #DS Script

2023.07.17

Dr.Sum

DS Scriptで必要なテーブルだけ再構築(リビルド)をしよう

  • #DS Script

2023.07.06

Dr.Sum

「データポイント数が、しきい値をオーバーしました」というエラーの解決方法【データベースで処理をしよう】

  • #データ加工

2023.06.13

MotionBoard

Ranking

Rankingランキング

1

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

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

2019.06.15

MotionBoard

2

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

  • #データ加工

2023.07.28

MotionBoard

3

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

  • #グラフ

2022.08.02

MotionBoard

Info

Information

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