Уведомления

Группа в Telegram: @pythonsu

#1 Июль 11, 2010 19:58:07

ypeskov
От:
Зарегистрирован: 2009-07-25
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Модуль для работы с усб модемом

Люди, помогите сделать доброе дело.

есть модем беспроводный для Utel(украинский оператор, он же Укртелеком).

в данный момент под линуксом для опрделения баланса и других USSD операций приходится запускать minicom -o console


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

Собственно вопрос: подскажите название модуля, могущего работать с модемом и отсылать ему команды, получая ответ?



Офлайн

#2 Июль 11, 2010 22:12:07

UsCr
От:
Зарегистрирован: 2009-11-04
Сообщения: 216
Репутация: +  0  -
Профиль   Отправить e-mail  

Модуль для работы с усб модемом

А может на баше реализовать?



Офлайн

#3 Июль 12, 2010 08:39:37

.Serj.
От:
Зарегистрирован: 2008-09-27
Сообщения: 181
Репутация: +  0  -
Профиль   Отправить e-mail  

Модуль для работы с усб модемом

man chat.
Пример использования (строка подключения в /etc/ppp/peers/mts):

connect '/usr/sbin/chat -v "" ATZ OK AT+CGDCONT=1,\\"IP\\",\\"internet.mts.ru\\" OK ATDT*99# CONNECT'



Офлайн

#4 Июль 12, 2010 18:05:16

ypeskov
От:
Зарегистрирован: 2009-07-25
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Модуль для работы с усб модемом

UsCr
А может на баше реализовать?
оно может и можно, но возмжно меня хватит потом графический интерфейс доделать.

Пока что получилось такое:
#!/usr/bin/env python

import serial
import sys

def makeRequest(device='/dev/ttyUSB1', ussd='*100#', timeout=5):
m = serial.Serial(device)
m.timeout = timeout

query = 'at+cusd=1,' + ussd + ',15\r\n'
m.write(query)

answer = ''
while answer[:5] != '+CUSD':
answer = m.readline()

print answer[10:-6]

return 0

def main():
if len(sys.argv) > 1:
if sys.argv[1] == 'balance':
makeRequest(ussd='*100#', timeout=5)
elif sys.argv[1] == 'traffic':
makeRequest(ussd='*121#', timeout=5)
else:
print 'Usage:\nbalans.py balance | traffic'

return 0

if __name__ == '__main__':
main()
это для оператора Utel(Укртелеком)
можно конечно и напрямую в файл /dev/ttyUSB0 писать, но это было бы не кросплатфомренно. а так модуль serial насколько я понял самзнает как работать с устройствами



Отредактировано (Июль 12, 2010 18:08:46)

Офлайн

#5 Июль 12, 2010 18:37:40

Viper
От:
Зарегистрирован: 2006-11-08
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

Модуль для работы с усб модемом

Офлайн

#6 Июль 12, 2010 22:28:33

ypeskov
От:
Зарегистрирован: 2009-07-25
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Модуль для работы с усб модемом

Viper
Посмотрите Выполнение USSD запросов под Linux
спасибо, поглядел.
практически тоже самое :)

я тут прикрутил пстенькй граф дизайн с двумя кнопками :)
файл утянуть можно тут http://forum.remember-calories.com/misc.php?item=1&download=1
#!/usr/bin/env python

import serial
import sys
from Tkinter import *

class App:
device = '/dev/ttyUSB0'

def __init__(self, master):
frame = Frame(master)
frame.pack()

self.button = Button(frame, text="Get balance", fg="red", command=self.getBalance)
self.button.pack(side=LEFT)

self.traffic = Button(frame, text="Get traffic", fg='red', command=self.getTraffic)
self.traffic.pack(side=LEFT)

def getTraffic(self):
modem = Modem()
msg = modem.makeRequest(device=self.device, ussd='*121#', timeout=5)
self.showResult(msg)

def getBalance(self):
modem = Modem()
msg = modem.makeRequest(device=self.device, ussd='*100#', timeout=5)
self.showResult(msg)

def showResult(self, msg):
win = Toplevel()

w = Message(win, text=msg)
w.pack()




class Modem:
def __init__(self):
pass

def makeRequest(self, device='/dev/ttyUSB0', ussd='*100#', timeout=5):
m = serial.Serial(device)
m.timeout = timeout

query = 'at+cusd=1,' + ussd + ',15\r\n'
#print query
m.write(query)

answer = ''
while answer[:5] != '+CUSD':
answer = m.readline()
#print answer

msg = answer[10:-6]

return msg

def main():
root = Tk()

app = App(root)
root.mainloop()

return 0

if __name__ == '__main__':
main()



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version