From 3795287124b1563b7baf4123a87a22599151d1ad Mon Sep 17 00:00:00 2001 From: Noe Date: Thu, 25 Sep 2025 15:07:28 +0200 Subject: [PATCH] Fixed bug in status update in Backend, update controller to support remote configuration for SodistoreHome installations --- csharp/App/Backend/Controller.cs | 2 +- csharp/App/Backend/DataTypes/Configuration.cs | 13 ++++++++++- .../App/Backend/DataTypes/Methods/ExoCmd.cs | 23 ++----------------- csharp/App/Backend/Program.cs | 2 +- .../App/Backend/Websockets/RabbitMQManager.cs | 7 ++++++ .../Backend/Websockets/WebsockerManager.cs | 6 ++--- 6 files changed, 26 insertions(+), 27 deletions(-) diff --git a/csharp/App/Backend/Controller.cs b/csharp/App/Backend/Controller.cs index 30bf96887..04eb6ddd3 100644 --- a/csharp/App/Backend/Controller.cs +++ b/csharp/App/Backend/Controller.cs @@ -941,7 +941,7 @@ public class Controller : ControllerBase Console.WriteLine("CONFIG IS " + config.GetConfigurationString()); - // Send configuration changes + //Send configuration changes var success = await session.SendInstallationConfig(installationId, config); // Record configuration change diff --git a/csharp/App/Backend/DataTypes/Configuration.cs b/csharp/App/Backend/DataTypes/Configuration.cs index 852fde727..bc6048fd2 100644 --- a/csharp/App/Backend/DataTypes/Configuration.cs +++ b/csharp/App/Backend/DataTypes/Configuration.cs @@ -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}"; + } } diff --git a/csharp/App/Backend/DataTypes/Methods/ExoCmd.cs b/csharp/App/Backend/DataTypes/Methods/ExoCmd.cs index 2f0297ca8..a0173ada5 100644 --- a/csharp/App/Backend/DataTypes/Methods/ExoCmd.cs +++ b/csharp/App/Backend/DataTypes/Methods/ExoCmd.cs @@ -381,25 +381,6 @@ public static class ExoCmd public static async Task 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); diff --git a/csharp/App/Backend/Program.cs b/csharp/App/Backend/Program.cs index c32572eff..94f20f312 100644 --- a/csharp/App/Backend/Program.cs +++ b/csharp/App/Backend/Program.cs @@ -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" }; diff --git a/csharp/App/Backend/Websockets/RabbitMQManager.cs b/csharp/App/Backend/Websockets/RabbitMQManager.cs index 0c94190aa..3f6afe52d 100644 --- a/csharp/App/Backend/Websockets/RabbitMQManager.cs +++ b/csharp/App/Backend/Websockets/RabbitMQManager.cs @@ -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); diff --git a/csharp/App/Backend/Websockets/WebsockerManager.cs b/csharp/App/Backend/Websockets/WebsockerManager.cs index b87c8ffdd..57ffc7bea 100644 --- a/csharp/App/Backend/Websockets/WebsockerManager.cs +++ b/csharp/App/Backend/Websockets/WebsockerManager.cs @@ -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)) ) {