1
0

Initial commit

This commit is contained in:
2023-06-21 13:51:38 +02:00
commit 957670ce42
45 changed files with 1894 additions and 0 deletions

View File

@@ -0,0 +1,24 @@
using System.Text.Json.Serialization;
namespace MoniteurBaie.DataModels;
public class BatteryControllerPacket
{
public BatteryControllerPacket(string serialData) : this(DateTime.Now, serialData) { }
[JsonConstructor]
public BatteryControllerPacket(DateTime timestamp, string serialData)
{
Timestamp = timestamp;
SerialData = serialData;
}
public DateTime Timestamp { get; private set; }
public string SerialData { get; private set; }
}
[JsonSerializable(typeof(BatteryControllerPacket))]
public partial class BatteryControllerPacketContext : JsonSerializerContext
{
}

View File

@@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<RootNamespace>$(SolutionName.Replace(" ", "_")).$(MSBuildProjectName.Replace(" ", "_"))</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Utils\Utils.csproj" />
</ItemGroup>
</Project>

56
DataModels/DataPacket.cs Normal file
View File

@@ -0,0 +1,56 @@
using System.Text.Json.Serialization;
namespace MoniteurBaie.DataModels;
public record DataPacket(
uint Id,
DateTime Timestamp,
float VB1,
float VB2,
float VB3,
float VB4,
float VB5,
float VB6,
float VBat,
float VBmin,
float VBmax,
float Curr,
float Power,
float Energy,
float Temp_alim,
float Temp_cha,
float Temp_bat,
bool DF_TEMP_ALIM,
bool MEM_DF_TEMP_ALIM,
bool DF_TEMP_BAT,
bool MEM_DF_TEMP_BAT,
bool DF_TEMP_CHA,
bool MEM_DF_TEMP_CHA,
bool DF_V_INCOHERENT,
bool DF_BAD_CELL,
bool DF_OVERCURRENT,
bool DF_OVERCURRENT_STOP,
bool DF_STOP_GENERAL,
bool DF_GENERAL,
bool DF_CELL_OVERVOLTAGE,
bool MEM_DF_CELL_OVERVOLTAGE,
bool DF_UNBALANCE,
bool MEM_DF_UNBALANCE,
bool Buzzer_stop,
bool DECHARGE,
bool MEM_DECHARGE,
uint Compteur_demande_coupure_batterie,
uint Compteur_demande_coupure_totale,
bool S_PowRelay,
bool S_ChaRelay,
bool S_BatRelay1,
bool S_BatRelay_State,
bool Flag_decharge)
{
}
[JsonSerializable(typeof(DataPacket))]
public partial class DataPacketContext : JsonSerializerContext
{
}

6
DataModels/Extensions.cs Normal file
View File

@@ -0,0 +1,6 @@
namespace MoniteurBaie.DataModels;
public static class Extensions
{
public static DataPacket ToDataPacket(this SerialDataPacket packet, DateTime timestamp) => new(default, timestamp, packet.VB1, packet.VB2, packet.VB3, packet.VB4, packet.VB5, packet.VB6, packet.VBat, packet.VBmin, packet.VBmax, packet.Curr, packet.Power, packet.Energy, packet.Temp_alim, packet.Temp_cha, packet.Temp_bat, packet.DF_TEMP_ALIM, packet.MEM_DF_TEMP_ALIM, packet.DF_TEMP_BAT, packet.MEM_DF_TEMP_BAT, packet.DF_TEMP_CHA, packet.MEM_DF_TEMP_CHA, packet.DF_V_INCOHERENT, packet.DF_BAD_CELL, packet.DF_OVERCURRENT, packet.DF_OVERCURRENT_STOP, packet.DF_STOP_GENERAL, packet.DF_GENERAL, packet.DF_CELL_OVERVOLTAGE, packet.MEM_DF_CELL_OVERVOLTAGE, packet.DF_UNBALANCE, packet.MEM_DF_UNBALANCE, packet.Buzzer_stop, packet.DECHARGE, packet.MEM_DECHARGE, packet.Compteur_demande_coupure_batterie, packet.Compteur_demande_coupure_totale, packet.S_PowRelay, packet.S_ChaRelay, packet.S_BatRelay1, packet.S_BatRelay_State, packet.Flag_decharge);
}

View File

