6af9fcad7e
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
148 lines
4.1 KiB
Bash
Executable File
148 lines
4.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Test script per verificare auto-discovery in locale
|
|
# Simula il comportamento del container
|
|
|
|
echo "=== Test Auto-Discovery Locale ==="
|
|
echo ""
|
|
|
|
# Configura le variabili come farebbe il container
|
|
export INVERTER_DEVICE="${INVERTER_DEVICE:-/dev/ttyUSB1}"
|
|
export FORCE_DISCOVERY="${FORCE_DISCOVERY:-false}"
|
|
export SKIP_DISCOVERY="${SKIP_DISCOVERY:-false}"
|
|
|
|
CONF_FILE="/etc/inverter/inverter.conf"
|
|
DISCOVERY_FLAG="/etc/inverter/.discovery_done"
|
|
INVERTER_BIN="./sources/inverter-cli/bin/inverter_poller"
|
|
|
|
echo "Configurazione:"
|
|
echo " Device: $INVERTER_DEVICE"
|
|
echo " Binary: $INVERTER_BIN"
|
|
echo " Force Discovery: $FORCE_DISCOVERY"
|
|
echo " Skip Discovery: $SKIP_DISCOVERY"
|
|
echo ""
|
|
|
|
# Verifica che il binario esista
|
|
if [ ! -f "$INVERTER_BIN" ]; then
|
|
echo "✗ Errore: $INVERTER_BIN non trovato!"
|
|
echo " Compila prima con: cd sources/inverter-cli && make"
|
|
exit 1
|
|
fi
|
|
|
|
# Verifica che il device esista
|
|
if [ ! -e "$INVERTER_DEVICE" ]; then
|
|
echo "✗ Errore: Device $INVERTER_DEVICE non trovato!"
|
|
echo " Devices disponibili:"
|
|
ls -la /dev/tty* 2>/dev/null | grep -E "USB|ttyS"
|
|
exit 1
|
|
fi
|
|
|
|
# Crea directory temporanea per il test
|
|
TEST_DIR="/tmp/inverter-test-$$"
|
|
mkdir -p "$TEST_DIR"
|
|
echo "Directory test: $TEST_DIR"
|
|
|
|
# Copia config originale
|
|
if [ -f "./config/inverter.conf" ]; then
|
|
cp ./config/inverter.conf "$TEST_DIR/inverter.conf"
|
|
CONF_FILE="$TEST_DIR/inverter.conf"
|
|
DISCOVERY_FLAG="$TEST_DIR/.discovery_done"
|
|
echo "✓ Config copiata in $CONF_FILE"
|
|
else
|
|
echo "✗ Errore: config/inverter.conf non trovato!"
|
|
exit 1
|
|
fi
|
|
|
|
# Aggiorna device nella config temporanea
|
|
sed -i "s|^device=.*|device=$INVERTER_DEVICE|g" "$CONF_FILE"
|
|
|
|
echo ""
|
|
echo "=== Esecuzione Auto-Discovery ==="
|
|
echo "Questo prenderà circa 10-15 secondi..."
|
|
echo ""
|
|
|
|
# Esegui discovery
|
|
DISCOVERY_OUTPUT=$("$INVERTER_BIN" -d -a 2>&1)
|
|
|
|
echo "$DISCOVERY_OUTPUT"
|
|
echo ""
|
|
|
|
# Parse output
|
|
QMOD=$(echo "$DISCOVERY_OUTPUT" | grep "DISCOVERY_QMOD=" | cut -d= -f2)
|
|
QPIGS=$(echo "$DISCOVERY_OUTPUT" | grep "DISCOVERY_QPIGS=" | cut -d= -f2)
|
|
QPIRI=$(echo "$DISCOVERY_OUTPUT" | grep "DISCOVERY_QPIRI=" | cut -d= -f2)
|
|
QPIWS=$(echo "$DISCOVERY_OUTPUT" | grep "DISCOVERY_QPIWS=" | cut -d= -f2)
|
|
SUCCESS=$(echo "$DISCOVERY_OUTPUT" | grep "DISCOVERY_SUCCESS=" | cut -d= -f2)
|
|
|
|
echo "=== Risultati Discovery ==="
|
|
if [ "$SUCCESS" = "true" ]; then
|
|
echo "✓ SUCCESS!"
|
|
echo ""
|
|
echo "Valori scoperti:"
|
|
echo " QMOD = $QMOD"
|
|
echo " QPIGS = $QPIGS"
|
|
echo " QPIRI = $QPIRI"
|
|
echo " QPIWS = $QPIWS"
|
|
echo ""
|
|
|
|
# Salva risultati
|
|
echo "device=$INVERTER_DEVICE" > "$DISCOVERY_FLAG"
|
|
echo "qmod=$QMOD" >> "$DISCOVERY_FLAG"
|
|
echo "qpigs=$QPIGS" >> "$DISCOVERY_FLAG"
|
|
echo "qpiri=$QPIRI" >> "$DISCOVERY_FLAG"
|
|
echo "qpiws=$QPIWS" >> "$DISCOVERY_FLAG"
|
|
echo "timestamp=$(date -Iseconds)" >> "$DISCOVERY_FLAG"
|
|
|
|
echo "Salvati in: $DISCOVERY_FLAG"
|
|
echo ""
|
|
cat "$DISCOVERY_FLAG"
|
|
|
|
# Aggiorna config
|
|
sed -i "s/^qmod=.*/qmod=$QMOD/g" "$CONF_FILE"
|
|
sed -i "s/^qpigs=.*/qpigs=$QPIGS/g" "$CONF_FILE"
|
|
sed -i "s/^qpiri=.*/qpiri=$QPIRI/g" "$CONF_FILE"
|
|
sed -i "s/^qpiws=.*/qpiws=$QPIWS/g" "$CONF_FILE"
|
|
|
|
echo ""
|
|
echo "Config aggiornata:"
|
|
grep -E "^(device|qmod|qpigs|qpiri|qpiws)=" "$CONF_FILE"
|
|
|
|
echo ""
|
|
echo "✓ Test completato con successo!"
|
|
echo ""
|
|
echo "Per applicare questi valori al tuo config/inverter.conf:"
|
|
echo " cp $CONF_FILE ./config/inverter.conf"
|
|
|
|
else
|
|
echo "✗ FAILED!"
|
|
echo ""
|
|
echo "Controlla:"
|
|
echo " 1. Inverter acceso"
|
|
echo " 2. Cavo collegato correttamente"
|
|
echo " 3. Device corretto: $INVERTER_DEVICE"
|
|
echo " 4. Permessi device: ls -la $INVERTER_DEVICE"
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo "=== Test Lettura Dati ==="
|
|
echo "Testo la lettura con i nuovi parametri..."
|
|
echo ""
|
|
|
|
# Test con -1 (run-once)
|
|
TEST_OUTPUT=$("$INVERTER_BIN" -1 2>&1)
|
|
echo "$TEST_OUTPUT"
|
|
|
|
if echo "$TEST_OUTPUT" | grep -q '"mode":'; then
|
|
echo ""
|
|
echo "✓ Lettura dati OK! Output JSON valido."
|
|
else
|
|
echo ""
|
|
echo "⚠ Attenzione: Output non sembra JSON valido"
|
|
fi
|
|
|
|
echo ""
|
|
echo "=== Cleanup ==="
|
|
echo "Directory test: $TEST_DIR"
|
|
echo "Per rimuoverla: rm -rf $TEST_DIR"
|