tencent cloud

文档反馈

数据处理

最后更新时间:2021-09-26 17:41:13

    创建完规则,即可编写 SQL 对某一类 Topic 中数据的处理。物联网通信控制台提供了 SQL 填写的方式,简化 SQL 语句的生成。

    将 Topic 为E23VBC3GE8/device_02/event中的 JSON 消息的action targetDevice count三个字段提取出来,再通过count <= 3对数据进行过滤,得到最终处理过的数据,用于下一步数据转发。下图中示例表达的规则:

    行为 Action

    当从 Topic 提取到了感兴趣的字段后,就要考虑对其进行一些操作,例如,转发或者存储等。目前支持的操作有:

    • 数据转发到另一个 Topic。
    • 数据转发到第三方服务。
    • 数据转发到消息队列 CKafka。
    • 数据转发到消息队列 CMQ-Topic。
    • 数据转发到消息队列 CMQ-队列模型。
    • 数据转发到时序数据库 CTSDB。
    • 数据转发到云数据库 MySQL。
    • 数据转发到云数据库 MongoDB。

    在触发转发行为时,规则引擎会对设备上报的 payload, 进行JSON 封装,格式示例如下:

    1. 转发到 CMQ/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",
      }
      
      各字段含义如下:
      • MsgType:取值有 Publish(配置消息队列转发), Forward(命中规则引擎转发), StatusChange(状态变化)。
      • PayloadLen:设备上报消息 payload 的长度,单位为字节数。
      • Payload:原始消息的 payload,默认会对内容使用 Base64 编码。
      • Event:仅 StatusChange 类型消息有,目前取值为 Online 和 Offline,代表上线和下线操作。
      • Time:转发行为触发的时间戳。
    2. 转发到第三方服务(http forwad)的 JSON 示例:
      {
      "devicename":"device",
      "payload":{
        "params":{
         "power_switch":1,
         "color":1,
         "brightness":32
       }
      },
         "productid":"AD4GVS5549",
         "seq":2,
         "timestamp":1587109346,
         "topic":"AD4GVS5549/device/data"
      }
      
      各字段含义如下:
      • devicename:设备在物联网通信平台中定义的设备名称。
      • payload:原始消息的 payload,若设备原始上报格式 JSON 将透传转发;若为二进制格式,会对内容使用 Base64 编码。
      • 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
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持