45 lines
1.8 KiB
C#
45 lines
1.8 KiB
C#
using System.Collections.Generic;
|
|
using BattSim.Models;
|
|
|
|
namespace BattSim.Services
|
|
{
|
|
public static class BatterySimulator
|
|
{
|
|
public static List<BatteryDayResult> SimulateBattery(EnergyData[] data, double batteryCapacity)
|
|
{
|
|
var results = new List<BatteryDayResult>();
|
|
double remainingEnergy = 0;
|
|
|
|
foreach (var day in data)
|
|
{
|
|
// Charge battery from production
|
|
var totalProduction = day.DayProduction + day.NightProduction;
|
|
var chargedEnergy = System.Math.Min(totalProduction, batteryCapacity);
|
|
var excessProduction = totalProduction - chargedEnergy;
|
|
|
|
// Use battery for consumption
|
|
var totalConsumption = day.DayConsumption + day.NightConsumption;
|
|
var usedEnergy = System.Math.Min(chargedEnergy + remainingEnergy, totalConsumption);
|
|
var remainingAfterUse = chargedEnergy + remainingEnergy - usedEnergy;
|
|
|
|
// Calculate reduced values
|
|
var reducedConsumption = System.Math.Min(usedEnergy, totalConsumption);
|
|
var reducedProduction = totalProduction - chargedEnergy;
|
|
|
|
results.Add(new BatteryDayResult
|
|
{
|
|
Date = day.Date,
|
|
ChargedEnergy = chargedEnergy,
|
|
UsedEnergy = usedEnergy,
|
|
RemainingEnergy = remainingAfterUse,
|
|
ReducedConsumption = reducedConsumption,
|
|
ReducedProduction = reducedProduction
|
|
});
|
|
|
|
remainingEnergy = remainingAfterUse;
|
|
}
|
|
|
|
return results;
|
|
}
|
|
}
|
|
} |