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.772 Categoria: Python Subcategoria: Manipulação de Arquivos
  • Indicar
  • Impressora
  • Denunciar

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))

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!

Anaconda died after receiving signal 9 [Resolvido]

Slax como USB live

Acertando o relógio do sistema via http e DNS

Proxy ARP: Abrindo um servidor da rede interna para a internet com a ferramenta ip

Passando parâmetros do cliente SSH para o GIT

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

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

Python 3.0: Gravando dicionários em arquivos

Python: Descompilando bytecode

Remover diretórios recursivamente em Python

#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.