Monitorización de consumo energético con Raspberry pi


Con el fin de intentar optimizar el uso  domestico que hacemos de la energía eléctrica  ,  un seguimiento estadístico del consumo energético nos puede ayudar a conocer nuestro consumo y con ello intentar optimizarlo,   ya que  existe un máxima que afirma que no se puede optimizar  algo que no se pueda medir . Para semejante objetivo  se  pueden utilizar contadores de energía para medir   el consumo del  cuadro  de distribución de corriente alterna de une vivienda   y enviar esta información  en tiempo real  a  un logger de datos basados en una Raspebrry pi 3 por medio del protocolo RS485 (sistema de bus diferencial multipunto, ideal para transmitir a altas velocidades sobre largas distancias y a través de canales ruidosos) permitiendo enviar la información  gracias a este protocolo ,  no solo de un watimetro sino de muchos  todos  operando sobre la misma linea .

El medio físico de transmisión  de  la salida de  dichos contadores  es un par trenzado , el cual admite 32, 128 o 256 estaciones en 1 solo par, con una longitud máxima de 1200 metros operando entre 300 y 19 200 bit/s y la comunicación half-duplex (semiduplex) dependiendo del consumo de cada driver  debido   a que la transmisión diferencial permite alcanzar mayor distancia con una notable inmunidad al ruido, siempre que el bus de comunicación conserve las características de bus balanceado (dando incluso la posibilidad de una configuración multipunto).

Gracias al  sistema de bus diferencial multipunto del protocolo  RS485  , se puede  transmitir únicamente con dos  hilos   a altas velocidades incluso sobre largas distancias (10 Mbit/s hasta 12 metros y 100 kbit/s en 1200 metros)  a través de canales ruidosos (es decir compartiendo las canalizaciones eléctricas  )  , ya que el par trenzado reduce los ruidos que se inducen en la línea de transmisión.

 

En cuanto al  software necesario  para procesar la información de los watimetros   se   pueden utilizar los  siguiente  componentes de código abierto:

  • Minimalmodbus -Leer los parámetros de los contadores de energía
  • InfluxDB -Tiempo base de datos de la serie para almacenar datos
  • Grafana -Herramienta de visualización de datos basada en web

Respecto al  hardware se pueden usan los siguientes elementos:

 

Escudo RS485 SparkFun Linksprite RS485/GPIO Shield

Este  escudo ,como puede adivinar,  es el elemento estrella de esta configuración pues precisamente permite  soportar el  protocolo RS485 en  la Raspberry Pi,  de modo que  podrá tener un puerto de comunicación para su bus de campo directamente conectado a su RPi.

Aunque el RS485 a veces se considera un protocolo «arcaico», permitirá que hasta 32 dispositivos se comuniquen a través de la misma línea de datos a lo largo de una longitud de cable de hasta 1200 mt con una velocidad de datos máxima de 10Mbit / s.  (lo cual no son malos números)

Este escudo viene premontado, así que todo lo que tiene que hacer es ajustarlo directamente a tu Raspberry Pi y obtener la programación. El RS485 Shield V3 es compatible con Raspberry Pi B, B + y Raspberry Pi 2.

Nota: El escudo tiene una huella despoblada para un conector DB9. Verifique a continuación si necesita agregar el conector. De lo contrario, puede usar los terminales de tornillo.

Se ha verificado que funciona con una Raspberry Pi 3 con un escudo Linksprite RS485 y valores de lectura de un SDM120 y SDM630. Al cambiar el archivo [model].yml y crear un archivo .yml [modelo] correspondiente, debería ser posible usar otros modelos habilitados para modbus (agregar el conector). De lo contrario, puede usar los terminales de tornillo.

Cableado

Conecte un cable de par trenzado al escudo Linksprite RS485  , teniendo en cuenta que debe diferenciar el significado de cada hilo ( por ejemplo diferenciando con dos colores) y  teniendo en cuanta que cada  color que deberían ir   a la A y la B.

Conecte el otro extremo del cable al terminal de Modbus del metro de la energía. Asegúrese de que el mismo color va a la A como uno conectarse A en el escudo y lo mismo para B. Si más metros van a conectar, seguir conectando los medidores de la serie: A A, B a B. Un cable de encadenamiento puede ser útil.

 

Se recomienda utilizar resistencias de terminación al final de la cadena.  Para asegurar una conexión buena puede ser una buena idea para soldar un cable de encadenamiento para conectar todo A terminales en serie y todos los terminales B en serie.

