e-register AuthLevel Pin - Fix - 0D to D0

This commit is contained in:
Stoyan Zlatev
2025-08-26 15:48:36 +02:00
parent 93c0eff3b5
commit 82a50b9460
11 changed files with 200 additions and 97 deletions
-38
View File
@@ -37,18 +37,9 @@
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Net.Http">
<HintPath>..\..\..\..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Net.Http.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
@@ -63,35 +54,6 @@
<Project>{4e8bb839-d40a-488c-88ce-f21811f1f476}</Project>
<Name>Common.Hardware.WaterMeter.eRegister</Name>
</ProjectReference>
<ProjectReference Include="..\Hardware\WaterMeter\Genesis\Registers\Registers.csproj">
<Project>{f4aaf7e6-7333-4284-b735-e32deb076c64}</Project>
<Name>Registers</Name>
</ProjectReference>
<ProjectReference Include="..\LaaPackages\LaaPackages.SqlClient\LaaPackages.SqlClient.csproj">
<Project>{F90B940C-9A83-496D-AAE0-11CD02CE0A22}</Project>
<Name>LaaPackages.SqlClient</Name>
</ProjectReference>
<ProjectReference Include="..\Stichproben\Stichproben.csproj">
<Project>{F69A79FA-548D-4E21-887E-01FABDAD9E73}</Project>
<Name>Stichproben</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<PackageReference Include="FluentAssertions">
<Version>8.3.0</Version>
</PackageReference>
<PackageReference Include="Microsoft.SharePointOnline.CSOM">
<Version>16.1.26121.12000</Version>
</PackageReference>
<PackageReference Include="NUnit">
<Version>4.3.2</Version>
</PackageReference>
<PackageReference Include="NUnit3TestAdapter">
<Version>5.0.0</Version>
</PackageReference>
<PackageReference Include="SpecFlow.NUnit">
<Version>3.9.74</Version>
</PackageReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
+126 -20
View File
@@ -1,58 +1,164 @@
namespace CommonConsole
{
using Common.Hardware.SIRT;
using Common.Hardware.SIRT.Parameters;
using Common.Hardware.SIRT.Tasks;
using Common.Hardware.WaterMeter.eRegister;
using Common.Hardware.WaterMeter.eRegister.Features;
using System;
using System.Text.RegularExpressions;
using System.Threading;
public static class Program
{
static string portName;
static uint address;
static byte[] key;
static ManualResetEventSlim awaiter;
static SIRTBroadcaster sirt;
public static void Main()
public static void Main(params string[] args)
{
awaiter = new ManualResetEventSlim();
var sirt = new SIRTBroadcaster("COM6");
sirt.MessageReceived += Console.WriteLine;
sirt.Disconnected += Sirt_Disconnected;
sirt.Connected += Sirt_Connected;
if (args.Length != 3)
{
Console.WriteLine($"Falsche anzahl an parameter: '{string.Join("', '", args)}'");
return;
}
portName = args[0];
if (Regex.IsMatch($"{portName}", "[Cc][Oo][Mm][0-9]+"))
{
portName = portName.ToUpper();
}
else
{
Console.WriteLine($"Falsche COM PortName: '{portName}' - erwartet: [Cc][Oo][Mm][0-9]+");
return;
}
if (!uint.TryParse($"{args[1]}", out address))
{
Console.WriteLine($"Ungültige Funkadresse: '{args[1]}'");
return;
}
key = $"{args[2]}".GetBytes();
if (key.Length != 16)
{
Console.WriteLine($"Ungültige Funkschlüssel: '{BitConverter.ToString(key)}'");
return;
}
awaiter = new ManualResetEventSlim();
sirt = new SIRTBroadcaster(portName);
sirt.MessageReceived += Console.WriteLine;
sirt.Connected += Sirt_Connected;
sirt.Open();
awaiter.Wait();
sirt.Close();
sirt.Connected -= Sirt_Connected;
sirt.MessageReceived -= Console.WriteLine;
}
private static void Sirt_Connected(SIRTBroadcaster sirt)
{
var task = new CordonelTask
var auth = new ProvidePin { AuthLevel = AuthLevel.I };
var task = new CordonelTask(sirt.Frequency)
{
Frequency = sirt.Frequency,
Timeout = 60_000,
// WakeUpModul = true,
// WakeUpCmd = true,
DelPamSemi = true,
WakeUpCmd = true,
RequestAddress = 412006750,
RequestAddress = address,
EncryptionKey = key,
IsEncrypted = true
};
if (sirt.Start(task))
task.Data = new ResetAlarms(0xFF).Append(auth);
task.SetPending();
for (var i = 0; i < 3 && task.State != SIRTTaskState.Completed; i++)
{
sirt.Start(task);
task.Wait();
}
}
private static void Sirt_Disconnected(SIRTBroadcaster sirt)
{
sirt.MessageReceived -= Console.WriteLine;
sirt.Disconnected -= Sirt_Disconnected;
sirt.Connected -= Sirt_Connected;
}
if (task.State != SIRTTaskState.Completed)
{
Console.WriteLine($"Komand: {BitConverter.ToString(task.Data)} - nicht ausgeführt");
class CordonelTask : WritePamTask
return;
}
task.Data = new ResetAlarms(0xFE).Append(auth);
task.SetPending();
for (var i = 0; i < 3 && task.State != SIRTTaskState.Completed; i++)
{
sirt.Start(task);
task.Wait();
}
if (task.State != SIRTTaskState.Completed)
{
Console.WriteLine($"Komand: {BitConverter.ToString(task.Data)} - nicht ausgeführt");
return;
}
awaiter.Set();
}
public class CordonelTask : EregisterTask
{
public CordonelTask(int frequency) : base(frequency)
{
}
public override Byte[] Start()
{
Console.WriteLine($"TX|{BitConverter.ToString(this.request)}");
var byes = base.Start();
return base.Start();
}
public override void Push(SIRTMessage response)
{
base.Push(response);
Console.WriteLine($"RX|{BitConverter.ToString(response)}");
Console.WriteLine($"{this.State}|{BitConverter.ToString(response)}");
try
{
if (this.SEMIMessage != null)
{
Console.WriteLine($"-----------------------------------------");
Console.WriteLine($"AlarmsMask");
Console.WriteLine($"-----------------------------------------");
Console.WriteLine($"{new AlarmsMask(response.Payload[10])}");
Console.WriteLine($"-----------------------------------------");
Console.WriteLine($"PAMStatus");
Console.WriteLine($"-----------------------------------------");
Console.WriteLine($"{new PAMStatus(response.Payload[11]).ToString(true)}");
Console.WriteLine($"-----------------------------------------");
}
}
catch (Exception)
{
}
}
}