script per chiamare un numero col modem
Moderatore: Staff
Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
- joe
- Iper Master

- Messaggi: 3986
- Iscritto il: ven 27 apr 2007, 11:21
- Slackware: 15.0
- Kernel: 5.15.38
- Desktop: dwm
script per chiamare un numero col modem
Salve a tutti.
Dopo aver letto un po' di documentazione, sono riuscito a chiamare un numero con minicom utilizzando il mio modem (un cellulare nokia 6230).
In realtà il collegamento va in timeout, ma comunque il display del cellulare si accende e compare il messaggio di chiamata in corso.
Ad ogni modo, già mi basterebbe riuscire a riprodurre questa operazione con uno script invece che da minicom, in modo da poter essere ripetuta a piacimento in modo automatico.
Non so bene da dove partire, ho letto di chat, ma in tutti glie esempi che ho visto si utilizza in coppia con pppd, invece nel mio caso penso che pppd non c'entri nulla.
Inoltre anche la mia connessione ad internet col cellulare, viene gestita da due script del genere...
In particolare per fare unaprova ho modificato lo script "send/expect" sostituendo semplicemente il numero di telefono del provider con un altro numero qualsiasi, poi ho lanciato la connessioen con "pppd call gprs" come al solito, ma il cellulare non ha dato segno di vita:
ne si è acceso, ne tantomeno ha tentato la chiamata.
Mi sapreste dare una mano?
Dopo aver letto un po' di documentazione, sono riuscito a chiamare un numero con minicom utilizzando il mio modem (un cellulare nokia 6230).
In realtà il collegamento va in timeout, ma comunque il display del cellulare si accende e compare il messaggio di chiamata in corso.
Ad ogni modo, già mi basterebbe riuscire a riprodurre questa operazione con uno script invece che da minicom, in modo da poter essere ripetuta a piacimento in modo automatico.
Non so bene da dove partire, ho letto di chat, ma in tutti glie esempi che ho visto si utilizza in coppia con pppd, invece nel mio caso penso che pppd non c'entri nulla.
Inoltre anche la mia connessione ad internet col cellulare, viene gestita da due script del genere...
In particolare per fare unaprova ho modificato lo script "send/expect" sostituendo semplicemente il numero di telefono del provider con un altro numero qualsiasi, poi ho lanciato la connessioen con "pppd call gprs" come al solito, ma il cellulare non ha dato segno di vita:
ne si è acceso, ne tantomeno ha tentato la chiamata.
Mi sapreste dare una mano?
- joe
- Iper Master

- Messaggi: 3986
- Iscritto il: ven 27 apr 2007, 11:21
- Slackware: 15.0
- Kernel: 5.15.38
- Desktop: dwm
Guarda, io ho provato a seguire il tuo consiglio sostituendo la porta seriale con il device corrispondente al modem, nel mio caso lo vedo come /dev/ttyACM0....è collegato attraverso cavo usb.
Non ho capito bene cosa intendi per configurazione della porta seriale... posso solo dirti che /dev/ttyACM0 funziona bene sia con minicom che con gli script chat di connessione che con wvdial, ne deduco che intendevi semplicemente dirmi di sostituire la porta /devTttyS* con quella a cui è collegato il mio modem (dev/ttyACM0), se non fosse così fammi pure sapere.
Comunque quel comando, così a naso, mi sembra troppo "semplice"....se bastasse quello, perchè in tutti gli how-to richiamano minicom?
Ho provato anche a cambiare un po' il comado tanto per vedere se magari si trattasse di quello, ma nada...
Non ottengo nessun output, e neanche in /var/log/messages, che mi sono tenuto sotto il naso mentre ho eseguito queste operazioni accade nulla. A maggior ragine anche il dispaly del cell resta spento e non tenta la chiamata.
Se hai altre idee fammi pure sapere. Grazie della risposta, Saluti!!
Non ho capito bene cosa intendi per configurazione della porta seriale... posso solo dirti che /dev/ttyACM0 funziona bene sia con minicom che con gli script chat di connessione che con wvdial, ne deduco che intendevi semplicemente dirmi di sostituire la porta /devTttyS* con quella a cui è collegato il mio modem (dev/ttyACM0), se non fosse così fammi pure sapere.
Comunque quel comando, così a naso, mi sembra troppo "semplice"....se bastasse quello, perchè in tutti gli how-to richiamano minicom?
Ho provato anche a cambiare un po' il comado tanto per vedere se magari si trattasse di quello, ma nada...
Non ottengo nessun output, e neanche in /var/log/messages, che mi sono tenuto sotto il naso mentre ho eseguito queste operazioni accade nulla. A maggior ragine anche il dispaly del cell resta spento e non tenta la chiamata.
Se hai altre idee fammi pure sapere. Grazie della risposta, Saluti!!
- Luci0
- Staff

