延凡科技文档 延凡科技文档
  • 系统运行
  • 系统部署
  • 使用说明
  • 小程序和App
  • 硬件SDK说明
  • 规则引擎
  • 设备

    • 新建设备
    • Mqtt设备接入
    • TCP设备接入
    • 监控设备接入
    • Modbus设备接入
    • 联动控制告警
  • 组态

    • 组态使用
  • 工单

    • 保养管理
    • 巡检管理
    • 维修管理
    • 工单任务
    • 设备列表
  • 能源

    • 能源监控
    • 能源配置
    • 能耗分析
    • 用能分析
  • 网关配置

    • BacnetIP采集示例
    • Modbus采集示例
    • 平台转发数据
  • DTU配置

    • DTU设置边缘采集
    • 参数配置⼊⻔教程
    • DTU连接平台设置MQTT、TCP
  • Docker部署

    • DTU设置边缘采集
  • 二次开发

    • 平台主题
    • Modbus方案
    • 网关模块
    • 协议管理模块
    • 服务端模块
    • 设备数据处理
    • Mqtt服务端
  • 其它

    • 使用Emqx5
    • 三方登录
    • 使用TDengine
    • 可视化平台
    • ZLMediakit录像部署
    • 常见问题
    • 相关文档
返回官网 (opens new window)
  • 系统运行
  • 系统部署
  • 使用说明
  • 小程序和App
  • 硬件SDK说明
  • 规则引擎
  • 设备

    • 新建设备
    • Mqtt设备接入
    • TCP设备接入
    • 监控设备接入
    • Modbus设备接入
    • 联动控制告警
  • 组态

    • 组态使用
  • 工单

    • 保养管理
    • 巡检管理
    • 维修管理
    • 工单任务
    • 设备列表
  • 能源

    • 能源监控
    • 能源配置
    • 能耗分析
    • 用能分析
  • 网关配置

    • BacnetIP采集示例
    • Modbus采集示例
    • 平台转发数据
  • DTU配置

    • DTU设置边缘采集
    • 参数配置⼊⻔教程
    • DTU连接平台设置MQTT、TCP
  • Docker部署

    • DTU设置边缘采集
  • 二次开发

    • 平台主题
    • Modbus方案
    • 网关模块
    • 协议管理模块
    • 服务端模块
    • 设备数据处理
    • Mqtt服务端
  • 其它

    • 使用Emqx5
    • 三方登录
    • 使用TDengine
    • 可视化平台
    • ZLMediakit录像部署
    • 常见问题
    • 相关文档
