Stern inaktivStern inaktivStern inaktivStern inaktivStern inaktiv
 

Im Folgenden wird beschrieben wie man auf einer Raspberry mit dem ZTE ML190 USB Stick SMS empfangen und an eine andere Telefonnummer weiterleiten kann. Natürlich kann man die SMS auch per eMail weiterschicken oder sonstige Dinge damit anstellen. Z.B. kann man damit irgendwelche Dinge steuern lassen wie z.B. Geräte ein-und ausschalten und vieles mehr.

 

Update 5.3.2023

gammu benötigt Pyhon2 und wird nicht mehr auf Python3 migriert. Deshalb habe ich auf smstools umgestellt. Der Beispielhandler smsevent enthält viel Beispielcode den man nur noch anpassen muss.

 

 

Hardwaredetails

Die folgende Beschreibung gilt für den ZTE ML190 USB Stick von 1&1

lsusb
Bus 001 Device 009: ID 19d2:0117 ZTE WCDMA Technologies MSM
usb-devices
T:  Bus=01 Lev=02 Prnt=02 Port=02 Cnt=03 Dev#=  9 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=19d2 ProdID=0117 Rev=00.00
S:  Manufacturer=ZTE,Incorporated
S:  Product=1&1 Surf-stick
S:  SerialNumber=MF190xxxxxxxxxxx
C:  #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=500mA
I:  If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
I:  If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
I:  If#= 2 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=option
I:  If#= 3 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage

 

SMS relay server Übersicht

gammu ist das Tool welches auf eingehende SMS wartet und sie lokal speichert. Sobald eine neue SMS enkommt wird der SMS Text gelesen und als SMS an ein anderes Mobiltelefon oder einen eMail Empfaenger weitergeleitet. Natürlich ist es recht einfach andere Aktionen auf Basis der empfangenen SMS zu initieren und das Script entsprechend anzupassen.

 

Installation der Infrastruktur und Test

sudo apt-get install usb-modeswitch usb-modeswitch-data

 Danach sieht man die ttyUSB Geräte mit

ls -la /dev/serial/by-id/
total 0
drwxr-xr-x 2 root root 100 Jan 12 19:38 .
drwxr-xr-x 4 root root  80 Jan 12 19:38 ..
lrwxrwxrwx 1 root root  13 Jan 12 19:54 usb-ZTE_Incorporated_1_1_Surf-stick_MF19001MOD010000-if00-port0 -> ../../ttyUSB0
lrwxrwxrwx 1 root root  13 Jan 12 19:54 usb-ZTE_Incorporated_1_1_Surf-stick_MF19001MOD010000-if01-port0 -> ../../ttyUSB1
lrwxrwxrwx 1 root root  13 Jan 12 19:54 usb-ZTE_Incorporated_1_1_Surf-stick_MF19001MOD010000-if02-port0 -> ../../ttyUSB2

Damit gammu immer das richtige Geraet benutzt (entweder ttyUSB2 oder ttyUSB3) muss noch eine Udev Regel in /etc/udev/rules.d/98-usb-serial.rules erstellt werden.

SUBSYSTEM=="tty", ATTRS{idVendor}=="19d2", ATTRS{idProduct}=="0117", SYMLINK+="ZTE"

Als nächstes muss gammu installiert werden mit

sudo apt-get install gammu

Mit dem Aufruf von gammu-config wird gammu konfiguriert.  Dabei ist wichtig den Port /dev/tty/USB2 und die Connection als at zu definieren. Anschliessend kann man die korrekte Konfiguration testen mit

gammu --identify
Device               : /dev/ZTE
Manufacturer         : ZTE
Model                : MF190 (MF190)
Firmware             : BD_MF190V1.0.0B09
IMEI                 : xxxxxxxxxxxxxxx
SIM IMSI             : yyyyyyyyyyyyyyy

 Nun kann man eine SMS an eine Telefonnummer +4947114712 schicken mit

sudo -i -- bash -c 'echo "Das ist eine SMS von gammu" | gammu --sendsms TEXT +494711472'

 

Installation und Konfiguration des gammu-smsd

Die Aufgabe des Relayservers ist eingehende SMS zu lesen und an eine andere Telefonnummer wieder als SMS weiterzuschicken. Dazu habe ich ein kleines bash Script relaySMS.sh geschrieben welches genau dieses tut und von gammu-smsd aufgerufen wird. Dieses Script muss in /usr/local/sbin kopiert weren.

sudo apt-get install gammu-smsd

 Die Installation startet auch den Service - wird aber nicht starten da die Konfiguration noch angepasst werden muss.

sudo vi /etc/gammu-smsdrc

Darin muss folgendes stehen:

