using Newtonsoft.Json; using System; namespace MainForm.ClassFile.XiaomiAPI { /// /// 小米 MqttClient类 - API拓展方法 /// 设备状态 /// • 程序每次启动时,要及时上传最新的状态 /// • 设备状态变更时,触发上传 /// • 当state值为Fault或Alarm时,对应的fault_code和fault_tm字段不能为空 /// public partial class XiaomiMqttClient_Extend : XiaomiMqttClient { /// /// 设备状态- 事件Id /// private static string DeviceStateDataId { get; set; } = "device_state/device_state_data"; /// /// 设备状态- 事件方法 /// XiaomiDeviceState /// /// 事件数据;Json /// 自定义事件Id;如:guid /// public static (int, string) Write_DeviceStateData(DeviceStateDataRequest request, string deviceCode = "") { int result = 0; string resultStr = ""; string msg = JsonConvert.SerializeObject(request); byte[] bytes = ToUTF8(msg); // 发送 if (string.IsNullOrEmpty(deviceCode)) result = Write(DeviceStateDataId, bytes); else result = WriteWithDeviceCode(DeviceStateDataId, bytes, deviceCode); var try1 = Enum.TryParse(result.ToString(), out XiaomiMqttResponse_ErrCode errCode); if (try1) resultStr = errCode.ToString(); else resultStr = XiaomiMqttResponse_ErrCode.ERR_UNKOWN.ToString(); return (result, resultStr); } /// /// 设备状态- 参数 /// ◦ function_name是对test_item进⾏分类聚合,同⼀类的test_item对应同⼀个function_name名称。 /// ◦ test_item可以是装备作业过程中的检测项、算法参数、⼯艺参数等 /// ◦ result_val可以是检测值/算法的输出值/⼯艺参数值 /// ◦ description填写对应test_item的中⽂描述,⽤于描述这条数据的含义 /// public class DeviceStateDataRequest { /// /// ⼯位 /// string[1,64] /// • 当上报⼯位信息时,表⽰当前上报的是⼯位状态 /// • 当上报的⼯位信息为空时,表⽰状态状态 /// public string station { get; set; } = string.Empty; /// /// 设备状态(供应商需要根据⼩⽶定义的状态进⾏数据上报) /// string[1,32] /// XiaomiDeviceState枚举值(按照⼩⽶要求定义) /// public string state { get; set; } = string.Empty; /// /// 状态切换时的时间 /// string[1,64] /// 时间(时间戳,毫秒),如:2022-06-01 14:27:57.283 /// public string time { get; set; } = string.Empty; /// /// 对应的故障编码 /// string[1,64] /// 当状态为Alarm或Fault时,不能为空。和故障⽇志中的fault_code值相同 /// public string fault_code { get; set; } = string.Empty; /// /// 对应的故障发⽣时间 /// string[1,64] /// 如:2022-06-01 14:27:57.283 /// 时间,精确到毫秒。当状态为Alarm或Fault时,不能为空。格式如如:2022-06-0114:27:57.283。和故障⽇志中的fault_tm值相同 /// public string fault_tm { get; set; } = string.Empty; } /// /// 包含左右工位的设备 /// public struct DeviceStateDataRequest2Station { public DeviceStateDataRequest left; public DeviceStateDataRequest right; } } }