Raspberry Pi – SMS per Kommandozeile versenden
Da ich den Raspberry Pi häufig für Monitoringzwecke o.ä. einsetze, möchte ich bei Problemen oder kritischen Events schnellstmöglich benachrichtigt werden. Um im Problemfall nicht auf die (möglicherweise unterbrochene) Internetverbindung angewiesen zu sein, setze ich für kritische Status-Benachrichtigungen im Serverbereich gerne auf SMS. Da ich damit in den vergangenen Jahren sehr positive Erfahrungen im geschäftlichen Umfeld gemacht habe, wollte ich dies nun auch bei meinen Projekten rund um den Raspberry Pi einsetzen.
Dazu benötigen wir Folgendes:
- Raspberry Pi mit ausreichend dimmensioniertem Netzteil
- unterstützer UMTS-Surfstick (Tipp: HUAWEI E303 / HUAWEI E169 oder HUAWEI E173)
- ggf. aktiven USB-Hub (z.B. Anker Ultra Slim 4 Port USB 3.0 Hub)
Die ideale SIM-Karte
Um die SMS für möglichst kleines Geld versenden zu können, setze ich auf Prepaid Anbieter mit günstigem SMS-Preis. Dabei setze ich jedoch nur Prepaid-Anbieter ein, die auch eine automatische Guthaben-Aufladung anbieten. Sobald das Kartenguthaben unter einen bestimmten Betrag fällt wird dann per Abbuchung das Guthabenkonto automatisch wieder aufgeladen. Dadurch muss ich mir um das Kartenguthaben nie Gedanken machen und dem SMS-Versand steht nichts im Wege.
Ich habe folgende Anbieter bei mir im Einsatz:
Schwierigkeitsgrad:
UMTS-Stick unter Raspbian einrichten
Ist der UMTS-Stick mit der SIM-Karte bestückt, sollte dieser am Besten über einen aktiven USB-Hub am Raspberry Pi angeschlossen werden. Besonders dann, wenn zusätzlich noch ein WLAN-Stick oder ein anderes USB-Gerät direkt am Raspberry Pi angeschlossen ist, reicht die Stromversorgung direkt über den USB-Port nicht mehr aus.
Sobald der Stick angeschlossen wurde, wird er von Raspbian auch schon erkannt. Dies kann einfach mit folgendem Befehl überprüft werden:
$ lsusb
Bei mir sieht die Ausgabe dann folgendermaßen aus:
Die mir bekannten UMTS-Sticks stellen meist zwei oder drei serielle Schnittstellen zur Verfügung. Die erste fungiert dabei meist als herkömmliches Modem, die anderen können zur Abfrage von Statusinformationen (Netz, Signalstärke, …) verwendet werden. Diese serielle Schnittstellen findet man unter /dev:
Hinweis zu Modem- und Datenmodus
Da UMTS-Sticks zusätzlich einen microSD Steckplatz zur Bereitstellung der Windows-Treiber besitzen, werden manche Sticks unter Linux nur als USB Speicher erkannt. Sollte also kein neues serielles Device auftauchen, muss zusätzlich noch das Paket usb-modeswitch und usb-modeswitch-data installiert werden. USB-Switchmode bringt eine recht große Datenbank mit Daten zu allen gängigen Sticks mit und aktiviert damit den Modemmodus des UMTS-Sticks. Bei mir war dies aber nicht erforderlich.
Gammu SMS Daemon
Um über die Konsole einfach SMS versenden zu können, benötigen wir einen Daemon, der den UMTS-Stick entsprechend anspricht. Diesen installieren wir mit folgendem Befehl:
$ sudo apt-get install gammu-smsd
Ist die Installation fertig, muss die Konfigurationsdatei (/etc/gammu-smsdrc) editiert werden. Der Inhalt sollte wie folgt aussehen, lediglich die Pin sollte natürlich entsprechend angepasst werden:
# Configuration file for Gammu SMS Daemon # Gammu library configuration, see gammurc(5) [gammu] # Please configure this! port = /dev/ttyUSB0 connection = at # Debugging logformat = textalldate # SMSD configuration, see gammu-smsdrc(5) [smsd] pin = 1234 service = files #logfile = syslog logfile = /var/log/gammu-smsd # Increase for debugging information debuglevel = 4 ReceiveFrequency = 300 # 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/
Anschließend starten wir nun den SMS Daemon neu. Startet dieser ohne Fehlermeldungen (siehe Ausgabe und ggf. Logfile /var/log/gammu-smsd), steht einer ersten Test-SMS nichts mehr im Wege.
$ sudo /etc/init.d/gammu-smsd restart
SMS-Versand
Um nun eine SMS über die Konsole zu versenden, kommt folgender Befehl zum Einsatz:
echo "Ich bin eine Test-SMS, versandt vom Raspberry Pi" | sudo gammu-smsd-inject TEXT "+491741234567"
Danke für die Anleitung – habe dadurch eben erfolgreich eine SMS von meinem 3D-Drucker verschicken können. :-)
Gruß aus Bremen
Andree
Hiho,
das Paket heißt übrigens nicht “usb-switchmode”, sondern “usb-modeswitch”. Musste ich eben schmerzlich feststellen… :D
Danke für den Hinweis, der Fehler ist korrigiert :)
Danke für den Artikel. Hat prima funktioniert!
Einfach nur genial und einfach! Danke!
Danke für deine Anleitung! Ich habe jedoch ein Problem (ich benutze die Ausrüstung die du empfohlen hast):
Der Stick wird mit lsusb erkannt aber es gibt keinen Ordner /dev/serial … auch der SMS Versand schlägt fehl
Sollte kein neues serielles Device auftauchen, muss zusätzlich das Paket usb-modeswitch und usb-modeswitch-data installiert werden.
Danke für die Anleitung! Funktioniert einwandfrei und zuverlässig!
Kann man bei einer Prepaid Karte mit einem einfachen Kommandozeilenbefehl die Guthabenabfrage wie auf der Handytastatur mit “*100#” durchführen?
Das will mir einfach nicht gelingen. Online Guthabenabfrage ist bei meinem Provider (Congstar) nicht möglich. Auch eine Guthabenwarnung per E-Mail gibt es nicht.
Viele Grüße,
Chris
Das müßte mit folgendem Befehl funktionieren:
sudo gammu -c /etc/gammu-smsdrc getussd "*100#"
wenn ich nach der Anleitung oben arbeite, dann habe ich nur den gammu-smsd installiert und der Befehl gammu ist somit nicht existent…
Wenn ich nach der Logik gammu nachinstalliere, muss ich da dann noch neue Konfigurationen durchführen?
Danke und Gruß
Auch von mir danke für die Anleitung.
Wie kann ich empfangene SMS lesen?
Hi, danke für die Anleitung. Darf man fragen welche Lösung du im geschäftlichen Einsatz hast? Vg
Nur für mein Verständniss,
mit diesem Ansatz kann man nur SMS verschicken/empfangen oder steht damit auch ein direkter Internet Zugrif zur Verfügung?
Kann man damit auch direkt über TCPIP sich mit einem Server im Internet verbinden?
Diese Anleitung beschreibt rein den SMS-Versand.
Vielen Dank. Hat sofort geklappt!
Hi, danke für diese tolle Anleitung … nun würde ich gern auch über die GPIO ausgelöst SMS versenden. Wie bindet man sowas ein? Bin leider in raspbian ein absoluter Neuling …
Schau mal hier. Anstatt des shutdown Befehls müßte man eben den Befehl zum SMS-Versand integrieren.
Hallo, erstmal vielen Dank für die tolle Anleitung, hat auch bei mir auf Anhieb so funktioniert.
Noch eine Frage zu der SIM card:
– beim Testen hatte ich immer eine card mit Internet Tarif drin, hat funktioniert.
– dann habe ich mich erinnert, dass ich noch zwei ältere cards mit einfachen Tarifen, d.h. ohne Internet habe, und hatte es dann mit diesen versucht (eine sehr alte klarmobil card und eine neuere Fonic card, die damals mit dem UMTS Stick dazukam und die ich auf classic Tarif umgestellt habe): mit beiden Karten funktionierte es nicht und sie wurden gesperrt! Ich musste sie nach dem Einsatz im USTM Stick mit der PUK wieder entsperren.
– erste card wieder eingelegt – pin in configuartion wieder angepasst – geht.
Es war auch so, dass nun scheinbar die SMS, die ich mit den beiden anderen cards losgeschickt hatte, nun mit der card mit Internet doch noch abgesetzt wurden und auf meinem mobilphone ankamen. Sieht so aus, als wären sie im Sendefach gelegen, konnten aber nicht gesendet werden. Fehlermeldung kam allerdings nicht.
Kann mir nicht vorstellen, dass die SIM card Internet Tarif benötigt, steht ja auch nichts davon in dem Artikel.
Weiss jemand, woran das liegen kann?
Danke und viele Grüße
Uwe
Nein, ein Internet Tarif wird dazu nicht benötigt. Dein Problem hängt damit sicher nicht zusammen.
Es könnte vielleicht sein, dass die beiden “sehr alten” Karten aufgrund langer Nichtnutzung gesperrt wurden. Ist bei vielen Prepaid-Anbietern nach 6-12 Monaten der Fall (erst neulich selbst bei Otelo erlebt).
Hi, die empfohlenen USB Surfsticks sind leider nicht mehr verfügbar. Gibt es Alternativen?
Danke für die gute Anleitung :-)
Was mir an der Anleitung nicht so gefällt, ist die Empfehlung für die Hardware. Der Huawai e173 ist recht problematisch. Die Firmware ist fehlerhaft. Es gibt eine lange Diskussion, an den auch mindestens ein Gammu-Enwickler beteiligt ist, auf Github: https://github.com/gammu/gammu/issues/4
Ich habe hier den ZTE190, Surfstick von 1&1.
Der macht genau das, was er soll.
Karte ist eine blau Prepaid.
Hallo zusammen,
ist es möglich SMS zu empfangen und auszuwerten?
(zb Steuerbefehle für das dahinter liegende System..)
Könnte man auch Telefonanrufe realisieren und eine zb mp3 wiedergeben?
(Habe so etwas schon einmal per Linphone und SIP realisiert…aber über den Stick?)
Danke
Kharim
Nabend,
wenn du der Anleitung oben folgst hast du eigentlich schon alles für den Empfang von SMS erledigt. Das gute daran ist, das die SMS als Datei in den “inbox” Ordner abgelegt wird. Du brauchst diesen also nur nach neuen Dateien überwachen. Die Datei enthält den reinen SMS Text, was es mMn recht praktisch für die Weiterverarbeitung von Steuerbefehlen macht. Die kann dann auch jeder an die Nummer senden! Daher sollte man das auf bestimmte Rufnummern beschränken. Und da wird es ein wenig kniffeliger, die findest man in dem Dateinamen ;)
Mal eine blöde Frage, wieso überhaupt SMS.
Warum lässt Du Dir keine Mail schicken ? Dann brauchst Du keine SIM Karte u.s.w.? Und Mails empfängt man überall, SMS nur mit Handy….
Im Bereich Monitoring / Geräte- und Zustandüberwachung ist bei manchen Anwendungsfällen gar keine Internetverbindung vorhanden. Oder du möchtest die Internetverbindung selbst überwachen – bei einem Ausfall kannst du dann keine E-Mails mehr zur Benachrichtigung verschicken ;-)
Hallo
habe es so wie in deiner Beschreibung gemacht bekomme aber keine Verbindung hin.
bei dem Befehl: $ sudo /etc/init.d/gammu-smsd restart # bekomme ich immer folgenden Fehler
* Stopping Gammu SMS Deamon gammu_smsd [ OK ]
* Starting Gammu SMS Deamon gammu-smsd [ fail ]
bin am verzweifeln wo der Fehler sein könnte
habe 2 Huawai Sticks ausprobiert e169 und e303
Vorgehen für Huawei E303 (http://www.amazon.de/Huawei-E303-Surfstick-UMTS-microSD/dp/B007R2WX86/ref=sr_1_2?s=computers&ie=UTF8&qid=1461280099):
Da es bei mir Probleme bei dem Einbinden des Gerätes gab, folgend die Vorgehensweise wie es funktioniert:
– Raspbian auf SD card und Raspberry Pi damit starten
– usb-modeswitch und usb-modeswitch-data installieren
– In der Konfigurationsdatei usb-modeswitch.conf den Wert DisableSwitching auf 1 setzen + speichern
– gammu sms daemon installieren
– Konfigurationsdatei gammu sms anpassen + neu starten
– E303 in Serial-Mode versetzen mit: sudo usb_modeswitch -v 12d1 -p 1f01 -M ‘55534243123456780000000000000011062000000100000000000000000000’
Nun kann eine SMS wie oben beschreiben gesendet werden.
Wenn der Raspberry Pi neu gestartet (startup-Script) oder der Stick neu eingesteckt wird, muss vor dem erneuten Senden einer SMS wieder in den Serial-Mode versetzt werden.
Hallo Max
habe jetzt auch das alles durch und es will einfach nicht funktionieren.
der Stick ist im Modus
Bus 001 Device 012: ID 12d1:1001 Huawei Techn…..
wenn ich “gammu networkinfo” eingebe
bekomme ich auch die INFO das ich im Vodafone Netz bin
bei sudo gammu -c /etc/gammu-smsdrc getussd “*100#” bekomme ich keine Rückmeldung
beim Senden einer sms kommt als Antwort:
gammu-smsd-inject[32707]: Created outbox message OUTC…..smsbackup
Written message with ID /var/spool/gammu/outbox/OUTC…..smsbackup
hoffe das einer damit was anfangen kann
Hi,
kann ich auch eine SMS an mehrere Empfänger senden?
Ich der Art:
echo “Ich bin eine Test-SMS, versandt vom Raspberry Pi” | sudo gammu-smsd-inject TEXT “+491741234567,+491511234567”
oder muss ich dazu den Befehl in eine Schleife packen und die gleiche Nachricht an jeden einzeln schicken?
Gruß