Commit Graph

37 Commits

Author SHA1 Message Date
Pi Developer 61567e3326 fix: Pulizia topic legacy e discovery retention
Build Docker Image for Raspberry Pi / build-and-push (push) Successful in 7m31s
Docker Image Cleanup / cleanup-old-images (push) Failing after 3m16s
- Rimosso vecchio topic homeassistant/sensor/voltronic/config all'avvio
- Aggiunto flag -r (retain) a tutti i discovery topics
- MQTT init eseguito immediatamente all'avvio + ogni 5 minuti
- Aggiunto unique_id e device info a tutti i sensori per HA
- mqtt-subscriber ora ascolta su 3 topic:
  - homeassistant/sensor/voltronic/command (legacy)
  - homeassistant/sensor/voltronic_inv1_raw_cmd/command
  - homeassistant/sensor/voltronic_inv2_raw_cmd/command
- Subscriber con output verbose e timestamp
- Discovery topics ora persistono dopo restart broker MQTT

Timing verificato:
- Init all'avvio: immediato
- Re-init periodico: ogni 5 minuti (300s)
- Data push: ogni 30 secondi
2026-02-03 00:51:37 +01:00
Pi Developer 168ee6d12a feat: Replicazione parametri comuni QPIRI su tutti gli inverter
Build Docker Image for Raspberry Pi / build-and-push (push) Successful in 7m36s
- Parametri configurazione (QPIRI) ora pubblicati per inv1_* e inv2_*
- Separata pubblicazione runtime (QPGS) da configurazione (QPIRI)
- QPIRI letto una volta e replicato su tutti gli inverter
- 17 parametri runtime per inverter + 9 parametri config condivisi
- Total: 26 parametri per inverter (17 runtime + 9 config)

Parametri comuni replicati su entrambi gli inverter:
- Battery_recharge_voltage
- Battery_under_voltage
- Battery_bulk_voltage
- Battery_float_voltage
- Max_charge_current
- Max_grid_charge_current
- Out_source_priority
- Charger_source_priority
- Battery_redischarge_voltage
2026-02-03 00:27:35 +01:00
Pi Developer 6dc4626774 feat: Supporto completo estrazione 28 parametri da QPGS+QPIRI per inverter paralleli
Build Docker Image for Raspberry Pi / build-and-push (push) Successful in 7m3s
- Aggiunta funzione extractAndPublishAllData() con tutti i 33 parametri
- Parsing QPGS (19 params runtime) + QPIRI (8 params config) + PV_watts calcolato
- Fallback automatico a modalità standard se QPGS non disponibile
- Retry ridotto a 1 tentativo (2s delay) per performance
- Gestione errori NAK con messaggi informativi per utente
- Supporto bitmap status flags da QPGS (Load_on, SCC_on, AC_charge_on)

Note: Test mostrano che inverter attualmente in modalità Battery (QMOD=B)
risponde NAK a tutti i comandi eccetto QMOD. Necessaria verifica stato
fisico inverter o attivazione modalità parallela nel firmware.
2026-02-03 00:09:05 +01:00
Pi Developer f906047f39 feat: Flusso completo discovery parallelo per 2 inverter
Build Docker Image for Raspberry Pi / build-and-push (push) Successful in 7m34s
FLUSSO IMPLEMENTATO:
1. All'avvio: registra discovery topics per 2 inverter (hardcoded)
2. Discovery topics ripetuti ogni 5 minuti (invece di 10)
3. Parallel discovery parametri con retry:
   - Tenta discovery fino a 3 volte
   - Se fallisce: attende 5s e riprova
   - Se tutti i tentativi falliscono: assume 2 inverter
4. Estrazione dati ogni 30s per entrambi gli inverter

NAMING:
- Inverter 1: voltronic_inv1_*
- Inverter 2: voltronic_inv2_*

Discovery topics include tutti i 33 parametri per entrambi gli inverter
2026-02-02 23:50:24 +01:00
Pi Developer 0143e8eb36 feat: Forza modalità parallela con default 2 inverter
Build Docker Image for Raspberry Pi / build-and-push (push) Successful in 7m6s
- Rimosso timeout e detection automatica
- Sempre modalità parallela forzata
- Default 2 inverter se parallel discovery fallisce
- Registra discovery per voltronic_inv1 e voltronic_inv2

