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
This commit is contained in:
Pi Developer
2026-01-31 17:45:53 +01:00
parent 9c911a90c4
commit 36743a59c8
8 changed files with 520 additions and 83 deletions
+16 -2
View File
@@ -68,10 +68,17 @@ echo ""
# Function to update MQTT configuration
update_mqtt_config() {
local mqtt_conf="/etc/inverter/mqtt.json"
# Solo aggiorna se le ENV variables sono impostate
if [ -z "$MQTT_USERNAME" ] && [ -z "$MQTT_PASSWORD" ]; then
echo " MQTT credentials not provided via ENV, using values from mqtt.json"
return 0
fi
echo "Updating MQTT configuration from environment variables..."
# Backup original
cp $mqtt_conf ${mqtt_conf}.backup
cp $mqtt_conf ${mqtt_conf}.backup 2>/dev/null || true
# Update MQTT settings using jq
jq --arg server "$MQTT_SERVER" \
@@ -87,6 +94,13 @@ update_mqtt_config() {
echo " Server: $MQTT_SERVER:$MQTT_PORT"
echo " Topic: $MQTT_TOPIC/sensor/$MQTT_DEVICENAME"
[ ! -z "$MQTT_USERNAME" ] && echo " Auth: Enabled (username: $MQTT_USERNAME)"
# Verifica che le credenziali siano state scritte
local check_user=$(jq -r '.username' $mqtt_conf)
local check_pass=$(jq -r '.password' $mqtt_conf)
if [ -z "$check_user" ] || [ -z "$check_pass" ]; then
echo "⚠ WARNING: MQTT credentials were not properly written to config file!"
fi
echo ""
}
@@ -202,7 +216,7 @@ else
if [[ $line =~ ^(device|qmod|qpigs|qpiri|qpiws)= ]]; then
key=$(echo "$line" | cut -d= -f1)
value=$(echo "$line" | cut -d= -f2)
sed -i "s/^$key=.*/$key=$value/g" $CONF_FILE
sed -i "s|^$key=.*|$key=$value|g" $CONF_FILE
fi
done < "$DISCOVERY_FLAG"