Raspberry PI – SMS empfangen

Für den Empfang habe ich mich für den smsd entschieden. Das Program gehört zu den SMS Server Tools. Mit diesem kann man senden und empfangen. Ich benutze es aber nur zum Empfangen. Damit sich gsmsendsms und smsd nicht in die Quere kommen beende ich den Daemon während des Sendens.

<?php
system("pkill smsd");
...
...
system("/usr/sbin/smsd &");
?>

Die Einrichtung des Deamons läuft ein ein config File im etc Verzeichnis. Ich habe dazu am Ende der Datei smsd.conf folgende Zeilen hinzugefügt:

[GSM1]
device = /dev/ttyUSB0
incoming = yes
baudrate = 115200

smsd empfängt die SMS automatisch und legt diese dann in einem strukturieren Textfile im Verzeichnis /var/spool/sms/incoming/ ab. Der Aufbau ist recht einfach und auch mit den Augen gut zu lesen. Gefolgt von einigen Tags puls Wert steht am Ende mit einer Leerzeile getrennt der eigentlichte Inhalt der SMS. Wichtig für mich sind das From und das Lentght Tag in denen sich die Absendenummer und die Länge des Textes befinden.

 

  ...
$tags = array("From","From_TOA","From_SMSC","Sent","Received","Subject"
		,"Modem","Replace","IMSI","Report","Alphabet","Length");
$path = "/var/spool/sms/incoming/";
 $antworten = 0;
if ($handle = opendir($path)){
	while (false !== ($file = readdir($handle))) {
		if ($file != "." && $file != ".."){
			system("chmod 666 ".$path.$file);
	    		$text = "";
	    		$SysSMSLOG = 0;
			$lines  = file($path.$file); 
			foreach($lines as $line){
				@$entry = explode (":", $line);
				@$key   = $entry[0];
				@$value = $entry[1];
				if ($key == "From")   $Nummer = trim($value);
				if ($key == "Length") $Zeichen = trim($value);
				if (in_array($key,$tags) == false 
					&& strlen($line) > 0) $text .= $line;
				...
			}
			...
		}
		...
	}
	...
}

Die empfangen SMS scheibe ich dann in eine MySQL Datebank und ordne Sie anhand der Absendernummer den entsprechenden gesendeten SMS zu. Da die meisten SMS bei mir von einem Auftragssystem gesendet werden, ordne ich diese dem Auftrag zu, von dem aus zuletzt an die Absendenummer gesendet wurde. Zu beachten ist, das die Länge einer empfangen SMS deutlich über 160 Zeichen sein kann.

 

aufgetretene Probleme:

  1. Der Empfang läuft bis jetzt sehr gut. Seit Inbetriebnahme habe ich ca. 500 SMS empfangen. Es waren nur drei exotische SMS dabei. Zwei hatten binary Inhalte, welche als Hex String ankommen, und eine Antwort mit MMS Hinweisen.
  2. smsd und gsmsendsms dürfen nie gleichzeitig laufen

8 Gedanken zu „Raspberry PI – SMS empfangen

  1. Hi Ralf,

    dein Projekt klingt interessant, ich kenne mich in der Materie leider nicht so gut aus und vielleicht hast Du den einen oder anderen Tipp für mich.

    Im Moment habe ich folgende Installation.
    Zwei Fritzboxen 7170, an denen wieder um jeweils ein ZTR/Sagem RL500 hängt.
    Von O2 habe ich Multicards und kann so frei bestimmen, was wo ankommt.
    Langsam möchte ich die Konstellation in Rente schicken, da es nicht mehr die Dinge unterstützt welche ich eigentlich realisieren will.
    Grundsätzlich nutze ich es um Gespräche entgegen zu nehmen, die Gespräche werden via Voip an eine Fritzbox 7390 durchgereicht, ab und zu gehen auch noch Netzinterne Gespräche darüber raus, was aber eher selten ist.
    Da ich nun die Handystrahlung komplett aus dem Haus verbannen möchte (Gateway soll in die Garage), suche ich eine Lösung aus Raspberry Basis um nicht nur die Gespräche zu erhalten sonder auch die SMS sollen so ankommen.
    Von Vorteil wäre es, wenn beide GSM Dongel an einem Pi hängen könnten.
    Was bräuchte es dazu und muss da gleich mit asterisk rumgespielt werde, oder geht es auch etwas einfacher?

    Gruss Theo

  2. Noch eine Anmerkung (zum Einfügen in meinen ersten Postbeitrag)

    ich nutze um SMSe synchron zu halten und um über den Status meiner Synology Diskstation informiert zu sein die Dienste von mysms. Die habe etliche Clients für Android und Iphone (nutze selber Android) und eine Leistungsstarke Api http://api.mysms.com/ ums solche Dinge zu realisieren. Denke mit Deinem Wissen und dem now how von mysms könnte man so die SMS fast Geräteunabhängig machen, in dem der Pi das Tor zu den ganzen Anwendungen von mysms genutzt wird.

    Gruss Theo

  3. wird das ablagefile für inbound sms /var/spool/sms/incoming/ periodisch zB mit cronjob gereinigt? wenn ja, wie? ist das mit einem php befehl möglich? danke. sehr gutes tutorial. will mir ein eigenes inbound system basteln für den tarif „aldi community sms talk“ . da gibt es unendliche möglichkeiten —

    1. Hallo Gerhard,
      das PHP-Script zum Empfang wird bei mir einmal pro Minute per crojob ausgeführt. Dort werden dann auch die Files nach dem Lesen sofort gelöscht unlink($path.$file); nach der foreach(… Schleife

      Gruß Ralf

      1. ab sofort nutze ich den in smstools3 integrierten eventhandler, welcher dann ein php script auslöst. herauslösen der infos, abspeichern in mysql, email weiterleitung UND löschung der sms datei erfolgt dabei in EINEM Arbeitsgang. nach einigem tüfteln funktioniert das alles. das php script sollte man nicht in www lagern, aus sicherheitsgründen. es funktioniert auch nur wenn dem smsd user in www entrpechende rechte eingeräumt werden. auf cronjos kann man öllig verzichten. smstools3 läuft ja als quasicron (siehe loglevel 7) und muss eher noch entschleunigt werden, sonst wird der sls stick vieeel zu oft abgefragt. vorsicht! schnell wachsende logdatei auf sdcad. am besten nur loglevel1 im produktivbetrieb und im auge behalten…. danke für die ersten und sehr hilfeichen tipps ! http://inboundsms.blogspot.de/ gundula

Schreibe einen Kommentar zu susanne Antworten abbrechen