RF Switch Con Raspberry y Arduino via “Whatsapp”

Buenas Amigos.

luego de 3 meses pensé  ya es hora de iniciar con el raspberry y dejar a un lado el arduino. por mas que quise, siempre terminaba dejando el raspberry para otras cosas y terminaba con el ardunio en la mano, considero el Raspberry superior al ardunio en cuanto al control y otras prestaciones. sabiendo que no son lo mismo así que comprarlos no seria correcto. por tal motivo opte  no dejar de lado al arduino y mas bien integrar Proyectos ya realizados en el arduino combinándolo con el raspberry, utilizo el Raspberry  como gateway,  ejecutando en el  softwares, motores de BD, interpretes de código, web server,  lo que se me ocurra que pueda funcionar para realizar la GUI y control de mis proyectos .


en adelante estos Proyectos los he bautizado  como “Pi And Eigth”   , Logo  (π & ∞),  pi por el raspberri y eigth por el logo de Arduino que parece un ocho acostado.


Resumiendo mis Publicaciones anteriores se puede ver que mi interes esta centrado en el Control y la Domotizacion del hogar, de echo me inspire en el control de una casa ,sin tener que realizar modificaciones a la instalación eléctrica, utilizando Salidas Eléctricas inalambricas 433mhz ,


Ya he presentado el control de estos dispositivos y realizado diferentes  GUI ,  que permiten de manera gráfica realizar el control del dispositivo eléctrico,  me resulta mas fácil realizar el algoritmo de control en Arduino, ya que dispongo del Sketch  , que incluso me ha tomado tiempo en realizarlos,  reutilizarlos seria lo mas justo para valorar el tiempo invertido y que no queden en el olvido.

En la mayoría de los Sketch , el Arduino  realiza el control mediante simples comandos ASCII, utilizando comunicación serial, esto me  facilita la integración y la confección de diferentes  GUI, utilizando  una sola programación de control.  

Después de diferentes cursos y buenas horas de lecturas puedo listar los siguientes GUI de Control desarrollados para el sketch mencionado , estos GUI fueron elaborados utilizando diferentes lenguajes de Programación, permitiendo realizar el control sobre distintas plataformas.

  1. Control desde el IDE de Arduino Comunicación serial. (windows, Linux, Mac)
  2. Control desde windows con la interfase Grafica realizada en Visual estudio (solo Windows)
  3. Control desde un Router, embedimos dentro del router el GUI, utilizando el lenguaje de marcado HTML sobre OpenWRT . realizando un homebrew router firmware.(multiplataforma)
  4. Control desde whatsapp y HTML, utilizando Raspberry + Arduino. este proyecto nos permite realizar el control desde HTML y Whatsapp de las salidas electricas  .

 Iniciamos

RF Switch Con Raspberry y Arduino via “Whatsapp”

Materiales Necesarios. materiales

  • Raspberry.
  • Arduino.
  • Modulos TX y RX.
  • Chip de cualquier operador.
  • Salidas eléctricas inalambricas.
  • Protoboard.
  • Led.
  • Cables.
  • Internet.
  • Smart Phone con whatsapp.

 

Softwares necesarios :

  • Raspbian.
  • python.
  • Librería Yousup.
  • Librería py-serial
  • Librería  GPIO

Paso 1.

Debemos tener el raspberry con el raspbian instalado, se recomienda que actualicen los repositorios de raspbian, Raspbian es una distro de Debian Adaptada para el Raspberry , en lo personal he utilizado diferentes distribuciones de linux , siendo para mi concepto DEBIAN la mejor, en cuanto a prestaciones a nivel de procesar múltiples servicios  en ambientes de estrés (servidores),y lo sencillo que es trabajar con el sobre su terminal, la documentacion en español es bastante buena, y en Ingles Genial , a nivel de usuario diario Ubuntu es buena opción.

Las actualizaciones se realizan de la siguiente manera:

      • sudo apt-get update.
      • sudo apt-get upgrade.

Actualizamos el Firmware

      • sudo rpi-update

Debemos de instalar componentes necesarios para la instalación de Yowsup.

      • sudo apt-get install python-dateutil
      • sudo apt-get install python-setuptools sudo apt-get install python-dev
      • sudo apt-get install libevent-dev
      • sudo apt-get install ncurses-dev sudo apt-get install pyserial.

Descargamos la librería Yowsup. 

      • git clone git://github.com/tgalal/yowsup.git

Realizamos la instalacion.

      • cd yowsup
      • sudo python setup.py install

