using System.Text.Json.Nodes; using InnovEnergy.App.SaliMax.Controller; using InnovEnergy.Lib.StatusApi; using InnovEnergy.Lib.Time.Unix; namespace InnovEnergy.App.SaliMax.Log; public static class Salimax { public static JsonObject ToLog(this StatusRecord s, UnixTime timestamp) { return new JsonObject { { "TimeStamp", timestamp.ToString()! }, { "Devices", CreateDevices(s) } }; } private static JsonArray CreateDevices(StatusRecord s) { var devices = GetDevices(s).Where(d => d != null).ToArray(); return new JsonArray(devices); } private static IEnumerable GetDevices(StatusRecord s) { yield return s.InverterStatus.Log(); yield return s.DcDcStatus.Log("3214"); yield return s.GridMeterStatus.Log(DeviceType.Grid , "123"); yield return s.AcInToAcOutMeterStatus.Log(DeviceType.AcInToAcOut, "123"); yield return s.AmptStatus.Log(); yield return s.BatteriesStatus![0].Log(); yield return s.BatteriesStatus[1].Log(); } private static JsonArray CreateTopology() { var acInBusJson = JsonUtil.CreateBus ( name: "AcIn", left: JsonUtil.Port(DeviceType.Grid, BusPort.Ac), top: JsonUtil.Port(DeviceType.PvOnAcIn, BusPort.Ac), bottom: JsonUtil.Port(DeviceType.Load, BusPort.Infer), right: JsonUtil.Port(DeviceType.AcInToAcOut, BusPort.Ac, false) ); var acOutBusJson = JsonUtil.CreateBus ( name: "AcOut", left: JsonUtil.Port(DeviceType.AcInToAcOut, BusPort.Ac, false), top: JsonUtil.Port(DeviceType.PvOnAcOut, BusPort.Ac), bottom: JsonUtil.Port(DeviceType.CriticalLoad, BusPort.Infer), right: JsonUtil.Port(DeviceType.Inverter, BusPort.Ac) ); var inverterJson = JsonUtil.CreateBus ( name: "Inverter", left: JsonUtil.Port(DeviceType.Inverter, BusPort.Ac), top: JsonUtil.Port(DeviceType.None, BusPort.None), bottom: JsonUtil.Port(DeviceType.Losses, BusPort.Infer), right: JsonUtil.Port(DeviceType.Inverter, BusPort.Dc) ); var dcBusJson = JsonUtil.CreateBus ( name: "Dc", left: JsonUtil.Port(DeviceType.Inverter, BusPort.Dc), top: JsonUtil.Port(DeviceType.PvOnDc, BusPort.Dc), bottom: JsonUtil.Port(DeviceType.DcLoad, BusPort.Infer), right: JsonUtil.Port(DeviceType.DcDc, BusPort.Dc) ); var dcDcJson = JsonUtil.CreateBus ( name: "DcDc", left: JsonUtil.Port(DeviceType.DcDc, BusPort.Dc), top: JsonUtil.Port(DeviceType.None, BusPort.None), bottom: JsonUtil.Port(DeviceType.Losses, BusPort.Infer), right: JsonUtil.Port(DeviceType.Battery, BusPort.Dc) ); return new JsonArray(acInBusJson, acOutBusJson, inverterJson, dcBusJson, dcDcJson); } public static JsonObject TopologyToLog(UnixTime timestamp) { return new JsonObject { { "Topology", CreateTopology() } }; } }