risorse | huawei sun2000 su emoncms
Huawei SUN2000 su EmonCMS
Introduzione
Sono stato coinvolto in un progetto che mira a far confluire in un'istanza EmonCMS che monitora un vecchio impianto fotovoltaico i dati provenienti da un nuovo sistema di pannelli Huawei basato su un inverter SUN2000 al quale è connessa una Smart Dongle modello SDongleA-05. Entrambi i dispositivi supportano il protocollo Modbus, l'inverter nelle forme Modbus/TCP via Wifi e su linea RS-485, la dongle come Modbus/TCP via Wifi e connessione Ehternet (LAN).
EmonCMS dispone di un componente dedicato alla raccolta di dati da sensori di terze parti denominato EmonHub. Tra i protocolli disponibili figura anche Modbus. Non essendo riuscito a configurare con successo il servizio e spinto dalla curiosità di capire come funziona questo protocollo ho deciso di sviluppare un servizio dedicato in Python (cfr. repository GitHub solarmon) con la prospettiva di inviare i dati a EmonCMS attraverso l'API che tale piattaforma espone.
Durante lo sviluppo sono emerse diverse criticità, che raccolgo qui a futura memoria.
Punti di attenzione
- non sono riuscito a trovare l'archivio ufficiale della documentazione tecnica Huawei, ammesso che questo esista; alcuni riferimenti parziali sono riportati nei forum ufficiali; tra i più interessanti, che per comodità di consultazione ho salvato in locale, le specifiche del protocollo Modbus dell'inverter e della dongle (attenzione: queste ultime si riferiscono al modello SDongleA-03!);
- inverter e dongle espongono due reti Wifi distinte: sulla rete dell'inverter è presente solo un dispositivo, l'inverter stesso, che risponde sulla porta 6607 con identificativo 0; sulla rete della dongle sono presenti due dispositivi, la dongle stessa con identificativo 1 e l'inverter con identificativo 100; entrambi rispondono sulla porta predefinita del protocollo Modbus/TCP (502);
- i dati di potenza dell'inverter ottenuti attraverso la dongle risultano diversi da quelli ricavati direttamente dall'inverter; l'effetto è analogo a quello di un filtro passa basso: applicando ai dati dell'inverter una media mobile su una finestra di 5 minuti si ottengono risultati molto vicini a quelli pervenuti attraverso la dongle;
- il sistema Huawei è corredato di due misuratori di potenza — uno sulla linea AC dell'inverter del vecchio impianto e uno all'ingresso dalla rete esterna — ed una batteria che, stando allo schema elettrico, risultano connessi al bus RS-485; non sono tuttavia riuscito a stabilire una connessione con nessuno di questi dispositivi su nessuna delle due reti Wifi disponibili; entrambi i contatori poi mostrano sui relativi display l'identificativo 11, in aperto contrasto con il funzionamento del Modbus che richiede che gli identificativi dei dispositivi siano univoci;
- la rete dell'inverter è notevolmente più veloce rispetto a quella della dongle, come riscontrato da più utenti (cfr. ad esempio l'articolo Is it possible to make USB Dongle TCP Modbus as fast reliable as RS-485? nei forum ufficiali); le verifiche effettuate sul campo confermano in pieno l'osservazione, i tempi medi di lettura (sequenziale) di 11 parametri sono stati infatti:
- via dongle: 10.7s ± 2.0s
- via inverter: 3.2s ± 0.7s
- In entrambi i casi risulta molto più efficiente leggere un insieme di registri contigui in blocco piuttosto che uno ad uno; i tempi di lettura di un gruppo di 8 registri sono stati:
| sequenziale | in blocco |
dongle | 5.51s | 0.36s |
inverter | 0.64s | 0.07s |
- Le interrogazioni della dongle risultano essere piuttosto soggette a errori, in particolare se le richieste avvengono allo scadere del minuto, quando cioé il numero di secondi dell'orologio di sistema passa da 59 a 00:
acquisizione | campioni | errori dongle | errori inverter |
allo scadere del minuto | 1226 | 186 (15.17%) | 224 (18.27%) |
ogni 30s | 2284 | 21 (0.92%) | 32 (1.40%) |
ogni 67s | 967 | 6 (0.62%) | 16 (1.65%) |
ogni 15s | 4852 | 56 (1.15%) | 87 (1.79%) |
L'interrogazione diretta dell'inverter è praticamente immune da errori.
- stando a quanto riportato nei forum ufficiali la connessione diretta al server verrà presto chiusa, anche se non è chiaro quando:
The SUN2000L1 supports data read and write only when the FusionSolar app is directly connected to the inverter at the local end. Modbus TCP connections to devices except FusionSolar will not be supported in the future.
Also, if a customer needs to use a third-party device, use Modbus TCP to connect to the device. Currently, only Dongle supports this function and must comply with the Modbus TCP protocol provided by Dongle.
Fonte: MODBUS TCP Guide Huawei.
Altre osservazioni
- il parametro "Active power" dell'inverter rappresenta il flusso di potenza che transita dal dominio DC al dominio AC e viceversa; questo indicatore non tiene dunque conto della potenza che dai pannelli passa direttamente nelle batterie;
- la libreria Python huawei-solar permette l'interrogazione via Modbus/TCP di un inverter Huawei SUN2000 (non della dongle); ad oggi la versione stabile consente di effettuare solo letture di singoli registri, risultando perciò a volte inefficiente; la versione di sviluppo è in grado di leggere più registri contemporaneamente ma richiede una versione di Python 3.9 o superiore (l'immagine EmonCMS per Raspberry Pi correntemente in uso include Python in versione 3.7).
Pagina modificata il 06/09/2022