Nachdem ich in Teil 1 das grundlegende Dashboard aufgesetzt habe, widme ich mich heute der Datenqualität und der Systemstabilität. Ein Dashboard im Fahrzeugkontext steht vor zwei Herausforderungen: Instabile Sensorwerte durch Vibrationen und die Notwendigkeit, externe APIs (wie die von EcoFlow) abzufragen, ohne dass die Benutzeroberfläche einfriert.
Technische Zusammenfassung der Lösung:
Um das Signalrauschen des ADXL345 Beschleunigungssensors zu minimieren, habe ich ein Low-Pass Filter (Exponential Moving Average) eingesetzt. Dieser fungiert als virtuelle Dämpfung. Zusätzlich implementiert das System eine Historien-Funktion für Wetterdaten via JSON und nutzt Chart.js in einem responsiven Flexbox-Container, um Trends auf dem gedrehten Display (Portrait Mode) fehlerfrei darzustellen.
Das Rauschen bändigen: Low-Pass Filter für den ADXL345
Wer einen ADXL345 oder BME280 im Fahrzeug verbaut, stellt schnell fest: Die Rohdaten sind unruhig. Besonders der Beschleunigungssensor liefert durch Motorvibrationen und Fahrbahnunebenheiten ein starkes „Rauschen“. Zeigt man diese Rohdaten direkt im Dashboard an, springen die Werte hektisch hin und her.
Die Lösung ist ein mathematischer Filter. Ich verwende den Exponential Moving Average (EMA). Im Gegensatz zum einfachen Durchschnitt gewichtet dieser Algorithmus neue Messwerte stärker als alte, sorgt aber dennoch für eine Trägheit, die Ausreißer glättet.
Python-Implementierung des Filters
Der Algorithmus lässt sich in Python effizient umsetzen. Der Faktor alpha bestimmt dabei die Stärke der Glättung (kleinerer Wert = stärkere Glättung).
Warum den Luftdruck verarbeiten?
Eigentlich wollte ich einfach nur einen möglichst genauen Sensor für Temperatur und Luftfeuchte, um z.B. Standheizung und Lüftung automatisch steuern zu können. Die Wahl fiel auf den BME280, der kann auch den Luftdruck messen. Warum also den Wert ignorieren, dachte ich und habe ihn mit eingebaut.
Ein einzelner Luftdruck-Wert reicht aber nicht aus, um Wetterumschwünge zu erkennen. Ich habe deshalb eine Historie-Funktion für die BME280 Sensordaten implementiert, die über ein responsives Diagramm visualisiert wird.
Ergebnis der Optimierung: Die Luftdruck-Kurve bleibt dank des Glättungs-Algorithmus stabil und skaliert sich dynamisch.
Datenspeicherung: Das Python-Backend speichert nun alle 10 Minuten den Luftdruck in einer JSON-Historie. Dies ist ressourcenschonend, aber präzise genug für eine 3-Tages-Trendanalyse.
Flexbox-Layout: Die Visualisierung erfolgt über Chart.js. Eine Herausforderung war das vertikale Layout auf dem gedrehten Display (Portrait Mode). Durch den Umstieg auf display: flex; flex: 1; nutzt der Chart-Container nun dynamisch den verfügbaren Platz bis etwa zur Mitte des Home-Buttons, ohne dass Clipping-Fehler auftreten.
Smart Scaling: Das Diagramm filtert fehlerhafte Null-Werte (z.B. während der Sensor-Initialisierung) aus und skaliert die Y-Achse dynamisch auf den relevanten Bereich (z.B. 980 bis 1020 hPa), um Schwankungen besser sichtbar zu machen.
EcoFlow Delta 3+ Integration via Python aiohttp
Der komplexeste Teil dieses Updates betrifft die Anbindung der Powerstation. Ich habe die lokale Simulation durch echte Live-Daten der EcoFlow IOT Cloud API ersetzt. Da Netzwerkabfragen Zeit kosten und im schlimmsten Fall in ein Timeout laufen, darf dies nicht im Hauptprozess (Main Loop) passieren.
Ich nutze daher die asynchrone Python-Bibliothek aiohttp. Die Herausforderung bei EcoFlow liegt in der Authentifizierung:
Erstellung einer HMAC-SHA256 Signatur für jeden Request.
Authentifizierungsdaten müssen als URL-Parameter (Query String) übergeben werden.
Die Seriennummer (SN) wird separat im JSON-Body des POST-Requests gesendet.
Raspberry Pi Performance Tuning im Dauerbetrieb
Ein Raspberry Pi 4, der im geschlossenen Gehäuse als Kiosk-Display dient, kann thermisch an seine Grenzen kommen. Eine Analyse der CPU-Last zeigte, dass der Chromium-Browser beim Rendern der CSS-Animationen die GPU stark beanspruchte, was paradoxerweise zu mehr Abwärme führte als eine reine CPU-Berechnung.
Da das Dashboard auf reinem 2D-HTML/CSS basiert, habe ich die Hardware-Beschleunigung deaktiviert:
Dies entlastet das System signifikant und verhindert Grafik-Glitches in den Logs, was die Langzeitstabilität des Kiosk-Modus erhöht.
Ausblick
Das Dashboard hat durch diese Anpassungen einen großen Sprung in Richtung Professionalität gemacht. Die Kombination aus performantem Python-Backend für die API-Calls, intelligenter Datenspeicherung und mathematischer Signalverarbeitung im Frontend sorgt für eine zuverlässige Überwachung der Bordtechnik.
In Teil 3 werde ich mich um die Stabilisierung der Victron-Komponenten kümmern.
Fred
Fred ist ein Fernwehgeplagter mit einem vielfältigen Portfolio:
Unterwegs mit dem Motorrad, dem Auto, dem Camper...
Als Fotograf versucht er, die Welt durch seine Linse einzufangen und mit seinen Worten zu beschreiben.
Im Laufe des Lebens hat er sich immer wieder neu erfunden, verschiedene Berufe gelernt oder sich Wissen und Können selbst angeeignet.
Auf XTramp.de vereint er diese Leidenschaften:
Er dokumentiert seine kleinen, budgetfreundlichen Auszeiten und liefert gleichzeitig detaillierte, praxisnahe Anleitungen aus seiner Werkstatt – vom Schrauben an Motorrädern oder Autos, über Schreinern, Metallbau, Hochbau, Elektrik und Elektronik bis hin zu 3D-Druck-Projekten.
Sein Ziel ist es, zu zeigen, dass Abenteuer und technisches Know-how für jeden zugänglich sind.
3 Feb. 2026
Multivan-Pi (Teil 2): ADXL345 Glättungs-Algorithmen & EcoFlow API Integration
Nachdem ich in Teil 1 das grundlegende Dashboard aufgesetzt habe, widme ich mich heute der Datenqualität und der Systemstabilität. Ein Dashboard im Fahrzeugkontext steht vor zwei Herausforderungen: Instabile Sensorwerte durch Vibrationen und die Notwendigkeit, externe APIs (wie die von EcoFlow) abzufragen, ohne dass die Benutzeroberfläche einfriert.
Um das Signalrauschen des ADXL345 Beschleunigungssensors zu minimieren, habe ich ein Low-Pass Filter (Exponential Moving Average) eingesetzt. Dieser fungiert als virtuelle Dämpfung. Zusätzlich implementiert das System eine Historien-Funktion für Wetterdaten via JSON und nutzt Chart.js in einem responsiven Flexbox-Container, um Trends auf dem gedrehten Display (Portrait Mode) fehlerfrei darzustellen.
Inhalt
Das Rauschen bändigen: Low-Pass Filter für den ADXL345
Wer einen ADXL345 oder BME280 im Fahrzeug verbaut, stellt schnell fest: Die Rohdaten sind unruhig. Besonders der Beschleunigungssensor liefert durch Motorvibrationen und Fahrbahnunebenheiten ein starkes „Rauschen“. Zeigt man diese Rohdaten direkt im Dashboard an, springen die Werte hektisch hin und her.
Die Lösung ist ein mathematischer Filter. Ich verwende den Exponential Moving Average (EMA). Im Gegensatz zum einfachen Durchschnitt gewichtet dieser Algorithmus neue Messwerte stärker als alte, sorgt aber dennoch für eine Trägheit, die Ausreißer glättet.
Python-Implementierung des Filters
Der Algorithmus lässt sich in Python effizient umsetzen. Der Faktor
alphabestimmt dabei die Stärke der Glättung (kleinerer Wert = stärkere Glättung).Intelligente Klimadaten & Responsive Chart.js
Warum den Luftdruck verarbeiten?
Eigentlich wollte ich einfach nur einen möglichst genauen Sensor für Temperatur und Luftfeuchte, um z.B. Standheizung und Lüftung automatisch steuern zu können. Die Wahl fiel auf den BME280, der kann auch den Luftdruck messen. Warum also den Wert ignorieren, dachte ich und habe ihn mit eingebaut.
Ein einzelner Luftdruck-Wert reicht aber nicht aus, um Wetterumschwünge zu erkennen. Ich habe deshalb eine Historie-Funktion für die BME280 Sensordaten implementiert, die über ein responsives Diagramm visualisiert wird.
display: flex; flex: 1;nutzt der Chart-Container nun dynamisch den verfügbaren Platz bis etwa zur Mitte des Home-Buttons, ohne dass Clipping-Fehler auftreten.EcoFlow Delta 3+ Integration via Python aiohttp
Der komplexeste Teil dieses Updates betrifft die Anbindung der Powerstation. Ich habe die lokale Simulation durch echte Live-Daten der EcoFlow IOT Cloud API ersetzt. Da Netzwerkabfragen Zeit kosten und im schlimmsten Fall in ein Timeout laufen, darf dies nicht im Hauptprozess (Main Loop) passieren.
Ich nutze daher die asynchrone Python-Bibliothek
aiohttp. Die Herausforderung bei EcoFlow liegt in der Authentifizierung:Raspberry Pi Performance Tuning im Dauerbetrieb
Ein Raspberry Pi 4, der im geschlossenen Gehäuse als Kiosk-Display dient, kann thermisch an seine Grenzen kommen. Eine Analyse der CPU-Last zeigte, dass der Chromium-Browser beim Rendern der CSS-Animationen die GPU stark beanspruchte, was paradoxerweise zu mehr Abwärme führte als eine reine CPU-Berechnung.
Da das Dashboard auf reinem 2D-HTML/CSS basiert, habe ich die Hardware-Beschleunigung deaktiviert:
Dies entlastet das System signifikant und verhindert Grafik-Glitches in den Logs, was die Langzeitstabilität des Kiosk-Modus erhöht.
Ausblick
Das Dashboard hat durch diese Anpassungen einen großen Sprung in Richtung Professionalität gemacht. Die Kombination aus performantem Python-Backend für die API-Calls, intelligenter Datenspeicherung und mathematischer Signalverarbeitung im Frontend sorgt für eine zuverlässige Überwachung der Bordtechnik.
In Teil 3 werde ich mich um die Stabilisierung der Victron-Komponenten kümmern.
Fred
Fred ist ein Fernwehgeplagter mit einem vielfältigen Portfolio: Unterwegs mit dem Motorrad, dem Auto, dem Camper... Als Fotograf versucht er, die Welt durch seine Linse einzufangen und mit seinen Worten zu beschreiben. Im Laufe des Lebens hat er sich immer wieder neu erfunden, verschiedene Berufe gelernt oder sich Wissen und Können selbst angeeignet. Auf XTramp.de vereint er diese Leidenschaften: Er dokumentiert seine kleinen, budgetfreundlichen Auszeiten und liefert gleichzeitig detaillierte, praxisnahe Anleitungen aus seiner Werkstatt – vom Schrauben an Motorrädern oder Autos, über Schreinern, Metallbau, Hochbau, Elektrik und Elektronik bis hin zu 3D-Druck-Projekten. Sein Ziel ist es, zu zeigen, dass Abenteuer und technisches Know-how für jeden zugänglich sind.