ブログ

Armadillo-IoT G4 LTEモデル:会議室管理システムを構築してみた

at_naomi.todori
2022年4月5日 10時01分

Armadilo-IoT G4 LTEモデルとSORACOMのサービスを利用して、会議室管理システムを構築してみました。
ダッシュボードで会議室内の人数や環境センシング値の変化を確認することができるほか、設定した基準値を超えた場合にメールで通知されるため、リモートで会議室を管理することができます。

システムの構成


  • Armadillo-IoT G4 に USB Webカメラとオムロン環境センサー 2JCIE-BU01 を接続
  • 一定時間ごとの会議室内人数・画像・環境センシング値を取得
  • SORACOM Harvest に会議室内人数/画像・環境センシング値を送信および蓄積
  • SORACOM Lagoon でデータの可視化及びアラート

必要機材

品名 数量 費用 備考
Armadillo-IoTゲートウェイ G4 LTEモデル for SORACOM スターターキット 1 71,500円(税込)
USBハブ 1 約1,500円 Armadillo-IoT G4に接続します。
2ポートあればOKです。
USB Webカメラ
(UVC規格対応)
1 約8,500円 今回はロジクールC920s を使用しました。
三脚 1 約8,000円 USB Webカメラの固定に使用します。無くてもOKです。
今回はスタンドポッドGX-N を使用しました。
オムロン環境センサー
2JCIE-BU01
1 約12,000円
プラスドライバー 1 約100円~ Armadillo-IoT G4のケースを開ける際に使用します。
No.0 か No.1をご用意ください。
USBメモリ
(4GB以上)
1 約1,000円 Armadillo-IoT G4セットアップ時に使用します。
有線LANが使用できる場合は無くてもOKです。
(オプション)
HDMI接続可能な
fullHD 以上のモニタ
1 約15,000円 オプションです。
Armadillo-IoT G4で実行している人物検知の状況をリアルタイムで見ることができます。
(オプション)
マイクロHDMIケーブル
1 約1,000円 オプションです。
モニタとArmadillo-IoT G4の接続に使用します。
今回はELECOM DH-HD14SSU10BK を使用しました。

利用SORACOMサービス

SORACOM Air

SORACOM Air for セルラー は IoT 向けのデータ通信 SIM を提供するサービスです。
特定地域向け IoT SIM をArmadillo-IoT G4 に挿入します。

SORACOM Harvest

SORACOM Harvest は IoTデバイスからのデータやファイルを収集・蓄積するサービスです。
SORACOM Harvest Data と SORACOM Harvest Filesの2種類があり、今回は両方使用します。

SORACOM Lagoon

SORACOM Lagoon は ダッシュボード作成・共有サービスです。
IoT デバイスから SORACOM Harvest に集めたデータを可視化することができます。
今回はダッシュボード機能とアラート機能を使用します。

手順

SORACOM SIMの設定

SORACOM Harvest の有効化

SORACOM Harvest Data/Files は、SIMグループ単位で機能の有効/無効を設定します。
下記の手順で設定を行ってください。

SORACOM コンソールメニュー内 [SIM管理] を選択し SIM管理画面を開きます。

SIM一覧の中から今回使用するnanoSIMにチェックを入れ、[管理] > [所属グループ変更] を選択します。

[新しい所属グループ] の中から「新しいグループを作成…」を選択します。

グループ名に「G4_MeetingRoom」と入力し、[グループ作成]をクリックします。

[変更後のグループ] が作成したグループ「G4_MeetingRoom」になっていることを確認し、[グループ変更] をクリックします。

コンソールメニュー内 [SIMグループ] を選択し SIMグループ管理画面を開きます。

グループ一覧の中から「G4_MeetingRoom」を選択します。

[SORACOM Harvest Data 設定] を ON にし、[保存]をクリックします。

[SORACOM Harvest Files 設定] と [HARVEST DATA 連携] を ON にし、[連携対象のファイルパス] に 「/meeting_room/.*」と入力、[保存]をクリックします。

作業PC設定

ターミナルソフトをインストール

Armadillo-IoT G4 のコンソールにシリアル経由で接続するため、シリアル通信ソフトウェアをPCにインストールします。
今回シリアル通信ソフトウェアはTera Termを使用します。

USBコンソール向けデバイスドライバをインストール

作業PC が Windows の場合、デバイスドライバのインストールが必要になります。
こちらのページ を参照し、インストールを行います。

