Forum: Mikrocontroller und Digitale Elektronik AT-Befehl zum Versenden einer SMS klappt nicht (PDU-Modus)


von Peter (Gast)


Lesenswert?

Hallo!

Ich versuche derzeit - noch vergeblich - eine SMS via Handy (Nokia 6310) 
zu verschicken. Und zwar über AT-Befehle 
<http://de.wikipedia.org/wiki/AT-Befehlssatz >.

Und zwar mit AT+CMGS im PDU-Modus! <http://www.nobbi.com/sms_pdu.htm / 
http://www.nobbi.com/atgsm.htm >

Irgendwo ist aber noch ein Fehler drinnen! :(

Habe mir manuell meinen Hex-Code zusammengeschrieben und der PDUspy 
wertet das auch schon mal richtig aus.

Code: 079194710600403325000C9194716915XXXX00000BD4F29C4E2FE3E9BA4D19 
(letzte vier Ziffern der Empfängeradresse zensiert)

Der decodierte PDU-Code analysiert mit PDUspy:
1
PDU LENGTH IS 31 BYTES
2
ADDRESS OF DELIVERING SMSC
3
  NUMBER IS :  +491760000433 // ist der SMSC für o2 Germany Loop (Prepaid)
4
  TYPE OF NR. :  International
5
  NPI :  ISDN/Telephone (E.164/163)
6
7
MESSAGE HEADER FLAGS
8
  MESSAGE TYPE :  SMS SUBMIT
9
  REJECT DUPLICATES :  YES
10
  VALIDITY PERIOD :  NOT PRESENT
11
  REPLY PATH :  NO
12
  USER DATA HEADER :  NO UDH
13
  REQ. STATUS REPORT :  YES
14
  MSG REFERENCE NR. :  0 (0x00)
15
16
DESTINATION ADDRESS
17
  NUMBER IS :  +49179651XXXX
18
  TYPE OF NR. :  International
19
  NPI :  ISDN/Telephone (E.164/163)
20
21
PROTOCOL IDENTIFIER  (0x00)
22
  MESSAGE ENTITIES :  SME-to-SME
23
  PROTOCOL USED :  Implicit / SC-specific
24
25
DATA CODING SCHEME  (0x00)
26
  AUTO-DELETION :  OFF
27
  COMPRESSION :  OFF
28
  MESSAGE CLASS :  NONE
29
  ALPHABET USED :  7bit default
30
31
VALIDITY OF MESSAGE :  NONE GIVEN
32
33
USER DATA PART OF SM
34
  USER DATA LENGTH :  11 septets
35
  USER DATA (TEXT) :  Testtext:€

Und hier der Auszug aus HyperTerminal:
1
at
2
OK
3
at+cmgs=31<LF>
4
> 079194710600403325000C9194716915XXXX00000BD4F29C4E2FE3E9BA4D19<Strg+Z>
5
ERROR

PDU-Modus ist ein (AT+CMGF=0).

Was mir gerade gekommen ist.. kann es eventuell am Strg+Z liegen? Hab 
aber eben auch gerade noch ein Strg+Y probiert... klappt auch nicht! :(

Ich weiß nicht mehr weiter. Hoffe, dass mir von euch jemand helfen kann. 
Der ein oder andere hat vielleicht schon Erfahrung mit AT-Befehlen und 
Drumherum.

von Peter (Gast)


Lesenswert?

Eventuell falsches Forum.. sorry ich kenne mich hier noch nicht so aus!

von Daniel L. (bucho)


Lesenswert?

Str-Z ist schon richtig. Ich hab deinen String jetzt auf die Schnelle 
nicht genau analysiert. Aber hast Du versucht, die SMS mit PDU-Spy 
direkt zu senden? Da kannst Du dann erstmal prüfen, ob deine Message 
wirklich funktioniert, oder ob er einen Fehler anzeigt. Ich hatte es 
auch schon einige Male, dass ich eine gültige Message erzeugt hab, aber 
aufgrund falscher Parametereinstellung hats nicht geklappt die zu 
senden.

Gruß

von l00k (Gast)


Lesenswert?

Das Problem wird die Längenangabe sein:
1
at+cmgs=31<LF>
2
3
--> at+cmgs=49<LF>

Es muß die Anzahl der übergebenen Zeichen ohne SMSC angegeben werden, 
wobei jede Stelle als ein Zeichen zählt (00 -> 2 Zeichen).

von Michael (Gast)


Lesenswert?

stell mal 00 vor die Nachricht.

00079194710600403325000C9194716915XXXX00000BD4F29C4E2FE3E9BA4D19<Strg+Z>

von l00k (Gast)


Lesenswert?

>stell mal 00 vor die Nachricht.

Wozu sollte das gut sein? Schon mal 'ne SMS per PDU versendet?

von Daniel L. (bucho)


Lesenswert?

Ne 00 davorsetzen halte ich auch für falsch.

von Peter (Gast)


Lesenswert?

>Das Problem wird die Längenangabe sein:
Das kann sein.. da war ich mir bisher auch noch nicht so ganz sicher.

>--> at+cmgs=49<LF>
>
>Es muß die Anzahl der übergebenen Zeichen ohne SMSC angegeben werden,
>wobei jede Stelle als ein Zeichen zählt (00 -> 2 Zeichen).

Also SMSC inkl. Längenangabe ist das hier: "0791947106004033" da komme 
ich dann auf eine Gesamtlänge von 46 Bytes und nicht auf 49 Bytes, oder? 
Aber weder das eine, noch das andere klappt leider.

>>stell mal 00 vor die Nachricht.
>
>Wozu sollte das gut sein? Schon mal 'ne SMS per PDU versendet?

Na ja - ist nicht ganz unberechtigt, falls gemeint war statt dem SMSC 
mal ein 00 zu übergeben. Hab ich aber auch schon probiert -- aber sollte 
ich nochmal tun. Dürfte aber nix ausmachen meiner Meinung nach.

>Str-Z ist schon richtig. Ich hab deinen String jetzt auf die Schnelle
>nicht genau analysiert. Aber hast Du versucht, die SMS mit PDU-Spy
>direkt zu senden? Da kannst Du dann erstmal prüfen, ob deine Message
>wirklich funktioniert, oder ob er einen Fehler anzeigt. Ich hatte es
>auch schon einige Male, dass ich eine gültige Message erzeugt hab, aber
>aufgrund falscher Parametereinstellung hats nicht geklappt die zu
>senden.
Mach ich gleich mal. Aber Decodieren hat ja zumindest mal einwandfrei 
geklappt. Mal schauen. Welche Parametereinstellungen meinst du da zum 
Beispiel?

Danke an euch alle! :)

von Peter (Gast)


Lesenswert?

>[...] Aber hast Du versucht, die SMS mit PDU-Spy
>direkt zu senden?

Wie geht das denn? Aber der PDU-Code stimmt im Prinzip. Man kann ihn da 
ja auch manuell zusammensetzen. Habe mir jetzt diesen generiert und es 
kommt exakt der gleiche Code raus. Wenn ich das über das Programm sende 
(in der Registerkarte "Create") funktioniert das auch. :(

Liegt's vielleicht doch an diversen White-Spaces oder Steuerzeichen? 
Müsste vielleicht meinen <LF> noch kontrollieren? Nachdem ich Windows 
nutze könnte da eventuell ein <CR> noch ein Zeichen beanspruchen und 
dann stimmt die Länge auch schon nicht mehr? :| Ärgerlich. Bestimmt nur 
eine Kleinigkeit.

Aber danke soweit. Tipps sind immer gut! :)

von Michael (Gast)


Lesenswert?

Hallo 100k,

ja, ich versende sms via bluetooth an ein Handy, und das funktioniert.

Bei pduspy kam bei mir immer ne falsche Länge raus, genauer gesagt immer 
1 zuviel. Nachdem ich 00 beim Header vorangestellt hatte läuft das 
Ganze.

von Peter (Gast)


Lesenswert?

>Bei pduspy kam bei mir immer ne falsche Länge raus, genauer gesagt immer
>1 zuviel. Nachdem ich 00 beim Header vorangestellt hatte läuft das
>Ganze.

Hm und welche Code-Länge schlägst du dann vor, dass ich angeben soll? 
Ich befürchte, dass da nix bringen wird, aber einen Versuch ist es immer 
wert.

von l00k (Gast)


Lesenswert?

Was für ein Telefon? Ich verwendete Siemens S25-S45 über Kabel. Da waren 
solche Tricks nicht nötig.

von Peter (Gast)


Lesenswert?

>Was für ein Telefon? Ich verwendete Siemens S25-S45 über Kabel. Da waren
>solche Tricks nicht nötig.

Ist ein Nokia 6310. Ja, ich hab gelesen, dass bei einem Siemens so 
einige Tricks weniger nötig sind. ;) Da braucht man zum Beispiel auch 
kein spezielles Datenkabel (DLR-3) und kommt statt dessen mit 3 Drähten 
klar, richtig? Hehe aber was meinst du sonst noch? Weil's einen 
Text-Modus gibt? Gäbe es bei mir glaube ich sogar auch. Müsste ich auch 
noch probieren. Aber ich dachte mir wenn schon, denn schon. Eventuell 
kann ich's noch brauchen - früher oder später.

