asm_oren
Oct 16 2011, 13:16
Помогите как проверить баланс перечитал весь форум по данной теме но однозначного ответа не нашёл
прошивка Revision:1137B08SIM900M64_ST_DTMF_JD_MMS
Сеть Белайн Поволжье
отправляю
AT+CUSD=1,"#102#"
в итоге команда не проходит
отправляю
AT+CUSD=1,"#102#","GSM"
ответ
+CUSD: 2
Ни какого тела цикла нет
насколько я понял это сеть не поддерживает USSD-запросы
Попробовал Мегафон Поволжье, та же ситуация
Может кто подскажет в чём может быть причина"?
Если с телефона через ту же симку делать запрос то сообщение о балансе приходит,
у оператора значит всё нормально, с SIM900 уже перепробовал всё что в голову пришло.
Помогите пожалуйста.
butthead2
Oct 16 2011, 14:57
Цитата(asm_oren @ Oct 16 2011, 16:16)

AT+CUSD=1,"#102#"
в итоге команда не проходит
Все верно, если сеть поддерживает запрос #102#, и если в модуле нет глюков в запросах. Ну и надо подождать ответа секунд 5-10.
asm_oren
Oct 16 2011, 15:15
через 2 сек ответ
+CUSD: 2
Вот только хотелось бы узнать у профи, в данной прошивке ни у кого не наблюдались глюки?
И каким же образом сотовый телефон получает ответ на запрос о балансе?
Может какая ещё тонкость существует?
Не может же быть такое что операторы прописывают в своей программе список модулей и сотовых телефонов для отправки состояния баланса?
butthead2
Oct 16 2011, 17:21
Цитата(asm_oren @ Oct 16 2011, 18:15)

Вот только хотелось бы узнать у профи, в данной прошивке ни у кого не наблюдались глюки?
Прошивка насколько я понимаю тестовая, а не релизная. Для оценки указанного функционала. Все остальное не обязано работать! CADiLO об этом преждупреждал. Попробуй перешить на релизную прошивку и проверить с ней.
Цитата(asm_oren @ Oct 16 2011, 19:15)

через 2 сек ответ
+CUSD: 2
Вот только хотелось бы узнать у профи, в данной прошивке ни у кого не наблюдались глюки?
И каким же образом сотовый телефон получает ответ на запрос о балансе?
Может какая ещё тонкость существует?
Не может же быть такое что операторы прописывают в своей программе список модулей и сотовых телефонов для отправки состояния баланса?
Уверен что нужно делать #102#?? попробуй *102#
molecul
Oct 17 2011, 07:02
Цитата(kan35 @ Oct 17 2011, 08:26)

