Вы уже сталкивались с проверкой баланса в Linux (1 и 2). Чтобы не оставаться в стороне и соответствовать моде сделаем проверку баланса 3G модема и под Mac OS.
В Mac OS X 10.6.4 по умолчанию установлен Python версии 2.6, однако модуль COM интерфейса serial в нем отсутствует. Поэтому скачиваем Python Serial Port Extension, распаковываем (двойной щелчок в Finder по архиву), устанавливаем:
Сам скрипт для проверки баланса и оставшегося трафика на примере МТС (за основу взял скрипт, найденный в этой теме, немного модифицирован мной для проверки остатка трафика):
Сохраним данный код в файле balance.py (кодировка UTF-8). Код не отличается особой красотой и лаконичностью, но свою работу выполняет. Для других операторов изменятся значения переменных balcode и mbcode (номера USSD-запросов) и строчки, в которых мы выделяем цифры из USSD-ответа:
Как пользоваться «срезами» очень просто объяснено здесь. Результат работы скрипта виден на первом скриншоте. Мой модем не понимает USSD запросы на русском языке, поэтому приходится переводить транслит в русский самостоятельно.
Модем для тестирования использовался производства Sierra Wireless, модель MC8780. С драйверами модема было установлено 6 COM портов:
Нам необходим порт AT команд — cu.sierra05/tty.sierra05 (любой из них). Определить нужный из шести можно подключившись к порту при помощи команды screen /dev/tty.sierra05 115200, далее ввести ATI5 — в результате мы должны увидеть информацию о нашем модеме.
В 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 — в результате мы должны увидеть информацию о нашем модеме.