前回の投稿からの続きです。読んでなくても大丈夫ですが、読んであると、より理解しやすいです。
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を選択します。
右上のImportボタンをクリックします。
以下のコピペして、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ボタンを押します。
インストールが完了すると、ThingsBoardのアイコンができています。
ThingsBoardアイコンをクリックします。
(最初はThingsBoardの起動まで時間がかかるかと思います)
初期パスワードは以下です。まずは、System Administratorでログインします。
- System Administrator: sysadmin@thingsboard.org / sysadmin
- Tenant Administrator: tenant@thingsboard.org / tenant
- Customer User: customer@thingsboard.org / customer
左側のナビゲーションメニューからテナントを選択します。
右上の+ボタンを押してテナントを作成しましょう。
適当に、MyTenantとしてみました。国はJapanですね。
出来上がったMyTenantの右側にあるテナント管理者の管理のアイコンをクリックします。
+ボタンをクリックします。
Eメールは適当に、「test@sample.work」としてみました。
作成したテナントに作成したEメールでログインするためのURLが生成されますので、ブラウザで開きます。
任意のパスワードを設定すれば、ログインできます。
これでいったんThingsBoardの初期設定が完了です。
デバイスを登録する
位置情報をトレースするデバイスを登録します。
ナビゲーションメニューからデバイスをクリックし、右上の+ボタンを押して、「新しいデバイスを追加する」を選択します。
デバイス名は適当に「Walking」にしておきました。
アクセストークンが払い出されましたので、メモっておきます。
さっそく位置情報を登録することができます。
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アドレス】と【アクセストークン】のところを各自に合わせてください。
ちゃんとStateがActiveになって仮想的な位置情報が登録されたようです。
ダッシュボードを作成する
位置情報を登録できたので、地図上に表示されるようにダッシュボードを作成します。
ナビゲーションメニューからダッシュボードを選択し、右上の+ボタンをクリックして、「新しいダッシュボードを作成する」を選択します。
名前は適当に「マイダッシュボード」にしてみました。
「新しいウィジェットを追加」をクリックします。
Mapsを選択します。
Trip Animationsを選択します。
タイプにデバイス、デバイスにWalkingを選択します。
Timeseries data keysには、とりあえずlatとlngを選択します。
さらにそれぞれの鉛筆アイコンをクリックして、ラベルをそれぞれ「latitude」「longitude」にします。
「セーブ」ボタンをクリックします。
時計のアイコンをクリックして、最終の1 day等に選択します。
正しく位置情報が表示されたようです。
最後に「セーブ」ボタンをクリックして完了です。
外部からアクセスできるようにする
今はイントラネットからしかアクセスできない状態ですが、以前Nginx Proxy Managerをセットアップしましたので、このThingsBoardもアクセスできるようにします。
(参考)
Nginx Proxy Managerを使ってワイルドカードSSL証明書を作成する
AWS Route53を開きます。
「レコードを作成」ボタンをクリックします。
レコード名に「thingsboard」と入れて作成します。値には、インターネットルータのWAN側IPアドレスを入力します。
これで、thingsboard.sample.workでアクセスできるようになるはずです。
Nginx Proxy Managerを開きます。Proxy Hostsを選択します。
そして、「Add Proxy Host」ボタンをクリックします。
まずは、Detailsタブにおいて、以下を入力します。
Domain Names:thingsboard.sample.work
Forwarding Hostname/IP:サーバPCのIPアドレス
Forwarding Port:8080
Websockets Support:On
SSLタブを選択します。
SSL Certificateとして、*.sample.work を選択島sう。
最後に「Save」ボタンをクリックします。
これで、以下のURLからアクセスできるようになっているはずです。
https://thingsboard.sample.work
Androidアプリから位置情報をアップする
以前、バックグラウンドで位置情報をアップするAndroidアプリを作成しました。
(参考)
Androidのフォアグラウンドサービスで位置情報を取得する
今回の環境に合わせて以下の部分を変更します。
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」ボタンをクリックして、記録を開始します。
成功すると、ThingsBoardのマイダッシュボードをみると、位置が更新されているはずです。
他の人に公開する
自分の位置をわざわざ公開することもないとは思いますが、その設定方法をまとめておきます。
ThingsBoardのナビゲーションメニューからデバイスを選択します。
他の人がダッシュボードから表示するには、対象のデバイスも公開する必要があります。
Walkingデバイスの右側の「端末を公開する」アイコンをクリックします。
「端末を公開する」ボタンをクリックします。
「はい」を選択して公開が完了します。
ダッシュボードを選択します。
右側の「ダッシュボードを公開する」のアイコンをクリックします。
表示されたURLを他の人がブラウザから参照すると、ダッシュボードを参照できるようになります。
http://【サーバPCのIPアドレス】:8080/dashboard/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX?publicId=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
外からアクセスする場合は、http://【サーバPCのIPアドレス】:8080/ の部分をhttps://thingsboard.sample.work/ に読み替えてください。
以上