снежный человек

rvb_glas

Делай что должно, и будь что будет


Previous Entry Поделиться Next Entry
Запрос баланса на билайновском сотовом модеме под Убунту
за компом
rvb_glas
Возникла на днях такая задача: прикрутить сотовый модем Huawei E160G к нетбуку под Убунтой. Собственно соединение настроилось штатными средствами, но вот посмотреть баланс не под виндой - никак. Личный кабинет на этом тарифе, похоже, не полагается, на штатный запрос USSD - ноль эмоций (как оказалось - из-за того, что с кодировками разработчик модема обошелся весьма вольно, и на вход принимается только 7-битный PDU-encoded, а на выходе - UTD-16 в шестнадцатиричном представлении).

В общем, дальше подробности рассказывать не буду, но после поиска по сети (не очень успешного) пришлось вспоминать, как писать на Питоне. В итоге все написалось :)

Тут берем пакет для работы с PDU-кодированными текстами.

А сам скриптик - ниже.

На входе принимает команды USSD-меню, если ничего не передано - запрашивает баланс (*102#).


#!/usr/bin/env python
#
# This script sends USSD requests to the Beeline 
# via Huawei E160G USB-GPRS/3G modem.
#
# written by rvb, 2009
# feel free to use this code under GPL licence
#
import serial
import string
import os 
import pdu
import sys
#
# Definitions
#
KDIALOG='/usr/bin/kdialog'
USBPORT='/dev/ttyUSB1'
USBSPEED=460800
MAXSTRINGLENGTH=300

n = 0
command = ''

for param in sys.argv:
  n = n+1;
  if n>1:
    if command <> '':
      command = command+' ';
    command=command+param;
  
if n==1:
  print 'No commands specified, requesting balance\n'
  command="*102#"

gsmcommand = pdu.encodeText7Bit(command)

#print "Wait a USSD request ... "

try:

  s=serial.Serial(USBPORT,USBSPEED,timeout=5)
  s.write('ATZ \015')
  s.write('AT+CUSD=1,'+gsmcommand+',15 \015')

  line=''
  while line[0:6] != '+CUSD:':
    line=s.readline(MAXSTRINGLENGTH)
  s.close()

  line2=line.split(',')[1]
  line3=string.replace(line2,'"','')
  result=unicode(line3.decode("hex"),"utf-16-be")

  print result

except:

  print "Error when requesting 3G/GPRS modem"


"Если вы съели мой моск, не надо стучать по черепу ложкой, добавки не будет" © народное.

Чем-то напоминает моё вчерашнее погружение в жабаскрипт с приложением флеша и ручного парсинга верстанной въёбстраницы (девчонке из клуба == вебмастеру соседней конторы пытался разъяснить, как срочно вставить нужный баннер).

?

Log in

No account? Create an account