Innovenergy_trunk/csharp/Lib/Devices/WITGrowatt4-15K/BatteriesRecord.cs

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))
};
}
}