listo!!

Paso 2

En este paso realizamos el Registro y pruebas. realizamos el registro del Numero de la Sin-Card del operador que mantenemos, debemos de solicitar un código de registro con el comando:

python yowsup-cli registration --requestcode sms --phone 507xxxxxxxx --cc 507 --mcc 714 --mnc 01

Para Panamá:
cc= codigo de pais 507
mcc= 714
mnc= 01 Cable and Wireless
     02 Movistar
     03 Claro
     04 digicel

Para otros países:
puedes obtener los datos AQUI.
Debemos de recibir un mensaje de texto con con un código de seis dígitos ejemplo A12-A13. 

ahora debemos de enviar nuevamente un mensaje incorporando el código de registro remplazando en register xxx-xxx el código que recibimos por SMS.
python yowsup-cli registration --register xxx-xxx --phone 507xxxxxxxx --cc 507
Debemos de recibir el siguiente mensaje
status: ok
kind: free
pw: xxxxxxxxxxxxxxxxxx=
price: US$0.99
price_expiration: 1427612151
currency: USD
cost: 0.99
expiration: 1456029549
login: 507xxxxxxxxxx
type: new

realizamos una copia del pw: del mensaje recibido. 
Con este mensaje todo marcha bien y ya tenemos nuestro numero registrado y listo 
para utilizar whatsapp desde el Raspberry.

creamos un archivo y en el guardamos los datos que utilizaremos como credencial de conexion para whatsapp.
sudo nano /home/pi/yowsup/config

ahora debemos escribir los datos utilizando el pw que recibimos en el paso anterior.
cc=507
  phone=507xxxxxxxx
  password=xxxxxxxxxxxxxxx=

salimos del editor nano con la tecla "Ctrl+x", salvamos con "Y" y damos "Enter". 

ahora realizamos una prueba, vamos dentro de la carpeta Yowsup
cd /home/pi/yowsup 

iniciamos yowsup-cli demos digitan do en consola:
yowsup-cli demos --yowsup --config config
visualizamos la consola de Yowsup, 
teclamos "/help" nos listara todos los comandos disponibles. 
para iniciar debemos digitar '/L'.

Podemos ver los mensajes que nos envían y enviar mensajes desde la consola otros teléfonos.
Para enviar mensajes
Se utiliza la siguiente linea de comando, se debe remplazar xxxxxx por el numero de teléfono al que se le enviara el mensaje de texto. 
/message send 507xxxxxxxx "tu mensaje de de texto aquí"

con esto culminamos el paso 2.
 

Paso 3

Configuración del Arduino.

Utilizamos el mismo Sketch de la publicacion  IP ROUTER HOME AUTOMATION SERVER 433MHZ Descargamos el  Sketch lo abrimos en el IDE y cargamos a nuestro Arduino.

arduino sketch

la Programación Se basa en un simple proceso de verificar datos recibidos mediante comunicación serial, al recibir datos numéricos en formato ASCII,  los números interpretados en esta programación  son 1-2-3-4-5-6-9-0-DWL al recibir uno dato numérico el arduino lo interpreta en su código y ejecuta la acción según lo programado. realiza la transmisión de los cogidos de control, de nuestro control eléctrico inalambrico . Ver Primera publicación.

Resumiendo según sea el numero recibido = acción a realizar.

1 = Wireless Switch 1 ON

2 = Wireless Switch 1 OFF

3= Wireless Switch 2 ON

4 = Wireless Switch 2 OFF

5 = Wireless Switch 3 ON

6 = Wireless Switch 3 OFF

9 = All Wireless Switch ON
0 = All Wireless Switch OFF 
DWL = controlar un Relay desde el pin 12. 

Las conexiones del modulo transmisor 433. arduino-rcswitch Paso 4

Conexión del Arduino al Raspberry

conexion pi8

Es muy simple..

La conexión del ardunio al Rasberry la realizamos por medio del cable USB, proveyendo voltaje y comunicación al mismo.

Algo Basico de LINUX. 
En la consola de comando de linux(Raspbian), podemos ver el puerto o la ruta de comunicación entre Raspberry y el Arduino de la siguiente manera.
Conectamos el ardunio y esperamos unos segundos usamos el siguiente comando en la consola.
dmesg | grep tty

(IMG)

en mi caso la ruta  /dev/ttyUSB0 es la de comunicacion entre ambos. 
podemos realizar prueba enviando datos desde la consola al ardunio con el siguiente codigo en consola
  echo -e "1" > /dev/ttyUSB0
