Um auf SMS reagieren zu können muss der Eingang einer SMS erkannt werden.
Gelöst habe ich das mit incron.
- Raspberry PI (Modell B)
- Surfstick Fusion III (T-Mobile mit Nettokom-Prepaidkarte)
- Programme:
- Raspbian Wheezy
- usb-modeswitch (Teil 1)
- smstools (Teil 2)
- incron (Teil 3)
incron: Dateibasierender Cron
incron ist ein Dateibasierender Cron, welcher auf Dateiaktionen in einem vorgegebenen Verzeichnis reagieren kann.
Ich möchte hier jetzt nicht weiter in die Syntax von incron eingehen, nur soweit, als dass ich hier die Dateiaktion „IN_WRITE_CLOSE“ (Datei wurde schreibend geschlossen) im Verzeichnis /var/spool/sms/incoming überwache.
Installation von incron erfolgt mit
1 |
aptitude install incron |
Abfragen von eingehenden SMS mit Hilfe von incron
Zuerst erzeugte ich eine Batch-Datei namens smscut.sh im Verzeichnis /etc/sh-Dateien/ (Inhalt der Datei kommt weiter unten).
Diese Datei soll ausgeführt werden, wenn eine SMS eingegangen ist.
Damit diese Batch-Datei auch ausgeführt wird, habe ich eine Datei unter /etc/incron.d/ mit dem Namen smsmv erzeugt.
Der Inhalt dieser Datei:
1 2 3 4 5 6 |
/var/spool/sms/incoming IN_CLOSE_WRITE /etc/sh-dateien/smscut.sh $# # /var/spool/sms/incoming = das zu überwachende Verzeichnis # IN_CLOSE_WRITE = einen schreibzugriff überwachen # /etc/sh-dateien/smscut.sh = auszuführende Batch-Datei # $# = Variable mit Dateinamen der geschriebenen Datei (von incron) |
Nach einem
1 |
/etc/init.d/incron restart |
funktioniert die Überwachung auch schon
Jetzt kommt das Erstellen der Bash-Datei um den Inhalt von SMS auszuwerten und darauf reagieren zu können.
Inhalt der /etc/sh-Dateien/smscut.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#!/bin/bash #Übernehmen des Dateinamens von incron filename="$1" #Auslesen der Sender-Telefonnummer aus SMS varfrom=`sed -ne 1p /var/spool/sms/incoming/$filename |cut -d " " -f 2` #Auslesen des Inhaltes der SMS und übernehmen des ersten Wortes varinh=`sed -ne 13p /var/spool/sms/incoming/$filename |cut -d " " -f 1` #Umwandeln des ausgelesenen SMS-Textes in Kleinbuchstaben varinh=`echo $varinh|tr "[:upper:]" "[:lower:]"` #Abfrage und Reaktion #Abfragen des Wortes "reply" in SMS-Text und daraufhin eine SMS an die Sender-Telefonnummer #mit einem einfachen Text # #Abfragen des Wortes "datum" im SMS-Text und daraufhin eine SMS an die Sender-Telefonnummer #mit dem Datum und der Uhrzeit als Antwort-Text if [ $varinh == "reply" ] then echo "To: $varfrom" >/var/spool/sms/neu/inhalt.txt echo " " >>/var/spool/sms/neu/inhalt.txt echo "Raspberry Antwort-SMS: Deine SMS ist abgekommen" >>/var/spool/sms/neu/inhalt.txt mv /var/spool/sms/neu/inhalt.txt /var/spool/sms/outgoing elif [ $varinh == "datum" ] then echo "To: $varfrom" >/var/spool/sms/neu/inhalt.txt echo " " >>/var/spool/sms/neu/inhalt.txt echo "Raspberry: $rdat" >>/var/spool/sms/neu/inhalt.txt mv /var/spool/sms/neu/inhalt.txt /var/spool/sms/outgoing else echo 'nicht ok' >/var/spool/sms/neu/inhalt.txt fi #Verschieben der eingegegangenen SMS ins "Archiv" sudo mv /var/spool/sms/incoming/$filename /var/spool/sms/archiv |
Diese Batch-Datei soll nur als Beispiel einer SMS-Abfrage dienen.
Eine weitere Überlegung wäre noch eine Abfrage einer Datei, welche alle „erlaubten“ Telefonnummern enthält und nur an solche Telefonnumern geantwortet wird.
Aber das ist eine andere Geschichte…..