概要
デバイス管理ライブラリは、ソフトウェア管理や構成設定マネジメントなど、Things Cloudにおけるデバイス管理に使用されるデータ構造を定義します。 データ構造はフラグメントとして表され、これらをマネージドオブジェクト、オペレーションおよび他のリソースの範囲内で使用することができます。フラグメントの概念について詳しくは、「Things Cloudコンセプト」の「Things Cloudのドメインモデル」をご覧ください。
次のセクションでは、デバイスの最も重要な機能、そのマネージドオブジェクト、およびそれらに対応するすべてのフラグメントについて説明します。Things Cloud UI、データベースで管理されているデバイスオブジェクト、およびデバイスとの通信内容との関係について説明します。
REST API を使用して Things Cloud の機能を公開する方法の詳細については、Things Cloud OpenAPI 仕様 をご覧ください。
さらに、SmartREST の詳細と、次のセクションで説明するすべての SmartREST テンプレートの完全なリストについては、SmartREST をご覧ください。
デバイス管理を開始するには、デバイス管理アプリケーションの デバイス メニューの すべてのデバイス タブを開きます。リスト内のデバイスをクリックして、特定デバイスの「デバイスの詳細」を開きます。さまざまなタブとそれぞれに関する特定の情報が表示されます。
このリストは、デバイスフラグメントを介して操作できます。つまり、表示されるタブは、デバイスがサポートする機能によって異なります。これは主に、 c8y_SupportedOperations
というフラグメントで操作されます。このフラグメントの配列に格納された内容に基づいて、タブやボタンなどの機能が有効になります。例えば、c8y_SupportedOperations
フラグメントに c8y_Firmware
が含まれていれば、デバイスの詳細ページでファームウェアタブが表示され、デバイスはファームウェアオブジェクトを管理することができるようになります。
c8y_SupportedOperations フラグメント
c8y_SupportedOperations
フラグメントには、以下のフラグメントを追加することが可能です。
フラグメント | 定義 |
---|---|
c8y_Availability | デバイスのステータスとその可用性に関する情報を保持します |
c8y_Command | ユーザーがデバイスとの双方向型セッションを実行できるようにします |
c8y_Configuration | すべての制御文字を含むデバイスの完全な構成状態が含まれます |
c8y_ConfigurationDump | デバイスのバイナリ構成ファイルの管理を許可します |
c8y_DeviceProfile | デバイスのデバイス プロファイル機能を有効にします |
c8y_DownloadConfigFile | 設定ファイルをバイナリとしてダウンロードすることを許可します |
c8y_Firmware | デバイスのファームウェアに関する情報を格納します |
c8y_Hardware | デバイスの基本ハードウェア情報、例えばメーカー名やシリアル番号などを格納します |
c8y_LogfileRequest | ログファイルを送信するようデバイスにリクエストし、そのログファイルをログビューアーで見ることができます |
c8y_Mobile | デバイスの内蔵モデムの機器識別情報(IMEI)やSIM カード(ICCIDなど)、基本的な接続性関連情報を保持します |
c8y_Network | デバイス管理アプリケーションのネットワークタブにデータを送信し、ネットワーク情報を表示します |
c8y_Position | アセットの地理的位置を緯度、経度および高度で報告します |
c8y_Profile | 対象プロファイルを通知します |
c8y_Restart | デバイスを再起動します |
c8y_SendConfiguration | ユーザーインターフェース経由での構成設定をリロードできます |
c8y_SoftwareList | デバイスにインストールされているソフトウェアの全リストが含まれます |
c8y_SoftwareUpdate | インストールまたはアンインストールするソフトウェアのリストが含まれます |
c8y_UploadConfigFile | 設定ファイルをバイナリとしてアップロードできるようにします |
一般的なコンセプト
機能
デバイスは、独自のマネージドオブジェクトの c8y_SupportedOperations
フラグメントを使用して、サポートされている機能を通知できます。フラグメント自体は文字列の配列です。このフラグメントは、次のセクションで説明する特定のユース ケースに対する意味を持つ組込み操作、またはカスタム操作が含まれる場合があります。
PUT /inventory/managedObjects/<deviceId>
{
"c8y_SupportedOperations": [
"c8y_Restart",
"c8y_Network"
]
}
フィールド | データ型 | 必須 | 詳細 |
---|---|---|---|
c8y_SupportedOperations | array | はい | サポートされている操作の文字列の配列 |
いくつかの機能は、同様のコンセプトを持つ独自の c8y_Supported<...>
フラグメントを導入しています。これらのフラグメントを使用すると、デバイスは特定の種類のログファイルまたは構成を処理する機能を通知することができます。
SmartREST例
114 静的テンプレートは、デバイスがサポートされている操作を通知するために使用できます。
114,c8y_Restart,c8y_Configuration,c8y_SoftwareList
現在のステータスの伝達
デバイスは、現在のステータスを Things Cloud に伝達する役割を担います。ステータスは通常、デバイス自体のマネージドオブジェクトで伝達されます。Things Cloud は、機能ごとに特定のフラグメントを提供します。デバイスは、ローカル状態の変更を検出するたびにこのデータを更新する必要があります。
実際には、デバイスが起動時、ローカル状態の変更を要求された場合、および外部の変更が検出される場合に、サポートされているすべての機能に関するローカル状態を公開する必要があることを意味します。
オペレーション処理
オペレーションは常にステータス PENDING で作成されます。デバイスは、ライフサイクル内のさまざまなステータスにオペレーションを移動する役割を担います。オペレーション処理を開始する前に、デバイスエージェントはそのステータスを EXECUTING に更新する必要があります。処理が完了した後、デバイスは結果に応じてオペレーションのステータスを SUCCESS または FAILED に設定する必要があります。
SmartREST 2.0
Things Cloud は、オペレーション ステータスを操作するための静的テンプレート 501、502、および 503 を提供します。これらのテンプレートは、オペレーションタイプを入力パラメータとして受け取り、常に先行するステータスの中で最も古いオペレーションを更新します。保留中のオペレーションが複数ある場合、特定のオペレーションを更新対象にすることはできません。このため、すべてのオペレーションをデバイスに到着した順に処理することをお勧めします。
オペレーション処理中のエラー処理
オペレーション処理中にエラーが発生した場合、デバイスはオペレーションのステータスを FAILED に設定し、エラーの理由をできるだけ説明する必要があります。これには、オペレーションが完全に期待通りに完了するのを妨げる予期しないエラー状態または予想されるエラー状態が含まれます。複数の異なるステップを持つ操作の 1 つのステップのみが失敗した場合でも、オペレーション全体を FAILED と見なす必要があります。
エラーが発生する前に発生したローカル状態の変更をロールバックする必要があるかどうかは、デバイスとそのユースケース次第です。オペレーションが失敗した後に状態の変更が残っている場合、デバイスはこの変更された状態を Things Cloud に伝える必要があります。
冪等性なケース
デバイスがすでに存在する状態を要求するオペレーションを受け取った場合、そのオペレーションをどのように処理するかはデバイス次第です。例えば、すでに存在するソフトウェアパッケージをインストールするようにデバイスに要求された場合です。通常、デバイスエージェントではこのようなケースを処理する方法として、スキップ、実行、失敗の 3 つがあります。すでにインストールされているソフトウェアパッケージの場合、次のオプションを選択することができます。
- パッケージがすでにインストールされていると見なし、要求された状態がすでに存在するためインストールをスキップする
- パッケージの再インストールを含め、通常通り処理を実行する
- 要求された状態は、コマンドが誤った前提条件の下で作成されたことを示している可能性があるため、操作を失敗させる
理想的なオプションは、ユースケースと具体的なオペレーションによって異なります。どのオプションが選択されているかに関係なく、デバイスはローカル状態と Things Cloud と通信されていることが一貫していることを確認する必要があります。
アラーム
アラーム タブは、常にすべてのデバイスに表示されます。その内容は、デバイスから報告されたアラーム ステータスと、Analyticsやスマート ルールなどの他のソースで埋められています。デバイスはそれらが発生した際に Things Cloud でアラームを発生させます。 アラームの状態が解決されたら、デバイスは作成されたアラームのステータスを CLEARED に更新する必要があります。
アラームの発生
デバイスはいつでもアラームを発生させることができます。通常、アラームはデバイス環境の問題のステータスを通知するために使用されます。
POST /alarm/alarms
{
"source": {
"id": "4801"
},
"type": "c8y_TemperatureAlarm",
"text": "CPU temperature too high",
"severity": "MAJOR",
"time": "2021-10-07T12:00:00.000Z"
}
フィールド | データ型 | 必須 | 詳細 |
---|---|---|---|
source | object | はい | デバイスの ID |
type | string | はい | アラームのタイプ |
text | string | はい | アラームステータスを説明するアラーム文字列 |
severity | string | はい | アラームの重大度 |
time | string | はい | アラーム発生時間 |
上記の必須パラメータに加えて、デバイスはアラーム ステータスに関してより詳細なカスタム フラグメントをアラームに含めることもできます。
SmartREST 例
Things Cloud には、デバイスの基本的なアラーム管理のための静的 SmartREST テンプレートがいくつか用意されています。異なる重要度のために 301 から 304 までのメッセージID が設定されています。
302,c8y_TemperatureAlarm,"CPU temperature too high"
アラームのクリア
デバイスは、ローカル アラーム ステータスが解決されたことを検出すると、アラームをクリアする必要があります。これは、アラームステータスをCLEAREDに更新することによって実行されます。
PUT /alarm/alarms/<alarmId>
{
"status": "CLEARED"
}
フィールド | データ型 | 必須 | 詳細 |
---|---|---|---|
status | string | はい | 新しいアラームのステータス |
SmartREST例
306 静的テンプレートは、指定されたタイプのアクティブアラームをクリアするために用意されています。
306,c8y_TemperatureAlarm
クリティカルアラーム
デバイスが重大度クリティカルのアラームを発生させると、このアラームがアクティブである間、デバイスは使用不可と見なされます。稼働率 タブの集計された稼働率の概要には、この時間がオフラインとして反映されます。
デバイスは、ユースケースを遂行するデバイスの能力に影響を与えるアラームステータスに限り、重要度「クリティカルアラーム」を使用する必要があります。
子デバイス
子デバイス タブには、すべての子デバイスのリストが表示されます。デバイスに子デバイスが割り当てられている場合にのみ使用できます。
子デバイスを親デバイスに割り当てる
デバイスを紐づけるには、親デバイスは、子デバイスの ID を含む次のリクエストをインベントリ API にPOSTする必要があります。
POST /inventory/managedObjects/<deviceId>/childDevices
{
"managedObject": {
"id": "28067400"
}
}
フィールド | データ型 | 必須 | 詳細 |
---|---|---|---|
managedObject.id | string | はい | 紐づける子デバイスの ID |
SmartREST例
既存のデバイスに子デバイスを追加するには、接続されたデバイスを接続し、子デバイス作成テンプレートを呼び出す必要があります。
101,uniqueChildId,myChildDevice,myChildType
子デバイスのゲートウェイ操作
エージェントマーカーフラグメント com_cumulocity_model_Agent
を子デバイスではなく親デバイスで使用することで、デバイスを子デバイスの接続ゲートウェイとして効果的に宣言します。子デバイスは Things Cloud に直接接続されていませんが、デバイスとその統合を通してデータを送受信します。
この場合、子デバイスのオペレーションは、接続された親デバイスに配信されます。親デバイスは、含まれているデバイス ID またはその他の情報に基づいて、アドレス指定された子デバイスを判断する必要があります。そして、コマンドを正しい子デバイスに転送する必要があります。
Things Cloud の組み込みの静的 SmartREST 応答テンプレートには、対象となる子デバイスを決定するための最初のパラメータとして、常にデバイス識別子が含まれています。以下は、デバイス識別子が強調表示されたc8y_Restart
オペレーションの 510 静的レスポンステンプレートの例です。
510,DeviceSerial
カスタム応答テンプレートも、最初のパラメータとして対象となるデバイスの外部IDを含んでいます。そちらにも同様の仕組みを実装することをお勧めします。
構成
構成 タブでは、デバイス構成に 3 つの異なる形式を使用できます。
- テキストベースの構成
- レガシーファイルベースの構成
- 型指定されたファイルベースの構成
これらはすべて、デバイスが現在の設定をプラットフォームにアップロードし、ユーザーが新しい設定をデバイスにインストールするという類似のコンセプトに従っています。 このタブは、デバイスが利用可能なフォーマットのサポートを知らせたときに表示されます。
テキストベースの構成
構成の最も基本的な形式は単純なテキストベースの構成です。ここでは、構成は文字列として直接保存され、転送されます。この形式は、マイクロコントローラベースのデバイスなど、人間が読める小さな構成ファイルのみに使用することをお勧めします。
デバイスの現在の構成状態は、デバイス自体のマネージドオブジェクト内の c8y_Configuration
フラグメントで通信されます。これには、すべての制御文字を文字列として含む完全な構成が含まれています。エンコーディングが適切に行われるように特別な注意を払う必要があります。Things Cloud は UTF-8 文字をサポートしていますが、JSON ペイロードは JSON 仕様、SmartREST ペイロードは SmartREST 仕様 に従ったエスケープが必要な場合があります。
転送データ量とデバイスのリソースを節約するため、オンデマンドでのみ現在の構成をアップロードすることをお勧めします。デバイスが現在の構成をプラットフォームにアップロードするために用意されたオペレーションは、以下の通りです。
PUT /inventory/managedObjects/<deviceId>
{
"c8y_Configuration": {
"config": "c8y.url.http=https://<tenantId>.je1.thingscloud.ntt.com\nc8y.url.mqtt=mqtt.je1.thingscloud.ntt.com\n"
}
}
名称 | タイプ | 必須 | 説明 |
---|---|---|---|
config | string | いいえ | デバイスが適用する完全な構成テキスト |
現在のテキスト構成をアップロードする
c8y_SupportedOperations
に c8y_SendConfiguration
を含むデバイスの場合、構成タブには、デバイスから Things Cloud に構成をアップロードするためのボタンが用意されています。このボタンをクリックすると、c8y_SendConfiguration
が作成されます。
{
"c8y_SendConfiguration": {}
}
名称 | タイプ | 必須 | 説明 |
---|---|---|---|
c8y_SendConfiguration | object | はい | デバイスに構成をアップロードさせるためのコマンドとして、オペレーションを指定した構成マーカーオブジェクトを送信する |
デバイスは、次のアクションを実行する必要があります。
- オペレーションのステータスを EXECUTING に設定する
c8y_Configuration
フラグメントを使用して、現在の構成を独自のマネージドオブジェクトにアップロードする- オペレーションのステータスを SUCCESSFUL に設定する
SmartREST例
c8y_SendConfiguration
操作に使用できる組み込みの静的応答テンプレートはありません。デバイスは、この機能を実装するためにカスタム テンプレートを作成する必要があります。このようなテンプレートとその使用がどのように機能するかについて、例を次に示します。
テンプレートの作成
11,100,,c8y_SendConfiguration,deviceId
オペレーションの受信:
- 上記で作成したカスタムテンプレートを使用して
c8y_SendConfiguration
オペレーションを受信する
100,DeviceSerial,4801
- オペレーションのステータスをEXECUTINGに設定する
501,c8y_SendConfiguration
- 静的テンプレートを使用して現在の構成状態をアップロードする
113,"c8y.url.http=https://<tenantId>.je1.thingscloud.ntt.com\nc8y.url.mqtt=mqtt.je1.thingscloud.ntt.com\n"
- オペレーションのステータスを SUCCESSFULに設定する
503,c8y_SendConfiguration
テキスト構成のインストール
構成のインストールをサポートするデバイスは、c8y_SupportedOperations
に c8y_Configuration
を追加することで、通信することができます。構成 タブはユーザーが設定した構成をデバイスに送信するためのボタンを提供します。その結果、このアクションにより、デバイスのマネージドオブジェクトで見つかったのと同じフラグメント署名を持つ c8y_Configuration
オペレーションが作成されます。
デバイスは、次のアクションを実行する必要があります。
- オペレーションのステータスを EXECUTING に設定する
- ネストされたconfigプロパティに含まれる構成を
c8y_Configuration
フラグメントでインストールし、適用する - デバイスのマネージドオブジェクトの
c8y_Configuration
フラグメントを更新する - オペレーションのステータスを SUCCESSFULに設定する
SmartREST例
513 静的応答テンプレートは、 c8y_Configuration
オペレーションを受信するために使用できます。
c8y_Configuration
オペレーションを受信する
511,DeviceSerial,"c8y.url.http=https://<tenantId>.je1.thingscloud.ntt.com\nc8y.url.mqtt=mqtt.je1.thingscloud.ntt.com\n"
- オペレーションのステータスを EXECUTING に設定する
501,c8y_Configuration
- 含まれている構成をインストールして適用する
c8y_Configuration
フラグメントを更新する
113,"c8y.url.http=https://<tenantId>.je1.thingscloud.ntt.com\nc8y.url.mqtt=mqtt.je1.thingscloud.ntt.com\n"
- オペレーションのステータスを SUCCESSFULに設定する
503,c8y_Configuration
レガシーファイルベースの構成
構成をファイルとして管理するデバイスは、レガシーファイルベースの構成を使用して基本的な形を実現できます。新しいデバイス統合では、より用途が広いため、代わりに型指定されたファイルベースの構成を実装することをお勧めします。
この方法では、構成をバイナリ ファイルとして格納および転送します。
現在のレガシー構成をアップロードする
デバイスは、 c8y_SupportedOperations
にc8y_UploadConfigFile
を追加することで、現在の構成を Things Cloud にアップロードするためのサポートを通知できます。これにより、構成 タブにある デバイスから新しいスナップショットを取得 ボタンが有効になります。これをクリックすると、デバイスに対して c8y_UploadConfigFile
オペレーションが生成されます。
{
"c8y_UploadConfigFile": {}
}
名称 | タイプ | 必須 | 説明 |
---|---|---|---|
c8y_ UploadConfigFile | object | はい | デバイスに構成ファイルをアップロードさせるためのコマンドとして、オペレーションを指定した構成ファイル マーカー オブジェクトをアップロードする |
構成をアップロードする場合、デバイスは最初に構成ファイルを Things Cloud インベントリバイナリにアップロードしてから、インベントリ内に c8y_ConfigurationDump
タイプのマネージドオブジェクトとして構成リポジトリのエントリを作成する必要があります。このオブジェクトには、アップロードしたばかりのファイルへのリンクが含まれている必要があります。このエントリは、ユーザーがリポジトリで目的の構成を見つけられるように、わかりやすい名前と説明で作成することをお勧めします。
POST /inventory/managedObjects
{
"name": "myDevice configuration",
"description": "Uploaded by myDevice on 2021-09-15T12:00:00+0200",
"url": "https://<tenantId>.je1.thingscloud.ntt.com/inventory/binaries/154702",
"type": "c8y_ConfigurationDump"
}
名称 | タイプ | 必須 | 説明 |
---|---|---|---|
name | string | はい | 構成の名称 |
description | string | いいえ | 構成の説明 |
url | string | はい | 構成ファイルがアップロードされた URL |
type | string | はい | 構成リポジトリのエントリ オブジェクトのタイプ。 常に c8y_ConfigurationDump でなければならない |
デバイスは、次のアクションを実行する必要があります。
- オペレーションのステータスを EXECUTING に設定する
- 構成ファイルを Things Cloud のインベントリ バイナリにアップロードする
- 構成リポジトリのエントリを作成する
- オペレーションのステータスを SUCCESSFUL に設定する
SmartREST例
520 静的応答テンプレートがこの機能で使用できます。
c8y_UploadConfigFile
オペレーションを受信する
520,DeviceSerial
- オペレーションのステータスを EXECUTING に設定する
501,c8y_UploadConfigFile
- REST を使用したインベントリバイナリ API へ構成をアップロードする
- REST を使用したインベントリに構成リポジトリのエントリを作成する
- オペレーションのステータスを SUCCESSFUL に設定する
503,c8y_UploadConfigFile
レガシー構成のインストール
構成をリモートでインストールできるデバイスは、c8y_SupportedOperations
に c8y_DownloadConfigFile
を追加して、これを知らせることができます。次に、 構成 タブに 構成をデバイスに送信 ボタンが表示されます。クリックすると、デバイスの c8y_DownloadConfigFile
オペレーションが作成されます。
{
"c8y_DownloadConfigFile": {
"url": "https://<tenantId>.je1.thingscloud.ntt.com/inventory/binaries/9100",
"c8y_ConfigurationDump": {
"id": "9200"
}
}
}
名称 | タイプ | 必須 | 説明 |
---|---|---|---|
url | string | はい | 構成ファイルの取得元となる URL |
c8y_ConfigurationDump | object | はい | 構成リポジトリのエントリ オブジェクトの ID を含む構成ダンプ参照オブジェクト |
指定されたURLから構成をダウンロードしインストールした後、デバイスは独自のマネージドオブジェクトで現在インストールされている構成を参照する必要があります。これは、ネストされた c8y_ConfigurationDump
フラグメント全体をデバイス自体のマネージドオブジェクトに転送することで行われます。
PUT /inventory/managedObjects/<deviceId>
{
"c8y_ConfigurationDump": {
"id": "9200"
}
}
名称 | タイプ | 必須 | 説明 |
---|---|---|---|
id | string | はい | 参照される構成オブジェクトの ID |
デバイスは、次のアクションを実行する必要があります。
- オペレーションのステータスを EXECUTING に設定する
- 指定したURLから構成ファイルをダウンロードする
- 構成ファイルをインストールする
- デバイスのマネージドオブジェクトに現在インストールされている構成ダンプを更新する
- オペレーションのステータスを SUCCESSFUL に設定する
SmartREST例
521 静的応答テンプレートがこの機能で使用できます。:
c8y_DownloadConfigFile
オペレーションを受信する
521,DeviceSerial,https://<tenantId>.je1.thingscloud.ntt.com/inventory/binaries/9100
- オペレーションのステータスを EXECUTING に設定する
501,c8y_DownloadConfigFile
- 指定した URL から構成をダウンロードする
- 構成ファイルをインストールする
- オペレーションのステータスを SUCCESSFUL に設定し、現在インストールされている
c8y_ConfigurationDump
フラグメントをそれとなく設定する
503,c8y_DownloadConfigFile
型指定されたファイルベースの構成
デバイス構成を管理する最も用途の広い方法は、型指定されたファイルベースの構成です。ここでは、デバイスは複数の構成ファイルを同時に管理できます。型指定されたファイル構成は、c8y_SupportedConfiguration
フラグメントをデバイス自体のマネージドオブジェクトに追加することによって、デバイスに対してアクティブ化されます。
PUT /inventory/managedObjects/<deviceId>
{
"c8y_SupportedConfigurations": [
"agent_conf",
"ssh_conf"
]
}
名称 | タイプ | 必須 | 説明 |
---|---|---|---|
c8y_SupportedConfigurations | array | はい | デバイスでサポートされている構成の文字列の配列 |
Things Cloud では、構成のタイプを検証したり、さらに処理したりすることはありません。プラットフォームの観点からは、これらは単純な文字列です。これらのタイプ文字列を構成ファイルに関連付けることは、デバイス エージェントの役割です。
SmartREST例
c8y_SupportedConfiguration
フラグメントは、静的テンプレート119を使用してアップロードできます。
119,agent_conf,ssh_conf
現在の構成ファイルをアップロードする
レガシー構成と同様に、 c8y_UploadConfigFile
を c8y_SupportedOperations
に追加することで、型指定された構成のアップロードが通知されます。この場合、ボタンをクリックすると、対象となる構成タイプを追加パラメータとして、非常に似た c8y_UploadConfigFile
オペレーションが作成されます。
{
"c8y_UploadConfigFile": {
"type": "agent_conf"
}
}
名称 | タイプ | 必須 | 説明 |
---|---|---|---|
type | string | はい | アップロードする構成のタイプ |
次に、デバイスは構成の種類と同じ種類のイベントを作成する必要があります。Things Cloud では、イベントがデバイスに自動的に関連付けられ、含まれている古いイベント (およびそのバイナリ添付ファイル) は保持ルールを使用して自動的にクリーンアップできるため、レガシーファイルベースの構成のようにインベントリではなく、ここでイベントを使用します。
POST /event/events
{
"source": {
"id": "4801"
},
"type": "agent_conf",
"time": "2021-09-15T15:57:41.311Z",
"text": "agent_conf upload requested"
}
名称 | タイプ | 必須 | 説明 |
---|---|---|---|
source | object | はい | デバイス オブジェクトの ID |
type | string | はい | アップロードされた構成のタイプ |
time | string | はい | 構成がアップロードされた ISO 日時 |
text | string | はい | 構成のラベル テキスト |
アップロードしたばかりのイベントに構成ファイルを添付するには、Event Attachments API を使用する必要があります。ファイルは、multipart/form-data リクエストを使用して添付されます。
POST /event/events/<eventId>/binaries
Host: https://<TENANT_DOMAIN>
Authorization: <AUTHORIZATION>
Accept: application/json
Content-Type: multipart/form-data;boundary="boundary"
--boundary
Content-Disposition: form-data; name="object"
{ "name": "agent.conf", "type": "text/plain" }
--boundary
Content-Disposition: form-data; name="file"; filename="agent.conf"
Content-Type: text/plain
c8y.url.http=https://<tenantId>.je1.thingscloud.ntt.com
c8y.url.mqtt=mqtt.je1.thingscloud.ntt.com
--boundary--
デバイスは、次のアクションを実行する必要があります。
- オペレーションのステータスを EXECUTING に設定する
- 構成タイプのイベントを作成する
- 構成ファイルをイベントに添付する
- オペレーションのステータスを SUCCESSFUL に設定する
SmartREST例
Things Cloud は、型指定された c8y_UploadConfigFile
オペレーションのための 526 静的 SmartREST テンプレートを提供します。
- 型指定された
c8y_UploadConfigFile
オペレーションを受信する
526,DeviceSerial,agent_conf
- オペレーションのステータスを EXECUTING に設定する
501,c8y_UploadConfigFile
- REST API を使用した config タイプのイベントを作成する
- REST API を使用してターゲットの構成ファイルをイベントに添付する
- オペレーションのステータスをSUCCESSFUL に設定する
503,c8y_UploadConfigFile
構成ファイルのインストール
型指定された構成のインストールもレガシー構成と類似の動作を行います。デバイスのc8y_SupportedOperations
に c8y_DownloadConfigFile
を追加すると、 構成をデバイスに送信 ボタンの可用性が制御されます。クリックすると、構成タイプを含むc8y_DownloadConfigFile
オペレーションが作成されます。
{
"c8y_DownloadConfigFile": {
"type": "agent_conf",
"url": "https://<tenantId>.je1.thingscloud.ntt.com/inventory/binaries/156719"
}
}
名称 | タイプ | 必須 | 説明 |
---|---|---|---|
type | string | はい | 適用する構成のタイプ |
url | string | はい | 構成ファイルの取得元となる URL |
デバイスが構成をダウンロードしてインストールしたとき、デバイス自体のマネージドオブジェクトにある特定タイプの現在インストールされている構成を更新する必要があります。これは、 c8y_Configuration_<config type>
フラグメントをデバイス自体のマネージドオブジェクトに追加することで行われます。
PUT /inventory/managedObjects/<deviceId>
{
"c8y_Configuration_agent_conf": {
"name": "agent_conf",
"time": "2021-09-15T15:47:13.721Z",
"type": "agent_conf",
"url": "https://<tenantId>.je1.thingscloud.ntt.com/inventory/binaries/156719"
}
}
名称 | タイプ | 必須 | 説明 |
---|---|---|---|
c8y_Configuration_agent_conf | object | はい | "c8y_Configuration_" という接頭語の後に、特定タイプの現在インストールされている構成の詳細を含んだ構成タイプが続くフラグメント名 |
name | string | はい | インストールされている構成ファイルのオプション名 |
time | string | はい | 構成がいつ適用されたかを示す ISO 日時 |
type | string | はい | 構成のタイプ |
url | string | はい | 構成の取得元URL |
デバイスは、次のアクションを実行する必要があります。
- オペレーションのステータスを EXECUTING に設定する
- 含まれているURLから構成ファイルをダウンロードする
- 構成ファイルをインストールする
- デバイスの現在インストールされている構成を、デバイス自体のマネージドオブジェクトにある型指定された構成フラグメントで更新する
- オペレーションのステータスを SUCCESSFUL に設定する
SmartREST例
524 静的なSmartREST応答テンプレートは、型指定された c8y_DownloadConfigFile
オペレーションに使用でき、120静的テンプレートは、現在の構成をアップロードするために用意されています。
- 型指定された
c8y_UploadConfigFile operation
を受信する
524,DeviceSerial,https://<tenantId>.je1.thingscloud.ntt.com/inventory/binaries/156719,agent_conf
- オペレーションのステータスを EXECUTING に設定する
501,c8y_DownloadConfigFile
- 含まれているURLから構成ファイルをダウンロードする
- 対象の構成タイプとして構成をインストールする
- 現在インストールされている構成を設定する
120,agent_conf,https://<tenantId>.je1.thingscloud.ntt.com/inventory/binaries/156719,agent_conf.txt,2021-09-15T15:47:13.721Z
- オペレーションのステータスを SUCCESSFUL に設定する
503,c8y_DownloadConfigFile
接続
接続 タブは、サードパーティの SIM 管理プラットフォームと統合され、Things Cloud のデバイス管理アプリケーション内で SIM 管理機能を提供します。次のすべての条件が満たされた場合にデバイスのタブが表示されます。
- 接続マイクロサービスがサブスクライブされ、構成されている
- デバイス管理オブジェクトには、MSISDN または ICCID プロパティが設定された
c8y_Mobile
フラグメントが含まれている - デバイスによって参照される SIM は、テナント用に構成された SIM 管理プロバイダーによって管理される
PUT /inventory/managedObjects/<deviceId>
{
"c8y_Mobile": {
"msisdn": "380561234567",
"iccid": "89100423481F445593U"
}
}
名称 | タイプ | 必須 | 説明 |
---|---|---|---|
msisdn | string | いいえ | インストールされている SIM の MSISDN |
iccid | string | いいえ | インストールされている SIM の ICCID |
構成されている接続プロバイダーに応じて、MSISDN または ICCID を使用して、デバイスに存在する SIM を識別できます。常に両方を c8y_Mobile
フラグメントに含めることをお勧めします。 c8y_Mobile
フラグメントに関連付けられるモバイル接続関連のプロパティは他にも多数ありますが、接続管理に関連するのは MSISDN または ICCID のみです。
SmartREST例
111 静的テンプレートは、デバイスがモバイル情報を通信するために提供されています。
111,1234567890,8930000000000000459,54353
デバイスの可用性
デバイスの可用性 タブには、デバイスの可用性と接続ステータスが表示されます。これを実現するには、デバイスは、デバイス自体のマネージドオブジェクトの c8y_RequiredAvailability
フラグメントを使用して、必要な間隔を通信する必要があります。このアクションにより、デバイスの可用性と接続の監視がアクティブになります。
PUT /inventory/managedObjects/<deviceId>
{
"c8y_RequiredAvailability": {
"responseInterval": 15
}
}
名称 | タイプ | 必須 | 説明 |
---|---|---|---|
responseInterval | integer | いいえ | デバイスの予想される応答間隔 (分単位)。ゼロ以下の場合、デバイスはメンテナンス モードと見なされる |
通常、デバイスはプラットフォームへの最初の接続時に既定値で必要な間隔を一度だけ設定する必要があります。その後の変更はプラットフォームユーザーに任せることができます。
SmartREST例
117静的テンプレートは、SmartREST接続デバイスに必要な可用性を設定するために提供されます。このテンプレートは、既存の必要な可用性構成を上書きしないため、デバイスの起動時にファイア・アンド・フォーゲットのアプローチで送信できます。
117,15
可用性の監視
c8y_RequiredAvailability
フラグメントに設定された応答間隔は、プラットフォームがデバイスからデータを受信する予定間隔として使用されます。この間隔でデータが受信されない場合、デバイスはオフラインとしてマークされ、 c8y_UnavailabilityAlarm
タイプのアラームが自動的に発生します。このアラームは、デバイスがデータを再送信すると自動的にクリアされます。デバイスからのそれ以上の操作は必要ありません。
Things Cloudによって計算された可用性情報は、デバイスのフラグメント c8y_Availability
と c8y_Connection
に格納されます。
`c8y_Availability`: { "lastMessage": "2022-05-21...", "status": "AVAILABLE" },
`c8y_Connection`: {status": "CONNECTED"}
名称 | タイプ | 説明 |
---|---|---|
lastMessage | Date | デバイスがThings Cloudに最後のメッセージを送信した日時。 |
status | String | 現在のステータス(AVAILABLE、UNAVAILABLE、MAINTENANCEのいずれか) |
以下のリクエストはデバイスのハートビートとみなされ、X-Cumulocity-Application-Key
ヘッダーが設定されていない限り、デバイスを使用可能としてマークし、デバイスの最後のメッセージのタイムスタンプを更新します。
- イベント、メジャーメント、アラームの作成(ソースとして指定されたデバイス)
- 空のPUTリクエスト、または
{}
または{"id": ...}
という ID だけを持つリクエストの形で(付与されたIDを持つ)デバイスの更新。
接続監視
Things Cloud は、デバイスの接続監視も提供します。デバイスがオペレーションを受信することができる接続を確立すると、プラットフォームはこのデバイスを接続されたと見なします。これは、HTTPロングポーリング接続やMQTTセッションにも同様に適用されます。
監視対象デバイスは c8y_Connection
に対して以下のいずれかのステータスを持ちます。
名称 | 説明 |
---|---|
CONNECTED | デバイス・プッシュ接続が確立される。 |
DISCONNECTED | responseInterval が0より大きく、デバイスがAVAILABLEでもCONNECTEDでもない。 |
MAINTENANCE | responseInterval が0以下であれば、デバイスはメンテナンス中である。 |
c8y_Connection
のステータスが CONNECTED でなくても、c8y_Availability
のステータスは AVAILABLE になることがあります。デバイス情報
デバイス情報 タブは、既定のデバイス情報を組み合わせたいくつかのウィジェットを含む定義済みのダッシュボードです。例えば、デバイスステータス ウィジェットは、デバイス状態と最後に利用可能になった日時に関する情報を保持する c8y_Availability
フラグメントから情報を取得します。詳細については、ユーザーガイドの デバイス管理 > デバイスの監視と制御 をご覧ください。
デバイスマーカー
デバイスは、インベントリ内で、独自のマネージドオブジェクトのc8y_IsDevice
フラグメントを付与されます。このフラグメントを持つデバイスのみが、デバイス管理アプリケーションの すべてのデバイス のリストに表示されます。
PUT /inventory/managedObjects/<deviceId>
{
"c8y_IsDevice": {}
}
エージェントマーカー
オペレーションを受信するために、デバイスは独自のマネージドオブジェクトでエージェントマーカーフラグメントを宣言する必要があります。これにより、プラットフォームは、このフラグメントを持たない子階層のすべての子デバイスに対して、デバイスにオペレーションを送ることができるようになります。
PUT /inventory/managedObjects/<deviceId>
{
"com_cumulocity_model_Agent": {}
}
デバイスの再起動
リモートで再起動できるデバイスは、デバイスの c8y_SupportedOperations
フラグメントに c8y_Restart
オペレーション追加して、この機能を通知することができます。すると、デバイスの詳細 ページで、コンテキストメニューの中に 再起動 ボタンが表示されるようになります。
再起動操作
デバイス管理アプリケーションの 再起動 ボタンをクリックすると、次のような操作が送信されます。
{
"c8y_Restart": {}
}
フィールド | データ型 | 必須 | 詳細 |
---|---|---|---|
c8y_Restart | object | はい | オペレーションを再起動操作として指定する再起動マーカーフラグメント |
デバイスは、次のアクションを実行する必要があります。
- オペレーションのステータスを EXECUTING に設定する
- リクエストされた再起動を実行する
- オペレーションのステータスを SUCCESSFUL に設定する
SmartREST例
Things Cloud は、510 静的応答テンプレートを提供します。
- デバイスは510静的応答テンプレートを介してコマンドを受信する
510,DeviceSerial
- デバイスがオペレーションステータスをEXECUTINGに設定する
501,c8y_Restart
- デバイスはオペレーション ステータスを SUCCESSFUL に設定して、正常に実行されたことを確認する
503,c8y_Restart
ハードウェア情報
デバイスは、独自のマネージドオブジェクト内の c8y_Hardware
フラグメントを使用して、基盤となるハードウェア情報をThings Cloud に通知することができます。
PUT /inventory/managedObjects/<deviceId>
{
"c8y_Hardware": {
"serialNumber": "1234567890",
"model": "myModel",
"revision": "1.2.3"
}
}
フィールド | データ型 | 必須 | 詳細 |
---|---|---|---|
serialNumber | string | いいえ | デバイスハードウェアのシリアル番号 |
model | string | いいえ | ハードウェア形式のテキスト識別子 |
revision | string | いいえ | ハードウェア改訂のテキスト識別子 |
SmartREST例
110 静的テンプレートを使用してハードウェア情報をアップロードします。通常、エージェントアプリケーションの起動時に一度実行できます。
110,1234567890,myModel,1.2.3
エージェント情報
すべてのデバイスは、実行中のエージェントすなわちThings Cloudとインテグレーションするソフトウェアに関する情報を提供する必要があります。
PUT /inventory/managedObjects/<deviceId>
{
"c8y_Agent": {
"name": "thin-edge.io",
"version": "0.6",
"url": "https://thin-edge.io/",
"maintainer": "Software AG"
}
}
フィールド | データ型 | 必須 | 詳細 |
---|---|---|---|
name | string | はい | エージェント名 |
version | string | はい | エージェントのバージョン |
url | string | いいえ | エージェントのURL |
maintainer | string | はい | エージェントの管理者 |
SmartRESTの例
静的テンプレート122を使用して、エージェントの詳細をアップロードします。
122,thin-edge.io,0.6,https://thin-edge.io/,Software AG
エージェントの初期化時に一度だけ実行します。
デバイスプロファイル
デバイスプロファイル タブには、追加されたデバイス プロファイルのさまざまなパラメータが表示されます。デバイス エージェントの観点から見ると、デバイス プロファイルは、ファームウェア更新、ソフトウェア更新、および型指定されたファイル ベースのデバイス構成の組み合わせです。これらの機能をサポートするエージェント コードの大部分は再利用できます。
デバイス プロファイル機能は、デバイスがc8y_SupportedOperations
で c8y_DeviceProfile
オペレーションを通知すると有効になります。デバイスプロファイル タブでは、ユーザーはデバイスにプロファイルを適用できます。これにより、設定されたプロファイルに従ってc8y_DeviceProfile
オペレーションが作成されます。ファームウェア、ソフトウェア、および構成が存在する場合、個々のオペレーション(c8y_Firmware
、c8y_SoftwareUpdate
、および型指定されたc8y_DownloadConfigFile
)とまったく同じように処理する必要があります。最初にファームウェア、2番目にソフトウェア、3番目に構成をインストールして c8y_Profile
オペレーションを実行し、その後のアクションが、それ以前のアクションを上書きする可能性を最小限に抑えることをお勧めします。
{
"profileName": "my profile",
"profileId": "158751",
"c8y_DeviceProfile": {
"software": [
{
"name": "curl",
"action": "install",
"version": "2.3.4",
"url": "http://my.url.com"
},
{
"name": "cumulocity_agent",
"action": "install",
"version": "1.2.3",
"url": "https://cumulocity.com/agent"
}
],
"configuration": [
{
"name": "ssh_conf",
"type": "ssh_conf",
"url": "http://cumulocity.com/conf"
},
{
"name": "agent_conf",
"type": "agent_conf",
"url": "https://<tenantId>.je1.thingscloud.ntt.com/inventory/binaries/156719"
}
],
"firmware": {
"name": "device_fw",
"version": "1.0.1",
"url": "https://cumulocity.com/fw"
}
},
}
名称 | タイプ | 必須 | 説明 |
---|---|---|---|
profileName | string | はい | 適用されているデバイス プロファイル名 |
profileId | string | はい | デバイスプロファイルオブジェクトへの ID 参照 |
c8y_DeviceProfile | object | はい | インストールに必要なすべての情報を含むデバイスプロファイルオブジェクト |
c8y_DeviceProfile.software | array | いいえ | インストールまたは削除するソフトウェア オブジェクトの配列 |
c8y_DeviceProfile.software.name | string | はい | ソフトウェア パッケージ名 |
c8y_DeviceProfile.software.action | string | はい | ソフトウェアをインストールまたは削除する必要があるかどうかを説明するパッケージで実行するアクション |
c8y_DeviceProfile.software.version | string | はい | ソフトウェアのバージョン |
c8y_DeviceProfile.software.url | string | はい | ソフトウェア バイナリの取得元となる URL |
c8y_DeviceProfile.configuration | array | いいえ | 適用する構成オブジェクトの配列 |
c8y_DeviceProfile.configuration.name | string | はい | 構成の名前 |
c8y_DeviceProfile.configuration.type | string | はい | 構成の種類 |
c8y_DeviceProfile.configuration.url | string | はい | 構成ファイルの取得元となる URL |
c8y_DeviceProfile.firmware | object | いいえ | ターゲットファームウェアの詳細を含むファームウェアオブジェクト |
c8y_DeviceProfile.firmware.name | string | はい | インストールするファームウェアの名前 |
c8y_DeviceProfile.firmware.version | string | はい | ファームウェアのバージョン |
c8y_DeviceProfile.firmware.url | string | はい | ファームウェアバイナリの取得元となるURL |
デバイスが c8y_Profile
オペレーションを受信したら、最初に独自のマネージドオブジェクトでターゲット プロファイルを通知する必要があります。
PUT /inventory/managedObjects/<deviceId>
{
"c8y_Profile": {
"profileName": "my profile",
"profileId": "158751",
"profileExecuted": false
}
}
名称 | タイプ | 必須 | 説明 |
---|---|---|---|
profileName | string | はい | デバイス プロファイル名 |
profileId | string | はい | デバイス プロファイル オブジェクトの ID 参照 |
profileExecuted | Boolean | はい | プロファイルが完全に適用されているかどうかを示すインジケーター。 このコンテキストでは false にする |
3つの各セクションを完了した後、デバイスはフラグメント c8y_Firmware
、 c8y_SoftwareList
、およびc8y_Configuration_<type>
を使用した個々のオペレーションで説明された同じ方法で、独自のマネージドオブジェクトで現在の状態を通知する必要があります。次に、デバイスは、profileExecuted プロパティを true に更新して、マネージドオブジェクトにインストールされているプロファイルの状態を更新する必要があります。
PUT /inventory/managedObjects/<deviceId>
{
"c8y_Profile": {
"profileName": "my profile",
"profileId": "158751",
"profileExecuted": true
}
}
名称 | タイプ | 必須 | 説明 |
---|---|---|---|
profileName | string | はい | デバイス プロファイル名 |
profileId | string | はい | デバイス プロファイル オブジェクトの ID 参照 |
profileExecuted | Boolean | はい | プロファイルが完全に適用されているかどうかを示すインジケーター。 このコンテキストでは trueにする |
デバイスは、次のアクションを実行する必要があります。
- オペレーションのステータスを EXECUTING に設定する
- デバイス独自のマネージドオブジェクトに
c8y_Profile
フラグメントを profileExecuted = false で設定する - ファームウェアが含まれている場合はインストールし、独自のマネージドオブジェクトの
c8y_Firmware
フラグメントを更新してインストールを完了する - ソフトウェアが含まれている場合はインストールし、独自のマネージドオブジェクトの
c8y_SoftwareList
フラグメントを更新してインストールを完了する - 構成が含まれている場合はインストールし、独自のマネージドオブジェクト内の構成ごとに
c8y_Configuration_<type>
フラグメントを更新してインストールを完了する - デバイスのマネージドオブジェクトに
c8y_Profile
フラグメントを profileExecuted = true で設定する - オペレーションのステータスを SUCCESSFUL に設定する
SmartREST例
Things Cloud で提供されるファームウェア、ソフトウェア、および構成の静的テンプレートに加えて、デバイス プロファイルの処理に使用できる特定のテンプレートがあります。527 応答テンプレートは、オペレーションを受信するように設計されています。121 静的テンプレートを使用して、デバイス プロファイルの現在の状態を設定できます。
c8y_DeviceProfile
オペレーションを受信する
527,DeviceSerial,$FW,device_fw,1.0.1,https://cumulocity.com/fw,false,,$SW,curl,2.3.4,http://my.url.com,install,cumulocity_agent,1.2.3,https://cumulocity.com/agent,install,$CONF,http://cumulocity.com/conf,ssh_conf,https://<tenantId>.je1.thingscloud.ntt.com/inventory/binaries/156719,agent_conf
- オペレーションのステータスを EXECUTING に設定する
501,c8y_DeviceProfile
- ターゲットプロファイルを設定する
121,false,
- ダウンロード、インストールおよびファームウェアのインストール状態を確認する
115,device_fw,1.0.1,https://cumulocity.com/fw
- ダウンロード、インストールおよびソフトウェアのインストール状態を確認する
116,curl,2.3.4,http://my.url.com,cumulocity_agent,1.2.3,https://cumulocity.com/agent
- ダウンロード、インストールおよび各構成のインストール状態を確認する
120,ssh_conf,http://cumulocity.com/conf,config,
120,agent_conf,https://<tenantId>.je1.thingscloud.ntt.com/inventory/binaries/156719,agent.cfg,
- ターゲットプロファイルを実行済みとして設定する
121,true,
- オペレーションのステータスを SUCCESSFUL に設定する
503,c8y_DeviceProfile
ファームウェア
ファームウェア タブには、現在インストールされているファームウェアが表示され、ユーザーは別のバージョンをインストールすることができます。デバイスは、一度に1つのファームウェアしかインストールすることができません。Things Cloud でどのようなファームウェアが使用できるかは、デバイスに依存します。典型的な使用例としては、オペレーティングシステム、マイクロコントローラファームウェア、またはBIOSがあります。
ファームウェアは、完全インストールまたはパッチを使用してインストールできます。どのバリアントがデバイスに送信されるかは、ファームウェアがファームウェアリポジトリでどのように作成されたかによって異なります。
インストールされたファームウェア
デバイスは、最初に現在の状態をプラットフォームに通知する必要があります。次に、インストールされたファームウェアをデバイス独自のマネージドオブジェクトの c8y_Firmware
フラグメントに入力する必要があります。デバイスは、起動時およびローカルの変更が検出されたときに、現在の状態を Things Cloud にアップロードする必要があります。これには、更新がリモートでトリガーされた場合も含まれます。
PUT /inventory/managedObjects/<deviceId>
{
"c8y_Firmware": {
"name": "ubuntu core",
"version": "20.04.2",
"url": "http://test.com"
}
}
フィールド | データ型 | 必須 | 詳細 |
---|---|---|---|
name | string | はい | ファームウェアパッケージ名 |
version | string | はい | ファームウェアのバージョン識別子 |
url | string | いいえ | ファームウェア ファイルの取得元の場所を示す URL |
ソフトウェアと同様に、URLフィールドはオプションであり、デバイスによって省略できます。
SmartREST例
115 静的テンプレートは、デバイスが現在インストールされているファームウェアの状態を通信するために使用できます。
115,ubuntu core,20.04.3,http://test.com
ファームウェア イメージのインストール
ユーザーがインストールするために完全なファームウェアイメージを選択すると、デバイスのマネージドオブジェクトで見つけたものと同様の c8y_Firmware
フラグメントを持つオペレーションが作成されます。このオペレーションは、デバイスによって達成される必要がある望ましい状態と見なす必要があります。
{
"c8y_Firmware": {
"name": "ubuntu core",
"version": "20.04.3",
"url": "http://test.com"
}
}
フィールド | データ型 | 必須 | 詳細 |
---|---|---|---|
name | string | はい | ファームウェアパッケージ名 |
version | string | はい | ファームウェアのバージョン識別子 |
url | string | はい | ファームウェア ファイルのダウンロード元の場所を示す URL |
デバイスは、次のアクションを実行する必要があります。
- オペレーションのステータスを EXECUTING に設定する
- ファームウェア イメージをインストールする
- デバイス独自のマネージドオブジェクトにインストールされているファームウェアの状態を更新する
- オペレーションのステータスを SUCCESSFUL に設定する
デバイスを更新すると、基本的なシステムコンポーネントが変更されることがよくあります。これは、常に重要なオペレーションと見なす必要があります。デバイスは、Things Cloud へのすべての接続パラメータがアップグレード中も保持され、後で接続を再開できることを確認する必要があります。デバイスが、必要に応じてロールバックできるA/Bファームウェア切り替えメカニズムを使用しているかを確認することをお勧めします。
SmartREST例
Things Cloud には、ファームウェア イメージのインストールを処理するための 515 静的応答テンプレートが用意されています。
c8y_Firmware
オペレーション(イメージ)を受信する
515,DeviceSerial,ubuntu core,20.04.3,http://test.com
- オペレーションのステータスを EXECUTING に設定する
501,c8y_Firmware
- ファームウェア イメージをインストールする
- インベントリでデバイスのインストール済みファームウェア状態を更新する
115,ubuntu core,20.04.3,http://test.com
- オペレーションのステータスを SUCCESSFUL に設定する
503,c8y_Firmware
ファームウェアパッチのインストール
ユーザーがデバイスにインストールするファームウェアパッチを選択した場合、 c8y_Firmware
オペレーションが作成されます。この場合、ファームウェアパッチのインストールに役立つ2つの追加パラメータが含まれています。デバイス エージェントは、通常のインストールではなく、ファームウェア パッチ プロセスを担当します。
{
"c8y_Firmware": {
"name": "ubuntu core",
"version": "20.04.4",
"url": "http://test.com",
"dependency": "20.04.3",
"isPatch": true
}
}
フィールド | データ型 | 必須 | 詳細 |
---|---|---|---|
name | string | はい | ファームウェア名 |
version | string | はい | ファームウェアのバージョン識別子 |
url | string | はい | ファームウェア ファイルの場所を示す URL |
dependency | string | はい | パッチが依存するファームウェアのバージョン |
isPatch | Boolean | はい | ファームウェアパッケージがパッチであることを示すインジケーター |
デバイスは、次のアクションを実行する必要があります。
- オペレーションのステータスを EXECUTING に設定する
- 現在インストールされているファームウェアのバージョンが依存バージョンと 一致するかどうかを確認する
- ファームウェアパッチをインストールする
- デバイス独自のマネージドオブジェクトにインストールされているファームウェアの状態を更新する
- オペレーションのステータスを SUCCESSFUL に設定する
SmartREST例
Things Cloud は、ファームウェア パッチのインストールを処理するための 525 静的応答テンプレートを提供します。これは、515 テンプレートと類似の動作を行いますが、5 番目のパラメータとして依存性パラメータが追加されています。このテンプレートはパッチに対してのみトリガーされるため、完全なイメージではなくパッチがインストールされるべきという事実は暗黙の了解となっています。
c8y_Firmware
オペレーション(パッチ)を受信する
525,DeviceSerial,ubuntu core,20.04.3,http://test.com,20.04.3
- オペレーションのステータスを EXECUTING に設定する
501,c8y_Firmware
- 現在インストールされているファームウェアのバージョンと依存バージョンが一致するかどうかを確認する
- ファームウェア イメージをインストールする
- インベントリでデバイスのインストール済みファームウェア状態を更新する
115,ubuntu core,20.04.3,http://test.com
- オペレーションのステータスを SUCCESSFUL に設定する
503,c8y_Firmware
識別子
識別子 タブには、デバイスに関連付けられているすべての ID が表示されます。使用可能な ID がない場合、タブは表示されません。ID は一意のデバイス識別子 (IMEI や SN など) から Things Cloud のデバイスのマネージド オブジェクトにマップされます。これにより、デバイスはマネージドオブジェクトを見つけることができます。
REST
MQTT (SmartREST 2.0)
MQTT のコンテキストでは、クライアント ID はデバイスの外部 ID として使用されます。接続時に、MQTT クライアント ID を使用して、接続をインベントリ内のデバイスに自動的に関連付けられます。デバイスで追加の ID バインドを作成する必要はありません。これらは、100 および 101 テンプレートが使用されるときに内部的に作成されます。データを作成するすべてのメッセージは、デバイス コンテキストに自動的に関連付けられます。
Things Cloud に接続されたデバイスによるデバイス作成:
100,createdDeviceName,deviceType
Things Cloud に接続されているデバイスの子デバイス作成:
101,uniqueChildId,myChildDevice,myChildType
ログ
ログ タブは、デバイスからログを抽出するために使用されます。ログ タブは、デバイスの c8y_SupportedOperations
にc8y_LogfileRequest
フラグメントが存在する場合に使用できます。 デバイスには、サポートするログの種類の配列を保持する c8y_SupportedLogs
フラグメントが含まれている必要があります。ログの種類は、後でログがリクエストされたときに参照されます。
サポートされているログ設定
サポートされているログタイプは、デバイスが独自のマネージドオブジェクトの c8y_SupportedLogs
フラグメントを使用して、デバイスによって通知されます。
PUT /inventory/managedObjects/<deviceId>
{
"c8y_SupportedLogs": [
"syslog",
"dmesg"
]
}
フィールド | データ型 | 必須 | 詳細 |
---|---|---|---|
c8y_SupportedLogs | array | はい | サポートされているログタイプの文字列の配列 |
SmartREST例
118 静的テンプレートは、デバイスのサポートされているログを通知するために使用できます。
118,syslog,dmesg
ログファイルのアップロード
ユーザーが ログ タブを使用してデバイスからログ ファイルをリクエストすると、 c8y_LogfileRequest
オペレーションが作成されます。
{
"c8y_LogfileRequest": {
"searchText": "kernel",
"logFile": "syslog",
"dateTo": "2021-09-22T11:40:27+0200",
"dateFrom": "2021-09-21T11:40:27+0200",
"maximumLines": 1000
}
}
フィールド | データ型 | 必須 | 詳細 |
---|---|---|---|
dateFrom | string | はい | ログ行の開始日 |
dateTo | string | はい | ログ行の終了日 |
logFile | string | はい | 特定デバイスのログの種類 (c8y_SupportedLogs) |
searchText | string | はい | 個々のログ行に適用するテキストフィルター |
maximumLines | string | はい | 転送する最大行数 |
デバイスがログを収集すると、それらをファイルとして Things Cloud にアップロードします。 イベントを作成し、イベントのバイナリ添付ファイルとしてログファイルをアップロードすることをお勧めします。 このようなイベントの例を次に示します。
POST /event/events
{
"source": {
"id": "4801"
},
"type": "c8y_Logfile",
"time": "2021-09-15T15:57:41.311Z",
"text": "syslog log file"
}
フィールド | データ型 | 必須 | 詳細 |
---|---|---|---|
source | string | はい | デバイス ID |
type | string | はい | ログ ファイルの種類 |
time | string | はい | イベントが発生した時間 |
text | string | はい | イベント テキスト |
必要に応じて、デバイスはオペレーションから c8y_LogfileRequest
フラグメントまたはオペレーション ID をイベントに含めることもできます。ファイルは、イベント ID とイベント バイナリ API を使用してイベントに添付されます。
POST /event/events/<eventId>/binaries
Host: https://<TENANT_DOMAIN>
Authorization: <AUTHORIZATION>
Accept: application/json
Content-Type: multipart/form-data;boundary="boundary"
--boundary
Content-Disposition: form-data; name="object"
{ "name": "syslog.txt", "type": "text/plain" }
--boundary
Content-Disposition: form-data; name="file"; filename="syslog.txt"
Content-Type: text/plain
Oct 25 13:28:53 wtp kernel: [ 719.554855] sd 6:0:0:0: [sdb] Write Protect is off
Oct 25 13:28:53 wtp kernel: [ 719.554864] sd 6:0:0:0: [sdb] Mode Sense: 03 00 00 00
Oct 25 13:28:53 wtp kernel: [ 719.555033] sd 6:0:0:0: [sdb] No Caching mode page found
--boundary--
アップロードが正常に完了したら、デバイスはアップロードされたファイルへの URL をオペレーションのc8y_LogfileRequest
フラグメントに含める必要があります。リンクはプロパティ “file” として表示する必要があります。このアクションは、オペレーションのステータスのSUCCESSFUL 設定と組み合わせることができます。
PUT /devicecontrol/operations/<operationId>
{
"status": "SUCCESSFUL",
"c8y_LogfileRequest": {
"searchText": "kernel",
"logFile": "syslog",
"dateTo": "2021-09-22T11:40:27+0200",
"dateFrom": "2021-09-21T11:40:27+0200",
"maximumLines": 1000,
"file": "https://<tenantId>.je1.thingscloud.ntt.com/event/events/157700/binaries"
}
}
フィールド | データ型 | 必須 | 詳細 |
---|---|---|---|
status | string | はい | オペレーションのステータス |
dateFrom | string | はい | ログ行の開始日 |
dateTo | string | はい | ログ行の終了日 |
logFile | string | はい | 特定デバイスのログの種類 (c8y_SupportedLogs) |
searchText | string | はい | 個々のログ行に適用するテキストフィルター |
maximumLines | integer | はい | 転送する最大行数 |
file | string | はい | ログ ファイルがアップロードされた URL |
デバイスは、次のアクションを実行する必要があります。
- オペレーションのステータスを EXECUTING に設定する
- オペレーションで指定されたログ ファイルの読み込み、フィルター処理、およびトリミングする
- ログ ファイル イベントを作成する
- ログファイルをバイナリ添付ファイルとして上記のイベントにアップロードする
- オペレーションのステータスを SUCCESSFUL に設定し、アップロードされたログ ファイルの URL を含める
SmartREST例
Things Cloud は、c8y_LogfileRequest
オペレーションを受信するための 522 静的応答テンプレートを提供します。ログファイルがアップロードされると、デバイスは503静的テンプレートの暗黙的なパラメータ機能を使用してオペレーションのステータスを設定し、同時にファイルリンクを提供できます。
c8y_LogfileRequest
オペレーションを受信する
522,DeviceSerial,syslog,2021-09-21T11:40:27+0200,2021-09-22T11:40:27+0200,ERROR,1000
- オペレーションのステータスを EXECUTING に設定する
501,c8y_LogfileRequest
- REST API を使用してログファイルイベントを作成する
- REST APIを使用して、イベントバイナリとして新しく作成されたイベントにログファイルをアップロードする
- オペレーションのステータスを SUCCESSFUL に設定し、アップロードされたファイルの URL を指定する
503,c8y_LogfileRequest,"https://<tenantId>.je1.thingscloud.ntt.com/event/events/157700/binaries"
計測値(メジャーメント)
計測値(メジャーメント) タブでは、デバイスから送信されたメジャーメントフラグメントごとに 1 つのグラフが作成されます。これは、含まれているすべてのシリーズが1つのグラフにまとめて表示されることを意味します。したがって、デバイス統合は、このグループ化を考慮して行う必要があります。その可視性は、デバイスでサポートされているメジャーメントによって制御されます。Things Cloud は、以前に送信されたメジャーメントに基づいて、デバイスでサポートされているメジャーメントを自動的かつ動的に入力します。つまり、計測値(メジャーメント)タブは、デバイスが最初のメジャーメントを送信した後に効果的に表示されます。
SmartREST例
メッセージ ID の 2xx の範囲でメジャーメントを作成するために使用できる静的テンプレートがいくつかあります。200 の静的テンプレートを使用して、動的なフラグメントとシリーズを含むメジャーメントを作成します。
200,c8y_Temperature,T,25
このテンプレートは多くのユースケースで使用できますが、フラグメントとシリーズを動的に定義する必要がない場合は、すべてのユースケースでカスタムテンプレートを作成することをお勧めします。
ネットワーク
ネットワーク タブには、ネットワーク情報が表示されます。 c8y_Network
フラグメントがデバイスのマネージドオブジェクトに存在するかどうかが表示されます。WAN、LAN、DHCPの3つのサブセクションがあります。これらは、ネストされたフラグメント c8y_ WAN
、 c8y_LAN
、c8y_DHCP
によって、それぞれアクティブ化できます。
ネットワークステータス
デバイスは、デバイス独自のマネージドオブジェクトの c8y_Network
フラグメントを使用して、現在のローカルネットワークのステータスと構成をプラットフォームに通知できます。
PUT /inventory/managedObjects/<deviceId>
{
"c8y_Network": {
"c8y_LAN": {
"netmask": "255.255.255.0",
"ip": "192.168.128.1",
"name": "br0",
"enabled": 1,
"mac": "00:60:64:dd:a5:c3"
},
"c8y_WAN": {
"password": "user-password",
"simStatus": "SIM OK",
"authType": "chap",
"apn": "example.apn.com",
"username": "test"
},
"c8y_DHCP": {
"dns2": "1.1.1.1",
"dns1": "8.8.8.8",
"domainName": "my.domain",
"addressRange": {
"start": "192.168.128.100",
"end": "192.168.128.199"
},
"enabled": 1
}
}
}
名称 | タイプ | 必須 | 説明 |
---|---|---|---|
c8y_LAN | object | いいえ | ローカルネットワーク情報を含むオプションのネストされたオブジェクト |
c8y_LAN.netmask | string | いいえ | ネットワーク インターフェース用に構成されたサブネット マスク |
c8y_LAN.ip | string | いいえ | ネットワーク インターフェース用に構成された IP アドレス |
c8y_LAN.name | string | いいえ | ネットワーク インターフェースの識別子 |
c8y_LAN.enabled | integer | いいえ | インターフェースが有効になっているかどうかを示すインジケーター |
c8y_LAN.mac | string | いいえ | ネットワーク インターフェースの MAC アドレス |
c8y_WAN | object | いいえ | モバイルインターネット接続インターフェースのステータスを記述する、オプションのネストされたオブジェクト |
c8y_WAN.password | string | いいえ | SIM 接続パスワード |
c8y_WAN.simStatus | string | いいえ | SIM 接続ステータス |
c8y_WAN.authType | string | いいえ | SIM 接続で使用される認証タイプ |
c8y_WAN.apn | string | いいえ | インターネット アクセスに使用される APN |
c8y_WAN.username | string | いいえ | SIM 接続ユーザー名 |
c8y_DHCP | object | いいえ | DHCP サーバーのステータスに関する情報を含むオプションのネストされたオブジェクト |
c8y_DHCP.dns1 | string | いいえ | 最初に構成された DNS サーバー |
c8y_DHCP.dns2 | string | いいえ | 2 番目に構成された DNS サーバー |
c8y_DHCP.domainName | string | いいえ | ドメイン名 |
c8y_DHCP.addressRange.start | string | いいえ | DHCP クライアントに割り当てられたアドレス範囲の開始 |
c8y_DHCP.addressRange.end | string | いいえ | DHCP クライアントに割り当てられたアドレス範囲の終了 |
c8y_DHCP.enabled | integer | いいえ | DHCPサーバーが有効になっているかどうかを示すインジケーター |
ネットワーク構成の設定
デバイスが c8y_SupportedOperations
に c8y_Network
オペレーションを含んでいる場合、ユーザーはネットワークタブでデバイスのネットワーク構成を更新することもできます。変更された構成は、デバイスのマネージドオブジェクトに存在するのと類似のフラグメントを持つ c8y_Network
オペレーションとして送信されます。このオペレーションの中の c8y_Network
フラグメントは、1つ以上のネストされたフラグメントが含まれる場合があります。
{
"c8y_Network": {
"c8y_LAN": {
"netmask": "255.255.255.0",
"ip": "192.168.128.1",
"enabled": 1
},
"c8y_WAN": {
"password": "user-password",
"authType": "chap",
"apn": "example.apn.com",
"username": "ee"
},
"c8y_DHCP": {
"dns2": "1.1.1.1",
"dns1": "8.8.8.8",
"domainName": "my.domain",
"addressRange": {
"start": "192.168.128.100",
"end": "192.168.128.199"
},
"enabled": 1
}
}
}
名称 | タイプ | 必須 | 説明 |
---|---|---|---|
c8y_LAN | object | いいえ | ローカルネットワーク情報を含むオプションのネストされたオブジェクト |
c8y_LAN.netmask | string | はい | ネットワーク インターフェース用に構成されたサブネット マスク |
c8y_LAN.ip | string | はい | ネットワーク インターフェース用に構成された IP アドレス |
c8y_LAN.enabled | integer | はい | インターフェースが有効になっているかどうかを示すインジケーター |
c8y_WAN | object | いいえ | モバイルインターネット接続インターフェースのステータスを記述する、 オプションのネストされたオブジェクト |
c8y_WAN.password | string | はい | SIM 接続パスワード |
c8y_WAN.authType | string | はい | SIM 接続で使用される認証タイプ |
c8y_WAN.apn | string | はい | インターネット アクセスに使用される APN |
c8y_WAN.username | string | はい | SIM 接続ユーザー名 |
c8y_DHCP | object | いいえ | DHCP サーバーのステータスに関する情報を含む オプションのネストされたオブジェクト |
c8y_DHCP.dns1 | string | いいえ | 最初に構成された DNS サーバー |
c8y_DHCP.dns2 | string | いいえ | 2 番目に構成された DNS サーバー |
c8y_DHCP.domainName | string | いいえ | ドメイン名 |
c8y_DHCP.addressRange.start | string | いいえ | DHCP クライアントに割り当てられたアドレス範囲の開始 |
c8y_DHCP.addressRange.end | string | いいえ | DHCP クライアントに割り当てられたアドレス範囲の終了 |
c8y_DHCP.enabled | integer | いいえ | DHCPサーバーが有効になっているかどうかを示すインジケーター |
デバイスは、次のアクションを実行する必要があります。
- オペレーションのステータスを EXECUTING に設定する
- WAN、LAN、および DHCP 構成を適用する
- デバイスのマネージドオブジェクトの新しいネットワーク構成ステータスを設定する
- オペレーションのステータスを SUCCESSFUL に設定する
ネットワーク構成の変更は、デバイスが Things Cloud プラットフォームに接続する機能に影響を与える可能性があります。新しい設定で接続テストを実行することをお勧めします。テストが失敗した場合、デバイスは設定を以前の状態にロールバックし、オペレーションのステータスを FAILED に設定する必要があります。
SmartREST例
ネットワーク フラグメントの設定やネットワークオペレーションの受信に使用できる静的テンプレートはありません。代わりにカスタムテンプレートを使用できます。
10,100,PUT,INVENTORY,false,c8y_Network.c8y_LAN.name,STRING,,c8y_Network.c8y_LAN.ip,STRING,,c8y_Network.c8y_LAN.netmask,STRING,,c8y_Network.c8y_LAN.mac,STRING,,c8y_Network.c8y_LAN.enabled,STRING,,c8y_Network.c8y_WAN.simStatus,STRING,,c8y_Network.c8y_WAN.apn,STRING,,c8y_Network.c8y_WAN.username,STRING,,c8y_Network.c8y_WAN.password,STRING,,c8y_Network.c8y_WAN.authType,STRING,,c8y_Network.c8y_DHCP.addressRange.start,STRING,,c8y_Network.c8y_DHCP.addressRange.end,STRING,,c8y_Network.c8y_DHCP.domainName,STRING,,c8y_Network.c8y_DHCP.dns1,STRING,,c8y_Network.c8y_DHCP.dns2,STRING,,c8y_Network.c8y_DHCP.enabled,STRING,
11,200,,c8y_Network.c8y_WAN,c8y_Network.c8y_WAN.apn,c8y_Network.c8y_WAN.username,c8y_Network.c8y_WAN.password,c8y_Network.c8y_WAN.authType
11,201,,c8y_Network.c8y_LAN,c8y_Network.c8y_LAN.ip,c8y_Network.c8y_LAN.netmask,c8y_Network.c8y_LAN.enabled
11,202,,c8y_Network.c8y_DHCP,c8y_Network.c8y_DHCP.addressRange.start,c8y_Network.c8y_DHCP.addressRange.end,c8y_Network.c8y_DHCP.domainName,c8y_Network.c8y_DHCP.dns1,c8y_Network.c8y_DHCP.dns2,c8y_Network.c8y_DHCP.enabled
カスタムテンプレートの例では、デバイスが現在のネットワーク構成を完全にアップロードするための 100 テンプレートを提供します。デバイス エージェントの起動時および変更が検出されるたびに、このテンプレートを使用して、クラウド内の情報をローカルの実態と同期する必要があります。
このサンプルテンプレートには、3 つの異なるネストされたフラグメントをオペレーションとして受信するための 3 つの応答テンプレートも用意されています。各応答テンプレートは個別に処理できます。
WAN
- WAN 構成オペレーションを受信する
200,example.apn.com,user,secret,chap
- オペレーションのステータスを EXECUTING に設定する
501,c8y_Network
- WAN 構成を適用する
- インベントリでデバイスのネットワーク構成を更新する
100,br0,192.168.128.1,255.255.255.0,00:60:64:dd:a5:c3,1,SIM OK,example.apn.com,user,secret,chap,192.168.128.100,192.168.128.199,my.domain,8.8.8.8,1.1.1.1,1
- オペレーションのステータスを SUCCESSFUL に設定する
503,c8y_Network
LAN
- LAN 構成オペレーションを受信する
201,192.168.128.2,255.255.255.0,1
- オペレーションのステータスを EXECUTING に設定する
501,c8y_Network
- LAN 構成を適用する
- インベントリでデバイスのネットワーク構成を更新する
100,br0,192.168.128.2,255.255.255.0,00:60:64:dd:a5:c3,1,SIM OK,example.apn.com,user,secret,chap,192.168.128.100,192.168.128.199,my.domain,8.8.8.8,1.1.1.1,1
- オペレーションのステータスを SUCCESSFUL に設定する
503,c8y_Network
DHCP
- DHCP 構成オペレーションを受信する
202,192.168.128.150,192.168.128.199,my.other.domain,1.1.1.1,8.8.8.8,1
- オペレーションのステータスを EXECUTING に設定する
501,c8y_Network
- DHCP 構成を適用する
- インベントリでデバイスのネットワーク設定を更新する
100,br0,192.168.128.1,255.255.255.0,00:60:64:dd:a5:c3,1,SIM OK,example.apn.com,user,secret,chap,192.168.128.150,192.168.128.199,my.other.domain,1.1.1.1,8.8.8.8,1
- オペレーションのステータスを SUCCESSFUL に設定する
503,c8y_Network
リモートアクセス
リモートアクセスタブは、リモートコントロール プロトコルを介してリモートコントロール用のデバイスを構成およびアクセスするために使用されます。
リモートアクセス タブは、次の条件が満たされている場合に使用できます。
- クラウドリモートアクセス マイクロサービスは、必要なテナントにサブスクライブされている
- ユーザーに適切なアクセス許可が付与されている (リモート アクセス管理者権限)
- デバイスの
c8y_SupportedOperations
にc8y_RemoteAccessConnect
が追加されている
リモートアクセス接続
ユーザーがリモートアクセス エンドポイントを選択して 接続 ボタンをクリックすると、 c8y_RemoteAccessConnect
オペレーションが作成されます。
{
"c8y_RemoteAccessConnect": {
"hostname": "10.0.0.67",
"port": 5900,
"connectionKey": "eb5e9d13-1caa-486b-bdda-130ca0d87df8"
}
}
フィールド | データ型 | 必須 | 詳細 |
---|---|---|---|
connectionKey | string | はい | デバイス側からの接続要求を認証するための共有シークレット |
hostname | string | はい | 接続先のローカルネットワーク上のエンドポイント |
port | integer | はい | ローカルネットワークエンドポイントで使用するポート |
このオペレーションでは、デバイスは認証用の接続キー (wss://<c8y host>/service/remoteaccess/device/<connectionKey>)
と、指定されたホスト名とポートへのローカルソケットを使用して、マイクロサービス エンドポイントへの WebSocket 接続を開く必要があります。次に、WebSocket とローカルソケットの間でデータの双方向転送を確立する必要があります。
Things Cloud は現在、VNC、SSH、および Telnet をサポートしています。デバイスエージェントは、使用するリモートアクセス プロトコルとは無関係に実装する必要があります。この操作では、意図的にプロトコルは転送されません。エージェントは、確立された両方のソケット間で任意のデータを転送できる必要があります。
デバイスは、次のアクションを実行する必要があります。
- オペレーションのステータスを EXECUTING に設定する
- リモートアクセス マイクロサービスへの WebSocket 接続を確立する
- 指定したホストとポートへのローカルソケット接続を確立する
- WebSocket とローカルソケット間の双方向転送を確立する
- オペレーションのステータスを SUCCESSFUL に設定する
接続が確立されると、オペレーションは SUCCESSFUL に設定されます。切断はサイレントに行われます。接続が関係するコンポーネントのいずれによっても正常に終了されなかった場合でも、オペレーションのステータスは SUCCESSFUL のままである必要があります。接続の 1 つ (WebSocket または TCP) が終了するたびに、デバイスエージェントはセッション終了と見なし、両方の接続も終了する必要があります。
SmartREST例
530 静的応答テンプレートは、 c8y_RemoteAccessConnect
オペレーションの受信に使用できます。
c8y_RemoteAccessConnect
オペレーションを受信する
530,DeviceSerial,10.0.0.67,22,eb5e9d13-1caa-486b-bdda-130ca0d87df8
- デバイスがオペレーション ステータスをEXECUTINGに設定する
501,c8y_RemoteAccessConnect
- HTTP を使用して WebSocket 接続を確立する
- ローカルソケット接続を確立する
- デバイスがオペレーションステータスを SUCCESSFULに設定する
503,c8y_RemoteAccessConnect
シェル
シェル タブでは、デバイスに任意のデバイス固有のコマンドを送信することができます。デバイスのc8y_SupportedOperations
に c8y_Command
オペレーションが存在する場合に表示されます。
デバイスにコマンドを送信する
コマンドテキストには、任意の文字列を入力することができます。フォーマットやその解釈はデバイスの統合に依存します。実行 ボタンをクリックすると、 c8y_Command
オペレーションが作成されます。
{
"c8y_Command": {
"text": "get sw.version; get hw.version"
}
}
フィールド | データ型 | 必須 | 詳細 |
---|---|---|---|
c8y_Command.text | string | はい | デバイスによって実行されるコマンド テキスト |
実行の完了後、デバイスはオペレーションのステータスを SUCCESSFUL に設定するだけでなく、コマンドの戻り値の文字列を提供する必要があります。結果は、オペレーションの c8y_Command
フラグメント内にネストされた文字列プロパティとして提供されます。
PUT /devicecontrol/operations/<operationId>
{
"status": "SUCCESSFUL",
"c8y_Command": {
"text": "get sw.version; get hw.version",
"result": "1.2.3; 9.8.7"
}
}
フィールド | データ型 | 必須 | 詳細 |
---|---|---|---|
status | string | はい | 操作が意図した通りに完了したかどうかを示すオペレーションのステータス |
c8y_Command | object | はい | 最初に保留中のオペレーションを介して受信したc8y_Command オブジェクト |
c8y_Command.text | string | はい | デバイスによって実行されたコマンド |
c8y_Command.result | string | はい | コマンド実行後の実行結果 |
デバイスは、次のアクションを実行する必要があります。
- オペレーションのステータスを EXECUTING に設定する
- コマンドを実行して戻り値を取得する
- オペレーションのステータスを SUCCESSFUL に設定し、戻り値を含める
SmartREST例
SmartREST 接続デバイスの場合、 c8y_Command
オペレーションを受信するために 511 静的応答テンプレートを使用できます。
さらに、503 静的テンプレートの暗黙的なパラメータ機能を使用して、戻り値を指定できます。
c8y_Command
オペレーションを受信する
511,DeviceSerial,"get sw.version; get hw.version"
- オペレーションのステータスを EXECUTING に設定する
501,c8y_Command
- オペレーションのステータスを SUCCESSFUL に設定し、戻り値を指定する
503,c8y_Command,"1.2.3; 9.8.7"
ソフトウェア
ソフトウェア タブでは、デバイスのソフトウェアファイル一式をインストールおよびアンインストールすることができます。ファイルは、URLを使用して配置することも、Things Cloud ソフトウェアリポジトリにホストすることもできます。デバイスエージェントは、そのローカルインストール、管理、アンインストール手順、およびオペレーション中のあらゆる種類のエラー処理に対して完全に対応します。
デバイスの詳細 ページには、デバイスのマネージドオブジェクトの c8y_SupportedOperations
フラグメントで c8y_SoftwareList
や c8y_SoftwareUpdate
を通知するデバイスのソフトウェアタブが表示されます。また、少なくとも1つのソフトウェアサービスが実行されているデバイスのための サービス タブも表示されます。サービスにはメジャーメント、アラーム、イベントを割り当てることができます。
インストールされているソフトウェア
インストールされたソフトウェアパッケージは c8y_SoftwareList
フラグメントにリストされ、デバイスのマネージドオブジェクトまたは c8y_InstalledSoftwareList
型の子オブジェクトに追加されます。
ソフトウェアを管理する最初のアプローチを「レガシー」、2番目のアプローチを「アドバンスト」と呼びます。
ソフトウェア・パッケージ・リスト・エントリーは、次のプロパティが含まれている必要があります。
フィールド | 必須 | 詳細 |
---|---|---|
name | はい | ソフトウェア名 |
version | はい | ソフトウェアのバージョン識別子 |
url | いいえ | ソフトウェア ファイルの取得元の場所を示す URL |
softwareType | いいえ | ソフトウェア成果物を整理するための任意の文字列 |
name と version は、パッケージを識別するために使用されます。すでに述べた c8y_SupportedSoftwareTypes
フラグメントは、デバイスにインストール可能なソフトウェアの種類を制限します。
レガシーソフトウェア管理
デバイスは、マネージドオブジェクトの c8y_SoftwareList
フラグメントを更新することで、ソフトウェア リストを更新できます。
PUT /inventory/managedObjects/<deviceId>
{
"c8y_SoftwareList": [
{
"name": "software_a",
"version": "3.0.0",
"url": "http://example.com/software_a",
"softwareType": "type A"
},
{
"name": "software_b",
"version": "2.0.0",
"url": "http://example.com/software_b",
"softwareType": "type B"
}
]
}
デバイスは、起動時にインストールされているソフトウェアの完全なリストをアップロードする必要があります。さらに、ローカルの変更がトリガーまたは検出された場合は、常にリストを更新する必要があります。これには、Things Cloud の UIから変更がリクエストされた場合も含まれます。
SmartREST例
Things Cloud は、デバイスがインストールされたソフトウェアをアップロードするために、静的なSmartRESTテンプレート116を提供します。これは、ソフトウェアパッケージごとにトリプルの動的長さのリストをパラメータとして受け取ります。各トリプルは、個々のパッケージの名前、バージョン、およびURLプロパティとして解釈されます。
116,software_a,3.0.0,http://example.com/software_a,software_b,2.0.0,http://example.com/software_b
インストール済みソフトウェアの変更
ソフトウェア タブでは、ユーザーはデバイスにインストール、更新、およびアンインストールするソフトウェアを選択することができます。確認後、目的のソフトウェア構成をオペレーションとしてデバイスに送信されます。オペレーションの形式は、デバイスの c8y_SupportedOperations
フラグに依存します。
ソフトウェア一覧
デバイスが c8y_SoftwareList
オペレーションのみをサポートし、c8y_SupportedOperations
フラグメントが c8y_SoftwareUpdate
を含まない場合、 c8y_SoftwareList
オペレーションがデバイスに送信されます。このオペレーションには、デバイス独自のマネージドオブジェクトにすでに存在するものと非常に類似した c8y_SoftwareList
フラグメントが含まれます。 c8y_SoftwareList
オペレーションは、常にデバイスにインストールされるべきソフトウェアの全リストを含んでいます。リスト内のパッケージを正確にインストールする必要があります。また、リストに含まれていないインストール済みのパッケージは削除する必要があります。
{
"c8y_SoftwareList": [
{
"name": "software_a",
"version": "4.0.0",
"url": "http://example.com/software_a"
},
{
"name": "software_b",
"version": "3.0.0",
"url": "http://example.com/software_b"
}
]
}
フィールド | データ型 | 必須 | 詳細 |
---|---|---|---|
name | string | はい | ソフトウェア名 |
version | string | はい | ソフトウェアのバージョン識別子 |
url | string | はい | ソフトウェア ファイルのダウンロード元の場所を示す URL |
デバイスは、次のアクションを実行する必要があります。
- オペレーションのステータスをEXECUTINGに設定する
- アンインストールする必要があるソフトウェアをアンインストールする
- インストールする必要があるソフトウェアをインストールする
- デバイス独自のマネージドオブジェクトのソフトウェアリストを更新する
- オペレーションのステータスをSUCCESSFULに設定する
何らかの理由で目的の状態を達成できない場合は、オペレーションをステータス FAILED で終了する必要があります。
SmartREST例
516静的応答テンプレートは、ソフトウェアのリスト操作に対応するために利用できます。これは、デバイス独自のマネージドオブジェクトを更新するために使用される116テンプレートと非常に類似して動作します。
c8y_SoftwareList
オペレーションを受信する
516,DeviceSerial,software_a,4.0.0,http://example.com/software_a,software_b,3.0.0,http://example.com/software_b
- オペレーションのステータスを EXECUTING に設定する
501,c8y_SoftwareList
- ソフトウェアをアンインストールまたはインストールする
- インベントリ内のデバイスのソフトウェアリストを更新する
116,software_a,4.0.0,http://example.com/software_a,software_b,3.0.0,http://example.com/software_b
- オペレーションのステータスを SUCCESSFUL に設定する
503,c8y_SoftwareList
ソフトウェアの更新
デバイスが c8y_SupportedOperations
フラグメントで c8y_SoftwareUpdate
オペレーションをサポートしている場合、ソフトウェア タブはデバイスの c8y_SoftwareUpdate
オペレーションを作成します。概念としてソフトウェア更新は、ソフトウェアリストと類似しています。ソフトウェアの望ましい状態は、パッケージのリストという形でデバイスに送信されます。その違いは、 c8y_SoftwareUpdate
は部分的なリストと考えるべきであるということです。各リスト要素には、パッケージをインストールするかアンインストールするかの追加指示が含まれます。ソフトウェア更新リストに記載されていないパッケージには触れないでください。
{
"c8y_SoftwareUpdate": [
{
"name": "software_a",
"version": "4.0.0",
"url": "http://example.com/software_a",
"action": "install"
},
{
"name": "software_b",
"version": "3.0.0",
"url": "http://example.com/software_b",
"action": "delete"
}
]
}
フィールド | データ型 | 必須 | 詳細 |
---|---|---|---|
name | string | はい | ソフトウェア名 |
version | string | はい | ソフトウェアのバージョン識別子 |
url | string | はい | ソフトウェア ファイルのダウンロード元の場所を示す URL |
action | string | はい | ソフトウェア上のデバイスから実行されるアクション(可能な値:“install” または “delete” ) |
デバイスは、次のアクションを実行する必要があります。
- オペレーションのステータスを EXECUTING に設定する
- オペレーションに含まれるパッケージのリストを反復処理し、それぞれのアクションを実行する
- デバイス独自のマネージドオブジェクトのソフトウェアリストを更新する
- オペレーションのステータスを SUCCESSFUL に設定する
SmartREST例
528 静的応答テンプレートは、ソフトウェアの更新オペレーションを処理するために使用できます。
c8y_SoftwareUpdate
オペレーションを受信する
528,DeviceSerial,software_a,4.0.0,http://example.com/software_a,install,
software_b,3.0.0,http://example.com/software_b,delete
(表示上改行を追加しています)- オペレーションのステータスを EXECUTING に設定する
501,c8y_SoftwareUpdate
- ソフトウェアをアンインストールまたはインストールする
- インベントリ内のデバイスのソフトウェアリストを更新する
116,software_a,3.0.0,http://example.com/software_a
- オペレーションのステータスを SUCCESSFUL に設定する
503,c8y_SoftwareUpdate
高度なソフトウェア管理
高度なアプローチを使用することで、c8y_SoftwareList
フラグメントはデバイスのマネージドオブジェクトに存在しなくなります。データはデバイスマネージドオブジェクトから切り離され、インストールされているソフトウェアのリストが非常に大きくても、デバイスのマネージドオブジェクトのサイズは小さく保たれます。
デバイスは c8y_SupportedOperations
フラグメントに c8y_SoftwareUpdate
オペレーションが含まれ、c8y_SupportedSoftwareTypes
フラグメントにサポートされるソフトウェアタイプをリストすることによって、高度なソフトウェア管理のサポートをすることができます。
{
"c8y_SupportedOperations": [
"c8y_SoftwareUpdate"
],
"c8y_SupportedSoftwareTypes": [
"type_a",
"type_b"
]
}
ソフトウェアパッケージのクエリ、追加、削除は、マイクロサービスのRESTエンドポイントまたはSmartREST静的テンプレートを使用して行うことができます。
ソフトウェア パッケージのクエリ:
GET /service/advanced-software-mgmt/software?deviceId=<deviceId>
{
"softwareList": [
{
"name": "software_a",
"version": "3.0.0",
"url": "http://example.com/software_a",
"softwareType": "type A"
},
{
"name": "software_b",
"version": "2.0.0",
"url": "http://example.com/software_b",
"softwareType": "type B"
}
],
"statistics": {
"currentPage": 1,
"pageSize": 5
}
}
クエリパラメータ | 必須 | 詳細 |
---|---|---|
deviceId | はい | デバイス ID |
name | いいえ | ソフトウェア名のフィルターパラメータ |
version | いいえ | ソフトウェア バージョンのフィルターパラメータ |
type | いいえ | ソフトウェアタイプのフィルターパラメーター |
pageSize | いいえ | ページ分割された結果のページ上のアイテム数 (1 から 2000 まで) |
currentPage | いいえ | ページ分割された結果の現在のページ |
withTotalPages | いいえ | true に設定すると、返される結果には統計オブジェクト内のページの合計数が含まれる |
ソフトウェアパッケージの設定
高度なソフトウェア管理は、レガシー・ソフトウェア管理と同様に、デバイスはインストールされているソフトウェアを設定することができます。この場合、以前からプラットフォームと通信されていたソフトウェアは、新しいパッケージで完全に上書きされます。
POST /service/advanced-software-mgmt/software?deviceId=<deviceId>
[
{
"name": "software_a",
"version": "3.0.0",
"url": "http://example.com/software_a",
"softwareType": "type A"
},
{
"name": "software_b",
"version": "2.0.0",
"url": "http://example.com/software_b",
"softwareType": "type B"
}
]
SmartREST例
デバイスは、SmartREST静的テンプレート140を代わりに使用することもできます。これは、動的な長さのソフトウェアパッケージのリストを取得し、各パッケージは、名前、バージョン、ソフトウェアタイプおよびURLによって表します。
140,software_a,3.0.0,"type A",http://example.com/software_a,software_b,2.0.0,"type B",http://example.com/software_b
ソフトウェアパッケージの追加
高度なソフトウェア管理を使用すると、デバイスはリスト全体を通知することなく、インストール済みのソフトウェアにパッケージを追加することもできます。
PUT /service/advanced-software-mgmt/software?deviceId=<deviceId>
[
{
"name": "software_a",
"version": "3.0.0",
"url": "http://example.com/software_a",
"softwareType": "type A"
},
{
"name": "software_b",
"version": "2.0.0",
"url": "http://example.com/software_b",
"softwareType": "type B"
}
]
SmartREST例
デバイスはSmartRESTの静的テンプレート141を代わりに使用します。140と同様に、ソフトウェアパッケージのリストを取得します。
141,software_a,3.0.0,"type A",http://example.com/software_a,software_b,2.0.0,"type B",http://example.com/software_b
ソフトウェアの削除
インストールされているソフトウェアの部分的な更新を完了するために、高度なソフトウェア管理は、デバイスのインストールされているソフトウェアから個々のパッケージを削除するためのインターフェースを提供します。
DELETE /service/advanced-software-mgmt/software?deviceId=<deviceId>
[
{
"name": "software_a",
"version": "3.0.0"
},
{
"name": "software_b",
"version": "2.0.0"
}
]
SmartREST例
デバイスは、SmartREST静的テンプレート142を代わりに使用することもできます。URL とソフトウェア タイプはパッケージの識別に使用されないため、動的な長さのソフトウェア パッケージのリストを取得します。各パッケージは名前とバージョンで表します。
142,software_a,3.0.0,software_b,2.0.0
インストール済みソフトウェアの変更
同様に、高度なソフトウェア管理アプローチでは、ソフトウェア パッケージを更新するには、 c8y_SupportedOperations
フラグメントで指定されているオペレーションに応じて、 c8y_SoftwareUpdate
または c8y_SoftwareList
のいずれかのオペレーションをデバイスに送信する必要があります。 唯一の違いは、ソフトウェア パッケージにソフトウェア タイプ プロパティが必要になったことです。
ソフトウェアの更新
c8y_SoftwareUpdate
オペレーションにはソフトウェアパッケージの一部リストが含まれ、それぞれにインストールまたはアンインストールする必要があるかどうかが指示されています。これは、レガシーソフトウェア管理と類似していますが、各パッケージのソフトウェアタイプを示す追加のパラメータも含まれています。
{
"c8y_SoftwareUpdate": [
{
"name": "software_a",
"version": "4.0.0",
"url": "http://example.com/software_a",
"softwareType": "type A",
"action": "install"
},
{
"name": "software_b",
"version": "3.0.0",
"url": "http://example.com/software_b",
"softwareType": "type B",
"action": "delete"
}
]
}
フィールド | データ型 | 必須 | 詳細 |
---|---|---|---|
name | string | はい | ソフトウェア名 |
version | string | はい | ソフトウェアのバージョン識別子 |
url | string | はい | ソフトウェア ファイルのダウンロード元の場所を示す URL |
softwareType | string | はい | ソフトウェア成果物を整理するための任意の文字列 |
action | string | はい | ソフトウェア上のデバイスから実行されるアクション(可能な値:“install” または “delete”) |
デバイスは、次のアクションを実行する必要があります。
- オペレーションのステータスをEXECUTINGに設定する
- オペレーションに含まれるパッケージのリストを反復処理し、それぞれのアクションを実行する
- デバイス独自のマネージメントオブジェクトのソフトウェアリストを更新する
- オペレーションのステータスを SUCCESSFUL に設定する
SmartREST例
高度なソフトウェア管理をサポートするデバイスのソフトウェア更新オペレーションに対応するために、529静的応答テンプレートが利用できます。
c8y_SoftwareUpdate
オペレーションを受信する
529,DeviceSerial,software_a,4.0.0,"type A",http://example.com/software_a,install,software_b,3.0.0,"type B",http://example.com/software_b,delete
- オペレーションのステータスをEXECUTINGに設定する
501,c8y_SoftwareUpdate
- ソフトウェアをアンインストールまたはインストールする
- アンインストールされたソフトウェアパッケージをインベントリから削除する
142,software_b,3.0.0
- インストール済みソフトウェアパッケージをインベントリに追加する
141,software_a,4.0.0,"type A",http://example.com/software_a
- オペレーションのステータスを SUCCESSFUL に設定する
503,c8y_SoftwareUpdate
–>
サービス
Things Cloud UI では、デバイス上で動作するソフトウェアサービスを監視することができます。サービスは、Things Cloud ドメインモデルにおいて、 c8y_Service
タイプを持つデバイスのマネージドオブジェクトの子追加として表します。
デバイスの詳細 ページには、少なくとも 1 つのソフトウェア サービスを持つデバイスの サービス タブが表示されます。サービスはメジャーメント、アラーム、イベントが割り当てられています。
マネージドオブジェクトを操作するために、Things Cloud REST API を使用してサービスのクエリ、更新、追加、削除を行います。
REST API 例
プラットフォームへのサービス通知
インベントリ REST API の使用:
POST /inventory/managedObjects/<deviceId>/childAdditions
Content-Type: "application/vnd.com.nsn.cumulocity.managedObject+json"
{
"name": "DatabaseService",
"type": "c8y_Service",
"serviceType": "systemd",
"status": "up"
}
フィールド | 必須 | 詳細 |
---|---|---|
name | はい | サービス名 |
type | はい | マネージドオブジェクトのタイプは、常に c8y_Service でなければならない。 |
serviceType | はい | サービスを整理するための任意の文字列 |
status | はい | up 、down 、unknown または任意のカスタムサービスのステータス |
SmartREST 静的テンプレート 102を使用してs/us/<serviceId>
トピックに送信:
2番目のパラメータである一意のIDは、内部数値IDではなく、プラットフォームとは異なり、デバイスによって定義される文字列ベースの外部IDを参照します。 同じサービスを実行している他のデバイスとの競合を避けるため、一意のIDの前にデバイス固有のプレフィックスを付けることをお勧めします。
102,myDatabaseDevice,systemd,DatabaseService,up
サービスのステータス更新
インベントリ REST API の使用:
PUT /inventory/managedObjects/<serviceId>
Content-Type: "application/vnd.com.nsn.cumulocity.managedObject+json"
{
"status": "down"
}
フィールド | 必須 | 詳細 |
---|---|---|
status | はい | up 、down 、unknown またはサービスのステータスを指定する任意の文字列 |
または、SmartREST 静的テンプレート 104 を使用してs/us/<serviceId>
にトピック送信:
104,down
サービスデータの送信
メジャーメント REST API:
POST /measurement/measurements
Content-Type: "application/vnd.com.nsn.cumulocity.measurement+json"
{
"source": {
"id": "<serviceManagedObjectId>"
},
"time": "2020-03-19T12:03:27.845Z",
"type": "c8y_Memory",
"c8y_Memory": {
"allocated": {
"unit": "MB",
"value": 100
}
}
}
または、SmartREST 静的テンプレート 200 を使用して s/us/<serviceUniqueId>
トピックに送信:
200,c8y_Memory,allocated,100,MB
メジャーメントと同様に、サービスに関連するアラームやイベントも送信できます。
トラッキング
トラッキング タブでは、デバイスのパスを可視化することができます。これを実現するために、デバイスは定期的にトラッキングイベントを送信し、その位置を更新する必要があります。
位置履歴の追跡
デバイスは、現在または過去の位置を、 c8y_Position
フラグメントの位置更新イベントとしてアップロードすることができます。これは、ルート上のデバイスを追跡したり、一般的にデバイスの位置履歴を追跡するのに便利です。
POST /event/events
{
"c8y_Position": {
"alt": 67,
"lng": 6.95173,
"lat": 51.151977
},
"time":"2013-06-22T17:03:14.000+02:00",
"source": {
"id": "10300"
},
"type": "c8y_LocationUpdate",
"text": "LocUpdate"
}
フィールド | データ型 | 必須 | 詳細 |
---|---|---|---|
c8y_Position | object | はい | 地理的な場所のプロパティを保持 |
c8y_Position.alt | number | いいえ | デバイス位置の高度 (メートル単位) |
c8y_Position.lng | number | はい | デバイス位置の経度 (度単位) |
c8y_Position.lat | number | はい | デバイス位置の緯度 (度単位) |
time | string | はい | 位置が測定された時間 |
source | object | はい | ソースデバイスID |
type | string | はい | イベントを位置情報更新イベントとして指定するには、 常に c8y_LocationUpdate の必要がある |
text | string | はい | イベントの説明。このパラメータは、一般的なイベントに必要なため必須です。追跡デバイスのコンテキストでテキストに適用される以上の意味はありません。 |
SmartREST例
Things Cloud には、SmartREST を使用して位置更新イベントを送信するための 401 静的テンプレートが用意されています。
401,51.151977,6.95173,67,2013-06-22T17:03:14.000+02:00
現在位置の設定
現在のデバイス位置は、デバイス独自のマネージドオブジェクトの c8y_Position
フラグメントを使用して表されます。
PUT /inventory/managedObjects/<deviceId>
{
"c8y_Position": {
"alt": 67,
"lng": 6.95173,
"lat": 51.151977
}
}
フィールド | データ型 | 必須 | 詳細 |
---|---|---|---|
alt | number | いいえ | デバイス位置の高度 (メートル単位) |
lng | number | はい | デバイス位置の経度 (度単位) |
lat | number | はい | デバイス位置の緯度 (度単位) |
SmartREST例
デバイスは、112 静的テンプレートを使用して現在の位置を更新できます。
112,51.151977,6.95173,67,
Things Cloud では、時間の経過に伴う追跡はイベントを使用して行われ、現在の位置はデバイス独自のマネージドオブジェクトのフラグメントとして表されます (詳細については、上記を参照)。実際には、デバイスは通常、一定間隔で現在の位置を決定し、測定された座標をアップロードします。この場合、現在の位置とその時点の位置は同じであり、402静的テンプレートを使用して同時にアップロードできます。
402,51.151977,6.95173,67,,