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 ライブラリのバージョンによっては正しく動作しない場合があります。
詳細については 製品マニュアル をご参照ください。
●コンテナイメージ読み込み
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 | |
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 起動時にコンテナを自動起動させることができます。