‹ Zurück zum Dashboard

MG4 · KLEVE

FAQ

Was ist das hier?

Ein privates Telemetrie-Dashboard für einen MG4 Electric Luxury, der in Kleve am Niederrhein zu Hause ist. Die Seite liest den aktuellen Fahrzeugstatus und einige langfristige Statistiken direkt aus der SAIC-Cloud (demselben Dienst, den auch die offizielle iSmart-App nutzt) und stellt sie hier öffentlich einsehbar dar – ganz ohne kommerziellen Hintergedanken, einfach aus Freude an Daten.

Wie ist die Seite entstanden?

Der ursprüngliche Plan war, direkt per OBD2-Adapter Daten vom Fahrzeug abzugreifen. Das funktionierte technisch, hatte aber einen Haken: aktives Abfragen über den CAN-Bus bei verriegeltem Fahrzeug kann die Alarmanlage auslösen – ein bekanntes Problem in der MG4-Community, nicht nur bei diesem Fahrzeug. Nach einigem Testen wurde klar, dass der zuverlässigere Weg über die Cloud-API des Herstellers führt, dieselbe Schnittstelle, die auch die offizielle App nutzt. Passives Auslesen, kein Eingriff am Fahrzeug selbst nötig.

Von dort aus ging es Schritt für Schritt weiter: ein eigener Server, eine Datenbank, ein Hintergrunddienst, der die Cloud-API in sinnvollen Abständen abfragt (schnell während der Fahrt, sparsam im Ruhezustand, um die 12V-Batterie zu schonen), und ein Admin-Bereich für alles, was nicht öffentlich sein soll. Viele der Rohdaten-Felder, die die API liefert, sind nirgends offiziell dokumentiert – die genauen Umrechnungsformeln (z.B. wie aus einem rohen Sensorwert eine Leistung in kW wird) wurden über echte Test-Fahrten und -Ladevorgänge nach und nach verifiziert, teils durch Gegenrechnen mit unabhängigen Werten wie dem Ladestand-Verlauf.

Gebaut wurde das komplette Projekt – Server-Aufsetzung, Backend, Datenbank-Design, der komplette Admin-Bereich und dieses Dashboard – in Zusammenarbeit mit Claude, dem KI-Assistenten von Anthropic, ganz ohne vorherige Programmiererfahrung. Jede API-Formel wurde dabei gegen echte Fahrzeugdaten getestet, nicht nur behauptet.

Wie funktioniert das technisch?

Ein kleiner Server (Hetzner Cloud) betreibt vier Docker-Container: eine PostgreSQL-Datenbank, ein Node.js-Backend, einen Python-Hintergrunddienst (den "Poller", der die Fahrzeugdaten holt) und Caddy als Reverse-Proxy für HTTPS. Der Poller fragt die SAIC-Cloud-API adaptiv ab – alle 30 Sekunden während der Fahrt, dynamisch beim Laden, aber nur alle 24 Stunden, wenn das Fahrzeug längere Zeit ruht, damit die 12V-Batterie nicht unnötig belastet wird. Ein zweiter, sehr günstiger Abruf prüft trotzdem alle 90 Sekunden auf neue Fahrzeug-Nachrichten (Fahrt-/Ladestart), damit der Wechsel in den aktiven Modus nicht erst nach 24 Stunden bemerkt wird.

Wie wird das alles berechnet?

Nichts hiervon ist offiziell von MG/SAIC dokumentiert. Alle Formeln unten wurden entweder aus einer quelloffenen Referenz-Implementierung übernommen (siehe Credits) oder durch eigene Testfahrten und -ladungen verifiziert – z.B. durch Gegenrechnen der geschätzten Energie gegen den tatsächlichen Ladestand-Verlauf.

Verbrauch pro Fahrt

Der Ladestand (SoC) am Fahrtanfang und -ende wird verglichen, die Differenz mit der Netto-Akkukapazität multipliziert: Verbrauch (kWh) = (SoC_Start − SoC_Ende) ÷ 100 × 61,7 kWh. Das ist der Netto-Verbrauch, Rekuperation ist darin schon automatisch berücksichtigt (sie füllt den Akku ja wieder etwas auf).

