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 $(eval $(call KernelPackage,usb-serial-wwan)) |
Alles ist hier beschrieben:
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:
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] # Service Center Address send_delay = 10 |
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: