创建完规则,即可编写 SQL 对某一类 Topic 中数据的处理。物联网通信控制台提供了 SQL 填写的方式,简化 SQL 语句的生成。
将 Topic 为E23VBC3GE8/device_02/event
中的 JSON 消息的action targetDevice count
三个字段提取出来,再通过count <= 3对数据进行过滤,得到最终处理过的数据,用于下一步数据转发。下图中示例表达的规则:
当从 Topic 提取到了感兴趣的字段后,就要考虑对其进行一些操作,例如,转发或者存储等。目前支持的操作有:
在触发转发行为时,规则引擎会对设备上报的 payload, 进行JSON 封装,格式示例如下:
{
"MsgType": "Publish",
"Topic": "AD4GVS5549/device/data",
"Seq": 13107192,
"PayloadLen": 17,
"Payload": "dGhpcyBpcyBhIGV4YW1wbGU=",
"ProductId": "AD4GVS5549",
"DeviceName": "device",
"Time": "2018-08-14 15:12:05",
}
各字段含义如下:{
"devicename":"device",
"payload":{
"params":{
"power_switch":1,
"color":1,
"brightness":32
}
},
"productid":"AD4GVS5549",
"seq":2,
"timestamp":1587109346,
"topic":"AD4GVS5549/device/data"
}
各字段含义如下:如果想要监听多个 Topic,可以使用#
和+
通配符来定义多个 Topic。
#
代表0个或多个任意 Topic 段,只能放在 Topic 的最后。+
代表1个任意 Topic 段,可以放在 Topic 的中间。例如, house_monitor/+/get
house_monitor/thermometer/get
和house_monitor/door/get
等 Topic。house_monitor/door/switch/get
,因为 +
只能代表1个 Topic 段。例如, house_monitor/#
house_monitor/thermometer
和house_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 |
本页内容是否解决了您的问题?