Уверен что нужно делать #102#?? попробуй *102#
Судя по всему, *102# возвращает ответ в кириллице, а #102# - в латинице.
CADiLO
Oct 17 2011, 07:05
1137B08SIM900M64_ST_DTMF_JD_MMS уже давно релизная имеется и поставляется.
CUSD работает нормально - уточните формат запроса у своего оператора.
Мы пока столкнулись только с одни местом где CUSD не работало - в Эмиратах.
Там это связано с работой платежной системы через команды USSD и запрос баланса нужно делать по SMS.
Ну и ознакомьтесь с этим -
http://forum.sgh.ru/topic36665.html
Да пр чем тут формат запроса?
AT+CUSD=1,"#102#" должна возвращать ответ оператора в любом случае. Или то, что хочешь, или "пошел на..." в смысле команда не верна.
Romashki
Oct 17 2011, 07:44
А на каком языке (в смысле латиницей или кирилицей) приходит ответ когда через телефон запрашиваете?
На МТС например работает так:
AT+CSCS="IRA"
AT+CSMP=17,0,2,25
AT+CUSD=1,"*101#",15
asm_oren
Oct 17 2011, 13:56
AT+CSCS="IRA"
AT+CSMP=17,0,2,25
AT+CUSD=1,"*102#",15
ответ ERROR
При наборе на телефоне *102# ответ о балансе приходит в кирилице, #102# ответ в латинице
При наборе в терминалке AT+CUSD=1,"*102#" или AT+CUSD=1,"#102#" тупо висит (терминалка Terminal V1.9b),
вернее при нажатии кнопки Send в окне отправки появляется AT+CUSD=1,"f и команда не проходит.
Если набрать так AT+CUSD=1,"#102#",15 то выдаёт ERROR
Если так AT+CUSD=1,"#102#"," " или в кавычках третьем параметре можно набрать всё что угодно выдаёт +CUSD: 2
а были ли другие прошивки на сайте с подобной ревизией, может не ту записал,
SIMCOM_Ltd
SIMCOM_SIM900
Revision:1137B08SIM900M64_ST_DTMF_JD_MMS
И всё же я не могу понять каким же образом сотовый телефон получает ответ на запрос баланса, а SIM900 нет.
CADiLO
Oct 17 2011, 14:15
Могли с сайта взять и тестовую - имена были одинаковые, только в тестовой в конце имени файла еще дата писалась.
Релизная прошивка без даты в имени файла.
Вот лог, все настройки по умолчанию - наши операторы в приказном порядке выдают сообщения на транслите чтобы читалось везде.
Третий параметр не обязателен
AT+GSV
SIMCOM_Ltd
SIMCOM_SIM900
Revision:1137B08SIM900M64_ST_DTMF_JD_MMS
OK
AT+CUSD=1,"*111#"
OK
+CUSD: 0,"Na rahunku: 33.41 grn. Info pro bonusy na *112# i *119#. Nomer die do 22/09/12.",64
asm_oren
Oct 17 2011, 16:06
Да одна прошивка была 1137B08SIM900M64_ST_DTMF_JD_MMS_110528
но я прошил вот этой от 13июля 2011г 19:33:20 1137B08SIM900M64_ST_DTMF_JD_MMS
SIM-ку пробовал и билайн-поволжье и мегафон-поволжье результат один и тот же
Попробую перепрошить вот этой 1137B09SIM900M64_ST потом отпишусь
Загрузил прошивку
SIMCOM_Ltd
SIMCOM_SIM900
Revision:1137B09SIM900M64_ST
то же самое, и тут меня осенило, послать запрос в другом коде,
вообщем отослал я с телефона SMS #102#
прочитал и вставил в тело USSD запроса
AT+CUSD=1,"00230031003000320023"
вообщем пришла билеберда и как её расшифровать пока не знаю, Если кто знает подскажите?
но главное ответ ведь пришёл!!!
+CUSD: 0,"0056006100730068002000620061006C0061006E0073002000370030002E003600360020007
200750062002E00200042006F006E00750073003A00200030002E003000300020007200750062002
E
00200042006500730070006C00610074006E00790068002000730065006B0075006E0064003A0020
0
030002E0030002E00200044006F0070006F006C006E006900740065006C0027006E0079006500200
0
620061006C0061006E00730079003A002000230031003000360023",64
чуть не забыл стандарт кодировки должен быть только
AT+CSCS="UCS2"
Цитата(asm_oren @ Oct 17 2011, 23:06)

вообщем пришла билеберда и как её расшифровать пока не знаю, Если кто знает подскажите?
но главное ответ ведь пришёл!!!
+CUSD: 0,"0056006100730068002000620061006C0061006E0073002000370030002E003600360020007
200750062002E00200042006F006E00750073003A00200030002E003000300020007200750062002
E
00200042006500730070006C00610074006E00790068002000730065006B0075006E0064003A0020
0
030002E0030002E00200044006F0070006F006C006E006900740065006C0027006E0079006500200
0
620061006C0061006E00730079003A002000230031003000360023",64
чуть не забыл стандарт кодировки должен быть только
AT+CSCS="UCS2"
"Vash balans 70.66 rub. Bonus: 0.00 rub. Besplatnyh sekund: 0.0. Dopolnitel'nye balansy: #106#"
Мною выложен конвертер (мой ник там Sash)
конвертер
asm_oren
Oct 17 2011, 16:52
Спасибо sobr!
Значит всё же общими усилиями разобрались как Операторы поволжья выдают баланс.
Простите за нескромный вопрос:
А исходники конвертирования на СИ где нибудь можно подсмотреть?
P/S А конвертер то работает только в одну сторону Текст-->UCS2
Цитата(asm_oren @ Oct 17 2011, 23:52)

