1. デバイスコネクター開発の概要

1.1. デバイスコネクターとは

デバイスコネクターは、intdashエッジにおいて、intdash Edge Agentと外部デバイスとの間でデータを仲介するソフトウェアコンポーネントです。

デバイスコネクターはintdash Edge Agentと同じエッジデバイスにインストールされ、以下のような機能を担います。

  • センサーなどの外部デバイスからデータを受け取り、intdash Edge Agentに渡す。

  • 逆に、intdash Edge Agentからデータを受け取り、ロボットなどの外部デバイスに渡す。

デバイスコネクターとintdash Edge Agentの間のデータの受け渡しには、FIFO(名前付きパイプ)を使います。

../_images/edge-agent-one-device-connector.ja.svg

図 1 デバイスコネクター

1.2. Device Connector Frameworkとは

Device Connector Frameworkは、デバイスコネクターを開発する方のための開発用フレームワークです。

  • Device Connector Frameworkにより作成されたデバイスコネクターでは、デバイスへの接続やデータ収集、収集したデータに対する処理は、それぞれ「エレメント(Element)」として定義されます。ユーザーは、エレメントを組み合わせて、データが流れるパイプラインを設定することができます。設定はパイプライン設定ファイルで行います。

  • デバイスコネクターを実行すると、パイプライン設定ファイルで指定された各エレメントは、同期または非同期に動作する「タスク(Task)」として実行されます。また、タスク間でのメッセージパッシングはデバイスコネクターにより管理されます。

これにより、柔軟にエレメントを組み合わせて、データ(メッセージ)が流れるパイプラインを作成することができます。

../_images/device-connector-overview-upstream.svg

図 2 デバイスからintdash Edge Agentへ入力するパイプラインの例

../_images/device-connector-overview-downstream.svg

図 3 intdash Edge Agentからデバイスへ出力するパイプラインの例

なお、ファイルからの読み込み、ファイルへの書き出しなどの基本的な処理を行うエレメントはDevice connector Frameworkに含まれています(基本エレメント)。

1.3. Device Connector Frameworkで使用される用語

Device Connector Frameworkで使用される用語について説明します。

1.3.1. メッセージ

タスク間で送受信されるデータです。

タスク間で送受信されるメッセージは、何らかの型を持ちます。 型情報は、MIMEタイプ(例: MIMEタイプ "image/jpeg" )またはカスタムタイプ(例: カスタムタイプ "iscp-v2-compat-msg" )です。

各ポートがどの型のメッセージを受け取れるかは、エレメントにおいて定義されます。

送信元のタスクは、メッセージを最初に送信するとき、そのメッセージの型をデバイスコネクターに通知します。 デバイスコネクターは、メッセージを受信するポートがその型を受け入れ可能かどうかを判定し、受け入れができない場合はエラーとします。

データを、MIMEタイプ "image/jpeg" 、 MIMEタイプ "text/plain" 、カスタムタイプ "iscp-v2-compat-msg" 等で送出するエレメントの場合は、1枚の画像、1行のテキスト、1つのデータポイントのように、意味を持つ単位を1つのメッセージとして送出します。

それに対し、MIMEタイプ "application/octet-stream" で送出するエレメントの場合は、送出するデータは区切りのないバイナリストリームであるため、意味的な区切りとは関係なく送信上の都合でセグメントに分割して送信します。この場合のセグメントもここではメッセージと呼びます。

1.3.2. エレメント

メッセージの生成やメッセージの処理を定義したものです。 デバイスコネクター内にメッセージを生成する「srcエレメント」、受け取るだけの「sinkエレメント」、送受信を共に行う「filterエレメント」があります。

エレメントは、実行時には「タスク」として実行されます。

../_images/element-types.svg

図 4 エレメントの種類(src、filter、sink)

デバイスコネクター内のパイプラインでは、以下の順序で処理が行われます。

  • srcエレメントにおいて、デバイスコネクターの外部(例えばセンサー)からデータを取得して、メッセージを生成

  • filterエレメントにおいて、メッセージを意味のある単位に区切る、変換する、などの処理を行う

  • sinkエレメントにおいて、デバイスコネクターの外部(例えばintdash Edge Agent)にデータを出力する

注釈

アプトポッドにより提供されるエレメントは以下のような名前になっています。

  • srcエレメント: *-src

  • filterエレメント: *-filter

  • sinkエレメント: *-sink

例えば、入力をjpegのフレームごとのメッセージにするのはfilterエレメントの役目で、jpeg-split-filterと名付けています。

1.3.3. タスク

エレメントにおいて定義された処理が実際に実行されるとき、その処理はタスクと呼ばれます。 タスクは、メッセージの送受信が必要になったときに起動されます。

1.3.4. ポート

エレメントには、0個以上255個以下の受信ポートと、0個以上255個以下の送信ポートを定義することができます。 複数のポートを使うことによって、ポートごとに別の型のメッセージを送受信させることができます。

  • 複数の送信ポートからのメッセージを、1つの受信ポートで受信することができます。

  • 1つの送信ポートから、複数の受信ポートに向けてメッセージを送信することはできません。

注釈

Device Connector Framework v1.0現在、送受信ともに0番ポート1つのみを使用することができます。 今後のリリースで、順次複数のポートに対応する予定です。