MultivanPi Teil 6: Die Vevor Kühlbox ist geknackt

Nachdem ich im letzten Teil das Display des Raspberry Pi erfolgreich in den automatischen Standby geschickt habe, stand nun eine hardwarenahe Herausforderung auf dem Plan: Die Integration der Kompressorkühlbox in das zentrale Dashboard.

Wer eine Kühlbox von Vevor oder Alpicool besitzt, weiss, dass diese ab Werk mit einer eigenen Smartphone-App ausgeliefert werden. Das ist praktisch, bedeutet aber auch, dass die Daten in einem geschlossenen System feststecken. Mein Ziel für den MultivanPi war klar: Die Kühlbox muss ihre Daten per Bluetooth Low Energy (BLE) an den Raspberry Pi senden.

Ordnung muss sein: Die neue config.json

Bevor ich mich in den Bluetooth-Dschungel gestürzt habe, habe ich das System erst einmal aufgeräumt. Wenn ein Smart-System wächst, werden hart codierte MAC-Adressen und API-Keys im Python-Code schnell unübersichtlich. Meine Lösung ist die Auslagerung aller variablen Daten in eine zentrale config.json.

Hier liegen nun alle MAC-Adressen der Victron-Geräte, die Zugangsdaten für die EcoFlow, fahrzeugspezifische Parameter wie Radstand und Spurweite für die digitale Wasserwaage und natürlich die Verbindungsdaten der Kühlbox. Das macht den eigentlichen Programmcode deutlich sauberer, wartbarer und vor allem portabel.

Das Bluetooth-Rätsel der Kühlbox

Die physische Verbindung zur Kühlbox aufzubauen, war nur der erste Schritt. Die echte Herausforderung lag im Entziffern des proprietären Datenprotokolls. Die Box sendet permanent einen 24 Byte langen Hex-String. Aber welche der kryptischen Zahlen bedeutet was?

In mühsamer Kleinarbeit und mit speziellen Test-Skripten habe ich die Bits und Bytes analysiert, während ich parallel an der Box Tasten gedrückt habe, um Veränderungen im Datenstrom zu triggern.

Die Entschlüsselung des Vevor/Alpicool-Protokolls:

  • Byte 18: Aktuelle Ist-Temperatur im Innenraum
  • Byte 8: Eingestellte Soll-Temperatur
  • Byte 20 & 21: Aktuelle Bordspannung (Volt)
  • Byte 6: Kühlmodus (1 = ECO, 0 = MAX)
  • Byte 7: Batterieschutz-Level (0 = Low, 1 = Medium, 2 = High)
  • Byte 3: Power-Status (1 = An, 0 = Aus)

Der Bluetooth-Stau: Wenn org.bluez streikt

Kaum waren die Daten entschlüsselt und in das Python-Backend integriert, tauchte das nächste Problem auf. Das Backend des MultivanPi scannt bereits permanent und hochfrequent nach sechs verschiedenen Victron-Geräten (SmartShunts, MPPT, Booster, SmartSense). Wenn der Raspberry Pi nun in der exakt gleichen Zeit versucht, eine exklusive, feste Verbindung zur Kühlbox aufzubauen und gleichzeitig den Victron-Scan startet, stürzt das interne Bluetooth-System von Linux ab. Die berüchtigte Fehlermeldung: [org.bluez.Error.InProgress].

Der Bluetooth-Chip war schlichtweg überfordert. Die Lösung war ein einfacher, aber extrem effektiver Kniff im asynchronen Skript: Ich lasse den Victron-Scanner beim Systemstart einfach 8 Sekunden pausieren. So hat die Kühlbox genügend Zeit, ihren Handshake durchzuführen und die Verbindung zu stabilisieren, bevor der Scanner die restliche Bluetooth-Kapazität beansprucht.

Status Quo und Ausblick

Der Lese-Zugriff steht! Die Ist- und Soll-Werte, der aktuelle Kompressor-Modus und die Spannungsdaten fließen nun in Echtzeit in das Dashboard ein. Sogar ein „Wachhund“ (Watchdog) ist bereits integriert, der die Aufbaubatterie überwacht und bei einem kritischen Ladezustand eingreifen kann.

Was aktuell noch aussteht, ist das aktive Senden von Steuerbefehlen vom Pi an die Box. Die Struktur der Hex-Befehle und die nötigen Sende-Kanäle (UUID 1237) sind bereits isoliert, aber die Box stellt sich beim Empfang der Pakete aktuell noch etwas stur. Das ist die Aufgabe für den nächsten Teil. Für heute ist der wichtigste Meilenstein erreicht: Die Kühlbox spricht mit dem MultivanPi.