使用資料匯出將 IoT 資料匯出至雲端目的地, (舊版)

舊版資料匯出 (傳統) 功能現在已被取代,您應該打算移轉至新的 資料匯出功能。 舊版資料匯出缺少重要的功能,例如不同資料類型的可用性、篩選和訊息轉換。 如需舊版資料匯出與新資料匯出的比較,請參閱下表:

功能 舊版資料匯出 (傳統) 新資料匯出
可用的資料類型 遙測、裝置、裝置範本 遙測、屬性變更、裝置連線變更、裝置生命週期變更、裝置範本生命週期變更
篩選 取決於匯出的資料類型。 針對遙測,依遙測、訊息屬性、屬性值進行篩選
擴充 使用裝置上的自訂字串或屬性值來擴充
轉換 將匯出訊息轉換為所需的圖形
Destinations Azure 事件中樞、Azure 服務匯流排佇列和主題、Azure Blob 儲存體 與舊版資料匯出和 Azure Data Explorer和 Webhook 相同
值得注意的限制 每個應用程式的五個匯出,每個匯出一個目的地 每個應用程式的 10 個匯出目的地連線

移轉注意事項

若要將舊版資料匯出 (傳統) 移轉至新的資料匯出,您應該:

  1. 使用測試 IoT Central 應用程式,並使用相同的資料類型和目的地建立新的資料匯出。 您可以選擇性地使用擴充和資料轉換功能,讓您的匯出訊息圖形與舊版資料匯出中的訊息圖形類似。
  2. 當您測試新的資料匯出並準備好進入生產環境時,請確定任何對使用中舊版資料匯出的工作流程或相依性都會安全地移除。
  3. 在生產環境中建立新的資料匯出,並確認匯出訊息符合您的需求。 然後,您可以將任何工作流程或相依性新增至新的資料匯出。
  4. 成功移轉所有舊版資料匯出至新的資料匯出之後,您可以刪除舊版資料匯出。

資料類型移轉考慮

預設資料格式會因舊版資料匯出和新資料匯出之間的資料類型而有所不同。 如需詳細資訊,請參閱 新資料匯出的資料格式 ,以及 舊版資料匯出的資料格式。 當您移轉至新的資料匯出時,應該移除舊版資料匯出之資料格式的任何相依性。 不過,如果您有系結至舊版資料匯出的強相依性或工作流程,下列考慮可協助解決任何移轉挑戰。

遙測:如果您選擇符合新資料匯出中遙測的舊版資料匯出格式,您可以使用轉換功能,並建置類似下列範例的轉換查詢:

.telemetry | map({ key: .name, value: .value }) | from_entries

裝置:如果您目前使用舊版資料匯出搭配裝置資料類型,則可以在新匯出中使用屬性變更和裝置生命週期事件資料類型來匯出相同的資料。 您可以在這兩種資料類型上使用下列轉換查詢來達成類似的資料結構:

approved: .device.approved, 
provisioned: .device.provisioned, 
simulated: .device.simulated, 
cloudProperties: .device.cloudProperties | map({ key: .name, value: .value }) | from_entries, 
displayName: .device.name, 
id: .device.id, 
instanceOf: .device.templateId, 
properties: .device.properties.reported | map({ key: .name, value: .value }) | from_entries 

裝置範本:如果您目前使用舊版資料匯出搭配裝置範本資料類型,您可以使用 裝置範本 - 取得 API 呼叫來取得相同的資料。

目的地移轉考慮

在新的資料匯出中,您可以建立目的地,並在不同的資料匯出之間重複使用。 當您從舊版資料匯出移轉時,您應該在新的資料匯出中建立目的地,以儲存現有舊版資料匯出目的地的資訊。

注意

新的資料匯出不支援匯出不正確 JSON 訊息。

將 IoT 資料匯出至雲端目的地, (舊版)

注意

本文說明 IoT Central 中的舊版資料匯出功能

