Come accade spesso questi inverter pubblicano i dati di produzione solo via App proprietaria, questo non permette di usare i dati di produzione del proprio impianto fotovoltaico sulla propria domotica. Il mio obbiettivo era quello di poter visualizzare sulla mia domotica basata su Home Assistant dei dati di produzione del mio impianto fotovoltaico.
Dopo alcune prove sono riuscito a collegare il mio inverter FEB PowerX a un Raspberry Pi 4 e a leggere correttamente i registri Modbus RTU tramite RS485.
Hardware utilizzato
- Raspberry Pi 3, 4 o 5 con Raspberry Pi OS
- Dongle USB RS485 CH340
- Inverter FEB PowerX
- Cavo RJ45 modificato
Questo è il dongle che ho acquistato:

Questo è il cavo che ho realizzato:

Il mio inverter ha una porta RS485, questa è impegnata dal cavo di rete che mette in comunicazione le batterie con l’inverter, le batterie però usano il canale BMS e non il canale EMS come si vede dalla figura sotto:

al posto di cercare un deviatore come quello di figura sopra, di difficile reperibilità, ho creato con due connettore di rete RJ45, uno maschio e uno femmina, un cavo che estrae i soli PIN 7 e 8.

Con questo cavo i PIN dal 1 al 6 continuano ad andare dall’inverter alla batteria, questo è fondamentale per il funzionamento corretto dell’inverter e dell’App. I soli PIN 7 e 8 adesso non vanno più alla batteria ma con i cavetti rosso e bianco sono pronti per essere collegato al dongle RS485 per la comunicazione RS485.
Ultimo passaggio è quello di impostare nell’App il canale slave:

Adesso è tutto pronto per testare la comunicazione RS485.
Collegamento RS485
Collegare il cavo del PIN 7 alla porta A del dongle e il PIN 8 alla porta B il GND non è necessario per cavi corti.
Verifica del dongle USB
Inserire il dongle in una porta USB del raspberry e verificare che venga riconosciuto con il comando:
ls /dev/ttyUSB*
nel mio caso il risultato è: /dev/ttyUSB0
Per identificare il dispositivo: dmesg | grep ttyUSB
Utilizzare il nome persistente del dispositivo
Se si dovesse riavviare il Raspberry la porta potrebbe cambiare, per evitare questo problema dare il comando: -l /dev/serial/by-id/
Nel mio caso la risposta è stata:
/dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
lo useremo da ora in poi per identificare il dongle.
Installazione di mbpoll
sudo apt update
sudo apt install mbpoll
Verifica:
which mbpoll
Parametri Modbus corretti
Dopo vari tentativi i parametri funzionanti sono risultati:
Protocollo : Modbus RTU
Slave ID : 1
Baudrate : 115200
Parity : None
Stop bit : 1
Primo test di comunicazione
Lettura della versione protocollo:
mbpoll -m rtu -a 1 -b 115200 -P none -t 4:hex -0 -r 8192 -c 1 /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
Risultato:
0x0681
Questo conferma che la comunicazione Modbus è attiva. Se non dovesse funzionare potreste provare a invertire i cavi quindi PIN 7 a B e PIN 8 ad A.
Un altro comando utile identifica il modello di Inverter:
mbpoll -m rtu -a 1 -b 115200 -P none -t 4:hex -0 -r 8198 -c 1 /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
Risultato:
0x0001 che tradatto vuol dire 1 = Single Phase
Con il comando seguente leggiamo il SOC ovvero la percentuale di carica della batteria:
Registro: 0x1212 Decimale: 4626
Comando:
mbpoll -m rtu -a 1 -b 115200 -P none -t 4:hex -0 -r 4626 -c 2 /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
Risultato:
0x4290
0x0000
Convertito in float IEEE754:
72%
Verificare per sicurezza se coincide con il valore che legge l’App.
Disabilitare la console seriale
Anche se viene utilizzato un dongle USB, conviene disabilitare la console seriale:
sudo systemctl disable serial-getty@ttyS0.service
Verifica:
systemctl is-enabled serial-getty@ttyS0.service
il risultato dovrebbe essere: enabled-runtime
Risultato finale
Al termine della configurazione:
✅ Comunicazione RS485 funzionante
✅ Accesso diretto all’inverter
✅ Lettura registri Modbus
✅ SOC batteria verificato
Parametri finali
port: /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
slave: 1
baudrate: 115200
parity: N
stopbits: 1
protocol: modbus_rtu