You are currently browsing the tag archive for the 'perl' tag.

Num outro artigo tinha escrito sobre o envio de sms com o huawei e220 usando a libraria do CPAN Device::Modem para este caso comigo não resultou. O envio das sms nem sempre funciona, o texto enviado pelo atsend não é emitido pelo modem.
Sem conseguir confirmar de onde originava o problema pois a mesma string pelo minicom funciona sem problemas, usando um outro pc isto tudo funciona sem problemas sobrou a possibilidade de ser diferença na $LANG ou problema de configuração dos locales mas nada tem a ver pois as config’s estão iguais muda sim a versão do perl.

Para contornar todas estas dores de cabeça decidi-me a usar o smstools que funciona sem problemas só preciso de ler as mensagens ler os dados que pretendo dos ficheiros e está a funcionar sem grandes dores de cabeça.

De qualquer modo fica o código para envio das sms usando o Device::Modem funciona no ubuntu 8.04.

# Enviar sms
sub Enviar{
my ( $number, $out, $fromqueue ) = @_;
# Start modem connection
my $OK;
my $new;

my $modem = new Device::Modem( port => ‘/dev/ttyUSB0′ );

if ( $modem->connect( baudrate => 115200 ) ) {
} else {
print “Problem with connection… \n”;
exit 0;
}

# don’t echo my output
$modem->echo (0);

# Initialize
$modem->atsend( ‘ATZ’ . Device::Modem::CR );

# set text mode
$modem->atsend( ‘AT+CMGF=1′ . Device::Modem::CR );
chomp($out);
chomp($number);
# Start sending response
$modem->atsend( ‘AT+CMGS=”‘.$number.’”‘ . Device::Modem::CR );
$modem->atsend( $out . ” \cZ”  );
$modem->atsend( “\cZ”);

# Get Answer
$OK = $modem->answer();
chomp($OK);

if ( $OK =~ /OK/ ){
print “\tenviado\n”;
return 1;
}else {
if ( $fromqueue != 1 ) {
#QueueOut($number, $out);
print “Queue to send later\n”;
}
print “\tnot enviado\n”;
}

$modem->disconnect();

}

Esta função integra-se no meio de outras que “servem um propósito maior”.

A necessidade de criar um serviço para receber mensagens de telemóvel (SMS) surgiu, um ex-colega aqui no trabalho já tinha andado a “inventar” à uns tempos com isto, eu sabia que ele tinha posto a coisa a andar com o huawei e220 e pelos vistos funciona com mais modelos para além deste, sendo para isto necessário estabelecer a porta de ligação para o dispositivo.

Um tutorial à maneira e um script de perl não muito perfeito  para testar a coisa…

#!/usr/bin/perl

use Device::Modem;

# Validade do numero
sub autorizado {
my ($numero) = @_;

open( numeros, “< numeros.txt”);
@contactos = <numeros>;

foreach $tlf (@contactos){
chomp($tlf);
# debug code
# print ” — “.$tlf . ” ” . $numero . “\n”;
if ( $tlf == $numero ) {
return true;
}
}
return false;
}

$modem = new Device::Modem( port => ‘/dev/ttyUSB0′ );

if ( $modem->connect( baudrate => 115200 ) ) {
} else {
exit 0;
}

$modem->echo (0);

if ( $modem->atsend( ‘AT+CMGL=”all”‘ . Device::Modem::CR )== 1 ) {
# done ;
}
$an = $modem->answer( );
@a     = split(/\n/, $an);

$k = $hit = 0;

foreach $answer (@a){
if ( ($answer =~ /.READ./)) {

($cm, $linha)  = split(/:/, $answer);
($id,undef, $number, undef, $data)  = split(/,/, $linha);
$number =~ s/\”//gi;
$hit = 1;
}else{
if($hit == 1 ) {
$bool = autorizado($number);
if ( $bool eq true ) {
print “numero = “.$number.” msg = “.$answer.”\n”;
$hit = 0;
}
}
}
}

$modem->disconnect();

Ficou a funcionar incluindo com verificação de números o que permite usar respostas automáticas a mensagens.

Nota: Apenas um programa pode usar a porta a cada execução a comunicação com o equipamento é  assíncrona e a lista de numeros.txt tem de conter o +351 antes do número ou altera-se o código.

Um breve teste que resultou em algo produtivo viva a class do cpan Device::Modem

Estava à frente do laptop a tentar me lembrar do título de uma musica no top ten. Após uma pesquisa no google encontrei o site que me dá a informação e por brincadeira em menos de um minuto surgiu o código em perl para me fazer a listagem na shell.

$ vi top10.pl

#!/usr/bin/perl

@var = `/usr/bin/lynx –dump http://www.seekalyric.com/music_charts/Europe`;

$go=0;
foreach $me (@var) {
chomp($me);
if ( $me =~ /.Chart last updated at./ ) {

print $me.”\n”;
$go = 1;
}

if ( $go == 1 && $me =~ !/.Chart last updated at./) {
$me =~ s/\[up\.gif\]//i;
$me =~ s/\[\d+\]//;
print $me.”\n”;
}

if ( $me =~ /Recommended Links/ ) {
exit 1;
}
}

:wq

$ chmod 755 ; ./top10.pl

Obrigado “Spidering Hacks” e http://www.seekalyric.com/music_charts/Europe

À três semanas contínuas que só vejo perl à frente para diferentes trabalhos, é o problema de php não estar nativamente incorporado em *nix.

Back to work…

Fotos do Flickr

Rua perto de Notre Dame

Trocadero garden

Parc Monceau

Topo das casas na Rue Renequin

Notre Dame

Quarto de Luis XV

More Photos

MyBookmarks

My Amazon.com Wish List