Por qué reemplazar el firmware de un enchufe inteligente comercial

¿Sabes realmente quién controla tu enchufe "inteligente"? La mayoría de los enchufes WiFi económicos del mercado dependen de servidores en la nube, cuentas con el fabricante y apps propietarias que pueden dejar de funcionar el día menos pensado. El Aubess Power Monitor Switch es uno de esos casos: hardware sólido (relé apto para red, medidor de energía BL0942 dedicado), pero firmware cerrado encima de un módulo WiFi propietario tipo ESP02S o BK7231 que limita todo.

Este tutorial muestra cómo recuperar el control: vas a reemplazar el módulo WiFi cerrado por un ESP8685 WROOM 03 (basado en ESP32 C3), instalar el Lifecycle Manager (LCM) como capa previa al arranque y subir un firmware de código abierto con integración nativa a Apple HomeKit y medición de potencia precisa por UART.

Resumen del proyecto

Al terminar tendrás:

  • Un medidor de consumo eléctrico que se comunica solo en tu LAN (sin telemetría, sin nube)
  • Pareo nativo con la app Casa de Apple usando HomeKit
  • Actualizaciones OTA seguras y reversibles vía LCM
  • Lectura real de voltaje (V), corriente (A), potencia (W) y energía acumulada (kWh) desde el BL0942

⚠️ Advertencia de alto voltaje: este proyecto involucra un dispositivo que se conecta directamente a 220 V AC. Desenchufa siempre antes de abrir, nunca trabajes con el equipo energizado y usa herramientas aisladas. Si dudas, consulta con un eléctrico certificado SEC.

Hardware base: qué hay dentro del Aubess

Antes de modificar nada, conviene entender el circuito de fábrica:

  • Voltaje de operación: 220 a 240 V~ 50/60 Hz
  • Carga máxima: 16 A / ~3680 W
  • Un relé apto para red eléctrica
  • Un IC de medición de energía BL0942 (comunica por UART, no por pulsos CF/CF1)
  • Un módulo WiFi cerrado que vas a reemplazar

El BL0942 es la pieza clave que justifica todo el trabajo: transmite tramas seriales estructuradas con voltaje, corriente, potencia activa y energía acumulada, lo que hace que la calibración y la lectura sean mucho más robustas que los esquemas basados en conteo de pulsos.

Paso 1: abrir la carcasa sin romperla

Herramientas:

  • Spudger plástico
  • Spudger metálico fino

Procedimiento:

  1. Inserta el spudger plástico entre las dos mitades de la carcasa
  2. Genera una pequeña separación
  3. Desliza el spudger metálico fino para llegar a los clips internos
  4. Avanza lentamente hacia una esquina
  5. Suelta los clips uno a uno

Si fuerzas, vas a romper los clips internos y la carcasa quedará floja al cerrarla.

Paso 2: desoldar el módulo WiFi original

Herramientas recomendadas:

  • Estación de soldar con control de temperatura (350 a 380 °C)
  • Malla desoldadora (cinta de cobre)
  • Flux líquido
  • Alcohol isopropílico

Procedimiento:

  1. Fotografía la PCB en alta resolución antes de tocar nada (vas a necesitar la referencia)
  2. Aplica flux generosamente sobre los pads del módulo
  3. Calienta el cautín a 350 a 380 °C
  4. Retira el estaño con malla desoldadora
  5. Levanta el módulo solo cuando todos los pads estén libres
  6. Limpia los pads con alcohol isopropílico e inspecciona con lupa

Nunca fuerces el módulo hacia arriba: si arrancas un pad, completar el proyecto se vuelve mucho más difícil.

Paso 3: preparar el ESP8685 WROOM 03 reemplazante

El módulo nuevo se programa antes de soldarlo en la PCB. Hay dos opciones:

Opción A, jig magnético impreso en 3D (recomendada, sin soldar pads): permite sujetar el módulo con contacto firme para flashear, sin riesgo de dañarlo. Diseño: studiopieters.nl/esp8685-wroom-03-programmer.

Opción B, cables soldados a los pads de programación: si no tienes acceso a impresora 3D, suelda cables finos a los pads UART y reset/boot.

Render del módulo ESP8685 WROOM 03 basado en ESP32 C3, el reemplazo de código abierto que se instala en la PCB del Aubess

Borra la flash del módulo nuevo:

Bash
esptool.py erase_flash

Ejemplo de salida:

