//using System; //using System.Collections.Generic; //using Shared; //namespace SmartHome //{ // /// // /// HDLLink协议 工具类 // /// // public class HDLLinkUtlis // { // #region ■ Current___________________________ // /// // /// 通用方法 // /// // private static HDLLinkUtlis m_Current = null; // /// // /// 通用方法 // /// // public static HDLLinkUtlis Current { // get { // if (m_Current == null) { // m_Current = new HDLLinkUtlis (); // } // return m_Current; // } // } // #endregion // /// // /// 将在线设备转换成sid + 属性列表 // /// // /// // /// // public List ConvertToSidListToIotCloud (string sOid, Common onlineDevice) // { // List tmpResult = new List (); // try { // if (onlineDevice.bytSimpleParam == null || onlineDevice.bytSimpleParam.Length == 0) { // string sSimpleList = DeviceTypeList.GetSimpleFunctionListFromPublicModeGroup (onlineDevice.DeviceType); // #region // string [] ArayStr = sSimpleList.Trim ().Split (new char [] { ' ' }); // List ArayTmp = new List (); // for (int i = 0; i < ArayStr.Length; i++) { // if (ArayStr [i] != null && ArayStr [i] != "" && ArayStr [i].Trim () != "") { // ArayTmp.Add (Convert.ToByte (ArayStr [i], 16)); // } // } // onlineDevice.bytSimpleParam = ArayTmp.ToArray (); // #endregion // } // if (onlineDevice.bytSimpleParam != null && onlineDevice.bytSimpleParam.Length > 0) { // for (int intI = 0; intI < onlineDevice.bytSimpleParam.Length / 3; intI++) { // byte BigType = onlineDevice.bytSimpleParam [0 + intI * 3]; // byte SmallType = onlineDevice.bytSimpleParam [1 + intI * 3]; // int Count = onlineDevice.bytSimpleParam [2 + intI * 3]; // if (Count > 0) { // for (int j = 1; j <= Count; j++) { // Sid tmpSid = new Sid (); // tmpSid.sid = HDLSysPF.FormingNewSid (onlineDevice.Type, sOid, j, false, BigType, SmallType); // tmpSid.oid = sOid; // try { // tmpSid.name = onlineDevice.myEasyDesignChannelRemark [intI] [j - 1]; // } catch (Exception ex) { // tmpSid.name = ""; // } // if (tmpSid.name == null || tmpSid.name == "" || tmpSid.name == "Unread") { // tmpSid.name = onlineDevice.Remark + CsConst.mstrINIDefault.IniReadValue ("public", "00000", "") + " " + j.Tostring (); // if (onlineDevice.Remark == "") { // tmpSid.name = onlineDevice.strDescription + CsConst.mstrINIDefault.IniReadValue ("public", "00000", "") + " " + j.Tostring (); // } // } // GateWay.sidObject tmp = HDLSysPF.UpdateSidAttributesToDeviceList (onlineDevice, tmpSid.name, sOid, j, BigType, SmallType, true); // tmpSid.attributes = tmp.attributes;//UpdateSidAttributesToDeviceList(onlineDevice.DeviceType, sOid, j, BigType, SmallType, ref spk); // tmpSid.spk = tmp.spk; // tmpResult.Add (tmpSid); // } // } // } // } // return tmpResult; // } catch (Exception) { // return tmpResult; // //throw; // } // } // /// // /// // /// // /// // /// // /// // /// // public void ConvertOidListToIotStruct (string homeId, List onlineDevices, string gatewayId, ref IotCloud currentProject) // { // try { // //step 1 ;抓换类型 // Sids functionList = currentProject.functions; // List tmpFunction = new List (); // //step 2 转换类型 // Oids tmp = ConvertToOidListToIotCloud (onlineDevices, ref tmpFunction); // if (currentProject.modules == null || currentProject.modules.devices == null || currentProject.modules.devices.Count == 0) currentProject.modules = tmp; // else { // foreach (Oid tmpModule in tmp.devices) { // Oid tmpFind = currentProject.modules.devices.Find (P => P.mac.Equals (tmpModule.mac)); // if (tmpFind == null) currentProject.modules.devices.Add (tmpModule); // } // } // tmp.homeId = homeId; // //上传功能列表 // #region // //if (functionList == null) // //{ // functionList = new Sids (); // functionList.devices = new List (); // functionList.devices = tmpFunction; // //} // functionList.homeId = homeId; // functionList.gatewayId = gatewayId; // currentProject.modules = tmp; // currentProject.functions = functionList; // #endregion // } catch (Exception ex) { // //MessageBox.Show (ex.Tostring ()); // //throw; // } // } // /// // /// // /// // /// // /// // /// // /// // public void ConvertOidListToIotStruct (string homeId, List onlineDevices, string gatewayId, ref IotCloud currentProject) // { // try { // //step 1 转换类型 // Sids functionList = currentProject.functions; // List tmpFunction = new List (); // //step 2 转换类型 // Oids tmp = ConvertToOidListToIotCloud (onlineDevices, ref tmpFunction); // if (currentProject.modules == null || currentProject.modules.devices == null || currentProject.modules.devices.Count == 0) currentProject.modules = tmp; // else { // foreach (Oid tmpModule in tmp.devices) { // Oid tmpFind = currentProject.modules.devices.Find (P => P.mac.Equals (tmpModule.mac)); // if (tmpFind == null) currentProject.modules.devices.Add (tmpModule); // } // } // tmp.homeId = homeId; // //上传功能列表 // #region // //if (functionList == null) // //{ // functionList = new Sids (); // functionList.devices = new List (); // functionList.devices = tmpFunction; // //} // functionList.homeId = homeId; // functionList.gatewayId = gatewayId; // currentProject.modules = tmp; // currentProject.functions = functionList; // #endregion // } catch (Exception ex) { // //MessageBox.Show (ex.Tostring ()); // //throw; // } // } // /// // /// 生成设备Oid // /// // /// // /// // public string FormingNewOid (DeviceType deviceType) // { // string sOid = ""; // try { // //1.生成 厂商 + 通讯方式 // string sOidBeginsWith = "000101";//厂商 + 通讯方式 // //2.生成产品时间戳 // long sTimeSp = ConvertDateTimeLong (); //以2020年1月1日算出的时间戳0.1s为单位 // string sTimeSpan = ""; // ConvertIntToByteArray (sTimeSp, ref sTimeSpan); // if (sTimeSpan.Length != 8) return sOid; // //延迟10ms // //3.生成产品类别 // var productType = GetProductType (deviceType); // sOid = sOidBeginsWith + sTimeSpan + productType; // return sOid; // } catch { // return sOid; // } // } // /// // /// 获取产品类别 // //产品类别 1byte // //编号 描述 // //01 调光器 // //02 继电器 // //03 干接点模块 // //04 传感器 // //05 面板 // //06 RCU // //07 网关 // //08 红外发射 // //09 Android屏 // //10 场景 // //11 音乐播放器 // //12 232/485转换器 // //21 自动化 // //22 安防防区 // //14 窗帘模块 // //15 HVAC // //16 地热模块 // /// // /// // /// // public string GetProductType (DeviceType deviceType) // { // string productType = ""; // switch (deviceType) { // case DeviceType.LightDimming: // productType = "01";//01 调光器 // break; // case DeviceType.LightSwitch: // productType = "02";//02 继电器类 // break; // case DeviceType.CurtainModel: // case DeviceType.CurtainRoller: // case DeviceType.CurtainTrietex: // productType = "03";//03 遮阳类(窗帘) // break; // case DeviceType.SensorWindSpeed: // productType = "04";//04 传感器) // break; // case DeviceType.OnePortWirelessFR: // case DeviceType.OnePortBus: // case DeviceType.RCU: // case DeviceType.SuperWireless: // case DeviceType.OnePortMqttFR: // productType = "07";//07 网关类 // break; // case DeviceType.ACPanel: // case DeviceType.ACDevice: // case DeviceType.ACInfrared: // case DeviceType.ACCoolmaster: // case DeviceType.CustomAC: // case DeviceType.HVAC: // case DeviceType.FoolHeat: // case DeviceType.FoolHeatPanel: // productType = "12";//12 恒温器(空调、地热) // break; // } // return productType; // } // /// // /// 获取生成物理模型参数 // /// // /// // /// // public string GetPhysicalModelType (DeviceType deviceType) // { // string productType = ""; // switch (deviceType) { // case DeviceType.LightDimming: // productType = "0101"; // break; // } // return productType; // } // /// // /// 生成功能设备Sid // /// // /// // /// // /// // /// // /// // /// // /// // public string FormingNewSid (int iDeviceType, string sOid, int iChnId, bool isUseE548ReturnBigSmallType, byte BigType, byte SmallType) // { // if (sOid == null || sOid == "") return ""; // try { // string sSid = ""; // if (DimmerDeviceTypeList.HDLDimmerDeviceTypeList.Contains (iDeviceType)) { // if (DimmerDeviceTypeList.DALIDimmerDeviceTypeLists.Contains (iDeviceType)) { // BigType = 1; // SmallType = 7; // sSid += "0203"; // } else { // sSid += "0202"; // } // } else if (RelayDeviceTypeList.HDLRelayDeviceTypeList.Contains (iDeviceType)) { // sSid += "0201"; // } else if (CurtainDeviceType.HDLCurtainModuleDeviceType.Contains (iDeviceType)) { // if (CurtainDeviceType.NormalMotorCurtainDeviceType.Contains (iDeviceType) || (iDeviceType == 9700)) //所有开合帘 //0 2020 05 24创明开合帘 // { // sSid += "0303"; // } else if (CurtainDeviceType.RollerCurtainDeviceType.Contains (iDeviceType) // || (iDeviceType == 9701))//所有 卷帘控制器 // { // sSid += "0304"; // } else { // sSid += "0301"; // } // } else if (HVACModuleDeviceTypeList.HDLHVACModuleDeviceTypeLists.Contains (iDeviceType)) { // sSid += "0401"; // } else if (Eightin1DeviceTypeList.HDL8in1DeviceType.Contains (iDeviceType) // || Sevenin1DeviceTypeList.HDL7in1DeviceType.Contains (iDeviceType) // || HaikeSensorDeviceTypeList.HaikeSensorDeviceType.Contains (iDeviceType) // || Twelvein1DeviceTypeList.HDL12in1DeviceType.Contains (iDeviceType) // || Rs232DeviceTypeList.HDLRs232DeviceType.Contains (iDeviceType)) { // if (BigType == 19 && SmallType == 0) { // sSid += "1301"; // } else if (BigType == 5 && SmallType == 0) { // sSid += "0519"; // } else { // sSid += BigType.Tostring ("X2") + SmallType.Tostring ("X2"); // } // } else if (FloorheatingDeviceTypeList.HDLFloorHeatingDeviceType.Contains (iDeviceType)) { // sSid += "0402"; // } else if (DMXDeviceTypeList.HDLDMXDeviceTypeList.Contains (iDeviceType)) { // sSid += "0204"; // } else if (DimmerDeviceTypeList.DALIDimmerDeviceTypeLists.Contains (iDeviceType)) { // sSid += "0203"; // } else if (AudioDeviceTypeList.AudioBoxDeviceTypeList.Contains (iDeviceType)) { // sSid += "0901"; // } // string sTmpWithE548 = sSid; // sSid = sOid + sSid + iChnId.Tostring ("X4"); // if (isUseE548ReturnBigSmallType) { // sSid += BigType.Tostring ("X2") + SmallType.Tostring ("X2"); // } else { // sSid += sTmpWithE548; // } // return sSid; // } catch { // return ""; // } // } // private long LastTime = 0; // /// // /// DateTime时间格式转换为13位带毫秒的Unix时间戳 // /// // /// DateTime时间格式 // /// Unix时间戳格式 // public long ConvertDateTimeLong () // { // System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime (new System.DateTime (2020, 1, 1)); // long l = (long)(Math.Round ((DateTime.Now - startTime).TotalSeconds, 1) * 10); // if (l <= LastTime) l = LastTime + 1; // LastTime = l; // return l; // } // public bool ConvertIntToByteArray (long m, ref string strTmp) // { // strTmp = "00000000"; // byte [] arry = new byte [4]; // arry [0] = (byte)(m & 0xFF); // arry [1] = (byte)((m & 0xFF00) >> 8); // arry [2] = (byte)((m & 0xFF0000) >> 16); // arry [3] = (byte)((m & 0xFF000000) >> 24); // strTmp = arry [0].ToString ("X2") + arry [1].ToString ("X2") + arry [2].ToString ("X2") + arry [3].ToString ("X2"); // return true; // } // } // [Serializable] // public class Sids : BaseCloudFeedback // { // public string homeId { get; set; } // public string gatewayId { get; set; } // public List devices { get; set; } // } // [Serializable] // public class BaseCloudFeedback // { // public int code { get; set; } // public string timestamp { get; set; } // public bool isSuccess { get; set; } // public string message { get; set; } // } // [Serializable] // public class Oids : BaseCloudFeedback // { // public string homeId { get; set; } // public string gatewayId { get; set; } // public List devices { get; set; } // } // [Serializable] // public class Oid // { // public string protocolType { get; set; } // public string device_name { get; set; } // public string oid { get; set; } // public string addresses { get; set; } // public string device_model { get; set; } // public string fw_version { get; set; } // public string hw_info { get; set; } // public string mac { get; set; } // public string deviceType { get; set; } // } // [Serializable] // public class Sid // { // public string sid { get; set; } // public string name { get; set; } // public string [] uids { get; set; } // public string spk { get; set; } // public string oid { get; set; } //设备模块地址 // public string omodel { get; set; } //型号 // public List attributes { get; set; } //属性列表 // } // [Serializable] // public class Function // { // //public string name { get; set; } // public string key { get; set; } // public List value { get; set; } // public int max { get; set; } // public int min { get; set; } // public string data_type { get; set; } // } //} ////sid组成部分: ////sid ////来源 厂商代码 通讯方式 产品时间戳 产品类别 物模型类 通道号 大小类别 ////1byte 1byte 1byte 4byte 1byte 2byte 2byte 2byte ////oid组成部分: ////来源 厂商代码 通讯方式 产品时间戳 产品类别 ////1byte 1 byte 1 byte 4 byte 1byte ////其中各部分代码列表: ////来源 1byte 编号 描述 //// 00 默认原生态系统数据 //// 01 网关或者其他A设备 //// 02 调试软件 //// 03 APP应用程序 //// 04 第三方网关或者平台 ////厂商代码 1byte 编号 描述 //// 01 HDL //// 02 ////通讯方式 1byte 编号 描述 //// 01 HDL Bus //// 02 Zigbee //// 03 KNX //// 04 Z-Wave ////产品时间戳 4bytes 以2020年1月1日算出的时间戳0.1s为单位 ////产品类别 1byte 编号 描述 //// 01 调光器 //// 02 继电器 //// 03 干接点模块 //// 04 传感器 //// 05 面板 //// 06 RCU //// 07 网关 //// 08 红外发射 //// 09 Android屏 //// 10 场景 //// 11 音乐播放器 //// 12 232/485转换器 //// 21 自动化 //// 22 安防防区 //// 14 窗帘模块 //// 15 HVAC //// 16 地热模块 ////物模型类型 2bytes 编号 描述 //// 01 开关类 01 开关 //// 02 插座 //// 03 //// 02 照明 01 开关 //// 02 调光 //// 03 色温(CCT) //// 04 RGB //// 03 遮阳 01 窗帘控制器 //// 02 百叶窗 //// 03 开合帘 //// 04 卷帘 //// 05  推窗器 //// 06  投影幕 //// 04 面板 01 按键面板 //// 05 传感器 01 移动探测 //// 02 温度传感器 //// 03 湿度传感器 //// 04 照度传感器 //// 05 TVOC //// 06 PM2.5 //// 07 CO2 //// 08 毫米波传感器 //// 09 //// 10 //// 11 烟雾传感器 //// 25 干接点 //// 07 恒温器 01 空调 //// 02 风扇 //// 03 毛细空调 //// 08 地热 01 地热模块 //// 09 背景音乐 01 音乐播放器 //// 02 Sonos //// 10 场景 01 场景 //// 02 电影场景 //// 19 新风 01 新风 ////13 能源 01 电表 //// 02 水表 //// 03 燃气 //// 16 电器 01 风扇 //// 02 TV //// 20 安防 01 安防 //// 21 自动化 01 自动化 ////大类别 1bytes (预留) ////小类别 1byte (预留)