I had a couple of Huawei USB UMTS/HSPA sticks gathering dust, so I decided to use them for SMS notifications. Below is a quick set of notes I took during the experiment.
Configuration
My setup:
- CentOS 6.3 (64-bit)
- GNOKII 0.6.30 (available from EPEL)
- Huawei E160G and Huawei E176
- Valid SIM card, PIN entry disabled
Plug in the USB stick, watch /var/log/messages. You should see something like this:
Jan 19 23:23:47 hal kernel: usb 2-2: new high speed USB device number 13 using ehci_hcd Jan 19 23:23:48 hal kernel: usb 2-2: New USB device found, idVendor=12d1, idProduct=1003 Jan 19 23:23:48 hal kernel: usb 2-2: New USB device strings: Mfr=2, Product=1, SerialNumber=0 Jan 19 23:23:48 hal kernel: usb 2-2: Product: HUAWEI Mobile Jan 19 23:23:48 hal kernel: usb 2-2: Manufacturer: HUAWEI Technology Jan 19 23:23:48 hal kernel: usb 2-2: configuration #1 chosen from 1 choice Jan 19 23:23:48 hal kernel: scsi36 : SCSI emulation for USB Mass Storage devices Jan 19 23:23:48 hal kernel: usb 2-2: USB disconnect, device number 13 Jan 19 23:23:54 hal kernel: usb 2-2: new high speed USB device number 14 using ehci_hcd Jan 19 23:23:54 hal kernel: usb 2-2: New USB device found, idVendor=12d1, idProduct=1003 Jan 19 23:23:54 hal kernel: usb 2-2: New USB device strings: Mfr=2, Product=1, SerialNumber=0 Jan 19 23:23:54 hal kernel: usb 2-2: Product: HUAWEI Mobile Jan 19 23:23:54 hal kernel: usb 2-2: Manufacturer: HUAWEI Technology Jan 19 23:23:54 hal kernel: usb 2-2: configuration #1 chosen from 1 choice Jan 19 23:23:54 hal kernel: option 2-2:1.0: GSM modem (1-port) converter detected Jan 19 23:23:54 hal kernel: usb 2-2: GSM modem (1-port) converter now attached to ttyUSB0 Jan 19 23:23:54 hal kernel: option 2-2:1.1: GSM modem (1-port) converter detected Jan 19 23:23:54 hal kernel: usb 2-2: GSM modem (1-port) converter now attached to ttyUSB1 Jan 19 23:23:54 hal kernel: scsi39 : SCSI emulation for USB Mass Storage devices Jan 19 23:23:54 hal kernel: scsi40 : SCSI emulation for USB Mass Storage devices Jan 19 23:23:55 hal kernel: scsi 39:0:0:0: CD-ROM HUAWEI Mass Storage 2.31 PQ: 0 ANSI: 2 Jan 19 23:23:55 hal kernel: scsi 40:0:0:0: Direct-Access HUAWEI MMC Storage 2.31 PQ: 0 ANSI: 2 Jan 19 23:23:55 hal kernel: sr1: scsi-1 drive Jan 19 23:23:55 hal kernel: sr 39:0:0:0: Attached scsi generic sg3 type 5 Jan 19 23:23:55 hal kernel: sd 40:0:0:0: Attached scsi generic sg4 type 0 Jan 19 23:23:55 hal kernel: sd 40:0:0:0: [sdc] Attached SCSI removable disk
Each Huawei sticks presents itself as 2 separate USB modems: /dev/ttyUSB0 and /dev/ttyUSB1. I will use /dev/ttyUSB1 since SMS notifications are apparently only sent to the second port. The Micro-SD slot is reported as a SCSI device – not used here.
Now it’s time to configure Gnokii. I’ll send SMS as root, so I created directories under /root:
$ mkdir -p /root/.config/gnokii $ mkdir -p /root/.cache/gnokii
Copy the default configuration file from /etc/gnokiirc to /root/.config/gnokii/config and add the following section:
# Huawei USB Stick [phone_huawei] model = AT port = /dev/ttyUSB1 connection = serial
Issue a Gnokii command to verify that it works:
$ gnokii --phone huawei --identify GNOKII Version 0.6.30 IMEI : 333444555666777 Manufacturer : huawei No flags section in the config file. Model : E176 Product name : E176 Revision : 11.126.02.01.55
Sending SMS
OK, now for the real test – sending an SMS:
$ echo "SMS from Huawei" | gnokii --sendsms +31612341234 -r
If the SMS was sent correctly, gnokii exits with status 0. You can check that using the $? variable in your shell.
Receiving SMS
Incoming SMS are saved on the SIM-card memory, in memory slots starting at 0 (zero). To read the first (oldest) received message:
$ gnokii --phone huawei --getsms SM 0
The next one can be read using:
$ gnokii --phone huawei --getsms SM 1
… and so on.
Once you processed a message, you can delete it from the SIM-card:
$ gnokii --phone huawei --deletesms SM 1
There’s a lot of fun to be had with this setup – using simple SMS.
For interactive viewing of incoming SMS, use:
$ gnokii --phone huawei --smsreader
This will show new messages immediately.
Wrap-up
There’s lots more information to be found on the Gnokii Wiki.
My Huawei E160G turns out to have a SIM-lock on it. It would error out on most requests until I inserted a SIM of the correct network. Not all documented commands work:
$ gnokii --phone huawei --getlocksinfo GNOKII Version 0.6.30 Error: Command called isn't implemented in model.
This makes troubleshooting quite a bit harder…
Nagios alerting
Next on my list is integration with Nagios – this is fairly simple; set up a Host Notification and Service Notification command that echoes a message to Gnokii. Voila: SMS alerting for Nagios ;-)
Process incoming SMS
Incoming SMS can be read using “gnokii --getsms“, but “gnokii-smsd” is a better option. It polls the USB modem regularly, and stores received messages in a database (PostgreSQL or MySQL). This makes it quite easy to use SMS from your own applications.
Have fun!