Files
mapo-iob-libs/EgwProxy.Shelly/Converters/EMDtoConverter.cs
T
2025-08-07 08:35:34 +02:00

101 lines
3.9 KiB
C#

using EgwProxy.Shelly.DTO.Gen2;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EgwProxy.Shelly.Converters
{
public class EMDtoConverter : JsonConverter<EMDto>
{
public override EMDto ReadJson(JsonReader reader, Type objectType, EMDto existingValue, bool hasExistingValue, JsonSerializer serializer)
{
JObject obj = JObject.Load(reader);
var dto = new EMDto
{
Id = (int)obj["id"],
NeutralCurrent = obj["n_current"]?.ToObject<double?>() ?? 0,
TotalCurrent = (double)obj["total_current"],
TotalActivePower = (double)obj["total_act_power"],
TotalApparentPower = (double)obj["total_aprt_power"],
UserCalibratedPhase = obj["user_calibrated_phase"]?.ToObject<List<string>>() ?? new List<string>(),
Errors = obj["errors"]?.ToObject<List<string>>() ?? new List<string>()
};
dto.PhaseA = new PhaseDataDto
{
Current = (double)obj["a_current"],
Voltage = (double)obj["a_voltage"],
ActivePower = (double)obj["a_act_power"],
ApparentPower = (double)obj["a_aprt_power"],
PowerFactor = (double)obj["a_pf"],
Frequency = (double)obj["a_freq"]
};
dto.PhaseB = new PhaseDataDto
{
Current = (double)obj["b_current"],
Voltage = (double)obj["b_voltage"],
ActivePower = (double)obj["b_act_power"],
ApparentPower = (double)obj["b_aprt_power"],
PowerFactor = (double)obj["b_pf"],
Frequency = (double)obj["b_freq"]
};
dto.PhaseC = new PhaseDataDto
{
Current = (double)obj["c_current"],
Voltage = (double)obj["c_voltage"],
ActivePower = (double)obj["c_act_power"],
ApparentPower = (double)obj["c_aprt_power"],
PowerFactor = (double)obj["c_pf"],
Frequency = (double)obj["c_freq"]
};
return dto;
}
public override void WriteJson(JsonWriter writer, EMDto value, JsonSerializer serializer)
{
var obj = new JObject
{
["id"] = value.Id,
["a_current"] = value.PhaseA.Current,
["a_voltage"] = value.PhaseA.Voltage,
["a_act_power"] = value.PhaseA.ActivePower,
["a_aprt_power"] = value.PhaseA.ApparentPower,
["a_pf"] = value.PhaseA.PowerFactor,
["a_freq"] = value.PhaseA.Frequency,
["b_current"] = value.PhaseB.Current,
["b_voltage"] = value.PhaseB.Voltage,
["b_act_power"] = value.PhaseB.ActivePower,
["b_aprt_power"] = value.PhaseB.ApparentPower,
["b_pf"] = value.PhaseB.PowerFactor,
["b_freq"] = value.PhaseB.Frequency,
["c_current"] = value.PhaseC.Current,
["c_voltage"] = value.PhaseC.Voltage,
["c_act_power"] = value.PhaseC.ActivePower,
["c_aprt_power"] = value.PhaseC.ApparentPower,
["c_pf"] = value.PhaseC.PowerFactor,
["c_freq"] = value.PhaseC.Frequency,
["n_current"] = value.NeutralCurrent,
["total_current"] = value.TotalCurrent,
["total_act_power"] = value.TotalActivePower,
["total_aprt_power"] = value.TotalApparentPower,
["user_calibrated_phase"] = JArray.FromObject(value.UserCalibratedPhase),
["errors"] = JArray.FromObject(value.Errors)
};
obj.WriteTo(writer);
}
}
}