Merge branch 'main' of 91.92.155.224:Innovenergy/Innovenergy_trunk
This commit is contained in:
commit
c2f68e81db
|
@ -226,6 +226,12 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Remove="DataTypes\CsvName.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -177,69 +177,75 @@ public class Controller : ControllerBase
|
||||||
|
|
||||||
string commonPrefix = FindCommonPrefix(start.ToString(), end.ToString());
|
string commonPrefix = FindCommonPrefix(start.ToString(), end.ToString());
|
||||||
|
|
||||||
string bucketPath = "s3://"+installation.S3BucketId + "-3e5b3069-214a-43ee-8d85-57d72000c19d/"+commonPrefix;
|
Int64 startTimestamp = Int64.Parse(start.ToString().Substring(0,5));
|
||||||
|
Int64 endTimestamp = Int64.Parse(end.ToString().Substring(0,5));
|
||||||
|
|
||||||
string configPath = "/home/ubuntu/.s3cfg";
|
string configPath = "/home/ubuntu/.s3cfg";
|
||||||
|
|
||||||
try
|
while (startTimestamp <= endTimestamp)
|
||||||
{
|
{
|
||||||
// Set up process start info
|
string bucketPath = "s3://"+installation.S3BucketId + "-3e5b3069-214a-43ee-8d85-57d72000c19d/"+startTimestamp;
|
||||||
ProcessStartInfo startInfo = new ProcessStartInfo
|
Console.WriteLine("Fetching data for "+startTimestamp);
|
||||||
|
|
||||||
|
try
|
||||||
{
|
{
|
||||||
FileName = "s3cmd",
|
// Set up process start info
|
||||||
Arguments = $"--config {configPath} ls {bucketPath}",
|
ProcessStartInfo startInfo = new ProcessStartInfo
|
||||||
RedirectStandardOutput = true,
|
|
||||||
RedirectStandardError = true,
|
|
||||||
UseShellExecute = false,
|
|
||||||
CreateNoWindow = true
|
|
||||||
};
|
|
||||||
|
|
||||||
// Start the process
|
|
||||||
Process process = new Process
|
|
||||||
{
|
|
||||||
StartInfo = startInfo
|
|
||||||
};
|
|
||||||
|
|
||||||
process.Start();
|
|
||||||
|
|
||||||
// Read the output
|
|
||||||
string output = process.StandardOutput.ReadToEnd();
|
|
||||||
string error = process.StandardError.ReadToEnd();
|
|
||||||
|
|
||||||
process.WaitForExit();
|
|
||||||
|
|
||||||
// Check for errors
|
|
||||||
if (process.ExitCode != 0)
|
|
||||||
{
|
|
||||||
Console.WriteLine("Error executing command:");
|
|
||||||
Console.WriteLine(error);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Console.WriteLine("Command output:");
|
|
||||||
//Console.WriteLine(output);
|
|
||||||
// Define a regex pattern to match the filenames without .csv extension
|
|
||||||
var pattern = @"/([^/]+)\.csv$";
|
|
||||||
var regex = new Regex(pattern);
|
|
||||||
|
|
||||||
// Process each line of the output
|
|
||||||
foreach (var line in output.Split('\n'))
|
|
||||||
{
|
{
|
||||||
var match = regex.Match(line);
|
FileName = "s3cmd",
|
||||||
if (match.Success && long.Parse(match.Groups[1].Value)>=start && long.Parse(match.Groups[1].Value)<=end)
|
Arguments = $"--config {configPath} ls {bucketPath}",
|
||||||
{
|
RedirectStandardOutput = true,
|
||||||
allTimestamps.Add(long.Parse(match.Groups[1].Value));
|
RedirectStandardError = true,
|
||||||
//Console.WriteLine(match.Groups[1].Value);
|
UseShellExecute = false,
|
||||||
}
|
CreateNoWindow = true
|
||||||
|
};
|
||||||
|
|
||||||
|
// Start the process
|
||||||
|
Process process = new Process
|
||||||
|
{
|
||||||
|
StartInfo = startInfo
|
||||||
|
};
|
||||||
|
|
||||||
|
process.Start();
|
||||||
|
|
||||||
|
// Read the output
|
||||||
|
string output = process.StandardOutput.ReadToEnd();
|
||||||
|
string error = process.StandardError.ReadToEnd();
|
||||||
|
|
||||||
|
process.WaitForExit();
|
||||||
|
|
||||||
|
// Check for errors
|
||||||
|
if (process.ExitCode != 0)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Error executing command:");
|
||||||
|
Console.WriteLine(error);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Define a regex pattern to match the filenames without .csv extension
|
||||||
|
var pattern = @"/([^/]+)\.csv$";
|
||||||
|
var regex = new Regex(pattern);
|
||||||
|
|
||||||
|
// Process each line of the output
|
||||||
|
foreach (var line in output.Split('\n'))
|
||||||
|
{
|
||||||
|
var match = regex.Match(line);
|
||||||
|
if (match.Success && long.Parse(match.Groups[1].Value) >= start && long.Parse(match.Groups[1].Value) <= end)
|
||||||
|
{
|
||||||
|
allTimestamps.Add(long.Parse(match.Groups[1].Value));
|
||||||
|
//Console.WriteLine(match.Groups[1].Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"Exception: {e.Message}");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
Console.WriteLine($"Exception: {e.Message}");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
startTimestamp++;
|
||||||
|
}
|
||||||
|
|
||||||
int totalRecords = allTimestamps.Count;
|
int totalRecords = allTimestamps.Count;
|
||||||
if (totalRecords <= sampleSize)
|
if (totalRecords <= sampleSize)
|
||||||
|
@ -250,8 +256,6 @@ public class Controller : ControllerBase
|
||||||
return allTimestamps;
|
return allTimestamps;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int interval = totalRecords / sampleSize;
|
int interval = totalRecords / sampleSize;
|
||||||
var sampledTimestamps = new List<Int64>();
|
var sampledTimestamps = new List<Int64>();
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ public static partial class Db
|
||||||
|
|
||||||
public static Boolean Create(Installation installation)
|
public static Boolean Create(Installation installation)
|
||||||
{
|
{
|
||||||
installation.S3BucketId = Installations.Count(f => f.Product == installation.Product)+1;
|
installation.S3BucketId = Installations.Where(inst => inst.Product == installation.Product).Max(inst => (int?)inst.S3BucketId)+1 ?? 0;
|
||||||
|
|
||||||
// SQLite wrapper is smart and *modifies* t's Id to the one generated (autoincrement) by the insertion
|
// SQLite wrapper is smart and *modifies* t's Id to the one generated (autoincrement) by the insertion
|
||||||
return Insert(installation);
|
return Insert(installation);
|
||||||
|
|
|
@ -9,7 +9,7 @@ namespace InnovEnergy.App.SaliMax.MiddlewareClasses;
|
||||||
|
|
||||||
public static class MiddlewareAgent
|
public static class MiddlewareAgent
|
||||||
{
|
{
|
||||||
private static UdpClient _udpListener = null!;
|
public static UdpClient UdpListener = null!;
|
||||||
private static IPAddress? _controllerIpAddress;
|
private static IPAddress? _controllerIpAddress;
|
||||||
private static EndPoint? _endPoint;
|
private static EndPoint? _endPoint;
|
||||||
|
|
||||||
|
@ -24,9 +24,9 @@ public static class MiddlewareAgent
|
||||||
const Int32 udpPort = 9000;
|
const Int32 udpPort = 9000;
|
||||||
_endPoint = new IPEndPoint(_controllerIpAddress, udpPort);
|
_endPoint = new IPEndPoint(_controllerIpAddress, udpPort);
|
||||||
|
|
||||||
_udpListener = new UdpClient();
|
UdpListener = new UdpClient();
|
||||||
_udpListener.Client.Blocking = false;
|
UdpListener.Client.Blocking = false;
|
||||||
_udpListener.Client.Bind(_endPoint);
|
UdpListener.Client.Bind(_endPoint);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static IPAddress FindVpnIp()
|
private static IPAddress FindVpnIp()
|
||||||
|
@ -53,7 +53,7 @@ public static class MiddlewareAgent
|
||||||
|
|
||||||
public static Configuration? SetConfigurationFile()
|
public static Configuration? SetConfigurationFile()
|
||||||
{
|
{
|
||||||
if (_udpListener.Available > 0)
|
if (UdpListener.Available > 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
IPEndPoint? serverEndpoint = null;
|
IPEndPoint? serverEndpoint = null;
|
||||||
|
@ -61,7 +61,7 @@ public static class MiddlewareAgent
|
||||||
var replyMessage = "ACK";
|
var replyMessage = "ACK";
|
||||||
var replyData = Encoding.UTF8.GetBytes(replyMessage);
|
var replyData = Encoding.UTF8.GetBytes(replyMessage);
|
||||||
|
|
||||||
var udpMessage = _udpListener.Receive(ref serverEndpoint);
|
var udpMessage = UdpListener.Receive(ref serverEndpoint);
|
||||||
var message = Encoding.UTF8.GetString(udpMessage);
|
var message = Encoding.UTF8.GetString(udpMessage);
|
||||||
|
|
||||||
var config = JsonSerializer.Deserialize<Configuration>(message);
|
var config = JsonSerializer.Deserialize<Configuration>(message);
|
||||||
|
@ -74,13 +74,13 @@ public static class MiddlewareAgent
|
||||||
config.CalibrationChargeDate);
|
config.CalibrationChargeDate);
|
||||||
|
|
||||||
// Send the reply to the sender's endpoint
|
// Send the reply to the sender's endpoint
|
||||||
_udpListener.Send(replyData, replyData.Length, serverEndpoint);
|
UdpListener.Send(replyData, replyData.Length, serverEndpoint);
|
||||||
Console.WriteLine($"Replied to {serverEndpoint}: {replyMessage}");
|
Console.WriteLine($"Replied to {serverEndpoint}: {replyMessage}");
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_endPoint != null && !_endPoint.Equals(_udpListener.Client.LocalEndPoint as IPEndPoint))
|
if (_endPoint != null && !_endPoint.Equals(UdpListener.Client.LocalEndPoint as IPEndPoint))
|
||||||
{
|
{
|
||||||
Console.WriteLine("UDP address has changed, rebinding...");
|
Console.WriteLine("UDP address has changed, rebinding...");
|
||||||
InitializeCommunicationToMiddleware();
|
InitializeCommunicationToMiddleware();
|
||||||
|
|
|
@ -507,7 +507,7 @@ public static class Topology
|
||||||
{
|
{
|
||||||
var e = pvOnAcIsland is not null? pvOnAcIsland?.Dc.Power.Value: 0;
|
var e = pvOnAcIsland is not null? pvOnAcIsland?.Dc.Power.Value: 0;
|
||||||
var f = loadOnAcIsland is not null? loadOnAcIsland?.Ac.Power : 0;
|
var f = loadOnAcIsland is not null? loadOnAcIsland?.Ac.Power : 0;
|
||||||
var g = acDc ?.Ac.Power; // We dont check on the AcDc because this device is mandatory, if this does not exist the system will not start
|
var g = acDc ?.Ac.Power; // We don't check on the AcDc because this device is mandatory, if this does not exist the system will not start
|
||||||
|
|
||||||
if (e is null || f is null || g is null)
|
if (e is null || f is null || g is null)
|
||||||
return null;
|
return null;
|
||||||
|
@ -519,9 +519,9 @@ public static class Topology
|
||||||
|
|
||||||
public static DcPowerDevice? CalculateDcLoad(AcDcDevicesRecord? acDc, AmptStatus? pvOnDc, DcDcDevicesRecord? dcDc)
|
public static DcPowerDevice? CalculateDcLoad(AcDcDevicesRecord? acDc, AmptStatus? pvOnDc, DcDcDevicesRecord? dcDc)
|
||||||
{
|
{
|
||||||
var h = acDc?.Dc.Power; // We dont check on the AcDc because this device is mandatory
|
var h = acDc?.Dc.Power; // We don't check on the AcDc because this device is mandatory
|
||||||
var i = pvOnDc is not null? pvOnDc?.Dc.Power: 0;
|
var i = pvOnDc is not null? pvOnDc?.Dc.Power: 0;
|
||||||
var k = dcDc?.Dc.Link.Power; // We dont check on the DcDc because this device is mandatory
|
var k = dcDc?.Dc.Link.Power; // We don't check on the DcDc because this device is mandatory
|
||||||
|
|
||||||
if (h is null || i is null || k is null)
|
if (h is null || i is null || k is null)
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -54,6 +54,6 @@ INNOVENERGY_PROTOCOL_VERSION = '48TL200V3'
|
||||||
|
|
||||||
|
|
||||||
# S3 Credentials
|
# S3 Credentials
|
||||||
S3BUCKET = "35-c0436b6a-d276-4cd8-9c44-1eae86cf5d0e"
|
S3BUCKET = "91-c0436b6a-d276-4cd8-9c44-1eae86cf5d0e"
|
||||||
S3KEY = "EXO2a70f415b6b387b5628020bd"
|
S3KEY = "EXOe6dce12288f11a676c2025a1"
|
||||||
S3SECRET = "qdlYoXDZyME8LEB8BFTuCmJoTzkP2Nebr2jVmlXUzgY"
|
S3SECRET = "xpqM4Eh0Gg1HaYVkzlR9X6PwYa-QNb-mVk0XUkwW3cc"
|
||||||
|
|
Loading…
Reference in New Issue