61567e3326
- Rimosso vecchio topic homeassistant/sensor/voltronic/config all'avvio - Aggiunto flag -r (retain) a tutti i discovery topics - MQTT init eseguito immediatamente all'avvio + ogni 5 minuti - Aggiunto unique_id e device info a tutti i sensori per HA - mqtt-subscriber ora ascolta su 3 topic: - homeassistant/sensor/voltronic/command (legacy) - homeassistant/sensor/voltronic_inv1_raw_cmd/command - homeassistant/sensor/voltronic_inv2_raw_cmd/command - Subscriber con output verbose e timestamp - Discovery topics ora persistono dopo restart broker MQTT Timing verificato: - Init all'avvio: immediato - Re-init periodico: ogni 5 minuti (300s) - Data push: ogni 30 secondi
114 lines
4.7 KiB
Bash
Executable File
114 lines
4.7 KiB
Bash
Executable File
#!/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"
|