Decodificando el BMS Pylontech vía CAN Bus
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.