XiaomiMqttClient_DeviceStateData.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. using Newtonsoft.Json;
  2. using System;
  3. namespace MainForm.ClassFile.XiaomiAPI
  4. {
  5. /// <summary>
  6. /// 小米 MqttClient类 - API拓展方法
  7. /// 设备状态
  8. /// • 程序每次启动时,要及时上传最新的状态
  9. /// • 设备状态变更时,触发上传
  10. /// • 当state值为Fault或Alarm时,对应的fault_code和fault_tm字段不能为空
  11. /// </summary>
  12. public partial class XiaomiMqttClient_Extend : XiaomiMqttClient
  13. {
  14. /// <summary>
  15. /// 设备状态- 事件Id
  16. /// </summary>
  17. private static string DeviceStateDataId { get; set; } = "device_state/device_state_data";
  18. /// <summary>
  19. /// 设备状态- 事件方法
  20. /// XiaomiDeviceState
  21. /// </summary>
  22. /// <param name="msg">事件数据;Json</param>
  23. /// <param name="dataId">自定义事件Id;如:guid</param>
  24. /// <returns></returns>
  25. public static (int, string) Write_DeviceStateData(DeviceStateDataRequest request, string deviceCode = "")
  26. {
  27. int result = 0;
  28. string resultStr = "";
  29. string msg = JsonConvert.SerializeObject(request);
  30. byte[] bytes = ToUTF8(msg);
  31. // 发送
  32. if (string.IsNullOrEmpty(deviceCode))
  33. result = Write(DeviceStateDataId, bytes);
  34. else
  35. result = WriteWithDeviceCode(DeviceStateDataId, bytes, deviceCode);
  36. var try1 = Enum.TryParse(result.ToString(), out XiaomiMqttResponse_ErrCode errCode);
  37. if (try1)
  38. resultStr = errCode.ToString();
  39. else
  40. resultStr = XiaomiMqttResponse_ErrCode.ERR_UNKOWN.ToString();
  41. return (result, resultStr);
  42. }
  43. /// <summary>
  44. /// 设备状态- 参数
  45. /// ◦ function_name是对test_item进⾏分类聚合,同⼀类的test_item对应同⼀个function_name名称。
  46. /// ◦ test_item可以是装备作业过程中的检测项、算法参数、⼯艺参数等
  47. /// ◦ result_val可以是检测值/算法的输出值/⼯艺参数值
  48. /// ◦ description填写对应test_item的中⽂描述,⽤于描述这条数据的含义
  49. /// </summary>
  50. public class DeviceStateDataRequest
  51. {
  52. /// <summary>
  53. /// ⼯位
  54. /// string[1,64]
  55. /// • 当上报⼯位信息时,表⽰当前上报的是⼯位状态
  56. /// • 当上报的⼯位信息为空时,表⽰状态状态
  57. /// </summary>
  58. public string station { get; set; } = string.Empty;
  59. /// <summary>
  60. /// 设备状态(供应商需要根据⼩⽶定义的状态进⾏数据上报)
  61. /// string[1,32]
  62. /// XiaomiDeviceState枚举值(按照⼩⽶要求定义)
  63. /// </summary>
  64. public string state { get; set; } = string.Empty;
  65. /// <summary>
  66. /// 状态切换时的时间
  67. /// string[1,64]
  68. /// 时间(时间戳,毫秒),如:2022-06-01 14:27:57.283
  69. /// </summary>
  70. public string time { get; set; } = string.Empty;
  71. /// <summary>
  72. /// 对应的故障编码
  73. /// string[1,64]
  74. /// 当状态为Alarm或Fault时,不能为空。和故障⽇志中的fault_code值相同
  75. /// </summary>
  76. public string fault_code { get; set; } = string.Empty;
  77. /// <summary>
  78. /// 对应的故障发⽣时间
  79. /// string[1,64]
  80. /// 如:2022-06-01 14:27:57.283
  81. /// 时间,精确到毫秒。当状态为Alarm或Fault时,不能为空。格式如如:2022-06-0114:27:57.283。和故障⽇志中的fault_tm值相同
  82. /// </summary>
  83. public string fault_tm { get; set; } = string.Empty;
  84. }
  85. /// <summary>
  86. /// 包含左右工位的设备
  87. /// </summary>
  88. public struct DeviceStateDataRequest2Station
  89. {
  90. public DeviceStateDataRequest left;
  91. public DeviceStateDataRequest right;
  92. }
  93. }
  94. }