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
はこのチュートリアルでは使用しません。
サンプルのリポジトリをクローンします。
$ git clone https://github.com/aptpod/device-connector-samples.git
使用するサンプルのディレクトリに移動します。
$ 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. リアルタイム送信に関する設定¶
リアルタイム送信に関する設定を、以下のように行います。
{
"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. 再送処理に関する設定¶
同様に、再送処理に関する設定を以下のように行います。
{
"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を使うように設定します。
"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を起動する¶
■ エッジデバイスのターミナルでの操作
デバイスコネクターに実行パーミッションを設定します。
$ chmod 755 hello-intdash-connector.py
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/
)を開き、使用しているエッジの[トラフィック]をクリックして、データが送信されていることを確認します。
3.6. Data Visualizerで表示する¶
■ ウェブアプリケーションでの操作
Data Visualizerで動画データを表示します。
3.6.1. データ設定を読み込む/準備する¶
Data Visualizerで文字列データを表示するには、データタイプに合わせた設定が必要です。
Data Visualizerで、 (Data Settings)をクリックします。
[+ Add Group]をクリックして新規グループを作成します。
作成されたグループを展開し、[+ Add Data]をクリックします。
以下のように設定します。
Data Name: 任意の名前(このチュートリアルでは「String_100」とします)
Data Type: String
Data ID: abc
Channel: 100
設定ができたら[OK]をクリックします。
3.6.2. ビジュアルパーツを設置してデータをバインドする¶
Data Visualizerのダッシュボード上で空いているところをクリックし、[2x2]を選択します。
文字列を表示することができるビジュアルパーツを設定します。ここでは例としてText Streamを使用します。
Data Bindingで、エッジ名(edge1)とString_100を選択します。
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にデータを渡すときには、適切なデータタイプを選択し、そのデータタイプのフォーマットを使用してください。
データフォーマットは、「共通ヘッダー」と「データタイプごとの固有部分」により構成されます。 「共通ヘッダー」内にはデータタイプを区別するためのフィールドがあります。
データフォーマットの詳細については、 intdash Edge Agent デベロッパーガイド の「Agentとデバイスコネクターの間で使われるFIFOのデータフォーマット」を参照してください。