Instalar NILMTK en Ubuntu


EL NILM o Non-Intrusive Load Monitoring, es decir la desagregación no intrusiva de la demanda . es una técnica computacional para la estimación del consumo individual de diversos dispositivos utilizando para ello la lectura agregada de un único medidor de energía (Smart Meter, SM).

Gracias a las ventajas en cuanto instalación , coste e implementación, éste concepto ha tomado relevancia en los últimos años en el ámbito de las Smart Grids, al aportar una estimación de los hábitos de consumo de los clientes sin la necesidad de un despliegue masivo de contadores inteligentes en cada punto de consumo.

Tal es el interés por esta técnica que desde el 2010 , el número de publicaciones científicas referentes al NILM se ha incrementado exponencialmente sin duda condicionado por los beneficios de esta técnica en el marco de las redes inteligentes de energía como por ejemplo la posibilidad de generar facturas de electricidad que muestren en detalle el consumo de los electrodomésticos utilizando solamente las lecturas de un SM

Asimismo, existen aplicaciones de Energy Management System (EMS) en conjunto con NILM, las cuales pueden ser compatible con los programas de respuesta a la demanda o Demand Response (DR) de las compañías de electricidad.

Por otro lado, algunos plantean la posibilidad de usar NILM para detectar averías en los dispositivos cuando se presenta un comportamiento anómalo en las mediciones desagregadas.
Es así como NILM se presenta como una valiosa herramienta para reducir el consumo de energía, tanto así que algunos afirman que es el “santo grial de la eficiencia energética”.

En este contexto vamos a ver una herramienta o toolkit open software llamado NILMTK que nos va a ayudar a comparar algoritmos para implementar la desagregación ( ademas particularmente no contempla un uso diferente a este)

Los entornos virtuales hacen que la organización de paquetes de Python sea pan comido. Además, el proyecto NILMTK ofrece varias versiones de Conda Forge. 

Instalación de Conda

Primero, consiga Anaconda aquí. Luego, abra una ventana de terminal e inicie la instalación desde la línea de comando:

Dowloads cd / 
bash Anaconda3-2020.11-Linux-x86_64.sh -u

Se le guiará a través de varios pasos. Instale Conda y pruebe la instalación ejecutando el comando conda en el símbolo del sistema:

conda

En caso de que el comando conda resulte en «un error de intérprete incorrecto» (es decir, no existe tal error de archivo o directorio), aplique la siguiente solución:

cd / inicio / usuario / nano .bashrc

agregue la línea:

export PATH = ~ / anaconda3 / bin: $ PATH

Guarde los cambios en el archivo y, finalmente, ejecute el comando:

source .bashrc

Felicidades, acaba de instalar Conda.

Instalación de NILMTK

Abra una ventana de terminal, cree un nuevo entorno de Conda y actívelo:

conda create --name nilmtk-env 
conda activate nilmtk-env

Si aún no está presente en su instalación de Conda, agregue el conda-forge a la lista de canales:

conda config --add channels conda-forge

Finalmente, instale la última versión de NILMTK de conda-forge :

conda install -c nilmtk nilmtk=0.4.3

