ESPurna: La «Chispa» Open-Source para Domótica con ESP32


ESPurna, palabra catalana y valenciana que significa «chispa» —una partícula incandescente de combustión o roce, o figurativamente una pequeña cantidad o persona ingeniosa—, adquiere nuevo sentido como firmware open-source para ESP8266 y ESP32. Desarrollado inicialmente por Xose Pérez y adaptado para ESP32 en forks como RDobrinov/espurna32, transforma placas económicas en hubs IoT para interruptores, luces y sensores. Soporta MQTT con auto-descubrimiento, Alexa, Google Assistant, modos de bajo consumo, hasta 5 redes WiFi, mDNS, NetBIOS y OTA vía web, ideal para domótica avanzada.​

esp8266 a6f

Características Destacadas de ESPurna

ESPurna gestiona switches con botones digitales/analógicos, pulsos configurables, sincronización de relés (todos iguales, solo uno ON) y estados al boot (ON/OFF/toggle). Incluye luces con color/brightness, sensores de potencia (voltaje, corriente, energía), temperatura/humedad (DHT, BME280), y LED notificadores para WiFi/relés/MQTT. Ofrece REST API para relays/sensores, backup/restore, AP/STA WiFi con IP estático, y protección contra KRACK en Arduino Core >=2.4.0; botones permiten toggle, AP mode (doble click), reboot (largo) o factory reset (extra largo).​

Preparación del Entorno con PlatformIO

PlatformIO en VSCode es la herramienta oficial para compilar ESPurna ESP32, gestionando Arduino-ESP32 core, lib_deps como FauxmoESP, AsyncTCP, MQTT y sensores.

Estos son los pasos resumidos para instalar el entorno:

  • Instala VSCode desde code.visualstudio.com, añade extensión PlatformIO IDE (marketplace)
  • Clona git clone https://github.com/RDobrinov/espurna32.git vía terminal (Terminal > New Terminal),
  • Aabre la carpeta con File > Open Folder.
  • PlatformIO detecta platformio.ini automáticamente
  • Descarga dependencias;
  • Edita para default_envs = esp32dev, board = esp32dev, framework = arduino, upload_speed = 921600,
  • Compila con icono check (Build).
  • Verifica logs en terminal para errores;
  • Reinicia VSCode o pio lib install si faltan paquetes.​

Instalación Paso a Paso en ESP32

Requisitos: Cable USB, drivers CH340/CP210x, esptool.py (pip install esptool). Pon ESP32 en bootloader (BOOT/GPIO0 a LOW al resetear/alimentar); verifica esptool.py --chip esp32 --port /dev/ttyUSB0 chip_id.​

  • Borrado: esptool.py --chip esp32 --port /dev/ttyUSB0 erase_flash.
  • Flasheo: esptool.py --chip esp32 --port /dev/ttyUSB0 write_flash -z 0x1000 espurna-esp32.bin (binario de releases).​
  • Alternativa PlatformIO: Build exitoso > Upload; Arduino IDE requiere boards ESP32 y abrir espurna.ino.​

Post-instalación: Conéctate a AP «espurna-XXXXXX» (pass: espurna123), accede 192.168.4.1 para WiFi/MQTT/OTA; soporta reverse proxy seguro.​

Integración con Home Assistant vía MQTT

Configura MQTT en web ESPurna (broker IP/usuario/pass/puerto 1883) y activa «Home Assistant MQTT Discovery» para auto-publicación de switches/luces/sensores. En HA: Añade integración MQTT (Configuración > Integraciones > MQTT), conecta broker (Mosquitto recomendado para retain y estabilidad). Dispositivos aparecen automáticamente vía topics homeassistant/switch/[device]/config; controla relés, mide potencia/RGB sin YAML. Evita «unavailable» en reinicios HA con retain flags; ideal para energy dashboards.​

ESPurna vs. ESPHome: Comparativa Detallada

AspectoESPurna​ESPHome ​
ConfiguraciónCompilación hardware-específica, web intuitivaYAML declarativo, compilación automática
Integración HAMQTT Discovery robusto, topics estándarNativa profunda, zero-config en HA
Facilidad de UsoAvanzados: control firmware detalladoPrincipiantes: automatizaciones rápidas
Soporte HardwareAmplio (sensores, relés, Alexa/Google/OTA)HA-optimizado, actualizaciones fluidas
PersonalizaciónEdición código, REST APIConfig centralizada, sin código directo
Curva AprendizajePronunciada por compilación manualBaja, ideal domótica compleja

