Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SIM900 баланс
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Сотовая связь и ее приложения
Страницы: 1, 2
asm_oren
Помогите как проверить баланс перечитал весь форум по данной теме но однозначного ответа не нашёл
прошивка Revision:1137B08SIM900M64_ST_DTMF_JD_MMS
Сеть Белайн Поволжье
отправляю
AT+CUSD=1,"#102#"
в итоге команда не проходит
отправляю
AT+CUSD=1,"#102#","GSM"
ответ
+CUSD: 2
Ни какого тела цикла нет
насколько я понял это сеть не поддерживает USSD-запросы
Попробовал Мегафон Поволжье, та же ситуация

Может кто подскажет в чём может быть причина"?
Если с телефона через ту же симку делать запрос то сообщение о балансе приходит,
у оператора значит всё нормально, с SIM900 уже перепробовал всё что в голову пришло.
Помогите пожалуйста.
butthead2
Цитата(asm_oren @ Oct 16 2011, 16:16) *
AT+CUSD=1,"#102#"
в итоге команда не проходит

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

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

Уверен что нужно делать #102#?? попробуй *102#
molecul
Цитата(kan35 @ Oct 17 2011, 08:26) *
Уверен что нужно делать #102#?? попробуй *102#

Судя по всему, *102# возвращает ответ в кириллице, а #102# - в латинице.
CADiLO
1137B08SIM900M64_ST_DTMF_JD_MMS уже давно релизная имеется и поставляется.
CUSD работает нормально - уточните формат запроса у своего оператора.
Мы пока столкнулись только с одни местом где CUSD не работало - в Эмиратах.
Там это связано с работой платежной системы через команды USSD и запрос баланса нужно делать по SMS.

Ну и ознакомьтесь с этим - http://forum.sgh.ru/topic36665.html
sobr
Да пр чем тут формат запроса?
AT+CUSD=1,"#102#" должна возвращать ответ оператора в любом случае. Или то, что хочешь, или "пошел на..." в смысле команда не верна.
Romashki
А на каком языке (в смысле латиницей или кирилицей) приходит ответ когда через телефон запрашиваете?

На МТС например работает так:
AT+CSCS="IRA"
AT+CSMP=17,0,2,25

AT+CUSD=1,"*101#",15
asm_oren
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
Могли с сайта взять и тестовую - имена были одинаковые, только в тестовой в конце имени файла еще дата писалась.
Релизная прошивка без даты в имени файла.