本文說明如何在 Azure IoT Central 中使用資料匯出功能。 此功能可讓您持續將資料匯出至Azure 事件中樞Azure 服務匯流排Azure Blob 儲存體實例。 資料匯出會使用 JSON 格式,並可包含遙測、裝置資訊和裝置範本資訊。 針對下列專案使用匯出的資料:

  • 暖路徑深入解析和分析。 此選項包括觸發 Azure 串流分析中的自訂規則、在 Azure Logic Apps 中觸發自訂工作流程,或透過要轉換的Azure Functions傳遞自訂工作流程。
  • 冷路徑分析,例如在 Azure Machine Learning 中定型模型,或在 Microsoft Power BI 中進行長期趨勢分析。

注意

當您開啟資料匯出時,您只會從該時間開始取得資料。 目前,資料匯出關閉時無法擷取。 若要保留更多歷程記錄資料,請提早開啟資料匯出。

Prerequisites

您必須是 IoT Central 應用程式中的系統管理員,或具有資料匯出許可權。

設定匯出目的地

在設定資料匯出之前,您的匯出目的地必須存在。

建立事件中樞命名空間

如果您沒有要匯出的現有事件中樞命名空間,請遵循下列步驟:

  1. 在 Azure 入口網站中建立新事件中樞命名空間。 您可以透過 Azure 事件中樞文件深入了解。

  2. 選擇訂用帳戶。 您可以將資料匯出至與 IoT Central 應用程式不在相同訂用帳戶中的其他訂用帳戶。 在此情況下,您會使用連接字串進行連線。

  3. 在「事件中樞」命名空間中建立一個事件中樞。 移至您的命名空間,然後選取頂端的 [+ 事件中樞] 以建立事件中樞執行個體。

建立服務匯流排命名空間

如果您沒有要匯出的現有服務匯流排命名空間,請遵循下列步驟:

  1. 在 Azure 入口網站 中建立新的服務匯流排命名空間。 您可以透過 Azure 服務匯流排文件深入了解。

  2. 選擇訂用帳戶。 您可以將資料匯出至與 IoT Central 應用程式不在相同訂用帳戶中的其他訂用帳戶。 在此情況下,您會使用連接字串進行連線。

  3. 若要建立要匯出的佇列或主題,請移至您的服務匯流排命名空間,然後選取[+ 佇列] 或 [+ 主題]。

當您選擇服務匯流排作為匯出目的地時,佇列和主題不得啟用會話或重複偵測。 如果啟用這其中一個選項,有些訊息就不會送達到您的佇列或主題中。

建立儲存體帳戶

如果您沒有要匯出的現有 Azure 儲存體帳戶,請遵循下列步驟:

  1. 在 Azure 入口網站中建立新儲存體帳戶。 您可以深入瞭解如何建立新的Azure Blob 儲存體帳戶,或Azure Data Lake Storage v2 儲存體帳戶。 資料匯出只能將資料寫入支援區塊 Blob 的儲存體帳戶。 下列清單顯示已知的相容儲存體帳戶類型:

    效能層級 帳戶類型
    標準 常規用途 V2
    標準 常規用途 V1
    標準 Blob 儲存體
    Premium 區塊 Blob 儲存體
  2. 在您的儲存體帳戶中建立容器。 移至您的儲存體帳戶。 在 [Blob 服務] 下,選取 [瀏覽 Blob]。 選取頂端的 [+ 容器] 以建立新的容器。

設定資料匯出

