//using System;
|
//using System.Collections.Generic;
|
//using Shared;
|
|
//namespace SmartHome
|
//{
|
// /// <summary>
|
// /// HDLLink协议 工具类
|
// /// </summary>
|
// public class HDLLinkUtlis
|
// {
|
// #region ■ Current___________________________
|
// /// <summary>
|
// /// 通用方法
|
// /// </summary>
|
// private static HDLLinkUtlis m_Current = null;
|
// /// <summary>
|
// /// 通用方法
|
// /// </summary>
|
// public static HDLLinkUtlis Current {
|
// get {
|
// if (m_Current == null) {
|
// m_Current = new HDLLinkUtlis ();
|
// }
|
// return m_Current;
|
// }
|
// }
|
// #endregion
|
|
|
|
|
// /// <summary>
|
// /// 将在线设备转换成sid + 属性列表
|
// /// </summary>
|
// /// <param name="onlineDevices"></param>
|
// /// <returns></returns>
|
// public List<Sid> ConvertToSidListToIotCloud (string sOid, Common onlineDevice)
|
// {
|
// List<Sid> tmpResult = new List<Sid> ();
|
// try {
|
// if (onlineDevice.bytSimpleParam == null || onlineDevice.bytSimpleParam.Length == 0) {
|
// string sSimpleList = DeviceTypeList.GetSimpleFunctionListFromPublicModeGroup (onlineDevice.DeviceType);
|
// #region
|
// string [] ArayStr = sSimpleList.Trim ().Split (new char [] { ' ' });
|
// List<byte> ArayTmp = new List<byte> ();
|
// 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;
|
// }
|
// }
|
|
// /// <summary>
|
// ///
|
// /// </summary>
|
// /// <param name="homeId"></param>
|
// /// <param name="onlineDevices"></param>
|
// /// <param name="gatewayId"></param>
|
// /// <param name="currentProject"></param>
|
// public void ConvertOidListToIotStruct (string homeId, List<Common> onlineDevices, string gatewayId, ref IotCloud currentProject)
|
// {
|
// try {
|
// //step 1 ;抓换类型
|
// Sids functionList = currentProject.functions;
|
// List<Sid> tmpFunction = new List<Sid> ();
|
|
// //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<Sid> ();
|
// functionList.devices = tmpFunction;
|
// //}
|
// functionList.homeId = homeId;
|
// functionList.gatewayId = gatewayId;
|
// currentProject.modules = tmp;
|
// currentProject.functions = functionList;
|
// #endregion
|
|
// } catch (Exception ex) {
|
// //MessageBox.Show (ex.Tostring ());
|
// //throw;
|
// }
|
// }
|
|
// /// <summary>
|
// ///
|
// /// </summary>
|
// /// <param name="homeId"></param>
|
// /// <param name="onlineDevices"></param>
|
// /// <param name="gatewayId"></param>
|
// /// <param name="currentProject"></param>
|
// public void ConvertOidListToIotStruct (string homeId, List<Common> onlineDevices, string gatewayId, ref IotCloud currentProject)
|
// {
|
// try {
|
// //step 1 转换类型
|
// Sids functionList = currentProject.functions;
|
// List<Sid> tmpFunction = new List<Sid> ();
|
|
// //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<Sid> ();
|
// functionList.devices = tmpFunction;
|
// //}
|
// functionList.homeId = homeId;
|
// functionList.gatewayId = gatewayId;
|
// currentProject.modules = tmp;
|
// currentProject.functions = functionList;
|
// #endregion
|
|
// } catch (Exception ex) {
|
// //MessageBox.Show (ex.Tostring ());
|
// //throw;
|
// }
|
// }
|
|
// /// <summary>
|
// /// 生成设备Oid
|
// /// </summary>
|
// /// <param name="iDeviceType"></param>
|
// /// <returns></returns>
|
// 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;
|
// }
|
// }
|
|
// /// <summary>
|
// /// 获取产品类别
|
// //产品类别 1byte
|
// //编号 描述
|
// //01 调光器
|
// //02 继电器
|
// //03 干接点模块
|
// //04 传感器
|
// //05 面板
|
// //06 RCU
|
// //07 网关
|
// //08 红外发射
|
// //09 Android屏
|
// //10 场景
|
// //11 音乐播放器
|
// //12 232/485转换器
|
// //21 自动化
|
// //22 安防防区
|
// //14 窗帘模块
|
// //15 HVAC
|
// //16 地热模块
|
// /// </summary>
|
// /// <param name="deviceType"></param>
|
// /// <returns></returns>
|
// 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;
|
// }
|
|
|
|
// /// <summary>
|
// /// 获取生成物理模型参数
|
|
// /// </summary>
|
// /// <param name="deviceType"></param>
|
// /// <returns></returns>
|
// public string GetPhysicalModelType (DeviceType deviceType)
|
// {
|
// string productType = "";
|
// switch (deviceType) {
|
// case DeviceType.LightDimming:
|
// productType = "0101";
|
// break;
|
// }
|
|
// return productType;
|
// }
|
|
|
|
|
// /// <summary>
|
// /// 生成功能设备Sid
|
// /// </summary>
|
// /// <param name="iDeviceType"></param>
|
// /// <param name="sOid"></param>
|
// /// <param name="iChnId"></param>
|
// /// <param name="isUseE548ReturnBigSmallType"></param>
|
// /// <param name="BigType"></param>
|
// /// <param name="SmallType"></param>
|
// /// <returns></returns>
|
// 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;
|
// /// <summary>
|
// /// DateTime时间格式转换为13位带毫秒的Unix时间戳
|
// /// </summary>
|
// /// <param name="time"> DateTime时间格式</param>
|
// /// <returns>Unix时间戳格式</returns>
|
// 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<Sid> 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<Oid> 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<Function> attributes { get; set; } //属性列表
|
// }
|
|
|
// [Serializable]
|
// public class Function
|
// {
|
// //public string name { get; set; }
|
// public string key { get; set; }
|
// public List<string> 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 (预留)
|