跳到主要内容

规则引擎

打开“开发配置 → 规则引擎”,把节点拖到画布、填好参数并连线,保存后由网关自动执行。第一次练习不需要连接邮件或 Webhook 服务。

做一个大于 100 的判断

先按内存计算创建 Memory.ManualValue,仅用于本次练习。

  1. 点击列表右上方的加号(新增规则),名称填“演示值判断”,点击“确定”进入编辑器。
  2. 在左侧搜索“变量通知规则”,将它拖到画布。
  3. 选中这个节点,在右侧把 DeviceNames 填为 MemoryVariableNames 填为 ManualValue。其他筛选条件留空。
  4. 搜索“大于”,从“比较运算”分类拖入“大于”节点,不要选“大于等于”。点击画布上节点的标题,在右侧“自定义初始输入参数”中把 InputB 填为 100InputA 不填写,它由连线传入。
  5. 从“变量通知规则”的输出端口 Result 拖一条线,到“大于”的输入端口 InputA。不是连到输出端口 Result
  6. 点击右上角的对勾图标(保存),确认流程名称旁显示“已启用”。新流程默认启用,保存后会重新加载。
  7. 到内存计算,把 ManualValue 写为 101,回到规则编辑器并选中“大于”节点。在右侧展开“实时参数值”,查看“输出参数”的 Result,应为 true;“输入参数”中 InputA101InputB100
  8. 再写为 99Result 应变为 false。完成后可以在流程列表“更多”中禁用这个演示流程。

变量通知规则监听值变化。一直写同一个值,不一定产生新的触发。本例只做判断,不写入设备、不发送通知。

变量通知规则连接到大于节点,输入 101 后输出 Result 为 true

右侧的“自定义初始输入参数”是配置区,“实时参数值”才是查看当前运行结果的区域。不要把配置区尚未填写的 InputA 当作规则没有收到值。

接下来做什么

需要的功能查看位置
修改节点、连线或删除节点画布操作
把判断结果写回内部变量变量、事件与写回节点
产生报警时发送邮件报警配置与邮件通知
发送到 HTTP 接口或消息机器人Webhook 推送节点
备份和恢复流程导入导出

修改正在运行的流程前先导出备份。练习先用独立变量,不把现场写入或设备控制作为入门步骤。

流程列表

规则引擎列表用于管理流程基本信息、启停状态和批量导入导出。

区域或列说明
搜索名称按流程名称查询列表。输入关键字后按回车或清空输入框会刷新结果。
新增规则创建新的规则流程。页面会先要求输入流程名称,创建成功后自动打开流程编辑器。
导出 Excel按当前搜索条件导出规则流程配置,适合备份、迁移和批量维护。
导入 Excel从 Excel 文件导入规则流程。导入完成后页面会提示成功数量或失败原因。
批量删除勾选流程后批量删除。删除前应先确认流程不再参与生产运行。
刷新重新加载流程列表和可用自定义节点。
流程名称规则流程名称。名称应能体现流程用途,便于日志排查。
描述流程用途说明。为空时列表显示 -
版本流程版本号。新建流程默认从 v1 开始。
状态显示“已启用”或“已禁用”。
操作“详情”进入流程编辑器;“更多”中可启用、禁用或删除流程。

新建流程

  1. 点击列表右上角“新增规则”。
  2. 在提示框中输入流程名称。
  3. 点击确认后,系统创建默认启用的 v1 流程并进入流程编辑器。
  4. 在编辑器中维护流程描述、触发方式、节点、连线和参数。
  5. 点击右上角“保存”,保存成功后规则引擎会重新加载该流程。

流程编辑器

点击流程行的“详情”进入流程编辑器。

流程编辑器页面

