1

Тема: Проверка баланса

Предложение:
добавить возможность проверки баланса(либо отдельной командой, либо при запросе общего статуса, либо по таймауту, как проверка сообщений)
Зачем это нужно:
не всегда есть возможность и желание заключения контракта(мы, например, в модулях используем карточки UTEL(отдельное спасибо, что при крутили и этого оператора), где радует цена 1МБ, а покрытие очень хорошее, благодаря роумингу от Киевстар). А узнавать про нулевой баланс можно только по прекращению передачи данных на сервер(GPRS) и то, вопрос - это баланс на нуле или физический фактор(повреждение антенны или т.п.)?
Как это работает:
На удаленных объектах используются 3G модемы от того же UTEL, воткнутые в раутер. На головном сервере имеется список заранее введенных номеров пополнения счета. При балансе ниже порогового значения, на сервер отправляется запрос текущего баланса и кода пополнения. Дальше данные заносятся в 1С ну и т.д.
Вывод:
Баланс всегда положительный, ручной работы нет, бухгалтерия в курсе: когда, куда, на сколько было пополнена услуга.
Работающий код:

def GetBalance(cusd):
    cusd = cusd.replace('\r','').replace('\n','').replace('+CUSD:','').replace(' ','').replace('OK','').replace('\'','')
    ind1 = cusd.find('zagalnyi')
    ind2 = cusd.find(';')
    if(ind1 != -1 and ind2 != -1):
        return cusd[ind1+8:ind2]
    return -1

но тут не получилось, пока не могу понять почему. Выдает -1, хотя если делать запрос через терминал - возвращает результат

+CUSD: 2,"Vash balans:zagal'nyi 47,50; bonusnyi 0,00; dodatkovyi 0,00 hrn.Nomer diysnyi do 2011-03-13 23:59:59. Perevirka dodatkovykh poslug *121# ",15

вот собственно ситуация. прошу или добавить функционал, или хотя бы помочь разобраться, что делается не так.. smile

Заранее спасибо! smile
и с Рождеством Христовым!

--
upd: совсем забыл про строку запроса:

MDM2.send('AT+CUSD=1,"*100#"\r\n', 1)

Отредактировано alexdob (07-01-2011 20:47:24)

Все, что нельзя написать на ассемблере, можно доделать паяльником (ц)

2

Re: Проверка баланса

кажется удалось решить вопрос с запросом баланса. Выглядит так(не претендую на красоту, Python только начал изучать, весьма специфично в отличии от Delphi\C++\C#):

def GetBalance():
    MDM2.send(('AT+CUSD=1,*100#\r\n'), 1)
    res = ''
    timeout = MOD.secCounter() + 50
    res = MDM2.read()
    while((len(res) < 10) and (MOD.secCounter() < timeout)):
        res = res + MDM2.read()
    res = res.replace('\r','').replace('\n','').replace('+CUSD: ','').replace(' ','').replace('\'','').replace('OK','')
    ind1 = res.find('zagalnyi')
    ind2 = res.find(';')
    if(ind1 != -1 and ind2 != -1):
        return res[ind1+8:ind2]
    return -1

таймаут и длина взяты чисто экспериментально, 5 секунд при достаточно хорошей связи хватает на USSD запрос, а по символам - nOKn+CUSD, где n-перевод строки

кстати, хочу заметить, что при отправке текстовых сообщений, при достаточно высоком таймауте проверки SMS, когда успевает прийти 2+ SMS, обрабатывается первая в очереди, остальные - удаляются, оставшись без внимания sad есть подозрение на такую команду в вашем коде

AT+CMGD=х,4

может стоит заменить 4 на 3, тогда будут удаляться только прочитанные+отправленные?
спасибо за внимание.

Все, что нельзя написать на ассемблере, можно доделать паяльником (ц)

3

Re: Проверка баланса

У Вас есть наши устройства?

4

Re: Проверка баланса

конечно = )
сейчас вот тестирую проверку баланса на одном из модулей. ближе к вечеру отпишусь о результатах

Все, что нельзя написать на ассемблере, можно доделать паяльником (ц)

5

Re: Проверка баланса

Вечером не получилось. Вот так обстоят дела с балансом:

  • 11:00    3,89

  • 12:00    3,87

  • 13:00    3,86

  • 14:00    3,85

  • 15:00    3,85

  • 16:00    3,85

  • 17:00    3,83

  • 18:00    3,83

  • 19:00    3,82

  • 20:00    3,81

  • 21:00    3,81

  • 22:00    3,80

  • 23:00    3,80

  • 00:00    3,79

  • 01:00    3,79

  • 02:00    3,78

  • 03:00    3,78

  • 04:00    3,78

  • 05:00    3,77

  • 06:00    3,76