既然您已擁有將資料匯出目的地,請遵循下列步驟來設定資料匯出。

  1. 登入您的 IoT Central 應用程式。

  2. 在左窗格中,選取 [資料匯出]。

    秘訣

    如果您沒有在左窗格中看到 [資料匯出 ],則您沒有在應用程式中設定資料匯出的許可權。 請連絡系統管理員來設定資料匯出。

  3. 選取 [+ 新增] 按鈕。 選擇其中一個Azure Blob 儲存體Azure 事件中樞Azure 服務匯流排佇列Azure 服務匯流排主題作為匯出目的地。 每個應用程式的匯出數目上限為 5。

  4. 輸入匯出的名稱。 在下拉式清單中,選取您的 命名空間,或 輸入連接字串

    秘訣

    您只會在與 IoT Central 應用程式相同的訂用帳戶中看到儲存體帳戶、事件中樞命名空間和服務匯流排命名空間。 如果您想要匯出至此訂用帳戶外部的目的地,請選擇 [輸入連接字串 ],並查看步驟 6。

    建立新的事件中樞

  5. 從下拉式清單方塊中選擇事件中樞、佇列、主題或容器。

  6. (選擇性) 如果您選擇 [輸入連接字串],就會顯示一個可供您貼上連接字串的新方塊。 取得下列項目的連接字串:

    • 事件中樞或服務匯流排,移至Azure 入口網站中的命名空間:
      • 若要針對整個命名空間使用連接字串:
        1. 在 [ 設定]底下,選取 [共用存取原則]
        2. 建立新的金鑰,或選擇具有 傳送 許可權的現有金鑰。
        3. 複製主要連接字串或次要連接字串
      • 若要針對特定事件中樞實例或服務匯流排佇列或主題使用連接字串,請移至[實體事件中樞] 或 [實體 >> 佇列] 或 [實體 > 主題]。 選擇特定實例,並遵循上述相同的步驟來取得連接字串。
    • 儲存體帳戶,移至Azure 入口網站中的儲存體帳戶:
      • 僅支援整個儲存體帳戶的連接字串。 不支援範圍設定為單一容器的連接字串。
        1. 在 [ 設定]底下,選取 [存取金鑰]
        2. 複製 key1 連接字串或 key2 連接字串

    貼上連接字串。 輸入實例或區分大小寫的 容器名稱

  7. [要匯出的資料] 下,將類型設定為 [ 開啟] 來選擇要匯出的資料類型。

  8. 若要開啟資料匯出,請確定 [已啟用]切換開關為[開啟]。 選取 [儲存]。

  9. 幾分鐘後,您的資料會出現在您選擇的目的地中。

匯出內容和格式

匯出的遙測資料包含您裝置傳送至 IoT Central 的整個訊息,而不只是遙測值本身。 匯出的裝置資料包含所有裝置屬性和中繼資料的變更,而匯出的裝置範本則包含所有裝置範本的變更。

針對事件中樞和服務匯流排,資料會以近乎即時的方式匯出。 資料為 屬性, body 且為 JSON 格式。 如需範例,請參閱下方。

對於 Blob 儲存體,資料會每分鐘匯出一次,每個檔案都包含自上次匯出檔案以來的變更批次。 匯出的資料會以 JSON 格式放在三個資料夾中。 您儲存體帳戶中的預設路徑為:

  • 遙測: {container}/{app-id}/telemetry/{YYYY}/{MM}/{dd}/{hh}/{mm}/{filename}
  • 裝置: {container}/{app-id}/devices/{YYYY}/{MM}/{dd}/{hh}/{mm}/{filename}
  • 裝置範本: {container}/{app-id}/deviceTemplates/{YYYY}/{MM}/{dd}/{hh}/{mm}/{filename}

若要流覽Azure 入口網站中匯出的檔案,請流覽至檔案,然後選取 [編輯 Blob] 索引標籤。

遙測

針對事件中樞和服務匯流排,IoT Central 會在從裝置收到訊息之後快速匯出新訊息。 每個匯出的訊息都包含裝置以 JSON 格式以 body 屬性傳送的完整訊息。

針對 Blob 儲存體,訊息會每分鐘批次處理並匯出一次。 匯出的檔案會使用與IoT 中樞訊息路由傳送至 Blob 儲存體所匯出之訊息檔案相同的格式。

注意

