Solucionar problemas instalando nilmtk-contrib


Nilmtk-contrib es un repositorio de contribuciones de la comunidad para NILMTK que permite agregar nuevas funcionalidades, modelos de aprendizaje automático y algoritmos de desagregación de energía. Dado que el desarrollo del NILMTK principal ha sido más lento en los últimos años, nilmtk-contrib permite a los investigadores y desarrolladores mejorar la herramienta sin depender de actualizaciones en el repositorio principal.

Características de nilmtk-contrib

  1. Nuevos Algoritmos de Desagregación
    • Contiene implementaciones de modelos avanzados basados en redes neuronales, como Sequence-to-Sequence y Variational Autoencoders.
    • Se han añadido métodos híbridos que combinan enfoques basados en descomposición de señales y aprendizaje profundo.
  2. Soporte para Nuevos Datasets
    • Extiende la compatibilidad con bases de datos de consumo eléctrico no incluidas en NILMTK.
    • Simplifica la conversión de datos desde formatos comunes como CSV a HDF5, que es el formato utilizado por NILMTK.
  3. Mayor Flexibilidad y Mantenibilidad
    • Permite a los desarrolladores probar nuevas ideas sin modificar el código base del NILMTK original.
    • Se puede instalar y utilizar junto con NILMTK sin conflictos.

Para instalar nilmtk-contrib correctamente, debes cumplir con los requisitos de versiones específicas de Python y dependencias.

Requisitos clave

PaqueteVersión requeridaCompatibilidad con Python
NILMTK>=0.4Python 3.7 (recomendado)
scikit-learn>=0.21Python 3.5-3.7
Keras>=2.2.4Python 3.5+
cvxpy>=1.0.0Python >=3.7 (para cvxpy<=1.0.0)

Guia paso a paso para instalar nilmtk-contrib sin conflictos

Los pasos ajustados para crear un entorno limpio, instalando las versiones de las librerías necesarias y evitando los errores tipicos:

1. Crear y preparar el entorno virtual

Primero, elimina cualquier entorno anterior si es necesario y luego crea uno nuevo:

# Verificar los entornos existentes
conda env list

# Eliminar el entorno 'nilm' si ya existe
conda env remove --name nilm

# Limpiar cache
conda clean --all

Python 3.7 es la versión más estable que es usada para estas dependencias y la que los creadores de NILMTK recomiendas, luego, lo ideal es crear el entorno limpio con esa versión:

# Crear el entorno 'nilm' con Python 3.7
conda create -n nilm python=3.7 -y

# Activar el entorno recién creado
conda activate nilm

2. Instalar numpy compatible

Instalar una versión específica de numpy para asegurar la compatibilidad con NILMTK:

pip install numpy==1.19.5

3. Agregar canales de Conda

Para asegurar que las dependencias necesarias se encuentren:

conda config --add channels conda-forge
conda config --add channels nilmtk

4. Instalar nilmtk

Instala la versión compatible de NILMTK:

conda install -c nilmtk nilmtk=0.4.3 -y

5. Instalar matplotlib compatible

La versión de matplotlib requerida por NILMTK 0.4.3 es algo restrictiva. Debes instalar matplotlib-base primero:

# Instalar matplotlib-base y matplotlib compatibles
conda install matplotlib-base=3.1.3 matplotlib=3.1.3 -y

6. Instalar TensorFlow compatible

Instalar una versión de TensorFlow compatible con las bibliotecas:

pip install tensorflow==1.14.0

7. Instalar nilm_metadata

Instalar el paquete nilm_metadata desde GitHub:

pip install git+https://github.com/nilmtk/nilm_metadata

8. Instalar nilmtk-contrib

La instalación de nilmtk-contrib podría fallar debido a la falta de detección de la instalación de NILMTK por parte de pip. La solución es instalar nilmtk-contrib sin depender de las bibliotecas que necesita verificar:

pip install --no-deps git+https://github.com/nilmtk/nilmtk-contrib