返回官网 (opens new window)
  • 文档

    • 系统运行
    • 系统部署
    • 使用说明
    • 小程序和App
    • 硬件SDK说明
    • 规则引擎
    • 设备

      • 新建设备
      • Mqtt设备接入
      • TCP设备接入
      • 监控设备接入
      • Modbus设备接入
      • 联动控制告警
      • OAT升级
    • 组态

      • 新建设备
    • 工单

      • 保养管理
      • 巡检管理
      • 维修管理
      • 工单任务
      • 设备列表
    • 能源

      • 能源监控
      • 能源配置
      • 能耗分析
      • 能源监控
    • 网关配置

      • BacnetIP采集示例
      • Modbus采集示例
      • 平台转发数据
    • DTU配置

      • DTU设置边缘采集
      • DTU连接平台设置MQTT、TCP
    • Docker部署

      • 项目部署
    • 二次开发

      • 平台主题
      • 物模型格式
      • 告警和场景格式
      • 消息流转
      • Modbus方案
      • 网关模块
      • 协议管理模块
      • 服务端模块
      • 设备数据处理
      • Mqtt服务端
    • 其他

      • 使用Emqx5
      • 三方登录
      • 使用TDengine
      • 可视化平台
      • ZLMedia录像部署
      • 常见问题
      • 视频监控常见问题
      • 相关文档
    目录

    规则引擎

    # 一、脚本语言

    提示

    规则脚本采用Groovy编写,是一种基于JVM(Java虚拟机)的敏捷开发语言,Groovy代码能够与Java代码很好的结合,也能用于扩展现有代码。

    # Groovy与Java对比

    Groovy的语法与 Java 语言的语法很相似,可以将它想像成 Java 语言的一种更加简单、表达能力更强的变体。如果知道如何编写 Java 代码,那就已经了解 Groovy 了。Groovy 和 Java 语言的主要区别是:完成同样的任务所需的 Groovy 代码比 Java 代码更少。

    Groovy Java
    编译为JVM字节码,兼容Java平台 在JDK上开发并在JVM上运行
    用作编程和脚本语言 用作编程和面向对象的语言
    默认访问修饰符 public 默认访问修饰符包
    为类成员自动生成 getter 和 setter 需要为字段提供 getter 和 setter 方法,特别是如果遵循 Java Beans命名约定
    分号是可选的 分号是强制性的
    默认导入常用包 默认只导入Java.lang.*包
    一切都是对象并且仅使用对象,因此没有自动装箱或拆箱的概念 具有原始数据类型和包装类来隐式或显式执行装箱和拆箱
    不需要任何 main 方法或方法的入口点来运行类或任何程序 需要类内部的 main 方法来运行程序

    # 二、消息转发

    设备上报和平台下发时,通过消息转发可以调整主题名称和消息内容,适配到设备的主题和内容。

    # 规则编写说明
    import cn.hutool.json.JSONArray;
    import cn.hutool.json.JSONObject;
    import cn.hutool.json.JSONUtil;
    import cn.hutool.core.util.NumberUtil;
    
    // 1. 获取主题和内容(必要)
    String topic = msgContext.getTopic();
    String payload = msgContext.getPayload();
    
    
    // 2. 数据转换(自己处理)
    println ("根据情况转换数据")
    String NewTopic = topic;
    String NewPayload = payload;
    
    
    // 3. 返回新的数据(必要)
    msgContext.setTopic(NewTopic);
    msgContext.setPayload(NewPayload);
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20

    提示

    1. 默认仅使用hutool的Json处理和数字工具类库,hutool其他类库或者系统相关类库,需要后端开放一下;
    2. 默认禁止使用For/While循环和IO操作等,根据情况可以后端开放;
    3. 通过msgContext获取和设置主题和消息内容;
    4. 主题和消息内容如何转换需要自己编写。
    # 参考示例

    主题:DEVICE555/post
    转发到平台主题:/60/DEVICE555/property/post

    内容:{"temperature":26.5,"humidity":65.8}
    转发到平台内容:

    [{
    	"id": "temperature",
    	"value": "26.45"
    }, {
    	"id": "humidity",
    	"value": "65.8"
    }]
    
    1
    2
    3
    4
    5
    6
    7
    import cn.hutool.json.JSONArray;
    import cn.hutool.json.JSONObject;
    import cn.hutool.json.JSONUtil;
    import cn.hutool.core.util.NumberUtil;
    
    // 1. 获取主题和内容(必要)
    String name = msgContext.getTopic();
    String payload = msgContext.getPayload();
    
    // 2. 主题转换
    String[] topics=name.split("/");
    String deviceNum = topics[0];
    String newTopic =  "/60/" + deviceNum + "/property/post";
    System.out.println(newTopic);
    
    // 3. 内容格式转换
    JSONArray newArray = new JSONArray();
    JSONObject newObject =new JSONObject();
    JSONObject jsonObject = JSONUtil.parseObj(payload);
    jsonObject.keySet().forEach(key -> {
       newObject.put("id" , key);
       newObject.put("value" , jsonObject.getStr(key));
       newArray.add(newObject);
    });
    String newPayload = newArray.toString();
    
    // 4.打印
    System.out.println("新主题:" + newTopic);
    System.out.println("新内容:" + newPayload);
    
    // 5. 返回新的数据(必要)
    msgContext.setTopic(newTopic)
    msgContext.setPayload(newPayload);
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34

    # 三、Http推送

    # 四、Mqtt桥接

    # 五、消息通知

    # 六、相关文档

    • LiteFlow-轻量,快速,稳定可编排的组件式规则引擎
    • Hutool是一个小而全的Java工具类库
    硬件SDK说明
    新建设备

    ← 硬件SDK说明 新建设备→

    Theme by Vdoing | Copyright © 2021-2024 延凡科技
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式