2009-11-06 6 views
0

J'écris un script Python pour lire un SMS depuis la mémoire SIM, le mettre en mémoire tampon et envoyer le même SMS à un autre numéro. J'exécute ce script sur Telit GM862-GPS. Le script que je l'ai écrit est:Envoyer un SMS récupéré en utilisant Python

import MDM 
MDM.send('AT+CMGF=1\r', 10)      # Changing to Text mode 
MDM.send('AT+CMGR=1\r',0)      # Reading SMS at index 1 
a = MDM.receive(10)        # Receiving as string 

MDM.send('AT+CMGS="Phone no.", 129', 0)   #selecting a particular no. 
MDM.send(a, 0)         # sending retrieved SMS 
MDM.sendbyte(0x1A, 0)       # sending Ctrl Z 

Mais je fais face à ce problème: Après l'exécution de "AT + CMGR = 1 \ r" commande, le script n'exécute pas les commandes après. J'ai vérifié ceci en mettant une commande simple AT pour changer une certaine valeur après la commande "Read SMS" & que la valeur ne soit pas changée. Je ne sais pas pour quelle raison étrange il fait cela.

Ce serait vraiment utile si quelqu'un peut m'aider avec cela.

Cordialement

Mise à jour

@ intello payé: Yes..thats une valeur de délai d'attente @ Jaime: Un SMS existe dans la mémoire SIM et il montre le SMS à l'index 1. Le seul problème J'obtiens, c'est qu'il n'exécute pas les commandes qui viennent après la commande "AT + CMGR" ou "AT + CMGL". @ Foresto: J'ai essayé d'ajouter "\ n" à la fin mais il n'exécute pas les instructions python après l'instruction Read SMS.

+0

Quel est le deuxième paramètre, '0'? Est-ce un délai d'attente? –

+0

Etes-vous sûr qu'un SMS avec index 1 existe dans la mémoire SIM? Vous pouvez lister les messages avec AT + CMGL. Que fait MDM si une commande renvoie une erreur CME? Avez-vous essayé d'envoyer ces commandes en utilisant minicom/HyperTerminal? –

+0

S'agit-il des bibliothèques que vous utilisez? http://www.telit.com/fr/products/python/python-for-m2m-applications.php – badp

Répondre

1

Il semble que votre programme attend une réponse qui n'arrive jamais. Ce genre de chose est typique quand un appareil ne pense pas avoir encore envoyé une commande complète.

Je ne connais pas le protocole que vous utilisez pour communiquer avec ce périphérique, mais il ressemble à un ensemble de commandes Hayes AT. Est-il possible que l'appareil attende un caractère de nouvelle ligne à la place ou en plus des retours de chariot que vous envoyez? Par exemple:

« AT + CMGF = 1 \ r \ n »

En outre, je ne sais pas ce que votre objet MDM est, mais pourrait-il être mise en mémoire tampon vos commandes (ne pas les envoyer réellement) jusqu'à ce que vous appeler une méthode flush() ou quelque chose de similaire?