Alternativa (si el paso anterior no funciona ): Si el paso anterior no funciona, puedes clonar el repositorio y hacer la instalación manualmente:

git clone https://github.com/nilmtk/nilmtk-contrib.git
cd nilmtk-contrib
pip install --no-deps .

9. Instalar otras dependencias necesarias

Es posible que necesites instalar otras dependencias, como cvxpy y protobuf:

pip install protobuf==3.20.*
pip install cvxpy==1.1.13

10. Crear archivo parche.py (muy importante)

Si ejecutamos algo que incluya el modulos niml_contrib con la instalacion actual, lo normal es tener con BinaryCrossentropy y MeanSquaredError. Si se presenta el error ImportError: cannot import name 'BinaryCrossentropy' from 'keras.losses', podriamos editar el archivo correspondiente (rnn_attention_classification.py) para reemplazar las importaciones incorrectas de Keras. Es decir en lugar de:

from keras.losses import BinaryCrossentropy, MeanSquaredError

Usar las funciones personalizadas para estas pérdidas:

from keras import backend as K

def BinaryCrossentropy():
def loss(y_true, y_pred):
return K.binary_crossentropy(y_true, y_pred)
return loss

def MeanSquaredError():
def loss(y_true, y_pred):
return K.mean(K.square(y_pred - y_true), axis=-1)
return loss

El problema es que si tocamos ficheros de la librería nos va a fallar el kernel, así que lo mejor es hacerlo lo mismo desde un parche (lo cual en el argot se llama monkey patche), que deberemos guardar en nuestro directorio de trabajo.

El contenido final del parche, por ejemplo que nombraremos como «parche.py» , es el siguiente:

import keras.losses
import keras.layers

# Parches para evitar errores de importación con versiones antiguas de Keras
if not hasattr(keras.losses, 'BinaryCrossentropy'):
    def BinaryCrossentropy(*args, **kwargs): pass
    keras.losses.BinaryCrossentropy = BinaryCrossentropy

if not hasattr(keras.losses, 'MeanSquaredError'):
    def MeanSquaredError(*args, **kwargs): pass
    keras.losses.MeanSquaredError = MeanSquaredError

if not hasattr(keras.layers, 'MultiHeadAttention'):
    class MultiHeadAttention:
        def __init__(self, *args, **kwargs): pass
        def __call__(self, *args, **kwargs): return self
    keras.layers.MultiHeadAttention = MultiHeadAttention

if not hasattr(keras.layers, 'LayerNormalization'):
    class LayerNormalization:
        def __init__(self, *args, **kwargs): pass
        def __call__(self, *args, **kwargs): return self
    keras.layers.LayerNormalization = LayerNormalization

Para usar el parche en nuestro código sin tener que tocar variables de entorno con el directorio de trabajo podemos usar este ejemplo adaptándolo a nuestra casuística particular:

import tensorflow as tf
print("TF version:", tf.__version__)

import sys
sys.path.append("D:/ruta/a/tu/directorio/del/parche")  # Asegúrate de que el parche.py esté allí

import parche  # Esto aplica los monkey patches

import nilmtk_contrib
print("nilmtk-contrib instalado correctamente")
  • El parche.py se encarga de que nilmtk_contrib no falle por capas o funciones modernas que no existen en Keras 2.2.4.
  • Si necesitas realmente usar MultiHeadAttention o BERT, requerirás migrar a TensorFlow 2.x (no recomendado si usas NILMTK 0.4.3).

11. Registrar el entorno en Jupyter (Muy recomndable)

Si deseas usar este entorno en Jupyter Notebook, regístralo como un nuevo kernel:

python -m ipykernel install --user --name nilm --display-name "Python (nilm)"

Para probar que todo ha ido bien, ejecuta este comando para confirmar que todo está instalado correctamente:

python -c «import nilmtk; import nilmtk_contrib; print(‘Éxito’)»

12. Salir del entorno

Cuando termines de trabajar en el entorno, puedes desactivarlo:

