Essa semana vi no blog do Mauro Martins um post sobre mandar SMS a partir do Excel (recomendo ler lá antes). Fiquei curioso, mas por opção resolvi utilizar apenas o GNU/Linux. O exemplo a seguir pode ser feito utilizando qualquer sistema Linux, a linguagem Python (com o módulo do PySerial instalado) e um celular smartphone da Nokia (nesse caso um N95). O primeiro passo foi conectar o cabo USB e escolher o modo PC Suite.
No terminal:
# lsusb | grep Nokia Bus 005 Device 004: ID 0421:04f0 Nokia Mobile Phone
É preciso carregar os módulos necessários, se você precisar compilar o kernel são as opções CONFIG_USB_ACM e CONFIG_USB_SERIAL do .config
# modprobe cdc-acm # modprobe usbserial vendor=0x0421 product=0x04f0
Observe que os valores dos parametros do módulo usbserial são obtidos através do comando lsusb. A partir desse ponto será criado um device node referenciado por /dev/ttyACM0. O código é bem simples, aonde apenas instanciamos um objeto da classe PySerial e utilizamos os métodos de escrita e leitura.
import serial ser = serial.Serial() ser.port='/dev/ttyACM0' ser.baudrate=19200 ser.rtscts=1 ser.timeout=3 ser.open()
Depois foi apenas usar os métodos write() e read() para fazer a prova do conceito. Como eu não sabia a quantidade de bytes a serem recebidos “chutei” um valor (10 bytes) e especifiquei um timeout para sair.
ser.write('AT'+'\x0d\x0a') # AT ser.read(10)
O exemplo de envio de um SMS que o Mauro apresentou pode ser feito dessa forma, lembrando que a extensão ‘\x0d\x0a’ é o valor hexadecimal para o terminador de linha (o equivalente a pressionar [ENTER]).
ser.write('AT+CMGF=1'+'\x0d\x0a') time.sleep(2) ser.write('AT+CMGS="0XXYYYYYYYY"'+'\x0d\x0a') time.sleep(2) ser.write('www.coding.com.br'+'\x0d\x0a\x1a') # envia a mensagem (www.coding.com.br) para o número definido
Meus primeiros testes só funcionaram quando dei um atraso (não se esqueça do import time) entre cada comando, abritrariamente escolhi 2 segundos, mas acredito que esse valor possa ser menor (fiz testes e funcionou). Passei uma boa parte da noite experimentando diversos comandos AT que encontrei no manual, os comandos de faziam a requisição de alguma informação: nível do sinal, número de série, fabricante, etc funcionaram, mas quando tentei fazer uma requisição da lista de contatos ou das mensagens SMS não obtive sucesso (mas é claro que fiz testes rápidos sem dar atenção merecida a documentação).
Uma solução para fazer o equivalente no Excel é exportar a planilha no formato CSV e fazer um parser (lembrando que o Python já tem um módulo pronto que faz isso) ou então até mesmo fazer um plug-in para o OpenOffice
Ótimo artigo, testei aqui e funcionou no Ubuntu 9.04, com um Nokia 5310.
Link | dezembro 8th, 2009 at 15:53