フィルター#

Terminal System 2 v1.0.0

フィルターとは#

Terminal Systemでは、intdash Edge Agent 2を流れるデータポイントに対して、フィルターを適用することができます。 フィルターを使用すると、以下のことができます。

  • アップストリーム方向の場合: デバイスコネクターから取得したデータポイントのうち、指定された条件に一致するデータポイントを選び出し、指定されたアップストリーム、または、遅延アップロードの処理に渡す。

  • ダウンストリーム方向の場合: サーバーから取得したデータポイントのうち、指定された条件に一致するデータポイントを選び出し、指定されたデバイスコネクターに渡す。

さまざまな条件を指定するために、条件の指定方法が異なるいくつかのフィルタータイプが用意されています。 例えば、nameタイプのフィルターでは、条件としてデータ名称を指定します。この場合、流れてきたデータポイントのデータ名称が指定されたものと一致すると、フィルターの定義に従って処理されることになります。

使用できるフィルターのタイプは以下のとおりです。条件の設定方法については各フィルタータイプの説明を参照してください。:

注釈

フィルターは、上記のタイプのみを使用できます。ユーザーが独自のフィルタータイプを開発することはできません。 既存のフィルタータイプでは不足がある場合は、同様の仕組みをデバイスコネクターにおいて開発することで対応できます。

複数のフィルターを設定して多段階の条件を設定することもできます。複数のフィルターを設定した場合、設定ファイルに書かれた順にフィルターが適用されます。

また、一定時間ごとに最初の1つのデータポイントを選択するフィルター(samplingタイプのフィルター)を設定することで、サンプリングを実行することができます。

注釈

ここで説明するフィルターは、intdash Edge Agent 2内を流れるデータに対して適用されるものです。 サーバーからダウンストリームする対象を指定するための「ダウンストリームフィルター」とは別の機能です。 ダウンストリームフィルターについては、 agent.downstreams を参照してください。

../../_images/config-upstream-filter.png

図 150 フィルター(アップストリームの場合)#

../../_images/config-downstream-filter.png

図 151 フィルター(ダウンストリームの場合)#

注釈

フィルターの設定は、実際にはTerminal Systemに含まれるintdash Edge Agent 2の設定です。設定項目は intdash Edge Agent 2 のものと同じです。

フィルターの設定を作成/変更する#

重要

以下の手順ではMenderのConfigurationタブを使用するため、MenderにConfigureアドオンが必要です。 Configureアドオンを導入していない場合、Mender経由ではなく、ローカルネットワーク内からREST APIを使って設定してください。

  1. Mender Web UIで、画面左の[DEVICES]をクリックし、リストの中から設定したいデバイスをクリックします。

  2. [Configuration]タブを開き、[EDIT]をクリックします。

  3. アップストリーム方向のフィルターは agent.filters_upstream で設定します。

    ダウンストリーム方向のフィルターは agent.filters_downstream で設定します。

    例:アップストリーム方向のフィルターを作成する

    [
      {
        "id": "string_to_deferred",
        "enabled": true,
        "type": "type",
        "target": {
          "dest_ids": [
            "default-upstream"
          ],
          "type": "string"
        },
        "change_to": {
          "dest_id": "deferred"
        }
      }
    ]
    

    このフィルターは、アップストリーム default-upstream に送信するデータポイントのうち string データ型のデータポイントを遅延アップロードで送信します。

    注釈

    新しいフィルターを作成する場合はフィルター設定のすべてのキーを、既存のフィルターを変更する場合はIDと変更したいキーの設定を与えます。

    キー

    説明

    id

    string

    フィルター設定を識別する任意のID

    enabled

    bool

    フィルターの有効(true)/無効(false)

    type

    string

    各フィルタータイプの説明を参照してください。

    target

    object

    フィルターのタイプに応じた対象データポイントの条件指定。条件の指定方法については、フィルターの種類別の説明を参照してください。

    データポイントがここで記載された条件に一致した場合、データポイントに change_to で指定された変更が行われます。

    change_to

    object

    フィルターの条件に合致したデータポイントは、ここに指定された変更が行われます。

  4. [SAVE AND APPLY TO DEVICE]をクリックし、デバイスに設定情報を送信します。

  5. 設定更新日時が新しくなっていることを確認します。

    ../../_images/setup_mender_configuration_success.png

    図 152 設定更新日時#

    重要

    ステータスがPendingのまま更新されない場合は、 トラブルシューティング を参照してください。

always#

alwaysタイプのフィルターでは、データポイントの行先を条件にしてフィルタリングが行われます。 データポイントの行先が target.dest_ids で列挙された行先のいずれかである場合、その行先は change_to で指定されたものに変更されます。

条件指定( target )では以下を指定します。

キー

説明

dest_ids

[string]

アップストリームの場合、行先ストリームのIDのリスト。

ダウンストリームの場合、行先デバイスコネクターのIDのリスト。

change_to では、以下のように新しい行先を指定します。