針對 Blob 儲存體,請確定您的裝置正在傳送具有 contentType: application/JSONcontentEncoding:utf-8 (或 的 utf-16utf-32 訊息,) 。 如需範例,請參閱IoT 中樞檔

傳送遙測的裝置會以裝置識別碼表示, (請參閱下列各節) 。 若要取得裝置的名稱,請匯出裝置資料,並使用符合裝置訊息deviceIdconnectionDeviceId相互關聯每個訊息。

下列範例顯示從事件中樞或服務匯流排佇列或主題接收的訊息:

{
  "temp":81.129693132351775,
  "humid":59.488071477541247,
  "EventProcessedUtcTime":"2020-04-07T09:41:15.2877981Z",
  "PartitionId":0,
  "EventEnqueuedUtcTime":"2020-04-07T09:38:32.7380000Z"
}

此訊息不包含傳送裝置的裝置識別碼。

若要從 Azure 串流分析查詢中的訊息資料擷取裝置識別碼,請使用 GetMetadataPropertyValue 函式。 如需範例,請參閱使用串流分析、Azure Functions和 SendGrid 搭配自訂規則擴充 Azure IoT Central 中的查詢。

若要擷取 Azure Databricks 或 Apache Spark 工作區中的裝置識別碼,請使用 systemProperties。 如需範例,請參閱 使用 Azure Databricks 擴充 Azure IoT Central 中的 Databricks 工作區與自訂分析

下列範例顯示匯出至 Blob 儲存體的記錄:

{
  "EnqueuedTimeUtc":"2019-09-26T17:46:09.8870000Z",
  "Properties":{

  },
  "SystemProperties":{
    "connectionDeviceId":"<deviceid>",
    "connectionAuthMethod":"{\"scope\":\"device\",\"type\":\"sas\",\"issuer\":\"iothub\",\"acceptingIpFilterRule\":null}",
    "connectionDeviceGenerationId":"637051167384630591",
    "contentType":"application/json",
    "contentEncoding":"utf-8",
    "enqueuedTime":"2019-09-26T17:46:09.8870000Z"
  },
  "Body":{
    "temp":49.91322758395974,
    "humid":49.61214852573155,
    "pm25":25.87332214661367
  }
}

裝置

快照集中的每個訊息或記錄都代表自上次匯出訊息以來,裝置及其裝置和雲端屬性的一或多個變更。 訊息包含:

  • IoT Central 中裝置的 id
  • 裝置的 displayName
  • 中的裝置範本識別碼 instanceOf
  • simulated 如果裝置是模擬裝置,則旗標為 true
  • provisioned 如果已布建裝置,則 flag 為 true
  • approved 如果裝置已核准傳送資料,則旗標為 true
  • 屬性值
  • properties 包括裝置和雲端屬性值

已刪除的裝置不會匯出。 目前,在匯出的訊息中並沒有任何適用於已刪除之裝置的指標。

針對事件中樞和服務匯流排,IoT Central 會近乎即時地將包含裝置資料的訊息傳送至事件中樞或服務匯流排佇列或主題。

對於 Blob 儲存體,新的快照集包含自最後一次寫入後的所有變更,每分鐘都會匯出一次。

下列範例訊息顯示事件中樞或服務匯流排佇列或主題中裝置和屬性資料的相關資訊:

{
  "body":{
    "id": "<device Id>",
    "etag": "<etag>",
    "displayName": "Sensor 1",
    "instanceOf": "<device template Id>",
    "simulated": false,
    "provisioned": true,
    "approved": true,
    "properties": {
        "sensorComponent": {
            "setTemp": "30",
            "fwVersion": "2.0.1",
            "status": { "first": "first", "second": "second" },
            "$metadata": {
                "setTemp": {
                    "desiredValue": "30",
                    "desiredVersion": 3,
                    "desiredTimestamp": "2020-02-01T17:15:08.9284049Z",
                    "ackVersion": 3
                },
                "fwVersion": { "ackVersion": 3 },
                "status": {
                    "desiredValue": {
                        "first": "first",
                        "second": "second"
                    },
                    "desiredVersion": 2,
                    "desiredTimestamp": "2020-02-01T17:15:08.9284049Z",
                    "ackVersion": 2
                }
            },
            
        }
    },
    "installDate": { "installDate": "2020-02-01" }
},
  "annotations":{
    "iotcentral-message-source":"devices",
    "x-opt-partition-key":"<partitionKey>",
    "x-opt-sequence-number":39740,
    "x-opt-offset":"<offset>",
    "x-opt-enqueued-time":1539274959654
  },
  "partitionKey":"<partitionKey>",
  "sequenceNumber":39740,
  "enqueuedTimeUtc":"2020-02-01T18:14:49.3820326Z",
  "offset":"<offset>"
}

此快照集是顯示 Blob 儲存體中裝置和屬性資料的範例訊息。 匯出的檔案包含每筆記錄的單行。

{
  "id": "<device Id>",
  "etag": "<etag>",
  "displayName": "Sensor 1",
  "instanceOf": "<device template Id>",
  "simulated": false,
  "provisioned": true,
  "approved": true,
  "properties": {
      "sensorComponent": {
          "setTemp": "30",
          "fwVersion": "2.0.1",
          "status": { "first": "first", "second": "second" },
          "$metadata": {
              "setTemp": {
                  "desiredValue": "30",
                  "desiredVersion": 3,
                  "desiredTimestamp": "2020-02-01T17:15:08.9284049Z",
                  "ackVersion": 3
              },
              "fwVersion": { "ackVersion": 3 },
              "status": {
                  "desiredValue": {
                      "first": "first",
                      "second": "second"
                  },
                  "desiredVersion": 2,
                  "desiredTimestamp": "2020-02-01T17:15:08.9284049Z",
                  "ackVersion": 2
              }
          },
          
      }
  },
  "installDate": { "installDate": "2020-02-01" }
}

裝置範本

每個訊息或快照集記錄都代表自上次匯出訊息以來,已發佈裝置範本的一或多個變更。 每個訊息或記錄中傳送的資訊包括:

  • id符合上述裝置資料流程之 的裝置範本 instanceOf
  • 裝置範本的 displayName
  • 裝置 capabilityModel ,包括其 interfaces 、遙測、屬性和命令定義
  • cloudProperties 定義
  • 覆寫和初始值,內嵌于 capabilityModel

不會匯出已刪除的裝置範本。 目前,在匯出的訊息中並沒有任何適用於已刪除之裝置範本的指標。

針對事件中樞和服務匯流排,IoT Central 會近乎即時地將包含裝置範本資料的訊息傳送至事件中樞或服務匯流排佇列或主題。

對於 Blob 儲存體,新的快照集包含自最後一次寫入後的所有變更,每分鐘都會匯出一次。

此範例顯示事件中樞或服務匯流排佇列或主題中裝置範本資料的相關訊息:

