Innovenergy_trunk/csharp/App/SaliMax/src/Log/Salimax.cs

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() }
};
}
}