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.