Código
Chip is ESP32-D0WD-V3
Erasing flash...
Chip erase completed successfully
MAC: cc:8d:a2:dd:af:e0

⚠️ Guarda la dirección MAC que aparece. La necesitas para generar el código QR de HomeKit.

Paso 4: generar el código QR de HomeKit

Apple Home necesita un QR criptográfico para parear el accesorio. Usa el generador de código abierto de Studio Pieters:

Bash
./gen_qrcode 7 693-41-208 M4T8 cc8da2ddafe0 new/qrcode.png

Terminal de macOS ejecutando el comando gen_qrcode para generar el código QR de HomeKit a partir del tipo de accesorio, el setup code, el setup ID y la dirección MAC

Significado de los argumentos:

Argumento Significado
7 Tipo de accesorio: Outlet (enchufe)
693-41-208 Setup code de HomeKit
M4T8 Setup ID
cc8da2ddafe0 MAC (sin dos puntos)

Esto genera una imagen PNG con el QR más el setup code legible para humanos. Imprime el resultado como sticker y pégalo en la carcasa del enchufe para futuro pareo.

Sticker generado con el código QR de HomeKit, el setup code legible y los códigos de barras con la dirección MAC y el número de serie del accesorio

Repo: github.com/AchimPieters/esp32-homekit-qrcode

Paso 5: flashear el Lifecycle Manager (LCM)

LCM es una capa de firmware previa al arranque que se encarga de:

  • Portal cautivo WiFi para configuración inicial
  • Instalación OTA del firmware de aplicación
  • Verificación de integridad antes de bootear
  • Recovery automático si una actualización falla

Esto significa que una vez instalado LCM, el dispositivo nunca más necesita abrirse físicamente. Cualquier cambio de firmware se hace por aire.

Flashear LCM (chip esp32c3):

Bash
python -m esptool --chip esp32c3 -b 460800 \\
  --before default_reset --after hard_reset write_flash \\
  --flash_mode dio --flash_size 4MB --flash_freq 80m \\
  0x0 build/bootloader/bootloader.bin \\
  0x8000 build/partition_table/partition-table.bin \\
  0xe000 build/ota_data_initial.bin \\
  0x20000 build/esp32-lifecycle-manager.bin

Repo: github.com/AchimPieters/esp32-lifecycle-manager

Paso 6: instalar el ESP8685 WROOM 03 en la PCB del Aubess

Procedimiento de soldadura:

  1. Alinea el módulo cuidadosamente sobre la huella original
  2. Suelda un pad de esquina primero (tack)
  3. Verifica alineación en los 4 lados
  4. Suelda la esquina opuesta
  5. Arrastra el estaño sobre el resto de los pads usando flux
  6. Quita puentes de estaño con malla desoldadora
  7. Limpia con alcohol isopropílico e inspecciona

Tómate tu tiempo en la inspección visual: la mayoría de las fallas se detectan antes de energizar.

GPIO usados por el firmware

El firmware se configura por Kconfig: los pines GPIO no están hardcodeados y se pueden cambiar con idf.py menuconfig. Valores por defecto para ESP8685 WROOM 03 (target ESP32 C3):

Función Opción Kconfig GPIO por defecto
Wall switch input ESP_SWITCH_GPIO GPIO5
Relay control ESP_RELAY_GPIO GPIO4
Button input (Aubess) ESP_BUTTON_GPIO GPIO1
LED de estado azul ESP_BLUE_LED_GPIO GPIO6

Para cambiar:

Bash
idf.py menuconfig

Cómo funciona el BL0942 por UART

El BL0942 transmite tramas seriales con voltaje, corriente, potencia y energía acumulada. La conexión:

  • BL0942 RX (SDI) ← ESP UART TX
  • BL0942 TX (SDO) → ESP UART RX
  • Pin SEL atado a GND (modo UART)
  • Baud rate definido por strap de hardware

Diagrama de pines de la PCB del Aubess y el mapeo de GPIO para los módulos ESP32 C3, ESP8684 WROOM y ESP02S, con las señales BL0942 TX, BL0942 RX, SWITCH, RELAY, BUTTON y BLUE LED

Esto es más robusto que los esquemas de medición basados en conteo de pulsos (CF/CF1) porque el chip ya entrega valores calibrados listos para usar.

Sincronización entre el interruptor físico y HomeKit

El switch de pared funciona como toggle, no como estado fijo. Esto evita el problema clásico de desincronización:

  • Toggle físico → relé ON → HomeKit recibe el cambio
  • App HomeKit OFF → relé OFF
  • Toggle físico otra vez → relé ON → HomeKit actualizado

