feat: Flusso completo discovery parallelo per 2 inverter
Build Docker Image for Raspberry Pi / build-and-push (push) Successful in 7m34s
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:
@@ -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..."
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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 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
|
||||
echo "⚠ No parallel count detected, assuming 2 inverters"
|
||||
echo "⚠ All discovery attempts failed, assuming 2 inverters"
|
||||
PARALLEL_COUNT=2
|
||||
fi
|
||||
|
||||
|
||||
Reference in New Issue
Block a user