Написал скрипт для проверки счета оператора Utel. Идею взял отсюда:
http://wiki.ru.unix-like.info/3G%2C_EDGE%2CGPRS_%D0%9E%D0%B1%D0%BE_%D0%B2%D1%81%D0%B5%D0%BC_%D0%B2_%D0%BA%D1%80%D0%B0%D1%82%D1%86%D0%B5Скрипт, который там был у меня не заработал и я его переделал. У меня нет большого опыта в написании скриптов. Я только учусь. Может быть, его можно усовершенствовать. Для работы нужны minicom и perl.
#!/bin/sh
SCR=/tmp/m_script
SCR1=/tmp/ussdscp
OST=/tmp/lastcheck
tmp_file=/tmp/code_utel
: > $tmp_file
#gnokii --getnetworkinfo # пишет информацию о сети при наличии пакета gnokii разкомментировать
if [ -n "$1" ] # проверка наличия параметра коммандной строки
then
echo -n "$1" > $OST
# кодирование запроса
PARCEL=$(perl -e '@a=split(//,unpack("b*",`cat /tmp/lastcheck`)); for ($i=7; $i < $#a; $i+=8) { $a[$i]="" } print uc(unpack("H*", pack("b*", join("", @a))))."\n"')
echo "send \"AT+CUSD=1,$PARCEL,15\"" > $SCR
else
#echo 'send "ATZ"' > $SCR
#echo 'send ""' >> $SCR
echo 'send "AT+CUSD=1,AA180C3602,15"' > $SCR # если параметр не задан - проверяется счет
fi
cat /dev/ttyUSB2 | grep "+CUSD:" > $tmp_file &
minicom -S $SCR >/dev/null 2>&1 &
sleep 10
! killall -9 cat
! killall minicom
#exit 0
while read line
do
#echo $line
line1=${line%\"*}
#echo $line1
line2=${line1##*\"}
done < $tmp_file
echo $line2 > $SCR1
#cat /tmp/ussdscp
# декодирование полученного ответа
perl -e '@a=split(//,unpack("b*", pack("H*",`cat /tmp/ussdscp`))); for ($i=6; $i < $#a; $i+=7) {$a[$i].="0" } print pack("b*", join("",
@a))."
"'
exit 0
Minicom нужно настроить на порт /dev/ttyUSB0 (для Puppy 431). Скрипт нужно поместить в /root/my-applications/bin. Использование:
. Если не задать параметр, проверяет счет Utel (*100#). По идее так можно пополнять счет. Для проверки счета модем должен быть отключен от интернета.
Доработал скрипт. Теперь не нужен minicom, используется, интегрированная в puppy команда "modem-stats -c at-команда устройство". Также скрипт переключает сети 2g/3g. Использование:
- включение в 2G режим
- включение в 3G режим
- предпочитать 3G, но включено два диапазона
#!/bin/sh
SCR=/tmp/m_script
SCR1=/tmp/ussdscp
OST=/tmp/lastcheck
tmp_file=/tmp/code_utel
: > $tmp_file
#gnokii --getnetworkinfo | grep Network | grep -v code # пишет информацию о сети при наличии пакета gnokii
modem-stats -c "AT+COPS?" /dev/ttyUSB0
if [ "$1" = "3g" ]
then modem-stats -c "AT^SYSCFG=14,2,3FFFFFFF,2,4" /dev/ttyUSB0
sleep 20
modem-stats -c "AT+COPS?" /dev/ttyUSB0
#gnokii --getnetworkinfo | grep Network | grep -v code
exit 0
fi
if [ "$1" = "p3g" ]
then modem-stats -c "AT^SYSCFG=2,2,3FFFFFFF,2,4" /dev/ttyUSB0
sleep 20
modem-stats -c "AT+COPS?" /dev/ttyUSB0
#gnokii --getnetworkinfo | grep Network | grep -v code
exit 0
fi
if [ "$1" = "2g" ]
then modem-stats -c "AT^SYSCFG=13,1,3FFFFFFF,2,4" /dev/ttyUSB0
sleep 20
#gnokii --getnetworkinfo | grep Network | grep -v code
modem-stats -c "AT+COPS?" /dev/ttyUSB0
exit 0
fi
if [ -n "$1" ] # проверка наличия параметра коммандной строки
then
echo -n "$1" > $OST
# кодирование запроса
PARCEL=$(perl -e '@a=split(//,unpack("b*",`cat /tmp/lastcheck`)); for ($i=7; $i < $#a; $i+=8) { $a[$i]="" } print uc(unpack("H*", pack("b*", join("", @a))))."\n"')
#echo "send \"AT+CUSD=1,$PARCEL,15\"" > $SCR
at="AT+CUSD=1,$PARCEL,15"
else
#echo 'send "ATZ"' > $SCR
#echo 'send ""' >> $SCR
#echo 'send "AT+CUSD=1,AA180C3602,15"' > $SCR # если параметр не задан - проверяется счет
at="AT+CUSD=1,AA180C3602,15"
fi
#echo $at
cat /dev/ttyUSB2 | grep "+CUSD:" > $tmp_file &
#minicom -S $SCR >/dev/null 2>&1 &
modem-stats -c "$at" /dev/ttyUSB0 >/dev/null 2>&1
sleep 10
! killall -9 cat
#! killall minicom
#exit 0
while read line
do
#echo $line
line1=${line%\"*}
#echo $line1
line2=${line1##*\"}
done < $tmp_file
echo $line2 > $SCR1
#cat /tmp/ussdscp
# декодирование полученного ответа
perl -e '@a=split(//,unpack("b*", pack("H*",`cat /tmp/ussdscp`))); for ($i=6; $i < $#a; $i+=7) {$a[$i].="0" } print pack("b*", join("",
@a))."
"'
exit 0