-
Господа мастера, всем привет! Наведите на мысль, как позвонить с устройства (модем или сотовый через дата-кабель подключенный) на определённый номер или послать СМС в случае если девайс - сотовый? Общий принцип понятен: получить количество такого типа устройств, получить их список, выбрать нужное, сделать дело, освободить устройство. основной интерес вызывает то что жирное, хотя за остальные пункты тоже буду признателен.
-
Использовать AT-команды, т.е. фактически работать с телефоном как с модемом.
1. отправка ATZ 2. последовательность инициализации (в случае моего SE K800 — просто ожидание ответа TZ OK) 3. отправка AT-кода SMS (у меня это набор из AT+CSMS, AT+CPMS, AT+CMGF, AT+CMGS и прочих), со всеми параметрами типа текста сообщения, номера поучателя, итд. 4. ожидание ответа ОК и выход (освобождение устройства)
Как-то так.
-
> TheEd (16.09.2010 01:00:00) [0]
Телефон подключается как модем, твоя задача найти систему команд модема.
-
> твоя задача найти систему команд модема.
+ com порт на котором он висит)
-
> brother (17.09.2010 10:20:03) [3]
Если есть ком порт.
-
http://www.dreamfabric.com/sms/ETSI( http://www.etsi.org): ETS 300 916 - AT command set for GSM Mobile Equipment GSM 03.40 - Technical realization of the Short Message Service GSM 07.05 - Equipment (DTE - DCE) interface for Short Message Service (SMS) and Cell Broadcast Service (CBS)
-
не густо... когда-то с com-портом работал - то была связь с технологическим оборудованием по com-порту. Я так понимаю что com-порт, на котороми висит модем используем так же, т.е. посылаем в него последовательности AT-комманд и, если надо, ждём ответ? И где систему этих AT-команд раскопать? Помогите со ссылками на мануалы. Сегодня подключу свой Samsung и попробую что нить сотворить...
-
> т.е. посылаем в него последовательности AT-комманд и, если > надо, ждём ответ
Именно.
> И где систему этих AT-команд раскопать?
Теоретически, на официальном сайте фирмы, выпустившей мобильник. Там должна лежать наиболее полная система команд под каждую модель (включая "самопальные" расширения от производителя).
-
С СМС понятно. Дозвон видимо так же происходит, а вот как, дозвонившись, послать/принять сообщение?
-
Могу прислать рабочую программу приёмопередачи AT-сообщений для моего К800, если не смущает, что она на С и под Linux =)
-
На C++ я работал, но под мелкомягкими осями... :) тем не менее думаю что разберусь. Если не сложно, на ed.serdyuk@mail.ru забрось плиз!
-
TheEd, готово.
-
В архиве также есть спеки на мой телефон (2 PDF-документа), в них есть АТ-команды для SMS, с примером строки вызова.
-
*думаю, эти SMS-коды стандартны для большинства мобильных.
-
Здраствуйте ешё раз. Если у кого есть рабочий компонент для отправки смс на делфи с примером, поделетись-а? sasha070393@mail.ru
-
если несложно можно мне наработки от к800 для линуха? :) буду признателен zmraven@inbox.ru
-
Пытаюсь отправить последовательно 5 СМСок "тест1","тест2",..."тест3", приходит только первый, третий и пятый. Почему? Между отправками sleep(10000); Лог:
at+cmgf=0
OK
AT+CMGS=24
> 0011000B919742717403F70008A80A04420435044104420031
at+cmgf=0
OK
AT+CMGS=24
> 0011000B919742717403F70008A80A04420435044104420032
+CMGS: 66
OK
at+cmgf=0
AT+CMGS=24
OK
> 0011000B919742717403F70008A80A04420435044104420033
at+cmgf=0
AT+CMGS=24
OK
> 0011000B919742717403F70008A80A04420435044104420034
+CMGS: 67
OK
at+cmgf=0
AT+CMGS=24
OK
> 0011000B919742717403F70008A80A04420435044104420035
+CMGS: 68
OK
-
из архива этого форума: Pattern (10.04.07 12:37) [5] Чтобы уж завершить эту эпопею (вдруг кому пригодится), напишу как на самом деле производится отправка: var AtIn: String; Simb: Integer; ... begin ... if ComPort.Connected then begin //отправляем предварительную команду отправки SMS ComPort.WriteStr('AT+CMGS=+79211234567'+#13); //считываем данные, что модем готов для приёма сообщения ComPort.ReadStr(AtIn,Simb); //AtIn должен вернуть строку //AT+CMGS=+79211234567 //> ... //далее идёт посылка на модем самого сообщения ComPort.WriteStr('Test message'+' '+^Z); //после тела сообщения обязателен пробел (??? не понятно почему) //посылка SMS - [CTRL+Z], он же ^Z, он же #26
//считываем как завершилась операция ComPort.ReadStr(AtIn,Simb); //после считывания при успешной отправке AtIn должен вернуть //+CMGS: [номер отправленного сообщения] end;
Ещё раз спасибо Леониду!
-
а мо твоему коду я бы попробывал дослать #13#10 после CTRL+Z
-
> at+cmgf=0 > > OK > AT+CMGS=24 > > > 0011000B919742717403F70008A80A04420435044104420031 > > at+cmgf=0 > > OK > AT+CMGS=24 > > > 0011000B919742717403F70008A80A04420435044104420032 > +CMGS: 66 > > OK
- надо не sleep(100500) делать, а дожидаться результата операции(+), и сигнала готовности(OK)...
-
> //после считывания при успешной отправке AtIn должен вернуть > //+CMGS: [номер отправленного сообщения]
По моему логу только 2-й,4-й и 5-й сообщение вернули +CMGS:XX Но получателю приходят 1, 3 и 5. Как понять? Как дожидаться результата операции?
-
> Как дожидаться результата операции?
- после посылки любой команды подразумевающей ответ устройства - необходимо переходить в режим ожидания ответа(подтверждения/ ошибки( +... ), или приглашения ( > )). Завершенная последовательность команд также подразумевает ожидания готовности к приему новых команд OK ... То есть - читаешь из порта пока не придет ответ(+, > , OK), только после этого посылаешь новую команду... Причем, согласитесь - на ответ +<команда> и +CME/CMS ERROR: <err> - дальнейшая последовательность действий должна несколько отличаться... Если будет превышено время ожидания(скажем минут пять) - значит устройство "отвалилось" - переходишь в режим ожидания готовности устройства. Например можно с разумной периодичностью(не чаще двух секунд) посылать команду сброса ATZ - до тех пор пока устройство не скажет OK(я тута)... После чего заново выставляешь режимы устройства и переходишь в состояние работы...
-
Спасибо han_malign за советы, пока получается, буду копаться дальше, усложнять задачу
-
Удалено модератором
|