Форум » » Смс от Crestron » Ответить

Смс от Crestron

marty_iron: Подскажите возможно ли каким-либо образом организовать отправку некоего отчета о состоянии по смс при появление в Crestron определенного сигнала? Например сработало реле - отправляется отчет что сработало реле...

Ответов - 71, стр: 1 2 3 4 All

marty_iron: всплало 3 проблемы но русское смс я получил))) но получил я его когда сам без функции отправил сообщение из примера - 041F04400438043204350442 а не ясны пока такие моменты))) 1. В каком виде надо писать русские буквы в функцию? 2. В примере "AT+CSMP=1,167,0,8\x0D", но на это он выдает ошибку, а на "AT+CSMP=17,167,0,8\x0D" ошибку не выдает. И третье - если до ввода номера ввести to_modem="AT+CSCS=UCS2\x0D"; он на номер выдает ошибку. Я сделал до номера to_modem="AT+CSCS=GSM\x0D"; а после номера to_modem="AT+CSCS=UCS2\x0D"; И идет без ошибки

Вячеслав: AT+CSMP=1,167,0,8 Это опечатка у автора по 2 ссылке. Там 17 конечно должно быть а не 1. 17 означает, что следующее поле VP(то которое =167) будет содержать данные. 1 - тоже применимо и входит в состав 17, но тогда второго поля не должно быть. Наверное, так и правильно что USC2 режим уже после номера. Иначе номер и команду его содержащую, наверное тоже потребовалось бы преобразовать в USC2. У меня то нет модема попробовать. Хотя может все таки номер в кавычках попробовать Вам. Вместо кавычек используйте \x22. Можете попробовать всю команду через конвертер пропустить чтоб каждый раз не переключать GSM/UCS2. send_string$="AT+CMGS=\x22+"+Number$+"\x22\x0D"+Message$+"\x1A"; to_modem$=SMS_CONVERTOR(send_string$); Буквы в функции должны быть в расширенной ASCII, если имеется ввиду SMS_CONVERTOR. Я проверял функцию в дебагере, подавая на serial вход русские буквы. Т.е. для слова Привет должно быть вида: \xCF\xF0\xE8\xE2\xE5\xF2 А вы как подавали?

marty_iron: Вячеслав а что вообще означает каждая из цифр AT+CSMP=1,167,0,8?


marty_iron: Вячеслав а я подавал - \x8F\x90\x88\x82\x85\x92 - и получал что функция ничего не выдавала... у меня может какая-то не такая таблица?

Вячеслав: 1.AT+CSMP=1,167,0,8 это скорее всего опечатка, я уже писал. Правильно AT+CSMP=17,167,0,8 Формат: AT+CSMP=<fo>,<vp>,<pid>,<dcs> click here fo=17 составное значение: указывает что поле vp присутствует и сообщение от MS к SC (от модема к сервисному центру) vp=167 кодирует длительность действия сообщения (24ч) pid=0 используемый протокол (значение 0 используют все в примерах, в доке оно не описано, но и других подходящих вашему случаю значений нет) dcs=8 способ кодировки данных для UCS2 (8-определяет что используется кириллица Так пишут в интернете, в доке по AT командам варианты на это поле не расшифрованы) 2. \x8F это из кодировки cp866, а надо Win-1251(cp1251). Как вы вообще умудрились получить cp866? Прямо в hex что ли вводили? Расширенная ASCII click here 3.Модуль преобразования из примера click here

marty_iron: Вячеслав спасибо!! ну я просто нашел в гуле - расширенная ascii таблица, и не думал что их несколько...

marty_iron: А не подскажите как сделать так, чтобы по приходу на номер модема, подключенного к крестрону, например смс "ОК" - в крестроне появлялся некий единичный импульс?