Armadillo IoT-G4セットアップ

SIM挿入

電源を切断した状態でケースを開け、nanoSIMをArmadillo-IoT G4に挿入します。

挿入後、ケースを閉じてください。

周辺機器接続

以下の通り、Armadillo-IoT G4と周辺機器を接続してください。
※ こちらの画像では Webカメラに三脚をつけていません
①microUSBケーブルで Armadillo-IoT G4 と PC を接続
②USBハブをArmadillo-IoT G4に接続
③USBハブに WebカメラとOMRONセンサーを接続
④(任意)HDMI出力を行う場合は、microHDMIケーブルとモニタを接続

設置

監視したいエリアが撮影できるよう、一式を設置します。
今回は会議室のテーブルの端に置きました。

ターミナルソフト通信設定

下記の通りターミナルソフトを設定します。

項目 設定
COMポート Silicon Labs CP210x USB to UART Bridge
転送レート 115,200bps
データ長 8bit
ストップビット 1bit
パリティ なし
フロー制御 なし

Armadillo-IoT G4 起動確認

Armadillo-IoT G4 に電源を投入します。
ACアダプタのDCプラグを Armadillo-IoT G4 に接続してから、ACプラグをコンセントに挿してください。

以下のログが出力されれば起動OKです。

Welcome to Alpine Linux 3.15
Kernel 5.10.101-1-at on an aarch64 (/dev/ttymxc1)

armadillo login:

ログイン・パスワードの保存

今回は root でログインします。初回ログインではパスワードの変更が必要となります。
下記の通り、設定を行ってください。

armadillo login: root
You are required to change your password immediately (administrator enforced).
New password: ※新しいパスワードを入力
Retype new password: ※新しいパスワードを再入力
Welcome to Alpine!

Armadilo Base OS ではルートファイルシステムに overlayfs を採用しているため、システムをOFFすると内容が消えてしまいます。
そのため、ファイル単位で永続化を行うコマンド persist_file を使用して、パスワードを保存します。

[armadillo ~]# persist_file /etc/shadow

コンテナイメージ展開

●Podman データ保存先変更
デフォルトでは Podman のデータは tmpfs に保存されるため、電源を OFF するとデータは消えてしまいます。
以下のコマンドで eMMC に保存するよう変更します。

[armadillo ~]# podman_switch_storage --disk

eMMCへの書き込み頻度を抑制する観点から、運用時はtmpfsに保存するのが適切です。

●コンテナ作成用ファイル保存
今回はコンテナイメージを使用しコンテナを作成します。

本ブログではUSBメモリにコンテナイメージを保存する方法で以下の説明を進めます。
LANケーブルを接続し、Armadillo-IoT G4上で直接wgetコマンド等でダウンロードすることも可能です。