- Messaggi: 3591
- Iscritto il: lun 27 giu 2005, 0:00
- Nome Cognome: Gabriele Santanché
- Slackware: 12.2 14.0
- Kernel: 2.6.27.46- gen 3.2.29
- Desktop: KDE 3.5.10 Xfce
- Località: Forte dei Marmi
- Contatta:
La soluzione dovrebbe essere
Ciao
Codice: Seleziona tutto
echo "sequenza di caratteri che usi con minicom" > /dev/ttyACM0
- joe
- Iper Master

- Messaggi: 3986
- Iscritto il: ven 27 apr 2007, 11:21
- Slackware: 15.0
- Kernel: 5.15.38
- Desktop: dwm
Ho riprovato, era così che avevo fatto prima, ma senza successo.
Ho notato che la prima volta che do quel comando, mi restituisce un errore, poi se riprovo non mi dà più nulla...bo, ecco quello che vedo dal terminale...
Ho notato che la prima volta che do quel comando, mi restituisce un errore, poi se riprovo non mi dà più nulla...bo, ecco quello che vedo dal terminale...
Codice: Seleziona tutto
bash-3.1# echo "ATDT4916" > /dev/ttyACM0
bash: echo: write error: Input/output error
bash-3.1# echo "ATDT4916" > /dev/ttyACM0
bash-3.1# echo "atdt4916" > /dev/ttyACM0
[code]
Non saprei proprio...
Se avete altre proposte.....
Insomma non dovrebbe essere una cosa così difficile.
Poi se riesce anche wvdial, vuol dire che "se puede".
A presto- joe
- Iper Master

- Messaggi: 3986
- Iscritto il: ven 27 apr 2007, 11:21
- Slackware: 15.0
- Kernel: 5.15.38
- Desktop: dwm
Allora, ho provato di nuovo a far partire minicom ed effettivamente tra le prime righe c'e' una serie di caratteri "strana" che pero' inizia con AT, quindi forse, anzi probabilmente, quella e' la stringa di inizializzazione del modem che minicom gli invia all'avvio.
Vi la riporto insieme alla riga seguente che e' la risposta del modem:
Ora, il punto e':
come inviare con echo quella stringa?
Io ho provato cosi':
Purtroppo pero' non ho ottenuto risultati. Il modem sembra non reagire.... 
Se avete idee...
A presto.
Vi la riporto insieme alla riga seguente che e' la risposta del modem:
Codice: Seleziona tutto
AT S7=45 S0 L1 V1 X4 &c1 E1 Q0
OK
come inviare con echo quella stringa?
Io ho provato cosi':
Codice: Seleziona tutto
echo "AT S7...E1 Q0" > /dev/ttyACM0
echo "ATZ" > /dev/ttyACM0
echo "ATDT5" > /dev/tty/ACM0
Se avete idee...
A presto.
- Luci0
- Staff

- Messaggi: 3591
- Iscritto il: lun 27 giu 2005, 0:00
- Nome Cognome: Gabriele Santanché
- Slackware: 12.2 14.0
- Kernel: 2.6.27.46- gen 3.2.29
- Desktop: KDE 3.5.10 Xfce
- Località: Forte dei Marmi
- Contatta:
Forse il comando echo non passa il carattere CR "ritorno carrello" ovvero ^M ... prova con ...
fosse la volta buona ...
!!
Codice: Seleziona tutto
echo -e "ATZ\r" > /dev/ttyACM0
echo -e "ATDT5\r" > /dev/tty/ACM0
- joe
- Iper Master

