feat: Auto-detection inverter paralleli con script dedicati
Build Docker Image for Raspberry Pi / build-and-push (push) Successful in 7m18s

- Modificato entrypoint.sh per rilevare automaticamente inverter paralleli
- Usa flag -p per parallel discovery (testa QPGS0-9)
- Script mqtt-push-parallel.sh per pubblicare dati di ogni inverter
- Script mqtt-init-parallel.sh per discovery topics (ogni 10 min)
- Naming: voltronic_inv1, voltronic_inv2, ecc.
- Fallback automatico a single-mode se PARALLEL_COUNT=0

Nota: Il parallel discovery richiede che inverter supportino comandi QPGS
This commit is contained in:
Pi Developer
2026-02-02 23:24:49 +01:00
parent 53899b0fac
commit dc5bd07438
2 changed files with 117 additions and 5 deletions
+90
View File
@@ -0,0 +1,90 @@
#!/bin/bash
#
# MQTT Discovery for Parallel Inverters
# Registers Home Assistant auto-discovery topics for each parallel inverter
MQTT_CONFIG="/etc/inverter/mqtt.json"
INVERTER_BIN="/opt/inverter-cli/bin/inverter_poller"
MQTT_SERVER=$(jq -r '.server' "$MQTT_CONFIG")
MQTT_PORT=$(jq -r '.port' "$MQTT_CONFIG")
MQTT_TOPIC=$(jq -r '.topic' "$MQTT_CONFIG")
MQTT_DEVICENAME=$(jq -r '.devicename' "$MQTT_CONFIG")
MQTT_USERNAME=$(jq -r '.username' "$MQTT_CONFIG")
MQTT_PASSWORD=$(jq -r '.password' "$MQTT_CONFIG")
MQTT_CLIENTID=$(jq -r '.clientid' "$MQTT_CONFIG")
registerTopic () {
local inverter_id="$1"
local metric="$2"
local unit="$3"
local icon="$4"
local device_name="${MQTT_DEVICENAME}_inv${inverter_id}"
mosquitto_pub \
-h $MQTT_SERVER \
-p $MQTT_PORT \
-u "$MQTT_USERNAME" \
-P "$MQTT_PASSWORD" \
-i "${MQTT_CLIENTID}_init" \
-t "$MQTT_TOPIC/sensor/${device_name}_${metric}/config" \
-r \
-m "{
\"name\": \"${device_name}_${metric}\",
\"unit_of_measurement\": \"$unit\",
\"state_topic\": \"$MQTT_TOPIC/sensor/${device_name}_${metric}\",
\"icon\": \"mdi:$icon\",
\"unique_id\": \"${device_name}_${metric}\",
\"device\": {
\"identifiers\": [\"${device_name}\"],
\"name\": \"${device_name}\",
\"manufacturer\": \"Voltronic\",
\"model\": \"Parallel Inverter\"
}
}"
}
register_inverter_topics() {
local inverter_id="$1"
echo "Registering MQTT discovery topics for: ${MQTT_DEVICENAME}_inv${inverter_id}"
# Register all metrics for this inverter
registerTopic "$inverter_id" "serial" "" "identifier"
registerTopic "$inverter_id" "mode" "" "solar-power"
registerTopic "$inverter_id" "AC_grid_voltage" "V" "power-plug"
registerTopic "$inverter_id" "AC_grid_frequency" "Hz" "current-ac"
registerTopic "$inverter_id" "AC_out_voltage" "V" "power-plug"
registerTopic "$inverter_id" "AC_out_frequency" "Hz" "current-ac"
registerTopic "$inverter_id" "PV_in_voltage" "V" "solar-panel-large"
registerTopic "$inverter_id" "PV_in_current" "A" "solar-panel-large"
registerTopic "$inverter_id" "PV_in_watts" "W" "solar-panel-large"
registerTopic "$inverter_id" "Load_pct" "%" "brightness-percent"
registerTopic "$inverter_id" "Load_watt" "W" "chart-bell-curve"
registerTopic "$inverter_id" "Load_va" "VA" "chart-bell-curve"
registerTopic "$inverter_id" "Battery_capacity" "%" "battery-outline"
registerTopic "$inverter_id" "Battery_voltage" "V" "battery-outline"
registerTopic "$inverter_id" "Battery_charge_current" "A" "current-dc"
echo " ✓ Discovery topics registered"
}
# Discover parallel inverters
PARALLEL_DISCOVERY=$("$INVERTER_BIN" -p 2>&1)
PARALLEL_COUNT=$(echo "$PARALLEL_DISCOVERY" | grep "PARALLEL_COUNT=" | cut -d= -f2)
if [ -z "$PARALLEL_COUNT" ] || [ "$PARALLEL_COUNT" -eq 0 ]; then
echo "No parallel inverters found, falling back to standard init"
exec /opt/inverter-mqtt/mqtt-init.sh
exit 0
fi
echo "Found $PARALLEL_COUNT parallel inverters"
# Register topics for each inverter
for i in $(seq 1 $PARALLEL_COUNT); do
register_inverter_topics "$i"
done
echo "✓ All MQTT discovery topics registered for $PARALLEL_COUNT inverters"