Вячеслав: Пример (идея) с обратным запросом был описан по ссылке которую я уже приводил click here: Для реализации вышеупомянутой логики от модема требуется: прочитать SMS из памяти, удалить SMS из памяти (чтобы не скапливались). Для чтения сообщений использовал команды AT+CMGR и AT+CMGL (их краткое описание приводилось ранее). Чтение всех сообщений будет выглядеть как: AT+CMGF=1 [Enter] AT+CMGL="ALL" [Enter] +CMGL: 6,"REC READ","778467",,"11/09/03,18:49:40+16" 007700770077002E006D00740073002E00720075 +CMGL: 7,"REC READ","+79261234567",,"11/10/18,18:38:00+16" 04220435044104420020043F044004380435043C043000200073006D0073002004410 43E043E043104490435043D04380439002100200421043C04410020043D043D043D04 3004340430003F0021003F00210028002D005F002D00290020 [Enter] Здесь всё проще чем было раньше. Каждое сообщение состоит из 2х строк, в первой содержатся данные о сообщении (такие как: от кого, когда, номер сообщения), а во второй сам текст сообщения (опять таки в кодировке UCS, функция UCSToAnsi приводилась выше). Чтение одного сообщение осуществляется как: AT+CMGF=1 [Enter] AT+CMGR=7 [Enter] +CMGR: "REC READ","+79261234567",,"11/10/18,18:38:00+16" 04220435044104420020043F044004380435043C043000200073006D0073002004410 43E043E043104490435043D04380439002100200421043C04410020043D043D043D04 3004340430003F0021003F00210028002D005F002D00290020 [Enter]marty_iron пишет: Аналогичным образом происходит и удаление сообщений. Если например в моём случае отправить команду AT+CMGD=7, то при следующем AT+CMGL=«ALL» я уже не увижу сообщение номер 7, т.к. оно будет удалено. Т.е. надо будет 1.Отправить вышеуказанные команды на чтение смс из памяти модема 2.Получив на них ответ записать его в текстовую переменную (str$) 3.Искать вложение "OK" в этой переменной if (find("041E041A",str$)>0){pulse(1,out_ok;} //при успешном поиске отправляется импульс на digital_output OUT_OK 041e и 041a это "ОК" в кодировке UCS2 для смс рассылок

marty_iron: Вячеслав но что сделать, если неизвестно, когда придет эта смс? ну т е система работает, и в какой то момент может быть прислано смс - и надо что-то делать

Вячеслав: Варианта по крайней мере 2: 1.Посмотреть выдает ли что то модем в COM порт во время прихода СМС, если да то сделать обработчик этого события CHANGE - find- отправка команд на считывание с модема 2.Периодически (раз в 10с например) посылать команды на чтение сообщений и осуществлять в ответах поиск ОК P.S Правильнее str$ (from_modem) обьявить как BUFFER_INPUT

marty_iron: не знаю, но с чтением пока ничего не удается вот например команда на удаление AT+CMGD=7, при ее отправе а потом чтение всех - он напротив удаленных смс пишет что они UNREAD, а при следующем опросе они опять на месте

Вячеслав: Команда AT+CMGD=7 удаляет сообщение с номером 7. Оно у Вас есть? (Что выдает AT+CMGL="ALL" чтение всех ) UNREAD -статус непрочитанного сообщения и к удалению отношения не имеет. Тут есть варианты параметров команд может пригодится click here При приеме СМС модем как то сообщает об этом (в дебагере видно на from_modem$ или что там у Вас за название RX)?

marty_iron: Вячеслав ну как я заметил тестируя - я вводил команду удаления 28, 29, 11, 8 - после этого я прочитал - они все переместились к конец списка со статусом непрочитанных - потом при следующем опросе AT+CMGL="ALL" они снова прочитанные и не в конце списка и еще странно - но новые смс получают какие-то странные номера, вот сейчас посл смс получило номер 2 - т е +CMGL: 2,"REC READ","778467",,"11/09/03,18:49:40+16" 007700770077002E006D00740073002E00720075 ну и самое печальное - при получении смс с RX не приходит ничего...

Вячеслав: Для удаления точно используете команду AT+CMGD=4 ??? Пробуйте AT+CMGD=4,0 То что после второй операции чтения, сообщение меняет статус с UNREAD на READ вполне логично, ведь вы его только что прочитали командой AT+CMGL="ALL" Есть еще подозрение что формат "AT+CMGD=4" доступен только в режиме PDU ( AT+CMGF=0), а в текстовом режиме доступны лишь варианты для команды AT+CMGDA. Таким образом можете попробовать удалять сообщения в варианте AT+CMGD=4 предварительно переключив в режим PDU: AT+CMGF=0 AT+CMGD=4

marty_iron: Вячеслав похоже вы правы! стал удалять но как вы это поняли? но это поразительный момент! в момент прихода смс - ничего не происходит на Rx. И совершенно непонятно как по этому приходу смс действовать... Ведь на сисмке уже могут быть смс типа Ок - и как он поймет, какая пришла только что? разве что пробовать часто опрашивать и смотреть какое Unread? или каждый раз после прочтения удалять сразу его? а может можно его как-то заставить отправлять текст на рх при получении?

Вячеслав: marty_iron пишет: но как вы это поняли? Если речь про PDU то навела на мысль вот эта фраза: если выбран режим PDU, то параметр «ALL» даст ошибку Что означает в текстовом режиме управляй СЛОВЕСНЫМИ командами типа "ALL", а цифровом ЦИФРОВЫМИ типа "0,1" По поводу СМС пишут однако: По умолчанию все сообщения сохраняются на сим карту. При поступлении сообщения придет сообщение: +CMTI: «SM»,1 где 1 - номер сообщения Если с вашим это не так, либо рыть команды которые отвечают за это уведомление (лучше сразу у сапорте у производителя поинтересоваться), либо полингом придется считывать постоянно.

Вячеслав: Пробуйте AT+CMTI=1 и AT+CNMI=1,1 Еще пишут что кода на SIM нет места сообщение не приходит. Так что удаляйте лишние смс и может станет статус о приеме присылать +CMTI: «SM»,1

marty_iron: Вячеслав спасибо! ну да, вот когда приходит новое - ничего не происходит но если опросить ALL то новое будет в самом конце списка и непрочитанным... не происходит При поступлении сообщения придет сообщение: +CMTI: «SM»,1 1, — номер полученного сообщения.

Вячеслав: 1.Удалять пробовали? При достижение максимального количества смс, новые вытесняют старые, но подтверждение уже не выдается. 2.Команды AT+CMTI=1 AT+CNMI=1,1 пробовали? (это уже во вторую очередь, если удаление не поможет)

marty_iron: Вячеслав пишет: Пробуйте AT+CMTI=1 и AT+CNMI=1,1 Еще пишут что кода на SIM нет места сообщение не приходит. Так что удаляйте лишние смс и может станет статус о приеме присылать +CMTI: «SM»,1 спасибо!!! с AT+CNMI=1,1 сработало, на первую выдал ошибку только у меня вида +CMTI: «МТ»,номер сообщения но где вы нашли эту команду? в том тексте ее нет...



полная версия страницы