2.2. Device Adapter連携用ノード

2.2.1. ice device in

デバイスアダプタに接続されたデバイスからエッジサーバに向けて送信されたイベントデータをNode-REDのフローに伝達するための入力ノードです。

ice device inはノードの設定で指定されたデータタイプのイベントデータみを受信します。デバイス側のデータタイプ定義方法については、 ICE Data Delivery C API を参照してください。

2.2.1.1. 設定項目

ice device inには以下の設定項目があります。

Data Type
受信するイベントデータのデータタイプを指定します。設定省略した場合、ice device inで受信可能な全てのデータタイプのイベントデータを受信します。
Name
ノードの名称を設定することができます。

いずれかのトポロジでCoAPAdapterのオプションに設定されているデータタイプのイベントデータは、ice device inで受信することができません。 ice device inでイベントデータを受信したい場合、Data Typeに設定するデータタイプをトポロジ側で使用しないように注意してください。

以下にice device inの設定例を記載します。

Data Type: temperature
この例では、データタイプがtemperatureであるイベントデータをice device inで受信できます。
複数のデバイスでデータタイプにtemperatureを設定している場合、それらすべてのデバイスからのイベントデータが届きます。

2.2.1.2. メッセージ構造

ICE CoreとNode-REDのメッセージのマッピングは以下の図のようになります。

msgdevicein

ICE CoreのメッセージはData Typeに対応するデバイスから受信したデータをpayloadに持っています。

ICE Coreのメッセージに含まれるpayloadがそのままNode-REDのmsg.payloadに格納されます。payload以外の制御用フィールドはmsg.ice_params配下に格納されます。data_typeはデバイスプロファイルに定義された値が設定されています。

必要に応じてfunctionノード等を利用して、フローごとにイベントデータのフィルタリングを行ってください。

2.2.2. ice device out

Node-REDのフローからデバイスにアクチュエーションメッセージを送信するための出力ノードです。

ice device outはメッセージで指定したobject_id、もしくはactuation_keyを持つデバイスへアクチュエーションメッセージを送信します。 actuation_keyを使用する場合、ice device outからメッセージ受信したいデバイスのデバイスプロファイルに、actuation_keyを設定する必要があります。

2.2.2.1. 設定項目

ice device outには以下の設定項目があります。

Routing Property
メッセージの送信先デバイスを指定するためのプロパティです。送信先指定に使用するプロパティ名と、その値を設定します。”unspecified”を設定した場合、メッセージ側のobject_idもしくはactuation_keyにより送信先を決定します。既定値は”actuation_key”です。
Name
ノードの名称を設定することができます。

2.2.2.2. メッセージ構造

ICE CoreとNode-REDのメッセージのマッピングは以下の図のようになります。

msgdeviceout

ICE Coreのメッセージは、object_idまたはactuation_keyで指定したデバイスと紐づいたデバイスアダプタに送信されます。ノード設定のRouting Propertyに”unspecified”以外の値を設定した場合、そちらの設定が優先されます。

Node-RED側のmsg.payloadは、ICE Coreのメッセージのpayloadに格納します。msg.payloadの型がobjectではない場合のみ、{value: msg.payload}の形式でobject型に変換してpayloadに格納します。
msg.ice_paramsに以下のフィールドが存在していれば、ICE Coreのメッセージに値を渡します。
  • op_type
  • object_type
  • op_id
  • object_id
  • actuation_key

object_typeの値が”device”か”device_adapter”以外の場合は無視します。

op_type、object_type、op_idのフィールドが存在しない場合、それぞれ以下の固定値が設定されます。

op_type: "actuate"
object_type: "device"
op_id: "none"

typeの値はoperation_request固定となります。

object_idもしくはactuation_keyの値が一致するデバイスにpayloadの内容が届けられます。条件に一致するデバイスが複数存在する場合、それらすべてのデバイスに同じメッセージが届きます。object_idとactuation_keyが両方設定されている場合、actuation_keyの設定が優先されます。

