Die Geschwindigkeit wird in m/s angegeben: 40 m/s * 3,6 → 144 km/h.
Danke, da wäre ich nie drauf gekommen.
Wäre es möglich die Einheiten in die Header-Zeile zu schreiben? Bei power und batteryLevel bin schon wieder am raten…
Das ist alles in der API-Dokumentation beschrieben:
Super – danke euch, das freut mich!
Gute Idee! Habe ich tatsächlich noch nicht ausprobiert.
Werde das die Tage mal machen und berichten …
Servus zusammen,
bin dabei das ganze auch mal zu Testen, da mich Metriken und Meta Daten auch beruflich sehr interessieren.
Anbei ein paar Screenshots, evtl hilft es dem ein oder anderen:
-
Mit Google Konto anmelden und neues Google Sheet erstellen.
→
-
Im Menü:
Extensions
→Apps Script
-
Code einfügen:
-
Deploy
→ bei „Select type“ auf das Zahnrädchen-Icon klicken →Web App
.
„Execute as“: me
„Who has access“: Anyone
Dann aufDeploy
.
Authorize access
→ Google Account auswählen → Dann aufAdvanced
und aufGo to project (unsafe)
klicken →Allow
Jetzt bleibt mir nur noch die Frage, wo ich im Polestar 2 die CSV eintragen kann, evtl. kann mir hier einer von Euch aushelfen …
Danke im voraus.
in der carstats viewer app. Mehr dazu ist hier in der doku:
bzw. wenn du die noch nicht installiert hast dann findest du hier mehr infos:
Danke fürs teilen, in der Tat habe ich die App noch nicht installiert.
Warte aktuell auf Teilnahme in einem Test Track.
Also erstmal abwarten und Tee trinken
Habe heute mal auf den Upload Button gedrückt. Charging Sessions kamen vollständig an. Driving Points nur teilweise, der Rest gar nicht.
Eine Vermutung wäre, dass Google irgendwann dicht macht wegen zu vielen schnellen Aufrufen des Endpunkts, oder zu vielen Daten … ?
Wie genau werden denn die Daten beim Upload gesendet (alles auf einmal in einem JSON Paket oder „häppchenweise“) und in welchem Format (gleich wie sonst auch)?
Das Format ist exakt identisch wie bei den „Echtzeit“-Daten. Allerdings werden die Datenpunkte gruppiert. Es werden also immer mehrere gemeinsam verschickt, damit ein einzelner Request nicht zu groß wird. Das ganze ist dann einfach ein JSON-Array. Übertragen werden auch nur die „Drive Point“-Daten, die sowieso regulär gespeichert werden. Die Daten, die alle paar Sekunden gesendet werden können, werden nicht lokal gespeichert. Das sieht dann von der Struktur her in etwa so aus:
{
"alt":0,
"ambientTemperature":0,
//...
"drivingPoints": [
{...},
//...
{...}
],
"chargingSessions": [...]
}
Kann es sein, dass das Skript die Arrays nicht vernünftig auswertet und jeweils nur der erste Datenpunkt übernommen wird?
Ansonsten wäre es durchaus denkbar, dass Google da irgendwann dicht macht
Okay, das heißt …
- DrivingPoints (alle 100m): wird gesendet
- ChargingSessions: wird gesendet
- ChargingPoints: wird nicht gesendet
- LiveData (alle 5s): wird nicht gesendet
Korrekt?
Dann scheint es prinzipiell ja zu funktionieren. Ich teste nochmal.
Gibt es eine einfache Möglichkeit wie ich die URL in den CSV bekomme?
Ich muss die Web-App URL angeben, richtig?
Also Benutzername und Passwort dann entsprechend meine Googledaten?
Genau – die Web App URL im CSV eintragen. Ist viel zu lang um das händisch zu machen…
Ich hab mir die URL am Rechner als Notiz in Google Keep notiert, dann im Auto mit Vivaldi Browser aufgerufen, kopiert, und schließlich im CSV eingefügt.
Läuft, danke fürs howto
Hi @jonas
Drei schnelle Fragen dazu:
- Wie lange dauert ein initialer Upload?
- Kann man das während der Fahrt machen?
- Legt er dabei eine Tabelle an und ergänzt die später um weitere Einträge?
-
So lange du den Gesamt-Daten-Export nicht startest gibt es keinen initialen Upload. Die Datenerfassung im Google Sheet startet mit den ersten gesendeten „Live“-Daten.
Den Daten-Export selbst habe ich in der Vergangenheit nur einmal getestet, mit mittlerem Erfolg (siehe weiter oben). Du kannst es ja einfach mal probieren … -
Ob der Daten-Export während der Fahrt funktioniert, weiß ich nicht. @Ixam97 ?
-
Genau, die ersten Daten die beim Google Sheet ankommen legen jeweils die Tabellen Sheets an, alle weiteren Daten werden als Zeilen angefügt.
15min gewartet.
CSV sagt, dass Upload erfolgreich ist.
Tabelle ist allerdings leer.
Das hängt davon ab, wie viele Daten bereits in CSV gespeichert sind. Pauschal lässt sich das nicht sagen.
Ich bin selber noch nicht dazu gekommen, die Sheets-Lösung mal auszuprobieren. Wenn ich die Zeit finde werde ich das mal machen und schauen, wo es klemmt.
Funktioniert denn die Speicherung der „Live“ Daten in der Tabelle?
Also bei mir hat das leider jeweils nicht geklappt.
Ich brauche eigentlich nur mal die Daten in einer strukturierten Form. Würde das gerne mal im Detail auswerten (z.B. alle Fahrten über 200km mit Geschwindigkeit/Verbrauch vergleichen).
Hallo,
das ist mein erster Beitrag hier und ich möchte zunächst ein ganz herzliches Dankeschön an @Ixam97 und @jonas richten. Der Car Stats Viewer leistet mir wirklich gute Dienste. Ich habe das Programm seit ich meinen C40 fahre in Nutzung.
Leider war es mir nicht gelungen die LiveDaten an einen Webhook in meinem Hausautomatisierungssystem IOBroker zu binden bzw. an meinen Traccar-Server zu übergeben. Nach vielen misslungenen Versuchen gehe ich nun den Umweg über den von @jonas gezeigten Weg der Google-Sheets. Sein Script habe ich ergänzt um die Livedaten an Traccar zu senden. Nachdem diese Daten dort agekommen sind, können diese über den verfügbaren Traccar-Adapter in IOBroker abgebildet werden. In IOBroker benötige ich besonders den SoC-Wert des Volvos, um PV-gestütztes Laden zu optimieren.
Vielleicht interessiert es hier auch den ein oder anderen etwas genauer, deshalb hier meine Ergänzungen zum App-Script von @jonas zum Nachbauen.
Für Traccar bereite ich die Daten nach dem QSMAND-Protokoll auf, welches standardmäßig auf Port 5055 erwartet wird. Da Google mit der Angabe des Ports im Script scheinbar nicht umgehen kann (oder ich habe nicht verstanden wie das richtig gemacht wird?) habe ich mir einen Reverse-Proxy eingerichtet, der mir den https-Port 443 auf intern http und Port 5055 umleitet.
function traccar_update_position(fTimeStamp, fLatitude, fLongitude, fAltitude, fSpeed, fSoC,
fBatteryLevel, fChargePortConnected, bIgnitionState, fPower,
cSelectedGear, fAmbientTemperature) {
var
url = "https://osmand.meinserver.123/?deviceid=C40"; // Server und DeviceID
var content = "%s×tamp=%d&lat=%f&lon=%f&altitude=%1f&speed=%1f&capacity=%1d&batteryLevel=%1f" +
"&ambientTemperature=%1f&charge=%1s&ignition=%1s&selectedGear=%1s&EnginePower=%1f";
var sRequest = Utilities.formatString(content, url,
fTimeStamp, fLatitude, fLongitude, fAltitude,
fSpeed * 1.94384, fBatteryLevel, fSoC * 100, fAmbientTemperature,
fChargePortConnected, bIgnitionState, cSelectedGear,
fPower);
Logger.log(sRequest);
var response = UrlFetchApp.fetch(sRequest, { 'muteHttpExceptions': true });
Logger.log('response: ', response);
};
Traccar erwartet die Geschwindigkeit in Knoten, daher die Umrechnung fSpeed * 1.94384
und der Batterielevel (SoC) wird in % fSoC * 100
benötigt.
Die Domain muss entsprechend angepasst werden und die Kennung des Gerätes, in meinem Fall einfach „C40“ im Traccar-Server eingerichtet werden.
Natürlich muss diese Funktion noch an der passenden Stelle in @jonas Script eingebunden werden. Das erfolgt am Ende der function processData
mit folgenden Zeilen:
// send LiveData to Traccar-Server
if (sheetName === "LiveData") {
fAltitude = rows[0][0]; // Altitude
fAmbientTemperature = rows[0][1]; // Umgebungstemperartur
fBatteryLevel = rows[0][4]; // HV Battery Level in Wh
fChargePortConnected = rows[0][5];
bIgnitionState = rows[0][6];
fLatitude = rows[0][7]; // Latitude
fLongitude = rows[0][8]; // Longitude
fPower = rows[0][9];
cSelectedGear = rows[0][10];
fSpeed = rows[0][11]; // Speed in m/s
fSoC = rows[0][12]; // HV Battery State of CHarge
fTimeStamp = rows[0][13];
traccar_update_position(fTimeStamp, fLatitude, fLongitude, fAltitude, fSpeed, fSoC,
fBatteryLevel, fChargePortConnected, bIgnitionState, fPower,
cSelectedGear, fAmbientTemperature);
}
Sieht etwas verwirrend aus, aber die Datenfelder müssen ja auch passend für das OSMAND-Protokoll umsortiert werden.
Gruß Andreas.