トランザクションデジタルプラクティス Vol.4 No.2(Apr. 2023)

IoTアプリ構築支援のためのSINETStream Androidライブラリおよびセンサ情報収集アプリの開発

竹房 あつ子1,2  小林 久美子1  北川 直哉1  孫 静涛1,†1  吉田 浩1  合田 憲人1,2

1国立情報学研究所  2総合研究大学院大学  †1現在,日立製作所 研究開発グループ 

各種センサデータをクラウドに収集,蓄積し,機械学習で高度なデータ解析を行うIoTアプリケーションシステムの構築が可能になってきた.スマートフォンは,カメラ,加速度計,GPS等の多様センサやバッテリがあらかじめ装備されており,IoTシステムへの活用が期待されるが,プログラム開発コストの高さから特に学術分野では十分に活用されていない.本研究では,Androidスマートフォン向けのアプリ開発を支援するライブラリの開発と,開発したライブラリを利用したAndroidセンサ端末用アプリを開発し,研究・教育を目的としたIoTアプリケーションシステムの構築,利用促進の支援を目指す.我々は,広域データ収集・解析プログラム開発支援ソフトウェアパッケージSINETStreamを開発している.本稿では,Python/Java版のライブラリに加えてAndroid版ライブラリを新たに開発し,その基本性能を示す.また,開発したAndroid版を利用してテキスト送受信アプリとセンサ情報収集アプリ(Sensor)を開発した.Sensorアプリは,IoTアプリケーションを開発する際に,利用者は新たにプログラミングを行う必要がなくそのまま利用可能である.研究・教育用途での利用を支援するため,チュートリアルも開発し,IoTアプリケーションシステムの構築を体験できるようにした.さらに,広域での実証実験によりSensorアプリがIoTシステムのセンサとして活用できることを示す.

IoT(Internet of Things),Android,ソフトウェアライブラリ,Androidアプリ,モバイルネットワーク

Development of SINETStream Android Library and the Sensor Data Collection Apps to Support IoT Application Construction

Atsuko Takefusa1,2  Kumiko Kobayashi1  Naoya Kitagawa1  Jingtao Sun1,†1  Hiroshi Yoshida1  Kento Aida1,2

1National Institute of Informatics, Chiyoda, Tokyo 101–8430, Japan  2The Graduate University for Advanced Studies (SOKENDAI), Hayama, Kanagawa 240–0193, Japan  †1Presently with Hitachi, Ltd., Research & Development Group 

It is now possible to build IoT application systems that collect and store various types of sensor data to a cloud and perform advanced data analysis of the data using machine learning. Smartphones are widely used and equipped with a variety of sensors, such as cameras, accelerometer and GPS, and batteries, and are expected to be used for IoT systems. However, they are not fully utilized, especially in academic fields, due to the difficulty of coding. In this study, we develop a software library to support development of IoT application systems using Android-based smartphones and applications for Android sensor devices using the developed library, aiming to support the construction and promotion of IoT application systems for research and education purposes. We have been developing “SINETStream,” a software package to support development of wide-area data collection and analysis programs. In this paper, we have developed an Android version of the library and show its basic performance. Using the developed Android library, we have also developed Android apps, a text sending/receiving application and a sensor information collection application (Sensor), and their tutorials that allow users to experience the construction and use of an IoT system. We will also demonstrate that the developed app can be used for a sensor device in an IoT system through the experiment in a field.

IoT (Internet of Things), Android, software library, Android app, mobile network

1. はじめに

広帯域,低遅延,長距離通信を可能にする第5世代移動通信システム「5G」の実用化とセンサ端末の小型化・安価化により,モバイルネットワークを介して各種センサから収集された大量な情報をクラウドに蓄積し,機械学習を用いた高度なデータ解析を可能にするIoT(Internet of Things)アプリケーションシステムの構築が可能になってきた.このようなIoTアプリケーションでは,開発コストや端末自体のコストの観点からRaspberry PiのようなLinuxベースの小型端末に必要なセンサを搭載して利用することが多い.一方で,スマートフォンはカメラ,GPS等の多様なセンサやバッテリがあらかじめ装備されていること,すでに多くの端末が普及していることから,IoTアプリケーションへの活用が期待されている.

国立情報学研究所(NII)では,学術情報ネットワークSINETをモバイル網に延伸させたモバイルSINET [1]により,センサ端末をSINETのVPNに直接接続させた安全なIoT実験環境の構築を可能にしている.また,応用研究分野の研究者によるIoTアプリケーションの開発を支援するため,広域データ収集・解析プログラム開発支援ソフトウェアパッケージSINETStream [2], [3]を開発し,Linux環境等で利用可能なPython/Java版ライブラリを公開している.しかしながら,Linuxベースのシステムと比較するとスマートフォンの場合はプログラムの開発コストが高く,それにより特に学術分野では十分に活用されていない.

本研究では,SINETStream Android版ライブラリの開発[4]と,本ライブラリを用いたアプリ[5]を開発し,研究・教育を目的としたIoTアプリケーションシステムの構築,利用の促進を目指す.SINETStream Android版ライブラリは,IoTデータの送受信のための機能を提供するコアライブラリと,Android端末のセンサ情報の収集を支援するヘルパーライブラリで構成される.コアライブラリは,SINETStreamのPython/Java版と同等の機能を提供する.ヘルパーライブラリは,Android端末に装備されたセンサの利用を支援するためのライブラリを提供する.本稿では,その基本性能も示す.