conda deactivate

13. Verificar el entorno

Finalmente, asegúrate de que el entorno esté configurado correctamente:

conda env list

Con estos pasos, tu entorno limpio debería estar correctamente configurado para trabajar con NILMTK, nilmtk-contrib, y otras bibliotecas necesarias. Si tienes algún problema en el proceso, seria recomendable empezar nuevamente desde el principio porque esta guia ha sido contrasatada y deberia de funcionar.

Módulos que puede que se necesite instalar si hay errores ( lo anexo simplemente por curiosidad pero no seran necesarios con los pasos anteriores):

1. Instalar Keras y TensorFlow compatibles

Para evitar conflictos con keras.optimizers, usa:

pip install tensorflow==2.5.0 keras==2.4.3 h5py==3.1.0

2. Instalar cvxpy 1.0.0 (versión compatible)

cvxpy 1.0.0 funcionaba con Python 3.7 pero ahora no es posible:

pip install cvxpy==1.0.0

El error ocurre porque CVXPY 1.0.0 no existe en PyPI, y las versiones disponibles requieren Python ≥3.8. Para resolverlo en tu entorno nilmtk-env (Python 3.7), sigue estos pasos:

3. Instalar CVXPY 1.3.4 (última versión compatible con Python 3.7):

pip install cvxpy==1.3.4 numpy==1.19.5 scipy==1.6.3

Verificar instalación:

python -c "import cvxpy; print(cvxpy.__version__)"
# Debe mostrar: 1.3.4

Resolución de otros conflictos comunes

ErrorSolución
ImportError: cannot import name 'SGD'Asegúrate de usar tensorflow.keras.optimizers en lugar de keras.optimizers.
ModuleNotFoundError: No module named 'tensorflow'Revisa que tensorflow==2.5.0 esté instalado.
numpy.ufunc size changedFija numpy==1.19.5 y evita actualizaciones automáticas.

Notas adicionales

  • GPU: Si tienes una tarjeta NVIDIA, instala CUDA 11.2 y cuDNN 8.1.0 para acelerar el entrenamiento.
  • Entornos alternativos: Si persisten errores, clona los repositorios manualmente y configura el PYTHONPATH:bashgit clone https://github.com/nilmtk/nilm_metadata.git git clone https://github.com/nilmtk/nilmtk.git git clone https://github.com/nilmtk/nilmtk-contrib.git set PYTHONPATH=%PYTHONPATH%;C:\ruta\a\nilm_metadata;C:\ruta\a\nilmtk;C:\ruta\a\nilmtk-contrib

Con estos pasos, nilmtk-contrib debería funcionar sin conflictos en Windows.

Ejemplo de Uso

Después de instalarlo, puedes importar y utilizar algoritmos de desagregación avanzados como:

from nilmtk_contrib.disaggregate import Seq2Point

model = Seq2Point()
# Cargar datos y entrenar el modelo...

Conclusión

nilmtk-contrib es una excelente opción si trabajas en NILM y necesitas herramientas más actualizadas y flexibles que las que ofrece NILMTK por defecto. Es especialmente útil para investigadores que desean experimentar con nuevos modelos de desagregación energética.

2024 03 31 12 37 03 INSTALAR NILMTK EN UBUNTU Busqueda de Google y 6 paginas mas Personal  Micro

¿Sabías que tu contador de luz puede decirte mucho más que simplemente cuánto consumes?


Gracias a los contadores inteligentes, los hogares que adaptan su consumo a las horas de menor demanda pueden ahorrar hasta un 20% en su factura de electricidad, mientras contribuyen a un sistema eléctrico más eficiente y sostenible. Asimismo también hay otras ventajas de las que no siempre somos conscientes. Por ejemplo, estos contadores pueden detectar incidencias, controlar la potencia demandada, prevenir fraudes y, sobre todo, registrar el consumo eléctrico por franjas horarias. Esto permite aplicar tarifas variables dependiendo del momento del día. Además, pueden instalarse dentro de las viviendas y se pueden leer de forma remota, eliminando la necesidad de que un técnico realice una lectura manual.

