PiggyMeter
Este artículo te muestra cómo construir un dispositivo para leer datos de forma remota desde un medidor eléctrico (o cualquier dispositivo con una interfaz compatible).
Utiliza componentes ampliamente disponibles, software de código abierto y es compatible con el popular software de automatización del hogar, Home Assistant.
INFO
Un kit para ensamblar un dispositivo funcional está disponible para su compra en Tindie: PiggyMeter KIT.
Características
- Soporta protocolos basados en IEC62056-21
- Soporta protocolo SML pasivo usando el componente nativo de ESPHome
- Múltiples medidores: energía, agua, térmico y más
- Utiliza ESPHome de código abierto
- Comunicación inalámbrica vía Wi-Fi
- Se integra con Home Assistant
- Servidor web opcional
- Hardware económico ESP32-C3 o ESP32-S2
- Diseño de carcasa disponible para impresión 3D
Soporta medidores compatibles con el estándar IEC62056-21 que funcionan en modos A, B, C, D (pero no E). Para más detalles, consulta componente IEC 62056-21.
Ten en cuenta que hay muchas variaciones del protocolo. Aunque el medidor pueda usar la misma interfaz óptica, el formato del marco de datos podría ser diferente.
Además, soporta medidores que utilizan el protocolo SML (Smart Message Language) usando el componente SML de ESPHome.
WARNING
Los estándares DLMS, M-Bus y ANSI C12.18/19 no son soportados por el software.
¿Cómo verificar si el medidor es compatible?
El término IEC 62056-21 se utiliza para múltiples protocolos (con la misma capa de hardware pero diferente codificación de datos). El dispositivo soporta medidores que proporcionan datos codificados en ASCII, algo como esto:
console
1-0:15.8.1(00000009999.567*kWh)
1-0:15.8.2(00000000000.000*kWh)
1-0:15.8.3(00000000000.000*kWh)
1-0:15.8.4(00000000000.000*kWh)
El medidor debe ser compatible con Norma Internacional IEC 62056-21:2002.
Para el protocolo SML, busca el logo SML en el medidor o consulta el manual. El componente ESPHome solo soporta el modo pasivo, no envía ninguna solicitud al medidor. En ese modo, el medidor envía datos cada pocos segundos.
Medidores reportados para funcionar con PiggyMeter
La lista se crea en base a los informes de los usuarios. No se garantiza que sea precisa.
- Apator Norax 3
- Apator Norax 1
- Apator Norax 1D a través del componente SML
- Pafal 12EA5
- Iskra MT372
- Iskra ME162
- Kastrup 382
- Landis+Gyr E350 ZMF110
- ZPA ZE110.D0
INFO
No dudes en enviar un correo a info@aquaticus.info si conoces un medidor que funcione con PiggyMeter pero no está listado arriba.
Software alternativo
El hardware de PiggyMeter puede funcionar con muchos medidores diferentes que utilizan interfaz óptica. Sin embargo, el software actualmente solo soporta un estándar, limitando prácticamente la gama de medidores compatibles.
Puedes intentar usar software alternativo que pueda añadir soporte a diferentes medidores. Es importante señalar que no hay garantía de que funcione sin problemas con PiggyMeter. Para soporte, por favor contacta al autor original.
- Módulo DLMS/COSEM Esphome https://github.com/viric/esphome-ziv
Lista de materiales
Parte | Descripción |
---|---|
CPU | Wemos C3 o S2 Mini https://www.wemos.cc/en/latest/ |
Interfaz óptica | PiggyMeter PCB https://www.tindie.com/products/32082/ |
2×pin header 1×4 | Raster de 2.54mm; la parte plástica debe tener 8.5 mm de altura |
Imán anular | ⌀30/⌀15×2mm |
Caja | Caja impresa en 3D https://github.com/aquaticus/piggymeter_case |
Arandela | Arandela impresa en 3D https://github.com/aquaticus/piggymeter_case |
Tapa | Tapa trasera impresa en 3D https://github.com/aquaticus/piggymeter_case |
Placa CPU
Necesitas una placa con un chip Espressif instalado y un pinout compatible con Wemos/Lolin. El factor clave es la ubicación de 4 pines: GND
, VCC
, TX
y RX
.
El tamaño del PCB también es crítico. La carcasa impresa en 3D solo coincide con las placas (o sus clones) listadas a continuación:
- Lolin/Wemos S2 mini
- Lolin/Wemos C3 mini
En teoría, puedes usar cualquier otra placa CPU con un pinout compatible, notablemente ESP32 y ESP8266 D1 mini. Pero en ese caso, debes diseñar tu propia carcasa y modificar un poco los archivos de configuración (tipo de placa y pines del puerto serie).
Interfaz óptica
Un medidor emplea una interfaz óptica compatible con el estándar IEC62056-21, comunicándose con una sonda a través de un diodo infrarrojo y un fototransistor.
La interfaz está conectada a uno de los puertos serie en la placa CPU. Por supuesto, también necesitas VCC y GND.
Suelda 2 pines de cabecera. Debes usar un pin de cabecera de 8.5 mm de altura. El diseño de la carcasa acomoda esta altura, asegurando un ajuste adecuado. Si la altura excede esta dimensión, cerrar la tapa puede presentar desafíos.
Carcasa
Descarga los archivos para la impresora 3D desde https://github.com/aquaticus/piggymeter_case. Usa la versión V5 para el diseño más reciente.
La carcasa comprende tres componentes:
- la carcasa principal,
- una arandela,
- y una tapa.
Hay tres archivos STL distintos disponibles para cada componente, o alternativamente, un solo archivo 3fm que incorpora los tres elementos.
La carcasa cumple con los requisitos de la sonda óptica estándar IEC62056-21>.
INFO
La carcasa tiene un pequeño pestillo. Para cerrarla o abrirla, necesitas usar algo de fuerza.
Configuraciones recomendadas para impresión 3D
- Material: PLA
- Capa: 0.2 mm
- Sin soporte
Montaje
Organiza los componentes dentro de la carcasa en este orden:
- Imán
- Arandela
- Interfaz óptica
- Placa CPU
- Tapa
INFO
Mira el montaje en Youtube https://youtu.be/fM2LyJJWQHA?si=dyY4r7zMSMfbwQtm
Programación para medidores IEC62056-21
Comienza instalando ESPHome.
Según tu placa CPU, selecciona el archivo de configuración adecuado. Además, realiza ajustes manuales a ciertos parámetros, como la contraseña de WiFi.
Obtener archivos de configuración
Clona el repositorio git con los archivos de configuración:
bash
git clone https://github.com/aquaticus/piggymeter_esphome_yaml
Crear archivo secrets.yaml
Crea un archivo secrets.yaml
dentro del directorio donde se encuentran los archivos de configuración. Este archivo contendrá el nombre de la red WiFi y su contraseña correspondiente.
yaml
# Home Assistant API encryption key
api_key: my_home_assistant_encryption_key
# OTA password
ota_pass: my_ota_password
# WiFi network name
wifi_ssid: my_network
# WiFi network password
wifi_pass: my_password
Modificar la configuración del proyecto
La configuración viene preestablecida con puntos de datos estándar para un medidor eléctrico.
Siéntete libre de ajustar la lista, especialmente si tu medidor difiere del tipo de medidor eléctrico. Consulta el componente IEC 62056-21 para más información.
yaml
sensor:
- platform: iec62056
obis: 1-0:15.8.0
name: Absolute active energy total
unit_of_measurement: kWh
accuracy_decimals: 3
device_class: energy
state_class: total_increasing
Construir y flashear el firmware
bash
esphome run piggymeter-s2-iec62056-21.yaml
El comando anterior flashea el firmware y muestra la salida del monitor. Por defecto, la interfaz lee datos de un medidor cada 1 minuto.
TIP
Para la placa ESP32-S2 debes presionar el botón BOOT y luego el botón RESET en el PCB para entrar en modo de programación. Además, puedes ver un mensaje de error después de flashear -- simplemente ignóralo.
log
[12:21:27][D][iec62056.component:232]: Connection start
[12:21:27][D][binary_sensor:036]: 'Meter Connection Status': Sending state ON
[12:21:28][D][switch:013]: 'Internal LED' Turning ON.
[12:21:28][D][switch:056]: 'Internal LED': Sending state ON
[12:21:28][D][iec62056.component:174]: Meter identification: '/XXX6\2YYYYY'
[12:21:28][D][iec62056.component:407]: Meter reported protocol: C
[12:21:28][D][iec62056.component:410]: Meter reported max baud rate: 19200 bps ('6')
[12:21:28][D][iec62056.component:438]: Using negotiated baud rate 9600 bps.
[12:21:29][D][iec62056.component:470]: Switching to new baud rate 9600 bps ('5')
[12:21:29][D][iec62056.component:482]: Meter started readout transmission
[12:21:29][D][iec62056.component:524]: Data: 0-0:C.1.0(12345678)
[12:21:29][D][iec62056.component:524]: Data: 0-0:1.0.0(2000-01-01 20:10:30)
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.8.0(00000001000.657*kWh)
[12:21:29][D][iec62056.component:620]: Set sensor 'Absolute active energy total' for OBIS '1-0:15.8.0'. Value: 1000.656982
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.8.1(00000002000.657*kWh)
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.8.2(00000003000.000*kWh)
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.8.3(00000004000.000*kWh)
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.8.4(00000005000.000*kWh)
[12:21:29][D][iec62056.component:524]: Data: 1-0:15.6.0(00000006000.385*kW)(2000-01-01 20:10:01)
Programación para medidores SML
Los primeros pasos son idénticos a los de los medidores IEC62056-21.
Después de clonar el repositorio y crear el archivo secrets.yaml
, utiliza los archivos de configuración para medidores SML.
bash
esphome run piggymeter-s2-sml.yaml
Lo más probable es que necesites ajustar el archivo de configuración para que coincida con los puntos de datos transmitidos por el medidor. También vale la pena verificar la velocidad de baudios y los bits de datos del puerto serial.
Home Assistant
El dispositivo debería ser detectado automáticamente por Home Assistant. Si no es así, puedes añadirlo manualmente haciendo clic en Agregar Integración y seleccionando la integración ESPHome.
PiggyMeter expone tres grupos de elementos:
Disparador de Lectura
Este disparador fuerza a PiggyMeter a leer datos de un medidor fuera del horario programado.
Estado de Conexión del Medidor
El estado Conectado indica que la interfaz está intercambiando datos con el medidor.
Sensores
Esta es una lista de sensores definidos en el archivo de configuración.
Modo Independiente
PiggyMeter puede operar independientemente de Home Assistant, ofreciendo la capacidad de activar un servidor web. Este servidor muestra lecturas de datos directamente en un navegador web y ofrece una sencilla API REST.
Para activar el servidor web, incluye las siguientes líneas en el archivo de configuración:
yaml
web_server:
port: 80
Más información sobre el servidor web se puede encontrar en la documentación de ESPHome.
Modificaciones
Por defecto, el dispositivo obtiene datos cada minuto, y el LED interno se ilumina durante la transmisión.
Solo un número limitado de códigos OBIS están definidos en el archivo yaml de configuración. Se recomienda encarecidamente modificar la lista de sensores para que coincida con un medidor.
Aunque los códigos OBIS están estandarizados, los medidores pueden transmitir diferentes números de códigos. Para determinar los códigos compatibles con tu medidor, habilita el registro DEBUG
para el componente IEC62056-21 y analiza la salida del registro.
Diagnóstico y Problemas IEC62056-21
Esta sección es solo para medidores IEC62056-21 (no SML).
Después de flashear el firmware, el dispositivo intentará leer datos de un medidor después de aproximadamente 15 segundos. Si la transmisión falla, lo intentará dos veces más cada 15 segundos.
Puedes ajustar estos parámetros configurando los tokens apropiados. Consulta la documentación del componente IEC62056-21 para más detalles.
Es recomendable cambiar el nivel de registro predeterminado de DEBUG
a INFO
una vez que se haya confirmado que el dispositivo funciona correctamente.
A continuación se presentan problemas comunes y sus respectivas soluciones.
TIP
Asegúrate de que la sonda esté firmemente sujeta al medidor, alineando la flecha en la sonda en dirección hacia arriba.
No hay transmisión desde el medidor
log
[E][iec62056.component:268]: No transmission from meter.
Esto puede indicar:
- Más comúnmente, la interfaz no está conectada a un medidor.
- La interfaz no está alineada correctamente con la interfaz óptica de un medidor.
- El medidor no es compatible.
Asegúrate de que la interfaz óptica esté posicionada paralelamente a la superficie frontal de la carcasa. Si el dispositivo funciona cuando está conectado al medidor sin la carcasa, pero no funciona después de ser insertado en la carcasa, este podría ser el problema. En tal caso, también puedes considerar agrandar los dos agujeros en la carcasa.
No todos los sensores recibieron datos
log
[E][iec62056.component:644]: Not all sensors received data from the meter. The first one: OBIS '1-0:72.7.0'. Verify sensor is defined with valid OBIS code.
Esto puede indicar dos problemas:
- El medidor no soporta el código OBIS que configuraste en el archivo yaml. Simplemente elimina el sensor con el código OBIS específico de la configuración.
- Puede haber un error tipográfico o una definición incorrecta del código OBIS para el sensor en el archivo de configuración. Verifica el código cuidadosamente.
El medidor transmite datos automáticamente pero el dispositivo no recibe nada
Esto indica que el medidor soporta el modo D de IEC62056-21. En este modo, el medidor transmite datos de manera autónoma cada pocos segundos sin requerir una solicitud específica. Asegúrate de que el puerto serial esté configurado para alinearse con el formato de transmisión del medidor, típicamente configurado en 9600 7E1 o 2400 7E1 en la mayoría de los casos.
yaml
# 9600bps for mode D
uart:
rx_pin: GPIO21
tx_pin: GPIO22
baud_rate: 9600
data_bits: 7
parity: EVEN
stop_bits: 1
Además, el Modo D debe activarse manualmente configurando mode_d=True
en la configuración de la plataforma.
yaml
# Habilitar modo D
iec62056:
mode_d: True
Errores de checksum
log
[E][iec62056.component:504]: Fallo en la verificación BCC. Se esperaba 0x6b, se obtuvo 0x14
Este error sugiere problemas de transmisión.
Usualmente, la velocidad de transmisión es excesivamente alta. Reducir la tasa de baudios máxima debería ayudar.
yaml
iec62056:
baud_rate_max : 4800
Identificación del medidor recibida pero sin transmisión
log
[D][iec62056.component:174]: Identificación del medidor: '/XXX6\2YYYYYYY'
[D][iec62056.component:252]: El medidor indica modo E, que no es compatible. Intentando modo C. Esto funcionará para medidores que soportan ambos modos E y C.
[E][iec62056.component:268]: No hay transmisión desde el medidor.
La cadena de identificación del medidor se recibe correctamente, pero no hay transmisión de datos. Además, el registro muestra un mensaje que indica, "El medidor indica modo E."
El medidor opera exclusivamente en modo E, que PiggyMeter no soporta. En consecuencia, el software intenta cambiar el medidor al modo C, pero este intento falla.
Si un medidor soporta ambos modos E y C, el sistema debería funcionar correctamente.