{
  "body":{
      "id": "<device template id>",
      "etag": "<etag>",
      "types": ["DeviceModel"],
      "displayName": "Sensor template",
      "capabilityModel": {
          "@id": "<capability model id>",
          "@type": ["CapabilityModel"],
          "contents": [],
          "implements": [
              {
                  "@id": "<component Id>",
                  "@type": ["InterfaceInstance"],
                  "name": "sensorComponent",
                  "schema": {
                      "@id": "<interface Id>",
                      "@type": ["Interface"],
                      "displayName": "Sensor interface",
                      "contents": [
                          {
                              "@id": "<id>",
                              "@type": ["Telemetry"],
                              "displayName": "Humidity",
                              "name": "humidity",
                              "schema": "double"
                          },
                          {
                              "@id": "<id>",
                              "@type": ["Telemetry", "SemanticType/Event"],
                              "displayName": "Error event",
                              "name": "error",
                              "schema": "integer"
                          },
                          {
                              "@id": "<id>",
                              "@type": ["Property"],
                              "displayName": "Set temperature",
                              "name": "setTemp",
                              "writable": true,
                              "schema": "integer",
                              "unit": "Units/Temperature/fahrenheit",
                              "initialValue": "30"
                          },
                          {
                              "@id": "<id>",
                              "@type": ["Property"],
                              "displayName": "Firmware version read only",
                              "name": "fwversion",
                              "schema": "string"
                          },
                          {
                              "@id": "<id>",
                              "@type": ["Property"],
                              "displayName": "Display status",
                              "name": "status",
                              "writable": true,
                              "schema": {
                                  "@id": "urn:testInterface:status:obj:ka8iw8wka:1",
                                  "@type": ["Object"]
                              }
                          },
                          {
                              "@id": "<id>",
                              "@type": ["Command"],
                              "request": {
                                  "@id": "<id>",
                                  "@type": ["SchemaField"],
                                  "displayName": "Configuration",
                                  "name": "config",
                                  "schema": "string"
                              },
                              "response": {
                                  "@id": "<id>",
                                  "@type": ["SchemaField"],
                                  "displayName": "Response",
                                  "name": "response",
                                  "schema": "string"
                              },
                              "displayName": "Configure sensor",
                              "name": "sensorConfig"
                          }
                      ]
                  }
              }
          ],
          "displayName": "Sensor capability model"
      },
      "solutionModel": {
          "@id": "<id>",
          "@type": ["SolutionModel"],
          "cloudProperties": [
              {
                  "@id": "<id>",
                  "@type": ["CloudProperty"],
                  "displayName": "Install date",
                  "name": "installDate",
                  "schema": "dateTime",
                  "valueDetail": {
                      "@id": "<id>",
                      "@type": ["ValueDetail/DateTimeValueDetail"]
                  }
              }
          ]
      }
  },
    "annotations":{
      "iotcentral-message-source":"deviceTemplates",
      "x-opt-partition-key":"<partitionKey>",
      "x-opt-sequence-number":25315,
      "x-opt-offset":"<offset>",
      "x-opt-enqueued-time":1539274985085
    },
    "partitionKey":"<partitionKey>",
    "sequenceNumber":25315,
    "enqueuedTimeUtc":"2019-10-02T16:23:05.085Z",
    "offset":"<offset>"
  }
}

此範例快照集顯示訊息,其中包含 Blob 儲存體中的裝置和屬性資料。 匯出的檔案包含每筆記錄的單行。

