3G life:) c E1550 под linux для линуксоидов-2. Командная строка.

Jan 02, 2010 22:12


Мы уже обсудили разные варианты получения баланса на 3G life:). Сегодня я получил коммент о том, что есть решение не как мне предлагали на php, а на Perl.
Так как у меня уже установлена гуёвая программка для работы с 3G life:), то скрипт сразу не заработал. Ниже текста скрипта будут пояснения как его запустить на «чистой» установке ubuntu.

Для общей сохранности этого скрипта публикую тут копию скрипта:

#!/usr/bin/perl
use Getopt::Std;
use Device::Gsm::Pdu;

# defaults
$opt_r = "/dev/ttyUSB2";
$opt_s = "/dev/ttyUSB0";

my $USAGE = <
Usage: $0 [-i input_port] [-o output_port] [-n] [-h] [-v] ussd_msg

Description:
Send and receive 7-bit PDU-encoded USSD messages.
Written and tested for Huawei E1550 GSM/UMTS USB modem.

Options:
-r port Port to receive data from. Default: $opt_r
-s port Port to send AT commands to. Default: $opt_s
-n Do not send any data to port. Useful with -v.
-h Print this help.
-v Be verbose.
__EOU

sub HELP_MESSAGE {print "$USAGE\n"; exit;}
sub VERSION_MESSAGE {};
getopts ('i:o:hnv');
HELP_MESSAGE() and exit if (! $ARGV[0]) or defined($opt_h);

print "USSD MSG: $ARGV[0]\n" if $opt_v;
my $ussd_req = Device::Gsm::Pdu::encode_text7($ARGV[0]);
$ussd_req =~ s/^..//;
print "PDU ENCODED: $ussd_req\n" if $opt_v;

my $ussd_reply;
if (! $opt_n) {
open (SENDPORT, '+<', $opt_s) or die "Can't open '$opt_s': $!\n";
print SENDPORT 'AT+CUSD=1,',$ussd_req,",15\r\n";
close SENDPORT;
open (RCVPORT, $opt_r) or die "Can't open '$opt_r': $!\n";
print "Waiting for USSD reply...\n" if $opt_v;
while () {
chomp;
die "USSD ERROR\n" if $_ eq "+CUSD: 2";
if (/^\+CUSD: 0,\"([A-F0-9]+)\"/) {
$ussd_reply = $1;
print "PDU USSD REPLY: $ussd_reply\n" if $opt_v;
last;
}
print "Got unknown USSD message: $_\n" if /^\+CUSD:/ and $opt_v;
}
}

if ($ussd_reply) {
$decoded_ussd_reply = Device::Gsm::Pdu::decode_text7('00'.$ussd_reply);
print STDOUT "USSD REPLY: $decoded_ussd_reply\n";
}
else {print "No USSD reply!\n";}

Начинается всё с того, что процитированный текст сохраняется в файл и делается исполнимым (chmod +x имяфайла). Потом надо установить нужный модуль Perl. Я не знаю поставился ли у меня Perl за компанию с чем-то или был в изначальной установке ubuntu, но так или иначе - он у меня был на ноутбуке. Далее - установка модуля:

sudo perl -MCPAN -e ‘install Device::Gsm::Pdu’

После этого в случае с «чистой» системой всё вроде как уже и должно работать. А вот в моём случае - не заработало. Дело в том, что гуёвая программулина что-то поменяла в настройках и имена портов перестали быть безликими:

$ ls -l /dev/ttyUSB*
crw-rw-- 1 root dialout 188, 1 2010-01-02 21:31 /dev/ttyUSB_utps_diag
crw-rw-- 1 root dialout 188, 0 2010-01-02 21:33 /dev/ttyUSB_utps_modem
crw-rw-- 1 root dialout 188, 2 2010-01-02 21:32 /dev/ttyUSB_utps_pcui

Я запутался в параметрах скрипта, поэтому я грубо влез в сам скрипт. И после секции #defaults я добавил строки:

$opt_r = «/dev/ttyUSB_utps_pcui»;
$opt_s = «/dev/ttyUSB_utps_modem»;

И вот у меня скрипт уже работает. Для чего мне это нужно при наличии гуёвины - например, для автоматизации. Например, можно следить за балансом каждый день и как-то предупреждать меня, если баланс заканчивается. Надо будет побаловаться на эту тему…
(c)

баланс, О жизни, ubuntu, 3g, linux, huawei, perl

Previous post Next post
Up