数据源与输出动作设计说明(嵌入式局域网优化版)

一、概述

本设计针对嵌入式设备在局域网环境运行的特点进行优化,主要目标:

  1. 去掉所有互联网依赖(云推送、外网告警)。
  2. 强化本地执行、南向控制、局域网内通信能力。
  3. 保证轻量化和嵌入式资源可控。
  4. 提供统一的可配置接口,支持 bbolt 本地存储缓存和离线重发机制。
  5. 前端页面需支持数据源和输出动作的配置、监控和操作。

数据流向(影子快照融合版): 南向采集模块 / 北向订阅 → 输入适配器 → Shadow Device(原子快照) → Snapshot Bus(合并/优先级) → 调度引擎 → 规则执行单元 → 结果处理器 → Workflow/Commit → 北向局域网输出 / 本地动作 / 南向控制


二、数据源页面设计优化

1. 数据源列表视图

显示字段:

字段 描述 可操作性
数据源ID 系统唯一标识 不可修改
数据源名称 用户自定义名称 可编辑
数据源类型 南向采集(影子设备) / 北向订阅(局域网内) 可筛选
快照版本 最新 Snapshot Version 可刷新
快照延迟 Snapshot Bus P95 延迟 监控指标
Commit计数 差量 Commit 次数 可查看
协议类型 Modbus/BACnet/OPC UA/MQTT(局域网Broker) 不可修改
状态 在线 / 离线 / 异常 高亮异常
最新数据时间 最近采集时间 可刷新
数据质量 正常 / 异常 / 丢失 / 超时 颜色区分
订阅规则数 被多少规则共享 支持跳转规则列表

交互功能:

  • 支持按 协议类型 / 状态 / 异常类型 筛选
  • 支持批量启停数据源
  • 点击数据源跳转至详细页

2. 数据源详细页

详细信息展示:

  1. 基本信息

    • 数据源ID / 名称 / 类型 / 协议 / 连接参数
    • 局域网 IP / 端口 / 通信状态
  2. 实时数据

    • 最新采集值 / 时间戳 / 数据质量 / Snapshot Version(组完成后递增)
    • 历史数据趋势图(折线图/表格)
  3. 共享源订阅规则

    • 当前订阅规则列表
    • 规则状态(启用 / 停用)
    • 可跳转编辑规则
  4. 缓存与分发信息

    • 缓存使用率(环形/条形图)
    • Snapshot Bus 分发延迟(P95/P99)与队列深度
    • 合并窗口(window_ms)与优先级(Pack 高优先)
    • 去重与丢弃次数(去抖动生效)
  5. 操作按钮

    • 测试连接 / 立即采集
    • 启停数据源
    • 调整缓存策略
    • 异常清理(丢弃或重试缓存)

三、输出动作优化(嵌入式局域网版)

1. 总体原则

  1. 局域网优先:所有输出动作只在局域网内执行,不依赖互联网。
  2. 接口统一化:动作接口抽象化,可动态选择通道、设备及点位。
  3. 动作配置化:动作类型、目标、数据格式、触发条件可在前端配置。
  4. 可重试与容错:失败动作缓存至本地数据库(bbolt),支持重发。
  5. 轻量与稳定:异步执行、批量优化、资源可控。
  6. 触发源约束:北向发布只由 Points Commit 触发;规则只消费 OnSnapshot(不直接监听点位)。

2. 输出动作类型及优化细节

2.1 北向局域网上报(局域网内数据分发)

类型 优化设计
MQTT(局域网Broker) - QoS 0/1/2
- 支持主题模板(${SourceID}/${Metric})
- 支持批量/实时发送
- 支持离线缓存重发
- 支持局域网 IP 白名单
WebSocket(局域网内) - 单条或批量发送
- 连接状态监控
- 异常重连策略
- 可选心跳机制维持长连接

前端配置项:

  • 输出动作名称
  • 输出方式(MQTT / WebSocket / HTTP 局域网)
  • 局域网目标地址/端口
  • 数据格式选择(JSON / 二进制 / 字符串)
  • 重试策略配置(次数 / 间隔 / 最大等待)

