TapHome
Community Beta Energia e misura

SolaX X1/X3-Hybrid G4 — corrected monitoring (Modbus RTU)

Template della community per gli inverter SolaX X1-HYBRID e X3-HYBRID Gen 4 via Modbus RTU su RS-485: il template ufficiale TapHome Gen 4 con letture corrette (ordine delle word del codice di guasto, scala dell'energia totale, contatore di produzione FV, temperatura batteria con segno). Legge SOC e temperatura della batteria, potenza PV1/PV2, immissione in rete, energia, modalità di ricarica e SOC di carica notturna; scritture disabilitate. 19200 baud, 8N1, Slave ID 1.

SolaXModbus RTU9 dispositiviRevisione 1.0 Ultimo aggiornamento: 12 novembre 2026

Inviato da Martin Keller

SolaX X1/X3-Hybrid G4 — corrected monitoring (Modbus RTU)

Importa nell'app TapHomeHardware › Modbus › Aggiungi da modello

Scarica template
In questa pagina

Guida all'integrazione

I SolaX X1-HYBRID e X3-HYBRID Gen 4 sono inverter ad accumulo di energia con fotovoltaico e batteria, disponibili in versione monofase (3–7,5 kW) e trifase (5–15 kW). Questo template della community è il template ufficiale TapHome per SolaX Gen 4 con le letture corrette secondo il protocollo Modbus SolaX (V3.21 e V001.02). Comunica tramite Modbus RTU su RS-485 e legge lo stato di carica e la temperatura della batteria, la potenza delle stringhe FV, il flusso di potenza dalla rete, i totali di energia, la modalità di ricarica e il SOC della carica notturna. I nomi dei dispositivi sono gli stessi del template ufficiale, quindi puoi confrontare un’importazione precedente dispositivo per dispositivo. Tutti gli script di scrittura restano commentati, come nel template ufficiale, quindi il template è in sola lettura.

Il modulo analizza inoltre il codice di guasto dell’inverter a 32 bit e il codice di errore del gestore (manager) a 16 bit e segnala ogni guasto in TapHome con un proprio codice di errore.

Come ottenere il template

I template della community non sono disponibili nell’elenco dei template dell’app TapHome. Accedi a portal.taphome.com, scarica l’XML di questo template e importalo nel Core. Un modulo importato in precedenza dal template ufficiale SolaX Hybrid X1/X3 Gen 4 non si aggiorna da solo: importa questo template come nuovo modulo oppure correggi gli script del vecchio modulo come indicato nella tabella della sezione «Cosa corregge questo template» più avanti.

Collegamento hardware

L’inverter SolaX Gen 4 fornisce una porta COM RS-485 per la comunicazione Modbus RTU sul pannello inferiore. La porta COM utilizza un connettore RJ45.

Pannello inferiore SolaX X3-HYBRID G4 — layout dei terminali con connessioni COM, BMS, Meter/CT, PV, BAT e GRID

Assegnazione dei pin del terminale COM (RJ45):

PinAssegnazioneDescrizione
1Drycontact_A(in)Connessione interruttore di sistema
2Drycontact_B(in)Connessione interruttore di sistema
3+13V—
4485ARS-485 data+ (per TapHome)
5485BRS-485 data− (per TapHome)
6GNDMassa
7Drycontact_A(out)Connessione generatore
8Drycontact_B(out)Connessione generatore

Collega TapHome alla porta COM dell’inverter:

  • Pin 4 (485A) sulla porta COM dell’inverter a A+/D+ su RS-485 TapHome
  • Pin 5 (485B) sulla porta COM dell’inverter a B-/D- su RS-485 TapHome
  • Collegamento del pin 6 (GND) raccomandato per una comunicazione affidabile

Il manuale SolaX prescrive un cavo di rete CAT5E crimpato nel connettore RJ45 fornito con l’inverter e una lunghezza del cavo COM di massimo 30 m.

Il pin 3 (+13V) e il pin 6 (GND) non devono essere collegati tra loro. Isola i pin non utilizzati.

L’inverter stesso non supporta nativamente Modbus TCP. Modbus TCP è disponibile solo tramite il modulo di monitoraggio SolaX (dongle Wi-Fi) e non viene utilizzato da questo template.

Per installazioni in cui il cablaggio RS-485 non è pratico, il template SolaX Inverter (Cloud API) fornisce il monitoraggio attraverso la piattaforma SolaxCloud via HTTPS, senza connessione fisica. Supporta tutti i tipi di inverter SolaX, non solo il Gen 4 Hybrid.

La modalità di ricarica e le impostazioni della carica notturna sono registri EEPROM dell’inverter (contrassegnati con ★ da SolaX, circa 1 milione di cicli di scrittura). Le operazioni di scrittura eccessive possono causare danni hardware irreversibili: non attivare mai su di essi una scrittura eseguita periodicamente. Questo template ha tutti gli script di scrittura disabilitati.

Configurazione

Abilitazione della comunicazione Modbus

Modbus RTU è disponibile di default sulla porta COM RS-485 dell’inverter. I seguenti parametri devono corrispondere tra l’inverter e il modulo TapHome:

  1. Slave ID – predefinito 1, configurabile sul display dell’inverter. Il template lo richiede come unico parametro di importazione, Modbus Slave ID (predefinito 1)
  2. Baud rate – 19200 baud, il valore di fabbrica SolaX; anche il template usa 19200. Se l’inverter è stato impostato su un’altra velocità (ad esempio 9600), modifica l’impostazione dell’inverter oppure la velocità dell’interfaccia TapHome in modo che coincidano
  3. Formato dati – 8 bit dati, nessuna parità, 1 stop bit

Configurazione sul display dell’inverter: Menu > Setting > Advance Setting > Modbus. Imposta l’indirizzo slave e il baud rate. Le impostazioni avanzate richiedono la password dell’installatore, che puoi ottenere dal rivenditore. Il baud rate può essere letto anche dal registro holding H:0x00B0 e scritto tramite il registro 0x00CA (valori: 0=115200, 1=57600, 2=56000, 3=38400, 4=19200, 5=14400, 6=9600).

In TapHome il template viene poi importato sull’interfaccia RS-485 Modbus RTU del Core, impostata con la stessa velocità e lo stesso formato dati, indicando lo Slave ID dell’inverter.

Temporizzazione della comunicazione

Il protocollo richiede un intervallo minimo di 1 secondo tra le istruzioni Modbus consecutive e un timeout di gap tra caratteri di almeno 100 ms. Il timeout di risposta è 1 secondo. Il template utilizza intervalli di polling individuali per dispositivo (da 2,5 s a 150 s) che soddisfano questi requisiti.

Funzione della porta COM RS-485

Il registro H:0x013E (485CommFunSelect) determina se la porta RS-485 viene utilizzata per la comunicazione Modbus (valore 0) o per la comunicazione con il caricabatterie EV (valore 1). Assicurati che sia impostato su 0 (Modbus 485) per l’integrazione con TapHome.

Funzionalità del dispositivo

Monitoraggio della batteria

  • Batteria (SOC) – legge lo stato di carica della batteria (A:0x001C) come percentuale, ogni 15 secondi. Il valore grezzo del registro in unità dell'1% viene diviso per 100 per l’intervallo di ingresso analogico TapHome 0–1 (es. 85% diventa 0,85)
  • Battery Temperature – legge la temperatura della batteria (A:0x0018) in gradi Celsius come valore con segno (Int16), quindi le temperature inferiori a 0 °C vengono mostrate correttamente. Polling ogni 80 secondi

Potenza FV solare

  • PV1 – potenza DC in uscita dalla stringa FV 1 (A:0x000A), visualizzata in kW dopo la conversione /1000 da watt
  • PV2 – potenza DC in uscita dalla stringa FV 2 (A:0x000B), visualizzata in kW dopo la conversione /1000 da watt

PV1 e PV2 sono valori semplici senza tipo di energia, quindi non vengono conteggiati due volte nell’Energy Dashboard.

Potenza di rete e misurazione dell’energia

  • Purchase/Feed to Grid – potenza di rete istantanea (A:0x0046–0x0047, LittleEndianInt32) in kW, un valore semplice senza tipo di energia. I valori positivi indicano l’immissione in rete, i valori negativi il prelievo dalla rete. L’inverter ricava questo valore dal contatore o dal CT collegato
  • Daily/Actual Energy – il contatore di produzione FV per l’Energy Dashboard. La sua potenza è PV1 + PV2 (A:0x000A + A:0x000B) in kW e il suo totale è l’energia FV totale (A:0x0094–0x0095, SolarEnergyTotal, unità di 0,1 kWh) in kWh. Nonostante il nome, il totale non si azzera di notte
  • Total Energy – energia cumulativa totale erogata dalla porta AC dell’inverter (A:0x0052–0x0053, LittleEndianUint32, unità di 0,1 kWh), visualizzata in kWh

Modalità di ricarica e carica notturna

  • Charger Use Mode – legge la modalità attiva del caricabatterie solare (H:0x008B): Self Use Mode (0), Feedin Priority (1), Backup Mode (2) o Manual Mode (3). Il registro di scrittura (H:0x001F) esiste nel template ma è commentato, quindi il dispositivo è in sola lettura
  • SelfUse Night Charge – legge il target SOC superiore per la carica notturna in modalità Self Use (H:0x0094) come percentuale. Il registro di scrittura (H:0x0063) e il registro di abilitazione (H:0x0062) sono entrambi commentati, quindi la configurazione della carica notturna non può essere modificata tramite TapHome

Rilevamento guasti

Lo script di lettura del modulo monitora la modalità di funzionamento dell’inverter (A:0x0009) e due registri di errore. Ogni guasto ha un proprio codice di errore:

  • Guasti Run mode – errore 1 quando la modalità di funzionamento è 3 (Fault), errore 2 quando è 4 (Permanent Fault)
  • Codice di guasto dell’inverter (A:0x0040–0x0041, LittleEndianUint32) – 30 guasti individuali con codici 100–131 (100 + numero del bit), inclusi guasti di tensione/frequenza della rete, guasti di tensione FV, guasti della batteria, guasti di isolamento, sovratemperatura, protezione da sovracorrente, guasti dei relè ed errori di comunicazione. I nomi dei guasti seguono la tabella X3 del protocollo SolaX
  • Codice di errore del gestore (A:0x0043) – codici 200–211 (200 + numero del bit) per guasti di tipo di potenza, errori EEPROM, problemi dei sensori NTC, temperatura della batteria bassa/alta, guasti del contatore, del relè di bypass e della ventola. Port OC Warning (201) viene segnalato come avviso, gli altri come errori

L’attributo di servizio Run mode sul modulo visualizza lo stato corrente dell’inverter come testo: Waiting, Checking, Normal, Fault, Permanent fault, Update, Off-grid waiting, Off-grid, Self testing, Idle o Standby.

Cosa corregge questo template

Il template ufficiale TapHome SolaX Hybrid X1/X3 Gen 4 legge diversi registri in modo errato (verificato sul protocollo Modbus SolaX V3.21 e V001.02). Questo template li corregge:

DoveTemplate ufficialeQuesto templateEffetto dell’errore nel template ufficiale
Modulo — script di letturavar x3 := MODBUSR(A, 0x0040, Uint32);VAR inv := MODBUSR(A, 0x0040, LittleEndianUint32);Le due metà del codice di guasto a 32 bit sono invertite: un guasto nel bit 1 (Grid Lost Fault) viene segnalato come bit 17 (Bat Power Low)
Total EnergyMODBUSR(A, 0x52, LittleEndianInt32) / 1000MODBUSR(A, 0x0052, LittleEndianUint32) / 10Valore 100× troppo piccolo (il registro conta in unità di 0,1 kWh)
Daily/Actual Energy — totaleMODBUSR(A, 0x50, UInt16) /10MODBUSR(A, 0x0094, LittleEndianUint32) / 100x0050 è un contatore giornaliero della porta AC dell’inverter che ogni notte scende a 0; 0x0094 è l’energia FV totale
Daily/Actual Energy — potenzaMODBUSR(A,0x02, Int16)/1000(MODBUSR(A, 0x000A, UInt16) + MODBUSR(A, 0x000B, UInt16)) / 10000x0002 è la potenza di rete dei modelli monofase X1, non la produzione FV; su molte unità X3 legge 0
Battery TemperatureMODBUSR(A,0x0018, UInt16)MODBUSR(A, 0x0018, Int16)Sotto 0 °C il template ufficiale mostra circa 65535 °C
Velocità dell’interfaccia9600 baud19200 baud19200 è il valore di fabbrica di SolaX

Con gli script corretti il contatore Daily/Actual Energy misura la produzione FV (PV1 + PV2), cioè ciò che si aspetta il suo tipo di energia nell’Energy Dashboard. PV1, PV2 e Purchase/Feed to Grid non hanno più un tipo di energia: sono valori semplici. Tutte le scritture restano disabilitate, come nel template ufficiale.

Risoluzione dei problemi

Nessuna comunicazione con l’inverter

  1. Verifica i collegamenti del cavo RS-485: A+ ad A+, B- a B-, GND a GND
  2. Controlla che il registro H:0x013E sia impostato a 0 (modalità Modbus 485, non EV Charger)
  3. Verifica che il baud rate corrisponda tra inverter e TapHome – il template usa 19200, il valore predefinito dell’inverter; con un inverter impostato a 9600 occorre modificare uno dei due lati
  4. Verifica che il Modbus Slave ID in TapHome corrisponda all’impostazione dell’inverter (predefinito: 1)
  5. Assicurati che nessun altro master Modbus sia collegato allo stesso bus RS-485 – Modbus supporta un solo master

I valori sembrano quelli del template ufficiale

Se Total Energy è 100× troppo piccolo, Daily/Actual Energy scende a 0 ogni notte o Battery Temperature mostra circa 65535 °C sotto zero, il modulo esegue ancora gli script del template ufficiale. Un modulo non si aggiorna da solo da un template più recente: importa questo template come nuovo modulo oppure correggi gli script come indicato nella tabella sopra.

Lettura di Batteria (SOC) errata

Il registro di Batteria (SOC) (A:0x001C) riporta valori in unità dell'1%. Il template divide per 100 per l’intervallo di ingresso analogico TapHome 0–1. Se il valore visualizzato sembra errato, verifica che il dispositivo TapHome sia configurato come ingresso analogico (intervallo 0–1, non 0–100).

Convenzione dei segni della potenza di rete

Purchase/Feed to Grid (A:0x0046) utilizza una convenzione dei segni in cui i valori positivi significano immissione (esportazione in rete) e i valori negativi significano prelievo (consumo dalla rete). L’inverter ricava questo valore dal suo contatore o CT, quindi dipende da un contatore o CT collegato correttamente.

Differenze tra X1 e X3

Il template legge la potenza FV (A:0x000A e A:0x000B) invece del registro della potenza di rete X1, quindi il contatore Daily/Actual Energy funziona allo stesso modo sui modelli X1 e X3. I nomi dei guasti seguono la tabella X3 del protocollo SolaX. Su un inverter X1 alcuni bit di guasto indicano guasti diversi: il bit 9 e la maggior parte dei bit dal 15 in su (ad esempio, il bit 15 è Missed CT Fault su X1 ma Off-grid Overload su X3).

Dispositivi disponibili 9

Questi dispositivi compaiono in TapHome dopo l'importazione.

SolaX X3-Hybrid G4 Modulo
Attributi di servizio
Run mode

SolaX X3-Hybrid G4

Lettura (modulo)
VAR mode := MODBUSR(A, 0x0009, UInt16);
IF(mode = 3, ADDERROR(1, "Inverter fault (run mode 3)"));
IF(mode = 4, ADDERROR(2, "Inverter permanent fault (run mode 4)"));
VAR inv := MODBUSR(A, 0x0040, LittleEndianUint32);
IF(GETBIT(inv, 0) = 1, ADDERROR(100, "TZ Protect Fault"));
IF(GETBIT(inv, 1) = 1, ADDERROR(101, "Grid Lost Fault"));
IF(GETBIT(inv, 2) = 1, ADDERROR(102, "Grid Volt Fault"));
IF(GETBIT(inv, 3) = 1, ADDERROR(103, "Grid Freq Fault"));
IF(GETBIT(inv, 4) = 1, ADDERROR(104, "PV Volt Fault"));
IF(GETBIT(inv, 5) = 1, ADDERROR(105, "Bus Volt Fault"));
IF(GETBIT(inv, 6) = 1, ADDERROR(106, "Bat Volt Fault"));
IF(GETBIT(inv, 7) = 1, ADDERROR(107, "AC10mins Volt Fault"));
IF(GETBIT(inv, 8) = 1, ADDERROR(108, "DCI OCP Fault"));
IF(GETBIT(inv, 9) = 1, ADDERROR(109, "DCV OCP Fault"));
IF(GETBIT(inv, 10) = 1, ADDERROR(110, "SW OCP Fault"));
IF(GETBIT(inv, 11) = 1, ADDERROR(111, "RC OCP Fault"));
IF(GETBIT(inv, 12) = 1, ADDERROR(112, "Isolation Fault"));
IF(GETBIT(inv, 13) = 1, ADDERROR(113, "Temp Over Fault"));
IF(GETBIT(inv, 14) = 1, ADDERROR(114, "BatConnDir Fault"));
IF(GETBIT(inv, 15) = 1, ADDERROR(115, "Off-grid Overload"));
IF(GETBIT(inv, 16) = 1, ADDERROR(116, "Overload"));
IF(GETBIT(inv, 17) = 1, ADDERROR(117, "Bat Power Low"));
IF(GETBIT(inv, 18) = 1, ADDERROR(118, "BMS Lost"));
IF(GETBIT(inv, 19) = 1, ADDERROR(119, "Fan Fault"));
IF(GETBIT(inv, 20) = 1, ADDERROR(120, "Low Temp Fault"));
IF(GETBIT(inv, 23) = 1, ADDERROR(123, "INV Volt Sample Fault"));
IF(GETBIT(inv, 24) = 1, ADDERROR(124, "Inner Comm Fault"));
IF(GETBIT(inv, 25) = 1, ADDERROR(125, "INV EEPROM Fault"));
IF(GETBIT(inv, 26) = 1, ADDERROR(126, "RCD Fault"));
IF(GETBIT(inv, 27) = 1, ADDERROR(127, "Grid Relay Fault"));
IF(GETBIT(inv, 28) = 1, ADDERROR(128, "Off-grid Relay Fault"));
IF(GETBIT(inv, 29) = 1, ADDERROR(129, "PV ConnDir Fault"));
IF(GETBIT(inv, 30) = 1, ADDERROR(130, "Charger Relay Fault"));
IF(GETBIT(inv, 31) = 1, ADDERROR(131, "Earth Relay Fault"));
VAR mgr := MODBUSR(A, 0x0043, UInt16);
IF(GETBIT(mgr, 0) = 1, ADDERROR(200, "Power Type Fault"));
IF(GETBIT(mgr, 1) = 1, ADDWARNING(201, "Port OC Warning"));
IF(GETBIT(mgr, 2) = 1, ADDERROR(202, "Mgr EEPROM Fault"));
IF(GETBIT(mgr, 4) = 1, ADDERROR(204, "NTC Sample Invalid"));
IF(GETBIT(mgr, 5) = 1, ADDERROR(205, "Battery Temperature Low"));
IF(GETBIT(mgr, 6) = 1, ADDERROR(206, "Battery Temperature High"));
IF(GETBIT(mgr, 9) = 1, ADDERROR(209, "Meter Fault"));
IF(GETBIT(mgr, 10) = 1, ADDERROR(210, "Bypass Relay Fault"));
IF(GETBIT(mgr, 11) = 1, ADDERROR(211, "Fan 2 Fault"));
Attributi di servizio
Run mode
SWITCH(MODBUSR(A, 0x0009, UInt16), 0, "Waiting", 1, "Checking", 2, "Normal", 3, "Fault", 4, "Permanent fault", 5, "Update", 6, "Off-grid waiting", 7, "Off-grid", 8, "Self testing", 9, "Idle", 10, "Standby", "Other")
${deviceType_BatterySOC} Ingresso analogico

${deviceType_BatterySOC}

Lettura livello ingresso
MODBUSR(A, 0x001C, UInt16) / 100
Battery Temperature Sensore di temperatura

Battery Temperature

Lettura temperatura
MODBUSR(A, 0x0018, Int16)
Daily/Actual Energy Contatore elettrico

Daily/Actual Energy

Lettura consumo totale
MODBUSR(A, 0x0094, LittleEndianUint32) / 10
Lettura domanda
(MODBUSR(A, 0x000A, UInt16) + MODBUSR(A, 0x000B, UInt16)) / 1000
Charger Use Mode Interruttore multivalore
Valori / Stati: Self Use Mode · Feedin Priority · Backup Mode · Manual Mode

Charger Use Mode

Lettura stato interruttore
MODBUSR(H, 0x008B, UInt16)
Scrittura stato interruttore
#MODBUSW(SH, 0x001F, Uint16, Mu)
Purchase/Feed to Grid Variabile

Purchase/Feed to Grid

Lettura
MODBUSR(A, 0x0046, LittleEndianInt32) / 1000
PV1 Variabile

PV1

Lettura
MODBUSR(A, 0x000A, UInt16) / 1000
PV2 Variabile

PV2

Lettura
MODBUSR(A, 0x000B, UInt16) / 1000
SelfUse Night Charge Dimmer

SelfUse Night Charge

Inizializzazione
#MODBUSWNE(SH, 0x0062, Uint16, 1);
Lettura livello
MODBUSR(H, 0x0094, UInt16) / 100
Scrittura livello
#MODBUSW(SH, 0x0063, Uint16, Le * 100)
Total Energy Variabile

Total Energy

Lettura
MODBUSR(A, 0x0052, LittleEndianUint32) / 10
Connessione: Modbus RTU • 19200 baud• 8N1 • Slave ID: $[SlaveId]

Parametri di importazione

Inserisci questi valori quando importi l'XML.

Richiesto nell'appPredefinito
Modbus Slave ID1

Hai trovato un problema con questo template?

Dicci cosa non funziona, cosa manca o come dovrebbe comportarsi il template. Il tuo feedback ci aiuta a mantenere il catalogo accurato.

Modello · portale TapHome SolaX X1/X3-Hybrid G4 — corrected monitoring (Modbus RTU) Apri questo template nel Customer Portal per applicarlo a una delle tue case, o crea una proposta di modifica e inviala al catalogo. Modbus RTU Vedi nel portale TapHome