Thingsboard / 基本的な使い方
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