Rekuperation (grobe Schätzung)

Die Fahrzeug-Cloud liefert nur alle 30 bis 70 Sekunden einen neuen Messpunkt – einzelne Bremsvorgänge (die oft nur 2–5 Sekunden dauern) lassen sich damit nicht einzeln erfassen. Stattdessen wird für jedes Poll-Intervall die Batterieleistung geprüft: ist der Durchschnitt aus Anfangs- und Endwert negativ (Energie fließt in den Akku), wird die Energie für dieses Intervall grob draufgerechnet: Energie ≈ |Ø Leistung| × Zeitdifferenz. Das ergibt einen brauchbaren Trend, aber keine exakte Messung einzelner Bremsungen. Zusätzlich wird jedes Intervall über die GPS-Geschwindigkeit grob als Stadt (<50 km/h), Außerorts (50–100 km/h) oder Autobahn (>100 km/h) eingeordnet – kein Kartenabgleich, nur ein Geschwindigkeits-Schwellwert.

CO₂-Emissionen und -Ersparnis

Für jeden Ladevorgang wird die tatsächliche Netz-CO₂-Intensität zum Ladezeitpunkt abgefragt (ElectricityMaps, deutscher Strommix – schwankt je nach Wind-/Solaranteil im Tagesverlauf teils erheblich). Multipliziert mit den geladenen kWh ergibt das die CO₂-Emissionen dieser Ladung. Ohne verfügbaren Live-Wert (z.B. wenn kein API-Key hinterlegt ist) greift ersatzweise ein Jahres-Durchschnittswert des deutschen Strommixes (aktuell 344 g CO₂/kWh, Umweltbundesamt 2025). Für die Ersparnis wird das mit einem realistischen Vergleichswert für einen Benziner im echten Fahrbetrieb verglichen (180 g CO₂/km – die offiziellen Prüfstand-Werte liegen niedriger, real aber üblicherweise 15–20% höher):

CO₂-Ersparnis = (Strecke × 180g/km) − Σ(geladene kWh × Netz-Intensität zum Ladezeitpunkt)

Kleine technische Randnotiz, falls es jemanden interessiert: Die ElectricityMaps-API bietet sowohl einen latest- als auch einen past-Endpunkt für historische Werte an – letzterer braucht aber einen bezahlten Zugang. Deshalb fragt der Poller den kostenlosen latest-Wert live ab, genau in dem Moment, in dem eine Ladung als bestätigt erkannt wird, statt es nachträglich zu rekonstruieren.

Wie werden Ladevorgänge erkannt?

Das Fahrzeug selbst meldet einen Zeitstempel für Ladebeginn/-ende (nicht nur unsere eigenen Abfrage-Zeitpunkte) – darüber lassen sich alle Messpunkte eines Ladevorgangs zuverlässig gruppieren, auch über Poll-Lücken hinweg. Kurze, folgenlose "Selbstprüfungs-Blips" der Ladeelektronik (z.B. beim Abschalten, ganz ohne echten Energiefluss) werden über eine Mindestenergie-Schwelle herausgefiltert. AC/DC wird nicht über das naheliegende Statusfeld unterschieden (das ist mehrdeutig), sondern über die Kombination zweier Steckdosen-Statusfelder, die sich als zuverlässiger herausgestellt hat.

Reichweiten-Schätzungen im Vergleich

Das MG4 liefert intern gleich drei parallele Reichweiten-Schätzungen (vom Kombiinstrument, vom Batteriemanagementsystem, und vom Ladesteuergerät) – die meistens leicht auseinanderlaufen. Hier wird einfach die durchschnittliche Abweichung zwischen ihnen über die Zeit gemessen, aus reiner Neugier.

Batterie-Alterung (Näherung)

Es gibt kein offizielles Feld für den Batteriezustand (State of Health). Als grobe Ersatz-Kennzahl wird die angezeigte Reichweite bei (nahezu) 100% Ladestand über die Zeit getrackt – ein sinkender Wert über Monate hinweg wäre ein Hinweis auf nachlassende Kapazität. Weil Weil oft empfohlen wird, aus Langlebigkeitsgründen nur bis 80% statt 100% zu laden (technisch können MG4-Akkus natürlich auf 100%), gibt es hier nicht für jeden Monat einen Datenpunkt.

