diff --git a/csharp/App/GrowattCommunication/AggregationService/AggregateDataFileWriter.cs b/csharp/App/GrowattCommunication/AggregationService/AggregateDataFileWriter.cs new file mode 100644 index 000000000..b289b82d7 --- /dev/null +++ b/csharp/App/GrowattCommunication/AggregationService/AggregateDataFileWriter.cs @@ -0,0 +1,76 @@ +using System; +using System.IO; +using System.Text.Json; + +namespace InnovEnergy.App.GrowattCommunication.AggregationService; + + +public class HourlyEnergyData +{ + public String Type { get; set; } = "Hourly"; + public DateTime Timestamp { get; set; } + + public double SelfGeneratedElectricity { get; set; } + public double ElectricityPurchased { get; set; } + public double ElectricityFed { get; set; } + public double BatteryChargeEnergy { get; set; } + public double BatteryDischargeEnergy { get; set; } + public double LoadPowerConsumption { get; set; } +} + +public class DailyEnergyData +{ + public String Type { get; set; } = "Daily"; + public DateTime Timestamp { get; set; } + + public double DailySelfGeneratedElectricity { get; set; } + public double DailyElectricityPurchased { get; set; } + public double DailyElectricityFed { get; set; } + public double BatteryDailyChargeEnergy { get; set; } + public double BatteryDailyDischargeEnergy { get; set; } + public double DailyLoadPowerConsumption { get; set; } +} + +public static class AggregatedDataFileWriter +{ + private static bool _folderCreated = false; + + private static readonly JsonSerializerOptions JsonOptions = new JsonSerializerOptions + { + WriteIndented = false + }; + + public static void AppendHourlyData(HourlyEnergyData data, string baseFolder) + { + var filePath = GetDailyFilePath(data.Timestamp, baseFolder); + AppendJsonLine(filePath, data); + Console.WriteLine($"Hourly data appended to {filePath}"); + } + + public static void AppendDailyData(DailyEnergyData data, string baseFolder) + { + var filePath = GetDailyFilePath(data.Timestamp, baseFolder); + AppendJsonLine(filePath, data); + Console.WriteLine($"Daily data appended to {filePath}"); + } + + private static string GetDailyFilePath(DateTime timestamp, string baseFolder) + { + var folder = Path.Combine(baseFolder, "AggregatedData"); + + if (!_folderCreated) + { + Directory.CreateDirectory(folder); + _folderCreated = true; + } + + var fileName = timestamp.ToString("ddMMyyyy") + ".json"; + return Path.Combine(folder, fileName); + } + + private static void AppendJsonLine(string filePath, T data) + { + var json = JsonSerializer.Serialize(data, JsonOptions); + File.AppendAllText(filePath, json + Environment.NewLine); + } +} \ No newline at end of file diff --git a/csharp/App/SinexcelCommunication/AggregationService/AggregateDataFileWriter.cs b/csharp/App/SinexcelCommunication/AggregationService/AggregateDataFileWriter.cs new file mode 100644 index 000000000..a83f26f69 --- /dev/null +++ b/csharp/App/SinexcelCommunication/AggregationService/AggregateDataFileWriter.cs @@ -0,0 +1,75 @@ +using System; +using System.IO; +using System.Text.Json; + +namespace InnovEnergy.App.SinexcelCommunication.AggregationService; + +public class HourlyEnergyData +{ + public String Type { get; set; } = "Hourly"; + public DateTime Timestamp { get; set; } + + public double SelfGeneratedElectricity { get; set; } + public double ElectricityPurchased { get; set; } + public double ElectricityFed { get; set; } + public double BatteryChargeEnergy { get; set; } + public double BatteryDischargeEnergy { get; set; } + public double LoadPowerConsumption { get; set; } +} + +public class DailyEnergyData +{ + public String Type { get; set; } = "Daily"; + public DateTime Timestamp { get; set; } + + public double DailySelfGeneratedElectricity { get; set; } + public double DailyElectricityPurchased { get; set; } + public double DailyElectricityFed { get; set; } + public double BatteryDailyChargeEnergy { get; set; } + public double BatteryDailyDischargeEnergy { get; set; } + public double DailyLoadPowerConsumption { get; set; } +} + +public static class AggregatedDataFileWriter +{ + private static bool _folderCreated = false; + + private static readonly JsonSerializerOptions JsonOptions = new JsonSerializerOptions + { + WriteIndented = false + }; + + public static void AppendHourlyData(HourlyEnergyData data, string baseFolder) + { + var filePath = GetDailyFilePath(data.Timestamp, baseFolder); + AppendJsonLine(filePath, data); + Console.WriteLine($"Hourly data appended to {filePath}"); + } + + public static void AppendDailyData(DailyEnergyData data, string baseFolder) + { + var filePath = GetDailyFilePath(data.Timestamp, baseFolder); + AppendJsonLine(filePath, data); + Console.WriteLine($"Daily data appended to {filePath}"); + } + + private static string GetDailyFilePath(DateTime timestamp, string baseFolder) + { + var folder = Path.Combine(baseFolder, "AggregatedData"); + + if (!_folderCreated) + { + Directory.CreateDirectory(folder); + _folderCreated = true; + } + + var fileName = timestamp.ToString("ddMMyyyy") + ".json"; + return Path.Combine(folder, fileName); + } + + private static void AppendJsonLine(string filePath, T data) + { + var json = JsonSerializer.Serialize(data, JsonOptions); + File.AppendAllText(filePath, json + Environment.NewLine); + } +} \ No newline at end of file diff --git a/csharp/App/SodiStoreMax/src/AggregationService/Aggregator.cs b/csharp/App/SodiStoreMax/src/AggregationService/Aggregator.cs index b857fb6ca..7aecd0cc5 100644 --- a/csharp/App/SodiStoreMax/src/AggregationService/Aggregator.cs +++ b/csharp/App/SodiStoreMax/src/AggregationService/Aggregator.cs @@ -70,7 +70,7 @@ public static class Aggregator dailyAggregatedData.Save("DailyData"); if (await dailyAggregatedData.PushToS3()) { - DeleteHourlyData("HourlyData",currentTime.ToUnixTime()); + //DeleteHourlyData("HourlyData",currentTime.ToUnixTime()); //AggregatedData.DeleteDailyData("DailyData"); }