Monitoreo inteligente del consumo energético residencial de Kbsa

shutterstock_2391294527.png


Este artículo proporciona información sobre cómo conectar un inversor solar Deye con el complemento MODBUS de Shelly Pro mediante la interfaz de comunicación RS485.

Introducción

Los hogares modernos dependen cada vez más de solutions de energía renovable para reducir gastos, aumentar la autonomía energética y participar en la optimización de las redes inteligentes. Este proyecto presenta un sistema de energía solar totalmente integrado, compuesto por un inversor Deye, una batería externa, paneles solares, una caja de distribución eléctrica con un ATS (interruptor de transferencia automática) y una red de monitorización Shelly Pro con Shelly Pro EM-50 y complemento RS485.

El sistema proporciona una supervisión continua de la producción, el consumo y el almacenamiento de energía, lo que permite tomar decisiones informadas relacionadas con la optimización de los costes energéticos, el autoconsumo y el control de las cargas. Además, al aprovechar el almacenamiento en baterías y algoritmos inteligentes, el sistema puede vender energía a la red cuando los precios de la electricidad son altos y almacenarla cuando son bajos.

Arquitectura del sistema

1_inverter.png


El sistema consta de:

  • Inversor monofásico Deye con entrada fotovoltaica y compatibilidad con almacenamiento en baterías

  • Banco de baterías externas de ion-litio con JK-BMS 200

  • Conjunto de paneles solares

  • Armario de distribución eléctrica con ATS

  • Medidor de energía Shelly Pro EM-50

  • Complemento RS485 Shelly Pro

  • Cableado de comunicación (alimentación y datos)

Esta arquitectura permite un flujo de energía fluido entre el conjunto fotovoltaico, el inversor, las cargas del hogar, el almacenamiento en baterías y la red. El ATS garantiza la transferencia automática de energía en caso de fallo de la red, manteniendo la continuidad del suministro.

Integración del hardware

1. Instalación y configuración del inversor Deye

El inversor Deye actúa como dispositivo de control central. Gestiona la energía fotovoltaica mediante el control MPPT, el acoplamiento de CA, la gestión de la batería de CC y la sincronización con la red. La puesta en servicio adecuada incluye configurar los modos del inversor (autoconsumo, venta a la red, uso según horario), establecer los límites de carga y descarga y definir los parámetros de compatibilidad de la batería.

2. Configuración del sistema de baterías

2025-12-08-Integrations_2.png
El paquete de baterías con JK-BMS200
2025-12-08-Integrations_1.png
Panel de control JK-BMS 200

La batería externa se integra mediante comunicación CAN/RS485 para establecer un comportamiento de carga sincronizado con el inversor. Los pasos de configuración incluyen:

  • Límites de tensión y corriente

  • Configuración de la química de la batería

  • Programación de la carga y descarga

  • Permisos de exportación a la red

La configuración correcta garantiza que la batería almacene energía cuando el coste de la electricidad sea bajo y se descargue cuando resulte rentable.

3. Integración de paneles solares

Los paneles solares se cablean utilizando cableado de CC adecuado, protección contra sobretensiones y se conectan a las entradas fotovoltaicas del inversor. Las consideraciones de dimensionamiento incluyen la demanda energética, el rendimiento estacional y las normativas locales.

4. Armario de distribución eléctrica con ATS

2025-12-08-Integrations_6.png
Shelly Pro EM-50, interruptor principal de alimentación, protección catódica, interruptor automático de protección, interruptor ATS, interruptor automático para la entrada del inversor, interruptor automático para la salida del inversor.
2025-12-08-Integrations_7.png
Terminal de potencial N, terminal de potencial de fase, terminal de salida de alarma, terminal RS485 A, terminal RS485 B, controlador de alarma Shelly 1PM Gen4, necesidades propias del interruptor automático


El ATS integra el suministro de la red, la salida de CA del inversor y la distribución de carga del hogar. Cambia automáticamente a la energía del inversor durante un corte de la red, protegiendo los equipos electrónicos y manteniendo la continuidad operativa.

Hay otras formas de integrar un inversor en la distribución eléctrica de una vivienda. Se eligió este diseño para permitir la máxima flexibilidad en el mantenimiento del sistema y estaba destinado a un escenario aislado de la red, con conexión ocasional a la red y sin vender energía a la red.

Adquisición de datos y comunicación en la nube

El Shelly Pro EM-50 proporciona mediciones detalladas del flujo de energía en una o varias fases. Con el complemento RS485, se puede establecer comunicación Modbus-RTU para la adquisición de datos.

