LD平台将设备的功能细分为“属性”、“事件”、“服务”,可以查看【往期内容】
    使用设备模型中的属性设置开发智能灯应用 - 图1
    属性是将设备的正常状态信息进行上报和设置的接口,属性在平台定义时可选“读写”或“只读”,读写支持属性值得get和set,只读只支持get不支持set,即失去了对属性的下行设置功能。读写的属性支持set,但是需要设备端提前使用MQTT订阅设备的属性set Topic,若不清楚MQTT的订阅请参照往期介绍:【往期内容

    属性订阅平台下行的set Topic通过deviceShadow.addDevSetPropertyNotify(“属性名”,func())方法直接实现,其中func()是指收到set执行后的回调函数(收到set会自动调用执行)。

    使用设备模型中的属性设置开发智能灯应用 - 图2

    对于上一个文档创建的设备模型,LightSwitch是支持读写的属性,实现该属性的正常上报和监听下行的设定值可以通过以下程序实现(index.js)

    1. var deviceShadow = require('deviceShadow');
    2. var ledHandle = GPIO.open("led1");
    3. deviceShadow.bindDevID({
    4. productKey: "",
    5. deviceName: "",
    6. deviceSecret: ""
    7. });
    8. function main(err){
    9. if(err){
    10. console.log("连接平台失败");
    11. }else{
    12. console.log("主程序开始");
    13. //监听平台属性设置
    14. deviceShadow.addDevSetPropertyNotify("LightSwitch", function (lightStatus) {
    15. //回调函数将属性的设定值通过GPIO写到灯的状态,由于灯是下拉电平亮,使用1-设定值
    16. GPIO.write(ledHandle, 1-lightStatus);
    17. });
    18. var mainLoop = setInterval(function () {
    19. //使用GPIO读取到led的电平状态
    20. var ledStatus = GPIO.read(ledHandle);
    21. //上报平台
    22. deviceShadow.postProperty("LightSwitch", 1-ledStatus);
    23. }, 2000);
    24. }
    25. }
    26. deviceShadow.start(main);

    将程序下载到设备,设备执行2秒一次检测开关状态上报,并检测平台set属性值,将最新属性值写到灯的状态即可。
    (实际上不需要周期上报灯的状态,修改一次再上传即可)
    使用设备模型中的属性设置开发智能灯应用 - 图3

    设备连接平台后,通过上下行调试对设备的主灯开关进行设置,发送1,LED灯开启,发送0,LED灯关闭