En este artículo aprenderemos cómo controlar nuestros electrodomésticos IoT utilizando la aplicación de mensajería WhatsApp para comunicarnos de forma fácil y efectiva con estos dispositivos.
Por lo tanto, enviaremos mensajes de WhatsApp a varias “luces encendidas” y se encenderán las luces de nuestra casa.
Componentes necesarios
Herramientas requeridas/bibliotecas requeridas:
- Biblioteca API de WhatsApp – Yowsup
- Biblioteca de comunicación en serie basada en Python – pyserial
- Máquina basada en Linux
- IDE de Arduino
Informaciones técnicas
Para controlar cualquier cosa en Internet, necesitaremos un protocolo. WhatsApp funciona en XMPP (Protocolo extensible de mensajería y presencia). Usaremos su API para enviar y recibir mensajes. Los mensajes recibidos actuarán como comandos para una tarea específica, como encender/apagar la luz.
Diagrama de bloques

Figura 1 Domótica basada en WhatsApp
- Los electrodomésticos están conectados a través de un relé a un microcontrolador que los controla cuando se recibe un comando específico de encendido/apagado a través de comunicación serie.
- El microcontrolador (placa Arduino UNO 3) está conectado a un sistema basado en Linux mediante comunicación serie.
- Se instala una API de WhatsApp (Yowsup) en el sistema con un número de teléfono. El cual puede enviar y recibir mensajes de WhatsApp.
Diagrama de circuito

