From 72ced4be3e1636f7eec8273ca2f835a1879b003c Mon Sep 17 00:00:00 2001 From: Sina Blattmann Date: Thu, 6 Jul 2023 15:01:16 +0200 Subject: [PATCH 01/19] change baseurl --- .../Frontend/src/config/axiosConfig.tsx | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/typescript/Frontend/src/config/axiosConfig.tsx b/typescript/Frontend/src/config/axiosConfig.tsx index 38e7e1f81..21a907f32 100644 --- a/typescript/Frontend/src/config/axiosConfig.tsx +++ b/typescript/Frontend/src/config/axiosConfig.tsx @@ -1,25 +1,25 @@ -import axios from "axios"; - -export const axiosConfigWithoutToken = axios.create({ - baseURL: "https://localhost:7087/api", -}); - -const axiosConfig = axios.create({ - baseURL: "https://localhost:7087/api", -}); -axiosConfig.defaults.params = {}; -axiosConfig.interceptors.request.use( - (config) => { - const tokenString = localStorage.getItem("token"); - const token = tokenString !== null ? JSON.parse(tokenString) : ""; - if (token) { - config.params["authToken"] = token; - } - return config; - }, - (error) => { - return Promise.reject(error); - } -); - -export default axiosConfig; +import axios from "axios"; + +export const axiosConfigWithoutToken = axios.create({ + baseURL: "https://monitor.innov.energy:5000/api", +}); + +const axiosConfig = axios.create({ + baseURL: "https://monitor.innov.energy:5000/api", +}); +axiosConfig.defaults.params = {}; +axiosConfig.interceptors.request.use( + (config) => { + const tokenString = localStorage.getItem("token"); + const token = tokenString !== null ? JSON.parse(tokenString) : ""; + if (token) { + config.params["authToken"] = token; + } + return config; + }, + (error) => { + return Promise.reject(error); + } +); + +export default axiosConfig; From 39262d1a469fd040cbc8800a28f55d0e252380e3 Mon Sep 17 00:00:00 2001 From: ig Date: Thu, 6 Jul 2023 15:18:57 +0200 Subject: [PATCH 02/19] Use IReadOnlyList for BatteryNodes --- csharp/App/SaliMax/src/Program.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/csharp/App/SaliMax/src/Program.cs b/csharp/App/SaliMax/src/Program.cs index 665201e29..6ca756dae 100644 --- a/csharp/App/SaliMax/src/Program.cs +++ b/csharp/App/SaliMax/src/Program.cs @@ -33,7 +33,7 @@ internal static class Program private const UInt32 UpdateIntervalSeconds = 2; - private static readonly Byte[] BatteryNodes = { 2, 3, 4, 5, 6 }; + private static readonly IReadOnlyList BatteryNodes; private static readonly TcpChannel TruConvertAcChannel ; private static readonly TcpChannel TruConvertDcChannel ; @@ -55,6 +55,12 @@ internal static class Program AmptChannel = new TcpChannel(d.AmptIp); RelaysChannel = new TcpChannel(d.RelaysIp); BatteriesChannel = new TcpChannel(d.BatteryIp); + + BatteryNodes = config + .Devices + .BatteryNodes + .Select(n=>n.ConvertTo()) + .ToArray(config.Devices.BatteryNodes.Length); } public static async Task Main(String[] args) @@ -103,7 +109,7 @@ internal static class Program var pvOnAcGrid = AcPowerDevice.Null; var pvOnAcIsland = AcPowerDevice.Null; - var gridPower = gridMeter is null ? AcPower.Null : gridMeter.Ac.Power; + var gridPower = gridMeter is null ? AcPower.Null : gridMeter.Ac.Power; var islandLoadPower = loadOnAcIsland is null ? AcPower.Null : loadOnAcIsland.Ac.Power; var inverterAcPower = acDc.Ac.Power; From 48c2cdcbc635e5fe246d07815263174df09a2966 Mon Sep 17 00:00:00 2001 From: atef Date: Tue, 4 Jul 2023 10:23:12 +0200 Subject: [PATCH 03/19] Add root name space property for the rest of the projects --- .../Trumpf/SystemControl/SystemControl.csproj | 15 ++++++++++----- .../Trumpf/TruConvertAc/TruConvertAc.csproj | 18 +++++++++++------- .../Trumpf/TruConvertDc/TruConvertDc.csproj | 19 +++++++++++-------- csharp/Lib/SrcGen/SrcGen.csproj | 6 ++++++ csharp/Lib/Victron/VeDBus/VeDBus.csproj | 4 ++++ .../Lib/Victron/VictronVRM/VictronVRM.csproj | 4 ++++ 6 files changed, 46 insertions(+), 20 deletions(-) diff --git a/csharp/Lib/Devices/Trumpf/SystemControl/SystemControl.csproj b/csharp/Lib/Devices/Trumpf/SystemControl/SystemControl.csproj index 60ab530b6..31f201d1f 100644 --- a/csharp/Lib/Devices/Trumpf/SystemControl/SystemControl.csproj +++ b/csharp/Lib/Devices/Trumpf/SystemControl/SystemControl.csproj @@ -1,9 +1,14 @@ - - - - - + + + + InnovEnergy.Lib.Devices.Trumpf.SystemControl + + + + + + diff --git a/csharp/Lib/Devices/Trumpf/TruConvertAc/TruConvertAc.csproj b/csharp/Lib/Devices/Trumpf/TruConvertAc/TruConvertAc.csproj index 74d8eea2f..4969d5dab 100644 --- a/csharp/Lib/Devices/Trumpf/TruConvertAc/TruConvertAc.csproj +++ b/csharp/Lib/Devices/Trumpf/TruConvertAc/TruConvertAc.csproj @@ -1,11 +1,15 @@ - - - - - - - + + + + InnovEnergy.Lib.Devices.Trumpf.TruConvertAc + + + + + + + \ No newline at end of file diff --git a/csharp/Lib/Devices/Trumpf/TruConvertDc/TruConvertDc.csproj b/csharp/Lib/Devices/Trumpf/TruConvertDc/TruConvertDc.csproj index c365582be..ce1debdf7 100644 --- a/csharp/Lib/Devices/Trumpf/TruConvertDc/TruConvertDc.csproj +++ b/csharp/Lib/Devices/Trumpf/TruConvertDc/TruConvertDc.csproj @@ -1,12 +1,15 @@ + - - - - - - - - + + InnovEnergy.Lib.Devices.Trumpf.TruConvertDc + + + + + + + + diff --git a/csharp/Lib/SrcGen/SrcGen.csproj b/csharp/Lib/SrcGen/SrcGen.csproj index 7f0fcac19..92cbc3d8c 100644 --- a/csharp/Lib/SrcGen/SrcGen.csproj +++ b/csharp/Lib/SrcGen/SrcGen.csproj @@ -2,6 +2,12 @@ + + + InnovEnergy.Lib.SrcGen + + + diff --git a/csharp/Lib/Victron/VeDBus/VeDBus.csproj b/csharp/Lib/Victron/VeDBus/VeDBus.csproj index 23827110a..ac40b053d 100644 --- a/csharp/Lib/Victron/VeDBus/VeDBus.csproj +++ b/csharp/Lib/Victron/VeDBus/VeDBus.csproj @@ -7,6 +7,10 @@ + + InnovEnergy.Lib.Victron.VeDBus + + diff --git a/csharp/Lib/Victron/VictronVRM/VictronVRM.csproj b/csharp/Lib/Victron/VictronVRM/VictronVRM.csproj index 57128f448..9f1ced645 100644 --- a/csharp/Lib/Victron/VictronVRM/VictronVRM.csproj +++ b/csharp/Lib/Victron/VictronVRM/VictronVRM.csproj @@ -11,6 +11,10 @@ AnyCPU;linux-arm + + InnovEnergy.Lib.Victron.VictronVRM + + From e9c2e16b5a61322b0e3e98b8a6988ae9fb19e327 Mon Sep 17 00:00:00 2001 From: atef Date: Mon, 10 Jul 2023 10:07:00 +0200 Subject: [PATCH 04/19] Add percent in Units --- csharp/Lib/Units/Units.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/csharp/Lib/Units/Units.cs b/csharp/Lib/Units/Units.cs index 161b52a0e..50fae56a2 100644 --- a/csharp/Lib/Units/Units.cs +++ b/csharp/Lib/Units/Units.cs @@ -21,6 +21,7 @@ public static class Units public static Temperature Celsius(this Double value) => value; public static Energy KWh (this Double value) => value * 1000; public static Energy Wh (this Double value) => value; + public static Percent Percent(this Double value) => value; public static String ToCsv(this Object thing) { From c2f32cdc95635a2e71a97016816acb84bfabb00f Mon Sep 17 00:00:00 2001 From: atef Date: Mon, 10 Jul 2023 10:07:53 +0200 Subject: [PATCH 05/19] Add salimax0003 run script --- csharp/App/SaliMax/tunnelstoSalimax0001.sh | 2 + csharp/App/SaliMax/tunnelstoSalimax0003.sh | 43 ++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100755 csharp/App/SaliMax/tunnelstoSalimax0003.sh diff --git a/csharp/App/SaliMax/tunnelstoSalimax0001.sh b/csharp/App/SaliMax/tunnelstoSalimax0001.sh index f538423bb..8b5fb2697 100755 --- a/csharp/App/SaliMax/tunnelstoSalimax0001.sh +++ b/csharp/App/SaliMax/tunnelstoSalimax0001.sh @@ -35,6 +35,8 @@ tunnel "Ext Emu Meter (modbus) " 10.0.4.1 502 4003 tunnel "Int Emu Meter " 10.0.4.2 502 4004 tunnel "AMPT (modbus) " 10.0.5.1 502 4005 tunnel "Adam " 10.0.1.1 502 4006 +tunnel "Batteries " 127.0.0.1 6855 5007 + diff --git a/csharp/App/SaliMax/tunnelstoSalimax0003.sh b/csharp/App/SaliMax/tunnelstoSalimax0003.sh new file mode 100755 index 000000000..da40a584a --- /dev/null +++ b/csharp/App/SaliMax/tunnelstoSalimax0003.sh @@ -0,0 +1,43 @@ +#!/bin/bash + +host=ie-entwicklung@10.2.4.33 + +tunnel() { + name=$1 + ip=$2 + rPort=$3 + lPort=$4 + + echo -n "localhost:$lPort $name " + ssh -nNTL "$lPort:$ip:$rPort" "$host" 2> /dev/null & + + until nc -vz 127.0.0.1 $lPort 2> /dev/null + do + echo -n . + sleep 0.3 + done + + echo "ok" +} + +echo "" + +tunnel "Trumpf Inverter (http) " 10.0.2.1 80 6001 +tunnel "Trumpf DCDC (http) " 10.0.3.1 80 6002 +tunnel "Ext Emu Meter (http) " 10.0.4.1 80 6003 +tunnel "Int Emu Meter (http) " 10.0.4.2 80 6004 +tunnel "AMPT (http) " 10.0.5.1 8080 6005 + +tunnel "Trumpf Inverter (modbus)" 10.0.2.1 502 3001 +tunnel "Trumpf DCDC (modbus) " 10.0.3.1 502 3002 +tunnel "Ext Emu Meter (modbus) " 10.0.4.1 502 3003 +tunnel "Int Emu Meter " 10.0.4.2 502 3004 +tunnel "AMPT (modbus) " 10.0.5.1 502 3005 +tunnel "Batteries " 127.0.0.1 6855 5007 + + +echo +echo "press any key to close the tunnels ..." +read -r -n 1 -s +kill $(jobs -p) +echo "done" From 4ee7aebf952b45f7ce00c496d86347b9a9f7a666 Mon Sep 17 00:00:00 2001 From: atef Date: Mon, 10 Jul 2023 10:10:39 +0200 Subject: [PATCH 06/19] Add display messages, Battery alarms and warnings --- csharp/App/SaliMax/src/Program.cs | 42 ++++++++++++++++++++++--------- 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/csharp/App/SaliMax/src/Program.cs b/csharp/App/SaliMax/src/Program.cs index 6ca756dae..ed99a83da 100644 --- a/csharp/App/SaliMax/src/Program.cs +++ b/csharp/App/SaliMax/src/Program.cs @@ -99,12 +99,25 @@ internal static class Program StatusRecord ReadStatus() { + Console.WriteLine(" Reading AcDC"); var acDc = acDcDevices.Read(); + + Console.WriteLine(" Reading dcDc"); var dcDc = dcDcDevices.Read(); + + Console.WriteLine(" Reading battery"); var battery = batteryDevices.Read(); + + Console.WriteLine(" Reading relays"); var relays = saliMaxRelaysDevice.Read(); + + Console.WriteLine(" loadOnAcIsland"); var loadOnAcIsland = acIslandLoadMeter.Read(); + + Console.WriteLine(" Reading gridMeter"); var gridMeter = gridMeterDevice.Read(); + + Console.WriteLine(" Reading pvOnDc"); var pvOnDc = amptDevice.Read(); var pvOnAcGrid = AcPowerDevice.Null; @@ -241,17 +254,15 @@ internal static class Program var dcLinkVoltage = TextBlock.AlignCenterHorizontal("", s.DcDc.Dc.Link.Voltage.ToDisplayString(), ""); - - //var inverterPowerByPhase = new ActivePower[(Int32)s.AcDc.Ac.L1.Power.Active, (Int32)s.AcDc.Ac.L2.Power.Active, (Int32)s.AcDc.Ac.L3.Power.Active]; - - // Voltage Measurement Values - //var inverterVoltage = new Voltage [(Int32)s.AcDc.Ac.L1.Voltage, (Int32)s.AcDc.Ac.L2.Voltage, (Int32)s.AcDc.Ac.L3.Voltage]; - //var dcLinkVoltage = s.DcDc.Dc.Link.Voltage; + var dc48Voltage = s.DcDc.Dc.Battery.Voltage.ToDisplayString(); - var batteryVoltage = s.Battery.Dc.Voltage.ToDisplayString(); - var batterySoc = s.Battery.Soc.ToDisplayString(); + var batteryVoltage = s.Battery.Dc.Voltage.Value.RoundToSignificantDigits(3); + var batterySoc = s.Battery.Devices.Any()? s.Battery.Devices.Average(b=>b.Soc).Percent().ToDisplayString() : "0"; var batteryCurrent = s.Battery.Dc.Current.ToDisplayString(); var batteryTemp = s.Battery.Temperature.ToDisplayString(); + var batteryHeatingCurrent = s.Battery.HeatingCurrent.ToDisplayString(); + var anyBatteryAlarm = s.Battery.Alarms.Any(); + var anyBatteryWarning = s.Battery.Warnings.Any(); var gridBusColumn = ColumnBox("Pv", "Grid Bus", "Load" , gridVoltageByPhase , gridLoadPower); var islandBusColumn = ColumnBox("Pv", "Island Bus", "Load" , inverterPowerByPhase, islandLoadPower); @@ -269,12 +280,15 @@ internal static class Program var batteryAvgBox = TextBlock.AlignLeft(batteryVoltage, batterySoc, batteryCurrent, - batteryTemp) + batteryTemp, + batteryHeatingCurrent, + anyBatteryWarning, + anyBatteryAlarm) .TitleBox("Battery"); //////////////////// Batteries ///////////////////////// - + IReadOnlyList batteryBoxes = s.Battery .Devices .Select(CreateIndividualBattery) @@ -303,13 +317,17 @@ internal static class Program private static TextBlock CreateIndividualBattery(Battery48TlRecord battery, Int32 i) { + var batteryWarnings = battery.Warnings.Any(); + var batteryAlarms = battery.Alarms.Any(); var content = TextBlock.AlignLeft(battery.Dc.Voltage.ToDisplayString(), battery.Soc.ToDisplayString(), battery.Dc.Current.ToDisplayString(), battery.Temperatures.Cells.Average.ToDisplayString(), - battery.BusCurrent.ToDisplayString(), - battery.HeatingCurrent.ToDisplayString()); + // battery.BusCurrent.ToDisplayString(), + battery.HeatingCurrent.ToDisplayString(), + batteryWarnings, + batteryAlarms); var box = content.TitleBox($"Battery {i + 1}"); From 93d8936430c7cd55435a2c052d47d3b0fc3ae78b Mon Sep 17 00:00:00 2001 From: atef Date: Mon, 10 Jul 2023 10:22:09 +0200 Subject: [PATCH 07/19] Add Console Writeline in Log --- csharp/App/SaliMax/src/Logfile.cs | 2 ++ csharp/App/SaliMax/src/SaliMaxRelays/RelaysDevice.cs | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/csharp/App/SaliMax/src/Logfile.cs b/csharp/App/SaliMax/src/Logfile.cs index 2d95a323d..6465109df 100644 --- a/csharp/App/SaliMax/src/Logfile.cs +++ b/csharp/App/SaliMax/src/Logfile.cs @@ -42,6 +42,8 @@ public class CustomLogger : ILogger // Write the log message to the file File.AppendAllText(_LogFilePath, logMessage + Environment.NewLine); _CurrentFileSizeBytes += logMessage.Length; + + Console.WriteLine( logMessage + Environment.NewLine); } private void RotateLogFile() diff --git a/csharp/App/SaliMax/src/SaliMaxRelays/RelaysDevice.cs b/csharp/App/SaliMax/src/SaliMaxRelays/RelaysDevice.cs index 31afb815c..118d1ed54 100644 --- a/csharp/App/SaliMax/src/SaliMaxRelays/RelaysDevice.cs +++ b/csharp/App/SaliMax/src/SaliMaxRelays/RelaysDevice.cs @@ -18,7 +18,7 @@ public class RelaysDevice } catch (Exception e) { - $"Failed to read from {nameof(RelaysDevice)}\n{e}".LogInfo(); + $"Failed to read from {nameof(RelaysDevice)}\n{e}".LogError(); // TODO: log return null; @@ -33,7 +33,7 @@ public class RelaysDevice } catch (Exception e) { - $"Failed to write to {nameof(RelaysDevice)}\n{e}".LogInfo(); + $"Failed to write to {nameof(RelaysDevice)}\n{e}".LogError(); } } } From bd24a725c68299bfda32a734f28109b4f58a5eed Mon Sep 17 00:00:00 2001 From: atef Date: Mon, 10 Jul 2023 10:34:51 +0200 Subject: [PATCH 08/19] Add display fail reading error --- csharp/App/SaliMax/src/SystemConfig/Config.cs | 12 ++++++++++-- csharp/Lib/Devices/EmuMeter/EmuMeterDevice.cs | 2 +- .../Trumpf/TruConvertAc/TruConvertAcDcDevices.cs | 4 +++- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/csharp/App/SaliMax/src/SystemConfig/Config.cs b/csharp/App/SaliMax/src/SystemConfig/Config.cs index c75a188d9..294cf1f5d 100644 --- a/csharp/App/SaliMax/src/SystemConfig/Config.cs +++ b/csharp/App/SaliMax/src/SystemConfig/Config.cs @@ -75,7 +75,15 @@ public class Config //TODO: let IE choose from config files (Json) and connect t MinDcBusVoltage = 690, ReferenceDcBusVoltage = 750, MaxDcBusVoltage = 810, - S3 = null, // TODO + S3 = new() + { + Bucket = "saliomameiringen", + Region = "sos-ch-dk-2", + Provider = "exo.io", + ContentType = "text/plain; charset=utf-8", + Key = "EXO2bf0cbd97fbfa75aa36ed46f", + Secret = "Bn1CDPqOG-XpDSbYjfIJxojcHTm391vZTc8z8l_fEPs" + }, Devices = new () { RelaysIp = new() { Host = "10.0.1.1", Port = 502}, @@ -85,7 +93,7 @@ public class Config //TODO: let IE choose from config files (Json) and connect t IslandBusLoadMeterIp = new() { Host = "10.0.4.2", Port = 502}, AmptIp = new() { Host = "10.0.5.1", Port = 502}, BatteryIp = new() { Host = "localhost", Port = 6855}, - BatteryNodes = new []{ 2, 3, 4, 5, 6 }, + BatteryNodes = new []{ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}, }, }; #endif diff --git a/csharp/Lib/Devices/EmuMeter/EmuMeterDevice.cs b/csharp/Lib/Devices/EmuMeter/EmuMeterDevice.cs index 80c460a8d..aab4ca0fd 100644 --- a/csharp/Lib/Devices/EmuMeter/EmuMeterDevice.cs +++ b/csharp/Lib/Devices/EmuMeter/EmuMeterDevice.cs @@ -28,7 +28,7 @@ public class EmuMeterDevice: ModbusDevice } catch { - "Failed to read data from Inverters".WriteLine(); + "Failed to read data from EmuMeter".WriteLine(); return null; } } diff --git a/csharp/Lib/Devices/Trumpf/TruConvertAc/TruConvertAcDcDevices.cs b/csharp/Lib/Devices/Trumpf/TruConvertAc/TruConvertAcDcDevices.cs index 8a049cbb8..31cea2131 100644 --- a/csharp/Lib/Devices/Trumpf/TruConvertAc/TruConvertAcDcDevices.cs +++ b/csharp/Lib/Devices/Trumpf/TruConvertAc/TruConvertAcDcDevices.cs @@ -47,8 +47,10 @@ public class TruConvertAcDcDevices return new AcDcDevicesRecord(scStatus, acDcRecords); } - catch + catch (Exception e) { + Console.WriteLine( "Failed to read AcDc data \n"+ e.Message ); + // TODO: log return new AcDcDevicesRecord(null, Array.Empty()); } } From b37fd90098adefe96d3d3f76fa30713df61089c0 Mon Sep 17 00:00:00 2001 From: atef Date: Mon, 10 Jul 2023 10:35:29 +0200 Subject: [PATCH 09/19] Add battery heating Current --- csharp/Lib/Devices/AMPT/AmptDevices.cs | 2 +- .../Devices/Battery48TL/Battery48TlDevices.cs | 6 ++--- .../Devices/Battery48TL/Battery48TlRecords.cs | 26 ++++++++++--------- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/csharp/Lib/Devices/AMPT/AmptDevices.cs b/csharp/Lib/Devices/AMPT/AmptDevices.cs index 1750d0029..4e8b47256 100644 --- a/csharp/Lib/Devices/AMPT/AmptDevices.cs +++ b/csharp/Lib/Devices/AMPT/AmptDevices.cs @@ -36,7 +36,7 @@ public class AmptDevices } catch (Exception e) { - Console.WriteLine(e); + Console.WriteLine( "Failed to read Ampt data \n"+ e.Message ); // TODO: log } diff --git a/csharp/Lib/Devices/Battery48TL/Battery48TlDevices.cs b/csharp/Lib/Devices/Battery48TL/Battery48TlDevices.cs index 19b636678..866d4a49d 100644 --- a/csharp/Lib/Devices/Battery48TL/Battery48TlDevices.cs +++ b/csharp/Lib/Devices/Battery48TL/Battery48TlDevices.cs @@ -18,13 +18,11 @@ public class Battery48TlDevices return new Battery48TlRecords(records); } - catch + catch (Exception e) { - //Console.WriteLine(e); + Console.WriteLine( "Failed to read Battery data \n"+ e.Message ); // TODO: log - "Failed to read Battery data".WriteLine(); - return Battery48TlRecords.Null; } diff --git a/csharp/Lib/Devices/Battery48TL/Battery48TlRecords.cs b/csharp/Lib/Devices/Battery48TL/Battery48TlRecords.cs index 5d5db55d2..6db267887 100644 --- a/csharp/Lib/Devices/Battery48TL/Battery48TlRecords.cs +++ b/csharp/Lib/Devices/Battery48TL/Battery48TlRecords.cs @@ -9,12 +9,13 @@ public class Battery48TlRecords { var empty = records.Count == 0; - Devices = records; - Eoc = !empty && records.All(r => r.Eoc); - Warnings = records.SelectMany(r => r.Warnings).Distinct().ToList(); - Alarms = records.SelectMany(r => r.Alarms).Distinct().ToList(); - Soc = empty ? 0 : records.Min(r => r.Soc.Value); - Temperature = records.Any() ? records.Average(b => b.Temperatures.Cells.Average.Value) : 0; + Devices = records; + Eoc = !empty && records.All(r => r.Eoc); + Warnings = records.SelectMany(r => r.Warnings).Distinct().ToList(); + Alarms = records.SelectMany(r => r.Alarms).Distinct().ToList(); + Soc = empty ? 0 : records.Min(r => r.Soc.Value); + Temperature = records.Any() ? records.Average(b => b.Temperatures.Cells.Average.Value) : 0; + HeatingCurrent = records.Any() ? records.Sum(b => b.HeatingCurrent) : 0; Dc = empty ? DcBus.FromVoltageCurrent(0, 0) @@ -25,12 +26,13 @@ public class Battery48TlRecords ); } - public DcBus Dc { get; init; } - public Boolean Eoc { get; init; } - public IReadOnlyList Warnings { get; init; } - public IReadOnlyList Alarms { get; init; } - public Percent Soc { get; init; } - public Temperature Temperature { get; init; } + public DcBus Dc { get; init; } + public Boolean Eoc { get; init; } + public IReadOnlyList Warnings { get; init; } + public IReadOnlyList Alarms { get; init; } + public Percent Soc { get; init; } + public Temperature Temperature { get; init; } + public Current HeatingCurrent { get; init; } public IReadOnlyList Devices { get; init; } From b361959f537b1a0d33cf80f961ed0269c1a3fbd6 Mon Sep 17 00:00:00 2001 From: ig Date: Fri, 7 Jul 2023 09:38:29 +0200 Subject: [PATCH 10/19] Properly parametrize deploy script --- csharp/App/Backend/DataTypes/Installation.cs | 1 - csharp/App/OpenVpnCertificatesServer/Program.cs | 2 -- csharp/App/SaliMax/run (Salimax0003).sh | 6 +++--- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/csharp/App/Backend/DataTypes/Installation.cs b/csharp/App/Backend/DataTypes/Installation.cs index f4620d56b..62db53970 100644 --- a/csharp/App/Backend/DataTypes/Installation.cs +++ b/csharp/App/Backend/DataTypes/Installation.cs @@ -2,7 +2,6 @@ using SQLite; namespace InnovEnergy.App.Backend.DataTypes; - public class Installation : TreeNode { public String Location { get; set; } = ""; diff --git a/csharp/App/OpenVpnCertificatesServer/Program.cs b/csharp/App/OpenVpnCertificatesServer/Program.cs index 581699d5f..6189489b3 100644 --- a/csharp/App/OpenVpnCertificatesServer/Program.cs +++ b/csharp/App/OpenVpnCertificatesServer/Program.cs @@ -153,8 +153,6 @@ public static class Program var installations = await vrm.GetInstallations(); - - var installationName = installations .Where(i => i.UniqueId == uniqueId) .Select(i => i.Name) diff --git a/csharp/App/SaliMax/run (Salimax0003).sh b/csharp/App/SaliMax/run (Salimax0003).sh index ba6f5b68c..a47112ee4 100644 --- a/csharp/App/SaliMax/run (Salimax0003).sh +++ b/csharp/App/SaliMax/run (Salimax0003).sh @@ -18,17 +18,17 @@ echo -e "\n============================ Deploy ============================\n" rsync -v \ ./bin/Release/$dotnet_version/linux-x64/publish/* \ - ie-entwicklung@10.2.4.33:~/salimax + $username@$salimax_ip:~/salimax echo -e "\n============================ Restart Salimax sevice ============================\n" ssh -tt \ - ie-entwicklung@10.2.4.33 \ + $username@$salimax_ip \ sudo systemctl restart salimax.service echo -e "\n============================ Print service output ============================\n" ssh -tt \ - ie-entwicklung@10.2.4.33 \ + $username@$salimax_ip \ journalctl -f -u salimax.service \ No newline at end of file From 2a1e7cce93963e8f4309f60322c96b4d85ee3119 Mon Sep 17 00:00:00 2001 From: ig Date: Fri, 7 Jul 2023 09:39:03 +0200 Subject: [PATCH 11/19] fix DynamicallyAccessedMembers warnings (Trimming) --- csharp/Lib/Protocols/Modbus/Slaves/ModbusDevice.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/csharp/Lib/Protocols/Modbus/Slaves/ModbusDevice.cs b/csharp/Lib/Protocols/Modbus/Slaves/ModbusDevice.cs index 8f0acf770..e04c4bef7 100644 --- a/csharp/Lib/Protocols/Modbus/Slaves/ModbusDevice.cs +++ b/csharp/Lib/Protocols/Modbus/Slaves/ModbusDevice.cs @@ -5,7 +5,7 @@ using static System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes; namespace InnovEnergy.Lib.Protocols.Modbus.Slaves; -public class ModbusDevice where R : notnull +public class ModbusDevice<[DynamicallyAccessedMembers(All)] R> where R : notnull { private readonly IReadOnlyList> _Batches; @@ -35,7 +35,7 @@ public class ModbusDevice where R : notnull return Read(r); } - public R Read([DynamicallyAccessedMembers(All)] R record) + public R Read(R record) { foreach (var batch in _Batches) batch.Read(record); @@ -43,7 +43,7 @@ public class ModbusDevice where R : notnull return record; } - public void Write([DynamicallyAccessedMembers(All)] R record) + public void Write(R record) { foreach (var batch in _Batches) batch.Write(record); From 48fe29ef88808eb2fe36ce024d632119ffef2b1e Mon Sep 17 00:00:00 2001 From: ig Date: Mon, 10 Jul 2023 10:38:46 +0200 Subject: [PATCH 12/19] add 500ms Timeout to TcpChannel --- .../Trumpf/TruConvertDc/DcDcRecord.Modbus.cs | 8 ----- .../Protocols/Modbus/Channels/TcpChannel.cs | 35 +++++++++++++++++-- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/csharp/Lib/Devices/Trumpf/TruConvertDc/DcDcRecord.Modbus.cs b/csharp/Lib/Devices/Trumpf/TruConvertDc/DcDcRecord.Modbus.cs index 62a8396e2..c58364efb 100644 --- a/csharp/Lib/Devices/Trumpf/TruConvertDc/DcDcRecord.Modbus.cs +++ b/csharp/Lib/Devices/Trumpf/TruConvertDc/DcDcRecord.Modbus.cs @@ -106,11 +106,3 @@ public partial class DcDcRecord // // #endregion IDcDc } - - - - - - - - diff --git a/csharp/Lib/Protocols/Modbus/Channels/TcpChannel.cs b/csharp/Lib/Protocols/Modbus/Channels/TcpChannel.cs index d026cf6cf..4aa3bd71b 100644 --- a/csharp/Lib/Protocols/Modbus/Channels/TcpChannel.cs +++ b/csharp/Lib/Protocols/Modbus/Channels/TcpChannel.cs @@ -6,9 +6,15 @@ namespace InnovEnergy.Lib.Protocols.Modbus.Channels; public class TcpChannel : ConnectionChannel { + private const Int32 TimeoutMs = 500; // TODO: parametrize - public TcpChannel(Ip4Address ip4Address,Boolean closeAfterSuccessfulRead = false, - Boolean closeAfterSuccessfulWrite = false) : this(ip4Address.Host, ip4Address.Port, closeAfterSuccessfulRead, closeAfterSuccessfulWrite) + public TcpChannel(Ip4Address ip4Address, + Boolean closeAfterSuccessfulRead = false, + Boolean closeAfterSuccessfulWrite = false) : + this(ip4Address.Host, + ip4Address.Port, + closeAfterSuccessfulRead, + closeAfterSuccessfulWrite) { } @@ -18,7 +24,30 @@ public class TcpChannel : ConnectionChannel Boolean closeAfterSuccessfulRead = false, Boolean closeAfterSuccessfulWrite = false) : base(closeAfterSuccessfulRead, closeAfterSuccessfulWrite) { - TcpClient Open() => new(hostname, port); + TcpClient Open() + { + var tcpClient = new TcpClient + { + LingerState = new LingerOption(false, 0), + NoDelay = true, + ReceiveTimeout = TimeoutMs, + SendTimeout = TimeoutMs + }; + + var cts = new CancellationTokenSource(); + + var connected = tcpClient + .ConnectAsync(hostname, port, cts.Token) + .AsTask() + .Wait(TimeoutMs); + + if (connected) + return tcpClient; + + cts.Cancel(); + throw new Exception($"Failed to connect to {hostname}:{port}"); + } + _Open = Open; } From 44a2488b07d8912c04aef34436be250d7d4fc8e0 Mon Sep 17 00:00:00 2001 From: atef Date: Mon, 10 Jul 2023 11:24:53 +0200 Subject: [PATCH 13/19] New excel matrix. --- .../SaliMax/Doc/Zustandsmatrix_Salimax.xlsx | Bin 10911 -> 14028 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/csharp/App/SaliMax/Doc/Zustandsmatrix_Salimax.xlsx b/csharp/App/SaliMax/Doc/Zustandsmatrix_Salimax.xlsx index 6cd1ceb13a707d2d3da83d8bccfdb5ab1293cc68..c240341f39d4089af64b97c77a0c92832d21656e 100644 GIT binary patch delta 11397 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 HKTrPy!JjP5 delta 8390 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 Date: Tue, 11 Jul 2023 14:06:53 +0200 Subject: [PATCH 14/19] Add Iem3KGridMeter project stub --- csharp/InnovEnergy.sln | 7 ++ .../Doc/Acti 9 iEM3000_A9MEM3255.pdf | Bin 0 -> 129781 bytes .../IEM3kGridMeter/Doc/DOCA0005EN-13.pdf | Bin 0 -> 3298000 bytes .../IEM3kGridMeter/Doc/NHA15801-06.pdf | Bin 0 -> 5971794 bytes .../IEM3kGridMeter/IEM3kGridMeter.csproj | 14 ++++ .../IEM3kGridMeter/IEM3kGridMeterDevice.cs | 50 ++++++++++++ .../IEM3kGridMeter/IEM3kGridMeterRegisters.cs | 73 ++++++++++++++++++ 7 files changed, 144 insertions(+) create mode 100644 csharp/Lib/Devices/IEM3kGridMeter/Doc/Acti 9 iEM3000_A9MEM3255.pdf create mode 100644 csharp/Lib/Devices/IEM3kGridMeter/Doc/DOCA0005EN-13.pdf create mode 100644 csharp/Lib/Devices/IEM3kGridMeter/Doc/NHA15801-06.pdf create mode 100644 csharp/Lib/Devices/IEM3kGridMeter/IEM3kGridMeter.csproj create mode 100644 csharp/Lib/Devices/IEM3kGridMeter/IEM3kGridMeterDevice.cs create mode 100644 csharp/Lib/Devices/IEM3kGridMeter/IEM3kGridMeterRegisters.cs diff --git a/csharp/InnovEnergy.sln b/csharp/InnovEnergy.sln index 64acaf80f..beaac246d 100644 --- a/csharp/InnovEnergy.sln +++ b/csharp/InnovEnergy.sln @@ -75,6 +75,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Logging", "Lib\Logging\Logg EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Adam6360D", "Lib\Devices\Adam6360D\Adam6360D.csproj", "{A3C79247-4CAA-44BE-921E-7285AB39E71F}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IEM3kGridMeter", "Lib\Devices\IEM3kGridMeter\IEM3kGridMeter.csproj", "{1391165D-51F1-45B4-8B7F-042A20AA0277}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -190,6 +192,10 @@ Global {A3C79247-4CAA-44BE-921E-7285AB39E71F}.Debug|Any CPU.Build.0 = Debug|Any CPU {A3C79247-4CAA-44BE-921E-7285AB39E71F}.Release|Any CPU.ActiveCfg = Release|Any CPU {A3C79247-4CAA-44BE-921E-7285AB39E71F}.Release|Any CPU.Build.0 = Release|Any CPU + {1391165D-51F1-45B4-8B7F-042A20AA0277}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1391165D-51F1-45B4-8B7F-042A20AA0277}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1391165D-51F1-45B4-8B7F-042A20AA0277}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1391165D-51F1-45B4-8B7F-042A20AA0277}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {CF4834CB-91B7-4172-AC13-ECDA8613CD17} = {145597B4-3E30-45E6-9F72-4DD43194539A} @@ -223,5 +229,6 @@ Global {B816BB44-E97E-4E02-B80A-BEDB5B923A96} = {DDDBEFD0-5DEA-4C7C-A9F2-FDB4636CF092} {1A56992B-CB72-490F-99A4-DF1186BA3A18} = {AD5B98A8-AB7F-4DA2-B66D-5B4E63E7D854} {A3C79247-4CAA-44BE-921E-7285AB39E71F} = {4931A385-24DC-4E78-BFF4-356F8D6D5183} + {1391165D-51F1-45B4-8B7F-042A20AA0277} = {4931A385-24DC-4E78-BFF4-356F8D6D5183} EndGlobalSection EndGlobal diff --git a/csharp/Lib/Devices/IEM3kGridMeter/Doc/Acti 9 iEM3000_A9MEM3255.pdf b/csharp/Lib/Devices/IEM3kGridMeter/Doc/Acti 9 iEM3000_A9MEM3255.pdf new file mode 100644 index 0000000000000000000000000000000000000000..fc758ccd2f40f6589d8cdac1e4d6037d85fd96c3 GIT binary patch literal 129781 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
oMvvN-!$jbCykS>P;s4gy;v4AaiG~^`SxT5?qI| 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%0A6cfw^T@1LZo?ELR+#> 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