von Gerhard G. (ibilzh)


Lesenswert?

Hallo


Vorweg: das Siemens S25 unterstützt keinen Textmodus, soweit ich weiß.
Eine Frage, die ich nicht oben rauslesen kann. Hast du den SMS-Code oben 
selbst geschrieben.
Ich hab mal eine Alarmanlage mit SMS gebaut, und da auch Versuche zuerst 
mit Handy gemacht.
Beschreibung http://www.emagu.de/alarmanlage.htm

Ich hab das andersherum aufgezogen:
Eine SMS schreiben und im Handy speichern.
Dann mit AT+CMGL=4 listen  - auf Hyperterminal
Bei Ausgabe ist die erste Stelle die Platznummer wo es abgespeichert 
ist.
Und dann mit AT+CMSS=1 ans Hyperterminal rausschicken.
1 = Speicherstelle.

Dann hat man schon mal den Code, so wie es vom Handy kommt.
Übrigens ist der original AT-Befehlssatz vom Hersteller super. Ich hab 
das von Siemens mal gegoogelt. Ist ein dickes Handbuch.
Gerhard

von Daniel L. (bucho)


Lesenswert?

Ich hab grad nochmal in meinen Code geschaut. Ich habe als Länge die 
Anzahl der Bytes genommen. Dabei zählt die SMSC nicht mit. Ich hab also 
den String, den ich nach dem ">" Promt schicken will. Von dem ermittel 
ich die Länge und teile diese durch 2 (mit einem shift right). Danach 
ziehe ich noch eins ab. Ich arbeite nämlich mit fest vorkonfigurierter 
SMSC und übergeb die nicht extra, daher steht da bei mir nur 00 statt 
der SMSC. Du müstest bei dir die Anzahl der Bytes der SMSC abziehen. Du 
kannst den PDU Spy ja auch mal an hyperterminal hängen und gucken, was 
er als Befehl ausgibt.

