From af06279a1472681af47bd714d90d32c61e0e1bf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20K=C3=BChnel?= Date: Sat, 25 Jan 2025 16:32:02 +0100 Subject: [PATCH 1/3] fix(TeslaFleetApiService): Only allow vehicle request via Fleet API on non licensed cars --- .../Server/Services/TeslaFleetApiService.cs | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/TeslaSolarCharger/Server/Services/TeslaFleetApiService.cs b/TeslaSolarCharger/Server/Services/TeslaFleetApiService.cs index 0c0c7e59a..1a711dc0f 100644 --- a/TeslaSolarCharger/Server/Services/TeslaFleetApiService.cs +++ b/TeslaSolarCharger/Server/Services/TeslaFleetApiService.cs @@ -937,15 +937,12 @@ await errorHandlingService.HandleError(nameof(TeslaFleetApiService), nameof(Send } } - if (fleetApiRequest.BleCompatible && (!await backendApiService.IsFleetApiLicensed(car.Vin, true))) + if (fleetApiRequest.RequestUrl != VehicleRequest.RequestUrl && (!await backendApiService.IsFleetApiLicensed(car.Vin, true))) { - if (!car.UseBle) - { - 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", - issueKeys.FleetApiNotLicensed, car.Vin, null).ConfigureAwait(false); - } - + 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", + issueKeys.FleetApiNotLicensed, car.Vin, null).ConfigureAwait(false); + logger.LogError("Can not send Fleet API commands to car {vin} as car is not licensed", car.Vin); return null; } From b479be2c879fe6ac1f01004c73f7cd89acc333b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20K=C3=BChnel?= Date: Sat, 25 Jan 2025 16:45:39 +0100 Subject: [PATCH 2/3] feat(FleetTelemetryWebSocketService): log websocket client reconnection --- .../Server/Services/FleetTelemetryWebSocketService.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/TeslaSolarCharger/Server/Services/FleetTelemetryWebSocketService.cs b/TeslaSolarCharger/Server/Services/FleetTelemetryWebSocketService.cs index fda3556cd..9dd6496e5 100644 --- a/TeslaSolarCharger/Server/Services/FleetTelemetryWebSocketService.cs +++ b/TeslaSolarCharger/Server/Services/FleetTelemetryWebSocketService.cs @@ -142,6 +142,7 @@ private async Task ConnectToFleetTelemetryApi(string vin, bool includeTrackingRe using var client = new ClientWebSocket(); try { + logger.LogInformation("Connecting Fleet Telemetry for car {vin}.", vin); client.Options.SetRequestHeader("Authorization", $"Bearer {authToken.AccessToken}"); await client.ConnectAsync(new Uri(url), new CancellationTokenSource(_heartbeatsendTimeout).Token).ConfigureAwait(false); var cancellation = new CancellationTokenSource(); From 0fb1dbd7c9c6059174709bce5754a16751f6a596 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20K=C3=BChnel?= Date: Sat, 25 Jan 2025 19:56:07 +0100 Subject: [PATCH 3/3] fix(CarBasicConfigurationValidator): do not require fleet telemetry on non compatible cars --- .../ServerValidators/CarBasicConfigurationValidator.cs | 10 ++++------ TeslaSolarCharger/Shared/Dtos/CarBasicConfiguration.cs | 1 - 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/TeslaSolarCharger/Server/ServerValidators/CarBasicConfigurationValidator.cs b/TeslaSolarCharger/Server/ServerValidators/CarBasicConfigurationValidator.cs index e1577e2dc..c1b02c257 100644 --- a/TeslaSolarCharger/Server/ServerValidators/CarBasicConfigurationValidator.cs +++ b/TeslaSolarCharger/Server/ServerValidators/CarBasicConfigurationValidator.cs @@ -58,15 +58,9 @@ public CarBasicConfigurationValidator(IConfigurationWrapper configurationWrapper }); - - RuleFor(x => x.UseFleetTelemetry) .CustomAsync(async (fleetTelemetryEnabled, context, cancellationToken) => { - if (fleetTelemetryEnabled != true) - { - return; - } var tokenState = await tokenHelper.GetFleetApiTokenState(true); if (tokenState != TokenState.UpToDate) { @@ -80,6 +74,10 @@ public CarBasicConfigurationValidator(IConfigurationWrapper configurationWrapper { context.AddFailure("The selected car is not compatible with Fleet Telemetry. Please disable Fleet Telemetry."); } + else if (fleetTelemetryEnabled != true) + { + context.AddFailure("Enabling Fleet Telemetry is required and will be autodisabled if your car does not support it"); + } }); When(x => x.UseBle, () => diff --git a/TeslaSolarCharger/Shared/Dtos/CarBasicConfiguration.cs b/TeslaSolarCharger/Shared/Dtos/CarBasicConfiguration.cs index c110277d0..e881dc33a 100644 --- a/TeslaSolarCharger/Shared/Dtos/CarBasicConfiguration.cs +++ b/TeslaSolarCharger/Shared/Dtos/CarBasicConfiguration.cs @@ -61,7 +61,6 @@ public CarBasicConfigurationValidator() .WithMessage("MaximumAmpere must be greater than MinimumAmpere."); RuleFor(x => x.UsableEnergy).GreaterThan(5); RuleFor(x => x.ChargingPriority).GreaterThan(0); - RuleFor(x => x.UseFleetTelemetry).Equal(true).WithMessage("Enabling Fleet Telemetry is required and will be autodisabled if your car does not support it."); }); }