Files
docker-voltronic-homeassistant/sources/inverter-mqtt/mqtt-init-parallel.sh
T
Pi Developer 94ac952644
Build Docker Image for Raspberry Pi / build-and-push (push) Successful in 12m47s
fix: PV_in_current/watts tramite bilancio energetico DC bus
Il protocollo QPGS non espone la corrente reale lato pannelli.
DATA[25] = corrente SCC→batteria SOLTANTO (0 quando batteria carica).

Formula corretta via conservazione energetica del DC bus:
  P_pv = V_batt×DATA[25] + max(0, Load_W − V_batt×DATA[26])

Dove:
  V_batt×DATA[25]  = potenza SCC inviata alla batteria
  Load_W           = potenza consumata dal carico dal bus DC
  V_batt×DATA[26]  = potenza fornita dalla batteria in scarica

Casi coperti:
  1. Bat. in carica (DATA[25]>0, DATA[26]=0):  P = V_b×I_scc + Load
  2. Bat. piena    (DATA[25]=0,  DATA[26]=0):  P = Load
  3. Bat. in scar. (DATA[25]=0,  DATA[26]>0):  P = max(0, Load−Pdisch)

Guard: calcolo solo quando SCC_charging (STATUS b5=1), altrimenti 0.

Aggiunto SCC_current (=DATA[25]) come campo separato per monitorare
la corrente SCC→batteria indipendentemente dalla produzione PV.

Aggiunto SCC_current al topic di discovery HA in mqtt-init-parallel.sh
2026-02-22 15:22:14 +01:00

115 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 "SCC_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"