また,Android版ライブラリを利用して,Android用のテキスト送受信アプリSINETStream Android Echo(Echoと呼ぶ)とセンサ情報収集アプリSINETStream Android Sensor Publisher(Sensorと呼ぶ)を開発する.Echoアプリでは,IoTシステムのデータ収集における基本的な振る舞いを確認することができる.Sensorアプリでは,Android端末をセンサとするIoTアプリケーションでのセンサプログラム開発が不要となり,IoTを活用した研究開発を加速させることができる.また,研究・教育用途での利用を支援するため,EchoとSensorを用いたチュートリアルも開発,公開し,IoTアプリケーションシステムの構築,利用を簡単に体験できるようにする.最後に,フィールドでの実証実験としてSensorアプリを用いて東京海洋大学の実験航海で船上での複数センサ情報の収集を行った.実験により,Sensorアプリで3日間のセンサ情報収集が欠損なく行えることを確認した.

2. SINETStreamの概要

広域データ収集・解析プログラム開発支援ソフトウェアパッケージSINETStreamの概要について説明する.SINETStreamのAPIおよび機能の詳細は,公式サイト[2]および文献[3]を参照されたい.

2.1 SINETStream API

SINETStreamでは,トピックベースのPub-Sub型非同期メッセージングモデルを前提としている.図1にSINETStreamの概念図を示す.SINETStreamでは,センサデータを送信するIoTデバイス側のPublisherプログラムをWriter,収集したデータを活用するサーバ計算機等で利用するSubscriberのプログラムをReaderと呼び,WriterとReaderでSINETStreamが提供するAPIを実装することで図1の中央にあるメッセージブローカ(ブローカ)を介してセンサデータの送受信を可能にする.ブローカには,SINETStreamに対応した任意のブローカソフトウェア,またはMQTT(Message Queue Telemetry Transport) [6]ベースのクラウドPub-Subサービスを利用することができる.プログラムの可搬性を高めるため,各メッセージブローカとの通信に必要となるパラメータセットは別途定義できるようにしている.また,低遅延または高スループットな送受信処理を目的として,同期および非同期のWriter/Reader APIを提供している.

SINETStreamの概念図 Overview of SINETStream.
図1 SINETStreamの概念図
Fig. 1 Overview of SINETStream.

2.2 SINETStreamの機能

SINETStreamでは,メッセージ送受信のための共通APIの提供のほか,IoTアプリケーションシステムに必要なセキュリティ機能,メトリクス収集機能と,多様なブローカに対応するためのSPI(Service Provider Interface)を提供している.図2にSINETStreamのソフトウェア構成を示す.図2上部の青枠内に示した部分はSINETStreamコアライブラリであり,APIおよびSPIと,セキュリティ機能などIoTアプリケーションに必要とされる共通機能とプラグイン管理機能が実装されている.

SINETStreamのソフトウェア構成の概要 An overview of SINETStream modules.
図2 SINETStreamのソフトウェア構成の概要
Fig. 2 An overview of SINETStream modules.

セキュリティ機能として,認証・認可と通信・データの暗号化機能を提供している.認証・認可は,各ブローカ実装でサポートしている認証・認可機能を,SINETStreamのコンフィグファイルまたはAPIから統一的に設定できるようにしている.公開鍵認証またはパスワード認証により,クライアントおよびサーバの認証が可能である.また,TLSによる通信時の暗号化とSINETStreamで提供しているデータ暗号化機能が利用できる.通信の暗号化は通信時のみ暗号化されるのに対し,データ暗号化はデータ収集サーバ側でも暗号化された状態でデータが格納されることになるため,より安全なデータ管理が可能になる.

メトリクス収集機能では,通信負荷をかけずにメッセージ送受信に関するメトリクス情報を収集することができる.SINETStreamライブラリ内で送受信メッセージ数,メッセージサイズ,エラー数をカウントすることで,ある期間における通信レート,最小/平均/最大メッセージサイズ,エラーレート等を提供することができる.利用者による測定用のデータ送信が必要ないため,通信負荷をかけずにメトリクス収集が可能になる.

また,多様なメッセージブローカに対応できるようにするため,SPIを提供している.図2下部の緑枠内で示した部分は各ブローカ用のプラグインを表しており,SPIを介して独立したプラグインモジュールを組み合わせることができる.SINETStream v1.5時点でのPython/Javaの実装では,MQTTベースブローカとApache Kafka [7], [8](Kafka)をサポートしている.SPIを実装したプラグインを追加することで,エッジコンピューティング用のメッセージング基盤ソフトウェアなど,最新のメッセージブローカにも対応することができる.

3. SINETStream Android版ライブラリの開発

Android版ライブラリでは,SINETStream Python/Java版で提供しているIoTアプリケーションのためのデータ送受信機能のほか,Androidデバイスに装備されたセンサ情報の収集を容易にするための機能も開発した.図3にSINETStream Android版のソフトウェア構成を示す.図3右側のデータ送受信機能を提供するコアライブラリと,左側のセンサ情報収集を支援するヘルパーライブラリで構成されている.図中の矢印はデータの流れを表している.コアライブラリでは,下方向の矢印がWriterがpublishする場合のデータの流れ,上方向の矢印がReaderがsubscribeしている場合のデータの流れを表す.ヘルパーライブラリでは,Androidシステムから各種センサデータを受け取り,適宜加工してユーザアプリケーションプログラムに送信する.以下でコアライブラリとヘルパーライブラリについて説明し,その後コアライブラリを用いたAndroid版ライブラリの基本性能を示す.

SINETStream Android版のソフトウェア構成の概要 An overview of SINETStream Android modules.
図3 SINETStream Android版のソフトウェア構成の概要
Fig. 3 An overview of SINETStream Android modules.

