Sonoff: un interruptor MQTT realmente barato

Ricardo Vega

Ricardo Vega / 12 marzo 2019

⏰ 8 minutos

Llevo unos añadiendo pequeños elementos a mi instalación domótica casera con el objetivo de refinarla. He trabajado mucho más en el lado del software, pero también he tenido tiempo para trastear con algún aparato nuevo. De mis aventuras con uno de ellos surge este post.

Hará aproximadamente un año, compré un Sonoff Basic Switch con el objetivo de tener un dispositivo sencillo y compacto que actuara como relé y se pudiera manejar remotamente. La idea del dispositivo es conectarlo directamente a la red eléctrica como si de un enchufe se tratara de forma que se auto-alimenta y gracias al módulo de comunicación WiFi embebido, es capaz de conectarse a un router y ser manejado por una aplicación móvil.

Para nada estamos ante un producto único en cuanto a funcionalidad, pero hay un par de características que lo hacen realmente atractivo. La primera de ellas, es que está basado en el chip ESP32 y se puede reprogramar y, en segundo lugar y derivado del coste de este chip, es un dispositivo realmente asequible (entre los 5 y 10€), lo que en mi caso me permitía tener un relé WiFi programable de forma más barata y con un acabado más profesional que si lo construía yo con mi electrónica y una impresora 3D.

No soy ni el único ni el primero que ha tenido esta idea y, aprovechando las posibilidades de reprogramación del dispositivo, existen en Internet firmwares alternativos que aumentan las capacidades del dispositivo.

En mi caso concreto, quería configurarlo dentro de mi instalación MQTT, por lo que decidí apostar por uno de los frameworks más conocidos para llevar a cabo esta actividad: Sonoff-Tasmota.

La idea de este post es contarte que pasos seguí para llevar a cabo la instalación ya que, aunque existen tutoriales en Internet, tuve que dar varias vueltas hasta completar todo el proceso.

Pasos seguidos:

En primer lugar, tienes que hacerte con el dispositivo. Mi recomendación es que acudas a Amazon para asegurarte stock y una entrega relativamente rápida pero si estos dos factores no te importan, suele ser fácil encontrarlo en páginas chinas como GearBest o Banggod.

Sonoff internals

Es importante destacar que el dispositivo se llama Sonoff WiFi Basic (en mi caso la R2), ya que puedes encontrar varios dispositivos de Sonoff dependiendo del uso que le quieras dar. Los pasos van a estar descritos para este dispositivo, el más barato y que tiene un único de canal (un único relé) pero el proceso sería bastante semejante para cualquiera de los dispositivos soportados más hallá de las diferencias físicas (tanto externas como internas) del dispositivo.

En esta URL puedes ver un listado de los dispositivos compatibles con el firmware que vamos a instalar.

Disclaimer importante: los siguientes pasos implican hacer modificaciones tanto a nivel hardware como software que pueden inutilizar tu dispositivo permanentemente. Bajo ningún concepto modifiques físicamente el dispositivo mientras esté conectado a la corriente eléctrica. En todo caso, no me hago responsable de los daños causados y te pido por favor que tomes las medidas de seguridad apropiadas.

El primer paso es soldar 4 pines a la interfaz de programación del Sonoff para así poder reprogramar su firmware. Para llevar a cabo esta operación te recomiendo que sigas los pasos descritos por Luis del Valle en Programar Fácil. Realmente, en dicho post puedes seguir todos los pasos que vamos a describir nosotros, pero él "flashea" un firmware alternativo llamado Espurna, de Xose Pérez.

A partir de la soldadura de la interfaz de programación, yo seguí un camino distinto al expuesto en Programar Fácil. En primer lugar empleé mi viejo programador PL2303 que tiene el inconveniente de que suele requerir instalar los drivers a mano, al menos en el caso de macOS. Puedes encontrar el driver para tu sistema operativo aquí. Seguramente, al finalizar la instalación debas reiniciar tu equipo para que estén operativos.

El siguiente paso es instalar el firmware, pero para ello, yo no empleé el Arduino IDE sino una herramienta escrita en Python especialmente pensada para trabajar con chips ESP llamada esptool. La instalación es muy sencilla (asumo que tienes Python3 instalado):

pip3 install esptool

Una vez finalizada la instalación podemos proceder a instalar el firmware Sonoff-Tasmota para lo cual, lo primero que debemos hacer es descargarlo. En mi caso concreto, como comenté antes, lo quería emplear en conjunción con mi sistema domótico, que como te he comentado en alguna ocasión, es Home Assistant, por lo que me bajé una versión ya compilada del firmware a través de aquí. Sino, con ayuda del IDE de Arduino, podemos generar nuestro propio binario a partir del código fuente.

