Как стать автором
Обновить

Проверка баланса счета на примере МТС в Mac OS X

Время на прочтение3 мин
Количество просмотров2.2K
Вы уже сталкивались с проверкой баланса в Linux (1 и 2). Чтобы не оставаться в стороне и соответствовать моде сделаем проверку баланса 3G модема и под Mac OS.
image

В Mac OS X 10.6.4 по умолчанию установлен Python версии 2.6, однако модуль COM интерфейса serial в нем отсутствует. Поэтому скачиваем Python Serial Port Extension, распаковываем (двойной щелчок в Finder по архиву), устанавливаем:
bash-3.2# cd /Users/memtew/Downloads/pyserial-2.5-rc2
bash-3.2# python setup.py install

Сам скрипт для проверки баланса и оставшегося трафика на примере МТС (за основу взял скрипт, найденный в этой теме, немного модифицирован мной для проверки остатка трафика):
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
import serial
import string
import os
 
USBPORT='/dev/tty.sierra05'
USBSPEED=9600
MAXSTRINGLENGTH=300
#USSD номер проверки баланса
balcode='*100#'
#USSD номер проверки остатка МБ
mbcode='*100*1#'
 
print "Выполняется USSD запрос ... "
s=serial.Serial(USBPORT,USBSPEED,timeout=5)
 
s.write('ATZ \015')
s.write('AT+CUSD=1,'+balcode+',15 \015')
balans=''
while balans[0:6] !'+CUSD:':            
    balans=s.readline(MAXSTRINGLENGTH)
 
s.write('AT+CUSD=1,'+ mbcode+',15 \015')
mb=''
while mb[0:6] !'+CUSD:':            
    mb=s.readline(MAXSTRINGLENGTH)

s.close()
 
#Выделяем из строки ответа +CUSD: 0,"Balans:134,77r ",15 сумму 134,77
balans=balans[17:-8]
#Выделяем из строки ответа +CUSD: 0, "Ostatok: 2070Mb.",15 количество мб - 2070
mb=mb[19:-9]
 
result='Баланс счета: '+balans+'р, Остаток трафика: '+mb+'мб'
 
print result

Сохраним данный код в файле balance.py (кодировка UTF-8). Код не отличается особой красотой и лаконичностью, но свою работу выполняет. Для других операторов изменятся значения переменных balcode и mbcode (номера USSD-запросов) и строчки, в которых мы выделяем цифры из USSD-ответа:
#Выделяем из строки ответа +CUSD: 0,"Balans:134,77r ",15 сумму 134,77
balans=balans[17:-8]
#Выделяем из строки ответа +CUSD: 0, "Ostatok: 2070Mb.",15 количество мб - 2070
mb=mb[19:-9]

Как пользоваться «срезами» очень просто объяснено здесь. Результат работы скрипта виден на первом скриншоте. Мой модем не понимает USSD запросы на русском языке, поэтому приходится переводить транслит в русский самостоятельно.

Модем для тестирования использовался производства Sierra Wireless, модель MC8780. С драйверами модема было установлено 6 COM портов:
/dev/cu.sierra02
/dev/cu.sierra04
/dev/cu.sierra05
/dev/tty.sierra02
/dev/tty.sierra04
/dev/tty.sierra05

Нам необходим порт AT команд — cu.sierra05/tty.sierra05 (любой из них). Определить нужный из шести можно подключившись к порту при помощи команды screen /dev/tty.sierra05 115200, далее ввести ATI5 — в результате мы должны увидеть информацию о нашем модеме.
Теги:
Хабы:
Всего голосов 18: ↑14 и ↓4+10
Комментарии1

Публикации

Истории

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
14 сентября
Конференция Practical ML Conf
МоскваОнлайн
19 сентября
CDI Conf 2024
Москва
20 – 22 сентября
BCI Hack Moscow
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
25 сентября
Конференция Yandex Scale 2024
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн