From 22df3817551ab6de6aeb7704225ca23fc6e65efe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Szak=C3=A1ts=20Alp=C3=A1r=20Zsolt?= Date: Mon, 25 Aug 2025 08:49:57 +0200 Subject: [PATCH] Enables location and gear testing via API Adds query parameters for latitude and longitude to the `/TestStartParking` endpoint, allowing to simulate different locations. Adds logic to set the gear to "P" if the received value is null to cover edge cases. Ensures asynchronous message processing by awaiting the result of ProcessMessage to prevent potential race conditions. --- Source/ProofOfConcept/Program.cs | 4 ++-- Source/ProofOfConcept/Services/MQTTClient.cs | 2 +- Source/ProofOfConcept/Services/MessageProcessor.cs | 4 +++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Source/ProofOfConcept/Program.cs b/Source/ProofOfConcept/Program.cs index ac39edf..5952062 100644 --- a/Source/ProofOfConcept/Program.cs +++ b/Source/ProofOfConcept/Program.cs @@ -419,11 +419,11 @@ app.MapGet("/Status", async ([FromServices] ILogger logger, [FromS return Results.Ok(sb.ToString()); }); -app.MapGet("/TestStartParking", async ([FromServices] ILogger logger, [FromServices] MessageProcessor messageProcessor) => +app.MapGet("/TestStartParking", async ([FromQuery] double latitude, [FromQuery] double longitude, [FromServices] ILogger logger, [FromServices] MessageProcessor messageProcessor) => { logger.LogTrace("Test Start Parking..."); - await messageProcessor.ProcessMessage("5YJ3E7EB7KF291652", "location", "{\"latitude\":47.410323,\"longitude\":19.067579}"); + await messageProcessor.ProcessMessage("5YJ3E7EB7KF291652", "location", $"{{\"latitude\":{latitude},\"longitude\":{longitude}}}"); await messageProcessor.ProcessMessage("5YJ3E7EB7KF291652", "gear", "P"); await messageProcessor.ProcessMessage("5YJ3E7EB7KF291652", "locked", "true"); await messageProcessor.ProcessMessage("5YJ3E7EB7KF291652", "driverseatoccupied", "false"); diff --git a/Source/ProofOfConcept/Services/MQTTClient.cs b/Source/ProofOfConcept/Services/MQTTClient.cs index e36c330..16f3b58 100644 --- a/Source/ProofOfConcept/Services/MQTTClient.cs +++ b/Source/ProofOfConcept/Services/MQTTClient.cs @@ -35,7 +35,7 @@ public class MQTTClient : IHostedService string? message = Encoding.UTF8.GetString(e.ApplicationMessage.Payload); logger.LogInformation("Message received: {Message}", message); - messageProcessor.ProcessMessage(vin, field.ToLowerInvariant(), message.StripQuotes()); + messageProcessor.ProcessMessage(vin, field.ToLowerInvariant(), message.StripQuotes()).GetAwaiter().GetResult(); } else logger.LogWarning("Topic not passed to message processor: {Topic}", topic); diff --git a/Source/ProofOfConcept/Services/MessageProcessor.cs b/Source/ProofOfConcept/Services/MessageProcessor.cs index 52e1b0f..30bf881 100644 --- a/Source/ProofOfConcept/Services/MessageProcessor.cs +++ b/Source/ProofOfConcept/Services/MessageProcessor.cs @@ -41,7 +41,9 @@ public class MessageProcessor string[] validGears = [ "P", "R", "N", "D", "SNA" ]; if (field == "gear" && validGears.Contains(value)) this.teslaState.Gear = value; - + else if (field == "gear" && value == "null") + this.teslaState.Gear = "P"; + else if (field == "locked" && bool.TryParse(value, out bool locked)) this.teslaState.Locked = locked;