ThingsBoardを使ってIoTゲートウェイデバイスにリモートアクセスする方法

ThingsBoardはオープンソースのIoTプラットフォームです。
デバイス管理やデータ収集、処理、可視化が可能です。
オープンソースのCommunity Editionの他に商用サービスのProfessional Editionもあります。

https://thingsboard.io/

機能はかなり豊富は印象です。リモートアクセス機能も提供されていますので紹介します。

目次

目次を開く

構成

サーバー側のプラットフォームとデバイス側のゲートウェイソフトを使用します。

  • サーバー
    ThingsBoard Community Edition
  • デバイス
    IoT Gateway

デバイス側はIoT Gatewayを使用する必要はなく、HTTPやMQTTを使って自前で開発することも可能です。

今回はお試しなので、ThingsBoard Community EditionIoT 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にアクセスし、ログイン画面が表示されます。

image.png

サーバー側の設定

ログイン

デフォルトで用意されているユーザーは以下のとおりです。

権限 メールアドレス パスワード
System Administrator [email protected] sysadmin
Tenant Administrator [email protected] tenant
Customer User [email protected] customer

System Administratorでログインします。

image.png

機能もりだくさん!!

テナント作成

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

image.png

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

image.png

テナントが作成できました

テナント管理者の作成

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

image.png

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

image.png

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

image.png

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

192.168.1.113_8080_login(1280x720) (7).png

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

image.png

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

image.png

テナント管理者が作成できました。

デバイスを登録

端末管理のデバイスボタンをクリックします。

image.png

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

image.png

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

image.png

ゲートウェイのセットアップにこのトークンが必要です。

以上で、クラウド側の設定は一通り完了です。

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アドレスに変更
  • remoteShelltrueに変更
  • 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サーバーに接続できました。

リモートアクセスの準備

リモートアクセスを行う方法はサーバー側の画面で行います。
メニューのダッシュボードをクリックします。
+ボタンをクリック、新しいダッシュボードを作成をクリックします。

image.png

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

image.png

ダッシュボードが作成されます。

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

image.png

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

image.png

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

image.png

Control widgetsを選択します。

image.png

RPC remote shellを選択します。

image.png

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

image.png

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

image.png

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

image.png

これで準備は完了です。

リモートアクセスの実行

ここまでできたら、もうウィジェット上でターミナルが表示されていると思います。

image.png

フルスクリーンに拡大ボタンをクリックすると、全画面で表示されます。

image.png

今回はIoT Gatewayがコンテナ内で実行されているため、Raspberry Piホストの操作はできません

image.png

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