IoT Connect Gateway を使ってみた 第3回 〜観葉植物育成状況の可視化〜

はじめに

こんにちは、データプラットフォームサービス部 モバイルネットワーク開発チームの真山です。IoT Connect Gateway (ICGW) などの IoT サービスや、ローカル5G、フル MVNO の開発を担当しています。これまで栗原が紹介している ICGW シリーズですが、今回は私からも ICGW の活用例をご紹介したいと思います。過去のシリーズは下記よりご参照ください。
IoT Connect Gateway を使ってみた 第1回 〜ICGWのご紹介〜
IoT Connect Gateway を使ってみた 第2回 〜AWS IoTCoreに接続してみよう〜

観葉植物、育ててますか?

さて、私は趣味で観葉植物を育てています。特に、マダガスカルや南アフリカ、中米に自生する現地の植物や、現地の植物の種を播き実生として育てることにハマっています。2 年前から少しずつ購入したり播種しているうちに、気がついたら 2021 年 12 月時点で 170 株 (105 鉢) を超えていました。このように植物をたくさん育てていると、植物の健康維持やより良い育成環境整備のために育成環境をデータとして記録し、可視化してみたいと思うようになりました。

例えば、冬の時期になると気温の低下により植物の健康状態が悪くなったり、灌水後に用土が乾かないことによる根腐れのリスクが高まります。一方、春から秋にかけて一般的な夏型植物はよく成長しますが、日照量が多すぎると葉焼けをしたり、また灌水頻度を高くしないと水切れを起こすリスクがあります。植物の種類にもよりますが、季節的な環境の変化により弱ってしまう、さらには枯れてしまうことがよくあり、年中通して適切な管理をする必要があります。皆さんも、旅行などで数日間外出すると植物の管理状態を把握できず、心配になってしまことはあるかと思います。

そこで、今回は園芸や栽培というライフワークの中で植物の育成状態を管理する目的として、ICGW を活用した事例を紹介させていただきます。

ICGW のおさらい

ICGW はプロトコル変換機能やクラウドアダプター機能を提供するサービスです。

  • プロトコル変換機能
    HTTP/MQTT等のプロトコルをIoT Connect Gatewayサービスを通じて暗号化通信(HTTPS/MQTTS)に変換することで簡単かつセキュアにクラウドサービスへ接続ができます。暗号化通信機能をデバイスではなくサービス側で行うことでデバイスの設計を簡素化できることに加え、暗号化プロトコルにかかるオーバーヘッドはモバイル回線区間のトラフィックには影響せず、データ通信料金を節約できます。

  • クラウドアダプター機能
    各種クラウドサービスへ簡単に接続できるクラウドアダプター機能をセットで提供するため、利用するクラウドに合わせた接続用パラメータなどのIoTデバイスへの設定が必要なくなり作業負荷の軽減が図れ、かつ暗号化通信に変換することでセキュアにクラウドサービスへ接続できます。

コンセプト

  1. 植物育成環境の計測に必要な情報を各種センサで収集し、Raspberry Pi 4に集約します。Raspberry Pi 4 に LTE 通信モジュールである 4GPi を接続し、NTT Communications のモバイルサービス である IoT Connect Mobile® Type S (ICMS) の SIM を装着します。
  2. 4GPi から集約したセンサ情報をモバイルネットワークを通じて MQTT のプロトコルを利用し ICGW にオフロードします。
  3. ICGW ではプロトコル変換機能として MQTT から MQTTS に変換しデータの暗号化を行うことに加え、 ICGW と AWS IoT Core を接続します。
  4. AWS IoT Core に送信された MQTTS のデータを AWS OpenSearch Service に転送し、Kibana を利用してセンサ情報を時系列データとしてプロットします。Kibana はログと時系列の分析、アプリケーションのモニタリングとして利用されるデータの視覚化および調査ツールで、OpenSearch と連携します。

用意したモノ

SIMカード (ICMS)

