← Volver al Jardín

Decodificando el BMS Pylontech vía CAN Bus

Por

#IoT#Hardware_Hacking#ESP32#Energía

Resumen: Ingeniería inversa básica e intercepción de tramas CAN para extraer métricas a nivel de celda de baterías de litio sin usar software privativo.

SNIFFING_CAN_INTERFACE: pylon_0

Las baterías de litio Pylontech son el estándar de oro para almacenamiento solar, pero depender del software del inversor (o de la nube del fabricante) para leer el estado del BMS (Battery Management System) es un punto ciego de seguridad y control.

En este apunte, documentamos cómo interceptar la comunicación nativa del BMS.

Hardware Necesario

Un microcontrolador ESP32.

Un transceptor CAN (como el SN65HVD230 o TJA1050).

Un cable RJ45 (cortado para exponer los pines de comunicación).

Interceptando las Tramas

El puerto A/CAN de las Pylontech transmite a 500 kbps. Si conectamos nuestro transceptor a los pines CAN-H y CAN-L, empezamos a recibir tramas (frames) periódicas.

El ID del mensaje CAN nos dice qué información contiene. Por ejemplo, el ID 0x359 contiene el Estado de Carga (SOC), Voltaje y Corriente.

# Configuración en ESPHome para leer el Frame 0x359
canbus:
  - platform: esp32_can
    tx_pin: GPIO5
    rx_pin: GPIO4
    bit_rate: 500kbps

sensor:
  - platform: canbus
    canbus_id: my_canbus
    can_id: 0x359
    name: "Pylontech SOC"
    bytes: 4 # El SOC suele estar en el byte 4 y 5
    # La máscara extrae los 16 bits correspondientes

Tener esta data pura en nuestro broker MQTT nos permite hacer automatizaciones críticas, como apagar los mineros de criptomonedas o el servidor de IA si el voltaje de una sola celda interna cae por debajo del umbral de seguridad, mucho antes de que el inversor principal reaccione.