优化要点:

  • 批量发送与压缩降低 CPU / 内存负载
  • 本地缓存与重发保证可靠性
  • 消息模板化与局域网访问控制
  • 提供成功率、延迟和失败次数统计
  • 发布源统一:由 Points Commit 触发(与 Snapshot/规则解耦,零侵入)

2.2 本地动作(嵌入式设备内部处理)

类型 优化设计
本地日志 - 支持日志级别
- 按规则生成单独日志文件
- 支持轮转与归档
数据库存储 - 使用轻量嵌入式数据库 bbolt
- 批量写入,异步操作
- 数据过期清理策略
文件缓存 - CSV/JSON 文件
- 支持断电/断网续存
- 文件大小和数量可配置

前端配置项:

  • 动作名称
  • 执行方式(日志 / 数据库 / 缓存队列)
  • 文件路径或 bucket 选择(bbolt)
  • 数据存储格式(JSON / protobuf)
  • 是否启用重试机制

优化要点:

  • 异步写入避免阻塞规则执行
  • 缓存过期策略防止存储满溢
  • 提供缓存状态监控(大小 / 条数 / 写入速度)

2.3 南向控制动作(局域网设备控制)

类型 优化设计
设备控制 - 支持 Modbus/BACnet 等局域网协议
- 支持批量/单点指令下发
- 支持执行结果回调
- 支持失败重试与告警
子系统联动 - 局域网内联动空调/照明/门禁等
- 支持条件触发
- 支持多目标动作顺序配置

前端配置项:

  • 动作名称
  • 通道选择(Modbus / BACnet / 其他协议)
  • 目标设备 ID / 地址
  • 点位选择(Device.Point)
  • 输出值或控制命令
  • 执行模式(单次 / 循环 / 条件触发)
  • 重试次数 / 重试间隔

优化要点:

  • 异步执行,规则快速返回
  • 动作执行结果可追溯
  • 支持失败通知与重试
  • 提供模拟测试功能
  • 统一工作流闭环:Check → Delay → Write → Confirm → Snapshot Refresh → Commit(北向自动发布)

2.4 动作触发策略与组合

  • 触发条件:规则结果触发(基于 OnSnapshot 的状态变化、阈值超限),可组合 AND/OR
  • 组合动作:一条规则可绑定多个动作(北向 + 南向 + 本地)
  • 前端页面

    • 规则选择 → 动作绑定
    • 多动作组合顺序配置
    • 条件触发逻辑可视化编辑器

3. 输出动作通用优化策略

  1. 统一动作管理:规则配置页统一管理所有动作,支持启停和优先级设置
  2. 异步执行与线程池:确保高频数据流时系统稳定
  3. 失败处理策略:入队列重试、失败记录、UI 告警
  4. 批量优化:支持批量发送 / 批量写入 / 批量控制,降低 CPU 和 I/O 压力
  5. 可监控性:统计成功率、延迟、失败次数,并提供前端仪表盘
  6. 来源一致性:所有北向发布与页面展示统一从 Points Commit / Snapshot Bus 消费,避免直接点位驱动

五、配置示例(快照与输出动作)

# system.yaml(节选)

snapshot_bus:
  window_ms: 250
  queue_capacity: 10000
  async: true
  priority:
    pack: high
    cell: normal

rule_engine:
  thread_pool:
    size: 32
    max_queue: 5000

points_commit:
  differential: true

outputs:
  mqtt:
    enabled: true
    qos: 1
    topic_template: "${SourceID}/${Metric}"
    retry:
      max_attempts: 5
      backoff_ms: 500

4. 数据可靠性与容错

  • 本地缓存:bbolt 数据库缓存失败动作,支持离线重发
  • 状态监控:前端显示动作最近执行状态、失败次数、错误信息
  • 重试策略:固定间隔 / 指数退避 / 手动重发
  • 安全与稳定:局域网内动作执行,无外网依赖,接口封装不暴露规则逻辑