本文介紹裝置使用物模型通訊常見相關問題及解決方案。
如何添加物模型功能?
裝置的物模型屬性、事件和服務需要在該裝置所屬產品下進行添加和配置。您可通過以下方式定義物模型:
調用介面CreateThingModel,為指定產品添加物模型功能。
大量匯入物模型,TSL檢驗失敗怎麼辦?
問題現象
如下圖所示,在物聯網平台為產品匯入物模型過程,可能出現如下兩種校正失敗現象。
解決方案
對應上圖①、②兩種校正失敗現象,解決方案如下:
①:對物模型檔案進行JSON格式化校正,完成修正。
②:單擊下載查看,擷取errors.txt檔案,定位問題及原因,完成修正。
errors.txt檔案的詳細說明,請參見如下樣本。
物模型檔案樣本:
{ "schema":"https://iotx-tsl.oss-ap-southeast-1.aliyuncs.com/schema.json", "profile":{ "productKey":"a1Jk***" }, "services":[], "properties": 1, "events": [], "functionBlockId": "模組mtest", "functionBlockName": "自訂模組1" }
下載的errors.txt檔案:
[ { "path": [ "properties" ], "property": "instance.properties", "message": "is not of a type(s) array", "schema": { "type": "array", "items": { "$ref": "#/definitions/propertyDefinition" } }, "instance": 1, "name": "type", "argument": [ "array" ], "stack": "instance.properties is not of a type(s) array" }, { "path": [ "functionBlockId" ], "property": "instance.functionBlockId", "message": "does not match pattern \"^[_a-zA-Z0-9]{1,30}$\"", "schema": { "type": "string", "pattern": "^[_a-zA-Z0-9]{1,30}$" }, "instance": "模組mtest", "name": "pattern", "argument": "^[_a-zA-Z0-9]{1,30}$", "stack": "instance.functionBlockId does not match pattern \"^[_a-zA-Z0-9]{1,30}$\"" } ]
參數
說明
path
校正後,出錯的路徑。本文樣本校正出2處錯誤:
// properties配置錯誤,不是數組 "path": [ "properties" ] // functionBlockId含有中文 "path": [ "functionBlockId" ]
property
path下不合規則的具體對象。
例如
"path": ["functionBlockId" ]
中的instance.functionBlockId
。message
具體的錯誤提示資訊。
例如
"path": ["functionBlockId" ]
中,提示property的錯誤為does not match pattern \"^[_a-zA-Z0-9]{1,30}$\"
。schema
校正的規則名稱及對應內容。
例如
"path": ["functionBlockId" ]
中的規則type
和pattern
。有關規則定義的詳細內容,請參見schama。
instance
校正的具體對象。
例如
"path": ["functionBlockId" ]
中,校正物模型檔案中"functionBlockId": "模組mtest"
的內容。name
校正未通過規則的名稱。
例如
"path": ["functionBlockId" ]
中,校正對象模組mtest
不符合規則pattern
。argument
校正未通過規則的內容。
例如
"path": ["functionBlockId" ]
中,不符合規則pattern
的定義為^[_a-zA-Z0-9]{1,30}$
。stack
堆棧資訊。由property和message內容組合的完整錯誤提示資訊。
更多資訊,請參見校正工具jsonschema的說明。
物模型的屬性上報、歷史資料上報、批量屬性上報有什麼區別?
功能區別
功能 | 區別 |
物模型屬性上報 | 上報裝置屬性快照資料。時間戳記可選:
|
物模型歷史資料上報 | 以時間為維度,上報同一時間點下不同屬性的值。需攜帶時間戳記。 單次資料上報中,支援上報多個時間點下不同屬性的資料。 |
物模型批量屬性上報 | 以屬性為維度,上報同一屬性下不同時間點的值。需攜帶時間戳記。 單次資料上報中,支援上報多個屬性下不同時間點的資料。 |
物模型的屬性上報、歷史資料上報、批量屬性上報到物聯網平台後,均會根據時間戳記形成歷史資料。
通訊Topic和資料格式的區別
樣本
以裝置的溫度資料為例:
物模型屬性上報:
裝置按照下表所示,從左至右,攜帶時間戳記依次上報快照資料。
13:00
14:00
15:00
15:10
60
70
80
90
裝置再上報一個快照值100,不同上報方式更新資料如下:
不攜帶時間戳記時,預設為目前時間(假設15:30)。此時,物聯網平台控制台顯示的快照值是15:30的100;歷史資料列表中最新資料是15:30的100。
攜帶時間戳記時,例如15:00,更新15:00的資料為100。此時,物聯網平台控制台顯示的快照值是15:00的100;歷史資料列表中最新資料還是15:10的90。
物模型歷史資料上報:
裝置同時上報以下歷史資料。
13:00
14:00
15:00
15:10
60
70
80
90
裝置再同時上報以下歷史資料。
13:10
14:10
100
200
此時,物聯網平台控制台顯示的快照值為13:10的100或14:10的200(以最後寫入資料庫的值為準);歷史資料列表中最新資料還是15:10的90。
通過自訂Topic上報資料後,物模型資料為什麼沒有更新?
裝置物模型資料需通過物模型通訊Topic上報,詳細說明,請參見Topic分類和通訊說明。
如何擷取裝置上報的物模型資料?
您可通過以下方式擷取裝置物模型資料:
服務端訂閱:使用物聯網平台的服務端訂閱功能,訂閱裝置上報訊息類型。物聯網平台根據您設定的訂閱,將產品下所有裝置的該類型訊息流程轉至您的伺服器。支援以下兩種方式的服務端訂閱:
AMQP服務端訂閱:使用AMQP SDK接收物聯網平台轉寄的裝置訊息。
輕量訊息佇列(原 MNS)服務端訂閱:使用Simple Message Queue (formerly MNS) SDK接收物聯網平台轉寄到Simple Message Queue (formerly MNS)的裝置訊息。
雲產品流轉:使用規則引擎的雲產品流轉功能,通過資料流轉規則將指定裝置資料流轉到Simple Message Queue (formerly MNS)、雲資料庫RDS、Table Store、Function Compute、時間序列資料庫TSDB、雲原生多模資料庫Lindorm、DataHub、訊息佇列RocketMQ等雲產品中。詳細內容,請參見雲產品流轉(舊版)和雲產品流轉(新版)。
雲端API:
API
說明
查詢指定裝置的所有屬性快照。
查詢指定裝置本身上報的原始屬性(通過和未通過物模型校正的所有屬性)快照。
查詢指定裝置本身上報的原始屬性(通過和未通過物模型校正的所有屬性)記錄。
查詢指定裝置本身上報的原始事件(通過和未通過物模型校正的所有事件)記錄。
查詢指定裝置本身調用的原始服務(通過和未通過物模型校正的所有服務)記錄。
查詢指定裝置的期望屬性值。
查詢指定裝置在指定時間段內,單個屬性的資料。
查詢指定裝置在指定時間段內,多個屬性的資料。
查詢指定裝置的事件記錄。
查詢指定裝置的服務調用記錄。
物聯網平台控制台為什麼不展示裝置上報的物模型資料?
裝置上報物模型資料時,物聯網平台按設定的資料校正方式,根據物模型定義進行資料校正。校正不通過或免校正物模型資料,不會在物聯網平台控制台對應裝置的裝置詳情頁面中物模型資料頁簽下展示。詳細說明,請參見校正物模型資料。
您需在建立產品時,設定資料校正方式。具體操作,請參見建立產品。
物聯網平台下發物模型屬性設定、期望值設定指令成功後,物模型資料運行狀態沒有更新,怎麼辦?
您可以從以下幾個方面進行排查解決:
裝置端:確保裝置端已經正常串連到阿里雲物聯網平台。裝置接入,請參見下載裝置端SDK。
重要如果下發設定裝置屬性指令成功,只表示物聯網平台雲端下發屬性佈建要求成功,不保證裝置端執行了該請求。所以裝置端SDK成功響應雲端設定裝置屬性值的請求後,需上報對應屬性值,裝置屬性值才能真正設定成功。
您可通過物聯網平台的裝置模擬器或MQTT.fx工具類比裝置線上後,使用線上調試功能調試線上裝置的通訊功能。具體內容,請參見:
物聯網平台雲端:
您可以登入物聯網平台控制台,在對應執行個體下的監控營運 > Log Service > 雲端作業記錄頁面,查看對應的日誌,檢查裝置是否接收訊息成功。具體操作,請參見雲端作業記錄。
控制台無法顯示物模型溫度資料,如何讓資料在物模型中顯示?
物模型屬性沒有定義或上報的資料格式不符合要求,物模型資料都會無法正常顯示。
實現物模型顯示的流程如下:
在裝置所屬產品下定義物模型屬性:溫度。具體操作,請參見添加物模型。
裝置端通過物模型通訊Topic,按照對應資料格式上報屬性資料。裝置端功能開發,請參見裝置接入。
如果建立產品時,資料格式選擇ICA標準資料格式(Alink JSON),裝置端需要通過Topic:
/sys/${productKey}/${deviceName}/thing/event/property/post
,按照如下格式上報:{ "id": "123", "version": "1.0", "sys":{ "ack":0 }, "params": { "temperature": { "value": 35, "time": 1524448722000 } }, "method": "thing.event.property.post" }
欄位說明,請參見裝置上報屬性。
如果建立產品時,資料格式選擇透傳/自訂,需要配置物模型訊息解析。
裝置端需要通過Topic:
/sys/${productKey}/${deviceName}/thing/model/up_raw
,透傳16進位格式的資料。詳細說明,請參見裝置上報屬性和物模型訊息解析。
產品自訂物模型功能,有快速匯入方法嗎?
有。物聯網平台提供大量新增物模型功能的方法:
大量新增物模型:在物聯網平台控制台,批量拷貝其他產品的物模型功能,或匯入物模型TSL檔案。
CreateThingModel:使用雲端SDK調用物聯網平台雲端API,通過ThingModelJson新增物模型功能。ThingModelJson資料格式說明,請參見ThingModelJson資料說明。