From 9a60bdb4ae4b616064a4c968297d5c6174b2347f Mon Sep 17 00:00:00 2001 From: atef Date: Mon, 11 Dec 2023 18:03:01 +0100 Subject: [PATCH] update createHourlyAvreage function --- csharp/App/SaliMax/src/Program.cs | 106 ++++++++++++++++++------------ 1 file changed, 63 insertions(+), 43 deletions(-) diff --git a/csharp/App/SaliMax/src/Program.cs b/csharp/App/SaliMax/src/Program.cs index 904346a73..ebb59569b 100644 --- a/csharp/App/SaliMax/src/Program.cs +++ b/csharp/App/SaliMax/src/Program.cs @@ -27,6 +27,7 @@ using InnovEnergy.Lib.Units; using InnovEnergy.Lib.Utils; using System.Text.Json; using RabbitMQ.Client; +using static System.Double; using static InnovEnergy.Lib.Devices.Trumpf.SystemControl.DataTypes.SystemConfig; using DeviceState = InnovEnergy.App.SaliMax.Devices.DeviceState; @@ -671,17 +672,19 @@ internal static class Program private static void CreateHourlyAverage() { - string myDirectory = "LogDirectory"; + var myDirectory = "LogDirectory"; // Get all CSV files in the specified directory - string[] csvFiles = Directory.GetFiles(myDirectory, "*.csv"); + var csvFiles = Directory.GetFiles(myDirectory, "*.csv"); - Int64 currentTimestamp = DateTime.Now.ToUnixTime(); - Double socAverage=0; - Double pvPowerAverage=0; - Double batteryPowerAverage=0; + var currentTimestamp = DateTime.Now.ToUnixTime(); + Double socAverage = 0; + Double pvPowerAverage = 0; + Double batteryPowerAverage = 0; + Console.WriteLine("-----------------------------------------------------------------------------------------------------------------"); - Console.WriteLine("File timestamp should start after "+DateTime.Now.AddHours(-1)); + Console.WriteLine("File timestamp should start after "+ DateTime.Now.AddHours(-1)); + foreach (var csvFile in csvFiles) { @@ -689,57 +692,74 @@ internal static class Program { continue; } - Int64 fileTimestamp = Int64.Parse(Path.GetFileNameWithoutExtension(csvFile).Replace("log_", "")); - Int64 oneHourBefore = DateTime.Now.AddHours(-1).ToUnixTime(); + var fileTimestamp = Int64.Parse(Path.GetFileNameWithoutExtension(csvFile).Replace("log_", "")); + var oneHourBefore = DateTime.Now.AddHours(-1).ToUnixTime(); if (fileTimestamp >= oneHourBefore && fileTimestamp <= currentTimestamp) { - Console.WriteLine("Check file created at "+DateTimeOffset.FromUnixTimeSeconds(fileTimestamp).DateTime); - using (var reader = new StreamReader(csvFile)) + Console.WriteLine("Check file created at "+ DateTimeOffset.FromUnixTimeSeconds(fileTimestamp).DateTime); + using var reader = new StreamReader(csvFile); + + while (!reader.EndOfStream) { - while (!reader.EndOfStream) + var line = reader.ReadLine(); + var values = line?.Split(';'); + + // Assuming there are always three columns (variable name and its value) + if (values is { Length: 3 }) { - var line = reader.ReadLine(); - var values = line?.Split(';'); - - // Assuming there are always three columns (variable name and its value) - if (values is { Length: 3 }) + var variableName = values[0].Trim(); + var value = TryParse(values[1].Trim(), out var v) ? v : 0; + + // Check if variableValue is a valid number + if (IsSoc(variableName)) { - String variableName = values[0].Trim(); - String variableValue = values[1].Trim(); - - // Check if variableValue is a valid number - if (IsSoc(variableName)) + if (socAverage == 0) { - if (socAverage == 0){socAverage = double.TryParse(variableValue, out double v) ? v : 0;} - else{socAverage = (socAverage + (double.TryParse(variableValue, out double v) ? v : 0)) / 2;} - } - - if (IsPvPower(variableName)) - { - if (pvPowerAverage == 0){pvPowerAverage = double.TryParse(variableValue, out double v) ? v : 0;} - else{pvPowerAverage = (pvPowerAverage + (double.TryParse(variableValue, out double v) ? v : 0)) / 2;} - } - - if (IsBatteryPower(variableName)) - { - if (batteryPowerAverage == 0){batteryPowerAverage = double.TryParse(variableValue, out double v) ? v : 0;} - else{batteryPowerAverage = (batteryPowerAverage + (double.TryParse(variableValue, out double v) ? v : 0)) / 2;} + socAverage = value; } else { - // Handle cases where variableValue is not a valid number - // Console.WriteLine($"Invalid numeric value for variable {variableName}: {variableValue}"); + socAverage = (socAverage + value) / 2; + } + } + + if (IsPvPower(variableName)) + { + if (pvPowerAverage == 0) + { + pvPowerAverage = value; + } + else + { + pvPowerAverage = (pvPowerAverage + value) / 2; + } + } + + if (IsBatteryPower(variableName)) + { + if (batteryPowerAverage == 0) + { + batteryPowerAverage = value; + } + else + { + batteryPowerAverage = (batteryPowerAverage + value) / 2; } } else { - // Handle invalid CSV format - //Console.WriteLine($"Invalid format in file: {csvFile}"); - //break; + // Handle cases where variableValue is not a valid number + // Console.WriteLine($"Invalid numeric value for variable {variableName}: {variableValue}"); } } + else + { + // Handle invalid CSV format + //Console.WriteLine($"Invalid format in file: {csvFile}"); + //break; + } } } } @@ -774,8 +794,8 @@ internal static class Program private static void ApplyConfigFile(this StatusRecord status, Configuration config) { - status.Config.MinSoc = config.MinimumSoC; - status.Config.GridSetPoint = config.GridSetPoint*1000; + status.Config.MinSoc = config.MinimumSoC; + status.Config.GridSetPoint = config.GridSetPoint * 1000; // converted from kW to W status.Config.ForceCalibrationCharge = config.ForceCalibrationCharge; }