Gruß

von Peter (Gast)


Lesenswert?

Hi!

>Eine Frage, die ich nicht oben rauslesen kann. Hast du den SMS-Code oben
>selbst geschrieben.
Ja, per Hand zusammengefrickelt via <http://www.nobbi.com/sms_pdu.htm > 
bzw. <http://www.riccibitti.com/tinyplanet/tiny_sidebar.htm >. Hab's 
dann aber mal wie erwähnt mit PDUspy zerlegt und das sah gut aus. Und 
dann selber noch mit PDUspy codiert.. und da kam das gleiche raus. Also 
verifiziert meiner Meinung nach. :)

>Eine SMS schreiben und im Handy speichern.
Per Hand? Also auf dem Handy wo's noch nicht angeschlossen war? Na ja 
ich will ja später dynamisch SMS generieren. Und nicht vorher eine 
festlegen, die dann schon im Handy codiert vorliegt.


>Übrigens ist der original AT-Befehlssatz vom Hersteller super. Ich hab
>das von Siemens mal gegoogelt.
Ja klar.. da hab ich mich vorher schon auch informiert. Hab hier das "AT 
Command Set For Nokia GSM And WCDMA Products" als pdf. Werde mir deine 
Projektseite mal genauer ansehen, danke.

Auszug aus der o.g. Doku:
1
AT+CMGS Send Message
2
3
3GPP TS 27.005, Section 3.5.1 /3/. Sends a message from a TE to the
4
network (SMS-SUBMIT). The message reference value <mr> is returned to the 
5
TE on successful message delivery. Sending can be cancelled with the <ESC>
6
character. <ctrl-Z> must be used to indicate the ending of the message 
7
body. Text/PDU is entered as specified in 27.005.
8
9
10
Text mode (+CMGF=1):
11
+CMGS=<da>[,<toda>]<CR>
12
text is entered<ctrl-Z/ESC>
13
PDU mode (+CMGF=0):
14
+CMGS=<length><CR>
15
PDU is given<ctrl-Z/ESC>


