Diskstation: SMS2Email Gateway mit AldiStick

Firmenhandys sind ’ne tolle Sache – aber nicht jeder kennt meine neue Nummer. Also hab ich auf meiner alten Nummer kurzerhand eine Rufumleitung/ -weiterleitung eingerichtet. Auch ’ne tolle Sache. Aber leider funktioniert das bei SMS bekanntermaßen nicht. Also musste ein SMS2Email Gateway her, der auf der alten Nummer eingehende SMS als Email auf mein neues Handy schickt. Auf meinem Nagios Linux Server hatte ich sowas ähnliches schon mal gebastelt, also sollte das doch auch mit meiner Diskstation zu machen sein…
Als Hardware stand mir eine Synology Diskstaion DS211j (mit Firmware DSM 3.2, v1944, Kernel 2.6.32) und ein AldiStick (schwarzer UMTS Stick, Medion S4012, aka Huawei E620 bzw. E1550) sowie eine PIN-freie AldiTalk SIM-Karte zur Verfügung. Vorweg: es läuft – aber es war nicht einfach!

Im ersten Schritt müssen wir uns ein paar Module basteln – und zwar benötigen wir das Modul cdc-acm.ko und das Modul option.ko. Vom Prinzip orinitiert sich dieser erste Schritt stark (bis vollständig) an meiner Anleitung zum bauen der FTDI Module. Einige Punkte haben sich aber geändert und sind daher fett markiert. Nicht benötigte sind gestrichen. Eine funktionierende Entwicklungsumgebung (siehe Anleitung) setze ich voraus.

  • cp synoconfigs/88f6281 .config # Konfigurationsvorlage kopieren
  • make clean
  • cp /opt/lib/libncursesw.so.5 /lib/libncursesw.so.5 (kann erfordelich sein!)
  • make oldconfig ARCH=arm CROSS_COMPILE=/opt/bin/
  • In der Datei .config die Zeile CONFIG_USB_SERIAL=m aktivieren/anpassen
  • In der Datei .config die Zeile CONFIG_USB_ACM=m aktivieren/anpassen
  • make prepare ARCH=arm CROSS_COMPILE=/opt/bin/ #Fragen nach FTDI und OPTION mit Y bzw. M beantworten
  • make modules ARCH=arm CROSS_COMPILE=/opt/bin/ M=scripts
  • make modules ARCH=arm CROSS_COMPILE=/opt/bin/ M=drivers/usb/serial
  • make modules ARCH=arm CROSS_COMPILE=/opt/bin/ M=drivers/usb/class
  • insmod drivers/usb/serial/usb/usbserial.ko # frisch gebaute Module laden
  • insmod drivers/usb/serial/ftdi_sio.ko
  • insmod drivers/usb/serial/option.ko
  • insmod drivers/usb/class/cdc-acm.ko
  • lsmod # Module sollten nun angezeigt werden
  • mknod /dev/ttyUSB0 c 188 0 # Gerätedatei unter /dev erzeugen
  • mknod /dev/ttyUSB1 c 188 1 # Gerätedatei unter /dev erzeugen
  • mknod /dev/ttyUSB2 c 188 2 # Gerätedatei unter /dev erzeugen
  • mknod /dev/ttyUSB3 c 188 3 # Gerätedatei unter /dev erzeugen
  • chmod a+rw /dev/ttyUSB0 # Schreib/Leserechte auf der Gerätedatei setzen
  • chmod a+rw /dev/ttyUSB1 # Schreib/Leserechte auf der Gerätedatei setzen
  • chmod a+rw /dev/ttyUSB2 # Schreib/Leserechte auf der Gerätedatei setzen
  • chmod a+rw /dev/ttyUSB3 # Schreib/Leserechte auf der Gerätedatei setzen

Steckt man nun den UMTS Stick in die Diskstation, so sollten ein paar Meldungen im Systemlog landen:

[ 67.560000] scsi 3:0:0:0: CD-ROM HUAWEI Mass Storage 2.31 PQ: 0 ANSI: 2
[ 67.690000] scsi 3:0:0:0: Attached scsi generic sg3 type 5
[ 67.720000] scsi 4:0:0:0: Direct-Access HUAWEI MMC Storage 2.31 PQ: 0 ANSI: 2

Schön, unser Stick wird als USB-Datenträger erkannt. „Moderne“ Linuxe erkennen diese Situation dank uDev und schalten den Stick automatisch in den Modem Modus – wir müssen das aber leider von Hand machen. Dazu gibt es zwei Möglichkeiten:

  1. wir schalten den Stick auf einem Linux Rechner dauerhaft in den Modem Modus. Da hilft Google weiter. Oder dieser Link. Oder dieses PDF.
  2. wir benutzen das Paket usb_modeswitch

Ich habe mich (in Unkenntnis von Lösung 1 – damals*) für Lösung 2 entschieden, usb_modeswitch heruntergeladen und mich an die Compile- und Installationsanleitung gehalten und war nach kurzer Zeit in der glücklichen Lage, meinen Stick mit dem Befehl usb_modeswitch -v 12d1 -p 1446 -V 12d1 -P 1001 -H -W -c /usr/share/usb_modeswitch/12d1\:1446 in den Modemmodus zu schalten. Den bereits geladenen Treibern zum Dank steht im Logfile (dmesg) folgendes:

[ 119.990000] usb 1-1.3: new high speed USB device using orion-ehci and address 8
[ 120.110000] usb 1-1.3: configuration #1 chosen from 1 choice
[ 120.120000] option 1-1.3:1.0: GSM modem (1-port) converter detected
[ 120.160000] usb 1-1.3: GSM modem (1-port) converter now attached to ttyUSB1
[ 120.190000] option 1-1.3:1.1: GSM modem (1-port) converter detected
[ 120.250000] usb 1-1.3: GSM modem (1-port) converter now attached to ttyUSB2
[ 120.250000] option 1-1.3:1.2: GSM modem (1-port) converter detected
[ 120.310000] usb 1-1.3: GSM modem (1-port) converter now attached to ttyUSB3

Ein simples cat /dev/ttyUSB3 zeigt, dass der Zugriff funktioniert:

^BOOT:45652026,0,0,0,87
^RSSI:8
^RSSI:8
^RSSI:0
^RSSI:7
^RSSI:7

Als letztes müssen noch die smstools zum Laufen gebracht werden. Auch dafür gibts für die DS leider kein fertiges Paket, so dass wir dieses herunterladen und selbst bauen müssen. Das ist aber alles gut auf der Projektpage beschrieben. Lediglich das Init-Script habe ich abweichend von der Anleitung von /etc/init.d nach /opt/etc/init.d verschoben. Das Config-File unter /etc/smsd.conf ist überschaubar und flux angepasst. Schickt man nun SMS an meine alte Nummer, so werden diese von den SMS Tools empfangen – und fertig. Was fehlt, ist der Eventhandler! Dazu habe ich in der /etc/smsd.conf einen Eventhandler definiert, in welchem ich die SMS ein wenig parse und dann per nail (schlanker mail/mailx/sendmail Ersatz) an meine Email-Adresse schicke.

Wie eingangs gesagt: funktioniert, ist aber nicht ganz einfach 😉
Bei Fragen, bitte fragen…

* Update: inzwischen hat es mich ziemlich genervt, dass ich den USB-Modus des Sticks nach jedem Reboot wieder manuell umschalten musste – zumal das per Init-Script irgendwie nicht funktionierte. Also hab ich dann doch mal „Lösung 1“ Ausprobiert und des Datenträger komplett deaktiviert:

  1. picocom /dev/ttyUSB1

picocom v1.6
port is : /dev/ttyUSB1
flowcontrol : none
baudrate is : 9600
parity is : none
databits are : 8
escape is : C-a
local echo is : no
noinit is : no
noreset is : no
nolock is : no
send_cmd is : sz -vv
receive_cmd is : rz -vv
imap is :
omap is :
emap is : crcrlf,delbs,
Terminal ready
ATZ
OK
ATI
Manufacturer: huawei
Model: E1550
Revision: 11.608.13.01.52
IMEI: 353443045652026
+GCAP: +CGSM,+DS,+ES
OK
AT^U2DIAG=0
OK

Das wars. Beim nächsten Neustart ist und bleibt der Stick ein Modem…