物模型的开发方式让设备不用关心如何去订阅MQTT topic,而是调用物模型相关的接口来实现属性上报、服务监听、事件上报。

设备属性上报

API原型 device#postProps(params, [callback])
功能描述 上报属性
参数描述

- params 属性参数,Object 类型

- callback

- res 服务端 reply 消息内容

示例代码:

// 上报设备属性
device.postProps({
  LightSwitch: 0
}, (res) => {
  console.log(res);
});
        

上面的示例代码用于上报一个名为LightSwitch的属性,其值为0,开发者也可参见完整参考代码

属性设置

调用device.onProps()监听云端下发的属性设置。

API原型 device#onProps(function(cmd))
功能描述 监听来自云端的属性设置
参数描述

- function:收到命令时调用的回调函数

- cmd 服务端下发的命令

下面是收到消息的一个示例(cmd的内容):

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

下面是对一个灯的开关属性进行设置时的示范处理代码:

// 监听云端设置属性服务消息,示例代码为一个灯
device.onProps((cmd)=>{
  console.log('>>>onProps',cmd); //打印完整的属性设置消息
  for(var key in cmd.params){ 
      if(key=='LightSwitch'){ //判断是否设置的是LightSwitch属性
          console.log('set property ',key);
      //示例代码将云端设置的属性在本地进行保存,实际产品开发时需要修改为去将灯打开或者关闭
          lightState = cmd.params.LightSwitch; 
      //本地设置完毕之后,将更新后的状态报告给云端。
      //注意:云端下发命令后,云端属性的值并不会改变,云端需要等待来自设备端的属性上报
          device.postProps({'LightSwitch': lightState});
      }
  }
})
            

监听云端下发的服务调用消息

API原型 device#onService(seviceIdentifier, [callback])
功能描述 监听服务设置
参数描述

- serviceIdentifier 服务ID,string类型

- callback

res 服务端返回参数。

reply 响应服务的函数,可以使用同步可以异步方式响应。

下面是服务调用进行处理的代码示例:

//示例服务是一个加法器,云端服务调用时给出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} //输入参数错误时的格式封装
  }
  //注意返回的是一个JSON对象,数据结果封装在data中
  return {
    data:{
      z:x+y  //z是服务定义中的输出参数
    },
    code:200
  }
}

// subscribe add_async service,产品上定义了add_async的服务
device.onService('add_async', function (res,reply) {
  console.log('add_async called,res:',res);
  const { params:{x,y}={}} = res; //获取服务参数
  const result = addFunc(x,y); //调用addFunc,在该函数中对数据进行编码
  console.log('result',result);
  reply(result); //返回处理结果
});
            

事件上报

API原型 device#postEvent(eventIdentifier, params, [callback])
功能描述 上报事件
参数描述

- eventIdentifier:事件ID,String 类型

- params 事件参数,Object 类型

- callback

- err 错误,比如超时

- res 服务端 reply 消息内容

上报 id 为 eventIdentifier1 的事件示例代码:

device.postEvent('eventIdentifier1', {
    //key1是事件'eventIdentifier1的参数'
    key1: 'value1'
});
            

点击此处查看完整代码示例