Pitombera’s Weblog

Just another weblog

Perl + GSM + Imaginação = Coisas Legais

Publicado por pitombera em Junho 22, 2008

Introdução

Estava procurando por algo para intermediar a comunicação entre meu Celular( Motorola v3 ) e o Linux/FreeBSD, quando por acaso encontrei um módulo em perl que não era bem o que eu queria mas achei bastante interessante. Vi a possibilidade de manipular os sms recebidos e formatar o envio de sms, que pode ser bastante útil em um cenário em que a internet não está disponível ou a demanda de sms é baixa.

Instalação

No FreeBSD é necessário os módulos umodem e ucom, adicionamos então ao ‘/boot/loader.conf’:

ucom_load=”YES”
umodem_load=”YES”

Após reinicio( sim, reinicio, quando tentei carregar o módulo com o kldload deu panic ) do sistema, quando plugado o celular à USB veremos uma mensagem semelhante a essa na saída do comando ‘dmesg’.

ucom0: <Motorola Inc. Motorola Phone (V3), class 2/0, rev 1.10/0.01, addr 2> on uhub1

No Linux será necessário o modulo cdc_acm, dê uma olhada.

Pronto, tudo ‘ok’ para os próximos passos.

Perl:

Iremos instalar o módulo Device::Gsm que irá intermediar o processo, temos duas formas para isso.

  1. CPAN
  2. Instalação manual do módulo

1 – # cpan -i “Device::Gsm”

2 – # wget -c ‘http://search.cpan.org/CPAN/authors/id/C/CO/COSIMO/Device-Gsm-1.48.tar.gz’ && tar -zxvf Device-Gsm-1.48.tar.gz && cd Device-Gsm-1.48 && perl Makefile.PL && make && make install

Não irei me aprofundar na instalação do módulo perl, há bastante material na internet sobre o assunto, aqui ou aqui

Utilizando

Agora é o momento de soltar a criatividade, no source tem um diretório de exemplos com alguns scripts. A documentação dos métodos pode ser vista aqui.

Exemplo Nagios

A primeira coisa que pensei foi em usar junto com o nagios, quando pesquisei na documentação sobre notificações é sugerido o sms_client que parece ser interessante mas um pouco mais complicado.
Na área de desenvolvimente há também a gsmlib para o pessoal mais low-level.

O script que eu adaptei funcionou 100% com o v3 e o v550 da Motorola.

Script de exemplo adaptado.

O script em sim é auto-explicativo mas vamos lá.

# echo “Mensagem de exemplo” | perl script.pl numero*

*O numero é composto pelo DDD( 2 dígitos ) + número do celular( 8 dígitos ).

Conclusão

Quando me deparei com o módulo em Perl e não achei nenhuma informação sobre o mesmo em Português, senti-me motivado para escrever sobre o mesmo, achei o módulo bastante interessante e com diversas possibilidades de uso. Eu citei apenas um exemplo( Imaginei várias formas de uso mas optei por postar a mais coerente com a realidade) mas a medida que o pessoal for usando e criando seus próprios scripts, irei atualizando o artigo. Espero ter sido claro e objetivo, estou no aguardo por dúvidas, críticas e exemplos.

Gostaria de agradecer ao Redpill do #archlinux.br@irc.freenode.net que não quis testar o script.

9 Respostas para “Perl + GSM + Imaginação = Coisas Legais”

  1. redpill disse

    denada :)

  2. Helljawz disse

    Para um adm de sistema, seria interessante receber logs pelo celular. Poderia fazer isso com o crontab.

  3. Alex disse

    Por que no motorola V3re só manda SMS com 18 caracteres?

    • pitombera disse

      Alex,
      Sinceramente não sei te informar, se não me engano o v3 testado era um v3i. O script faz uma limitação de 160 caracteres, o que não chega nem perto dos 18 caracteres que você diz( quebras de linha? ). Em relação à questão do modelo, não creio que tenha algo com o problema já que o módulo usa comandos AT para o envio de mensagens, citei apenas por ser uma diferença do ambiente testado.

      Seria interessante você passar mais informações( ambiente testado, o script usado, a forma como chamou o script, essas coisas )

      []’s

  4. Alex disse

    Ambiente é simples instalei os requisitos minimos para funcionamento do script
    estou utizando sem quebras de linha texto puro inclusive sem espaços ou acentuação
    fiz conforme o procedimento.
    ex de alguns testes
    echo “Hostname:RoteadorPlanta4-Status:Down-IP:172.16.32.1” | perl script.pl 1591111111
    nem manda a mensagem.
    Quando quebro a mensagem para 18 caracteres a mensagem vai sem erro.
    No host agora
    [root@localhost plugins]# echo “Hostname:Tsors2k013-Status:Down” | perl moto.pl 1591111111

    ok! connected and registered to network.

    send.log
    Sat May 9 00:49:16 2009 moto.pl warning ERROR in sending SMS:

    [root@localhost plugins]# echo “Hostname:Tsors” | perl moto.pl 1591111111

    O sms chega

    Mostrando os warning: mais de 18 caracteres:

    [root@localhost plugins]# echo “Hostname:Tsors2k004-Status:Down” | perl -W -U moto.pl 1591111111

    ok! connected and registered to network.
    Use of uninitialized value in concatenation (.) or string at /usr/lib/perl5/site_perl/5.8.8/Device/Gsm.pm line 772, line 1.

    Mostrando os warnings: menos de 18 caracteres:

    [root@localhost plugins]# echo “Hostname:Tsors2k” | perl -W -U moto.pl 1591111111

    ok! connected and registered to network.

    Não da erro algum.

    Qualquer ajuda que vier ficarei agradecido.

  5. Alex disse

    A por favor apague o n. do meu celular acabei colando sem querer, esqueci de dizer que estou utilizando Linux

    [root@localhost ~]# lsmod
    Module Size Used by
    cdc_acm 18145 0

    O módulo cdc_acm já estava disponivel.
    [root@localhost ~]# cat /etc/redhat-release
    CentOS release 5.3 (Final)
    Kernel – 2.6.18

    ———–
    [root@localhost ~]# lsusb
    Bus 004 Device 002: ID 22b8:4902 Motorola PCS Triplet GSM Phone (AT)
    Bus 004 Device 001: ID 0000:0000
    Bus 005 Device 001: ID 0000:0000
    Bus 002 Device 001: ID 0000:0000
    Bus 001 Device 001: ID 0000:0000
    Bus 003 Device 001: ID 0000:0000

  6. Alex disse

    Nenhuma dica?

  7. [...] Perl + GSM + Imaginação = Coisas Legais [...]

Deixe uma resposta

XHTML: Você pode usar estas tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>