2015-10-26 2 views
-1

J'utilise le paquetage gsmmodem, et j'essaie d'obtenir une réponse du code USSD que j'envoie. L'exécution de code USSD fonctionne bien, mais la réponse n'est pas dans le bon format (non lisible par l'homme) je veux l'obtenir dans un format lisible.Python lire la réponse ussd avec GsmModem dans une chaîne lisible par l'homme (fr)

S'il vous plaît vérifier le code ici

from __future__ import print_function 
import logging 
PORT = 'COM11' 
BAUDRATE = 921600 
USSD_STRING = '*111#' 
PIN = None # SIM card PIN (if any) 

from gsmmodem.modem import GsmModem 

def main(): 
    print('Initializing modem...') 
    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() 

if __name__ == '__main__': 
    main() 

Lien pour le code http://pastebin.com/SvYptykS

+0

Personne ne connaît cette réponse sur pile débordement? wow –

+0

La mine ne me donne même pas une réponse, avez-vous une solution maintenant? – saviour123

Répondre

-1

Vous obtenez la réponse dans un type gsm hexadecimal. Donc, vous devez décoder la chaîne response.message dans un format approprié et encode après dans un format lisible par l'homme comme utf-8.

Ainsi, après

response = modem.sendUssd(USSD_STRING) 

Ecrire:

ussd_message = unicode(response.message.decode('hex'), 'utf-16-be').encode('utf8') 
print('USSD reply received: {0}'.format(ussd_message))