A partir de aquí, procedemos a la actualización del firmware como tal. Seguimos los siguientes pasos:

  • Conectamos el programador al Sonoff y al PC teniendo en cuenta:

    • he necesitado invertir TX y RX (conectar el cable de TX del programador en el pin que supuestamente era RX y viceversa)
    • debemos mantener presionado el botón del Sonoff al momento de conectar el USB
  • Nos aseguramos de que nuestro equipo reconoce el programador y conocer su dirección, en mi caso /dev/cu.usbserial

  • Flashear el firmare. Para ello ejecutamos en una terminal cuya ruta sea donde tenemos descargado el binario del firmware:

esptool.py --port /dev/cu.usbserial  write_flash -fs 1MB -fm dout 0x0 sonoff.bin

siendo sonoff.bin el binario que nos hemos descargado con el firmware.

A partir de este momento, y si todo va bien, tenemos flasheado el firmware Tasmota en nuestro dispositivo Sonoff y procedemos a configurarlo:

  • Presionamos 4 veces seguidas el botón del Sonoff. Puedes ver los motivos aquí

  • Accedemos a la red WiFi generada desde donde podemos configurar la red WiFi a la que deseamos que se conecte el interruptor y la configuración de MQTT. Esta operación la podemos hacer desde nuestro ordenador o incluso desde un móvil o tablet. La url de acceso es http://[sonoff-ip]/cn siendo [sonoff-ip] la IP del dispositivo Sonoff.

  • Este paso es totalmente opcional, pero ya que planteo tener varios de estos equipos, modifico la configuración básica de MQTT añadiendo en las direcciones un "/1" con la idea que sea un índice incremental (en mi segundo dispositivo será un 2 y así sucesivamente).

  • Configuramos los parámetros de acceso al WiFi de nuestro Router y la configuración del servidor MQTT.

Configuración Sonoff

Llegado a este punto, tenemos el dispositivo listo para usarse.

En mi caso particular, debía a mayores configurarlo en mi Home Assistant y para ello añadí lo siguiente a mi fichero de configuración.

light:
  - platform: mqtt
    name: 'Luz'
    state_topic: 'stat/sonoff/1/POWER'
    command_topic: 'cmnd/sonoff/1/POWER'
    availability_topic: 'tele/sonoff/1/LWT'
    qos: 1
    payload_on: 'ON'
    payload_off: 'OFF'
    payload_available: 'Online'
    payload_not_available: 'Offline'
    retain: false

Como se puede observar, las direcciones tienen el "/1" que he añadido para poder hacer de esa dirección única.

También añado la siguiente automatización:

- alias: 'Sonoff Power state on HA start-up'
  trigger:
    platform: homeassistant
    event: start
  action:
    - service: mqtt.publish
      data:
        topic: 'cmnd/sonoff/1/POWER'
        payload: ''

Entiendo que esta configuración es muy específica de mi caso particular pero creo que es fácilmente entendible y puede servir de base de la clase de configuraciones que tendrás que llevar a cabo en tu sistema.

Por resumirlo brevemente, habrá 3 "topics" de MQTT relacionados con el Sonoff:

  • stat/sonoff/1/POWER: donde el dispositivo publicará su estado al inicializarse y cada vez qeu se modifique
  • cmnd/sonoff/1/POWER: donde el dispositivo estará escuchando para recibir órdenes de cambio de estado.
  • tele/sonoff/1/LWT: un canal de telemetría para ver si el dispositivo está disponible.

En los dos primeros, los payload a enviar en el primer caso o escuchar en el segundo son las cadenas de texto ON y OFF.

Tras este proceso y varios meses de prueba, puedo confirmar que el dispositivo funciona correctamente y está perfectamente integrado en el resto del sistema. Como defecto puntual que he detectado es que cuando lleva mucho tiempo activo, sufre una especie de caída breve que apenas es apreciable a nivel de iluminación (lo tengo conectado controlando un juego de 3 bombillas) pero que se identifica al poderse oir el típico sonido de un relé abriéndose y cerrándose.

Aunque he investigado el problema, no tengo la certeza de por qué se produce pero claramente puede ser un problema si estás empleándolo para dar corriente o no a un dispositivo electrónico (un electrodoméstico, un ordenador, etc) ya que muy posiblemente ese micro corte reinicie el dispositivo, e incluso podría dañarlo.

Por lo demás, no tengo quejas y estoy convencido que es de las formas más baratas de controlar las luces de tu casa aunque, como has podido ver, sacrificas parte de tu comodidad al tener que hacer todo este proceso que hemos descrito.

Espero que te haya gustado este post y te animes a darle una oportunidad.

Como siempre te digo, podemos seguir la conversación por Twitter.

Un saludo y hasta la próxima.

Subscríbete a mi newsletter

Actualmente estoy llevando a cabo algunos cambios en mi Newsletter y no es posible apuntarse 😞

Ver ediciones pasadas