Como instalar nilmtk-contrib y no morir en el intento


Introducción a nilmtk_contrib

nilmtk_contrib es un repositorio que contiene una colección de algoritmos de vanguardia para la tarea de desagregación energética, implementados utilizando la API de Experimentación Rápida de NILMTK. Estos algoritmos están diseñados para ayudar en el monitoreo no intrusivo de la carga (NILM), que tiene como objetivo descomponer el consumo de energía agregado de un hogar en datos de consumo a nivel de electrodomésticos.

El repositorio nilmtk_contrib incluye algoritmos como:

  • Modelo Oculto de Markov Factorial Aditivo (Additive Factorial Hidden Markov Model)
  • Modelo Oculto de Markov Factorial Aditivo con Restricciones de Señal Agregada
  • Codificación Dispersiva Discriminativa
  • Autoencoder Denoising RNN
  • Seq2Point
  • Seq2Seq
  • WindowGRU

Estos algoritmos permiten realizar tareas como:

  • Entrenamiento y pruebas en múltiples electrodomésticos
  • Entrenamiento y pruebas en múltiples conjuntos de datos (aprendizaje por transferencia)
  • Entrenamiento y pruebas en múltiples edificios
  • Entrenamiento y pruebas con agregados artificiales
  • Entrenamiento y pruebas con diferentes frecuencias de muestreo

Para aquellos interesados en la investigación o en aplicaciones prácticas de NILM, nilmtk_contrib ofrece una plataforma robusta para experimentar con diferentes técnicas y enfoques en la desagregación energética

Instalación de Nilmtk_contrib

Nilmtk-contrib pretende simplificar el uso del famoso paquete open software NILMTK el cual conlleva una curva de aprendizaje considerable. Lo normal es que si tiene los paquetes siguientes pueda instalarse de forma sencilla:

  • NILMTK>=0.4
  • scikit-learn>=0.21 (already required by NILMTK)
  • Keras>=2.2.4
  • cvxpy>=1.0.0

Puede instalar en su entorno actual con:

conda install -c conda-forge -c nilmtk nilmtk-contrib

o crear un entorno dedicado (recomendado) con:

conda create -n nilm -c conda-forge -c nilmtk nilmtk-contrib

A menos que sea un usuario avanzado, es mejor utilizar el paquete Conda en lugar del repositorio Git, ya que este último puede contener cambios en curso.

Lo normal es que esto NO se mire las dependencia e intentemos instalarlo directamente. Si no se cumplen los requisitos anteriores un intento de instalación hará que se quede en un bucle infinito dado que el instalador no comprueba estos requisitos.

En este caso para poder instalarlo , lo mejor es desinstalar el entorno mal configurado, instalar las librerías que faltan y repetir la instalación mejor que con anaconda com Mamba (mas rápido) o con Anaconda. Veamos con mas detalle como hacerlo.

Desinstalación de instalaciones incorrectas en conda o mamba

Primero listamos todos los entornos usando el comando conda env list

Para desinstalar un entorno con Anaconda, puede seguir estos pasos:

  1. Asegúrese de que no está en el entorno que deseas eliminar. Si es necesario, puede desactivar el entorno actual con el comando:
conda deactivate
  1. Una vez que esté en el entorno base o en cualquier otro que no sea el que quiere eliminar, utilize el siguiente comando para desinstalar el entorno deseado (reemplaza nombre_entorno con el nombre real de tu entorno):
conda env remove -n nombre_entorno

Este comando eliminará el entorno especificado junto con todos los paquetes y dependencias que contiene. Si desea confirmar que el entorno ha sido eliminado, puede listar todos los entornos existentes con:

conda env list

El entorno que elimine ya no debería aparecer en la lista.. Por cierto el comando conda env remove -n, el argumento -n espera el nombre del entorno, no la ruta al directorio del entorno. Si desea eliminar un entorno utilizando la ruta al directorio donde está instalado, debe usar el argumento -p en lugar de -n. Aquí muestro cómo hacerlo correctamente:

conda env remove -p C:\Users\carlo\anaconda3\envs\nombre_entorno

Asegúrese de reemplazar nombre_entorno con el nombre real del entorno que desea eliminar. Si no estás seguro del nombre del entorno, puede listar todos los entornos disponibles con el comando:

conda env list

Esto mostrará todos los entornos y sus rutas correspondientes. Luego, puede usar la ruta correcta con el comando conda env remove -p para eliminar el entorno deseado.

IMPORTANTE: con estos comandos podemos eliminar entornos tanto de anaconda como de mamba.