3.1 SINETStream Androidコアライブラリ

SINETStream Androidコアライブラリは,SINETStream Python/Java版と同等の機能を提供することを目的としている.ただし,Androidはスマートフォンでの利用を前提としたOSであり,Android用のJavaでは一部機能が制限されている.具体的には,Android用のJavaの機能制限により,非同期呼び出しとコールバックで実装する必要がある.また,これによりApache KafkaではAndroid用クライアントライブラリは提供されていない.よって,AndroidコアライブラリではPython/Java版で提供している機能と提供していない機能がある.図3右側で示すように,同期Writer/Reader APIは提供していない,SPIおよびプラグインは非対応でプラグイン管理機能がなくEclipse Paho [9]を用いたMQTTブローカへの通信のみ対応している点が異なっている.また,メトリクス収集機能は今後実装を検討している.

3.2 SINETStream Androidヘルパーライブラリ

ヘルパーライブラリはSINETStream Android版固有の機能であり,Android端末に装備された多様なセンサのデータ収集,加工を支援する.ただし,カメラ(動画,静止画)とマイク(音声)はバックグラウンドで継続的に動かし続けることができないため,本ライブラリの対象とはしなかった.図3左側に,ヘルパーライブラリのソフトウェア構成の概要とAndroidシステムのセンサ管理およびユーザプログラムとの関係を示す.ヘルパーライブラリは,コアライブラリ同様にユーザプログラムに対して非同期呼び出しとコールバックからなるAPIを提供し,Androidシステムのセンサを容易に扱えるようにする.

ヘルパーライブラリは,センサコントローラとセンササービス,ロケーショントラッカーとロケーションサービスの4つのモジュールで構成されている.センサコントローラは,Android端末のセンサを制御するセンササービスのフロントエンドとして機能し,利用可能なセンサタイプの一覧の提供,センサデータの送出間隔の設定等を可能にする.センササービスは,Android端末が装備する各種センサからセンサデータを受け取って蓄積し,設定された送出間隔でセンサデータをサーバ側で処理しやすいようにJSON形式に加工して送出する.ロケーショントラッカーは,GPSでAndroid端末位置を取得するロケーションサービスのフロントエンドとして機能する.ロケーションサービスが収集した位置情報をユーザアプリケーションプログラムに送信する.

図4にJSON形式に加工されたセンサデータの例を示す.加工されたセンサデータでは,各センサで取得されたセンサデータに加え,Android端末の情報が付与される.ヘルパーライブラリにより,複数センサのデータをまとめて1つのメッセージとして送信できるようになる.図4では,図3左下のAndroid Systemの「センサ管理」で収集されるセンサデータをsensors以下にリスト化している.その他のAndroidシステム情報sysinfo,ユーザが定義可能なユーザ情報userinfo,Android Systemの「ロケーション管理」で取得する位置情報locationを,デバイス情報deviceとしてまとめた.

JSON形式に加工されたセンサデータ.deviceはデバイス情報,sensorsはセンサデータ情報を表す JSON-formatted sensor data. device and sensors indicate device information and sensor data, respectively.
図4 JSON形式に加工されたセンサデータ.deviceはデバイス情報,sensorsはセンサデータ情報を表す
Fig. 4 JSON-formatted sensor data. device and sensors indicate device information and sensor data, respectively.

3.3 SINETStream Androidの基本性能

SINETStream Android版ライブラリの基本性能を示すため,コアライブラリを用いてTLSおよびデータ暗号化の有無での性能をモバイル環境およびWi-Fi(LAN)環境で調査する.ただし,モバイル環境は利用可能帯域の変動が大きいため,変動の少ない夜間に測定を行った.

図5に実験概要を示す.実験では,NIIにあるAndroid端末で動作するWriterからクラウド計算ノード上で動作するブローカへメッセージを送信し,Android端末のReaderでブローカに到着したデータの読み込みが完了するまでの時間を測定し,通信スループット,遅延,メッセージドロップ率を比較する.メッセージドロップ率はメッセージ全体のうち再送が発生したメッセージの割合を示す.ここで,WriterとReaderの性能を別々に測定することが望ましいが,比較的通信遅延およびその変動が大きいモバイル環境でWriter,Reader,ブローカ間で厳密な時刻同期をとるのは困難である.Android端末から送信される100 Bから10 KB程度の小規模メッセージ送信での通信スループット評価実験では,時刻同期の誤差の性能への影響も大きくなる.本実験結果は,Writer,Reader単体で測定するより通信が劣ることが想定されるが,ベースライン性能,および通信・データの暗号化の影響を測定することを目的として,WriterとReaderは同じ端末で動作させることとした.また,測定プログラムでは指定されたメッセージサイズのデータを,指定された回数を上限として,Writerから送り続けるようにし,送信完了後10秒待ってもメッセージがReaderに届かなければ打ち切るようにした.これにより,通信状況によりメッセージの再送が発生する場合は,Readerで確認できるメッセージの到着数は上限値より少なくなる.実験では,100 B,1 KBのときの送信上限値を20000,10 KBでは5000とした.

実験概要 An outline of the experiment for evaluation.
図5 実験概要
Fig. 5 An outline of the experiment for evaluation.

