From cb2bc2398de5815712243e4e1233057469f250c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20K=C3=BChnel?= Date: Sun, 26 Jan 2025 18:39:51 +0100 Subject: [PATCH] fix(TeslaFleetApiService): allow fleet api test even on non licensed fleet api --- .../Server/Contracts/ITeslaService.cs | 4 +--- .../Server/Services/TeslaFleetApiService.cs | 20 +++++++++---------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/TeslaSolarCharger/Server/Contracts/ITeslaService.cs b/TeslaSolarCharger/Server/Contracts/ITeslaService.cs index 5672b121f..ee5cdbcaa 100644 --- a/TeslaSolarCharger/Server/Contracts/ITeslaService.cs +++ b/TeslaSolarCharger/Server/Contracts/ITeslaService.cs @@ -1,12 +1,10 @@ -using TeslaSolarCharger.Shared.Dtos; -using TeslaSolarCharger.Shared.Enums; +using TeslaSolarCharger.Shared.Enums; namespace TeslaSolarCharger.Server.Contracts; public interface ITeslaService { Task StartCharging(int carId, int startAmp, CarStateEnum? carState); - Task WakeUpCar(int carId); Task StopCharging(int carId); Task SetAmp(int carId, int amps); } diff --git a/TeslaSolarCharger/Server/Services/TeslaFleetApiService.cs b/TeslaSolarCharger/Server/Services/TeslaFleetApiService.cs index 0760c95ea..0f2cd5066 100644 --- a/TeslaSolarCharger/Server/Services/TeslaFleetApiService.cs +++ b/TeslaSolarCharger/Server/Services/TeslaFleetApiService.cs @@ -116,11 +116,11 @@ public async Task StartCharging(int carId, int startAmp, CarStateEnum? carState) } - public async Task WakeUpCar(int carId) + public async Task WakeUpCar(int carId, bool isFleetApiTest) { logger.LogTrace("{method}({carId})", nameof(WakeUpCar), carId); var car = settings.Cars.First(c => c.Id == carId); - var result = await SendCommandToTeslaApi(car.Vin, WakeUpRequest).ConfigureAwait(false); + var result = await SendCommandToTeslaApi(car.Vin, WakeUpRequest, null, true).ConfigureAwait(false); if (car.TeslaMateCarId != default) { //ToDo: fix with https://github.com/pkuehnel/TeslaSolarCharger/issues/1511 @@ -165,10 +165,10 @@ public async Task> TestFleetApiAccess(int carId) var inMemoryCar = settings.Cars.First(c => c.Id == carId); try { - await WakeUpCarIfNeeded(carId).ConfigureAwait(false); + await WakeUpCarIfNeeded(carId, true).ConfigureAwait(false); var amps = 7; var commandData = $"{{\"charging_amps\":{amps}}}"; - var result = await SendCommandToTeslaApi(vin, SetChargingAmpsRequest, amps).ConfigureAwait(false); + var result = await SendCommandToTeslaApi(vin, SetChargingAmpsRequest, amps, true).ConfigureAwait(false); var successResult = result?.Response?.Result == true; var car = teslaSolarChargerContext.Cars.First(c => c.Id == carId); car.TeslaFleetApiState = successResult ? TeslaCarFleetApiState.Ok : TeslaCarFleetApiState.NotWorking; @@ -797,7 +797,7 @@ internal DateTimeOffset RoundToNextQuarterHour(DateTimeOffset chargingStartTime) return chargingStartTime; } - private async Task WakeUpCarIfNeeded(int carId) + private async Task WakeUpCarIfNeeded(int carId, bool isFleetApiTest = false) { logger.LogTrace("{method}({carId})", nameof(WakeUpCarIfNeeded), carId); var car = settings.Cars.First(c => c.Id == carId); @@ -810,7 +810,7 @@ private async Task WakeUpCarIfNeeded(int carId) { case CarStateEnum.Offline or CarStateEnum.Asleep: logger.LogInformation("Wakeup car."); - await WakeUpCar(carId).ConfigureAwait(false); + await WakeUpCar(carId, isFleetApiTest).ConfigureAwait(false); break; case CarStateEnum.Suspended: logger.LogInformation("Resume logging as is suspended"); @@ -824,14 +824,14 @@ private async Task WakeUpCarIfNeeded(int carId) } } - private async Task?> SendCommandToTeslaApi(string vin, DtoFleetApiRequest fleetApiRequest, int? intParam = null) where T : class + private async Task?> SendCommandToTeslaApi(string vin, DtoFleetApiRequest fleetApiRequest, int? intParam = null, bool isFleetApiTest = false) where T : class { logger.LogTrace("{method}({vin}, {@fleetApiRequest}, {intParam})", nameof(SendCommandToTeslaApi), vin, fleetApiRequest, intParam); var fleetTelemetryEnabled = await teslaSolarChargerContext.Cars .Where(c => c.Vin == vin) .Select(c => c.UseFleetTelemetry) .FirstAsync(); - if (fleetTelemetryEnabled) + if (!isFleetApiTest && fleetTelemetryEnabled) { if(!fleetTelemetryWebSocketService.IsClientConnected(vin)) { @@ -856,7 +856,7 @@ await errorHandlingService.HandleError(nameof(TeslaFleetApiService), nameof(Send await errorHandlingService.HandleErrorResolved(issueKeys.BaseAppNotLicensed, null); var car = settings.Cars.First(c => c.Vin == vin); - if (fleetApiRequest.BleCompatible) + if (!isFleetApiTest && fleetApiRequest.BleCompatible) { var isCarBleEnabled = car.UseBle; @@ -949,7 +949,7 @@ await errorHandlingService.HandleError(nameof(TeslaFleetApiService), nameof(Send } } - if (fleetApiRequest.RequestUrl != VehicleRequest.RequestUrl && (!await backendApiService.IsFleetApiLicensed(car.Vin, true))) + if (!isFleetApiTest && fleetApiRequest.RequestUrl != VehicleRequest.RequestUrl && (!await backendApiService.IsFleetApiLicensed(car.Vin, true))) { await errorHandlingService.HandleError(nameof(TeslaFleetApiService), nameof(SendCommandToTeslaApi), $"Fleet API not licensed for car {car.Vin}", "Can not send Fleet API commands to car as Fleet API is not licensed",