概要

このセクションでは、既存の SmartREST 1.0 テンプレートを MQTT で使用する方法について説明します。

SmartREST 1.0はHTTP要求/応答用に設計されており、MQTTとのIDレス通信をサポートしていないことに注意してください。HTTPを使用して送信する場合とまったく同じリクエストを送信するためにMQTT接続を使用するだけです。したがって、MQTTは要求/応答ではないため、いくつかの制限があります。

SmartREST 1.0のサポートは、既存のSmartREST1.0テンプレートを使い実装している場合に移行を容易にするために追加されました。

MQTT ClientId

SmartREST 1.0 では各メッセージの本文で ID を送信する必要がありますが、正しいMQTT ClientIdで接続することは依然として重要です。

MQTT ClientIdは、デバイスのc8y_SerialのexternalIdと一致する必要があります。正しいオペレーションと応答を割り当てるために使用されます。

SmartREST 1.0 の送受信

一般に、MQTT を介した SmartREST 要求と応答には、次のことが当てはまります。

SmartREST 1.0 の送信

サーバーにデータを送信するには、SmartREST エンドポイント/sに POST する場合と同じコンテンツをパブリッシュできます。

X-ID ヘッダーは、クライアントがパブリッシュする必要があるトピックの一部です。

s/ul/<X-ID>

X-ID はプロトコル識別子として機能し、テンプレート コレクションを識別します。 X-ID は不変である必要があり、常にまったく同じテンプレートコレクションを識別します。 テンプレート コレクションが変更された場合は、X-ID も変更する必要があります。また、X-ID はグローバルに一意である必要があります。他のユーザーが使用していない X-ID を選択してください。確認のために、次のような逆引きドメイン名を使用することをお勧めします。

com.acme.gw801-v1
com.acme.gw801-v2

また、プロトコルバージョンを X-ID の接尾辞として追加することをお勧めします。

処理モード

Things Cloud SmartREST プロトコルは、送信されたデータがデータベースに保存しないようにするための TRANSIENT 処理モードをサポートしているため、トピックs/ではなくMQTTトピックt/にパブリッシュすると、データはリアルタイム処理にのみ渡されます。

t/ul/<X-ID>

Things Cloud SmartREST プロトコルは、QUIESCENT処理モードもサポートしており、トピックs/ではなくMQTTトピックq/にパブリッシュすることで、リアルタイム通知を回避できます。現在、QUIESCENT処理モードはメジャーメントとイベントにのみ適用可能です。

q/ul/<X-ID>

Things Cloud SmartREST プロトコルは CEP処理モードもサポートしており、トピックs/ではなくMQTTトピックc/にパブリッシュすることで、データはリアルタイム通知があるリアルタイムイベント処理エンジンにのみ送信されることを無効にします。現在、CEP処理モードはメジャーメントとイベントにのみ適用可能です。

c/ul/<X-ID>

SmartREST 1.0 の受信

テンプレートが応答テンプレートを起動する場合、サーバーは次のトピックで返されるメッセージをパブリッシュします。

s/dl/<X-ID>

このトピックは、クライアントがサブスクライブできます。

オペレーションの受信

HTTP 経由の SmartREST 1.0 はエンドポイント/notification/operationsを提供し、リアルタイムのオペレーションを監視します。次のMQTTトピックでも同じ内容を受け取ることができます。

s/ol/<X-ID>
備考
通知を実行するためには、プラットフォームデバイスにMQTT ClientIdと一致するexternalIdが設定されている必要があり、そうでない場合は通知を受け取ることができません。

制限事項

MQTT は現在、要求/応答をサポートしていません。したがって、パブリッシュトピックで要求を送信し、サブスクライブ トピックで応答を受信した場合、クライアントはそれらが要求に対する応答であることを安全に照合できません。

この制限に対処するには、どの要求が応答をトリガーしたかを知る必要がないようにテンプレートを設計することにより、クライアントがmessageIdによって自動的に認識するようにします。

MQTT クイックリファレンス

クイックリファレンス

接続

トピック

パブリッシュ

サブスクライブ

トピック形式

<protocol>/<direction><type>[/<template>][/<child_id>]

場所:

デバイス登録

テンプレート登録

テンプレート

使用可能な MQTT 静的テンプレートの概要については、テンプレート クイックリファレンスをご覧ください。

SmartREST 2.0

概要

このセクションでは、Things Cloud MQTT実装で使用できるSmartREST 2.0ペイロード形式について説明します。

SmartREST 2.0はMQTTプロトコルを利用するように設計されているので、HTTP経由のSmartREST 1.0よりもペイロードを削減できる可能性があリます。

SmartREST 2.0はMQTT経由でのみ利用可能であり、主な通信のために以下のMQTTトピックを提供しています。

メッセージをパブリッシュするには:

s/uc/<X-ID>

TRANSIENTモードでメッセージをパブリッシュするには:

t/uc/<X-ID>

QUIESCENTモードでメッセージをパブリッシュするには:

q/uc/<X-ID>

CEPモードでメッセージをパブリッシュするには:

c/uc/<X-ID>

TRANSIENT、QUIESCENT、およびCEPデータ処理の詳細については、SmartREST 1.0 > SmartREST 1.0を送信する > 処理モード をご覧ください。

応答をサブスクライブするには:

s/dc/<X-ID>

テンプレートの作成に関するトピックは、MQTT経由のテンプレートの作成で説明しています。

SmartREST 1.0からの変更点

SmartREST 2.0のベースは以前のバージョンと同じで、CSVに似たペイロード形式で、以前に作成されたテンプレートによってサポートされ、最終的にターゲットとするJSON構造を作成します。

機能にいくつかの変更が加えられました。

サポートされているテンプレート

SmartREST 2.0では、次の一致するHTTPメソッドのテンプレートを作成できます。

API GET POST PUT
インベントリ о о о
アラーム   о о
イベント   о  
メジャーメント   о  
オペレーション     о

さらに、応答およびオペレーションから特定の値を返すテンプレートを作成できます。

テンプレートコレクション

テンプレートコレクションは、デバイス通信プロトコルを指定する要求テンプレートと応答テンプレートのセットです。各コレクションは、一意のID(X-IDと呼ばれる)によって参照されます。

MQTT経由のテンプレート作成

SmartREST 1.0と同様に、コレクション内のすべてのテンプレートを1つのメッセージで渡す必要があります。テンプレートコレクションの作成後は、MQTTを使用して変更することはできなくなります。

