Raspberry als SMS Server

V 0.01

Beschreibung

Mit dem Raspberry Pi sollen SMS versendet und empfangen werden. Es ist zwar leicht, mit dem Raspberry eMails zu versenden. Bei einem Stromausfall, oder wenn kein Netzwerk zur Verfügung steht, ist das alte Short Message Service ein gutes Werkzeug um Daten zu versenden. Eine 5V Versorgung, sei es durch ein Netzgerät, eine Pufferbatterie oder eine Solaranlage, reicht.

Bei entsprechender Programmierung kann der Versand einer SMS durch eine Aktion wie Pumpenausfall, Temperatur oder einem sonstigen Alarm ausgelöst werden. Durch den Empfang einer SMS am Raspberry können Schaltvorgänge ausgelöst werden.

Benötigte Hardware

Neben einem funktionsbereiten Raspberry wird noch ein Modem-Stick benötigt. Als Modem-Stick wird ein ZTE HSDPA USB Modem, Modell MF626, verwendet. Dieses ist beim Diskonter HOFER zu haben.
Eine Liste der mit der Software „Gammu“ verwendbaren Modems und Telefone ist auf der WEB-Seite von Wammu einzusehen.
Falls ein SMS-Modem zu viel Strom benötigt, dann ist ein Hub mit eigener Stromversorgung notwendig.

Sobald der Stick am USB-Port angesteckt ist, sollte er vom RPi erkannt werden. Mit dem Befehl lsusb kann das überprüft werden:

$ lsusb

Hier sieht die Ausgabe dann folgendermaßen aus:

pi@test:~ $ lsusb
Bus 001 Device 006: ID 19d2:0031 ZTE WCDMA Technologies MSM MF110/MF627/MF636
Bus 001 Device 004: ID 0424:7800 Standard Microsystems Corp.
Bus 001 Device 003: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 002: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
pi@test:~ $

In der ersten Zeile kann man sehen, dass das System den ZTE-UMTS Stick erkannt hat.
Der Stick besitzt einen MicroSD Steckplatz und drei serielle Ports. Darauf wird später eingegangen. Die seriellen Ports können im Verzeichnis /dev angezeigt werden:

pi@test:~ $ ls -l /dev/serial/by-id/
insgesamt 0
lrwxrwxrwx 1 root root 13 Dez 26 11:35 usb-ZTE_Incorporated_ZTE_CDMA_Technologies_MSM-if00-port0 -> ../../ttyUSB0
lrwxrwxrwx 1 root root 13 Dez 26 11:35 usb-ZTE_Incorporated_ZTE_CDMA_Technologies_MSM-if01-port0 -> ../../ttyUSB1
lrwxrwxrwx 1 root root 13 Dez 26 11:35 usb-ZTE_Incorporated_ZTE_CDMA_Technologies_MSM-if03-port0 -> ../../ttyUSB2
pi@test:~ $

Gammu SMS Daemon

Um SMS versenden zu können, benötigen wir einen Daemon. Diesen muss instaliert werden::

$ sudo apt-get -y install gammu-smsd

Anschließend muss die Konfigurationsdatei /etc/gammu-smsdrc editiert werden. Der Inhalt sollte, abgesehen von der PIN, so wie folgt aussehen:

$ sudo nano /etc/gammu-smsdrc

# Configuration file for Gammu SMS Daemon # Gammu library configuration, see gammurc(5) [gammu] # Please configure this! port = /dev/ttyUSB3 connection = at115200 # Debugging logformat = textalldate # SMSD configuration, see gammu-smsdrc(5) [smsd] # pin = 1234 service = files logfile = /var/log/gammu-smsd RunOnReceive = /usr/local/bin/smsreceive.sh # 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/

Nachdem die Datei gespeichert wurde, starten wir den SMS Daemon neu.

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

Erfolgt der Start ohne Fehlermeldungen (siehe Ausgabe und ggf. Logfile /var/log/gammu-smsd), steht einer SMS nichts mehr im Wege.

echo "Diese Test-SMS wurde mit Hilfe von Gammu vom Raspberry gesendet" | sudo gammu-smsd-inject TEXT "+436776320xxx"

SMS Empfang und Verarbeitung

Der SMS-Deamon legt empfangene SMS im Inbox-Verzeichnis ab. Mit dem Eintrag RunOnReceive in der Konfigurationsdatei wird das eingetragene Programm gestartet. Damit werden Aktionen bei einer eingegangenen SMS gestartet. Ebenso gibt es die Kommandos RunOnSend oder RunOnError, mit denen ebenfalls Aktionen gestartet werden können. Mehr Informationen auf der Gammu-Webseite RunOnReceive.

Das Shell-Script smsreceive.sh schreibt die Eingegangenen SMS in die /var/log/user.log.

~ $ sudo nano /usr/local/bin/smsreceive.sh

#!/bin/bash # Check sender # if [ "$SMS_1_NUMBER" = "Nummer_OK" ] ; then # exit # fi # Alle Meldungen ins Syslog ausgeben for i in $(seq $SMS_MESSAGES) ; do logger -t smsd "SMS Teil: $i" eval logger -t smsd \"Absender: \${SMS_${i}_NUMBER}\" eval logger -t smsd \"Text: \${SMS_${i}_TEXT}\" done

Dieses Script ist aus der Zeitschrift Raspberry Pi GEEK übernommen und zeigt beispielhaft, wie die empfangenen SMS verarbeitet werden können. Im Teil „# Check sender“ kann die Rufnummer kontrolliert werden, falls notwendig. Statt Nummer OK ist natürlich die zu kontrollierende Nummer in der Form 43664….. einzusetzen.

SMS-Versand bei Ereignis

Um einen SMS-Versand bei einem eintretenden Ereignis automatisch durchzuführen, ist ein Script notwendig.

#!/bin/bash # Datei in /home/pi/keysms.sh gpio mode 3 in while true do taste="$( gpio read 3 )" if [ "$taste" = "0" ]; then gammu-smsd-inject TEXT 06776320xxxx -text "Die Taste am Raspberry wurde gedrückt" echo "Taste gedrückt" exit fi done

Für diesen Test muss das Shell-Script für jeden Vorgang neu gestartet werden. WiringPI muss installiert sein.

Taste für SMS-Test

Die Taste simuliert ein beliebiges Ereignis
wie Alarm, Stromausfall, etc.

Bei einem Druck auf die Taste wird der inject-String formatiert in den OutboxPath gelegt und damit vom SMS-Server verarbeitet.

Quellenverzeichnis

barfoos
Raspberry PI Geek
Datenreise.de
thefanclub
runonreceive
http://manpages.ubuntu.com/manpages/xenial/man7/gammu-smsd-run.7.html
https://n8henrie.com/2015/03/how-to-control-your-raspberry-pi-by-sms/