之前手机卡多了很多…… 手机不够放了(逃) 然后正好有个树莓派 就打算使用树莓派收短信

前提准备

  • 树莓派 3B 一只
  • 华为 E173 一只

使用的系统为官方的 raspbian-stretch 最新版本

开始安装

首先将移动网卡插上树莓派然后 lsusb 可以看到识别出来了

Bus 001 Device 005: ID 12d1:1c05 Huawei Technologies Co., Ltd. Broadband stick (modem on)

如果发现是 modem off 的时候需要使用 sudo apt-get install usb-modeswitch 来切换模式

这时候在 /dev/ 下面可以看到 ttyUSB 的文件了

1# ls /dev/ttyUSB*
2/dev/ttyUSB0  /dev/ttyUSB1  /dev/ttyUSB2

然后我们使用

1apt-get install gammu -y

来安装 gammu

配置 gammu

使用 gammu-config 来进行配置 我们只需要将 Port 改为 /dev/ttyUSB2 即可

此处的 ttyUSB2 应该根据个机器来确定

这是时候, 我们使用

1# gammu --identify
2Device               : /dev/ttyUSB2
3Manufacturer         : Huawei
4Model                : E173 (E173)
5Firmware             : 21.017.10.00.00
6IMEI                 : 3xxxxxxxxxxxxx4
7SIM IMSI             : 4xxxxxxxxxxxxx5

来验证配置是否成功 此时 可以使用

1# echo "test" | sudo gammu sendsms TEXT 手机号
2If you want break, press Ctrl+C...
3Sending SMS 1/1....waiting for network answer..OK, message reference=1

来测试发送短信

将 gammu-smsd 收到的短信转发到 Telegram 上去

我使用 njs 写了个脚本 所以首先安装 nodejs 和 yarn

1curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
2apt-get install gcc g++ make -y
3curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
4echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
5apt-get update -y
6apt-get install yarn nodejs -y

安装 gammu-smsd

1apt-get install gammu-smsd -y
2systemctl start gammu-smsd
3systemctl enable gammu-smsd

编辑 gammu-smsd 配置文件

# cat /etc/gammu-smsdrc

[gammu]
port = /dev/ttyUSB2
connection = at

[smsd]
RunOnReceive=/root/gammu-telegram/index.js
service = files
logfile = syslog
debuglevel = 0

inboxpath = /var/spool/gammu/inbox/
outboxpath = /var/spool/gammu/outbox/
sentsmspath = /var/spool/gammu/sent/
errorsmspath = /var/spool/gammu/error/

# systemctl restart gammu-smsd

/root/gammu-telegram 下创建 package.json

 1{
 2  "name": "gammu-telegram",
 3  "version": "1.0.0",
 4  "main": "index.js",
 5  "license": "MIT",
 6  "dependencies": {
 7    "axios": "^0.18.0",
 8    "socks-proxy-agent": "^4.0.1"
 9  }
10}

index.js

 1#!/usr/bin/node
 2const fs = require('fs')
 3const path = require('path')
 4const axios = require('axios')
 5const SocksProxyAgent = require('socks-proxy-agent')
 6
 7const botToken = "你的 BOT TOKEN"
 8const chatId = 你的会话ID
 9
10const proxyOptions = 'socks5://127.0.0.1:1080'
11const httpsAgent = new SocksProxyAgent(proxyOptions)
12
13const client = axios.create({ baseURL: `https://api.telegram.org/bot${botToken}`, httpsAgent})
14
15// fs.writeFileSync(path.resolve(__dirname + '/env'), JSON.stringify(process.env))
16const { SMS_1_NUMBER, SMS_1_TEXT, DECODED_0_TEXT } = process.env
17
18let smsData
19
20if (DECODED_0_TEXT) {
21  smsData = DECODED_0_TEXT
22} else {
23  smsData = SMS_1_TEXT
24}
25
26async function main() {
27  await client.post('/sendMessage', {
28    chat_id: chatId,
29    text: "Phone Number: `" + SMS_1_NUMBER + "`\n" + "Tag: #sms\nData: `" + smsData + "`",
30    parse_mode: 'Markdown'
31  })
32}
33
34main()
35  .catch(err => console.log(err))

然后执行

1yarn install
2chmod +x index.js

然后每次有新消息的时候就会在 Telegram 上提醒了

发送短信

(咕咕咕)