阿里云物聯(lián)網(wǎng)平臺 - 物模型
物模型介紹
物模型是云平臺為物聯(lián)網(wǎng)產品定義的數(shù)據(jù)模型败砂,用于描述產品的功能。將產品抽象成數(shù)據(jù)的集合魏铅,方便云端進行控制昌犹。
物模型從屬性、服務和事件三個維度览芳,分別描述了該實體是什么斜姥、能做什么、可以對外提供哪些信息沧竟。定義了物模型的這三個維度铸敏,即完成了產品功能的定義。
功能類型 | 說明 |
---|---|
屬性(Property) | 設備可讀取和設置的能力悟泵,類似于一個變量杈笔。一般用于描述設備運行時的狀態(tài),如環(huán)境監(jiān)測設備所讀取的當前環(huán)境溫度等糕非。屬性支持 GET 和 SET 請求方式蒙具。應用系統(tǒng)可發(fā)起對屬性的讀取和設置請求。 |
服務(Service) | 設備可被外部調用的能力或方法朽肥,類似于一個函數(shù)店量,可設置輸入?yún)?shù)和輸出參數(shù)。產品提供了什么功能供云端調用鞠呈。相比于屬性融师,服務可通過一條指令實現(xiàn)更復雜的業(yè)務邏輯,如執(zhí)行某項特定的任務蚁吝。 |
事件(Event) | 設備運行時旱爆,主動上報給云端的事件。事件一般包含需要被外部感知和處理的通知信息窘茁,可包含多個輸出參數(shù)怀伦。例如,某項任務完成的信息山林,或者設備發(fā)生故障或告警時的溫度等房待,事件可以被訂閱和推送。 |
物模型TSL格式
TSL 格式是一個 JSON 格式的文件,完整的 TSL 格式可以參考:阿里云物模型 桑孩。
嵌入式端開發(fā)固件往往只需要關注少數(shù)幾個參數(shù)拜鹤,可以在產品的功能定義頁面,單擊物模型TSL流椒,精簡物模型里面查看敏簿。
需要關注的有 "properties","events"宣虾,"services"惯裕,在 JSON 格式里,這三者都是數(shù)組绣硝,分別存儲了該物模型的數(shù)據(jù)蜻势,事件和服務,在 C-SDK 里也就分別是 IOT_Linkkit_Report()
上報屬性鹉胖,IOT_Linkkit_TriggerEvent()
觸發(fā)事件和注冊為 ITE_SERVICE_REQUEST
的回調函數(shù)握玛。
屬性上報
在上報屬性時,只需要關注 "identifier" 名稱對應的值(字符串)次员,此時表示該屬性在產品下的唯一標識。例如一個精簡物模型屬性為:
{
"properties": [
{
"identifier": "count",
"dataType": {
"type": "int"
}
}
]
}
則上報的數(shù)據(jù)只需要為 {"count":10}
即可王带,需滿足 JSON 字符串的格式淑蔚,字符串內有一個名稱/值對,名稱為 "count"(物模型里 "identifier" 的值)愕撰,值對為 10(滿足物模型里數(shù)據(jù)類型為 int 的要求)刹衫。
事件觸發(fā)
觸發(fā)事件需要關注 "identifier" 名稱對應的值(字符串),表示該事件在產品下的唯一標識搞挣;還需要關注 "outputData"带迟,表示上報事件的輸出值。一個精簡物模型例子如下:
{
"events": [
{
"outputData": [
{
"identifier": "power",
"dataType": {
"type": "int"
}
},
{
"identifier": "power_style",
"dataType": {
"type": "enum"
}
}
],
"identifier": "power_state",
"type": "info"
}
]
}
"outputData" 數(shù)組的使用與屬性上報一致囱桨,這里就不介紹了仓犬。
服務調用
服務調用需要同時關注 "identifier","inputData" 和 "outputData" 這三個名稱舍肠,分別表示該服務在產品下的唯一標識搀继,服務的輸入?yún)?shù),服務的輸出參數(shù)翠语。與函數(shù)調用有輸入值和輸出值類似叽躯,服務調用也有這些特征。
物模型數(shù)據(jù)校驗
物模型數(shù)據(jù)校驗方式目前有兩種肌括,弱校驗和免校驗点骑。
類型 | 說明 |
---|---|
弱校驗 | 只校驗設備數(shù)據(jù)的 idetifier 和 dataType 字段,不校驗其他字段,流轉全量數(shù)據(jù)黑滴。 |
免校驗 | 對上報的數(shù)據(jù)不進行校驗憨募,流轉全量數(shù)據(jù)。 |
也就是說跷跪,弱校驗針對產品設備的上報數(shù)據(jù)馋嗜,只要 idetifier 是一致的,且 dataType 字段滿足要求吵瞻,就接收該數(shù)據(jù)葛菇,并且在其他云端產品流轉。
設備與云端交互過程
為什么云端可以設置和獲取接入設備的屬性呢橡羞?為什么接入設備可以上報事件給云端呢眯停?又為什么云端可以調用接入設備提供的服務呢?這就是這一小節(jié)解釋的內容卿泽。
物模型基于 MQTT 協(xié)議莺债,MQTT 協(xié)議的介紹不在此處展開。
云端定義了一系列的 Topic签夭,在設備接入云端時齐邦,C-SDK 向 MQTT broker 訂閱了一些的 Topic,而云端需要與設備交互時第租,就向 MQTT broker 發(fā)布相應的 Topic措拇,這樣就完成了交互過程。同理慎宾,云端也會訂閱一些 Topic丐吓,設備可以向這些 Topic 發(fā)布消息。
接入設備端訂閱發(fā)布的 Topic 列表如下:
功能 | Topic類 | 操作權限 | 描述 |
---|---|---|---|
屬性上報 | /sys/${productKey}/${deviceName}/thing/event/property/post | 發(fā)布 | 設備屬性上報 |
/sys/${productKey}/${deviceName}/thing/event/property/post_reply | 訂閱 | 云端響應屬性上報 | |
屬性設置 | /sys/${productKey}/${deviceName}/thing/service/property/set | 訂閱 | 設備屬性設置 |
事件上報 | /sys/${productKey}/${deviceName}/thing/event/${tsl.event.identifier}/post | 發(fā)布 | 設備事件上報 |
/sys/${productKey}/${deviceName}/thing/event/${tsl.event.identifier}/post_reply | 訂閱 | 云端響應事件上報 | |
服務調用 | /sys/${productKey}/${deviceName}/thing/service/${tsl.service.identifier} | 訂閱 | 設備服務調用 |
/sys/${productKey}/${deviceName}/thing/service/${tsl.service.identifier}_reply | 發(fā)布 | 設備端響應服務調用 |
其中 ${productKey} 會替換為實際的產品名趟据,${deviceName} 會替換為實際的設備名券犁,${tsl.event.identifier} 是事件的標識符,${tsl.service.identifier} 是服務的標識符汹碱,最大限度地保證了 Topic 的唯一性粘衬。
這些 Topic 的作用在后面用時序來描述。