Вот лог, все настройки по умолчанию - наши операторы в приказном порядке выдают сообщения на транслите чтобы читалось везде.
Третий параметр не обязателен

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
Да одна прошивка была 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"
sobr
Цитата(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
Спасибо sobr!
Значит всё же общими усилиями разобрались как Операторы поволжья выдают баланс.
Простите за нескромный вопрос:
А исходники конвертирования на СИ где нибудь можно подсмотреть?
P/S А конвертер то работает только в одну сторону Текст-->UCS2
sobr
Цитата(asm_oren @ Oct 17 2011, 23:52) *
P/S А конвертер то работает только в одну сторону Текст-->UCS2
С чего это вдруг? Скопируйте то, что у вас в CUSD пришло в ковычках и вставте в поле UCS2, только копируйте без ковычек.
Цитата
А исходники конвертирования на СИ где нибудь можно подсмотреть?
Там нет ничего сложного, через недельку напомните мне, выложу функцию.
asm_oren
Спасибо, действительно всё работает. Не догадался без кавычек ввести!
Дмитрий2212
А как можно переслать ответ о состоянии баланса но другой номер?
sobr
Цитата(Дмитрий2212 @ Oct 20 2011, 21:52) *
А как можно переслать ответ о состоянии баланса но другой номер?
Отправить на другой номер СМС.
Дмитрий2212
Немножко не представляю как это выполнить програмно или спомощью AT команд.
Если это програмно то займет большое количесво регистров.
Интереснее с помощью команд переслать этот ответ на другой номер а как не знаю
sobr
Цитата(Дмитрий2212 @ Oct 20 2011, 22:28) *
Немножко не представляю как это выполнить програмно или спомощью AT команд.
Если это програмно то займет большое количесво регистров.
Интереснее с помощью команд переслать этот ответ на другой номер а как не знаю
Почитайте что нибудь на ночь... Про GSM, АТ команды, СМС, а потом Маринину.
Дмитрий2212
Спасибо за совет.Если бы все так отвечали форумы наверное засохли.
sobr
Цитата(Дмитрий2212 @ Oct 20 2011, 23:21) *
Спасибо за совет.Если бы все так отвечали форумы наверное засохли.
Пожалуйста!
Если бы все так спрашивали, то результат был бы ем же.

"Помогите придумать колайдер"...

Вы бы азы изучили... Ток течет по поводам!!!
V125
Запрос баланса и отсылка на заданный номер, в общих чертах делал так для внешнего контроллера (повырезал куски, возможно кривовато)
Код
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
В тему спрошу , - а кто как парсит cusdы о балансе? Я вот ищу первый ASCII символ из диапазона 0x30-0x39( начало числовой последовательности). Вроде катит на всех операторах украинских, но может гдето первыми числами идут не значение счёта?
Дмитрий2212
По цифрам наверное можно ориентироваться.Но интереснее сохранить эту строку а потом переслать на номер . можно ли так с помощью АТ команд?
butthead2
Цитата(Дмитрий2212 @ Oct 20 2011, 22:35) *
По цифрам наверное можно ориентироваться.Но интереснее сохранить эту строку а потом переслать на номер . можно ли так с помощью АТ команд?

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


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

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

НЕ , коряво както sm.gif Лишняя трата денег и заряда. И если таких устройтсв сотня - две - то ловить по 100-200 смсок в день это "жесть"...
А какие у вас строки приходят на запрос баланса?

Цитата
Теперь понятно зачем. В Теле2 есть фишка СМСсить клиена, если "Ваш баланс менее 5 рублей" . И в МТС было что то подобное, точно не помню формат. Наверно каждый оператор имеет подобную услугу. Может от этого отталкиваться.


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

Производителям модулей неведомы такие проблемы. Поэтому и команд таких нет. Единственный выход - сохранять в память и отправлять как смс. Нехватает памяти - ставить контроллер жирнее. Если самоцель сделать именно на данном контроллере, то есть бааальшой изврат - можно поставить внешнюю память от ramtron и туда сбрасывать строку. Но все таки дешевле поставить другой контроллер.
Дмитрий2212
Совершенно согласен.Но овчинка выделки не стоит.
sobr
Цитата(Дмитрий2212 @ Oct 21 2011, 23:56) *
Програмно выполнить это можно (с моей точки зрения),но это занимает огромное количество регистров
Это занимает несколько строчек кода.
Цитата
(програмирую на Асемблере других языков к сожалению не знаю)....
И главная проблема не знаю английский язык.(Особенно технического содержания).Поэтому рекомендации почетать на ночь от особо грамотных не помогают.
Вот в этом и главная проблема.
Точнее будет - для особо гамотных.
Harbinger
Если это для трекеров и т.п., то баланс куда проще контролировать с другой стороны - через сайт оператора в диспетчерском центре. Если, конечно, такая услуга предоставляется (местные операторы предоставляют все).
(...Ну обнаружит устройство, что на счету ноль - дальнейшие действия? Разве что 112 позвонить. sm.gif )
sobr
Цитата(Harbinger @ Oct 22 2011, 11:47) *
Если это для трекеров и т.п., то баланс куда проще контролировать с другой стороны - через сайт оператора в диспетчерском центре. Если, конечно, такая услуга предоставляется (местные операторы предоставляют все).
(...Ну обнаружит устройство, что на счету ноль - дальнейшие действия? Разве что 112 позвонить. sm.gif )
Да не... Автоматическое отслеживания баланса штука удобная, я бы даже сказал поленая.
Мои устройства отслеживают баланс, и если он меньше 50 - 90 рублей, при сеансе связи сообщают об этом.
Таким образом у юзера нет нет необходимости следить за балансом самостоятельно.
Когда в брелке или метке батарея "садится", устройство сообщает об этом, и не надо периодически проверять батарейку мультиметром.
Ни у кого же не возникает ощущения, что эта функция не нужная.
MKdemiurg
Цитата(Harbinger @ Oct 22 2011, 07:47) *
Если это для трекеров и т.п., то баланс куда проще контролировать с другой стороны - через сайт оператора в диспетчерском центре. Если, конечно, такая услуга предоставляется (местные операторы предоставляют все).
(...Ну обнаружит устройство, что на счету ноль - дальнейшие действия? Разве что 112 позвонить. sm.gif )

А если вы контролите симки которые вам не принадлежат. КОгда клиентам ВЛОМ лазить на сайт оператора для провери( оно и понятно елси у вас хотябы пару десятков приборов - меня бы тоже ломало). НУ и привязываться к определённому оператору - как бы "не комильфо".


sobr

А вы бы не могли свой парсер выложить или скинуть - не ради копипаста, а ради инженерного интереса. У вас значение баланса как то критически завязано на логику контроллера или все решения клиент принимает? Вот думаю - а не "глючное" ли это решение в будущем - вводить как условие дальнейшей логики работы значение баланса?
Дмитрий2212
Наверное повторюсь но самый верняк переводить этот запрос на номер клиента ,а там его дело какие действия принимать.У меня не хватает просто регистров реализовать это програмно.
pau62
Извините за за офтоп, но сколько примерно регистров у средней упитанности человека? А сколько озу? Почему количество регистров имеет решающее значение для разбора символьной строки?
asm_oren
Я пытаюсь данную проблему решить следующим образом:
1.С телефона клиента осуществляю звонок на устройство
2. После соединения набираю через ДТМФ код запроса
3. Устройсво анализирует код запроса
4. Через AT+CLCC узнаёт с какого номера был звонок, и если в таблице разрешённых номеров такой имеется то его запоминает.
5. Отклоняет звонок ATH
6. Делает запрос о балансе AT+CUSD=1,"002A0031003000320023"
7. Отправляет на запомненный номер СМС с телом запроса о балансе.

Пока процедурка в процессе написания, сейчас экспериментирую с отправкой СМС (п.7)
AT+CMGS="+7xxxxx"
выскакивает приглашение > ввожу тело СМС а как сбросить каким кодом не могу понять
Везде пишут Ctrl^Z , но у меня не сбрасывается, и как это сделать передавая с контроллера???
Может кто подскажет.
V125
Я несовсем понял, что не получается. Я Ctrl^Z заменил на табличный код, во всяком случае работает
Код
#define Ctr_Z        0x1A    
printf("%s%c", Mess, Ctr_Z);

Мне кажется забивать разрешенные номера слишком канительно. У меня формат команды "PASS*COMANDA*" тоесть 123*BAL*. Эсемесь с любого номера и если пароль совпал на этот номер отсылается СМС с балансом. Ежели скажем 123*AD* отсылается СМС с напряжением на АКБ.
sobr
Цитата(MKdemiurg @ Oct 23 2011, 01:09) *

sobr

А вы бы не могли свой парсер выложить или скинуть - не ради копипаста, а ради инженерного интереса.
Да в принципе мог бы...
Выложить схему, печатку, и исходные коды, но правила компаний на которые я работаю это запрещают. Бюрократы, правда же?
asm_oren
Разобрался как отправить СМС
AT+CMGS="Номер в кодировке UCS2" //Отправить SMS на N телефона
Ожидаем прихода > код 0x3E
Отправляем тело баланса без кавычек
Вводим код 0x1A //Ctrl^z в терминалке это будет выглядеть $1A

MKdemiurg
Цитата(sobr @ Oct 23 2011, 19:38) *
Да в принципе мог бы...
Выложить схему, печатку, и исходные коды, но правила компаний на которые я работаю это запрещают. Бюрократы, правда же?


ДА гады вообще sm.gif Всю страну сгубили...
GeGeL
Цитата(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
Народ подскажите за что отвечает первый параметр в ответете на CUSD запрос.

Вот этот ..+CUSD: 0,"Na rahunku: 9.97 grn. Info pro bonusy
А то в даташите не прописано это...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.