Commit Graph

78 Commits

Author SHA1 Message Date
Pi Developer 99c4d40427 fix: Configurazione workflow per registry Gitea interno
Build Docker Image for Raspberry Pi / build-and-push (push) Failing after 21s
- Modificato target da Docker Hub a gitea.home-nas-ds.org
- Aggiunto parametro registry al login
- Semplificata logica push (sempre attivo tranne per PR)
- Image name: gitea.home-nas-ds.org/alessio/ha-voltronic-mqtt
2026-01-31 18:31:17 +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 a5b3ea22b7 Rimosse le credenziali MQTT
Build Docker Image for Raspberry Pi / build-and-push (push) Successful in 7m52s
2026-01-31 17:05:44 +01:00
Pi Developer 0c3e43ed08 Aggiornamento docker-compose.yml per configurazione attuale
Build Docker Image for Raspberry Pi / build-and-push (push) Has been cancelled
- Cambiata immagine: gitea.home-nas-ds.org/alessio/docker-voltronic-homeassistant:latest
- Aggiunta password MQTT corretta (non più placeholder)
- Aggiunto volume voltronic-cache per persistenza discovery
- Commentato watchtower (opzionale)
- Corretti commenti per chiarire uso ENV variables:
  * ENV sovrascrivono mqtt.json all'avvio automaticamente
  * Config volume mantiene calibration e buffer sizes
  * Cache volume evita re-discovery ad ogni restart
- Dockerfile build option usa multiarch invece di dev
2026-01-31 17:04:17 +01:00
Pi Developer c4bdd6767d Fix errore Image digest step - escape tag output
Build Docker Image for Raspberry Pi / build-and-push (push) Successful in 7m14s
- Aggiunto quote all'output dei tag per evitare esecuzione come comando
- Risolve errore 'No such file or directory' quando tag contengono '/'
- Output ora corretto: echo "Tags:" && echo "${{ tags }}"
- Previene interpretazione shell dei tag come path/comandi
2026-01-31 16:52:17 +01:00
Pi Developer d96eba8f6c Rimossa cache GHA incompatibile con Gitea Actions
Build Docker Image for Raspberry Pi / build-and-push (push) Failing after 7m20s
- Rimosse opzioni cache-from e cache-to type=gha
- GitHub Actions Cache non supportata da Gitea Actions
- Risolve errore 'dial tcp 172.16.8.2:36207: i/o timeout'
- Build ora procede senza cache (più lento ma funzionante)
- Possibile ottimizzazione futura: cache locale o registry
2026-01-31 16:42:49 +01:00
Pi Developer 75d91ddb07 Aggiornamento base image da Debian Bullseye a Bookworm
Build Docker Image for Raspberry Pi / build-and-push (push) Failing after 8m45s
- Cambiato FROM debian:bullseye -> debian:bookworm
- Risolve errore 'no match for platform in manifest' per arm/v6
- Debian Bookworm (12) è la versione stable corrente
- Supporto multi-arch completo per linux/arm/v6,v7,arm64
- Bullseye è ora oldstable con supporto multi-arch limitato
2026-01-31 16:30:59 +01:00
Pi Developer 6b574f6775 Fix errore Docker build quando secrets non configurati
Build Docker Image for Raspberry Pi / build-and-push (push) Failing after 26s
- Aggiunto step 'Prepare image name' per gestire nome immagine dinamico
- Se secrets configurati: usa username/ha-voltronic-mqtt
- Se secrets mancanti: usa local/ha-voltronic-mqtt (build locale)
- Corretto flag SHOULD_PUSH basato su presenza secrets
- Risolto errore 'invalid tag' quando DOCKER_USERNAME è vuoto