Und im passwortgeschützten Admin-Bereich (nicht öffentlich)

Ein paar weitere Berechnungen, die es gibt, aber aus Datenschutzgründen nicht auf dieser Seite auftauchen.

Abo-Modelle bei manchen Anbietern

Manche Ladeanbieter bieten Abos an: ein reduzierter Preis pro kWh gegen eine monatliche Grundgebühr (z.B. "0,42 €/kWh statt 0,55 €/kWh, dafür 12,90 €/Monat"). Der Haken dabei: der tatsächliche Preis pro kWh hängt davon ab, wie viel in diesem Monat überhaupt geladen wurde – bei wenig geladenen kWh dominiert die Grundgebühr den Preis, bei viel geladenen kWh lohnt sich das Abo deutlich. Gelöst wird das über eine laufende Abrechnungsperiode pro Kalendermonat:

Effektiver Preis = Abo-Preis pro kWh + (Grundgebühr ÷ bisher geladene kWh in diesem Monat)

Während der Monat noch läuft, ist dieser Preis vorläufig (im Admin-Bereich mit einem "~" markiert) und wird nach jeder weiteren Ladung neu berechnet – meist günstiger, je mehr in diesem Monat schon geladen wurde. Erst nach Monatsende wird er final eingefroren, zusammen mit der tatsächlichen Ersparnis gegenüber dem Standardpreis ohne Abo:

Ersparnis = geladene kWh × (Standardpreis − effektiver Abo-Preis) − Grundgebühr

Wurde in einem Monat wenig geladen, kann diese Ersparnis auch negativ ausfallen – dann hätte sich das Abo in dem Monat schlicht nicht gelohnt. Das ist bewusst so gebaut: die Zahl soll ehrlich zeigen, ob sich ein Abo wirklich rechnet, statt es künstlich schönzurechnen.

Fahrten-Kosten und -CO₂ (Näherung)

Ladekosten werden über obiges Abo-Amortisierungsmodell berechnet. Kosten/CO₂ für eine einzelne Fahrt sind dagegen eine gröbere Näherung – ein gewichteter Durchschnittspreis aus allen bisherigen Ladevorgängen, multipliziert mit dem Verbrauch dieser Fahrt, kein exaktes Energiekonto, das nachverfolgt, welche konkrete Ladung welche konkrete Fahrt "bezahlt" hat. Start-/Zieladressen von Fahrten und Ladepunkt-Adressen werden per Reverse Geocoding aufgelöst (siehe Nominatim in den Credits), mit Datenbank-Cache, weil der Dienst nur eine Anfrage pro Sekunde erlaubt.

Die Enthusiasten-Extras

Acht zusätzliche Auswertungen für alle, die es genau wissen wollen – aus denselben Daten berechnet, die ohnehin schon da sind, keine neue Datenquelle außer beim letzten Punkt (Wind). Jeder Abschnitt lässt sich einzeln aufklappen.

Was zeigt das Dashboard nicht, und warum?

Bewusste Entscheidung: Kein Standort, keine Fahrten-Karte, keine Verriegelungs- oder Alarm-Zustände, keine Kosten. Diese Seite ist öffentlich einsehbar, und nichts davon soll erkennen lassen, wo das Fahrzeug gerade ist, ob es zu Hause steht, oder ob es gerade unverschlossen ist. Was hier steht, sind bewusst nur aggregierte, technisch interessante Werte (Gesamtstrecke, Verbrauch, Rekuperation, CO₂-Bilanz) und der aktuelle Fahrzeugzustand ohne Ortsbezug (Akkustand, Reifendruck, Temperaturen). Alles mit Orts- oder Kostenbezug bleibt im passwortgeschützten Admin-Bereich.

Credits

Alle Datenquellen und die Software-Grundlage dieses Projekts, thematisch gruppiert und mit Lizenzangaben, stehen auf der eigenen Seite Quellen & Credits.