se encendió el Wireless Switch 1
 echo -e "2" > /dev/ttyUSB0
se apago el Wireless Switch 1

(IMG/video)
hasta ahora todo esta comunicando bien.

 

Paso 5

Control desde nuestro teléfono por medio de mensajes via whatsapp:
recordemos: la configuración de nuestro Arduino recibe los datos de control vía serial, los datos son nuemeros en formato ASCII, dependiendo del valor recibido envía los códigos de control de los Wireless Switch.

Para la automatización seguimos los pasos Yowsup 2.0 Sample app , como lo menciona el autor se debe de crear dos archivos

  • run.py , 
  • layer.py .


Explicamos:

  • en run.py pondremos nuestro numero telefónico y el PW para realizar la conexión.
  • en Layer.py en layer se importan las librerías indicadas por el autor de yowsup para realizar la recepción de mensajes.

 

Layer.py

  • Los mensajes serán interpretados y discriminados por el código que anexamos a Layer.py:De ser una palabra valida (mensaje de texto recibido), el Raspberry realizara el envió del dato numérico correspondiente vía serial a nuestro Arduino. El ardunino recibe el dato por la conexión serial y realiza el control del las salidas eléctricas, enviando los códigos de control por el transmisor 433mhz.
  • De no ser una palabra valida, el raspberry respondera via whatsapp ‘comando no admitido’.

 

Seguridad

Discrimina los teléfonos autorizados para el envío de mensajes, Cuenta con unas lineas dentro del código que nos da la seguridad de recepción de mensajes , al listar solo los números de teléfonos que están autorizados para el envió de mensajes a nuestro Raspberry, si el numero que envía un mensaje no esta dentro de los validos, el Raspberry devuelve ‘no esta autorizado’.

Otras funciones

  • saluda si enviamos el comando 'hola'
  • nos envía la temperatura actual del Raspberry con el comando 'temperatura'
  • nos permite controlar un relay por su GPIO 27 con el comando 'open' o 'Open'.
  • nos permite visualizar por medio de un led la recepción de mensajes conectando un led al GPIO 17.
  • Discrimina las mayúsculas de las minúsculas.
  • al final de cada ejecución del código confirma reenviando un mensaje automático notificando la acción realizada.
  • el control de nuestro proyecto lo realizamos enviando los mensajes para encendido ‘on1’, ‘on2’, ‘on3’ para apagado ‘off1’, ‘off2’, ‘off3’.
  • El código puede adaptarse a cada proyecto que tengas en mente, realizando los cambios que requieran a layer.py.

 

Descargar

run.py

layer.py

Ejecutar el Programa.

dentro de la carpeta de yowsup guardamos los dos archivos pyton

ejecutamos el programa de la siguiente manera

sudo python run.py

Plus!!

Adicional Listo comando en linux que serán de gran ayuda dentro de la consola o por conexion SSH. borrar una carpeta y sus archivos

rm -r -f Nombre_Carpeta

reinicio del rasperry por consola.

sudo reboot

apagar el raspberry desde la consola.

sudo su

sudo shutdown-h now 

Poweroff

halt

(Video)
Advertisements