P/S А конвертер то работает только в одну сторону Текст-->UCS2
С чего это вдруг? Скопируйте то, что у вас в CUSD пришло в ковычках и вставте в поле UCS2, только копируйте без ковычек.
Цитата
А исходники конвертирования на СИ где нибудь можно подсмотреть?
Там нет ничего сложного, через недельку напомните мне, выложу функцию.
asm_oren
Oct 18 2011, 12:08
Спасибо, действительно всё работает. Не догадался без кавычек ввести!
Дмитрий2212
Oct 20 2011, 14:52
А как можно переслать ответ о состоянии баланса но другой номер?
Цитата(Дмитрий2212 @ Oct 20 2011, 21:52)

А как можно переслать ответ о состоянии баланса но другой номер?
Отправить на другой номер СМС.
Дмитрий2212
Oct 20 2011, 15:28
Немножко не представляю как это выполнить програмно или спомощью AT команд.
Если это програмно то займет большое количесво регистров.
Интереснее с помощью команд переслать этот ответ на другой номер а как не знаю
Цитата(Дмитрий2212 @ Oct 20 2011, 22:28)

Немножко не представляю как это выполнить програмно или спомощью AT команд.
Если это програмно то займет большое количесво регистров.
Интереснее с помощью команд переслать этот ответ на другой номер а как не знаю
Почитайте что нибудь на ночь... Про GSM, АТ команды, СМС, а потом Маринину.
Дмитрий2212
Oct 20 2011, 16:21
Спасибо за совет.Если бы все так отвечали форумы наверное засохли.
Цитата(Дмитрий2212 @ Oct 20 2011, 23:21)

Спасибо за совет.Если бы все так отвечали форумы наверное засохли.
Пожалуйста!
Если бы все так спрашивали, то результат был бы ем же.
"Помогите придумать колайдер"...
Вы бы азы изучили... Ток течет по поводам!!!
Запрос баланса и отсылка на заданный номер, в общих чертах делал так для внешнего контроллера (повырезал куски, возможно кривовато)
Код
if (strstr(RString, "BAL") != NULL) // Если приняли СМС команду запроса баланса
{ FLBalans = 1;} // Вот мне так надо
................................................................................
StUart(GSM_UART); //Выбрать нужный Уарт
printf("AT+CUSD=1,\"#105#\"\r\n"); //отправить запрос
delay_ms(100); // на всякий. может лишнее движение
Str_Bld();//ф-ция формирования\очистки приемной строки
if (strstr(RString, "ERROR") == NULL) // Если ответ не "ERROR"
{
StUart(DEB_UART); //Выбрать контрольный Уарт
delay_ms(10000); //Ждем выполнения запроса (10сек чтоб наверняка пришел ответ)
Str_Bld(); // ф-ция формирования приемной строки
printf("BALANCE= %s\n\r",RString); // Контролируем что пришло, так для уверенности
Send_Mess (RString);//ф-ция отправки сообщения принятой строки
FLBalans = 0; //Сбрасываем, чтоб вечно не слать сообщения
}
Только предварительно написать ф-ции формир. строки, посылки сообщения, выбора Уарта, Инит портов, ЖПС модуля итд итп Оно может и не надо создавать много функций, но мне тек удобнее.
MKdemiurg
Oct 20 2011, 18:34
В тему спрошу , - а кто как парсит cusdы о балансе? Я вот ищу первый ASCII символ из диапазона 0x30-0x39( начало числовой последовательности). Вроде катит на всех операторах украинских, но может гдето первыми числами идут не значение счёта?
Дмитрий2212
Oct 20 2011, 19:35
По цифрам наверное можно ориентироваться.Но интереснее сохранить эту строку а потом переслать на номер . можно ли так с помощью АТ команд?
butthead2
Oct 20 2011, 20:36
Цитата(Дмитрий2212 @ Oct 20 2011, 22:35)

По цифрам наверное можно ориентироваться.Но интереснее сохранить эту строку а потом переслать на номер . можно ли так с помощью АТ команд?
НЕТ
Цитата(MKdemiurg @ Oct 21 2011, 01:34)

