数据处理

最近更新时间:2025-12-29 15:26:13

我的收藏

概述

创建完规则,即可在 物联网开发平台控制台 规则引擎的目标规则中,单击“筛选数据”旁的编辑来编写 SQL 对某一类 Topic 中数据的处理。物联网开发平台提供了 SQL 填写的方式,简化 SQL 语句的生成。
例如从 Topic 为智能网关全部设备的物模型属性上报 Topic 中提取 JSON 消息的actiontargetDevicecount三个字段,再通过count<3条件过滤数据,得到处理后的结果用于后续转发。示例表达的规则如下图:




行为 Action

当从 Topic 提取到了感兴趣的字段后,就要考虑对其进行一些操作。例如,转发或者存储等。目前支持的操作有:
在触发转发行为时,规则引擎会对设备上报的 payload, 进行 JSON 封装。格式示例如下。

转发到 CKafka 的 JSON 示例

{
"MsgType": "Publish",
"Topic": "AD4GVS5549/device/data",
"Seq": 13107192,
"PayloadLen": 17,
"Payload": "dGhpcyBpcyBhIGV4YW1wbGU=",
"ProductId": "AD4GVS5549",
"DeviceName": "device",
"Time": "2018-08-14 15:12:05"
}

转发到第三方服务(http forward)的 JSON 示例

{
"devicename": "device",
"payload": {
"params": {
"power_switch": 1,
"color": 1,
"brightness": 32
}
},
"productid": "AD4GVS5549",
"seq": 2,
"timestamp": 1587109346,
"topic": "AD4GVS5549/device/data"
}

转发到 MySQL 的 JSON 示例

{
"method":"report",
"clientToken":"123",
"params":{
"power_switch":1,
"brightness":11,
"scene":3
}
}

参数说明

字段
描述
MsgType
Publish:配置消息队列转发。
Forward:命中规则引擎转发。
StatusChange:状态变化。
PayloadLen
设备上报消息 payload 的长度,单位为字节数。
Payload
原始消息的 payload,默认会对内容使用 Base64 编码。
Event
仅 StatusChange 类型消息有,目前取值为 Online 和 Offline,代表上线和下线操作。
DeviceName
设备在物联网开发平台中定义的设备名称。
Time
转发行为触发的时间戳。
seq
内部自增的唯一消息标识符,int 类型。
timestamp
该转发行为触发时的 Unix 时间戳。

补充说明

字段的定义

字段中仅支持' * '、','、'.'、空格、字母和数字,不为空,最多不超过300个字符。
字段表示的是 JSON 中的键值 Key,若数据格式为二进制时不可使用字段筛选,可使用' * '将所有二进制数据进行转发。
上报的 JSON 数据格式,可以是嵌套的 JSON。例如:{"device_status":{"switch":"on"}},可以通过 device_status.switch 来获取到 switch 的值。
暂不支持子 SQL 和 JSON 数组。

Topic 通配符的定义

如果想要监听多个 Topic,可以使用#+通配符来定义多个 Topic。
#代表0个或多个任意 Topic 段,只能放在 Topic 的最后。
+代表1个任意 Topic 段,可以放在 Topic 的中间。
例如, house_monitor/+/get
可监听house_monitor/thermometer/gethouse_monitor/door/get等 Topic。
但不可监听house_monitor/door/switch/get,因为+只能代表1个 Topic 段。
例如, house_monitor/#
可监听house_monitor/thermometerhouse_monitor/door/switch/get等 Topic。
house/#/get是非法的,因为#只能放在 Topic 结尾。

条件的定义

[条件]表达式用于过滤 Topic 中的消息,只有当消息满足[条件]表达式时,才会被提取并进行后续的处理,支持的表达式见下表:
操作符
说明
示例
=
相等
color = 'red'
<>
不等于
color <> 'red'
AND
逻辑与
color = 'red' AND siren = 'on'
OR
逻辑或
color = 'red' OR siren = 'on'
( )
括号代表一个整体
color = 'red' AND (siren = 'on' OR siren ='isTest')
+
算术加法
age = 4 + 5
-
算术减
age = 5 - 4
/
age = 20 / 4
*
age = 5 * 4
%
取余数
age = 0 % 6
<
小于
5 < 6
<=
小于或等于
5 <= 6
>
大于
6 > 5
>=
大于或等于
6 >= 5