在新建系统中,通过 HTTP API 或消息队列发送告警并不困难。真正棘手的情况通常出现在存量环境:
- 监控平台已经稳定运行多年,不方便修改核心代码;
- NVR、摄像机、防火墙只支持发送邮件;
- 第三方平台虽然支持 Webhook,但回调字段无法自定义;
- 工业软件由原厂维护,新增接口的成本很高;
- 多套系统的告警格式完全不同。
如果为了接入一个网络报警灯,就要求所有平台重新开发接口,项目通常很难推进。
更可行的思路是增加一层“协议与数据适配”:能发送 Webhook 的系统使用自定义 API,只有邮件能力的设备使用 SMTP 或 IMAP,再由语音通知终端完成灯光、提示音与 TTS 播报。
本文以博灵 Q 系列智能监控终端为例,介绍两种适合存量系统的低改造接入方案。
本文侧重技术实现。具体功能、字段和配置方式应以实际设备版本及官方文档为准。
一、接入前先对告警源分类
不要一开始就讨论用哪种接口,应该先统计现有系统具备哪些输出能力。
| 告警源能力 | 推荐接入方式 | 改造工作量 |
|---|---|---|
| 支持自定义 HTTP 请求 | 单次告警 API | 低 |
| 支持固定格式 Webhook | 自定义 API | 低 |
| 只能发送邮件 | 本地 SMTP 或 IMAP | 低 |
| 支持 Modbus TCP | 指令模板 | 中 |
| 可以执行脚本 | Python、Shell 调用 API | 中 |
| 只有开关量输出 | 需要额外网关或采集模块 | 较高 |
对于老旧系统,最值得优先评估的是“固定格式 Webhook”和“邮件告警”。这两类系统虽然不能按照设备标准 API 构造请求,但已经具备向外发送事件的能力。
二、低改造告警架构
系统可以按照两条链路设计:
链路一:固定格式 Webhook 业务系统 / 云监控 / 运维平台 │ │ HTTP POST ▼ 自定义 API 字段映射 │ ┌──────┴──────┐ │ │ TTS 模板 LED 级别规则 │ │ └──────┬──────┘ ▼ 智能声光语音告警 链路二:邮件告警 NVR / 摄像机 / 防火墙 / 老旧软件 │ │ SMTP ▼ 本地 SMTP 或第三方邮箱 │ │ IMAP / 本地接收 ▼ 主题、发件人、正文解析 │ ▼ 智能声光语音告警两条链路的共同目标,是把外部系统的原始数据转换成三个结果:
- 播报什么;
- 使用什么灯光和提示音;
- 是否需要重复提醒。
三、方案一:用自定义 API 适配固定 Webhook
假设某监控平台只能发送以下格式:
POST /alarm Content-Type: application/x-www-form-urlencoded请求字段为:
host=生产服务器01 service=磁盘使用率 level=1 value=95% time=2026-08-21 09:30:00其中:
level=1表示严重;level=2表示警告;level=3表示恢复。
这个结构与语音通知终端的标准单次告警 API 并不一致,但可以通过自定义 API 建立映射。
1. 配置语音模板
可以按以下顺序组合字段:
固定文本:主机 普通字段:host 固定文本:监控项 普通字段:service 固定文本:当前值 普通字段:value 固定文本:告警级别 解析字段:level同时建立解析规则:
1 → 严重 2 → 警告 3 → 已恢复最终播报内容类似:
主机生产服务器01,监控项磁盘使用率,当前值百分之九十五,告警级别严重。
相比只播放固定录音,动态 TTS 可以直接告诉值班人员故障对象和指标,减少再次查询监控平台的时间。
2. 配置 LED 规则
将level设置为 LED 判断字段:
level | 通知组 | 建议效果 |
|---|---|---|
| 1 | 严重告警 | 红色旋转、重复播报 |
| 2 | 警告 | 黄色闪烁、播报两次 |
| 3 | 恢复通知 | 绿色常亮、播报一次 |
通知组应提前在设备管理界面中创建,并根据现场环境设置音量、提示音、语速、灯光样式和免打扰时段。
3. 测试自定义接口
假设自定义路径名称为alarm,测试请求可以写成:
curl -X POST \ "http://192.168.0.66/api/api/user_msg/alarm" \ -F "host=生产服务器01" \ -F "service=磁盘使用率" \ -F "level=1" \ -F "value=95%" \ -F "time=2026-08-21 09:30:00"正式使用前需要检查设备的 API 安全配置。若已启用鉴权,应按照当前版本要求配置签名、访问控制或其他认证措施。
4. 自定义 API 的适用边界
自定义 API 适合字段结构稳定的 Webhook。如果对方平台随时可能增加嵌套 JSON、修改字段名称,建议在中间增加独立的告警网关,不要把所有转换逻辑都放在终端配置中。
合理的职责划分是:
简单字段映射 → 设备自定义 API 复杂 JSON 转换 → 告警网关 去重、聚合、限流 → 告警网关 声光与语音执行 → 语音通知终端四、方案二:通过邮件监控接入老旧设备
不少视频监控和网络安全设备都支持邮件告警,例如:
- NVR 视频信号丢失;
- 摄像机移动侦测;
- 防火墙攻击事件;
- 存储硬盘故障;
- UPS 电池异常;
- 老旧软件任务执行失败。
这些设备可能没有开放 API,但只要能发送 SMTP 邮件,就可以接入智能声光告警。
博灵 Q 系列文档提供两类邮件收取方案。
本地 SMTP 接收
终端在局域网中作为邮件接收端。告警设备把 SMTP 服务器地址填写为终端 IP,邮件不必经过互联网。
这种方式适合:
- 完全隔离的内网;
- 不允许使用外部邮箱的监控网络;
- NVR、摄像机等局域网设备;
- 对邮件送达速度要求较高的现场。
IMAP 邮箱收取
终端定期登录第三方或内部邮箱,读取未读告警邮件。
这种方式适合:
- 多个地点共用一个告警邮箱;
- 告警设备只能连接现有邮件服务器;
- 需要保留完整邮件记录;
- 终端与告警源不在同一局域网。
使用 IMAP 时,应确认邮箱是否要求客户端专用密码,不要直接使用个人邮箱主密码。
五、用 Python 模拟发送一封设备告警邮件
下面的脚本可以用于测试本地 SMTP 接收功能:
import os import smtplib from email.mime.text import MIMEText from email.header import Header SMTP_HOST = os.environ.get( "ALARM_SMTP_HOST", "192.168.0.66" ) SMTP_PORT = int( os.environ.get("ALARM_SMTP_PORT", "25") ) SMTP_USER = os.environ.get("ALARM_SMTP_USER") SMTP_PASSWORD = os.environ.get("ALARM_SMTP_PASSWORD") FROM_ADDRESS = "nvr@example.local" TO_ADDRESS = "alarm@example.local" body = """ EVENT TYPE: Video Signal Lost EVENT TIME: 2026-08-21 09:30:00 NVR NAME: 一号监控室录像机 CAMERA NAME: 北门摄像机 """ message = MIMEText(body, "plain", "utf-8") message["Subject"] = Header( "Video Signal Lost", "utf-8" ) message["From"] = FROM_ADDRESS message["To"] = TO_ADDRESS with smtplib.SMTP(SMTP_HOST, SMTP_PORT, timeout=10) as client: client.ehlo() # 是否需要认证,以设备当前 SMTP 配置为准 if SMTP_USER and SMTP_PASSWORD: client.login(SMTP_USER, SMTP_PASSWORD) client.sendmail( FROM_ADDRESS, [TO_ADDRESS], message.as_string() ) print("测试邮件已发送")PowerShell 中可以这样配置测试参数:
$env:ALARM_SMTP_HOST = "192.168.0.66" $env:ALARM_SMTP_PORT = "25" python send_alarm_mail.py如果本地 SMTP 启用了认证,应通过环境变量提供账户信息,不要把密码直接写进脚本或提交到代码仓库。
六、如何从邮件中提取有效告警内容
一封 NVR 邮件可能包含大量固定文本,直接全文播报会非常冗长。更合理的方式是使用主题关键词和正则表达式提取关键字段。
例如邮件正文:
EVENT TYPE: Video Signal Lost EVENT TIME: 2026-08-21 09:30:00 NVR NAME: 一号监控室录像机 CAMERA NAME: 北门摄像机需要提取摄像机名称,可以使用类似规则:
(?<=CAMERA NAME:).*语音模板可以设置为:
摄像机信号丢失,设备名称为:<正则提取结果>最终播报:
摄像机信号丢失,设备名称为北门摄像机,请值班人员检查。
为了减少误报,邮件规则至少应同时限制:
- 发件人;
- 主题关键词;
- 正文格式;
- 对应通知组。
不要仅凭一个过于宽泛的关键词触发严重告警。例如只匹配“Error”,可能导致大量无关邮件被转换成声光提醒。
七、海康 NVR 联动示例
以支持邮件通知的 NVR 为例,可以按照以下流程配置:
- 在智能监控终端中启用本地 SMTP;
- 设置邮件监控规则和通知组;
- 在 NVR 中填写终端 IP 和 SMTP 端口;
- 配置发件人与收件人;
- 根据设备要求决定是否启用 SMTP 认证;
- 在事件联动中选择邮件通知;
- 发送测试邮件;
- 验证灯光、语音内容和首页告警记录。
常见事件包括:
- 视频信号丢失;
- 摄像机离线;
- 硬盘异常;
- 移动侦测;
- 遮挡检测;
- 网络断开。
这种方案不要求 NVR 支持 HTTP API,只使用原有邮件能力即可完成网络报警灯联动。
八、生产部署的安全注意事项
邮件和自定义 API 都属于网络入口,部署时不能只关注“是否能够触发”。
建议完成以下安全配置:
- 修改设备默认管理密码和 API Key;
- 将终端放在管理 VLAN 或受控网段;
- 使用 ACL 限制能够访问 API 和 SMTP 端口的主机;
- 防止本地 SMTP 被配置成开放中继;
- 限定允许触发规则的发件人;
- 不直接向公网暴露管理界面;
- 对 Webhook 增加签名或来源验证;
- 避免在语音中播报密码、Token、身份证号等敏感信息;
- 为相同事件配置去重和频率限制;
- 定期检查邮件收取失败和接口调用日志;
- 为终端本身设置离线检测。
邮件标题和正文属于外部输入。在生成语音前,应控制文本长度,并过滤不需要播报的内容,避免异常邮件长时间占用播报队列。
九、什么时候不适合直接使用邮件监控
邮件方案改造成本低,但不应该被视为所有场景的首选。
以下情况更适合 HTTP API 或 Modbus TCP:
- 要求秒级甚至更低延迟;
- 需要可靠保存告警任务 ID;
- 需要创建和删除周期性告警;
- 需要对大量事件进行去重和聚合;
- 需要精确控制灯光颜色、样式和播报次数;
- PLC 或组态软件已经支持 Modbus TCP;
- 需要获得结构化接口响应。
可以将邮件看作存量系统的兼容入口,将 HTTP API 和 Modbus TCP 作为新系统的主要集成方式。
结语
改造旧系统时,最好的方案不一定是重新开发全部接口,而是充分利用它已经具备的输出能力。
对于能够发送固定 Webhook 的系统,可以利用自定义 API 完成字段、告警等级和通知组映射;对于只能发送邮件的 NVR、防火墙和老旧软件,可以通过本地 SMTP 或 IMAP,把邮件内容转换成智能声光告警。
博灵 Q 系列语音通知终端同时提供 HTTP API、自定义 API、邮件监控、Modbus TCP、SNMP 等能力,因此可以作为多种存量系统与现场值班人员之间的告警适配节点。
真正高质量的实施,不是让报警灯“成功响起来”,而是保证它只在必要时响、能够说明发生了什么,并在故障恢复后正确结束整个告警流程。
参考资料:
- 博灵 Q 系列产品介绍
- 自定义 API
- 邮件监控
- 联动海康 NVR
- 单次告警 API
- Modbus TCP