Pular para o conteúdo

Usando o Yowsup para enviar comandos ao Shell

Dica publicada em Python / Manipulação de Arquivos
Carlos Affonso Henriques. capitainkurn
Hits: 16.769 Categoria: Python Subcategoria: Manipulação de Arquivos
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Usando o Yowsup para enviar comandos ao Shell

Agora aprendendo Python, estou que nem criança no dia 25 de dezembro!

Estou fazendo ensaios para modificar alguns sistemas automatizados, tanto industrial quanto residencial. Estamos testando uma solução empregando o WhatsApp, onde o cliente recebe alertas em seu smartphone e através do próprio instant messenger, envia comandos a um sistema implementado com Raspberry Pi, para obter status de diversos dispositivos e comandá-los.

No caso específico, são bombas d'água de um sistema de drenagem.

Entendam que isso é só um teste e ainda não decidi se essa solução será posta em produção, sua finalidade é apenas didática.

Para quem não conhece o Yowsup, é um cliente WhatsApp para Shell escrito em Python. O objetivo não é fazer um tutorial dele, que pode ser encontrado facilmente.

Segue uns dois, para o leitor "sair do chão":
Depois dele devidamente configurado, vamos fazer uma pequena modificação no código do programa para que ele possa interagir com o Shell do Linux. No arquivo foo/yousup/yowsup-master/src/Examples/ListenerClient.py, busque a seguinte linha:

print("%s [%s]:%s"%(jid, formattedDate, messageContent))
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Transforme o comando em uma variável e comente esta linha, ela será chamada pela variável que criaremos:

variavel=("%s [%s]:%s"%(jid, formattedDate, messageContent))
print variavel

Imediatamente abaixo, vamos fazer uma operação de abertura, escrita e fechamento de um arquivo, este sim é de onde extrairemos o comando do Shell. Claro que isso pode ser feito de outras formas, como por exemplo, com a dica que postei a alguns dias aqui no VOL, mas gostaria de dar ênfase à abertura e escrita de arquivos no Python.

#Notem o parâmetro "w"... se quiserem aditar o arquivo usem o parâmetro "a"
arquivo=open("testecmdshell.txt", "w")

#Nesta linha o Python irá escrever no arquivo a saída do comando print("%s [%s]:%s"%(jid, formattedDate, messageContent)) que foi anteriormente declarado na variável "variavel"
arquivo.write(variavel)

#E finalmente... Fechamos o arquivo.
arquivo.close()

Pronto! Agora vamos colocar o programa yousup-cli em modo listen para receber mensagens:

foo/yowsup/yowsup-master/src/yowsup-cli -l -w -c config.5521987654321

Agora, tudo é muito simples. É só Shell.

Exemplo:

while true; do $(cat <(cut -f 3 -d":" foo/yowsup/yowsup-master/src/testecmd.txt; cat /dev/null > /root/yowsup/yowsup-master/src/testecmd.txt)); done

Envie o comando ifconfig pelo cliente WhatsApp do seu telefone e veja o resultado!

É claro que essa gambiarra não faz parte de nada, é apenas um "Protoboard" para mostrar que o limite do software livre é a criatividade de desenvolvedor.


Bom trabalho a todos!

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Endereço IP como variável

Executando comandos do Shell Bash pelo Python

Obtendo o Dockerfile a partir de uma imagem

Limitando a 1 login por usuário

Instalar o CentOS a partir de um chaveiro USB

Python: Descompilando bytecode

Python - UnicodeDecodeError: 'utf-8' codec can't decode byte [Resolvido]

Expandindo o Til pelo Diretório Inicial do Usuário em Python

Remover diretórios recursivamente em Python

Python 3.0: Gravando dicionários em arquivos

#2 Comentário enviado por capitainkurn em 05/01/2015 - 10:32h
Boa, que bom que gostou! Acho que a dica seria mais visível se eu escolhesse outro título Rsssss, ao invés de "Usando o Yowsup para enviar comandos ao Shell" "Usando o WhatsApp para enviar comandos ao Shell".
#3 Comentário enviado por fabiobp2000 em 15/03/2015 - 15:59h

Como mandar a mensagem para um grupo do whatsapp?
#4 Comentário enviado por capitainkurn em 18/03/2015 - 15:28h

[3] Comentário enviado por fabiobp2000 em 15/03/2015 - 15:59h


Como mandar a mensagem para um grupo do whatsapp?


SInceramente não sei, ainda não precisei dessa funcionalidade e não explorei o alicativo a fundo, mas não vejo por não poderia ser feito.

Contribuir com comentário

Entre na sua conta para comentar.