feat: Flusso completo discovery parallelo per 2 inverter
Build Docker Image for Raspberry Pi / build-and-push (push) Successful in 7m34s

FLUSSO IMPLEMENTATO:
1. All'avvio: registra discovery topics per 2 inverter (hardcoded)
2. Discovery topics ripetuti ogni 5 minuti (invece di 10)
3. Parallel discovery parametri con retry:
   - Tenta discovery fino a 3 volte
   - Se fallisce: attende 5s e riprova
   - Se tutti i tentativi falliscono: assume 2 inverter
4. Estrazione dati ogni 30s per entrambi gli inverter

NAMING:
- Inverter 1: voltronic_inv1_*
- Inverter 2: voltronic_inv2_*

Discovery topics include tutti i 33 parametri per entrambi gli inverter
This commit is contained in:
Pi Developer
2026-02-02 23:50:24 +01:00
parent 0143e8eb36
commit f906047f39
3 changed files with 34 additions and 28 deletions
+4 -4
View File
@@ -236,7 +236,7 @@ fi
echo "" echo ""
echo "=== Starting MQTT Bridge Services ===" echo "=== Starting MQTT Bridge Services ==="
echo "Using parallel inverter mode" echo "Using parallel inverter mode (2 inverters)"
echo "" echo ""
# Wait a bit for the device to be ready # Wait a bit for the device to be ready
@@ -246,10 +246,10 @@ sleep 2
MQTT_PUSH_SCRIPT="/opt/inverter-mqtt/mqtt-push-parallel.sh" MQTT_PUSH_SCRIPT="/opt/inverter-mqtt/mqtt-push-parallel.sh"
MQTT_INIT_SCRIPT="/opt/inverter-mqtt/mqtt-init-parallel.sh" MQTT_INIT_SCRIPT="/opt/inverter-mqtt/mqtt-init-parallel.sh"
# Init the mqtt server for the first time, then every 10 minutes (600 seconds) # Init the mqtt server for the first time, then every 5 minutes (300 seconds)
# This will re-create the auto-created topics in the MQTT server if HA is restarted... # This will re-create the auto-created topics in the MQTT server if HA is restarted...
echo "Starting MQTT initialization service (every 10 minutes)..." echo "Starting MQTT initialization service (every 5 minutes)..."
watch -n 600 "$MQTT_INIT_SCRIPT" > /dev/null 2>&1 & watch -n 300 "$MQTT_INIT_SCRIPT" > /dev/null 2>&1 &
# Run the MQTT Subscriber process in the background (so that way we can change the configuration on the inverter from home assistant) # Run the MQTT Subscriber process in the background (so that way we can change the configuration on the inverter from home assistant)
echo "Starting MQTT subscriber for commands..." echo "Starting MQTT subscriber for commands..."
+7 -18
View File
@@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# #
# MQTT Discovery for Parallel Inverters (simple style) # MQTT Discovery for 2 Parallel Inverters (hardcoded)
MQTT_SERVER=`cat /etc/inverter/mqtt.json | jq '.server' -r` MQTT_SERVER=`cat /etc/inverter/mqtt.json | jq '.server' -r`
MQTT_PORT=`cat /etc/inverter/mqtt.json | jq '.port' -r` MQTT_PORT=`cat /etc/inverter/mqtt.json | jq '.port' -r`
@@ -47,23 +47,13 @@ registerInverterRawCMD () {
}" }"
} }
# Discover parallel inverters (no timeout, always try) # Always register for 2 inverters (hardcoded)
PARALLEL_DISCOVERY=`/opt/inverter-cli/bin/inverter_poller -p 2>&1` INVERTER_COUNT=2
PARALLEL_COUNT=`echo "$PARALLEL_DISCOVERY" | grep "PARALLEL_COUNT=" | cut -d= -f2`
echo "Parallel discovery result: count=$PARALLEL_COUNT" echo "Registering discovery topics for $INVERTER_COUNT inverters..."
# If no parallel inverters found, assume 2 as default for inv_id in $(seq 1 $INVERTER_COUNT); do
if [ -z "$PARALLEL_COUNT" ] || [ "$PARALLEL_COUNT" -eq 0 ]; then echo " Inverter #$inv_id..."
echo "⚠ No parallel count detected, assuming 2 inverters"
PARALLEL_COUNT=2
fi
echo "Registering discovery for $PARALLEL_COUNT inverters"
# Register topics for each inverter discovered
for inv_id in $(seq 1 $PARALLEL_COUNT); do
echo "Registering discovery topics for inverter #$inv_id..."
registerTopic $inv_id "serial" "" "identifier" registerTopic $inv_id "serial" "" "identifier"
registerTopic $inv_id "Inverter_mode" "" "solar-power" registerTopic $inv_id "Inverter_mode" "" "solar-power"
@@ -99,8 +89,7 @@ for inv_id in $(seq 1 $PARALLEL_COUNT); do
registerTopic $inv_id "Charger_source_priority" "" "solar-power" registerTopic $inv_id "Charger_source_priority" "" "solar-power"
registerTopic $inv_id "Battery_redischarge_voltage" "V" "battery-negative" registerTopic $inv_id "Battery_redischarge_voltage" "V" "battery-negative"
# Raw command topic
registerInverterRawCMD $inv_id registerInverterRawCMD $inv_id
done done
echo "All discovery topics registered for $PARALLEL_COUNT inverters" echo "Discovery topics registered for $INVERTER_COUNT inverters"
+23 -6
View File
@@ -68,20 +68,37 @@ pushInfluxData () {
curl -i -XPOST "$INFLUX_HOST/write?db=$INFLUX_DATABASE&precision=s" -u "$INFLUX_USERNAME:$INFLUX_PASSWORD" --data-binary "$INFLUX_PREFIX,device=${INFLUX_DEVICE}_inv${1} $INFLUX_MEASUREMENT_NAME=$3" > /dev/null 2>&1 curl -i -XPOST "$INFLUX_HOST/write?db=$INFLUX_DATABASE&precision=s" -u "$INFLUX_USERNAME:$INFLUX_PASSWORD" --data-binary "$INFLUX_PREFIX,device=${INFLUX_DEVICE}_inv${1} $INFLUX_MEASUREMENT_NAME=$3" > /dev/null 2>&1
} }
# Discover parallel inverters # Discover parallel inverters with retry logic
SUDO_CMD="" SUDO_CMD=""
if [ "$EUID" -ne 0 ] && [ -c "/dev/ttyUSB0" ]; then if [ "$EUID" -ne 0 ] && [ -c "/dev/ttyUSB0" ]; then
SUDO_CMD="sudo" SUDO_CMD="sudo"
fi fi
PARALLEL_DISCOVERY=`$SUDO_CMD "$INVERTER_BIN" -p 2>&1` # Try parallel discovery with retry
PARALLEL_COUNT=`echo "$PARALLEL_DISCOVERY" | grep "PARALLEL_COUNT=" | cut -d= -f2` MAX_RETRIES=3
RETRY_DELAY=5
PARALLEL_COUNT=0
echo "Parallel discovery: count=$PARALLEL_COUNT" for attempt in $(seq 1 $MAX_RETRIES); do
echo "Parallel discovery attempt $attempt/$MAX_RETRIES..."
PARALLEL_DISCOVERY=`$SUDO_CMD "$INVERTER_BIN" -p 2>&1`
PARALLEL_COUNT=`echo "$PARALLEL_DISCOVERY" | grep "PARALLEL_COUNT=" | cut -d= -f2`
# If no parallel count detected, assume 2 inverters if [ ! -z "$PARALLEL_COUNT" ] && [ "$PARALLEL_COUNT" -gt 0 ]; then
echo "✓ Found $PARALLEL_COUNT inverters"
break
else
echo "⚠ Discovery failed (count=$PARALLEL_COUNT)"
if [ $attempt -lt $MAX_RETRIES ]; then
echo " Waiting ${RETRY_DELAY}s before retry..."
sleep $RETRY_DELAY
fi
fi
done
# If still no count, assume 2 inverters
if [ -z "$PARALLEL_COUNT" ] || [ "$PARALLEL_COUNT" -eq 0 ]; then if [ -z "$PARALLEL_COUNT" ] || [ "$PARALLEL_COUNT" -eq 0 ]; then
echo "⚠ No parallel count detected, assuming 2 inverters" echo "⚠ All discovery attempts failed, assuming 2 inverters"
PARALLEL_COUNT=2 PARALLEL_COUNT=2
fi fi