using InnovEnergy.Lib.Units; namespace InnovEnergy.Lib.Devices.BatteryDeligreen; public class BatteryDeligreenRecords { //public required DcBus Dc { get; init; } public required Current Current { get; init; } public required Voltage Voltage { get; init; } public required Percent Soc { get; init; } public required Double Soh { get; init; } public required Percent CurrentMinSoc { get; init; } public required Temperature TemperatureCell1 { get; init; } public required Double Power { get; init; } public required Voltage LowestCellVoltage { get; init; } public required Voltage HighestCellVoltage { get; init; } // public required Temperature TemperatureCell2 { get; init; } // public required Temperature TemperatureCell3 { get; init; } // public required Temperature TemperatureCell4 { get; init; } // to continue other temperature public required IReadOnlyList Devices { get; init; } public static BatteryDeligreenRecords? FromBatteries(IReadOnlyList? records) { if (records is null || records.Count == 0) { Console.WriteLine("FromBatteries: either record is null or empty"); return null; } return new BatteryDeligreenRecords { Devices = records, Soc = records.Average(r => r.BatteryDeligreenDataRecord.Soc.Value), Soh = records.Average(r => r.BatteryDeligreenDataRecord.Soh), CurrentMinSoc = records.Min(r => r.BatteryDeligreenDataRecord.Soc.Value), TemperatureCell1 = records.Average(b => b.BatteryDeligreenDataRecord.TemperaturesList.CellTemperature1), Current = records.Sum(r =>r.BatteryDeligreenDataRecord.BusCurrent), Voltage = records.Average(r =>r.BatteryDeligreenDataRecord.BusVoltage), Power = records.Sum(r => r.BatteryDeligreenDataRecord.Power), LowestCellVoltage = records.Min(r => r.BatteryDeligreenDataRecord.CellVoltage.Min()), HighestCellVoltage = records.Max(r => r.BatteryDeligreenDataRecord.CellVoltage.Max()) }; } }