Amazon Web Services ブログ

BLE デバイスのデータ収集と分析(ソニーグループ株式会社 REON POCKET の事例)

近年、ハードウェア製品の IoT 化は加速していております。2021年後半に公開された AWS を利用する日本の製品だけを見ても、カシオ計算機株式会社様株式会社NTTドコモ様株式会社リコー様ミネベアミツミ株式会社様株式会社アイ・オー・データ機器様など、様々な事例があります。スマートプロダクトの領域の IoT 化の目的は、リモート制御・遠隔監視など、エンドユーザーの体験を向上させることに留まらず、社内の営業やマーケティング、保守業務などのオペレーションを最適化するためにも使われ始めています。さらに最近では、 IoT ログデータを加工して他社に提供するサービスモデルも出てきており、新たな価値を生み出したり、社会課題の解決を試みるケースもあります。

こういった様々なユースケースにおいて共通で必要となるのが、デバイスからの「データ収集」です。エンドユーザーのプライバシーを守り、安全にデータをクラウドにアップロードし、管理することが求められます。このブログでは、ソニーグループ株式会社 REON POCKET(レオン ポケット) の事例を挙げて、直接クラウドに接続する手段が無い BLE デバイスにおいて、データ収集および分析を行う方法の例をご紹介します。

REON POCKET について

ソニーグループ株式会社の Startup Acceleration 部門から生まれた REON POCKET は、本体接触部分の体表面を直接冷やしたり温めたりすることのできるウェアラブルサーモデバイスです。ユーザーは、専用ネックバンドなどに製品を装着することで、冷感/温感を得ることができます。 このチームでは、製品によるユーザ個人の快適な環境作りに加えて、省エネに依る地球環境への貢献をビジョンに取り組んでおり、その1つの取り組みとして温度データの収集と活用を進めています。

これまで気象庁などから出されている温度のデータは、特定の地点で観測されたもので、地理的な解像度が比較的低いデータでした。この製品を通して、個人レベルでのよりミクロな温度データの収集を行うことで、様々な分野の研究開発や日常生活において役立つデータの収集が可能となります。REON POCKET においてこのデータ収集・分析部分の構築方法を検討した際に、AWS は AWS Prototyping Program を通してプロトタイピングを実施し、商品化の立ち上げを支援しました。以下では、このプロトタイピングの内容をベースに、一部抜粋・単純化した形で、 BLE デバイスのデータ収集と分析方法 としてご紹介します。

※本記事では、設計上重要なポイントを中心に記述しており、手順の詳細については触れていません。詳細は説明文中にあるリンクをご確認ください。

プロトコルごとのデータ収集方法

製品が Wi-Fi や LTE などで直接インターネットに接続することが可能な場合であれば、 AWS IoT Core を用いることで接続、認証、データ取り込み部分などをクイックに実現することができます。 AWS IoT Core の MQTT エンドポイントに接続すれば、任意のタイミングでデータの送受信を行うことができます。

一方で、 REON POCKET のように、小型で電池駆動の BLE 機器では、上記の方法をとることが難しい場合があります。 BLE デバイスにおいても、FreeRTOS BLE Library を用いることで、スマートフォン( Android  / iOS )をプロキシデバイスとして、 AWS IoT Core に送信することが可能です。しかし、モバイルアプリとデバイス間で高度なインタラクションを行う必要がある場合や、すでに デバイスとスマートフォン間の通信仕様が定義されている場合には、一旦スマートフォンアプリ側に独自の通信仕様でデータを取り込み、まとめてクラウドにアップロードする方法が考えられます。以降ではこの方法について見ていきます。

ビルディング

アーキテクチャのポイント

今回のシステムでは、Amazon Cognito を使用して認証をおこなっています。指定した S3 バケットへのログのアップロードを許可するように Cognito の IAM ロールとポリシーを設定としました。スマートフォンアプリは、 BLE デバイスからデータを取得すると CSV 形式に変換します。その後、AWS Amplify の機能を用いて S3 にアップロードします。データ分析を行いたいデータアナリストなどは任意のタイミングで Amazon Athena と Amazon QuickSight を使ってデータの表示が可能となります。

今回の作業手順として、最初に S3 のバケットを新規作成し、そこにダミーの CSV データを置いて、それを可視化できるようにしました。次に、モバイルアプリから、同じ S3 のバケットに対してファイルをアップロードする機能を作成しました。以下はその流れに沿ってご説明します。

S3バケットの作成

最初に空の S3 のバケットを作成し、ダミーデータ ( data.csv ) を作成して保存します。ここでは以下のような 時系列の温度データを作成します。

Date,Temperature
2022/01/01 0:00,23.7
2022/01/01 1:00,23.9
2022/01/01 2:00,23.9
2022/01/01 3:00,23.9
2022/01/01 4:00,23.9
2022/01/01 5:00,25.4
2022/01/01 6:00,26.5
2022/01/01 7:00,27.1
2022/01/01 8:00,26.6
2022/01/01 9:00,27
2022/01/01 10:00,26.4
2022/01/01 11:00,27.2
2022/01/01 12:00,28.2
2022/01/01 13:00,28.7
2022/01/01 14:00,27.3
2022/01/01 15:00,27.5
2022/01/01 16:00,26.9
2022/01/01 17:00,25.9
2022/01/01 18:00,25.2
2022/01/01 19:00,25
2022/01/01 20:00,24.4
2022/01/01 21:00,24.1
2022/01/01 22:00,24
2022/01/01 23:00,24.3