{
      "id": "<device template id>",
      "etag": "<etag>",
      "types": ["DeviceModel"],
      "displayName": "Sensor template",
      "capabilityModel": {
          "@id": "<capability model id>",
          "@type": ["CapabilityModel"],
          "contents": [],
          "implements": [
              {
                  "@id": "<component Id>",
                  "@type": ["InterfaceInstance"],
                  "name": "Sensor component",
                  "schema": {
                      "@id": "<interface Id>",
                      "@type": ["Interface"],
                      "displayName": "Sensor interface",
                      "contents": [
                          {
                              "@id": "<id>",
                              "@type": ["Telemetry"],
                              "displayName": "Humidity",
                              "name": "humidity",
                              "schema": "double"
                          },
                          {
                              "@id": "<id>",
                              "@type": ["Telemetry", "SemanticType/Event"],
                              "displayName": "Error event",
                              "name": "error",
                              "schema": "integer"
                          },
                          {
                              "@id": "<id>",
                              "@type": ["Property"],
                              "displayName": "Set temperature",
                              "name": "setTemp",
                              "writable": true,
                              "schema": "integer",
                              "unit": "Units/Temperature/fahrenheit",
                              "initialValue": "30"
                          },
                          {
                              "@id": "<id>",
                              "@type": ["Property"],
                              "displayName": "Firmware version read only",
                              "name": "fwversion",
                              "schema": "string"
                          },
                          {
                              "@id": "<id>",
                              "@type": ["Property"],
                              "displayName": "Display status",
                              "name": "status",
                              "writable": true,
                              "schema": {
                                  "@id": "urn:testInterface:status:obj:ka8iw8wka:1",
                                  "@type": ["Object"]
                              }
                          },
                          {
                              "@id": "<id>",
                              "@type": ["Command"],
                              "request": {
                                  "@id": "<id>",
                                  "@type": ["SchemaField"],
                                  "displayName": "Configuration",
                                  "name": "config",
                                  "schema": "string"
                              },
                              "response": {
                                  "@id": "<id>",
                                  "@type": ["SchemaField"],
                                  "displayName": "Response",
                                  "name": "response",
                                  "schema": "string"
                              },
                              "displayName": "Configure sensor",
                              "name": "sensorconfig"
                          }
                      ]
                  }
              }
          ],
          "displayName": "Sensor capability model"
      },
      "solutionModel": {
          "@id": "<id>",
          "@type": ["SolutionModel"],
          "cloudProperties": [
              {
                  "@id": "<id>",
                  "@type": ["CloudProperty"],
                  "displayName": "Install date",
                  "name": "installDate",
                  "schema": "dateTime",
                  "valueDetail": {
                      "@id": "<id>",
                      "@type": ["ValueDetail/DateTimeValueDetail"]
                  }
              }
          ]
      }
  }

資料格式變更通知

注意

此變更不會影響遙測資料流程資料格式。 只有裝置和裝置範本資料流程會受到影響。

如果您在預覽應用程式中已開啟 裝置裝置範本 串流的現有資料匯出,請在 2020 年 6 月 30日更新匯出。 此需求適用于匯出至 Azure Blob 儲存體、Azure 事件中樞和Azure 服務匯流排。

從 2020 年 2 月 3 日開始,啟用裝置和裝置範本的應用程式中的所有新匯出都會有上述資料格式。 在此日期之前建立的所有匯出都會保留在舊資料格式上,直到 2020 年 6 月 30 日為止,此時這些匯出會自動移轉至新的資料格式。 新的資料格式符合 IoT Central 公用 API 中的 裝置裝置屬性裝置範本 物件。

針對 裝置,舊資料格式和新資料格式之間的顯著差異包括:

  • @id 移除裝置時, deviceId 會重新命名為 id
  • provisioned 已新增 旗標以描述裝置的布建狀態
  • approved 已新增 旗標以描述裝置的核准狀態
  • properties 包括裝置和雲端屬性,符合公用 API 中的實體

針對 裝置範本,舊資料格式和新資料格式之間的顯著差異包括:

  • @id 裝置範本的 重新命名為 id
  • @type 裝置範本的 重新命名為 types ,而 現在是陣列

自 2020 年 2 月 3 日起淘汰的裝置 (格式)

{
  "@id":"<id-value>",
  "@type":"Device",
  "displayName":"Airbox",
  "data":{
    "$cloudProperties":{
        "Color":"blue"
    },
    "EnvironmentalSensor":{
      "thsensormodel":{
        "reported":{
          "value":"Neque quia et voluptatem veritatis assumenda consequuntur quod.",
          "$lastUpdatedTimestamp":"2019-09-30T20:35:43.8478978Z"
        }
      },
      "pm25sensormodel":{
        "reported":{
          "value":"Aut alias odio.",
          "$lastUpdatedTimestamp":"2019-09-30T20:35:43.8478978Z"
        }
      }
    },
    "urn_azureiot_DeviceManagement_DeviceInformation":{
      "totalStorage":{
        "reported":{
          "value":27900.9730905171,
          "$lastUpdatedTimestamp":"2019-09-30T20:35:43.8478978Z"
        }
      },
      "totalMemory":{
        "reported":{
          "value":4667.82916715811,
          "$lastUpdatedTimestamp":"2019-09-30T20:35:43.8478978Z"
        }
      }
    }
  },
  "instanceOf":"<template-id>",
  "deviceId":"<device-id>",
  "simulated":true
}