Figura 2 LED conectado a Arduino Uno
¿Como funciona el sistema?
- Cuando alguien envía un mensaje al número donde está instalado WhatsApp en el sistema Linux.
- El mensaje se recibe en el sistema a través de un script de Python que ejecuta un script de recepción de mensajes y se analiza en busca de comandos como "encender/apagar las luces".
- Cuando cualquier comando coincide con los comandos predefinidos, el script envía ese comando al microcontrolador conectado al puerto de comunicación serie.
- Si se recibe en un mensaje el comando “encender luces”, el script entiende que es para encender la luz, por lo que enviará el comando “ON” al microcontrolador a través de comunicación serial. El controlador encenderá la luz encendiendo el relé.
Los dispositivos IoT no son compatibles directamente con la API de WhatsApp, por lo que los datos deben transferirse de un protocolo a otro. En el próximo artículo, “Puente de protocolo”, veremos cómo redirigir mensajes enviados desde WhatsApp a MQTT.
Instalación de la API de WhatsApp en Linux
Paso 1: preparar el sistema
Esta API funciona en Python, por lo que primero debemos configurar el entorno para instalarla en el sistema. Podemos hacer esto escribiendo el siguiente comando en la terminal.
sudo apt-obtener actualización
sudo apt-get instalar python-dateutil
sudo apt-get install python-setuptools
sudo apt-get instalar python-dev
sudo apt-get instalar libevent-dev
sudo apt-get instalar ncurses-dev
Paso 2: descargar la API
Ingrese el siguiente comando en la terminal.
git clon git://github.com/tgalal/yowsup.git
Ahora vaya a la carpeta youwsup y escriba lo siguiente para instalarlo en el sistema
instalación de sudo python setup.py
Ahora que hemos instalado esto en nuestro sistema, es hora de registrar el número de WhatsApp.
Nota: Solo se permite un número por dispositivo en WhatsApp, por lo que necesita un número nuevo para instalar WhatsApp en Linux.
Paso 3: configurar la API
- La API de Yowsup viene con una utilidad de línea de comandos que se utiliza para el registro.
- Para registrar el número de teléfono, debemos descargar la última APK de WhatsApp y hacer lo siguiente.
- Necesitamos descargar la última versión de WhatsApp, calcular un hash MD5 y escribirlo en un archivo en la API de WhatsApp. De esta manera, WhatsApp no falla y solicita una actualización.
- Para ello sigue los pasos.
- Descargue este archivo –py
- Descargar WhatsApp – apk
- Ponlos en una carpeta y escribe el siguiente comando.
Python dexMD5.py WhatsApp.apk
- Verá el siguiente resultado
Versión: 2.17.344
ClasesDex: OxVSHnBDYNBZmsgagatF9+A==
- Ahora escriba los valores Version y ClassessDex en un archivo dentro de la ubicación de la API
yowsup/env/env_android.py
- Ahora escriba el siguiente comando para reinstalar la API
compilación python setup.py
instalación de python setup.py
Paso 4.- Registrar al usuario
4.1 – Obtención del código de verificación
Ahora viene el registro en el servidor de WhatsApp, que se puede realizar a través de la utilidad de línea de comandos “yowsup-cli”, usando el siguiente comando.
registro de Python yowsup-cli –requestcode sms –phone 91xxxxxxxxxx –cc 91 –mcc 222 –mnc 10 -E android
Introduce tu número de teléfono en 91XXXXXXXXX
Los códigos MCC y MNC se pueden encontrar en este enlace:
Después de ingresar el siguiente comando, recibirá un mensaje con un código de verificación de 6 dígitos. Mantenga este número almacenado. Se utilizará en el siguiente paso.
4.2 – Obtención de contraseña para iniciar sesión
Para iniciar sesión en WhatsApp, necesitaremos una cadena de contraseña, una cadena base64. Podemos obtener esto reemplazando xxx-xxx con el número de seis dígitos.
registrar python yowsup-cli –registrar xxx-xxx –teléfono 91xxxxxxxxxx –cc 91 -E android
Después de eso verás un resultado como este
estado: bien
tipo: gratis
pw: xxxxxxxxxxxxxxxxxx= #esta es la contraseña
precio: 55 rupias
precio_expiración: 1509040085
moneda: INR
costo: 55.00
validez: 4444444444.0
iniciar sesión: 91xxxxxxxxxx
tipo: nuevo
Con esta instalación obtenemos dos cosas: un número de teléfono en el que está instalada nuestra API y una contraseña para iniciar sesión. Manténgalos almacenados.
Nota: el número de teléfono debe usarse con el código de país
Teléfono – 91XXXXXXX
Contraseña – Gbuioa254ui25j2=XXXXX
Desarrollando el código fuente
Para desarrollar el código para la automatización, tenemos que ver cómo se puede llamar a la API. Además, necesitamos escribir un pequeño script en Arduino para controlar el relé/led. Es posible que deba seguir pasos para comprender cómo funciona el código fuente.
código del sistema linux
De este lado implementaremos estos recursos.
- Comprender la arquitectura API
- Llamando a la API
- Controlando los dispositivos
Comprender la arquitectura API
La aplicación Yowsup Python funciona en pilas de capas. Los datos se pueden transferir de una capa a otra.
Si queremos enviar un mensaje, lo enviaremos a la capa inferior.
self.toLower(entidad de protocolo de mensaje saliente)
Si desea recibir mensajes, se accederá a ellos desde la capa superior, que será la capa actual de la pila.
Llamando a la API
Para llamar a la API crearemos dos scripts de Python. Una será pasar objetos como nombre de usuario y contraseñas a la pila y comenzar a presionar. La segunda será nuestra capa principal de recepción de mensajes, donde recibiremos mensajes y realizaremos tareas.
Entonces los dos archivos serán run.py y Layer.py.
Comprender el archivo Run.py
- Llamaremos a nuestras bibliotecas en la parte superior del archivo.
desde yowsup.stacks importe YowStackBuilder
de yowsup.layers.auth importar AuthError
desde yowsup.layers importa YowLayerEvent
desde yowsup.layers.network importe YowNetworkLayer
desde yowsup.env importar YowsupEnv
- También adjuntaremos el archivo de capa en la parte superior porque la clase principal "Ecolayer" existe dentro de este archivo.
desde la importación de la capa EchoLayer
- Podemos nombrar cualquier archivo de capa, pero tenemos que poner el mismo nombre aquí.
- Dentro de py, declararemos nuestra variable principal para la contraseña y los eventos que queremos que ocurran.
credenciales = (“91xxxxxxxxxx”, “HkhWVW5/Wnr493HXK8NKl/htpno=”)
- Ahora pasamos a la capa y construimos la pila. Además, se llama al bucle que mantendrá viva la conexión.
stack.setCredentials(credentials) stack.broadcastEvent(YowLayerEvent(YowNetworkLayer.EVENT_STATE_CONNECT)) #enviando la señal de conexión
stack.loop #este es el programa del bucle principal
Comprender el archivo Layer.py
Este archivo contiene la clase que recibirá todos los mensajes entrantes para este número y que será una entidad de devolución de llamada para que se puedan ejecutar otros bucles dentro del archivo.
@ProtocolEntityCallback(“mensaje”)
def onMessage(self, mensajeProtocolEntity):
si es verdad:
Los datos del mensaje y el número del que llegó el mensaje se pueden obtener mediante lo siguiente.
incomming_message_data = mensajeProtocolEntity.getBody
Esto obtendrá el cuerpo del mensaje, que es el mensaje real. Se almacenará en una variable de cadena "incomming_message_data"
incomming_message_sender = mensajeProtocolEntity.getFrom
Esta línea almacenará el número de contacto del mensaje recibido en la variable de cadena “incomming_message_sender”
Usando estos dos valores podemos hacer cualquier cosa: recibir un mensaje específico o de un número específico. Esta función siempre seguirá recibiendo datos a medida que lleguen.
A continuación se muestra cómo los utilizaremos para llevar a cabo nuestro proyecto de domótica.
Controlando los dispositivos
Para controlar los electrodomésticos, necesitamos escribir código que pueda interactuar con el código escrito en Arduino.
Usaremos este enfoque simple en el que escribiremos un código en Arduino que pueda controlar la salida de un pin cuando se reciban dichos comandos.
Ahora abrimos el puerto serie para la comunicación, por lo que en el código importaremos nuestra biblioteca "pyserial".
serie de importación
ser = serial.Serial(puerto, baudios, tiempo de espera = 1)
Para activar o desactivar cualquier pin en Arduino, necesitamos enviar datos en serie. Además, primero debemos leer el mensaje de WhatsApp recibido.
elif(“luces encendidas” en incomming_msg):
ser.write(“on”.encode('ascii'))
Esta línea dice que si hay "luces encendidas" en la cadena "incoming_msg" (que es el mensaje que recibimos), entonces envíe la cadena "encendido" en el puerto serie.
El resto se puede entender dentro del código Arduino.
Para enviar el mensaje de vuelta a WhatsApp, usaremos esta línea,
outgoingMessageProtocolEntity = TextMessageProtocolEntity(message_send,to = sender_jid)
Código de hardware (Arduino)
En Arduino, simplemente escribiremos un código que escuche las cadenas de entrada en el puerto serie, y si dice "encendido", configuraremos un pin en el que el LED está conectado a ALTO, o si dice "apagado", apagaremos el prender. Pin LED BAJO.
Si(Serie.disponible){
Datos de cadena = Serial.readString;
si(datos == “habilitado”){
escritura digital (13, ALTO);
}
De lo contrario, si(datos == “apagado”){
escritura digital (13, ABAJO);
}
}
Así funciona nuestro código de automatización. Para obtener más información sobre XMPP, lea nuestros artículos anteriores.
Observación:
- No utilice la API de WhatsApp (Yowsup) con el sistema operativo Raspbian, o se prohibirá el uso de WhatsApp con su número. Instálelo en Ubuntu o cualquier otra distribución de Linux.
- WhatsApp de un número solo se puede instalar en un dispositivo a la vez.
- La frecuencia de envío de mensajes no debe ser rápida, ya que 30 mensajes por minuto es el límite que puedes exceder, por encima de eso existe la posibilidad de que tu número sea bloqueado en WhatsApp.