区域说明
顶部信息区显示流程名称、流程描述、版本号和触发方式。流程名称、描述可以直接编辑。
保存按钮保存当前流程名称、描述、触发方式、画布节点、连线和节点参数。
返回按钮返回规则流程列表。离开前应确认当前修改已经保存。
防抖 / 无限制触发“防抖”会合并短时间内的重复变化;“无限制触发”会在每次变化时直接触发下游节点。
导出 CSV导出当前编辑器画布中的节点、连线、位置和节点属性,适合单个流程结构备份。
导入 CSV从 CSV 文件恢复当前流程画布。导入后应检查节点类型、连线和参数再保存。
自动布局根据当前节点和连线重新排列画布。节点较多或连线交叉时使用。
删除选中删除当前选中的节点或连线。
左侧节点面板按分类展示可用节点,支持按节点名称搜索和按分类筛选。
中间画布拖拽节点、连接端口、调整布局、选择节点或连线。
右侧属性面板选中节点后显示,用于编辑节点名称、查看节点类型、填写输入参数和输入输出参数。
运行日志面板查看规则引擎运行日志,支持按级别、时间范围和关键字筛选,可导出当前页或全部日志。

节点面板

节点面板中的节点来自已加载的内置节点和自定义节点。常见分类包括保持、比较运算、边沿检测、变量 RPC、常量、触发器、定时器、计数器、类型转换、逻辑运算、数据统计、数据推送、数学运算、条件判断和字符串处理。

操作说明
搜索节点在“搜索节点”输入节点名称或标识关键字,快速定位节点。
分类筛选在“全部分类”下拉框选择分类,仅显示该分类下的节点。
展开/折叠分组点击分类标题展开或折叠节点组。
添加节点将节点从左侧面板拖入画布。拖入后应选中节点,在属性面板中检查参数。

如果节点没有出现在列表中,先确认对应脚本或自定义节点已经编译成功,再刷新规则引擎页面。

画布操作

操作步骤
添加节点从左侧节点面板拖拽节点到画布。
连接节点从一个节点端口拖到另一个节点端口,建立数据传递关系。连接方向应从上游输出端口指向下游输入端口。
配置节点选中节点,在右侧属性面板修改节点名称、输入参数和输入输出参数。
重命名节点双击画布中的节点,输入新的节点显示名称。
删除节点或连线选中节点或连线后点击“删除选中”。
自动布局点击“自动布局”,让系统按当前连线关系重新排列节点。
保存流程点击右上角“保存”,保存当前画布和参数。

节点参数

节点参数由节点类型决定。不同节点会显示不同的输入、输出和输入输出参数。

参数类型说明
输入参数从上游节点接收数据,也可以在属性面板中填写初始值。
输出参数节点处理后的输出值,可连接到下游节点。
输入输出参数既可接收上游数据,也可在节点处理后继续输出。
自定义初始输入参数部分节点支持在属性面板中填写初始输入值,用于无上游输入或默认值场景。
OutputOnlyOnChange默认 true:输出值未变化时不向下游传播;关闭后每次设置输出都会传播。它不限制 MQTT、邮件或 Webhook 节点本身的发送次数。
实时参数值流程启用并运行后,属性面板和节点端口可显示当前节点的输入、输出和输入输出值。

配置参数时,应确认数据类型、变量名称、设备名称和上下游节点匹配。连接失败或运行结果异常时,优先检查端口方向、参数名称、参数类型和流程启用状态。

触发方式

配置使用建议
防抖适合温度、压力、液位等高频变化数据,可减少短时间内的重复执行。
无限制触发适合计数、累加、事件记录等要求每次变化都处理的场景。
注意

启用“无限制触发”可能增加运行负载。生产环境使用前,应先评估变量变化频率、流程复杂度和下游系统承载能力。

导入导出

规则引擎有两类导入导出入口,作用范围不同。

入口位置用途
导出 Excel流程列表工具栏导出流程列表配置,适合批量备份和迁移多个流程。
导入 Excel流程列表工具栏从 Excel 批量导入流程。导入后应打开详情检查每个流程。
导出 CSV流程编辑器工具栏导出当前流程画布节点、连线、位置和节点属性。
导入 CSV流程编辑器工具栏恢复当前流程画布结构。导入后应检查节点、连线和参数。
导出日志运行日志面板导出当前页或全部规则运行日志,用于排查和归档。

