6. 付録

6.1. 基準時刻

基準時刻は計測の開始時刻を表す情報です。Agentは、基準時刻を適宜取得し、intdashに送信します。

注釈

「計測」とは、特定のエッジから送信された時系列データのまとまりを指します。詳細については別途iSCPv1に関する資料を参照してください。

基準時刻には、以下の2つがあります。

EdgeRTCによる基準時刻

Agentを実行しているシステムのリアルタイムクロック(RTC)による基準時刻です。

NTPによる基準時刻

NTPサーバーと同期した時計による基準時刻です。NTP基準時刻を使用するには、Statusプラグインが有効になっている必要があります。

Statusプラグインを有効にするには、マネージャー設定ファイルの loggers にStatusプラグインの設定を書き込みます。 設定ファイルのひな型 /opt/vm2m/etc/manager.conf を参照してください( details.pluginstatus となっている設定がStatusプラグインの設定です)。

(インストール直後の設定ファイル /etc/opt/intdash/manager.conf ではStatusプラグインは有効になっています。)

基準時刻の種類

基準時刻が決定するタイミング

基準時刻をintdashに送信するタイミング

EdgeRTC

Agent起動時

データ送信開始時

NTP

StatusプラグインがNTPサーバーと疎通した時点以降

一定周期(起動後10分間は1分間隔、そのあとは10分間隔)

6.2. 送信側でのフィルタリング

デバイスコネクターを通じてマネージャーに集められた時系列データは、マネージャーでのフィルタリングによって、RealtimeやBulkなどの各クライアントに振り分けられてintdashサーバーに送信されます。

フィルターを使用することで、データの送信方法を柔軟に切り替えることができます。

6.2.1. 送信側でのフィルタリングの流れ

マネージャーは、それぞれの時系列データに対して、各クライアントを使って送信する(パス)か、もしくは送信しない(ドロップ)かを決定します。

  • 特に設定がない場合は、時系列データはRealtimeクライアント経由でintdashサーバーに送信されます。

  • Realtimeクライアント用のフィルターで「ドロップ」となったためRealtimeクライアントで送信されなかったデータは、Bulkクライアントによりintdashサーバーに送信されます。

  • Bulkクライアント用のフィルターでも「ドロップ」となったデータはintdashサーバーに送信されません。

いずれの場合も、時系列データはマネージャーによりRAWデータとしてダンプされます。

Realtimeクライアント

Bulkクライアント

データの取り扱われ方

パス

-

intdashサーバーへリアルタイムに送信される。intdashサーバーに過去のデータとしても保存される。

ドロップ

パス

一定周期の一括伝送でintdashサーバーへ送信される。intdashサーバーに過去のデータとしても保存される。

ドロップ

ドロップ

intdashサーバーへリアルタイムに送信されない。intdashサーバーには過去のデータとしても保存されない。 RAWデータ としてエッジ側のローカルストレージに保存される。

6.2.2. フィルターの構成

フィルタリングは、複数のフィルターにより行います。複数のフィルターは順次評価され、各時系列データがどのクライアントを使って送信されるべきかを判定します。

たとえば、以下のようなフィルター構成の場合、以下のようになります。

../_images/03_filter_chain.ja.png
  • データXはどのフィルターにも相当しないためRealtimeクライアントにて送信されます。

  • データYは1番目のフィルターによりRealtimeクライアントからドロップするため、Bulkクライアントにて送信されます。

  • データZは1番目のフィルターによりRealtimeクライアントからドロップし、4番目のフィルターによりBulkクライアントからもドロップするため、送信されません。

6.2.3. フィルターの共通設定

フィルターに関する設定は、設定ファイルの manager.filters[] に記載します。 filtersフィールドの配列に格納されたオブジェクトの中身は以下のようになります。

キー

説明

name

string

フィルターの種類 の各フィルターの表を参照してください。

channel

string

フィルターを適用するチャンネルを設定します。設定できるのは"-1"、"0"~"255"です。"-1"の場合、全チャンネルが対象となります。

target

string