テンプレートを作成する場合、クライアントは次のトピックにパブリッシュする必要があります。

s/ut/<X-ID>

テンプレートコレクションが存在するかどうかを確認するために、クライアントは次のトピックをサブスクライブできます。

s/dt

サブスクライブすると、クライアントは作成トピックに空のメッセージを送信し、このX-IDの作成ステータスに関する新しいメッセージをトリガーできます。

s/ut/myExistingTemplateCollectionへの空のパブリッシュ

20,myExistingTemplateCollection,<ID of collection>

s/ut/myNotExistingTemplateCollectionへの空のパブリッシュ

41,myNotExistingTemplateCollection

要求テンプレート

要求テンプレートには、次の基本フィールドが含まれます。

フィールド データ型 必須 説明
messageId String   はい コレクション内のテンプレートを参照する一意のID
method String GET
PUT
POST
はい データを取得、更新、または作成するかどうか
api String INVENTORY
MEASUREMENT
ALARM
EVENT
OPERATION
はい 使用する Things Cloud API
response Boolean true
false
いいえ リクエストが応答テンプレートをトリガーするかどうか。 GETテンプレートの場合はデフォルトでtrue、それ以外の場合はデフォルトでfalse
mandatoryValues List<String>   はい APIの必須フィールドの値。 値は、テンプレートが使用するAPIおよびメソッドによって異なります
customValues List<CustomValue>   いいえ オブジェクトに追加するカスタム値

要求テンプレートには、データの作成時または更新時に追加されるオブジェクト構造内のすべてのフラグメント(必須およびカスタム)がリストされます。 テンプレートに固定値を設定し、サーバーで置き換えることができます。テンプレートに値が設定されていない場合は、その値をパブリッシュメッセージに含める必要があります(これにはmandatoryValuesが含まれます)。

備考
1秒あたりのメッセージレートの制限を超えると、要求は遅延され、キューに保持されます。キュー制限数を超えると、クライアントメッセージは拒否され、クライアントは切断されます。

このようなメジャーメントを作成するためのテンプレートを作成します(メジャーメントには、typeとtimeの2つの必須値があります)。

# 10,msgId,method,api,response,type,time,custom1.path,custom1.type,custom1.value
10,999,POST,MEASUREMENT,,c8y_MyMeasurement,,c8y_MyMeasurement.M.value,NUMBER,

このテンプレートでは、メジャーメントのカスタムプロパティを1つ追加定義します。テンプレート宣言の2つのフィールドを空のままにしているので(timeとカスタムプロパティ)、テンプレートを使うためにクライアントはこれら2つの値を送信する必要があります。

999,2016-06-22T17:03:14.000+02:00,25
# We can also use server time by leaving the time empty
999,,25

次のセクションでは、さまざまなテンプレートの作成方法と使用方法について詳しく説明します。

GETテンプレート

インベントリのGETテンプレートには、必須またはカスタムの値は必要ありません。代わりに、2つの異なるフィールドを使用します。

SmartREST 2.0では、IDによってインベントリからオブジェクトを取得するか、External IDによってオブジェクトを直接取得するかを選択できます。したがって、mandatoryValuesおよびcustomValuesフィールドの代わりに、次の2つのフィールドが使用されます。

フィールド データ型 必須 説明
byId Boolean true
false
はい GETをThings Cloud ID(= true)またはExternal ID(= false)のどちらで実行するか
externalIdType String   いいえ テンプレートがexternalIdによって呼び出された場合、固定externalIdTypeを設定します

これにより、次の3つの異なる方法でインベントリを照会することができます。

Things Cloud ID (マネージドオブジェクトID)

# Creation:
10,999,GET,INVENTORY,,true
# Usage:
999,123456

テンプレートに固定タイプを持つExternal ID

# Creation:
10,999,GET,INVENTORY,,false,c8y_Serial
# Usage:
999,myDeviceImei

テンプレートに固定タイプがないExternal ID

# Creation:
10,999,GET,INVENTORY,,false
# Usage:
999,c8y_Serial,myDeviceImei
POST テンプレート

POSTテンプレートには、APIに基づいて必須値の組み合わせが異なります。

API 必須値
メジャーメント type, time
イベント type, text, time
アラーム type, text, status, severity, time
インベントリ externalIdType

これにより、次の最小限のテンプレートが作成されます。

# Creation:
10,100,POST,MEASUREMENT,false,c8y_MyMeasurement,,c8y_MyMeasurement.M.value,NUMBER,
10,101,POST,EVENT,,c8y_CustomEvent,mytext,,
10,102,POST,ALARM,,c8y_CustomAlarm,mytext,ACTIVE,MAJOR,

# Usage:
100
101
102

インベントリでのデータの作成には、オプションでそのオブジェクトのexternalIdの作成が含まれます。 これは、必須値externalIdTypeによって制御されます。

重要
POSTインベントリテンプレートは、messageIdの後のexternalIdの値で始まります。この列を空のままにすると、External IDが作成されなくなります。
# Creation:
10,100,POST,INVENTORY,,c8y_MySerial
# Usage:
# Create object with externalId c8y_MySerial/myImei
100,myImei
# Create object with externalId c8y_MySerial/myImei
101,myImei,c8y_MySerial
# This message will result in not creating an external ID
101,,c8y_MySerial
PUTテンプレート

インベントリのPUTテンプレートはGETテンプレートと同じロジックに従いますが、さらにPUTにカスタム値を使用することもできます。

# Creation:
# 10,msgId,method,api,response,byId,externalIdTyoe,custom1.path,custom1.type,custom1.value
10,999,PUT,INVENTORY,,false,c8y_Serial,c8y_MyCustomValue,STRING,
# Usage:
999,myDeviceImei,myValue

アラームの PUT テンプレートは、アラームのタイプを使用して、更新するアラームを見つけます。最初にACTIVE アラームをチェックし、アクティブアラームがない場合は、ACKNOWLEDGED アラームをチェックします。

# Creation:
# 10,msgId,method,api,response,type,custom1.path,custom1.type,custom1.value
10,999,PUT,ALARM,,c8y_MyCustomAlarm,status,ALARMSTATUS
# Usage:
999,CLEARED

オペレーションのPUTテンプレートは、オペレーションのフラグメントを使用してオペレーションを見つけます。最初にEXECUTINGオペレーションをチェックし、EXECUTINGオペレーションがない場合はPENDINGオペレーションをチェックします。