La integración en la nube permite:

  • Supervisión remota en tiempo real

  • Paneles de visualización

  • Flujos de trabajo de notificaciones

  • Registro histórico de datos

Panel de componentes virtuales

Para mostrar los datos recuperados del inversor, se utiliza un sistema integrado para ampliar los dispositivos Shelly: componentes virtuales.

El sistema produce nueve parámetros clave útiles tanto para la supervisión como para la toma de decisiones:

  1. Potencia de generación solar

  2. Consumo del hogar

  3. Importación de la red

  4. Exportación a la red

  5. Nivel de carga de la batería

  6. Tasa de carga/descarga de la batería

  7. Eficiencia del inversor

  8. Tensión/corriente fotovoltaica

  9. Coste por kWh (dinámico)

Estos valores se visualizan en un panel unificado para las operaciones diarias.

Script de adquisición de datos mediante Modbus-RTU

El complemento RS485 de Shelly Pro transmite datos del inversor o la batería mediante el protocolo Modbus-RTU. Un script personalizado consulta el dispositivo a intervalos definidos y publica los resultados en la nube.

Las responsabilidades del script incluyen:

  • Mapeo de registros

  • Análisis y escalado de valores

  • Gestión de errores

  • Almacenamiento en caché de datos y envío al almacenamiento en la nube

Este script permite ciclos de retroalimentación en tiempo real para la automatización del control de cargas.

Script integrado de adquisición de datos

El sistema depende de una aplicación JavaScript integrada que se ejecuta en la plataforma Shelly Pro para comunicarse con el inversor y recopilar datos de rendimiento en tiempo real. El script recupera valores de los registros Modbus, los escala adecuadamente y los publica como componentes virtuales, lo que permite que los paneles y las automatizaciones consuman información estructurada.

Descargo de responsabilidad: el script se ha probado y funciona correctamente en 1.8.99-dev148102 revisión del firmware.

JavaScript
/* Shelly Europe Ltd. - Equipo de Integraciones Este ejemplo está dedicado a la comunicación mediante MODBUS-RTU con un inversor solar Deye. Versión basada en ENTITIES + componentes virtuales. */ const INVERTER_MODBUS_SERVER_ID = 1; // Obtener un punto final MODBUS-RTU: ID 1, velocidad en baudios 9600, 8 bits de datos, sin paridad, 1 bit de parada. const MODBUS_ENDPOINT = ModbusController.get(INVERTER_MODBUS_SERVER_ID, { baud: 9600, mode: "8N1", pause_ms: 2000 }); // Tabla ENTITIES que describe todos los parámetros y su asignación a componentes virtuales const ENTITIES = [{ name: "Potencia total", units: "W", reg: { addr: 175, rtype: ModbusController.REGTYPE_HOLDING, itype: "i16", bo: ModbusController.BE, wo: ModbusController.BE }, scale: 1, rights: "R", vcId: "number:200", handle: null, vcHandle: null }, { name: "Potencia de la batería", units: "W", reg: { addr: 190, rtype: ModbusController.REGTYPE_HOLDING, itype: "i16", bo: ModbusController.BE, wo: ModbusController.BE }, scale: 1, rights: "R", vcId: "number:201", handle: null, vcHandle: null }, { name: "Potencia FV1", units: "W", reg: { addr: 186, rtype: ModbusController.REGTYPE_HOLDING, itype: "u16", bo: ModbusController.BE, wo: ModbusController.BE }, scale: 1, rights: "R", vcId: "number:202", handle: null, vcHandle: null }, { name: "Potencia total de la red", units: "W", reg: { addr: 169, rtype: ModbusController.REGTYPE_HOLDING, itype: "i16", bo: ModbusController.BE, wo: ModbusController.BE }, scale: 10, rights: "R", vcId: "number:203", handle: null, vcHandle: null }, { name: "Estado de carga de la batería", units: "%", reg: { addr: 184, rtype: ModbusController.REGTYPE_HOLDING, itype: "u16", bo: ModbusController.BE, wo: ModbusController.BE, poll_int: 10000 }, scale: 1, rights: "R", vcId: "number:204", handle: null, vcHandle: null }, { name: "Tensión FV1", units: "V", reg: { addr: 109, rtype: ModbusController.REGTYPE_HOLDING, itype: "u16", bo: ModbusController.BE, wo: ModbusController.BE }, scale: 0.1, rights: "R", vcId: "number:205", handle: null, vcHandle: null }, { name: "Tensión de red L1", units: "V", reg: { addr: 150, rtype: ModbusController.REGTYPE_HOLDING, itype: "u16", bo: ModbusController.BE, wo: ModbusController.BE, poll_int: 10000 }, scale: 0.1, rights: "R", vcId: "number:206", handle: null, vcHandle: null }, { name: "Corriente L1", units: "A", reg: { addr: 164, rtype: ModbusController.REGTYPE_HOLDING, itype: "i16", bo: ModbusController.BE, wo: ModbusController.BE }, scale: 0.01, rights: "R", vcId: "number:207", handle: null, vcHandle: null }, { name: "Frecuencia de CA", units: "Hz", reg: { addr: 192, rtype: ModbusController.REGTYPE_HOLDING, itype: "u16", bo: ModbusController.BE, wo: ModbusController.BE, poll_int: 10000 }, scale: 0.01, rights: "R", vcId: "number:208", handle: null, vcHandle: null }, ]; function getScaledValue(ent) { return ent.handle.getValue() * ent.scale; } function updateVc(ent) { if (!ent.vcHandle) return; const new_val = getScaledValue(ent); const old_val = ent.vcHandle.getValue(); console.log(ent.name + ": " + old_val + " -> " + new_val + " [" + ent.units + "]"); ent.vcHandle.setValue(new_val); return old_val; } function init() { for (let i = 0; i < ENTITIES.length; i++) { let ent = ENTITIES[i]; ent.handle = MODBUS_ENDPOINT.addEntity(ent.reg); if (ent.vcId) { ent.vcHandle = Virtual.getHandle(ent.vcId); ent.handle.on("change", function (handle) { updateVc(ent); }); } } Timer.set(10000, false, function () { for (let i = 0; i < ENTITIES.length; i++) { updateVc(ENTITIES[i]); } }); } // Ejecutar la aplicación. init(); 