导入前建议先导出现有流程作为备份。导入后不要立即启用到生产,应先打开流程编辑器检查节点类型、连线方向、参数值和运行日志。

变量、事件与写回节点

这组节点直接使用网关的变量、报警和设备状态事件。事件节点不需要上游输入,流程启用后会等待对应事件;筛选条件全部满足时才向下游输出。多个名称或枚举值使用英文逗号分隔,留空表示不按该条件筛选。

变量通知规则

“触发器 → 变量通知规则”监听在线变量的值变化,适合把采集变量接入阈值判断、记录或通知流程。节点匹配成功后同时输出当前变量值和完整变量数据对象。

方向参数默认值说明
输入DeviceNames设备名称列表,多个值用英文逗号分隔;留空匹配所有设备。
输入VariableNames变量名称列表,多个值用英文逗号分隔;留空匹配所有变量。
输入CollectGroups采集组名称列表,多个值用英文逗号分隔;留空匹配所有采集组。
输出Result-匹配变量的当前 Value,可直接连接数值比较、逻辑或转换节点。
输出VariableBasicData-匹配变量的完整数据对象,可连接到 Webhook、邮件或 MQTT 节点的 Data/InputData

变量离线时不会触发该节点。需要区分数据来源时,优先使用 VariableBasicData,其中包含变量名称、设备名称、采集组、在线状态、变更时间和采集时间等字段。

告警通知规则

“触发器 → 告警通知规则”监听报警生命周期事件,并按级别、设备、事件类型和报警类型筛选。匹配后从 FilteredAlarmData 输出原始报警对象。

方向参数默认值说明
输入MinAlarmLevel0最低报警级别。报警级别小于此值时忽略;0 表示不按级别筛选,实际级别范围以变量报警配置为准。
输入DeviceNames设备名称列表;留空匹配所有设备。
输入EventTypes事件类型列表:RestartPrepareAlarmAlarmPrepareFinishFinishConfirmConfirmAndFinish。留空匹配所有事件。
输入AlarmTypes报警类型列表:OpenCloseHHHLLLCustomState。留空匹配所有类型。
输入DebounceMs0同一设备和变量的防抖毫秒数;0 表示不防抖。
输入Enabledtrue关闭后忽略报警事件。
输出FilteredAlarmData-匹配成功时输出报警对象;可连接到通知节点的 Data

设备通知规则

“触发器 → 设备通知规则”监听设备状态变化,可用于设备离线告警、恢复通知和按插件分流。

方向参数默认值说明
输入DeviceNames设备名称列表;留空匹配所有设备。
输入DeviceStatuses状态列表:OnLineOffLinePause;留空匹配所有状态。
输入PluginNames采集插件名称列表;留空匹配所有插件。
输入DebounceMs0同一设备的防抖毫秒数;0 表示不防抖。
输入Enabledtrue关闭后忽略设备状态事件。
输出FilteredDeviceData-匹配成功时输出设备数据对象,可连接到通知节点的 Data

变量 RPC 节点

“变量RPC节点”用于通过规则流程调用变量的 RPC 写入能力。它会按 DeviceNameVariableName 查找变量,再把 WriteData 转为 JSON 参数调用变量运行时的 RPC;不要绕过变量权限直接调用驱动。

方向参数说明
输入DeviceName目标设备名称,必须与运行中的设备完全一致。
输入VariableName目标变量名称,必须具备可执行的 RPC/写入能力。
输入WriteData写入值或方法参数;对象、数组和标量均按 JSON 传递。
输出ResultOperResult<object> 操作结果。成功或失败信息可继续连接到条件节点或日志流程。

建议将变量 RPC 节点放在上升沿、按钮触发或互锁判断之后,避免高频变量变化造成重复写入。验证时同时检查 Result、变量写入日志和设备侧实际动作;变量不存在、权限关闭或设备暂停都会返回失败结果。

MQTT 客户端上传节点

“数据推送 → Mqtt客户端上传”节点在流程启动时建立 MQTT 客户端连接,在 InputData 变化时把对象序列化为 UTF-8 JSON 发布到指定主题。支持 TCP MQTT 和 WebSocket MQTT;发送时发现连接断开会自动重连,重连等待从 1 秒递增,最长 60 秒。

参数说明

方向参数默认值说明
输入Urlmqtt://127.0.0.1:1883MQTT 地址。TCP 可使用 mqtt://tcp://;WebSocket 可使用 ws://wss://mqtt-ws://mqtt-wss://
输入Topicdata/upload发布主题。
输入UserName / PasswordMQTT 登录凭据。密码不会写入运行日志。
输入ClientId客户端标识。留空时每次连接生成随机标识。需要 broker 持久会话时请填写稳定值。
输入Retainfalse是否保留最后一条消息。只有确实需要新订阅者收到旧值时才启用。
输入Enabledtrue是否允许发布;节点仍会在流程初始化时准备连接。
输入KeepAlive60MQTT 保活秒数,需符合 broker 的允许范围。
输入CleanSessiontrue是否使用清理会话。需要持久会话时关闭并配合稳定 ClientId
输入MqttProtocolVersionV311MQTT 协议版本,按 broker 支持情况选择。
输入QosLevelAtMostOnce服务质量:AtMostOnce(0,最多一次)、AtLeastOnce(1,至少一次)或 ExactlyOnce(2,恰好一次)。
输入UseSSLfalse是否启用 TLS。启用后按证书参数校验 broker。
输入SslTargetHostTLS 目标主机名;留空使用 Url 中的主机名。
输入SslClientCertificateName双向 TLS 使用的客户端证书名称。
输入SslCACertificateName自定义 CA 证书名称。
输入SslAllowUntrustedtrue是否接受不受信任证书。生产环境建议关闭,并配置可信 CA。
输入SslProtocolsNoneTLS 协议版本选择;None 使用系统默认协商。
输入SslCheckCertificateRevocationfalse是否检查证书吊销状态。
输入InputData-上游传入的对象、数组或标量,序列化后作为消息负载。
输出Successfalse最近一次连接或发布成功时为 true
输出ErrorMessage最近一次连接或发布失败的错误信息;成功后清空。

最小配置与验证

  1. 拖入节点,填写 UrlTopic,按 broker 要求填写用户名和密码。
  2. 将变量通知、告警通知或计算节点的输出连接到 InputData
  3. 保存并启用流程,确认 Success 变为 true
  4. 使用 MQTT 客户端订阅同一主题,检查收到的 JSON 内容和 QoS。

连接失败或发布失败时查看 ErrorMessage 和运行日志;不要把 SslAllowUntrusted=true 作为生产环境的长期证书方案。

邮件推送节点

“数据推送 → 邮件推送”节点使用 SMTP 发送规则数据。节点在第一次发送或邮件配置变化时创建 SMTP 通道,每次发送超时时间为 10 秒。

参数说明

方向参数默认值说明
输入HostSMTP 服务器地址。
输入Port587SMTP 服务器端口。
输入EnableSsltrue是否启用 SMTP 加密。
输入UserName / PasswordSMTP 认证凭据。
输入FromAddress发件人邮箱地址。
输入FromNameThingsGateway发件人显示名称。
输入ToAddresses收件人地址,多个地址用英文逗号分隔。
输入SubjectTemplate告警通知 - {{DeviceName}} - {{EventType}}主题模板,使用 {{属性名}} 引用 Data 对象属性;留空使用默认模板。
输入BodyTemplate默认 HTML 告警表格正文模板,使用 {{属性名}} 替换;以 < 开头的正文按 HTML 发送,留空使用默认模板。
输入Enabledtrue是否允许发送。
输入Data-上游传入的对象、数组或标量。
输出Successfalse最近一次邮件发送结果。
输出ErrorMessage禁用、无数据、SMTP 配置或发送失败时的错误信息。
输出LastPushTimeUnix 起始时间最近一次完成发送尝试的 UTC 时间。

最小配置与验证

  1. 填写 SMTP 主机、端口、用户名、密码、发件人和至少一个收件人。
  2. AlarmNotificationRule 或其它节点的对象输出连接到 Data
  3. 根据接收端要求修改主题或正文模板,保存并启用流程。
  4. 触发一次测试事件,确认 Success=trueErrorMessage 为空,并在收件箱检查正文格式和字段替换结果。

SMTP 认证失败、证书错误或收件人无效时,先查看 ErrorMessage,再核对服务器端口、SSL 模式和发件人策略。不要在流程日志或公开文档中记录密码。

Webhook 推送节点

“数据推送 → Webhook推送”节点可把规则结果发送到钉钉自定义机器人、企业微信消息推送(原群机器人)或自定义 HTTP 接口。Platform 在属性面板中以下拉框显示,平台必须显式选择,节点不会根据 URL 自动猜测厂商。

参数说明

方向参数说明
输入Url完整 Webhook 地址。钉钉地址包含 access_token,企业微信地址包含 key
输入Platform枚举下拉配置:DingTalk=钉钉,WeCom=企业微信,Custom=自定义 HTTP 接口。新节点默认 Custom
输入Headers自定义请求头 JSON,例如 {"Authorization":"Bearer <token>"}。钉钉和企业微信通常留空。
输入BodyTemplate完整 JSON 请求体模板,使用 {{属性名}} 引用 Data 属性。
输入Secret仅钉钉机器人启用“加签”时填写以 SEC 开头的 Secret;企业微信和自定义平台必须留空。
输入Enabled是否允许节点发送请求。
输入Data上游传入的对象,例如 VariableBasicDataAlarmVariable 或自定义对象。
输出SuccessHTTP 与平台业务响应都成功时为 true;禁用、无数据、配置错误、HTTP 错误或厂商 errcode 非零时为 false
输出ErrorMessage最近一次发送失败的错误信息;成功时清空。
输出LastPushTime最近一次实际完成发送尝试的 UTC 时间。

BodyTemplate 中位于 JSON 字符串内的占位符会自动转义引号、反斜杠和换行;位于 JSON 值位置的占位符会保留数值、布尔、数组或对象类型。找不到的属性在字符串内替换为空文本,在值位置替换为 null

{
"device": "{{DeviceName}}",
"message": "{{AlarmText}}",
"level": {{AlarmLevel}},
"value": {{Value}}
}

钉钉配置

  1. Platform 设为 DingTalk
  2. 将完整的 https://oapi.dingtalk.com/robot/send?access_token=<机器人Token> 填入 Url
  3. 使用加签安全设置时填写 Secret;使用关键词或 IP 白名单时留空。
  4. 文本消息可直接使用节点默认模板;钉钉 Markdown 使用以下结构:
{
"msgtype": "markdown",
"markdown": {
"title": "网关报警",
"text": "## {{DeviceName}}\n\n{{AlarmText}}"
}
}

节点按钉钉官方 HmacSHA256 规则自动追加 timestampsign,不要在 URL 中手工重复添加。HTTP 2xx 后还会检查响应 JSON,只有 errcode 为数字 0 或钉钉官方成功示例中的数字字符串 "0" 才设置 Success=true。错误码 310000 通常表示关键词、时间戳、签名或 IP 白名单校验失败;系统时间与钉钉请求时间误差不能超过 1 小时。

企业微信配置

  1. Platform 设为 WeCom
  2. 将完整的 https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=<消息推送Key> 填入 Url
  3. Secret 留空。文本消息可直接使用节点默认模板。
  4. 企业微信 Markdown 必须使用 markdown.content,不能使用钉钉的 titletext
{
"msgtype": "markdown",
"markdown": {
"content": "# {{DeviceName}}\n{{AlarmText}}"
}
}