# Creation:
# 10,msgId,method,api,response,fragment,custom1.path,custom1.type,custom1.value
10,999,PUT,OPERATION,,c8y_MyOperation,status,OPERATIONSTATUS,SUCCESSFUL,c8y_Fragment.val,NUMBER,
# Usage:
999,24
カスタムプロパティの追加

すべてのPOSTおよびPUT値を使用すると、テンプレートの結果にカスタムプロパティを追加できます。

1つのカスタムプロパティでは、テンプレートの作成に次の3つの値を追加する必要があります。

フィールド 説明
path 設定する値のJsonパス
type 値のオプションのデータ型 デフォルト:STRING
value 設定する値
このフィールドを空のままにすると、クライアントはテンプレートを使用するときに値を送信する必要があります。
タイプ 説明
STRING デフォルトの型。値の追加検証はありません。
DATE ISO 8601形式のタイムスタンプ
日付を使用し、タイムスタンプを送信しないと、サーバー時刻が使用されます。
NUMBER 整数または小数点以下の数字
INTEGER 整数
UNSIGNED 整数(正のみ)
FLAG 空のマップ(例:c8y_IsDevice:{})
クライアントはこの値に対して何も送信する必要はありません。
SEVERITY アラームの重大度 アラームの重要度フィールドを更新するために使用します。
ALARMSTATUS アラームの状態 アラームのステータスフィールドを更新するために使用します。
OPERATIONSTATUS オペレーションの状態 オペレーションのステータスフィールドを更新するために使用します。

追加のカスタムプロパティを使用してアラームをクリアするためのテンプレート

# Creation:
10,999,PUT,ALARM,,c8y_MyCustomALarm,status,ALARMSTATUS,CLEARED,c8y_CustomFragment.reason,STRING,
# Usage:
999,Device resolved alarm on its own

カスタムメジャーメントを作成するためのテンプレート

# Creation:
10,999,POST,MEASUREMENT,,c8y_CustomMeasurement,,c8y_CustomMeasurement.custom.value,NUMBER,,c8y_CustomMeasurement.custom.unit,STRING,X
# Usage:
999,30.6

デバイスのプロパティを更新するためのテンプレート

# Creation:
10,999,PUT,INVENTORY,,false,c8y_Serial,c8y_MyCustomValue,STRING,
# Usage:
999,myDeviceImei,updatedValue

応答テンプレート

SmartREST 2.0応答テンプレートは、SmartREST 1.0と同じ構造を使用します。

フィールド データ型 必須 説明
messageId String はい コレクション内のテンプレートを参照する一意のID
base String いいえ すべてのパターンが使用するJsonパスプレフィックス
condition String いいえ パターンを使用するためにオブジェクトに存在する必要があるJsonパス
pattern List<String> はい オブジェクトから抽出されてデバイスに返されるJsonパスのリスト

応答テンプレートはすべてのオペレーションと、trueで応答フィールドを定義するすべての要求テンプレートに使用されます。いずれの場合も、サーバーは登録されたすべての応答テンプレートを試行するため、1つのオペレーションまたは要求に対して複数の応答行がある場合があります。

SmartREST 2.0は、条件が真(または条件が定義されていない)の場合、常に応答テンプレートを返します。解決されなかったパターンは、空の文字列として返されます。

条件フィールドを使用して、応答テンプレートを返すタイミングを制御する必要があります。

次の例では、データのクエリ方法とカスタムオペレーションの解析方法を示します。

デバイスオブジェクトからのクエリデータ

デバイスオブジェクト:

{
  "id": "12345",
  "type": "myMqttDevice",
  "c8y_IsDevice": {},
  "c8y_Configuration": "val1=1\nval2=2"
}

テンプレート作成:

10,999,GET,INVENTORY,,true
11,888,,c8y_IsDevice,type,c8y_Test,c8y_Configuration

クライアントからのパブリッシュ:

999,12345

クライアントへの受信情報:

888,myMqttDevice,,"val1=1\nval2=2"
カスタムオペレーションの解析

オペレーションオブジェクト:

{
  "id": "12345",
  "deviceId": "67890",
  "agentId": "67890",
  "status": "PENDING",
  "c8y_CustomConfiguration": {
    "val1": "1",
    "val2": "2",
    "customValues": ["a", "b", "c"]
  },
  "description": "Send custom configuration"
}

テンプレート作成:

11,111,c8y_CustomConfiguration,deviceId,val1,val2,customValues[*]
11,222,,deviceId,c8y_CustomConfiguration.val1,c8y_CustomConfiguration.val2
11,333,,deviceId,val1,val2,customValues[*]
11,444,c8y_CustomConfiguration,c8y_CustomConfiguration.val3,val1,val2,customValues[*]

クライアント受信情報(ClientIdが「myMqttTestDevice」であると仮定):

111,myMqttTestDevice,1,2,a,b,c
222,myMqttTestDevice,1,2
333,myMqttTestDevice,,,

条件がオペレーションと一致しないため、テンプレート444は返されません。

複数のオブジェクトを持つキーを含むデバイスオブジェクトからのクエリデータ

デバイスオブジェクト:

{
  "id": "12345",
  "name": "test",
  "type": "c8y_MQTTdevice",
  "c8y_IsDevice": {},
  "myList": [
      {
          "pid": 12345,
          "type": "test"
      },
      {
          "pid": 123456,
          "type": "test2"
      }
  ]
}

テンプレート作成:

10,999,GET,INVENTORY,,true
11,888,,,"$.myList[*].type"

クライアントからのパブリッシュ:

999,12345

クライアントへの受信情報:

888,test,test2

デフォルトコレクションの使用

トピックの一部としてX-IDを使用すると、複数のテンプレートコレクションを簡単に使用できますが、メッセージごとにバイトが追加されます。 いずれにしても、デバイスがほとんど(または完全に)単一のコレクションを使用する場合は、このコレクションをデフォルトのコレクションとして指定することをお勧めします。

デフォルトのコレクションを指定すると、クライアントはX-IDを必要としない特別なトピックを使用でき、代わりにサーバーは前に指定されたX-IDを使用します。トピックは、パブリッシュの場合はs/ud、サブスクライブの場合はs/ddです。

MQTT ClientId内でX-IDを指定できます(MQTT実装をご覧ください)。

MQTT ClientIdは次のようになります。

d:myDeviceSerial:myDefaultTemplateXID
備考
デフォルトのX-IDを使用する場合、クライアントがデバイスであることを指定するために、ClientIdの先頭にd:を含める必要があります。

