36743a59c8
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
154 lines
7.0 KiB
Bash
Executable File
154 lines
7.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# 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 () {
|
|
# Usa variabili già caricate invece di rileggere il file ogni volta
|
|
mosquitto_pub \
|
|
-h "$MQTT_SERVER" \
|
|
-p "$MQTT_PORT" \
|
|
-u "$MQTT_USERNAME" \
|
|
-P "$MQTT_PASSWORD" \
|
|
-i "$MQTT_CLIENTID" \
|
|
-t "$MQTT_TOPIC/sensor/${MQTT_DEVICENAME}_$1" \
|
|
-m "$2" \
|
|
2>/dev/null
|
|
|
|
if [[ $INFLUX_ENABLED == "true" ]] ; then
|
|
pushInfluxData "$1" "$2"
|
|
fi
|
|
}
|
|
|
|
pushInfluxData () {
|
|
# 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 -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
|
|
}
|
|
|
|
# Esegui polling inverter con timeout per evitare hang
|
|
INVERTER_DATA=$(timeout 10 /opt/inverter-cli/bin/inverter_poller -1 2>/dev/null)
|
|
|
|
#####################################################################################
|
|
|
|
Inverter_mode=`echo $INVERTER_DATA | jq '.Inverter_mode' -r`
|
|
|
|
# 1 = Power_On, 2 = Standby, 3 = Line, 4 = Battery, 5 = Fault, 6 = Power_Saving, 7 = Unknown
|
|
|
|
[ ! -z "$Inverter_mode" ] && pushMQTTData "Inverter_mode" "$Inverter_mode"
|
|
|
|
AC_grid_voltage=`echo $INVERTER_DATA | jq '.AC_grid_voltage' -r`
|
|
[ ! -z "$AC_grid_voltage" ] && pushMQTTData "AC_grid_voltage" "$AC_grid_voltage"
|
|
|
|
AC_grid_frequency=`echo $INVERTER_DATA | jq '.AC_grid_frequency' -r`
|
|
[ ! -z "$AC_grid_frequency" ] && pushMQTTData "AC_grid_frequency" "$AC_grid_frequency"
|
|
|
|
AC_out_voltage=`echo $INVERTER_DATA | jq '.AC_out_voltage' -r`
|
|
[ ! -z "$AC_out_voltage" ] && pushMQTTData "AC_out_voltage" "$AC_out_voltage"
|
|
|
|
AC_out_frequency=`echo $INVERTER_DATA | jq '.AC_out_frequency' -r`
|
|
[ ! -z "$AC_out_frequency" ] && pushMQTTData "AC_out_frequency" "$AC_out_frequency"
|
|
|
|
PV_in_voltage=`echo $INVERTER_DATA | jq '.PV_in_voltage' -r`
|
|
[ ! -z "$PV_in_voltage" ] && pushMQTTData "PV_in_voltage" "$PV_in_voltage"
|
|
|
|
PV_in_current=`echo $INVERTER_DATA | jq '.PV_in_current' -r`
|
|
[ ! -z "$PV_in_current" ] && pushMQTTData "PV_in_current" "$PV_in_current"
|
|
|
|
PV_in_watts=`echo $INVERTER_DATA | jq '.PV_in_watts' -r`
|
|
[ ! -z "$PV_in_watts" ] && pushMQTTData "PV_in_watts" "$PV_in_watts"
|
|
|
|
PV_in_watthour=`echo $INVERTER_DATA | jq '.PV_in_watthour' -r`
|
|
[ ! -z "$PV_in_watthour" ] && pushMQTTData "PV_in_watthour" "$PV_in_watthour"
|
|
|
|
SCC_voltage=`echo $INVERTER_DATA | jq '.SCC_voltage' -r`
|
|
[ ! -z "$SCC_voltage" ] && pushMQTTData "SCC_voltage" "$SCC_voltage"
|
|
|
|
Load_pct=`echo $INVERTER_DATA | jq '.Load_pct' -r`
|
|
[ ! -z "$Load_pct" ] && pushMQTTData "Load_pct" "$Load_pct"
|
|
|
|
Load_watt=`echo $INVERTER_DATA | jq '.Load_watt' -r`
|
|
[ ! -z "$Load_watt" ] && pushMQTTData "Load_watt" "$Load_watt"
|
|
|
|
Load_watthour=`echo $INVERTER_DATA | jq '.Load_watthour' -r`
|
|
[ ! -z "$Load_watthour" ] && pushMQTTData "Load_watthour" "$Load_watthour"
|
|
|
|
Load_va=`echo $INVERTER_DATA | jq '.Load_va' -r`
|
|
[ ! -z "$Load_va" ] && pushMQTTData "Load_va" "$Load_va"
|
|
|
|
Bus_voltage=`echo $INVERTER_DATA | jq '.Bus_voltage' -r`
|
|
[ ! -z "$Bus_voltage" ] && pushMQTTData "Bus_voltage" "$Bus_voltage"
|
|
|
|
Heatsink_temperature=`echo $INVERTER_DATA | jq '.Heatsink_temperature' -r`
|
|
[ ! -z "$Heatsink_temperature" ] && pushMQTTData "Heatsink_temperature" "$Heatsink_temperature"
|
|
|
|
Battery_capacity=`echo $INVERTER_DATA | jq '.Battery_capacity' -r`
|
|
[ ! -z "$Battery_capacity" ] && pushMQTTData "Battery_capacity" "$Battery_capacity"
|
|
|
|
Battery_voltage=`echo $INVERTER_DATA | jq '.Battery_voltage' -r`
|
|
[ ! -z "$Battery_voltage" ] && pushMQTTData "Battery_voltage" "$Battery_voltage"
|
|
|
|
Battery_charge_current=`echo $INVERTER_DATA | jq '.Battery_charge_current' -r`
|
|
[ ! -z "$Battery_charge_current" ] && pushMQTTData "Battery_charge_current" "$Battery_charge_current"
|
|
|
|
Battery_discharge_current=`echo $INVERTER_DATA | jq '.Battery_discharge_current' -r`
|
|
[ ! -z "$Battery_discharge_current" ] && pushMQTTData "Battery_discharge_current" "$Battery_discharge_current"
|
|
|
|
Load_status_on=`echo $INVERTER_DATA | jq '.Load_status_on' -r`
|
|
[ ! -z "$Load_status_on" ] && pushMQTTData "Load_status_on" "$Load_status_on"
|
|
|
|
SCC_charge_on=`echo $INVERTER_DATA | jq '.SCC_charge_on' -r`
|
|
[ ! -z "$SCC_charge_on" ] && pushMQTTData "SCC_charge_on" "$SCC_charge_on"
|
|
|
|
AC_charge_on=`echo $INVERTER_DATA | jq '.AC_charge_on' -r`
|
|
[ ! -z "$AC_charge_on" ] && pushMQTTData "AC_charge_on" "$AC_charge_on"
|
|
|
|
Battery_recharge_voltage=`echo $INVERTER_DATA | jq '.Battery_recharge_voltage' -r`
|
|
[ ! -z "$Battery_recharge_voltage" ] && pushMQTTData "Battery_recharge_voltage" "$Battery_recharge_voltage"
|
|
|
|
Battery_under_voltage=`echo $INVERTER_DATA | jq '.Battery_under_voltage' -r`
|
|
[ ! -z "$Battery_under_voltage" ] && pushMQTTData "Battery_under_voltage" "$Battery_under_voltage"
|
|
|
|
Battery_bulk_voltage=`echo $INVERTER_DATA | jq '.Battery_bulk_voltage' -r`
|
|
[ ! -z "$Battery_bulk_voltage" ] && pushMQTTData "Battery_bulk_voltage" "$Battery_bulk_voltage"
|
|
|
|
Battery_float_voltage=`echo $INVERTER_DATA | jq '.Battery_float_voltage' -r`
|
|
[ ! -z "$Battery_float_voltage" ] && pushMQTTData "Battery_float_voltage" "$Battery_float_voltage"
|
|
|
|
Max_grid_charge_current=`echo $INVERTER_DATA | jq '.Max_grid_charge_current' -r`
|
|
[ ! -z "$Max_grid_charge_current" ] && pushMQTTData "Max_grid_charge_current" "$Max_grid_charge_current"
|
|
|
|
Max_charge_current=`echo $INVERTER_DATA | jq '.Max_charge_current' -r`
|
|
[ ! -z "$Max_charge_current" ] && pushMQTTData "Max_charge_current" "$Max_charge_current"
|
|
|
|
Out_source_priority=`echo $INVERTER_DATA | jq '.Out_source_priority' -r`
|
|
[ ! -z "$Out_source_priority" ] && pushMQTTData "Out_source_priority" "$Out_source_priority"
|
|
|
|
Charger_source_priority=`echo $INVERTER_DATA | jq '.Charger_source_priority' -r`
|
|
[ ! -z "$Charger_source_priority" ] && pushMQTTData "Charger_source_priority" "$Charger_source_priority"
|
|
|
|
Battery_redischarge_voltage=`echo $INVERTER_DATA | jq '.Battery_redischarge_voltage' -r`
|
|
[ ! -z "$Battery_redischarge_voltage" ] && pushMQTTData "Battery_redischarge_voltage" "$Battery_redischarge_voltage"
|
|
|
|
Warnings=`echo $INVERTER_DATA | jq '.Warnings' -r`
|
|
[ ! -z "$Warnings" ] && pushMQTTData "Warnings" "$Warnings"
|
|
|