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>
59 lines
2.2 KiB
Bash
Executable File
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 &
|