阿里云物联网 - 设备上报属性历史数据转存至RDS -完整配置过程

阿里云物联网设备数据流转至RDS

最近需要对设备上报的历史数据进行分析。虽然使用阿里云提供的API也可以查到一个月内的历史数据,但也仅仅是一个月内的数据,而且通过API接口每次调取的时候有很多限制(一次调用最多可查询10个属性的历史数据;每个属性最多返回100条数据;仅能查询最近30天内的属性数据),使用起来很不便,因此选择了通过数据流转的功能存入RDS。


配置RDS

数据转发至RDS的注意事项

  1. 只支持同地域转发,不支持跨地域转发。比如,华东2节点的平台数据只能转发到华东2的RDS数据表中。
  2. 只支持转发到专有网络RDS实例。
  3. 支持MySQL实例和SQL Server实例。
  4. 支持普通数据库和高权限数据库的转发。
  5. 不支持二进制格式数据转发至RDS。

创建RDS数据库

为了演示整个流程,创建一个按量付费的RDS数据库,选择配置如下:
购买配置

配置项
地域[见下方备注信息]
数据库类型数据库类型:MySQL
版本5.7
系列普通版
网络类型专有网络
规格1核1GB

在这里插入图片描述
其余未提及的配置项选择默认即可。实际使用时可根据需要采用更高的配置。

截止目前(2019年5月20日)阿里云物联网平台的可选地域只有华东2(上海)节点,因此RDS的地域也必须选择相同配置。不排除物联网平台未来会有其他地域的节点,可提前在物联网平台的控制台中确认服务的地域。

创建数据库及账户

在RDS控制台中查看实例,在数据库管理中创建新数据库;在账号管理中创建新账号,并为该账号赋予新建数据库的访问权限。
在这里插入图片描述

创建数据表

在阿里云RDS提供的网页DMS中创建新表,字段名及数据类型需要与对应的物联网产品属性数据类型相同,否则数据可能无法存入。
打开物联网的控制台->设备管理->产品->功能定义->自定义功能,就能看到设备的属性列表。从中筛选出需要转存的属性,在数据表中创建对应的字段即可。

配置转发

打开物联网的控制台->规则引擎->数据流转->创建规则,为新规则命名,选择“json格式”(因为设备上报属性的时候默认就是JSON格式)。
创建完成后就可以编辑规则,编辑界面分三部分处理数据转发数据转发错误操作数据
在这里插入图片描述

  1. 处理数据 : 设备上报的JSON数据可以映射为虚拟的表,其中Key对应表的列,Value对应列值。阿里云提供了一种类试MySQL语法的SQL表达式和一些内置函数,这样就可以参照官方提供数据流转过程使用SQL处理JSON数据。
  2. 转发数据 : 选择数据转发一栏的添加操作,出现添加操作页面。选择存储到云数据库(RDS)中。根据提示填写RDS、数据库账户、数据表、每个属性的字段名等信息。官方说明
  3. 转发错误操作数据 : 顾名思义用来保存数据流转时产生的错误信息,此处省略。
    在这里插入图片描述

在配置转发数据时,首次从选项列表中选择存储到云数据库(RDS)中会提示需要授权访问云数据库的权限。(授权信息在访问控制RAM->RAM角色管理列表中可见,名称为AliyunIOTAccessingRDSRole)。

错误调试

数据库转存的过程中可能会因为数据流转规则编写的字段名不匹配、数据库字段格式不匹配等等原因导致转存失败,当发现数据表中没有新数据写入时,可在物联网平台的控制台查阅这些错误信息,路径为:监控运维->日志服务->选择日志所属产品->物模型数据分析。

这个问题涉及到两个方面的内容,一个是如何读取阿里云物联网平台数据,另一个是如何读写阿里云RDS数据库。下面我分别进行解答: 1. 如何读取阿里云物联网平台数据? 阿里云物联网平台提供了多种接入方式,包括 MQTT、HTTP、CoAP 等。其中 MQTT 是最常用的一种接入方式,也是阿里云物联网平台官方推荐的接入方式。在 MATLAB 中,可以使用 MATLAB 自带的 mqtt 函数库来实现 MQTT 协议的订阅和发布。 首先需要在阿里云物联网平台上创建一个设备,获取到设备的三元组信息(ProductKey、DeviceName 和 DeviceSecret)。然后使用 mqtt 函数库连接到阿里云物联网平台的 MQTT 服务器,并订阅设备的 Topic,就可以收到设备上报的数据了。具体的代码如下: ```matlab % 阿里云物联网平台 MQTT 服务器地址 broker = 'tcp://xxxxx.iot-as-mqtt.cn-shanghai.aliyuncs.com'; % 设备三元组信息 productKey = 'xxxxxxxxxxxxx'; deviceName = 'xxxxxxxxxxxxx'; deviceSecret = 'xxxxxxxxxxxxx'; % MQTT 连接选项 options = mqttv5_options('UserName', productKey + '/' + deviceName, ... 'Password', mqtt_password(productKey, deviceName, deviceSecret), ... 'CleanSession', true, ... 'ConnectTimeout', 30); % MQTT 订阅选项 subscription = mqttv5_subscription(topic, 1); % 连接 MQTT 服务器并订阅 Topic client = mqttv5(broker, options); subscribe(client, subscription); % 循环获取设备上报的数据 while true message = receive(client); data = message.Payload; % 处理数据 ... end % 断开 MQTT 连接 unsubscribe(client, subscription); disconnect(client); ``` 2. 如何读写阿里云RDS数据库? 阿里云RDS是一种云数据库服务,支持多种数据库类型,包括 MySQL、SQL Server、PostgreSQL、PPAS 等。在 MATLAB 中,可以使用 MATLAB 自带的 Database Toolbox 函数库来连接阿里云RDS数据库,并进行数据的读写操作。 首先需要在阿里云RDS上创建一个数据库实例,并开通相应的数据库服务。然后使用 Database Toolbox 函数库连接到阿里云RDS数据库,并执行 SQL 查询语句或更新操作即可。具体的代码如下: ```matlab % 阿里云RDS数据库连接选项 driver = 'com.mysql.jdbc.Driver'; url = 'jdbc:mysql://xxxxxxxxxxxx.rds.aliyuncs.com:3306/xxxxxxxxxxxx'; username = 'xxxxxxxxxxxx'; password = 'xxxxxxxxxxxx'; % 连接阿里云RDS数据库 conn = database('xxxxxxxxxxxx', username, password, driver, url); % 执行 SQL 查询语句 query = 'SELECT * FROM xxxxxxxxxxxx'; curs = exec(conn, query); data = fetch(curs); % 执行 SQL 更新操作 query = 'UPDATE xxxxxxxxxxxx SET xxxxxxxxxxxx = xxxxxxxxxxxx WHERE xxxxxxxxxxxx = xxxxxxxxxxxx'; curs = exec(conn, query); % 关闭数据库连接 close(curs); close(conn); ``` 以上是在MATLAB中读取阿里云物联网平台数据并读写阿里云RDS数据库的基本操作,具体实现还需要根据具体情况进行调整和优化。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿长大人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值