- Messaggi: 3986
- Iscritto il: ven 27 apr 2007, 11:21
- Slackware: 15.0
- Kernel: 5.15.38
- Desktop: dwm
Ciao!
Grandioso!!
Era proprio quello!
Una cosa però, se do' "echo -e..." non va', invece solo echo funziona.
A dire il vero accade questo: invio i comandi AT ATZ e il telefono probabilmente li riceve, ma non so come verificarlo, non dà nessun segno di risposta...(penso giustamente.).
Invece appena do' il comandodi chiamata ATDT5, allora si illumina il dsplay e compare il messaggio di chiamata. Tuttavia ricordo che chiamando con minicom, dopo un po' si sentiva proprio il "tu-tu-tu" che indicava il fallimento della chiamata, invece così ad un certo punto il display si spegne e scompare anche il messaggio di chiamata in corso, però non sento alcun messaggio sonoro....
forse potrebbe essere sufficiente questo.
Ad ogni modo è un buon puntodi partenza....pensa un po' due caratteri in meno e non funzionava un fico secco!
Bè devo ringraziarti molto... potrebbe sembrare una operazione puramente speculativa, invece serve tantissimo...mi è capitato per caso di scoprirlo...diciamo che quando la connessione va in down pur restando online, occorre eseguire tutta una serie di operazioni per cercare di sbloccare il cellulare e tra queste vi è anche la chiamata ad un numero di telefono.
Arrivato a questo punto grazie al tuo aiuto, vorrei cercare di andare un po' oltre ovvero:
Adesso abbiamo un metodo per inviare input al cell/modem, ma per comunicare con lui non basta.
Occorre anche carpirne le risposte che ci restituisce, in modo da poter riconoscere ed eventualmente gestire situazioni diverse.
Allora come fare per farci dare un output dal modem?
usando per esempio pppd per connettermi, sono solito lanciare anche "tail -f /var/log/messages" per vedere l'output in tempo reale.
Ho notato però che col comando echo che mi hai consigliato non mi viene restituito nulla in var log messages.
In rete ho letto di eseguire tail direttamente sul devices, tipo:
tail -f /dev/ttyACM0
però anche qui non succede nulla!!!
Visto che mi hai dato la risposta tanto cercata, potresti sapere anche rispondere a questa domanda...
Spero che possiate rispondermi ringraziandovi ancora ;-P
Grandioso!!
Era proprio quello!
Una cosa però, se do' "echo -e..." non va', invece solo echo funziona.
A dire il vero accade questo: invio i comandi AT ATZ e il telefono probabilmente li riceve, ma non so come verificarlo, non dà nessun segno di risposta...(penso giustamente.).
Invece appena do' il comandodi chiamata ATDT5, allora si illumina il dsplay e compare il messaggio di chiamata. Tuttavia ricordo che chiamando con minicom, dopo un po' si sentiva proprio il "tu-tu-tu" che indicava il fallimento della chiamata, invece così ad un certo punto il display si spegne e scompare anche il messaggio di chiamata in corso, però non sento alcun messaggio sonoro....
forse potrebbe essere sufficiente questo.
Ad ogni modo è un buon puntodi partenza....pensa un po' due caratteri in meno e non funzionava un fico secco!
Bè devo ringraziarti molto... potrebbe sembrare una operazione puramente speculativa, invece serve tantissimo...mi è capitato per caso di scoprirlo...diciamo che quando la connessione va in down pur restando online, occorre eseguire tutta una serie di operazioni per cercare di sbloccare il cellulare e tra queste vi è anche la chiamata ad un numero di telefono.
Arrivato a questo punto grazie al tuo aiuto, vorrei cercare di andare un po' oltre ovvero:
Adesso abbiamo un metodo per inviare input al cell/modem, ma per comunicare con lui non basta.
Occorre anche carpirne le risposte che ci restituisce, in modo da poter riconoscere ed eventualmente gestire situazioni diverse.
Allora come fare per farci dare un output dal modem?
usando per esempio pppd per connettermi, sono solito lanciare anche "tail -f /var/log/messages" per vedere l'output in tempo reale.
Ho notato però che col comando echo che mi hai consigliato non mi viene restituito nulla in var log messages.
In rete ho letto di eseguire tail direttamente sul devices, tipo:
tail -f /dev/ttyACM0
però anche qui non succede nulla!!!
Visto che mi hai dato la risposta tanto cercata, potresti sapere anche rispondere a questa domanda...
Spero che possiate rispondermi ringraziandovi ancora ;-P
- joe
- Iper Master

