www.mikrocontroller.net

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


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
PDU LENGTH IS 31 BYTES
ADDRESS OF DELIVERING SMSC
  NUMBER IS :  +491760000433 // ist der SMSC für o2 Germany Loop (Prepaid)
  TYPE OF NR. :  International
  NPI :  ISDN/Telephone (E.164/163)

MESSAGE HEADER FLAGS
  MESSAGE TYPE :  SMS SUBMIT
  REJECT DUPLICATES :  YES
  VALIDITY PERIOD :  NOT PRESENT
  REPLY PATH :  NO
  USER DATA HEADER :  NO UDH
  REQ. STATUS REPORT :  YES
  MSG REFERENCE NR. :  0 (0x00)

DESTINATION ADDRESS
  NUMBER IS :  +49179651XXXX
  TYPE OF NR. :  International
  NPI :  ISDN/Telephone (E.164/163)

PROTOCOL IDENTIFIER  (0x00)
  MESSAGE ENTITIES :  SME-to-SME
  PROTOCOL USED :  Implicit / SC-specific

DATA CODING SCHEME  (0x00)
  AUTO-DELETION :  OFF
  COMPRESSION :  OFF
  MESSAGE CLASS :  NONE
  ALPHABET USED :  7bit default

VALIDITY OF MESSAGE :  NONE GIVEN

USER DATA PART OF SM
  USER DATA LENGTH :  11 septets
  USER DATA (TEXT) :  Testtext:€

Und hier der Auszug aus HyperTerminal:
at
OK
at+cmgs=31<LF>
> 079194710600403325000C9194716915XXXX00000BD4F29C4E2FE3E9BA4D19<Strg+Z>
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.

Autor: Peter (Gast)
Datum:

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

Autor: Daniel Lancelle (bucho)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: l00k (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem wird die Längenangabe sein:
at+cmgs=31<LF>

--> 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).

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
stell mal 00 vor die Nachricht.

00079194710600403325000C9194716915XXXX00000BD4F29C4E2FE3E9BA4D19<Strg+Z>

Autor: l00k (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>stell mal 00 vor die Nachricht.

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

Autor: Daniel Lancelle (bucho)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ne 00 davorsetzen halte ich auch für falsch.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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! :)

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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! :)

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: l00k (Gast)
Datum:

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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gerhard Günzel (ibilzh)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel Lancelle (bucho)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
AT+CMGS Send Message

3GPP TS 27.005, Section 3.5.1 /3/. Sends a message from a TE to the
network (SMS-SUBMIT). The message reference value <mr> is returned to the 
TE on successful message delivery. Sending can be cancelled with the <ESC>
character. <ctrl-Z> must be used to indicate the ending of the message 
body. Text/PDU is entered as specified in 27.005.


Text mode (+CMGF=1):
+CMGS=<da>[,<toda>]<CR>
text is entered<ctrl-Z/ESC>
PDU mode (+CMGF=0):
+CMGS=<length><CR>
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! :]

Autor: Daniel Lancelle (bucho)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!
SMS: 0791947106004033 (16 Halbbytes,  8 Bytes)
Code gesamt: (...)    (62 Halbbytes, 31 Bytes)
==> 31 Bytes - 8 Bytes = 23 Bytes
at+cmgs=23<CR>
> 079194710600403325000C9194716915XXXX00000BD4F29C4E2FE3E9BA4D19<Strg+Z>
+CMGS: 192

Die Freude ist riesig! :D

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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! :))

Autor: Daniel Lancelle (bucho)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klasse! Freut mich, dass es geklappt hat. Weiterhin viel erfolg.

Gruß

Autor: Gerhard Günzel (ibilzh)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: christian (Gast)
Datum:

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

Print "Hallo. Ich schicke eine SMS"

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.