NOTA: Se gli inverter non rispondono a QPGS, NON sono in modalità parallela.
Per gestire 2 inverter fisici separati, serve INVERTER_DEVICES=/dev/ttyUSB0:/dev/ttyUSB1
2026-02-02 23:43:12 +01:00
Pi Developer c73ebc825c feat: Auto-discovery parallelo con timeout e stile originale
Build Docker Image for Raspberry Pi / build-and-push (push) Successful in 7m13s
- Aggiunto timeout 15s al parallel discovery per evitare blocchi
- mqtt-init-parallel.sh in stile originale semplice
- Per ogni inverter scoperto: registra topic discovery (voltronic_inv1_*, inv2_*, ...)
- Discovery topics ogni 10 minuti invece di 5
- Fallback automatico a single-mode se timeout o count=0
- Mantiene la semplicità dello script originale

Il parallel discovery testa QPGS0-9 per trovare inverter configurati in parallelo.
Se timeout o nessun inverter trovato, usa modalità standard.
2026-02-02 23:32:56 +01:00
Pi Developer dc5bd07438 feat: Auto-detection inverter paralleli con script dedicati
Build Docker Image for Raspberry Pi / build-and-push (push) Successful in 7m18s
- Modificato entrypoint.sh per rilevare automaticamente inverter paralleli
- Usa flag -p per parallel discovery (testa QPGS0-9)
- Script mqtt-push-parallel.sh per pubblicare dati di ogni inverter
- Script mqtt-init-parallel.sh per discovery topics (ogni 10 min)
- Naming: voltronic_inv1, voltronic_inv2, ecc.
- Fallback automatico a single-mode se PARALLEL_COUNT=0

Nota: Il parallel discovery richiede che inverter supportino comandi QPGS
2026-02-02 23:24:49 +01:00
Pi Developer 53899b0fac feat: Supporto multi-inverter in mqtt-init.sh con discovery topics
Build Docker Image for Raspberry Pi / build-and-push (push) Has started running
- Aggiornato mqtt-init.sh per supportare array INVERTER_DEVICES
- Registrazione discovery topics per ogni inverter (voltronic, voltronic2, ecc.)
- Aggiunto unique_id e device info per Home Assistant
- Flag retain sui config topics per persistenza
- Naming coerente con mqtt-push.sh (voltronic, voltronic2, voltronic3, ...)
- Echo output per debug registrazione topics
2026-02-02 23:17:50 +01:00
Pi Developer 519b6ef703 feat: Supporto multi-inverter nello stesso container
Build Docker Image for Raspberry Pi / build-and-push (push) Successful in 7m23s
- Implementato array parsing per INVERTER_DEVICES (separatore ':')
- Refactoring mqtt-push.sh con funzione process_inverter()
- Topic MQTT separati per ogni inverter (voltronic, voltronic2, voltronic3, ecc.)
- Aggiornate tutte le 33 metriche con devicename dinamico
- Fix parsing JSON con filtro grep per messaggi [POLL]
- Documentazione ENV variable INVERTER_DEVICES in docker-compose.yml

Esempio configurazione:
INVERTER_DEVICES=/dev/ttyUSB0:/dev/ttyUSB1:/dev/ttyUSB2
2026-01-31 18:19:06 +01:00
Pi Developer 36743a59c8 feat: Ottimizzazione performance e gestione credenziali MQTT
Build Docker Image for Raspberry Pi / build-and-push (push) Successful in 6m49s
- Rimosso credenziali hardcoded da mqtt.json (devono essere fornite solo da ENV)
- Ottimizzato mqtt-push.sh: caricamento config MQTT una sola volta all'avvio
- Ridotto I/O con redirect stderr su /dev/null
- Fix errore sed con device path contenente slash
- Aggiunto controllo esecuzione update_mqtt_config solo se ENV impostate
- Ridotto consumo CPU da 25% a ~0-2%

Nuovo:
- Documentazione multi-inverter completa (MULTI_INVERTER.md)
- Aggiornato README con sezione performance e multi-inverter
- Aggiunto .gitignore per file cache/backup runtime

Fixes:
- Bug sed delimiter con device path /dev/ttyUSB*
- Letture ripetute mqtt.json con jq (30+ per ciclo)
- Credenziali non aggiornate da ENV se mqtt.json esiste
2026-01-31 17:45:53 +01:00
Pi Developer 9c911a90c4 Fix config files mancanti quando volume mount è vuoto
Build Docker Image for Raspberry Pi / build-and-push (push) Successful in 6m52s
- Aggiunto check all'avvio per verificare esistenza inverter.conf e mqtt.json
- Se mancanti, crea file di default automaticamente
- Risolve problema volume mount che sovrascrive file copiati in build
- Config default con valori standard funzionanti
- ENV variables sovrascrivono comunque i default tramite update_mqtt_config()

