Raspberry Pi als Web-SMS-Inbox im LAN

Ich habe bei mir im LAN einen kleinen Raspberry Pi laufen. Da in letzter Zeit immer häufiger im Netz von diversen Diensten nach Handy-Nummer gefragt wird, wollte ich mir eine Möglichkeit schaffen, SMS zu empfangen, ohne die SIM-Karte immer mit mir herum zu tragen. Einen Surfstick gibt es gerade von diversen Anbietern für schmales Geld. Ich hab einen nagelneuen bei einer Kaffee-Kette für 9,95€ gekauft. Die mitgelieferte SIM-Karte wollte ich nicht verwenden. Stattdessen kommt ein alter o2-Vertrag ohne monatliche Grundgebühr zum Einsatz.

Ich werde hier nicht auf die Konfiguration des Sticks im Detail eingehen, weil das sehr von der Marke abhängig ist. Der gekaufte Stick meldete sich in meinem Pi bei der Abfrage von lsusb mit

Bus 001 Device 005: ID 12d1:1506 Huawei Technologies Co., Ltd. E398 LTE/UMTS/GSM Modem/Networkcard

und war sofort einsatzbereit.

Zunächst folgte ich der Anleitung von Manuel, bei der es zwar um den SMS-Versand geht, der mir im Moment nicht wichtig ist, die aber die Installation des Gammu SMS Daemon ausführlich beschreibt.

Ein beherztes

sudo apt-get install gammu-smsd

beförderte das Programm auf den Raspberry Pi. Danach passte ich die Config Manuels Vorschlägen entsprechend an:

sudo cp /etc/gammu-smsdrc /etc/gammu-smsdrc.original
sudo nano /etc/gammu-smsdrc

Meine Config sieht folgender Maßen aus:

# 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/

Wichtig: Falls eure SIM-Karte durch eine PIN „geschützt“ ist, müsst ihr die Zeile pin = 1234 entsprechend anpassen.

Nach dem Neustart des Daemons durch

sudo /etc/init.d/gammu-smsd restart

könnt ihr jetzt eine Test-SMS verschicken, wenn ihr wollt. Könnt ihr aber auch lassen.

Für mich stand der Fokus auf dem Empfang. Deswegen schickte ich zunächst eine Test-SMS an die Nummer, der jetzt an den Pi gebundenen SIM-Karte. Und siehe da, eine neue Text-Datei tauchte im Ordner /var/spool/gammu/inbox/ auf.

Der Dateiname IN20160822_155341_00_+4917XXXXXX50_00.txt mutete zunächst kryptisch an. In ihm stecken aber tatsächlich alle relevanten Metadaten in folgendem Schema:

IN{Jahr}{Monat}{Tag}_{Stunde}{Minute}{Sekunde}_{Serial?}_{Absender}_{Sequenz}.txt

Die von mir empfangene SMS war also von der Nummer +4917XXXXXXX50 an mich gesendet und um 15:53:41 Uhr am 22.08.2016 vom Pi empfangen worden.

Da mir das Navigieren über SSH in den Ordnerstrukturen des Pi etwas zu unhandlich ist, wollte ich nun dem Webserver noch den Zugriff auf die Dateien erlauben. Ich verwende wegen des geringen Ressourcen-Bedarfs lighttpd auf dem Pi.

Dazu navigierte ich in den Ordner /var/www/html in dem alle für den Webzugriff freigegeben Dateien liegen und legten einen Softlink auf den inbox-Ordner des Gammu-Daemons an:

ln -s /var/spool/gammu/inbox inbox

Nun musste ich nur dem Webserver noch mitteilen, dass er beim Aufruf des Ordners die enthaltenen Dateien anzeigen soll. Dazu muss die Config /etc/lighttpd/lighttpd.conf um folgende Zeilen ergänzt werden:
# GAMMU CONFIG

$HTTP["url"] =~ "^/inbox/" {
   dir-listing.activate = "enable"
}

Nach einem Neustart des Webservers mittels

sudo /etc/init.d/lighttpd force-reload

ließ sich die Seite im LAN aufrufen und betrachten:

Bildschirmfoto von »2016-08-22 17:12:18«

Da die meisten modernen Webbrowser in der Lage sind, TXT-Dateien zu rendern, funktioniert ein Klick auf die Dateien wunderbar, um den Inhalt der Nachricht zu lesen. Wenn ich Zeit finde, werde ich dem Pi noch einen SMTP-Client spendieren, und die eingehenden SMS per Mail versenden.