表1に評価で用いた実験環境を示す.クライアントのAndroid端末にはGoogle Pixel 5,ブローカにはAWSのm5.largeインスタンスを用いた.また,モバイル環境ではモバイルSINET(LTE)とSINET L2VPNを介してAWSに接続され,Wi-Fi環境ではNII所内のeduroam WiFi環境からSINETを介してAWSに接続される.クライアントにはSINETStream Android v. 1.5.3,ブローカにはEclipse Mosquitto v1.6.2を用いた.SINETStreamのパラメータであるconsistency,tls,cryptoは表1のように設定した.consistencyのAT_LEAST_ONCEは,1つ以上のメッセージが届くことを意味し,メッセージ送信に失敗した場合は再度メッセージを送信することになる.tlsはTLS(通信暗号化),cryptoはAESを用いたデータ暗号化に関するパラメータである.

表1 実験環境
Table 1 The experimental settings.
実験環境 The experimental settings.

図6にモバイル環境とWi-Fi環境でのTLS,AESの有無による通信スループットの比較結果を示す.各グラフの左側はモバイル環境,右側はWi-Fi環境の結果を表す.縦軸は通信スループット値をMB/sで,横軸のm/w-100/1K/10Kの表記はmはモバイル,wはWi-Fiの結果を示し,-の後ろはメッセージサイズをbytesを表す.Plain,TLS,AES,TLS+AESは,PlainはTLS,AESなしの結果であり,それ以外はTLS,AES,およびその両方を適用した結果である.図6から,メッセージサイズの違いによるスループットの比較では,いずれの場合もメッセージサイズが大きくなるにつれ通信スループットが向上する.これは1つのメッセージ送信に関わる初期オーバヘッドが相対的に小さくなるためである.また,モバイルとWi-Fiの比較では,100 B,1 Kではほぼ同等のスループットであるのに対し,10 KBではWi-Fi環境のほうがスループットが高く,高性能であった.両環境におけるPlain,TLS,AES,TLS+AESの比較では,TLSやAESを適用しても大幅なスループットの低下はみられなかった.ただし,Plainより追加の処理を含む条件のほうがスループットが高くなるケースが見受けられる.これは,Android端末での処理スループットよりモバイルおよびWi-Fi環境の通信スループットが十分になく,メッセージドロップ率が大きくなっていることが原因の1つと考えられる.ドロップ率については,図8の実験のところで改めて説明する.また,Wi-Fi環境でのTLSの通信スループットが高くなっているのは,上記に加えて通信環境の変化による影響の可能性も高いと考えられる.

モバイル環境とWi-Fi環境でのPlain,TLS,AES,TLS+AESの通信スループットの比較.左からメッセージサイズ100 B,1 KB,10 KBの結果を示す Comparison of the messaging throughputs in the mobile (left) and Wi-Fi (right) environments.
図6 モバイル環境とWi-Fi環境でのPlain,TLS,AES,TLS+AESの通信スループットの比較.左からメッセージサイズ100 B,1 KB,10 KBの結果を示す
Fig. 6 Comparison of the messaging throughputs in the mobile (left) and Wi-Fi (right) environments.
モバイル環境とWi-Fi環境でのPlain,TLS,AES,TLS+AESのメッセージドロップ率の比較 Comparison of the message drop ratios in the mobile and Wi-Fi environments.
図8 モバイル環境とWi-Fi環境でのPlain,TLS,AES,TLS+AESのメッセージドロップ率の比較
Fig. 8 Comparison of the message drop ratios in the mobile and Wi-Fi environments.

図7では,モバイル環境とWi-Fi環境でのPlain,TLS,AES,TLS+AESの通信遅延の最小値を示す.縦軸は通信遅延をmsで表し,横軸は,図6同様にモバイルまたはWi-Fiとメッセージサイズの違いを表している.通信環境の変動と次に示すメッセージドロップの影響が大きいため,最小値で比較する.図7から,Wi-Fi環境よりモバイル環境のほうが通信遅延が大きくなった.TLSおよびAESの有無の比較では,AESを適用しているもののほうが通信遅延が大きくなることが示された.

モバイル環境とWi-Fi環境でのPlain,TLS,AES,TLS+AESの通信遅延の最小値の比較 Comparison of the latencies in the mobile and Wi-Fi environments.
図7 モバイル環境とWi-Fi環境でのPlain,TLS,AES,TLS+AESの通信遅延の最小値の比較
Fig. 7 Comparison of the latencies in the mobile and Wi-Fi environments.

図8にモバイル環境とWi-Fi環境でのPlain,TLS,AES,TLS+AESのメッセージドロップ率を示す.縦軸はドロップ率%,横軸はモバイルまたはWi-Fiとメッセージサイズの違いを表す.メッセージドロップ率は,総メッセージ数に対して再送が発生したメッセージの割合を示す.図8から,モバイルおよびWi-Fi環境でメッセージサイズが100 B,1 KBのときにはPlainのドロップ率がほぼ100%となっており,送信レートに対して十分な通信レートが保てていないことが分かる.同様に,TLSも高いドロップ率を示している.一方,AESおよびTLS+AESではドロップ率は40%以下となっていた.通常の測定であれば,Plain,TLS,AES,TLS+AESの順に性能が劣化することが予想されるが,モバイルおよびWi-Fi環境で通信環境が不安定であるのに加え,ドロップによって性能が大幅に劣化する.すなわち,十分な通信帯域のない環境では送信レートを抑制しないと無駄な再送処理が大量に発生してしまい,性能劣化と計算資源の浪費が発生すると考えられる.既発表研究[3]において,Linux環境でJava版SINETStreamを用いて有線LAN環境とモバイル環境で同様にconsistencyをAT_LEAST_ONCEとした場合の測定を行い,通信帯域の狭いモバイル環境でのみドロップが大量に発生することを確認している.また,表2に示すメッセージ送信レートの実測値では,メッセージサイズが100 Bのときに処理遅延の大きいデータ暗号化処理を行うAESとTLS+AESの送信レートは50 [messages/sec]以上であったのに対し,PlainとTLSの送信レートは約20 [messages/sec]まで低下していた.一方,図8のメッセージドロップ率は送信レートに反比例して大きくなっており,送信レートの調整でドロップ率と通信スループットの改善の余地があると考えられる.

