Page 9 - Revista_60.pub
P. 9

TEMA DA CAPA







                                                                     RASPBERRY PI + ESP8266 = “LIGHT”


                  }                                           def arp_monitor_callback(pkt):
               }                                                  if ARP in pkt and pkt[ARP].op in (1,2):
             }                                                        mac= pkt.sprintf("%ARP.hwsrc%")
           }                                                          for key, val in data.items():
                                                                          if val == mac:
         }                                                                    command="lighton"
                                                                              #lê as boas vindas
         void processCommand(String command)                                  tn.read_until("Yellow! ")
         {                                                                    #escreve o comando
           //ligaluz                                                          tn.write(command + "\n")
           if (command.indexOf("lighton") > -1)                               #sai
               {                                                              tn.write("exit\n")
                 digitalWrite(Relay1, LOW);   //Turn ON               return pkt.sprintf("%ARP.hwsrc%")
                                                    //relay    sniff(prn=arp_monitor_callback, filter="arp",
                 server.println("Ligado" );                                                            store=0)
                 commandString = "";
                 return;                                            Esclarecendo alguma dúvida que ainda possa existir
              }                                               nesta  fase  do  projecto…  Para  se  obterem  os  endereços

               //desligaluz                                   MAC  de  todos  os  devices  que  se  ligam  à  rede,  usamos  o
               if (command.indexOf("lightoff") > -1)          código python descrito, recorrendo ao scapy, de forma sim-
               {                                              plificada fazendo um scaner de ARP. A comunicação do lado
                 server.println("Desligado" );
                 digitalWrite(Relay1, HIGH);    //Turn OFF    do  Raspberry  Pi  é  feita  implementado  um  cliente  de  telnet
                                                   //relay    que se ligará ao nodeMCU e enviará os comandos por ele
                 commandString = "";                          suportados.  Para  comparar  os  MAC's  conhecidos  com  os
                 return;
               }                                              MAC's  dos  devices  conectados,  é  utilizado  um  ficheiro  de
           commandString = "";                                texto e por simplicidade, a comunicação entre o Raspberry e
         }                                                    o nodeMCU, optámos por usar o protocolo telnet. Mais uma
                                                              vez pelo motivo da simplicidade e exemplo educacional, uma
               Com esta parte já carregada no ESP8266, passemos   vez que é dos protocolos mais conhecidos que proporciona
         à  próxima  parte  do  código.  Para  executarmos  o  código  no   facilmente a comunicação baseada em texto interativo bidire-
         Raspberry,  podemos  recorrer  a  um  editor  de  texto.  Neste   cional usando uma conexão de terminal virtual.
         caso foi usado o Scapy. Caso não tenham instalado o mes-
         mo, basta executar o comando:
                                                                        Hoje em dia, muito
         $ sudo pip3 install scapy

               Uma vez instalado o scapy podemos colocar o código   se tem falado do con-
         em execução “permanente” recorrendo ao comando:

         $ screen -S rpi -d -m /usr/bin/python3 /home/pi/      ceito de casa inteli-
                                             abracadabra.py
                                                               gente através de IoT.

         Código do Raspberry PI
                                                               Isto é, tornar a nossa
         #! /usr/bin/env python
         import csv
         from scapy.all import *                               casa inteligente atra-
         import getpass
         import sys
         import telnetlib                                      vés de pequenos pro-

         #globalvars
         HOST = "esp8266"                                      jectos. Se pesquisar-
         #cria telnet object
         tn = telnetlib.Telnet(HOST)                           mos um pouco, facil-
         mac=""
         command=""
                                                               mente temos acesso
         #readMacsFile
         data={}
         with open('mypll.txt') as fin:                        aos           mais            variados
             reader=csv.reader(fin, skipinitialspace=True,
         quotechar="'")
             for row in reader:                                exemplos dos passos a
                 data[row[0]]=row[1:]
         #for key, val in data.items():
         #        print (key,val)                              seguir para de facto




                                                            9
   4   5   6   7   8   9   10   11   12   13   14