Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Как позвонить или отправить СМС через подключенный тлф?


TheEd   (16.09.10 01:00

Господа мастера, всем привет!
Наведите на мысль, как позвонить с устройства (модем или сотовый через дата-кабель подключенный) на определённый номер или послать СМС в случае если девайс - сотовый?
Общий принцип понятен: получить количество такого типа устройств, получить их список, выбрать нужное, сделать дело, освободить устройство.
основной интерес вызывает то что жирное, хотя за остальные пункты тоже буду признателен.


0x00FF00 ©   (16.09.10 03:10[1]

Использовать AT-команды, т.е. фактически работать с телефоном как с модемом.

1. отправка ATZ
2. последовательность инициализации (в случае моего SE K800 — просто ожидание ответа TZ OK)
3. отправка AT-кода SMS (у меня это набор из AT+CSMS, AT+CPMS, AT+CMGF, AT+CMGS и прочих), со всеми параметрами типа текста сообщения, номера поучателя, итд.
4. ожидание ответа ОК и выход (освобождение устройства)

Как-то так.


Anatoly Podgoretsky ©   (16.09.10 18:56[2]

> TheEd  (16.09.2010 01:00:00)  [0]

Телефон подключается как модем, твоя задача найти систему команд модема.


brother ©   (17.09.10 10:20[3]

> твоя задача найти систему команд модема.

+ com порт на котором он висит)


Anatoly Podgoretsky ©   (17.09.10 11:52[4]

> brother  (17.09.2010 10:20:03)  [3]

Если есть ком порт.


han_malign   (17.09.10 13:51[5]

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)


TheEd   (17.09.10 22:55[6]

не густо...
когда-то с com-портом работал - то была связь с технологическим оборудованием по com-порту. Я так понимаю что com-порт, на котороми висит модем используем так же, т.е. посылаем в него последовательности AT-комманд и, если надо, ждём ответ?
И где систему этих AT-команд раскопать? Помогите со ссылками на мануалы.
Сегодня подключу свой Samsung и попробую что нить сотворить...


0x00FF00 ©   (17.09.10 23:58[7]


> т.е. посылаем в него последовательности AT-комманд и, если
> надо, ждём ответ

Именно.


> И где систему этих AT-команд раскопать?

Теоретически, на официальном сайте фирмы, выпустившей мобильник.
Там должна лежать наиболее полная система команд под каждую модель (включая "самопальные" расширения от производителя).


TheEd   (18.09.10 12:18[8]

С СМС понятно. Дозвон видимо так же происходит, а вот как, дозвонившись, послать/принять сообщение?


0x00FF00 ©   (19.09.10 02:15[9]

Могу прислать рабочую программу приёмопередачи AT-сообщений для моего К800, если не смущает, что она на С и под Linux =)


TheEd   (21.09.10 23:08[10]

На C++ я работал, но под мелкомягкими осями... :)
тем не менее думаю что разберусь. Если не сложно, на ed.serdyuk@mail.ru забрось плиз!


0x00FF00 ©   (22.09.10 02:17[11]

TheEd, готово.


0x00FF00 ©   (22.09.10 02:18[12]

В архиве также есть спеки на мой телефон (2 PDF-документа), в них есть АТ-команды для SMS, с примером строки вызова.


0x00FF00 ©   (22.09.10 02:19[13]

*думаю, эти SMS-коды стандартны для большинства мобильных.


Sasha   (05.12.10 20:37[14]

Здраствуйте ешё раз. Если у кого есть рабочий компонент для отправки смс на делфи с примером, поделетись-а?
sasha070393@mail.ru


TMichael   (17.01.11 17:51[15]

если несложно можно мне наработки от к800 для линуха? :)
буду признателен zmraven@inbox.ru


Spot   (22.02.11 05:55[16]

Пытаюсь отправить последовательно 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


Slym ©   (22.02.11 14:02[17]

из архива этого форума:
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;

Ещё раз спасибо Леониду!


Slym ©   (22.02.11 14:05[18]

а мо твоему коду я бы попробывал дослать #13#10 после CTRL+Z


han_malign   (22.02.11 17:00[19]


> at+cmgf=0
>
> OK
> AT+CMGS=24
>
> > 0011000B919742717403F70008A80A04420435044104420031

>
> at+cmgf=0
>
> OK
> AT+CMGS=24
>
> > 0011000B919742717403F70008A80A04420435044104420032
> +CMGS: 66
>
> OK


- надо не sleep(100500) делать, а дожидаться результата операции(+), и сигнала готовности(OK)...


Spot   (24.02.11 03:30[20]


> //после считывания при успешной отправке AtIn должен вернуть
> //+CMGS: [номер отправленного сообщения]

По моему логу только 2-й,4-й и 5-й сообщение вернули +CMGS:XX
Но получателю приходят 1, 3 и 5. Как понять? Как дожидаться результата операции?


han_malign   (24.02.11 11:59[21]


> Как дожидаться результата операции?

- после посылки любой команды подразумевающей ответ устройства - необходимо переходить в режим ожидания ответа(подтверждения/ ошибки(+...), или приглашения (> )). Завершенная последовательность  команд также подразумевает ожидания готовности к приему новых команд OK...
То есть - читаешь из порта пока не придет ответ(+, > , OK), только после этого посылаешь новую команду... Причем, согласитесь - на ответ +<команда> и +CME/CMS ERROR: <err> - дальнейшая последовательность действий должна несколько отличаться...

Если будет превышено время ожидания(скажем минут пять) - значит устройство "отвалилось" - переходишь в режим ожидания готовности устройства. Например можно с разумной периодичностью(не чаще двух секунд) посылать команду сброса ATZ - до тех пор пока устройство не скажет OK(я тута)... После чего заново выставляешь режимы устройства и переходишь в состояние работы...


Spot   (25.02.11 04:18[22]

Спасибо han_malign за советы, пока получается, буду копаться дальше, усложнять задачу


имя   (29.09.11 14:10[23]

Удалено модератором


версия для печати
Обсуждение закрыто


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо