← Volver al Jardín

Decodificando el BMS Pylontech vía CAN Bus

#IoT#Hardware_Hacking#ESP32#Energía

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.

TUXBOT@SISTEMA:~$ ./chat
> SYSTEM INITIALIZED. FLEET STATUS: ACTIVE.
🐧🤖 [Tuxbot]: Hola, soy Tuxbot. Tu Ghost in the Shell para dragont.ec. ¿Qué deseas consultar hoy?
>