feat: Ottimizzazione performance e gestione credenziali MQTT
Build Docker Image for Raspberry Pi / build-and-push (push) Successful in 6m49s
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:
@@ -1,42 +1,51 @@
|
||||
#!/bin/bash
|
||||
INFLUX_ENABLED=`cat /etc/inverter/mqtt.json | jq '.influx.enabled' -r`
|
||||
|
||||
# Carica configurazione MQTT una sola volta all'inizio (ottimizzazione performance)
|
||||
MQTT_CONFIG_FILE="/etc/inverter/mqtt.json"
|
||||
MQTT_SERVER=$(jq -r '.server' "$MQTT_CONFIG_FILE")
|
||||
MQTT_PORT=$(jq -r '.port' "$MQTT_CONFIG_FILE")
|
||||
MQTT_TOPIC=$(jq -r '.topic' "$MQTT_CONFIG_FILE")
|
||||
MQTT_DEVICENAME=$(jq -r '.devicename' "$MQTT_CONFIG_FILE")
|
||||
MQTT_USERNAME=$(jq -r '.username' "$MQTT_CONFIG_FILE")
|
||||
MQTT_PASSWORD=$(jq -r '.password' "$MQTT_CONFIG_FILE")
|
||||
MQTT_CLIENTID=$(jq -r '.clientid' "$MQTT_CONFIG_FILE")
|
||||
INFLUX_ENABLED=$(jq -r '.influx.enabled' "$MQTT_CONFIG_FILE")
|
||||
|
||||
pushMQTTData () {
|
||||
MQTT_SERVER=`cat /etc/inverter/mqtt.json | jq '.server' -r`
|
||||
MQTT_PORT=`cat /etc/inverter/mqtt.json | jq '.port' -r`
|
||||
MQTT_TOPIC=`cat /etc/inverter/mqtt.json | jq '.topic' -r`
|
||||
MQTT_DEVICENAME=`cat /etc/inverter/mqtt.json | jq '.devicename' -r`
|
||||
MQTT_USERNAME=`cat /etc/inverter/mqtt.json | jq '.username' -r`
|
||||
MQTT_PASSWORD=`cat /etc/inverter/mqtt.json | jq '.password' -r`
|
||||
MQTT_CLIENTID=`cat /etc/inverter/mqtt.json | jq '.clientid' -r`
|
||||
|
||||
# Usa variabili già caricate invece di rileggere il file ogni volta
|
||||
mosquitto_pub \
|
||||
-h $MQTT_SERVER \
|
||||
-p $MQTT_PORT \
|
||||
-h "$MQTT_SERVER" \
|
||||
-p "$MQTT_PORT" \
|
||||
-u "$MQTT_USERNAME" \
|
||||
-P "$MQTT_PASSWORD" \
|
||||
-i $MQTT_CLIENTID \
|
||||
-t "$MQTT_TOPIC/sensor/"$MQTT_DEVICENAME"_$1" \
|
||||
-m "$2"
|
||||
-i "$MQTT_CLIENTID" \
|
||||
-t "$MQTT_TOPIC/sensor/${MQTT_DEVICENAME}_$1" \
|
||||
-m "$2" \
|
||||
2>/dev/null
|
||||
|
||||
if [[ $INFLUX_ENABLED == "true" ]] ; then
|
||||
pushInfluxData $1 $2
|
||||
pushInfluxData "$1" "$2"
|
||||
fi
|
||||
}
|
||||
|
||||
pushInfluxData () {
|
||||
INFLUX_HOST=`cat /etc/inverter/mqtt.json | jq '.influx.host' -r`
|
||||
INFLUX_USERNAME=`cat /etc/inverter/mqtt.json | jq '.influx.username' -r`
|
||||
INFLUX_PASSWORD=`cat /etc/inverter/mqtt.json | jq '.influx.password' -r`
|
||||
INFLUX_DEVICE=`cat /etc/inverter/mqtt.json | jq '.influx.device' -r`
|
||||
INFLUX_PREFIX=`cat /etc/inverter/mqtt.json | jq '.influx.prefix' -r`
|
||||
INFLUX_DATABASE=`cat /etc/inverter/mqtt.json | jq '.influx.database' -r`
|
||||
INFLUX_MEASUREMENT_NAME=`cat /etc/inverter/mqtt.json | jq '.influx.namingMap.'$1'' -r`
|
||||
# Carica configurazione InfluxDB solo se necessario (lazy loading)
|
||||
local INFLUX_HOST=$(jq -r '.influx.host' "$MQTT_CONFIG_FILE")
|
||||
local INFLUX_USERNAME=$(jq -r '.influx.username' "$MQTT_CONFIG_FILE")
|
||||
local INFLUX_PASSWORD=$(jq -r '.influx.password' "$MQTT_CONFIG_FILE")
|
||||
local INFLUX_DEVICE=$(jq -r '.influx.device' "$MQTT_CONFIG_FILE")
|
||||
local INFLUX_PREFIX=$(jq -r '.influx.prefix' "$MQTT_CONFIG_FILE")
|
||||
local INFLUX_DATABASE=$(jq -r '.influx.database' "$MQTT_CONFIG_FILE")
|
||||
local INFLUX_MEASUREMENT_NAME=$(jq -r ".influx.namingMap.$1" "$MQTT_CONFIG_FILE")
|
||||
|
||||
curl -i -XPOST "$INFLUX_HOST/write?db=$INFLUX_DATABASE&precision=s" -u "$INFLUX_USERNAME:$INFLUX_PASSWORD" --data-binary "$INFLUX_PREFIX,device=$INFLUX_DEVICE $INFLUX_MEASUREMENT_NAME=$2"
|
||||
curl -s -XPOST "$INFLUX_HOST/write?db=$INFLUX_DATABASE&precision=s" \
|
||||
-u "$INFLUX_USERNAME:$INFLUX_PASSWORD" \
|
||||
--data-binary "$INFLUX_PREFIX,device=$INFLUX_DEVICE $INFLUX_MEASUREMENT_NAME=$2" \
|
||||
> /dev/null 2>&1
|
||||
}
|
||||
|
||||
INVERTER_DATA=`timeout 10 /opt/inverter-cli/bin/inverter_poller -1`
|
||||
# Esegui polling inverter con timeout per evitare hang
|
||||
INVERTER_DATA=$(timeout 10 /opt/inverter-cli/bin/inverter_poller -1 2>/dev/null)
|
||||
|
||||
#####################################################################################
|
||||
|
||||
|
||||
Reference in New Issue
Block a user