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