Zum Senden der SMS verwende ich das Programm gsmsendsms. Die Daten werden hierbei einfach als Parameter angehängt. Wichtig ist das der Text nicht über 160 Zeichen lang ist. Wenn man eine SMS über 160 Zeichen versenden möchte, so muss man den Text in mehrere Teile zerlegen und mit Tags verlinken. Die ersten Teile müssen mit LONG# beginnen und der letzte mit LAST# was die Länge der einzelnen SMS auf 155 verkürzt. Leider funktioniert das nicht bei allen Providern. Ich setze O2 ein, da geht das leider nicht. Wenn gsmsendsms die Nachricht erfolgreich gesendet hat, so bekommt man 0 als Returncode zurück. Weitere Meldungen werden nur auf der Console ausgeben. Deshalb schreibe ich den gesamten Output des cronjobs in ein Logfile. Ich rufe den Programmteil zum Senden und Empfangen der SMS jede Minute einmal per cronjob auf.
Ausschnitt aus meinem PHP Programm zu Senden:
<?php if ($Nummer != "" && $Nachricht != ""){ system("gsmsendsms -d /dev/ttyUSB0 ".$Nummer." '".$Nachricht."'",$ret); } if ($ret == 0){ $query = "update SMSLOG set erledigt=1,Versuch=Versuch+1 where"; $query .= "SysSMSLOG=".$SysSMSLOG; mysql_query($query); $gesendet ++; }else{ $query = "update SMSLOG set Versuch=Versuch+1 where SysSMSLOG=".$SysSMSLOG; mysql_query($query); } ?>
aufgetretene Probleme:
- Da ich die Nachrichten über eine Webschnittstelle übergebe wandele ich den Text URL-konform. Dabei habe ich schon mehrere SMS erlebt, welche trotz substring(xxxx,160) länger waren. Es hatten sich Zeichen eingeschlichen, welche durch das Decodieren in zwei gewandelt wurden. (Doppelleerzeichen, Dreifachpunkt). Also nach dem Decodieren sicherheitshalber noch einmal abschneiden, oder diese explizied doppelte Leerzeichen etc. entfernen, wenn der Text länger geworden ist.
- Sei es durch schlechte Verbindung oder ähnliche Netzproblem, so ist es bis jetzt in einem Monat zwei mal dazu gekommen, dass der USMTS-Stick es nicht geschafft hatte fehlerfei zu Arbeiten. Da half nur ein Neustart des Sytems. Dazu habe ich einen Zähler eingebaut. Wenn in Summe die Anzahl der Fehlversuche > 10 wird, rebootet der Raspberry PI und danach ist alles wieder gut. Da ich den Pi über LAN betreibe ist der in 10 Sekunden wieder betriebsbereit.