Skip to content

场景联动 ​

这篇解决什么 ​

属性超阈值、设备上线、定时到点时,怎么自动设属性、调服务或拉响告警。读完能对上 iot_scene_rule 的 triggers / actions,以及设备消息与定时两条执行入口。

不要把外部转发写进场景。那是 数据流转。告警配置反向挂场景 id,见 告警配置。

示意图:设备触发走消息总线;定时触发走 Quartz,Job 名 iot_scene_rule_timer_{id}。

从哪改 ​

名称说明仓库路径
API/iot/scene-rule,含改状态、精简列表ruoyi-office/yudao-module-iot/yudao-module-iot-server/.../IotSceneRuleController.java
表triggers / actions 都是 JSON@TableName("iot_scene_rule")
设备消费group iot_rule_consumerIotSceneRuleMessageSubscriber
定时Quartz + IotSchedulerManagerIotSceneRuleTimerHandler、IotSceneRuleJob
前端触发 / 条件 / 动作分段表单ruoyi-office-vben/apps/web-antd/src/views/iot/rule/scene/

触发类型 IotSceneRuleTriggerTypeEnum:上下线 1、属性上报 2、事件 3、服务调用 4、定时 100。定时不要填 productId / deviceId,改填 cronExpression。

条件分组:外层 List 是「或」,内层是「且」。条件类型:设备状态 1、设备属性 2、当前时间 100。比较符在 IotSceneRuleConditionOperatorEnum(= / in / between,以及 date_time_、time_ 一组)。多个值用逗号,如 1,2,3。

动作类型 IotSceneRuleActionTypeEnum:设属性 1、调服务 2、告警触发 100、告警恢复 101。触发告警时动作里的 alertConfigId 为空,由告警配置的 sceneRuleIds 反查。恢复告警才填 alertConfigId。

deviceId = 0 表示全部设备。动作里若仍填 0,设属性 / 调服务实现会再展开具体设备,不要假设只打一条下行。

字段 ​

名称说明仓库路径
triggers事件 + 条件分组IotSceneRuleDO.Trigger
actions执行类型与参数IotSceneRuleDO.Action
lastTriggerTime最近一次触发IotSceneRuleDO
status停用会暂停定时 Jobupdate-status

定时不是 XXL-Job

设备 OTA 推送才走 XXL deviceUpgradeJob。场景定时是模块内 Quartz,类 IotSceneRuleJob。改 cron 要走场景保存,让 IotSceneRuleTimerHandler 重注册。

告警触发不要在动作里选配置

ALERT_TRIGGER 只表示「这条场景响了」。谁收短信 / 邮件,在告警配置里勾这条场景。

java
@RequestMapping("/iot/scene-rule")
public class IotSceneRuleController { }

@TableName(value = "iot_scene_rule", autoResultMap = true)
public class IotSceneRuleDO extends TenantBaseDO { }

配置与操作 ​

走 规则引擎 → 场景联动(4049,/iot/rule/scene)。触发:上下线 1 / 属性 2 / 事件 3 / 服务 4 / 定时 100。定时填 cronExpression,不要填设备。条件外层或、内层且。动作:设属性 1、调服务 2、告警触发 100(不填 alertConfigId)、恢复 101(要填)。

定时是模块内 Quartz IotSceneRuleJob,不是 XXL-Job。停用会暂停 Job。开启见 IoT 功能设计。

场景联动

本系统截图:规则引擎 → 场景联动。定时走模块内 Quartz,不是 XXL-Job。

相关篇 ​

联系我们

获取报价、演示和二开方案

微信咨询二维码

微信咨询

17156169080

添加时备注「RuoYi Office」

在线体验商业版