概述
在该文档中,将使用树莓派(linux)、4G模块等设备,即时将SIM卡收到的短信转发到个人邮箱。
由于手机仅支持单卡,副卡需要及时接受短信。曾用旧手机加绿芽app的方案,通过绿芽微信公众号接收短信内容。但该方案需要经常给手机充电等其他缺点舍弃,所以整理4G模块的方案。
所需程序
- gammu-smsd:用你的设备接收和发送信息 (gammu-smsd官方文档)
- mutt::邮箱用户代理客户端
- msmtp:邮箱传输代理客户端
所需设备
- 树莓派 x 1 (我的是4B2g版本)
- 4G模块minipcie转USB转接板 (25¥)
- 4G天线 x 1 (2.5¥)
- IPEX转SMA连接线 x 1 (2¥)
- 4G模块 x 1 (推荐咸鱼买移远EC20,50¥)
参考图片依次如下
成品展示图
Step0 设备组装
- 将4G模块插入USB转接板
- 将SIM卡插入USB转接板
- 连接IPEX转SMA连接线和天线
- 将组装好的天线插入4G模块,可以用绝缘胶布固定以下
- 将USB转接板插入树莓派
Step1 安装系统
推荐使用ubuntu,以下是详细安装教程。
Step2 调试gammu-smsd
2.1 安装命令
apt-get -y install gammu-smsd
2.2 修改service配置
安装时启动服务可能存在如下报错,因为默认service配置中ExecStart
属性使用的环境变量不存在导致的。
打开服务配置文件
vim /usr/lib/systemd/system/gammu-smsd.service
ExecStart属性改为:
ExecStart=/usr/bin/gammu-smsd --config /etc/gammu-smsdrc --pid=/var/run/gammu-smsd.pid --daemon
最后执行同步命令systemctl daemon-reload
2.4 检查USB设备中是否存在4G模块
通过lsusb
命令查看输出是否有上网模块对应的设备,比如移远是Quectel Wireless Solutions开头.
root@ubuntu:# lsusb
Bus 001 Device 003: ID 2c7c:0125 Quectel Wireless Solutions Co., Ltd. EC25 LTE modem
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
2.5 获取4G模块USB转串口终端
通过ls /dev/ttyUSB*
命令输出终端列表,选择最大的 /dev/ttyUSB3
进行后续配置。
root@ubuntu:# ls /dev/ttyUSB*
/dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 /dev/ttyUSB3
*PS: 这块我不太了解,所以我对比了插上一块4G模块和不插的输出,不插的情况输出是空的,插入一块输出如上代码块。通常选择最大的。
2.6 修改gammu配置
打开配置文件
vim /etc/gammu-smsdrc
将port
填写2.3中获取的USB转串口终端,connection
修改为at19200,然后重启systemctl restart gammu-smsd
# Configuration file for Gammu SMS Daemon
# Gammu library configuration, see gammurc(5)
[gammu]
# Please configure this!
port = /dev/ttyUSB3
connection = at19200
# Debugging
#logformat = textall
# SMSD configuration, see gammu-smsdrc(5)
[smsd]
service = files
logfile = syslog
# Increase for debugging information
debuglevel = 0
# Paths where messages are stored
inboxpath = /var/spool/gammu/inbox/
outboxpath = /var/spool/gammu/outbox/
sentsmspath = /var/spool/gammu/sent/
errorsmspath = /var/spool/gammu/error/
2.7 测试发送接收短信
向自己发送短信(也可以用手机发送)
gammu-smsd-inject TEXT 130XXXXXXXX -unicode -text "测试内容"
root@ubuntu:/home/ubuntu# gammu-smsd-inject TEXT 130XXXXXXXX -unicode -text "测试内容"
gammu-smsd-inject[10528]: Warning: No PIN code in /etc/gammu-smsdrc file
gammu-smsd-inject[10528]: Created outbox message OUTC20230109_060858_00_130XXXXXXXX_sms0.smsbackup
Written message with ID /var/spool/gammu/outbox/OUTC20230109_060858_00_130XXXXXXXX_sms0.smsbackup
PS命令详解
等待一会进入短信接收目录/var/spool/gammu/inbox/
,每条短信是以文件形式存储的,写入新的文件表示接收成功(如果使用gammu-smsd-inject
命令发送,等待的时间会久一些,因为它需要扫描outbox中的文件)
root@ubuntu:~# cd /var/spool/gammu/inbox
root@ubuntu:/var/spool/gammu/inbox# ls
IN20230109_140917_00_+86130XXXXXXXX_00.txt
root@ubuntu:/var/spool/gammu/inbox# more IN20230109_140917_00_+8613XXXXXXXX_00.txt
测试内容
root@ubuntu:/var/spool/gammu/inbox#
Step3 安装邮箱客户端
Step4 配置自动转发脚本
4.1 添加脚本
将文本保存到/var/spool/gammu
目录
vim /var/spool/gammu/mailscrip.sh
写入以下内容并保存
for i in `seq $SMS_MESSAGES` ; do
if [ $i -eq 1 ]; then
phone="$SMS_1_NUMBER"
fi
tmp="$(eval echo '$'SMS_${i}_TEXT)"
text="$text$tmp"
done
echo "$text" |mutt -s "发件人 $phone" zsan@qq.com lisi@mail.com
修改脚本权限
chmod +777 /var/spool/gammu/mailscrip.sh
4.2 将脚本挂载到gammu-smsd
打开gammu-smsd配置
vim /etc/gammu-smsdrc
如下添加RunOnReceive
属性,值是脚本的路径。保存后重启服务。(如果不想在树莓派上保存短信可以把service
属性改为null
)
# Configuration file for Gammu SMS Daemon
# Gammu library configuration, see gammurc(5)
[gammu]
# Please configure this!
port = /dev/ttyUSB3
connection = at19200
# Debugging
#logformat = textall
# SMSD configuration, see gammu-smsdrc(5)
[smsd]
service = files
logfile = syslog
RunOnReceive = /var/spool/gammu/mailscript.sh
# Increase for debugging information
debuglevel = 0
# Paths where messages are stored
inboxpath = /var/spool/gammu/inbox/
outboxpath = /var/spool/gammu/outbox/
sentsmspath = /var/spool/gammu/sent/
errorsmspath = /var/spool/gammu/error/
Step5 测试效果
使用手机发送测试短信,15秒左右后去邮箱查看,已收到如下内容,如此既大功告成。(测试时使用手机发送,转发时间会比较准确)