- Messaggi: 3986
- Iscritto il: ven 27 apr 2007, 11:21
- Slackware: 15.0
- Kernel: 5.15.38
- Desktop: dwm
Mi rimangio quello che ho detto circa il funzionamento dei comandi che mi sono stati suggeriti:
sembra che funzionino solo a volte, apparentemente senza un criterio ben preciso. Forse (ma fooorse!) potrebbe essere colpa della velocità di trasmissione dei comandi...dico questo perchè con minicom questa velocità viene settata e fissata all'avvio del programma...
Non ci capisco più niente.....
Ma mi chiedo:
pppd, quando si connette utilizza uno script chat send/expect.
Per connettermi uso due script:
il primo: /etc/ppp/peers/gprs
E il secondo (è lo script di chat, send/expect): /etc/ppp/chat-gprs
per connettermi dò: " pppd call gprs", e si connette senza problemi....
Ora, la cosa più logica per chiamare un numero diverso (ad esempio il numero 5...) mi pareva quella di sostituire le ultime due righe del file chat-gprs e mettere al loro posto:
Purtroppo però così non funziona e mi restituisce il messaggio:
Probabilmente dà "Serial line is looped back" perchè non vede il pppd del server, d'altra parte è chiaro: è stato chiamato il numero 5 non un server....
A questo punto come potrei fare?
Non è possibile usare chat senza tirare in ballo pppd?
A me servirebbe qualcosa a basso livello per controllare il modem....
Quanto ècomplicata questa storia!
sembra che funzionino solo a volte, apparentemente senza un criterio ben preciso. Forse (ma fooorse!) potrebbe essere colpa della velocità di trasmissione dei comandi...dico questo perchè con minicom questa velocità viene settata e fissata all'avvio del programma...
Non ci capisco più niente.....
Ma mi chiedo:
pppd, quando si connette utilizza uno script chat send/expect.
Per connettermi uso due script:
il primo: /etc/ppp/peers/gprs
Codice: Seleziona tutto
/dev/ttyACM0 460800
connect '/usr/sbin/chat -v -f /etc/ppp/chat-gprs'
noauth
defaultroute
debug
Codice: Seleziona tutto
TIMEOUT 5
ECHO ON
ABORT '\nBUSY\r'
ABORT '\nERROR\r'
ABORT '\nNO ANSWER\r'
ABORT '\nNO CARRIER\r'
ABORT '\nNO DIALTONE\r'
ABORT '\nRINGING\r\n\r\nRINGING\r'
'' \rAT
TIMEOUT 12
OK ATZ
OK 'AT+cgdcont=1,"IP","ibox.tim.it"'
OK ATDT*99***1#
Ora, la cosa più logica per chiamare un numero diverso (ad esempio il numero 5...) mi pareva quella di sostituire le ultime due righe del file chat-gprs e mettere al loro posto:
Codice: Seleziona tutto
OK ATDT5
Codice: Seleziona tutto
May 25 10:25:33 darkstar pppd[2741]: pppd 2.4.4 started by root, uid 0
May 25 10:25:34 darkstar chat[2742]: timeout set to 5 seconds
May 25 10:25:34 darkstar chat[2742]: abort on (\nBUSY\r)
May 25 10:25:34 darkstar chat[2742]: abort on (\nERROR\r)
May 25 10:25:34 darkstar chat[2742]: abort on (\nNO ANSWER\r)
May 25 10:25:34 darkstar chat[2742]: abort on (\nNO CARRIER\r)
May 25 10:25:34 darkstar chat[2742]: abort on (\nNO DIALTONE\r)
May 25 10:25:34 darkstar chat[2742]: abort on (\nRINGING\r\n\r\nRINGING\r)
May 25 10:25:34 darkstar chat[2742]: send (^MAT^M)
May 25 10:25:34 darkstar chat[2742]: timeout set to 12 seconds
May 25 10:25:34 darkstar chat[2742]: expect (OK)
May 25 10:25:34 darkstar chat[2742]: ^MAT^M^M
May 25 10:25:34 darkstar chat[2742]: OK
May 25 10:25:34 darkstar chat[2742]: -- got it
May 25 10:25:34 darkstar chat[2742]: send (ATZ^M)
May 25 10:25:34 darkstar chat[2742]: expect (OK)
May 25 10:25:34 darkstar chat[2742]: ^M
May 25 10:25:34 darkstar chat[2742]: ATZ^M^M
May 25 10:25:34 darkstar chat[2742]: OK
May 25 10:25:34 darkstar chat[2742]: -- got it
May 25 10:25:34 darkstar chat[2742]: send (ATDT5^M)
May 25 10:25:34 darkstar pppd[2741]: Serial connection established.
May 25 10:25:34 darkstar pppd[2741]: Using interface ppp0
May 25 10:25:34 darkstar pppd[2741]: Connect: ppp0 <--> /dev/ttyACM0
May 25 10:25:36 darkstar pppd[2741]: Serial line is looped back.
May 25 10:25:36 darkstar pppd[2741]: Connection terminated.
May 25 10:25:37 darkstar pppd[2741]: Exit.
A questo punto come potrei fare?
Non è possibile usare chat senza tirare in ballo pppd?
A me servirebbe qualcosa a basso livello per controllare il modem....
Quanto ècomplicata questa storia!
- joe
- Iper Master

