時刻の管理

1.なぜ時刻の管理が必要か

IoTデータを解析する場合、上述した単位と共に重要となる項目として測定の時刻の管理が重要です。例えば、取得したデータから事象間の因果関係を究明しようとした場合、それぞれの事象が発生した時刻が正しく分からなければ因果関係の究明を誤ってしまいます。

どの程度の時刻の正確さが必要かは、センサによって変わってきます。例えば、複数のビニールハウスに設置した環境センサ間の温度や湿度のデータ取得には、ミリ秒単位の時刻の正確さは不要と考えられます。せいぜい、分単位の管理でよい場合がほとんどだと思われます。一方、ロボットの腕の先端と腕の根元に付けた2つの9軸センサで腕の傾きを知って制御しようという場合には、2つのセンサ間にはミリ秒単位の時間管理が必要だと考えられます。

このように複数のセンサの出力データに対する時刻の管理をどのように行うかが、ここでいうところの時刻管理です。以下、もう少し具体的に説明していきます。

2.センサモジュール単体での時刻管理

センサモジュールには時計(RTC, Real Time Clock)は搭載していません。ただし、センサモジュールの電源ONからの経過時間を、マイクロ秒単位で測定データのヘッダデータとして各レコードに付けています。一つのセンサモジュールであれば、このヘッダデータに付けられた時刻データで経過時刻を追うことができます。また、ゲートウェイやデータ転送途中のサーバなどでデータを記録した場合に、このヘッダデータを同じデータであることのエビデンスに使用することができます。

3.ゲートウェイ、エッジサーバの時刻管理

ゲートウエイとエッジサーバは、NTP(Network Time Protocol)サーバと時刻同期を行います。NTPサーバは組織で準備されているサーバに同期をとる場合もありますし、国立研究開発法人 情報通信研究機構 NICTが提供するサーバntp.nict.jp)などに同期をとる場合もあります(ゲートウェイの時刻設定に関しては、「ゲートウェイの構築」の「タイムサーバの設定」の項を参照ください)。

ゲートウエイでは、センサモジュールから送られてきた測定データをある単位でまとめて、ファイル(JSONフォーマット)としてエッジサーバに送ります。まとめるのは、1つのセンサモジュールから送られてくるデータのみで、複数のセンサモジュールからデータをまとめてしまうことはありません。後から、時刻を追う場合に複数のセンサモジュールのデータをまとめてしまうと追えなくなるからです。

そして、エッジサーバは、ゲートウェイから送られてきたデータをファイルに書込む際に、そのファイル名にファイルをオープン(作成)する際の時刻を使用します。したがって、ファイル名を見れば、保存された時刻がマイクロ秒単位で分かる仕組みになっています。また、書き込まれたデータのヘッダデータを見れば、センサモジュールで取得された時刻が追えるようになっています。例えば、2つのファイルのファイル名からその時刻の差分から経過時間が分かります。その経過時間がファイルの中のヘッダデータの差分で分かる経過時刻と大きくずれていたらデータが信用できないということが分かります。

このようにして、各測定データの時刻を追跡できるようにしています。
センサモジュール⇔ゲートウエイ、ゲートウエイ⇔エッジサーバ、それぞれの間の通信が不調になっても、それより以前の動作に影響が出ないように設計しています。

GPSユニットを使ったセンサモジュールからエッジサーバまでの遅延時間の評価に関しては、下記を参照ください。

GPSユニットを使ったデータ転送時間の評価