diff --git a/Common/Hardware/WaterMeter/eRegister/Common.Hardware.WaterMeter.eRegister/Eregister.cs b/Common/Hardware/WaterMeter/eRegister/Common.Hardware.WaterMeter.eRegister/Eregister.cs index 98017f02..694aa88e 100644 --- a/Common/Hardware/WaterMeter/eRegister/Common.Hardware.WaterMeter.eRegister/Eregister.cs +++ b/Common/Hardware/WaterMeter/eRegister/Common.Hardware.WaterMeter.eRegister/Eregister.cs @@ -46,30 +46,48 @@ internal IEnumerable LoadInspectionInitializationTasks() { - this.executionType = nameof(LoadInspectionInitializationTasks); - var features = this.parameters.LoadInspectionInitializationFeatures(); + //this.executionType = nameof(LoadInspectionInitializationTasks); + //var features = this.parameters.LoadInspectionInitializationFeatures(); - if (features.RequestAddress > 0 && features.ResponseAddress > 0) - { - this.LoadProgrammingParameters(features); + //if (features.RequestAddress > 0 && features.ResponseAddress > 0) + //{ + // this.LoadProgrammingParameters(features); - if (this.runningTasks.Any()) - { - this.runningTasks.Enqueue(new EregisterChangeMeterTypeTask(features.Frequency) - { - SlotNr = features.SlotNr, - PoNr = features.PoNr, - SerialNr = features.SerialNr, - DelPamSemi = true, - RequestAddress = features.RequestAddress, - ResponseAddress = features.ResponseAddress, - EncryptionKey = features.EncryptionKey, - Name = "Change Meter Type" - }); - } - } + // if (this.runningTasks.Any()) + // { + // this.runningTasks.Enqueue(new EregisterChangeMeterTypeTask(features.Frequency) + // { + // SlotNr = features.SlotNr, + // PoNr = features.PoNr, + // SerialNr = features.SerialNr, + // DelPamSemi = true, + // RequestAddress = features.RequestAddress, + // ResponseAddress = features.ResponseAddress, + // EncryptionKey = features.EncryptionKey, + // Name = "Change Meter Type" + // }); + // } + //} - return this.runningTasks.AsEnumerable(); + //return this.runningTasks.AsEnumerable(); + + return this.LoadInspectionFinalizationTasks(); + + //this.runningTasks.Enqueue(new EregisterTask(features.Frequency) + //{ + // //WakeUpCmd = true, + // //WakeUpModul = true, + // SlotNr = features.SlotNr, + // PoNr = features.PoNr, + // SerialNr = features.SerialNr, + // RequestAddress = features.RequestAddress, + // ResponseAddress = features.ResponseAddress, + // EncryptionKey = features.EncryptionKey, + // IsEncrypted = this.parameters.IsEncrypted, + // Data = new ChangeWakeUp(WakeUpMode.StayAwake).Append(new ProvidePin(AuthLevel.II)) + //}); + + //return this.runningTasks.AsEnumerable(); } internal IEnumerable LoadInspectionFinalizationTasks() @@ -84,22 +102,22 @@ if (this.parameters.StatusFertigung == 30) { // Setting all transmision intervals at the end - this.runningTasks.Enqueue(new EregisterTask(features.Frequency) - { - SlotNr = features.SlotNr, - PoNr = features.PoNr, - SerialNr = features.SerialNr, - RequestAddress = features.RequestAddress, - ResponseAddress = features.ResponseAddress, - EncryptionKey = features.EncryptionKey, - IsEncrypted = this.parameters.IsEncrypted, - Data = new ChangeWakeUp((WakeUpMode)this.parameters.Wake_Up_Interval) - .Append(new ChangeNumberOfLatWindows(this.parameters.LAT_Interval)) - .Append(new ChangeTransmissionInterval(this.parameters.Transmission_Intervall)) - .Append(new OpenMeteringTransmitionIntervalWMBus(this.parameters.OMS_Interval)) - .Append(new ProvidePin(AuthLevel.II)), - Name = "0, 2, 16, 17", - }); + //this.runningTasks.Enqueue(new EregisterTask(features.Frequency) + //{ + // SlotNr = features.SlotNr, + // PoNr = features.PoNr, + // SerialNr = features.SerialNr, + // RequestAddress = features.RequestAddress, + // ResponseAddress = features.ResponseAddress, + // EncryptionKey = features.EncryptionKey, + // IsEncrypted = this.parameters.IsEncrypted, + // Data = new ChangeWakeUp((WakeUpMode)this.parameters.Wake_Up_Interval) + // .Append(new ChangeNumberOfLatWindows(this.parameters.LAT_Interval)) + // .Append(new ChangeTransmissionInterval(this.parameters.Transmission_Intervall)) + // .Append(new OpenMeteringTransmitionIntervalWMBus(this.parameters.OMS_Interval)) + // .Append(new ProvidePin(AuthLevel.II)), + // Name = "0, 2, 16, 17", + //}); // The last checked DEBUG telegram this.runningTasks.Enqueue(new EregisterCheckFinalizationTask(this.parameters, features.Frequency) @@ -113,21 +131,6 @@ EncryptionKey = features.EncryptionKey, IsEncrypted = this.parameters.IsEncrypted, }); - - // Setting all transmision intervals at the end - this.runningTasks.Enqueue(new EregisterTask(features.Frequency) - { - SlotNr = features.SlotNr, - PoNr = features.PoNr, - SerialNr = features.SerialNr, - RequestAddress = features.RequestAddress, - ResponseAddress = features.ResponseAddress, - EncryptionKey = features.EncryptionKey, - IsEncrypted = this.parameters.IsEncrypted, - Data = new ChangeWakeUp((WakeUpMode)this.parameters.Wake_Up_Interval) - .Append(new ProvidePin(AuthLevel.II)), - Name = "Funk aus", - }); } } diff --git a/Common/Hardware/WaterMeter/eRegister/Common.Hardware.WaterMeter.eRegister/EregisterBatch.cs b/Common/Hardware/WaterMeter/eRegister/Common.Hardware.WaterMeter.eRegister/EregisterBatch.cs index 965f3e8a..bc16ccba 100644 --- a/Common/Hardware/WaterMeter/eRegister/Common.Hardware.WaterMeter.eRegister/EregisterBatch.cs +++ b/Common/Hardware/WaterMeter/eRegister/Common.Hardware.WaterMeter.eRegister/EregisterBatch.cs @@ -4,6 +4,7 @@ using Common.Hardware.WaterMeter.eRegister.Models; using System.Collections.Generic; + using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -48,27 +49,23 @@ public void StartProgrammingAsync(CancellationToken cancellationToken) { - var tasks = new List(); + var eregisters = default(IEnumerable); + var skip = default(int); + var take = 5; - foreach (var eregister in this.eregisters) + while (skip < this.eregisters.Count) { - var task = Task.Factory.StartNew(() => - { + eregisters = this.eregisters + .Skip(skip) + .Take(take); + + Parallel.ForEach(eregisters, eregister => + { eregister.StartProgrammingAsync(cancellationToken); - } - , cancellationToken) - .ContinueWith(t => - { - if (t.Exception != null) - { - // TODO: exception logging - } }); - tasks.Add(task); + skip += take; } - - Task.WaitAll(tasks.ToArray(), cancellationToken); } public void StopProgramming() diff --git a/Common/Hardware/WaterMeter/eRegister/Common.Hardware.WaterMeter.eRegister/EregisterTask.cs b/Common/Hardware/WaterMeter/eRegister/Common.Hardware.WaterMeter.eRegister/EregisterTask.cs index 0f0a92bd..3a7c1485 100644 --- a/Common/Hardware/WaterMeter/eRegister/Common.Hardware.WaterMeter.eRegister/EregisterTask.cs +++ b/Common/Hardware/WaterMeter/eRegister/Common.Hardware.WaterMeter.eRegister/EregisterTask.cs @@ -17,10 +17,12 @@ public EregisterTask(int frequency) { + this.Timeout = 5000; this.DelPamSemi = true; this.Frequency = frequency; this.RSSI = new RSSI(0, frequency); this.Label = nameof(SIRTTaskState.Pending); + // this.AnyTelegramReceived = true; } public event Action Changed; @@ -77,6 +79,9 @@ public override byte[] Start() { + this.WakeUpModul = !this.AnyTelegramReceived; + this.WakeUpCmd = !this.AnyTelegramReceived; + var payloadL = this.request.Payload.Length; this.payload = new byte[payloadL]; @@ -185,6 +190,11 @@ this.Label = nameof(SIRTConstants.DEBUG); this.DEBUGMessage = new DEBUG(data, this.P11); this.FactoryState = this.DEBUGMessage.FactoryState; + + if (this.LATMessage != null && this.SEMIMessage != null && this.SEMIMessage.PAMStatus == PAMStatus.OK) + { + this.SetCompleted(); + } } else if (type == SIRTConstants.SEMI) // plain: 91 - enc: 93 { diff --git a/Common/Hardware/WaterMeter/eRegister/Common.Hardware.WaterMeter.eRegister/Features/OpenMeteringTransmitionIntervalWMBus.cs b/Common/Hardware/WaterMeter/eRegister/Common.Hardware.WaterMeter.eRegister/Features/OpenMeteringTransmitionIntervalWMBus.cs index e2e1a0e3..8e7eed95 100644 --- a/Common/Hardware/WaterMeter/eRegister/Common.Hardware.WaterMeter.eRegister/Features/OpenMeteringTransmitionIntervalWMBus.cs +++ b/Common/Hardware/WaterMeter/eRegister/Common.Hardware.WaterMeter.eRegister/Features/OpenMeteringTransmitionIntervalWMBus.cs @@ -16,5 +16,7 @@ get => this.bytes.ToUInt16BE(1); set => value.GetBytesBE().CopyTo(this.bytes, 1); } + + public static implicit operator OpenMeteringTransmitionIntervalWMBus(ushort value) => new OpenMeteringTransmitionIntervalWMBus(value); } } diff --git a/Common/Hardware/WaterMeter/eRegister/Common.Hardware.WaterMeter.eRegister/Models/EregisterProgrammingParameters.cs b/Common/Hardware/WaterMeter/eRegister/Common.Hardware.WaterMeter.eRegister/Models/EregisterProgrammingParameters.cs index 02754945..d063b0f5 100644 --- a/Common/Hardware/WaterMeter/eRegister/Common.Hardware.WaterMeter.eRegister/Models/EregisterProgrammingParameters.cs +++ b/Common/Hardware/WaterMeter/eRegister/Common.Hardware.WaterMeter.eRegister/Models/EregisterProgrammingParameters.cs @@ -298,6 +298,10 @@ features.Debug.ChangeState = FactoryState.Shipment; } + features.ChangeWakeUp = (WakeUpMode)this.Wake_Up_Interval; + features.ChangeNumberOfLatWindows = this.LAT_Interval; + features.ChangeTransmissionInterval = this.Transmission_Intervall; + features.OpenMeteringTransmitionIntervalWMBus = this.OMS_Interval; features.ChangeRadioId = (uint)this.Adresse; features.ChangeMeterId = this.MeterId; features.DeactivateAlarms = new DeactivateAlarms diff --git a/Common/Ui/Common.UI/App.config b/Common/Ui/Common.UI/App.config index c63681ec..9f6b3f7a 100644 --- a/Common/Ui/Common.UI/App.config +++ b/Common/Ui/Common.UI/App.config @@ -7,7 +7,7 @@ - + diff --git a/Common/Ui/Common.UI/Infrastructure/AppHost.cs b/Common/Ui/Common.UI/Infrastructure/AppHost.cs index 0ec67476..fef5ba02 100644 --- a/Common/Ui/Common.UI/Infrastructure/AppHost.cs +++ b/Common/Ui/Common.UI/Infrastructure/AppHost.cs @@ -17,64 +17,12 @@ public static string GetSetting(string key) => Appsettings.GetSetting(key); - private static ILogger CreateSIRTMessageLogger() - { - var dll = new FileInfo(typeof(AppHost).Assembly.Location); - var name = "SIRTMessages"; - var nlogs = dll.Directory.CreateSubdirectory(name); - var file = Path.Combine(nlogs.FullName, $"{DateTime.Now:yyyy-MM-dd}.txt"); - - LogManager.Configuration = new LoggingConfiguration(); - LogManager.ThrowConfigExceptions = true; - LogManager.ThrowExceptions = true; - LogManager.AutoShutdown = true; - - LogManager.Configuration.AddTarget(new FileTarget(name) - { - CreateDirs = true, - KeepFileOpen = true, - FileName = file - }); - - LogManager.Configuration.AddRule(LogLevel.Trace, LogLevel.Fatal, name); - LogManager.LogFactory.ReconfigExistingLoggers(true); - LogManager.ReconfigExistingLoggers(true); - - return LogManager.GetLogger(name); - } - - private static ILogger CreateSIRTStateLogger() - { - var dll = new FileInfo(typeof(AppHost).Assembly.Location); - var name = "SIRTState"; - var nlogs = dll.Directory.CreateSubdirectory(name); - var file = Path.Combine(nlogs.FullName, $"{DateTime.Now:yyyy-MM-dd}.txt"); - - LogManager.Configuration = new LoggingConfiguration(); - LogManager.ThrowConfigExceptions = true; - LogManager.ThrowExceptions = true; - LogManager.AutoShutdown = true; - - LogManager.Configuration.AddTarget(new FileTarget(name) - { - CreateDirs = true, - KeepFileOpen = true, - FileName = file - }); - - LogManager.Configuration.AddRule(LogLevel.Trace, LogLevel.Fatal, name); - LogManager.LogFactory.ReconfigExistingLoggers(true); - LogManager.ReconfigExistingLoggers(true); - - return LogManager.GetLogger(name); - } - private static ILogger CreateSIRTLogger() { var dll = new FileInfo(typeof(AppHost).Assembly.Location); var name = "NLogs"; var nlogs = dll.Directory.CreateSubdirectory(name); - var file = Path.Combine(nlogs.FullName, $"{DateTime.Now:yyyy-MM-dd HH:mm}.txt"); + var file = Path.Combine(nlogs.FullName, $"{DateTime.Now:yyyy-MM-dd-HH}.txt"); LogManager.Configuration = new LoggingConfiguration(); LogManager.ThrowConfigExceptions = true; @@ -100,7 +48,6 @@ var sirtHub = new SIRTHub(); SIRTLogger.Message += NLogger.Debug; - SIRTLogger.State += NLogger.Debug; return sirtHub; } diff --git a/Common/Ui/Common.UI/ViewModels/EregisterHistoryVM.cs b/Common/Ui/Common.UI/ViewModels/EregisterHistoryVM.cs index 176fa701..1b468847 100644 --- a/Common/Ui/Common.UI/ViewModels/EregisterHistoryVM.cs +++ b/Common/Ui/Common.UI/ViewModels/EregisterHistoryVM.cs @@ -18,7 +18,7 @@ this.sqlConnection = SqlConnection.CreateSqlConnection(connectionString); this.Addresses = new ObservableCollection(); - AppHost.SIRTHub.MessageProcessed += SIRTHub_MessageProcessed; + // TODO: SIRTLogger.Message += SIRTHub_MessageProcessed; } public ObservableCollection Addresses { get; } diff --git a/Common/Ui/Common.UI/ViewModels/EregisterInitializeVM.cs b/Common/Ui/Common.UI/ViewModels/EregisterInitializeVM.cs index 8aa1155f..517b5f6f 100644 --- a/Common/Ui/Common.UI/ViewModels/EregisterInitializeVM.cs +++ b/Common/Ui/Common.UI/ViewModels/EregisterInitializeVM.cs @@ -39,7 +39,7 @@ Interval = 500, }; this.timer.Elapsed += this.Timer_Elapsed; - AppHost.SIRTHub.StateLogging += x => AppHost.NLogger.Debug(x); + // TODO: AppHost.SIRTHub.StateLogging += x => AppHost.NLogger.Debug(x); this.eregisterFactory = new EregisterBatch(AppHost.SIRTHub); this.StartProgrammingCommand = new Command(this.StartProgrammingCommandHandler); this.StopProgrammingCommand = new Command(this.StopProgrammingCommandHandler); diff --git a/Common/Ui/Common.UI/ViewModels/HomeVM.cs b/Common/Ui/Common.UI/ViewModels/HomeVM.cs index 38dad99c..ae0679d7 100644 --- a/Common/Ui/Common.UI/ViewModels/HomeVM.cs +++ b/Common/Ui/Common.UI/ViewModels/HomeVM.cs @@ -23,7 +23,7 @@ this.timer = new Timer(3000); this.timer.Elapsed += this.Timer_Elapsed; this.sirtHub = new SIRTHub(); - this.sirtHub.MessageProcessed += this.SirtHub_MessageProcessed; + // TODO: this.sirtHub.MessageProcessed += this.SirtHub_MessageProcessed; this.StartScanning = new Command(this.StartScanning_Command); this.Addresses433 = new ObservableCollection(); this.Addresses868 = new ObservableCollection();