本文以解析上、下行屬性數(shù)據(jù)的腳本為例,介紹為數(shù)據(jù)格式為透?jìng)?自定義的產(chǎn)品下的物模型數(shù)據(jù)解析腳本編寫(xiě)方法。

步驟一:編輯腳本

  1. 生活物聯(lián)網(wǎng)平臺(tái),創(chuàng)建產(chǎn)品。
    創(chuàng)建產(chǎn)品操作指導(dǎo),請(qǐng)參見(jiàn)創(chuàng)建產(chǎn)品
    說(shuō)明 數(shù)據(jù)格式選擇為透?jìng)?自定義
  2. 為該產(chǎn)品定義物模型。
    自定義屬性的操作請(qǐng)參見(jiàn)新增自定義功能

    本示例中定義了以下三個(gè)屬性。

    標(biāo)識(shí)符(identifer) 數(shù)據(jù)類型 取值范圍 讀寫(xiě)類型
    prop_float 浮點(diǎn)單精度 float -100~100 讀寫(xiě)
    prop_int16 整數(shù)型 int32 -100~100 讀寫(xiě)
    prop_bool 布爾型 bool 0:開(kāi);1:關(guān) 讀寫(xiě)

    數(shù)據(jù)解析腳本將根據(jù)這里定義的物模型來(lái)編寫(xiě),用于解析上下行物模型數(shù)據(jù)。

  3. 在設(shè)備通信協(xié)議中做如下定義。
    表 1. 設(shè)備上報(bào)數(shù)據(jù)請(qǐng)求
    字段 字節(jié)數(shù)
    幀類型 1字節(jié)
    請(qǐng)求ID 4字節(jié)
    屬性prop_int16 2字節(jié)
    屬性prop_bool 1字節(jié)
    屬性prop_float 4字節(jié)
    表 2. 設(shè)備上報(bào)數(shù)據(jù)響應(yīng)
    字段 字節(jié)數(shù)
    幀類型 1字節(jié)
    請(qǐng)求ID 4字節(jié)
    結(jié)果code 1字節(jié)
    表 3. 設(shè)置屬性請(qǐng)求
    字段 字節(jié)數(shù)
    幀類型 1字節(jié)
    請(qǐng)求ID 4字節(jié)
    屬性prop_int16 2字節(jié)
    屬性prop_bool 1字節(jié)
    屬性prop_float 4字節(jié)
    表 4. 屬性設(shè)置響應(yīng)
    字段 字節(jié)數(shù)
    幀類型 1字節(jié)
    請(qǐng)求ID 4字節(jié)
    結(jié)果code 1字節(jié)
  4. 編寫(xiě)腳本。
    1. 產(chǎn)品頁(yè),單擊產(chǎn)品對(duì)應(yīng)的查看
    2. 產(chǎn)品詳情頁(yè),選擇數(shù)據(jù)解析頁(yè)簽。
    3. 選擇腳本語(yǔ)言,然后在編輯腳本下的輸入框中輸入腳本。

      目前支持兩種腳本語(yǔ)言:JavaScript(ECMAScript 5)和Python 2.7。

      腳本中需定義調(diào)用以下兩個(gè)函數(shù),分別用于解析上、下行物模型數(shù)據(jù)。

      • 將Alink JSON格式數(shù)據(jù)轉(zhuǎn)為設(shè)備自定義數(shù)據(jù)格式的函數(shù):
        • JavaScript(ECMAScript 5):protocolToRawData
        • Python 2.7:protocol_to_raw_data
        • PHP 7.2:protocolToRawData
      • 將設(shè)備自定義數(shù)據(jù)格式轉(zhuǎn)Alink JSON格式數(shù)據(jù)的函數(shù):
        • JavaScript(ECMAScript 5):rawDataToProtocol
        • Python 2.7:raw_data_to_protocol
        • PHP 7.2:rawDataToProtocol

      完整的示例腳本Demo,請(qǐng)參見(jiàn)JavaScript腳本示例Python腳本示例PHP腳本示例

步驟二:在線測(cè)試腳本