>Du müstest bei dir die Anzahl der Bytes der SMSC abziehen.
Okay. Hatten wir ja glaube ich weiter oben schon mal. Werde ich aber 
gleich noch mal versuchen.. kann mich nämlich auch nicht mehr so richtig 
entsinnen. Das mit den Halbbytes ist schon klar. :)

>Du kannst den PDU Spy ja auch mal an hyperterminal hängen und gucken, was
>er als Befehl ausgibt.
Das geht??! Wow.. cool. Wie denn? :D

Danke euch soweit! :]

von Daniel L. (bucho)


Lesenswert?

Naja, PDU-Spy geht auf die Serielle Schnittstelle. Dan nimmste nen 
Nullmodemkabel und hängst es an eine andere Schnittstelle dran, die du 
mit Hyperterminal ansprichst. Ist zwar umständlich, aber sollte gehen.

Gruß

von Peter (Gast)


Lesenswert?

>>Du müstest bei dir die Anzahl der Bytes der SMSC abziehen.
>Okay. Hatten wir ja glaube ich weiter oben schon mal. Werde ich aber
>gleich noch mal versuchen.. kann mich nämlich auch nicht mehr so richtig
>entsinnen. Das mit den Halbbytes ist schon klar. :)

Yeaaah.. Erfolg!! Vielen lieben Dank!
1
SMS: 0791947106004033 (16 Halbbytes,  8 Bytes)
2
Code gesamt: (...)    (62 Halbbytes, 31 Bytes)
3
==> 31 Bytes - 8 Bytes = 23 Bytes
1
at+cmgs=23<CR>
2
> 079194710600403325000C9194716915XXXX00000BD4F29C4E2FE3E9BA4D19<Strg+Z>
3
+CMGS: 192

Die Freude ist riesig! :D

von Peter (Gast)


Lesenswert?

>Naja, PDU-Spy geht auf die Serielle Schnittstelle. Dan nimmste nen
>Nullmodemkabel und hängst es an eine andere Schnittstelle dran, die du
>mit Hyperterminal ansprichst. Ist zwar umständlich, aber sollte gehen.
>
>Gruß

Achso. Ich dachte das ginge eventuell softwareseitig. Man weiß ja nie. 
:D Aber Problem ist nun ja (vorerst) gelöst. Bis die nächste(n) Frage(n) 
auftauchen. Danke nochmal an alle Beteiligten! :))

von Daniel L. (bucho)


Lesenswert?

Klasse! Freut mich, dass es geklappt hat. Weiterhin viel erfolg.

Gruß

von Gerhard G. (ibilzh)


Lesenswert?

Hi Peter,
freut mich für Dich.

Nur als Nachtrag zu meiner Hauruckmethode - abspeichern und ausdrucken:
--- Dann mit AT+CMGL=4 listen  - auf Hyperterminal ---
Das hätte auch die Länge ausgegeben, und man sieht, dass der String 
länger ist.
Das war übrigens nur zur Fehlersuche gedacht.


@Daniel
saubere Arbeit

schönen Gruß
Gerhard

von Andreas (Gast)


Lesenswert?


von christian (Gast)


Lesenswert?

Gibt es ein Handy, mit dem ich die SMS als "Klar-Text" senden kann
Beispiel

Print "Hallo. Ich schicke eine SMS"

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.