Ora il container parte anche con directory ./config vuota
2026-01-31 17:21:43 +01:00
Pi Developer c5645c0f2b Aggiunta configurazione tramite variabili d'ambiente e fix Docker Hub secrets
Build Docker Image for Raspberry Pi / build-and-push (push) Failing after 23s
- Aggiunto supporto ENV variables nel Dockerfile:
  * INVERTER_DEVICE, MQTT_SERVER, MQTT_PORT, MQTT_TOPIC
  * MQTT_DEVICENAME, MQTT_USERNAME, MQTT_PASSWORD
  * FORCE_DISCOVERY, SKIP_DISCOVERY
- Implementata funzione update_mqtt_config() in entrypoint.sh
  * Aggiorna automaticamente mqtt.json da ENV variables all'avvio
  * Backup automatico configurazione originale
- Fix workflow Docker build:
  * Login Docker Hub solo se secrets configurati
  * Push solo se secrets disponibili (evita errori CI/CD)
  * Build funziona anche senza secrets (utile per test locali)
- Aggiornato docker-compose.yml con esempio ENV variables
- Creata documentazione completa DOCKER_SETUP.md:
  * Guida configurazione variabili d'ambiente
  * Esempi docker-compose e docker run
  * Guida configurazione secrets Gitea
  * Troubleshooting e health check

Ora è possibile configurare completamente il container senza modificare file
2026-01-31 16:21:42 +01:00
Pi Developer 547537e761 Implementazione supporto multi-inverter paralleli e fix comunicazione MQTT
Build Docker Image for Raspberry Pi / build-and-push (push) Failing after 1m15s
- Aggiunto supporto lettura inverter paralleli tramite comandi QPGS0-QPGS9
- Implementato discovery automatico inverter con filtro duplicati e serial invalidi
- Risolti bug critici comunicazione seriale:
  * Fix buffer ExecuteCmd da 7 a 200 bytes
  * Supporto terminatori CR e LF
  * Modalità blocking con delay 500ms
  * Lettura byte-by-byte per terminatore affidabile
- Implementato script MQTT per pubblicazione dati multi-inverter:
  * mqtt-push-parallel.sh con topic separati per ogni inverter
  * Fix autenticazione MQTT con username/password
  * Aggiunto flag retain (-r) per persistenza dati
- Creato test-loop-parallel.sh per simulazione completa container
- Aggiornata documentazione con compatibilità MKS IV e guida test loop
- Aggiornati profili debug VS Code per bash e parallel discovery
- Configurazione MQTT completa con server reale (192.168.1.37:1883)

Sistema testato e funzionante con 2 inverter Voltronic Axpert MKS IV
2026-01-31 16:15:26 +01:00
Pi Developer 6af9fcad7e feat(v2.0): Auto-discovery, correzione bug critici, e documentazione completa
Build Docker Image for Raspberry Pi / build-and-push (push) Failing after 4m42s
🆕 Funzionalità Auto-Discovery
- Aggiunto metodo AutoDiscoverBufferSizes() per rilevamento automatico QPIGS/QPIRI/QMOD/QPIWS
- Supporto variabili d'ambiente (INVERTER_DEVICE, MQTT_SERVER, etc.)
- Caching persistente buffer sizes in /cache/inverter.conf.cache
- Flag -a/--auto-discover per modalità auto-detection

🐛 Bug Fixes Critici
- **Parsing interi**: Aggiunta attemptAddSettingInt() con stoi() invece di stof()
  - Fix: stof('98') = 98.0f → 97 (int), ora stoi('98') = 98 direttamente
  - Applicato a: qpiri, qpiws, qmod, qpigs
- **Thread sync**: Aggiunto ups_qpiws_changed a main loop e condizione exit poll()
  - Fix: loop principale controllava solo 3 flag su 4, causava hang
  - Fix: thread poll() non usciva in runOnce perché mancava controllo QPIWS
- **Config accuracy**: Corretti buffer sizes (qpiri: 98→103, qpiws: 36→40)
  - Rimosso sources/inverter-cli/inverter.conf che sovrascriveva config globale
  - Validato con test: inverter_poller -1 completa in 6s con JSON completo