腳本編輯完成后,在模擬輸入下,選擇模擬類型,輸入模擬數(shù)據(jù)在線測(cè)試腳本。

  • 模擬解析設(shè)備上報(bào)的屬性數(shù)據(jù)。
    選擇模擬類型為設(shè)備上報(bào)數(shù)據(jù),輸入以下模擬的設(shè)備上報(bào)數(shù)據(jù),然后單擊執(zhí)行
    說(shuō)明 以下傳入?yún)?shù)模擬數(shù)據(jù)僅適用于JavaScript腳本,Python腳本的傳入?yún)?shù)模擬數(shù)據(jù)請(qǐng)參見(jiàn)Python腳本示例,PHP腳本的傳入?yún)?shù)模擬數(shù)據(jù)請(qǐng)參見(jiàn)PHP腳本示例
    0x00002233441232013fa00000

    數(shù)據(jù)解析引擎會(huì)按照腳本規(guī)則,將透?jìng)鲾?shù)據(jù)轉(zhuǎn)換為JSON格式數(shù)據(jù)。

    單擊運(yùn)行結(jié)果,查看解析結(jié)果。

    {
        "method": "thing.event.property.post", 
        "id": "2241348", 
        "params": {
            "prop_float": 1.25, 
            "prop_int16": 4658, 
            "prop_bool": 1
        }, 
        "version": "1.0"
    }
  • 模擬解析物聯(lián)網(wǎng)平臺(tái)下發(fā)的返回結(jié)果數(shù)據(jù)。

    選擇模擬類型為設(shè)備接收數(shù)據(jù),輸入以下JSON格式數(shù)據(jù),然后單擊執(zhí)行

    {
      "id": "12345",
      "version": "1.0",
      "code": 200,
      "method": "thing.event.property.post",
      "data": {}
    }

    數(shù)據(jù)解析引擎會(huì)將JSON格式數(shù)據(jù)轉(zhuǎn)換為以下數(shù)據(jù)。

    0x0200003039c8
  • 模擬解析物聯(lián)網(wǎng)平臺(tái)下發(fā)的屬性設(shè)置數(shù)據(jù)。

    選擇模擬類型為設(shè)備接收數(shù)據(jù),輸入以下JSON格式數(shù)據(jù),然后單擊執(zhí)行

    {
        "method": "thing.service.property.set", 
        "id": "12345", 
        "version": "1.0", 
        "params": {
            "prop_float": 123.452, 
            "prop_int16": 333, 
            "prop_bool": 1
        }
    }

    數(shù)據(jù)解析引擎會(huì)將JSON格式數(shù)據(jù)轉(zhuǎn)換為以下數(shù)據(jù)。

    0x0100003039014d0142f6e76d
  • 模擬解析設(shè)備返回的屬性設(shè)置結(jié)果數(shù)據(jù)。

    選擇模擬類型為設(shè)備上報(bào)數(shù)據(jù),輸入以下數(shù)據(jù),然后單擊執(zhí)行

    0x0300223344c8

    數(shù)據(jù)解析引擎會(huì)將透?jìng)鲾?shù)據(jù)轉(zhuǎn)換為以下JSON格式數(shù)據(jù)。

    {
      "code": "200",
      "data": {},
      "id": "2241348",
      "version": "1.0"
    }

步驟三:提交腳本

確認(rèn)腳本可以正確解析數(shù)據(jù)后,單擊提交,將該腳本提交到物聯(lián)網(wǎng)平臺(tái)系統(tǒng),以供數(shù)據(jù)上下行時(shí),物聯(lián)網(wǎng)平臺(tái)調(diào)用該腳解析數(shù)據(jù)。

說(shuō)明 僅提交后的腳本才能被物聯(lián)網(wǎng)平臺(tái)調(diào)用;草稿狀態(tài)的腳本不能被調(diào)用。

步驟四:使用真實(shí)設(shè)備調(diào)試

正式使用腳本之前,請(qǐng)使用真實(shí)設(shè)備與物聯(lián)網(wǎng)平臺(tái)進(jìn)行上下行消息通信,以驗(yàn)證物聯(lián)網(wǎng)平臺(tái)能順利調(diào)用腳本,解析上下行數(shù)據(jù)。

  • 測(cè)試上報(bào)屬性數(shù)據(jù)。
    1. 使用設(shè)備端上報(bào)設(shè)備屬性數(shù)據(jù),例如0x00002233441232013fa00000
    2. 在物聯(lián)網(wǎng)平臺(tái)控制臺(tái),選擇設(shè)備管理 > 設(shè)備
    3. 單擊設(shè)備對(duì)應(yīng)的查看,然后在設(shè)備詳情頁(yè)運(yùn)行狀態(tài)頁(yè)簽下,查看是否有相應(yīng)的屬性數(shù)據(jù)。
  • 測(cè)試下發(fā)屬性數(shù)據(jù)。
    1. 在物聯(lián)網(wǎng)平臺(tái)控制臺(tái),選擇監(jiān)控運(yùn)維 > 在線調(diào)試
    2. 選擇要調(diào)試的產(chǎn)品和設(shè)備,并選擇調(diào)試真實(shí)設(shè)備,功能選擇為要調(diào)試的屬性identifier,如屬性(prop_int16),方法選擇為設(shè)置,輸入以下數(shù)據(jù),單擊發(fā)送指令
      {
          "method": "thing.service.property.set", 
          "id": "12345", 
          "version": "1.0", 
          "params": {
              "prop_float": 123.452, 
              "prop_int16": 333, 
              "prop_bool": 1
          }
      }
    3. 查看設(shè)備端是否收到該屬性設(shè)置指令。
    4. 在該設(shè)備的設(shè)備詳情頁(yè)運(yùn)行狀態(tài)頁(yè)簽下,查看設(shè)備是否上報(bào)當(dāng)前屬性數(shù)據(jù)。

相關(guān)文檔