# Configuration file for Gammu SMS Daemon
[gammu]
port = /dev/ZTE
connection = at
[smsd]
service = files
logfile = syslog
# Increase for debugging information
debuglevel = 0
# bearbeite empfangene SMS
runonreceive = /usr/local/sbin/relaySMS.sh
# Paths where messages are stored
inboxpath = /var/spool/gammu/inbox/
outboxpath = /var/spool/gammu/outbox/
sentsmspath = /var/spool/gammu/sent/
errorsmspath = /var/spool/gammu/error/

Der gammu-smsd muss jetzt noch mal nach der Änderung gestartet und geprüft werden:

sudo systemctl start gammu-smsd
sudo systemctl status gammu-smsd.service

Prüfung ob jetzt über den gammu-smsd eine SMS gesendet werden kann:

sudo -i -- bash -c 'echo "Das ist eine SMS von gammu" | gammu-smsd-inject TEXT +4917147114711 

Möchte man den gammu-smsd stoppen bzw starten geht das mit

sudo systemctl stop gammu-smsd
bzw
sudo systemctl stop gammu-smsd

Der SMS Relay Server schickt eMails zu zwei verschiedenen eMails: Eine wird von dem Relay Server Admin benutzt und die andere wird von dem Telefonbesitzer benutzt. Alle SMS werden an alle eMail gesendet. SMS die mit * beginnen werden nur an den Admin geschickt.

Spezielle SMS existieren um den Server zu steuern oder monitoren. Alle eMails werden nur an den Admin geschickt.

*help - Anzeige aller möglichen Adminbefehle
*status oder nur * - Eine eMail wird geschickt um zu kontrollieren dass SMS Empfang und eMail Versand funktionieren
*echo <some text> - Schickt <some text> via eMail
*restart - Restartet den gammu daemon
*cancel - Stoppt der gammu daemon

 

Fehlersuche 

Das gammu-smsd Log ist /var/log/gammu-smsd.log. Dort finden sich auch Debugmeldungen des Relayscripts.

Klappt der Verbindungsaufbau nicht kann man testen ob eine PIN erforderlich ist:

echo -e 'AT+CPIN?\r' > /dev/ttyUSB2
cat /dev/ttyUSB2

Wenn ja muss man die pin noch in der Konfigurationsdatei setzen

[smsd]
pin = 4711

Allerdings habe ich irgendwann festgestellt dass es immer wieder mal Verbindungsaufbauprobleme mit dem Stick gab. Nachdem ich die Pin geloescht hatte und die Pindefinition damit obsolet wurde gab es die Probleme nicht mehr.

Weiterhin kann man im gammu-daemon den Debuglevel hochsetzen. debuglevel 3 reicht i.d.R. Dazu muss dann folgendes in der Konfigurationsdatei stehen:

[smsd]
service = files
logfile = /var/log/gammu-smsd.log
# Increase for debugging information
debuglevel = 3

 

Hinweis

Die gammu-smsd Version 1.38 hat sich immer mal wieder intermittierend aufgehängt. Deshalb habe ich die aktuelle Version 1.41 installiert. Dazu muss man sich die Source aus github runterlanden auf die Raspberry und alles von Source bauen.

Update 22.11.2020: Es sieht so aus als kämen die intermittierenden Hänger von Spannungs- und/oder USB Problemen. Ich benutze jetzt gammu 1.40 welches in Buster enthalten ist und benutze einen aktiven USB Hub für das ZTE. Seitdem sind die Hangs verschwunden.

Update 23.8.2021: Ich bekam immer wieder die folgende Meldung Ignoring incoming SMS info as not a Status Report in SR memory im Log. So wie es aussieht liegt die Ursache darin dass der Empfang des USB Sticks zu schlecht war sowie eine fehlerhafte Fehlerbehandlung in gammu diesen Fehler induzierte. Nachdem ich den Empfänger anders platziert habe ist der Fehler verschwunden.

 

Referenzen

The Gammu Manual

Gammu smsd man page

Gammu man page

Gammu files backendNachdem ich den Empfänger anders platziert habe ist der Fehler verschwunden.

Kommentar schreiben

*** Hinweis ***

Kommentare sind erwünscht. Aber um lästige Spamposts abweisen zu können gibt es ein paar Dinge die zu beachten sind:
  1. Kommentare mit dem Text http werden sofort zurückgewiesen mit der Meldung Sie sind nicht berechtigt den Tag zu verwenden. zz
  2. Kommentare werden manuell überprüft und es dauert deshalb in der Regel einen Tag bis sie veröffentlicht werden.

    Kommentare   
    #1 MS 2020-03-26 19:49
    Hi, hatte ein ähnliches Problem wie du im Forum beschrieben hattest; und da konnte ich mir es nicht nehmen deine Seite in meine Referenzliste aufzunehmen, wer weiß wann ich mal wieder was nachschlagen muss.
    Siehe: www.msdigital.de/entries/raspberrypi-sms-mail-with-zte-mf823-surfstick-and-gammu
    Grüße
    Zitieren