using CordonelPreadjustmentUi.Processes.Itinerary; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; using Xylem.Common.CommonCore.Consts; using Xylem.Common.Hardware.WaterMeter.Genesis.Registers; using Xylem.Common.Ui.CordonelPreadjustmentUi; using static CordonelPreadjustmentUi.PreAdjustmentControl; namespace CordonelPreadjustmentUi.Processes.Actions { public class TempFlanschPaswordItem { public TempFlanschPaswordItem() { } public TempFlanschPaswordItem(String pcbID, String password) { PcbID = pcbID; Password = password; } public String PcbID { get; set; } public String Password { get; set; } public int Slot { get; set; } } public class LoginProcess : BaseProcess { public LoginProcess(string processName, StatusPanelItems panelState, string performMessage, string failedMessage, int? expectedTimeS) : base(processName, panelState, performMessage, failedMessage, expectedTimeS) { } public override List StartWork() { return Login(base.CurrentProcessProgress); } private List Login(ProcessProgress pp) { var MetersToProcess = MeterStateCtls.Where(e => e.IsEnabled).ToList(); MetersToProcess.ForEach(lf => lf.LoginFailed = false); var listOfLoginTask = new List(); foreach (var tempmeterctl in TempMeterStateCtls) { listOfLoginTask.Add(new Task(() => { if (pp.Setting.GetTempUseTempFlansh()) { String CurrentConfigDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), ProgramConfig.GenesisBaseFolder, "TempFlansch.json"); if (File.Exists(CurrentConfigDir)) { var listOfOfflinePasswords = JsonConvert.DeserializeObject>( File.ReadAllText(CurrentConfigDir)); if (listOfOfflinePasswords != null) { var falkeItem = listOfOfflinePasswords.First(x => x.Slot == tempmeterctl.Slot); if (falkeItem != null) { tempmeterctl.OverridePassword = falkeItem.Password; tempmeterctl.OverridePcbId = falkeItem.PcbID; pp.DebugMessage($"Fixed Tempflansch on Slot {tempmeterctl.Slot} OverridePcbId {tempmeterctl.OverridePcbId }\n"); } } } //if (tempmeterctl.Slot == 11) //{ // tempmeterctl.OverridePassword = "10C16DF46E6C"; //} //else if (tempmeterctl.Slot == 12) //{ // tempmeterctl.OverridePassword = "BF8AC70AB27E"; //} var Result = string.IsNullOrEmpty(tempmeterctl.OverridePassword) ? tempmeterctl.Meter.Login() : tempmeterctl.Meter.Login(tempmeterctl.OverridePassword); if (!Result) { if (!tempmeterctl.Meter.Login(tempmeterctl.OverridePassword)) { pp.DebugMessage($"Login to Flansch failed"); pp.Aborted = true; } } Thread.Sleep(100); pp.DebugMessage($"Load Temp {tempmeterctl.Slot} with {MeterStateControl.TempMode.CalcTof}\n"); tempmeterctl.Meter.WriteRegister(Register.Genesisflow.TriggerIdle, 0); tempmeterctl.Meter.WriteRegister(Register.Genesisflow.LedMode, 6); tempmeterctl.Meter.WriteRegister(Register.Genesisflow.SampleRate, 10); try { tempmeterctl.StartTempWatch(MeterStateControl.TempMode.CalcTof); } catch (Exception ex) { pp.DebugMessage($"Load Temp error use hand insted"); pp.DebugMessage(ex.Message); pp.DebugMessage($"Load Temp {tempmeterctl.Slot} with {MeterStateControl.TempMode.Hand}\n"); tempmeterctl.StartTempWatch(); } } else { pp.DebugMessage($"Load Temp {tempmeterctl.Slot} with {MeterStateControl.TempMode.Hand}\n"); tempmeterctl.StartTempWatch(); } tempmeterctl.SetTemperature(0); tempmeterctl.DisableTemperatureinput(true); return true; })); } var delay = 1000; foreach (var meterctl in MetersToProcess) { listOfLoginTask.Add(new Task(() => { Thread.Sleep(delay * listOfLoginTask.Count); var Result = false; for (int i = 0; i < 3; i++) { pp.DebugMessage($"Performing {ProcessName} procedure\n"); try { Result = string.IsNullOrEmpty(meterctl.OverridePassword) ? meterctl.Meter.Login() : meterctl.Meter.Login(meterctl.OverridePassword); if (Result) { break; } Thread.Sleep(100); } catch (Exception e) { pp.DebugMessage($"Error on {ProcessName} procedure\n"); pp.DebugMessage($"Error {e.Message}\n"); } } if (meterctl.Meter != null) { meterctl.Meter.SerialNumber = meterctl.Srn; meterctl.Meter.CurrentActionText = "PreAdjustment"; } var meterIndex = (meterctl.Slot).ToString(pp.Setting.Culture); meterctl.LoginFailed = !Result; meterctl.Failed = !Result; if (!Result) { pp.DebugMessage($"{ProcessName} procedure failed", meterctl.Slot, "APP", meterctl.Meter.PcbId); //pp.GenerateReturnNote(PredefinedMessages.LoginFailed(pp.Setting.Culture), meterctl); } else { pp.DebugMessage($"{ProcessName} procedure successful", meterctl.Slot, "APP", meterctl.Meter.PcbId); } Thread.Sleep(delay); return Result; })); } return listOfLoginTask; } } }