From 7d2aaed221e805c9e77a824725f34bc4db493e1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20K=C3=BChnel?= Date: Wed, 29 Jan 2025 18:49:06 +0100 Subject: [PATCH 1/3] feat(TeslaFleetApiService): do not wakeup car more often than every 30 minutes via fleet API --- .../Server/Services/TeslaFleetApiService.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/TeslaSolarCharger/Server/Services/TeslaFleetApiService.cs b/TeslaSolarCharger/Server/Services/TeslaFleetApiService.cs index 0f2cd5066..a9d341677 100644 --- a/TeslaSolarCharger/Server/Services/TeslaFleetApiService.cs +++ b/TeslaSolarCharger/Server/Services/TeslaFleetApiService.cs @@ -960,6 +960,16 @@ await errorHandlingService.HandleError(nameof(TeslaFleetApiService), nameof(Send } await errorHandlingService.HandleErrorResolved(issueKeys.FleetApiNotLicensed, car.Vin); + if (fleetApiRequest.RequestUrl == WakeUpRequest.RequestUrl) + { + var lastWakeUp = car.WakeUpCalls.OrderByDescending(c => c).FirstOrDefault(); + if (lastWakeUp != default && lastWakeUp > dateTimeProvider.UtcNow().AddMinutes(20)) + { + logger.LogDebug("Do not send wake up command as last wake up was at {lastWakeUp}", lastWakeUp); + throw new InvalidOperationException("Do not send wake up command as last wake up was at " + lastWakeUp); + } + } + var accessToken = await teslaSolarChargerContext.BackendTokens.SingleOrDefaultAsync(); if (accessToken == default) { From e6c66ed98c1b42e2b0579fbb1b14d389d63aa793 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20K=C3=BChnel?= Date: Wed, 29 Jan 2025 18:53:33 +0100 Subject: [PATCH 2/3] fix(TeslaFleetApiService): use 30 minutes as minimum time between wakes --- TeslaSolarCharger/Server/Services/TeslaFleetApiService.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/TeslaSolarCharger/Server/Services/TeslaFleetApiService.cs b/TeslaSolarCharger/Server/Services/TeslaFleetApiService.cs index a9d341677..2b2256e4b 100644 --- a/TeslaSolarCharger/Server/Services/TeslaFleetApiService.cs +++ b/TeslaSolarCharger/Server/Services/TeslaFleetApiService.cs @@ -963,10 +963,10 @@ await errorHandlingService.HandleError(nameof(TeslaFleetApiService), nameof(Send if (fleetApiRequest.RequestUrl == WakeUpRequest.RequestUrl) { var lastWakeUp = car.WakeUpCalls.OrderByDescending(c => c).FirstOrDefault(); - if (lastWakeUp != default && lastWakeUp > dateTimeProvider.UtcNow().AddMinutes(20)) + if (lastWakeUp != default && lastWakeUp > dateTimeProvider.UtcNow().AddMinutes(-30)) { logger.LogDebug("Do not send wake up command as last wake up was at {lastWakeUp}", lastWakeUp); - throw new InvalidOperationException("Do not send wake up command as last wake up was at " + lastWakeUp); + return null; } } From df41dbd7b65555a3b6977b31fd93abb4c74e884f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20K=C3=BChnel?= Date: Wed, 29 Jan 2025 20:52:13 +0100 Subject: [PATCH 3/3] fix(ChargingService): Only skip home geofence calculation on non teslaMate --- TeslaSolarCharger/Server/Services/ChargingService.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/TeslaSolarCharger/Server/Services/ChargingService.cs b/TeslaSolarCharger/Server/Services/ChargingService.cs index 351f6e39f..43d60c98c 100644 --- a/TeslaSolarCharger/Server/Services/ChargingService.cs +++ b/TeslaSolarCharger/Server/Services/ChargingService.cs @@ -165,7 +165,9 @@ private async Task CalculateGeofences() .Select(c => new { c.UseFleetTelemetry, c.IncludeTrackingRelevantFields }) .FirstAsync(); - if (fleetTelemetrySettings.UseFleetTelemetry && !fleetTelemetrySettings.IncludeTrackingRelevantFields) + if (fleetTelemetrySettings.UseFleetTelemetry + && !fleetTelemetrySettings.IncludeTrackingRelevantFields + && configurationWrapper.GetVehicleDataFromTesla()) { logger.LogDebug("Car {carId} uses fleet telemetry but does not include tracking relevant fields. Do not calculate geofence", car.Id); car.DistanceToHomeGeofence = null;