市场上许多基于SIP的告警解决方案价格偏高,且难以支持定制化需求。通过开源思路,我们可以为有特定需求的用户提供非常灵活的替代方案。SIP → GPIO Ringer (Raspberry Pi) 正是这样一个将SIP呼叫状态转换为物理警报的实用项目。

SIP呼叫组振铃器 (树莓派) 概述
本项目实现了一个由SIP(基于 baresip协议栈)呼叫活动驱动的物理警报振铃器。其核心是让树莓派注册为一个SIP端点,加入特定的呼叫组,并实时检测呼入呼叫状态。当呼叫组开始响铃时,树莓派会驱动外部MOSFET开关模块上的GPIO触发输入,从而为高可见度的12V紧急LED信标供电。一旦呼叫结束或被取消,警报便会自动停止。
我们设计该系统为一个无头、可通过PoE供电的设备,非常适合办公室、车间等环境,在这些地方,传统的听觉振铃往往因环境嘈杂而失效。
架构摘要
整个系统的工作流程可以概括为:SIP 呼叫 → baresip (SIP 端点) → sip_watch.sh (事件解析器) → HTTP (localhost) → Flask 服务 (GPIO 控制) → MOSFET 触发器 → 12V LED 信标。
- 触发源: SIP呼入呼叫状态。
- 控制器: 树莓派 4 (推荐PoE供电)。
- 开关: XY-MOS 串联 MOSFET 模块。
- 负载: 12V 紧急LED信标。
- 关键设计: 树莓派永不直接为LED供电,实现了电气隔离。软件中还设置了超时机制,可防止警报被无限期激活,提供故障保护。
硬件摘要
所需的核心硬件组件包括:
- 树莓派 4 (仅使用以太网版即可)
- PoE HAT (会占用GPIO引脚1–6)
- XY-MOS MOSFET 触发模块
- 12V 直流电源
- 带5A保险丝的在线保险丝座
- 12V 紧急LED (汽车点烟器样式)
电源模型(关键注意事项)
务必区分两套独立的电源系统:
- 树莓派电源: 仅通过PoE供电。
- LED电源: 由外部12V电源提供。
两套电源之间没有共享的正极轨,但必须在以下三点之间建立可靠的公共接地连接:
- 树莓派的GND (物理引脚 14)
- MOSFET模块的 VIN−
- 12V 电源的负极
GPIO 使用定义
| 功能 |
BCM 编号 |
物理引脚 |
| MOSFET 触发 |
18 |
12 |
| 接地 |
GND |
14 |
软件组件
系统的控制核心是一个 Flask GPIO 服务 (app.py),其设计注重安全性与可靠性:
- 在
gunicorn 应用服务器下运行。
- 从 Python 虚拟环境中执行,隔离依赖。
- 服务仅绑定到本地回环地址
127.0.0.1:5005,不暴露给外部网络。
- 由
systemd 通过 ringer.service 单元文件进行管理,确保开机自启和进程守护。
服务提供的API端点:
POST /ring/on, POST /ring/off
POST /ring/start, POST /ring/stop (功能同上,提供别名)
GET /health (用于健康检查)
项目开源地址
完整的代码、配置详情及更深入的搭建说明,可以在 GitHub 上找到该开源项目: https://github.com/union95bb2/voip-ringer 。如果你对这类将网络协议与硬件控制结合的开源实战项目感兴趣,欢迎到 云栈社区的开源实战板块 探索更多精彩内容。
|