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のデータフォーマット (logger-msg) を確認してください。
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のデータフォーマット (logger-msg) フォーマットと同様です。
1つのデバイスコネクターが受信するデータは、1つのチャンネルのデータに限定されます。
channel_rx
がない場合や -1 が設定されている場合は、 channel
に設定されたチャンネル番号が受信対象となります。
channel_rx
に 0~255 までの値が設定されている場合は、 channel_rx
に設定したチャンネル番号が受信対象となります。
ダウンストリームではintdashサーバーと接続(再接続を含む)した際に、必ず基準時刻のデータを受信します。
デバイスコネクターが基準時刻のデータを受信したくない場合は、 receive_basetime
に false
を指定してください。
例(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を送信します。デバイスコネクターはシグナルを検知して終了処理を行うようにしてください。