I have a GSM modem connected to my computer, i want to receive text messages sent to it using a python program i have written, am just wondering what is the best technique to po
I find I can't remember much of the AT command set related to SMS. Andre Miller's answer seems to ring a few bells. Anyway you should read the documentation very carefully, I'm sure there were a few gotchas.
My recommentation for polling is at least every 5 seconds - this is just for robustness and responsiveness in the face of disconnection.
I used a state machine to navigate between initialisation, reading and deleting messages.
I have written something similar before. There is a way using AT commands to tell the modem to signal you each time an SMS is received.
For reference, I was using a Maestro 100 GSM Modem in an embedded application.
First you have to initialize the modem properly. I was using text mode for the SMS, but you might be using something different. Pick from these what you want. AT+CNMI is the most important.
AT&F0 # Restore factory defaults
ATE0 # Disable command echo
AT+CMGF=1 # Set message format to text mode
AT+CNMI=1,1,0,1,0 # Set new message indicator
AT+CPMS="SM","SM","SM" # Set preferred message storage to SIM
You would then wait for a message notification, that will look like this. (Don't match on the index number, that might differ between notifications)
+CMTI: "SM",0 # Message notification with index
When you get that notification, retrieve the unread SMS's:
AT+CMGL="REC UNREAD" # Retrieve unread messages
I would recommend you also add a poll, maybe every 5 minutes or so, just in case you miss a notification. With serial comms you can never be sure!