キー

説明

dest_id

string

アップストリームの場合、行先ストリームのID。

ダウンストリームの場合、行先デバイスコネクターのID。

例:

[
  {
    "id": "always_to_deferred",
    "enabled": true,
    "type": "always",
    "target": {
      "dest_ids": [
        "default-upstream"
      ]
    },
    "change_to": {
      "dest_id": "deferred"
    }
  }
]

この例では、行先が default-upstream であるデータポイントすべてについて、行先が deferred に変更されます。

type#

typeタイプのフィルターでは、データポイントの行先とデータ型を条件にしてフィルタリングが行われます。 データポイントの行先が target.dest_ids で列挙された行先のいずれかであり、データ型が target.data_type で指定されたものである場合、その行先は change_to で指定されたものに変更されます。

条件指定( target )では以下を指定します。

キー

説明

dest_ids

[string]

アップストリームの場合、行先ストリームのIDのリスト。

ダウンストリームの場合、行先デバイスコネクターのIDのリスト。

type

string

データ型によるフィルター条件(正規表現)

データ型の詳細については intdash Edge Agent 2 デベロッパーガイド を参照してください。

change_to では、以下のように新しい行先を指定します。

キー

説明

dest_id

string

アップストリームの場合、行先ストリームのID。

ダウンストリームの場合、行先デバイスコネクターのID。

例:

[
  {
    "id": "type_h26x_to_deferred",
    "enabled": true,
    "type": "type",
    "target": {
      "dest_ids": [
        "default-upstream"
      ],
      "type": "h26.+"
    },
    "change_to": {
      "dest_id": "deferred"
    }
  }
]

この例では、行先が default-upstream であるデータポイントのうち、データ型が h26.+ の正規表現にマッチするものについて、行先が deferred に変更されます。

name#

nameタイプのフィルターでは、データポイントの行先とデータ名称を条件にしてフィルタリングが行われます。 データポイントの行先が target.dest_ids で列挙された行先のいずれかであり、データ名称が target.name で指定されたものである場合、その行先は change_to で指定されたものに変更されます。

条件指定( target )では以下を指定します。

キー

説明

dest_ids

[string]

アップストリームの場合、行先ストリームのIDのリスト。

ダウンストリームの場合、行先デバイスコネクターのIDのリスト。

name

string

データ名称によるフィルター条件(正規表現)

データ名称の詳細については intdash Edge Agent 2 デベロッパーガイド を参照してください。

change_to で行先を変更できます。

キー

説明

dest_id

string

アップストリームの場合、行先ストリームのID。

ダウンストリームの場合、行先デバイスコネクターのID。

例:

[
  {
    "id": "name_v1_to_deferred",
    "enabled": true,
    "type": "name",
    "target": {
      "dest_ids": [
        "default-upstream"
      ],
      "name": "v1/.+"
    },
    "change_to": {
      "dest_id": "deferred"
    }
  }
]

この例では、行先が default-upstream であるデータポイントのうち、データ名称が v1/.+ の正規表現にマッチするものについて、行先が deferred に変更されます。

src-id#

src-idタイプのフィルターでは、データポイントの行先と生成元(アップストリームではデバイスコネクター、ダウンストリームではストリーム)のIDを条件にしてフィルタリングが行われます。 データポイントの行先が target.dest_ids で列挙された行先のいずれかであり、生成元が target.src_id で指定されたものである場合、その行先は change_to で指定されたものに変更されます。

条件指定( target )では以下を指定します。

キー

説明

dest_ids

[string]

アップストリームの場合、行先ストリームのIDのリスト。

ダウンストリームの場合、行先デバイスコネクターのIDのリスト。

src_id

string

アップストリームの場合、生成元デバイスコネクターのID(正規表現)。

ダウンストリームの場合、生成元ストリームのID(正規表現)。

change_to では、以下のように新しい行先を指定します。

キー

説明

dest_id

string

アップストリームの場合、行先ストリームのID。

ダウンストリームの場合、行先デバイスコネクターのID。

例:

[
  {
    "id": "src-id_dc_to_deferred",
    "enabled": true,
    "type": "src-id",
    "target": {
      "dest_ids": [
        "default-upstream"
      ],
      "src_id": "dc?"
    },
    "change_to": {
      "dest_id": "deferred"
    }
  }
]

この例では、行先が default-upstream であるデータポイントのうち、生成元のIDが dc? の正規表現にマッチするものについて、行先が deferred に変更されます。

rename#

データポイントの行先が target.dest_ids で列挙された行先のいずれかであり、データ型、データ名称、生成元のID(アップストリームではデバイスコネクターのID、ダウンストリームではストリームのID)が条件に一致した場合、そのデータポイントのデータ名称がリネームされます。

正規表現を空文字にした項目は、条件に一致するかどうかの評価対象にはなりません。 例えば、 target.typetarget.name を指定し、 target.src_id (生成元ID)を空文字にした場合、 target.typetarget.name がマッチすれば、生成元IDに関係なく行先変更が行われます。

