Skip to content

Commit

Permalink
feat(OldTscConfigPriceService): can get prices based on old configura…
Browse files Browse the repository at this point in the history
…tion
  • Loading branch information
pkuehnel committed Mar 10, 2024
1 parent afb1a16 commit 64a9bc6
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 4 deletions.
1 change: 1 addition & 0 deletions TeslaSolarCharger/Server/ServiceCollectionExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ public static IServiceCollection AddMyDependencies(this IServiceCollection servi
.AddTransient<IBackendApiService, BackendApiService>()
.AddTransient<ITscOnlyChargingCostService, TscOnlyChargingCostService>()
.AddTransient<IFixedPriceService, FixedPriceService>()
.AddTransient<IOldTscConfigPriceService, OldTscConfigPriceService>()
.AddSharedBackendDependencies();
if (useFleetApi)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
using TeslaSolarCharger.Server.Services.GridPrice.Dtos;

namespace TeslaSolarCharger.Server.Services.GridPrice.Contracts;

public interface IOldTscConfigPriceService : IPriceDataService
{
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
using Microsoft.EntityFrameworkCore;
using TeslaSolarCharger.Model.Contracts;
using TeslaSolarCharger.Server.Services.GridPrice.Contracts;
using TeslaSolarCharger.Server.Services.GridPrice.Dtos;

namespace TeslaSolarCharger.Server.Services.GridPrice;

public class OldTscConfigPriceService (ILogger<OldTscConfigPriceService> logger,
ITeslaSolarChargerContext teslaSolarChargerContext) : IOldTscConfigPriceService
{
public async Task<IEnumerable<Price>> GetPriceData(DateTimeOffset from, DateTimeOffset to, string? configString)
{
logger.LogTrace("{method}({from}, {to}, {configString})", nameof(GetPriceData), from, to, configString);
if (!int.TryParse(configString, out var id))
{
logger.LogError("Invalid configString: {configString}", configString);
throw new ArgumentException("Invalid configString", nameof(configString));
}
var price = await teslaSolarChargerContext.ChargePrices.FirstAsync(p => p.Id == id);
if (!price.AddSpotPriceToGridPrice)
{
return new List<Price>()
{
new()
{
ValidFrom = from,
ValidTo = to, Value = price.GridPrice,
SolarPrice = price.SolarPrice,
},
};
}
var spotPrices = await teslaSolarChargerContext.SpotPrices
.Where(p => p.EndDate >= from && p.StartDate <= to)
.OrderBy(p => p.StartDate)
.ToListAsync();
var result = new List<Price>();
foreach (var spotPrice in spotPrices)
{
var gridPriceDuringThisSpotPrice = price.GridPrice + spotPrice.Price + spotPrice.Price * price.SpotPriceCorrectionFactor;
result.Add(new Price
{
ValidFrom = new DateTimeOffset(spotPrice.StartDate, TimeSpan.Zero),
ValidTo = new DateTimeOffset(spotPrice.EndDate, TimeSpan.Zero),
Value = gridPriceDuringThisSpotPrice,
SolarPrice = price.SolarPrice,
});
}
return result;
}
}
14 changes: 10 additions & 4 deletions TeslaSolarCharger/Server/Services/TscOnlyChargingCostService.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using Microsoft.EntityFrameworkCore;
using System.Runtime.InteropServices.JavaScript;
using TeslaSolarCharger.Model.Contracts;
using TeslaSolarCharger.Model.Entities.TeslaSolarCharger;
using TeslaSolarCharger.Server.Services.ApiServices.Contracts;
Expand Down Expand Up @@ -94,23 +93,30 @@ private async Task<List<Price>> GetPricesInTimeSpan(DateTime from, DateTime to)
.Where(c => c.ValidSince < from)
.OrderByDescending(c => c.ValidSince)
.FirstAsync();
var fromDateTimeOffset = new DateTimeOffset(from, TimeSpan.Zero);
var toDateTimeOffset = new DateTimeOffset(to, TimeSpan.Zero);
IPriceDataService priceDataService;
var prices = new List<Price>();
switch (chargePrice.EnergyProvider)
{
case EnergyProvider.Octopus:
break;
case EnergyProvider.Tibber:
break;
case EnergyProvider.FixedPrice:
var priceDataService = serviceProvider.GetRequiredService<IFixedPriceService>();
var prices = await priceDataService.GetPriceData(from, to, chargePrice.EnergyProviderConfiguration).ConfigureAwait(false);
return prices.ToList();
priceDataService = serviceProvider.GetRequiredService<IFixedPriceService>();
prices = (await priceDataService.GetPriceData(fromDateTimeOffset, toDateTimeOffset, chargePrice.EnergyProviderConfiguration).ConfigureAwait(false)).ToList();
return prices;
case EnergyProvider.Awattar:
break;
case EnergyProvider.Energinet:
break;
case EnergyProvider.HomeAssistant:
break;
case EnergyProvider.OldTeslaSolarChargerConfig:
priceDataService = serviceProvider.GetRequiredService<IOldTscConfigPriceService>();
prices = (await priceDataService.GetPriceData(fromDateTimeOffset, toDateTimeOffset, chargePrice.Id.ToString()).ConfigureAwait(false)).ToList();
return prices;
break;
default:
throw new ArgumentOutOfRangeException();
Expand Down

0 comments on commit 64a9bc6

Please sign in to comment.