3. チュートリアルB: 独自デバイスコネクターを使って文字列を送信する

このチュートリアルでは、デバイスコネクターのサンプルプログラムを起動させ、「デバイスコネクター → intdash Edge Agent → サーバー」のようにデータを送信します。

本来のデバイスコネクターの役割は、センサーなどの外部デバイスから取得したデータをintdash Edge Agentに渡すことですが、ここでは外部デバイスからデータを取得する代わりに、デバイスコネクタープログラム内で文字列データ("Hello intdash!")を生成し、intdash Edge Agentに渡します。intdash Edge Agentはそのデータをintdashサーバーに送信します。

注釈

このチュートリアルを実行するために事前にチュートリアルAを実行する必要はありません。 ただし、エッジデバイスにintdash Edge Agentが正しくインストールされ、サーバー側でエッジ「edge1」が作成されていることを前提にしています。

以下の理解にお役立てください。

  • デバイスコネクターの役割

  • マネージャーの設定ファイル(manager.conf)での、接続先や認証情報の設定方法、デバイスコネクターの指定方法

  • intdash Edge Agentとデバイスコネクターの間のインターフェイス

3.1. 設定のために必要な情報

  • 接続先サーバー名(例: xxxxxx.intdash.jp)

  • エッジ(edge1)のUUIDとクライアントシークレット

3.2. 設定ファイルとデバイスコネクターを用意する

■ エッジデバイスのターミナルでの操作

このチュートリアルでは以下の2つのファイルが必要です。

  • マネージャーの設定ファイル(manager.conf)

  • デバイスコネクター(Pythonプログラム)

いずれも、アプトポッドがGitHub上で公開しているサンプルを使用します。

注釈

intdash-edgeパッケージによりインストールされた基本の設定ファイル /etc/opt/intdash/manager.conf はこのチュートリアルでは使用しません。

  1. サンプルのリポジトリをクローンします。

    $ git clone https://github.com/aptpod/device-connector-samples.git
    
  2. 使用するサンプルのディレクトリに移動します。

    $ cd device-connector-samples/samples/hello-intdash/python/
    

注釈

ここではPythonプログラムのサンプルを使用しますが、リポジトリには、同じ機能を持つBashとC++によるサンプルも含まれています。使用方法についてはリポジトリ内のREADMEを参照してください。

このディレクトリにある hello-intdash-connector.py が、デバイスコネクターです。

このプログラムは、FIFO( FIFO_LGR2MNG = "/var/run/intdash/logger_100.tx" )を開き、そこに0.5秒ごとにデータを出力します。

出力されるデータは、 Hello intdash! という文字列に時刻やデータID(abc)を付与し、所定のバイナリフォーマットに変換したものです(説明用のチュートリアルであるため一定の文字列を繰り返し出力しています)。

3.3. マネージャーについて設定する(manager.conf)

■ エッジデバイスのターミナルでの操作

カレントディレクトリにあるintdash Edge Agentの設定ファイル(manager.conf)を編集して、必要な設定を行います。

3.3.1. リアルタイム送信に関する設定

リアルタイム送信に関する設定を、以下のように行います。

リスト 1 clients 内の、 "type": "realtime" の設定
 {
   "path": "/opt/vm2m/sbin/intdash-edge-client",
   "protocol": "mod_websocket.v2",
   "type": "realtime",
   ...
   "my_id": "XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",                # (A)
   "my_secret": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", # (B)
   "auth_path": "/var/lib/intdash/.auth",
   "connection": {
     "host": "xxxxx.intdash.jp",                                    # (C)
   ...
   }
 },
(A) my_id

エッジのUUIDを入力します。

(B) my_secret

エッジのクライアントシークレットを入力します。

(C) host

接続先のintdashサーバーのホスト名を入力します。

3.3.2. 再送処理に関する設定

同様に、再送処理に関する設定を以下のように行います。

リスト 2 clients 内の、 "type": "resend" の設定
 {
   "path": "/opt/vm2m/sbin/intdash-edge-client",
   "protocol": "mod_http",
   "type": "resend",
   ...
   "my_id": "XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",                # (D)
   "my_secret": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", # (E)
   "auth_path": "/var/lib/intdash/.auth",
   "connection": {
     "host": "xxxxx.intdash.jp",                                    # (F)
     ...
   }
 }

注釈

リアルタイム送信に関する設定と同じ値を設定します。

(D) my_id

エッジのUUIDを入力します。

(E) my_secret

エッジのクライアントシークレットを入力します。

(F) host

接続先のintdashサーバーのホスト名を入力します。

3.3.3. 使用するデバイスコネクターの指定

デバイスコネクター(logger)として、hello-intdash-connector.pyを使うように設定します。

