物模型的開發(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'
});
點擊此處查看完整代碼示例。