效果

插在树莓派上的手机卡收到短信后,自动通过互联网转发到企业微信的app中。解决多卡用户没有足够手机的问题。

硬件配置

Raspberry Pi 4B 4GB内存版本

Image

手机卡模块:移远通信EC20CEHCLG-MINIPCIE-CB

卡槽:mini PCIE转USB卡槽

中国联通4G手机卡(NanoSIM)+NanoSim转Mini SIM卡套

树莓派初始化

写入操作系统

  1. 从树莓派官网下载官方的image写入工具Raspberry Pi Imager

  2. 插入tf卡,用imager写入ubuntu Server 20LTS 64位

网络配置

有线

插网线,从路由器找ip即可。

无线

  1. 先连接有线或使用micro hdmi连接显示器,然后使用默认信息登陆,初始账户密码均为ubuntu

  2. 开启无线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静态映射

系统配置

  1. 配置sshd,允许root用密码登陆:/etc/ssh/sshd_config加入PermitRootLogin yes

  2. 设置root的密码sudo passwd root,并分发存储公钥ssh-copy-id root@ip

  3. 可选:换apt源

  4. 设置系统时区:sudo timedatectl set-timezone Asia/Shanghai

  5. 更新系统:sudo apt update && sudo apt upgrade

温度监测

apt install libraspberrypi-bin
vcgencmd measure_temp

安全关机

不要直接拔电源,先关机后再拔电源

sudo shutdown -h nowsudo 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

  1. 树莓派云边协同方案实施
  2. gammu短信系统上k8s
  3. 封装上层短信管理应用

Troubleshooting

  1. 收不到短信:重启树莓派;重新插拔usb设备和手机卡
  2. 发送短信提示设备无响应:同样先重启大法和重插,一开始无效,后来自己好了

参考

chinaworker/raspberry-sms (github.com)

文章目录