Naming Sinexcel inverter to recordinverter
This commit is contained in:
parent
b122177e61
commit
231069768e
|
|
@ -31,7 +31,7 @@ namespace InnovEnergy.App.SinexcelCommunication;
|
|||
[SuppressMessage("Trimming", "IL2026:Members annotated with \'RequiresUnreferencedCodeAttribute\' require dynamic access otherwise can break functionality when trimming application code")]
|
||||
internal static class Program
|
||||
{
|
||||
private static readonly TimeSpan UpdateInterval = TimeSpan.FromSeconds(4);
|
||||
private static readonly TimeSpan UpdateInterval = TimeSpan.FromSeconds(5);
|
||||
private const UInt16 NbrOfFileToConcatenate = 15; // add this to config file
|
||||
private static UInt16 _fileCounter = 0;
|
||||
private static Channel _sinexcelChannel;
|
||||
|
|
@ -54,7 +54,7 @@ internal static class Program
|
|||
public static async Task Main(String[] args)
|
||||
{
|
||||
_sinexcelChannel = new SerialPortChannel(Port, BaudRate, Parity, DataBits, StopBits);
|
||||
|
||||
InitializeCommunicationToMiddleware();
|
||||
while (true)
|
||||
{
|
||||
try
|
||||
|
|
@ -85,7 +85,7 @@ internal static class Program
|
|||
|
||||
return new StatusRecord
|
||||
{
|
||||
SinexcelRecord = sinexcelRecord,
|
||||
InverterRecord = sinexcelRecord,
|
||||
Config = config // load from disk every iteration, so config can be changed while running
|
||||
};
|
||||
}
|
||||
|
|
@ -111,61 +111,22 @@ internal static class Program
|
|||
|
||||
var startTime = DateTime.Now;
|
||||
Console.WriteLine("***************************** Reading Battery Data *********************************************");
|
||||
Console.WriteLine(startTime.ToString("HH:mm:ss.fff"));
|
||||
Console.WriteLine(startTime.ToString("HH:mm:ss.fff ")+ "Start Reading");
|
||||
|
||||
// the order matter of the next three lines
|
||||
var statusrecord = ReadStatus();
|
||||
if (statusrecord == null)
|
||||
return null;
|
||||
|
||||
statusrecord.SinexcelRecord.GridAPhaseVoltage.WriteLine(" = Grid A PhaseVoltage");
|
||||
statusrecord.SinexcelRecord.GridBPhaseVoltage.WriteLine(" = Grid B PhaseVoltage");
|
||||
statusrecord.SinexcelRecord.GridCPhaseVoltage.WriteLine(" = Grid C PhaseVoltage");
|
||||
SendSalimaxStateAlarm(GetSodiHomeStateAlarm(statusrecord),statusrecord);
|
||||
|
||||
statusrecord.SinexcelRecord.GridAPhaseCurrent.WriteLine(" = Grid A PhaseCurrent");
|
||||
statusrecord.SinexcelRecord.GridBPhaseCurrent.WriteLine(" = Grid B PhaseCurrent");
|
||||
statusrecord.SinexcelRecord.GridCPhaseCurrent.WriteLine(" = Grid C PhaseCurrent");
|
||||
|
||||
|
||||
statusrecord.SinexcelRecord.GridAPhaseActivePower.WriteLine(" = A Grid Active Power");
|
||||
statusrecord.SinexcelRecord.GridBPhaseActivePower.WriteLine(" = B Grid Active Power");
|
||||
statusrecord.SinexcelRecord.GridCPhaseActivePower.WriteLine(" = C Grid Active Power");
|
||||
|
||||
statusrecord.SinexcelRecord.GridVoltageFrequency.WriteLine(" = Frequency");
|
||||
|
||||
statusrecord.SinexcelRecord.ElectricMeterCPhaseActivePower.WriteLine(" Meter Phase C Power");
|
||||
statusrecord.SinexcelRecord.ElectricMeterBPhaseActivePower.WriteLine(" Meter Phase B Power");
|
||||
statusrecord.SinexcelRecord.ElectricMeterAPhaseActivePower.WriteLine(" Meter Phase A Power");
|
||||
|
||||
statusrecord.SinexcelRecord.ElectricMeterAPhaseCurrent.WriteLine(" Meter Phase C Current ");
|
||||
statusrecord.SinexcelRecord.ElectricMeterBPhaseCurrent.WriteLine(" Meter Phase B Current ");
|
||||
statusrecord.SinexcelRecord.ElectricMeterBPhaseCurrent.WriteLine(" Meter Phase A Current ");
|
||||
statusrecord.SinexcelRecord.WorkingMode.WriteLine(" workingmode");
|
||||
|
||||
statusrecord.SinexcelRecord.BatteryVoltage.WriteLine(" BatteryVoltage");
|
||||
statusrecord.SinexcelRecord.BatteryVoltage1.WriteLine(" BatteryVoltage1");
|
||||
statusrecord.SinexcelRecord.BatteryVoltage2.WriteLine(" BatteryVoltage2");
|
||||
|
||||
statusrecord.SinexcelRecord.BatteryPower1.WriteLine(" BatteryPower1");
|
||||
statusrecord.SinexcelRecord.BatteryPower2.WriteLine(" BatteryPower2");
|
||||
statusrecord.SinexcelRecord.TotalBatteryPower.WriteLine(" TotalBatteryPower");
|
||||
|
||||
statusrecord.SinexcelRecord.EnableBattery1.WriteLine(" EnableBattery1");
|
||||
statusrecord.SinexcelRecord.EnableBattery2.WriteLine(" EnableBattery2");
|
||||
|
||||
statusrecord.SinexcelRecord.MaxChargingCurrentBattery1.WriteLine(" MaxChargingCurrentBattery1");
|
||||
statusrecord.SinexcelRecord.MaxChargingCurrentBattery2.WriteLine(" MaxChargingCurrentBattery2");
|
||||
|
||||
statusrecord.SinexcelRecord.MaxDischargingCurrentBattery1.WriteLine(" MaxChargingCurrentBattery1");
|
||||
statusrecord.SinexcelRecord.MaxDischargingCurrentBattery2.WriteLine(" MaxChargingCurrentBattery2");
|
||||
|
||||
//EssModeControl(statusrecord);
|
||||
// statusrecord.ApplyDefaultSettings();
|
||||
Console.WriteLine( " ************************************ We are writing ************************************");
|
||||
var startWritingTime = DateTime.Now;
|
||||
Console.WriteLine(startWritingTime.ToString("HH:mm:ss.fff ") +"start Writing");
|
||||
statusrecord?.Config.Save(); // save the config file
|
||||
//sinexcelDevice.Write(statusrecord?.SinexcelRecord);
|
||||
//if (statusrecord?.InverterRecord != null) sinexcelDevice.Write(statusrecord.InverterRecord);
|
||||
|
||||
var stopTime = DateTime.Now;
|
||||
Console.WriteLine(stopTime.ToString("HH:mm:ss.fff"));
|
||||
Console.WriteLine(stopTime.ToString("HH:mm:ss.fff ")+ "run iteration time finish");
|
||||
return statusrecord;
|
||||
}
|
||||
catch (Exception e)
|
||||
|
|
@ -178,6 +139,61 @@ internal static class Program
|
|||
}
|
||||
}
|
||||
|
||||
private static StatusMessage GetSodiHomeStateAlarm(StatusRecord? record)
|
||||
{
|
||||
var s3Bucket = Config.Load().S3?.Bucket;
|
||||
|
||||
var alarmList = new List<AlarmOrWarning>();
|
||||
var warningList = new List<AlarmOrWarning>();
|
||||
/*
|
||||
if (record.SinexcelRecord.WorkingMode == GrowattSystemStatus.Fault)
|
||||
{
|
||||
if (record.AcDcGrowatt.FaultMainCode != 0)
|
||||
{
|
||||
alarmList.Add(new AlarmOrWarning
|
||||
{
|
||||
Date = DateTime.Now.ToString("yyyy-MM-dd"),
|
||||
Time = DateTime.Now.ToString("HH:mm:ss"),
|
||||
CreatedBy = "Growatt Inverter",
|
||||
Description = record.AcDcGrowatt.WarningMainCode.ToString(), // to add the sub code
|
||||
});
|
||||
}
|
||||
|
||||
if (record.AcDcGrowatt.WarningMainCode != 0)
|
||||
{
|
||||
warningList.Add(new AlarmOrWarning
|
||||
{
|
||||
Date = DateTime.Now.ToString("yyyy-MM-dd"),
|
||||
Time = DateTime.Now.ToString("HH:mm:ss"),
|
||||
CreatedBy = "Growatt inverter",
|
||||
Description = record.AcDcGrowatt.FaultMainCode.ToString(), //to add the sub code
|
||||
});
|
||||
}
|
||||
}*/
|
||||
|
||||
_sodiohomeAlarmState = warningList.Any()
|
||||
? SodistoreAlarmState.Orange
|
||||
: SodistoreAlarmState.Green; // this will be replaced by LedState
|
||||
|
||||
_sodiohomeAlarmState = alarmList.Any()
|
||||
? SodistoreAlarmState.Red
|
||||
: _sodiohomeAlarmState; // this will be replaced by LedState
|
||||
|
||||
var installationId = GetInstallationId(s3Bucket ?? string.Empty);
|
||||
|
||||
var returnedStatus = new StatusMessage
|
||||
{
|
||||
InstallationId = installationId,
|
||||
Product = 2,
|
||||
Status = _sodiohomeAlarmState,
|
||||
Type = MessageType.AlarmOrWarning,
|
||||
Alarms = alarmList,
|
||||
Warnings = warningList
|
||||
};
|
||||
|
||||
return returnedStatus;
|
||||
}
|
||||
|
||||
private static Int32 GetInstallationId(String s3Bucket)
|
||||
{
|
||||
var part = s3Bucket.Split('-').FirstOrDefault();
|
||||
|
|
@ -220,11 +236,10 @@ internal static class Program
|
|||
if (status == null) return;
|
||||
|
||||
status.Config.MinSoc = config.MinimumSoC;
|
||||
status.Config.GridSetPoint = config.GridSetPoint * 1000; // converted from kW to W
|
||||
//status.Config.MaximumChargingCurrent = config.MaximumChargingCurrent;
|
||||
//status.Config.MaximumDischargingCurrent = config.MaximumDischargingCurrent;
|
||||
//status.Config.OperatingPriority = config.OperatingPriority;
|
||||
//status.Config.BatteriesCount = config.BatteriesCount;
|
||||
status.Config.MaximumChargingCurrent = config.MaximumChargingCurrent;
|
||||
status.Config.MaximumDischargingCurrent = config.MaximumDischargingCurrent;
|
||||
status.Config.OperatingPriority = config.OperatingPriority;
|
||||
status.Config.BatteriesCount = config.BatteriesCount;
|
||||
}
|
||||
|
||||
private static async Task<Boolean> SaveModbusTcpFile(StatusRecord status)
|
||||
|
|
@ -233,7 +248,7 @@ internal static class Program
|
|||
|
||||
// SYSTEM DATA
|
||||
var result1 = ConvertToModbusRegisters((status.Config.MinSoc * 10), "UInt16", 30001); // this to be updated to modbusTCP version
|
||||
var result2 = ConvertToModbusRegisters(status.SinexcelRecord.GridAPhaseVoltage, "UInt32", 30002);
|
||||
var result2 = ConvertToModbusRegisters(status.InverterRecord.GridAPhaseVoltage, "UInt32", 30002);
|
||||
|
||||
// Merge all results into one dictionary
|
||||
var allResults = new[]
|
||||
|
|
@ -254,6 +269,8 @@ internal static class Program
|
|||
|
||||
//Console.WriteLine("JSON file written successfully.");
|
||||
//Console.WriteLine(json);
|
||||
var stopTime = DateTime.Now;
|
||||
Console.WriteLine(stopTime.ToString("HH:mm:ss.fff" )+ " Finish the loop");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue