チュートリアル1: アップストリームで送信する¶
このチュートリアルでは、intdash Edge Agent 2からintdashサーバーに、「Hello」という文字列を送信します(アップストリーム)。
操作手順は以下のようになります。
接続先サーバーを設定する
アップストリームの設定を作成する
デバイスコネクターの設定を作成する
リアルタイム送信を開始する
データをFIFOに書き込む(ここでは手順を簡単にするため、デバイスコネクターによるFIFOへの書き込みをechoコマンドで代替します)
準備するもの¶
このチュートリアルを実行するには以下が必要です。
intdash Edge Agent 2をインストール済みのエッジデバイス
接続先のintdashサーバーのホスト名(例:xxxxx.intdash.jp)
プロジェクトUUID
このエッジデバイスに割り当てる、intdashのエッジUUIDとクライアントシークレット
エッジUUIDとクライアントシークレットは、ウェブブラウザーでintdashにログイン後、My Pageで発行することができます。 エッジは使用するプロジェクトに所属させておいてください。
接続先サーバーを設定する¶
注釈
デーモン(intdash-agentd)の自動起動が行われない環境(Docker Hubで公開されているUbuntuなど)をご使用の場合は、 sudo /etc/init.d/intdash-agentd start
でデーモンを起動してから以下の操作を行ってください。
intdash-agentctl configコマンドを使って、接続先サーバーと認証情報を設定します。
$ intdash-agentctl config connection --modify '
server_url: https://xxxxxx.intdash.jp
project_uuid: 00000000-0000-0000-0000-000000000000
edge_uuid: 03ace3b1-d208-4fc3-xxxx-xxxxxxxxxxxx
client_secret: sEh9ZHPoKX8QYU-v0Noe0ZPzxGBF..........................iBn5fn_eFM
'
--modify
に続く引数はYAML形式の文字列です。あらかじめ準備した以下の情報を設定してください。
キー |
入力する値 |
---|---|
server_url |
接続先のintdashサーバーのホスト名 |
project_uuid |
使用するプロジェクトのUUID |
edge_uuid |
エッジのUUID |
client_secret |
エッジのクライアントシークレット |
注釈
YAML形式ではなくJSON形式で設定を与えたい場合は、configコマンドの後に -j
を指定してください。
$ intdash-agentctl config -j connection --modify '{
"server_url": "https://xxxxxx.intdash.jp",
"project_uuid": "00000000-0000-0000-0000-000000000000",
"edge_uuid": "03ace3b1-d208-4fc3-xxxx-xxxxxxxxxxxx",
"client_secret": "sEh9ZHPoKX8QYU-v0Noe0ZPzxGBF..........................iBn5fn_eFM"
}'
注釈
intdash-agentctlコマンドの使用方法は -h
オプションにより確認できます。
コマンドごとに異なる情報が表示されます。
$ intdash-agentctl -h
$ intdash-agentctl config -h
$ intdash-agentctl config connection -h
アップストリームの設定を作成する¶
次に、iSCPによるデータ送信の経路(アップストリーム)の設定を作成します。
ここではIDのみを指定していますが、これにより、デフォルト設定のアップストリームが作成されます。
アップストリームのIDは任意の文字列を設定可能ですが、ここではIDを sample-upstream
とします。
$ intdash-agentctl config upstream -c '
id: sample-upstream
'
デバイスコネクターの設定を作成する¶
デバイスコネクターの設定(使用するFIFOのパスなど)を、以下のコマンドで作成します。
データはデバイスコネクターからintdash Edge Agent 2へ流れ、その後intdsahサーバーへ流れるため、ここではアップストリーム方向(upstream)のデバイスコネクターを作成します。 IDには任意の文字列を設定可能です。
$ intdash-agentctl config device-connector upstream --create '
id: up-hello
data_name_prefix: v1/1
dest_ids:
- sample-upstream
format: iscp-v2-compat
ipc:
type: fifo
path: /var/run/intdash/up-hello.fifo
'
このコマンドにより以下の設定が行われます。
キー |
値 |
---|---|
id |
このデバイスコネクター設定に与える任意のID |
data_name_prefix |
このデバイスコネクターで取得したデータポイントに与えるデータ名称の接頭辞 |
dest_ids |
このデバイスコネクターで取得したデータポイントをintdashサーバーに送信する際に使用する、行先のアップストリームのID(ここでは、さきほど作成した |
format |
このデバイスコネクターが送信するデータのフォーマット(ここでは、 |
ipc.type |
intdash Edge Agent 2とデバイスコネクターの間のデータ通信方法(現在 |
ipc.path |
intdash Edge Agent 2がデバイスコネクターからデータを受け取るためのFIFOのパス。このFIFOに書き込まれたデータがintdash Edge Agent 2に渡されます。 |
重要
受信側で旧バージョンのiSCPを使用する場合は、送信側はルールに沿って data_name_prefix
を与える必要があります。詳細は iSCP v1互換のデータID を参照してください。
注釈
intdash-agentctlのコマンドでは短縮形を使用することもできます。以下のコマンドは上記の例と同等です。
$ intdash-agentctl conf dc up -c '
id: up-hello
data_name_prefix: v1/1
dest_ids:
- sample-upstream
format: iscp-v2-compat
ipc:
type: fifo
path: /var/run/intdash/up-hello.fifo
'
コマンドの短縮形はヘルプで確認することができます。
$ intdash-agentctl conf -h
リアルタイム送信を開始する¶
以下のコマンドを実行します。
$ intdash-agentctl run
これによりストリーマーが起動され、また、デバイスコネクターからデータを受け取るための /var/run/intdash/up-hello.fifo
が作成されます。
この時点でintdashサーバーとの接続が確立され、intdash上は計測が開始されたことになりますが、まだデバイスコネクターからデータポイントが流れてこないため、送信されません。
データをFIFOに書き込む¶
echoコマンドを使用してFIFOにバイナリデータを書き込みます。それを受け取ったintdash Edge Agent 2がデータをサーバーに送信することを確認します。 新しいターミナルを開いて、以下のコマンドを実行してください。
$ echo -en \
"\xd2\x04\x00\x00\x15\xcd\x5b\x07\x06\x00\x02\x00\x05\x00\x00\x00\x73\x74\x72\x69\x6e\x67\x61\x62\x48\x65\x6c\x6c\x6f" \
>/var/run/intdash/up-hello.fifo
上記でechoによって書き込まれるバイナリデータは、「Hello」という文字列に、以下の表のようにデータ型、タイムスタンプ、データIDなどを付与し、専用のフォーマット(FIFO用データフォーマット)に従ってエンコードしたものです。
注釈
echoではなくPythonを使ってバイナリデータを作成する場合は以下のようにします。
$ python3 -c "import struct, sys; sys.stdout.buffer.write(struct.pack('<LLHHL6s2s5s', 1234, 123456789, 6, 2, 5, b'string', b'ab', b'Hello'))" > /var/run/intdash/up-hello.fifo
データをFIFOに書き込む際のバイナリデータのフォーマットについては、 FIFO用データフォーマット を参照してください。 デバイスコネクターの設定で指定したとおり、ここでは、データフォーマットiscp-v2-compatを使用しています。
フィールド名 |
値 |
---|---|
タイムスタンプ |
1234.123456789秒(リトルエンディアン:整数秒部 |
Data Type Length |
6 (リトルエンディアン: |
Data Name Length |
2 (リトルエンディアン: |
Payload Length |
5 (リトルエンディアン: |
Data Type |
string(UTF-8エンコード: |
Data Name |
ab(UTF-8エンコード: |
Payload |
Hello(UTF-8エンコード: |
このようにFIFOにデータポイントを書き込むと、intdash Edge Agent 2がサーバーに送信するデータポイントのデータID( <データ型>:<データ名称>
)は、 string:v1/1/ab
となります。
これは、デバイスコネクターの設定において data_name_prefix: v1/1
のように設定され、FIFOに書き込んだバイナリデータにおいて、Data Typeとしてstringが指定され、IDとして ab
が指定されているためです。
注釈
プレフィックスの v1/1
は、旧バージョンのiSCPでダウンストリームできるようにするための設定です。このあとの手順で可視化できるようにするために、設定しておく必要があります。
Edge Finderで確認する¶
ウェブブラウザーでEdge Finderを開き、使用しているエッジのトラフィック画面を表示します。データが送信されていることが確認できます。
注釈
Edge Finderのトラフィック画面では、ページを開いたあとに受信したデータしか表示されません。 トラフィック画面を開いてから、前の手順のechoコマンドを繰り返してください。
確認が済んだら、 intdash-agentctl run
を実行したターミナルでCtrl+Cを押して、リアルタイム送信を終了します。