若要從IoT中樞的裝置更新將更新部署到裝置,您必須先將該更新匯入裝置更新服務。 本文會概述一些關於匯入更新所需要了解的重要概念。
匯入清單
匯入指令清單是 JSON 檔案,可定義您要匯入之更新的重要資訊。 您會在匯入程式期間提交匯入指令清單和相關聯的更新檔案或檔案(例如韌體更新套件)。 匯入指令清單中定義的元數據用於導入更新。 有些元數據也會在部署期間使用 ,例如,驗證更新是否已正確安裝。
例如:
{
"updateId": {
"provider": "Contoso",
"name": "Toaster",
"version": "1.0"
},
"isDeployable": false,
"compatibility": [
{
"deviceManufacturer": "Contoso",
"deviceModel": "Toaster"
}
],
"instructions": {
"steps": [
{
"handler": "microsoft/swupdate:1",
"files": [
"firmware.swu"
],
"handlerProperties": {
"installedCriteria": "1.0"
}
}
]
},
"files": [
{
"filename": "firmware.swu",
"sizeInBytes": 7558,
"hashes": {
"sha256": "/CD7Sn6fiknWa3NgcFjGlJ+ccA81s1QAXX4oo5GHiFA="
}
}
],
"createdDateTime": "2022-01-19T06:23:52.6996916Z",
"manifestVersion": "4.0"
}
匯入清單包含數個專案,這些專案代表IoT中樞裝置更新的重要概念。 本節將概述這些專案。 如需完整匯入架構的相關信息,請參閱 匯入指令清單 JSON 架構。
更新身分識別
更新身份識別碼或 updateId 是在 IoT Hub 的裝置更新中用來辨識更新的唯一標識碼。 它由三個部分組成:
- 提供者:正在建立或直接負責更新的實體。 它通常是公司名稱。
- 名稱:更新類別的識別碼。 它通常是裝置類別或型號名稱。
- 版本:版本號碼,區分此更新與具有相同提供者和名稱的其他版本號碼。
例如:
{
"updateId": {
"provider": "Contoso",
"name": "Toaster",
"version": "1.0"
}
}
備註
UpdateId 只會由裝置更新服務使用,而且可能與裝置上實際軟體元件的身分識別不同。
相容性
相容性 會定義可安裝更新的裝置準則。 其中包含裝置屬性,這些屬性由裝置回報,並以一組任意的鍵值對呈現。 只有具有相符屬性的裝置才有資格進行部署。 更新可能會與多個裝置類別相容,因為擁有多套裝置屬性。
以下是一個更新範例,只能部署至將 Contoso 和 Toaster 回報為其裝置製造商和型號之裝置。
{
"compatibility": [
{
"deviceManufacturer": "Contoso",
"deviceModel": "Toaster"
}
]
}
操作說明
指示部分包含安裝更新之裝置代理程式的必要資訊或步驟。 最簡單的更新包含單一內嵌步驟。 此步驟會使用向裝置代理程式註冊的 處理程式 來執行包含的承載檔案:
{
"instructions": {
"steps": [
{
"handler": "microsoft/swupdate:1",
"files": [
"contoso.toaster.1.0.swu"
]
}
]
}
}
小提示
handler 相當於 updateType 在匯入指令清單 3.0 版或更新版本中。
更新可能包含多個步驟:
{
"instructions": {
"steps": [
{
"description": "pre-install script",
"handler": "microsoft/script:1",
"handlerProperties": {
"arguments": "--pre-install"
},
"files": [
"configure.sh"
]
},
{
"description": "firmware package",
"handler": "microsoft/swupdate:1",
"files": [
"contoso.toaster.1.0.swu"
]
}
]
}
}
更新可能包含 參考 步驟,指示裝置代理程式使用自己的匯入指令清單來安裝另一個更新,並建立父代和子更新關聯性。 例如,烤麵包機的更新可包含兩個子更新:
{
"instructions": {
"steps": [
{
"type": "reference",
"updateId": {
"provider": "Contoso",
"name": "Toaster.HeatingElement",
"version": "1.0"
}
},
{
"type": "reference",
"updateId": {
"provider": "Contoso",
"name": "Toaster.Sensors",
"version": "1.0"
}
}
]
}
}
備註
更新可能包含任何內嵌步驟和參考步驟的組合。
檔案
[檔案] 元件包含更新承載檔案的元數據,例如其名稱、大小和哈希。 IoT 中樞的裝置更新會在匯入程式期間使用此元數據進行完整性驗證。 然後,相同的資訊會轉送至裝置代理程式,以在安裝之前重複完整性驗證。
備註
只包含參考步驟的更新在父更新中沒有任何更新承載檔案。
建立匯入資訊清單
您可以使用任何文字編輯器來建立匯入指令清單 JSON 檔案。 另外還有範例腳本,可讓您以程序設計方式在 GitHub 上的 Azure/iot-hub-device-update 中建立匯入指令清單。
這很重要
透過 Azure 入口網站匯入時,匯入指令清單 JSON 檔名必須以 .importmanifest.json 結尾。
小提示
使用 Visual Studio Code 在建立匯入指令清單時啟用自動完成和 JSON 架構驗證。
匯入更新的限制
每個 IoT Hub 裝置更新實例都會強制執行某些限制。 如果您尚未檢閱這些限制,請參閱裝置更新限制。