def main(): print('Initializing modem...') #logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.DEBUG) modem = GsmModem(PORT, BAUDRATE) modem.connect(PIN) modem.waitForNetworkCoverage(10) print('Sending USSD string: {0}'.format(USSD_STRING)) response = modem.sendUssd(USSD_STRING) # response type: gsmmodem.modem.Ussd print('USSD reply received: {0}'.format(response.message)) if response.sessionActive: print('Closing USSD session.') # At this point, you could also reply to the USSD message by using response.reply() response.cancel() else: print('USSD session was ended by network.') modem.close()
class phoneConnection: def __init__(self, handleSMSCallBack): self.port = '/dev/ttyUSB2' ports = list(serial.tools.list_ports.comports()) for p in ports: if 'ZTE NMEA Device' in p.description: self.port = p.device self.baudRate = 115200 self.pin = None # SIM card PIN (if any) self.modem = GsmModem(self.port, self.baudRate, smsReceivedCallbackFunc=handleSMSCallBack\ ,incomingCallCallbackFunc=handleCall) self.modem.smsTextMode = False self.modem.connect(self.pin) self.signalStrength = self.modem.waitForNetworkCoverage(10) self.response = None self.modem.ownNumber def sendUSSD(self, ussdString): if (self.response and self.response.sessionActive): self.response.reply(ussdString) else: self.response = self.modem.sendUssd(ussdString) ucs2Message = binascii.unhexlify(self.response.message) utf16Message = ucs2Message.decode('utf-16-be') return utf16Message def sessionActiveClose(self): if self.response.sessionActive: response.cancel() def getIrancellAccountBalance(self): try: message = self.sendUSSD('*141*1#') balance = int(message.split()[1]) self.sessionActiveClose() except: balance = -1 return balance def accountCharging(self): pass #'*780*2*1*0936XXX9014*10000*1*#') def __del__(self): if (self.modem): self.modem.close()