Desinstalación con Mamba

Para desinstalar un entorno en Mamba, puede seguir un proceso similar al de Conda, ya que Mamba es un reemplazo rápido para Conda. Aquí muestro cómo hacerlo:

  1. Primero, asegúrese de no estar en el entorno que desea eliminar. Si es necesario, sal del entorno actual con el comando:
mamba deactivate
  1. Luego, para eliminar el entorno deseado, utilice el siguiente comando (reemplaze nombre_entorno con el nombre real de tu entorno):
mamba env remove -n nombre_entorno

Este comando eliminará el entorno especificado junto con todos los paquetes y dependencias que contiene. Para confirmar que el entorno ha sido eliminado, puede listar nuevamente todos los entornos existentes con:

mamba env list

El entorno que eliminó no debería aparecer en la lista. Recuerde que Mamba utiliza el mismo sistema de gestión de entornos que Conda, por lo que los comandos son muy similares ( por no decir idénticos).

Dependencias de nilmtk_contrib

Se nos olvida siempre que existen dependencias que debemos solucionar antes de instalar un paquete. En nuestro caso para nilmtk_contrib son las siguientes:

  • NILMTK>=0.4
  • scikit-learn>=0.21 (already required by NILMTK)
  • Keras>=2.2.4
  • cvxpy>=1.0.0

NILMTK

Para verificar la versión de NILMTK instalada en su entorno de Anaconda, puede abrir una terminal o el Anaconda Prompt

  • Active su entorno nilmtk-env con el siguiente comando en la terminal o Anaconda Prompt
conda activate nilmtk-env
  • Ejecute el comando:
conda list nilmtk

scikit-learn

Para comprobar si tiene instalado scikit-learn en su entorno nilmtk-env, puede seguir estos pasos:

  1. Active su entorno nilmtk-env con el siguiente comando en la terminal o Anaconda Prompt:
conda activate nilmtk-env
  1. Una vez activado el entorno, ejecute el siguiente comando para listar los paquetes instalados y buscar scikit-learn:
conda list

Keras

  1. Active tu entorno nilmtk-env con el comando:
conda activate nilmtk-env
  1. Luego, para comprobar si Keras está instalado, utilize el comando:
conda list | findstr keras

Si Keras está instalado, verá el nombre del paquete y su versión en los resultados. Si no aparece, significa que no está instalado en ese entorno.

Si necesita instalar Keras, puede hacerlo con el siguiente comando en Conda:

conda install -c conda-forge keras

Cvxpy

  1. Active tu entorno nilmtk-env con el comando:
 conda activate nilmtk-env
  1. Luego, para comprobar si cvxpy está instalado, utilice el comando:
conda list | findstr cvxpy

Si no aparece ,para instalar cvxpy, puede utilizar el gestor de paquetes de Conda o pip. Aquí muestro cómo hacerlo con Conda:

conda install -c conda-forge cvxpy

Mamba

Existe un repositorio en github que contiene los instaladores mínimos para Conda y Mamba específicos para conda-forge, con las siguientes características preconfiguradas:

  • Los paquetes del entorno base se obtienen del canal conda-forge.
  • El canal conda-forge se establece como el predeterminado (y único) canal.
  • Ponemos énfasis en soportar varias arquitecturas de CPU (x86_64, ppc64le, y aarch64 incluyendo Apple Silicon). El soporte opcional para PyPy en lugar del intérprete Python estándar (también conocido como «CPython») se proporciona en los instaladores con -pypy3- en su nombre de archivo.

Los instaladores de Miniforge están disponibles aquí: https://github.com/conda-forge/miniforge/releases

Descargue y ejecute el instalador de Windows. Siga las instrucciones, teniendo en cuenta las opciones «Crear accesos directos en el menú de inicio» y «Añadir Miniforge3 a mi variable de entorno PATH«. Esta última no está seleccionada por defecto debido a posibles conflictos con otro software.

Aceptamos la licencia y luego seleccionamos la opción que nos interés

Se instalara por defecto al usuario, ahora toca seleccionar el directorio de instalación ( por defecto es el del usuario)

Usar ahora loas opciones recomendadas ( ojo porque pueden venir desmarcadas).

Ya solo pulsamos el boton de instalacion.

Esperamos a que concluya la instalación

Hay problemas conocidos con el uso de caracteres especiales y espacios en la ubicación de instalación, ver por ejemplo #484. Recomendamos a los usuarios instalar en un directorio sin tales caracteres en el nombre.

