Vídeos DEF CON 26

Presentaciones DerbyCon 8.0

Controlando las puertas de un garaje con un ESP32 - Parte 3

  • October 6, 2018
  • tuxotron
  • ESP32 - Relay - Sensor wiring

    ESP32 - Relay - Sensor wiring

    Ahora que ya tenemos nuestro ESP32 listo para el combate, es hora de instalarlo. Lo primero que debemos hacer es usar un servidor MQTT con algún tipo de autentificación. Hasta ahora todas las pruebas que hemos hecho han sido usando el servidor de pruebas de io.eclipse.org sin ningún tipo de autentificación. Esto significa, que si alguien averigua los canales que usas, podría abrir y cerrar las puertas de tu garaje. No bueno!

    Hay muchas opciones disponibles, pero personalmente, para este tipo de proyectos, prefiero manejar mi propio servidor. Así que voy a explicar como lo tengo montado. Uso Moquitto broker, un proyecto de la fundación Eclipse y muy popular en proyectos IoT. Por supuesto lo uso dentro de un contenedor Docker ;)

    En vez de usar la imagen oficial de Docker de Mosquitto, me he construído la mía propia, simplemente porque la original, a la hora de crear usuarios, etc tienes que crearte los ficheros de configuración y copiarlos dentro de la imagen, no una buena idea si publicas la imagen en algún registro público. En la imagen que creé te permite pasarle como parámetros (en forma de variables de entorno) el nombre de un usuario y la contraseña. Este sería el único usuario con acceso al servidor, de forma que tu servidor sólo admite conexiones para el mismo.

    Todo lo que tienes que hacer para arrancar tu contenedor con Mosquitto es:

    docker container run -d --name mosquitto -p 1883 --restart=always -e MOSQUITTO_USER=YOUR_USERNAME -e MOSQUITTO_PASS=YOUR_PASS tuxotron/mosquitto
    

    Asegúrate de que el puerto 1883/tcp del sistema donde lo corras es accesible desde afuera. Por supuesto cambia los valores YOUR_USERNAME y YOUR_PASS por el nombre del usuario y la contraseña que decidas. Los accesos anónimos serán denegados.

    El siguiente paso sería reconfigurar el código del micro controlador, para asignarle los nuevos valores: servidor, usuario y contraseña, como ya se explicó en la primera parte de esta serie. Asegúrate de actualizar el código fuente. Desde el directorio donde tienes clonado el proyecto:

    git pull origin master
    

    Después de reconfigurar y volcar el nuevo código en el chip, deberías ver en los logs algo así:

    I (2545) MQTT_CLIENT: Sending MQTT CONNECT message, type: 1, id: 0000
    I (3195) GARAGE: MQTT_EVENT_CONNECTED
    I (3195) GARAGE: sent subscribe successful, msg_id=63593
    I (3195) GARAGE: sent subscribe successful, msg_id=48468
    I (3205) GARAGE: sent subscribe successful, msg_id=29761
    I (3205) GARAGE: sent subscribe successful, msg_id=63161
    I (3215) GARAGE: MQTT_EVENT_SUBSCRIBED, msg_id=63593
    I (3225) GARAGE: MQTT_EVENT_SUBSCRIBED, msg_id=48468
    I (3435) GARAGE: MQTT_EVENT_SUBSCRIBED, msg_id=29761
    

    Esto nos indica que estamos conectado al servidor. En este punto ya podemos instalar nuestro dispositivo en el garaje. En mi caso, el cableado entre el relé y los abridores de las puertas es el siguiente:

    Relay - Opener connections

    Relay - Opener connections

    Si tu abridor/es tiene distintas conexiones, busca los dos hilos que se conectan del botón que usas para abrir y cerrar.

    Lo siguiente sería montar los commutadores magnéticos. En este caso tendrás que encontrar el mejor sitio para instalarlos. Yo he montado este tinglado en tres casas distintas y cada vez los monté en sitios distintos, por la diferencia entre las puertas. A continuación puedes ver una foto del montaje actual:

    Magnetic switch

    Magnetic switch

    Una vez tienes el cableado del relé con los abridores y los sensores de las puertas, ya lo tienes listo. Aquí tienes un vídeo de demostración de mi sistema funcionando:

    A partir de aquí la forma en que quieras interactuar con el ESP32 depende de ti. Todo lo que tienes que hacer es poder mandar mensajes a los canales del servidor MQTT. En los vídeos anteriores mostré el uso de mosquitto_pub, en este vídeo usé MQTTLens. Mi objectivo es tener una aplicación nativa en el móvil para manejar las puertas. Tengo media terminada una pequeña aplicación en iOS, que publicaré cuando la tenga funcionando por completo. Cuando la termine publicaré el código fuente y actualice esta entrada con el enlace al mismo.

    Lo próximo que tengo en mi lista para hacer en relación a este proyecto, es activar TLS y communicarme de forma segura con el servidor, pero actualmente tengo otras prioridades, así que lo dejaré para más tarde. Lo haga cuando lo haga, publicaré una entrada al respecto. Mientras tanto, happy hacking!

    Partes previas:

    Controlando las puertas de un garaje con un ESP32 - Parte 1

    Controlando las puertas de un garaje con un ESP32 - Parte 2