101 lines
3.9 KiB
C#
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);
|
|
}
|
|
|
|
}
|
|
|
|
}
|