LoginSignup
0
1

ThingsBoardをDockerでインストール

Last updated at Posted at 2023-12-29

前回の投稿からの続きです。読んでなくても大丈夫ですが、読んであると、より理解しやすいです。
ThingsBoardは、IoTを扱うためのプラットフォームです。Androidのスマホをもってあちこち歩いているときに、バックグラウンドで位置情報を取得して、このThingsBoardで位置情報を保存・可視化することが目的です。

(参考)
Androidのフォアグラウンドサービスで位置情報を取得する
CasaOSで自分NASを構築する
Nginx Proxy Managerを使ってワイルドカードSSL証明書を作成する

CasaOS上から、ThingsBoardをインストール

CasaOS上からDockerを使ってThingsBoardをインストールします。

まずは、サーバPC上で、事前にデータをホスト側に保存するためのフォルダを作成します。

> mkdir /opt/thingsboard
> cd /opt/thingsboard
> mkdir {data,logs}
> chown 799:799 {data,logs}

CasaOSをブラウザで開き、Appの右端にある+ボタンをクリックして、Install a customized appを選択します。

image.png

右上のImportボタンをクリックします。

image.png

image.png

以下のコピペして、Submitボタンをクリックします。

version: '3.0'
name: thngsboard
services:
  mytb:
    restart: always
    image: "thingsboard/tb-postgres"
    ports:
      - "8080:8080"
      - "1883:1883"
      - "7070:7070"
      - "5683-5688:5683-5688/udp"
    environment:
      - HTTP_BIND_PORT=8080
      - TB_QUEUE_TYPE=in-memory
    volumes:
      - /opt/thingsboard/data:/data
      - /opt/thingsboard/logs:/var/log/thingsboard
x-casaos:
  port_map: "8080"
  title:
    custom: ThingsBoard

そのまま、Installボタンを押します。

image.png

インストールが完了すると、ThingsBoardのアイコンができています。

image.png

ThingsBoardアイコンをクリックします。
(最初はThingsBoardの起動まで時間がかかるかと思います)

image.png

初期パスワードは以下です。まずは、System Administratorでログインします。

image.png

左側のナビゲーションメニューからテナントを選択します。
右上の+ボタンを押してテナントを作成しましょう。

image.png

適当に、MyTenantとしてみました。国はJapanですね。

image.png

出来上がったMyTenantの右側にあるテナント管理者の管理のアイコンをクリックします。

image.png

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

image.png

Eメールは適当に、「test@sample.work」としてみました。

image.png

作成したテナントに作成したEメールでログインするためのURLが生成されますので、ブラウザで開きます。

image.png

任意のパスワードを設定すれば、ログインできます。

image.png

image.png

これでいったんThingsBoardの初期設定が完了です。

デバイスを登録する

位置情報をトレースするデバイスを登録します。
ナビゲーションメニューからデバイスをクリックし、右上の+ボタンを押して、「新しいデバイスを追加する」を選択します。

image.png

デバイス名は適当に「Walking」にしておきました。

image.png

アクセストークンが払い出されましたので、メモっておきます。

image.png

さっそく位置情報を登録することができます。

image.png

curlでの実行方法が示されていますが、仮想の位置情報をアップするように少し変えてます。

> curl -v -X POST http://【サーバPCのIPアドレス】:8080/api/v1/【アクセストークン】/telemetry --header Content-Type:application/json --data "{lat:35.45270900995957,lng:139.64289287132883}"

【サーバPCのIPアドレス】と【アクセストークン】のところを各自に合わせてください。

image.png

ちゃんとStateがActiveになって仮想的な位置情報が登録されたようです。

ダッシュボードを作成する

位置情報を登録できたので、地図上に表示されるようにダッシュボードを作成します。
ナビゲーションメニューからダッシュボードを選択し、右上の+ボタンをクリックして、「新しいダッシュボードを作成する」を選択します。

image.png

名前は適当に「マイダッシュボード」にしてみました。

image.png