ice device outからメッセージを送信する際にobject_idとactuation_keyが両方存在しない場合、その旨をログ出力してメッセージ送信を中止します。

2.2.3. ice device adapter

ice device inやデバイスアダプタを使用せず、任意のNode-REDノードでデバイスと接続する場合に使用するノードです。
ice device adapterを使用することで、デバイスアダプタを使用する場合と同様にデバイスがICEの管理下に置かれ、ICE Backendへのメタデータの登録やデバイスへのアクチュエーションメッセージの送信が可能となります。 ice device adapter自身はデバイスアダプタとしてメタデータ登録されます。

2.2.3.1. 設定項目

ice device adapterには以下の設定項目があります。

ID
デバイスアダプタのIDを設定します。半角英数(大文字/小文字)が使用できます。IDには"RED_DEVADPT_"の接頭辞が付与されます。この項目に設定したIDの値がデバイスアダプタのobject_idとなります。必須項目です。
Device
デバイス定義を設定します。詳細はdevice-configを参照してください。必須項目です。
Device Check Interval
ノードで保持しているデバイスのメタデータの有効期間を1~2147483647の範囲で指定します。単位は秒です。指定時間の間、メッセージ送信が無かったデバイスの情報は破棄され、デバイスアダプタのメタデータのデバイス一覧から削除されます。ハートビート有効時は、ハートビートの間隔としても使用されます。既定値は3600です。
Heartbeat
ハートビート機能の有効・無効を設定します。ノード内で保持しているデバイスのメタデータをDevice Check Intervalの間隔でバックエンドに送信します。既定値はtrueです。
Cloud Adapter Options
メッセージに付与するadapterオプションをJSON形式で設定します。ここで指定した内容がmsg.ice_params.adapterにセットされます。詳細はice backend outのメッセージ構造を参照してください。
Name
ノードの名称を設定することができます。

IDDeviceは、複数のice device adapterで重複して設定することができません。 これらの項目に重複した値を設定している場合、フローのデプロイ時にエラーを出力します。

注釈

IDは、object_id全体(接頭辞部分を含めて)で128文字以内になるように設定してください。

2.2.3.2. メッセージ構造

2.2.3.2.1. 入力メッセージ

下記の入力メッセージを受け付けます。

  • メタデータ登録メッセージ(object_register)
  • イベントデータ(event_data)
入力メッセージのice_params.uniqueにより、メッセージ発信元のデバイスを区別します。 デバイスから初めてイベントデータを受け取ったタイミング、もしくはメタデータ登録メッセージを受け取ったタイミングで、ICE Backendにデバイスのメタデータ登録を行います。
Device Check Intervalで指定した期間メッセージ送信が無く、デバイス情報が破棄された場合、次にイベントデータ・メタデータ登録メッセージを受け取ったタイミングで、再度ICE Backendにメタデータ登録を行います。

メタデータ登録メッセージは下記のようなフォーマットです。

{
    ice_params: {
        type: "object_register",
        unique: "..."
    },
    payload: {
        //任意のデバイス情報
    }
}
ice_params.typeに”object_register”を設定している場合に、入力メッセージをメタデータ登録メッセージとして扱います。payloadにプロパティを設定すれば、メタデータ登録時にdevice-configProfileにプロパティを追加・上書きすることができます。
メタデータ登録メッセージはメタデータ登録に使用するだけで、後続のフローにメッセージを転送することはありません。
"RED_DEV_<device-configのID>_<unique>"がデバイスのobject_idになります。 デバイスのメタデータのフォーマットについては、device-configを参照してください。
ice_params.uniqueが存在しない場合、"RED_DEV_<device-configのID>"がobject_idとなり、デバイスの区別が出来なくなります。

注釈

uniqueの値には半角英数(大文字/小文字)が使用できます。文字長は、object_id全体で128文字以内になるように設定してください。

