#!/bin/bash # # 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` MQTT_TOPIC=`cat /etc/inverter/mqtt.json | jq '.topic' -r` MQTT_DEVICENAME=`cat /etc/inverter/mqtt.json | jq '.devicename' -r` MQTT_USERNAME=`cat /etc/inverter/mqtt.json | jq '.username' -r` MQTT_PASSWORD=`cat /etc/inverter/mqtt.json | jq '.password' -r` MQTT_CLIENTID=`cat /etc/inverter/mqtt.json | jq '.clientid' -r` registerTopic () { # $1 = inverter_id, $2 = metric, $3 = unit, $4 = icon local inv_id=$1 local device_name="${MQTT_DEVICENAME}_inv${inv_id}" mosquitto_pub \ -h $MQTT_SERVER \ -p $MQTT_PORT \ -u "$MQTT_USERNAME" \ -P "$MQTT_PASSWORD" \ -i $MQTT_CLIENTID \ -r \ -t "$MQTT_TOPIC/sensor/${device_name}_$2/config" \ -m "{ \"name\": \"${device_name}_$2\", \"unit_of_measurement\": \"$3\", \"state_topic\": \"$MQTT_TOPIC/sensor/${device_name}_$2\", \"icon\": \"mdi:$4\", \"unique_id\": \"${device_name}_$2\", \"device\": { \"identifiers\": [\"${device_name}\"], \"name\": \"${device_name}\", \"manufacturer\": \"Voltronic\", \"model\": \"Parallel Inverter #${inv_id}\" } }" } registerInverterRawCMD () { local inv_id=$1 local device_name="${MQTT_DEVICENAME}_inv${inv_id}" mosquitto_pub \ -h $MQTT_SERVER \ -p $MQTT_PORT \ -u "$MQTT_USERNAME" \ -P "$MQTT_PASSWORD" \ -i $MQTT_CLIENTID \ -r \ -t "$MQTT_TOPIC/sensor/${device_name}_raw_cmd/config" \ -m "{ \"name\": \"${device_name} Raw Command\", \"state_topic\": \"$MQTT_TOPIC/sensor/${device_name}_raw_cmd\", \"command_topic\": \"$MQTT_TOPIC/sensor/${device_name}_raw_cmd/command\", \"unique_id\": \"${device_name}_raw_cmd\", \"icon\": \"mdi:console\", \"device\": { \"identifiers\": [\"${device_name}\"], \"name\": \"${device_name}\", \"manufacturer\": \"Voltronic\", \"model\": \"Parallel Inverter #${inv_id}\" } }" } # Always register for 2 inverters (hardcoded) INVERTER_COUNT=2 echo "Registering discovery topics for $INVERTER_COUNT inverters..." 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" registerTopic $inv_id "AC_grid_voltage" "V" "power-plug" registerTopic $inv_id "AC_grid_frequency" "Hz" "current-ac" registerTopic $inv_id "AC_out_voltage" "V" "power-plug" registerTopic $inv_id "AC_out_frequency" "Hz" "current-ac" registerTopic $inv_id "PV_in_voltage" "V" "solar-panel-large" registerTopic $inv_id "PV_in_current" "A" "solar-panel-large" registerTopic $inv_id "PV_in_watts" "W" "solar-panel-large" registerTopic $inv_id "PV_in_watthour" "Wh" "solar-panel-large" registerTopic $inv_id "SCC_voltage" "V" "current-dc" registerTopic $inv_id "Load_pct" "%" "brightness-percent" registerTopic $inv_id "Load_watt" "W" "chart-bell-curve" registerTopic $inv_id "Load_watthour" "Wh" "chart-bell-curve" registerTopic $inv_id "Load_va" "VA" "chart-bell-curve" registerTopic $inv_id "Bus_voltage" "V" "details" registerTopic $inv_id "Heatsink_temperature" "°C" "details" registerTopic $inv_id "Battery_capacity" "%" "battery-outline" registerTopic $inv_id "Battery_voltage" "V" "battery-outline" registerTopic $inv_id "Battery_charge_current" "A" "current-dc" registerTopic $inv_id "Battery_discharge_current" "A" "current-dc" registerTopic $inv_id "Load_status_on" "" "power" registerTopic $inv_id "SCC_charge_on" "" "power" registerTopic $inv_id "AC_charge_on" "" "power" registerTopic $inv_id "Battery_recharge_voltage" "V" "current-dc" registerTopic $inv_id "Battery_under_voltage" "V" "current-dc" registerTopic $inv_id "Battery_bulk_voltage" "V" "current-dc" registerTopic $inv_id "Battery_float_voltage" "V" "current-dc" registerTopic $inv_id "Max_grid_charge_current" "A" "current-ac" registerTopic $inv_id "Max_charge_current" "A" "current-ac" registerTopic $inv_id "Out_source_priority" "" "grid" registerTopic $inv_id "Charger_source_priority" "" "solar-power" registerTopic $inv_id "Battery_redischarge_voltage" "V" "battery-negative" registerInverterRawCMD $inv_id done echo "✓ Discovery topics registered for $INVERTER_COUNT inverters"