乐趣区

关于物联网:设备离线时控制指令如何下发通过设备影子实现离线设备的控制指令触达方案实践类

设施影子实现 IoT 离线设施运行参数配置更新实际

1.设施运行参数配置更新的技术计划
在很多 IoT 业务场景,咱们须要在云端动静调整设施运行的配置参数,但因为网络不稳固,电池容量限度,很多物联网设施无奈做到 24 小时在线,设施频繁高低线,设施定时沉睡离线,带来一个新的问题:在设施离线时,云端的控制指令如何发送给设施,在设施上线后,能依照新的指令执行业务逻辑?

IoT 物联网平台的设施影子性能就能解决离线设施配置参数更新的问题。

2.设施端开发
为了实现设施影子性能,设施端须要做两件事件:

  • 订阅设施影子更新的 topic(实时更新)
  • 设施开机被动拉取设施影子(上线后,获取最新影子数据)
/**
 * aliyun-iot-mqtt@0.0.4
 */
const mqtt = require('aliyun-iot-mqtt');

// 设施身份三元组 + 区域
const deviceConfig = {
    "productKey": "产品",
    "deviceName": "设施",
    "deviceSecret": "设施 deviceSecret",
    "regionId": "cn-shanghai"
};

//1. 建设连贯
const client = mqtt.getAliyunIotMqttClient(deviceConfig);
//2. 订阅设施影子 topic
const getShadow = `/shadow/get/${deviceConfig.productKey}/${deviceConfig.deviceName}`;
client.subscribe(getShadow)

client.on('message', function(topic, message) {
    // 收到音讯后,显示设施影子中的近程配置参数
    if (topic == getShadow) {message = JSON.parse(message);
        console.log(new Date().Format("yyyy-MM-dd HH:mm:ss.S"))
        console.log("\tappConfig.content :", JSON.stringify(message.payload.state.desired.appConfig))
        console.log("\tappConfig.timestamp :", JSON.stringify(message.payload.metadata.desired.appConfig.timestamp))
    }

})
//3. 被动获取设施影子中的近程配置参数
const updateShadow = `/shadow/update/${deviceConfig.productKey}/${deviceConfig.deviceName}`;
client.publish(updateShadow, JSON.stringify({method: "get"}), {qos: 1})

3.云端更新配置
咱们的业务零碎通过调用设施影子的 UpdateDeviceShadow 接口把新的配置参数保留到设施影子的 desired 中。具体实现参考如下代码:

/**
 * package.json 增加依赖:"@alicloud/pop-core": "1.5.2"
 */
const co = require('co');
const RPCClient = require('@alicloud/pop-core').RPCClient;

const options = {
    accessKey: "你的 accessKey",
    accessKeySecret: "你的 accessKeySecret",
};

//1. 初始化 client
const client = new RPCClient({
    accessKeyId: options.accessKey,
    secretAccessKey: options.accessKeySecret,
    endpoint: 'https://iot.cn-shanghai.aliyuncs.com',
    apiVersion: '2018-01-20'
});
//2.desired 中 appConfig 变更
const shadowMessage = {
    method: "update",
    state: {
        desired: {
            appConfig:{maxTemperature: 39.5,}
        }
    },
    version: Date.now()}
const params = {
    ProductKey: "你的 ProductKey",
    DeviceName: "你的 DeviceName",
    ShadowMessage: JSON.stringify(shadowMessage)
};

co(function*() {
    try {
        //3. 发动 API 调用,更新影子中配置参数
        const response = yield client.request('UpdateDeviceShadow', params);

        console.log(JSON.stringify(response));
    } catch (err) {console.log(err);
    }
});

4.运行后果
4.1 云端调用 API 更新配置参数
业务零碎调用胜利后,咱们能够登录控制台查看设施影子信息。具体如下:

4.2 在线设施实时获取更新
设施在线时,设施通过订阅设施影子的 Topic 实时取得云端配置参数。

4.3 离线设施上线后获取更新
设施离线时,设施影子缓存云端配置参数,设施上线后,被动从云端拉取最新的配置参数。这时配置参数更新的工夫会比以后工夫早,设施端能够依据这个工夫来判断是否要应用新的配置参数。

物联网平台产品介绍详情:​​https://www.aliyun.com/product/iot/iot_instc_public_cn​​

             阿里云物联网平台客户交换群
退出移动版