using System; using System.Collections.Generic; using System.Linq; using Newtonsoft.Json.Linq; using HDL_ON; namespace HDL_ON.Entity { /// /// 功能属性 /// 属性字段解析:attri :属性内容,value 属性的值,max 最大值 min 最小值 /// public class Trait { /// /// 属性内容 /// public string attri; /// /// 属性的值 /// public List value; /// /// 最大值 /// public int max; /// /// 最小值 /// public int min; } public class Function { /* HDL统一协议格式:16bytes 厂商代号:2bytes 通讯方式:有线/无线/ZIGBEE等1bytes 产品识别码:以添加设备的年月日时分秒 + 随机数 8bytes Category 功能类别:1bytes 数据表索引地址:2bytes 回路:2bytes 举例: 0001-00-2019101209001234-01-0001-0001 */ public Function() { dicPropert = new Dictionary(); if (trait == null || trait.Count == 0) { foreach (var t in trait) { dicPropert.TryAdd(t.attri,t.min.ToString()); } } } #region base info /// /// 功能ID /// 厂商代码 2bytes; 01 HDL /// 通讯方式 1byte ; 01 HDL Bus; 02 Zigbee;03 KNX;04 Z-Wave /// 产品GUID 8bytes /// 产品类别 1byte ; 01 调光器;02继电器;03干接点模块;04传感器;05面板 /// 物模型类型2bytes 01 开关类 --01开关;02插座 /// 02 照明 --01开关类;02调光类;03色温;04LED /// 03 遮阳 --01窗帘电机;02百叶窗;03开合帘;04卷帘 /// 04 恒温器 --01空调;02地暖;03毛细空调 /// 05 新风 /// 06 影音 /// 07 音乐 /// 08 能源 /// 09 安防 /// 通道号 2bytes /// Key_id 2bytes /// public string sid = "00010112345678901234560101230123AABB"; /// /// A协议功能的通行 /// 如:是AC功能:特性:on_off,mode,fan,temperature /// attri /// public List trait = new List(); /// /// 房间ID列表 /// 该功能添加到到房间列表 /// public List roomIdList = new List(); /// /// bus协议数据格式 /// 使用A协议控制时,改属性为空 /// public BusData bus_Data; #endregion /// /// 功能附带的属性与值的列表 /// public Dictionary dicPropert; /// /// 功能类别 /// 如:空调类、灯光类、窗帘类 /// public FunctionCategory functionCategory { get { try { var _functionCategoryString = sid.Substring(24, 2); return (FunctionCategory)Enum.ToObject(typeof(FunctionCategory), Convert.ToInt32(_functionCategoryString)); } catch (Exception ex) { MainPage.Log($"get FunctionCategory error : {ex.Message}"); return FunctionCategory.UnKown; } } } public FunctionType functionType { get { var _functionTypeString = sid.Substring(24, 4); return (FunctionType)Enum.ToObject(typeof(FunctionType), Convert.ToInt32(_functionTypeString, 16)); } } /// /// 备注 /// public string name; /// /// A协议厂商代码 /// public string vendor_code { get { string vendorCode = "HDL"; var code = sid.Substring(0, 4); if (code == "0001") vendorCode = "HDL"; return vendorCode; } } /// /// 最后控制的一次状态 /// public string lastState = ""; /// /// 开关状态 /// 0:关 /// 1:开 /// [Newtonsoft.Json.JsonIgnore] public string on_off { get { try { string o = "off"; dicPropert.TryGetValue("on_off", out o); return o == "" ? "off" : o; } catch { MainPage.Log("on_off 数据获取失败."); dicPropert.TryAdd("on_off", "0"); return "off"; } } set { try { dicPropert["on_off"] = value.ToString(); } catch { MainPage.Log("on_off 数据刷新失败."); dicPropert.TryAdd("on_off", value.ToString()); } } } /// /// 是否收藏 /// public bool collection = false; /// /// 使用次数 /// public double usageCount = 0; /// /// 使用频率 /// public double usageFrequency { get { return usageCount / 7; } } /// /// 固定的序号 /// public int fixedSerialNumber = int.MaxValue; /// /// A协议数据 /// public List PropertyArray { get { try { if (trait == null) return new List(); var proArr = new List(); foreach (var pro in trait) { if (!dicPropert.ContainsKey(pro.attri)) { dicPropert.TryAdd(pro.attri, "0"); } if (!proArr.Contains(pro.attri)) { proArr.Add(pro.attri); } } return proArr; } catch (Exception ex) { MainPage.Log($"Get PropertyArray error : {ex.Message}"); return new List(); } } } /// /// 获取A协议控制字符串 /// /// 控制命令:write,read /// public virtual JObject GetSendJObject(CommandType_A command) { var sendJob = new JObject { { "vendor_code", vendor_code }, { "Command", command.ToString() }, { "Type", "device" }, }; var data = new JObject { { "sid", sid } }; sendJob.Add("objects", data); return sendJob; } public string GetBusId () { string busId = ""; if (bus_Data != null) { busId = bus_Data.SubnetID + "_" + bus_Data.DeviceID + "_" + bus_Data.LoopID; } return busId; } /// /// 获取设备添加到房间的房间名称 /// /// public string GetRoomListName() { string roomNameList = ""; foreach(var roomId in roomIdList) { var findRoom = DB_ResidenceData.residenceData.rooms.Find(obj => obj.sid == roomId); if (findRoom == null) continue; if(roomNameList != "") { roomNameList += ","; } roomNameList += findRoom.floor + "·" + findRoom.name; } return roomNameList; } /// /// 更新时间 /// public DateTime refreshTime = DateTime.MinValue; } }