裝置範本 (格式自 2020 年 2 月 3 日)

{
  "@id":"<template-id>",
  "@type":"DeviceModelDefinition",
  "displayName":"Airbox",
  "capabilityModel":{
    "@id":"<id>",
    "@type":"CapabilityModel",
    "implements":[
      {
        "@id":"<id>",
        "@type":"InterfaceInstance",
        "name":"EnvironmentalSensor",
        "schema":{
          "@id":"<id>",
          "@type":"Interface",
          "comment":"Requires temperature and humidity sensors.",
          "description":"Provides functionality to report temperature, humidity. Provides telemetry, commands and read-write properties",
          "displayName":"Environmental Sensor",
          "contents":[
            {
              "@id":"<id>",
              "@type":"Telemetry",
              "description":"Current temperature on the device",
              "displayName":"Temperature",
              "name":"temp",
              "schema":"double",
              "unit":"Units/Temperature/celsius",
              "valueDetail":{
                "@id":"<id>",
                "@type":"ValueDetail/NumberValueDetail",
                "minValue":{
                  "@value":"50"
                }
              },
              "visualizationDetail":{
                "@id":"<id>",
                "@type":"VisualizationDetail"
              }
            },
            {
              "@id":"<id>",
              "@type":"Telemetry",
              "description":"Current humidity on the device",
              "displayName":"Humidity",
              "name":"humid",
              "schema":"integer"
            },
            {
              "@id":"<id>",
              "@type":"Telemetry",
              "description":"Current PM2.5 on the device",
              "displayName":"PM2.5",
              "name":"pm25",
              "schema":"integer"
            },
            {
              "@id":"<id>",
              "@type":"Property",
              "description":"T&H Sensor Model Name",
              "displayName":"T&H Sensor Model",
              "name":"thsensormodel",
              "schema":"string"
            },
            {
              "@id":"<id>",
              "@type":"Property",
              "description":"PM2.5 Sensor Model Name",
              "displayName":"PM2.5 Sensor Model",
              "name":"pm25sensormodel",
              "schema":"string"
            }
          ]
        }
      },
      {
        "@id":"<id>",
        "@type":"InterfaceInstance",
        "name":"urn_azureiot_DeviceManagement_DeviceInformation",
        "schema":{
          "@id":"<id>",
          "@type":"Interface",
          "displayName":"Device information",
          "contents":[
            {
              "@id":"<id>",
              "@type":"Property",
              "comment":"Total available storage on the device in kilobytes. Ex. 20480000 kilobytes.",
              "displayName":"Total storage",
              "name":"totalStorage",
              "displayUnit":"kilobytes",
              "schema":"long"
            },
            {
              "@id":"<id>",
              "@type":"Property",
              "comment":"Total available memory on the device in kilobytes. Ex. 256000 kilobytes.",
              "displayName":"Total memory",
              "name":"totalMemory",
              "displayUnit":"kilobytes",
              "schema":"long"
            }
          ]
        }
      }
    ],
    "displayName":"AAEONAirbox52"
  },
  "solutionModel":{
    "@id":"<id>",
    "@type":"SolutionModel",
    "cloudProperties":[
      {
        "@id":"<id>",
        "@type":"CloudProperty",
        "displayName":"Color",
        "name":"Color",
        "schema":"string",
        "valueDetail":{
          "@id":"<id>",
          "@type":"ValueDetail/StringValueDetail"
        },
        "visualizationDetail":{
          "@id":"<id>",
          "@type":"VisualizationDetail"
        }
      }
    ]
  }
}

下一步

既然您已瞭解如何將資料匯出至Azure 事件中樞、Azure 服務匯流排和 Azure Blob 儲存體,請繼續進行下一個步驟: