当前位置: 首页 > news >正文

物联网联动策略表结构设计

1、需求

实现温湿度传感器联动,当某个温度传感器或者某几个温度传感器 满足温度高于某个值时 空调状态开启、模式制冷、温度26、风速低,当温度低于某个值空调关闭。

实现门禁联动,当某个门禁或者某几个门禁 开时,空调空调状态开启、模式制冷、温度26、风速低,罗普开关开启,时控开关开启。由于门禁人进门后就关了,无法实现无人设备关闭的需求。另外如果人频繁进入该房间,会造成多次触发,我们可以加个生效时长,第一个人进入房间触发后,该时长内只触发一次。

2、设计思路

(1)肯定需要一张策略主表

CREATE TABLE `t_strategy_linkage` (`id` bigint(11) NOT NULL AUTO_INCREMENT,`strategy_name` varchar(255) NOT NULL COMMENT '策略名称',`linkage_type` int(11) DEFAULT NULL COMMENT '联动类型(1传感器联动 2门禁联动)',`delay_seconds` int(11) DEFAULT NULL COMMENT '延迟时间',`start_time` time DEFAULT NULL COMMENT '开始时间',`end_time` time DEFAULT NULL COMMENT '结束时间',`execute_flag` int(11) NOT NULL COMMENT '是否已执行标志(防重复)0未执行 1已执行低于最低温度 2已执行高于最高温度',`debounce_minutes` int(11) DEFAULT NULL COMMENT '防抖时长(分钟,门禁联动用)',`status` char(1) DEFAULT NULL COMMENT '状态0正常 1停用',`create_time` datetime DEFAULT NULL COMMENT '创建时间',`update_time` datetime DEFAULT NULL COMMENT '修改时间',PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;

(2)需要一张触发设备表,存放该条策略需要有哪些设备触发,因为可能会有 多个温度传感器都高于某个值时才开启空调 这样的需求,因此一个策略对应多个触发设备

CREATE TABLE `t_strategy_linkage_trigger_device` (`strategy_id` bigint(20) NOT NULL COMMENT '策略id',`device_number` varchar(255) NOT NULL COMMENT '触发设备编号'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;

(3)联动规则表,因为一个策略中,对于温度传感器,可能有多个规则,如温度高于某个值触发,温度低于某个值触发,湿度高于或者低于某个值触发等等,对于门禁,目前只有一个规则,就是门禁开触发,因次一个策略对应多个规则,存储策略id、触发条件、动作

CREATE TABLE `t_strategy_linkage_rule` (`strategy_id` bigint(20) NOT NULL COMMENT '策略id',`trigger_condition` varchar(255) NOT NULL COMMENT '触发条件',`action` varchar(255) NOT NULL COMMENT '执行动作'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;

(4)联动目标设备表,因为联动可能触发多个目标设备,因次需要一张表存放策略id、目标设备编号

CREATE TABLE `t_strategy_linkage_target_device` (`strategy_id` bigint(20) NOT NULL COMMENT '策略id',`device_number` varchar(255) NOT NULL COMMENT '被控设备编号'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;

3、思考

以上表结构满足需求吗?

对于传感器来说,比如,当多个传感器触发温度大于30度时,空调1、空调2、...、空调10 动作开启、温度26、模式制冷、风速高,那么后端逻辑就是,传感器每3分钟上报一次,每上报一次,去触发设备表中查询该设备编号关联的策略,判断时间、是否执行,若都满足,则查询该策略关联的所有传感器,然后查询规则表,若均满足触发条件,则去目标设备表中查询所有该策略关联的目标设备编号,执行动作,这样看来,能满足传感器的需求。

对于门禁来说,如门禁1开,要实现空调1、空调2、...、空调10 动作开启、温度26、模式制冷、风速高,罗普1~10开,时控开关1~10开等,目标设备类型可能有很多,每种设备类型的动作可能不一样,如果不区分,会变成如下表数据

t_strategy_linkage_rule

stragety_idtrigger_conditionaction
1门禁1开开启、温度26、模式制冷、风速高
1门禁1开
1门禁1开

t_strategy_linkage_target_device

stragety_iddevice_number
1空调1
1空调2
1空调3...........
1罗普1.....

t_strategy_linkage_rule t3 INNER JOIN t_strategy_linkage_target_device t4 ON t3.strategy_id = t4.strategy_id会出现门禁开--罗普开启、温度26、模式制冷、风速高,这肯定不对,因此要加目标设备类型字段。

CREATE TABLE `t_strategy_linkage_rule` (`strategy_id` bigint(20) NOT NULL COMMENT '策略id',`target_device_type_no` varchar(20) NOT NULL COMMENT '目标设备类型',`trigger_condition` varchar(255) NOT NULL COMMENT '触发条件',`action` varchar(255) NOT NULL COMMENT '执行动作'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
CREATE TABLE `t_strategy_linkage_target_device` (`strategy_id` bigint(20) NOT NULL COMMENT '策略id',`device_type_no` varchar(50) NOT NULL COMMENT '设备编号大类',`device_number` varchar(255) NOT NULL COMMENT '被控设备编号'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;

加上之后门禁表数据示例如下:

t_strategy_linkage_rule

stragety_idtarget_device_type_notrigger_conditionaction
12门禁1开开启、温度26、模式制冷、风速高
123门禁1开
138门禁1开

t_strategy_linkage_target_device

stragety_iddevice_type_nodevice_number
12空调1
12空调2
12空调3...........
123罗普1.....

t_strategy_linkage_rule t3 INNER JOIN t_strategy_linkage_target_device t4 ON t3.strategy_id = t4.strategy_id AND t3.target_device_type_no = t4.device_type_no就没问题了。

4、优化

其实t_strategy_linkage_rule表是一个策略对应多个触发规则,一条规则有策略id、触发条件、目标设备类型、执行动作,而一个规则对应多个目标设备,因此t_strategy_linkage_target_device存放规则表id、目标设备编号即可。且上面方案有个缺点,比如 改一下需求,要实现温度传感器,温度高于30度时空调1~10 开启,温度低于20度时空调1~5关闭 空调6~10保持不变,如下,

t_strategy_linkage_rule

stragety_idtarget_device_type_notrigger_conditionaction
12温度高于30度开启、温度26、模式制冷、风速高
12温度低于20度关闭

t_strategy_linkage_target_device

stragety_iddevice_type_nodevice_number
12空调1...
12空调10
12空调1...
12空调5

INNER JOIN之后变成空调1~10温度>30 开启、温度26、模式制冷、风速高,温度<20 关闭;空调1~5温度>30 开启、温度26、模式制冷、风速高,温度<20 关闭,不满足需求,问题出在同一种设备类型区分不了触发条件和动作。

但是用优化过后的方案,表数据就变成,

t_strategy_linkage_rule

rule_idstragety_idtrigger_conditionaction
11温度高于30度开启、温度26、模式制冷、风速高
21温度低于20度关闭

t_strategy_linkage_target_device

rule_iddevice_number
1空调1...
1空调10
2空调1...
2空调5

通过rule_id关联,即使同一种设备类型,也可以找到对应的触发条件和动作。

http://www.dtcms.com/a/515650.html

相关文章:

  • 一文学会标准库USART
  • 5-6〔OSCP ◈ 研记〕❘ SQL注入攻击▸自动化工具SQLMap
  • Linux进程间通信:深入解析PV操作及其同步机制
  • Servlet 实例详解
  • 个人备案网站盈利动画制作网页
  • 网站建设饱和了吗上海市建设市场信息服务平台
  • 个人备案域名做企业网站wow slider wordpress
  • 【OPENGL ES 3.0 学习笔记】第九天:缓存、顶点和顶点数组
  • 2510rs,rust,1.85
  • 深度学习(13)-PyTorch 数据转换
  • rocketmq实现取消超时订单?兜底方案?
  • Linux如何安装使用Rust指南
  • 田块处方图可视化(PyQt5)
  • Rust算法复杂度-大O分析
  • 2510rs,rust清单4
  • 大型网站开发考试移动商城的推广方法
  • FastAPI之 自动化的文档
  • 日常开发20251022,传统HTML表格实现图片+视频+预览
  • 标题:鸿蒙Next音频开发新篇章:深入解析Audio Kit(音频服务)
  • 湖滨区建设局网站app开发公司排行榜做软件的公司
  • UDP实现客服与客户的咨询对话
  • 学习HAL库STM32F103C8T6(实时时钟项目、WIFI天气预报项目)
  • npm、yarn、pnpm的对比和优略
  • 离散卷积,小demo(小波信号分析)
  • Java 大视界 -- Java 大数据在智能教育学习社区互动模式创新与用户活跃度提升中的应用(426)
  • 建设比较好网站服务器用来做网站和数据库
  • C# iText7与iTextSharp导出PDF对比
  • HARDWARE 属性的Bitmap与普通Bitmap,GPU与RenderThread渲染与处理方式异同比较,Android
  • 东营市做网站的公司h5学习教程
  • 不同类型的金融产品(如股票、期货、加密货币)双时间尺度优化的差异化调整