让你的树莓派和手机备号不再吃灰:短信转发
写在前面
在大妈四五年,一直都是默默买买买,从来没写过文章,所以这是第一次,写得不好多多包涵
作为一个居家理科男,平时除了喜欢修修补补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
树莓派这个研究过貌似只能插一张卡。。。手里的闲号太多了。。。
校验提示文案
kefu
校验提示文案
my001
校验提示文案
值友6738696937
可以用企业微信直接发短信不?
校验提示文案
寂寞烟花_
校验提示文案
ROCC
校验提示文案
prprpr
校验提示文案
值友1311349486
校验提示文案
你的益达495127903
校验提示文案
值友7450041875
校验提示文案
值友7450041875
校验提示文案
malsony
校验提示文案
值友1574631943
校验提示文案
iepngs
校验提示文案
值友9172069463
校验提示文案
shuohihi
校验提示文案
小母牛不怀孕
校验提示文案
wmgylc
校验提示文案
野崎遥希
校验提示文案
TheZihanGu
校验提示文案
婆婆咯吞吃
校验提示文案
你的益达495127903
校验提示文案
木头怀
校验提示文案
lwabish
校验提示文案
值友3445209220
校验提示文案
值友3445209220
校验提示文案
值友3445209220
校验提示文案
值友1311349486
校验提示文案
prprpr
校验提示文案