WifRssiCheckProcedure.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. using AwInitilizer.Assist;
  2. using Newtonsoft.Json;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Collections.Specialized;
  6. using System.IO;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Text.RegularExpressions;
  10. using System.Threading.Tasks;
  11. namespace AwInitilizer.Procedure
  12. {
  13. public class WifRssiCheckProcedure : ProcedureBase
  14. {
  15. public WifRssiCheckProcedure() : base()
  16. {
  17. Name = "WiFi Rssi Check";
  18. Content = "Check Wifi Rssi Signal";
  19. }
  20. internal override async Task<bool> Run()
  21. {
  22. if (!UpdateData.SystemID.ModelName.Network.ToString().Contains("WiFi"))
  23. {
  24. //if does not support Wifi then end init
  25. InfoLog += "model name does not support Wifi ,skip check process\n";
  26. ReportLog.Add("Wifi not supported, skip procedure");
  27. return true;
  28. }
  29. Logger.Print("Connecting to EVSE");
  30. var checkResult = await CheckWifiRssi();
  31. return checkResult;
  32. }
  33. internal async Task<bool> CheckWifiRssi()
  34. {
  35. try
  36. {
  37. using (WebClientTimeout webClient = new WebClientTimeout())
  38. {
  39. NameValueCollection parameters = new NameValueCollection();
  40. parameters.Add("opt", "3");
  41. webClient.QueryString = parameters;
  42. using (Stream stream = await webClient.OpenReadTaskAsync($"https://{ServerIpAddress}/get_query_action.php"))
  43. // 使用 StreamReader 讀取 stream 內的字元
  44. using (StreamReader reader = new StreamReader(stream))
  45. {
  46. // 將 StreamReader 所讀到的字元轉為 string
  47. string request = reader.ReadToEnd();
  48. InfoLog += $"GetResponse:{request}";
  49. Logger.Print($"GetResponse:{request}", isError: false);
  50. Regex rx_mode = new Regex("(WifiMode)\\\": ([0-9]*)");
  51. var matches_mode = rx_mode.Matches(request);
  52. if (matches_mode.Count != 0)
  53. {
  54. var match = matches_mode[0];
  55. if (match.Groups.Count != 3)
  56. {
  57. return false;
  58. }
  59. else
  60. {
  61. if (int.TryParse(match.Groups[2].Value, out var wifiMode))
  62. {
  63. if (wifiMode != 1)
  64. return false;
  65. }
  66. else
  67. {
  68. return false;
  69. }
  70. }
  71. }
  72. else
  73. {
  74. return false;
  75. }
  76. Regex rx = new Regex("(WifiRssi)\\\": (-?[0-9]*)");
  77. var matches = rx.Matches(request);
  78. if (matches.Count != 0)
  79. {
  80. var match = matches[0];
  81. if (match.Groups.Count != 3)
  82. {
  83. return false;
  84. }
  85. else
  86. {
  87. if (int.TryParse(match.Groups[2].Value, out var rssiSignal))
  88. {
  89. LogPair.Add("WifiRssi", rssiSignal.ToString());
  90. return rssiSignal >= -80;
  91. }
  92. return false;
  93. }
  94. }
  95. else
  96. {
  97. return false;
  98. }
  99. }
  100. }
  101. }
  102. catch (Exception e)
  103. {
  104. Logger.Print("Get Wifi Rssi Failed", isError: true);
  105. Logger.Print(e.Message + "", isError: true);
  106. InfoLog += "Get Wifi Rssi Failed\n";
  107. InfoLog += e.Message;
  108. InfoLog += "\n";
  109. return false;
  110. }
  111. }
  112. }
  113. }