En efecto, por mucho que se haya criticado la obligatoriedad del uso de estos contadores son muchas las ventajas , las cuales resumimos:

  • Ahorro económico: las tarifas horarias y la posibilidad de monitorizar el consumo ayudan a los usuarios a reducir sus facturas.
  • Conciencia ambiental: Destaca el papel de los contadores inteligentes en la promoción de un consumo energético más sostenible.
  • Facilidades para el usuario: Muchas nuevas funcionalidades, como la posibilidad de realizar autolecturas o de recibir alertas en caso de anomalías.

Los contadores inteligentes, especialmente los monofásicos, están equipados con sensores que miden el voltaje, la intensidad y la potencia consumida de manera instantánea. Estos valores se transmiten a la compañía eléctrica en intervalos regulares que varían entre 15, 30 y 60 minutos, dependiendo del proveedor.

Estos dispositivos suelen incluir una pantalla LCD y un botón principal que permite al usuario verificar su consumo. También disponen de una luz LED cuya función es importante para monitorizar el consumo y detectar posibles problemas.

A continuación, se explica el significado mas habitual de los distintos comportamientos de esta luz ( !ojo que según el proveedor y la marca esto puede variar!):

  • Luz parpadeante: indica que en ese momento hay consumo de electricidad en la vivienda. El ritmo del parpadeo está relacionado con la cantidad de energía utilizada; a mayor cadencia, mayor consumo.Si la luz esta apagada por tanto significa que no hay consumo eléctrico, lo que es inusual ya que normalmente siempre hay algún dispositivo conectado, como relojes o electrodomésticos en modo de espera. Si hay consumo en la vivienda y la luz está apagada, puede ser señal de una avería en el contador, por lo que se debe contactar a la compañía eléctrica.
  • Luz naranja fija: indica que el contador se ha bloqueado debido a que se ha superado la potencia contratada, lo que probablemente ha activado el ICP (Interruptor de Control de Potencia integrado en el propio contador). En este caso, es necesario revisar el cuadro eléctrico de la vivienda y reiniciar los interruptores para desbloquear el contador ( es decir bajar todos los elementos del cuadro de distribución de ca , esperar unos minutos y volver a reponerlos lentamente uno a uno).
  • La luz roja indica que se ha superado la potencia contratada o que la compañía ha interrumpido el servicio, y la luz naranja apunta a un fallo técnico.
  • Dependiendo de la compañía eléctrica, algunos contadores pueden incluir un código de luces diferente, donde además de las luces roja y naranja, aparece una luz verde. En estos casos, una luz verde parpadeante señala que el suministro funciona correctamente, mientras que una luz verde fija indica que el contador está contabilizando el consumo.

Algunos modelos incluyen un botón amarillo que restablece el LED a su modo de funcionamiento normal pero sobre todo nos da acceso a muchas mas información como vamos a ver

La pantalla LCD y el botón

En efecto , si contamos con un contador digital inteligente CERM1, aunque es fácilmente aplicable a otros modelos ya que muchas de las medidas que da son estándar (códigos OBIS), si mantenemos pulsado el botón durante dos segundos, la pantallita mostrará “Modo lectura” y entraremos en unos menús. Con una pulsación corta saltamos entre opciones, con una larga (2″) seleccionamos una opción. Y así, como si estuviéramos telegrafiando en Morse, podemos ir accediendo a diferentes datos que nos pueden interesar. Os pongo el mapa de las opciones de menú:

  • Modo lectura
  • Fabricante
  • Contrato 1
  • Actual
  • Energía activa consumida (kwh)
  • Energía reactiva consumida (kvarh)
  • Excesos consumo (kwh)
  • Maxímetro – Potencia máxima cuarto horaria consumida (kw)
  • Energía activa exportada (kwh)
  • Energía reactiva exportada (kvarh)
  • Excesos producción (kwh)
  • Potencia máxima cuarto horaria exportada (kw)
  • Cierre-N
  • Los mismos valores que “Actual” pero para el periodo N
  • Hora del cierre
  • Día del cierre
  • Potencia
  • 1.135.1 Potencia contratada (kw)
  • Información
  • Alarma
  • Config actual
  • (ON/OFF) indica si está activado el ICP o no
  •  (ON/OFF) ídem
  • (V) voltaje nominal de la instalación
  • fecha del cambio de horario de primavera
  • fecha del cambio de horario de otoño
  • Total
  • Valores instantáneos
  • Tensión (V)
  • Intensidad (A)
  • Cos fi
  • kwh totales
  • Potencia instantánea activa (kw)
  • Potencia instantánea reactiva (kvar)
  • Factor de potencia
  • Hora del contador
  • Día del contador
  • Verificación
  • Información
  • Menú