El resultado de la adquisición puede verse en la siguiente captura de pantalla.

Captura de pantalla del 2025-12-08 15-02-45.png
Valores actuales del inversor
Captura de pantalla del 2025-12-09 11-03-47.png
Valores a lo largo del tiempo del inversor

Estrategias de gestión energética

1. Almacenamiento de energía cuando el precio es bajo

Las tarifas según el horario permiten cargar estratégicamente la batería durante los periodos de menor costo energético. El sistema se sincroniza con los datos de precios y programa las operaciones de carga de la batería en consecuencia.

2. Venta de energía a la red al precio máximo

Cuando los precios de la energía se disparan y el almacenamiento en batería es suficiente, el sistema exporta energía de vuelta a la red. Esto se controla mediante la configuración del inversor y reglas automatizadas de toma de decisiones.

3. Determinación del mejor momento para cargar el vehículo eléctrico

La carga del vehículo eléctrico puede optimizarse usando el excedente solar o electricidad barata de la red durante la noche. Entre los factores de decisión se incluyen:

  • Producción/consumo en tiempo real

  • Estado de carga de la batería

  • Precios de la red

  • Uso previsto del vehículo eléctrico

El motor de automatización puede cambiar las fuentes de carga o posponerla basándose en la lógica de costo-beneficio.

Caso de uso: equilibrio energético del hogar

2025-12-08-Integrations_3.png
Descripción general del inversor
2025-12-08-Integrations_4.png
Panel de control del inversor

Un flujo de trabajo diario típico:

  • Mañana: la energía solar alimenta las cargas del hogar; el excedente comienza a cargar la batería

  • Por la tarde: el excedente de energía carga completamente la batería y se exporta a la red

  • Tarde: la batería se descarga para reducir las importaciones de la red cuando el costo es más alto

  • Noche: la batería se carga desde la red si la electricidad nocturna es más barata

  • En cualquier momento: la carga del vehículo eléctrico se programa solo cuando es cost-efficient

Beneficios

  • Menor costo de electricidad

  • Ingresos por la exportación a la red

  • Mayor resiliencia y autonomía

  • Consumo de energía sostenible y transparente

  • Escalable para futuros devices e integración con smart home

Conclusión

Este proyecto demuestra cómo combinar hardware disponible comercialmente y herramientas de código abierto para crear un potente sistema de optimización energética. Con monitoreo en tiempo real, toma de decisiones automatizada y gestión inteligente del almacenamiento, los hogares pueden participar activamente en los ecosistemas energéticos modernos, minimizando los costos y maximizando la sostenibilidad.