フィルターを適用するクライアントを設定します。( realtime|guaranteed|both

setting

object[]

フィルターの設定です。フィルターの種類 の各フィルターの説明を参照してください。

target には、以下いずれかを指定します。

  • realtime : Realtimeクライアントが送るデータにフィルターを適用します

  • guaranteed : Bulkクライアントが送るデータにフィルターを適用します

  • both : RealtimeクライアントとBulkクライアント両方のデータにフィルターを適用します

6.2.4. フィルターの種類

フィルターには以下の種類があります。

特定のデータタイプのデータのみに適用できるフィルターと、全てのデータタイプに適用できるフィルターがあります。

フィルター名

フィルターを適用できるデータタイプ

説明

samplingフィルター

CAN、NMEA、Motion JPEG、String、Float、Int、Bytesのみ

サンプリングフィルター。データを間引きます。

can_idフィルター

CANのみ

許可リスト型のCAN IDフィルター。指定されたCAN IDのデータをパスします。

can_maskフィルター

CANのみ

ブロックリスト型のCAN IDフィルター。指定されたCAN IDのデータをドロップします。

channelフィルター

Any

ブロックリスト型のチャンネルフィルター。指定されたチャンネルのデータをドロップします。

duplicateフィルター

Any

データ複製フィルター。RealtimeクライアントとBulkクライアントに同じデータを複製します。

6.2.4.1. samplingフィルター

チャンネルにサンプリングフィルターを設定すると、サンプリング間隔として指定された時間範囲内で各データIDのデータポイントが1つずつになるようにデータが間引きされます。

各サンプリング区間においては、データポイントは以下のように処理されます。

  • 各データIDの最初のデータポイントはパスします。

  • 同じデータIDの2つ目以降のデータポイントは破棄されます。

  • MotionJPEGのようにデータIDによる区別がない場合は、最初のデータポイントがパスします。

以下は、3種類の異なる頻度を持つCANデータ(ID 1、2、3)が、samplingフィルターによって間引きされる様子を示した図です。 各サンプリング区間においては、ID 1を持つデータのうち最初のデータポイントがフィルターをパスしています。同様に、各サンプリング区間において、ID 2を持つデータのうち最初のもの、ID 3を持つデータのうち最初のものがフィルターをパスしています。

../_images/03_filter_sampling.ja.png

samplingフィルターのsettingオブジェクトの内容

key

value

rate

サンプリング間隔[msec]

例(Realtimeのチャンネル1を、1000[msec]の時間範囲を設定してサンプリング):

{
  "manager": {
    ...
    "filters": [{
      "name": "sampling",
      "channel": "1",
      "target": "realtime",
      "setting": [{"key": "rate", "value": "1000"}]
    }]
   },
   ...
 }

6.2.4.2. can_idフィルター

特定のCAN IDのデータをパスし、それ以外のデータをドロップする、許可リスト型のフィルターです。

  • 設定されたCAN IDのデータのみパスします。

    • 複数のCAN IDを設定できます。

    • 設定されていないCAN IDはドロップします。

    • 拡張CAN IDを設定する場合は、 0x80000000 のように先頭ビットを立てた数値で入力してください。

can_idフィルターのsettingオブジェクトの内容

key

value

id

通過させるCAN ID

例(Realtimeのチャンネル2のデータのうち、CAN ID 0x00000010と0x00000020だけパスする):

{
  "manager": {
    ...
    "filters": [{
      "name": "can_id",
      "channel": "2",
      "target": "realtime",
      "setting": [
        {"key": "id", "value": "16"},
        {"key": "id", "value": "32"}
      ]
    }]
  },
  ...
}

6.2.4.3. can_maskフィルター

特定のCAN IDのデータをドロップする、ブロックリスト型のフィルターです。

  • 設定されたCAN IDをドロップします

    • 複数のCAN IDを設定できます。

    • 設定されていないCAN IDはパスします。

    • 拡張CAN IDを設定する場合は、 0x80000000 のように先頭ビットを立てた数値で入力してください。

フィルターのsettingオブジェクトの内容

key

value

id

ドロップするCAN ID

例(Bulkのチャンネル1の拡張CAN ID 0x00000010をドロップする):

{
  "manager": {
    ...
    "filters": [{
      "name": "can_mask",
      "channel": "1",
      "target": "guaranteed",
      "setting": [
        {"key": "id", "value": "2147483664"}
      ]
    }]
  },
  ...
}

2147483664 は、0x00000010の先頭ビットを立てて、十進表記したものです。

6.2.4.4. channelフィルター

特定のchannelをドロップするブロックリスト型のフィルターです。

  • 設定されたchannelのデータをドロップします

フィルターのsettingオブジェクトの内容

  • 不要

例(Realtimeのチャンネル1をドロップする):

{
  "manager": {
    ...
    "filters": [{
      "name": "channel",
      "channel": "1",
      "target": "realtime",
      "setting": []
    }]
  },
  ...
}

6.2.4.5. duplicateフィルター

データを複製します。

  • データを複製し、RealtimeとBulkに同じデータを送信します

フィルターのsettingオブジェクトの内容

  • 不要

例(Realtimeのチャンネル1のデータをコピーしてBulkにも送る):

{
  "manager": {
    ...
    "filters": [{
      "name": "channel",
      "channel": "1",
      "target": "realtime",
      "setting": []
    }]
  },
  ...
}

6.3. RAWデータ

デバイスコネクターからAgentに入力された全データを、RAWデータとしてダンプファイルに保存することができます。

6.3.1. RAWデータの保存と自動削除

RAWデータを保存するかは設定可能です。デフォルトでは保存する設定になっています。

RAWデータを保存し続けるとディスクが一杯になる可能性があるため、自動的にRAWデータを削除する設定があります。

{
  "manager": {
    "rawdir": "/var/lib/intdash/raw",
    "raw_autodelete": true,
    "raw_autodelete_th": 85,
    ...
  },
  ...
}

raw_autodelete をtrueに設定すると、RAWデータを保存するパーティションが一定の割合に達した場合にRAWデータを自動削除します。 自動削除は、RAWデータ保存ディレクトリ rawdir が存在するパーティションのディスク使用率が raw_autodelete_th よりも小さくなるまで、古いRAWデータから順に削除します。

6.3.2. RAWデータの保存先とファイル構成

RAWデータ保存ディレクトリに、計測ごとのディレクトリが作成され、その中にダンプファイルが保存されます。

+ /opt/vm2m/var/lib/intdash
  + raw
    + 1562549837.123456789     # (1)
      - 001_000.raw            # (2)
      - 002_000.raw            # (3)
    + 1562549837.999999999
      - 001_000.raw
      - 001_001.raw

番号

説明

(1)

計測ディレクトリ

(2)

チャンネル1のデバイスコネクターが送信したデータのダンプ

(3)

チャンネル2のデバイスコネクターが送信したデータのダンプ

6.3.2.1. 計測ディレクトリ

計測ディレクトリは計測ごとに新規作成されます。ディレクトリ名は、計測のEdgeRTC基準時刻をUnix時間でナノ秒まで表記したものです。(例: ディレクトリ名 1562549837.123456789 は、基準時刻 2019/7/8 1:37:17.123456789 UTC を意味します。)

6.3.2.2. ダンプファイル

ダンプファイルは、デバイスコネクターごとのデータのダンプファイルです。ファイル名は以下のようになります。

XXX_NNN.raw

  • XXX : デバイスコネクターのチャンネル番号(10進数:000-255)

  • NNN : カウンター番号(10進数:000-999)

ダンプファイルのサイズが512MB以上になると、次のカウンター番号で新しいファイルが作られます。

6.3.2.3. ダンプファイルのフォーマット

ダンプファイルは Agentとデバイスコネクターの間で使われるFIFOのデータフォーマット のデータをそのままファイルにダンプしたものです。

サンプル(NMEA)

../_images/dump-file.png

6.3.3. RAWデータを解析するためのツール

Agentをインストールすると、RAWデータを解析するためのツールもインストールされます。

使用例 :

/opt/vm2m/bin/rawutil -P hexdump /opt/vm2m/var/lib/intdash/raw/1562551394.826226991/000_000.raw
../_images/hexdump.png

ツールの詳しい使用方法については、 rawutil のヘルプを参照してください。

/opt/vm2m/bin/rawutil -h

6.4. 再送データ

RealtimeクライアントまたはBulkクライアントによって送信が試みられ、intdashサーバーに正しく送信できなかったデータは、再送データとして保持されます。 再送データとして保持された時系列データは、Resendクライアントによる再送処理によって順次再送されます。

6.4.1. ディスクの空き容量が少なくなった場合の自動停止

ディスクの使用量が閾値を超えた場合、Agentは自動停止します。Agentは以下のいずれかの条件を満たすときに自動停止します。([]は設定ファイルのキーを表します。)

  • [manager.required_space] < 再送データ保存先パーティションの使用率(%)

  • [manager.required_space_raw] < [manager.rawdir] のパーティションの使用率(%)

6.4.2. 保存先とファイル構成

再送データ保存ディレクトリ以下に、計測ディレクトリが作成され、その中に再送セクションファイルを保存されます。

+ /opt/vm2m/var/lib/intdash
  + meas
    + <SERVER_NAME>                             # (1)
      + CCCCCCCCC_TTTTTTTTTT.NNNNNNNNN          # (2)
        - .meas.<MEAS_UUID>                     # (3)
        - .meta                                 # (4)
        - SSSSSSSSSS_TTTTTTTTTT.NNNNNNNNNF.EXT  # (5)
        - SSSSSSSSSS_TTTTTTTTTT.NNNNNNNNNF.EXT
    + <SERVER_NAME>
      + CCCCCCCCC_TTTTTTTTTT.NNNNNNNNN
        - .meas.<MEAS_UUID>
        - .meta
        - SSSSSSSSSS_TTTTTTTTTT.NNNNNNNNNF.EXT
        - SSSSSSSSSS_TTTTTTTTTT.NNNNNNNNNF.EXT

番号

説明

(1)

サーバーディレクトリ

(2)

計測ディレクトリ

(3)

計測UUID

(4)

計測メタ情報

(5)

再送セクション

6.4.2.1. サーバーディレクトリ

サーバーディレクトリには、このサーバーへ送信する計測のデータが保存されます。 ディレクトリ名は、送信対象サーバーの名前です。

6.4.2.2. 計測ディレクトリ

計測ディレクトリは、計測ごとに新規作成されます。 ディレクトリ名は、下記のとおりです。

CCCCCCCCC_TTTTTTTTTT.NNNNNNNNN

  • CCCCCCCCC : 計測回数

  • TTTTTTTTTT.NNNNNNNNN : 計測のEdgeRTC基準時間(ナノ秒までのUnix Timestamp)

6.4.2.3. 計測UUIDファイル

計測UUIDファイルは、計測UUIDをファイル名に含む空のファイルです。ユーザーが計測を見つけやすくするために作成されます。ファイル名は、 .meas.<計測UUID先頭8桁> です。

6.4.2.4. 計測メタ情報ファイル

計測メタ情報ファイルには、計測に関する以下の情報が保存されています。

  • シリアルナンバー(最後のセクションのシリアル番号)

  • ユニットカウント(総ユニット数)

  • 再送セクションファイル数

  • 再送ファイルサイズ(総再送ファイルサイズ)

  • 計測UUIDフラグ(計測UUIDを取得したか)

  • 終了フラグ(計測終了をサーバーに通知したか)

  • 計測タグフラグ(計測タグをサーバーに通知したか)

  • 計測カウント(このターミナルで作成された計測のカウンター番号)

  • EdgeRTC基準時刻

  • 計測時間

ファイル名は、 .meta です。

6.4.2.5. 再送セクションファイル

再送セクションファイルは、intdashのSectionのUnitのみをダンプしたファイルです。

ファイル名は、 SSSSSSSSSS_TTTTTTTTTT.NNNNNNNNNF.EXT です。

  • S : セクションのシリアルナンバー

  • T : EdgeRTCからの相対時間(秒)

  • N : EdgeRTCからの相対時間(ナノ秒)

  • F : フラグ(B:基準時刻を含んでいる、なし:左記以外)

  • EXT : 拡張子(bin: 再送データ、store: ストア送信データ、store.bin: ストア送信の再送データ)

例:

0000000000_0000000013.517448529B.bin
0000000001_0000000014.002924135.bin
0000000002_0000000015.000175599.store
0000000003_0000000016.002819513.store.bin

6.5. Agentとデバイスコネクターの間で使われるFIFOのデータフォーマット

AgentのFIFOが読み取るデータのフォーマットは、共通ヘッダー部分と、データタイプごとの固有部分から構成されます。

以下は、プリミティブ文字列型の「Hello」という文字列のデータの例です。

../_images/fifo-data-sample.ja.png

重要

Agentとデバイスコネクターの間のFIFOで使われるデータフォーマットやデータタイプと、iSCPv1のデータフォーマットやデータタイプは異なります。

6.5.1. 共通ヘッダー

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+---------------+---------------+
| Type          | Length                                        |
+---------------+---------------+---------------+---------------+
| Time Sec                                                      |
+---------------+---------------+---------------+---------------+
| Time Nano                                                     |
+---------------+---------------+---------------+---------------+
| DataType      | SeqNo         | Data                          |
+---------------+---------------+---------------+-----------//--+

フィールド名

バイト長

エンディアン

符号

値の範囲

説明

Type

1

なし

1

メッセージの種類(1で固定)

Length

3

LE

なし

10-16777216

Time Sec以降のサイズ(Time Secを含む)

Time Sec

4

LE

なし

0-4294967295

システムの単調増加する時間(秒) 1

Time Nano

4

LE

なし

0-999999999

システムの単調増加する時間(ナノ秒)

DataType

1

なし

FIFOのデータタイプコード(下記、データタイプの表を参照)

SeqNo

1

なし

0-255

シーケンシャル番号(0固定でもデータ送信可能)(アップストリームを行う際、Agentはこのフィールドをデバイスコネクターから受け取りますが、intdashサーバーには送りません。また、ダウンストリームの際にAgentからデバイスコネクターが受け取るデータでは、このフィールドは常に0になります。)

Data

0-16777208

データ(FIFOのデータタイプ毎の項を参照してください)

1

POSIXを使用できるプログラミング言語では、 clock_gettime() 関数に CLOCK_MONOTONIC_RAW を指定することで取得できます。

データタイプ

6.5.2. データタイプごとの固有部分

6.5.2.1. Status(データタイプ: 0x03)

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+---------------+---------------+
| StatusId      | Reserved      | Size                          |
+---------------+---------------+---------------+---------------+
| Data                                                          |
+---------------+---------------+---------------+-----------//--+

フィールド名

バイト長

エンディアン

符号

説明

StatusId

1

なし

0x90

ステータスの種類(0x90で固定)

Size

2

LE

なし

0-32767

データサイズ

Data

0-32767

JSON文字列

6.5.2.2. Basetime(データタイプ: 0x19)

ダウンストリームを行うAgentにおいて、デバイスコネクターの設定で receive_basetimetrue になっていると、Agentからデバイスコネクターに基準時刻のデータが渡されます。 その際に使用されるデータフォーマットです。

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+---------------+---------------+
| Source        | Reserved                                      |
+---------------+---------------+---------------+---------------+
| Sec                                                           |
+---------------+---------------+---------------+---------------+
| Nano Sec                                                      |
+---------------+---------------+---------------+---------------+

フィールド名

バイト長

エンディアン

符号

説明

Source

1

U

Source(下記Sourceを参照)

時刻のソース

Sec

4

LE

U

0-4294967295

計測開始時の時刻のUNIXエポック経過秒

Nano sec

4

LE

U

0-999999999

計測開始時の時刻のUNIXエポック経過ナノ秒

Source

時刻のソース

1

EdgeRTCから取得した時刻

2

NTPから取得した時刻

3

GPSから取得した時刻

255

手動設定された時刻

6.5.2.3. NMEA(データタイプ: 0x10)

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+---------------+---------------+
| Size                                                          |
+---------------+---------------+---------------+---------------+
| String                                                        |
+---------------+---------------+---------------+-----------//--+

フィールド名

バイト長

エンディアン

符号

説明

Size

4

LE

なし

0-4294967295

データサイズ

Data

0-4294967295

NMEA文字列

6.5.2.4. CAN/CAN-FD(データタイプ: 0x11)

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+---------------+---------------+
| ID                                                            |
+---------------+---------------+---------------+---------------+
| DLC           | Data                                          |
+---------------+---------------+---------------+-----------//--+

フィールド名

バイト長

エンディアン

符号

説明

ID

4

LE

なし

0-4294967295

CAN ID(拡張CANの場合は先頭ビットを立てる)

DLC

1

なし

0-255

データサイズ

Data

0-255

データ

6.5.2.5. JPEG(データタイプ: 0x12)

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+---------------+---------------+
| JPEG                                                          |
+---------------+---------------+---------------+-----------//--+

フィールド名

バイト長

エンディアン

符号

説明

JPEG

0-16777216

JPEG (ISO/IEC 10918-1, Annex B) のバイナリデータ

6.5.2.6. H.264(データタイプ: 0x1C)

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+---------------+---------------+
| NALType       | NALUnits                                      |
+---------------+---------------+---------------+-----------//--+

フィールド名

バイト長

エンディアン

符号

説明

NALType

1

NALType(下記NALTypeを参照)

NALUnits

NALUnits

NALType

NALType

NALUnitsに格納するデータ

0x00

IDR slice (nal_unit_type == 5)であるNAL Unitsの1フレーム分 2 の連結 3

0x01

non-IDR slice (nal_unit_type == 1)であるNAL Unitsの1フレーム分の連結

0x08

H.264のデコードに必要なNAL Units 4 の連結。NALType 0x00 の都度、先行して1つ生成するものとする。

2

nal_unit_type が1-5 (Coded slice) の時、同一の nal_unit_type のNAL unitについて、 slice_headerfirst_mb_in_slice が0であるものから、次に0であるものの前までのNAL units

3

“ITU-T Rec. H.264 | ISO/IEC 14496-10 Advanced Video Coding” における “Byte stream format (Annex B)” に従い、次のように連結すること: start code prefix + NAL unit + start code prefix + NAL unit ... start code prefix + NAL unit

4

H.264のデコードに必要なNAL unitsはSPS( nal_unit_type == 7 )、PPS( nal_unit_type == 8 )のNAL units

6.5.2.7. String(データタイプ: 0x1D) プリミティブ文字列型

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+---------------+---------------+
| ID Length     | ID                                            |
+---------------+---------------+---------------+-----------//--+
| Data                                                          |
+---------------+---------------+---------------+-----------//--+

フィールド名

バイト長

エンディアン

符号

説明

ID Length

1

0-255

IDの長さ

ID

0-255

0-16777215

UTF-8エンコードしたID

Data

文字列

6.5.2.8. Float(データタイプ: 0x01E)プリミティブFloat64型

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+---------------+---------------+
| ID Length     | ID                                            |
+---------------+---------------+---------------+-----------//--+
| Data                                                          |
+---------------+---------------+---------------+---------------+
|                                                               |
+---------------+---------------+---------------+---------------+

フィールド名

バイト長

エンディアン

符号

説明

ID Length

1

0-255

IDの長さ

ID

0-255

0-16777215

UTF-8エンコードしたID

Data

8

LE

倍精度浮動小数点数を格納したバイト列(IEEE 754に準拠)

6.5.2.9. Int(データタイプ: 0x1F)プリミティブInt64型

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+---------------+---------------+
| ID Length     | ID                                            |
+---------------+---------------+---------------+-----------//--+
| Data                                                          |
+---------------+---------------+---------------+---------------+
|                                                               |
+---------------+---------------+---------------+---------------+

フィールド名

バイト長

エンディアン

符号

説明

ID Length

1

0-255

IDの長さ

ID

0-255

0-16777215

UTF-8エンコードしたID

Data

8

LE

あり

Int64

6.5.2.10. Bytes(データタイプ: 0x20)プリミティブバイト配列型

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+---------------+---------------+
| ID Length     | ID                                            |
+---------------+---------------+---------------+-----------//--+
| Data                                                          |
+---------------+---------------+---------------+-----------//--+

フィールド名

バイト長

エンディアン

符号

説明

ID Length

1

0-255

IDの長さ

ID

0-255

0-16777215

UTF-8エンコードしたID

Data

バイナリデータ

6.5.2.11. PCM(データタイプ: 0x22)

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+---------------+---------------+
| FormatID                      | Channels                      |
+---------------+---------------+---------------+---------------+
| SampleRate                                                    |
+---------------+---------------+---------------+---------------+
| BitsPerSample                 | Data                          |
+---------------+---------------+---------------+-----------//--+

フィールド名

バイト長

エンディアン

符号

説明

FormatID

2

LE

なし

0-65535

WAVE 5 で定義されたフォーマットID

Channels

2

LE

なし

0-65535

格納される音声のチャンネル数

SampleRate

4

LE

なし

0-4294967295

サンプリング周波数 [Hz]

BitsPerSample

2

LE

なし

0-65535

ビットレート [bit/sample]

Data

WAVE 5 に準拠する波形情報

5(1,2)

音声データ用コンテナーフォーマットのWAVE (RIFF waveform Audio Format)

6.5.2.12. Generic(データタイプ: 0x7F)

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------+---------------+---------------+---------------+
| ID                                                            |
+---------------+---------------+---------------+---------------+
| Data                                                          |
+---------------+---------------+---------------+-----------//--+

フィールド名

バイト長

エンディアン

符号

説明

ID

4

LE

なし

0-4294967295

数値ID

Data

0-65531

任意のデータ

6.6. Agentの全設定

Agentの設定ファイルの全項目について解説します。

設定ファイルは以下のような構成になっています。各項目に設定すべき内容については以下の節を参照してください。

注釈

設定ファイル内の「logger」はデバイスコネクターを指します。

キー

説明

manager

object

マネージャーに関する設定

clients

object[]

クライアントに関する設定

loggers

object[]

デバイスコネクターに関する設定

{
  "manager": {
    ...
  },
  "clients": [{
    ...
  }],
  "loggers": [{
    ...
  }]
}

6.6.1. 環境変数を使って設定を置き換える

設定ファイル内の文字列型の設定値は、環境変数により与えることができます。環境変数で設定を与えることにより、設定ファイルを書き換えなくても、起動時に柔軟に設定内容を変更することができます。

例えば、 clients.my_secret の値を環境変数で与えるためには、設定ファイル内に以下のように変数を書き込みます。以下の例では $SECRET という変数を書き込んであります。

{
  ...
  "clients": [
    {
      ...
      "my_secret": "$SECRET",
    }],
   ...
}

その上で、上記の変数名にプリフィックス INTDASH_EDGE_ を付けた環境変数を設定します。この例では、 INTDASH_EDGE_SECRET に値を設定します。

これらの準備をした上で、この設定ファイルを使ってintdash-edge-managerを起動すると、設定ファイル内の $SECRET が環境変数 INTDASH_EDGE_SECRET の値に展開され、使用されます。

注釈

環境変数を使って設定を置き換えることができるのは、文字列型の値のみです。

6.6.2. マネージャーに関する設定

マネージャーに関する設定は、設定ファイルの manager フィールドにオブジェクトで設定します。設定できる項目は以下の通りです。

キー

デフォルト値

説明

workdirs

string[]

["/opt/vm2m/var/lib/intdash/meas", "/opt/vm2m/var/run/intdash"]

起動時に作成するディレクトリのパス

basetime

string

"/opt/vm2m/var/run/intdash/basetime"

基準時刻情報を保存するファイルのパス

ntpserver

string

"ntp.intdash.jp"

StatusプラグインがNTP基準時刻の取得に使用するNTPサーバー名のデフォルト値。ここに記載した値は loggers[].details.plugin_arg.ntpserver のデフォルト値として使用されます。

meas_root

string

"/opt/vm2m/var/lib/intdash/meas"

再送データを保存するディレクトリのパス

rawdir

string

"/opt/vm2m/var/lib/intdash/raw"

RAWデータを保存するディレクトリのパス

raw_autodelete

bool

true

RAWデータの自動削除

raw_autodelete_th

number

85

RAWデータを自動削除する閾値[%]

required_space

number

90

Agentが計測停止の閾値[%]。再送データを保存するパーティションの空き容量率がこの値より大きくなった場合に計測を自動停止します。設定を100にすると、自動停止しません。

required_space_raw

number

90

Agentが計測停止の閾値[%]。RAWを保存するパーティションの空き容量率がこの値より大きくなった場合に計測を自動停止します。設定を100にすると、自動停止しません。

stat

string

"/opt/vm2m/var/run/intdash/manager.stat"

Managerのステータスを記録するファイルのパス

process_stat

string

"/opt/vm2m/var/run/intdash/process.stat"

Processのステータスを記録するファイルのパス

wwan_stat

string

"/opt/vm2m/var/run/intdash/wwan.stat"

WWANのステータスを記録するファイルのパス

logger_stat

string

"/opt/vm2m/var/run/intdash/logger_%03hhu.stat"

デバイスコネクターのステータスを記録するファイルのパスのフォーマット。 1つ目のフォーマット指定子(デフォルト値の例では %03hhu )がチャンネル番号に置き換えられます。

system_stat

string

"/opt/vm2m/var/run/intdash/system.stat"

Systemのステータスを記録するファイルのパス

filters

object[]

[]

フィルターの設定。詳細については 送信側でのフィルタリング を参照してください。

6.6.3. クライアントに関する設定

クライアントに関する設定は、設定ファイルの clients フィールドで行います。使用するクライアントに関する設定(オブジェクト)の配列として設定します。使用しないクライアントに関する設定のオブジェクトは不要です。設定できる項目は以下の通りです。

キー

デフォルト値

説明

protocol

string

""

使用する通信ライブラリの名前( mod_websocket.v2|mod_http)

type

string

""

クライアントの動作モード( realtime|bulk|resend|control )。protocolがmod_httpの場合はresendのみが選択可能です。

mode

number

1

サーバーにデータを永続化するか(0: 永続化しない、1: 永続化する)。この設定は、type が realtime|bulk|resend で、 protocol が mod_websocket.v2 の場合のみ使用されます。

my_id

string

""

intdashに接続するEdgeのUUID

my_secret

string

""

intdashに接続時に使用するクライアントシークレット

auth_path

string

"/opt/vm2m/var/lib/intdash/.auth"

接続情報を保存するファイルのパスです。このファイルへの書き込み権限が必要です。

my_token

string

""

intdashに接続時に使用するエッジトークン

dst_id

string[]

[]

サーバーへ送信するデータの宛先EdgeのUUID。typeが realtime|bulk|resend の場合に使用されます。(オプショナル)

down_dst_id

string

""

ここで指定されたUUID宛てのデータのみをサーバーから受信します。

ただし、 00000000-0000-0000- 0000-000000000000 を指定した場合、すべての宛先のデータを受信します。

指定された文字列をUUIDとして解析できない場合(デフォルトの "" の場合を含む)は、 my_id のUUIDが指定されたものとみなされ、 my_id 宛てのデータのみをサーバーから受信します。

この設定は、typeが control の場合にのみ使用されます。

ctlr_id

string

""

サーバーから受信するデータの送信元EdgeのUUID。typeがcontrolの場合に使用されます。2つのEdgeからのデータを受信する場合は、本設定ではなく ctlr_ids を設定してください。

ctlr_ids

string[]

[]

サーバーから受信するデータの送信元EdgeのUUID。2つのUUIDまで指定可能。typeがcontrolの場合に使用されます。 ctlr_id に有効な値が設定がされている場合はここで指定されたUUIDは無視されます。

ctlr_flts

object[]

[]

サーバーから受信するデータのフィルター。フィルターの内容はctlr_flts.channel、ctlr_flts.dtype、ctlr_flts.idsを参照。

ctlr_flts.channel

number

0

サーバーから受信するデータのチャンネル。typeがcontrolの場合に使用されます。

ctlr_flts.dtype

number

0

サーバーから受信するデータのiSCPデータタイプコード。typeがcontrolの場合に使用されます。

ctlr_flts.ids

number[]またはstring[]

(CAN、GenericのデータIDはnumberなので、number[]で指定してください。String、Float、Int、BytesのデータIDはstringなので、string[]で指定してください。)

[]

サーバーから受信するデータのID(オプショナル)。typeがcontrolの場合に使用されます。

CANの場合は、設定値を空の配列 [] にするとすべてのIDのデータを受信します。 CAN以外のデータタイプでは、 [] を設定すると何も受信しません。

unit_flush_cycle

number

5

フラッシュ間隔[msec]。typeがrealtimeの場合に使用されます。

resend_cycle

number

1000

再送周期[msec]。typeがresendの場合に使用されます。

noresend

bool

false

Realtimeクライアントが再送データを作成するかの設定。typeがrealtimeの場合に使用されます。 true にした場合、リアルタイム送信ができなかったデータは再送用に蓄積されず、従ってそのデータの再送は行われません。

store_flushtime

number

3000

フラッシュ間隔[msec]。typeがbulkの場合に使用されます。

store_flushsize

number

10000

フラッシュ間隔[unit数]。typeがbulkの場合に使用されます。

store_cycle

number

1000

送信間隔[msec]。typeがbulkの場合に使用されます。

http_client_count

number

1

同時再送数。protocolがmod_httpの場合に使用されます。

connection.host

string

""

エッジが使用するintdashサーバーのホスト名+ドメイン名(FQDN)(例: dummy.intdash.jp )。

connection.path

string

"/"

サーバーのリソースへのパス。(protocolが mod_websocket* の場合は /api/v1/ws/measurements としてください。protocolが mod_http の場合は /api/v1/measurements としてください。)

connection.ssl

string

"secure"

SSL接続のセキュリティー設定( none|lax|secure )。

connection.port

number

443

エッジが使用するintdashサーバーの接続ポート。

connection.cert

string

""(OSにインストールされている証明書を使用する)

サーバー証明書のファイルパス(オプショナル)。

connection.client_cert

string

""

クライアント証明書を使用する場合の証明書(オプショナル)。

connection.client_key

string

""

クライアント証明書を使用する場合の秘密鍵(オプショナル)。

project_uuid

string

""

エッジが使用するプロジェクトのUUID。プロジェクトを指定しない場合は、Global Projectが使用されます。

user_agent

string

"IntDash-Edge/unknown (Unknown; Unknown)"

ユーザーエージェント(オプショナル)。

6.6.4. デバイスコネクターに関する設定

デバイスコネクターに関する設定は、設定ファイルの loggers フィールドの配列にオブジェクトで設定します。設定できる項目は以下の通りです。

キー

デフォルト値

説明

path

string

""

自動起動するデバイスコネクターのフルパス。

conf

string

""

自動起動するデバイスコネクターに2番目の起動引数として渡される文字列。1番目は -C が渡される。

details.plugin

string

""

使用するプラグイン名( fifo|status )。

details.plugin_dir

string

"/opt/vm2m/lib/plugins"

使用するプラグインの実行ファイルが保存されているディレクトリ。

details.plugin_arg

string

{}

プラグインに設定するJSONオブジェクト。設定内容はプラグインにより異なります。

details.plugin_arg.ntpserver

string

manager.ntpserver に設定された値

StatusプラグインがNTP基準時刻の取得に使用するNTPサーバー名。

details.plugin_with_process

bool

false

プラグインを使用する場合に、デバイスコネクターの自動起動を行うかの設定。

connections[].channel

number

-1

デバイスコネクターに設定するチャンネル(0-255)。

connections[].channel_rx

number

-1 (-1の場合channelと同じ値を使用する)

ダウンストリーム時にデバイスコネクターに送信するデータのチャンネル(0-255)。

connections[].receive_basetime

bool

false

ダウンストリーム時にデバイスコネクターに基準時刻のデータが送信されるかの設定。

connections[].fifo_tx

string

"/opt/vm2m/var/run/intdash/logger_%03hhu.tx"

通信に使用するFIFOのファイルパス。1つ目のフォーマット指定子(デフォルト値の例では %03hhu )がチャンネル番号に置き換えられます。

connections[].fifo_rx

string

"/opt/vm2m/var/run/intdash/logger_%03hhu.rx"

通信に使用するFIFOのファイルパス。1つ目のフォーマット指定子に(デフォルト値の例では %03hhu )がチャンネル番号に置き換えられます、

connections[].disable_raw

number

0

このチャンネルのデータをRAWデータとして保存するか(0:保存する、0以外:保存しない)。

6.7. Agentのログ

Agentは標準出力にログメッセージを出力します。

標準出力をリダイレクトすることによって、ログメッセージの保存先をファイルにすることができます。 例えば、以下のようにしてAgentを起動すると、ログメッセージは、 /var/run/intdash/intdash.log に出力されます。 ( ${CONF_PATH} は、使用する設定ファイルのフルパスです。)

/opt/vm2m/sbin/intdash-edge-manager -C ${CONF_PATH} >/var/run/intdash/intdash.log 2>&1

6.7.1. ログメッセージのフォーマット

ログメッセージは、以下の例のようなフォーマットで出力されます。

01/13 01:51:49 intdash-edge-manager(1532): INFO  : procedure(): CREATED
01/13 01:51:49 intdash-edge-manager(1532): INFO  : start(): Manager thread STARTING
01/13 01:51:49 intdash-edge-manager(1532): INFO  : procedure(): STARTED
01/13 01:51:49 intdash-edge-manager(1532): INFO  : base_proc(): Manager thread STARTED
01/13 01:51:49 intdash-edge-manager(1532): INFO  : proc(): Basetime (RTC monotonic) : 58469.155277440
01/13 01:51:49 intdash-edge-manager(1532): INFO  : proc(): Basetime (RTC realtime) : 1610502709.225218700
01/13 01:51:49 intdash-edge-manager(1532): INFO  : start(): RawDataHandler thread STARTING
01/13 01:51:49 intdash-edge-manager(1532): INFO  : start(): DataSaver thread STARTING
 ^              ^                           ^       ^
(1)            (2)                         (3)     (4)

番号

説明

(1)

発生日時

(2)

モジュール名(プロセス番号)

(3)

プリフィックス( INFO : 正常動作での情報表示、 WARN : 復帰可能なエラーの情報、 ERR : 復帰の見込みのないエラーの情報)

(4)

関数名とログの内容

6.7.2. Agentアプリケーションに関するログメッセージ

Agentアプリケーションに関するログメッセージのうち、主なものは以下の通りです。

6.7.2.1. デバイスコネクターと接続するためのFIFOの作成

INFO  : procDataReader(): DeviceProcess create pipe : /opt/vm2m/var/run/intdash/logger_000.tx

ログメッセージ内のパスは、intdash-edge-managerにより作成されたFIFOのパスです。

6.7.2.2. FIFOのオープン

INFO  : procDataReader(): DeviceProcess open pipe : /opt/vm2m/var/run/intdash/logger_000.tx

ログメッセージ内のパスは、intdash-edge-managerによりオープンされたFIFOのパスです。

6.7.2.3. FIFOのクローズ

INFO  : procDataReader(): close pipe:/opt/vm2m/var/run/intdash/logger_004.tx

ログメッセージ内のパスは、intdash-edge-managerによりクローズされたFIFOのパスです。

6.7.3. WebSocketでのリアルタイム送信に関するログメッセージ

WebSocketでのリアルタイム送信に関するログメッセージのうち、主なものは以下の通りです。

6.7.3.1. サーバーとのコネクション確立

INFO  : callbackPacketEstablish(): REALTIME Upstream request succeed

6.7.3.2. 1つのセクションのデータを送信

1つのセクションのデータを送信したことを表すメッセージです。 この時点では、サーバー側での処理は完了していません。

INFO  : callbackSndSectionEnd(): REALTIME 46 units and 1 basetimes with ID:2
                                           ^           ^                   ^
                                          (1)         (2)                  (3)

番号

説明

(1)

セクションに含まれるユニットの数(基準時刻以外)

(2)

セクションに含まれる基準時刻ユニットの数

(3)

セクションに与えられた通し番号

6.7.3.3. 1つのセクションの送信が完了

サーバー側で1つのセクションの処理が完了したことを表すメッセージです。 サーバーからACKを受信すると、このメッセージが出力されます。

INFO  : callbackRcvPacket(): REALTIME(c4a0e287) ACK 2 (45/45 units)
                                      ^             ^  ^  ^
                                     (1)           (2)(3)(4)

番号

説明

(1)

計測ID

(2)

セクションに与えられた通し番号

(3)

このセクションのユニット数

(4)

この計測で送信した総ユニット数

6.7.3.4. 1つのセクションのデータを再送用にファイルとして保存

INFO  : saveSection(): Store   2 units to /opt/vm2m/var/lib/intdash/meas/<SERVER_NAME>/<MEASUREMENT>/<SECTION>.bin
                               ^           ^
                              (1)         (2)

番号

説明

(1)

セクションに含まれるユニット数

(2)

再送セクションファイルの保存先パス

6.7.3.5. サーバーとのコネクションのクローズ

INFO  : callbackPacketEstablish(): REALTIME Upstream closed

6.7.4. HTTPによる再送に関するログメッセージ

HTTPによる再送に関するログメッセージのうち、主なものは以下の通りです。

6.7.4.1. 1つのセクションの再送が完了

INFO  : postSection(): RESEND 32187 units and ? basetimes with ID:80891
                              ^                                   ^
                             (1)                                 (2)

番号

説明

(1)

セクションに含まれるユニット数

(2)

セクションに与えられた通し番号