Serverless,实现 IoT 设备运行状态缓存到Redis方案

今天,我们给大家带来基于云产品组合的方案,无需编写应用程序代码,实时缓存IoT设备上报的当前运行状态,供业务系统查询的技术方案。

技术原理

借助物联网平台提供的规则引擎模块,我们可以轻松的把设备上报的最新状态存储到Key-Value的数据库--表格存储OTS/Redis/MongoDB中,技术方案如下:

Serverless,实现 IoT 设备运行状态缓存到Redis方案_第1张图片

IoT物联网开发

首先我们在IoT物联网控制台创建产品水泵,并注册2个设备:

Serverless,实现 IoT 设备运行状态缓存到Redis方案_第2张图片

然后,给每个设备添加city标签,如下:

Serverless,实现 IoT 设备运行状态缓存到Redis方案_第3张图片

水泵监控场景中,每10分钟会定时上报运行状态到IoT平台,具体通信 Topic 和payload 如下:

// 定时上报运行状态的Topic
/${productKey}/${deviceName}/user/bizHeart/post
// 对应payload结构体
{
    status: 'RUNNING', //运行状态 RUNNING,STOP,SHUTDOWN
    speed: 3000, //当前转速
    waterOutput: 125,//当前出水量
    workingTime: 72//工作时长 xx分钟
}

表格存储数据库

我们在表格存储OTS控制台创建一个数据表,以设备deviceName为主键,扩展信息为设备当前状态属性,无需预先定义。

Serverless,实现 IoT 设备运行状态缓存到Redis方案_第4张图片

创建完成后,数据表基本信息,如下:

Serverless,实现 IoT 设备运行状态缓存到Redis方案_第5张图片

规则引擎配置

当设备上报状态数据后,需要通过预先配置规则引擎实时流转到表格存储中,规则引擎配置如下:

Serverless,实现 IoT 设备运行状态缓存到Redis方案_第6张图片

数据处理的SQL参考:

SELECT 
deviceName() as deviceName,
attribute('coordinate') as coordinate, 
attribute('city') as city, 
timestamp('yyyy-MM-dd HH:mm:ss') as currentTime,
status,speed,waterOutput,workingTime 
FROM 
"/a1vYwzHjT6p/+/user/bizHeart/post"

数据转发配置如下:

Serverless,实现 IoT 设备运行状态缓存到Redis方案_第7张图片

联机运行

当设备启动,上报状态数据后,我们在IoT控制台的日志服务里可以查看到如下消息报文记录:

Serverless,实现 IoT 设备运行状态缓存到Redis方案_第8张图片

以及规则引擎流转日志:

Serverless,实现 IoT 设备运行状态缓存到Redis方案_第9张图片

同时在表格存储数据库中,我们也可以查看到设备当前状态数据:

Serverless,实现 IoT 设备运行状态缓存到Redis方案_第10张图片

查询设备状态

Node.js方式从表格存储OTS中读取指定key的数据参考据代码如下:

var TableStore = require('tablestore');
var client = new TableStore.Client({
    accessKeyId: '账号accessKey',
    secretAccessKey: '账号secretAccessKey',
    endpoint: '表格存储接入点',
    instancename: '表格存储实例ID',
    maxRetries: 3
});


var params = {
    tableName: '表名',
    primaryKey: [{ 'deviceName': '设备Id' }],
    maxVersions: 1
};


client.getRow(params, function(err, data) {
    if (err) {
        console.log('error:', err);
        return;
    }


    if (data.row.primaryKey) {
        data.row.primaryKey.forEach(function(item) {
            console.log('======> getRow: ', item.name + '=' + item.value);
        })


        data.row.attributes.forEach(function(item) {
            console.log('\t\t' + item.columnName + '=' + item.columnValue);
        })
    }


});

设备最新状态数据查看:

$ node queryOTS.js 
======> getRow:  deviceName=xxxxxx
    city=xxxxxx
    coordinate=xxxxxx
    currentTime=xxxxxx
    status=xxxxxx
    speed=xxxxxx
    waterOutput=xxxxxx
    workingTime=xxxxxx

【往期回顾】

1、39张传感器工作原理GIF图汇总

2、智能手持测温枪开发实践

3、JMeter压测MQTT服务性能实战

4、IoT物联网平台日志服务详解

5、自建MQTT集群迁移阿里云IoT实践

6、工业Modbus电力104规约接入IoT平台

7、设备免烧录三元组,即时注册解决方案

8、IoT+TSDB+Quick BI 搭建楼宇环境监控

9、JS全栈开发,构建智能家居小程序

你可能感兴趣的:(数据库,物联网,docker,mysql,kubernetes)