表2 モバイル環境でのメッセージ送信レート[messages/sec]の実測値
Table 2 The results of message send rate in the mobile environment.
モバイル環境でのメッセージ送信レート[messages/sec]の実測値 The results of message send rate in the mobile environment.

4. SINETStream Androidアプリの開発

応用研究分野の研究者に対してAndroid端末を用いたIoTアプリケーションシステムの構築を支援するため,SINETStream Androidのコアライブラリおよびヘルパーライブラリを用いたテキスト送受信アプリEchoとセンサ情報収集アプリSensorを開発した.また,研究・教育用途での利用を支援するため,EchoとSensorを用いたチュートリアルも開発,公開[10]した.SINETStream Android版および本研究で開発したアプリは,Android v8.0以降に対応している.

4.1 テキスト送受信アプリEcho

Echoは,IoTシステムのデータ収集における基本的な振る舞いを確認することができるテキスト送受信アプリである.あらかじめ利用者がMQTTブローカの接続情報を設定しておき,Android端末のキーボードで入力した文字列をMQTTブローカに送信すると,端末上に送信したメッセージが表示される.これにより,IoTシステムのデータ収集における基本的な振る舞いを確認することができる.

図9にEchoアプリの状態遷移を示す.図中の(a)はEchoの主画面,(b)は初期画面,(c)は設定画面を表す.アプリを起動すると,まず(b)初期画面に遷移する.(b)初期画面からの遷移は以下のとおりである.

Echoアプリの状態遷移 Transition of the Echo app.
図9 Echoアプリの状態遷移
Fig. 9 Transition of the Echo app.
  • 1. (b)初期画面で右側のSettingsボタンを押下すると(c)設定画面に遷移する.
  • 2. (b)初期画面で左側のRunボタンを押下すると,(a)主画面に遷移する.

(c)設定画面では,SINETStreamのコンフィグファイル相当のパラメータ設定が可能である.具体的には,トピック名やブローカのアドレス,ポート番号等を設定することができる.また,(a)主画面ではソフトウェアキーボードからテキストを入力してSENDボタンを押すと,入力されたテキストを含むメッセージがMQTTブローカに送信される.この際,メッセージは(c)設定画面で指定されたトピック名でSINETStream AndroidコアライブラリのWriter APIを介してMQTTブローカに送信される.Echoアプリは指定されたトピックのReaderでもあるため,送信したメッセージをMQTTブローカを介して受信し,その結果を(a)主画面に表示する.図10に(a)主画面の上部のスナップショットを示す.メッセージ受信結果では,入力したテキストデータだけでなくメッセージ全体が表示されている.メッセージには,トピック名,タイムスタンプ,入力したテキストデータが含まれている.

Echoアプリの(a)主画面上部のスナップショット.メッセージ受信結果 Echo main screen.
図10 Echoアプリの(a)主画面上部のスナップショット.メッセージ受信結果
Fig. 10 Echo main screen.

4.2 センサ情報収集アプリSensor

Sensorは,Android端末に装備された多種センサの情報を収集するアプリであり,IoTアプリケーションシステムでそのまま利用可能となっている.あらかじめ利用者がMQTTブローカの接続情報およびセンサデータ送出間隔を設定しておき,利用するセンサタイプを選択すると,指定された送出間隔で対象となるセンサデータがMQTTブローカに送信される.

Sensorアプリの状態遷移は図9のEchoアプリとほぼ同様であるが,d設定画面とe主画面での操作が異なっている.d設定画面では,SINETStreamのコンフィグファイル相当のパラメータの設定が可能であるほか,センサデータの送出間隔やユーザ定義情報等のSensorアプリ固有のパラメータが設定できる.e主画面では,送出するセンサのタイプを指定できる.図11はSensorアプリの主画面であり,2でSINETStream Androidヘルパーライブラリで認識されたセンサの一覧が表示されるため,利用したいセンサタイプを指定することができる.ただし,表示されるセンサの一覧はAndroid端末の機種によって異なる.このほか,図11の1の星印ではヘルパーライブラリのセンササービスが稼働中であることを示している.3のRUN/STOPボタンでは,センサデータの取得およびMQTTブローカへのメッセージ送信の開始/停止を行う.4ではセンサデータ送信中に送信時刻,総送信メッセージ数が表示され,5のリセットボタンではメッセージ送信停止時に統計情報をリセットすることができる.

Sensorアプリの主画面 The main screen of the Sensor app.
図11 Sensorアプリの主画面
Fig. 11 The main screen of the Sensor app.

4.3 Sensorを用いたチュートリアル

研究・教育用途での利用を支援するため,EchoとSensorを用いたチュートリアルを開発し,IoTアプリケーションシステムの構築,利用を簡単に体験できるようにする.Echoアプリでは,WriterとReaderの機能がアプリで実装されており,Python/Java版のチュートリアルで提供されているサーバ用Dockerコンテナイメージ[11]を用いてMQTTブローカを用意すれば動作を確認することができる.一方,SensorアプリではWriter側の機能しか実装されておらず,動作確認にはReader側の機能を持つプログラムが必要となる.そこで,Sensorアプリが送信したセンサデータを受け取って蓄積,可視化までを行うSensorチュートリアルのサーバ用Dockerコンテナイメージも開発し,Androidのセンサを活用したIoTアプリケーションシステムの構築,利用が体験できるようにした.本稿では,Sensorのチュートリアルについて紹介する.

