93 lines
3.2 KiB
C#
93 lines
3.2 KiB
C#
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<JsonNode?> 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() }
|
|
};
|
|
}
|
|
} |