ICGW をご利用の場合は、別途 ICMS 対応 SIM が必要となります。申し込み、トライアルのご相談は記事下部にあるご連絡先よりお問い合わせください。

Raspberry pi 4

今回は、Raspberry Pi 4 が WiFi の Access Point となり WiFi モジュールを搭載したセンサから、また直接接続しているブレッドボード上のセンサからデータを収集し、4GPi (LTE 通信用モジュール) を用いてモバイルネットワークを経由し ICGW へ送信します。

各種センサ

  • Wio-Node: 技適取得済みのESP-WROOM-02を搭載した小型IoTモジュール
    GROVEコネクタを2つ搭載し、REST APIを利用して GROVE モジュールよりデータを取得します。今回は GROVE モジュールは下記のセンサを利用します。
    • GROVE 水分センサ
    • GROVE デジタル温度・湿度センサ
  • 光センサ: BH1750 を搭載した 6 ビット周辺光センサモジュール
    ブレッドボードを介して Raspberry Pi 4 に接続します。 Raspberry Pi4 と BH1770 の接続設定例 を参考に設定します。

植物

アガベ ティタノタ / Agave Titanota
プレステラ 90 に植えているカキ仔 (子株) を測定対象としました。

測定環境

植物の育成環境と各種センサの配置を下図に示します。

Raspberry Pi 4 (4GPi) のセットアップ

SIMを差し込む

4GPi の SIM カードスロットは標準 SIM カードのサイズに対応します。 ICMS はマルチカット SIM カードとしてご提供しますので、標準 SIM カードのサイズにカットしスロットへ挿入します。

4GPi OSインストール作業

4GPi 対応のRaspberry Pi OS イメージファイルを下記サイトからダウンロードし、SD カードにインストールします。
4GPi Imagerダウンロード先

Raspberry Pi Imagerを使うことで簡単にインストールが可能になります。Raspberry Pi Imagerの詳しい使い方は、ICGW 第2回 ページ に紹介していますのでご参照ください。

Raspberru Pi 4 セットアップ

Raspverry Pi 4 にモニターとキーボードを接続、または ssh でログインし、設定を行います。初期ログイン ID と Password は 配布元情報 をご参照ください。必要なレポジトリ等は こちら を参考に設定します。

$ curl https://mechatrax.github.io/setup.sh | sudo bash
$ sudo apt install 4gpi-utils 4gpi-net-mods 4gpi-networkmanager

SIM 情報の設定

ICMS の SIM カードを ICGW 用途でご利用いただく場合 APN 等の情報は IoTデバイス設定情報 よりご確認いただけます。CONNAME は任意の文字列を設定してください。

  • CONNAME: icgw
  • APN: mobiledata.ntt.com
  • User: mobile@icms-p.ntt.com
  • Password: protconv

Raspberry Pi 4 に下記コマンドを投入します。

$ sudo nmcli con add type gsm ifname "*" con-name icgw apn mobiledata.ntt.com user mobile@icms-p.ntt.com password protconv

設定・動作状況の確認

設定した APN、User (ID)、Password を確認します。

$ sudo 4gpi-nm-helper show default all
mobiledata.ntt.com mobile@icms-p.ntt.com protconv

Raspberry Pi 4 のインターフェース設定を確認します。

$ nmcli con
NAME                UUID                                  TYPE      DEVICE
icms                5692d797-cc8a-41cf-****-************  gsm       cdc-wdm0
Wired connection 1  78da327c-0e8b-349f-****-************  ethernet  --

下記コマンドで、cdc-wdm0 が表示され、connected の状態であればモバイルネットワークへの接続が完了です。

$ nmcli dev status
DEVICE    TYPE      STATE        CONNECTION
cdc-wdm0  gsm       connected    icgw
eth0      ethernet  unavailable  --
wlan0     wifi      unavailable  --
lo        loopback  unmanaged    --

ifconfig コマンドで wwan0 (SIM) に付与されたIPアドレスを確認します。