Sensorチュートリアルの手順を以下に示す.

  • (1) Sensorチュートリアル用サーバを設定する.
  • (2) Android端末でアプリをインストールし,実行する.
  • (3) 観測用端末で可視化結果を確認する.

まず,(1)ではサーバ計算機上でSensorチュートリアル用のサーバDockerコンテナを実行する.(2)では,4.2節の操作により,アプリのインストール,センサデータ送出間隔の設定,センサタイプの選択,センサデータの送信処理を行う.(3)では,観測用端末で以下のURLにアクセスすると,図13の画面でセンサデータが取得できていることが確認できる.

Sensorチュートリアルでのセンサデータ可視化画面のスナップショット.上から歩数,照度,加速度の時系列グラフが示されている A snapshot of sensor data graphs used in the Sensor tutorial. The time series graphs show sensor data captured by step counter, light and acceleration sensors.
図13 Sensorチュートリアルでのセンサデータ可視化画面のスナップショット.上から歩数,照度,加速度の時系列グラフが示されている
Fig. 13 A snapshot of sensor data graphs used in the Sensor tutorial. The time series graphs show sensor data captured by step counter, light and acceleration sensors.

http://<server_address>/chart.html

Sensorチュートリアル用のサーバDockerコンテナの詳細を図12に示す.本コンテナでは,いずれもオープンソースソフトウェアであるMQTTブローカのEclipse Mosquitto [12],メッセージブローカKafka,オブジェクトストレージMinIO [13],Webサーバnginx [14]がインストールされている.また,Kafka Connect 1,Kafka Connect 2は,Kafka Connectと呼ばれるツールを表しており,Kafkaと他のブローカーやストリーム処理系,ストレージ等との接続を容易にする機能を提供している.チュートリアル用のサーバコンテナでは,Kafka Connect 1でMosquittoに書き込まれたセンサデータをKafkaへ,Kafka Connect 2でKafkaに書き込まれたセンサデータをMinIOへ蓄積するように設定した.MinIOはAmazon S3(Simple Storage Service)互換のオブジェクトストレージであり,nginxを介して指定されたセンサデータを取り出し,JavaScriptで可視化できるようにした.別途処理プログラムを用意してMosquittoからストレージにデータを格納する方法も可能であるが,本研究ではKafkaブローカを間に挟む構成とした.これは,Mosquittoでは収集されたデータが永続化されないのに対してKafkaでは一定期間永続化される点,Kafka Connectで処理プログラムを用意しなくても上記のような処理ができる点による.

Sensorチュートリアルのサーバ用Dockerコンテナの概要 A server-side Docker container for the Sensor tutorial.
図12 Sensorチュートリアルのサーバ用Dockerコンテナの概要
Fig. 12 A server-side Docker container for the Sensor tutorial.

図13は,上から歩数,照度,加速度のセンサデータが時系列にグラフ化されたものである.表示されるグラフは,前述のセンサ3種だけでなく必要に応じて追加・削除することができる.Sensorアプリを実行すると,定期的に指定したセンサのデータがグラフ上で更新されることを確認した.なお,図13では加速度のグラフにあまり変化がみられない.加速度センサデータは,Android端末に対して直交座標系xyz軸方向にかかる加速度値[m/s2]を−1倍したもので表現されている.xy軸が水平方向,z軸が鉛直方向であり,静止状態では(0,0,9.8),自由落下状態では(0,0,0)となる.本研究では動作確認用としてすべてのセンサデータ結果を2次元のグラフで表しているため,可視化時に加速度センサデータを便宜的にベクトル長に変換している.ベクトル長は,歩行程度の移動では0.001前後しか変動しないため,ほぼすべてのデータが9.8のところにプロットされた結果が得られている.

4.4 Sensorアプリを用いた実証実験

最後に,Sensorアプリを使ってセンサ情報が収集,活用できることを示す.Sensorアプリを起動したAndroid端末を東京海洋大学の練習船の船橋前方窓付近に設置し,2022年2月15日から3日間の実験航海時の様々なセンサ情報を30秒ごとに収集した.船内に設置したため,測定中は給電した状態でセンサ情報を収集した.Android端末にはGoogle Pixel 3a XLを用い,モバイルSINETへ接続するためのSINET SIMを装着した.SensorアプリからモバイルSINET,SINET L2VPNを介してNIIの所内クラウド上に配備したMosquitto MQTTサーバにデータを送信する.サーバサイドの構成は図12と同様であり,送信されたデータはMQTTサーバからKafkaを介してオブジェクトストレージにデータを格納するようにした.

図14は,航海中にSensorアプリで取得したセンサ情報のうちAndroid端末のGPSセンサで取得した位置情報を可視化したものである.Sensorアプリから送信されたセンサデータのうち,位置情報を可視化するプログラムを開発した.センサデータはJSON形式でオブジェクトストレージに保存されているため,容易に読み出し,処理することができた.なお,図14は国土地理院の提供する地理院タイル[15]を加工して作成した.図14の航路では通信断の発生しない安定した電波状況が維持されていたため,Sensorアプリを用いることで位置情報を含む14種類のセンサ情報を3日間分欠損することなく正常に収集できていることが確認できた.また,3.3節で確認したようなメッセージドロップも発生していなかった.

