---
title: "SolaX X1/X3-Hybrid G4 — corrected monitoring (Modbus RTU)"
description: "SolaX X1/X3-Hybrid G4 via Modbus RTU (RS-485): SOC batteria, potenza FV, immissione in rete, energia, codici di guasto. Correzione del template ufficiale."
url: "https://taphome.com/it/compatibility/solax-x3-hybrid-gen4-corrected-modbus-rtu/"
language: it
lastmod: 2026-11-12
generator: hugo
ai:
  topics: ["modbus-rtu","rs485","inverter","solar","battery-storage","3-phase","energy-monitoring"]
  questions: ["Come integrare un inverter SolaX X1/X3-Hybrid G4 con TapHome tramite Modbus RTU?","Cosa corregge il template della community SolaX Gen 4 rispetto al template ufficiale?","Come collegare la porta COM del SolaX Gen 4 tramite RS-485 a TapHome?","Quale baud rate usa l'inverter SolaX Gen 4 per Modbus RTU?","Perché con il template SolaX ufficiale Total Energy è 100 volte troppo piccolo o Battery Temperature indica 65535 °C?","Come importare un template della community da portal.taphome.com nel Core TapHome?","TapHome può modificare la modalità di ricarica SolaX o le impostazioni della carica notturna?"]
---

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

Comunicazione: Modbus RTU

## 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](https://taphome.com/it/compatibility/solax-hybrid-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](https://taphome.com/images/compatibility/solax-x3-hybrid-gen4-corrected-modbus-rtu/system-overview_hu_369f8976dd0be2fb.jpg)

Assegnazione dei pin del terminale COM (RJ45):

| Pin | Assegnazione | Descrizione |
|-----|-------------|-------------|
| 1 | Drycontact_A(in) | Connessione interruttore di sistema |
| 2 | Drycontact_B(in) | Connessione interruttore di sistema |
| 3 | +13V | — |
| 4 | **485A** | RS-485 data+ (per TapHome) |
| 5 | **485B** | RS-485 data− (per TapHome) |
| 6 | GND | Massa |
| 7 | Drycontact_A(out) | Connessione generatore |
| 8 | Drycontact_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.

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

> [!WARNING]
> 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.

> [!TIP]
> Per installazioni in cui il cablaggio RS-485 non è pratico, il template [SolaX Inverter (Cloud API)](https://taphome.com/it/compatibility/solax-inverter/) 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.

> [!WARNING]
> 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](https://taphome.com/it/compatibility/solax-hybrid-x3-gen-4/) legge diversi registri in modo errato (verificato sul protocollo Modbus SolaX V3.21 e V001.02). Questo template li corregge:

| Dove | Template ufficiale | Questo template | Effetto dell'errore nel template ufficiale |
|------|--------------------|-----------------|--------------------------------------------|
| Modulo — script di lettura | `var 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 Energy | `MODBUSR(A, 0x52, LittleEndianInt32) / 1000` | `MODBUSR(A, 0x0052, LittleEndianUint32) / 10` | Valore 100× troppo piccolo (il registro conta in unità di 0,1 kWh) |
| Daily/Actual Energy — totale | `MODBUSR(A, 0x50, UInt16) /10` | `MODBUSR(A, 0x0094, LittleEndianUint32) / 10` | 0x0050 è un contatore giornaliero della porta AC dell'inverter che ogni notte scende a 0; 0x0094 è l'energia FV totale |
| Daily/Actual Energy — potenza | `MODBUSR(A,0x02, Int16)/1000` | `(MODBUSR(A, 0x000A, UInt16) + MODBUSR(A, 0x000B, UInt16)) / 1000` | 0x0002 è la potenza di rete dei modelli monofase X1, non la produzione FV; su molte unità X3 legge 0 |
| Battery Temperature | `MODBUSR(A,0x0018, UInt16)` | `MODBUSR(A, 0x0018, Int16)` | Sotto 0 °C il template ufficiale mostra circa 65535 °C |
| Velocità dell'interfaccia | 9600 baud | 19200 baud | 19200 è 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 |

Lettura (modulo)

```taphome
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

```taphome
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

Lettura livello ingresso

```taphome
MODBUSR(A, 0x001C, UInt16) / 100
```

Battery Temperature Sensore di temperatura

Lettura temperatura

```taphome
MODBUSR(A, 0x0018, Int16)
```

Daily/Actual Energy Contatore elettrico

Lettura consumo totale

```taphome
MODBUSR(A, 0x0094, LittleEndianUint32) / 10
```

Lettura domanda

```taphome
(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

Lettura stato interruttore

```taphome
MODBUSR(H, 0x008B, UInt16)
```

Scrittura stato interruttore

```taphome
#MODBUSW(SH, 0x001F, Uint16, Mu)
```

Purchase/Feed to Grid Variabile

Lettura

```taphome
MODBUSR(A, 0x0046, LittleEndianInt32) / 1000
```

PV1 Variabile

Lettura

```taphome
MODBUSR(A, 0x000A, UInt16) / 1000
```

PV2 Variabile

Lettura

```taphome
MODBUSR(A, 0x000B, UInt16) / 1000
```

SelfUse Night Charge Dimmer

Inizializzazione

```taphome
#MODBUSWNE(SH, 0x0062, Uint16, 1);
```

Lettura livello

```taphome
MODBUSR(H, 0x0094, UInt16) / 100
```

Scrittura livello

```taphome
#MODBUSW(SH, 0x0063, Uint16, Le * 100)
```

Total Energy Variabile

Lettura

```taphome
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'app | Predefinito |
|--------------------|-------------|
| Modbus Slave ID    | `1`         |

## Documentazione correlata

- [Modbus Integration](https://taphome.com/it/compatibility/modbus-guide/)
- [Modbus - Configurazione](https://taphome.com/it/docs/integration/modbus/)
- [Configurazione semplice utilizzando modelli](https://taphome.com/it/docs/integration/modbus/templates/)
- [Script Modbus e prefetch](https://taphome.com/it/docs/script/modbus-scripts/)
- [Funzioni Modbus](https://taphome.com/it/docs/script/modbus/)
- [Tipi di dati Modbus](https://taphome.com/it/docs/script/modbus-data-types/)

