设备离线时控制指令如何下发:通过设备影子实现离线设备的控制指令触达方案

简介: 设备影子实现离线设备的指令控制

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

1.设备运行参数配置更新的技术方案

在很多IoT业务场景,我们需要在云端动态调整设备运行的配置参数,但由于网络不稳定,电池容量限制,很多物联网设备无法做到24小时在线,设备频繁上下线,设备定时沉睡离线,带来一个新的问题:在设备离线时,云端的控制指令如何发送给设备,在设备上线后,能按照新的指令执行业务逻辑?

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

image.png

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更新配置参数

业务系统调用成功后,我们可以登录控制台查看设备影子信息。具体如下:
image.png

4.2 在线设备实时获取更新

设备在线时,设备通过订阅设备影子的Topic实时获得云端配置参数。
image.png

4.3 离线设备上线后获取更新

设备离线时,设备影子缓存云端配置参数,设备上线后,主动从云端拉取最新的配置参数。这时配置参数更新的时间会比当前时间早,设备端可以根据这个时间来判断是否要使用新的配置参数。
image.png

image.png

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
3月前
Netty 与硬件设备交互,下行命令时(服务对设备),如何等待设备响应,再进行业务操作解决方案
Netty 与硬件设备交互,下行命令时(服务对设备),如何等待设备响应,再进行业务操作解决方案
|
4月前
|
编解码 网络协议 Android开发
Android平台GB28181设备接入模块实现后台service按需回传摄像头数据到国标平台侧
我们在做Android平台GB28181设备对接模块的时候,遇到这样的技术需求,开发者希望能以后台服务的形式运行程序,国标平台侧没有视频回传请求的时候,仅保持信令链接,有发起视频回传请求或语音广播时,打开摄像头,并实时回传音视频数据或接收处理国标平台侧发过来的语音广播数据。
|
编解码 监控 网络协议
Android平台GB28181设备接入侧如何实现按需打开视音频采集传输
Android平台GB28181设备接入侧如何实现按需打开视音频采集传输
162 2
|
Android开发 开发者
Android平台GB28181设备接入端语音广播如何实现实时音量调节
Android平台GB28181设备接入,语音广播功能非常重要,本文要介绍的,不是语音广播的流程,语音广播流程,之前的blog也有非常详细的分享,感兴趣的可以参考官方规范书的交互流程:
|
监控 Android开发
GB28181状态信息报送解读及Android端国标设备接入技术实现
今天主要聊聊GB/T28181状态信息报送这块,先回顾下协议规范相关细节,然后再针对代码实现,做个简单的说明。
173 0
|
传感器 物联网 智能硬件
IoT设备与手机App之间实时消息通信解决方案
PLC 工控机和管理人员 App 的联动
1519 15
IoT设备与手机App之间实时消息通信解决方案
|
数据采集 JSON 数据可视化
磁吸门锁设备数据上报阿里云
本文以磁吸门锁作为采集制对象,使用海创微联采集控制系统对磁吸门锁设备数据进行采集控制,然后将采集到的数据上传到阿里云物联网平台,阿里云物联网平台实现数据实时可视化。 文章分为3部分: ● 设备接线配置 磁吸门锁的联网参数配置及实施接线。 ● 数据采集 使用海创微联采集控制系统进行控件的部署、数据采集。 ● 数据上传 阿里云平台物联网平台产品和设备的创建、数据可视化。
198 0
|
传感器 算法 测试技术
ESP32-C3 应用 篇(实例一、通过MQTT协议连接ONENET上报传感器数据,云平台下发灯光调色)
ESP32-C3学到现在,我们已经掌握了从基本外设到网络服务端的相关知识, 这篇文章就是做一个简单的应用,使用开发板连接ONENET云平台, 使用MQTT协议,上报温湿度和光照数据,平台下发命令控制全彩灯颜色切换。
1031 0
ESP32-C3 应用 篇(实例一、通过MQTT协议连接ONENET上报传感器数据,云平台下发灯光调色)
|
传感器 算法 安全
雨量预警广播拉网分布遥测仪远程命令语音播报自动化数据平台
全自动监测预警设备,集现场数据采发、区域化广播预警的监测预警功能,可进行多通道的多种传感类型采集,包括电压、电流、数字、脉冲等。内嵌预警算法,可在达到预警条件时实现现场区域化广播预警。支持多种无线数据传输,包括区域自建射频、远程 GSM/GPRS 。
雨量预警广播拉网分布遥测仪远程命令语音播报自动化数据平台
|
物联网 API
设备端和服务端检测设备是否在线的方法
使用物联网时,有时设备端和服务端都需要检测设备是否在线。
1366 0

热门文章

最新文章