物模型的開發(fā)方式讓設備不用關心如何去訂閱MQTT topic,而是調用物模型相關的接口來實現(xiàn)屬性上報、服務監(jiān)聽、事件上報。

設備屬性上報

API原型 device#postProps(params, [callback])
功能描述 上報屬性
參數(shù)描述

- params 屬性參數(shù),Object 類型

- callback

- res 服務端 reply 消息內(nèi)容

示例代碼:

// 上報設備屬性
device.postProps({
  LightSwitch: 0
}, (res) => {
  console.log(res);
});
        

上面的示例代碼用于上報一個名為LightSwitch的屬性,其值為0,開發(fā)者也可參見完整參考代碼

屬性設置

調用device.onProps()監(jiān)聽云端下發(fā)的屬性設置。

API原型 device#onProps(function(cmd))
功能描述 監(jiān)聽來自云端的屬性設置
參數(shù)描述

- function:收到命令時調用的回調函數(shù)

- cmd 服務端下發(fā)的命令

下面是收到消息的一個示例(cmd的內(nèi)容):

{
    method: 'thing.service.property.set',
    id: '802031359',
    params: { LightSwitch: 1 },
    version: '1.0.0'
}
            

下面是對一個燈的開關屬性進行設置時的示范處理代碼:

// 監(jiān)聽云端設置屬性服務消息,示例代碼為一個燈
device.onProps((cmd)=>{
  console.log('>>>onProps',cmd); //打印完整的屬性設置消息
  for(var key in cmd.params){ 
      if(key=='LightSwitch'){ //判斷是否設置的是LightSwitch屬性
          console.log('set property ',key);
      //示例代碼將云端設置的屬性在本地進行保存,實際產(chǎn)品開發(fā)時需要修改為去將燈打開或者關閉
          lightState = cmd.params.LightSwitch; 
      //本地設置完畢之后,將更新后的狀態(tài)報告給云端。
      //注意:云端下發(fā)命令后,云端屬性的值并不會改變,云端需要等待來自設備端的屬性上報
          device.postProps({'LightSwitch': lightState});
      }
  }
})
            

監(jiān)聽云端下發(fā)的服務調用消息

API原型 device#onService(seviceIdentifier, [callback])
功能描述 監(jiān)聽服務設置
參數(shù)描述

- serviceIdentifier 服務ID,string類型

- callback

res 服務端返回參數(shù)。

reply 響應服務的函數(shù),可以使用同步可以異步方式響應。

下面是服務調用進行處理的代碼示例:

//示例服務是一個加法器,云端服務調用時給出x和y,返回x和y的和

function addFunc(x,y){
  let err;
  if(x==undefined || y==undefined){
    err = 'x or y invail value';
    return {err,code:10001} //輸入?yún)?shù)錯誤時的格式封裝
  }
  //注意返回的是一個JSON對象,數(shù)據(jù)結果封裝在data中
  return {
    data:{
      z:x+y  //z是服務定義中的輸出參數(shù)
    },
    code:200
  }
}

// subscribe add_async service,產(chǎn)品上定義了add_async的服務
device.onService('add_async', function (res,reply) {
  console.log('add_async called,res:',res);
  const { params:{x,y}={}} = res; //獲取服務參數(shù)
  const result = addFunc(x,y); //調用addFunc,在該函數(shù)中對數(shù)據(jù)進行編碼
  console.log('result',result);
  reply(result); //返回處理結果
});
            

事件上報

API原型 device#postEvent(eventIdentifier, params, [callback])
功能描述 上報事件
參數(shù)描述

- eventIdentifier:事件ID,String 類型

- params 事件參數(shù),Object 類型

- callback

- err 錯誤,比如超時

- res 服務端 reply 消息內(nèi)容

上報 id 為 eventIdentifier1 的事件示例代碼:

device.postEvent('eventIdentifier1', {
    //key1是事件'eventIdentifier1的參數(shù)'
    key1: 'value1'
});
            

點擊此處查看完整代碼示例