外观
10. 传感器管理
10.0 快速上手:10 分钟接入第一个传感器
你有一台「空压机-A01」需要实时采集温度和振动数据。以下步骤带你完成传感器登记 → 数据接入 → 实时监控 → 报警配置的完整链路。
Step 1:登记传感器
进入「传感器管理」页面 → 点击「新增传感器」→ 填写传感器ID SENSOR-001、名称 压缩机温度传感器、关联设备 EQ-COM-001、类型 温度 → 设置正常范围 20-60℃、预警上限 75℃、报警上限 85℃ → 保存。 → 详见 §10.3
Step 2:配置 MQTT 数据上报
在 IoT 设备端配置 MQTT Broker 连接信息,主题格式:sensor/{tenant_id}/{sensor_id}/{metric}。例如 sensor/TENANT-DEFAULT/SENSOR-001/temperature,上报 JSON 格式数据。 → 详见 §10.3.4
Step 3:打开实时监控
进入「传感器实时监控」页面 → 点击「连接」按钮建立 WebSocket → 在传感器列表中选择已登记的传感器 → 点击「订阅」→ 实时数据卡片和趋势曲线开始更新。 → 详见 §10.4
Step 4:配置报警规则
进入「传感器报警管理」页面 → 点击「规则管理」→ 点击「新建规则」→ 命名 压缩机温度过高 → 关联传感器 SENSOR-001 → 条件类型 threshold(阈值触发)→ 配置报警级别 warning → 勾选「自动创建工单」→ 保存。 → 详见 §10.5
Step 5:使用模拟器测试(无真实设备时)
进入「传感器模拟器」页面 → 点击「连接MQTT」→ 点击「新增传感器」→ 模式选择 auto → 配置模拟参数(基准值、波动范围、间隔、趋势等)→ 保存后传感器自动开始按配置间隔发送数据 → 切换到实时监控页面查看模拟数据。 → 详见 §10.6
💡 完成以上步骤后,你已完成「登记 → 接入 → 监控 → 报警 → 模拟」的完整传感器管理链路。实时数据通过 MQTT 协议上报,经 WebSocket 推送到前端,报警规则触发后可自动生成工单。
10.1 功能概述
本章介绍「传感器管理」菜单组下的四个子模块(另含「设备健康评分」,入口在设备详情页)。传感器管理模块是设备运维系统与物理设备连接的桥梁,覆盖从传感器配置、数据采集、实时监控到报警管理的全流程:
| 模块 | 定位 | 核心功能 |
|---|---|---|
| 传感器管理 | 传感器配置与生命周期管理 | 传感器登记/编辑/删除、阈值配置、多协议支持(MQTT/HTTP/Modbus)、按设备/类型/状态筛选、批量导入 |
| 传感器实时监控 | 实时数据可视化 | WebSocket 实时连接、传感器卡片(实时值/状态/趋势)、ECharts 趋势曲线、多传感器同时监控、报警实时弹窗 |
| 传感器报警管理 | 报警规则与事件管理 | 报警规则 CRUD、四种条件类型(阈值/变化率/持续时间/组合)、报警级别(info/warning/critical/urgent)、报警确认/解决、自动创建工单、通知渠道配置 |
| 传感器模拟器 | 无设备时的测试工具 | MQTT 模拟器连接管理、模拟传感器配置(基准值/波动/趋势/噪声/异常概率)、自动/手动/场景三种模式、统计仪表板 |
| 设备健康评分 | 基于传感器数据的设备健康评估 | 四维度综合评分(传感器数据 40% + 故障率 30% + 维护合规性 20% + MTBF 10%)、健康等级判定、风险等级判定、维护建议生成 |
10.2 页面入口
- PC端:左侧菜单「传感器管理」→ 四个子菜单(需要对应权限)。「设备健康评分」入口在设备详情页,非独立菜单项
- PC端:设备详情页 → 可查看设备健康评分(详见 §10.7)
- 移动端:传感器报警推送通知 → 点击查看详情弹窗 → 支持确认/解决
10.3 PC端 - 传感器管理
10.3.1 页面布局
传感器管理页面是传感器配置的主入口,采用工具栏 + 表格布局:
顶部标题栏:页面标题「📡 传感器管理」+ 操作按钮组(刷新、新增传感器、批量导入)
筛选工具栏:
- 设备ID(文本输入)
- 传感器类型(下拉选择:温度/振动/压力/电流/电压)
- 状态(下拉选择:正常/预警/报警/离线)
- 启用状态(下拉选择:全部/启用/禁用)
- 搜索按钮、重置按钮
传感器列表表格:
- 传感器ID、名称、设备ID、类型、单位、最新值、状态(normal=绿色/warning=橙色/alert=红色/offline=灰色)、启用状态(显示
✓启用 /✗禁用 文本标记)、最后采集时间、操作按钮(查看/编辑/删除)
- 传感器ID、名称、设备ID、类型、单位、最新值、状态(normal=绿色/warning=橙色/alert=红色/offline=灰色)、启用状态(显示
💡 「传感器类型」筛选下拉仅包含 5 项:温度/振动/压力/电流/电压;新增/编辑弹窗的类型枚举为 7 项(详见 §10.3.2),两处范围不同。
- 分页:上一页/下一页按钮 + 页码显示 + 总记录数

10.3.2 新增传感器
点击「新增传感器」按钮,打开新增弹窗,包含以下字段:
| 字段 | 说明 | 必填 |
|---|---|---|
| 传感器ID | 唯一标识,如 SENSOR-001。需由调用方提供(新增 API 不会自动生成);批量导入时若 CSV 未提供 sensor_id,系统会自动生成 20 位去分隔符的 UUID 片段 | ✅ |
| 传感器名称 | 如:主轴温度传感器 | ✅ |
| 设备ID | 关联的设备ID,如 EQ-001 | ✅ |
| 传感器类型 | temperature(温度)/ vibration(振动)/ pressure(压力)/ current(电流)/ voltage(电压)/ humidity(湿度)/ other(其他)共 7 项 | ✅ |
| 单位 | 如:℃、Hz、MPa、A、V(自由文本) | ❌ |
| 协议 | MQTT / HTTP / Modbus | ❌(默认 MQTT) |
| MQTT主题 | 如:sensor/TENANT-DEFAULT/SENSOR-001/temperature | ❌ |
| 采集间隔 | 秒,默认 60 | ❌ |
| 正常范围 | 最小值 ~ 最大值(6 个独立字段:normal_min/max、warning_min/max、alert_min/max) | ❌ |
| 预警范围 | 最小值 ~ 最大值 | ❌ |
| 报警范围 | 最小值 ~ 最大值 | ❌ |
| 启用传感器 | 复选框,默认勾选 | ❌ |
阈值关系(推荐配置,非系统强制校验):正常范围(内)→ 预警范围(中间地带)→ 报警范围(外)。例如温度:正常 20-60℃ → 预警 60-75℃ → 报警 >75℃。
⚠️ 三层阈值是 6 个独立数值字段,后端 不会强制校验
alert > warning > normal的单调关系,需要运维人员自行保证配置合理。
⚠️ 协议支持现状:当前版本仅 MQTT 协议已实现完整的数据接收服务(
mqtt_service_multi_tenant.py)。HTTP / Modbus 选项在数据库中可存储,但尚未提供对应的数据接收端,选择后不会接收任何数据。

10.3.3 编辑传感器
点击表格行操作列的「编辑」,打开编辑弹窗。编辑弹窗与新增弹窗内容相同,但传感器ID字段变为只读状态。
编辑时注意:如果修改设备ID,系统会校验新设备是否存在;如果设备不存在,保存将失败并提示。
10.3.4 MQTT 数据上报格式
传感器登记后,IoT 设备端需配置 MQTT Broker 连接并按以下主题和格式上报数据:
MQTT 主题规范(多租户架构):
sensor/{tenant_id}/{sensor_id}/{metric}例如:sensor/TENANT-DEFAULT/SENSOR-001/temperature
数据上报 JSON 格式(最小字段集):
json
{
"sensor_id": "SENSOR-001",
"equipment_id": "EQ-COM-001",
"value": 65.5,
"timestamp": "2026-05-07T14:30:00Z",
"metadata": {
"battery": 85,
"signal_strength": -45
}
}字段说明:
sensor_id/equipment_id/value/timestamp:核心字段,timestamp建议带 UTC 后缀Z。metadata:设备端自定义元数据(电量、信号强度等),会被原样存入 TimescaleDBsensor_readings.metadataJSON 列。
⚠️ 避免使用
quality作为顶层字段:后端sensor_payload_service.py将quality识别为良率指标(yield_rate)的别名,上报顶层quality会被视为良率值参与业务计算,而非"数据质量分"。若需要表达数据质量/信号质量,请放入metadata.quality中。
⚠️
raw_data顶层字段会被静默丢弃:当前 MQTT / payload 服务未解析顶层raw_data。附加原始信息请使用metadata字段承载。
💡 系统支持多指标 payload 展开:当上报的 payload 包含多个指标时(如
{"temperature": 65.5, "vibration": 2.3}),系统会自动拆分为多条传感器记录。
10.3.5 批量导入
后端已提供 CSV 批量导入能力(_import_sensors),CSV 列支持:sensor_id、name、equipment_code、sensor_type、unit、protocol、topic、collect_interval、normal_min/max、warning_min/max、alert_min/max、is_active;其中 name、equipment_code、sensor_type 为必填,sensor_id 不提供时自动生成。导入完成后返回新增/更新/跳过/失败的数量及行级错误明细。
⚠️ 前端按钮当前未绑定事件:传感器管理页面顶部「批量导入」按钮在当前版本尚未接入前端交互,点击无反应。如需执行批量导入,请通过
/api/v1/import/sensors接口或后台批量导入入口调用。前端交互将在后续版本补齐。

10.4 PC端 - 传感器实时监控
10.4.1 页面布局
传感器实时监控页面是数据可视化的核心页面,采用卡片 + 曲线图 + 报警列表的组合布局:
- 顶部状态栏:
- WebSocket 连接状态指示灯(绿色=已连接 / 红色=断开 / 灰色=未连接)
- 在线传感器数、当前报警数、最后更新时间
- 连接/断开按钮
💡 「在线传感器数」的语义:该数值来自前端本地缓存
sensorDataCache,表示当前页面已接收到 WebSocket 推送数据的传感器数量,不是数据库中status != offline的传感器数。刚打开页面或刚连接 WS 时显示为 0,需要等到有数据推送后才会逐步累加。
左侧传感器选择区:
- 传感器多选下拉框(搜索过滤)
- 订阅 / 取消订阅 / 清空图表按钮
- 自动滚动开关
中间实时卡片区(传感器卡片网格):
- 每张卡片显示:传感器名称、当前值(大字号)、单位、状态彩色指示灯、状态标签
- 状态背景色随传感器状态动态变化(正常=绿色调 / 预警=橙色调 / 报警=红色调 / 离线=灰色调)
- 卡片数据由 WebSocket 实时推送更新
底部趋势曲线区:
- ECharts 渲染的实时趋势折线图
- 多传感器同时显示(不同颜色区分)
- X轴=时间,Y轴=传感器值
- 支持缩放、hover 查看具体数值
右侧报警列表区:
- 最新报警事件列表
- 显示报警级别标签、传感器名、报警消息、触发时间
- 点击可查看报警详情

10.4.2 WebSocket 连接
点击「连接」按钮,前端通过 WebSocket 建立与服务器的实时连接。连接成功后状态指示灯变为绿色,「在线传感器数」和「最后更新时间」开始更新。
WebSocket 连接地址:ws://<host>:8765?tenant_id=<租户ID>
订阅消息格式:
json
{
"action": "subscribe",
"sensor_ids": ["SENSOR-001", "SENSOR-002"]
}收到数据推送格式:
json
{
"type": "sensor_data",
"data": {
"sensor_id": "SENSOR-001",
"equipment_id": "EQ-COM-001",
"value": 65.5,
"timestamp": "2026-05-07T14:30:00Z",
"alert_level": "normal"
},
"push_time": "2026-05-07T14:30:00.123456Z"
}💡
alert_level取值为normal / warning / critical / urgent,表示本条数据对应的报警级别(而非传感器表的status字段)。push_time为服务端推送时间戳(UTC),可用于判断数据延迟。
10.4.3 多传感器同时监控
在传感器下拉框中可多选传感器,点击「订阅」后:
- 所有已订阅传感器的卡片同时显示在卡片区域
- 趋势曲线图中各传感器用不同颜色绘制,legend 可点击切换显示
- 支持随时取消订阅某个传感器

10.5 PC端 - 传感器报警管理
10.5.1 页面布局
传感器报警管理页面用于报警事件的查看、处理和报警规则管理:
- 顶部统计栏(3 个指标):
- 总报警数、待处理(open)、已确认(acknowledged)
💡 当前页面上方仅展示 3 个行内统计指标,「已解决数」和「今日新增」需结合下方状态分布图/趋势图查看。
工具栏:
- 刷新按钮、规则管理按钮(打开规则管理弹窗)
筛选栏(6 项):
- 状态(下拉)、报警级别(下拉)、设备ID(文本输入)、传感器ID(文本输入)、开始日期、结束日期
- 应用筛选 / 重置按钮
报警列表表格:
- 报警ID、传感器名称、报警级别(彩色标签)、报警消息、触发值/阈值、状态、触发时间、操作(确认/解决/查看详情)
底部图表区(三图表):
- 报警趋势图(ECharts 折线/柱状图 — 按时间统计报警数量)
- 报警级别分布图(ECharts 饼图 — info/warning/critical/urgent 占比)
- 报警状态分布图(ECharts 饼图 — open/acknowledged/resolved/closed 占比)
分页

10.5.2 报警处理流程
报警事件有四种状态,通过操作按钮流转:
| 当前状态 | 可用操作 | 操作后状态 | 说明 |
|---|---|---|---|
| open(打开) | 确认 / 解决 | acknowledged / resolved | 可直接确认也可直接解决;不支持从 open 直接关闭 |
| acknowledged(已确认) | 解决 / 关闭 | resolved / closed | 填写解决说明,可选关联工单;或直接关闭归档(可跳过 resolved) |
| resolved(已解决) | 关闭 | closed | 归档事件 |
| closed(已关闭) | 查看详情 | — | 历史记录只读 |
确认报警:点击「确认」按钮,弹出输入框可 选填确认说明(notes,可省略),提交后系统会记录确认人、确认时间和确认说明,状态变为 acknowledged。
解决报警:点击「解决」按钮,弹出填写解决说明弹窗(必填),可选关联工单号。提交后状态变为 resolved。支持从 open 或 acknowledged 状态直接解决。


10.5.3 报警规则管理
点击「规则管理」按钮,打开规则管理弹窗,包含:
规则列表表格:
- 规则名称、关联传感器、条件类型(阈值/变化率/持续时间/组合 — 带颜色标签)、报警级别、自动创建工单(是/否)、启用开关、操作(编辑/删除)
工具栏:新建规则、刷新按钮

10.5.4 新建/编辑报警规则
点击「新建规则」或「编辑」按钮,打开弹窗:
| 字段 | 说明 | 必填 |
|---|---|---|
| 规则名称 | 如:压缩机温度过高 | ✅ |
| 关联传感器 | 下拉选择传感器 | ❌(不选则为全局规则) |
| 关联设备 | 设备ID | ❌(不选则为全局规则) |
| 条件类型 | threshold(阈值)/ change_rate(变化率)/ duration(持续时间)/ composite(组合条件) | ✅(默认 threshold) |
| 条件配置(JSON) | 根据条件类型不同,配置阈值、变化率、持续时间等参数 | ✅ |
| 报警级别 | info / warning / critical / urgent | ✅(默认 warning) |
| 自动创建工单 | 开关 | ❌(默认否) |
| 工单优先级 | low / medium / high / urgent | ❌(当自动创建工单开启时生效) |
| 通知渠道 | 多选:站内通知/邮件/短信/企业微信 | ❌ |
| 通知用户 | 多选用户ID列表 | ❌ |
| 冷却期 | 秒,默认 3600(同一条件在此时间内不重复触发) | ❌ |
| 启用 | 开关 | ❌(默认启用) |
条件类型说明:
| 条件类型 | 说明 | 配置示例 |
|---|---|---|
| threshold | 阈值触发 | 简单区间格式:{"min": 85, "max": 95};或操作符格式:{"field": "value", "operator": ">", "threshold": 80} |
| change_rate | 变化率触发 | {"field": "value", "time_window": 300, "rate_threshold": 0.1} |
| duration | 持续时间触发 | {"field": "value", "operator": ">", "threshold": 70, "duration": 300} |
| composite | 组合条件 | {"logic": "AND", "conditions": [...]} |
💡 通知渠道英文 key:
notification_channels字段为 JSON 列表,常用取值为in_app(站内通知)/sms(短信)/wecom(企业微信)。notification_users为用户 ID 字符串数组。

10.5.5 关联工单
开启「自动创建工单」后,当报警触发时系统会自动创建一张工单并关联到该报警记录。在报警详情中可点击工单号跳转到工单详情页面。手动解决报警时也可以选择关联已有工单。
10.6 PC端 - 传感器模拟器
10.6.1 页面布局
传感器模拟器用于在无真实IoT设备时模拟传感器数据上报,是开发测试和演示的重要工具:
顶部连接状态区:
- MQTT 连接状态指示灯
- 连接/断开 MQTT 按钮
- 重新加载配置按钮
统计卡片区:
- 活跃传感器数 / 总传感器数
- 发送总量 / 成功数 / 失败数
- 成功率百分比
- 发送历史列表(最近N条)
传感器配置表格:
- 传感器ID、名称、设备ID、类型、单位、模拟模式(自动/手动)、运行状态指示灯、最新发送值、操作(编辑/删除)
- 新增传感器按钮
手动发送面板(选中手动模式的传感器时显示):
- 当前选中传感器信息
- 数值输入框 + 发送按钮

10.6.2 MQTT 连接管理
点击「连接MQTT」按钮,系统使用配置的 Broker 地址(默认 localhost:11883)建立连接。连接成功后状态指示灯变绿,所有启用的自动模式传感器开始按配置间隔发送数据。
MQTT 连接参数(可在连接时配置,也可不填直接使用默认值):
| 参数 | 默认值 | 说明 |
|---|---|---|
| Broker地址 | localhost | MQTT Broker 主机 |
| 端口 | 11883 | MQTT Broker 端口(非标准 1883) |
| 用户名 | — | 认证用户名(可选) |
| 密码 | — | 认证密码(可选) |
💡 端口默认为
11883(在.env的MQTT_BROKER_PORT中配置),非 MQTT 标准端口 1883。连接 IoT 设备或外部客户端时请确认端口一致。
10.6.3 新增/编辑模拟传感器
点击「新增传感器」按钮,打开配置弹窗:
| 字段 | 说明 | 必填 |
|---|---|---|
| 传感器ID | 唯一标识,如 SIM-TEMP-001 | ✅ |
| 传感器名称 | 如:模拟温度传感器 | ✅ |
| 设备ID | 关联设备ID | ✅ |
| 传感器类型 | temperature(温度)/ vibration(振动)/ pressure(压力)/ current(电流)/ voltage(电压)/ speed(转速)/ flow(流量)共 7 项 | ✅ |
| 单位 | ℃、Hz、MPa、A、V | ❌ |
| 模拟模式 | auto(自动)/ manual(手动) | ✅(默认 auto) |
| 基准值 | 数据围绕此值波动 | ✅(默认 25) |
| 波动范围 | ±范围 | ✅(默认 5) |
| 发送间隔 | 秒 | ✅(默认 10) |
| 趋势 | stable(平稳)/ rising(上升)/ falling(下降)/ random(随机) | ✅(默认 stable) |
| 噪声水平 | 0-1,叠加的随机噪声比例 | ❌(默认 0.1) |
| 异常概率 | 0-1,产生异常值的概率 | ❌(默认 0.05) |
| 正常范围 | 最小值 ~ 最大值 | ❌ |
| 预警范围 | 最小值 ~ 最大值 | ❌ |
| 报警范围 | 最小值 ~ 最大值 | ❌ |
| 启用 | 开关 | ❌(默认启用) |

10.6.4 两种模拟模式
| 模式 | 行为 | 适用场景 |
|---|---|---|
| auto(自动) | 按配置的间隔、基准值、波动、趋势自动生成并发送数据 | 日常演示、功能测试 |
| manual(手动) | 手动输入数值,点击发送按钮发送 | 测试特定阈值触发报警 |
手动模式:在传感器列表中选中手动模式的传感器 → 在「手动发送面板」输入数值 → 点击「发送」。可逐条发送不同的值来测试报警规则触发。
⚠️ scenario 场景模式暂不对前端开放:后端模拟器引擎(
scenario_engine.py)已实现场景脚本能力,SensorCreate.mode的数据库枚举也支持auto/manual/scenario,但 PC 端新增/编辑弹窗当前 固定传入mode: 'auto',未暴露 scenario 选项。若需要用场景脚本驱动演示,请直接调用/api/v1/simulator/sensors接口或通过配置文件注入。

10.6.5 配置持久化
模拟传感器配置保存在 JSON 文件中,系统重启后自动加载。点击「重新加载配置」可手动重新加载文件(适用于外部修改配置文件后刷新)。
10.7 设备健康评分
10.7.1 评分模型
设备健康评分是基于传感器数据、故障历史、维护记录等数据综合计算得出的设备健康度指标。评分模型采用加权计算:
| 维度 | 权重 | 数据来源 | 说明 |
|---|---|---|---|
| 传感器数据得分 | 40% | 传感器实时数据 | 传感器值偏离正常范围的程度;所有传感器综合评估 |
| 故障率得分 | 30% | 历史工单 | 设备历史故障频率和严重程度 |
| 维护合规性得分 | 20% | 维护计划执行记录 | 维护计划是否按时执行、执行质量 |
| MTBF 得分 | 10% | 故障间隔时间 | 平均无故障运行时间的标准化评分 |
健康等级(对应后端枚举 excellent / good / fair / poor / critical):
📋 评分维度与数据库字段对照:
performance_score= 传感器数据得分 /reliability_score= 故障率得分 /maintenance_score= 维护合规性得分 /sensor_score= 传感器数据得分(与 performance_score 同值)
| 评分范围 | 健康等级(枚举) | 中文标签 | 标签颜色 |
|---|---|---|---|
| 90-100 | excellent | 优秀 | 🟢 绿色 |
| 75-89 | good | 良好 | 🟡 黄色 |
| 60-74 | fair | 一般 | 🟠 橙色 |
| 40-59 | poor | 较差 | 🔴 红色 |
| 0-39 | critical | 严重(后端返回 critical) | ⚫ 灰色 |
风险等级:后端综合总评分、传感器得分、故障率得分三个维度联合判定,输出 low / medium / high / critical 四个等级,对应中文“低风险 / 中风险 / 高风险 / 危急”。
10.7.2 查看设备健康评分
在设备详情页面可查看当前设备的健康评分、各维度得分明细、健康等级、风险等级和维护建议。评分可通过定时任务定期刷新。

10.8 移动端操作
10.8.1 传感器报警通知
移动端接收传感器报警推送通知,点击通知弹出「传感器报警详情」弹窗,展示报警的完整信息(报警级别、设备/传感器、触发值/阈值、报警时间、确认/解决状态等),支持在移动端直接确认或解决报警。

10.8.2 工单中的传感器数据
在工单详情页中,如果工单关联了设备且该设备有传感器,会在工单信息区显示设备的传感器最新读数,帮助执行人员了解设备当前运行状态。
10.9 常见问题
Q:传感器状态一直显示「离线」怎么办? A:检查以下几点:① IoT 设备端 MQTT Broker 连接是否正常;② MQTT 主题格式是否与传感器配置中的 topic 一致;③ MQTT 服务(mqtt_service)是否正常运行;④ 检查日志文件:多租户 MQTT 服务默认输出到 log/mqtt_service.log,如同时使用旧版单租户 MQTT 模块,日志位于 _log/mqtt_service.log;两个文件会同时存在,请确认实际运行的服务对应的日志文件。
Q:MQTT Broker 地址在哪里配置? A:MQTT Broker 地址在 .env 环境变量中配置,关键变量包括 MQTT_BROKER_HOST、MQTT_BROKER_PORT、MQTT_USERNAME、MQTT_PASSWORD。
Q:阈值配置中的「预警」和「报警」有什么区别? A:预警(warning)是一种较轻的提醒,表示传感器值已偏离正常范围但尚未达到危险水平;报警(alert)是较严重的警告,表示传感器值已达到或超过危险阈值。管理员可以为预警和报警配置不同的通知渠道和处理流程。
Q:报警规则中的冷却期是什么? A:冷却期是指同一报警规则在触发一次后,在此时间段内不会再次触发。例如冷却期设置为 3600 秒,则同一传感器同一规则在一小时内仅触发一次报警,避免重复报警刷屏。
Q:如何让报警自动创建工单? A:在报警规则中开启「自动创建工单」开关,设置工单优先级。当规则触发报警时,系统自动创建一张关联的工单。工单的设备和优先级从规则配置继承。
Q:没有真实 IoT 设备该如何测试传感器功能? A:使用「传感器模拟器」模块。先连接 MQTT Broker,然后新增模拟传感器(模式选 auto),配置好基准值/波动/间隔后保存,传感器即自动按配置间隔发送模拟数据。切换到「传感器实时监控」页面可直观查看实时数据流。
Q:支持哪些数据接入协议? A:系统数据模型保留了三种协议的配置枚举,但当前版本 只有 MQTT 已实现数据接收服务:① MQTT(已支持、推荐) — 最常用的 IoT 协议,配合本系统 mqtt_service_multi_tenant.py 服务使用;② HTTP(计划中) — 数据模型支持,但尚未提供轮询/接收端;③ Modbus(计划中) — 数据模型支持,但尚未提供采集端。选择 HTTP / Modbus 后不会有数据自动写入。
Q:设备健康评分多久更新一次? A:设备健康评分通过定时任务定期计算,默认频率可在系统配置中调整。也可以通过 API 手动触发单台设备的健康评分重新计算。
Q:传感器数据存储在哪里?历史数据保留多久? A:传感器数据采用 MySQL + TimescaleDB 双写机制:MySQL 中 sensor_data_records 表存储原始记录,TimescaleDB(时序数据库)的 sensor_readings 超表存储持久化指标数据并提供 5min / hourly / daily 三个连续聚合视图。当前版本并未内置自动的数据保留/压缩策略,默认不会自动清理历史数据。如需启用 TimescaleDB 的自动压缩或保留策略,需由 DBA 在数据库层面使用 add_retention_policy / add_compression_policy 手工配置。
10.10 相关权限
传感器与IoT模块涉及的权限列表:
| 权限 | 中文名称 | 说明 |
|---|---|---|
sensor:view | 查看传感器 | 传感器管理菜单入口权限,查看传感器列表和详情;同时控制「传感器模拟器」子菜单可见性 |
sensor:create | 创建传感器 | 新增传感器配置 |
sensor:update | 更新传感器 | 编辑传感器信息(名称、阈值、采集间隔等) |
sensor:delete | 删除传感器 | 删除传感器配置 |
sensor:data:view | 查看传感器数据 | 查看传感器实时监控页面、历史数据和趋势曲线 |
sensor:alert:manage | 管理传感器告警 | 传感器报警管理菜单入口,管理报警规则和报警事件 |
💡 菜单可见性说明:前端「传感器与 IoT」一级菜单的可见条件是
sensor:view或sensor:data:view或sensor:alert:manage任一成立(OR 关系),因此只要拥有其中任一个子菜单权限即可看到入口。三个子菜单的可见性分别控制:「传感器管理」和「传感器模拟器」都使用sensor:view(两者共用同一权限,不分开);「传感器实时监控」 使用sensor:data:view;「传感器报警管理」 使用sensor:alert:manage。
角色默认权限分配:
| 角色 | 传感器与IoT相关权限 |
|---|---|
| 超级管理员 | 全部权限(含 sensor:view / create / update / delete / data:view / alert:manage) |
| 租户管理员 | 全部权限(含 sensor:view / create / update / delete / data:view / alert:manage) |
| 设备主管 | sensor:view / create / update / data:view / alert:manage(无 delete) |
| 技术员 | sensor:view / data:view(只读查看) |
| 操作员 | sensor:view / data:view(只读查看) |
| 仓库管理员 | 无传感器相关权限 |
| 只读用户 | sensor:view / data:view(只读查看) |