В тему спрошу , - а кто как парсит cusdы о балансе? Я вот ищу первый ASCII символ из диапазона 0x30-0x39( начало числовой последовательности). Вроде катит на всех операторах украинских, но может гдето первыми числами идут не значение счёта?
Я ищу слова "баланс", "balans", "минус", "minus", а потом число.
MKdemiurg
Oct 21 2011, 05:56
Цитата(sobr @ Oct 21 2011, 06:22)

Я ищу слова "баланс", "balans", "минус", "minus", а потом число.
А как же : Na rahunku

, Rahunok, А на лайфе чтоли было Vash schet...
Я пытался определять по ключевым словам - в принципе получается. НО если бы знать ВСЕ эти cusdы и быть уверенным они не сменятся. Может ктото их все собрал?
Оно конечно удобно читать пропарсеный ответ, без рекламы и т.п. А есть ли смысл в такой канители? Что получил, то переслал. Или может кто-то зачем-то ведет в памяти "журнал" баланса. Куча операторов, у каждого свой формат ответа. Неисключено, что назавтра он изменится. Если кому то требуется, давайте соберем форматы ответов по областям и операторам.
MKdemiurg
Oct 21 2011, 08:38
Цитата(V125 @ Oct 21 2011, 11:06)

Оно конечно удобно читать пропарсеный ответ, без рекламы и т.п. А есть ли смысл в такой канители? Что получил, то переслал. Или может кто-то зачем-то ведет в памяти "журнал" баланса. Куча операторов, у каждого свой формат ответа. Неисключено, что назавтра он изменится. Если кому то требуется, давайте соберем форматы ответов по областям и операторам.
Хм, а как мне узнать долбить дальше на подключение или клиенту смс отправить - мол "дурак!!! - пополни, ато выключусь"? Приходится даже из string в int переводить ( перед этим валидацию значения пройдя конечно). Делаю из принципа что первые числа в строке - именно балансовое значение.
Теперь понятно зачем. В Теле2 есть фишка СМСсить клиена, если "Ваш баланс менее 5 рублей" . И в МТС было что то подобное, точно не помню формат. Наверно каждый оператор имеет подобную услугу. Может от этого отталкиваться.
Frolov Kirill
Oct 21 2011, 08:59
Можно делать проверку связи -- отправлять SMS самому себе. Если не отправляется 10 раз подряд в течении суток -- нет связи. При наличии сети -- нет денег или оператор что-то отключил.
MKdemiurg
Oct 21 2011, 10:13
Цитата(Frolov Kirill @ Oct 21 2011, 11:59)

Можно делать проверку связи -- отправлять SMS самому себе. Если не отправляется 10 раз подряд в течении суток -- нет связи. При наличии сети -- нет денег или оператор что-то отключил.
НЕ , коряво както

Лишняя трата денег и заряда. И если таких устройтсв сотня - две - то ловить по 100-200 смсок в день это "жесть"...
А какие у вас строки приходят на запрос баланса?
Цитата
Теперь понятно зачем. В Теле2 есть фишка СМСсить клиена, если "Ваш баланс менее 5 рублей" . И в МТС было что то подобное, точно не помню формат. Наверно каждый оператор имеет подобную услугу. Может от этого отталкиваться.
НЕ слышал даже о такой услуге. Но опять же форматы смсок то будут разные ))) Эххх когда уже будет золотой век полной стандартизации
Мне подобный парсер пришлось еще на СМС добавить. МТС заставаил. Когда начинаешь с какой то периодичностью запрашивать баланс, на CUSD проиходит ответ: "мол инфа о балансе отправлена вам в виде СМС".
Дмитрий2212
Oct 21 2011, 16:56
Не придендую на истину. Но по моему самый верный вариант запрашивать состояние баланса-сохронять это сообщение и пересылать его на номер .Проблемы состоят в том что по моему это не сообщение и его нельзя как-то сохранить.Програмно выполнить это можно (с моей точки зрения),но это занимает огромное количество регистров
(програмирую на Асемблере других языков к сожалению не знаю).Поэтому предпочтительным вариантом считаю операции с АТ командами.
И главная проблема не знаю английский язык.(Особенно технического содержания).Поэтому рекомендации почетать на ночь от особо грамотных не помогают.
Вот в этом и главная проблема.
butthead2
Oct 21 2011, 18:09
Цитата(Дмитрий2212 @ Oct 21 2011, 19:56)