条件指定( target )では以下を指定します。

キー

説明

dest_ids

[string]

アップストリームの場合、行先ストリームのIDのリスト。

ダウンストリームの場合、行先デバイスコネクターのIDのリスト。

type

string

データ型によるフィルター条件(正規表現)

name

string

データ名称によるフィルター条件(正規表現)

src_id

string

生成元IDによるフィルター条件(正規表現)

change_to では、以下のように新しい行先とデータ名称を指定します。

キー

説明

dest_id

string

アップストリームの場合、行先ストリームのID。

ダウンストリームの場合、行先デバイスコネクターのID。

name

string

新しいデータ名称

例:

[
  {
    "id": "rename_v1_2_and_changed_to_deferred",
    "enabled": true,
    "type": "rename",
    "target": {
      "dest_ids": [
        "default-upstream"
      ],
      "name": "v1/2/.+",
      "type": "",
      "src_id": ""
    },
    "change_to": {
      "dest_id": "deferred",
      "name": "v1/10/aaa"
    }
  }
]

この例では、行先が default-upstream であるデータポイントのうち、データ名称が v1/2/.+ の正規表現にマッチするものについて、行先が deferred に変更されます。また、データ名称が v1/10/aaa に変更されます。

sampling#

samplingタイプのフィルターでは、データポイントのサンプリングが行われます。

samplingタイプのフィルターでは、行先、データ型、データ名称、生成元(アップストリームではデバイスコネクター、ダウンストリームではストリーム)のIDを条件として設定します。

指定された行先( target.dest_ids のうちいずれか)を持つデータポイントのうち、指定された正規表現すべてにマッチしたデータポイントがサンプリングの対象となります。サンプリング対象のうち、サンプリング間隔 interval_ms 内で最初の1つのデータポイントのみ、行先が change_to.dest_id の値に変更されます。サンプリング間隔内で2つ目以降のデータポイントの行先は変更されません。

../../_images/sampling-filter.ja.png

図 153 サンプリング#

キー

説明

dest_ids

[string]

アップストリームの場合、行先ストリームのIDのリスト。

ダウンストリームの場合、行先デバイスコネクターのIDのリスト。

interval_ms

integer

サンプリング間隔(ミリ秒)

type

string

データ型によるフィルター条件(正規表現)

name

string

データ名称によるフィルター条件(正規表現)

src_id

string

生成元IDによるフィルター条件(正規表現)

change_to では、以下のように新しい行先を指定します。

キー

説明

dest_id

string

アップストリームの場合、行先ストリームのID。

ダウンストリームの場合、行先デバイスコネクターのID。

例:

[
  {
    "id": "sampling_abc",
    "enabled": true,
    "type": "sampling",
    "target": {
      "dest_ids": [
        "deferred"
      ],
      "name": "v1/1/abc",
      "type": "",
      "src_id": "",
      "interval_ms": 300
    },
    "change_to": {
      "dest_id": "default-upstream"
    }
  }
]

この例では、行先が deferred であり、かつデータ名称が正規表現 v1/1/abc にマッチするデータポイントのうち、300ミリ秒に1つだけ、行先が default-upstream に変更されます。 それ以外のデータポイントの行先は変更されません。

h264-essential-nal-units#

h264-essential-nal-unitsタイプのフィルターは、h264_nal_unit型専用です。

h264-essential-nal-unitsタイプのフィルターでは、データポイントの行先と、ペイロードの内容によってフィルタリングが行われます。 データポイントの行先が target.dest_ids で列挙された行先のいずれかであり、ペイロードがH.264動画の再生において重要なNALユニット(SPS、PPSまたはIDRピクチャー)である場合、行先が変更されます。

条件指定( target )では以下を指定します。

キー

説明

dest_ids

[string]

アップストリームの場合、行先ストリームのIDのリスト。

ダウンストリームの場合、行先デバイスコネクターのIDのリスト。

change_to では、以下のように新しい行先を指定します。

キー

説明

dest_id

string

アップストリームの場合、行先ストリームのID。

ダウンストリームの場合、行先デバイスコネクターのID。

注釈

H.264動画を送信する際に、適切に設定されたストリームとこのフィルターを組み合わせることで、Visual M2M Data Visualizerにおいてより少ない遅延でH.264動画を再生できます。 intdash Edge Agent 2 デベロッパーガイド の使用例を参照してください。

例:

[
  {
    "id": "h264_nal_unit_key_filter",
    "enabled": true,
    "type": "h264-essential-nal-units",
    "target": {
      "dest_ids": [
        "h264_nal_unit_extra_units"
      ]
    },
    "change_to": {
      "dest_id": "h264_nal_unit_key_units"
    }
  }
]

この例では、行先が h264_nal_unit_extra_units であるデータポイントのうち、再生表示に必須のNALユニットの行先が h264_nal_unit_key_units に変更されます。