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

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

技术原理

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

IoT物联网开发

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

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

水泵监控场景中,每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为主键,扩展信息为设备当前状态属性,无需预先定义。

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

规则引擎配置

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

数据处理的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"

数据转发配置如下:

联机运行

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

以及规则引擎流转日志:

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

查询设备状态

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全栈开发,构建智能家居小程序

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Serverless Python是指使用Python语言开发和部署的无服务器应用程序。在Serverless架构中,开发人员可以使用Python编写函数,并将其部署到云平台上,而无需关心底层服务器的管理和维护。Python在Serverless开发中具有以下优势: 1. 性能突出:根据引用中的测试结果,Python在性能方面表现出色,运行时间和内消耗较低。 2. 适合后台开发:Python具有丰富的库和框架,使其成为后台开发的理想选择。开发人员可以使用Python构建强大的后台服务,处理数据、逻辑和业务需求。 3. 云原生支持:Python与云平台的集成良好,许多云提供商都支持Python作为Serverless应用程序的开发语言。例如,阿里云的函数计算(Function Compute)[^2]就支持Python语言。 下面是一个使用Serverless Framework部署Python函数的示例: 1. 首先,确保已经安装了Serverless Framework。可以使用以下命令进行安装: ```shell npm install -g serverless ``` 2. 创建一个新的Serverless项目,并进入项目目录: ```shell serverless create --template aws-python3 --name my-serverless-python cd my-serverless-python ``` 3. 编写Python函数代码。在项目目录中创建一个名为`handler.py`的文件,并添加以下代码: ```python def hello(event, context): return { 'statusCode': 200, 'body': 'Hello, Serverless Python!' } ``` 4. 配置Serverless Framework。在项目目录中创建一个名为`serverless.yml`的文件,并添加以下内容: ```yaml service: my-serverless-python provider: name: aws runtime: python3.8 functions: hello: handler: handler.hello events: - http: path: hello method: get ``` 5. 部署函数到云平台。运行以下命令进行部署: ```shell serverless deploy ``` 6. 部署成功后,Serverless Framework会返回一个API网关的URL。通过访问该URL,可以触发并执行部署的Python函数。 这是一个简单的示例,演示了如何使用Serverless Framework和Python开发和部署无服务器应用程序。通过这种方式,开发人员可以充分利用Python的优势,构建高性能的Serverless应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值