「新しいウィジェットを追加」をクリックします。

image.png

Mapsを選択します。

image.png

Trip Animationsを選択します。

image.png

タイプにデバイス、デバイスにWalkingを選択します。
Timeseries data keysには、とりあえずlatとlngを選択します。

image.png

さらにそれぞれの鉛筆アイコンをクリックして、ラベルをそれぞれ「latitude」「longitude」にします。

image.png

「セーブ」ボタンをクリックします。

image.png

時計のアイコンをクリックして、最終の1 day等に選択します。

image.png

正しく位置情報が表示されたようです。

image.png

最後に「セーブ」ボタンをクリックして完了です。

外部からアクセスできるようにする

今はイントラネットからしかアクセスできない状態ですが、以前Nginx Proxy Managerをセットアップしましたので、このThingsBoardもアクセスできるようにします。

(参考)
Nginx Proxy Managerを使ってワイルドカードSSL証明書を作成する

AWS Route53を開きます。

image.png

「レコードを作成」ボタンをクリックします。

image.png

レコード名に「thingsboard」と入れて作成します。値には、インターネットルータのWAN側IPアドレスを入力します。
これで、thingsboard.sample.workでアクセスできるようになるはずです。

Nginx Proxy Managerを開きます。Proxy Hostsを選択します。
そして、「Add Proxy Host」ボタンをクリックします。

image.png

まずは、Detailsタブにおいて、以下を入力します。

Domain Names:thingsboard.sample.work
Forwarding Hostname/IP:サーバPCのIPアドレス
Forwarding Port:8080
Websockets Support:On

image.png

SSLタブを選択します。
SSL Certificateとして、*.sample.work を選択島sう。
最後に「Save」ボタンをクリックします。

image.png

これで、以下のURLからアクセスできるようになっているはずです。

 https://thingsboard.sample.work

image.png

Androidアプリから位置情報をアップする

以前、バックグラウンドで位置情報をアップするAndroidアプリを作成しました。

(参考)
Androidのフォアグラウンドサービスで位置情報を取得する

今回の環境に合わせて以下の部分を変更します。

LocationService.java

public class LocationService extends Service{
    Context context;
    NotificationManager notificationManager;
    SharedPreferences pref;
    FusedLocationProviderClient fusedLocationClient;
    LocationCallback locationCallback;

    static final String target_url_base = "https://【ThingsBoardサーバのホスト名】/api/v1/";
    static final String target_telemetry = "/telemetry";

    public static final String LocationUpdateAction = "LocationUpdateAction";
    public static final int DefaultMinTime = 5000; // msec
    public static final float DefaultMinDistance = 10.0f; // meter
・・・

【ThingsBoardサーバのホスト名】の部分を、thingsboard.sample.workに書き換えます。

Androidにインストールして起動させましょう。
accessTokenのところに、さきほどのデバイス登録で払い出されたアクセストークンを入力します。
「Start」ボタンをクリックして、記録を開始します。

image.png

成功すると、ThingsBoardのマイダッシュボードをみると、位置が更新されているはずです。

他の人に公開する

自分の位置をわざわざ公開することもないとは思いますが、その設定方法をまとめておきます。

ThingsBoardのナビゲーションメニューからデバイスを選択します。
他の人がダッシュボードから表示するには、対象のデバイスも公開する必要があります。
Walkingデバイスの右側の「端末を公開する」アイコンをクリックします。

image.png

「端末を公開する」ボタンをクリックします。

image.png

「はい」を選択して公開が完了します。

image.png

ダッシュボードを選択します。
右側の「ダッシュボードを公開する」のアイコンをクリックします。

image.png

表示されたURLを他の人がブラウザから参照すると、ダッシュボードを参照できるようになります。

image.png

http://【サーバPCのIPアドレス】:8080/dashboard/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX?publicId=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

外からアクセスする場合は、http://【サーバPCのIPアドレス】:8080/ の部分をhttps://thingsboard.sample.work/ に読み替えてください。

image.png

以上

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1