Observe que el signo igual no lleva espacios(piense estamos usando Python.

La ejecución del comando puede tardar un rato. Mientras tanto, consulte otros paquetes en Forge de NILMTK .

Como puede experimentar algunos problemas posteriores a la instalación con NILMTK y Matplotlib., para s olucionarlos, aplique el comando:

conda install matplotlib=3.3.2

Agregar un kernel de Jupyter

Básicamente, NILMTK ahora está instalado en su ordenador. El siguiente paso involucra los cuadernos de Jupyter. Trabajar con Jupyter abre muchas posibilidades y se dice que es una herramienta imprescindible. Por lo tanto, agregue el entorno NILMTK a Jupyter:

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

Prueba de la instalación

Ha llegado el momento de comprobar su instalación. Antes que nada, cree una nueva carpeta y descargue el conjunto de prueba aleatorio de Github:

mkdir nilmtk_test / cd nilmtk_test / wget https://raw.githubusercontent.com/nilmtk/nilmtk/master/data/random.h5

Como puede comprobar random.h5 es el fichero de de datos en en formato hdf5 .A continuación, levante Jupyter:

notebook jupyter

Para probar su instalación, intente importar el conjunto de datos aleatorio usando NILMTK y trazar todos los medidores:https://klemenjak.medium.com/media/9ba2be16d331653a7b4093a0fe412434

La salida debe ser:

MeterGroup (metros =   ElecMeter (instancia = 1, edificio = 1, conjunto de datos = Ninguno, electrodomésticos = [])   ElecMeter (instancia = 2, edificio = 1, conjunto de datos = Ninguno, electrodomésticos = [])   ElecMeter (instancia = 3, edificio = 1, conjunto de datos = Ninguno, electrodomésticos = [])   ElecMeter (instancia = 4, edificio = 1, conjunto de datos = Ninguno, electrodomésticos = [])   ElecMeter (instancia = 5, edificio = 1, conjunto de datos = Ninguno, electrodomésticos = []) )

¡Felicitaciones! Lo ha logrado. ¡NILMTK parece funcionar según lo previsto! La próxima vez, discutiremos cómo usar la API de NILMTK para una experimentación rápida y conveniente.

Si no consigue iniciar el entorno de jupyter notebook siguiendo las instrucciones anteriores, puede seguir estas instrucciones de instalación de Anaconda y Jupyter Notebook – Ubuntu. (las instrucciones han sido probadas con Ubuntu 20.04 de 64 bits y Anaconda3 2021.05 de Continuum)

Instalacion de Anaconda y Jupyter Notebook

1. Abra el programa Terminal yendo a «Mostrar aplicaciones» y seleccionando la Terminal .

2. Escriba los comandos de abajo para ir al directorio de Descargas y descargar Anaconda3 2021.05. Anaconda puede tardar unos minutos en descargarse.usuario@ubuntu:~$ 

cd Descargas
nombreusuario@ubuntu:~/Descargas$ 

wget https://repo.anaconda.com/archive/Anaconda3-2021.05-Linux-x86_64.sh

3. Escriba el comando para instalar Anaconda.usuario@ubuntu:~/Descargas$ 

bash ./Anaconda3-2021.05-Linux-x86_64.sh

4. Presione Enter para leer el acuerdo de licencia. Use Space para continuar a la página siguiente.

5. Escriba yes para aceptar los términos de la licencia.

¿Aprueba los términos de la licencia? [yes|no]
[no] >>> yes

6. Presione Enterpara instalar Anaconda en la ubicación predeterminada.

Anaconda ahora se instalará en esta ubicación: /home/username/anaconda3
– Presione ENTER para confirmar la ubicación
– Presione CTRL-C para cancelar la instalación
– O especifique una ubicación diferente a continuación
[/home/username/anaconda3] >>> (presione ENTER)

7. Escriba yes para que Anaconda actualice su RUTA.

instalación terminada.
¿Desea que el instalador inicialice Anaconda3
ejecutando conda init? [yes|no]
[no] >>> (presione yes)

==> Para que los cambios surtan efecto, cierre y vuelva a abrir su shell actual. <==

Si prefiere que el entorno base de conda no se active al inicio, establezca el parámetro auto_activate_base en false:
conda config –set auto_activate_base false ¡

8. Abra una nueva ventana de Terminal yendo a «Mostrar aplicaciones» y seleccionando la Terminal .

9. Escriba el comando para verificar que se instaló Anaconda.

(base) usuario@ubuntu:~$ python –versión
Python 3.8.5

10. Escriba el comando para actualizar Anaconda.

(base) usuario@ubuntu:~$ conda update –all –yes

Ahora que tiene un instalación limpia debería repetir la instalación de nilmtk y creación del entrono nilmtk-env descritos en este post justo despues de instalar Conda . Seguidos esos pasos ya debería estar en condiciones de Iniciar Jupyter Notebook

1. Escriba el comando para iniciar Jupyter Notebook.

usuario@ubuntu:~$ jupyter notebook

Mas información en https://github.com/nilmtk/nilmtk

Regleta IoT para ahorro de energía



En este proyecto el autor utlizaba interruptores de alimentación de red en su lugar de trabajo para encender / apagar / apagar y encender de forma remota hosts y otros equipos. Estos son equipos bastante caros que generalmente tienen una interfaz basada en web o de línea de comando para administrar el equipo remoto. En su casa, tiene dos tomas de corriente a las que están conectados varios dispositivos. Pensó que sería genial si tuviera algo como el interruptor de alimentación de red en sui casa por las siguientes razones:

1. Contaba con dos Raspberry Pis que a veces cuelgan y tienen que encenderlas y apagarlas. Hacerlo a la antigua usanza es bastante tedioso.

2. Hay algunos dispositivos, como el televisor, el decodificador de cable, la barra de sonido, etc., que se ponen en modo de espera cuando no se usan activamente. Aunque están en modo de espera, todavía obtienen algo de energía. el autor necesitaba una forma de apagarlos cuando no se usa para ahorrar energía.

3. Hay otros dispositivos que no tienen un modo de espera y necesitan ser encendidos para usarlos y apagarlos más tarde.

Componentes

  • Chip microcontrolador: ATMEGA1284P-PU
  • Módulo ESP8266 ESP-01
  • Pantalla LCD ILI9341 TFT Touch SPI
  • Registro de desplazamiento 74HC595 x 3
  • Módulo de relé de 8 canales x 2
  • Módulo de relé de 4 canales o dos módulos de relé de 2 canales
  • Tira de LED WS2812B
  • Oscilador de cristal de 8 MHz
  • Resistencias
  • Condensadores
  • Breakaway encabezados macho y hembra
  • Tomas dc hembra
  • PCB
  • Módulo de fuente de alimentación de 220 V CA a 5 V CC 2 amperios
  • LM1117 3.3v LDO regulador de voltaje
  • Regletas de enchufes
  • Recintos
  • Fuente de alimentación de 220v a 5v 40 amperios

El circuito

El circuito no es complicado. El ATMEGA1284P (con el cargador de arranque Arduino) se utiliza para enviar datos a los tres registros de desplazamiento 595 conectados en serie. Las salidas de los registros de desplazamiento están conectadas a los relés. Dependiendo de los datos enviados a los registros de desplazamiento, los relés individuales se pueden activar o desactivar. Los relés se utilizan para encender o apagar los enchufes de las tomas de corriente.

Un módulo ESP8266 está conectado al Arduino a través del puerto serie. El módulo ESP8266 recibe comandos a través de WiFi y los envía al Arduino. También hay disponible una pantalla táctil LCD que muestra los estados de los enchufes individuales y a través de los cuales también se pueden controlar los enchufes.

Los archivos Kicad del circuito se pueden encontrar en la carpeta power_strip_kicad

Preparar las tiras de alimentación

Modificar las tiras de potencia es bastante sencillo. Como se puede ver, ambas regletas tienen interruptores para cada toma.

Generalmente, el cable de línea se conectará a un extremo de los interruptores y el otro extremo de cada interruptor se conectará al orificio de línea de cada toma. Esta conexión entre el cable de línea y los interruptores debe eliminarse. Los cables deben soldarse a cada uno de los interruptores. También es necesario soldar un cable al cable de línea que proviene de la red eléctrica.

La idea es que el cable de línea se conectará al terminal central (COM) del relé. Los terminales COM de todos los relés también estarán conectados entre sí. Y los cables de cada uno de los interruptores se conectarán al terminal NO (normalmente abierto) de cada relé. Por lo tanto, cuando el relé se apaga, el circuito se abrirá y el zócalo se apagará. Cuando se enciende el relé, el circuito se cerrará y el zócalo se encenderá

Código

El boceto de Arduino para el chip ATMEGA1284 y el código fuente para el firmware del módulo ESP8266 se pueden encontrar en: https://github.com/tangophi/IoT-Power-Strip

El firmware de los módulos ESP8266 se basa en el sdk abierto ESP8266. En lugar del SDK, Arduino IDE también se puede utilizar.

La idea general es que el módulo ESP8266 se suscribe a los siguientes temas de MQTT:

/ board3 / OnCommand

/ board3 / OffCommand

/ board3 / ResetCommand

La aplicación de teléfono inteligente NetIO envía mensajes de socket a la instancia de nodo rojo en la frambuesa pi. Lo que a su vez envía mensajes apropiados a los temas MQTT. Cuando el ESP8266 recibe estos mensajes, envía cadenas JSON al Arduino a través del puerto serie UART. Y cuando el Arduino recibe estas cadenas, enviará los datos apropiados a los registros de desplazamiento para encender / apagar los relés. Cuando se recibe un comando de reinicio, apagará el relé y lo volverá a encender después de 5 segundos. El Arduino también actualizará la pantalla LCD con los estados de los enchufes.

Cuando la pantalla LCD se usa para controlar los zócalos, el Arduino enviará el estado modificado del zócalo al módulo ESP8266. El módulo wifi enviará esta información al agente MQTT y la instancia de nodo rojo se actualizará. Y la aplicación NetIO consultará periódicamente la instancia de nodo rojo para conocer los últimos estados de los sockets y actualizará la aplicación en consecuencia. El Arduino también enviará periódicamente los estados de todos los sockets.Añadir consejo Hacer pregunta Comentario Descargar

Se utilizan en este proyecto o dos Raspberry Pis, un concentrador USB con alimentación, un proyecto Ambilight y algunos otros proyectos de 5v. La alimentación de cada uno de ellos requería adaptadores de fuente de alimentación individuales de 220v a 5v. Para deshacese de estos adaptadores, se optó por una fuente de alimentación de 40Amps 5V. Y lo conecté a 8 tomas de corriente CC hembra en una caja de plástico. Cada una de estas tomas de CC está controlada por un relé

Montaje / Instalación

Como se puede ver en las imágenes, se utilizaron cuatro cajas de plástico para instalar la placa de circuito y los módulos de relé.

* Se utilizo un cortador de cartón para hacer un agujero en la tapa de un gabinete para que se ajuste a la pantalla LCD.

* Se utilizó un taladro para hacer 8 agujeros en otro recinto para que se ajusten a las tomas CC hembra.

Luego se trataba de conectar el cable de línea de cada regleta a los terminales COM de los relés y los cables de cada interruptor al terminal NO de cada dispositivo.

Para el primer módulo de relé, se conecta el terminal positivo de la fuente de alimentación de 5v 40A a los terminales COM del relé. Luego conectar el terminal NO de cada relé al terminal positivo de las tomas de CC. También se usan algunos condensadores entre los + y – de cada jack solo para suprimir / evitar cualquier ruido

Aplicación para teléfonos inteligentes

La aplicación para teléfonos inteligentes se creó con el Editor de diseño de NetIO en

http://netio.davideickhoff.de/editor

Una vez que la aplicación está diseñada, la aplicación NetIO debe descargarse a su teléfono inteligente. Tenga en cuenta que esta es una aplicación de pago, pero no cuesta mucho. Cada vez que se presiona un botón / interruptor / control deslizante en la aplicación, enviará un mensaje a través de los sockets al cuadro Rpi que se está ejecutando en el nodo rojo. La aplicación de nodo rojo procesará los mensajes y luego enviará mensajes MQTT a la placa de la regleta de alimentación de IoT.

Para que la aplicación del teléfono inteligente funcione, debe estar en la misma red que la placa de la tira de alimentación de IoT. Es posible usar la aplicación de teléfono inteligente desde fuera de la red local. Si el ISP permite conexiones entrantes, es solo cuestión de reenviar el puerto del zócalo en el enrutador. Si el ISP no permite conexiones entrantes, entonces se puede usar VPN como solución alternativa

Con la aplicación de teléfono inteligente, es posible encender / apagar / restablecer cualquiera de los enchufes. Con la pantalla táctil LCD, es posible encender / apagar cualquier enchufe. Además, el estado de cada una de las tomas se actualiza periódicamente tanto en la pantalla como en la pantalla LCD

Para obtener más detalles sobre cómo encajan las distintas piezas, puede visitar este segundo instructable en https: //www.instructables.com/id/IoT-Wall-Outlet-wi … Ese instructable es sobre otro proyecto de automatización del hogar y tiene descripciones detalladas sobre cómo otra placa IoT en una casa está controlada por node-red y la aplicación de teléfono inteligente. El proyecto de regleta IoT también utiliza las mismas instancias de nodo rojo y MQTT.

La razón por usar un chip ATMEGA1284 es por tener una pantalla LCD táctil. También era bastante posible hacerlo con un Arduino Pro Mini, pero la memoria no es suficiente para esas necesidades. Por lo tanto, utilizó el chip ATMEGA1284.Si no necesita la pantalla LCD, puede usar un Arduino y un módulo ESP8266 o simplemente un módulo ESP8266 ESP12.

Fuente https://www.instructables.com/id/IoT-Power-Strip/