チュートリアル1: アップストリームで送信する

このチュートリアルでは、intdash Edge Agent 2からintdashサーバーに、「Hello」という文字列を送信します(アップストリーム)。

../_images/tutorial-1.svg

図 2 チュートリアル1

操作手順は以下のようになります。

  1. 接続先サーバーを設定する

  2. アップストリームの設定を作成する

  3. デバイスコネクターの設定を作成する

  4. リアルタイム送信を開始する

  5. データを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(ここでは、さきほど作成した sample-upstream というアップストリームを指定しています。)

format

このデバイスコネクターが送信するデータのフォーマット(ここでは、 iscp-v2-compat を使用します。)

ipc.type

intdash Edge Agent 2とデバイスコネクターの間のデータ通信方法(現在 fifo のみに対応しているため、 fifo を指定してください。)

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秒(リトルエンディアン:整数秒部 \xd2\x04\x00\x00 、ナノ秒部 \x15\xcd\x5b\x07

Data Type Length

6 (リトルエンディアン: \x06\x00

Data Name Length

2 (リトルエンディアン: \x02\x00

Payload Length

5 (リトルエンディアン: \x05\x00\x00\x00

Data Type

string(UTF-8エンコード: \x73\x74\x72\x69\x6e\x67

Data Name

ab(UTF-8エンコード: \x61\x62

Payload

Hello(UTF-8エンコード: \x48\x65\x6c\x6c\x6f

このように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コマンドを繰り返してください。

../_images/tutorial-1-edge-finder.ja.png

図 3 Edge Finderでトラフィックを確認する

確認が済んだら、 intdash-agentctl run を実行したターミナルでCtrl+Cを押して、リアルタイム送信を終了します。