Forum: PC-Programmierung PDU-Protokoll für SMS richtig implementieren


von Rhino R. (rhino_r)


Angehängte Dateien:

Lesenswert?

Hallo,

ich entwickle gerade eine kleine Alarmanlage für einen Snackautomaten 
und nutze dafür ein marktübliches GSM-Modul, welches über ein Raspberry 
Pico angesteuert wird. Um einen Alarm zu versenden, muss ich das 
GSM-Modul mittels PDU-kodierten Befehl ansteuern. Grundsätzlich 
funktioniert das Versenden von SMS auch. Da ich aber vorhabe, über die 
DEX-Schnittstelle des Automaten später auch zusätzliche Informationen 
über den Automaten zu versenden, wollte ich den SMS-Versand direkt in 
Unicode umsetzen. Da das nicht funktionierte und das Internet zwar voll 
mit irgendwelchen Quellen ist, die aber kaum bis überhaupt nicht 
weiterhelfen, habe ich mir die Spezifikation für das PDU-Protokoll 
heruntergeladen (3GPP TS 23.040, siehe Anhang).

Dabei hänge ich jetzt gerade an den Message Flags (erstes Oktett nach 
den kodierten Informationen über das SMSC). Die Spezifikation 
unterscheidet nach Nachrichtentyp (Kapitel 9) und gibt vor, welche Bits 
welches Flag repräsentieren. Theoretisch zumindest. Tatsächlich lässt 
sich das aus der Spezifikation nur schwer ableiten, da nur lose dabei 
steht, welche Flags für welchen Nachrichtentyp mit wievielen Bits 
überhaupt gesetzt werden.

Da ich zukünftig nur selten wieder mit dem PDU-Format in Berührung 
kommen werde, insofern alles reibungslos funktioniert, trage ich meine 
Erkenntnisse in einer PowerPoint zusammen, die ich als PDF beigefügt 
habe. Auf Seite 8 ist mein Problem mit einer möglichen Lösung 
zusammengefasst. In der Spezifikation findet sich das ab Kapitel 9.2.

Zu meiner Frage:
Woher weiß ich bei der Option SMS-DELIVER, welches der Bits nicht zu 
setzen ist?

Es handelt sich um ein Oktett, dass laut Spezifikation aber nur 7 Bits 
bei diesem Nachrichtentyp verwendet. Grundsätzlich hätte ich auf Bit 7 
getippt, welches nicht zu setzen ist. Spaßeshalber habe ich ChatGPT 
gefragt, die KI benennt Bit 5 und 6 als reserviert (witzig, dann wären 
es nur noch 6 Bits) und auf Nachfrage dann nur Bit 5 "weil es etablierte 
Regeln gibt". Grundsätzlich habe ich festgestellt, dass die Auflistung 
in der Spezifikation bei Bit 0 beginnt. Steht also TP-MTI als erstes 
(was zwei Bit benötigt), so belegt diese Flag eben Bit 0+1 (anhand der 
Darstellung der Tabelle ist das nicht unbedingt intuitiv, ich bin zuerst 
verkehrt herum rangegangen). Zum Vergleich siehe 
http://www.nobbi.com/sms_pdu.html (die einzige sehr gute Quelle zu dem 
Thema). Bei den REPORT-Nachrichtentypen steht unter der Tabelle 
wenigstens noch, welche Bits reserviert sind, da kann ich mir das 
ableiten. Schaut man sich in meiner PDF aber mal die Tabelle an, dann 
könnte die Antwort von ChatGPT durchaus richtig sein, da die UDHI-Flag 
sonst einzig bei DELIVER auf Bit 5 und nicht wie bei allen anderen 
Nachrichtentypen auf Bit 6 übertragen werden würde. Einfach testen, 
welche SMS ankommt und welche nicht, will ich aus Kostengründen nicht.

Ich hoffe, meine Frage ist verständlich.


Viele Grüße und vielen Dank bereits jetzt,

Sören

von Monk (roehrmond)


Lesenswert?

Die Spezifikation ist eine Sache. Wie es von den Konkreten 
Modems/Handies umgesetzt wurde, ist leider eine andere. Oft unterstützen 
die Geräte nur ein Subset der Spezifikation.

Vielleicht magst du von meinen SMS Server Tools abgucken:
http://stefanfrings.de/smstools/index.html

Der Code ist schon sehr alt, deswegen stecke ich da im Detail nicht mehr 
drin. Aber ich denke, die Datei pdu.c macht das, was du brauchst. Da 
findest du auch die Flags wieder.

Das Programm PDUSpy war mit in dem Zusammenhang hilfreich:
http://www.nobbi.com/pduspy.html

: Bearbeitet durch User
von Dieter S. (ds1)


Lesenswert?

SMS PDUs gibt es doch schon sehr lange, es gibt mehr als genügend Source 
Code der damit umgeht.

Zum PDU Type siehe z.B. hier:

https://bluesecblog.wordpress.com/2016/11/15/sms-deliver-tpdu-structure/