Consulte esta documentación para obtener más información: https://www.maximintegrated.com/en/App-Notes/index.MVP/ID/763

Requisitos previos

Descargar tramo de Raspbian Lite y Flash en tarjeta SD, por ejemplo mediante el uso de grabador. Monte el protector de RS485 de cabecera de GPIO de la Raspberry Pi. Poder Rasberry Pi y contraseña de configuración (passwd) y SSH, localización, etc. utilizando la red:

$ sudo raspi-config

Con la configuración abierta  de   raspi-confi, ir a: Opciones de la interfaz 5 -> Serie P6 y Deshabilitar el shell de login serial y Habilitar hardware de puerto serie (es decir NO y luego sí)

Para poder utilizar el UART es necesario deshabilitar el Bluetooth incorporado ya que comparte el UART. Para ello, agregue las siguientes líneas a /boot/config.txt

# Disable built in Bluetooth 
dtoverlay=pi3-miniuart-bt

fuente

Para deshabilitar la consola serie, necesita editar la /boot/cmdline.txt archivo para parecerse a la siguiente línea:

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

fuente

Instalar Python Package Manager PIP si no ya instalado (no instalado en Raspbian Lite):

$ sudo apt-get install python-pip

Instalar Git si no ya instalado (no instalado en Raspbian Lite):

$ sudo apt-get install git

Instrucciones de instalación

Puede seguir las instrucciones de GitHub para instalar código fuente InfluxDB, Grafana y medidor registrador de energía, resumidamente son las siguintes:

Instalar InfluxDB *

Instrucciones paso a paso
  • Agregue el repositorio InfluxData
      $ curl -sL https://repos.influxdata.com/influxdb.key |  sudo apt-key add -
     $ source / etc / os-release
     $ test $ VERSION_ID = " 9 " && echo " deb https://repos.influxdata.com/debian stretch stable " |  sudo tee /etc/apt/sources.list.d/influxdb.list
  • Descargar e instalar
      $ sudo apt-get update && sudo apt-get install influxdb
  • Comience el servicio de influxdb
      $ sudo service influxdb start
  • Crea la base de datos
      $ afluencia
     CREAR BASE DE DATOS db_meters
     salida

*fuente

Instalar Grafana *

Instrucciones paso a paso
  • Añadir repositorio APT
      $ echo " deb https://dl.bintray.com/fg2it/deb-rpi-1b jessie main " |  sudo tee -a /etc/apt/sources.list.d/grafana.list
  • Añadir clave de Bintray
      $ curl https://bintray.com/user/downloadSubjectPublicKey ?  nombre de usuario = bintray |  sudo apt-key add -
  • Ahora instala
      $ sudo apt-get update && sudo apt-get install grafana
  • Comience el servicio usando systemd:
      $ sudo systemctl daemon-reload
     $ sudo systemctl start grafana-server
     $ systemctl status grafana-server
  • Habilite el servicio systemd para que Grafana comience al arrancar.
      $ sudo systemctl enable grafana-server.service
  • Vaya a http: // localhost: 3000 e inicie sesión usando admin / admin (recuerde cambiar la contraseña) * source

Instalar Energy Meter Logger:

  • Descargue e instale desde Github
      $ git clone https://github.com/samuelphy/energy-meter-logger
  • Ejecute el script de configuración (debe ejecutarse como root (sudo) si la aplicación necesita ser iniciada desde rc.local, ver abajo)
      $ cd energy-meter-logger
     $ sudo python setup.py install
  • Hacer que el archivo de script sea ejecutable
      $ chmod 777 read_energy_meter.py
  • Edite meters.yml para que coincida con su configuración
  • Pruebe la configuración ejecutando:
      ./read_energy_meter.py
     ./read_energy_meter.py --help # Muestra todos los parámetros disponibles
  • Para ejecutar el script python al inicio del sistema. Agregue a las siguientes líneas hasta el final de /etc/rc.local pero antes de salir:
      # Start Energy Meter Logger
     /home/pi/energy-meter-logger/read_energy_meter.py --interval 60 > /var/log/energy_meter.log &

    El registro con posibles errores se encuentra en /var/log/energy_meter.log

Configuración del medidor de energía

En este proyecto energía Modbus activado se utilizan wtimetros de la marca  Eastron. El autor ha usado dos modelos  :uno normales  de una sola  fase y otro de tres fases . Para capturar los datos muchos de los registros y los registros de interés se especifiquen en dos archivos de configuración: SDM120.yml y SDM630.yml. Los parámetros de estos registros se almacenan como 32 bits flotante  (tamaño de 2 registros) y deben ser leídos por código función 04, fuente : code = 4, 2 registers)

