基於樹莓派和gammu的短信轉發方案


效果

插在樹莓派上的手機卡收到短信后,自動通過互聯網轉發到企業微信的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#

todo

未來考慮基於c/s架構用go實現一套雲邊短信管理app。

  1. client端跑一個daemon在樹莓派上,負責短信上傳、樹莓派狀態上報、接受雲端發送短信的命令
  2. Server端跑在中心k8s中,對接所有邊緣樹莓派;為前端portal提供接口展示數據
  3. 需要格外注意數據安全問題

參考

chinaworker/raspberry-sms (github.com)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM