Initial commit
This commit is contained in:
24
DataModels/BatteryControllerPacket.cs
Normal file
24
DataModels/BatteryControllerPacket.cs
Normal 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
|
||||
{
|
||||
}
|
||||
14
DataModels/DataModels.csproj
Normal file
14
DataModels/DataModels.csproj
Normal 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
56
DataModels/DataPacket.cs
Normal 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
6
DataModels/Extensions.cs
Normal 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);
|
||||
}
|
||||
63
DataModels/PacketParser.cs
Normal file
63
DataModels/PacketParser.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
47
DataModels/SerialDataPacket.cs
Normal file
47
DataModels/SerialDataPacket.cs
Normal 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)
|
||||
{
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user