//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 (预留)