547537e761
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
8.7 KiB
8.7 KiB
Quick Reference - Test Loop & MQTT Configuration
🔧 Configurazione MQTT Server
File di Configurazione
Development:
/home/pi/Progetti/config/mqtt.json
Container (Production):
/etc/inverter/mqtt.json
Parametri Chiave
{
"server": "[HA_MQTT_IP]", // ← Indirizzo IP Home Assistant
"port": "1883", // Porta MQTT standard
"topic": "homeassistant", // Topic base
"devicename": "voltronic", // Nome device (prefix topic)
"username": "", // Username MQTT (se richiesto)
"password": "", // Password MQTT (se richiesto)
"clientid": "voltronic_...", // Client ID univoco
"influx": {
"enabled": "false", // InfluxDB (opzionale)
...
}
}
Modificare la Configurazione
# Editare il file
nano /home/pi/Progetti/config/mqtt.json
# Cambiare l'IP del server MQTT
# Sostituire [HA_MQTT_IP] con l'IP reale di Home Assistant
# Esempio: "server": "192.168.1.100"
🔄 Test Loop - Simulazione Container
Script Principale
/home/pi/Progetti/sources/inverter-mqtt/test-loop-parallel.sh
Esecuzione Manuale
Modalità interattiva (infinito):
bash /home/pi/Progetti/sources/inverter-mqtt/test-loop-parallel.sh
Modalità con limiti:
# 5 iterazioni con intervallo 10 secondi
LOOP_INTERVAL=10 MAX_ITERATIONS=5 bash test-loop-parallel.sh
# 2 iterazioni con intervallo 5 secondi (test rapido)
LOOP_INTERVAL=5 MAX_ITERATIONS=2 bash test-loop-parallel.sh
Variabili d'Ambiente
| Variabile | Descrizione | Default |
|---|---|---|
LOOP_INTERVAL |
Secondi tra iterazioni | 30 |
MAX_ITERATIONS |
Numero massimo iterazioni (0=infinito) | 0 |
Fasi del Test Loop
Phase 1: Initial Discovery (eseguito una volta all'avvio)
-
Buffer Sizes Auto-Discovery (
-a)- Rileva dimensioni corrette per QMOD, QPIGS, QPIRI, QPIWS
- Output:
DISCOVERY_QMOD=5,DISCOVERY_QPIGS=110, etc.
-
Parallel Inverters Discovery (
-p)- Cerca inverter in configurazione parallela (QPGS0-QPGS9)
- Filtra serial validi (no "00000000000000")
- Filtra duplicati
- Output:
PARALLEL_COUNT=2,INVERTER_1_SERIAL=..., etc.
Phase 2: Main Polling Loop (ripetuto ogni N secondi)
-
Test Standard Commands (inverter locale via USB)
- QPIGS - General status
- QPIRI - Configuration
- QMOD - Operating mode
- QPIWS - Warning status
-
Read Parallel Inverters (tutti gli inverter via QPGS)
- Per ogni inverter trovato:
- Legge dati QPGS
- Estrae: Mode, Grid Voltage, Battery Voltage, Load Watts
- Per ogni inverter trovato:
-
MQTT Push (pubblica su Home Assistant)
- Esegue
mqtt-push-parallel.sh - Pubblica topic separati per ogni inverter
- Formato:
homeassistant/sensor/voltronic_inv1_*
- Esegue
📊 Topic MQTT Pubblicati
Per Ogni Inverter
homeassistant/sensor/voltronic_inv1_serial → "92932111105114"
homeassistant/sensor/voltronic_inv1_mode → "B" (Battery mode)
homeassistant/sensor/voltronic_inv1_AC_grid_voltage → "229.8"
homeassistant/sensor/voltronic_inv1_AC_grid_frequency → "50.0"
homeassistant/sensor/voltronic_inv1_AC_out_voltage → "229.5"
homeassistant/sensor/voltronic_inv1_AC_out_frequency → "49.9"
homeassistant/sensor/voltronic_inv1_Load_va → "481"
homeassistant/sensor/voltronic_inv1_Load_watt → "465"
homeassistant/sensor/voltronic_inv1_Load_pct → "8"
homeassistant/sensor/voltronic_inv1_Battery_voltage → "53.9"
homeassistant/sensor/voltronic_inv1_Battery_charge_current → "4"
homeassistant/sensor/voltronic_inv1_Battery_capacity → "100"
homeassistant/sensor/voltronic_inv1_PV_in_voltage → "246.8"
homeassistant/sensor/voltronic_inv1_PV_in_current → "4"
Topic Sistema
homeassistant/sensor/voltronic_system_parallel_count → "2"
🐛 Debug Profiles VS Code
1. Parallel Discovery - Container Mode
Profile: (gdb) Parallel Discovery - Container Mode
- Esegue:
inverter_poller -p - Simula ambiente container (cwd="/")
- ENV:
INVERTER_DEVICE=/dev/ttyUSB0
2. Test MQTT Parallel - Container Simulation
Profile: (bash) Test MQTT Parallel - Container Simulation
- Esegue:
mqtt-push-parallel.sh - Debug bash script MQTT
3. Test Loop - Full Simulation
Profile: (bash) Test Loop - Full Simulation
- Esegue:
test-loop-parallel.sh - 3 iterazioni con intervallo 10s
- Full simulation discovery + polling + MQTT
📝 Comandi Utili
Discovery Manuale
# Buffer sizes discovery
sudo /home/pi/Progetti/sources/inverter-cli/bin/inverter_poller -a
# Parallel inverters discovery
sudo /home/pi/Progetti/sources/inverter-cli/bin/inverter_poller -p
# Test comando specifico
sudo /home/pi/Progetti/sources/inverter-cli/bin/inverter_poller -r QPGS0
MQTT Push Manuale
# Single run
bash /home/pi/Progetti/sources/inverter-mqtt/mqtt-push-parallel.sh
# Con debug output
bash /home/pi/Progetti/sources/inverter-mqtt/mqtt-push-parallel.sh 2>&1 | less
Monitoraggio MQTT (da altro terminal)
# Subscribe a tutti i topic
mosquitto_sub -h [HA_MQTT_IP] -t "homeassistant/#" -v
# Solo sensori voltronic
mosquitto_sub -h [HA_MQTT_IP] -t "homeassistant/sensor/voltronic_#" -v
🔍 Output Esempio Test Loop
╔════════════════════════════════════════════════════════════════╗
║ VOLTRONIC PARALLEL INVERTER - TEST LOOP ║
╚════════════════════════════════════════════════════════════════╝
Mode: Development
Binary: /home/pi/Progetti/sources/inverter-cli/bin/inverter_poller
MQTT Config: /home/pi/Progetti/config/mqtt.json
Loop Interval: 30s
Max Iterations: ∞ (infinite)
MQTT Server: 192.168.1.100
╔════════════════════════════════════════════════════════════════╗
║ PHASE 1: INITIAL DISCOVERY ║
╚════════════════════════════════════════════════════════════════╝
[1.1] Buffer Sizes Auto-Discovery
✓ Buffer sizes discovered successfully
• QMOD: 5 bytes
• QPIGS: 110 bytes
• QPIRI: 103 bytes
• QPIWS: 40 bytes
[1.2] Parallel Inverters Discovery
✓ Found 2 parallel inverter(s)
• Inverter #1: Serial 92932111105114 (QPGS0)
• Inverter #2: Serial 96332205100144 (QPGS2)
╔════════════════════════════════════════════════════════════════╗
║ PHASE 2: MAIN POLLING LOOP ║
╚════════════════════════════════════════════════════════════════╝
═══════════════════════════════════════════════════════════════
Iteration #1 - 2026-01-31 15:25:35
═══════════════════════════════════════════════════════════════
[2.1] Testing standard commands (local inverter)
✓ QPIGS: OK (106 chars)
✓ QPIRI: OK (99 chars)
✓ QMOD: OK (1 chars)
✓ QPIWS: OK (36 chars)
[2.2] Reading parallel inverters data
✓ Inverter #1 (92932111105114): Mode=B, Grid=229.8V, Battery=53.6V, Load=0488W
✓ Inverter #2 (96332205100144): Mode=B, Grid=232.4V, Battery=53.6V, Load=0300W
[2.3] MQTT Push
✓ MQTT push completed
Waiting 30s until next iteration...
🚀 Setup Rapido per Test
-
Configura MQTT server:
nano /home/pi/Progetti/config/mqtt.json # Cambia "server": "[HA_MQTT_IP]" con IP reale -
Esegui test rapido (2 iterazioni):
cd /home/pi/Progetti LOOP_INTERVAL=5 MAX_ITERATIONS=2 bash sources/inverter-mqtt/test-loop-parallel.sh -
Verifica MQTT (in altro terminal):
mosquitto_sub -h [HA_MQTT_IP] -t "homeassistant/sensor/voltronic_#" -v -
Per produzione (loop continuo):
bash sources/inverter-mqtt/test-loop-parallel.sh