Files
laatzen/Common/Hardware/WaterMeter/eRegister/Common.Hardware.WaterMeter.eRegister/EregisterCheckInitializationTask.cs
T

129 lines
5.6 KiB
C#

namespace Common.Hardware.WaterMeter.eRegister
{
using Common.Hardware.SIRT;
using Common.Hardware.SIRT.Tasks;
using Common.Hardware.WaterMeter.eRegister.Features;
using Common.Hardware.WaterMeter.eRegister.Models;
using System.Globalization;
using System.Text;
public class EregisterCheckInitializationTask : EregisterTask
{
private readonly EregisterProgrammingParameters parameters;
public EregisterCheckInitializationTask(EregisterProgrammingParameters parameters, int frequency) : base(frequency)
{
this.parameters = parameters;
this.Name = "Check state";
this.WakeUpCmd = true;
this.Data = new OpticalTelegram
{
Minutes = 1
}
.Append(new ProvidePin
{
AuthLevel = AuthLevel.III
});
}
public override byte[] Start()
{
this.WakeUpModul = !this.AnyTelegramReceived;
return base.Start();
}
public override void Push(SIRTMessage response)
{
base.Push(response);
if (this.State == SIRTTaskState.Completed)
{
this.ErrorMessage = default(ErrorMessage);
var hasValidConfiguration = true;
var message = new StringBuilder();
message.AppendLine();
message.AppendLine();
if (this.DEBUGMessage != null && this.SEMIMessage != null)
{
uint min = 0x02000000;
if (this.DEBUGMessage.BatterySeconds > min)
{
var over = (this.DEBUGMessage.BatterySeconds - min) / 60D / 60D / 24D;
message.AppendLine();
message.AppendLine($"- Das Rechenwerk ist um {over:0.0000} Tage älter als erlaubt. Bitte informieren Sie die Linienleitung und QS.");
hasValidConfiguration = false;
}
if (this.SEMIMessage.BatteryRemainingYears <= this.parameters.MinBatteryRemainingYears)
{
message.AppendLine();
message.AppendLine($"- Die Batterielaufzeit ({this.SEMIMessage.BatteryRemainingYears}) liegt unter dem angegebenen Minimum von ({this.parameters.MinBatteryRemainingYears}).");
hasValidConfiguration = false;
}
// Min metrology FW version (>= 1108) CSD dependent
if (!string.IsNullOrWhiteSpace(this.parameters.MinMetrologyFWVersion))
{
var culture = CultureInfo.CurrentCulture;
var numberStyle = NumberStyles.HexNumber | NumberStyles.AllowHexSpecifier;
var minParsed = int.TryParse(this.parameters.MinMetrologyFWVersion, numberStyle, culture, out var minFW);
var curParsed = int.TryParse(this.DEBUGMessage.MetrologyFWVersion, numberStyle, culture, out var curFW);
if (minFW > curFW)
{
message.AppendLine();
message.AppendLine($"- Die Metrologische FW Version ({curFW}) liegt unter dem angegebenen Minimum von ({minFW}).");
hasValidConfiguration = false;
}
}
// All, for production available radio & metrology FW versions.
if (!string.IsNullOrWhiteSpace(this.parameters.FWVersionsList))
{
if (!this.parameters.FWVersionsList.Contains(this.DEBUGMessage.MetrologyFWVersion))
{
message.AppendLine();
message.AppendLine($"- Die Metrologische FW Version ({this.DEBUGMessage.MetrologyFWVersion}) ist nicht für Produktion freigegeben. ");
hasValidConfiguration = false;
}
if (!this.parameters.FWVersionsList.Contains(this.DEBUGMessage.RadioFWVersion))
{
message.AppendLine();
message.AppendLine($"- Die Radio FW Version ({this.DEBUGMessage.RadioFWVersion}) ist nicht für Produktion freigegeben. ");
hasValidConfiguration = false;
}
}
if (this.DEBUGMessage.RebootCount > this.parameters.MaxRebootCount)
{
message.AppendLine();
message.AppendLine($"- Der rechenwerk wurde mehr als {this.parameters.MaxRebootCount} mal rebooted.");
hasValidConfiguration = false;
}
}
if (!hasValidConfiguration)
{
message.Insert(0, $"Am Einbauplatz: {this.SlotNr}, "
+ $"eingebaute E-Register mit Funkadressen: {this.RequestAddress} | {this.ResponseAddress}, "
+ $"sind folgenden Fehler aufgetreten:");
message.AppendLine();
message.AppendLine("Linienleitung und QS informieren!");
this.ErrorMessage = new ErrorMessage
{
Title = "Fehler bei der Prüfungsinitialisierung",
Text = message.ToString()
};
}
}
}
}
}