Merge branch 'main' of 91.92.155.224:Innovenergy/Innovenergy_trunk

This commit is contained in:
Yinyin Liu 2024-08-06 13:01:58 +02:00
commit c2f68e81db
6 changed files with 83 additions and 73 deletions

View File

@ -226,6 +226,12 @@
<ItemGroup>
<Compile Remove="DataTypes\CsvName.cs" />
</ItemGroup>

View File

@ -177,70 +177,76 @@ 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));
string configPath = "/home/ubuntu/.s3cfg"; Int64 endTimestamp = Int64.Parse(end.ToString().Substring(0,5));
try string configPath = "/home/ubuntu/.s3cfg";
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)
{ {
@ -249,8 +255,6 @@ public class Controller : ControllerBase
Console.WriteLine("SampledTimestamps = " + allTimestamps.Count); Console.WriteLine("SampledTimestamps = " + allTimestamps.Count);
return allTimestamps; return allTimestamps;
} }
int interval = totalRecords / sampleSize; int interval = totalRecords / sampleSize;
var sampledTimestamps = new List<Int64>(); var sampledTimestamps = new List<Int64>();

View File

@ -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);

View File

@ -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();

View File

@ -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;

View File

@ -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"