SMS2action - ein Programm zum Verarbeiten eingegangener SMS an den Pi

  • Hallo an Alle hier,


    mein erstes Projekt auf meinem Pi ist nun fertig und ich möchte es gerne hier vorstellen. Über konstruktive Kritik und Feedback freue ich mich aus dem Forum. Wenn jemand das vorgestellte Projekt für seine Zwecke übernehmen würde, würde mich das ebenso riesig freuen.


    Zunächst zu den Voraussetzungen, die zu erfüllen sind:
    1) Software: SMS Server Tools (http://smstools3.kekekasvi.com) zum Empfangen von SMS mit einem Surfstick oder auch WLAN-Router
    2) Software: USB Modeswitch (http://www.draisberghof.de/usb_modeswitch) um ggf. den Surfstick vom Storagemodus in den Modemmodus umzuschalten
    3) Hardware: ein Surfstick oder ein WLAN-Router
    4) Hardware: eine SIM-Karte, die im Surfstick zum Empfangen und optional zum Senden von SMS geeignet ist
    5) Software: Jessie als OS-Stand
    6) Hardware: Pi Model 2 B (ist meine Hardware)


    Um das von mir vorgestellte Programm zu testen sind aber die Bedingungen 1) bis 4) nicht erforderlich.


    Was war der Auslöser, das Projekt zu starten? Ich wollte eine Lösung haben, mit der ich meinen PC starten kann, ohne dass ich Dyndns und Port-Forwarding im Router einsetzen muss. Als eine mögliche Lösung bin ich auf die Idee gekommen, das Wakeup-On-LAN-Kommando (WOL) zu verwenden.
    Der Pi und der PC sind im gleichen LAN (hinter dem Router) unterwegs. Da weder der Pi noch der PC über das Internet erreichbar sind, stellte sich die Frage, wie ich nun das WOL an den PC senden kann. Mir ist dann die Idee gekommen, eine SMS an den Pi zu senden und dann soll der Pi das WOL an den PC senden.
    Aus diesem recht einfachen Fall ist aber dann aber eine stetig wachsender Anforderungskatalog geworden, der zu einer Serversteuerung mutiert ist. Wenn ich das geahnt hätte ... na, das ist eine andere Geschichte.


    Ich habe mir dann auf dem Pi in C eine Software entwickelt, die ich SMS2action genannt habe, damit ich mit dem Pi auf eingehende SMS reagieren kann. Die SMS Server Tools lesen aus dem Surfstick die eingegangenen SMS aus und legen sie als Textdatei in einem Verzeichnis ab.
    Mein Programm liest diese Textdateien und reagiert auf den Inhalt der Datei (genauer: auf den gesendeten Text). Dazu habe ich mir sogenannte Build-In-Kommandos und External-Kommandos ausgedacht, zu denen ich in einer Ini-Datei die auszuführenden Kommandos angeben kann.
    Als Kommandos, die per SMS an den Pi gesendet werden können zählt zum Beispiel als Build-In-Kommando "reboot" (führt zum Reboot des Pi) oder "shutdown" (fährt den Pi komplett herunter). Mit dem Build-In-Kommando "WOL03" wird an die MAC-Adresse, die in der Ini-Datei hinter WOL03 hinterlegt ist, das Magic-Paket gesendet und bei mir startet damit der PC.
    Als External-Kommandos können die Wörter "CMD00" bis "CMD09" gesendet werden. In der Ini-Datei werden zu den Kommandos dann Pfade zu Programmen (oder auch Shell-Skripte) hinterlegt, die dann ausgeführt werden.
    Als Beispiel sei genannt: "date > /home/pi/sms2action/test2.log"
    Denkbar sind aber beliebige Programme um zum Beispiel einen Webserver neustarten zu lassen. Mit den 10 Kommandos kann also die Funktionalität beliebig erweitert werden, um eigene Anforderungen abzudecken.
    In der Ini-Datei können bis zu 10 Mobilfunk-# angegeben werden, auf deren Eingang mein Programm reagiert. Sendet eine nichtbekannte Mobil-# ein Kommando an meinen Pi so wird das Kommando nicht ausgeführt und alle Mobil-# erhalten eine Warnung.
    In einem solchen Fall könnte man mit dem Kommando "shutdown" den Pi komplett herunterfahren um weitere "Einbruchsversuche" zu unterbinden. Wem das Wort "shutdown" zu lange ist, kann ja gerne in der Ini-Datei ein anderes Wort spezifizieren.


    Das Programm kann optional mit systemd so eingerichtet werden, dass es beim OS-Start mitgestartet wird und beim Herunterfahren des OS auch mit beendet wird. Die dazu passenden Service-Dateien liefere ich mit aus.
    Es gibt mehrere Kommandozeilenparameter, mit denen gesteuert werden kann, ob eine Bildschirmausgabe erfolgen soll (Quiet-Modus ja oder nein) und ob in einem Log-File mitgeschrieben werden soll (Logmodus ja oder nein).


    Zu dem Programm habe ich eine Dokumentation geschrieben, die m.E. alles abdecken sollte, was man wissen muss, um das Programm in Betrieb zu nehmen. Diese ist allerdings ausschließlich in Englisch gehalten (für mich war das eine gute Übung, um im Englischen einigermaßen fit zu bleiben).
    Die aktuelle Version ist hier zu lesen:


    Den Quelltext der aktuellen Version 0.13 habe ich hier eingebaut:


    Eine Dummy-Ini-Datei habe ich hier gezeigt (in der richtigen Ini-Datei stehen meine Mobil-# und die MAC-Adresse meines PC):


    Ein Beispiel für einen Auszug aus dem Logfile habe ich hier eingebaut. Der Auszug zeigt die Einträge zum Start des Programms, die Einträge wenn eine Status-Abfrage kommt und wenn eine Stop-SMS kommt:


    Wenn jemand die Software testen will, braucht man weder einen Surfstick noch die oben erwähnte Zusatzsoftware. Ich habe Beispiel-SMS-Dateien in einem Verzeichnis /samples abgelegt, mit denen man das Programm testen kann.
    In den Sample-Dateien ist als Absender-# 4999 eingetragen und in der Ini-Datei ist nur diese # als gültige # eingetragen. Damit ist zwar kein Versand an diese # möglich aber man kann zum Beispiel in eine Datei das Kommando "CMD00" (ohne Anführungszeichen "") eingeben und dann diese Datei manuell in das Eingangsverzeichnis kopieren. Das Eingangsverzeichnis für SMS kann in der Ini-Datei angepasst werden (Defult: /var/spool/sms/incoming/).
    Wenn nun das Programm läuft, sucht es regelmäßig in dem Verzeichnis und wertet die eingegangene Datei aus. Nach dem Auswerten wird die Datei in ein anderes Verzeichnis verschoben (Default: /home/pi/sms2action/processed/). Ja klar kann auch dieses Verzeichnis angepasst werden.


    Das gesamte Paket habe ich als Tar-Archiv zusammengebaut und in meiner Magenta-Cloud abgelegt unter: https://www.magentacloud.de/share/ytoxex2w7v
    Dort befindet sich auch die Dokumentation.


    Aktuell habe ich mein Programm unter /home/pi/sms2action installiert. Mir ist leider noch nicht so recht klar, wo es "eigentlich" installiert werden müsste. Vielleicht hat jemand mal einen Tipp für mich.


    Hier habe ich mal ein Foto meines Telefons, mit dem ich eine SMS mit dem Kommando "status" an den Pi sende. Der Pi antwortet mir dann per SMS und teilt mir die # verarbeiteter SMS, # Warnings und # Errors mit.
    [Blocked Image: https://abload.de/img/beispiel_status_an_pif8soy.jpg]


    Wie bei allen Software-Projekten gilt auch hier: das wird nie fertig! Denkbare nächste Schritte sind aus meiner Sicht, je ein Pendant zu haben, dass statt auf SMS auf eMails und Pushbullet-Messages reagiert. Vielleicht bekommt man auch Weaved hier irgendwie eingebunden.
    Als Funktion ist denkbar, dass der Status der GPIO-Ports oder vom I2C-Bus abgefragt wird und dann retour gesendet wird. Generell kann alles abgefragt werden und per Kanal wieder zurückgegeben werden.


    Viel Spaß damit!

    Mein Github-Repository ist hier zu finden.