XiaomiMqttClient_OperateLog.cs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. using BZFAStandardLib;
  2. using Newtonsoft.Json;
  3. using System;
  4. using static MainForm.ClassFile.XiaomiAPI.XiaomiMqttClient_Extend;
  5. namespace MainForm.ClassFile.XiaomiAPI
  6. {
  7. /// <summary>
  8. /// 小米 MqttClient类 - API拓展方法
  9. /// 操作记录⽇志
  10. /// 供应商软件每次启动/关闭/重新加载项⽬时,以操作记录⽇志完成上报相应事件
  11. /// </summary>
  12. public partial class XiaomiMqttClient_Extend : XiaomiMqttClient
  13. {
  14. /// <summary>
  15. /// 操作记录⽇志- 事件Id
  16. /// </summary>
  17. private static string OperateLogId { get; set; } = "operate_log/operate_log";
  18. /// <summary>
  19. /// 操作记录⽇志 - 事件方法
  20. /// </summary>
  21. /// <param name="msg">事件数据;Json</param>
  22. /// <param name="dataId">自定义事件Id;如:guid</param>
  23. /// <returns></returns>
  24. public static (int,string) Write_OperateLog(OperateLogRequest request, string dataId = "")
  25. {
  26. int result =0;
  27. string resultStr = "";
  28. string msg = JsonConvert.SerializeObject(request);
  29. byte[] bytes = ToUTF8(msg);
  30. // 发送
  31. if (string.IsNullOrEmpty(dataId))
  32. result = Write(OperateLogId, bytes);
  33. else
  34. result = WriteWithDataId(OperateLogId, bytes, dataId);
  35. var try1 = Enum.TryParse(result.ToString(), out XiaomiMqttResponse_ErrCode errCode);
  36. if (try1)
  37. resultStr = errCode.ToString();
  38. else
  39. resultStr = XiaomiMqttResponse_ErrCode.ERR_UNKOWN.ToString();
  40. string logPath = GlobalContext.MqttOperateLogDir + "OperationRecord" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
  41. FileOperate.NewTxtFile(logPath, DateTime.Now+"===>MQTT【操作记录】提交:" + msg + "\r\n==>提交结果:" + resultStr + "");
  42. return (result, resultStr);
  43. }
  44. /// <summary>
  45. /// 操作记录⽇志 - 参数
  46. /// </summary>
  47. public class OperateLogRequest
  48. {
  49. /// <summary>
  50. /// 操作记录⽇志标识符
  51. /// string[1,128] operate_log/operate_log
  52. /// </summary>
  53. public string id { get; set; } = "operate_log/operate_log";
  54. /// <summary>
  55. /// 软件版本号
  56. /// 供应商软件版本号,如:V1.2.4
  57. /// </summary>
  58. public string software_version { get; set; } = string.Empty;
  59. /// <summary>
  60. /// 操作时间
  61. /// 供应商软件开启/关闭/重新加载项⽬时间,精确到毫秒。如:2022-06-01 14:27:57.283
  62. /// </summary>
  63. public string operate_time { get; set; } = string.Empty;
  64. /// <summary>
  65. /// 操作动作
  66. /// 对应软件开启/关闭/重新加载项⽬,枚举值如下:
  67. /// startup
  68. /// shutdown
  69. /// reload
  70. /// </summary>
  71. public string operate_action { get; set; } = string.Empty;
  72. /// <summary>
  73. /// 动作参数
  74. /// 选填,附带额外的信息
  75. /// </summary>
  76. public string action_param { get; set; } = string.Empty;
  77. /// <summary>
  78. /// 操作模块
  79. /// 选填
  80. /// </summary>
  81. public string operate_module { get; set; } = string.Empty;
  82. /// <summary>
  83. /// 操作⻚⾯
  84. /// 选填
  85. /// </summary>
  86. public string operate_page { get; set; } = string.Empty;
  87. /// <summary>
  88. /// 当前进程
  89. /// 进程ID
  90. /// </summary>
  91. public string current_process { get; set; } = string.Empty;
  92. /// <summary>
  93. /// 操作描述
  94. /// 如:供应商软件开启/关闭/重新加载项⽬
  95. /// </summary>
  96. public string operate_desc { get; set; } = string.Empty;
  97. /// <summary>
  98. /// 操作结果
  99. /// </summary>
  100. public string operate_result { get; set; } = "success";
  101. /// <summary>
  102. /// 操作账号名
  103. /// 填当前操作⽤⼾,如⽆则填default
  104. /// </summary>
  105. public string operator_name { get; set; } = "default";
  106. }
  107. private static string DeviceConfigId { get; set; } = "equipment_configuration/{0}";
  108. /// <summary>
  109. /// 装备配置参数IOT
  110. /// </summary>
  111. /// <param name="request"></param>
  112. /// <param name="dataId"></param>
  113. /// <returns></returns>
  114. public static (int, string) Write_deviceConfig(DeviceConfigRequest request, string dataId = "")
  115. {
  116. string urlstr = "";
  117. int result = 0;
  118. string resultStr = "";
  119. if (request.id != "")
  120. urlstr = string.Format(DeviceConfigId, request.id);
  121. else
  122. urlstr = "equipment_configuration";
  123. string msg = JsonConvert.SerializeObject(request);
  124. //byte[] bytes = ToUTF8(msg);
  125. // 发送
  126. if (string.IsNullOrEmpty(dataId))
  127. result = Write(urlstr, request.value);
  128. else
  129. result = WriteWithDataId(urlstr, request.value, dataId);
  130. var try1 = Enum.TryParse(result.ToString(), out XiaomiMqttResponse_ErrCode errCode);
  131. if (try1)
  132. resultStr = errCode.ToString();
  133. else
  134. resultStr = XiaomiMqttResponse_ErrCode.ERR_UNKOWN.ToString();
  135. string logPath = GlobalContext.MqttDeviceConfigLogDir + "DeviceConfig" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
  136. FileOperate.NewTxtFile(logPath, DateTime.Now + "===>MQTT【装备配置】提交:" + msg + "\r\n==>提交结果:" + resultStr + "");
  137. return (result, resultStr);
  138. }
  139. /// <summary>
  140. /// 操作记录⽇志 - 参数
  141. /// </summary>
  142. public class DeviceConfigRequest
  143. {
  144. /// <summary>
  145. /// 装备配置参数标识符
  146. /// </summary>
  147. public string id { get; set; } = string.Empty;
  148. /// <summary>
  149. /// 装备配置参数
  150. /// </summary>
  151. public string value { get; set; } = string.Empty;
  152. }
  153. }
  154. }