@@ -0,0 +1,63 @@
using MoniteurBaie.Utils;
namespace MoniteurBaie.DataModels;
public static class PacketParser
{
public static SerialDataPacket ParseSerialDataPacket(string s)
{
// "COM,{VB1},{VB2},{VB3},{VB4},{VB5},{VB6},{VBat},{VBmin},{VBmax},{Curr},{Power},{Energy},{Temp_alim},{Temp_cha},{Temp_bat},{DF_TEMP_ALIM},{MEM_DF_TEMP_ALIM},{DF_TEMP_BAT},{MEM_DF_TEMP_BAT},{DF_TEMP_CHA},{MEM_DF_TEMP_CHA},{DF_V_INCOHERENT},{DF_BAD_CELL},{DF_OVERCURRENT},{DF_OVERCURRENT_STOP},{DF_STOP_GENERAL},{DF_GENERAL},{DF_CELL_OVERVOLTAGE},{MEM_DF_CELL_OVERVOLTAGE},{DF_UNBALANCE},{MEM_DF_UNBALANCE},{Buzzer_stop},{DECHARGE},{MEM_DECHARGE},{Compteur_demande_coupure_batterie},{Compteur_demande_coupure_totale},{!digitalRead(S_PowRelay)},{digitalRead(S_ChaRelay)},{digitalRead(S_BatRelay1)},{S_BatRelay_State},{flag_decharge}";
var splitter = new Splitter(s);
var header = splitter.ReadString();
if (header is not "COM")
{
throw new Exception("Invalid packet header.");
}
var VB1 = splitter.ReadFloat();
var VB2 = splitter.ReadFloat();
var VB3 = splitter.ReadFloat();
var VB4 = splitter.ReadFloat();
var VB5 = splitter.ReadFloat();
var VB6 = splitter.ReadFloat();
var VBat = splitter.ReadFloat();
var VBmin = splitter.ReadFloat();
var VBmax = splitter.ReadFloat();
var Curr = splitter.ReadFloat();
var Power = splitter.ReadFloat();
var Energy = splitter.ReadFloat();
var Temp_alim = splitter.ReadFloat();
var Temp_cha = splitter.ReadFloat();
var Temp_bat = splitter.ReadFloat();
var DF_TEMP_ALIM = splitter.ReadBool();
var MEM_DF_TEMP_ALIM = splitter.ReadBool();
var DF_TEMP_BAT = splitter.ReadBool();
var MEM_DF_TEMP_BAT = splitter.ReadBool();
var DF_TEMP_CHA = splitter.ReadBool();
var MEM_DF_TEMP_CHA = splitter.ReadBool();
var DF_V_INCOHERENT = splitter.ReadBool();
var DF_BAD_CELL = splitter.ReadBool();
var DF_OVERCURRENT = splitter.ReadBool();
var DF_OVERCURRENT_STOP = splitter.ReadBool();
var DF_STOP_GENERAL = splitter.ReadBool();
var DF_GENERAL = splitter.ReadBool();
var DF_CELL_OVERVOLTAGE = splitter.ReadBool();
var MEM_DF_CELL_OVERVOLTAGE = splitter.ReadBool();
var DF_UNBALANCE = splitter.ReadBool();
var MEM_DF_UNBALANCE = splitter.ReadBool();
var Buzzer_stop = splitter.ReadBool();
var DECHARGE = splitter.ReadBool();
var MEM_DECHARGE = splitter.ReadBool();
var Compteur_demande_coupure_batterie = splitter.ReadUInt();
var Compteur_demande_coupure_totale = splitter.ReadUInt();
var S_PowRelay = splitter.ReadBool();
var S_ChaRelay = splitter.ReadBool();
var S_BatRelay1 = splitter.ReadBool();
var S_BatRelay_State = splitter.ReadBool();
var Flag_decharge = splitter.ReadBool();
return new(VB1, VB2, VB3, VB4, VB5, VB6, VBat, VBmin, VBmax, Curr, Power, Energy, Temp_alim, Temp_cha, Temp_bat, DF_TEMP_ALIM, MEM_DF_TEMP_ALIM, DF_TEMP_BAT, MEM_DF_TEMP_BAT, DF_TEMP_CHA, MEM_DF_TEMP_CHA, DF_V_INCOHERENT, DF_BAD_CELL, DF_OVERCURRENT, DF_OVERCURRENT_STOP, DF_STOP_GENERAL, DF_GENERAL, DF_CELL_OVERVOLTAGE, MEM_DF_CELL_OVERVOLTAGE, DF_UNBALANCE, MEM_DF_UNBALANCE, Buzzer_stop, DECHARGE, MEM_DECHARGE, Compteur_demande_coupure_batterie, Compteur_demande_coupure_totale, S_PowRelay, S_ChaRelay, S_BatRelay1, S_BatRelay_State, Flag_decharge);
}
}

View File

@@ -0,0 +1,47 @@
namespace MoniteurBaie.DataModels;
public record SerialDataPacket(
float VB1,
float VB2,
float VB3,
float VB4,
float VB5,
float VB6,
float VBat,
float VBmin,
float VBmax,
float Curr,
float Power,
float Energy,
float Temp_alim,
float Temp_cha,
float Temp_bat,
bool DF_TEMP_ALIM,
bool MEM_DF_TEMP_ALIM,
bool DF_TEMP_BAT,
bool MEM_DF_TEMP_BAT,
bool DF_TEMP_CHA,
bool MEM_DF_TEMP_CHA,
bool DF_V_INCOHERENT,
bool DF_BAD_CELL,
bool DF_OVERCURRENT,
bool DF_OVERCURRENT_STOP,
bool DF_STOP_GENERAL,
bool DF_GENERAL,
bool DF_CELL_OVERVOLTAGE,
bool MEM_DF_CELL_OVERVOLTAGE,
bool DF_UNBALANCE,
bool MEM_DF_UNBALANCE,
bool Buzzer_stop,
bool DECHARGE,
bool MEM_DECHARGE,
uint Compteur_demande_coupure_batterie,
uint Compteur_demande_coupure_totale,
bool S_PowRelay,
bool S_ChaRelay,
bool S_BatRelay1,
bool S_BatRelay_State,
bool Flag_decharge)
{
}