Androidセンサ情報収集アプリのGPSの利用例.国土地理院の提供する地理院タイル[15]を加工して作成 An example of GPS data acquisition using the Sensor app. This figure is generated using the map provided at [15].
図14 Androidセンサ情報収集アプリのGPSの利用例.国土地理院の提供する地理院タイル[15]を加工して作成
Fig. 14 An example of GPS data acquisition using the Sensor app. This figure is generated using the map provided at [15].

5. 関連研究

AndroidスマートフォンをIoTアプリケーションシステムのセンサ端末として活用する試みは複数ある.文献[16]では,患者の監視を目的として加速度センサ,温度センサ,心電図センサのデータをBluetoothまたはNFC(Near Field Communication)経由でAndroid端末に収集して可視化するとともに,セントラルサーバに送信するマイクロコントローラを開発している.文献[17]もeHealthを目的とし,患者に装着した心電図および心拍数のセンサをWi-Fi 802.11でAndroid端末に接続し,GPSデータとともに収集し,リアルタイムに可視化するシステムを構築している.これらのシステムでは,利用シナリオに応じて個別のセンサに特化したシステムが構築され,独自の方式でデータ収集等を行っているのに対し,本研究ではより広範な目的で利用可能なアプリとして開発されている.特に,Androidシステムが管理している複数センサに対応している点,サーバへのデータ収集はSINETStreamにより多種メッセージブローカに対応している点,SINETStreamの持つIoTシステムに必要な各種機能が活用できる点で異なる.

Android端末のセンサ情報をクラウドで収集・蓄積・解析し,その結果を活用するIoTシステムの1つとして,自然災害による被害リスクを軽減することを目的とした早期警鐘システム[18]がある.このシステムでは,広域に分散している利用者が保有する多数のAndroid端末で検知された揺れの情報をクラウドソーシングで収集し,クラウドで地震であると予測されると各Android端末の利用者に通知する.本研究で開発したSensorアプリもこのような用途で活用されることが期待できる.

6. まとめと今後の課題

本研究では,多種センサがあらかじめ搭載されたAndroid端末を活用した研究・教育用IoTアプリケーションシステムの構築支援のため,SINETStream Android版ライブラリを開発し,その基本性能を示した.また,本ライブラリのコアライブラリと,Android端末のセンサ情報収集を支援するヘルパーライブラリを用いて,Android用のテキスト送受信アプリSINETStream Android Echo(Echo)とセンサ情報収集アプリSINETStream Android Sensor Publisher(Sensor)を開発した.Echoアプリを用いることで,IoTシステムのデータ収集における基本的な振る舞いを確認することが可能である.SensorアプリはAndroid端末をセンサとするIoTアプリケーションシステムでの利用が可能であり,IoTを活用した研究開発を加速させることができると期待している.また,研究・教育用途での利用を支援するため,EchoとSensorを用いたチュートリアルも開発,公開した.Sensorチュートリアルでは,センサデータの収集,蓄積,可視化を可能にするサーバ用Dockerコンテナも開発し,本チュートリアルによりAndroid端末を用いたIoTアプリケーションシステムの構築・利用が体験できるようにした.また,広域での実証実験からSensorアプリが3日間の実験航海でのセンサ情報収集に活用できることを示した.

今後は,送信レートの調整による性能・利用効率の向上を図るとともに,スマートフォンで課題となるバッテリの管理や,セキュリティ機能,メトリクス収集機能など,SINETStream Android版の機能を拡充していく.また,Sensorアプリの利便性をより高めるとともに,実アプリケーションシステムへの適用を行っていく.さらに,大学等でのチュートリアル教材の授業での活用やSensorアプリのIoTシステムでの利用など,活用事例を共有していく.

本研究で開発したソフトウェア一式は,SINETStreamのウェブサイトhttps://sinetstream.net/で公開している.SINETStreamは,オープンソースソフトウェアであり,SINET以外の環境でも利用可能である.

謝辞 本研究にご協力いただいた東京海洋大学の大島浩太先生,総合研究大学院大学の陳明康様,数理技研の遠藤雅彦様,小泉敦延様,鯉江英隆様に深く感謝いたします.
本研究は,JST,CREST,JPMJCR21M3の支援を受けたものです.