Sin Miniforge3 en la ruta, la forma más conveniente de usar el software instalado (como los comandos conda y mamba) será a través del «Miniforge Prompt» instalado en el menú de inicio.

Instalación con Mamba

Para instalar nilmtk-contrib en Windows utilizando Mamba, primero necesita tener Anaconda o Miniconda instalado en tu sistema. Luego, puede seguir estos pasos:

Abra Anaconda Prompt o cualquier terminal que tenga configurada con Anaconda o Miniconda.

Cree un nuevo entorno con Mamba. Puede hacerlo con el siguiente comando:

mamba create -n nilmtk-contrib-env python=3.8

Una vez finalizado nos informa como podemos activar o desactivar el nuevo entorno:

Activamos el nuevo entorno:

mamba activate nilmtk-contrib-env

Instalar las dependencias necesarias:


mamba install -c conda-forge numpy pandas matplotlib scipy scikit-learn jupyter

y tras unos minutos habrá terminados

Luego, clonamos el repositorio nilmtk-contrib desde GitHub:


git clone https://github.com/nilmtk/nilmtk-contrib.git


Navegue al directorio clonado:

cd nilmtk-contrib

Instalar nilmtk-contrib utilizando pip:


pip install -e .


Esto debería instalar nilmtk-contrib en su entorno de Anaconda o Miniconda en Windows, pero como vemos en este ejemplo ha dado error, así que es mejor lo podemos intentar sin github desde mamba:

(nilmtk-contrib-env) C:\Users\carlo\nilmtk-contrib>mamba create -n nilm -c conda-forge -c nilmtk nilmtk-contrib

¿que ha pasado? Pues que puede que no tengamos el resto de librerías como keras, cvxpy y nilmtk. Para comprobarlo una vez mas ejecutamos mamba list para comprobarlo :

Si no aparecen ,para instalar cvxpy, keras y nilmtk puede utilizar el gestor de paquetes de Conda o pip. Aquí se muestra cómo hacerlo con mamba:

mamba install -c conda-forge cvxpy

mamba install -c conda-forge keras

mamba install -c nilmtk nilmtk=0.4.3

Ahora ya deberíamos tenerlo todo para intentar repetir la instalación de nilmtk-contrib

Ahora puede importarlo en tus scripts de Python y utilizarlo según sea necesario. Recuerde que algunas de estas instrucciones asumen que ya tiene Git instalado en tu sistema. Si no es así, necesitará instalarlo primero para poder clonar el repositorio de GitHub.

Consulte este notebook para usar los algoritmos nilmtk-contrib, usando la nueva NILMTK-API.

¿Y si persistiese el error?

Aquí tienes algunos pasos adicionales que puedes seguir para intentar resolver este problema:

  1. Verifique la estructura del directorio: Asegúresee de que estás en el directorio correcto que contiene el archivo setup.py. El error sugiere que pip está buscando en nilmtk-contrib/nilmtk_contrib, pero debería estar en nilmtk-contrib solamente.
  2. Revise el archivo setup.py: Si el archivo setup.py no existe en el directorio, necesitará obtenerlo del repositorio oficial o asegurarse de que está en el directorio correcto que contiene dicho archivo.
  3. Instalación manual: Si el archivo setup.py está presente, intente ejecutarlo manualmente con Python para ver si hay algún mensaje de error más detallado:python setup.py install
  4. Ambiente virtual: Asegúrese de que su entorno virtual está activo y que está utilizando la versión correcta de Python para la instalación.
  5. Reinstale nilmtk: A veces, reinstalar nilmtk puede resolver problemas de compatibilidad:pip uninstall nilmtk pip install nilmtk==0.4.3
  6. Consulte la documentación oficial: La guía de instalación de NILMTK puede tener pasos específicos para la instalación que podrían ser útiles.

Ejemplo del programa de interfaz con windows para PZEM-004T V3 V3.0 usando Arduino


En este post, discutiremos el uso o la utilización del módulo PZEM-004T V3.0 (del que hemos hablado en este blog en numerosas ocasiones), el cual se interconecta utilizando cualquier variante de Arduino (por ejemplo Arduino UNO o Arduino Mega2560).

A tener en cuenta que si se utiliza el programa de ejemplo con el Hardware Serial, se necesita el Arduino Mega2560 porque el Hardware Serial del Arduino UNO ya se utiliza para la comunicación con el Monitor Serial.

El módulo PZEM-004T V3.0 es una versión mejorada de PZEM-004T V2.0 y también el protocolo para comunicar la interfaz usado es diferente, es decir el programa de la biblioteca para PZEM-004T V2 no se puede utilizar para la interfaz con PZEM-004T V3.0.