MQTT接続の確立時にデフォルトのテンプレートが存在する必要はありません(クライアントが使用すると検証されます)。

IDの取り扱い

IDレス通信の概念

Things Cloud の MQTT 実装は、特にデバイス通信用に設計されています。そのため、クライアント側から不要なロジックをできるだけ削除しようとします。

REST(またはSmartREST)プロトコルを使用するには、更新するすべてのオブジェクト、アラーム、およびオペレーションのIDを知っている必要があります。したがって、クライアントはこれらのIDの状態を保持する必要があります。例えば、アラームを作成する場合、あとでクリアできるように、アラームのIDを知る必要があります。

MQTT実装では、このようなアクションを実行し、ロジックをサーバーに移動するためにデバイスで必要なロジックを減らしたいと考えています。

例 1: デバイスの ID

RESTを経由してデバイスオブジェクトのデータを更新するには、デバイスオブジェクトのID(マネージドオブジェクトID)を知る必要があります。また、このIDはデバイスに関連付ける必要がある、他のすべてのデータ(メジャーメント、アラーム、イベントのソースなど)にも必要です。

IDをデバイスに保持する必要性をなくすために、Things Cloudは Identity APIを提供しており、External ID(例えばシリアル番号)をオブジェクトにリンクできるため、いつでもIDを照会することができます。

一般的なデバイスの起動は次のようになります。

REST Receiving Device ID

MQTTでは、MQTT ClientIdで Identity APIを自動的に使用します。 これにより、デバイスにIDを通知する必要がなくなり、クライアントはこの接続で他のデータも送信するため、すべてのメジャーメント、アラーム、イベントなどを正しいデバイスに関連付けることができます。

MQTT Automatically Resolve ID

例 2: アラームの ID

クライアントがREST APIを使用してアラームを作成する場合、Things Cloudによって生成されたアラームのIDを取得する必要があります。

クライアントは、後でアラームを更新するためにこのIDを必要とします。例えば、アラームがアクティブでなくなった場合、ステータスをCLEAREDに更新します。

REST Handling Alarms

Things Cloudでは、デバイスはステータスがACTIVEのタイプごとに1つのアラームしか持つことができません。同じタイプで別のアラームを作成すると、重複除外されます。したがって、MQTT実装ではアラームのタイプを識別子として使用します。クライアントは解決されたアラームのタイプを送信するだけで、サーバーは正しいアラームオブジェクトを見つけることができます。

MQTT Handling Alarms

MQTT 静的テンプレート

概要

デバイスの統合を容易にするために、Things Cloudはすでに、独自のテンプレートを作成することなく任意のクライアントで使用できる多くの静的テンプレートをサポートしています。これらのテンプレートは、デバイス管理の目的で最も一般的に使用されるメッセージに焦点を当てています。

下記のテンプレートを使用するには、トピックs/us(TRANSIENTモードはトピックt/us、QUIESCENTモードはトピックq/us、CEPモードはトピックc/us)にメッセージをパブリッシュする必要があります。詳しくは、SmartREST 1.0 > SmartREST 1.0の送信 > 処理モードをご覧ください。

静的テンプレートを使用してオペレーションを受信するには、トピックs/dsをサブスクライブする必要があります。

テンプレート クイックリファレンス

以下のコマンドをクリックすると、それぞれのテンプレートの詳細が表示されます。パラメータが角かっこで囲まれている場合は省略可能です。

インベントリテンプレート

メジャーメントテンプレート

アラームテンプレート

イベントテンプレート

オペレーションテンプレート

クライアントは、s/dsをサブスクライブするときに次のテンプレートを受信することができます。

インベントリテンプレート

オペレーションテンプレート

デバイスの自動作成

静的テンプレートのトピックは、デバイスの自動作成をサポートしています。MQTT ClientIdに関連付けられた子デバイスがなく、データを送信すると、Things Cloudは自動的にMQTT ClientId用のデバイスを作成します。独自にデバイスを作成する場合、最初のメッセージはデバイスの作成でなければなりません。この場合、Things Cloudはテンプレートからデバイスを作成します。

デバイスの自動作成は、第1レベルの子デバイスでもサポートされています。下位レベルの子デバイスの場合は、子デバイスを作成するためのテンプレートを使用して、新しい子デバイスの下にある子デバイスのトピックにそのテンプレートを送信する必要があります。

必須パラメータなしの処理

パラメータが必須として宣言されていない場合、クライアントはその場所に空の文字列を送信できます。

100,,myType

末尾のコンマは必要ありません。次の2行では、同じメッセージになります。

100,,
100

テンプレートのパブリッシュ

次のテンプレートを使用して、トピックs/ust/usに関するデータをパブリッシュできます。TRANSIENTデータ処理のトピックt/の詳細については、SmartREST 1.0 > SmartREST 1.0の送信 > 処理モードをご覧ください。

インベントリテンプレート(1xx)

デバイス作成 (100)

インベントリにシリアル番号に対するデバイスがまだ存在していない場合は、新しいデバイスを作成します。デバイスのc8y_SerialのexternalIdとMQTT ClientIdのデバイス識別子としての値が作成されます。

位置 パラメータ 必須 タイプ デフォルト値
1 device name いいえ String MQTT Device <serialNumber>
2 device type いいえ String c8y_MQTTDevice

100,myDevice,myType

子デバイスの作成 (101)

現在のデバイスの新しい子デバイスを作成します。新しく作成されたオブジェクトは子デバイスとして追加されます。さらに、子デバイスのexternalIdがc8y_Serialに作成され、値はルートデバイスのシリアルと一意の子デバイスIDの組み合わせになります。

位置 パラメータ 必須 タイプ デフォルト値
1 unique child ID はい String  
2 device name いいえ String MQTT Device <serialNumber>
3 device type いいえ String c8y_MQTTChildDevice

101,uniqueChildId,myChildDevice,myChildType

サービスの作成 (102)

特定のデバイス用の新しいソフトウェア サービスを作成します。

位置 パラメータ 必須 タイプ
1 service unique external id はい String
2 service type はい String
3 service name はい String
4 service status はい String

102,myDatabaseDevice,systemd,DatabaseService,up

サービスステータスの更新 (104)

特定のソフトウェアサービスのステータスを設定します。

位置 パラメータ 必須 タイプ
1 service status はい String

104,up

子デバイスを取得する (105)

デバイスの子デバイスの送信をトリガーします。

105

デバイスのフラグメントをクリアする (107)

1つ以上のフラグメントをデバイスから削除します。

