SMS2XMPP Gateway
alte Hardware neu in Nutzung
Neulich kam mir beim Stöbern mal wieder die Idee, eine alte Hardware neu zu nutzen. Ich habe schon seit Ewigkeiten einen Mobilfunk Stick für das 3G Netz (ja richtig, 3G), welcher schon länger bei mir keine Verwendung mehr findet. Der Stick ist ein Huawei E160E (damals gab es den u. a. bei n24 für den Internet Zugang).
Durch die Fusion von Sipgate und simquadrat und da ich schon seit Ewigkeiten einen (jetzt) Sipgate Basic Account habe, gab es irgendwann mal eine Mobilfunknummer kostenlos zur SIP-Rufnummer dazu. Auch die lag bei mir bisher mehr oder weniger brach. Bei genauerem Studium hatte ich festgestellt, dass man sich kostenlos SIM-Karten bestellen kann.
Also, mal das Internet bemüht und festgestellt, dass es mit Hilfe von den smstools (vorpaketiert für Debian) ohne große Anstrengungen möglich ist, SMS empfangen und versenden zu können. Zuerst wollte ich den modemmanager benutzen, bin aber letztendlich bei den smstools hängen geblieben. Eine Langzeit Zuverlässigkeitsaussage habe ich zwar noch nicht, aber bisher werkelt der Stick prima vor sich hin. Da es wohl am Schwierigsten sein soll, das jeweilige Modem zu initialisieren, stelle ich hier meine Konfiguration zur Verfügung. Vielleicht kann es der eine oder die andere brauchen :-)
devices = GSM1
outgoing = /var/spool/sms/outgoing
checked = /var/spool/sms/checked
incoming = /var/spool/sms/incoming
logfile = /var/log/smstools/smsd.log
infofile = /var/run/smstools/smsd.working
pidfile = /var/run/smstools/smsd.pid
outgoing = /var/spool/sms/outgoing
checked = /var/spool/sms/checked
failed = /var/spool/sms/failed
incoming = /var/spool/sms/incoming
sent = /var/spool/sms/sent
stats = /var/log/smstools/smsd_stats
loglevel = notice
smart_logging = yes
receive_before_send = no
autosplit = 3
decode_unicode_text = yes
eventhandler = /usr/local/bin/sms2xmpp.sh
[GSM1]
init = AT+CPMS="ME","ME","ME"
device = /dev/serial/by-id/usb-HUAWEI_Technology_HUAWEI_Mobile-if00-port0
incoming = yes
baudrate = 115200
keep_open = yes
cs_convert = yes
memory_start = 0
check_memory_method = 3
report = no
rtscts = no
report_device_details = yes
signal_quality_ber_ignore = yes
Hier einige Besonderheiten:
- der Init-Befehel ist wohl von GSM-Modem zu GSM-Modem unterschiedlich und nach einigem Suchen und Probieren war der oben gegebene mein Schlüssel zu den SMS
- das Device nehme ich absichtlich NICHT als /dev/ttyUSB0, da sich diese Bezeichnung schon mal ändern kann, z. B. nach Neustarts oder beim Plugin neuer Hardware
- der Stick meldet 2 Modems an, bei mir funktioniert nur das erste, ein Switch ist nicht erforderlich (wegen zusätzlich integriertem Massenspeicher), das machen anscheinend aktuelle Kernels von alleine
- die Weiterverarbeitung passiert bei mir in der Datei
/usr/local/bin/sms2xmpp.shdie sich unter der Option eventhandler einstellen lässt. Hier ist wichtig zu wissen, dass der erste Parameter, der übergeben wird, das Ereignis darstellt (z. B. RECEIVED für SMS empfangen) und der zweite Parameter, der übergeben wird, den Pfad zur gespeicherten SMS beinhaltet.
Wie die Weiterverarbeitung in der Datei /usr/local/bin/sms2xmpp.sh aussehen könnte, dafür gibt es
hier ein sehr
einfaches Beispiel, was man als Startbasis nehmen kann.
In meinem Falle nehme ich noch einige Daten mehr mit hinzu und sende das Ganze via go-sendxmpp an meine XMPP Adresse.
Eine winzige (bauartbedingte) Unannehmlichkeit gibt es noch: Die eingebaute grüne LED des Sticks blinkt regelmäßig im 2-3 Sekundentakt 1x auf. Der Stick sollte daher wenn möglich nicht im Schlafzimmer verbaut werden. Ansonsten bin ich ziemlich zufrieden mit der Lösung. Hier das Ergebnis:

Der erste Anbau erfolgte an einem Raspberry Pi Model 1B, musste aber aufgrund eines fehlenden aktiven USB-Hubs aber wieder verworfen werden, da der Stick soviel Energie aus dem USB-Port zieht, dass der Pi beim Einstecken neu startet. Das war so für mich nicht zu gebrauchen.
Sendemäßig habe ich diese Lösung noch nicht implementiert, da noch nicht gebraucht.