Hardware requerido

En este ejemplo de programa de módulo PZEM-004T V3, se necesita algo de hardware, entre otros:

  • Módulo PZEM-004T V3.0
  • Arduino UNO o Arduino Mega2560
  • Algunos cables puente MF/FF
  • Carga (puede usar luces TL / bombilla / LED / taladro eléctrico)
  • USB a Serial TTL (opcional para probar funciones usando la aplicación Master PZEM-004T).

Diagrama de circuito/cableado

En la siguiente tabla se muestra la conexión o conexión entre el módulo PZEM-004T V3.0 y Arduino

PZEM-004T V3.0Arduino UNO/Mega2560
CCV+5V
TIERRATIERRA
TexasRX (serie de software/serie de hardware)
RXTX (serie de software/serie de hardware)

Para la conexión o conexión entre PZEM-004T V3.0 con Transformador de Corriente (CT), Carga y Arduino en su totalidad se puede ver en la siguiente imagen:

conexiones-pzem

Prueba de funcionamiento del módulo PZEM-004T V3.0

Hay ocasiones en las que hacemos un programa con Arduino y después de subirlo resulta que la salida no es la esperada, muchos se quejan de que el módulo PZEM-004T V3.0 está dañado o funciona mal.

Por esta razón, antes de interconectar el módulo PZEM-004T V3.0 con Arduino, le recomendamos que primero pruebe la función del módulo PZEM-004T V3.0 para asegurarse de que el módulo PZEM-004T V3.0 no esté dañado o funcionando. adecuadamente.

Descargue la aplicación para probar el módulo de función PZEM-004T V3.0 en el siguiente enlace: Software PZEM-004T Nueva versión

Antes de ejecutar el programa debemos descargar isAnalogLibrary.ocx, que es un archivo de componente de objeto ActiveX, es decir un tipo de archivo que se utiliza en sistemas operativos Windows para implementar funcionalidades de software reutilizables. Los componentes de objeto ActiveX se pueden utilizar en aplicaciones de Windows para añadir funcionalidades especiales, como controles de usuario personalizados, gráficos y animaciones, y para interactuar con otros programas o con el sistema operativo.

Los archivos con la extensión .ocx suelen ser archivos de biblioteca de enlace dinámico (DLL) que contienen código ejecutable y datos que se pueden utilizar en aplicaciones de Windows. Los archivos .ocx se pueden cargar en memoria y utilizar en tiempo de ejecución por varias aplicaciones, lo que permite ahorrar espacio en disco y memoria en el sistema.

A continuación, extraiga / descomprima el archivo que descargó anteriormente, luego registre el archivo: isAnalogLibrary.ocx en el sistema operativo Windows PC / Laptop de la siguiente manera:

  • Copie el archivo  isAnalogLibrary.ocx  a la carpeta:  Windows/System32/
  • Abra  el símbolo del sistema  o  cmd.exe
  • Escriba: Regsvr32.exe C:\Windows\System32\isAnalogLibrary.ocx
  • Si tiene éxito, aparecerá una notificación «Registrado con éxito»

Después de registrar correctamente el archivo: isAnalogLibrary.ocx , ejecute el archivo: PZEM004T-Master.exe para comprobar si el módulo PZEM-004T V3.0 funciona o no.

programa-windows-para-pzem

Tenga en cuenta que, para realizar pruebas con la aplicación, necesita un hardware USB a Serial TTL que está ampliamente disponible en el mercado, como: tipo CH340, tipo PL2303, etc., como se muestra a continuación.

adaptador-usb-serie


Un adaptador USB a Serial TTL es un dispositivo de hardware que se utiliza para convertir señales de transmisión en serie (TTL) en señales USB y viceversa. Los adaptadores de este tipo se utilizan a menudo para conectar dispositivos que utilizan señales de transmisión en serie, como microcontroladores y módems, a un puerto USB de un ordenador soliendo incluir un chip de conversión de señales que se encarga de realizar la conversión entre las señales USB y las señales TTL. Algunos adaptadores también incluyen una interfaz de programación en circuito (ICP) que se puede utilizar para programar microcontroladores o realizar otras tareas de depuración y diagnóstico.

Estos adaptadores suelen ser pequeños y portátiles, y se pueden utilizar para conectar dispositivos a un ordenador de escritorio o portátil mediante un cable USB. Algunos adaptadores también tienen opciones de montaje en panel, lo que los hace adecuados para su uso en equipos de automatización y sistemas de control.