位置 パラメータ 必須 タイプ
1… fragmentName はい String

107,c8y_Position,c8y_Configuration

ハードウェアの設定 (110)

デバイスのハードウェア プロパティを更新します。

位置 パラメータ 必須 タイプ
1 serialNumber いいえ String
2 model いいえ String
3 revision いいえ String

110,1234567890,myModel,1.2.3

モバイルの設定 (111)

デバイスのモバイル プロパティを更新します。

位置 パラメータ 必須 タイプ
1 imei いいえ String
2 iccid いいえ String
3 imsi いいえ String
4 mcc いいえ String
5 mnc いいえ String
6 lac いいえ String
7 cellId いいえ String

111,1234567890,,54353

位置の設定 (112)

デバイスの位置プロパティを更新します。

位置 パラメータ 必須 タイプ
1 latitude いいえ Number
2 longitude いいえ Number
3 altitude いいえ Number
4 accuracy いいえ Integer

112,50.323423,6.423423

構成の設定 (113)

デバイスの構成プロパティを更新します。

位置 パラメータ 必須 タイプ
1 configuration いいえ String

113,"val1=1\nval2=2"

サポートされている操作を設定する (114)

デバイスのサポートされている操作を設定します。

位置 パラメータ 必須 タイプ
1… List of supported operations いいえ String

114,c8y_Restart,c8y_Configuration,c8y_SoftwareList
備考
サポートされているオペレーションリストから項目を削除したい場合は、例えば上記の例のリクエストの後にc8y_SoftwareListを削除するには、114, c8y_Restart,c8y_Configuration などのように、更新したリストで新しい114リクエストを送信してください。

ファームウェアの設定 (115)

デバイスにインストールされているファームウェアを設定します。

位置 パラメータ 必須 タイプ
1 name いいえ String
2 version いいえ String
3 URL いいえ String

115,firmwareName,firmwareVersion,firmwareUrl

ソフトウェアリストの設定 (116)

デバイスにインストールされているソフトウェアのリストを設定します。

位置 パラメータ 必須 タイプ
1… 下記の 3 values(ソフトウェア毎) 配列 いいえ (n/a)
1.1 name いいえ String
1.2 version いいえ String
1.3 URL いいえ String

116,software1,version1,url1,software2,,url2,software3,version3

必要な可用性の設定 (117)

可用性監視に必要な間隔を分単位の整数値で設定します。詳しくは、デバイス管理ライブラリ > デバイスの可用性c8y_RequiredAvailabilityをご覧ください。存在しない場合のみ値を設定します。UIなどで入力した値は上書きされません。

位置 パラメータ 必須 タイプ
1 Required interval いいえ Integer

117,60

サポートされているログの設定 (118)

デバイスのサポートしているログを設定します。

位置 パラメータ 必須 タイプ
1… supported logs 配列 いいえ String

118,ntcagent,dmesg,logread

サポートされている構成の設定 (119)

デバイスのサポートされている構成を設定します。

位置 パラメータ 必須 タイプ
1… supported configurations 配列 いいえ String

119,modbus,system

現在インストールされている構成の設定 (120)

デバイスの現在インストールされている構成を設定します。

位置 パラメータ 必須 タイプ デフォルト値
1 Configuration type はい String  
2 Configuration file download URL はい String  
3 File name いいえ String 構成のタイプ
4 Date and time when the configuration was applied いいえ Date 現在の日時

120,myType,http://www.my.url,config.bin,2020-07-22T17:03:14.000+02:00

適用中のデバイスプロファイルの設定 (121)

デバイスに適用されているデバイス プロファイルを設定します。

位置 パラメータ 必須 タイプ デフォルト値
1 Profile executed はい String  
2 Profile ID いいえ String 最も古い実行中デバイスのプロファイルオペレーションによるプロファイルID

121,true,8473

デバイスエージェント情報の設定 (122)

デバイス上で実行されるエージェントに関する情報を提供可能にします。

位置 パラメータ 必須 タイプ デフォルト値
1 Name of the agent はい String
2 Version of the agent はい String
3 The agent URL いいえ String
4 Maintainer of the agent はい String

 122,thin-edge.io,0.6,https://thin-edge.io,Software AG

高度なソフトウェアリストの設定 (140)

デバイスにインストールされている高度なソフトウェアのリストを設定します。既存のリストはすべて上書きされます。

位置 パラメータ 必須 タイプ デフォルト値
1 Name of the software はい String
2 Version of the software はい String
3 Type of the software いいえ String
4 URL of the software いいえ String

140,docker,3.2.1,systemd,https://www.docker.com/,nginx,1.6,container,https://www.nginx.com/

デバイス管理オブジェクトIDの取得 (123)

デバイス管理オブジェクトの ID を取得します。

 	123

高度なソフトウェアの追加 (141)

デバイスに存在するリストに高度なソフトウェアを追加します。

位置 パラメータ 必須 タイプ デフォルト値
1 Name of the software はい String
2 Version of the software はい String
3 Type of the software いいえ String
4 URL of the software いいえ String

141,docker,3.2.1,systemd,https://www.docker.com/,nginx,1.6,container,https://www.nginx.com/

高度なソフトウェアの削除 (142)

デバイスに存在するリストから高度なソフトウェアを削除します。

位置 パラメータ 必須 タイプ デフォルト値
1 Name of the software はい String
2 Version of the software はい String

142,docker,3.2.1,nginx,1.6

サポートされるソフトウェアの種類の設定 (143)

デバイスがサポートするソフトウェアの種類を設定します。空の要素は無視します。空のリストは c8y_SupportedSoftwareTypes フラグメントを完全に削除します。

位置 パラメータ Ma必須 タイプ
1… List of supported software types いいえ String

	143,yum,docker

メジャーメントテンプレート (2xx)

カスタムメジャーメントの作成 (200)

特定のフラグメントとシリーズでメジャーメントを作成します。

位置 パラメータ 必須 タイプ デフォルト値
1 fragment はい String  
2 series はい String  
3 value はい Number  
4 unit いいえ String  
5 time いいえ Date 現在のサーバー時刻

200,c8y_Temperature,T,25

複数のフラグメントおよびシリーズによるカスタム測定の作成 (201)

複数のフラグメントおよびシリーズで測定を作成します。

位置 パラメータ 必須 タイプ デフォルト値
1 type はい String  
2 time いいえ Date  
3 List of 4 values per fragment-series combination はい (n/a)  
3.1 fragment はい String  
3.2 series はい String  
3.3 value はい Number  
3.4 unit いいえ String  

