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

42 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;
namespace InnovEnergy.Lib.Devices.Battery48TL;
public class Battery48TlRecords
{
public Battery48TlRecords(IReadOnlyList<Battery48TlRecord> records)
{
var empty = records.Count == 0;
2023-07-10 08:35:29 +00:00
Devices = records;
Eoc = !empty && records.All(r => r.Eoc);
Warnings = records.SelectMany(r => r.Warnings).Distinct().ToList();
Alarms = records.SelectMany(r => r.Alarms).Distinct().ToList();
2023-07-24 08:48:23 +00:00
Soc = empty ? 0 : records.Average(r => r.Soc.Value);
CurrentMinSoc = empty ? 0 : records.Min(r => r.Soc.Value);
Temperature = records.Any() ? records.Average(b => b.Temperatures.Cells.Average.Value) : 0;
HeatingCurrent = records.Any() ? records.Sum(b => b.HeatingCurrent) : 0;
2023-06-13 10:53:52 +00:00
Dc = empty
? DcBus.FromVoltageCurrent(0, 0)
: DcBus.FromVoltageCurrent
(
records.Average(r => r.Dc.Voltage),
records.Sum(r => r.Dc.Current)
);
}
2023-07-10 08:35:29 +00:00
public DcBus Dc { get; init; }
public Boolean Eoc { get; init; }
public IReadOnlyList<String> Warnings { get; init; }
public IReadOnlyList<String> Alarms { get; init; }
public Percent Soc { get; init; }
2023-07-24 08:48:23 +00:00
public Percent CurrentMinSoc { get; init; }
2023-07-10 08:35:29 +00:00
public Temperature Temperature { get; init; }
public Current HeatingCurrent { get; init; }
2023-06-13 10:53:52 +00:00
public IReadOnlyList<Battery48TlRecord> Devices { get; init; }
public static Battery48TlRecords Null => new Battery48TlRecords(Array.Empty<Battery48TlRecord>());
2023-06-13 10:53:52 +00:00
}