参考文献
  • [1] 国立情報学研究所:モバイルSINET実証実験,〈https://www.sinet.ad.jp/wadci〉(参照2022-05-06).
  • [2] 国立情報学研究所:SINETStream, 〈https://www.sinetstream.net/〉(参照2022-05-06).
  • [3] Takefusa, A., Sun, J., Fujiwara, I., Yoshida, H., Aida, K. and Pu, C.: SINETStream: Enabling Research IoT Applications with Portability, Security and Performance Requirements, Proc. IEEE COMPSAC 2021, pp.482–492 (2021).
  • [4] 孫 静涛,竹房あつ子,藤原一毅,吉田 浩,合田憲人:IoTアプリ構築支援のためのSINETStream Android用プラグインの開発,マルチメディア,分散,協調とモバイル(DICOMO2020)シンポジウム論文集,pp.421–427(2020).
  • [5] 竹房あつ子,小林久美子,北川直哉,孫 静涛,吉田 浩,合田憲人:IoTアプリケーションのためのSINETStreamベースAndroidセンサ情報収集アプリの開発,マルチメディア,分散,協調とモバイル(DICOMO2021)シンポジウム論文集,pp.1068–1074 (2021).
  • [6] MQTT: MQTT: The Standard for IoT Messaging, 〈http://mqtt.org/〉(参照2022-05-06).
  • [7] Apache: Apache Kafka, 〈https://kafka.apache.org/〉(参照2022-05-06).
  • [8] Kreps, J., Narkhede, N. and Rao, J.: Kafka: a Distributed Messaging System for Log Processing, NetDB workshop 2011, pp.1–5 (2011).
  • [9] Eclipse Foundation: Eclipse Paho, 〈https://www.eclipse.org/paho/〉(参照2022-05-06).
  • [10] 国立情報学研究所:SINETStream Android版チュートリアル,〈https://www.sinetstream.net/docs/tutorial-android/〉(参照2022-05-06).
  • [11] 国立情報学研究所:SINETStream Python/Java版チュートリアル,〈https://www.sinetstream.net/docs/tutorial/〉(参照2022-05-06).
  • [12] Eclipse Foundation: Eclipse Mosquitto, 〈https://mosquitto.org/〉(参照2022-05-06).
  • [13] MinIO: Multi-Cloud Object Storage, 〈https://min.io/〉(参照2022-05-06).
  • [14] nginx: 〈http://nginx.org/〉(参照2022-05-06).
  • [15] 国土地理院:地理院タイル,〈https://maps.gsi.go.jp/development/ichiran.html〉(参照2022-05-06).
  • [16] Yi, W.-J., Jia, W. and Saniie, J.: Mobile Sensor Data Collector using Android Smartphone, 2012 IEEE 55th International Midwest Symposium on Circuits and Systems (MWSCAS), pp.956–959 (online), DOI: 10.1109/MWSCAS.2012.6292180 (2012).
  • [17] Khalaf, A. and Abdoola, R.: Wireless Body Sensor Network and ECG Android Application for eHealth, 2017 Fourth International Conference on Advances in Biomedical Engineering (ICABME), pp.1–4 (online), DOI: 10.1109/ICABME.2017.8167526 (2017).
  • [18] Heryana, A., Nugraheni, E., Kusumo, B., Rojie, A. F. and Setiadi, B.: Applying Agile Methods in Designing an Earthquake and Landslide Early Warning System Application for Android, 2017 International Conference on Computer, Control, Informatics and its Applications (IC3INA), pp.80–84 (online), DOI: 10.1109/IC3INA.2017.8251744 (2017).

竹房 あつ子(正会員)takefusa@nii.ac.jp

2000年博士(理学)(お茶の水女子大学)取得.日本学術振興会特別研究員(DC2,PD),お茶の水女子大学大学院助手,産業技術総合研究所研究員,主任研究員を経て2016年国立情報学研究所アーキテクチャ科学研究系准教授,2021年同教授,現在に至る.総合研究大学院大学複合科学研究科情報学専攻教授兼任.並列分散処理,グリッド,クラウド,エッジ,IoTに関する研究に従事.ACM,IEEE,電子情報通信学会各会員.本会シニア会員.


小林 久美子(正会員)

1992年電気通信大学電気通信学部電子情報学科卒業.同年日本無線株式会社入社.2012年電気通信大学大学院情報システム学研究科博士後期課程単位取得済み退学.2014年博士(工学)取得.2016年より国立情報学研究所クラウド支援室,2020年同クラウド基盤研究開発センター,現在に至る.クラウド,IoT関連の研究・開発および大学・研究機関のクラウド導入支援に従事.IEEE,電子情報通信学会各会員.


北川 直哉(正会員)

2014年3月名古屋大学大学院情報科学研究科博士後期課程修了・博士(情報科学).同年4月より同大学情報基盤センター研究員を経て,同年10月より東京農工大学大学院工学研究院先端情報科学部門助教.2020年4月より国立情報学研究所学術ネットワーク研究開発センター特任准教授,現在に至る.ネットワークシステム,情報セキュリティに関する研究に従事.IEEE,情報処理学会各会員.


孫 静涛(正会員)

2013年東京工科大学大学院バイオ情報メディア研究科コンピュータサイエンス専攻博士課程前期修了.2016年総合研究大学院大学複合科学研究系情報学専攻博士課程後期修了.博士(情報学).同年国立情報学研究所アーキテクチャ科学研究系特任研究員.2021年日立製作所 研究開発グループ デジタルテクノロジーイノベーションセンタ サービスコンピューティング研究部シニア研究員を経て,現在に至る.エコノミデータセンタ,クラウドコンピューティング,IoTの研究に従事.ACM,IEEE,CCF各会員.


吉田 浩(正会員)

1978年東京大学工学部電子工学科卒業.1980年同大学大学院工学系研究科修士課程修了.富士通株式会社において,ソフトウェア,ストレージシステム,パブリッククラウドサービスの企画・開発に従事.2015年より国立情報学研究所クラウド基盤研究開発センターにおいて,クラウド関連の研究・開発および大学・研究機関のクラウド導入支援に従事.IEEE会員.


合田 憲人(正会員)

1997年博士(工学)(早稲田大学)取得.1992年早稲田大学情報科学研究教育センター助手,1997年東京工業大学大学院情報理工学研究科数理・計算科学専攻助手,1999年同大大学院総合理工学研究科知能システム科学専攻講師,2003年同研究科物理情報システム専攻助教授,2007年国立情報学研究所特任教授,2015年同教授,現在に至る.科学技術振興機構さきがけ研究員(2001年~2005年),ハワイ大学Information and Computer Sciences Department客員研究員(2007年),東京工業大学大学院総合理工学研究科物理情報システム専攻連携教授(2007年~2016年),総合研究大学院大学複合科学研究科情報学専攻教授(2008年~現在)等を兼任.電子情報通信学会,IEEE,ACM各会員.

受付日2022年8月23日
採録日 2023年1月19日

会員登録・お問い合わせはこちら

会員種別ごとに入会方法やサービスが異なりますので、該当する会員項目を参照してください。