From 5de5a26d3825b3182a7d3a18ed1cbdbb78a3f9aa Mon Sep 17 00:00:00 2001 From: wxr <464027401@qq.com> Date: 星期四, 23 七月 2020 16:39:59 +0800 Subject: [PATCH] 2020-07-23 --- HDL_ON/Entity/Function/Function.cs | 315 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 289 insertions(+), 26 deletions(-) diff --git a/HDL_ON/Entity/Function/Function.cs b/HDL_ON/Entity/Function/Function.cs index 6d2f2e6..64225a0 100644 --- a/HDL_ON/Entity/Function/Function.cs +++ b/HDL_ON/Entity/Function/Function.cs @@ -1,61 +1,324 @@ 锘縰sing System; using System.Collections.Generic; +using System.Linq; +using Newtonsoft.Json.Linq; +using HDL_ON; namespace HDL_ON.Entity { + /// <summary> + /// 鍔熻兘灞炴�� + /// 灞炴�у瓧娈佃В鏋愶細attri :灞炴�у唴瀹癸紝value 灞炴�х殑鍊硷紝max 鏈�澶у�� min 鏈�灏忓�� + /// </summary> + public class Trait + { + /// <summary> + /// 灞炴�у唴瀹� + /// </summary> + public string attri; + /// <summary> + /// 灞炴�х殑鍊� + /// </summary> + public List<string> value; + /// <summary> + /// 鏈�澶у�� + /// </summary> + public int max; + /// <summary> + /// 鏈�灏忓�� + /// </summary> + public int min; + + /// <summary> + /// + /// </summary> + public string data_type = ""; + + /// <summary> + /// 褰撳墠鍊� + /// app杞欢鑷畾涔夊睘鎬� + /// 鐢ㄦ潵璁板綍褰撳墠鐘舵�� + /// </summary> + public object curValues; + } + public class Function { /* HDL缁熶竴鍗忚鏍煎紡锛�16bytes 鍘傚晢浠e彿锛�2bytes 閫氳鏂瑰紡锛氭湁绾�/鏃犵嚎/ZIGBEE绛�1bytes - 浜у搧璇嗗埆鐮侊細浠ユ坊鍔犺澶囩殑骞存湀鏃ユ椂鍒嗙 + 闅忔満鏁�8bytes + 浜у搧璇嗗埆鐮侊細浠ユ坊鍔犺澶囩殑骞存湀鏃ユ椂鍒嗙 + 闅忔満鏁� 8bytes Category 鍔熻兘绫诲埆锛�1bytes 鏁版嵁琛ㄧ储寮曞湴鍧�锛�2bytes 鍥炶矾锛�2bytes - 涓句緥锛� 0001-00-201910120900002567-01-0001-0001 + 涓句緥锛� 0001-00-2019101209001234-01-0001-0001 + 0001-01-14051D0A300C92C9-02-0202-0001-0001 */ - public Function() { + //dicPropert = new Dictionary<string, string>(); + //if (propertList == null || propertList.Count == 0) + //{ + // foreach (var t in propertList) + // { + // dicPropert.TryAdd(t.attri,t.min.ToString()); + // } + //} } - /// <summary> - /// 褰撳墠璁惧绫诲瀷 - /// </summary> - public FunctionType funcType = FunctionType.UnKown; - /// <summary> - /// 鍔熻兘鍒嗙被 - /// </summary> - public string funcClassification; + #region base info /// <summary> /// 鍔熻兘ID + /// 鍘傚晢浠g爜 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 /// </summary> - public string sid; + public string sid = "00010112345678901234560101230123AABB"; + /// <summary> - /// 澶囨敞 + /// A鍗忚鍔熻兘鐨勭壒鎬� + /// 濡傦細鏄疉C鍔熻兘锛氱壒鎬э細on_off,mode,fan,temperature + /// attri /// </summary> - public string Name; - /// <summary> - /// 淇濆瓨鏁版嵁鏃剁殑鏂囦欢鍚� - /// </summary> - public string SavePath = ""; - /// <summary> - /// A鍗忚鏁版嵁鏍煎紡 - /// </summary> - public string A_Protocol; - /// <summary> - /// bus鍗忚鏁版嵁鏍煎紡 - /// </summary> - public string Bus_Protocol; + public List<Trait> function = new List<Trait>(); + /// <summary> /// 鎴块棿ID鍒楄〃 /// 璇ュ姛鑳芥坊鍔犲埌鍒版埧闂村垪琛� /// </summary> public List<string> roomIdList = new List<string>(); + + /// <summary> + /// bus鍗忚鏁版嵁鏍煎紡 + /// 浣跨敤A鍗忚鎺у埗鏃讹紝鏀瑰睘鎬т负绌� + /// </summary> + public BusData bus_Data; + #endregion + + + ///// <summary> + ///// 鍔熻兘闄勫甫鐨勫睘鎬т笌鍊肩殑鍒楄〃 + ///// </summary> + //public Dictionary<string, string> dicPropert; + + /// <summary> + /// 鍔熻兘绫诲埆 + /// 濡傦細绌鸿皟绫汇�佺伅鍏夌被銆佺獥甯樼被 + /// </summary> + public FunctionCategory functionCategory + { + get + { + try + { + var _functionCategoryString = sid.Substring(24, 2); + var _functionCategory = Convert.ToInt32(_functionCategoryString, 16); + return (FunctionCategory)Enum.ToObject(typeof(FunctionCategory), _functionCategory); + } + 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)); + } + } + + /// <summary> + /// 澶囨敞 + /// </summary> + public string name; + /// <summary> + /// A鍗忚鍘傚晢浠g爜 + /// </summary> + public string vendor_code + { + get + { + string vendorCode = "HDL"; + var code = sid.Substring(0, 4); + if (code == "0001") + vendorCode = "HDL"; + return vendorCode; + } + } + /// <summary> /// 鏈�鍚庢帶鍒剁殑涓�娆$姸鎬� /// </summary> public string lastState = ""; + [Newtonsoft.Json.JsonIgnore] + public Trait trait_on_off; + /// <summary> + /// 寮�鍏崇姸鎬� + /// 0:鍏� + /// 1:寮� + /// </summary> + [Newtonsoft.Json.JsonIgnore] + public string on_off + { + get + { + try + { + if (trait_on_off == null) + { + trait_on_off = function.Find((obj) => obj.attri == "on_off"); + //鎵句笉鍒板睘鎬ч渶瑕佸0鏄庝竴涓紝闃叉鎶ラ敊闂�� + if (trait_on_off == null) + { + trait_on_off = new Trait() + { + attri = "on_off", + value = new List<string> { "on", "off" }, + max = 1, + min = 0, + }; + } + trait_on_off.curValues = trait_on_off.value[trait_on_off.min]; + } + return trait_on_off.curValues.ToString(); + } + catch + { + MainPage.Log("on_off 鏁版嵁鑾峰彇澶辫触."); + function.Add( new Trait() + { + attri = "on_off", + value = new List<string> { "on", "off" }, + max = 1, + min = 0, + }); + return "off"; + } + } + set + { + try + { + if (trait_on_off == null) + { + trait_on_off = function.Find((obj) => obj.attri == "on_off"); + //鎵句笉鍒板睘鎬ч渶瑕佸0鏄庝竴涓紝闃叉鎶ラ敊闂�� + if (trait_on_off == null) + { + trait_on_off = new Trait() + { + attri = "on_off", + value = new List<string> { "on", "off" }, + max = 1, + min = 0, + }; + } + trait_on_off.curValues = trait_on_off.min; + } + trait_on_off.curValues = value; + } + catch (Exception ex) + { + MainPage.Log($"on_off 鏁版嵁鍒锋柊澶辫触: {ex.Message}"); + function.Add(new Trait() + { + attri = "on_off", + value = new List<string> { "on", "off" }, + max = 1, + min = 0, + }); + } + } + } + + /// <summary> + /// 鏄惁鏀惰棌 + /// </summary> + public bool collection = false; + + /// <summary> + /// 浣跨敤娆℃暟 + /// </summary> + public double usageCount = 0; + /// <summary> + /// 浣跨敤棰戠巼 + /// </summary> + public double usageFrequency { + get + { + return usageCount / 7; + } + } + /// <summary> + /// 鍥哄畾鐨勫簭鍙� + /// </summary> + public int fixedSerialNumber = int.MaxValue; + + /// <summary> + /// 鑾峰彇A鍗忚鎺у埗瀛楃涓� + /// </summary> + /// <param name="command">鎺у埗鍛戒护锛歸rite锛宺ead</param> + /// <returns></returns> + 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; + } + + /// <summary> + /// 鑾峰彇璁惧娣诲姞鍒版埧闂寸殑鎴块棿鍚嶇О + /// </summary> + /// <returns></returns> + 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; + } + + /// <summary> + /// 鏇存柊鏃堕棿 + /// </summary> + public DateTime refreshTime = DateTime.MinValue; } } -- Gitblit v1.8.0