1. My-IoTとpreMSM

My-IoTは、そのHPによると、『IoTシステム提供者とエンドユーザー間にある「IoTギャップ」を解決し、ビジネス視点でIoTの新しい価値を生むMy-IoTのエコシステム。IoTシステム提供者が提供する既存のエッジを高度化し、エンドユーザー・利用者の使い方に最適化されたIoTを構築します。』ということです。

一方、preMSMは、エンドユーザーが、preMSMのセンサから得たデータを、Gateway(My-IoTでは、エッジと呼びます)を介してリアルタイムにダッシュボードで確認するとともに、エッジサーバーやクラウドに蓄積するという使い方を想定しています。そして、そのシステムのコンセプトは、Node-REDなどのユーザーフレンドリーなツールを使って、ユーザーが改善し、それにより、ユーザーのオリジナルなノウハウが組み込まれた世界に一つしかないIoTが構築できるというものです。

「エンドユーザー視点」であることが2つのシステムの共通点というところから、preMSMシステムへのMy-IoTの導入可能性の確認を行いましたので報告します。

2. My-IoTの導入

My-IoTのインストールの方法に関しては、「My-IoT ユーザー・マニュアル」「My-IoTプラットフォーム仕様書」に詳しく書かれているので、そちらを参照してください。以下では、今回試してみた内容を中心にまとめます。

2-1. My-IoTの全体像

まず、我々が理解したMy-IoTシステムの全体像を図1に示します。

図1. My-IoTの全体像

  • My-IoTは、My-IoTコンソーシアムに入会した企業・団体ごとにテナントIDが割り振られます。これが最初にやらないといけないことです。そのあと、ユーザー登録が必要になります。
  • My-IoTは、My-IoTクラウドとエッジグループに大きく2つに分かれます。
  • My-IoTクラウド側は、IoTシステム提供者が構築します。エッジグループ側のエンドユーザーは、My-IoTエッジを設置してデータの提供等を行うことになります。
  • IoTシステム提供者は、1) エッジアプリやクラウドアプリなどのアプリを開発する「開発者」と2) それらのアプリを組み合わせてシステムパッケージを開発/管理したり、エッジグループを管理する「利用者」に分かれます。開発者と利用者は同じ人でも構いません。今回は、開発者と利用者は同じ人物です。
  • アプリは、テナントIDが同じ利用者間で共有できます。今回は、クラウドアプリは他の開発者が開発されたものを利用させていただきました。
  • My-IoTエッジは、現在(2022年1月末)は、Raspberry Piのみです。今回は、残念ながら、動作保証機種が手持ちになく、動作確認機種各1台計2台で確認を行いました。
      動作保証機種:Raspberry Pi 3 Model B+
      動作確認機種:Raspberry Pi 3 Model B、Raspberry Pi 4 Model B
  • My-IoTエッジの電源を投入し、ネット環境に接続されると、エッジアプリが自動的にインストールされます。更新の場合も自動的に更新されます。
  • 残念ながら、エンドユーザーは、エッジアプリがどのようなものかを見ることはできません。

2-2. My-IoTエッジの立上げ

My-IoTエッジの立上げ手順に関しては、「My-IoTユーザーマニュアル」の3.4. My-IoTエッジをセットアップする」を参照してください。ここでは、立ち上げ時に困った事象とその対応策を記載します。

2-2-1. SSID設定ファイルダウンロードの暗号化の種類

My-IoTエッジを接続するWiFiのSSIDの設定を行い、ファイルをダウンロードする手順のところで、暗号化の種類を入力する必要があります。リストタブで、1) WEP, 2)WPA2-PSK-AES, 3)WPA2-PSK-TKIPの3択になっています。普段、気にしていないので、どれを選んだらよいか困りました。

ネットで調べると、WPA2-PSK-AESの方式がこの3つの中では最新で、次にWPA2-PSK-TKIP、一番古いのがWEPのようです。最新のWPA2-PSK-AESを選んで、まず実行するのが良いと思われます。

我々は、WPA2-PSK-AESでうまくつながっています。

表1. WiFiの暗号化方式と暗号化アルゴリズム

参考HP:無線LANの暗号化方式、WPA2のTKIPとAESの違いとは?

2-2-2. My-IoTエッジ接続失敗

My-IoTエッジの立上げ準備が終わり、いざMy-IoTエッジを接続と電源を入れてもMy-IoTエッジが認識されませんでした。

図2. My-IoTエッジが登録されない

結局、原因は「学内のネットワークからセキュリティの関係でMy-IoTに接続できないため」でした。

図3. My-IoTエッジ一覧画面(2台登録完了)

「なぜ?」ということで、かなり悩んでチェックを行いました。接続できないときのチェックリストとして参考になるかもしれませんので、ここに記しておきます。逆に言うと、これらの項目をチェックしてもNGなら、上位のネットで接続を拒否されていることを疑われたら良いと思います。

No 項目 図番号
1 WiFi接続(SSID設定ファイル)の確認 図4
2 プロビジョニング用証明書の確認 図5

表2. My-IoTエッジ接続NGの場合のチェック項目

図4. WiFi接続(SSID設定ファイル)の確認

図5. プロビジョニング用証明書の確認

2-2-3. Raspberry Piのパスワードが分からない

My-IoTエッジを登録しようとして、SDカードをRaspberry Piに挿して、電源を投入すると、いきなりユーザー認証画面(図6)が立ち上がります。このことは、ユーザーマニュアルに書かれていません。

パスワードが分からないので、登録することができず困りました。対応策として2つ挙げておきます。今回は、対応策1で乗り切りました。

図6. My-IoTエッジ立上げ画面

【対応策1】

1) rootのパスワードを変更する。

2) rootでログインし、ユーザーpiのパスワードを変更する。

$ sudo passwd pi

3)rebootし、piユーザーでログインする。

参考HP:Raspberry Piにログイン出来ない!パスワード初期化手順

【対応策2】

1) ユーザーpiのパスワードを変更する。

参考HP:ラズベリーパイでパスワードを忘れたときの対処法

2-3. エッジグループの作成とエッジの登録

エッジグループの作成とエッジの登録の方法は、「My-IoTユーザーマニュアル」の4.2. エッジグループを作成する」に詳しく書かれていますので、そちらを参照ください。

今回は、グループ名”StrawberryFarm”を登録しました。

図7. エッジグループ管理画面

エッジは、2台登録しました。図3.My-IoTエッジ一覧画面(2台登録完了)を参照ください。一台は、メンテナンス機として、もう一台は一般機として登録しました。

2-4. エッジアプリの作成と登録

preMSMに搭載する以下のセンサーのデータをノード番号、センサ番号、送信日時と合わせて、My-IoTクラウドに送るエッジアプリを作成した。

  1. 環境センサBME680の温度、湿度、気圧、ガスのデータ
  2. ADS1015のADC0端子に接続されたCO2の換算データとADC0,ADC1,AD2の各端子のAD変換後の数値データ
  3. RPR-0521の近接センサと照度センサのデータ
  4. S11059のRed,Green,Blue,赤外の各データ

エッジアプリケーションの開発と登録に関する詳細に関しては、「My-IoTプラットフォーム仕様書」の「エッジアプリケーションを開発する」を参照されたい。

ここでは、今回開発したエッジアプリケーションの概要に関して説明する。

2-4-1. コネクタの作成と登録

コネクタとは、My-IoTデータストアに蓄積するデータ形式を定義したものです。エッジアプリケーションとクラウドアプリケーションでデータの形式を合わせるために使用されます。

コネクタはjsonフォーマットのファイルです。今回、”preMSMP3_HouseControl01″という名前のコネクタを登録しました。

図8にコネクタの登録画面を示します。コネクタIDがエッジアプリやクラウドアプリの登録で必要になります。

図8. コネクタの登録画面

以下に、コネクタ全体を載せておきます。

{
"$schema": "http://json-schema.org/draft-07/schema",
"type": "object",
"required": [
"connectorID",
"edgeID",
"timestamp",
"node",
"label",
"datetime",
"data0",
"data1"
],
"properties": {
"connectorID": {
"type": "string"
},
"edgeID": {
"type": "string"
},
"timestamp": {
"type": "string"
},
"node": {
"type": "integer"
},
"label": {
"type": "string"
},
"datetime": {
"type": "string"
},
"data0": {
"type": "number"
},
"data1": {
"type": "number"
},
"data2": {
"type": "number"
},
"data3": {
"type": "number"
},
"data4": {
"type": "number"
}
},
"additionalProperties": false

2-4-2. Node-REDフローの作成

図9に、Node-REDのフロー図を示します。

Raspberry PiのUSB端子(/dev/ttyUSB0)に接続されたpreMSMからシリアルにNode-REDに入力されたデータをセンサごとに仕分けし、data0,data1,data2,data3に割り付け、さらにNode情報、センサ記号と日時情報を追加して、My-IoTデータストアに送信する。

表3に、各センサの出力とセンサー記号,data0,data1,data2,data3の関係を示す。

図9. Node-REDフロー図

センサー名 センサー記号 data0 data1 data2 data3
BME680 t2 温度 湿度 気圧 ガス
ADC1015 t3 CO2 ADC0 ADC1 ADC2
RPR0521 t5 照度 近接
S11059 t10 Red Green Blue IR

表3. 各センサとデータの関係

2-4-3. エッジアプリケーションの登録

エッジアプリケーションとして、Node-REDのフローを”preMSMP3_HouseControl”という名称で登録した。

図10. エッジアプリケーションの登録

2-4.システムパッケージの作成

2-3で登録したエッジアプリを使って、システムパッケージ”preMSMP3_HouseControl”の作成を行った。図11にシステムパッケージ管理画面を示す。

図11. システムパッケージ管理画面

そして、図12にパッケージの詳細を示す。クラウドアプリには、他の開発者が開発した既存のクラウドアプリを流用した。

図12. パッケージ詳細画面

既存のクラウドアプリは「IoTデータ取得WebAPI」という名称です。その動作説明は、以下のようなもので、日付を入力するとその日付のデータを取得できるというものです。

「IoTデータ取得WebAPI 任意のコネクタIDのデータを取得します。 クエリパラメータに date=YYYYMMDD を指定すると、指定した日付に登録されたデータを取得することができます。 date を省略した場合、本日登録されたデータを取得します。」

2-5. データの登録と取得

2-4.で登録したシステムパッケージをエッジグループ”StrawberryFarm”のシステムパッケージとして登録した。

その状態で、My-IoTエッジを登録し、エッジアプリがインストールされたことを確認。この一般機からデータをMy-IoTデータストアに蓄積できていることを確認した。

図13. エッジグループ詳細図

さらに、図13に示したエッジグループ詳細図のApiUrlを用いて、データを取得できることを確認した。結果を図14に示す。

AWSのAPIGatewayを利用したElasticSearchへの検索リクエストになります。以下のcurlコマンドでデータを取得できる。出力はjsonフォーマットで送られてくる。

$ curl <エッジグループ詳細画面で確認できるApiUrl>/<任意のパス>

図14.登録したデータの取得

3. My-IoTを使ってみて

図15がわれわれの目指すpreMSMを使ったIoTシステムの姿(予定している機能)です。今回、My-IoTをこのシステムに導入してみました。結果、図16の機能まで確認できました。今回我々の力不足で確認できていない部分も多いと思われます。図15と図16の間には、表4に示す機能が残っていると思われます。

図15. preMSMを使ったIoTの目指す姿(予定している機能)

図16. 今回確認できた機能

表4. 今後確認/追加していきたい機能