это конечно не за сутки, но общая картина ясна.
код простой до безобразия, для ваших прошивок конечно не совсем просто внедрить, точнее много править(в первую очередь APNSet.py привести к многомерному массиву, а дальше по наклонной). Для себя - эффект, вроде бы, достигнут wink
пока код тестируется в отладочном режиме через порт + отправка СМС при достижении минимального заданного баланса в settings.py Если все получится - готов поделиться с Вами доработками в этом направлении(хотя СМС это не то, надо бы в протокол передачи на сервер включать и уже там визуально отображать).

#----------Balance Settings----------
BALANCE_CHECK=1
BALANCE_CHECK_INTERVAL=3600
BALANCE_MIN_VALUE=400
BALANCE_ALERT_NUM="0951234567"
BALANCE_ALERT_RETR=3

P.S. скажите пожалуйста, где можно почитать про подключение цифровых датчиков?.. какие уровни напряжений там (стандартный TTL?), ну и вообще побольше про эту тему?
Спасибо!

Все, что нельзя написать на ассемблере, можно доделать паяльником (ц)

6

Re: Проверка баланса

Осталось стандартизировать для остальных операторов.

7

Re: Проверка баланса

к сожалению у меня нет возможности протестировать со всеми операторами ввиду моей территориальной расположенности, потому дополнять недостающее придется самим. Ну и конечно качество кода - кто третий день видит GSM-Python, да и Python вообще smile
сообщите куда отправить код, буду рад дополнениям, комментариям, исправлениям.
в частности APNSet.py

APNS = {
 '38001': {'ap':'www.umc.ua',            'bal':'*101#',    'fr':'schetu',    'to':'grn'},
 '38002': {'ap':'internet.beeline.ua',    'bal':'*102#',    'fr':'Balans',    'to':'grn'},
 '38003': {'ap':'www.kyivstar.net',        'bal':'*111#',    'fr':'rahunku:',    'to':'grn'},
 '38007': {'ap':'3g.utel.ua',            'bal':'*100#',    'fr':'zagalnyi',    'to':';'},
 '38006': {'ap':'internet',                'bal':'',        'fr':'',        'to':''},
 '99650': {'ap':'internet.beeline.kg',    'bal':'',        'fr':'',        'to':''},
 '99301': {'ap':'net.mts.tm',            'bal':'',        'fr':'',        'to':''},
 '37302': {'ap':'internet',                'bal':'',        'fr':'',        'to':''},
 '70199': {'ap':'internet.beeline.ru',        'bal':'',        'fr':'',        'to':''},
 '99702': {'ap':'internet',                'bal':'',        'fr':'',        'to':''},
 '70101': {'ap':'internet.mts.ru',        'bal':'',        'fr':'',        'to':''},
 '37501': {'ap':'vmi.velcom.by',        'bal':'',        'fr':'',        'to':''}
}

остальных операторов я либо не знаю, либо нет возможности проверить. Если поделитесь информацией - буду благодарен.(Чисто из общего интереса, ибо мы используем только UTEL)
для более быстрого контакта Skype: im_djbdb
Спасибо за внимание wink

Отредактировано alexdob (10-01-2011 14:46:57)

Все, что нельзя написать на ассемблере, можно доделать паяльником (ц)

8

Re: Проверка баланса

код на support<a>gps-tracker.com.ua, вот к чему сегодня пришли, у КС за последние два месяца ussd запрос менялся несколько раз (бонусные минуты, смс-ки и т.п.) в виду этого менялся формат этой строки.
Решение проще - посылать команду которая будет проверять это и форвардить на номер с которого та команда была послана.
PS. скайп добавил.

9

Re: Проверка баланса

Киевстар вообще интересные товарищи smile у коллег был опыт работы с ними и не только в плане мобильных технологий. Код отправил, в скайп добавил.
Насчет операторов: когда есть зависимость от чего-то внешнего нельзя запрограммировать со 100% уверенностью. Стоит оператору изменить формат\номер\кодировку и система начинает работать не правильно. Но от этого не уйдешь: либо не добавлять эту функцию совсем, либо следить за возвращаемыми результатами с повышенным приоритетом. Лично я выбирал второй вариант. В дальнейшем это все будет автоматизированно(надеюсь как и у Вас), а пока работает в тестовом варианте smile
Для меня Python пока выглядит диковато и многие моменты на нем не очевидны, но главное стараться и все обязательно получится.
О результатах периодически буду сообщать тут.
Спасибо Вам за внимание и за замечательное устройство.

Все, что нельзя написать на ассемблере, можно доделать паяльником (ц)

10

Re: Проверка баланса

Все обалансе билайна можно посмотреть здесь начиная от денег на счету заканчивая трафиком на билайне. как проверить баланс билайн https://mytariffs.ru/finansy/kak-prover … ilajn.html