PDA

View Full Version : Modem GSM: Server Dial IN + invio sms


Poix81
21-11-2005, 17:02
ciao a tutti.
Ho impostato mgetty in modo che rimanda in ascolto sulla porta del modem per accettare le chiamate in ingresso.
Con lo stesso modem vorrei inviare sms, pero' ovviamente mi dice che la porta e' occupata.
C'e' la possibilita' di poterli inviare liberando temporaneamente la porta?

ciao e grazie a tutti

ilsensine
21-11-2005, 17:04
Se il modem non è connesso, puoi utilizzarlo per mandare sms. mgetty se ne accorge e attende che la porta si liberi.
Unica cosa, mgetty gradisce che il programma che invia gli sms abbia l'accortezza di creare un file di lock standard per il device seriale.

Poix81
21-11-2005, 20:39
ma se mgetty parte al boot come posso avere la porta libera per mandare sms?

sto facendo un po' di confusione

ilsensine
22-11-2005, 08:48
mgetty fa semplicemente questo:

1 - acquisisce il lock della seriale tramite un apposito lockfile
2 - inizializza il modem
3 - rilascia il lock
4 - si pone in attesa di RING, oppure di qualcun altro che apre il dispositivo seriale
5a - se arriva il RING, riacquisisce il lock, risponde alla chiamata e invoca pppd
5b - se si accorge che qualcun altro apre la seriale, attende che la seriale sia nuovamente libera e ripete la procedura

Quindi, durante la fase 4, qualsiasi altro programma può utilizzare il modem per altri scopi (ad es. per effettuare una connessione ad internet, per mandare sms ecc.). E' importante che chi utilizza la seriale acquisisca anche il lock, così da poter sincronizzare i programmi. pppd ad esempio crea il lock (v. man pppd opzione "lock").

Poix81
22-11-2005, 09:01
mgetty fa semplicemente questo:

1 - acquisisce il lock della seriale tramite un apposito lockfile
2 - inizializza il modem
3 - rilascia il lock
4 - si pone in attesa di RING, oppure di qualcun altro che apre il dispositivo seriale
5a - se arriva il RING, riacquisisce il lock, risponde alla chiamata e invoca pppd
5b - se si accorge che qualcun altro apre la seriale, attende che la seriale sia nuovamente libera e ripete la procedura

Quindi, durante la fase 4, qualsiasi altro programma può utilizzare il modem per altri scopi (ad es. per effettuare una connessione ad internet, per mandare sms ecc.). E' importante che chi utilizza la seriale acquisisca anche il lock, così da poter sincronizzare i programmi. pppd ad esempio crea il lock (v. man pppd opzione "lock").

il mio problema e' che il prog che uso non crea un file di lock.

c

ilsensine
22-11-2005, 09:08
Prova a usarlo ugualmente, ma non quando il file di lock è creato.
Il nome del file di lock è /var/lock/LCK..ttyS<n>, e contine un numero (il pid del processo che detiene il lock). Potresti fare uno script che controlla se il file esiste e il processo con il pid indicato esiste; in caso affermativo, esce con un errore; altrimenti crea il lockfile con il proprio pid e invoca il programma per l'invio del sms. E' una tecnica non completamente affidabile e soggetta a una piccola race, ma molto meglio che niente. Una soluzione più affidabile deve far uso degli hardlink.

ilsensine
22-11-2005, 09:32
Ad esempio:

#!/bin/bash

# Impostare qui la seriale e il nome del lockfile
DEV=/dev/ttyS0
LCK=/var/lock/LCK..ttyS0

# Impostare qui il programma da invocare, con le relative opzioni
PROGRAM="echo ho bloccato la porta $DEV"





fail()
{
echo $1>&2
[ ! "$TMPFILE" = "" ] && rm -f "$TMPFILE"
exit 1
}

TMPFILE=`mktemp /var/lock/$$.XXXXXXXX` || fail "unable to create the tmpfile"

printf "% 10d\n" $$ > "$TMPFILE" || fail "unable to write the tmpfile";

if [ -f "$LCK" ]; then
PID=`cat "$LCK"`
kill -0 $PID 2>/dev/null && fail "serial port locked"
echo "stale lock file -- removing" >&2
unlink "$LCK"
fi

ln "$TMPFILE" "$LCK" 2>/dev/null || fail "unable to create the lockfile"
unlink "$TMPFILE"

$PROGRAM

unlink "$LCK"

Poix81
22-11-2005, 13:46
grazie per lo script.

Altrimenti potresti consigliarmi un prog per inviare sms che crea direttamente un file di lock?

cioa e grazie

ilsensine
22-11-2005, 14:19
...programma? Io gli sms li invio con uno script :D

Poix81
23-11-2005, 09:02
esatto.
Avevo fatto un programmino in c++ che girava sotto windows e usava il formata PDU (una rottura!).
Ieri sera ho trovato gnokii che supporta anche i modem con i comandi AT, oltre ai nokia.
Crea un file di Lock della seriale quindi e' perfetto per le mie esigenze.
Adesso devo fare un moduletto per convertire le maiil ricevuto sull'account locale in sms. Qualche consiglio?

ciao e ancora grazie