- Messaggi: 3986
- Iscritto il: ven 27 apr 2007, 11:21
- Slackware: 15.0
- Kernel: 5.15.38
- Desktop: dwm
Ho trovato questo link:
http://www.freelists.org/archives/lugge ... 00005.html
Però non spiega in pratica come fare a dire a chat che deve usare un certo device, nel mio caso /dev/ttyACM0...
http://www.freelists.org/archives/lugge ... 00005.html
Però non spiega in pratica come fare a dire a chat che deve usare un certo device, nel mio caso /dev/ttyACM0...
- joe
- Iper Master

- Messaggi: 3986
- Iscritto il: ven 27 apr 2007, 11:21
- Slackware: 15.0
- Kernel: 5.15.38
- Desktop: dwm
Ho trovato anche un interessante sito che tratta l'argomento chat e ppp:
http://docsrv.caldera.com:8457/en/FAQ/P ... AQ-17.html
Ecco, ad un certo punto dice che è possibile usare chat anche senza pppd, ma in quel caso occorre usare gli operatori di redirezione I/O (meglio non fidarsi troppo delle mie traduzioni anglicote
):
Ho buttato giù uno script send/expect del tipo (l'ho chiamato chat-script):
Poi seguendo i consigli del sito ho provato a dare:
chat -v -f chat-script <> /dev/ttyACM0
Ma purtroppo nulla...
Allora mi sono ricordato di alcune letture sulla redirezione stoutput, error, etc...
Così ho provato a dare:
chat -v -f chat-script <&2> /dev/ttyACM0
Bene, così funge puntualmente ad ogni lanci del comando: ERA ORA!!!
E il cell si illumina e dice: "chiamata per... 5", poi dopo un po' si spegne il display e termina con un tu-tu-tu (a volte anche senza nessun segnale acustico...).
Ora sarebbe necessario riuscire a reperiro l'output che il modem ritorna. Infatti non a caso ho scritto lo script in quel modo, cioè lasciando la colonna di "EXPECT" quasi vuota:
di fatto, se metto un OK, per esemoipio all'ultima riga allora chat invia ATZ e Aspetterebbe che gli si ritornasse l'output OK. Ma aspetterebbe invano!!! ho provato, ma va intimeout tutta la baracca...
Perchè non riesce a carpire la risposta del modem? Secondo voi è un problema di redirezione? sapreste come risolverlo?
Perchè usando pppd (che è sicuramente più in gamba del mio script) gli output sono ricevuti correttamente??
Va bene gente penso di avervi annoiato abbastanza. Se volete/sapete/potete rispondermi, magari con la soluzione giusta
, allora vatevi avanti senza indugi!!! 
http://docsrv.caldera.com:8457/en/FAQ/P ... AQ-17.html
Ecco, ad un certo punto dice che è possibile usare chat anche senza pppd, ma in quel caso occorre usare gli operatori di redirezione I/O (meglio non fidarsi troppo delle mie traduzioni anglicote
Prendendo spunto da questo ho fatto alcune prove a sentimento e cono un po' di fortuna sono riuscito a far tentare la chiamata..."So, if you really want to just run chat and have it talk to a modem then you need to use the I/O redirection operators < and > so that the standard input and output are redirected to the modem."
Ho buttato giù uno script send/expect del tipo (l'ho chiamato chat-script):
Codice: Seleziona tutto
TIMEOUT 50
ECHO ON
'' \rAT
'' ATZ\r
'' ATDT5\r
chat -v -f chat-script <> /dev/ttyACM0
Ma purtroppo nulla...
Allora mi sono ricordato di alcune letture sulla redirezione stoutput, error, etc...
Così ho provato a dare:
chat -v -f chat-script <&2> /dev/ttyACM0
Bene, così funge puntualmente ad ogni lanci del comando: ERA ORA!!!
E il cell si illumina e dice: "chiamata per... 5", poi dopo un po' si spegne il display e termina con un tu-tu-tu (a volte anche senza nessun segnale acustico...).
Ora sarebbe necessario riuscire a reperiro l'output che il modem ritorna. Infatti non a caso ho scritto lo script in quel modo, cioè lasciando la colonna di "EXPECT" quasi vuota:
di fatto, se metto un OK, per esemoipio all'ultima riga allora chat invia ATZ e Aspetterebbe che gli si ritornasse l'output OK. Ma aspetterebbe invano!!! ho provato, ma va intimeout tutta la baracca...
Perchè non riesce a carpire la risposta del modem? Secondo voi è un problema di redirezione? sapreste come risolverlo?
Perchè usando pppd (che è sicuramente più in gamba del mio script) gli output sono ricevuti correttamente??
Va bene gente penso di avervi annoiato abbastanza. Se volete/sapete/potete rispondermi, magari con la soluzione giusta