ESPurna brilla en versatilidad MQTT y soporte multi-plataforma para expertos en IoT/hardware, mientras ESPHome prioriza simplicidad HA. Prueba ESPurna si buscas personalización profunda en ESP32 para NILM o sensores energéticos.​

    https://github.com/RDobrinov/espurna32

    Instalación de NILMTK y nilmtk-contrib en Windows 11: retos y solución definitiva con WSL y pyenv


    En este blog hemos hablado en muchísimas ocasiones del paquete NILMTK, el famoso paquete open software para implementar la desagregacion de la energia .NILMTK es un toolkit de código abierto para Non-Intrusive Load Monitoring (NILM), cuya utilidad principal es desagregar el consumo eléctrico de una vivienda en los diferentes electrodomésticos usando solo la lectura de un medidor general. ¿Qué significa esto?

    • NILM (Non-Intrusive Load Monitoring): Técnica que estima cuánta energía consume cada aparato sin necesidad de instalar sensores individuales en cada uno.
    • NILMTK (Toolkit): Es una biblioteca en Python que ofrece algoritmos, datasets y herramientas para investigar, probar y comparar métodos de desagregación energética.

    Utilidad práctica

    • Investigación en Smart Grids: Permite estudiar hábitos de consumo eléctrico sin desplegar muchos medidores.
    • Eficiencia energética: Ayuda a identificar qué aparatos consumen más y cuándo, facilitando estrategias de ahorro.
    • Aplicaciones comerciales: Puede generar facturas detalladas a partir de un único medidor, útil para compañías eléctricas o proyectos de domótica.
    • Desarrollo académico: Es usado en universidades y centros de investigación para probar nuevos algoritmos de machine learning aplicados al consumo energético.

    NILMTK convierte una sola lectura de energía en información detallada por aparato, lo que lo hace valioso para investigación, eficiencia y gestión energética. Todo esto esta muy bien ….pero instalar NILMTK y nilmtk-contrib en Windows 11 puede convertirse en una tarea complicada debido a incompatibilidades de versiones de Python y dependencias antiguas usadas por las librerías. Si bien la opción inicial recomendada suele ser crear un entorno conda con Python 3.7, con frecuencia surgen problemas al manejar las versiones correctas de dependencias como numpy y pandas , por eso otro camino puede ser usar WSL ,el cual vamos a explorar en este post, pero antes veamos los problemas a los qeu nos enfrentamos con la instalación clásica con la herramienta Conda/miniconda.

    Problemas frecuentes al usar Conda en Windows

    Debido a que NILMTK requiere versiones específicas, comúnmente se intenta crear un entorno conda con Python 3.7:

    conda create -n nilmtk-env python=3.7
    conda activate nilmtk-env
    conda install -c nilmtk nilmtk=0.4.3 numpy=1.19.5 -y

    No obstante, se presentan errores como LibMambaUnsatisfiableError porque la dependencia hmmlearn no está disponible en el canal nilmtk. Agregar el canal conda-forge y combinar instalaciones con conda y pip es la solución habitual:

    conda config --add channels conda-forge
    conda config --set channel_priority flexible
    conda install hmmlearn numpy=1.19.5 -y
    pip install nilmtk==0.4.3 --no-deps

    Sin embargo, incluso con estos ajustes, la instalación en Windows puede ser inestable. Además, NILMTK no está oficialmente publicado en PyPI, por lo que la instalación desde código fuente usando pip es habitual, lo que puede generar otras complicaciones relacionadas con versiones de Python y dependencias de construcción como hatchling.

    La solución definitiva: usar WSL con pyenv y Python 3.11.5

    La forma más estable es instalar NILMTK dentro de WSL (Windows Subsystem for Linux), usando pyenv para gestionar una versión compatible de Python, concretamente la 3.11.5. Esto permite:

    • Evitar conflictos de versiones de dependencias antiguas.
    • Usar la infraestructura Linux más compatible para herramientas científicas.
    • Integrar sin problemas con Visual Studio Code y Jupyter.

    Pasos clave para esta instalación en WSL

    1. Prepara WSL con las dependencias básicas para compilar Python
    sudo apt update && sudo apt upgrade -y
    sudo apt install -y build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev \
    libsqlite3-dev wget curl llvm libncurses-dev xz-utils tk-dev libffi-dev liblzma-dev python3-openssl git
    1. Instala pyenv y configúralo en tu shell
    curl https://pyenv.run | bash

    Incluye al final de ~/.bashrc:

    export PATH="$HOME/.pyenv/bin:$PATH"
    eval "$(pyenv init --path)"
    eval "$(pyenv init -)"
    eval "$(pyenv virtualenv-init -)"

    Carga la configuración actual:

    source ~/.bashrc
    1. Instala Python 3.11.5 y crea un entorno virtual específico para NILMTK
    pyenv install 3.11.5
    pyenv virtualenv 3.11.5 nilmtk-env
    pyenv activate nilmtk-env
    1. Actualiza pip y instala las dependencias fundamentales
    pip install --upgrade pip setuptools wheel
    pip install numpy pandas hmmlearn h5py matplotlib networkx nose tables tqdm
    pip install git+https://github.com/nilmtk/nilm_metadata.git
    1. Clona el código fuente de NILMTK y nilmtk-contrib e instálalos
    git clone https://github.com/nilmtk/nilmtk.git
    git clone https://github.com/nilmtk/nilmtk-contrib.git

    cd nilmtk
    pip install -e . --no-deps
    cd ..

    cd nilmtk-contrib
    pip install -r requirements.txt --no-deps
    pip install -e . --no-deps
    cd ..
    1. Configura Jupyter para usar el nuevo entorno
    pip install jupyter ipykernel
    python -m ipykernel install --user --name=nilmtk-env --display-name "Python (nilmtk-env)"
    1. Integra con Visual Studio Code

    Abre VS Code desde la terminal WSL con el entorno activado:

    pyenv activate nilmtk-env
    code .

    Selecciona el intérprete Python ubicado en:

    text/home/carlo/.pyenv/versions/3.11.5/envs/nilmtk-env/bin/python
    

    Y en los notebooks selecciona el kernel "Python (nilmtk-env)".

    Conclusión

    Aunque instalar NILMTK y nilmtk-contrib en Windows 11 presenta numerosos retos por incompatibilidades de versiones y dependencias, usar WSL combinado con pyenv y Python 3.11.5 proporciona un entorno estable, funcional y que integra bien con VS Code y Jupyter.

    Este es el método recomendado para investigadores y desarrolladores que buscan máxima compatibilidad y facilidad para trabajar con NILMTK en Windows.