(програмирую на Асемблере других языков к сожалению не знаю).Поэтому предпочтительным вариантом считаю операции с АТ командами.
И главная проблема не знаю английский язык.(Особенно технического содержания).Поэтому рекомендации почетать на ночь от особо грамотных не помогают.
Вот в этом и главная проблема.
Производителям модулей неведомы такие проблемы. Поэтому и команд таких нет. Единственный выход - сохранять в память и отправлять как смс. Нехватает памяти - ставить контроллер жирнее. Если самоцель сделать именно на данном контроллере, то есть бааальшой изврат - можно поставить внешнюю память от ramtron и туда сбрасывать строку. Но все таки дешевле поставить другой контроллер.
Дмитрий2212
Oct 21 2011, 18:15
Совершенно согласен.Но овчинка выделки не стоит.
Цитата(Дмитрий2212 @ Oct 21 2011, 23:56)

Програмно выполнить это можно (с моей точки зрения),но это занимает огромное количество регистров
Это занимает несколько строчек кода.
Цитата
(програмирую на Асемблере других языков к сожалению не знаю)....
И главная проблема не знаю английский язык.(Особенно технического содержания).Поэтому рекомендации почетать на ночь от особо грамотных не помогают.
Вот в этом и главная проблема.
Точнее будет - для особо гамотных.
Harbinger
Oct 22 2011, 04:47
Если это для трекеров и т.п., то баланс куда проще контролировать с другой стороны - через сайт оператора в диспетчерском центре. Если, конечно, такая услуга предоставляется (местные операторы предоставляют все).
(...Ну обнаружит устройство, что на счету ноль - дальнейшие действия? Разве что 112 позвонить.

)
Цитата(Harbinger @ Oct 22 2011, 11:47)

Если это для трекеров и т.п., то баланс куда проще контролировать с другой стороны - через сайт оператора в диспетчерском центре. Если, конечно, такая услуга предоставляется (местные операторы предоставляют все).
(...Ну обнаружит устройство, что на счету ноль - дальнейшие действия? Разве что 112 позвонить.

)
Да не... Автоматическое отслеживания баланса штука удобная, я бы даже сказал поленая.
Мои устройства отслеживают баланс, и если он меньше 50 - 90 рублей, при сеансе связи сообщают об этом.
Таким образом у юзера нет нет необходимости следить за балансом самостоятельно.
Когда в брелке или метке батарея "садится", устройство сообщает об этом, и не надо периодически проверять батарейку мультиметром.
Ни у кого же не возникает ощущения, что эта функция не нужная.
MKdemiurg
Oct 22 2011, 18:09
Цитата(Harbinger @ Oct 22 2011, 07:47)

