アプリケーション開発について¶
本開発ガイドでは、再利用可能な Device Adapter、Edge Application、Backend Applicationを開発するために必要な設計・実装・テストのポイントや考え方を中心に説明します。
センサデータの収集と可視化¶
IoTシステムの初期段階において、まずはフィールドに設置したセンサからデータを採取し、バックエンドに収集・可視化することでフィールドで発生する事象を把握できるようにします。
-
対象のセンサーデバイスの決定
既設のデバイス、または、新規に設置するデバイス含めどのセンサーデバイスからデータを収集するか・できるかを確認します -
センサーデバイスの物理インタフェース確認
センサ素子と通信モジュール、および、一連のデバイスがパッケージングされているなど様々なデバイスが存在します。その中でどのような物理インタフェースを使ってセンサデータを収集する事ができるかを確認します。 -
センサーデバイスの通信プロトコルの確認
対象のセンサーデバイスで利用可能な物理インタフェースそれぞれについて、その物理インタフェースの上でどのような通信プロトコルによってどのようなデータを採取することが出来るのかを確認します。 -
サーバ構成・ネットワーク構成の確認と決定
センサーデバイスとの通信手段とバックエンドサーバの配置、および、その間のネットワーク構成を検討し、必要に応じてエッジGWの導入を検討します。 -
Device Adapterの開発
センサーデバイスと通信し必要なデータを採取するためのDevice Adapterを開発します。Device AdapterをICEに接続する事でICEによるデータ収集が可能になります。 -
可視化ツールの導入、または、Edge Applicationの開発
収集したデータを可視化するためのツール導入やアプリケーションを開発します。
本ガイドでは、対象のセンサーデバイスやネットワーク構成等がすでに決まりどのような通信プロトコルでセンサーデバイスからデータを採取するか確定している前提で、Device Adapterからのデータ収集とバックエンド側でセンサデータにアクセスするまでの開発部分に重点を置いて説明します。
データ収集・処理の戦略¶
データの収集は一般的に下記の流れになります
-
collect
センサーデバイスから発生する生データを採取します。センサーデバイスが主体的にデータを送信するPUSHパターンと、センサーデバイスはデータ取得要求を待ち受けて要求に応じてデータを返却するPULLパターンの2種類に大別されます。 -
extract
センサーデバイスから発生する生データのバイト列から特定の塊毎にレコード分割し、意味ある値に変換・分解します。 -
filter, enrichment, normalize
分割されたレコード毎に不要なレコードのオミット、不要な値の削除、値の追加や加工・演算、表記ゆれの修正・補正による正規化等の加工処理を行います。
ICEでは、特にデータの加工処理をいつどのタイミングで実施すべきかを柔軟に変更できるように、データ収集と加工を0~4次までの加工があるものと定義し、特に0次から2次までの加工処理に柔軟性を与えます。
-
0次加工
Device Adapterによってセンサーデバイスからデータを採取した時点で加工します。 -
1次加工
エッジGWにて採取したデータをバックエンドに送信する前に加工します。 -
2次加工
エッジGWから送信されたデータをバックエンド側のデータストアに格納する前の段階で加工します。 -
3次加工
データストアに蓄積されているデータに対して加工します。 -
4次加工
蓄積されているデータを表示・利用する直前に加工します。
データの加工処理戦略を考えるうえで、システムの初期段階で0次加工時に多くの処理を行ってしまうと、センサデータから採取できていたはずの生データに含まれる情報量が失われ、知り得た価値ある情報を活かせない事になってしまいます。 あらかじめデータの活用方法が固まっていて、将来の変更がない事がわかっている場合は0次加工時に全ての処理を作りこむことで以降のマシンリソースの消費を抑えることが出来ますが、そこまでの確信が無い場合やその他理由が無い場合には0次加工ではできる限りの処理を作りこまないようにする事を推奨しています。
データの活用¶
可視化したセンサデータをみることでフィールドで発生した事象を確認・把握していく中で、データを解析・分析します。
また、センサデータ以外の他システムから集めたデータや、時系列データ、統計データなど複数のデータの組合せや切り口でのデータを確認し試行錯誤していく中でデータの発生からアクションの実行を自動化し新たな価値創造を検討します。
システム全体の最適化¶
データの活用用途が決まってくると、バックエンド側に収集する必要のないデータをエッジGW側でフィルタする事でエッジとバックエンド間の通信量や、バックエンド側でのデータ保存量を削減するなどのデータ流量の調整を検討します。
Node-REDフロー統計情報出力による最適化¶
Node-REDフローの動作統計情報を定期的に出力する機能を有効化することにより、Node-REDフロー上のノードの処理状況を確認することができます。 この機能を用いることでより詳細なデータ流量の確認や調整を行うことができます。詳細はnodered_settings.jsの項目を参照してください。
センサーデバイスに対する操作・指示¶
対象のデバイスによっては、ある事象発生時にアクチュエータに指示を行い デバイスを操作することも考えられます。