39 lines
1.7 KiB
C#
39 lines
1.7 KiB
C#
using InnovEnergy.Lib.Devices.WITGrowatt4_15K.DataType;
|
|
using InnovEnergy.Lib.Units;
|
|
using InnovEnergy.Lib.Units.Power;
|
|
|
|
namespace InnovEnergy.Lib.Devices.WITGrowatt4_15K;
|
|
|
|
public class BatteriesRecord
|
|
{
|
|
public required IReadOnlyList<BatteryRecord> Batteries { get; init; }
|
|
|
|
public required Percent AverageSoc { get; init; }
|
|
public required Double AverageSoh { get; init; }
|
|
public required Percent LowestSoc { get; init; }
|
|
public required DcPower Power { get; init; }
|
|
public required DcPower TotalMaxCharge { get; init; }
|
|
public required DcPower TotalMaxDischarge { get; init; }
|
|
public required Energy TotalChargeEnergy { get; init; }
|
|
public required Energy TotalDischargeEnergy { get; init; }
|
|
|
|
public static BatteriesRecord? FromBatteries(IReadOnlyList<BatteryRecord>? records)
|
|
{
|
|
if (records is null || records.Count == 0)
|
|
return null;
|
|
|
|
return new BatteriesRecord
|
|
{
|
|
Batteries = records,
|
|
AverageSoc = records.Average(r => r.Soc.Value),
|
|
AverageSoh = records.Average(b => b.Soh),
|
|
LowestSoc = new Percent(records.Min(b => b.Soc.Value)),
|
|
Power = new DcPower(records.Sum(b => b.Power.Value)),
|
|
TotalMaxCharge = new DcPower(records.Sum(b => b.MaxAllowableChargePower.Value)),
|
|
TotalMaxDischarge = new DcPower(records.Sum(b => b.MaxAllowableDischargePower.Value)),
|
|
TotalChargeEnergy = new Energy(records.Sum(b => b.DailyChargeEnergy.Value)),
|
|
TotalDischargeEnergy = new Energy(records.Sum(b => b.DailyDischargeEnergy.Value))
|
|
};
|
|
}
|
|
}
|