Avatar billede xenoxsis Nybegynder
11. marts 2011 - 21:57 Der er 12 kommentarer og
1 løsning

AT Commands til at sende SMS virker ikke

Hej Eksperter,

Jeg skal prøve at sende nogle AT commands via C# til en nokia telefon. Har brugt TeraTerm Pro terminal til at forsøge mig med følgende commands (med svar):

ATZ<enter>
OK
AT+GMGF=1<enter>
OK
AT+CMGS="xxxxxxxx"
> Hej how goes?<CTRL-z>
OK

Og så får jeg en SMS til det specificerede nummer med "Hej how goes?". Ganske fint.

Når jeg så konverterer dette til C#:


        System.IO.Ports.SerialPort p;

        public SMSModule()
        {
            p = new System.IO.Ports.SerialPort("COM3",9600);

            if (!p.IsOpen)
            {
                p.Open();
            }
            p.Write("AT+CMGF=1" + (char)13);
           
        }

        public void SendSMS(string cellNumber, string message)
        {
            if (p.IsOpen)
            {
                p.WriteLine("AT+CMGS=\"" + cellNumber + "\"" + (char)13);
                p.WriteLine(message + (char)26);
            }
        }

Men det virker ikke, der kommer ingen SMS. Så jeg har fundet ud af at hvis jeg så efterfølgende går ind i teraterm og trykker Enter. Så får jeg de commands der lige er blevet sendt og det ser sådan ud:

AT+CMGS="xxxxxxxx"
tester

OK

>
OK

Det sidste > og OK er dog mig der trykker enter i teraterm. Og det ser ud til at gøre tricket. Dvs. den står og tænker i buffer og sender først reelt når jeg trykker på enter i teraterm.

Hvordan kan jeg få den til at sende selv? Hvad mangler jeg?
Avatar billede xenoxsis Nybegynder
11. marts 2011 - 22:07 #1
Det skal dog siges, at når jeg forsøger i Tera Term alene skal jeg trykke CTRL+z 2 gange før den går igennem. Men har prøvet alle mulige måder at tilføje (char)26 eller (char13) endnu en gang.
Avatar billede Syska Mester
11. marts 2011 - 22:13 #2
Har du for sjov prøvet at smide lidt Thread.Sleep(1000) ind ?

Hvis du skriver for hurtigt til den tror jeg ikke den når at svare tilbage med en "OK" inden den næste command kommer til den.

Eventuelt skal du læse fra din telefon og først sende næste besked når du har fået "OK" tilbage fra den.

Den med sleep er nok hurtigt at teste, derefter kan du implementere det på en mere rigtig måde :-)

Kun et gæt.
Avatar billede xenoxsis Nybegynder
11. marts 2011 - 22:22 #3
Det har jeg lige forsøgt mig med, samme resultat desværre.

Jeg får fornemmelsen af at den venter på en afsluttende kommando, for igen når jeg går ind i tera term og trykker enter, bliver den sendt med det samme.
Avatar billede Syska Mester
11. marts 2011 - 22:28 #4
Jeg ville prøve at læse hvad der eventuelt er i bufferen fra din telefon ... og smide nogen flere "\r\n" efter den.

mvh
Avatar billede xenoxsis Nybegynder
11. marts 2011 - 22:33 #5
Jamen har prøvet både at smide ekstra (char)26, (char)13, samt "\r\n" ind. Både i samme WriteLine som i "message + (char)26" og i en efterfølgende. Samme resultat.
Avatar billede tjens Nybegynder
11. marts 2011 - 22:52 #6
Har du TeraTerm åben samtidig, så der kan være kamp om portens hardware ressourcer?

Har du en p.close() i programmet?  Det kan være at close afslutter sidste linie.
Avatar billede xenoxsis Nybegynder
11. marts 2011 - 23:00 #7
Nej Tera Term er ikke åbent samtidigt (så fejler koden ved p.Open da COM porten er optaget).

Og jeg havde ingen p.close() - Har lige prøvet at indsætte den. Samme resultat desværre. Det er ellers nogle gode forslag.
Avatar billede tjens Nybegynder
11. marts 2011 - 23:25 #8
Prøv at sende (char)3  til sidst, i stedet for 26.
Avatar billede tjens Nybegynder
11. marts 2011 - 23:25 #9
Eller 4
Avatar billede xenoxsis Nybegynder
11. marts 2011 - 23:52 #10
Det er testet, og virker ikke. Bortset fra at jeg skulle trykke CTRL+z selv i teraterm for at sende. Og så sendte den en tom linie med SMS'en (som jeg går ud fra er (char)4 eller (char)3).
Avatar billede tjens Nybegynder
12. marts 2011 - 00:31 #11
Kan det være fordi C# string er unicode, mens telefonen forventer ascii?

Måske skal du gå bort fra writeline og bruge Write(Byte[], Int32, Int32) fra http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx#Y3900

Skal i seng nu, så har ikke tid til mere, men prøv at kigge på nederste svar her: http://stackoverflow.com/questions/4429259/how-do-i-put-end-of-text-etx-ascii-3-in-a-string
Avatar billede xenoxsis Nybegynder
26. maj 2011 - 14:55 #12
Undskyld mit sene svar. Jeg fandt en hel SMS sender klasse på nettet. Som i realiteten gør præcis hvad jeg har prøvet, og det virker. Hvorfor ved jeg ikke. Men den bruger /r til at sende med.
Avatar billede Syska Mester
26. maj 2011 - 16:12 #13
Og så lige et link ... så andre kan få glæde af det.

mvh
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester