using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Collections.Specialized; using System.Diagnostics; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; namespace AwInitilizer.Procedure { public class RestarttoIdelProcedure : ProcedureBase { public RestarttoIdelProcedure() : base() { Name = "Restart To Idel"; Content = "Restart EVSSE and check status back to Idel"; } internal override async Task Run() { var result = await FactorySet(); if (!result) { return false; } else { Logger.Print("Waiting Factory reset complete..."); await Task.Delay(TimeSpan.FromMinutes(2)); if(await CheckAllIdel()) { Logger.Print("All Connetor is Idel"); } else { return false; } } return true; } private async Task FactorySet() { try { using (WebClient webClient = new WebClient()) { NameValueCollection parameters = new NameValueCollection(); parameters.Add("SystemId", ""); parameters.Add("SystemDateTime", ""); parameters.Add("PhaseLossPolicy", ""); parameters.Add("FactoryConfiguration", "1"); parameters.Add("AuthorisationMode", ""); parameters.Add("isAPP", ""); parameters.Add("isQRCode", ""); parameters.Add("isRFID", ""); parameters.Add("QRCodeMadeMode", ""); parameters.Add("QRCodeContent", ""); parameters.Add("Intensity", ""); parameters.Add("RfidCardNumEndian", ""); parameters.Add("PsuAcInputType", ""); webClient.QueryString = parameters; using (Stream stream = await webClient.OpenReadTaskAsync($"https://{ServerIpAddress}/set_system_action.php")) // 使用 StreamReader 讀取 stream 內的字元 using (StreamReader reader = new StreamReader(stream)) { // 將 StreamReader 所讀到的字元轉為 string string request = reader.ReadToEnd(); InfoLog += $"factory set respons:\n{request}\n"; var values = JsonConvert.DeserializeObject>(request); } } return true; } catch(Exception e) { InfoLog += "Factory reset command failed\n"; InfoLog += e.Message; InfoLog += "\n"; Logger.Print("Factory reset command failed", isError: true); Logger.Print(e.Message, isError: true); return false; } } private async Task CheckAllIdel() { try { using (WebClient webClient = new WebClient()) { NameValueCollection parameters = new NameValueCollection(); parameters.Add("opt", "2"); webClient.QueryString = parameters; using (Stream stream = await webClient.OpenReadTaskAsync($"https://{ServerIpAddress}/get_query_action.php")) // 使用 StreamReader 讀取 stream 內的字元 using (StreamReader reader = new StreamReader(stream)) { // 將 StreamReader 所讀到的字元轉為 string string request = reader.ReadToEnd(); InfoLog += $"get status respons:\n{request}\n"; LogPair.Add($"EvseStatus", request); Regex rx = new Regex("(SystemStatus)\\\": (\\d)"); var matches = rx.Matches(request); bool isAllPassed = true; for(int matchIndex=0; matchIndex< matches.Count; matchIndex++) { var match = matches[matchIndex]; if (match.Groups.Count != 3) { InfoLog += $"Connector {matchIndex} status string mismatched\n"; Logger.Print($"Connector {matchIndex} status string mismatched", isError:true); isAllPassed = false; } else { if(match.Groups[2].Value != "1") { InfoLog += $"Connector {matchIndex} status not Idel\n"; Logger.Print($"Connector {matchIndex} status not Idel", isError: true); isAllPassed = false; } } } return isAllPassed; } } return true; } catch (Exception e) { InfoLog += "Check all idel command failed\n"; InfoLog += e.Message; InfoLog += "\n"; Logger.Print("Check all idel command failed", isError:true); Logger.Print(e.Message, isError: true); return false; } } } }