110 lines
3.9 KiB
C#
110 lines
3.9 KiB
C#
using System.Text.Json;
|
|
using InnovEnergy.App.KacoCommunication.Devices;
|
|
using InnovEnergy.App.KacoCommunication.ESS;
|
|
using InnovEnergy.Lib.Utils;
|
|
using static System.Text.Json.JsonSerializer;
|
|
|
|
namespace InnovEnergy.App.KacoCommunication.SystemConfig;
|
|
|
|
public class Config
|
|
{
|
|
private static String DefaultConfigFilePath => Path.Combine(Environment.CurrentDirectory, "config.json");
|
|
private static DateTime DefaultDatetime => new(2024, 03, 11, 09, 00, 00);
|
|
|
|
private static readonly JsonSerializerOptions JsonOptions = new() { WriteIndented = true };
|
|
|
|
public required Double MinSoc { get; set; }
|
|
public required float ActivePowerPercent { get; set; }
|
|
|
|
/* public required Double MaximumDischargingCurrent { get; set; }
|
|
public required Double MaximumChargingCurrent { get; set; }
|
|
public required Int16 BatteriesCount { get; set; }
|
|
public required Double ModbusProtcolNumber { get; set; }*/
|
|
public required DeviceConfig Devices { get; set; }
|
|
|
|
public required S3Config? S3 { get; set; }
|
|
|
|
|
|
private static String? LastSavedData { get; set; }
|
|
|
|
public static Config Default => new()
|
|
{
|
|
MinSoc = 20,
|
|
ActivePowerPercent = 0f,
|
|
/* MaximumDischargingCurrent = 180,
|
|
BatteriesCount = 0,
|
|
ModbusProtcolNumber = 1.2,*/
|
|
Devices = new ()
|
|
{
|
|
KacoIp = new() { Host = "10.0.3.1", Port = 502, DeviceState = DeviceState.Measured},
|
|
DcDcIp = new() { Host = "10.0.2.1", Port = 502, DeviceState = DeviceState.Measured},
|
|
GridMeterIp = new() { Host = "192.168.1.5", Port = 502, DeviceState = DeviceState.Measured},
|
|
|
|
BatteryNodes = new []{0,1, 2, 3, 4, 5 }
|
|
},
|
|
|
|
S3 = new()
|
|
{
|
|
Bucket = "1-3e5b3069-214a-43ee-8d85-57d72000c19d",
|
|
Region = "sos-ch-dk-2",
|
|
Provider = "exo.io",
|
|
Key = "EXObb5a49acb1061781761895e7",
|
|
Secret = "sKhln0w8ii3ezZ1SJFF33yeDo8NWR1V4w2H0D4-350I",
|
|
ContentType = "text/plain; charset=utf-8"
|
|
}
|
|
};
|
|
|
|
public void Save(String? path = null)
|
|
{
|
|
var configFilePath = path ?? DefaultConfigFilePath;
|
|
|
|
try
|
|
{
|
|
var jsonString = Serialize(this, JsonOptions);
|
|
|
|
if (LastSavedData == jsonString)
|
|
return;
|
|
|
|
LastSavedData = jsonString;
|
|
|
|
File.WriteAllText(configFilePath, jsonString);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
$"Failed to write config file {configFilePath}\n{e}".WriteLine();
|
|
throw;
|
|
}
|
|
}
|
|
|
|
public static Config Load(String? path = null)
|
|
{
|
|
var configFilePath = path ?? DefaultConfigFilePath;
|
|
try
|
|
{
|
|
var jsonString = File.ReadAllText(configFilePath);
|
|
return Deserialize<Config>(jsonString)!;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
$"Failed to read config file {configFilePath}, using default config\n{e}".WriteLine();
|
|
return Default;
|
|
}
|
|
}
|
|
|
|
public static async Task<Config> LoadAsync(String? path = null)
|
|
{
|
|
var configFilePath = path ?? DefaultConfigFilePath;
|
|
try
|
|
{
|
|
var jsonString = await File.ReadAllTextAsync(configFilePath);
|
|
return Deserialize<Config>(jsonString)!;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Console.WriteLine($"Couldn't read config file {configFilePath}, using default config");
|
|
e.Message.WriteLine();
|
|
return Default;
|
|
}
|
|
}
|
|
}
|