201,KamstrupA220Reading,2022-03-19T12:03:27.845Z,c8y_SinglePhaseEnergyMeasurement,A+:1,1234,kWh,c8y_SinglePhaseEnergyMeasurement,A-:1,2345,kWh,c8y_ThreePhaseEnergyMeasurement,A+:1,123,kWh,c8y_ThreePhaseEnergyMeasurement,A+:2,234,kWh,c8y_ThreePhaseEnergyMeasurement,A+:3,345,kWh

信号強度メジャーメントの作成 (210)

c8y_SignalStrengthタイプのメジャーメントを作成します。

位置 パラメータ 必須 タイプ デフォルト値
1 rssi value 2が未設定なら、はい Number  
2 ber value 1が未設定なら、はい Number  
3 time いいえ Date 現在のサーバー時刻

210,-90,23,2016-06-22T17:03:14.000+02:00

温度メジャーメントの作成 (211)

c8y_TemperatureMeasurementタイプのメジャーメントを作成します。

位置 パラメータ 必須 タイプ デフォルト値
1 temperature value はい Number  
2 time いいえ Date 現在のサーバー時刻

211,25,2016-06-22T17:03:14.000+02:00

バッテリーメジャーメントの作成 (212)

c8y_Batteryタイプのメジャーメントを作成します。

位置 パラメータ 必須 タイプ デフォルト値
1 battery value はい Number  
2 time いいえ Date 現在のサーバー時刻

212,95,2016-06-22T17:03:14.000+02:00

アラームテンプレート (3xx)

クリティカル アラームの作成 (301)

クリティカル アラームを作成します。

位置 パラメータ 必須 タイプ デフォルト値
1 type はい String  
2 text いいえ String alarmType型のアラームが発生
3 time いいえ Date 現在のサーバー時刻

301,c8y_TemperatureAlarm

メジャーアラームの作成 (302)

メジャー アラームを作成します。

位置 パラメータ 必須 タイプ デフォルト値
1 type はい String  
2 text いいえ String alarmType型のアラームが発生
3 time いいえ Date 現在のサーバー時刻

302,c8y_TemperatureAlarm,"This is an alarm"

マイナーアラームの作成 (303)

マイナーアラームを作成します。

位置 パラメータ 必須 タイプ デフォルト値
1 type はい String  
2 text いいえ String alarmType型のアラームが発生
3 time いいえ Date 現在のサーバー時刻

303,c8y_TemperatureAlarm

警告アラームの作成 (304)

警告アラームを作成します。

位置 パラメータ 必須 タイプ デフォルト値
1 type はい String  
2 text いいえ String alarmType型のアラームが発生
3 time いいえ Date 現在のサーバー時刻

304,c8y_TemperatureAlarm,,2013-06-22T17:03:14.000+02:00

既存アラームの重大度の更新 (305)

既存アラームの重大度を変更します。

位置 パラメータ 必須 タイプ
1 type はい String
2 severity はい String

305,c8y_TemperatureAlarm,CRITICAL

既存アラームをクリアする (306)

既存アラームをクリアします。

位置 パラメータ 必須 タイプ
1 type はい String

306,c8y_TemperatureAlarm

アラームのフラグメント削除 (307)

特定タイプのアラームのフラグメントを1つ以上削除します。

位置 パラメータ 必須 タイプ
1 alarmType はい String
2… fragmentName はい String

307,c8y_TemperatureAlarm,c8y_Position,c8y_Configuration

イベント テンプレート (4xx)

基本イベントの作成 (400)

指定されたタイプとテキストのイベントを作成します。

位置 パラメータ 必須 タイプ デフォルト値
1 type はい String  
2 text はい String  
3 time いいえ Date 現在のサーバー時刻

400,c8y_MyEvent,"Something was triggered"

位置更新イベントの作成 (401)

c8y_Positionを含む一般的な位置情報更新イベントを作成します。

位置 パラメータ 必須 タイプ デフォルト値
1 latitude いいえ Number  
2 longitude いいえ Number  
3 altitude いいえ Number  
4 accuracy いいえ Number  
5 time いいえ Date 現在のサーバー時刻

401,51.151977,6.95173,67

デバイス更新を伴う位置更新イベントの作成 (402)

c8y_Positionを含む一般的な位置情報更新イベントを作成します。さらに、デバイスは同じc8y_Positionフラグメントで更新されます。

位置 パラメータ 必須 タイプ デフォルト値
1 latitude いいえ Number  
2 longitude いいえ Number  
3 altitude いいえ Number  
4 accuracy いいえ Number  
5 time いいえ Date 現在のサーバー時刻

402,51.151977,6.95173,67

イベントのフラグメント削除 (407)

特定タイプのイベントのフラグメントを1つ以上削除します。

位置 パラメータ 必須 タイプ
1 eventType はい String
2… fragmentName いいえ String

407,c8y_MyEvent,c8y_Position,c8y_Configuration

オペレーションテンプレート (5xx)

PENDINGオペレーションの取得 (500)

エージェントに対するすべてのPENDINGオペレーションの送信をトリガーします。

500

オペレーションをEXECUTINGに設定 (501)

指定されたフラグメントの最も古いPENDINGオペレーションをEXECUTINGに設定します。

位置 パラメータ 必須 タイプ
1 fragment はい String

501,c8y_Restart

オペレーションをFAILEDに設定 (502)

指定されたフラグメントの最も古いEXECUTINGオペレーションをFAILEDに設定します。

位置 パラメータ 必須 タイプ
1 fragment はい String
2 failureReason いいえ String

502,c8y_Restart,"Could not restart"

オペレーションをSUCCESSFULに設定 (503)

指定されたフラグメントの最も古いEXECUTINGオペレーションをSUCCESSFULに設定します。

デバイスはフラグメントとして送信されたオペレーションのタイプに基づいて、追加のステップをトリガーする追加パラメータを送信できます。(オペレーションの更新のセクション参照)

位置 パラメータ 必須 タイプ
1 fragment はい String
2… parameters いいえ String

503,c8y_Restart

オペレーションをEXECUTINGに設定 (504)

指定されたIDのオペレーションにEXECUTINGを設定します。オベレーションが存在し、要求元のデバイスをソースとして持つ必要があります。

位置 パラメータ 必須 タイプ
1 operationId はい String

504,123

オペレーションをFAILEDに設定(505)

指定されたIDのオペレーションにFAILEDを設定します。オベレーションが存在し、要求元のデバイスをソースとして持つ必要があります。