Если это для трекеров и т.п., то баланс куда проще контролировать с другой стороны - через сайт оператора в диспетчерском центре. Если, конечно, такая услуга предоставляется (местные операторы предоставляют все).
(...Ну обнаружит устройство, что на счету ноль - дальнейшие действия? Разве что 112 позвонить.

)
А если вы контролите симки которые вам не принадлежат. КОгда клиентам ВЛОМ лазить на сайт оператора для провери( оно и понятно елси у вас хотябы пару десятков приборов - меня бы тоже ломало). НУ и привязываться к определённому оператору - как бы "не комильфо".
sobr А вы бы не могли свой парсер выложить или скинуть - не ради копипаста, а ради инженерного интереса. У вас значение баланса как то критически завязано на логику контроллера или все решения клиент принимает? Вот думаю - а не "глючное" ли это решение в будущем - вводить как условие дальнейшей логики работы значение баланса?
Дмитрий2212
Oct 22 2011, 18:47
Наверное повторюсь но самый верняк переводить этот запрос на номер клиента ,а там его дело какие действия принимать.У меня не хватает просто регистров реализовать это програмно.
Извините за за офтоп, но сколько примерно регистров у средней упитанности человека? А сколько озу? Почему количество регистров имеет решающее значение для разбора символьной строки?
asm_oren
Oct 23 2011, 06:34
Я пытаюсь данную проблему решить следующим образом:
1.С телефона клиента осуществляю звонок на устройство
2. После соединения набираю через ДТМФ код запроса
3. Устройсво анализирует код запроса
4. Через AT+CLCC узнаёт с какого номера был звонок, и если в таблице разрешённых номеров такой имеется то его запоминает.
5. Отклоняет звонок ATH
6. Делает запрос о балансе AT+CUSD=1,"002A0031003000320023"
7. Отправляет на запомненный номер СМС с телом запроса о балансе.
Пока процедурка в процессе написания, сейчас экспериментирую с отправкой СМС (п.7)
AT+CMGS="+7xxxxx"
выскакивает приглашение > ввожу тело СМС а как сбросить каким кодом не могу понять
Везде пишут Ctrl^Z , но у меня не сбрасывается, и как это сделать передавая с контроллера???
Может кто подскажет.
Я несовсем понял, что не получается. Я Ctrl^Z заменил на табличный код, во всяком случае работает
Код
#define Ctr_Z 0x1A
printf("%s%c", Mess, Ctr_Z);
Мне кажется забивать разрешенные номера слишком канительно. У меня формат команды "PASS*COMANDA*" тоесть 123*BAL*. Эсемесь с любого номера и если пароль совпал на этот номер отсылается СМС с балансом. Ежели скажем 123*AD* отсылается СМС с напряжением на АКБ.
Цитата(MKdemiurg @ Oct 23 2011, 01:09)

sobr
А вы бы не могли свой парсер выложить или скинуть - не ради копипаста, а ради инженерного интереса.
Да в принципе мог бы...
Выложить схему, печатку, и исходные коды, но правила компаний на которые я работаю это запрещают. Бюрократы, правда же?
asm_oren
Oct 23 2011, 17:11
Разобрался как отправить СМС
AT+CMGS="Номер в кодировке UCS2" //Отправить SMS на N телефона
Ожидаем прихода > код 0x3E
Отправляем тело баланса без кавычек
Вводим код 0x1A //Ctrl^z в терминалке это будет выглядеть $1A
MKdemiurg
Oct 24 2011, 10:05
Цитата(sobr @ Oct 23 2011, 19:38)

Да в принципе мог бы...
Выложить схему, печатку, и исходные коды, но правила компаний на которые я работаю это запрещают. Бюрократы, правда же?
ДА гады вообще

Всю страну сгубили...
Цитата(asm_oren @ Oct 23 2011, 10:34)

Я пытаюсь данную проблему решить следующим образом:
1.С телефона клиента осуществляю звонок на устройство
2. После соединения набираю через ДТМФ код запроса
3. Устройсво анализирует код запроса
4. Через AT+CLCC узнаёт с какого номера был звонок, и если в таблице разрешённых номеров такой имеется то его запоминает.
5. Отклоняет звонок ATH
6. Делает запрос о балансе AT+CUSD=1,"002A0031003000320023"
7. Отправляет на запомненный номер СМС с телом запроса о балансе.
У меня тоже почти так же сделано, только без ДТМФ-кода: смс отправляется, если сделать вх.звонок, отбить и затем сделать второй с того же номера в течение 30 сек.
Что касается автоуведомления о критическом снижении баланса, тоже не вижу особых сложностей:
периодически (скажем, раз в сутки) делаем USSD, далее парсим ответ следующим образом:
ищем первую цифру (по моим наблюдениям значение баланса идет первым, потом уже бонусы и т.п.), и затем atof.
Сравниваем с порогом, если ниже - отправляем смс с уведомлением.
ПС: в УА есть еще бесплатные СМС "Перезвоните мне, пожалуйста", отправляемые и при нулевом балансе. Такой можно отправлять, когда обычное СМС невозможно.
MKdemiurg
Oct 25 2011, 15:37
Народ подскажите за что отвечает первый параметр в ответете на CUSD запрос.
Вот этот ..+CUSD: 0,"Na rahunku: 9.97 grn. Info pro bonusy
А то в даташите не прописано это...
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.