28 thoughts on “RF Switch Con Raspberry y Arduino via “Whatsapp”

    1. should only change the python file, declare the GPIO as input. and put it in any If the text.

      if you need an example so I can develop the weekend.

      regards

      sorry for the bad English, I am using a translator

  1. Muchas gacias por el aporte. Una consulta no tengo acceso con el comando “/dev/USB0” al Arduino me aparece “Permission denied”, Qué puedo hacer?

    1. En la consola darle permiso de acceso estos errores son de seguridad de linux te recomiendo esta publicación donde detallo la solución : https://jadasupport.wordpress.com/2015/08/28/conectar-arduino-a-base-de-datos-mysql/

      Te dejo el fragmento con la solución:
      al conectar el arduino al puerto usb y tratar de programar o acceder a la consola serial nos debuelve un error de acceso al puerto el cual se corrige cambiando los atributos de acceso al puerto desde la consola de comando digitamos “sudo chmod 777 /dev/ttyACM0”..

  2. Hola disculpa otra consulta, cuando ejecuto el “sudo python run.py” me aparece el mensaje ” No handlers could be found for logger “yowsup.stacks.yowstack””. Alguna sugerencia?

    1. buenas bryan las actualizaciones de whatsapp han hecho que el código dentro del archivo run.py cambie yo esta semana retome el proyecto y en un par de horas lo puse a funcionar. este fin de semana estaré actualizado esta publicación.

      gracias por el comentario
      saludos

    1. buenas jesse las actualizaciones de whatsapp han hecho que el código dentro del archivo run.py cambie yo esta semana retome el proyecto y en un par de horas lo puse a funcionar. este fin de semana estaré actualizado esta publicación.

      gracias por el comentario
      saludos

  3. Hola he probado el código y puedo enviar mensajes con la consola de ayuda y
    /message send 507xxxxxxxx “tu mensaje de de texto aquí”
    tambein puedo ver mensajes que me han enviado.

    mi pregunta es como como puedo ejecutar acciones dependiendo de lo que me envian ? gracias

    1. buenas noches justo esta semana actualice mi proyecto y estoy por actualizar la publicación.
      de paso si revisas en la publicación existen un método que esta en la pagina del creador de la librería.
      https://github.com/tgalal/yowsup/wiki/Sample-Application
      se trata de un sample app el cual al recibir mensajes te devuelve un echo al numero de teléfono que lo envía.
      si revisas en mi publicación existen 2 archivos run.py y layer.py , te explico en run ejecuta la librería en el se deben de poner los datos para conectarnos al servidor de whatsapp los datos so numero de teléfono y el código de conexión que nos envía el servidor (los mismos que usamos en el archivo config), en layer es donde se procesa las libretas de capas de conexión encriptacion envío y recepción de mensajes. si utilizas la librería de ejemplo que esta en la pagina que te di al enviar un msg este te devolverá el mismo msg .

      puedes ver el archivo layer.py que tengo en mi publicación en cual esta modificado para realizar lo siguiente.
      1- solo acepta mensjes de números especificados en el.
      allowedPersons=[‘50765xxxxxx’]
      ap = set(allowedPersons)
      2- al recibir un mensaje lo procesa y ejecuta acciones en mi caso envía un dato especificado al puerto serial y enciende un led conectado al GPIO de la raspberry.

      elif ‘open’ in messageProtocolEntity.getBody(): #se activa el GPIO 17
      GPIO.setmode(GPIO.BCM)
      GPIO.setup(27, GPIO.OUT)
      GPIO.output(27, GPIO.LOW)
      time.sleep(5)
      GPIO.cleanup()
      antwort = ‘GPIO 17 Activado por 5 Segundos’
      elif ‘on1’ in messageProtocolEntity.getBody(): #se activa el RF switch 1
      GPIO.setmode(GPIO.BCM)
      GPIO.setup(17, GPIO.OUT)
      GPIO.output(17, GPIO.LOW)
      com.write(‘1’)
      time.sleep(2)
      GPIO.cleanup()
      antwort = ‘Rf Switch 1 Encendido’

      3- devuelve una respuesta especifica envío el mensaje hola y me responde hola Bienvenido.
      if ‘Hola’ in messageProtocolEntity.getBody():
      antwort = ‘Hola, Bienvenido!’

      de requerir ayuda a la orden.

  4. Antes que todo, muchas gracias por tu tiempo y dedicación en ayudar y compartir tus conocimientos.
    En la actualidad Whatsapp ha cambiado el modo de envío y recepción de los mensajes con cifrado de extremo a extremo. Los archivos que tienes disponibles para la descarga tienen el nuevo cambio.
    Nueva mente gracias.
    Quedo atento a tus comentarios.
    Saludos cordiales.
    Marcelo Castro.

    1. el api se desactualiza cada vez que whasapp actualiza su app. ahora e cambiado la plataforma de control, combinando homebridge y un servidor apache para la conexión y control desde la wan .

  5. Buenas tardes Javier,

    antes que nada aprovecho para enviar un cordial saludo, actualmente estoy tratado de registrar el numero de telefono pero me sale el siguiente error: INFO:yowsup.common.http.warequest:{“status”:”fail”,”reason”:”old_version”}

    Tendras idea de como podria solucionar esto?

    saludos

    1. Disculpa por la demora , el App Yousup sufre des actualizaciones cada vez que whasapp actualiza su app puede que el problema sea este, ya que a mi me pasa lo mismo

  6. Saludos, mil gracias por el aporte. fíjate que al conectarme con “/L” tento dos alertas
    1.(general: disconnected: Connection Closed)
    2.(general: Login Failed, reason: not-autorized)

    Se te han presentado estas alertas!? tienes alguna idea de como solucionarlo?

    Muchas gracias

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s