Files
docker-voltronic-homeassistant/sources/inverter-mqtt/mqtt-subscriber.sh
T
Pi Developer 61567e3326
Build Docker Image for Raspberry Pi / build-and-push (push) Successful in 7m31s
Docker Image Cleanup / cleanup-old-images (push) Failing after 3m16s
fix: Pulizia topic legacy e discovery retention
- 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
2026-02-03 00:51:37 +01:00

40 lines
1.5 KiB
Bash
Executable File

#!/bin/bash
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`
echo "MQTT Subscriber started for parallel inverters"
echo "Listening on topics:"
echo " - $MQTT_TOPIC/sensor/${MQTT_DEVICENAME}/command (legacy single inverter)"
echo " - $MQTT_TOPIC/sensor/${MQTT_DEVICENAME}_inv1_raw_cmd/command (inverter #1)"
echo " - $MQTT_TOPIC/sensor/${MQTT_DEVICENAME}_inv2_raw_cmd/command (inverter #2)"
# Subscribe to all command topics (legacy + parallel)
mosquitto_sub \
-h $MQTT_SERVER \
-p $MQTT_PORT \
-u "$MQTT_USERNAME" \
-P "$MQTT_PASSWORD" \
-i $MQTT_CLIENTID \
-t "$MQTT_TOPIC/sensor/$MQTT_DEVICENAME/command" \
-t "$MQTT_TOPIC/sensor/${MQTT_DEVICENAME}_inv1_raw_cmd/command" \
-t "$MQTT_TOPIC/sensor/${MQTT_DEVICENAME}_inv2_raw_cmd/command" \
-q 1 | while read -r topic_and_payload; do
# mosquitto_sub with -v outputs "topic payload"
# Extract topic and payload
topic=$(echo "$topic_and_payload" | cut -d' ' -f1)
rawcmd=$(echo "$topic_and_payload" | cut -d' ' -f2-)
echo "[$(date)] Incoming command from $topic: [$rawcmd]"
# Execute command on inverter
/opt/inverter-cli/bin/inverter_poller -r "$rawcmd"
done