| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using Newtonsoft.Json.Linq; |
| | | using HDL_ON; |
| | | using HDL_ON.DriverLayer; |
| | | using Shared; |
| | | |
| | | namespace HDL_ON.Entity |
| | | { |
| | | /// <summary> |
| | | /// 功能属性 |
| | | /// 属性字段解析:attri :属性内容,value 属性的值,max 最大值 min 最小值 |
| | | /// 读取服务器空间信息返回到数据包 |
| | | /// </summary> |
| | | public class Trait |
| | | public class DevcieApiPack |
| | | { |
| | | /// <summary> |
| | | /// 属性内容 |
| | | /// </summary> |
| | | public string attri; |
| | | /// <summary> |
| | | /// 属性的值 |
| | | /// </summary> |
| | | public List<string> value; |
| | | /// <summary> |
| | | /// 最大值 |
| | | /// </summary> |
| | | public int max; |
| | | /// <summary> |
| | | /// 最小值 |
| | | /// </summary> |
| | | public int min; |
| | | public List<Function> list = new List<Function>(); |
| | | |
| | | /// <summary> |
| | | /// 当前值 |
| | | /// app软件自定义属性 |
| | | /// 用来记录当前状态 |
| | | /// </summary> |
| | | public object curValues; |
| | | public string totalCount = "0"; |
| | | |
| | | public string totalPage = "0"; |
| | | |
| | | public string pageNo = "0"; |
| | | |
| | | public string pageSize = "0"; |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 功能类能满足数据使用要求,子类只是为了方便使用属性 |
| | | /// </summary> |
| | | public class Function |
| | | { |
| | | /* |
| | | HDL统一协议格式:16bytes
|
| | | 厂商代号:2bytes
|
| | | 通讯方式:有线/无线/ZIGBEE等1bytes
|
| | | 产品识别码:以添加设备的年月日时分秒 + 随机数 8bytes Category
|
| | | 功能类别:1bytes
|
| | | 数据表索引地址:2bytes
|
| | | 回路:2bytes
|
| | | 举例: 0001-00-2019101209001234-01-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()); |
| | | // } |
| | | //} |
| | | } |
| | | |
| | | #region base info |
| | | /// <summary> |
| | | /// 功能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 |
| | | /// HDL统一协议格式:14bytes
|
| | | /// 举例: 来源 厂商代码 通讯方式 产品时间戳 产品类别 物模型类 通道号 大小类别
|
| | | /// 1byte 1byte 1byte 4byte 1byte 2byte 2byte 2byte |
| | | /// 来源:00 默认原生态系统数据 、01 网关或者其他A设备、02 调试软件、03 APP应用程序、04 第三方网关或者平台
|
| | | /// 厂商代码:01 HDL
|
| | | /// 通讯方式:01 HDL Bus、02 Zigbee、03 KNX、04 Z-Wave |
| | | /// 产品时间戳:4bytes 以2020年1月1日算出的时间戳0.1s为单位 |
| | | /// 产品类别:01 调光器、02 继电器、03 干接点模块、04 传感器、05 面板
|
| | | /// 物模型类型:
|
| | | /// 01 开关类:01 开关、02 插座、03 |
| | | /// 02 照明: 01 开关、02 调光、03 色温、04 LED
|
| | | /// 03 遮阳: 01 窗帘电机、02 百叶窗、03 开合帘、04 卷帘
|
| | | /// 04 恒温器:01 空调、02 地暖、03 毛细空调 |
| | | /// 05 新风 |
| | | /// 06 影音 |
| | | /// 07 音乐 |
| | | /// 08 能源 |
| | | /// 09 安防 |
| | | /// 大类别 1bytes (预留)
|
| | | /// 小类别 1byte (预留) |
| | | /// </summary> |
| | | public string sid = "00010112345678901234560101230123AABB"; |
| | | |
| | | public string sid = "0301011234567801012301230123"; |
| | | /// <summary> |
| | | /// A协议功能的特性 |
| | | /// 如:是AC功能:特性:on_off,mode,fan,temperature |
| | | /// attri |
| | | /// 备注 |
| | | /// </summary> |
| | | public List<Trait> propertList = new List<Trait>(); |
| | | |
| | | public string name; |
| | | /// <summary> |
| | | /// 房间ID列表 |
| | | /// 该功能添加到到房间列表 |
| | | /// 设备ID |
| | | /// 云端负责生成 |
| | | /// </summary> |
| | | public List<string> roomIdList = new List<string>(); |
| | | |
| | | public string deviceId = "0"; |
| | | /// <summary> |
| | | /// bus协议数据格式 |
| | | /// 使用A协议控制时,改属性为空 |
| | | /// 设备spk |
| | | /// </summary> |
| | | public BusData bus_Data; |
| | | #endregion |
| | | |
| | | |
| | | ///// <summary> |
| | | ///// 功能附带的属性与值的列表 |
| | | ///// </summary> |
| | | //public Dictionary<string, string> dicPropert; |
| | | |
| | | public string spk = ""; |
| | | /// <summary> |
| | | /// 功能类别 |
| | | /// 如:空调类、灯光类、窗帘类 |
| | |
| | | { |
| | | try |
| | | { |
| | | var _functionCategoryString = sid.Substring(24, 2); |
| | | var _functionCategoryString = sid.Substring(16, 2); |
| | | var _functionCategory = Convert.ToInt32(_functionCategoryString, 16); |
| | | return (FunctionCategory)Enum.ToObject(typeof(FunctionCategory), _functionCategory); |
| | | } |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 功能类型 |
| | | /// </summary> |
| | | public FunctionType functionType |
| | | { |
| | | get |
| | | { |
| | | var _functionTypeString = sid.Substring(24, 4); |
| | | var _functionTypeString = sid.Substring(16, 4); |
| | | return (FunctionType)Enum.ToObject(typeof(FunctionType), Convert.ToInt32(_functionTypeString, 16)); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 备注 |
| | | /// A协议功能的特性 |
| | | /// 如:是AC功能:特性:on_off,mode,fan,temperature |
| | | /// attri |
| | | /// </summary> |
| | | public string name; |
| | | public List<FunctionAttributes> attributes = new List<FunctionAttributes>(); |
| | | |
| | | /// <summary> |
| | | /// A协议厂商代码 |
| | | /// 房间ID列表 |
| | | /// 该功能添加到到房间列表 |
| | | /// </summary> |
| | | public string vendor_code |
| | | public List<string> roomIds = new List<string>(); |
| | | |
| | | /// <summary> |
| | | /// bus协议数据格式 |
| | | /// 使用A协议控制时,改属性为空 |
| | | /// </summary> |
| | | public BusData bus_Data; |
| | | /// <summary> |
| | | /// 是否收藏 |
| | | /// </summary> |
| | | public bool collect = false; |
| | | #endregion |
| | | /// <summary> |
| | | /// 延时 |
| | | /// </summary> |
| | | public int delay = 0; |
| | | /// <summary> |
| | | /// 延时显示的文本 |
| | | /// </summary> |
| | | [Newtonsoft.Json.JsonIgnore] |
| | | public string delayText |
| | | { |
| | | get |
| | | { |
| | | string vendorCode = "HDL"; |
| | | var code = sid.Substring(0, 4); |
| | | if (code == "0001") |
| | | vendorCode = "HDL"; |
| | | return vendorCode; |
| | | string text = ""; |
| | | switch (delay) |
| | | { |
| | | case 0: |
| | | text = Language.StringByID(StringId.NoDelay); |
| | | break; |
| | | case 30: |
| | | text = "30s"; |
| | | break; |
| | | case 60: |
| | | text = "1min"; |
| | | break; |
| | | case 120: |
| | | text = "2min"; |
| | | break; |
| | | case 300: |
| | | text = "5min"; |
| | | break; |
| | | } |
| | | return text; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 最后控制的一次状态 |
| | | /// </summary> |
| | | [Newtonsoft.Json.JsonIgnore] |
| | | public string lastState = ""; |
| | | |
| | | FunctionAttributes _trait_on_off; |
| | | [Newtonsoft.Json.JsonIgnore] |
| | | public Trait trait_on_off; |
| | | /// <summary> |
| | | /// 开关状态 |
| | | /// 0:关 |
| | | /// 1:开 |
| | | /// </summary> |
| | | [Newtonsoft.Json.JsonIgnore] |
| | | public string on_off |
| | | public FunctionAttributes trait_on_off |
| | | { |
| | | get |
| | | { |
| | | try |
| | | if (_trait_on_off == null) |
| | | { |
| | | if (trait_on_off == null) |
| | | _trait_on_off = attributes.Find((obj) => obj.key == "on_off"); |
| | | //找不到属性需要声明一个,防止报错闪退 |
| | | if (_trait_on_off == null) |
| | | { |
| | | trait_on_off = propertList.Find((obj) => obj.attri == "on_off"); |
| | | //找不到属性需要声明一个,防止报错闪退 |
| | | if (trait_on_off == null) |
| | | _trait_on_off = new FunctionAttributes() |
| | | { |
| | | 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]; |
| | | key = "on_off", |
| | | value = new List<string> { "on", "off" }, |
| | | max = 1, |
| | | min = 0, |
| | | }; |
| | | } |
| | | return trait_on_off.curValues.ToString(); |
| | | _trait_on_off.curValue = "on"; |
| | | } |
| | | catch |
| | | { |
| | | MainPage.Log("on_off 数据获取失败."); |
| | | propertList.Add( new Trait() |
| | | { |
| | | attri = "on_off", |
| | | value = new List<string> { "on", "off" }, |
| | | max = 1, |
| | | min = 0, |
| | | }); |
| | | return "off"; |
| | | } |
| | | return _trait_on_off; |
| | | } |
| | | set |
| | | { |
| | | try |
| | | { |
| | | if (trait_on_off == null) |
| | | { |
| | | trait_on_off = propertList.Find((obj) => obj.attri == "on_off"); |
| | | //找不到属性需要声明一个,防止报错闪退 |
| | | 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}"); |
| | | propertList.Add(new Trait() |
| | | { |
| | | attri = "on_off", |
| | | value = new List<string> { "on", "off" }, |
| | | max = 1, |
| | | min = 0, |
| | | }); |
| | | } |
| | | } |
| | | //set |
| | | //{ |
| | | // _trait_on_off = value; |
| | | //} |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 是否收藏 |
| | | /// </summary> |
| | | public bool collection = false; |
| | | |
| | | /// <summary> |
| | | /// 使用次数 |
| | |
| | | /// </summary> |
| | | public int fixedSerialNumber = int.MaxValue; |
| | | |
| | | /// <summary> |
| | | /// 获取A协议控制字符串 |
| | | /// </summary> |
| | | /// <param name="command">控制命令:write,read</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; |
| | | busId = bus_Data.SubnetID + "_" + bus_Data.DeviceID + "_" + bus_Data.loopId; |
| | | } |
| | | return busId; |
| | | } |
| | |
| | | public string GetRoomListName() |
| | | { |
| | | string roomNameList = ""; |
| | | foreach(var roomId in roomIdList) |
| | | foreach(var roomId in roomIds) |
| | | { |
| | | var findRoom = DB_ResidenceData.residenceData.rooms.Find(obj => obj.sid == roomId); |
| | | var findRoom = DB_ResidenceData.Rooms.Find(obj => obj.uid == roomId); |
| | | if (findRoom == null) |
| | | { |
| | | continue; |
| | | if(roomNameList != "") |
| | | } |
| | | if (roomNameList != "") |
| | | { |
| | | roomNameList += ","; |
| | | } |
| | | roomNameList += findRoom.floor + "·" + findRoom.name; |
| | | roomNameList += findRoom.floorName + findRoom.roomName; |
| | | } |
| | | if (roomNameList == "" && functionType == FunctionType.Scene) |
| | | { |
| | | roomNameList = Language.StringByID(StringId.WholeHouseScene); |
| | | } |
| | | return roomNameList; |
| | | } |
| | | /// <summary> |
| | | /// 数据存储文件名 |
| | | /// </summary> |
| | | [Newtonsoft.Json.JsonIgnore] |
| | | public string savePath |
| | | { |
| | | get |
| | | { |
| | | return "FunctionData_" + sid; |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 保存功能数据 |
| | | /// </summary> |
| | | public void SaveFunctionData() |
| | | { |
| | | var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this)); |
| | | FileUtils.WriteFileByBytes( savePath + this.sid, ssd); |
| | | MainPage.Log($"Save FunctionData {this.functionType} : {this.sid}"); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 转换成场景功能对象 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public SceneFunction ConvertSceneFunction() |
| | | { |
| | | var sFunc = new SceneFunction(); |
| | | foreach (var attr in attributes) |
| | | { |
| | | sFunc.status.Add(new SceneFunctionStatus() { key = attr.key, value = attr.curValue.ToString() }); |
| | | } |
| | | return sFunc; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 更新时间 |
| | | /// </summary> |
| | | public DateTime refreshTime = DateTime.MinValue; |
| | | |
| | | /// <summary> |
| | | /// 获取本地控制数据 |
| | | /// </summary> |
| | | public GatewayAlinkControlObj GetGatewayAlinkControlData(Dictionary<string, string> commandDictionary) |
| | | { |
| | | var sendDataObj = new GatewayAlinkControlObj(); |
| | | sendDataObj.id = Control.Ins.msg_id.ToString(); |
| | | sendDataObj.time_stamp = Control.Ins.Get_TimeStamp(); |
| | | |
| | | |
| | | var acd = new AlinkControlData(); |
| | | acd.sid = sid; |
| | | #if DEBUG |
| | | acd.sid = "0001016FB925AB02020100010101"; |
| | | #endif |
| | | var aca = new AlinkControlAttributes(); |
| | | foreach(var dic in commandDictionary) |
| | | { |
| | | aca.key = dic.Key; |
| | | aca.value = dic.Value; |
| | | acd.status.Add(aca); |
| | | } |
| | | |
| | | sendDataObj.objects.Add(acd); |
| | | |
| | | return sendDataObj; |
| | | } |
| | | /// <summary> |
| | | /// 获取Api控制数据 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public ApiAlinkControlActionObj GetApiControlData(Dictionary<string,string> keyValues) |
| | | { |
| | | ApiAlinkControlActionObj aaao = new ApiAlinkControlActionObj(); |
| | | aaao.deviceId = this.deviceId; |
| | | aaao.spk = this.spk; |
| | | foreach (var kv in keyValues) |
| | | { |
| | | aaao.attributes.Add(new AlinkControlAttributes() |
| | | { |
| | | key = kv.Key, |
| | | value = kv.Value, |
| | | }); |
| | | } |
| | | return aaao; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 远程控制 |
| | | /// api a协议控制动作对象 |
| | | /// </summary> |
| | | public class ApiAlinkControlActionObj |
| | | { |
| | | /// <summary> |
| | | /// 设备ID |
| | | /// </summary> |
| | | public string deviceId = "0"; |
| | | /// <summary> |
| | | /// spk |
| | | /// 列:light.switch |
| | | /// </summary> |
| | | public string spk = ""; |
| | | |
| | | public List<AlinkControlAttributes> attributes = new List<AlinkControlAttributes>(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 本地控制 |
| | | /// A协议控制数据的对象 |
| | | /// </summary> |
| | | public class GatewayAlinkControlObj |
| | | { |
| | | public List<AlinkControlData> objects = new List<AlinkControlData>(); |
| | | |
| | | public string time_stamp = ""; |
| | | public string id = ""; |
| | | } |
| | | /// <summary> |
| | | /// A协议控制数据 |
| | | /// </summary> |
| | | public class AlinkControlData |
| | | { |
| | | public string sid = ""; |
| | | public List<AlinkControlAttributes> status = new List<AlinkControlAttributes>(); |
| | | } |
| | | /// <summary> |
| | | /// a协议控制动作数据 |
| | | /// </summary> |
| | | public class AlinkControlAttributes |
| | | { |
| | | /// <summary> |
| | | /// 属性名 |
| | | /// 列:on_off |
| | | /// </summary> |
| | | public string key = ""; |
| | | /// <summary> |
| | | /// 属性值 |
| | | /// 列:on |
| | | /// </summary> |
| | | public string value = ""; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 功能属性 |
| | | /// 属性字段解析:attri :属性内容,value 属性的值,max 最大值 min 最小值 |
| | | /// </summary> |
| | | public class FunctionAttributes |
| | | { |
| | | /// <summary> |
| | | /// 属性键名 |
| | | /// </summary> |
| | | public string key; |
| | | /// <summary> |
| | | /// 属性的值列表 |
| | | /// </summary> |
| | | public List<string> value = new List<string>(); |
| | | /// <summary> |
| | | /// 最大值 |
| | | /// </summary> |
| | | public int max; |
| | | /// <summary> |
| | | /// 最小值 |
| | | /// </summary> |
| | | public int min; |
| | | /// <summary> |
| | | /// 数据类型 |
| | | /// </summary> |
| | | public string data_type = ""; |
| | | /// <summary> |
| | | /// 当前值 |
| | | /// </summary> |
| | | public object curValue = new object(); |
| | | |
| | | //----app自定义 |
| | | /// <summary> |
| | | /// 属性值单位 |
| | | /// </summary> |
| | | string _uintString; |
| | | [Newtonsoft.Json.JsonIgnore] |
| | | public string uintString |
| | | { |
| | | get |
| | | { |
| | | if (!string.IsNullOrEmpty(_uintString)) |
| | | { |
| | | return _uintString; |
| | | } |
| | | var us = ""; |
| | | switch (key) |
| | | { |
| | | case "temperature": |
| | | case "set_temperature": |
| | | us = "°C"; |
| | | break; |
| | | case "percent": |
| | | case "brightness": |
| | | us = "%"; |
| | | break; |
| | | } |
| | | return us; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 属性名称显示文本 |
| | | /// 中英文显示 |
| | | /// </summary> |
| | | [Newtonsoft.Json.JsonIgnore] |
| | | public string name_text |
| | | { |
| | | get |
| | | { |
| | | string text = ""; |
| | | switch (key) |
| | | { |
| | | case "on_off": |
| | | text = Language.StringByID(StringId.OnOff); |
| | | break; |
| | | case "brightness": |
| | | text = Language.StringByID(StringId.Brightness); |
| | | break; |
| | | case "color": |
| | | text = Language.StringByID(StringId.ColorValue); |
| | | break; |
| | | case "mode": |
| | | text = Language.StringByID(StringId.Mode); |
| | | break; |
| | | case "fan": |
| | | text = Language.StringByID(StringId.FanSpeed); |
| | | break; |
| | | case "temperature": |
| | | case "set_temperature": |
| | | text = Language.StringByID(StringId.Temp); |
| | | break; |
| | | case "delay": |
| | | text = Language.StringByID(StringId.Delay); |
| | | break; |
| | | case "cct": |
| | | text = "CCT"; |
| | | break; |
| | | //case "fade_time": |
| | | case "percent": |
| | | text = Language.StringByID(StringId.PercentAdjustment); |
| | | break; |
| | | //case "lock": |
| | | //case "ico": |
| | | //case "swing": |
| | | //case "set_point": |
| | | //case "pm25": |
| | | //case "volume": |
| | | //case "vol_step": |
| | | //case "source": |
| | | //case "treble": |
| | | //case "bass": |
| | | //case "playlist": |
| | | //case "song_name": |
| | | //case "current_status": |
| | | //case "enable": |
| | | //case "lux": |
| | | //case "adjust_value": |
| | | //case "range": |
| | | //case "humidity": |
| | | //case "type": |
| | | //case "state": |
| | | //case "sensitivity": |
| | | //case "pm25value": |
| | | } |
| | | return text; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取当前属性的显示文本 |
| | | /// 中英文显示 |
| | | /// </summary> |
| | | public string GetCurValueText() |
| | | { |
| | | return GetValueText(curValue.ToString()); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取指定属性的显示文本 |
| | | /// 中英文显示 |
| | | /// </summary> |
| | | public string GetValueText(string value) |
| | | { |
| | | string text = ""; |
| | | value = value.Replace("{}", ""); |
| | | switch (key) |
| | | { |
| | | case "on_off": |
| | | text = value == "on" ? Language.StringByID(StringId.On) : Language.StringByID(StringId.OFF); |
| | | break; |
| | | case "temperature": |
| | | case "set_temperature": |
| | | case "brightness": |
| | | case "percent": |
| | | if (value == "") |
| | | { |
| | | this.curValue = this.min; |
| | | text = this.min.ToString(); |
| | | } |
| | | else |
| | | { |
| | | text = value; |
| | | } |
| | | break; |
| | | //case "color": |
| | | case "mode": |
| | | switch (value) |
| | | { |
| | | //----空调 |
| | | case "auto": |
| | | text = Language.StringByID(StringId.Auto); |
| | | break; |
| | | case "cool": |
| | | text = Language.StringByID(StringId.Cool); |
| | | break; |
| | | case "heat": |
| | | text = Language.StringByID(StringId.Heat); |
| | | break; |
| | | case "dry": |
| | | text = Language.StringByID(StringId.Dry); |
| | | break; |
| | | case "fan": |
| | | text = Language.StringByID(StringId.AirSupply); |
| | | break; |
| | | //-----地热 |
| | | case "day": |
| | | text = Language.StringByID(StringId.Day); |
| | | break; |
| | | case "night": |
| | | text = Language.StringByID(StringId.Night); |
| | | break; |
| | | case "away": |
| | | text = Language.StringByID(StringId.Away); |
| | | break; |
| | | case "normal": |
| | | text = Language.StringByID(StringId.Normal); |
| | | break; |
| | | case "timer": |
| | | text = Language.StringByID(StringId.Timer); |
| | | break; |
| | | default: |
| | | if (this.value.Contains("cool")) |
| | | { |
| | | this.curValue = "cool"; |
| | | text = Language.StringByID(StringId.Cool); |
| | | } |
| | | else if (this.value.Contains("day")) |
| | | { |
| | | this.curValue = "day"; |
| | | text = Language.StringByID(StringId.Day); |
| | | } |
| | | else |
| | | { |
| | | foreach (var v in this.value) |
| | | { |
| | | this.curValue = v; |
| | | text = GetCurValueText(); |
| | | } |
| | | } |
| | | break; |
| | | } |
| | | break; |
| | | case "fan": |
| | | switch (value) |
| | | { |
| | | case "high": |
| | | text = Language.StringByID(StringId.HighWindSpeed); |
| | | break; |
| | | case "medium": |
| | | text = Language.StringByID(StringId.MiddleWindSpeed); |
| | | break; |
| | | case "low": |
| | | text = Language.StringByID(StringId.LowWindSpeed); |
| | | break; |
| | | case "auto": |
| | | text = Language.StringByID(StringId.Auto); |
| | | break; |
| | | default: |
| | | if (this.value.Contains("low")) |
| | | { |
| | | this.curValue = "low"; |
| | | text = Language.StringByID(StringId.LowWindSpeed); |
| | | } |
| | | else |
| | | { |
| | | foreach (var v in this.value) |
| | | { |
| | | this.curValue = v; |
| | | text = GetCurValueText(); |
| | | } |
| | | } |
| | | break; |
| | | } |
| | | break; |
| | | //case "delay": |
| | | //case "cct": |
| | | //case "fade_time": |
| | | //case "lock": |
| | | //case "ico": |
| | | //case "swing": |
| | | //case "set_point": |
| | | //case "pm25": |
| | | //case "volume": |
| | | //case "vol_step": |
| | | //case "source": |
| | | //case "treble": |
| | | //case "bass": |
| | | //case "playlist": |
| | | //case "song_name": |
| | | //case "current_status": |
| | | //case "enable": |
| | | //case "lux": |
| | | //case "adjust_value": |
| | | //case "range": |
| | | //case "humidity": |
| | | //case "type": |
| | | //case "state": |
| | | //case "sensitivity": |
| | | //case "pm25value": |
| | | case "high": |
| | | text = Language.StringByID(StringId.HighWindSpeed); |
| | | break; |
| | | case "medium": |
| | | text = Language.StringByID(StringId.MiddleWindSpeed); |
| | | break; |
| | | case "low": |
| | | text = Language.StringByID(StringId.LowWindSpeed); |
| | | break; |
| | | case "auto": |
| | | text = Language.StringByID(StringId.Auto); |
| | | break; |
| | | } |
| | | return text; |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 功能属性键名列表 |
| | | /// </summary> |
| | | public static class FunctionAttributeKey |
| | | { |
| | | /// <summary> |
| | | /// 开关 |
| | | /// </summary> |
| | | public const string OnOff = "on_off"; |
| | | /// <summary> |
| | | /// 亮度 |
| | | /// </summary> |
| | | public const string Brightness = "brightness"; |
| | | /// <summary> |
| | | /// 颜色 |
| | | /// </summary> |
| | | public const string Color = "color"; |
| | | /// <summary> |
| | | /// 模式 |
| | | /// </summary> |
| | | public const string Mode = "mode"; |
| | | /// <summary> |
| | | /// 风速 |
| | | /// </summary> |
| | | public const string FanSpeed = "fan"; |
| | | /// <summary> |
| | | /// 温度 |
| | | /// </summary> |
| | | public const string Temp = "temperature"; |
| | | /// <summary> |
| | | /// 延时 |
| | | /// </summary> |
| | | public const string Delay = "delay"; |
| | | /// <summary> |
| | | /// 色温 |
| | | /// </summary> |
| | | public const string CCT = "cct"; |
| | | /// <summary> |
| | | /// 百分比 |
| | | /// </summary> |
| | | public const string Percent = "percent"; |
| | | } |
| | | /// <summary> |
| | | /// 设备功能oid |
| | | /// </summary> |
| | | public class FunctionOid |
| | | { |
| | | public string oid; |
| | | public string name; |
| | | public string machine_id; |
| | | public string net_id; |
| | | public string dev_id; |
| | | public string channels; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 兼容旧协议控制 |
| | | /// </summary> |
| | | public class BusData |
| | | { |
| | | public string addresses = "FFFF"; |
| | | public byte SubnetID |
| | | { |
| | | get |
| | | { |
| | | return Convert.ToByte(addresses.Substring(0, 2), 16); |
| | | } |
| | | } |
| | | public byte DeviceID |
| | | { |
| | | get |
| | | { |
| | | return Convert.ToByte(addresses.Substring(2, 2), 16); |
| | | } |
| | | } |
| | | public byte loopId; |
| | | } |
| | | |
| | | } |