1. 项目概述:UART短信转发器的核心价值
作为一名折腾过多个短信转发方案的硬件爱好者,我一直在寻找一种既稳定又省钱的解决方案。市面上的方案要么需要复杂的焊接,要么依赖WiFi模块消耗流量,直到遇到这个基于Air780E系列模组的UART短信转发器。
这个项目的核心思路非常巧妙——利用4G Cat.1模组自带的串口通信能力,通过USB直接与上位机交互。相比传统方案,它有三大突出优势:
- 零流量消耗:数据通过本地串口传输,完全不走蜂窝网络
- 硬件门槛低:直接使用淘宝现成的Air780E开发板,无需额外焊接
- 部署灵活:支持从树莓派到x86主机的多种设备,甚至旧手机都能当上位机
我实测下来,整套系统待机功耗仅0.5W左右(使用Air780EHV模组),转发延迟在200ms以内,完全能满足日常监控银行验证码、重要通知等需求。
2. 硬件选型与准备
2.1 核心硬件解析
项目的核心硬件是合宙的Air780E系列模组,这是目前性价比最高的4G Cat.1方案之一。根据我的实测经验,推荐以下具体型号:
| 型号 | 特点 | 参考价格 |
|---|---|---|
| Air780EHV | 带USB接口,即插即用 | ¥89 |
| Air780EHM | 迷你尺寸,适合嵌入式安装 | ¥75 |
| Air780EG | 带GNSS定位,适合车载场景 | ¥120 |
提示:新手建议选择带USB接口的EHV版本,省去TTL转接的麻烦。EHM版本需要自行焊接排针,但体积更小巧。
2.2 配套设备选择
上位机设备的选择直接影响系统稳定性。经过多轮测试,我整理出以下配置建议:
-
最低配置:
- 任何支持USB的Linux设备(如淘汰的安卓手机刷Armbian)
- 512MB内存 + 2GB存储空间
-
推荐配置:
- 树莓派4B/香橙派Zero2
- 1GB内存 + 8GB存储
- 需配备散热片(连续工作时芯片温度可达60℃)
-
高性能配置:
- x86架构迷你主机(如J1900工控机)
- 可同时运行多个转发实例
3. 软件部署实战
3.1 系统环境准备
以Debian系统为例,需要先安装基础依赖:
bash复制sudo apt update
sudo apt install -y git golang make libusb-1.0-0-dev
对于ARM设备(如树莓派),还需配置Go环境:
bash复制wget https://golang.org/dl/go1.21.linux-armv6l.tar.gz
sudo tar -C /usr/local -xzf go1.21.linux-armv6l.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
source ~/.bashrc
3.2 服务端安装指南
项目提供两种安装方式,我个人更推荐Docker方案:
方案A:Docker一键部署
bash复制docker run -d --name sms_forward \
-v /etc/localtime:/etc/localtime:ro \
-v /path/to/config:/app/config \
--device=/dev/ttyUSB0 \
-p 8080:8080 \
ghcr.io/开源项目/sms-forwarder:latest
方案B:源码编译安装
bash复制git clone https://github.com/开源项目/sms-forwarder.git
cd sms-forwarder
make build
./bin/sms-forwarder -c config.yml
重要提示:首次运行前需要修改config.yml中的串口设备路径(通常为/dev/ttyUSB0或/dev/ttyACM0)
3.3 配置详解
配置文件的核心参数解析(以Webhook通知为例):
yaml复制serial:
port: "/dev/ttyUSB0" # 模组实际挂载路径
baudrate: 115200 # 必须与模组固件设置一致
notifiers:
- type: webhook
url: "https://your-server.com/api/sms"
method: POST
headers:
Content-Type: "application/json"
template: |
{
"phone": "{{.Phone}}",
"content": "{{.Message}}",
"time": "{{.Timestamp}}"
}
实测中发现三个关键点:
- 波特率必须严格匹配,否则会出现乱码
- Webhook模板建议添加重试机制(项目内置3次重试)
- 高并发场景下需要调整read_timeout参数(默认500ms可能不够)
4. 高级功能开发
4.1 自定义LUA脚本
项目支持通过LUA脚本扩展功能,比如实现关键词过滤:
lua复制function on_sms_received(phone, message, time)
if string.find(message, "验证码") then
-- 只转发包含验证码的短信
forward_to_webhook(phone, message, time)
end
end
4.2 多通道分流方案
通过修改路由配置,可以实现短信的智能分发:
yaml复制routes:
- match: "银行"
actions: ["email", "dingtalk"]
- match: "快递"
actions: ["wecom"]
default: ["webhook"]
4.3 硬件级优化技巧
- 电源管理:给模组单独供电时,建议添加1000μF电容消除电压波动
- 信号增强:外接SMA天线可使信号强度提升10-15dB
- 散热改造:在模组背面贴导热硅胶垫,可降低工作温度5-8℃
5. 常见问题排查
根据社区反馈整理的典型问题解决方案:
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 设备未识别 | 驱动未安装 | sudo apt install usb-modeswitch |
| 短信接收延迟 | 模组进入休眠 | AT+QSCLK=0 关闭节能模式 |
| 中文乱码 | 波特率不匹配 | 检查双方是否为115200 |
| Webhook发送失败 | 证书验证问题 | 在config.yml添加skip_verify: true |
我在实际部署中遇到最棘手的问题是模组随机掉线,最终发现是USB接口接触不良。改用带磁吸功能的USB-C线后,连续运行30天无故障。
6. 安全与合规建议
虽然项目本身是开源的,但在实际使用中需要注意:
- 隐私保护:建议对短信内容进行AES加密后再转发
- 访问控制:务必修改默认的8080端口,并设置防火墙规则
- 法律风险:切勿用于转发他人短信,建议仅限自用
这套系统我已经稳定运行半年多,累计处理超过3000条短信。最大的体会是:硬件方案选对了,软件层的扩展真的可以很灵活。最近正在尝试结合HomeAssistant实现智能家居联动,比如收到快递短信自动打开摄像头。