Innovenergy_trunk/csharp/Lib/Devices/Battery48TL/Battery48TlRecords.cs

44 lines
1.8 KiB
C#
Raw Normal View History

2023-06-13 10:53:52 +00:00
using InnovEnergy.Lib.Units;
using InnovEnergy.Lib.Units.Composite;
using InnovEnergy.Lib.Units.Power;
2023-06-13 10:53:52 +00:00
namespace InnovEnergy.Lib.Devices.Battery48TL;
public class Battery48TlRecords
{
2023-08-30 14:47:28 +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; }
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
{
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),
2023-08-30 14:47:28 +00:00
Dc = DcBus.FromVoltageCurrent
(
records.Average(r => r.Dc.Voltage),
records.Sum(r => r.Dc.Current)
)
};
2023-06-13 10:53:52 +00:00
}
}