Fixed bug in status update in Backend, update controller to support remote configuration for SodistoreHome installations

This commit is contained in:
Noe 2025-09-25 15:07:28 +02:00
parent 4420f7373b
commit 3795287124
6 changed files with 26 additions and 27 deletions

View File

@ -8,10 +8,21 @@ public class Configuration
public DateTime CalibrationChargeDate { get; set; }
public CalibrationChargeType CalibrationDischargeState { get; set; }
public DateTime CalibrationDischargeDate { get; set; }
//For sodistoreHome installations
public Double MaximumDischargingCurrent { get; set; }
public Double MaximumChargingCurrent { get; set; }
public Double OperatingPriority { get; set; }
public Double BatteriesCount { get; set; }
public String GetConfigurationString()
{
return $"MinimumSoC: {MinimumSoC}, GridSetPoint: {GridSetPoint}, CalibrationChargeState: {CalibrationChargeState}, CalibrationChargeDate: {CalibrationChargeDate}, " +
$"CalibrationDischargeState: {CalibrationDischargeState}, CalibrationDischargeDate: {CalibrationDischargeDate}";
$"CalibrationDischargeState: {CalibrationDischargeState}, CalibrationDischargeDate: {CalibrationDischargeDate}" +
$"MaximumDischargingCurrent: {MaximumDischargingCurrent}, MaximumChargingCurrent: {MaximumChargingCurrent}, OperatingPriority: {OperatingPriority}" +
$"BatteriesCount: {BatteriesCount}";
}
}

View File

@ -381,25 +381,6 @@ public static class ExoCmd
public static async Task<Boolean> SendConfig(this Installation installation, Configuration config)
{
// This looks hacky but here we grab the vpn-Ip of the installation by its installation Name (e.g. Salimax0001)
// From the vpn server (here salidomo, but we use the vpn home ip for future-proofing)
// using var client = new HttpClient();
// var webRequest = client.GetAsync("10.2.0.1/vpnstatus.txt");
// var text = webRequest.ToString();
// var lines = text!.Split(new [] { Environment.NewLine }, StringSplitOptions.None);
// var vpnIp = lines.First(l => l.Contains(installation.InstallationName)).Split(",")[1];
//
// // Writing the config to a file and then sending that file with rsync sounds inefficient
// // We should find a better solution...
// // TODO The VPN server should do this not the backend!!!
// await File.WriteAllTextAsync("./config.json", config);
// var result = await Cli.Wrap("rsync")
// .WithArguments("./config.json")
// .AppendArgument($@"root@{vpnIp}:/salimax")
// .ExecuteAsync();
// return result.ExitCode == 200;
var maxRetransmissions = 4;
UdpClient udpClient = new UdpClient();
udpClient.Client.ReceiveTimeout = 2000;
@ -415,8 +396,8 @@ public static class ExoCmd
Console.WriteLine(config.GetConfigurationString());
//Console.WriteLine($"Sent UDP message to {installation.VpnIp}:{port}: {config}");
Console.WriteLine($"Sent UDP message to {installation.VpnIp}:{port}"+" GridSetPoint is "+config.GridSetPoint +" and MinimumSoC is "+config.MinimumSoC);
Console.WriteLine($"Sent UDP message to {installation.VpnIp}:{port}: {config}");
//Console.WriteLine($"Sent UDP message to {installation.VpnIp}:{port}"+" GridSetPoint is "+config.GridSetPoint +" and MinimumSoC is "+config.MinimumSoC);
IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Parse(installation.VpnIp), port);

View File

@ -89,7 +89,7 @@ public static class Program
private static OpenApiInfo OpenApiInfo { get; } = new OpenApiInfo
{
Title = "Innesco Backend API",
Title = "Inesco Backend API",
Version = "v1"
};

View File

@ -148,6 +148,8 @@ public static class RabbitMqManager
Int32 prevStatus;
//This installation id does not exist in our in-memory data structure, add it.
if (!WebsocketManager.InstallationConnections.ContainsKey(installationId))
{
@ -167,6 +169,11 @@ public static class RabbitMqManager
WebsocketManager.InstallationConnections[installationId].Timestamp = DateTime.Now;
}
if (installationId == 795)
{
Console.WriteLine("RECEIVED A HEARTBIT FROM prototype, time is "+ WebsocketManager.InstallationConnections[installationId].Timestamp);
}
installation.Status = receivedStatusMessage.Status;
installation.Apply(Db.Update);

View File

@ -22,12 +22,12 @@ public static class WebsocketManager
Console.WriteLine("Monitoring installation table...");
foreach (var installationConnection in InstallationConnections)
{
Console.WriteLine("installationConnection ID is " + installationConnection.Key + "latest timestamp is" +installationConnection.Value.Timestamp + "product is "+ installationConnection.Value.Product
+ "and time diff is "+ (DateTime.Now - installationConnection.Value.Timestamp));
Console.WriteLine("installationConnection ID is " + installationConnection.Key + ", latest timestamp is" +installationConnection.Value.Timestamp + ", product is "+ installationConnection.Value.Product
+ ", and time diff is "+ (DateTime.Now - installationConnection.Value.Timestamp));
if ((installationConnection.Value.Product == (int)ProductType.Salimax && (DateTime.Now - installationConnection.Value.Timestamp) > TimeSpan.FromMinutes(2)) ||
(installationConnection.Value.Product == (int)ProductType.Salidomo && (DateTime.Now - installationConnection.Value.Timestamp) > TimeSpan.FromMinutes(60)) ||
(installationConnection.Value.Product == (int)ProductType.SodioHome && (DateTime.Now - installationConnection.Value.Timestamp) > TimeSpan.FromMinutes(2)) ||
(installationConnection.Value.Product == (int)ProductType.SodioHome && (DateTime.Now - installationConnection.Value.Timestamp) > TimeSpan.FromMinutes(4)) ||
(installationConnection.Value.Product == (int)ProductType.SodiStoreMax && (DateTime.Now - installationConnection.Value.Timestamp) > TimeSpan.FromMinutes(2))
)
{