以下からコンテナイメージとコンテナ起動用のconfファイルをダウンロードし、USBメモリに保存します。
コンテナイメージは使用したい tensorflow-lite のバージョンに応じて選択してください。
なお、imx_lib ライブラリのバージョンによっては正しく動作しない場合があります。
詳細については [製品マニュアル](https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_product_manual_ja-1.6.0/ch09.html#sct.container-run-npu-tflite) をご参照ください。

●コンテナイメージ読み込み
USBメモリをArmadillo-IoT G4に挿し、 以下のコマンドでコンテナイメージを読み込みます。

[armadillo ~]# mount /dev/sda1 /mnt
[armadillo ~]# podman load -i /mnt/at_meetingroom_management.tar

イメージの読み込み結果を確認します。

[armadillo ~]# podman images
REPOSITORY                               TAG         IMAGE ID      CREATED         SIZE
localhost/at_meetingroom_management      latest      6b1d1099a9c0  33 minutes ago  1.08 GB

コンテナ起動用のconfファイルをG4上に置きます。

[armadillo ~]# cp /mnt/meetingroom.conf /etc/atmark/containers/.

このファイルには、コンテナに与える権限等が記載されています。

image=localhost/at_meetingroom_management:latest

add_args --env=XDG_RUNTIME_DIR=/tmp
add_args --env=LD_LIBRARY_PATH=/opt/firmware/usr/lib/aarch64-linux-gnu
add_args --env=INTERVAL=10
add_args --env=THRESHOULD=0.5
add_args --cap-add=CAP_SYS_TTY_CONFIG
add_devices /dev/tty1 /dev/input /dev/dri /dev/ion
add_devices /dev/galcore /dev/mxc_hantro /dev/mxc_hantro_vc8000e
add_volumes /opt/firmware:/opt/firmware:ro
add_volumes /run/udev:/run/udev:ro xdg_runtime:/run/xdg_runtime
network=host
autostart=no

for video in /dev/v4l/by-id/*-index0; do
  if [ -e "$video" ]; then
        camera=$(readlink -f $video)
        add_device "$camera" "/dev/video5"
        break
  fi
done

echo 0590 00d4 > /sys/bus/usb-serial/drivers/ftdi_sio/new_id
for serial in /dev/serial/by-id/usb-OMRON_2JCIE-BU01*; do
  if [ -e "$serial" ]; then
        envsensor=$(readlink -f $serial)
        add_devices $envsensor
        break
  fi
done

set_command /root/meetingroom/start.sh

persist_file コマンドでファイルを永続化します。

[armadillo ~]# persist_file /etc/atmark/containers/meetingroom.conf

SIM接続設定

以下のコマンドでSIM接続設定を行います。

[armadillo ~]# nmcli connection add type gsm ifname ttyCommModem apn soracom.io user sora password sora

Armadillo-IoT G4 起動時に自動的に接続するよう、コネクション設定を永続化します。

[armadillo ~]# persist_file /etc/NetworkManager/system-connections/gsm-ttyCommModem.nmconnection

コンテナ作成・実行

コンテナ作成前に、2JCIE-BU01 と USB Webカメラを認識できるか確認します。

●2JCIE-BU01 認識確認

[armadillo ~]# echo 0590 00d4 > /sys/bus/usb-serial/drivers/ftdi_sio/new_id
[   42.041206] ftdi_sio 1-1.4:1.0: FTDI USB Serial Device converter detected
[   42.048213] usb 1-1.4: Detected FT-X
[   42.053903] usb 1-1.4: FTDI USB Serial Device converter now attached to ttyUSB4

●Webカメラ認識確認

[armadillo ~]# ls -la /dev/v4l/by-id/
total 0
drwxr-xr-x 2 root root 80 Mar 28 10:42 .
drwxr-xr-x 4 root root 80 Mar 28 10:42 ..
lrwxrwxrwx 1 root root 12 Mar 28 10:42 usb-046d_HD_Pro_Webcam_C920-video-index0 -> ../../video2
lrwxrwxrwx 1 root root 12 Mar 28 10:42 usb-046d_HD_Pro_Webcam_C920-video-index1 -> ../../video3

●コンテナ作成・実行
以下のコマンドを実行し、コンテナを作成・実行します。
このコマンドで /etc/atmark/containers/meetingroom.conf を参照し、コンテナを作成します。

[armadillo ~]# podman_start meetingroom

アットマークテクノが提供するデモアプリケーション「object detection demo」と同じ機械学習モデルを使用しています。

SORACOM Harvest データ送信確認

まず、データを SORACOM Harvest Data/Files に送信できているかを確認します。

SORACOM Harvest でデータ確認

Harvest Data/Files それぞれでデータを確認します。
● Harvest Data
SORACOM コンソールメニュー内 [データ収集・蓄積・可視化] > [SORACOM Harvest Data] をクリックします。
リソースに利用中のSIMを指定し、
下記の通り表示されれば問題なくデータをHarvest Dataに送ることが出来ています。
● Harvest Files
SORACOM コンソールメニュー内 [データ収集・蓄積・可視化] > [SORACOM Harvest FIles] をクリックします。
画像ファイルが送信されていれば、meeting_room フォルダに以下のようにファイルがアップロードされています。

Harvest Data/Files にデータが送信されていることが確認できたら、通信量節約のため一度コンテナを停止します。

[armadillo ~]# podman stop meetingroom

SORACOM Lagoon 設定

続いて、SORACOM Lagoon で Harvest Data に送信したデータの可視化設定を行います。
まず、こちらの手順 に従い、Lagoon設定を有効化してください。

ダッシュボード設定

今回はダッシュボード上に以下の内容を表示します。

  • 会議室画像
  • 会議室人数
  • eCO2
  • 温度
  • 湿度
  • 観測値推移(会議室人数、eCO2、温度、湿度)
  • アラート履歴

eCO2 は TVOC(総揮発性有機化合物)値から算出される 二酸化炭素濃度相当値 です。

まず、空のダッシュボードを作成します。
各表示エリア(パネル)の追加は以下の手順で行います。
[Add an empty panel] をクリックすると、パネルの設定画面が表示されます。
新たにパネルを追加したい場合は、下記画像右上のアイコンをクリックしてください。

各パネルについて、下記の項目の設定を行ってください。
各項目は以下の赤枠で囲んだ部分となります。
設定終了後、[Save] をクリックするとダッシュボードの画面に戻ります。

●会議室画像

項目 設定
Query Metric リソースの種類 Air
リソース名 使用中のSIM
データフォーマット Table
Panel Setting Panel Title 会議室画像
Panel Visualization SORACOM Dynamic Image Panel
Settings Mode Harvest Files
Name A-url

●会議室人数、eCO2、温度、湿度
それぞれのパネルを作成します。

項目 設定
Query Metric リソースの種類 Air
リソース名 使用中のSIM
データフォーマット Standard
系列 会議室人数:person
eCO2:e_co2
温度:temperature
湿度:humidity
Panel Setting Panel Title 会議室人数:person
eCO2:e_co2
温度:temperature
湿度:humidity
Panel Visualization Gauge
---

●観測値推移
このパネルでは複数の値を一つのグラフに描画するため、複数のQueryを設定します。
[+Query]をクリックすると Query を追加することができます。
また、Query名をクリックすると名称を変更することができます。

項目 設定
Query Metric A Query名 eco2
リソースの種類 Air
リソース 使用中のSIM
データフォーマット Standard
系列 e_co2
B Query名 humidity
リソースの種類 Air
リソース 使用中のSIM
データフォーマット Standard
系列 humidity
C Query名 temperature
リソースの種類 Air
リソース 使用中のSIM
データフォーマット Standard
系列 temperature
D Query名 person
リソースの種類 Air
リソース 使用中のSIM
データフォーマット Standard
系列 person
Panel Setting Panel Title 観測値推移
Panel Visualization Graph

●アラート履歴

項目 設定
Panel Setting Panel Title アラート履歴
Panel Visualization Alert list

各パネルの配置、サイズの設定についてはダッシュボード上で自由に設定することができます。

アラート設定

今回は eCO2 の値が過去5分間で 1000 を超えた場合にアラートが出るよう設定します。

●アラート通知先設定
まず、アラートの通知先を設定します。
[Alerting] の [Nortification channels] を選択し

[New channel] をクリックします。 以下の通り入力し、 [Save] をクリックします。

項目 設定
Name MeetingRoom_Alert
Type Email
Addresses 通知先のEメールアドレス

●アラート条件設定
アラート条件については、ダッシュボードのパネルで設定します。
今回は、ダッシュボードの [観測値推移] パネルで設定を行います。
[観測値推移] のパネルの設定画面を再度開き、[Alert] タブを選択します。
ここに、以下の通り設定します。
設定の詳細についてはこちらを参照してください。

Rule
アラートのルールを設定します。

項目 設定 補足
Name eCO2 Alert -
Evaluate every 1m 1分間隔で評価
For 0m 条件を満たした場合すぐ通知

Conditions
アラート条件を設定します。
なお、今回はeCO2の値のみを条件としていますが、複数の条件を組み合わせることも可能です。

項目 設定 補足
WHEN句 max() -
OF句 query(eco2, 5m, now) 現在から5分前の値を評価
条件 IS ABOVE 1000 1000以上

No Data & Error Handling

項目 設定 補足
If no data or all values are null Keep Last State 現在の状態を維持
If execution error or timeout Keep Last State 現在の状態を維持

Notifications
アラート設定をアラート通知先と紐づけます。

項目 設定
Send to MeetingRoom_Alert
Message eCO2値のアラート通知です

設定が完了したら、画面右上の [Save] をクリックしてください。

完成

再度コンテナを起動します。

[armadillo ~]# podman_start meetingroom

以下の通り、SORACOM Lagoon のダッシュボードに会議室の状況が可視化されていきます。
eCO2の値が設定したアラート条件を満たした場合、下記のようなEメールが届きます。

また、今回は手動でコンテナを起動していますが、コンテナ作成時に保存した confファイルの autostart=no の行を削除すると、Armadillo-IoT G4 起動時にコンテナを自動起動させることができます。