Los contadores inteligentes con discriminación horaria muestran las lecturas con un sufijo que indica el periodo, como 1.18.1 para el periodo punta y 1.18.2 para el valle, y un asterisco en el periodo vigente. La potencia contratada, indicada como 1.135.1, debe coincidir con la facturada, y es útil para verificar cambios solicitados. El estado del ICP se muestra con 0.99.7.0 y 0.99.7.1, y en tarifas con maxímetro ambos deben estar en OFF. El consumo instantáneo (0.17.0) se muestra en kW con precisión de 10W, útil para monitorear el consumo de aparatos. El maxímetro (1.16.1) registra el máximo de potencias promedio cada 15 minutos, crucial en tarifas 3.0. La intensidad (0.317.0 en monofásico y 0.317.0-0.717.0 en trifásico) ayuda a equilibrar consumos en instalaciones trifásicas. La energía reactiva consumida (1.58.0) es importante en tarifas 3.0, ya que exceder el 33% de la activa implica costos adicionales. Los contadores realizan cierres mensuales y guardan datos de hasta 12 meses, útiles para verificar consumos anteriores.

Comentar que aunque el contador esté en un cuarto de la comunidad, tenemos todo el derecho del mundo a acceder a él. Las llaves de dichos cuartos son todas iguales y se venden en las ferreterías. Tampoco hay que tener miedo a pulsar el botón que lleva, está ahí para eso. Romper precintos y puentear cables por supuesto es cometer una legalidad que nos puede acarrear graves consecuencias.

También para los amigos aficionados sin duda habrán observado que hay un elemento característico: el puerto óptico. El puerto óptico es para comunicación local con medidores de energía. Con el software adecuado y un cabezal de comunicación óptica se puede acceder al medidor para leer y escribir ciertos parámetros.

Mitos sobre los contadores inteligentes

Los contadores inteligentes tienen varios mitos asociados. Uno es que saltan más por exceso de potencia, lo cual puede ser cierto si no tenías un ICP físico o si tu instalación trifásica está mal equilibrada. Sin embargo, si te pasas de potencia, no te cortan la luz ni te cobran por restablecerla; solo necesitas apagar el dispositivo que causó la sobrecarga y reiniciar el interruptor general.

Además, la compañía no te obliga a aumentar la potencia si el contador salta frecuentemente, y no te cobran un recargo por exceder la potencia contratada en suministros domésticos. Por último, si tienes paneles solares sin un equipo de inyección cero, el contador inteligente informará a la distribuidora de la energía generada.

2024 03 31 14 30 20 Medidor de energia con Arduino Busqueda de Google Personal  Microsoft​ Edge
Por cierto, si te interesa el tema de los contadores inteligentes caseros para visualizarlos en casa , en estos blog hemos publicado bastantes diseños al respecto: contador de energia basado en arduino, Como conocer el consumo eléctrico de una forma barata,Contador inteligente basado en Home Assistant, etc ( como ves amigo lector , este es un tema que nos interesa a todos, y no es para menos dado el altísimo precio que pagamos por la energia).