4. 独自のデバイスコネクターを追加する

デバイスからデータを読み取ってAgentに渡すデバイスコネクターを開発することで、任意のデバイスから取得したデータをintdashサーバーに送信することができます。デバイスコネクターとAgentの間のデータの受け渡しはFIFOで行います。

4.1. 独自のデバイスコネクターを使用するための設定

AgentとデバイスコネクターはFIFOにより接続されています。デバイスからのデータがAgentに送られてくるとき、デバイスコネクターは所定のフォーマットでFIFOにデータを書き込み、Agentがそれを読み出します。反対に、Agentからデバイスにデータを送るときには、Agentは所定のフォーマットでFIFOにデータを書き込み、デバイスコネクターがそれを読み出します。

FIFOはプラグインにより提供されます。AgentにFIFOプラグインを追加し、デバイスコネクターと接続するには、設定ファイルに以下の項目を追加します。FIFOプラグインが追加された状態でAgentを起動すると、デバイスコネクターとプラグイン間の通信用のFIFOファイルが生成されます。

注釈

ただし、アプトポッドが提供するデバイスコネクター intdash-edge-logger は、FIFOプラグインを使用しません。そのため、 intdash-edge-logger を使う場合は、設定ファイルに plugin の記載は不要です。

例(チャンネル2のFIFOを追加する):

{
  ...
  loggers: [{
      "connections": [{
        "channel": 2,
        "fifo_tx": "/var/run/intdash/logger_002.tx",
        "fifo_rx": "/var/run/intdash/logger_002.rx"
      }],
      "details": {
        "plugin": "fifo"
      },
  }],
  ...
}

注釈

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

この設定を使用してAgentを起動すると、Agentとデバイスコネクターの間の通信のために /var/run/intdash/logger_002.tx/var/run/intdash/logger_002.rx というFIFOファイルが作成されます。 デバイスコネクターは、Agentにデータを送信する場合は /var/run/intdash/logger_002.tx に書き込み、Agentからデータを受信する場合は /var/run/intdash/logger_002.rx から読み込む必要があります。

注釈

Agentがintdashサーバーにデータを送信する際には、設定ファイルに記載された channel がチャンネル番号として使用されます。

4.2. デバイスコネクターからのFIFOへの書き込み

デバイスコネクターからAgentにデータを送るには、Agentにより生成されたFIFOにデータを書き込む必要があります。

4.2.1. データの書き込み

FIFOへの書き込みは、所定のフォーマットに従った形式である必要があります。フォーマットについては、 Agentとデバイスコネクターの間で使われるFIFOのデータフォーマット を確認してください。

4.3. FIFOからの読み出し

ダウンストリームを行うためには、設定ファイルの clients の項目にControlクライアントを追加する必要があります。 そのため、デバイスコネクターがFIFOから読み込めるデータは、Controlクライアントでダウンストリーム対象としたデータ、かつ、デバイスコネクターに設定されているチャンネルのデータになります。

例(デバイスコネクターに関する設定):

{
  ...
  loggers: [{
      "connections": [{
        "channel": 2,
        "channel_rx": -1,
        "receive_basetime": true,
        "fifo_tx": "/var/run/intdash/logger_002.tx",
        "fifo_rx": "/var/run/intdash/logger_002.rx"
      }],
      "details": {
        "plugin":"fifo"
      },
  }],
  ...
}

FIFOからの読み込めるデータは、書き込みの際の Agentとデバイスコネクターの間で使われるFIFOのデータフォーマット フォーマットと同様です。

1つのデバイスコネクターが受信するデータは、1つのチャンネルのデータに限定されます。 channel_rx がない場合や -1 が設定されている場合は、 channel に設定されたチャンネル番号が受信対象となります。 channel_rx に 0~255 までの値が設定されている場合は、 channel_rx に設定したチャンネル番号が受信対象となります。

ダウンストリームではintdashサーバーと接続(再接続を含む)した際に、必ず基準時刻のデータを受信します。 デバイスコネクターが基準時刻のデータを受信したくない場合は、 receive_basetimefalse を指定してください。

例(Controlクライアントに関する設定):

{
  "clients": [{
    "protocol": "mod_websocket.v2",
    "my_id": "c35618bf-aa2c-4abc-8a4e-5b157b90c9ef",
    "my_secret": "hsNxJhvDNHR2QcXbXl..........................Z0RWKvfPs_neAkjTNSO5",
    "down_dst_id": "00000000-0000-0000-0000-000000000000",
    "ctlr_id": "9defc535-4640-4c5e-934a-bb435a89a64f",
    "ctlr_flts": [
      {
        "channel": 2,
        "dtype": 10,
        "ids": ["string_a", "string_b"]
      },
      {
        "channel": 3,
        "dtype": 14,
        "ids": ["data_a", "data_b"]
      }
    ],
    "type": "control",
    "connection": {
      "path": "/api/v1/ws/measurements",
      ...
    },
    ...
  }],
  ...
}

このControlクライアントの設定例では、エッジのUUID 9defc535-4640-4c5e-934a-bb435a89a64f から送信された、以下2種類のデータをダウンストリームします。

  • チャンネル番号:2、iSCPデータタイプ:String(10)、データID:"string_a" または "string_b"

  • チャンネル番号:3、iSCPデータタイプ:Bytes(14)、データID:"data_a" または "data_b"

上記のようにデバイスコネクターとControlクライアントを設定した場合、デバイスコネクターがFIFOから受信できるデータは、エッジのUUID 9defc535-4640-4c5e-934a-bb435a89a64f から送信された、チャンネル番号:2、iSCPデータタイプ:String(10)、データID:"string_a" または "string_b" のデータのみです。デバイスコネクターの設定でチャンネル2のみが指定されているため、チャンネル番号3のデータは受信できません。

4.4. デバイスコネクターの自動起動と自動終了

デバイスコネクターは、任意のタイミングで起動や終了をさせることができます。デバイスコネクターの起動と終了をAgentと連動させたい場合は、以下の方法が可能です。

4.4.1. Agent起動時に自動的にデバイスコネクターを起動する

Agentが起動したときにデバイスコネクターが起動されるように設定することができます。

設定ファイルの path にデバイスコネクターの起動コマンドを指定し、 conf にデバイスコネクターの設定ファイルを指定してください。この設定により、Agentが起動したときに、 path -C conf の形式でデバイスコネクターの起動コマンドが実行されます。

"loggers": [{
  "path": "/opt/vm2m/sbin/test-logger",
  "conf": "/etc/opt/intdash/test-logger.conf",
  "connections": [{
    "channel": 3,
    ...
  }],
  ...
}]

4.4.2. Agentからのシグナルによりデバイスコネクターを終了する

Agentを終了するとき、AgentはデバイスコネクターにSIGTERMを送信します。デバイスコネクターはシグナルを検知して終了処理を行うようにしてください。