Ecco come fare per ricevere comandi tramite SMS con Asterisk e chan_dongle e farli eseguire da uno script.
Il test l'ho fatto con Asterisk 11
Dialplan:
codice:
[from-pstn]
exten => sms,1,Noop(Incoming SMS from ${CALLERID(num)} ${BASE64_DECODE(${SMS_BASE64})})
exten => sms,n,System(echo '${CALLERID(num)} ${BASE64_DECODE(${SMS_BASE64})}' >> /var/log/asterisk/sms.txt)
exten => sms,n,Wait(3)
; script di riconoscimento comandi da lanciare all'arrivo del SMS
exten => sms,n,System(/bin/sh /root/getsms-asterisk.sh)
exten => sms,n,Wait(15)
; cancello il file temporaneo con il SMS ricevuto
exten => sms,n,System(rm -f /var/log/asterisk/sms.txt)
exten => sms,n,Wait(1)
exten => sms,n,Hangup()
Script getsms-asterisk.sh (dargli chmod 755):
codice:
#################################################
# GetSMS - controlla la presenza di
# nuovi SMS sulla periferica e se
# riconosce dei comandi esegue delle
# operazioni.
#
##SMS##
#Send On(x) text to switch on the relay
#Send Off(x) text to switch off the relay
#################################################
#/var/log/asterisk/sms.txt # Nuovi SMS ricevuti
# Variabili
folder=/www/sms # Cartella di destinazione deve essere scrivibile da asterisk
dbsms=$folder/dbsms # Database SMS ricevuti
newcmd=$folder/newcmd # Nuovi comandi da attuare
dbcmd=$folder/dbcmd # Database comandi eseguiti
now=$(date) # Memorizza data e ora corrente
# Riempie il file newcmd con gli SMS ricevuti
/bin/grep XX /var/log/asterisk/sms.txt > $newcmd
# Conta i comandi
numcmd=$(grep -c "^" $newcmd)
# Se non ci sono nuovi comandi non prosegue
if [ $numcmd -eq 0 ]
then
exit 1
fi
# Analizza i comandi
for ancmd in $(cat $newcmd)
do
case $ancmd
in
XXOn1) /var/lib/asterisk/on1.sh # se trova la striga "XXON1" esegue lo script on1.sh presente in /var/lib/asterisk/
echo $ancmd >> $dbcmd;;
XXOff1) /var/lib/asterisk/off1.sh # se trova la striga "XXOff1" esegue lo script off1.sh
echo $ancmd >> $dbcmd;;
*) ;;
esac
done
# Aggiunge i nuovi sms al database SMS
/bin/cat /var/log/asterisk/sms.txt >> $dbsms
echo -n '<p>' >> $dbsms
# attesa 2 secondi
/bin/sleep 2
# Svuota il file newcmd
> $newcmd
exit 0