using InnovEnergy.Lib.Protocols.Modbus.Channels; using InnovEnergy.Lib.Protocols.Modbus.Clients; using InnovEnergy.Lib.Protocols.Modbus.Slaves; using InnovEnergy.Lib.Utils; namespace InnovEnergy.Lib.Devices.WITGrowatt4_15K; public class WITGrowattDevices { private readonly IEnumerable> _AcDcs; private readonly IReadOnlyList _Devices; public WITGrowattDevices(IReadOnlyList devices) => _Devices = devices; public WitGrowattDevicesRecord? Read() { var records = _Devices .Select(TryRead) .NotNull() .ToList(); return new WitGrowattDevicesRecord(records); } private static WITGrowatRecord? TryRead(WITGrowatDevice d) { try { return d.Read(); } catch (Exception e) { Console.WriteLine($"Failed to read Battery node {d.SlaveId}\n{e.Message}"); // TODO: log return null; } } public void Write(WitGrowattDevicesRecord r) { try { foreach (var (ctrl, device) in r.Devices.Zip(_AcDcs)) { device.Write(ctrl); } } catch (Exception e) { Console.WriteLine(e); // TODO: log } } }