Und wenn man eine SMS-DELIVER PDU dekodieren will kann man sich z.B. das 
hier ansehen:

https://www.diafaan.com/sms-tutorials/gsm-modem-tutorial/online-sms-deliver-pdu-decoder/

von Rhino R. (rhino_r)


Lesenswert?

Vielen Dank euch beiden. Dann gehe ich mal so rum ran. Also bestehende 
Implementierungen unter Berücksichtigung der Spezifikation anschauen und 
mit Hilfe von Decodern bzw. der PDUSpy-Anwendung offene Punkte (wie den 
aus meiner Frage) durch probieren herausfinden. Auf jeden Fall besser 
als ständig kostenpflichtig abzuschicken, die dann abgelehnt werden, um 
der Sache auf den Grund zu gehen.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Ich möchte die Bemühungen und Erfolge ja nicht schlechtmachen, aber man 
könnte sich viel Zeit und Aufwand ersparen, indem man

a) die SMS über die Webschnittstelle eines entsprechenden Anbieters 
versendet

oder

b) einen Telegram-Bot (oder beliebig anderen Messenger) benutzt.

c) Lora wäre auch eine Überlegung wert

von Dieter S. (ds1)


Lesenswert?

Nochmal zum Erzeugen von SMS PDUs, man findet auch fertige 
Implementierungen die Unicode können, u.a. die hier ("A simplified C 
library for generating PDU encoded multi-part multilingual SMS"):

https://github.com/hu55a1n1/Multi-part-SMS-PDU-generator

Diese basiert auf einer scheinbar erweiterten/angepassten Version der 
bereits weiter oben erwähnten SMS Server Tools.

Wie schon geschrieben, das ist alles nichts Neues, wenn man sehen will 
wie das Ganze auf der Mobilfunkseite implementiert ist kann man sich 
z.B. OpenBSC (Netz) oder OsmocomBB (Telefon) ansehen.

von Rhino R. (rhino_r)


Lesenswert?

Frank E. schrieb:
> Ich möchte die Bemühungen und Erfolge ja nicht schlechtmachen, aber man
> könnte sich viel Zeit und Aufwand ersparen, indem man

Ja, damit hast du Recht. Es ist ein erheblicher Aufwand für ein bereits 
oft gelöstes Problem. Als Freizeitprojekt reizt es mich aber durchaus, 
auch wirklich die Hintergründe zu verstehen.

> a) die SMS über die Webschnittstelle eines entsprechenden Anbieters
> versendet
> oder
>
> b) einen Telegram-Bot (oder beliebig anderen Messenger) benutzt.

Der Automat steht leider nicht in einem Areal, in dem Internet verfügbar 
wäre. Ich bin schon froh, dass überhaupt für SMS genug Empfang da ist.

> c) Lora wäre auch eine Überlegung wert
Sehr interessantes Projekt, kannte ich noch nicht! Nicht für dieses 
Vorhaben, aber generell ein wirklich interessanter Ansatz, inbesondere 
weil man damit monatliche Kosten für den Mobilfunk sparen könnte.


Dieter S. schrieb:
> Nochmal zum Erzeugen von SMS PDUs, man findet auch fertige
> Implementierungen die Unicode können, u.a. die hier ("A simplified C
> library for generating PDU encoded multi-part multilingual SMS"):
>
> https://github.com/hu55a1n1/Multi-part-SMS-PDU-generator

Das ist mir bei meinen Suchen gar nicht untergekommen, danke für den 
Hinweis!

Zu meiner ursprünglichen Frage und der Vollständigkeit wegen: Ich konnte 
die genaue Bitzuordnung in der Spezifikation finden (vorab: ChatGPT lag 
wie so oft bei nicht fundierten Annahmen falsch mit Bit 5). Sie steht 
bei den Erklärungen der jeweiligen Flags. Da da aber teilweise 30 Seiten 
mit völlig anderen Inhalten dazwischen liegen, ist mir das vorher durch 
die Lappen gegangen.

Wenn ich das alles für meine Anforderungen fertig erarbeitet habe, 
stelle ich die PowerPoint als PDF nochmal hier rein. Danach schaue ich 
mir dann die hier genannten Implementierungen für mein Projekt an, das 
geht am Ende schneller, als es selbst zu implementieren.

von Markus K. (markus-)


Lesenswert?

Rhino R. schrieb:
> Der Automat steht leider nicht in einem Areal, in dem Internet verfügbar
> wäre. Ich bin schon froh, dass überhaupt für SMS genug Empfang da ist.

GSM wird aber so langsam abgeschaltet. In der Schweiz schon vor 
anderthalb Jahren. Es gab Gerüchte, dass Vodafone das Ende 2025 
abschaltet, aber momentan sagen sie, dass es wahrscheinlich bis Ende 
2030 nach und nach abgeschaltet wird.
https://www.pcwelt.de/article/2251322/wann-2g-abschaltung-folgen.html

SMS scheint zwar auch über 4G/5G zu gehen, aber wenn Du da keinen 
Empfang hast solltest Du langfristig an Alternativen denken.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.