🦔

Thingsboard / 基本的な使い方

2024/09/25に公開

Overview

Thingsboardの基本的な概念・使い方について解説します。
Thingsboardにデータを投入する ~ データの可視化までの設定について触れます。

触れないこと

Firmwareの書き方。Firmware書けなかったり、マイコンがなくてもPC一台あれば理解はできるはずです。

基本的な概念

Thingsboardの基本的な概念(というか機能の概要)についてお話しします。

Device

その名の通りDeviceを表します。例えば、温湿度センサーを開発して5個ある部屋それぞれの温湿度を計測しようと思ったら、5個分のDeviceを作成するイメージです。

Device Profile

Deviceを束ねる要素です。基本的には同じ機能をもつDeviceは同じDevice Profileに帰属するようにします。
温湿度センサーのDeviceとGPSを計測するDeviceは別のDevice Profileにする、いった感じです。

Rule Chain

Deviceから受け取ったデータをThingsboard内部で処理する機能です。Device Profileと一対一で紐づけます。
以下の図のように、ノードをつなぎ合わせることで処理を定義します。

Database

Thingsboard内のデータベースです。Dashboardでデータの可視化をする場合、ここにデータを格納する必要があります。

Dashboard

Databaseに格納されたデータを表示します。リアルタイムにデータが更新されるよう設定することができます。可視化のためのWidgetは、折れ線グラフ・棒グラフ・カード・地図表示などなどかなり豊富です。

実践してみる

データの投入から可視化まで実際にやってみます。

Device Profile

まずはDevice Profileを作ります。画像の手順にしたがって作成します。
Rule Chainを紐づける必要がありますが、とりあえずデフォルトで用意されているRoot Rule Chainを選択します。

Device

Deviceを作成し、さきほど作成したDevice Profileに紐づけます。

データを投入してDatabaseに反映されることを確認する

Deviceを作成すると以下のような画面に遷移します。 Execute the following command の内容をコピーして実行すると、Stateに tempeature: 25 が反映されます。
Thingsboard内のDatabaseにデータが反映されたことを表していますが、さきほどDevice Profile作成時に紐づけたRoot Rule Chainの中でその処理が含まれているためです。

3秒ごとにデータをUploadする

このあとDashboardの設定を行いますが、定期的にデータをアップロードしないとおもしろいものは作れないので、これを仕込みます。

以下のpythonのscriptで3秒ごとにtemperatureにランダムな数字を持たせてThingsboardにデータをアップロードできます。 access_token には作成したDeviceのAccess Tokenを入力してください。
Google Colaboratory

access_token = "" #@param {type:"string"}

import time
import random
import requests

headers = {
    'Content-Type': 'application/json',
}

while True:
  data = dict(temperature=25 + random.random())
  response = requests.post(f'http://thingsboard.cloud/api/v1/{access_token}/telemetry', headers=headers, json=data)
  response.raise_for_status()
  time.sleep(3)

以下でAccess Tokenを取得できます。

仕込み終わったらDeviceの Latest telemetryタブで3秒ごとに値が更新されることを確認してください。

Dashboard

次にDashboardを作成します。以下の手順でDashboardを新規作成します。

作成できたらDashboardを開いてWidgetを追加します。

Chartsを選びます。

Line Chatを選びます。

Widgetの設定画面が表示されます。Deviceを選択し、temperatureのDecimals(小数点第何位までを表示するか)を設定します。デフォルトでtemperatureがSeriesに設定されているはずです。

SaveするとWidgetがDashboardに反映され、グラフがリアルタイムに更新されることが確認できます。

Rule Chain

ここまででデータの投入から可視化までできたことになりますが、Rule ChainをデフォルトのRoot Rule Chainを使うのではなく自作してみます。

画像の手順でRule Chainを新規作成します。

Rule Chainを開くと input ノードのみが表示されています。これがRule Chainの始点になりますが、それ以降何のノードも繋がっていないためThingsboardはデータを受け取るだけで、Databaseへの保存もされませんし、当然Dashboardでの可視化もできません。
このRule Chainで受け取ったデータをDatabaseに保存するようにします。加えて、受け取った temperature の値に5を加算する加工も加えてみます。

最終的には以下の画像のようになります。

temperatureに5を加算する

ノード一覧から Transformation > scriptを選択し、ドラッグ&ドロップでノードを追加します。

ノードを開き、次の画像のように設定します。

msg.temperature = msg.temperature + 5;
return {msg: msg, metadata: metadata, msgType: msgType};

Databaseに保存する

同様にSave timeseries ノードも追加します。

Default TTL in seconds には 3600 を設定しておきます。Thingsboard内の保持期限を表し、3600(秒)= 1時間です。1時間後にデータが消されてしまうので、その後はダッシュボードでもデータを確認できなくなります。

scriptノードから Save timeseriesノードを接続する際、以下のような設定画面が表示されます。Success or Failure の2択になっていますが、ここでは Success を選択します。

これは接続元の処理が Success なのか Failure なのかで条件分岐を行い、 Successつまりは処理が正常終了した場合に次のノードに処理を進めることを表します。

設定が終わったら保存して完了です。

Device ProfileのRule Chain変更

Rule Chainが完成したので、Device ProfileのRule Chainを変更します。
さきほど作成したDevice Profileの設定を開いて変更します。

確認

DeviceのLatest Telemetryタブで確認できる値が30前後の値になっていて、ダッシュボードも30前後の値で更新されるようになっています。

まとめ

以上がThingsboardの基本的な使い方になります。
おさらいすると以下の流れです。(実際の作業の流れとは異なりますが)

  • Deviceを作成する
  • 同じ機能を有するDeviceをDevice Profileでまとめる
  • Rule Chainを作成して、Deviceから受け取ったデータをDatabaseに保存する。必要であればデータを加工する
  • Dashboardで、Databaseに保存したデータを可視化する

これだけ抑えれば「とりあえず使ってみる」だったり、実験的にIoTデバイスのデータの可視化する目的であれば十分かと思います。

ぜひThingsboardを使ってみてください。

Discussion