$ ifconfig wwan0
wwan0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1420
        inet x.x.x.3  netmask 255.255.255.248  destination x.x.x.3
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 1000  (UNSPEC)
        RX packets 1084972  bytes 527930831 (503.4 MiB)
        RX errors 54  dropped 0  overruns 0  frame 38
        TX packets 1018724  bytes 111312134 (106.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Raspberry Pi 4 (4GPi) のモバイルネットワークの接続設定と確認は以上です。

ICGWの設定

ICGW Portal で AWS IoT Core へ接続するための設定を行います。ICGW から AWS IoT Core への接続手順は ICGW 第2回 ページ に紹介されていますので、ご参照ください。

  1. SIMの情報登録
  2. 認証情報の登録
  3. データ転送先設定

データ転送先設定として AWS IoT Core に MQTT で接続します。ICGW では、IMSI / IMEI / MSISDN / Device Name (ICGW Portal 上で設定する任意の文字列) をメタデータとして MQTT トピックに付与できます。今回は MSISDN を設定します。

各種センサから Raspberry Pi 4 にデータを集約

Raspberry Pi 4 の WiFi 設定

今回はセンサ情報を Raspberry Pi 4 へ集約するため、NetworkManager の設定で Raspberry Pi 4 を WiFi Access Point として動作させます。下記設定にてアクセスポイントを作成します。IP アドレスは環境に合わせた値を設定してください。

  • CONNAME: Hotspot-pi
  • SSID: 4GPi-AP
  • Password: 4GPi-PW
  • Access Point の IP アドレス: 192.168.100.1/24
$ sudo nmcli device wifi Hotspot-pi ifnamne wlan0 ssid 4GPi-AP password 4GPi-PW
$ sudo nmcli connection modify Hotspot-pi autoconnect yes
$ sudo nmcli connection modify Hotspot-pi ipv4.addresses 192.168.100.1/24

dnsmasp インストールし DHCP サーバー機能を有効化する。

$ sudo apt install dnsmasq

dnsmasq の設定ファイル (/etc/dnsmasq.conf) に IP アドレスの割り当て範囲とリース時間を追記します。

interface=wlan0
dhcp-range=192.168.100.2,192.168.100.20,255.255.255.0,24h

設定を反映するため、dnsmasq を再起動します。

$ sudo systemctl restart dnsmasq

Raspberry Pi 4 にルーティング機能を持たせるため、IP パケット転送や IP マスカレードを設定します。

IP パケット転送のため /etc/ufw/sysctl.conf の net/ipv4/ip_forward=1 のコメントを外し、/etc/default/ufw に DEFAULT_FORWARD_POLICY="ACCEPT" と設定します。

IP マスカレードのため /etc/ufw/before.rules に 192.168.100.0/24 (Raspberry Pi 4 LANセグメント) からのパケットを wwan0 に転送するよう下記のルールを設定します。

*nat
:POSTROUTING ACCEPT [0:0]
-F
-A POSTROUTING -s 192.168.100.0/24 -o wwan0 -j MASQUERADE
COMMIT

最後に ufw を有効にします。

$ sudo ufw disable && sudo ufw enable

Wio-Node の設定

Wio-Node 設定 を参考に進めていきます。設定は、スマートフォンへのアプリのインストールが必要となります。Wio アプリをインストール後、アカウントを作成します。Wio-Node の登録は下図の通り進めます。Wio-Node の Func Button を 4 秒間長押しすると Wio-Node が WiFi Access Point 動作します。スマートフォンを WiFi (SSID: Wio_xxxxxx) に接続し、Wio-Node の接続先である Raspberry Pi 4 の SSID: 4GPi-AP を指定します。

Wio-Node に Grove モジュールを接続します。上記で登録した Wio-Node を選択し、利用する Grove モジュールを追加します。追加後、View API を押下すると、GET Method が生成され、Request を送信すると Curl コマンドが表示されます。このコマンドをスクリプトに組み込み、センサデータを取得していきます。

Raspberry Pi 4 から ICGW 経由で MQTT メッセージを送信

Raspberry Pi 4 の設定

MQTT Client としてメッセージを送信するため、下記パッケージのインストールを実施し、mosquitto コマンドを扱えるようにします。

$ sudo apt install mosquitto-clients

Raspberry Pi 4 で各種センサから収集したからデータを MQTT メッセージとして ICGW 経由で AWS IoTCore に送信します。Wio-Node に紐付いた GROVE センサ や Raspberry Pi 直結のボード上センサを情報取得するスクリプトを 1 分に 1 回実行します。内容は割愛しますが、センサの不具合で外れ値が出ることが稀にあるので、条件判定をした後一度各種センサ情報を1行のファイルに書き出すようスクリプトを書いています。センサ情報ファイルを読み出し、MQTT メッセージを ICGW へ送信するスクリプトも同様の頻度で実行します。スクリプトの内容を下記に示します。

#!/bin/bash
s_device="001"
s_plant="Agave"
s_time=`date +'%Y%m%d%H%M%S'`

while IFS=, read s_lux s_hum s_tem s_moi
do
  ## Topic
  MESSAGE="{\"time\":$s_time, \"deviceid\":\"$s_device\", \"plant\":\"$s_plant\", \"lux\":$s_lux, \"humidity\":$s_hum,  \"temperature\":$s_tem, \"moisture\":$s_moi}"

  ## MQTT Publish to AWS
  mosquitto_pub --id client -h pconv-stg.nspp2.com -t "iot/topic/$s_plant" -m "$MESSAGE" --debug

done < /home/xxx/iot-home/mqtt_pub/sensor_agave.log

ICGW 経由で送信した MQTT メッセージを AWS IoT Core で確認します。AWS IoT Core のテストメニューから、MQTT テストクライアントに進み、トピックをサブスクライブします。設定として iot/topic/Agave/"MSISDN" をトピックとして指定しているため、その文字列ので結果を下図に示します。

センサ情報の可視化

今回は、AWS のツールで Amazon OpenSearch Service (Amazon Elasticsearch Service の後継サービス) を利用します。Amazon OpenSearch Service の開始方法 を参考に、ドメインを作成し各種設定を行います。

次に AWS IoT Core の ACT にてルールを作成し、Publish されたメッセージを OpenSearch Service に送信します。

可視化ツールとして、Amazon OpenSearch Service が提供する Kibana を利用します。OpenSearch のダッシュボードにて、Kibana の URL にアクセスします。Discover を選択し、Create index pattern から index を生成します。Define an index pattern として、IoT Core で作成したルールの索引に対応させます。複数の日付に対応するようワイルドカードを利用します。

Index を生成後、Discover に移行し、AWS IoT Core からのメッセージが OpenSearch Service で受信できていることを確認します。

次は、Kibana でグラフを作成します。Visualize を選択し、Create new visualization から時系列データをプロットします。Rasberry Pi 4 で収集したセンサ情報である、温度・湿度・照度・土壌水分量を下図に示します。

以上より、室内の観葉植物の育成状況を可視化できました。

今回は観葉植物と ICGW を組み合わせたユースケースをご紹介しました。今後は、観葉植物をプロトタイプとしてフィードバック機能を拡張し、自動灌水機能や自動加温機能などの制御機構を組み込み、将来的には農業 IoT の施策への展開を目指しております。本記事では ICGW と AWS IoT Core を接続しましたが、Google Cloud IoT Core やAzure IoT Hub、Things Cloud など多くの接続先クラウドサービスと簡単に接続できます。ICGW の活用方法として本記事をご参考いただければ幸いです。

ICGWに関するお問い合わせ先

  • トライアル、サービス導入に関するお問い合わせ

  • 開発チームへのお問い合わせ

    • icgw-dev@ntt.com までメールでお寄せください。
      ※お手数ですが@を半角文字に置き換えてください。
© NTT Communications Corporation 2014