📚 Documentazione Completa
- Creato documentation/CODE_ARCHITECTURE.md (38KB)
  - Mappa logica variabili globali
  - Flusso esecuzione main() con diagrammi ASCII
  - Sequence diagram classe cInverter (poll, query, auto-discovery)
  - Thread synchronization diagrams
  - MQTT integration bash scripts flow
  - Mappa concettuale 5-layer system architecture
  - Error handling e performance optimizations
- Organizzati file .md in documentation/ (AUTO_DISCOVERY, IMPLEMENTATION, QUICKSTART, DEBUG)
- Aggiornato README.md con sezione v2.0 e indice documentazione
- Aggiornato .github/copilot-instructions.md con novità v2.0

🔧 Miglioramenti Build & CI/CD
- Gitea Actions per build multi-arch (arm/v6, arm/v7, arm64, amd64, 386)
- Configurazione VS Code completa (tasks, launch, debug GDB)
- Script test-autodiscovery.sh e test-device.sh

 Testing Validato
- inverter_poller -1 completa in 6 secondi
- Output JSON completo con tutte le metriche
- Exit pulito senza timeout (exit code 0)
- Tutte le 4 query QMOD/QPIGS/QPIRI/QPIWS funzionanti
2026-01-25 15:00:48 +01:00
tititg34 51b6a65973 Update mqtt-init.sh
temperature unit
2023-09-07 18:16:25 +02:00
Дилян Палаузов 730770016c inverter-cli/main.cpp: remove tautology
Closes: https://github.com/ned-kelly/docker-voltronic-homeassistant/issues/68
Related-To: https://github.com/manio/skymax-demo/issues/10
2022-03-13 11:57:19 +02:00
RSd 037ce5f37b Make the clientid configurable 2021-06-03 14:47:59 +02:00
RSd108 5ba1072099 Use client identifier 2021-06-03 12:47:37 +02:00
RSd108 a3957d0326 Use client identifier 2021-06-03 12:46:01 +02:00
RSd108 9d646bad60 Use client identifier 2021-06-03 12:44:58 +02:00
Sam e82000d76f Fix IF check space issue for INFLUX_ENABLED 2020-12-03 18:14:42 +10:30
Martin Valov 515d8196f6 Added the enabled true|false flag in mqtt.json 2020-11-22 21:53:40 +01:00
Martin Valov 313c98c119 Added the possibility to write directly to Influx
Since I am not using Influx as a DB of my HomeAssistant setup, I wanted a way to bring the data there. Another issue is that I used another script to gather the data and hence have other naming conventions on my dashboards. Therefore the name of the measurements are now part of the config JSON file. This could be an idea adopted to MQTT as well.
2020-11-08 22:38:50 +01:00
David Nedved b8e9d8ad33 include healthcheck in default actions 2020-04-01 11:42:35 +10:00
David Nedved d5dc992a62 remove duplicate battery voltage arg 2020-04-01 09:07:06 +10:00
Maxwell 6b5c5d600a Load command buffer sizes from configuration
Sets values for qpiws, qmod and qpigs from configuration file if they are available.

See commit: dfbb0ecc06
2020-03-10 10:05:45 +02:00
Maxwell de8bc8f812 Update inverter.cpp allowing the usage of configured parameters
See commit: f7896ecd7e
2020-03-10 10:02:25 +02:00
Maxwell f7896ecd7e Add additional fields to cInverter parameterized constructor
Adds the capability to use non static values for `QPIWS`, `QMOD` and `QPIGS` commands
2020-03-10 09:59:22 +02:00
Raphael Pertl b39eeb52eb fix example config, cpp errors, tested with voltronic 5000 and qpiri 102 2020-02-22 23:04:00 +01:00
Raphael Pertl 35a09bb538 add qpiri as a configurable value 2020-02-22 22:21:11 +01:00
David ebd3bbe2bc include support for MQTT username/password 2019-08-12 15:17:54 +10:00
David b1399bab57 remove retain from mqtt init message 2019-08-12 12:37:40 +10:00
David 0c2c945a96 update readme with more info around charging VLRA batteries 2019-08-09 16:17:37 +10:00
David 84cfa20aee fix missing paths and json formatting after refactor testing 2019-07-27 23:03:08 +10:00
David ccb999b8dc refactor for better support with ch341 and other unreliable rs232 adapters 2019-07-27 22:34:34 +10:00
David 5edafe0ddc update readme & add example HA config files 2019-05-29 11:37:38 +10:00
David 7a6b39bf18 initial docker support on x86 2019-05-28 14:27:57 +10:00