Files
SolarManager/startWattpilotMQTT.sh
T
adminandClaude Opus 5 acb443e27a Wattpilot-Bruecke verwirft keine Messwerte mehr
Die Wallbox schickt 34 Statusfelder, die die API-Beschreibung von
wattpilot 0.2 nicht kennt. Die Bibliothek schlug jedes Feld ungeprueft
nach und lief in einen KeyError, der die restliche Schleife mitriss -
alle Werte hinter dem unbekannten Feld derselben Nachricht kamen nie
beim MQTT-Broker an. Im Dauerbetrieb traf es alle 15 Sekunden fhz, lps
und tpcm, nach einem Verbindungsaufbau deutlich mehr; sichtbar war es
nur als Fehlerpaar 'clea' im Log, rund ein MB am Tag.

wattpilot_bruecke.py ersetzt die betroffene Funktion zur Laufzeit und
ueberspringt unbekannte Felder, jedes einmal mit einer Warnung. Die
Reparatur steht hier und nicht in site-packages, weil eine
Neuinstallation sie dort spurlos zurueckdrehen wuerde und wattpilot 0.2
seit Mai 2022 die letzte Veroeffentlichung ist.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-03 19:53:53 +02:00

59 lines
2.2 KiB
Bash
Executable File

#!/bin/bash
# Startet die Wattpilot-Bruecke (wattpilotshell) neu.
#
# Zugangsdaten kommen aus config.ini und stehen nicht mehr hier im Skript -
# frueher stand das Wattpilot-Passwort im Klartext in der ersten Zeile.
BASIS="/volume1/homes/wagner/SolarManager"
# Einen Wert aus config.ini lesen: konf <abschnitt> <schluessel>
konf() {
awk -v abschnitt="[$1]" -v schluessel="$2" '
$0 == abschnitt { drin = 1; next }
/^\[/ { drin = 0 }
drin && $0 ~ "^" schluessel " *=" { sub(/^[^=]*= */, ""); print; exit }
' "$BASIS/config.ini"
}
export MQTT_ENABLED=true
export MQTT_HOST=$(konf wattpilot mqtt_host)
export WATTPILOT_HOST=$(konf wattpilot host)
export WATTPILOT_PASSWORD=$(konf wattpilot password)
if [ -z "$WATTPILOT_PASSWORD" ]; then
echo "config.ini: [wattpilot] password fehlt - Abbruch"
exit 1
fi
echo "Starting..."
# Change the name of the script here
# Deckt auch den alten Aufruf ab, damit beim Umstieg keine zweite
# Instanz stehen bleibt.
SCRIPT_NAME="wattpilot_bruecke.py|wattpilotshell"
LOG_FILE="wattpilotshell.log"
# Find the process ID of any running instance of the script
PID=$(ps aux | grep -E "$SCRIPT_NAME" | grep -v grep | awk '{print $2}')
# If a running instance was found, kill it
if [[ -n "$PID" ]]; then
echo "Killing process $PID"
kill $PID
fi
# Start the script
cd "$BASIS"
# Angehaengt statt ueberschrieben: logrotate leert diese Datei mit
# copytruncate, waehrend der Prozess sie offen haelt. Ohne Anhaengemodus
# schriebe er danach an seiner alten Stelle weiter, und die Datei bekaeme ein
# Loch aus Nullbytes in der Groesse des bisherigen Inhalts. Bei dieser Datei
# faellt das besonders ins Gewicht - die wattpilotshell meldet einen
# Verbindungsfehler im Sekundentakt und hatte es so auf 329 MB gebracht.
# Nicht mehr die wattpilotshell direkt: wattpilot_bruecke.py startet sie
# ueber eine reparierte MQTT-Bruecke. Die Bibliothek stolpert sonst ueber
# Statusfelder, die ihre API-Beschreibung von 2022 nicht kennt, und
# verwirft dabei alle Werte, die in derselben Nachricht dahinter stehen.
# Begruendung im Kopf von wattpilot_bruecke.py.
/usr/local/bin/python3.10 "$BASIS/wattpilot_bruecke.py" server >> "$LOG_FILE" 2>&1 &