リスト 3 loggers
"loggers": [
  {
    "devicetype": "customized",
    "path": "/path/to/hello-intdash-connector.py",    # (G)
    "conf": "",
    "status": "/var/run/intdash/logger_100.stat",
    "connections": [
      {
        "channel": 100,
        "fifo_tx": "/var/run/intdash/logger_100.tx",
        "fifo_rx": "/var/run/intdash/logger_100.rx"
      }
    ],
(G) path

カレントディレクトリにあるデバイスコネクター hello-intdash-connector.py のフルパスを入力します。

注釈

この設定ファイルでは、このデバイスコネクターにチャンネル「100」がアサインされていることが分かります。

また、 "fifo_tx": "/var/run/intdash/logger_100.tx" からデータを読み込む設定になっていることが分かります。 これは、 hello-intdash-connector.py の出力先と一致しています。

3.4. intdash Edge Agentを起動する

■ エッジデバイスのターミナルでの操作

  1. デバイスコネクターに実行パーミッションを設定します。

    $ chmod 755 hello-intdash-connector.py
    
  2. intdash Edge Agentを起動します。

    $ sudo LD_LIBRARY_PATH=/opt/vm2m/lib /opt/vm2m/sbin/intdash-edge-manager -C `pwd`/manager.conf
    

これによりintdash Edge Agentが起動し、自動的にデバイスコネクターも起動され、intdashサーバーへのデータの送信が始まります。

3.5. Edge Finderで表示する

■ ウェブアプリケーションでの操作

Edge Finder( <ベースURL>/edges/ )を開き、使用しているエッジの[トラフィック]をクリックして、データが送信されていることを確認します。

../_images/hello-intdash-edge-finder.png

図 3 「Hello intdash!」をサーバーが受信していることをEdge Finderで確認する

3.6. Data Visualizerで表示する

■ ウェブアプリケーションでの操作

Data Visualizerで動画データを表示します。

3.6.1. データ設定を読み込む/準備する

Data Visualizerで文字列データを表示するには、データタイプに合わせた設定が必要です。

  1. Data Visualizerで、 data-settings (Data Settings)をクリックします。

  2. [+ Add Group]をクリックして新規グループを作成します。

  3. 作成されたグループを展開し、[+ Add Data]をクリックします。

  4. 以下のように設定します。

    • Data Name: 任意の名前(このチュートリアルでは「String_100」とします)

    • Data Type: String

    • Data ID: abc

    • Channel: 100

    設定ができたら[OK]をクリックします。

3.6.2. ビジュアルパーツを設置してデータをバインドする

  1. Data Visualizerのダッシュボード上で空いているところをクリックし、[2x2]を選択します。

    ../_images/2x2.png

    図 4 パネルを設置

  2. 文字列を表示することができるビジュアルパーツを設定します。ここでは例としてText Streamを使用します。

    ../_images/text-stream-visual-part.png

    図 5 Text Streamを選択

  3. Data Bindingで、エッジ名(edge1)とString_100を選択します。

3.6.3. 再生する

LIVEモードにして、 play をクリックします。

../_images/hello-intdash-data-visualizer.png

図 6 Data Visualizerでの再生

注釈

Data Visualizerの詳細については、 Data Visualizer 操作マニュアル を参照してください。

3.7. intdash Edge Agentを終了する

■ エッジデバイスのターミナルでの操作

intdash Edge Agentを起動したターミナルで、Ctrl-Cを押してintdash Edge Agentを終了します。

これにより、intdash Edge Agentおよびデバイスコネクターが終了します。

以上で、このチュートリアルは終了です。 独自デバイスコネクターの追加についての詳細は、 intdash Edge Agent デベロッパーガイド 「04 独自のデバイスコネクターを追加する」を参照してください。

3.8. (参考)チャンネルを変更する

サンプルでは、チャンネル100でデータを送信するように設定されていますが、チャンネルはmanager.conf内の以下の箇所で変更することができます。

"loggers": [
  {
    ...
    "connections": [
      {
        "channel": 100,
        ...
      }
    ],
    ...
  }
]

チャンネルを変更した場合は、Data Visualizerのデータ設定でもチャンネルを変更し、ビジュアルパーツにデータをバインドし直す必要があります。

3.9. (参考)デバイスコネクターからintdash Edge Agentに渡すバイナリのフォーマット

このチュートリアルでは例として文字列を扱いましたが、intdash Edge Agentは多様なデータタイプに対応しています。

デバイスコネクターからintdash Edge Agentにデータを渡すときには、適切なデータタイプを選択し、そのデータタイプのフォーマットを使用してください。

データフォーマットは、「共通ヘッダー」と「データタイプごとの固有部分」により構成されます。 「共通ヘッダー」内にはデータタイプを区別するためのフィールドがあります。

../_images/data-format-example.svg

図 7 共通ヘッダーと固有部分(「intdash Edge Agent デベロッパーガイド」より抜粋)

データフォーマットの詳細については、 intdash Edge Agent デベロッパーガイド の「Agentとデバイスコネクターの間で使われるFIFOのデータフォーマット」を参照してください。