Gsm-Modem und Versendung von SMS in OpenWrt

Auf der Stufe der Konfiguration sind folgende Module auszuwählen:
Kernel modules:
Video Support:
<M> kmod-usb-serial
<M> kmod-usb-serial-option
<M> kmod-usb-serial-wwan

Ich hatte ein Problem mit dem Installieren des Modules kmod-usb-serial-wwan. Und zwar: dmesg hat als Ergebnis nach dem Laden Folgendes angezeigt:

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)

Dieses Problen kann mit der Korrektur der Datei 'package/kernel/modules/usb.mk' gelöst werden.

Fügen wir den Abschnitt 'kmod-usb-serial-wwan' hinzu

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))
Korrigieren wir den Abschnitt 'usb-serial-option'
define KernelPackage/usb-serial-option
TITLE:=Support for Option HSDPA modems
DEPENDS:=+kmod-usb-serial-wwan
KCONFIG:=CONFIG_USB_SERIAL_OPTION

Alles ist hier beschrieben: https://dev.openwrt.org/ticket/7731. Vielen Dank dem Autor.

Installieren wir:

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.

Schließen wir den Modem an und prüfen die Ausgabe 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

Der Modem wurde definiert. Man kann beginnen mit ihm zu arbeiten. Wie Sie aus dem Log sehen können, es wurden 3 Einrichtungen erstellt ttyUSB: Zugangsinterface zu der sd-Karte, Interface für die Anpassung der Einrichtung, Interface für den Datenaustausch. Wir brauchen Interface für den Datenaustausch, bei mir ist es ttyUSB1.

Es ist sehr leicht zu definieren, welcher der 3 Interfaces benötigt wird. Schließen wir dem Modem an den Computer an, starten wir den Terminal mit der Geschwindigkeit von 19200 und geben wir den Befehl ati ein. Der Modem soll zurückmelden.

ati
Manufacturer: ZTE INCORPORATED
Model: MF626
Revision: BD_P673M3V1.0.1B02
IMEI: 352846022764542
+GCAP: +CGSM,+FCLASS,+DS

OK

Für die SMS-Versendung benutzen wir das Dienstprogramm smstools. Zum Zeitpunkt des Schreibens von diesem Artikel ist sie nicht eines der Standartdienstprogramme von openwrt. Deshalb laden wir die Programmcodes von hier aus herunter:
http://smstools3.kekekasvi.com/ und machen wir den Archiv aus.

Dieses Dienstprogramm ist zusammenzufassen mit Hilfe des Cross-Kompilers aus openwrt. Dafür ergänzen wir die Datei smstools3/src/Makefile mit folgender Zeile:
CC=openwrt/staging_dir/toolchain-mipsel_gcc-4.3.3+cs_uClibc-0.9.30.1/bin/mipsel-openwrt-linux-gcc
d.h. man soll den Weg bis zum Cross-Kompiler angeben.

Starten wir den Befehl make. In smstools3/src/ bekommen wir die Demon-Datei des SMS-Servers smsd, welchen wir in das Dateisysten in /usr/sbin speichern. Gleichzeitig speichern wir in das Verzeichnis die Konfigurationsdatei smsd.conf, welche für den Start von smsd notwendig ist.

/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

Booten wir. Für die Arbeit von smsd sind folgende Direktories zu erstellen (erstellen wir diese mit Hilfe von mkdir):
/var/log/smstools
/var/spool/sms/checked/
/var/spool/sms/outgoing/
/var/spool/sms/incoming/

Starten wir den SMS-Server:

# smsd -c /etc/smsd.conf &

Prüfen wir Log und sehen, dass der Modem sich initialisiert hat:

tail -f /var/log/smstools/smsd.log

Jetzt können wir SMS versenden. SMS werden automatisch versendet, nachdem die Datei mit einer SMS in die Direktory /var/spool/sms/outgoing/ plaziert ist.

Erstellen wir eine Datei send_sms.sms und plazieren wir in diesem Verzeichnis:

send_sms.sms
To: +79161737465

Hallo from OpenWrt!

Prüfen wir Log und sehen, dass der Server eine neue nicht versendete SMS gefunden hat, der Server hat begonnen die Versendung und danach hat die Datei gelöscht:
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



Bestellen einen Gsm-Modem bei uns:

Gsm-Modem