ThingsBoardはオープンソースのIoTプラットフォームです。 デバイス管理やデータ収集、処理、可視化が可能です。 オープンソースのCommunity Editionの他に商用サービスのProfessional Editionもあります。
機能はかなり豊富は印象です。リモートアクセス機能も提供されていますので紹介します。
構成
サーバー側のプラットフォームとデバイス側のゲートウェイソフトを使用します。
- サーバー
ThingsBoard Community Edition - デバイス
IoT Gateway
デバイス側はIoT Gatewayを使用する必要はなく、HTTPやMQTTを使って自前で開発することも可能です。
今回はお試しなので、ThingsBoard Community EditionとIoT Gatewayを単一のRaspberry Pi上で構築してみます。
なお、ディレクトリ構成はこのようにしています。
.
├── device
│ └── docker-compose.yaml
└── server
└── docker-compose.yaml
2 directories, 2 files
ThingsBoard Community Editionの構築
インストール手順に従いインストールします。今回はDockerを使用して構築します。
公式サイトの手順を少しカスタマイズしています
1. 永続化ディレクトリの作成
データとログ用のディレクトリを作成し、Docker内で使用されるユーザーに権限を合わせます。
mkdir -p .mytb-data .mytb-logs
sudo chown -R 799:799 .mytb-*
2. docker-compose.yamlの作成
docker-compose.yamlを作成します。
version: '2.2'
services:
mytb:
image: "thingsboard/tb-postgres"
ports:
- "8080:9090"
- "1883:1883"
- "7070:7070"
- "5683-5688:5683-5688/udp"
environment:
TB_QUEUE_TYPE: in-memory
volumes:
- ./.mytb-data:/data
- ./.mytb-logs:/var/log/thingsboard
3. 起動する
起動します。
docker compose up
起動が完了するまで数分かかります。
起動後はブラウザでhttp://[IPアドレス]:8080にアクセスし、ログイン画面が表示されます。

サーバー側の設定
ログイン
デフォルトで用意されているユーザーは以下のとおりです。
| 権限 | メールアドレス | パスワード |
|---|---|---|
| System Administrator | [email protected] | sysadmin |
| Tenant Administrator | [email protected] | tenant |
| Customer User | [email protected] | customer |
System Administratorでログインします。

機能もりだくさん!!
テナント作成
初期状態でTenantというテナントが作成されていますが、新しくテナントを作成します。
テナント管理ボタンをクリックします。

+ボタンをクリックし、テナントを作成します。タイトルだけ入力すればOKです。

テナントが作成できました
テナント管理者の作成
作成したテナントをクリックし、テナント管理者の管理をクリックします。

+ボタンをクリックします。

メールアドレスを入力し、追加ボタンをクリックします。

するとアクティベーションリンクが表示されるのでURLをコピーします。

コピーしたURLにアクセスすると、テナント管理者のパスワード作成画面が表示されます。

パスワードを入力すると、テナント管理者としてログインされます。

テナント管理者が作成できました。
デバイスを登録
端末管理のデバイスボタンをクリックします。

+ボタンをクリック、新しいデバイスを追加するをクリックします。
名を入力し、ゲートウェイですにチェックを入れて追加をクリックします。

追加したデバイスを選択し、コピーアクセストークンボタンをクリックします。

ゲートウェイのセットアップにこのトークンが必要です。
以上で、クラウド側の設定は一通り完了です。
IoT Gatewayの構築
続いて、IoT Gatewayを構築します。 こちらもインストール手順に従ってインストールを進めます。
インストール手順はdockerコマンドで起動するスタイルですが、docker composeで起動する形に変更しました
1. docker-compose.yamlの作成
docker-compose.yamlを作成します。
version: '2.2'
services:
tb-gateway:
image: "thingsboard/tb-gateway"
volumes:
- ./.tb-gateway/logs:/thingsboard_gateway/logs
- ./.tb-gateway/extensions:/thingsboard_gateway/extensions
- ./.tb-gateway/config:/thingsboard_gateway/config
2. 一旦起動する
docker compose up
起動すると、.tb-gateway/config``.tb-gateway/extensions``.tb-gateway/logsが作成されます。
また、configディレクトリ内にはデフォルトの設定ファイルが作成されます。
設定が必要なので、起動が完了した後、Ctrl+Cで終了します。
3. 設定ファイルを変更する
.tb-gateway/config/tb_gateway.yamlに設定を行います。
設定するのは以下のとおりです。
- hostをRaspberry PiのIPアドレスに変更
remoteShellをtrueに変更security.accessTokenに前の手順で取得したトークンに変更connectors以降をすべてコメントアウト
編集にはroot権限が必要ですので、sudo nano .tb-gateway/config/tb_gateway.yamlで編集します。
IoT Gatewayを起動
設定が完了したら再度起動します。
docker compose up
うまくサーバーに接続できると|INFO| - [tb_device_mqtt.py] - tb_device_mqtt - _on_connect - 139 - connection SUCCESS"とログが出力されます。
IoT GatewayをThingsBoardサーバーに接続できました。
リモートアクセスの準備
リモートアクセスを行う方法はサーバー側の画面で行います。
メニューのダッシュボードをクリックします。
+ボタンをクリック、新しいダッシュボードを作成をクリックします。

タイトルを入力し追加ボタンをクリックします。

ダッシュボードが作成されます。
作成されたダッシュボードを選択し、ダッシュボードを開くをクリックします。

ウィジェットを追加するので編集モードに入るボタン(鉛筆アイコン)をクリックします。

新しいウィジェットを追加ボタンをクリックします。

Control widgetsを選択します。

RPC remote shellを選択します。

エンティティエイリアスが必要なので、入力欄を選択した際に表示される新しいものを作成してください!をクリックします。

エイリアス名を入力、フィルタタイプを単一のエンティティ、タイプをデバイス、デバイスを作成した前の手順で作成済みのデバイスを選択します。

右下の変更を適用するボタンをクリックし、編集モードを終了します。

これで準備は完了です。
リモートアクセスの実行
ここまでできたら、もうウィジェット上でターミナルが表示されていると思います。

フルスクリーンに拡大ボタンをクリックすると、全画面で表示されます。
今回はIoT Gatewayがコンテナ内で実行されているため、Raspberry Piホストの操作はできません

リモートアクセスができました。