From f906047f39208a8fb2084c8dee030a50b4cbb9da Mon Sep 17 00:00:00 2001 From: Pi Developer Date: Mon, 2 Feb 2026 23:50:24 +0100 Subject: [PATCH] feat: Flusso completo discovery parallelo per 2 inverter 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 --- sources/inverter-mqtt/entrypoint.sh | 8 +++--- sources/inverter-mqtt/mqtt-init-parallel.sh | 25 +++++------------- sources/inverter-mqtt/mqtt-push-parallel.sh | 29 ++++++++++++++++----- 3 files changed, 34 insertions(+), 28 deletions(-) diff --git a/sources/inverter-mqtt/entrypoint.sh b/sources/inverter-mqtt/entrypoint.sh index 48a6629..6b5a825 100755 --- a/sources/inverter-mqtt/entrypoint.sh +++ b/sources/inverter-mqtt/entrypoint.sh @@ -236,7 +236,7 @@ fi echo "" echo "=== Starting MQTT Bridge Services ===" -echo "Using parallel inverter mode" +echo "Using parallel inverter mode (2 inverters)" echo "" # 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_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... -echo "Starting MQTT initialization service (every 10 minutes)..." -watch -n 600 "$MQTT_INIT_SCRIPT" > /dev/null 2>&1 & +echo "Starting MQTT initialization service (every 5 minutes)..." +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) echo "Starting MQTT subscriber for commands..." diff --git a/sources/inverter-mqtt/mqtt-init-parallel.sh b/sources/inverter-mqtt/mqtt-init-parallel.sh index ef66efc..3f461ac 100755 --- a/sources/inverter-mqtt/mqtt-init-parallel.sh +++ b/sources/inverter-mqtt/mqtt-init-parallel.sh @@ -1,6 +1,6 @@ #!/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_PORT=`cat /etc/inverter/mqtt.json | jq '.port' -r` @@ -47,23 +47,13 @@ registerInverterRawCMD () { }" } -# Discover parallel inverters (no timeout, always try) -PARALLEL_DISCOVERY=`/opt/inverter-cli/bin/inverter_poller -p 2>&1` -PARALLEL_COUNT=`echo "$PARALLEL_DISCOVERY" | grep "PARALLEL_COUNT=" | cut -d= -f2` +# Always register for 2 inverters (hardcoded) +INVERTER_COUNT=2 -echo "Parallel discovery result: count=$PARALLEL_COUNT" +echo "Registering discovery topics for $INVERTER_COUNT inverters..." -# If no parallel inverters found, assume 2 as default -if [ -z "$PARALLEL_COUNT" ] || [ "$PARALLEL_COUNT" -eq 0 ]; then - 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..." +for inv_id in $(seq 1 $INVERTER_COUNT); do + echo " Inverter #$inv_id..." registerTopic $inv_id "serial" "" "identifier" 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 "Battery_redischarge_voltage" "V" "battery-negative" - # Raw command topic registerInverterRawCMD $inv_id done -echo "✓ All discovery topics registered for $PARALLEL_COUNT inverters" +echo "✓ Discovery topics registered for $INVERTER_COUNT inverters" diff --git a/sources/inverter-mqtt/mqtt-push-parallel.sh b/sources/inverter-mqtt/mqtt-push-parallel.sh index e9eda7c..add52bf 100755 --- a/sources/inverter-mqtt/mqtt-push-parallel.sh +++ b/sources/inverter-mqtt/mqtt-push-parallel.sh @@ -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 } -# Discover parallel inverters +# Discover parallel inverters with retry logic SUDO_CMD="" if [ "$EUID" -ne 0 ] && [ -c "/dev/ttyUSB0" ]; then SUDO_CMD="sudo" fi -PARALLEL_DISCOVERY=`$SUDO_CMD "$INVERTER_BIN" -p 2>&1` -PARALLEL_COUNT=`echo "$PARALLEL_DISCOVERY" | grep "PARALLEL_COUNT=" | cut -d= -f2` +# Try parallel discovery with retry +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 [ ! -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 no parallel count detected, assume 2 inverters +# If still no count, assume 2 inverters 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 fi