位置 パラメータ 必須 タイプ
1 operationId はい String
2 failureReason いいえ String

505,123,"Could not restart"

オペレーションをSUCCESSFULに設定 (506)

指定されたIDのオペレーションにSUCCESSFULを設定します。オベレーションが存在し、要求元のデバイスをソースとして持つ必要があります。

オペレーションのタイプに基づいて、追加のステップのトリガーとなる追加パラメータをデバイスに送信できるようになります。詳細についてはオペレーションの更新もご覧ください。

位置 パラメータ 必須 タイプ
1 operationId はい String
2… parameters いいえ String

506,c8y_Restart

サブスクライブテンプレート

サブスクライブテンプレート (1xx)

子デバイスの取得 (106)

デバイスのすべての子デバイスをリストします。

位置 パラメータ タイプ
1… child String

106,child1,child2,child3

デバイス管理オブジェクトIDの取得 (124)

デバイス管理オブジェクトID を取得します。

位置 パラメータ タイプ
1 id String

124,12345

オペレーションテンプレート (5xx)

すべてのオペレーション応答は同じ基本構造を持ち、messageIdから始まり、その後にオペレーションを処理するルートデバイスまたは子デバイスのIDが続きます。

再起動 (510)

デバイスを再起動します。

510,DeviceSerial

コマンド (511)

オペレーションで送信されるコマンドを実行します。

位置 パラメータ タイプ
1 Command text String

511,DeviceSerial,execute this

構成 (513)

オペレーションで送信される構成を設定します。

位置 パラメータ タイプ
1 configuration String

513,DeviceSerial,"val1=1\nval2=2"

ファームウェア (515)

URLからファームウェアをインストールします。

位置 パラメータ タイプ
1 firmware name String
2 firmware version String
3 url String

515,DeviceSerial,myFirmware,1.0,http://www.my.url

ソフトウェアリスト (516)

オペレーションで送信されたソフトウェアをインストールします。

位置 パラメータ タイプ
1… 下記の 3 values(ソフトウェア毎)配列 (n/a)
1.1 name String
1.2 version String
1.3 url String

516,DeviceSerial,softwareA,1.0,url1,softwareB,2.0,url2

メジャーメント要求オペレーション (517)

リクエスト名で指定されたメジャーメントを送信します。

位置 パラメータ タイプ
1 request name String

517,DeviceSerial,LOGA

リレー (518)

リレーを開閉します。

位置 パラメータ タイプ
1 Relay state String

518,DeviceSerial,OPEN

リレーリスト (519)

リスト内のリレーを開閉します。

位置 パラメータ タイプ
1… relay state 配列 String

519,DeviceSerial,OPEN,CLOSE,CLOSE,OPEN

構成ファイルのアップロード (520)

現在の構成はThings Cloudからデバイスにアップロードされます。

520,DeviceSerial

構成ファイルのダウンロード (521)

URLから構成ファイルをダウンロードします。

位置 パラメータ タイプ
1 url String

521,DeviceSerial,http://www.my.url

ログファイルの要求 (522)

指定したパラメーターのログファイルをアップロードします。

位置 パラメータ タイプ
1 Log file name String
2 Start date Date
3 End date Date
4 Search text String
5 Maximum lines Integer

522,DeviceSerial,logfileA,2013-06-22T17:03:14.000+02:00,2013-06-22T18:03:14.000+02:00,ERROR,1000

通信モード (523)

通信モードを変更します。

位置 パラメータ タイプ
1 mode String

523,DeviceSerial,SMS

タイプで構成ファイルのダウンロード (524)

タイプ の URL から構成ファイルをダウンロードします。

位置 パラメータ タイプ
1 URL String
2 configuration type String

524,DeviceSerial,http://www.my.url,type

パッチからのファームウェア (525)

パッチからファームウェアをインストールします。

位置 パラメータ タイプ
1 firmware name String
2 firmware version String
3 URL String
4 dependency String

525,DeviceSerial,firmwareName,1.0,http://www.my.url,dependency

タイプで構成ファイルのアップロード (526)

設定は Things Cloud からタイプでデバイスにアップロードされます。

位置 パラメータ タイプ
1 configuration type String

526,DeviceSerial,type

デバイス プロファイルの設定 (527)

デバイス プロファイルを設定します。

位置 パラメータ タイプ
1 firmware marker (n/a)
1… 5 values of firmware (n/a)
1.1 firmware name String
1.2 firmware version String
1.3 firmware URL String
1.4 firmware isPatch String
1.5 firmware dependency String
2 software marker (n/a)
2… 下記の 4 values(ソフトウェア毎)配列 (n/a)
2.1 software name String
2.2 software version String
2.3 software URL String
2.4 software action String
3 configuration marker (n/a)
3… 下記の 2 values(構成毎)配列 (n/a)
3.1 configuration URL String
3.2 configuration type String

527,DeviceSerial,$FW,firmwareName,1.0,http://www.my.url,true,dependency,$SW,softwareA,1.0,http://www.my.url1,action1,softwareB,2.0,http://www.my.url2,action2,$CONF,http://www.my.url1,type1,http://www.my.url2,type2

ソフトウェアの更新 (528)

デバイスにインストールされているソフトウェアを更新します。

位置 パラメータ タイプ
1… 下記の 4 values(ソフトウェア毎)配列 (n/a)
1.1 name String
1.2 version String
1.3 URL String
1.4 action String

528,DeviceSerial,softwareA,1.0,url1,install,softwareB,2.0,url2,install
備考

アクションは install または delete のいずれかです。

installアクションを受信すると、デバイスエージェントはインストールが完了した後、そのソフトウェアがデバイスのc8y_SoftwareListフラグメントに表示されるようにします。また、エージェントは以前のバージョンのソフトウェアがあるかどうかを判断し、新しいバージョンと置き換えることで、更新します。

deleteアクションを受信すると、デバイスエージェントは、ソフトウェア更新オペレーションが完了した後、そのソフトウェアがデバイスのc8y_SoftwareListフラグメントに表示されないようにします。

高度なソフトウェアの更新 (529)

デバイスにインストールされているソフトウェアを更新します。

位置 パラメータ タイプ
1… 下記の 5 values(ソフトウェア毎)配列 (n/a)
1.1 name String
1.2 version String
1.2 type String
1.3 URL String
1.4 action to be performed String

529,DeviceSerial,softwareA,1.0,url1,install,softwareB,2.0,url2,install

クラウドリモートアクセス接続 (530)

