Logotipo Dicas-L, por Ricardo Burile

Busca

Visite também: Segurança Linux ·  UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

Você está aqui: Home  → Arquivo Dicas-L

 

Assine a Lista Dicas-L

Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.

Enviando e Recebendo SMS pelo modem 3G

Colaboração: Bruno Buys

Data de Publicação: 17 de January de 2010

Você pode usar o seu serviço 3G para enviar e receber mensagens SMS, além de navegar. Eis aqui o que eu fiz para conseguir isso, junto com algumas observações sobre as linhas de comandos e os programas disponíveis.

Modem 3G usado

  • ZTE MF622
  • lsusb:
  • Bus 001 Device 004: ID 19d2:0001 ONDA Communication S.p.A.

Operadora

  • Vivo
  • Plano Vivo Zap 250Mb

Programas usados

Para enviar

  • gsmsendsms

Para receber e/ou enviar usando o spool

  • gsmsmsd (daemon)

Ambos contidos no pacote gsm-utils, no Debian Lenny

O dispositivo padrão de modem que estes dois programas procuram é o /dev/mobilephone. Por isso o dispositivo teve que ser especificado, nas linhas de comando abaixo.

1. Configurando

Para enviar e receber mensagens, é necessário saber o dispositivo de modem a ser usado e o número telefônico da central de envio de mensagens.

1.1. Sobre o dispositivo de modem:

Com o modem MF622 configurado segundo a dica "Modem 3G ZTE MF622 com Operadora Vivo, no Debian Lenny", você terá três dispositivos ttyUSBx:

  /dev/ttyUSB0
  /dev/ttyUSB1
  /dev/ttyUSB2

Um pouco estranho, mas é isso mesmo, três dispositivos com um só modem. Aqui no meu equipamento de teste o USB1 está inativo. Então usei os modems ttyUSB0 e ttyUSB2.

2. Enviando SMS

Para enviar uma mensagem sem necessariamente estar rodando o daemon, você pode usar diretamente o gsmsendsms:

  gsmsendsms -d /dev/ttyUSB0 -C +550101102010 -b 19200 91119222 "Oi, fulano"

onde:

-d dispositivo usado
-C número da central de envio de mensagens da Vivo.

(Isso aqui eu descobri no blog do Avi Alkalay. Leia isso e veja como é incrível as operadoras não saberem/quererem informar direito o consumidor. Anatel, cadê você?!)

Para outras operadoras, é necessário saber os telefones das suas centrais. Tentei descobrir isso, mas foi uma busca inútil, pois internet afora, os usuários dizem que os números parecem mudar com o tempo. Alguém confirma? Além disso, não há como testá-los sem assinar o serviço. Então, vá em frente e procure os da sua operadora, você mesmo.

  -b : baudrate (outros valores podem ser testados aqui)

O gsmsendsms, então, envia o SMS do número do seu modem para o número celular 91119222, com a mensagem "Oi, fulano".

3. Recebendo e enviando SMS

A forma de receber mensagens é rodando um daemon que fica ouvindo o dispositivo:

  gsmsmsd -d /dev/ttyUSB2

O daemon vai ficar ocupando o terminal, à espera de mensagens. Quando chegar uma, ele imprimirá na tela, assim:

  Type of message: SMS message
  ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------
  Message type: SMS-DELIVER
  SC address: '550112102010'
  More messages to send: 1
  Reply path: 0
  User data header indicator: 0
  Status report indication: 0
  Originating address: 'meu-número-de-cel'
  Protocol identifier: 0x0
  Data coding scheme: default alphabet
  SC timestamp: 01/06/2010 02:14:20 PM (+0200)
  User data length: 22
  User data header: 0x
  User data: 'teste pra dicas-l'
  ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ---------

(O que importa é o texto do SMS, que será a última linha dessa saída, o "User data")

O único problema aqui é que eventualmente o gsmsmsd erra e sai, com avisos semelhantes a esse:

  gsmsmsd[ERROR]: unexpected response '+ZMTime: 5;' when sending 'AT'

E se isso acontecer, você para de receber os SMS. O que eu fiz foi embrulhar o gsmsmsd num laço while, que roda o programa novamente, se ele sair. Assim:

  while true ; do
        time gsmsmsd -d /dev/ttyUSB2 -s sms -C +550101102010
  if [ $? = 1 ] ; then
        continue
        else
        break
  fi
  done

(o "time" é opcional, serve para mostrar por quanto tempo o daemon rodou, antes de errar. Pode omitir, se quiser.)

Nesse laço while, inseri também outros parâmetros, veja:

  -s sms

Define como spool o diretório "sms", dentro do meu $HOME

  -C +550101102010

Instrui o daemon a ligar para esse número para o envio da mensagem.

Com isso rodando, posso enviar um SMS assim:

  echo "91119222
  Nova mensagem de testes para dicas-l" > sms/sms1

O comando acima mostra como o arquivo deve ser salvo em sms/:

Primeira linha com o telefone do destinatário.

Segunda em diante, texto da mensagem.

Qualquer nome de arquivo serve.

Dois detalhes

a mensagem deve ter no máximo 160 caracteres. O daemon consulta o spool a cada cinco segundos. Depois de enviado o SMS, o arquivo é apagado.

Nesse laço, você pode comandar Ctrl+C (a forma indicada na man page para sair), que o laço interrompe. Se o gsmsmsd errar e sair, cai no caso do "continue", e o laço roda novamente o daemon.

Repare que, como existem dois dispositivos ativos, você pode fazer combinações de funcionalidades com eles. Você pode rodar o wvdial no primeiro, se conectar, e deixar o segundo para ouvir e enviar mensagens.

Outros programas a serem testados

gammu - Ferramenta de linha de comando para controle de modems. Tem diversas funções interessantes, inclusive de resgatar mensagens armazenadas no modem, o que não consegui com o gsm-utils. Em meus testes, teve um funcionamento irregular. Após um certo momento, parou de se comunicar com o dispositivo, definitivamente. Por isso não pude usar em produção. Provavelmente o suporte ao dispositivo seja incompleto.

kmobiletools - Ferramenta gráfica do kde, para controle de modems e celulares. Com funções de recebimento e envio de mensagens, mostrador de intensidade de sinal da rede e da bateria (para celulares), caderno de endereços e outras. Bem interessante, também, inclusive porque permite configurar ações a serem executadas quando uma mensagem chega, como alguma forma de chamar a atenção. Isso é melhor do que a solução de ter a mensagem mostrada no terminal, onde pode passar despercebida. O problema com esse programa, novamente, é o suporte ao dispositivo. O modem usado é parcialmente suportado, e o envio de mensagens não funcionou confiavelmente. Além disso, às vezes as mensagens chegam com caracteres incompreensíveis.

E é isso. Feliz sms'ing!

Veja a relação completa dos artigos de Bruno Buys

Stumble Upon Digg This Del.icio.us Twitter Recomendar este artigo a um amigo Entre em contato Formato PDF
Newsfeed RSS
Formato para impressão
StumbleUpon Digg Del.icio.us Twitter Recomendar Contato PDF RSS Imprimir

Referências Adicionais

Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.

Avalie esta dica

  • Currently 3.02/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.0 /5 (218 votos)

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script
Sem e Seo: Dominando o Marketing de Busca


Encontre imóveis, apartamentos e casas a venda no Imobilien
Saiba mais

Aprenda Inglês em Casa