script per chiamare un numero col modem

Postate qui per tutte le discussioni legate a Linux in generale.

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.
Avatar utente
joe
Iper Master
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

Messaggio da joe »

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?

Avatar utente
Luci0
Staff
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:

Messaggio da Luci0 »

Ciao ...
Veramente non sono riuscito a capire bene cosa vuoi fare !!!

Comunque ammesso che sia quello che cerchi, dopo aver configurato la porta seriale (?) es.: /dev/ttyS0 prova con
echo "ATX3DT01234567" > /dev/ttyS0
:-)

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3986
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Messaggio da joe »

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!! :p

Avatar utente
Luci0
Staff
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:

Messaggio da Luci0 »

La soluzione dovrebbe essere

Codice: Seleziona tutto

echo "sequenza di caratteri che usi con minicom" > /dev/ttyACM0
Ciao

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3986
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Messaggio da joe »

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...

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

Avatar utente
tgmx
Linux 4.x
Linux 4.x
Messaggi: 1336
Iscritto il: ven 28 apr 2006, 14:40
Slackware: 14.1
Desktop: KDE 4
Località: Ancona

Messaggio da tgmx »

Hai controllato i permessi su quel device?

edit: da quello che hai scritto sopra sembra che usi root quindi... come non detto.

Avatar utente
Luci0
Staff
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:

Messaggio da Luci0 »

Forse manca il comando di inizializzazione del modem ... il problema é che di cellulari non me ne intendo proprio ...
nei modem seriali si mandava un ATZ

con minicom dovresti riuscire a capire quale sequenza di caratteri viene inviata all' avvio di minicom

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3986
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Messaggio da joe »

Ok, ti ringrazio della disponibilità, farò altre prove cercando di capire se minicom inrealtà, all'avvio invii qualche altro segnale d'inizializzazione al modem, che fino ad ora ho ommesso.

Grazie ancora :p

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3986
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Messaggio da joe »

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:

Codice: Seleziona tutto

AT S7=45 S0 L1 V1 X4 &c1 E1 Q0
OK
Ora, il punto e':
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
Purtroppo pero' non ho ottenuto risultati. Il modem sembra non reagire.... :(

Se avete idee...
A presto.

Avatar utente
Luci0
Staff
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:

Messaggio da Luci0 »

Forse il comando echo non passa il carattere CR "ritorno carrello" ovvero ^M ... prova con ...

Codice: Seleziona tutto

echo -e "ATZ\r" > /dev/ttyACM0 
echo -e "ATDT5\r" > /dev/tty/ACM0 
fosse la volta buona ... :-) !!

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3986
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Messaggio da joe »

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. :-p

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

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3986
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Messaggio da joe »

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

Codice: Seleziona tutto

/dev/ttyACM0 460800
connect '/usr/sbin/chat -v -f /etc/ppp/chat-gprs'
noauth
defaultroute
debug
E il secondo (è lo script di chat, send/expect): /etc/ppp/chat-gprs

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#
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:

Codice: Seleziona tutto

OK      ATDT5
Purtroppo però così non funziona e mi restituisce il messaggio:

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.
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.... :roll:

Quanto ècomplicata questa storia! :cry:

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3986
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Messaggio da joe »

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...

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3986
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Messaggio da joe »

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 :p):
"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."
Prendendo spunto da questo ho fatto alcune prove a sentimento e cono un po' di fortuna sono riuscito a far tentare la chiamata...

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
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!!! :D
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!!! :p

Avatar utente
Luci0
Staff
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:

Messaggio da Luci0 »

Bravo joe ... vedo che e non molli !!
Ma tutto questo lavoro a cosa doveva servire ??
Non mi dire che serviva per una connessione ppp ?
Inoltre credo che il comando chat non digerisca il \r inviato come da echo ....

Ciao :)

P.S. ho letto il manuale di chat va bene così ...

Rispondi