リモート アクセス デバイス エージェントによるトンネリングを確立します。

位置 パラメータ タイプ
1 hostname String
2 port Integer
3 connection key String

530,DeviceSerial,10.0.0.67,22,eb5e9d13-1caa-486b-bdda-130ca0d87df8

オペレーションの更新

テンプレートを使用してオペレーションをSUCCESSFUL状態に設定すると、サーバーで追加の呼び出しをトリガーする追加のパラメータの送信がサポートされます。次の表に、この機能をサポートするオペレーションと、パラメータを使用して実行されるオペレーションを示します。

フラグメント パラメータ トリガーされるアクション
c8y_Command result 結果がオペレーションに追加されます
c8y_RelayArray relay states デバイスオブジェクトはステータスで更新されます
c8y_CommunicationMode no parameter needed デバイスオブジェクトはモードで更新されます
c8y_LogfileRequest file url ファイルのURLがオペレーションに追加されます
c8y_DownloadConfigFile (optional) timestamp デバイス オブジェクトは、構成ダンプの ID とタイムスタンプ (またはサーバー時刻) で更新されます

MQTT 経由の JSON

備考
MQTT経由のJSONは、SmartRESTを介して接続されているデバイスへの追加として意図されています。これはスタンドアローンのインターフェースではありません。

このセクションでは、Things Cloud MQTT 実装で使用できる JSON ペイロード形式について説明します。

固定テンプレートでのみ機能する SmartREST 2.0 と比較して、JSON の MQTT のサポートは、REST API のペイロードの柔軟性と MQTT の低いプロトコルオーバーヘッドを組み合わせるように設計されています。

ペイロードを最小限に抑えることが重要な場合(モバイルトラフィック、低機能デバイス)は、SmartRESTの方法をお勧めします。

トピック構造

JSON MQTT のトピック構造は、REST エンドポイントと非常によく似ています。主な違いは、トピックに含まれる <action> アクション操作部分です。

メッセージをパブリッシュするには:

 <api>/<resource>/<action>/<resource_id>

TRANSIENTモードでメッセージをパブリッシュするには:

t/<api>/<resource>/<action>/<resource_id>

QUIESCENTモードでメッセージをパブリッシュするには:

q/<api>/<resource>/<action>/<resource_id>

CEP モードでメッセージをパブリッシュするには:

c/<api>/<resource>/<action>/<resource_id>
備考
<resource_id> はすべての <action> に必要ではありません。以下の例をご覧ください。

TRANSIENT、QUIESCENTおよびCEPデータ処理の詳細については、処理モードをご覧ください。

アクション操作トピック

アクション操作トピックは、content-typeヘッダーと組み合わせたHTTPメソッドに対応しています。

次のアクション操作を実行可能:

エンドポイントのサポート

現在のJSON MQTT実装は、すべてのSmartREST 2.0操作をカバーしていないため、例えば、デバイスのブートストラッププロセス 全体をSmartREST 2.0を使用して実行する必要があります。

次のエンドポイントおよびアクション操作がサポートされています。

エンドポイント create createBulk update delete
event/events о о о о
alarm/alarms о о о  
measurement/measurements о о   о
inventory/managedObjects о   о  
inventory/managedObjects/<DeviceID>/childDevices о      

操作がサポートされていない場合は、適切なエラー メッセージがトピックerrorに送信されます。

上記のすべてのエンドポイントに対して、REST APIと同じペイロードを使用することができます。唯一の違いは「source」フィールドにあります。RESTではこのフィールドは必須ですが、JSON MQTTではここでデバイスIDを設定する必要はありません。 sourceのデバイスIDは、MQTT ClientIdに基づいて自動的に解決されます。この値は、すでにそこで何かが定義されている場合でも常に使用されます。

新しいイベントの作成

トピック/event/events/createにペイロードを含むメッセージをパブリッシュするには:

{
  "type": "TestEvent",
  "text": "sensor was triggered",
  "time": "2014-03-03T12:03:27.845Z"
}

多くのイベントの作成

トピック/event/events/createBulkにペイロードを含むメッセージをパブリッシュするには:

{
  "events": [
    {
      "type": "TestEvent1",
      "text": "sensor was triggered",
      "time": "2014-03-03T12:03:27.845Z"
    },
    {
      "type": "TestEvent2",
      "text": "sensor was triggered",
      "time": "2014-03-04T12:03:27.845Z"
    }
  ]
}

イベントの更新

トピック/event/events/update/<event_id>にペイロードを含むメッセージをパブリッシュするには:

{
  "text": "new text"
}

イベントの削除

トピック/event/events/delete/<event_id>に空のペイロードを含むメッセージをパブリッシュします。

メジャーメントデータポイントの作成

トピックmeasurement/measurements/createにペイロードを含むメッセージをパブリッシュするには:

{
  "type": "c8y_TemperatureMeasurement",
  "time": "2021-09-06T17:35:14.000+02:00",
  "c8y_TemperatureMeasurement": {
  	"T": {
      	"value": 20,
          "unit": "C"
    }
  }
}

エラー処理

JSON MQTT実装に関連するエラーをサブスクライブするには、トピックerrorを使用します。無効なペイロード、間違ったトピック、またはその他の例外が発生した場合、このトピックに通知がパブリッシュされます。ペイロードはJSON形式です。標準的なエラーメッセージの他に、どのメッセージが失敗したのかをクライアントが見つけるのに役立つmessageIdも含まれています。

ペイロードの例:

{
  "error": "undefined/validationError",
  "message": "Following mandatory fields should be included: severity,text,time",
  "messageId": 3
}

オペレーションの受信

通知クライアントは、トピックdevicecontrol/notificationsをサブスクライブして、新しく作成されたオペレーションの通知を受信できます。サブスクライブ開始時に、まだ転送されていないすべてのオペレーションがパブリッシュされます。

さらに、このファイルにはExternal IDが含まれているため、クライアントはどの子デバイスに対してオペレーションが実行されるかを識別できます。

通知の例:

{
  "agentId": "1",
  "creationTime": "2018-05-17T07:33:15.555Z",
  "delivery": {
    "log": [

    ],
    "status": "PENDING",
    "time": "2018-05-17T07:33:15.575Z"
  },
  "deviceId": "2",
  "id": "123",
  "status": "PENDING",
  "c8y_Command": {
    "text": "Do something"
  },
  "description": "Execute shell command",
  "externalSource": {
    "externalId": "3",
    "type": "c8y_Serial"
  }
}