基于树莓派和gammu的短信转发方案
效果
插在树莓派上的手机卡收到短信后,自动通过互联网转发到企业微信的app中。解决多卡用户没有足够手机的问题。
硬件配置
Raspberry Pi 4B 4GB内存版本
手机卡模块:移远通信EC20CEHCLG-MINIPCIE-CB
卡槽:mini PCIE转USB卡槽
中国联通4G手机卡(NanoSIM)+NanoSim转Mini SIM卡套
树莓派初始化
写入操作系统
-
从树莓派官网下载官方的image写入工具Raspberry Pi Imager
-
插入tf卡,用imager写入ubuntu Server 20LTS 64位
网络配置
有线
插网线,从路由器找ip即可。
无线
-
先连接有线或使用micro hdmi连接显示器,然后使用默认信息登陆,
初始账户密码均为ubuntu
-
开启无线
sudo nano /etc/netplan/50-cloud-init.yaml
network: ethernets: eth0: optional: true dhcp4: true version: 2 # 增加以下配置 # 注意缩进,除了password,都是四格缩进 wifis: wlan0: optional: true dhcp4: true access-points: # ssid "wifi_ssid": password: "password"
static dhcp
路由器设置mac地址ip静态映射
系统配置
-
配置sshd,允许root用密码登陆:
/etc/ssh/sshd_config
加入PermitRootLogin yes
-
设置root的密码
sudo passwd root
,并分发存储公钥ssh-copy-id root@ip
-
可选:换apt源
-
设置系统时区:
sudo timedatectl set-timezone Asia/Shanghai
-
更新系统:
sudo apt update && sudo apt upgrade
温度监测
apt install libraspberrypi-bin
vcgencmd measure_temp
安全关机
不要直接拔电源,先关机后再拔电源
sudo shutdown -h now
或 sudo halt
部署gammu
apt install gammu
ls /dev/ttyUSB*
# /dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 /dev/ttyUSB3
# 依次尝试,直到返回识别成功的结果
gammu-config
gammu --identify
#/dev/ttyUSB2
# 发送短信,验证配置无误
echo "a test sms from ec20" | sudo gammu sendsms TEXT 目标手机号
部署gammu-smsd
-
安装
apt install gammu-smsd
,安装完后默认的systemd配置有问题 -
覆盖默认的systemd配置
/lib/systemd/system/gammu-smsd.service
[Unit] Description=SMS daemon for Gammu Documentation=man:gammu-smsd(1) After=mysql.service postgresql.service network-online.target [Service] EnvironmentFile=-/etc/sysconfig/gammu-smsd # Run daemon as root user ExecStartPre=/bin/sleep 30 ExecStart=/usr/bin/gammu-smsd --pid=/var/run/gammu-smsd.pid --daemon # Run daemon as non-root user (set user/group in /etc/sysconfig/gammu-smsd) #ExecStart=/usr/bin/gammu-smsd --user=${GAMMU_USER} --group=${GAMMU_GROUP} --pid=/var/run/gammu-smsd.pid --daemon ExecReload=/bin/kill -HUP $MAINPID ExecStopPost=/bin/rm -f /var/run/gammu-smsd.pid Type=forking PIDFile=/var/run/gammu-smsd.pid [Install] WantedBy=multi-user.target
-
覆盖gammu-smsd的配置
/etc/gammu-smsdrc
,注意修改4g短信模块的端口配置# Configuration file for Gammu SMS Daemon # Gammu library configuration, see gammurc(5) [gammu] # 注意这里要和上面gammu测试通过的配置一致 port = /dev/ttyUSB3 connection = at19200 # Debugging #logformat = textall # SMSD configuration, see gammu-smsdrc(5) [smsd] service = files #logfile = syslog RunOnReceive = /usr/bin/python3 /home/ubuntu/gammu/smsForward.py logfile = /home/ubuntu/gammu/smsd.log # Increase for debugging information debuglevel = 2 # Paths where messages are stored inboxpath = /home/ubuntu/gammu/inbox/ outboxpath = /home/ubuntu/gammu/outbox/ sentsmspath = /home/ubuntu/gammu/sent/ errorsmspath = /home/ubuntu/gammu/error/
-
创建目录,将短信转发相关脚本放置到配置文件里的位置
mkdir -p /home/ubuntu/gammu/inbox /home/ubuntu/gammu/outbox /home/ubuntu/gammu/sent /home/ubuntu/gammu/error
# /home/ubuntu/gammu/smsForward.py
# /home/ubuntu/gammu/pushToWechat.py # 修改企业微信的id
-
启动gammu-smsd:
systemctl start gammu-smsd
-
验证无误后,设置自启:
systemctl enable gammu-smsd
手机卡配置
来电转移配置(联通)
需要接电话:转移至另一个手机号**62*转移号码#
不需要接电话,告诉别人这个号不再用了:**62*13800000000#
转移到一个空号,这样别人打来电话会提示号码是空号而不是关机
用62开头的转移码把卡插回手机里还能正常接电话,只有关机不可达时才会转移。如果需要无条件转移,把62换成21即可。本方法仅在联通手机号测试过。
取消所有来电转移:##002#
RoadMap
- 树莓派云边协同方案实施
- gammu短信系统上k8s
- 封装上层短信管理应用
Troubleshooting
- 收不到短信:重启树莓派;重新插拔usb设备和手机卡
- 发送短信提示设备无响应:同样先重启大法和重插,一开始无效,后来自己好了
参考
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。