阿里云物聯(lián)網(wǎng)平臺(tái) - 物模型

阿里云物聯(lián)網(wǎng)平臺(tái) - 物模型

物模型介紹

物模型是云平臺(tái)為物聯(lián)網(wǎng)產(chǎn)品定義的數(shù)據(jù)模型,用于描述產(chǎn)品的功能。將產(chǎn)品抽象成數(shù)據(jù)的集合,方便云端進(jìn)行控制。

物模型從屬性、服務(wù)事件三個(gè)維度,分別描述了該實(shí)體是什么、能做什么、可以對(duì)外提供哪些信息。定義了物模型的這三個(gè)維度,即完成了產(chǎn)品功能的定義。

功能類型 說明
屬性(Property) 設(shè)備可讀取和設(shè)置的能力,類似于一個(gè)變量。一般用于描述設(shè)備運(yùn)行時(shí)的狀態(tài),如環(huán)境監(jiān)測(cè)設(shè)備所讀取的當(dāng)前環(huán)境溫度等。屬性支持 GETSET 請(qǐng)求方式。應(yīng)用系統(tǒng)可發(fā)起對(duì)屬性的讀取和設(shè)置請(qǐng)求。
服務(wù)(Service) 設(shè)備可被外部調(diào)用的能力或方法,類似于一個(gè)函數(shù),可設(shè)置輸入?yún)?shù)輸出參數(shù)。產(chǎn)品提供了什么功能供云端調(diào)用。相比于屬性,服務(wù)可通過一條指令實(shí)現(xiàn)更復(fù)雜的業(yè)務(wù)邏輯,如執(zhí)行某項(xiàng)特定的任務(wù)。
事件(Event) 設(shè)備運(yùn)行時(shí),主動(dòng)上報(bào)給云端的事件。事件一般包含需要被外部感知和處理的通知信息,可包含多個(gè)輸出參數(shù)。例如,某項(xiàng)任務(wù)完成的信息,或者設(shè)備發(fā)生故障或告警時(shí)的溫度等,事件可以被訂閱和推送。

物模型TSL格式

TSL 格式是一個(gè) JSON 格式的文件,完整的 TSL 格式可以參考:阿里云物模型

嵌入式端開發(fā)固件往往只需要關(guān)注少數(shù)幾個(gè)參數(shù),可以在產(chǎn)品的功能定義頁(yè)面,單擊物模型TSL精簡(jiǎn)物模型里面查看。

需要關(guān)注的有 "properties","events","services",在 JSON 格式里,這三者都是數(shù)組,分別存儲(chǔ)了該物模型的數(shù)據(jù),事件和服務(wù),在 C-SDK 里也就分別是 IOT_Linkkit_Report() 上報(bào)屬性,IOT_Linkkit_TriggerEvent() 觸發(fā)事件和注冊(cè)為 ITE_SERVICE_REQUEST 的回調(diào)函數(shù)。

屬性上報(bào)

在上報(bào)屬性時(shí),只需要關(guān)注 "identifier" 名稱對(duì)應(yīng)的值(字符串),此時(shí)表示該屬性在產(chǎn)品下的唯一標(biāo)識(shí)。例如一個(gè)精簡(jiǎn)物模型屬性為:

{
  "properties": [
    {
      "identifier": "count",
      "dataType": {
        "type": "int"
      }
    }
  ]
}

則上報(bào)的數(shù)據(jù)只需要為 {"count":10} 即可,需滿足 JSON 字符串的格式,字符串內(nèi)有一個(gè)名稱/值對(duì),名稱為 "count"(物模型里 "identifier" 的值),值對(duì)為 10(滿足物模型里數(shù)據(jù)類型為 int 的要求)。

事件觸發(fā)

觸發(fā)事件需要關(guān)注 "identifier" 名稱對(duì)應(yīng)的值(字符串),表示該事件在產(chǎn)品下的唯一標(biāo)識(shí);還需要關(guān)注 "outputData",表示上報(bào)事件的輸出值。一個(gè)精簡(jiǎn)物模型例子如下:

{
  "events": [
    {
      "outputData": [
        {
          "identifier": "power",
          "dataType": {
            "type": "int"
          }
        },
        {
          "identifier": "power_style",
          "dataType": {
            "type": "enum"
          }
        }
      ],
      "identifier": "power_state",
      "type": "info"
    }
  ]
}

