2009-09-14 16 views
8

Ho un modem GSM collegato al mio computer, voglio ricevere messaggi di testo inviati usando un programma python che ho scritto, mi chiedo solo quale sia la tecnica migliore per eseguire il polling dei dati.Qual è il miglior design per il polling di un modem per i dati in entrata?

Nel caso in cui scrivo un programma che ha un ciclo infinito che controlla continuamente i messaggi in arrivo all'interno del loop, il programma invia i comandi AT e legge i dati di input. oppure i modem hanno un modo di segnalare un'applicazione di un dato in arrivo (sms).

Sto cercando di immaginare un telefono cellulare è solo un modem GSM, e quando viene ricevuto un sms, il telefono ti avvisa dell'evento, o il software del telefono ha un ciclo infinito che esegue il polling dei dati in entrata.

+0

Ottima domanda! Solo curioso, quale modem GSM hai? –

+0

Huawei, modello E220 HSDPA USB Modem – gath

risposta

3

Ho scritto qualcosa di simile prima. C'è un modo con i comandi AT per dire al modem di segnalarti ogni volta che viene ricevuto un SMS.

Per riferimento, stavo usando un Maestro 100 GSM Modem in un'applicazione incorporata.

Prima di inizializzare correttamente il modem. Stavo usando la modalità testo per gli SMS, ma potresti usare qualcosa di diverso. Scegli tra questi ciò che vuoi. AT + CNMI è il più importante.

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 

Si attende quindi una notifica di messaggio, che sarà simile a questo. (Non corrispondono al numero di indice, che potrebbe differire tra le notifiche)

+CMTI: "SM",0 # Message notification with index 

Quando si ottiene che la notifica, recuperare i non letti SMS:

AT+CMGL="REC UNREAD" # Retrieve unread messages 

ti consiglierei anche di aggiungere un sondaggio, forse ogni 5 minuti o così, nel caso ti manca una notifica. Con le comunicazioni seriali non si può mai essere sicuri!

+0

Grazie, non vedo l'ora. – gath

+0

Ok, modificato. Spero che questo ti aiuti. Ho usato quei comandi in un'applicazione incorporata con un modem GSM esterno. –

+0

Ottimo, fammi provare. – gath

0

Trovo che non riesco a ricordare gran parte del set di comandi AT relativo agli SMS. La risposta di Andre Miller sembra suonare alcune campane. Ad ogni modo dovresti leggere la documentazione con molta attenzione, sono sicuro che ci sono stati alcuni trucchi.

La mia raccomandazione per il polling è almeno ogni 5 secondi - questo è solo per robustezza e reattività di fronte alla disconnessione.

Ho utilizzato una macchina a stati per navigare tra l'inizializzazione, la lettura e l'eliminazione dei messaggi.