#!/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"