laatzen/Common/CommonConsole/Program.cs
2024-12-17 10:38:42 +01:00

103 lines
3.1 KiB
C#

namespace CommonConsole
{
using Common.Hardware.SIRT;
using Common.Hardware.SIRT.Parameters;
using Common.Hardware.WaterMeter.eRegister;
using Common.Hardware.WaterMeter.eRegister.Features;
using Newtonsoft.Json;
using System;
using System.Collections.Concurrent;
using System.IO;
public class Program
{
public static void Main()
{
var client = new SIRTClient("COM6");
client.OpenConnection();
Console.ReadKey();
client.CloseConnection();
}
}
public class SIRTClient
{
private readonly ConcurrentDictionary<uint, EregisterTask> tasks;
private readonly SIRTBroadcaster broadcaster;
public SIRTClient(string comPort)
{
this.tasks = new ConcurrentDictionary<uint, EregisterTask>();
this.broadcaster = new SIRTBroadcaster(comPort);
this.broadcaster.Activated += this.Broadcaster_Activated;
this.broadcaster.Connected += this.Broadcaster_Connected;
this.broadcaster.Disconnected += this.Broadcaster_Disconnected;
this.broadcaster.Logging += this.Broadcaster_Logging;
this.broadcaster.MessageReceived += this.Broadcaster_MessageReceived;
}
internal void CloseConnection() => this.broadcaster.Close();
internal void OpenConnection() => this.broadcaster.Open();
private void Broadcaster_Activated()
{
Console.WriteLine(nameof(Broadcaster_Activated));
this.tasks.GetOrAdd(4291796386, _ =>
{
var task = new EregisterTask(868)
{
Cmd = SIRTMessage.W_PAM,
P1 = new P811
{
DelPamSemi = true,
},
Data = new ChangeRadioId
{
Address = 309030150
}.Append(new ProvidePin
{
AuthLevel = AuthLevel.III
}),
RequestAddress = 4291796386,
ResponseAddress = 309030150
};
task.Completed += this.Task_Completed;
this.broadcaster.EnqueueTask(task);
return task;
});
}
private void Broadcaster_Connected() => Console.WriteLine(nameof(Broadcaster_Connected));
private void Broadcaster_Disconnected() => Console.WriteLine(nameof(Broadcaster_Disconnected));
private void Broadcaster_Logging(string message)
{
}
private void Broadcaster_MessageReceived(SIRTMessage message)
{
}
private void Task_Completed(SIRTTask task)
{
task.Completed -= this.Task_Completed;
Console.WriteLine($"Task_Completed: {task}");
File.WriteAllText($"..\\..\\Tasks\\{task.RequestAddress}.json", JsonConvert.SerializeObject(task, new JsonSerializerSettings
{
Formatting = Formatting.Indented
}));
}
}
}