Fixed bug in status update in Backend, update controller to support remote configuration for SodistoreHome installations
This commit is contained in:
parent
4420f7373b
commit
3795287124
|
|
@ -941,7 +941,7 @@ public class Controller : ControllerBase
|
||||||
|
|
||||||
Console.WriteLine("CONFIG IS " + config.GetConfigurationString());
|
Console.WriteLine("CONFIG IS " + config.GetConfigurationString());
|
||||||
|
|
||||||
// Send configuration changes
|
//Send configuration changes
|
||||||
var success = await session.SendInstallationConfig(installationId, config);
|
var success = await session.SendInstallationConfig(installationId, config);
|
||||||
|
|
||||||
// Record configuration change
|
// Record configuration change
|
||||||
|
|
|
||||||
|
|
@ -8,10 +8,21 @@ public class Configuration
|
||||||
public DateTime CalibrationChargeDate { get; set; }
|
public DateTime CalibrationChargeDate { get; set; }
|
||||||
public CalibrationChargeType CalibrationDischargeState { get; set; }
|
public CalibrationChargeType CalibrationDischargeState { get; set; }
|
||||||
public DateTime CalibrationDischargeDate { 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()
|
public String GetConfigurationString()
|
||||||
{
|
{
|
||||||
return $"MinimumSoC: {MinimumSoC}, GridSetPoint: {GridSetPoint}, CalibrationChargeState: {CalibrationChargeState}, CalibrationChargeDate: {CalibrationChargeDate}, " +
|
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}";
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -381,25 +381,6 @@ public static class ExoCmd
|
||||||
public static async Task<Boolean> SendConfig(this Installation installation, Configuration config)
|
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;
|
var maxRetransmissions = 4;
|
||||||
UdpClient udpClient = new UdpClient();
|
UdpClient udpClient = new UdpClient();
|
||||||
udpClient.Client.ReceiveTimeout = 2000;
|
udpClient.Client.ReceiveTimeout = 2000;
|
||||||
|
|
@ -415,8 +396,8 @@ public static class ExoCmd
|
||||||
|
|
||||||
Console.WriteLine(config.GetConfigurationString());
|
Console.WriteLine(config.GetConfigurationString());
|
||||||
|
|
||||||
//Console.WriteLine($"Sent UDP message to {installation.VpnIp}:{port}: {config}");
|
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}"+" GridSetPoint is "+config.GridSetPoint +" and MinimumSoC is "+config.MinimumSoC);
|
||||||
|
|
||||||
IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Parse(installation.VpnIp), port);
|
IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Parse(installation.VpnIp), port);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -89,7 +89,7 @@ public static class Program
|
||||||
|
|
||||||
private static OpenApiInfo OpenApiInfo { get; } = new OpenApiInfo
|
private static OpenApiInfo OpenApiInfo { get; } = new OpenApiInfo
|
||||||
{
|
{
|
||||||
Title = "Innesco Backend API",
|
Title = "Inesco Backend API",
|
||||||
Version = "v1"
|
Version = "v1"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -148,6 +148,8 @@ public static class RabbitMqManager
|
||||||
|
|
||||||
Int32 prevStatus;
|
Int32 prevStatus;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//This installation id does not exist in our in-memory data structure, add it.
|
//This installation id does not exist in our in-memory data structure, add it.
|
||||||
if (!WebsocketManager.InstallationConnections.ContainsKey(installationId))
|
if (!WebsocketManager.InstallationConnections.ContainsKey(installationId))
|
||||||
{
|
{
|
||||||
|
|
@ -167,6 +169,11 @@ public static class RabbitMqManager
|
||||||
WebsocketManager.InstallationConnections[installationId].Timestamp = DateTime.Now;
|
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.Status = receivedStatusMessage.Status;
|
||||||
installation.Apply(Db.Update);
|
installation.Apply(Db.Update);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,12 +22,12 @@ public static class WebsocketManager
|
||||||
Console.WriteLine("Monitoring installation table...");
|
Console.WriteLine("Monitoring installation table...");
|
||||||
foreach (var installationConnection in InstallationConnections)
|
foreach (var installationConnection in InstallationConnections)
|
||||||
{
|
{
|
||||||
Console.WriteLine("installationConnection ID is " + installationConnection.Key + "latest timestamp is" +installationConnection.Value.Timestamp + "product is "+ installationConnection.Value.Product
|
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));
|
+ ", and time diff is "+ (DateTime.Now - installationConnection.Value.Timestamp));
|
||||||
|
|
||||||
if ((installationConnection.Value.Product == (int)ProductType.Salimax && (DateTime.Now - installationConnection.Value.Timestamp) > TimeSpan.FromMinutes(2)) ||
|
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.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))
|
(installationConnection.Value.Product == (int)ProductType.SodiStoreMax && (DateTime.Now - installationConnection.Value.Timestamp) > TimeSpan.FromMinutes(2))
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue