De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
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.
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.
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.
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
.
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".
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.
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!
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários