using InnovEnergy.Lib.Devices.Trumpf.SystemControl.DataTypes; using InnovEnergy.Lib.Devices.Trumpf.TruConvertAc.DataTypes; using InnovEnergy.Lib.Units.Composite; using AlarmMessage = InnovEnergy.Lib.Devices.Trumpf.TruConvertAc.DataTypes.AlarmMessage; using WarningMessage = InnovEnergy.Lib.Devices.Trumpf.TruConvertAc.DataTypes.WarningMessage; namespace InnovEnergy.Lib.Devices.Trumpf.TruConvertAc.Status; public class AcDcStatus { public Ac3Bus Ac => Ac3Bus.FromPhasesAndFrequency(L1, L2, L3, _Self.GridFrequency); public DcBus Dc => DcBus.FromVoltageCurrent(_Self.BatteryVoltage, _Self.BatteryCurrent); public PowerLimit PowerLimitedBy => _Self.PowerLimitedBy; public InverterStates InverterState => new(_Self); public GridType ActiveGridType => _Self.ActiveGridType; public Voltages Voltage => new(_Self); public Temperatures Temperature => new(_Self); public OverloadCapacity OverloadCapacity => new(_Self); public Nominals Nominal => new(_Self); public IReadOnlyList Alarms => GetAlarms ().Take(_Self.NumberOfAlarms ).Where(IsAcDcAlarm ).ToList(); public IReadOnlyList Warnings => GetWarnings().Take(_Self.NumberOfWarnings).Where(IsAcDcWarning).ToList(); private IEnumerable GetAlarms() { yield return _Self.Alarm1; yield return _Self.Alarm2; yield return _Self.Alarm3; yield return _Self.Alarm4; yield return _Self.Alarm5; yield return _Self.Alarm6; yield return _Self.Alarm7; yield return _Self.Alarm8; yield return _Self.Alarm9; yield return _Self.Alarm10; yield return _Self.Alarm11; yield return _Self.Alarm12; yield return _Self.Alarm13; yield return _Self.Alarm14; yield return _Self.Alarm15; yield return _Self.Alarm16; yield return _Self.Alarm17; yield return _Self.Alarm18; yield return _Self.Alarm19; yield return _Self.Alarm20; } private static Boolean IsAcDcAlarm(AlarmMessage alarm) => (UInt16)alarm is >= 50000 and < 60000; private IEnumerable GetWarnings() { yield return _Self.Warning1; yield return _Self.Warning2; yield return _Self.Warning3; yield return _Self.Warning4; yield return _Self.Warning5; yield return _Self.Warning6; yield return _Self.Warning7; yield return _Self.Warning8; yield return _Self.Warning9; yield return _Self.Warning10; yield return _Self.Warning11; yield return _Self.Warning12; yield return _Self.Warning13; yield return _Self.Warning14; yield return _Self.Warning15; yield return _Self.Warning16; yield return _Self.Warning17; yield return _Self.Warning18; yield return _Self.Warning19; yield return _Self.Warning20; } // TODO: there are no AcDc Warnings defined in doc private static Boolean IsAcDcWarning(WarningMessage warning) => warning != WarningMessage.NoWarning; private AcPhase L1 => AcPhase.FromVoltageCurrentActiveReactiveApparent ( voltageRms : _Self.GridVoltageL1, currentRms : _Self.GridCurrentL1, activePower : _Self.ActivePowerL1, reactivePower: _Self.ReactivePowerL1, apparentPower: _Self.ApparentPowerL1 ); private AcPhase L2 => AcPhase.FromVoltageCurrentActiveReactiveApparent ( voltageRms : _Self.GridVoltageL2, currentRms : _Self.GridCurrentL2, activePower : _Self.ActivePowerL2, reactivePower: _Self.ReactivePowerL2, apparentPower: _Self.ApparentPowerL2 ); private AcPhase L3 => AcPhase.FromVoltageCurrentActiveReactiveApparent ( voltageRms : _Self.GridVoltageL3, currentRms : _Self.GridCurrentL3, activePower : _Self.ActivePowerL3, reactivePower: _Self.ReactivePowerL3, apparentPower: _Self.ApparentPowerL3 ); internal AcDcStatus(AcDcRecord self) => _Self = self; private readonly AcDcRecord _Self; }