Configures fleet telemetry via API
All checks were successful
Build, Push and Run Container / build (push) Successful in 26s
All checks were successful
Build, Push and Run Container / build (push) Successful in 26s
Implements fleet telemetry configuration by first removing the existing telemetry configuration and then posting a new configuration. This configures telemetry data collection intervals and host information. Adds logging for request/response from the API.
This commit is contained in:
@@ -337,18 +337,45 @@ if (app.Environment.IsDevelopment())
|
||||
});
|
||||
}
|
||||
|
||||
app.MapGet("/FleetStatus", async (IHttpClientFactory httpClientFactory) =>
|
||||
app.MapGet("/RePair", async (ILogger logger, IHttpClientFactory httpClientFactory) =>
|
||||
{
|
||||
string access_token = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InFEc3NoM2FTV0cyT05YTTdLMzFWV0VVRW5BNCJ9.eyJpc3MiOiJodHRwczovL2ZsZWV0LWF1dGgudGVzbGEuY29tL29hdXRoMi92My9udHMiLCJhenAiOiJiMjI0MGVlNC0zMzJhLTQyNTItOTFhYS1iYmNjMjRmNzhmZGIiLCJzdWIiOiJkZDg3Mzc4OC00ZjliLTQyY2UtYmRkNi00YzdmMjQxOGMwN2UiLCJhdWQiOlsiaHR0cHM6Ly9mbGVldC1hcGkucHJkLm5hLnZuLmNsb3VkLnRlc2xhLmNvbSIsImh0dHBzOi8vZmxlZXQtYXBpLnByZC5ldS52bi5jbG91ZC50ZXNsYS5jb20iLCJodHRwczovL2ZsZWV0LWF1dGgudGVzbGEuY29tL29hdXRoMi92My91c2VyaW5mbyJdLCJzY3AiOlsib2ZmbGluZV9hY2Nlc3MiLCJvcGVuaWQiLCJ2ZWhpY2xlX2RldmljZV9kYXRhIiwidmVoaWNsZV9sb2NhdGlvbiJdLCJhbXIiOlsicHdkIl0sImV4cCI6MTc1NTU3NDk5NCwiaWF0IjoxNzU1NTQ2MTk0LCJvdV9jb2RlIjoiRVUiLCJsb2NhbGUiOiJodS1IVSIsImFjY291bnRfdHlwZSI6InBlcnNvbiIsIm9wZW5fc291cmNlIjpmYWxzZSwiYWNjb3VudF9pZCI6IjE5YTBhZjRmLTY1ZDgtNDc2MC1hYjVmLTZjMzk3ZTViMTI4ZiIsImF1dGhfdGltZSI6MTc1NTU0NjE5NCwibm9uY2UiOiI2Mzg5MTExNDkyNjE4ODc5MzUuWVdNMllUazNORFV0T1RSaVlTMDBZMlUyTFdFNU1USXRZVEUwTnpFd056WTFabU16TkRZeFpqRTJaRE10TlRjeFpDMDBaRGN3TFRrMlptVXROMk0xWTJNNU5ERmtNV1k0In0.iMODkOXyzt0_TJfuBrojbYSU7Cx_lb8DRZ_zMz-yQxZlPUA-pITfqgqgwQEqagCUJ3wlfOSxi1OSitmxPrxr9MOT8A9KUgTOSIrPxD36JHWnBmQpbkDNqNkM4MLEbbM-95p8YnFJ0VuB9_fzz0CbJyOm_oUelA2JnNhIQ5uGfJojYPM2UKN0rUx6uMAuFgc4CslPY1P43crAXrFlH6B3D2Yk47w9Xeh-Vg_ZiX-nJqMzph_ciqYRuiySJMjM3ez7EheGy50BR_esz4muit89H3nq0rURWBN3-weauu2bcWnuYp0Nk5-zFuO3O_FKuLt-1HqYH3CAeTF2JRBJHim-hA";
|
||||
string access_token = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InFEc3NoM2FTV0cyT05YTTdLMzFWV0VVRW5BNCJ9.eyJpc3MiOiJodHRwczovL2ZsZWV0LWF1dGgudGVzbGEuY29tL29hdXRoMi92My9udHMiLCJhenAiOiJiMjI0MGVlNC0zMzJhLTQyNTItOTFhYS1iYmNjMjRmNzhmZGIiLCJzdWIiOiJkZDg3Mzc4OC00ZjliLTQyY2UtYmRkNi00YzdmMjQxOGMwN2UiLCJhdWQiOlsiaHR0cHM6Ly9mbGVldC1hcGkucHJkLm5hLnZuLmNsb3VkLnRlc2xhLmNvbSIsImh0dHBzOi8vZmxlZXQtYXBpLnByZC5ldS52bi5jbG91ZC50ZXNsYS5jb20iLCJodHRwczovL2ZsZWV0LWF1dGgudGVzbGEuY29tL29hdXRoMi92My91c2VyaW5mbyJdLCJzY3AiOlsib3BlbmlkIiwib2ZmbGluZV9hY2Nlc3MiLCJ2ZWhpY2xlX2RldmljZV9kYXRhIiwidmVoaWNsZV9sb2NhdGlvbiJdLCJhbXIiOlsicHdkIl0sImV4cCI6MTc1NTgwODkzNSwiaWF0IjoxNzU1NzgwMTM1LCJvdV9jb2RlIjoiRVUiLCJsb2NhbGUiOiJodS1IVSIsImFjY291bnRfdHlwZSI6InBlcnNvbiIsIm9wZW5fc291cmNlIjpmYWxzZSwiYWNjb3VudF9pZCI6IjE5YTBhZjRmLTY1ZDgtNDc2MC1hYjVmLTZjMzk3ZTViMTI4ZiIsImF1dGhfdGltZSI6MTc1NTc4MDEzNCwibm9uY2UiOiI2Mzg5MTM3NjkyNDEzMDI0MjMuTmpBNE0yWmpOalV0Wmpkak9DMDBabVF6TFdFeVlqa3RaR05rWVRKa01HSTRZMll6TnpKa09HSTNPV0V0Wmprd055MDBPREZpTFdGbE1UQXRNbVV4WlRnME1UZG1PV00xIn0.IAfZApY-P3HkRp4U2oO_T2DUFplbGfwuOfnXihcnlmiGKxKSSSuJ5aI76pcaDg9saxrhIhg17KjmEC4gL90ByDk6P7KUMp_xot0FN1Vtwy3C8_NDltebhZdM2emR5N7QHXdP4OYAQNvHwanRwBUeQthQ8pFUk9-fDzsZhwkTjrGYtvpQKZK-pn5GCLIKLib4AemsidCtfOlObjgqTd6wf_Tdb2dkbt-ACNIueTcmfXt-eFUZVRySwrvOb5pOWAUkjTUCpW074ySJjj_TDYheQHA9aTZsDJWCUNHC-51qnawiUvh-LwYWasfFhQZQisSfSusCgpGvHRVsyuLbOtd2fQ and refresh_token: EU_dee3cce77456a4d585d78e0536427a508eeed6ab14d86238b776000590acb7cd";
|
||||
|
||||
HttpClient client = httpClientFactory.CreateClient("InsecureClient");
|
||||
client.BaseAddress = new Uri("https://tesla_command_proxy");
|
||||
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {access_token}");
|
||||
|
||||
//Get fleet_status endpoint
|
||||
var requestObject = new { vins = new string[] { "5YJ3E7EB7KF291652" } };
|
||||
string vin = "5YJ3E7EB7KF291652";
|
||||
|
||||
HttpResponseMessage response = await client.PostAsJsonAsync("/api/1/vehicles/fleet_status", requestObject);
|
||||
var resp = await client.DeleteAsync($"/api/1/vehicles/{vin}/fleet_telemetry_config");
|
||||
logger.LogInformation("Fleet telemetry remove response ({ResponseStatusCode}): {ResponseContent}): ", resp.StatusCode, await resp.Content.ReadAsStringAsync());;
|
||||
|
||||
//Get CA from validate server file
|
||||
string fileContent = await File.ReadAllTextAsync("Resources/validate_server.json");
|
||||
ValidationModel? vm = JsonSerializer.Deserialize<ValidationModel>(fileContent);
|
||||
|
||||
TelemetryConfigRequest configRequest = new TelemetryConfigRequest()
|
||||
{
|
||||
Vins = new List<string>(),
|
||||
Config = new TelemetryConfig()
|
||||
{
|
||||
Hostname = "tesla-telemetry.automatic-parking.app",
|
||||
Port = 443,
|
||||
CertificateAuthority = vm?.CA ?? "EMPTY",
|
||||
Fields = new Dictionary<string, TelemetryFieldConfig>()
|
||||
{
|
||||
{ "Gear", new TelemetryFieldConfig() { IntervalSeconds = 60 } },
|
||||
{ "Locked", new TelemetryFieldConfig() { IntervalSeconds = 60 } },
|
||||
{ "DriverSeatOccupied", new TelemetryFieldConfig() { IntervalSeconds = 60 } },
|
||||
{ "GpsState", new TelemetryFieldConfig() { IntervalSeconds = 60 } },
|
||||
{ "Location", new TelemetryFieldConfig() { IntervalSeconds = 60 } },
|
||||
}
|
||||
}
|
||||
};
|
||||
logger.LogInformation("Config request: {configRequest}", JsonSerializer.Serialize(configRequest, new JsonSerializerOptions() { WriteIndented = true }));
|
||||
|
||||
HttpResponseMessage response = await client.PostAsJsonAsync("/api/1/vehicles/fleet_telemetry_config", configRequest);
|
||||
|
||||
return Results.Ok(response.Content.ReadAsStringAsync());
|
||||
});
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
"LogLevel": {
|
||||
"Default": "Trace",
|
||||
"Microsoft.AspNetCore": "Warning",
|
||||
"System.Net.Http.HttpClient": "Warning"
|
||||
"System.Net.Http.HttpClient": "Warning",
|
||||
"Microsoft.Extensions.Http": "Information"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user