XiaomiMqttClient_DeviceStateData.cs 3.5 KB

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