☰
树莓派+Python搭建本地短信转发系统教程
2026/10/14 13:08:11 网站建设 项目流程

1. 项目背景与需求解析

上周帮朋友调试家庭安防系统时,发现一个痛点场景:当主手机不在身边时,经常错过物业发送的验证码和报警通知。市面上的商业短信转发服务要么收费昂贵,要么存在隐私风险。于是花了两个周末时间,用树莓派+Python搭建了一套本地化短信转发系统,完全开源可自定义,成本不到200元。

这套系统的核心价值在于:

  • 零成本转发:利用闲置安卓机作为接收端,树莓派处理转发逻辑
  • 隐私绝对可控:所有数据流经本地局域网,无需第三方服务器
  • 多通道通知:支持邮件/Telegram/企业微信等多渠道分发
  • 智能过滤:可设置关键词白名单,避免垃圾短信干扰

2. 硬件准备与系统架构

2.1 设备选型方案

基础配置组合(二选一):

| 设备类型 | 方案A(低成本) | 方案B(高性能) | |----------------|-----------------------|-----------------------| | 主控设备 | 树莓派3B+ | 树莓派4B 4G版 | | 短信接收端 | 闲置安卓机(需root) | 华为E3372 4G上网卡 | | 电源 | 5V2A MicroUSB | Type-C PD充电器 | | 网络环境 | 家庭WiFi | 有线千兆网络 |

实测建议:如果只是转发验证码等短文本,方案A完全够用。我用的红米Note5(二手价150元)+树莓派3B组合,连续运行三个月无异常。

2.2 系统通信流程图

[安卓手机] --USB连接--> [树莓派] --HTTP请求--> [通知平台] ↳--本地数据库--↲

关键组件说明:

  1. 短信接收端:通过Tasker+AutoTools组合监听短信入库事件
  2. 消息处理中心:Python脚本实现关键词过滤/去重/格式化
  3. 转发引擎:根据规则调用不同平台的API接口

3. 软件环境搭建实录

3.1 安卓端配置(以MIUI为例)

  1. 启用开发者模式:设置->我的设备->全部参数(连续点击MIUI版本)
  2. 安装必要工具链:
adb install tasker_5.9.3.apk adb install autotools_1.9.2.apk
  1. Tasker配置流程:
  • 新建事件上下文:Event -> Phone -> Received Text
  • 添加执行动作:Plugin -> AutoTools -> JSON Write
  • 关键参数设置:
{ "Sender": "%SMSRN", "Content": "%SMSRB", "Time": "%TIMES" }

3.2 树莓派核心代码实现

消息接收服务(Python3):

from flask import Flask, request import sqlite3 app = Flask(__name__) @app.route('/sms', methods=['POST']) def handle_sms(): data = request.json if not duplicate_check(data['Content']): process_message(data) return 'OK' def duplicate_check(content): conn = sqlite3.connect('sms.db') cursor = conn.cursor() cursor.execute("SELECT 1 FROM messages WHERE content=?", (content,)) return cursor.fetchone() is not None

消息转发逻辑示例(企业微信版):

import requests def send_to_wecom(content): url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send" params = { "key": "YOUR_WECOM_KEY" } payload = { "msgtype": "text", "text": { "content": f"【短信转发】\n发件人:{content['Sender']}\n内容:{content['Content']}" } } requests.post(url, params=params, json=payload)

4. 高阶功能扩展

4.1 智能分流方案

在process_message()函数中添加路由逻辑:

def process_message(data): if '验证码' in data['Content']: forward_to_email(data) elif '报警' in data['Content']: forward_to_telegram(data) else: store_to_database(data)

4.2 安全增强措施

  1. 通信加密:在安卓端和树莓派之间启用SSL
# 生成自签名证书 openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365
  1. 接口防护:添加Basic Auth验证
from flask_httpauth import HTTPBasicAuth auth = HTTPBasicAuth() @auth.verify_password def verify_password(username, password): return username == 'admin' and password == 'your_strong_password'

5. 踩坑实录与优化建议

高频问题排查表:

现象可能原因解决方案
Tasker未触发电池优化限制关闭MIUI的"神隐模式"
中文乱码编码格式不一致在HTTP头添加charset=utf-8
重复转发SQLite去重失效增加MD5指纹校验
企业微信发送失败API密钥过期重新创建webhook机器人

性能优化技巧:

  1. 使用lighttpd替代Flask内置服务器提升并发能力
  2. 对高频验证码短信启用内存缓存替代数据库查询
  3. 安卓端配置短信拦截规则,减少无效触发

6. 部署效果与数据统计

在我的家庭网络环境中测试结果:

  • 端到端延迟:98%的短信在3秒内完成转发
  • 系统负载:树莓派3B平均CPU占用率<15%
  • 存储占用:运行三个月后SQLite数据库仅1.2MB

典型应用场景:

  • 将公司门禁系统的验证码短信转发到工作手机
  • 海外旅行时通过Telegram接收国内银行卡交易提醒
  • 智能家居报警信息多终端同步

这套系统最让我满意的不是技术实现,而是真正解决了信息触达的"最后一米"问题。现在无论手机放在哪个房间,重要通知都不会错过。后续计划加入语音播报功能,对老人更友好

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询