OpenWRT: smstools
Gsm modem and sms sending in OpenWrt
On the stage of configuration OpenWrt the following modules are to be selected: Kernel modules: Video Support:
<M> kmod-usb-serial <M> kmod-usb-serial-option <M> kmod-usb-serial-wwan
I had a problem with the installation of the module kmod-usb-serial-wwan. mesg gave out the following after downloading:
option: Unknown symbol usb_wwan_write (err 0) option: Unknown symbol usb_wwan_close (err 0) option: Unknown symbol usb_wwan_release (err 0) option: Unknown symbol usb_wwan_tiocmget (err 0) option: Unknown symbol usb_wwan_chars_in_buffer (err 0) option: Unknown symbol usb_wwan_write_room (err 0) option: Unknown symbol usb_wwan_disconnect (err 0) option: Unknown symbol usb_wwan_startup (err 0) option: Unknown symbol usb_wwan_set_termios (err 0) option: Unknown symbol usb_wwan_dtr_rts (err 0) option: Unknown symbol usb_wwan_open (err 0) option: Unknown symbol usb_wwan_tiocmset (err 0)
It can be solved by editing the file 'package/kernel/modules/usb.mk'. Add the section 'kmod-usb-serial-wwan'
define KernelPackage/usb-serial-wwan TITLE:=Support for GSM and CDMA modems KCONFIG:=CONFIG_USB_SERIAL_WWAN FILES:=$(LINUX_DIR)/drivers/usb/serial/usb_wwan.ko AUTOLOAD:=$(call AutoLoad,61,usb_wwan) $(call AddDepends/usb-serial) endef define KernelPackage/usb-serial-wwan/description Kernel support for USB GSM and CDMA modems endef $(eval $(call KernelPackage,usb-serial-wwan)) Edit section 'usb-serial-option' define KernelPackage/usb-serial-option TITLE:=Support for Option HSDPA modems DEPENDS:=+kmod-usb-serial-wwan KCONFIG:=CONFIG_USB_SERIAL_OPTION
All this are described here: https://dev.openwrt.org/ticket/7731. Thanks a lot to the author.
Install:
root@OpenWrt:/# opkg install kmod-usb-serial kmod-usb-serial-wwan kmod-usb-serial-option Installing kmod-usb-serial-wwan (2.6.36-1) to root... Downloading ftp://ftp:ftp@192.168.1.9/kmod-usb-serial-wwan_2.6.36-1_brcm47xx.ipk. Installing kmod-usb-serial (2.6.36-1) to root... Downloading ftp://ftp:ftp@192.168.1.9/kmod-usb-serial_2.6.36-1_brcm47xx.ipk. Installing kmod-usb-serial-option (2.6.36-1) to root... Downloading ftp://ftp:ftp@192.168.1.9/kmod-usb-serial-option_2.6.36-1_brcm47xx.ipk. Configuring kmod-usb-serial. Configuring kmod-usb-serial-wwan. Configuring kmod-usb-serial-option.
Connect the modem and check the output dmesg:
usbcore: registered new interface driver usbserial USB Serial support registered for generic usbcore: registered new interface driver usbserial_generic usbserial: USB Serial Driver core USB Serial support registered for GSM modem (1-port) option 1-1.2:1.0: GSM modem (1-port) converter detected usb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB0 option 1-1.2:1.1: GSM modem (1-port) converter detected usb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB1 option 1-1.2:1.3: GSM modem (1-port) converter detected usb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB2 usbcore: registered new interface driver option option: v0.7.2:USB Driver for GSM modems
The modem has been detected. We can start to use it. As we can see from the log 3 devices ttyUSB were created: interface for working with sd-card, interface to configure of device, interface of data communication. We need the interface of data communication, I have ttyUSB1.
It’s easy to detect what from 3 interfaces we need. Connect the modem to the computer, start the terminal on speed of 19200 and put in the command ati. The modem should respond.
ati Manufacturer: ZTE INCORPORATED Model: MF626 Revision: BD_P673M3V1.0.1B02 IMEI: 352846022764542 +GCAP: +CGSM,+FCLASS,+DS OK
For sms sending we use the utility smstools. At the moment of writing of this article it isn’t included in the standard utilities of openwrt. Therefore we download the sources from:
http://smstools3.kekekasvi.com/
It should be compiled by using a cross-compiler from openwrt. For this we should add in the file smstools3/src/Makefile нужно добавить строчку: CC=openwrt/staging_dir/toolchain-mipsel_gcc-4.3.3+cs_uClibc-0.9.30.1/bin/mipsel-openwrt-linux-gcc It means to show the path to the cross-compiler.
Start make. In smstools3/src/ we find a demon file of sms-server smsd, which we copy to the file system in /usr/sbin. At the same time we put into the directory /etc the configuration file smsd.conf which is necessary for the start of smsd.
/etc/smsd.conf devices = GSM1 logfile = /var/log/smstools/smsd.log loglevel = 7 [GSM1] device = /dev/ttyUSB1 incoming = no # Service Center Address smsc = 79168960220 send_delay = 10 baudrate = 19200 rtscts = no
Downloading. For the operation of smsd we need to create the following directories (we create them using mkdir):
/var/log/smstools /var/spool/sms/checked/ /var/spool/sms/outgoing/ /var/spool/sms/incoming/
Starting sms-server:
# smsd -c /etc/smsd.conf &
Check the log and see that the modem has been initiated:
tail -f /var/log/smstools/smsd.log
We can send sms. Sms are sending automatically after the file with sms will be placed into the directory /var/spool/sms/outgoing/
Create the file send_sms.sms and place it into this directory: send_sms.sms
To: +79161737465 Hello from OpenWrt!
Check the log and see that the server detected a new sms which wasn’t sent, begun with its sending and after sending deleted the file:
tail -f /var/log/smstools/smsd.log
1970-01-01 00:03:54,5, GSM1: Waiting for messages to send... 1970-01-01 00:05:23,5, smsd: Moved file /var/spool/sms/outgoing/send_sms.sms to /var/spool/sms/checked 1970-01-01 00:05:23,6, GSM1: I have to send 1 short message for /var/spool/sms/checked/send_sms.sms 1970-01-01 00:05:23,6, GSM1: Sending SMS from to 79161737465 1970-01-01 00:05:23,6, GSM1: Checking if modem is ready 1970-01-01 00:05:24,7, GSM1: -> AT 1970-01-01 00:05:24,7, GSM1: Command is sent, waiting for the answer 1970-01-01 00:05:24,7, GSM1: <- OK 1970-01-01 00:05:24,6, GSM1: Pre-initializing modem 1970-01-01 00:05:24,7, GSM1: -> ATE0+CMEE=1;+CREG=2 1970-01-01 00:05:27,6, GSM1: Signal Strength Indicator: (13,99) -87 dBm (Workable), Bit Error Rate: not known or not detectable 1970-01-01 00:05:27,6, GSM1: Checking if Modem is registered to the network 1970-01-01 00:05:27,7, GSM1: -> AT+CREG? 1970-01-01 00:05:28,7, GSM1: Command is sent, waiting for the answer 1970-01-01 00:05:28,7, GSM1: <- +CREG: 0,1 OK 1970-01-01 00:05:28,6, GSM1: Modem is registered to the network 1970-01-01 00:05:28,6, GSM1: Selecting PDU mode 1970-01-01 00:05:29,7, GSM1: -> AT+CMGF=0 1970-01-01 00:05:29,7, GSM1: Command is sent, waiting for the answer 1970-01-01 00:05:30,7, GSM1: <- +ZUSIMR:2 OK 1970-01-01 00:05:30,6, GSM1: Changing SMSC 1970-01-01 00:05:30,7, GSM1: -> AT+CSCA="+79168960220" 1970-01-01 00:05:32,7, GSM1: Command is sent, waiting for the answer 1970-01-01 00:05:32,7, GSM1: <- +ZUSIMR:2 OK 1970-01-01 00:05:32,7, GSM1: -> AT+CMGS=29 1970-01-01 00:05:33,7, GSM1: Command is sent, waiting for the answer 1970-01-01 00:05:33,7, GSM1: <- > 1970-01-01 00:05:33,7, GSM1: -> 0011000B919711257733F30000FF115079DA5EA683D27A50FB4D2EB7C321# 1970-01-01 00:05:38,7, GSM1: Command is sent, waiting for the answer 1970-01-01 00:05:42,7, GSM1: <- +ZUSIMR:2 +ZUSIMR:2 +ZUSIMR:2 +ZUSIMR:2 +CMGS: 174 OK 1970-01-01 00:05:42,5, GSM1: SMS sent, Message_id: 174, To: 79161737465, sending time 19 sec. 1970-01-01 00:05:42,6, GSM1: Deleted file /var/spool/sms/checked/send_sms.sms