BYD Battery-Box HVM : SOC et puissance vers KNX via Modbus TCP onduleur
Lecture du SOC et de la puissance de charge/décharge de la BYD Battery-Box HVM via l'interface Modbus TCP de l'onduleur couplé — registres SolarEdge StorEdge, Fronius SunSpec Model 802 et SMA Sunny Boy Storage. Flux de scrutation Node-RED et mappage KNX DPT pour l'automatisation de l'autoconsommation.
Pourquoi BYD n'a pas de port Modbus direct
BYD Battery-Box HVM (système haute tension 403,2 V, 2,76–22,1 kWh par stack) communique avec l'onduleur via un protocole propriétaire CAN-bus / EnergyLink sur le port CAN entre la batterie et l'onduleur. BYD n'expose pas de port Modbus TCP ou RS485 accessible par l'utilisateur sur la batterie elle-même. Toutes les données batterie doivent être lues indirectement via le partenaire onduleur certifié.
SolarEdge StorEdge + BYD : carte des registres
SolarEdge SE5K-RWS00BNN4 (StorEdge) avec BYD Battery-Box HVM : Modbus TCP port 1502, unit ID 1.
Registres holding spécifiques à la batterie (FC3, uint16 / int16) :
| Registre | Description | Type / Mise à l'échelle |
|---|---|---|
| 62784 (0xF540) | Température moyenne batterie 1 | int16, °C x10 |
| 62786 (0xF542) | Tension DC batterie 1 | uint16, V x100 |
| 62794 (0xF54A) | Puissance instantanée batterie 1 | int16, W — positif=charge, négatif=décharge |
| 62798 (0xF54E) | État de charge batterie 1 (SOC) | uint16, % |
| 62800 (0xF550) | État de santé batterie 1 (SOH) | uint16, % |
| 62852 (0xF584) | Masque de bits statut batterie 1 | uint16 : bit 3=charge, bit 4=décharge, bit 11=défaut |
Mappage KNX : le registre 62794 (int16, W) divisé par 1000 correspond à KNX DPT 9.001 (puissance batterie kW), le registre 62798 correspond à KNX DPT 5.001 (SOC %). Remarque : le registre 62794 est un entier signé — la passerelle MDT Modbus doit être configurée sur le type de données signed int16 pour ce registre.
Fronius Symo Gen24 + BYD : SunSpec Model 802
Fronius Symo Gen24 5.0-1 avec BYD Battery-Box HVM : Modbus TCP port 502, unit ID 1. Les registres SunSpec commencent à 40001 (adresse de base).
Le SunSpec Model 802 (Battery Base Model) est ajouté après le Model 103 (Inverter). Pour localiser dynamiquement le Model 802 : scanner la liste de blocs SunSpec depuis la base. En pratique pour Fronius Gen24 avec firmware 1.24.x, les registres batterie commencent à environ 40331 :
Fronius Gen24 SunSpec Model 802 — registres clés
Register 40331: SunSpec Model 802 ID (value 802) Register 40333: Battery SOC (uint16, SF from register 40372) Register 40337: Battery instantaneous power (int16, W — positive=charging) Register 40341: Battery status (enum16: 1=off, 3=charging, 4=discharging, 7=fault) Register 40361: Battery SOC (float32 alternative, direct %)
Pour une utilisation en production : la passerelle MDT Modbus lit le registre 40361 (2 registres, float32 big-endian) pour le SOC et le registre 40337 (int16) pour la puissance. Mappage sur les adresses de groupe KNX.
SMA Sunny Boy Storage + BYD : adresses des registres
SMA SBS6.0-10 avec BYD Battery-Box : Modbus TCP port 502, unit ID 3 (SMA utilise généralement l'unit ID 3 pour les onduleurs de stockage).
| Registre | Description | Type |
|---|---|---|
| 30845-30846 | SOC batterie (0–100 %) | uint32 |
| 30851-30852 | État de santé batterie (0–100 %) | uint32 |
| 30775-30776 | Puissance de charge batterie (W — positif=charge, négatif=décharge) | int32 |
| 30843-30844 | Statut opérationnel batterie (2291=vide, 2292=charge, 2293=décharge, 2294=plein) | uint32 |
Remarque : SMA utilise des types uint32 (2 registres chacun) même pour les valeurs en pourcentage. Passerelle MDT Modbus : type de données 'unsigned 32-bit integer', ordre des octets 'big-endian', diviser la valeur du registre SOC par 1 (déjà en pourcentage, aucune mise à l'échelle nécessaire).
Flux de scrutation Node-RED
Installer les packages Node-RED : node-red-contrib-modbus (scrutation Modbus TCP). Structure du flux :
Flux Node-RED — SolarEdge BYD SOC et puissance vers KNX
Inject (30s interval)
→ Modbus Read (server: 192.168.1.100, port 1502, unit 1,
FC3, start 62798, count 1, datatype INT)
→ Function: msg.payload = msg.payload[0]; return msg;
→ KNX-Classic Out (GA: 6/4/1, DPT 5.001 — Battery SOC %)
Second branch from inject (register 62794 — battery power):
→ Modbus Read (same server, start 62794, count 1, datatype INT)
→ Function:
var value = msg.payload[0];
if (value > 32767) { value = value - 65536; }
msg.payload = value / 1000;
return msg;
→ KNX-Classic Out (GA: 6/4/2, DPT 9.001 — Battery power kW,
positive = charging)Automatisation de l'autoconsommation KNX
Contrôleur logique ETS6 (MDT Logic Controller ou Weinzierl IP 731) : Règle — si GA 6/4/1 (SOC batterie) est supérieur à 85 ET GA 7/0/0 (export PV, DPT 9.001) est supérieur à 0,5 kW, activer la sortie KNX GA 1/5/4 (boost ECS, minuterie 30 min). Règle — si GA 6/4/1 (SOC) descend sous 20, désactiver la sortie KNX GA 1/6/1 (autorisation charge VE, DPT 1.001). Hystérésis : le SOC doit remonter au-dessus de 30 pour réactiver la charge VE.
Traitement des entiers signés : Le registre SolarEdge 62794 (puissance batterie) est un entier signé 16 bits. Lorsqu'il est lu comme valeur non signée par certaines passerelles, la puissance de charge apparaît comme un grand nombre positif (ex. 65436 au lieu de -100W). Toujours configurer la passerelle MDT SCN-MOD.02 ou équivalente sur signed int16 pour ce registre, ou appliquer la formule de soustraction (si valeur supérieure à 32767 : soustraire 65536) dans Node-RED ou le contrôleur logique.
Besoin d'un tableau KNX avec intégration Modbus batterie BYD réalisé sur spec ?
Nous concevons des tableaux basse tension avec intégration Modbus batterie SolarEdge, Fronius et SMA, logique d'autoconsommation KNX et documentation complète de mise en service — livrés testés et vérifiés sur votre site.
Demander un devis →