保存先については、今後のデータ分析時の期間を絞ったクエリの効率を上げるために、 S3 のキーを、 Apache Hive 標準形式に従って bucket-name/year=2022/month=01/day=01/data.csv としました。これにより、後述する Amazon Athenaでの検索を高速に、コストを抑えて実施することが可能となっています。

データの分析・可視化

S3 に保存された CSV に対して、AWS Glue クローラを使用し、データセットのスキーマを検出して AWS Glue Data Catalog に登録を行いました。そして、Glue クローラの Data Store を S3 とし、Include path に、 CSV が保存されているバケットを指定して、クロールを実行します。すると、 Glue Data Catalog には、以下のようなパーティション情報( year, month, day )も含めたテーブルが作成されます。

テーブルが作成されたら、 Amazon Athena のコンソールを開き、このテーブルに対して、試しに次のようなSQL クエリを実施します。

SELECT * FROM "your_database"."your_table" 
  WHERE year = '2022' AND temperature < 28 
  LIMIT 10;

すると、Athena は、  S3 のCSV ファイルの中身を確認し、該当する項目を抽出します。上記のクエリを、先ほどのダミーデータに対して実行すると、以下のように、温度が 28 を超えている項目のみが結果として得られます。

クエリの結果が確認できたら、今度は Amazon QuickSight と Amazon Athena を連携することで、 S3  に保存された CSV ファイルを取り込んで線グラフなどで可視化を行います。 QuickSight のクエリによって得られた  date カラムは、 String 型 で取り込まれます。これを時系列のデータ表示を可能にするために Date 型に変換します。今回のダミーデータの場合、以下の図のように、  yyyy/MM/dd HH:mm という日付フォーマットを指定することで適切にパース されました。

QuickSight 上でグラフの調整を行うと、最終的には、以下のようなグラフを描画できます。

アプリの開発

続いて、スマートフォンアプリ開発の環境構築に移ります。Cognito の設定や S3 などの設定を簡略化するため、 AWS Amplify CLI および SDK を使って実装をすすめます。今回は Android アプリを開発しましたが、 iOS でも同等のことが可能です。まず、 Amplify のセットアップを行い、つづいて Authentication 部分を行います。上記の処理で自動生成されている IAM ロールに対して、冒頭で作成した S3 バケットへのアクセスを許可する必要があります。そこで、こちらを参考に、ポリシーを記述します。ただし、許可する Action は、 "s3:PutObject" のみとし、リソースは、  "arn:aws:s3:::bucket-name/*"  とします。この設定により、スマートフォンアプリはアップロードのみが可能となります。

続いて実装に移ります。処理の流れは次のようなステップになります。

  1. BLE デバイスに接続時にデータを収集し、 CSV ファイル形式でローカルに保存する。
  2. ファイルを S3 にアップロードする。
  3. アップロードが成功したら ステップ 1 で作成したファイルを削除する。

ステップ 1 の処理については、 BLE 機器側の仕様や通信仕様によって実装方法が異なるため、ここでは触れません。ステップ 2 では、 Amplify Storage のインポート機能を使用し、作成済みの S3 バケットを指定します。設定ができたら、ファイルのアップロード部分を実装します。 Amplify Storage では、デフォルトの保存先は、public/year=2022/month=01/day=01/data.csv のように、publicという接頭辞がつきます。これは、ユーザごとのファイルアクセスレベル をコントロールするために用いられます。今回は、すでに作成済みの S3 キーに合わせるため、こちらの方法を参考にして処理をオーバーライドし、onSuccess.accept("") として、public/ 部分を削除します。これで、データのアップロード部分が完成しました。最後のステップ 3 では、スマホアプリのストレージ領域を逼迫させないために、アップロードされた時点でファイルの削除を行います。以上で、BLE デバイスのデータをスマホアプリ経由でアップロードし、そのデータを可視化するという一連の流れができました。

まとめ

このブログでは、ソニーグループ株式会社様の REON POCKET の事例を元に、 スマホアプリによって BLE 機器からデータ収集し、 S3 にアップロードし、 それを QuickSight で可視化するという一連の流れについてご紹介を致しました。たとえ直接インターネットに繋がらないデバイスにおいても非常に貴重なデータを持つケースは多々あります。そのデータをクラウドに取り込み、新たな価値を創出することにチャレンジして頂ければと思います。

著書について

飯田 起弘

AWS IoT プロトタイピングエンジニア
電機メーカーでソフトウェアエンジニアとしてIoT関連の新規事業の立ち上げを経験の後、 AWS にてプロトタイピングソリューションアーキテクトとして、 IoT 関連案件の PoC, 本番導入などの支援に携わる。