RestarttoIdelProcedure.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. using Newtonsoft.Json;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Collections.Specialized;
  5. using System.Diagnostics;
  6. using System.IO;
  7. using System.Linq;
  8. using System.Net;
  9. using System.Text;
  10. using System.Text.RegularExpressions;
  11. using System.Threading.Tasks;
  12. namespace AwInitilizer.Procedure
  13. {
  14. public class RestarttoIdelProcedure : ProcedureBase
  15. {
  16. public RestarttoIdelProcedure() : base()
  17. {
  18. Name = "Restart To Idel";
  19. Content = "Restart EVSSE and check status back to Idel";
  20. }
  21. internal override async Task<bool> Run()
  22. {
  23. var result = await FactorySet();
  24. if (!result)
  25. {
  26. return false;
  27. }
  28. else
  29. {
  30. Logger.Print("Waiting Factory reset complete...");
  31. await Task.Delay(TimeSpan.FromMinutes(2));
  32. if(await CheckAllIdel())
  33. {
  34. Logger.Print("All Connetor is Idel");
  35. }
  36. else
  37. {
  38. return false;
  39. }
  40. }
  41. return true;
  42. }
  43. private async Task<bool> FactorySet()
  44. {
  45. try
  46. {
  47. using (WebClient webClient = new WebClient())
  48. {
  49. NameValueCollection parameters = new NameValueCollection();
  50. parameters.Add("SystemId", "");
  51. parameters.Add("SystemDateTime", "");
  52. parameters.Add("PhaseLossPolicy", "");
  53. parameters.Add("FactoryConfiguration", "1");
  54. parameters.Add("AuthorisationMode", "");
  55. parameters.Add("isAPP", "");
  56. parameters.Add("isQRCode", "");
  57. parameters.Add("isRFID", "");
  58. parameters.Add("QRCodeMadeMode", "");
  59. parameters.Add("QRCodeContent", "");
  60. parameters.Add("Intensity", "");
  61. parameters.Add("RfidCardNumEndian", "");
  62. parameters.Add("PsuAcInputType", "");
  63. webClient.QueryString = parameters;
  64. using (Stream stream = await webClient.OpenReadTaskAsync($"https://{ServerIpAddress}/set_system_action.php"))
  65. // 使用 StreamReader 讀取 stream 內的字元
  66. using (StreamReader reader = new StreamReader(stream))
  67. {
  68. // 將 StreamReader 所讀到的字元轉為 string
  69. string request = reader.ReadToEnd();
  70. InfoLog += $"factory set respons:\n{request}\n";
  71. var values = JsonConvert.DeserializeObject<Dictionary<string, string>>(request);
  72. }
  73. }
  74. return true;
  75. }
  76. catch(Exception e)
  77. {
  78. InfoLog += "Factory reset command failed\n";
  79. InfoLog += e.Message;
  80. InfoLog += "\n";
  81. Logger.Print("Factory reset command failed", isError: true);
  82. Logger.Print(e.Message, isError: true);
  83. return false;
  84. }
  85. }
  86. private async Task<bool> CheckAllIdel()
  87. {
  88. try
  89. {
  90. using (WebClient webClient = new WebClient())
  91. {
  92. NameValueCollection parameters = new NameValueCollection();
  93. parameters.Add("opt", "2");
  94. webClient.QueryString = parameters;
  95. using (Stream stream = await webClient.OpenReadTaskAsync($"https://{ServerIpAddress}/get_query_action.php"))
  96. // 使用 StreamReader 讀取 stream 內的字元
  97. using (StreamReader reader = new StreamReader(stream))
  98. {
  99. // 將 StreamReader 所讀到的字元轉為 string
  100. string request = reader.ReadToEnd();
  101. InfoLog += $"get status respons:\n{request}\n";
  102. LogPair.Add($"EvseStatus", request);
  103. Regex rx = new Regex("(SystemStatus)\\\": (\\d)");
  104. var matches = rx.Matches(request);
  105. bool isAllPassed = true;
  106. for(int matchIndex=0; matchIndex< matches.Count; matchIndex++)
  107. {
  108. var match = matches[matchIndex];
  109. if (match.Groups.Count != 3)
  110. {
  111. InfoLog += $"Connector {matchIndex} status string mismatched\n";
  112. Logger.Print($"Connector {matchIndex} status string mismatched", isError:true);
  113. isAllPassed = false;
  114. }
  115. else
  116. {
  117. if(match.Groups[2].Value != "1")
  118. {
  119. InfoLog += $"Connector {matchIndex} status not Idel\n";
  120. Logger.Print($"Connector {matchIndex} status not Idel", isError: true);
  121. isAllPassed = false;
  122. }
  123. }
  124. }
  125. return isAllPassed;
  126. }
  127. }
  128. return true;
  129. }
  130. catch (Exception e)
  131. {
  132. InfoLog += "Check all idel command failed\n";
  133. InfoLog += e.Message;
  134. InfoLog += "\n";
  135. Logger.Print("Check all idel command failed", isError:true);
  136. Logger.Print(e.Message, isError: true);
  137. return false;
  138. }
  139. }
  140. }
  141. }