123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- using BZFAStandardLib;
- using Newtonsoft.Json;
- using System;
- namespace MainForm.ClassFile.XiaomiAPI
- {
- /// <summary>
- /// 小米 MqttClient类 - API拓展方法
- /// 设备状态
- /// • 程序每次启动时,要及时上传最新的状态
- /// • 设备状态变更时,触发上传
- /// • 当state值为Fault或Alarm时,对应的fault_code和fault_tm字段不能为空
- /// </summary>
- public partial class XiaomiMqttClient_Extend : XiaomiMqttClient
- {
- /// <summary>
- /// 设备状态- 事件Id
- /// </summary>
- private static string DeviceStateDataId { get; set; } = "device_state/device_state_data";
- /// <summary>
- /// 设备状态- 事件方法
- /// XiaomiDeviceState
- /// </summary>
- /// <param name="msg">事件数据;Json</param>
- /// <param name="dataId">自定义事件Id;如:guid</param>
- /// <returns></returns>
- 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();
- string logPath = GlobalContext.MqttDeviceStateDir + "macState" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
- FileOperate.NewTxtFile(logPath, "【设备状态】MQTT提交:" + msg + "\r\n==>提交结果:" + resultStr+ "");
- return (result, resultStr);
- }
- /// <summary>
- /// 设备状态- 参数
- /// ◦ function_name是对test_item进⾏分类聚合,同⼀类的test_item对应同⼀个function_name名称。
- /// ◦ test_item可以是装备作业过程中的检测项、算法参数、⼯艺参数等
- /// ◦ result_val可以是检测值/算法的输出值/⼯艺参数值
- /// ◦ description填写对应test_item的中⽂描述,⽤于描述这条数据的含义
- /// </summary>
- public class DeviceStateDataRequest
- {
- /// <summary>
- /// ⼯位
- /// string[1,64]
- /// • 当上报⼯位信息时,表⽰当前上报的是⼯位状态
- /// • 当上报的⼯位信息为空时,表⽰状态状态
- /// </summary>
- public string station { get; set; } = string.Empty;
- /// <summary>
- /// 设备状态(供应商需要根据⼩⽶定义的状态进⾏数据上报)
- /// string[1,32]
- /// XiaomiDeviceState枚举值(按照⼩⽶要求定义)
- /// </summary>
- public string state { get; set; } = string.Empty;
- /// <summary>
- /// 状态切换时的时间
- /// string[1,64]
- /// 时间(时间戳,毫秒),如:2022-06-01 14:27:57.283
- /// </summary>
- public string time { get; set; } = string.Empty;
- /// <summary>
- /// 对应的故障编码
- /// string[1,64]
- /// 当状态为Alarm或Fault时,不能为空。和故障⽇志中的fault_code值相同
- /// </summary>
- public string fault_code { get; set; } = string.Empty;
- /// <summary>
- /// 对应的故障发⽣时间
- /// string[1,64]
- /// 如:2022-06-01 14:27:57.283
- /// 时间,精确到毫秒。当状态为Alarm或Fault时,不能为空。格式如如:2022-06-0114:27:57.283。和故障⽇志中的fault_tm值相同
- /// </summary>
- public string fault_tm { get; set; } = string.Empty;
- }
- }
- }
|