2023-06-13 10:53:52 +00:00
|
|
|
using InnovEnergy.Lib.Units;
|
|
|
|
using InnovEnergy.Lib.Units.Composite;
|
2023-08-30 11:38:50 +00:00
|
|
|
using InnovEnergy.Lib.Units.Power;
|
2023-06-13 10:53:52 +00:00
|
|
|
|
|
|
|
namespace InnovEnergy.Lib.Devices.Battery48TL;
|
|
|
|
|
|
|
|
public class Battery48TlRecords
|
|
|
|
{
|
2023-09-12 17:31:39 +00:00
|
|
|
public required DcBus Dc { get; init; }
|
|
|
|
public required Boolean Eoc { get; init; }
|
|
|
|
public required IReadOnlyList<String> Warnings { get; init; }
|
|
|
|
public required IReadOnlyList<String> Alarms { get; init; }
|
|
|
|
public required Percent Soc { get; init; }
|
|
|
|
public required Percent CurrentMinSoc { get; init; }
|
|
|
|
public required Temperature Temperature { get; init; }
|
|
|
|
public required DcPower HeatingPower { get; init; }
|
2023-09-18 09:15:18 +00:00
|
|
|
public required TimeSpan TimeSinceToc { get; init; }
|
2023-09-01 12:14:34 +00:00
|
|
|
public required Boolean CalibrationChargeRequested { get; init; }
|
2023-08-30 14:47:28 +00:00
|
|
|
|
|
|
|
public required IReadOnlyList<Battery48TlRecord> Devices { get; init; }
|
|
|
|
|
|
|
|
public static Battery48TlRecords? FromBatteries(IReadOnlyList<Battery48TlRecord>? records)
|
2023-06-13 10:53:52 +00:00
|
|
|
{
|
2023-08-30 14:47:28 +00:00
|
|
|
if (records is null || records.Count == 0)
|
|
|
|
return null;
|
2023-06-13 10:53:52 +00:00
|
|
|
|
2023-08-30 14:47:28 +00:00
|
|
|
return new Battery48TlRecords
|
|
|
|
{
|
2023-09-01 12:14:34 +00:00
|
|
|
Devices = records,
|
|
|
|
Eoc = records.All(r => r.Eoc),
|
|
|
|
Warnings = records.SelectMany(r => r.Warnings).Distinct().ToList(),
|
|
|
|
Alarms = records.SelectMany(r => r.Alarms).Distinct().ToList(),
|
|
|
|
Soc = records.Average(r => r.Soc.Value),
|
|
|
|
CurrentMinSoc = records.Min(r => r.Soc.Value),
|
|
|
|
Temperature = records.Average(b => b.Temperatures.Cells.Average.Value),
|
|
|
|
HeatingPower = records.Sum(b => b.HeatingPower),
|
|
|
|
TimeSinceToc = records.Max(r => r.TimeSinceTOC),
|
|
|
|
CalibrationChargeRequested = records.Any(r => r.CalibrationChargeRequested),
|
2023-08-31 13:16:20 +00:00
|
|
|
|
2023-08-31 12:16:09 +00:00
|
|
|
Dc = new()
|
|
|
|
{
|
|
|
|
Voltage = records.Average(r => r.Dc.Voltage),
|
|
|
|
Current = records.Sum(r => r.Dc.Current),
|
|
|
|
}
|
2023-08-30 14:47:28 +00:00
|
|
|
};
|
2023-06-13 10:53:52 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|