Después de ensamblar el módulo PZEM-004T V3.0 con carga (puede ser una luz eléctrica/taladro) o con USB a Serial TTL y asegúrese de que el sistema operativo Windows haya reconocido/detectado el USB a Serial TTL, haga clic en Establecer COM Puerto y luego haga clic en Iniciar medida .

Después de probar o probar la función y confirmar que el módulo PZEM-004T V3.0 funciona correctamente, se puede continuar haciendo un programa con Arduino u otro microcontrolador.

Ejemplos de programas para el Arduino

Aparte de la instalacion del harware y del sw en nuestro pc con windows debemos instalar un firmaware en la placa arduino para qeu se comunique con el citado programa . En el programa de ejemplo para acceder o interactuar con el módulo PZEM-004T V3.0 usando este Arduino, usamos la siguiente biblioteca:PZEM-004T-v30  o  PZEM-004T-v30

Después de descargar e instalar la biblioteca, abra el programa de muestra existente de la biblioteca predeterminada o copie y pegue el siguiente boceto:

#include <PZEM004Tv30.h>

PZEM004Tv30 pzem(11, 12); // Software Pin serie 11 (RX) y 12 (TX)

void setup () {
   Serial.begin(115200);
}

void loop () {
   voltaje de flotación = pzem.voltage();
   if (voltaje! = NAN) {
       Serial.print("Voltaje: ");
       Serial.print(voltaje);
       Serial.println("V");
   } else {
       Serial.println("Error al leer el voltaje");
   }

   float current = pzem.current();
   if(current != NAN){
       Serial.print("Current: ");
       Serial.print(current);
       Serial.println("A");
   } else {
       Serial.println("Error al leer la corriente");
   }

   float power = pzem.power();
   if(current != NAN){
       Serial.print("Power: ");
       Serial.print(power);
       Serial.println("W");
   } else {
       Serial.println("Error al leer la potencia");
   }

   float energy = pzem.energy();
   if(current != NAN){
       Serial.print("Energy: ");
       Serial.print(energy,3);
       Serial.println("kWh");
   } else {
       Serial.println("Error al leer consumo");
   }

   float frequency = pzem.frequency();
   if(current != NAN){
       Serial.print("Frequency: ");
       Serial.print(frequency, 1);
       Serial.println("Hz");
   } else {
       Serial.println("Error al leer la frecuencia");
   }

   float pf = pzem.pf();
   if(current != NAN){
       Serial.print("PF: ");
       Serial.println(pf);
   } else {
       Serial.println("Error al leer el factor de potencia");
   }

   Serial.println();
   delay(2000);
}

Tambien podemos usar Serial Hardware de la siguiente manera:

#include <PZEM004Tv30.h>

PZEM004Tv30 pzem(&Serie3); // Hardware de Menggunakan Serie 3

void setup () {
   Serial.begin(115200);
}

void loop () {
     voltaje de flotación = pzem.voltage();
     if (voltaje! = NAN) {
         Serial.print("Voltaje: ");
         Serial.print(voltaje);
         Serial.println("V");
     } else {
         Serial.println("Error al leer el voltaje");
     }

     float current = pzem.current();
     if(current != NAN){
         Serial.print("Current: ");
         Serial.print(current);
         Serial.println("A");
     } else {
         Serial.println("Error reading current");
     }

     float power = pzem.power();
     if(current != NAN){
         Serial.print("Power: ");
         Serial.print(power);
         Serial.println("W");
     } else {
         Serial.println("Error al leer  potencia");
     }

     float energy = pzem.energy();
     if(current != NAN){
         Serial.print("Energy: ");
         Serial.print(energy,3);
         Serial.println("kWh");
     } else {
         Serial.println("Error al leer  energia");
     }

     float frequency = pzem.frequency();
     if(current != NAN){
         Serial.print("Frequency: ");
         Serial.print(frequency, 1);
         Serial.println("Hz");
     } else {
         Serial.println("Error al leer frequencia");
     }

     float pf = pzem.pf();
     if(current != NAN){
         Serial.print("PF: ");
         Serial.println(pf);
     } else {
         Serial.println("Error al leer el factor de potencia");
     }

     Serial.println();
     delay(2000);
 }

Después de cargar el programa de boceto anterior en la placa Arduino, abra el monitor serie a velocidad de transmisión: 115200. Si todo funciona bien, los datos de lectura del módulo PZEM-004T V3.0 se mostrarán en la ventana del monitor serie.