Receive SMS from Huawei E3131 GSM modem via Gammu to Telegram bot.
- Ubuntu 22.04
- Huawei E3131 GSM Modem (+ patch to unlock SIM)
- usbmodeswitch
- Gammu
- gammu-smsd
- Python 3.10.6 +
- Telegram
bot
folder contains botpic
and info about bot settings.
gammu
folder contains gammu-smsdrc
config file and descriptions for config.
script
folder contains receiver.py
python script and description for it.
service
folder contains systemctl service file - gammu-modem-1.service
and description for it.
- Insert SIM in modem, insert modem to PC, check that modem is connected and availabe in system
lsusb
Huawei Huawei Technologies Co., Ltd output means, that modem is connected to PC.
- Switch modem mode with
usbmodeswitch
sudo usb_modeswitch -v 12d1 -p 14fe -M '55534243123456780000000000000011062000000100000000000000000000'
12d1
and 14fe
- it's a ID of modem from lsusb
. It can be different.
More info and guide: https://askubuntu.com/a/1146339
- Install Gammu and gammu-smsd
Instruction from here: https://github.com/playsms/book-playsms/blob/master/book-contents/en/Installation/Gateway-Installation/Gammu/Gammu-installation-via-apt-get-on-Ubuntu.md
- Make sure you have root access
sudo su -
- Install Gammu via
apt-get
apt-get install gammu gammu-smsd
- Create required directories
mkdir -p /var/log/gammu /var/spool/gammu/{inbox,outbox,sent,error}
Note: The directory names are case-sensitive
- Setup Gammu spool directories owner and permission ! In this example your webserver's user and group is www-data
chown www-data:www-data -R /var/spool/gammu/*
You can also set files and folders permission to world-writable
chmod 777 -R /var/spool/gammu/*
- Add you username to
dialout
group
adduser USER dialout
Where USER
is your system username.
You need to create config for each connected modem.
Use standart gammu-smsd config as first, create another configs in /etc/
Edit first config
nano /etc/gammu-smsdrc
Config description:
[gammu] # This is modem configuration
port = /dev/ttyUSB0 # Port of modem. Modem have 3 ports: ttyUSB0, ttyUSB1, ttyUSB2. You need ttyUSB0. If you have more modems, each
# first port in group of three will be the first. For example, for second modem it will be ttyUSB3.
connection = at115200 # Connection type for Huawei E3131
logfile = /var/log/gammu/gammu.log # Log file for gammu.
logformat = textall # Log setting
[smsd]
Service = files # Files setting will be store all SMS on Hard Drive in folders below. You can set db, info in gammu docs.
InboxPath = /var/spool/gammu/inbox/ # Inbox folder
OutboxPath = /var/spool/gammu/outbox/ # Outbox folder
SentSMSPath = /var/spool/gammu/sent/ # Sent folder
ErrorSMSPath = /var/spool/gammu/error/ # Error folder
InboxFormat = unicode # Format for incoming SMS
OutboxFormat = unicode # Format for outcoming SMS
TransmitFormat = auto # The format for transmitting the SMS: auto, unicode, 7bit
debugLevel = 1 # Log settings
LogFile = /var/log/gammu/smsd.log # Log file for SMSD. You can leave it for all your configs to get log in one file.
DeliveryReport = sms # Delivery report setting
DeliveryReportDelay = 7200 # Delivery report settings
CheckSecurity = 0 # Check PIN-code.
PhoneID = first # Var for gammu to undesrtand that modem it uses. For second modem set second and etc.
# This is RunOnReceive function, which will launch Receiver script and send message to Telegram bot. Replace user with your system user.
RunOnReceive = /usr/bin/python3 /home/user/phone/receiver.py
If you have more modems:
- Change port - you need first port from 3 port group for Huawei E3131
- Change PhoneID - you can name it like you want. For more user friendly I use first for first modem, second for second and so on.
- Change RunOnReceive - copy receiver.py script with new name (for ex.: receiver2.py) and change phone var and so on.
- Go to @BotFather and run /newbot
- Choose name for bot (for example: Phone)
- Choose username for bot (anyname with bot at the end)
- Copy Bot Token.
You can add picture, description and etc. Examples in bot folder.
-
Go to you bot, press Start
-
Open browser and run this API request:
Replace YOUR_TOKEN with Bot Token from @BotFather
https://api.telegram.org/bot*YOUR_TOKEN*/getUpdates
- From URL output get chat_id number. This is your Telegram ID.
-
Replace phone var with your modem phone number. This variable contains your modem phone number and uses for show you, from which modem you receive SMS. You can change it to any text you want. If you use number - type it without + (plus). If you use text name - remove %2B from chat url. (%2B it's a + (plus) in Percent-encoding https://en.wikipedia.org/wiki/Percent-encoding)
-
Edit chat variable:
chat = "https://api.telegram.org/bot*YOUR_TOKEN*/sendMessage?chat_id=*YOUR_ID*&text=<b>☎️: %2B{0}</b>%0A{1} <b>({2})</b>&parse_mode=HTML".format(phone, text, sender)
YOUR_TOKEN - replace this with your Bot Token from @BotFather YOUR_ID - replace this with your Telegram ID
If you use more modems, copy receiver.py with new name (for example: receiver2.py and so on) and change only phone number var.
- Create gammu-modem-1.service file in /etc/systemd/system/
nano /etc/systemd/system/gammu-modem-1.service
- Edit created config file
[Unit]
Description=Gammu Modem 1 # Description for service
serviceAfter=network.target # Start after network service
StartLimitIntervalSec=0 # Limit interval for start service
[Service]
Type=simple # Type of service
Restart=always # Always restart if service goes down
RestartSec=1 # Seconds to restart after service down
User=user # System username
ExecStart=gammu-smsd -c /etc/gammu-modem-1 # Start gammu-smsd with modem config
[Install]
WantedBy=multi-user.target
- Change Description to your service name (or leave as it is)
- Change User to your system username
- Change ExecStart to your Gammu config (or leave as it is, if you config name the same)
If you have more modems, create .service file for each modem and replace Gammu config with config name for this modem. For example, if you have to modems, you need gammu-modem-1.service and gammu-modem-1.service files with /etc/gammu-modem-1 and /etc/gammu-modem-2 configs in it.
- Launch system services
systemctl start gammu-modem-1.service
If you have more modems, run systemctl start for each one.
- Check, that service is working
systemctl status gammu-modem-1.service
Output:
● gammu-modem-1.service - Modem 1 Reciever (Gammu)
Loaded: loaded (/etc/systemd/system/gammu-modem-1.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2022-12-24 10:29:26 MSK; 4 days ago
Main PID: 3883959 (gammu-smsd)
Tasks: 1 (limit: 4534)
Memory: 3.1M
CPU: 55.233s
CGroup: /system.slice/gammu-modem-1.service
└─3883959 gammu-smsd -c /etc/gammu-smsdrc
Dec 24 10:29:26 user systemd[1]: Started Modem 1 Receiver (Gammu).
- Check services running
systemctl status gammu-modem-1.service
- Restart services
systemctl restart gammu-modem-1.service
- Check gammu log
tail -f /var/log/gammu/smsd.log