単にICE Backendにイベントデータ送信する場合は、下記のようなフォーマットのメッセージを入力します。

{
    ice_params: {
        type: "event_data",
        unique: "..."
    }
    payload: {
        //イベントデータの内容
    }
}
ice_params.typeは省略可能です。省略した場合、event_dataと判断します。
uniqueに対応するデバイスの登録がまだであれば、このタイミングでデバイスのメタデータ登録を行います。

2.2.3.2.2. 出力メッセージ

出力メッセージは、下記のようにice_paramsが付与された状態となります。

{
    ice_params: {
        type: "event_data",
        data_type: "<device-configのData Type>",
        object_id: "...",
        adapter: {
        }
    },
    payload: {
        //イベントデータの内容
    }
}
object_idには、メタデータ登録メッセージと同様の方法で作成した文字列を設定します。
ice_params.adapterは、Cloud Adapter Optionsを設定している場合にセットされます。

2.2.3.3. メタデータ登録

2.2.3.3.1. デバイスアダプタ

ICE Coreの起動、フローデプロイなど、ice device adapterが有効になったタイミングで、メタデータをICE Backendに送信します。 また、デバイスのメタデータ登録メッセージ受信や、デバイス情報破棄など、ice device adapterで管理しているデバイスの一覧に変化があった場合にもメタデータ登録を行います。

メタデータのフォーマットは下記の通りです。

{
    type: "object_register",
    edge_id: "...",
    flow_id: "...",
    object_id: "RED_DEVADPT_<ID>",
    object_type: "device_adapter",
    payload:{
        data_type: "deviceadapter",
        payload: {
            description: "ice device adapter node",
            devices: [
                "...",
                "...",
                "..."
            ]
        },
        type: "object_register"
    }
}

object_idに"RED_DEVADPT_"接頭辞付のIDの値が入ります。payload.payload.devicesは、ice device adapterを介して接続しているデバイスのobject_id一覧となっています。

2.2.4. device-config

ice device adapterice backend inで使用するConfigノードです。Node-REDノードと接続するデバイスのIDやProfileを定義することができます。device-configに定義した内容はメタデータとしてICE Backendに送信されます。
また、ICE Backend APIからデバイスにアクチュエーションメッセージを送信する際に、object_idの値にdevice-configのIDを指定することができます。

2.2.4.1. 設定項目

device-configには以下の設定項目があります。

ID
デバイスのIDを設定します。半角英数(大文字/小文字)が使用できます。IDには"RED_DEV_"の接頭辞が付与されます。この項目に設定したIDの値がデバイスのobject_idとなります。必須項目です。
Data Type
デバイスから送信するイベントデータのデータタイプを指定します。必須項目です。
Profile
ICE Backendに送信するメタデータに記載したいデバイス情報をJSON形式で記載します。

IDは、複数のdevice-configで重複して設定することができません。 この項目に重複した値を設定している場合、フローのデプロイ時にエラーを出力します。

注釈

IDは、object_id全体(接頭辞とunique部分を含めて)で128文字以内になるように設定してください。

2.2.4.2. メタデータ登録

device-config単体ではメタデータ登録は行われません。ice device adapterに設定することで、メタデータ登録が行われるようになります。

2.2.4.2.1. デバイス

ice device adapterで始めてイベントデータを受け取った時、もしくはメタデータ登録メッセージを受け取った時に、メタデータをICE Backendに送信します。

メタデータのフォーマットは下記の通りです。

{
    type: "object_register",
    edge_id: "...",
    flow_id: "...",
    object_id: "...",
    object_type: "device",
    payload:{
        data_type: "<Data Type>",
        delegate: "..."
        payload: {
            <Profileの設定値>
        },
        type: "object_register"
    }
}
object_idには、ice device adapterのメッセージ構造で説明した値が入ります。
delegateにはice device adapterのobject_idがセットされています。