让你的树莓派和手机备号不再吃灰:短信转发
写在前面
在大妈四五年,一直都是默默买买买,从来没写过文章,所以这是第一次,写得不好多多包涵
作为一个居家理科男,平时除了喜欢修修补补diy,家里的日用开销也是我包干的,手上有些自己无限回购的好东西,后面看情况也跟大家做个分享,欢迎关注
回归正题,手上有块3B,是当年在某鱼淘的垃圾,到手后接了一块闲置的3.5寸1TB硬盘,折腾了下载机(aria2+AriaNG的方案)、SMB、gogs,配置了免密登录和autossh反向隧道,最后写了shell脚本定期全局多介质对系统进行备份,到这份上基本就算完了。就这样放在办公室一年多,虽然性能弱鸡,但不可否认确实给工作带来了些许便利,比如我工作中写的代码都放在gogs,几百G的电影电视剧都是通过aira2下载,SMB共享给同事
直到有一天,基友给我发来了一篇知乎的文章:
我手上正好有张联通卡,在投奔移动之后就变成了副卡,12块钱一个月养着也不贵,平时插在备机上只能用来收收垃圾短信接接骚扰电话,但有些关键短信使得我有
时候出门不得不带两部手机,这个方案真的再适合不过。所以这个小项目的需求如下:1、树莓派
有条件7x24联网在线2、基于Python
3、因为2G模块存在被短信嗅探的风险,在可控成本内尽量选用4G模块
4、转发方案必须免费稳定体验佳,一开始选的server酱,使用下来稳定性和体验上略逊,网上有tg聊天机器人的方案,国内还是首选微信吧
5、转发服务必须支持树莓系统重启后自动生效,支持长短信合并后转发,延时不能太大
下面就把过程分享给大家~
准备
一、确认你的树莓派带Python3.x
python3
二、购买通讯模块
1、投资100-150购买4G模块(移远EC20 CEHCLG mini pcie+华为pcie转USB开发板),tb某鱼大家各显神通吧,避嫌就不放链接了,基于最佳实践原则,型号尽量跟我一致吧
2、如果所处环境信号较差,建议再花十几二十块钱买根增益天线,否则用gammu测试发送短信的时候会报350的未知错误,你就算找卖家技术支持也是一问三不知
三、注册企业微信
几点说明:
1、关于企业名称
这里的企业名称对应会显示在微信消息列表中:
2、认证需要花钱,无需认证无需认证无需认证
3、注册完成后,新建应用。步骤:“应用管理”->“自建”->“创建应用”
应用名称“联通号转发”对应显示在消息列表的企业号下:
3、完成以上步骤后,拿到以下三个关键要素
企业ID:“我的企业”->“企业信息”->页面下方有个“企业ID”
AgentId和Secret:“应用管理”->点击对应应用程序进入
折腾过程
以下配置操作都在pi用户下执行,win下的编辑器容易出现各种各样莫名的编码问题,建议直接vim:
一、部署程序
程序包以及下面需要用到的配置文件,见文末百度
网盘链接整个工具一共就两个py文件,100行代码,非常简单,本来这两个py是写一块儿的,为了方便爬虫通知的时候也能复用,我把推送微信独立了出来
gammu-smsd的官方文档其实是有问题的,导致“smsForward.py”中拼接长短信的时候总是获取不到正确的短信内容,后面自己调通了,所以这里的“smsForward.py”不需要做任何修改
1、将下载的压缩包解开,把“pushToWechat”和“smsForward”放入“/home/pi/tools”下(注意用户、组和权限)
2、修改“pushToWechat.py”
vim /home/pi/tools/pushToWechat/pushToWechat.py
把上面拿到企业微信的企业ID、应用密钥、应用ID填入:
二、把副卡插入EC20模块,把模块插入树莓派的USB。使用以下命令可以看到有 ttyUSB0~3四个设备,应该对应EC20不同的口,比如短信口或者数据口:
ls /dev/ttyUSB*
三、安装和配置gammu
1、安装gammu
sudo apt-get install gammu
2、配置gammu
sudo gammu-config
直接两个Yes跳过:
按照下图配置,保存后退出:
3、测试是否配置成功
3.1、查看设备信息
sudo gammu --identify
如果这时输出设备和SIM卡信息,说明EC20设备配置成功,否则需要修改上面第三步第2点中gammu的Port,从ttyUSB0~3逐个试,直到成功输出信息为止:
3.2、尝试发送短信
使用以下命令尝试发送短信(后面的186XXXXXXXX自行替换成接收短信的手机号),如果能收到短信,则说明配置成功,如果报错350,买天线吧
echo "a test sms from ec20" | sudo gammu sendsms TEXT 186XXXXXXXX
四、安装和配置gammu-smsd,用于接收短信
1、安装gammu-smsd
sudo apt-get install gammu-smsd
2、配置 gammu-smsd
sudo vim /etc/gammu-smsdrc
贴入以下内容(我会将gammu-smsdrc放在文末百度网盘压缩包中):
# Configuration file for Gammu SMS Daemon
# Gammu library configuration, see gammurc(5)
[gammu]
# Please configure this!
port = /dev/ttyUSB3
#port = /dev/ec20
connection = at19200
# Debugging
#logformat = textall
# SMSD configuration, see gammu-smsdrc(5)
[smsd]
service = files
RunOnReceive = /usr/bin/python3 /home/pi/tools/smsForward/smsForward.py
#logfile = syslog
logfile = /home/pi/gammu/log/log_smsd.log
# Increase for debugging information
debuglevel = 0
# Paths where messages are stored
inboxpath = /home/pi/gammu/inbox/
outboxpath = /home/pi/gammu/outbox/
sentsmspath = /home/pi/gammu/sent/
errorsmspath = /home/pi/gammu/error/
关键配置项简单说明:
port:对应上面配置的设备口
service:接收后短信在本地的保存方式,这里配置为files,表示收到的短信以txt文本方式存放,当然也支持将短信存入数据库
RunOnReceive:短信收到后调用什么脚本或程序,这里是短信内容拼接后转发微信的程序,也就是“smsForward.py”
inboxpath/outboxpath/sentsmspath/errorsmspath:短信收件箱发件箱的路径,这里只关心inboxpath,收到的短信放在该路径下,文件名”IN<date>_<time>_<serial>_<sender>_<sequence>.txt“
3、手工启动gammu-smsd,并尝试接收短信
sudo gammu-smsd --config /etc/gammu-smsdrc --pid /var/run/gammu-smsd.pid --daemon --user pi --group pi
理论上,这时候用其他手机号给这个备号发短信,inboxpath下就会有txt文件生成了,请自行验证
4、配置 gammu-smsd开机自启动
sudo vim /lib/systemd/system/gammu-smsd.service
贴入以下内容(我会将gammu-smsd.service放在文末百度网盘压缩包中):
[Unit]
Description=SMS daemon for Gammu
Documentation=man:gammu-smsd(1)
After=mysql.service postgresql.service
[Service]
EnvironmentFile=-/etc/sysconfig/gammu-smsd
# Run daemon as root user
ExecReload=/bin/kill -HUP $MAINPID
ExecStopPost=/bin/rm -f /var/run/gammu-smsd.pid
Type=forking
PIDFile=/var/run/gammu-smsd.pid
ExecStartPre=/bin/sleep 30
ExecStart=/usr/bin/gammu-smsd --config /etc/gammu-smsdrc --pid /var/run/gammu-smsd.pid --daemon --user pi --group pi
[Install]
WantedBy=multi-user.target
关键配置项简单说明:
ExecStartPre:树莓派启动后,EC20设备会初始化,为了避免gammu-smsd启动先于设备初始化,这里做一个30秒的等待
通过以下命令开启开机自启动:
sudo systemctl enable gammu-smsd
gammu-smsd的启停命令:
sudo systemctl start gammu-smsd
sudo systemctl stop gammu-smsd
sudo systemctl restart gammu-smsd
5、针对gammu-smsd的关机优化脚本
实践发现EC20这块卡有个问题,树莓派系统关机前如果gammu-smsd进程还在的话,下次启动时EC20短信口因为被占用,ttyUSB编号会变,比如从ttyUSB3变成ttyUSB2,使得配置失效,所以关机前需要把gammu-smsd进程kill掉。这个问题困扰了很久,找了商家依然一问三不知
sudo vim /lib/systemd/system-shutdown/kill-gammu-smsd.sh
写入以下内容(我会将kill-gammu-smsd.sh放在文末百度网盘压缩包中):
#!/bin/bash
ps aux | grep gammu-smsd | grep -v 'grep' | awk '{print $2}' | xargs kill -9
至此,所有配置都已完成,重启树莓派后,向备号发送短信,微信就能收到转发的短信,效果如下(头像是我家泰迪 ):
总结
优点:
1、如果你也跟我一样,有一个半死不活的备号,不舍得注销,没有双卡双待手机,也不愿意拿两部手机出门,同时对于垃圾短信和骚扰电话头痛不已,你只需要投入百来块钱,就能使备号24小时在线做主号的挡箭牌,这真的是我目前找到的树莓派最最实用的应用,至少对于我是这样。半年多的使用,以下场景非常实用:注册垃圾网站、搪塞街头地推、网购收货取件码(京东因为是送货上门,暂时还是用的主号)。
2、稳定。这套方案完成后,全家去了趟日本,这期间主手机插日本流量卡,树莓派插国内的主号,这样一来,既不会影响在日本的流量使用,同时只要保证日本期间有网络可用,我就不会漏掉任何一条主号收到的短信。
缺点:
1、如果通过微信H5页面或者小程序注册或者短信登录,在没有登录微信PC端的前提下,操作起来就没那么方便了。虽然这种情况不多,但你可以自己感受一下
2、无法接听电话。我不知道应该把这点归入优点还是缺点 如果你只用来注册垃圾网站和收货,可以明确的是,你接到的电话肯定是骚扰电话,所以接不到不就达到了屏蔽骚扰电话的目的吗
当然,通过EC20是可以拿到未接电话号码的,只是对我来说没那么重要,有兴趣的同学可以研究分享一下。
3、对你来说,垃圾短信并没有少 期间写过基于朴素贝叶斯的垃圾短信过滤,但不知道是样本质量太差还是算法有问题,效果差强人意,后来也就作罢了
提取码:tkzw
PeanutThink
爱折腾一下
野崎遥希
Chitti
姓余的小伙子
HeZY
浮犀
你们买我就看看
城柳
ilovezym
Timberwolf
steffee
树莓派这个研究过貌似只能插一张卡。。。手里的闲号太多了。。。
白雪公子
my001
值友6738696937
可以用企业微信直接发短信不?
寂寞烟花_
ROCC
prprpr
值友1311349486
你的益达495127903