Ora il workflow esegue build anche senza secrets configurati
2026-01-31 16:23:25 +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
Alessio Dal Santo 8863c77f6f Fix: Corretto step Image digest per gestire output multilinea
Build Docker Image for Raspberry Pi / build-and-push (push) Successful in 6m20s
- Aggiunto id 'docker_build' allo step di build
- Quotato output tags per evitare errore 'command not found'
- Aggiunto output del digest dell'immagine
- Migliorato formato output con labels descrittivi
2026-01-27 17:38:15 +01:00
Alessio Dal Santo 403f5f3ef0 Fix: Configurazione registry HTTP locale per evitare Cloudflare
Build Docker Image for Raspberry Pi / build-and-push (push) Failing after 6m43s
- Aggiunto env REGISTRY: 192.168.1.37:30008 per bypassare Cloudflare
- Configurato buildx per supportare HTTP insecure sul registry locale
- Aggiornato docker meta per usare registry IP diretto
- Modificato login per autenticarsi su 192.168.1.37:30008
- Risolto errore 413 Payload Too Large causato da Cloudflare
2026-01-27 17:30:15 +01:00
Alessio Dal Santo afa9e2835a Fix: Configurazione workflow Gitea per registry insecure
Build Docker Image for Raspberry Pi / build-and-push (push) Failing after 5m59s
- Aggiunta configurazione buildx per registry con http/insecure
- Sostituito login-action con autenticazione manuale tramite config.json
- Aggiornate versioni actions (buildx v3, build-push v6)
- Aggiunto provenance: false e outputs con registry.insecure=true
2026-01-27 17:21:20 +01:00
Alessio Dal Santo 2fa04add3a Fix: Rimosso comando mv ridondante in Dockerfile.multiarch
Build Docker Image for Raspberry Pi / build-and-push (push) Failing after 6m53s
Il binario inverter_poller viene già compilato direttamente in bin/ da cmake/make, il comando 'mv inverter_poller bin/' causava errore perché il file non esisteva nella directory corrente.
2026-01-27 17:11:41 +01:00
Pi Developer 9d21e264bb Rimuovi supporto linux/arm/v6 dal workflow
Build Docker Image for Raspberry Pi / build-and-push (push) Failing after 6m4s
- Debian Bullseye non supporta arm/v6 (solo Pi Zero W v1 e Pi 1)
- Mantenuti arm/v7 e arm64 (compatibili con Pi 3, 4, 5)
- Pi 5 a 64-bit usa linux/arm64
2026-01-25 18:22:00 +01:00
Pi Developer 3578f2dcbb Rimuovi flag --platform ridondante dal FROM
Build Docker Image for Raspberry Pi / build-and-push (push) Failing after 1m4s
- Buildx gestisce automaticamente le piattaforme target
- Risolve errore: no match for platform in manifest
2026-01-25 17:28:26 +01:00
Pi Developer 3ed42dc8da Aggiorna base image da Debian Stretch a Bullseye
Build Docker Image for Raspberry Pi / build-and-push (push) Failing after 41s
- Debian Stretch è deprecato e i repository non sono più disponibili
- Bullseye è la versione stable corrente e supporta le stesse architetture
2026-01-25 17:26:17 +01:00
Pi Developer 255a881cbb Rinomina secret da GITEA_TOKEN a REGISTRY_TOKEN
Build Docker Image for Raspberry Pi / build-and-push (push) Failing after 2m45s
- Aggiornati workflow docker-build.yml e docker-cleanup.yml
- Aggiornata guida SETUP_GITEA_TOKEN.md
2026-01-25 16:06:00 +01:00
Pi Developer 9d6e3b31f0 Usa GITEA_TOKEN secret per autenticazione Container Registry
Build Docker Image for Raspberry Pi / build-and-push (push) Failing after 34s
- Modificato docker-build.yml e docker-cleanup.yml
- Il token automatico github.token non ha permessi sufficienti
- Aggiunta guida SETUP_GITEA_TOKEN.md per configurazione
2026-01-25 15:33:17 +01:00
Pi Developer bfc7c21559 Aggiungi permessi packages per accesso al Container Registry
Build Docker Image for Raspberry Pi / build-and-push (push) Failing after 36s
- Specificato permissions: packages: write nei workflow
- Necessario per autenticazione al registry Gitea self-hosted
2026-01-25 15:16:52 +01:00
Pi Developer 6d4812efbc Correggi workflow Gitea Actions per usare registry self-hosted
Build Docker Image for Raspberry Pi / build-and-push (push) Failing after 39s
- Modificato docker-build.yml per usare gitea.home-nas-ds.org invece di Docker Hub
- Modificato docker-cleanup.yml per autenticazione con registry Gitea
- Usato github.token automatico invece di secrets esterni
- Aggiornata documentazione per riflettere i cambiamenti
2026-01-25 15:15:17 +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
David Nedved ac2642639f Merge pull request #108 from tititg34/patch-2
Update mqtt-init.sh
2025-06-19 08:58:42 +10:00
tititg34 51b6a65973 Update mqtt-init.sh
temperature unit
2023-09-07 18:16:25 +02:00
David Nedved a96592ad21 Merge pull request #70 from dilyanpalauzov/main_cpp_tautology
inverter-cli/main.cpp: remove tautology
2022-08-25 14:09:08 +10: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
ned-kelly 0ddffda79d Merge pull request #45 from RSd108/master
Include a clientid in mqtt commands
2021-10-06 22:36:21 +10: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
ned-kelly 24460639ac Merge pull request #35 from therokh/therokh-fix-influx-enabled-check
Fix IF check space issue for INFLUX_ENABLED
2021-01-18 09:18:13 +10:00
Sam e82000d76f Fix IF check space issue for INFLUX_ENABLED 2020-12-03 18:14:42 +10:30
ned-kelly d8349b8574 Update mqtt.json 2020-11-23 08:48:14 +10:00
ned-kelly f19040ab50 Merge pull request #32 from marval/write-to-influx
Added the possibility to write directly to Influx
2020-11-23 08:47:21 +10:00
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 a7f161b9d6 update readme 2020-09-19 12:42:49 +10:00
David Nedved 774606e5e6 include grafana dashboard sample 2020-05-04 10:05:53 +10:00
David Nedved 9b49015fd7 docker compose to default to base image 2020-04-07 13:54:33 +10:00
David Nedved 6014f4f2b1 Merge branch 'actions' 2020-04-01 12:06:08 +10:00
David Nedved e517950a87 update readme 2020-04-01 12:06:00 +10:00
ned-kelly faca12b5cd Merge pull request #18 from ned-kelly/actions
Merge automated CI/CD Workflow for multi-arch builds into Prod
2020-04-01 12:02:22 +10:00
David Nedved b8e9d8ad33 include healthcheck in default actions 2020-04-01 11:42:35 +10:00
David Nedved a30d4019fd add docker image name as environment 2020-04-01 10:47:05 +10:00
David Nedved 0ea9fa29b6 test with lest arch options 2020-04-01 10:43:49 +10:00
David Nedved 2aa7edd04b remove line break slash from tags in dockerfile 2020-04-01 09:40:40 +10:00
David Nedved 1d87c1cc6d restructure dockerfile 2020-04-01 09:39:29 +10:00