"outputData" 數(shù)組的使用與屬性上報(bào)一致,這里就不介紹了。

服務(wù)調(diào)用

服務(wù)調(diào)用需要同時(shí)關(guān)注 "identifier","inputData" 和 "outputData" 這三個(gè)名稱,分別表示該服務(wù)在產(chǎn)品下的唯一標(biāo)識(shí),服務(wù)的輸入?yún)?shù),服務(wù)的輸出參數(shù)。與函數(shù)調(diào)用有輸入值和輸出值類似,服務(wù)調(diào)用也有這些特征。

物模型數(shù)據(jù)校驗(yàn)

物模型數(shù)據(jù)校驗(yàn)方式目前有兩種,弱校驗(yàn)免校驗(yàn)

類型 說明
弱校驗(yàn) 只校驗(yàn)設(shè)備數(shù)據(jù)的 idetifier 和 dataType 字段,不校驗(yàn)其他字段,流轉(zhuǎn)全量數(shù)據(jù)。
免校驗(yàn) 對(duì)上報(bào)的數(shù)據(jù)不進(jìn)行校驗(yàn),流轉(zhuǎn)全量數(shù)據(jù)。

也就是說,弱校驗(yàn)針對(duì)產(chǎn)品設(shè)備的上報(bào)數(shù)據(jù),只要 idetifier 是一致的,且 dataType 字段滿足要求,就接收該數(shù)據(jù),并且在其他云端產(chǎn)品流轉(zhuǎn)。

設(shè)備與云端交互過程

為什么云端可以設(shè)置和獲取接入設(shè)備的屬性呢?為什么接入設(shè)備可以上報(bào)事件給云端呢?又為什么云端可以調(diào)用接入設(shè)備提供的服務(wù)呢?這就是這一小節(jié)解釋的內(nèi)容。

物模型基于 MQTT 協(xié)議,MQTT 協(xié)議的介紹不在此處展開。

云端定義了一系列的 Topic,在設(shè)備接入云端時(shí),C-SDK 向 MQTT broker 訂閱了一些的 Topic,而云端需要與設(shè)備交互時(shí),就向 MQTT broker 發(fā)布相應(yīng)的 Topic,這樣就完成了交互過程。同理,云端也會(huì)訂閱一些 Topic,設(shè)備可以向這些 Topic 發(fā)布消息。

接入設(shè)備端訂閱發(fā)布的 Topic 列表如下:

功能 Topic類 操作權(quán)限 描述
屬性上報(bào) /sys/${productKey}/${deviceName}/thing/event/property/post 發(fā)布 設(shè)備屬性上報(bào)
/sys/${productKey}/${deviceName}/thing/event/property/post_reply 訂閱 云端響應(yīng)屬性上報(bào)
屬性設(shè)置 /sys/${productKey}/${deviceName}/thing/service/property/set 訂閱 設(shè)備屬性設(shè)置
事件上報(bào) /sys/${productKey}/${deviceName}/thing/event/${tsl.event.identifier}/post 發(fā)布 設(shè)備事件上報(bào)
/sys/${productKey}/${deviceName}/thing/event/${tsl.event.identifier}/post_reply 訂閱 云端響應(yīng)事件上報(bào)
服務(wù)調(diào)用 /sys/${productKey}/${deviceName}/thing/service/${tsl.service.identifier} 訂閱 設(shè)備服務(wù)調(diào)用
/sys/${productKey}/${deviceName}/thing/service/${tsl.service.identifier}_reply 發(fā)布 設(shè)備端響應(yīng)服務(wù)調(diào)用

其中 ${productKey} 會(huì)替換為實(shí)際的產(chǎn)品名,${deviceName} 會(huì)替換為實(shí)際的設(shè)備名,${tsl.event.identifier} 是事件的標(biāo)識(shí)符,${tsl.service.identifier} 是服務(wù)的標(biāo)識(shí)符,最大限度地保證了 Topic 的唯一性。

這些 Topic 的作用在后面用時(shí)序來描述。

屬性上報(bào)與設(shè)置

事件上報(bào)

服務(wù)調(diào)用

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容