XiaomiMqttClient_FaultLog.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. using BZFAStandardLib;
  2. using Newtonsoft.Json;
  3. using System;
  4. namespace MainForm.ClassFile.XiaomiAPI
  5. {
  6. /// <summary>
  7. /// 小米 MqttClient类 - API拓展方法
  8. /// 故障⽇志
  9. /// 故障发⽣时,必须要上报对应的故障⽇志;设备状态数据同步也需要上报Fault,同时确保故障数据和上报的设备状态数据中fault_tm和fault_code⼀致。
  10. /// 故障编码规则需要依据⼩⽶标准,区分等级(A,B,C,D,E)。在录⼊数据字典时,也需按照此标准定义故障编码。如:B60028
  11. /// </summary>
  12. public partial class XiaomiMqttClient_Extend : XiaomiMqttClient
  13. {
  14. /// <summary>
  15. /// 故障⽇志- 事件Id
  16. /// </summary>
  17. private static string FaultLogId { get; set; } = "{0}/{1}/{2}/{3}/{4}";
  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_FaultLog(FaultLogRequest request, string dataId = "")
  25. {
  26. int result = 0;
  27. string resultStr = "";
  28. string msg = JsonConvert.SerializeObject(request);
  29. byte[] bytes = ToUTF8(msg);
  30. string faultLogId = "";
  31. if (request.typ1 != "" && request.typ2 != "" && request.typ3 != "" && request.typ4 != "")
  32. faultLogId = string.Format(FaultLogId, request.typ1, request.typ2, request.typ3, request.typ4,request.fault_code);
  33. else
  34. faultLogId = "fault_log";
  35. // 发送
  36. if (string.IsNullOrEmpty(dataId))
  37. result = Write(faultLogId, bytes);
  38. else
  39. result = WriteWithDataId(faultLogId, bytes, dataId);
  40. var try1 = Enum.TryParse(result.ToString(), out XiaomiMqttResponse_ErrCode errCode);
  41. if (try1)
  42. resultStr = errCode.ToString();
  43. else
  44. resultStr = XiaomiMqttResponse_ErrCode.ERR_UNKOWN.ToString();
  45. string logPath = GlobalContext.MqttAlarmLogDir + "AlarmType" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
  46. FileOperate.NewTxtFile(logPath, DateTime.Now+"===>MQTT【故障日志】提交:" + msg + "\r\n==>提交结果:" + resultStr + "");
  47. return (result, resultStr);
  48. }
  49. /// <summary>
  50. /// 故障⽇志- 参数
  51. /// ◦ function_name是对test_item进⾏分类聚合,同⼀类的test_item对应同⼀个function_name名称。
  52. /// ◦ test_item可以是装备作业过程中的检测项、算法参数、⼯艺参数等
  53. /// ◦ result_val可以是检测值/算法的输出值/⼯艺参数值
  54. /// ◦ description填写对应test_item的中⽂描述,⽤于描述这条数据的含义
  55. /// </summary>
  56. public class FaultLogRequest
  57. {
  58. /// <summary>
  59. /// ⼯位
  60. /// string[1,64]
  61. /// • 当上报⼯位信息时,表⽰当前上报的是⼯位状态
  62. /// • 当上报的⼯位信息为空时,表⽰状态状态
  63. /// </summary>
  64. public string station { get; set; } = string.Empty;
  65. /// <summary>
  66. /// 故障名称
  67. /// string[1,128]
  68. /// 故障事件名称,同数据字典中的事件名称。
  69. /// </summary>
  70. public string fault_name { get; set; } = string.Empty;
  71. /// <summary>
  72. /// 故障编码
  73. /// string[1,32]
  74. /// 故障编码规则需要依据⼩⽶标准,区分等级(A,B,C,D,E)。在录⼊数据字典时,也需按照此标准定义故障编码。如:B60028
  75. /// </summary>
  76. public string fault_code { get; set; } = string.Empty;
  77. /// <summary>
  78. /// 分类层级1
  79. /// string[1,64]
  80. /// </summary>
  81. public string typ1 { get; set; } = string.Empty;
  82. /// <summary>
  83. /// 分类层级2
  84. /// string[1,64]
  85. /// </summary>
  86. public string typ2 { get; set; } = string.Empty;
  87. /// <summary>
  88. /// 分类层级3
  89. /// string[1,64]
  90. /// </summary>
  91. public string typ3 { get; set; } = string.Empty;
  92. /// <summary>
  93. /// 分类层级4
  94. /// string[1,64]
  95. /// </summary>
  96. public string typ4 { get; set; } = string.Empty;
  97. /// <summary>
  98. /// 故障部件
  99. /// string[1,64]
  100. /// </summary>
  101. public string fault_cmpnt { get; set; } = string.Empty;
  102. /// <summary>
  103. /// 故障描述
  104. /// string[1,64]
  105. /// </summary>
  106. public string fault_desc { get; set; } = string.Empty;
  107. /// <summary>
  108. /// 故障发⽣时间
  109. /// string[1,32]
  110. /// 事件发⽣时间(时间戳,毫秒),如:2022-06-01 14:27:57.283
  111. /// </summary>
  112. public string fault_tm { get; set; } = string.Empty;
  113. }
  114. }
  115. }