企业微信文本最长 2048 UTF-8 字节,Markdown 最长 4096 UTF-8 字节。节点只有在 HTTP 为 2xx 且企业微信响应 errcode 可解析为整数 0 时设置 Success=true

频率与安全

钉钉每个机器人、企业微信每个消息推送都不能超过每分钟 20 条。高频变量不要直接连接 Webhook 节点,应先使用边沿、阈值、保持、定时器或聚合节点减少触发,并把多条报警合并成摘要。Webhook URL 本身包含发送凭据,不要写入日志、截图、公开文档或代码仓库。

运行日志

规则流程运行后,可在编辑器底部查看运行日志。

功能说明
日志级别按日志级别筛选,例如 Trace、Debug、Info、Warning、Error。
时间范围按开始时间和结束时间筛选日志。
关键字按日志内容关键字搜索。
导出导出当前页或全部匹配日志。
刷新立即重新加载日志。流程启用时,日志面板会按固定间隔自动刷新。
最大化 / 还原扩大日志面板,便于查看长日志。
折叠 / 展开临时收起日志面板,给画布留出更多空间。
详情打开日志详情抽屉,查看日志内容和异常信息。

保存、启用与验证

  1. 保存流程,确认页面没有节点参数、连线或名称校验错误。
  2. 在流程列表启用目标流程;仅保存但未启用时不会持续处理运行数据。
  3. 触发一组已知输入,从上游到下游查看节点实时参数值。
  4. 在运行日志中确认触发时间、执行路径和输出结果,没有连续异常。
  5. 到最终接收位置确认结果,例如内存变量、报警、消息目标或外部接口。

保存后,用安全测试值触发一次,查看末端节点的输出;不要只停留在“保存成功”。

常见流程设计

场景设计方式
单一路径处理触发节点或输入节点 → 处理节点 → 输出节点。
分支处理一个处理节点连接多个下游节点,同时执行报警判断、数据记录或消息推送。
多条件综合判断多个输入或处理节点连接到同一个判断节点,由判断节点输出结果。
周期任务使用定时器类节点触发周期计算或周期推送。
外部推送使用 Webhook、MQTT、邮件等数据推送节点,将处理结果发送到外部系统。
循环关系避免让节点形成闭环连接。需要状态记忆时,优先使用保持、计数器、内存变量或专门处理节点。

使用注意

场景建议
生产修改流程修改前先导出流程,保存后观察运行日志。
节点找不到确认自定义节点已编译成功,必要时刷新页面。
流程不执行检查流程是否启用、触发节点是否收到数据、连线方向是否正确。
节点参数为空选中节点后检查属性面板,确认输入参数、输入输出参数和默认值已配置。
结果不符合预期查看节点实时参数值,从上游到下游逐段定位。
日志为空确认流程已启用并实际触发;再检查日志级别和时间范围筛选条件。
系统负载升高检查高频触发流程、复杂计算节点、外部推送节点和“无限制触发”配置。

故障处理

现象处理建议
保存失败检查流程名称是否为空、节点参数是否有效,并查看页面错误提示。
导入 CSV 后节点异常检查导入文件是否来自同版本流程编辑器,确认自定义节点名称仍然存在。
端口无法连接确认连接方向和参数类型匹配,避免输出端口连接输出端口或输入端口连接输入端口。
实时参数值不显示确认流程已启用并触发运行;未运行的流程不会产生节点实时值。
日志持续报错打开日志详情查看异常信息,再回到对应节点检查参数、脚本和外部连接。
Webhook HTTP 200 但 Success=false查看 ErrorMessage 中的厂商 errcode/errmsg;HTTP 成功不代表钉钉或企业微信接受了消息。
Webhook 平台配置错误钉钉选 DingTalk,企业微信选 WeCom,普通接口选 Custom;企业微信和自定义平台必须清空 Secret
Webhook 频繁限流在推送前增加边沿、阈值、定时或聚合节点,控制同一机器人或消息推送每分钟不超过 20 条。

相关链接