De la documentación Eastron obtenemos el siguiente mapa de registro para configurar nuestros archivos de configuración.

Si se utiliza un medidor de energía diferentes, simplemente deberá configurar  su propio archivo de configuración y añadir a meters.yml donde también se define la configuración modbus para cada metro.

meters: 
   - name : Meter Group 1 
     type : SDM120.yml 
     id : 1     # this is the slave address number 
     baudrate : 9600   # Baud 
     bytesize : 8 
     parity : even # none | odd | even 
     stopbits : 1 
     timeout  : 0.5   # seconds 

Grafana

Grafana abierto (e.g. http://raspberrypi.local:3000) y entrar con admin / admin.

Empezar por crear un origen de datos:

  • Nombre: Dar un nombre de su elección
  • Tipo: Seleccione InfluxDB
  • Acceso: proxy
  • Base de datos: db_meters
  • ¡Agregar!

Añadir un panel de control y haga clic en gráfico. Haga clic en «Panel de título» y edición. Haciendo clic en «seleccionar medición», «+», «valor de campo» etcetera puede seleccionar los parámetros que interesa analizar.

Una cosa vale la pena destacar es en «Opciones» donde debe ingresar el «intervalo de tiempo mínimo» que debe ser el mismo que el tiempo entre mediciones.

En la pestaña de «Ejes» puede la unidad para la medición.

NOTAS:

En caso  de  que no se registren las lecturas   en la Raspberry Pi  ,lo mejor es empezar por investigar el archivo de registro. El nivel de registro puede establecerse como parámetro cuando se ejecuta el script:

read_energy_meter.py --log DEBUG | INFO | WARNING | ERROR 

Al registro de configuración para depuración usted obtiene más información. Si usted ha de  escribir el registro en un archivo puede buscar en el registro de error usando este comando:--logfile

$ cat energy.log | grep -in 'error' | awk -F: '{print $2" - Line number : "$1}' 

Asimismo asegúrese de que todos sus medidores conectados en el mismo están configurados con la misma velocidad en baudios.  También es  muy   importante definir un tiempo de espera corto, aproximadamente 10 ms,(con entre parámetro así definido  se puede hacer que se tolere  si se produce errores de CRC al azar).

 

Mas información en  https://www.hackster.io/samuelphy/energy-meter-logger-6a3468

 

 

Interceptar Amazon Dash Button para otras aplicaciones


Amazon  lleva mas  un año enviando sus famosos  botones Dash , los cuales se pueden transformar en exactamente eso con sólo unos minutos, es   decir que un pequeño dispositivo permita con el simple hecho de darle un botón , desencadenar una  compra predefinida al famoso portal de compra…   pero, obviamente , estos botones  inteligentes están abiertos   a otras posibilidades  sin duda infinitas y que vamos a intentar explorar en este post

Los  famosos Amazon Dash  son  botones pequeños, de plástico  y de un coste ínfimo (  5€) ,pero ademas incluyen  una batería y una conexión WiFi en su interior . Amazon quiere que usted los pegue en el interior de sus puertas y los utilice  para  comprar productos de uso cotidiano  como pueden ser los pañales, té , café,  productos de limpieza   y un largo etcétera.

nescafe.jpg

Existe  una  manera   mas fácil   de darle otros usos a  cualquier botón  Amazon Dash si quiere usar SmartThings para  otras cosas útiles.

Ejemplos de usos:

  • Presionar el botón Dash y encender las luces. (Luces del dormitorio, luces de la sala de estar, todas las luces o lo que sea).
  • Presionar el botón Dash y encender el televisor, cambia a una entrada de TV y abrir Netflix.
  • Presionar el botón Dash y abrir la puerta de la puerta / garaje.
  • Presionar el botón Dash  y abrir una aplicación de cámara en el teléfono e incluso encender la TV y proyectar la cámara al televisor.
  • Presione el botón Dash y abrir una aplicación  en el ordenar que  realice alguna acción.
  • !En resumen: posibilidades ilimitadas!

Entender cómo funciona el registro del botón.

Nuestro objetivo es detectar cuando uno de estos botones Dash se   pulsa  y luego hacer algo más que ordenar  cosas en Amazon. El hack impresionante sería abrir el botón y re-programarlo  ( de hecho esto ya se puede hacer  reprogramando el STM32  que incluye )   pero  vamos a seguir  una  ruta muchísimo mas fácil:  sólo vamos a usar  un programa que rastrea nuestra red wifi para buscar  la evidencia de que el botón fue pulsado  , luego registrar un punto de datos cuando escucha estos y una vez detectado desencadenar una acción .

Resulta que Amazon nos dio una manera muy fácil de hacer esto porque estaban tan preocupados con el ahorro de energía , pues estos  botones  se desactivan la mayor parte del tiempo para conservar la batería dentro y sólo se encienden cuando son pulsados, lo cual significa que tienen que volver a conectarse a su red Wifi cada vez que son pulsados ( y eso  es fácil de detectar).

Los dispositivos de Internet no solo se conectan a una red Wifi y empiezan a hablar con Amazon: se presentan primero a la red local . Esta introducción se hace con algo llamado una sonda ARP , y es esencialmente una comprobación de seguridad para asegurarse de que la dirección MAC que el dispositivo va a utilizar como identificador ya no está siendo utilizada por otra persona.

Cada vez que pulsa un botón Dash, se vuelve a conectar a la red, causando una transmisión predecible  de llamada una sonda ARP que podemos detectar y actuar.

Eso es una gran noticia para nosotros: cada vez que se pulsa un botón Dash, se enciende su radio y transmite rápidamente el mensaje, “Hola! Mi nombre es [Dirección MAC]! “

Así, que conceptualmente, el problema esta resuelto pues sólo tenemos que:

  1. Evitar que el botón realice cualquier pedido
  2. Escuche las sondas ARP del botón Dash
  3. Traducir esas sondas a llamadas   cualquier cosa que se nos  ocurra

Paso 1: Configurar la red wifi en el botón

Para   usar el botón ,primero  debe registrar el Botón básicamente para configurar la red wifi a la que se conectará .  Lo que no queremos es asignar el botón para pedir algo , por lo en lugar de asignar algún producto , antes de finalizar la vinculación simplemente  no haremos nada  !pero el botón de tablero todavía seguirá registrado! , así  que lo sucede a continuación es que cuando presione el botón del tablero, recibirá una notificación  en las versiones antiguas  que dice «Su (inserte el nombre del botón del tablero) está casi listo para usar … bla, bla, bla».

Pasos del botón Dash (Nuevo botón Dash):

  1. Abra la aplicación Amazon Shopping y vaya a su cuenta.
  2. Vaya a Configurar un nuevo botón de tablero y haga clic en Aceptar y comenzar para comenzar.
  3. Mantenga presionado el Botón de tablero por 6 segundos hasta que la luz destelle en azul y haga clic en Conectar. (Asegúrate de que Bluetooth esté habilitado)
  4. Haga clic en la red Wi-Fi a la que desea conectar el botón del tablero y haga clic en Continuar.
  5. El botón de tablero ahora está registrado. No haga nada todavía.
  6. Donde dice Elija un producto simplemente salga (no queremos pedir nada) haciendo clic en la X en la esquina superior derecha.
  7. Hemos terminado con la configuración del botón del tablero.

Pasos del botón de tablero (dispositivo antiguo):

  1. Abra la aplicación Amazon Shopping y vaya a su cuenta.
  2. Diríjase al botón del tablero con el que tiene programada la configuración y haga clic en Desactivar este botón del tablero. Aparecerá una ventana emergente preguntándole si está seguro. Decir que sí.
  3. Ahora vaya a Configurar un nuevo botón de tablero y haga clic en Aceptar y comenzar para comenzar.
  4. Mantenga presionado el Botón de tablero por 6 segundos hasta que la luz destelle en azul y haga clic en Conectar. (Asegúrate de que Bluetooth esté habilitado)
  5. Haga clic en la red Wi-Fi a la que desea conectar el botón del tablero y haga clic en Continuar.
  6. El botón de tablero ahora está registrado. No haga nada todavía.
  7. Donde dice Elija un producto simplemente salga (no queremos pedir nada) haciendo clic en la X en la esquina superior derecha.
  8. Hemos terminado con la configuración del botón del tablero.

Nota: Puede activar y desactivar la notificación de Amazon Shopping para cada dispositivo que desee habilitar o deshabilitar en caso de que se moleste. Esto se puede hacer abriendo la aplicación Amazon Shopping en cada dispositivo individual y deshabilitando o habilitando «Alexa Shopping & Dash Updates». Habilite en el dispositivo que planea hacer esta guía de configuración. Deshabilite en todos los dispositivos en los que no planea usar esta configuración. Naranja = Activado.

Paso 2: Captura  de la IP del botón

Una forma fácil de encontrar su ID del botón de pantalla es usar Wireshark (https://www.wireshark.org/#download), que se puede  obtener  mediante una descarga gratuita para Mac / Win.

Una vez  descargada  e instalada la aplicación  podemos lanzar Wireshark, estableciendo el filtro para capturar paquetes en «arp«, seleccionando  el modo wifi para la red y haciendo clic en el icono de Blue Shark para habilitar el filtro al capturar paquetes.

wireshar.png

A continuación, verá una ventana como la siguiente: haga clic en el ícono de Green Shark para comenzar a capturar paquetes, presione el botón de Amazon Dash.

Verá una línea en el parte superior que tiene «AmazonTe …» en la fuente Colunm.

amazonte.png

Selecciónelo y en el panel a continuación, verá la dirección MAC del botón Amazon Dash en parantesis, junto a AmazonTe _… Src, como se muestra a continuación.

mac.png

Realmente la dirección MAC es importante  para algunas aplicaciones,   pero realmente lo que nos va a importar  para capturar la petición,   es la dirección ip  del botón obtenida en la pantalla  anterior   , ( en  nuestro caso : 192.168.1.32)

Alternativamente, puede seguir las instrucciones de node-dash-button para encontrar su id del botón de pantalla.

Nota :   Un pedido real se marca  controlando la luz en el botón Dash para que se vuelva verde. Actualmente se vuelve blanco cuando se transmite una solicitud DHCP o paquete ARP y luego se vuelve rojo cuando no recibe una respuesta de Amazon, así que  cuando usa un botón Dash de la manera normal, la luz se vuelve verde después de que Amazon haya realizado su pedido, pero si eso No es  lo que pretende,  todavía  puede ir a la app( o en la web)  para cancelar el pedido

Paso 3 :  Utilización  sobre windows

Existen scripts en python que pueden ejecutarse  en una raspberry Pi  para  escuchar las peticiones  en la red wifi  de modo que cuando detecten  la ip de nuestro botón desencadenen un acción.
Para  windows existe una  interesante  utilidad que busca cualquier llamada a la IP de nuestro botón  y desencadene la ejecución de un comando o aplicación.

Descargue el sw de aquí: https://github.com/fiveseven808/AmazonDashButtonHack

Una vez descomprimido  tendremos al menos dos ejecutables:

amanzonbut

En versiones  antiguas del botón era posible el auto-descubrimiento  de la ip del botón ( es decir obviar el paso comentado  nº 2),   por  lo que  los pasos  serian los siguientes :

  • Ejecutar  «AmazonButton_Discovery_160715 _ ****. Exe» para comenzar a buscar botones.
  • Pulsamos clic en «Aceptar» en el aviso y comenzariamos  a presionar el botón que desea emparejar repetidamente.
  • Si no se encuentran dispositivos de Amazon, intente de nuevo, pero comience a presionar el botón tan pronto como haga doble clic en el archivo EXE.
  • Si se encuentran más de un dispositivo de Amazon, tendrá que ir y averiguar qué IP corresponde con su botón por su cuenta.
  • Finalmente elija un programa que desea ejecutar cuando se presiona el botón
  • Ingrese un comentario para el daemon, lo cual  identificará el daemon particular que corresponde con el botón en particular.

 

Como el proceso anterior  no es mas eficaz , si ya conoce la IP de su botón( descrito en el paso 2 )  siga los siguientes  pasos:

  • Haga doble clic en AmazonButton_v4.0.exe .
  • Ingrese la IP conocida / reservada de su botón Dash ( en nuestro caso 192.168.1.36)
  • Elija un programa que desea ejecutar cuando se presiona el botón . Por ejemplo puede asociar un fichero mp3  de modo que cuando pulsemos el botón  comience  a reproducirse el tema
  • Ingrese un comentario para el daemon, lo cual identificará el daemon particular que corresponde con el botón en particular.

También permite argumentos vía  parámetros   por  línea de comando por ejemplo para automatizar el arranque de este proceso en el inicio del ordenador :

AmazonButton_v4.0.exe [IP del botón] [Programa para iniciar] «[Comentario opcional]»

Es interesante saber   que incluso se puede repetir  estas llamadas según sea necesario para cualquier otro botón.

NOTA :  Hay informes de que el nuevo botón JK29LP pierde su configuración de Wifi si la desasocia con su cuenta de Amazon. La «solución alternativa» actual es utilizar una cuenta ficticia de Amazon para configurar su botón con su teléfono y luego volver a iniciar sesión en su propia cuenta para que pueda seguir usando la aplicación.