using InnovEnergy.Lib.Devices.Battery48TL; namespace InnovEnergy.App.SaliMax.Controller; public class AvgBatteriesStatus { public Decimal Soc { get; set; } public Decimal Current { get; set; } public Decimal Voltage { get; set; } public Decimal Power { get; set; } public Decimal BusVoltage { get; set; } public Decimal BatteryTemperature { get; set; } public IReadOnlyList Warnings { get; set; } public IReadOnlyList Alarms { get; set; } public Boolean HeaterOn { get; set; } public Boolean EocReached { get; set; } public Boolean BatteryCold { get; set; } public Decimal MaxChargingPower { get; set; } public Decimal MaxDischargingPower { get; set; } public static AvgBatteriesStatus ReadBatteriesStatus(IReadOnlyList batteriesStatus) { var soc = batteriesStatus.Any() ? batteriesStatus.Average(b => b.Soc) : 0; var current = batteriesStatus.Select(b => b.Dc.Current).Aggregate(0m,(a, b) => a + b); var voltage = batteriesStatus.Any() ? batteriesStatus.Average(b => b.Dc.Voltage) : 0; var power = batteriesStatus.Select(b => b.Dc.Power).Aggregate(0m,(a, b) => a + b); var busVoltage = batteriesStatus.Any() ? batteriesStatus.Average(b => b.BusVoltage): 0; var batteryTemperature = batteriesStatus.Any() ? batteriesStatus.Average(b => b.Temperature): 0; var heaterOn = batteriesStatus.Any() && batteriesStatus.Select(b => b.HeaterOn).Aggregate((a, b) => a | b); var eocReached = batteriesStatus.All(b => b.EocReached); var batteryCold = batteriesStatus.Any(b => b.BatteryCold); var maxChargingPower = batteriesStatus.Select(b => b.MaxChargingPower).Aggregate(0m, (a, b) => a + b); var maxDischargingPower = batteriesStatus.Select(b => b.MaxDischargingPower).Aggregate(0m, (a, b) => a + b); return new AvgBatteriesStatus { Soc = soc, Current = current, Voltage = voltage, Power = power, BusVoltage = busVoltage, BatteryTemperature = batteryTemperature, HeaterOn = heaterOn, EocReached = eocReached, BatteryCold = batteryCold, MaxChargingPower = maxChargingPower, MaxDischargingPower = maxDischargingPower }; } }