LD平台将设备的功能细分为“属性”、“事件”、“服务”,可以查看【往期内容】
属性是将设备的正常状态信息进行上报和设置的接口,属性在平台定义时可选“读写”或“只读”,读写支持属性值得get和set,只读只支持get不支持set,即失去了对属性的下行设置功能。读写的属性支持set,但是需要设备端提前使用MQTT订阅设备的属性set Topic,若不清楚MQTT的订阅请参照往期介绍:【往期内容】
属性订阅平台下行的set Topic通过deviceShadow.addDevSetPropertyNotify(“属性名”,func())方法直接实现,其中func()是指收到set执行后的回调函数(收到set会自动调用执行)。
对于上一个文档创建的设备模型,LightSwitch是支持读写的属性,实现该属性的正常上报和监听下行的设定值可以通过以下程序实现(index.js)
var deviceShadow = require('deviceShadow');
var ledHandle = GPIO.open("led1");
deviceShadow.bindDevID({
productKey: "",
deviceName: "",
deviceSecret: ""
});
function main(err){
if(err){
console.log("连接平台失败");
}else{
console.log("主程序开始");
//监听平台属性设置
deviceShadow.addDevSetPropertyNotify("LightSwitch", function (lightStatus) {
//回调函数将属性的设定值通过GPIO写到灯的状态,由于灯是下拉电平亮,使用1-设定值
GPIO.write(ledHandle, 1-lightStatus);
});
var mainLoop = setInterval(function () {
//使用GPIO读取到led的电平状态
var ledStatus = GPIO.read(ledHandle);
//上报平台
deviceShadow.postProperty("LightSwitch", 1-ledStatus);
}, 2000);
}
}
deviceShadow.start(main);
将程序下载到设备,设备执行2秒一次检测开关状态上报,并检测平台set属性值,将最新属性值写到灯的状态即可。
(实际上不需要周期上报灯的状态,修改一次再上传即可)
设备连接平台后,通过上下行调试对设备的主灯开关进行设置,发送1,LED灯开启,发送0,LED灯关闭