No importa desde dónde lo enciendas, el estado siempre está sincronizado.

Botón trasero: funciones por duración

Duración del press Acción
< 1 segundo Toggle del relé
30 segundos Forzar entrada a LCM recovery

Mantener 30 segundos devuelve el equipo a modo LCM incluso si el firmware de aplicación quedó corrupto.

Instalar el firmware de aplicación vía LCM

Una vez que LCM está corriendo:

  1. Conéctate al AP LCM-XXXXX desde tu celular o PC
  2. Se abre el portal cautivo automáticamente
  3. Ingresa las credenciales WiFi de tu casa
  4. Firmware source: AchimPieters/ESP32-power-monitor-switch
  5. Habilita GPIO6 (LED azul) y "Led Level On"
  6. Click en Join

El firmware se instala OTA y reinicia automáticamente.

Portal cautivo del Lifecycle Manager pidiendo elegir la red WiFi, ingresar la contraseña y el repositorio de GitHub del firmware antes de instalarlo por OTA

Parear con Apple Home

  1. Abre la app Casa en tu iPhone o iPad
  2. Toca el botón +
  3. Añadir accesorio
  4. Escanea el QR generado en el Paso 4
  5. Acepta el aviso "Accesorio no certificado" (es normal en DIY)
  6. Asigna nombre y habitación

Listo: sin nube, sin cuenta, sin app del fabricante.

Actualizaciones futuras

Las actualizaciones OTA se disparan desde HomeKit. Como la app Casa de Apple no expone controles de update, se usa la app Eve para gatillarlas. El proceso es seguro y reversible: si una actualización falla, LCM hace recovery automático.

Variantes y mejoras

Tres ideas concretas para extender el proyecto:

  1. Medición de energía multifase con varios módulos: si tienes un tablero con 3 fases, instala uno de estos enchufes modificados en cada fase y agrupa las lecturas en Home Assistant via la app puente HomeKit Controller. Vas a poder ver consumo agregado de toda la casa.

  2. Alertas por consumo anómalo: combina el firmware con la API de Eve y configura una automatización en HomeKit que envíe notificación si la potencia supera 2000 W más de 30 segundos. Es útil para detectar refrigeradores que dejaron la puerta abierta o cargas fantasma fuera de horario.

  3. Logger local con Home Assistant: aunque HomeKit no expone los datos históricos del BL0942 más allá de 10 días, si lo enlazas a Home Assistant via HomeKit Controller integration, los valores quedan en InfluxDB con resolución de 10 segundos. Útil para auditorías de consumo o cálculo de horas equivalentes de cada electrodoméstico.

Personalización para Chile

Algunas piezas clave para replicar este proyecto en Chile:

Componente Producto en MechatronicStore SKU Precio CLP
Módulo ESP32 reemplazante (equivalente funcional al ESP8685 WROOM 03) ESP32 ESP WROOM 32 Tipo C X2-10V2 $7.990
Estación de soldar con control de temperatura Estación de Soldar Certificada ZD-99 K-301 $32.000
Malla desoldadora 2 mm Cinta de malla desoldadora 2mm 1.5m E-205 $2.190
Flux líquido Flux Pasta NC-559 10cc E-006 $3.490

Aclaración importante sobre el módulo WiFi: el tutorial original usa el ESP8685 WROOM 03 (basado en ESP32 C3), que en Chile no se vende como módulo OEM separado. Si vas a hacer este proyecto exacto, conviene importar el módulo. Como alternativa más accesible, puedes hacer una variante del proyecto montando el sensor BL0942 sobre un ESP32 WROOM 32 estándar (SKU X2-10V2) en un PCB perforado o caja externa, sin reemplazar el módulo dentro del Aubess. Pierdes la integración compacta pero ganas en simplicidad y precio.

Sobre el enchufe Aubess Power Monitor Switch: no se vende en MechatronicStore. Lo encuentras en AliExpress y otras tiendas chinas a ~CLP $9.000 puesto en Chile.

Sobre el voltaje: en Chile la red es 220 V / 50 Hz, que está dentro del rango operativo del relé original (220 a 240 V~ 50/60 Hz). El proyecto funciona sin modificaciones eléctricas.

Recursos y descargas

Versión chilena inspirada en el tutorial de Studio Pieters, con componentes en stock local en MechatronicStore.