| | |
| | | /// 该功能添加到到房间列表 |
| | | /// </summary> |
| | | public List<string> roomIds = new List<string>(); |
| | | /// <summary> |
| | | /// 绑定房间 |
| | | /// </summary> |
| | | public void BindRoom(string roomId) |
| | | { |
| | | roomIds.Add(roomId); |
| | | var pm = new DAL.Server.HttpServerRequest(); |
| | | pm.BindDeviceToRoom(deviceId, roomId); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// bus协议数据格式 |
| | | /// 使用A协议控制时,改属性为空 |
| | | /// </summary> |
| | | public BusData bus_Data; |
| | | public BusData bus; |
| | | /// <summary> |
| | | /// 是否收藏 |
| | | /// </summary> |
| | |
| | | /// </summary> |
| | | public int delay = 0; |
| | | /// <summary> |
| | | /// 延时显示的文本 |
| | | /// </summary> |
| | | [Newtonsoft.Json.JsonIgnore] |
| | | public string delayText |
| | | { |
| | | get |
| | | { |
| | | 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] |
| | |
| | | { |
| | | if (_trait_on_off == null) |
| | | { |
| | | _trait_on_off = attributes.Find((obj) => obj.key == "on_off"); |
| | | _trait_on_off = attributes.Find((obj) => obj.key == FunctionAttributeKey.OnOff); |
| | | //找不到属性需要声明一个,防止报错闪退 |
| | | if (_trait_on_off == null) |
| | | { |
| | |
| | | max = 1, |
| | | min = 0, |
| | | }; |
| | | _trait_on_off.curValue = "off"; |
| | | } |
| | | _trait_on_off.curValue = "on"; |
| | | } |
| | | if(_trait_on_off.curValue.ToString() != "on"&& _trait_on_off.curValue.ToString() != "off") |
| | | { |
| | | _trait_on_off.curValue = "off"; |
| | | } |
| | | return _trait_on_off; |
| | | } |
| | |
| | | /// <summary> |
| | | /// 使用频率 |
| | | /// </summary> |
| | | public double usageFrequency { |
| | | public double usageFrequency |
| | | { |
| | | get |
| | | { |
| | | return usageCount / 7; |
| | |
| | | public string GetBusId() |
| | | { |
| | | string busId = ""; |
| | | if (bus_Data != null) |
| | | if (bus != null) |
| | | { |
| | | busId = bus_Data.SubnetID + "_" + bus_Data.DeviceID + "_" + bus_Data.loopId; |
| | | busId = bus.SubnetID + "_" + bus.DeviceID + "_" + bus.LoopId; |
| | | } |
| | | return busId; |
| | | } |
| | |
| | | string roomNameList = ""; |
| | | foreach (var roomId in roomIds) |
| | | { |
| | | var findRoom = DB_ResidenceData.residenceData.Rooms.Find(obj => obj.roomId == roomId); |
| | | var findRoom = SpatialInfo.CurrentSpatial.RoomList.Find(obj => obj.roomId == roomId); |
| | | if (findRoom == null) |
| | | { |
| | | continue; |
| | |
| | | { |
| | | roomNameList += ","; |
| | | } |
| | | roomNameList += findRoom.floorName + findRoom.roomName; |
| | | roomNameList += findRoom.floorName +"-"+ findRoom.roomName; |
| | | } |
| | | if (roomNameList == "" && functionType == FunctionType.Scene) |
| | | { |
| | | roomNameList = Language.StringByID(StringId.WholeHouseScene); |
| | | roomNameList = Language.StringByID(StringId.WholeZone); |
| | | } |
| | | return roomNameList; |
| | | } |
| | |
| | | if (pack.Code == DAL.Server.StateCode.SUCCESS) |
| | | { |
| | | var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this)); |
| | | FileUtils.WriteFileByBytes(savePath, ssd); |
| | | MainPage.Log($"Save FunctionData {this.functionType} : {this.sid}"); |
| | | Common.FileUtlis.Files.WriteFileByBytes(savePath, ssd); |
| | | } |
| | | else |
| | | { |
| | | Utlis.ShowTip(Language.StringByID(StringId.EditFunctionInfoFail) + "Code:" + pack.Code); |
| | | Utlis.ShowTip(Language.StringByID(StringId.EditFunctionInfoFail) + "\r\nCode:" + pack.Code); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this)); |
| | | FileUtils.WriteFileByBytes(savePath, ssd); |
| | | MainPage.Log($"Save FunctionData {this.functionType} : {this.sid}"); |
| | | Common.FileUtlis.Files.WriteFileByBytes(savePath, ssd); |
| | | } |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 转换成场景功能对象 |
| | |
| | | var sFunc = new SceneFunction(); |
| | | foreach (var attr in attributes) |
| | | { |
| | | sFunc.status.Add(new SceneFunctionStatus() { key = attr.key, value = attr.curValue.ToString() }); |
| | | switch (attr.key) |
| | | { |
| | | case FunctionAttributeKey.OnOff: |
| | | case FunctionAttributeKey.Brightness: |
| | | case FunctionAttributeKey.Mode: |
| | | case FunctionAttributeKey.SetTemp: |
| | | case FunctionAttributeKey.FanSpeed: |
| | | case FunctionAttributeKey.Percent: |
| | | //case FunctionAttributeKey.FadeTime: |
| | | if (attr.curValue.ToString() == "{}") |
| | | { |
| | | if (attr.key == FunctionAttributeKey.OnOff) |
| | | { |
| | | attr.curValue = "off"; |
| | | } |
| | | else |
| | | { |
| | | attr.curValue = "0"; |
| | | } |
| | | } |
| | | if (attr.key == FunctionAttributeKey.SetTemp) |
| | | { |
| | | double vv = 16; |
| | | Double.TryParse(attr.curValue.ToString(), out vv); |
| | | sFunc.status.Add(new SceneFunctionStatus() { key = attr.key, value = Convert.ToInt32(vv).ToString() }); |
| | | } |
| | | else |
| | | { |
| | | sFunc.status.Add(new SceneFunctionStatus() { key = attr.key, value = attr.curValue.ToString() }); |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | sFunc.sid = this.sid; |
| | | return sFunc; |
| | | } |
| | | |
| | |
| | | |
| | | var acd = new AlinkControlData(); |
| | | acd.sid = sid; |
| | | var aca = new AlinkControlAttributes(); |
| | | foreach (var dic in commandDictionary) |
| | | { |
| | | var aca = new AlinkControlAttributes(); |
| | | aca.key = dic.Key; |
| | | aca.value = dic.Value; |
| | | acd.status.Add(aca); |
| | |
| | | ApiAlinkControlActionObj aaao = new ApiAlinkControlActionObj(); |
| | | aaao.deviceId = this.deviceId; |
| | | aaao.spk = this.spk; |
| | | aaao.bus = this.bus; |
| | | foreach (var kv in keyValues) |
| | | { |
| | | aaao.attributes.Add(new AlinkControlAttributes() |
| | |
| | | /// 功能属性 |
| | | /// 属性字段解析:attri :属性内容,value 属性的值,max 最大值 min 最小值 |
| | | /// </summary> |
| | | [System.Serializable] |
| | | public class FunctionAttributes |
| | | { |
| | | /// <summary> |
| | |
| | | /// <summary> |
| | | /// 最大值 |
| | | /// </summary> |
| | | public int max=100; |
| | | public int max = 100; |
| | | /// <summary> |
| | | /// 最小值 |
| | | /// </summary> |
| | | public int min=0; |
| | | public int min = 0; |
| | | /// <summary> |
| | | /// 数据类型 |
| | | /// </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> |
| | | /// 颜色 |
| | | /// </summary> |
| | | public const string Color = "color"; |
| | | public const string RGB = "rgb"; |
| | | /// <summary> |
| | | /// 渐变时间 |
| | | /// </summary> |
| | | public const string FadeTime = "fade_time"; |
| | | /// <summary> |
| | | /// 模式 |
| | | /// </summary> |
| | |
| | | /// </summary> |
| | | public const string FanSpeed = "fan"; |
| | | /// <summary> |
| | | /// 温度 |
| | | /// 设置温度 |
| | | /// </summary> |
| | | public const string Temp = "temperature"; |
| | | public const string SetTemp = "set_temp"; |
| | | /// <summary> |
| | | /// 延时 |
| | | /// </summary> |
| | |
| | | /// 百分比 |
| | | /// </summary> |
| | | public const string Percent = "percent"; |
| | | /// <summary> |
| | | /// 室内温度 |
| | | /// </summary> |
| | | public const string IndoorTemp = "room_temp"; |
| | | /// <summary> |
| | | /// value |
| | | /// </summary> |
| | | public const string Value = "value"; |
| | | } |
| | | /// <summary> |
| | | /// 设备功能oid |
| | |
| | | return Convert.ToByte(addresses.Substring(2, 2), 16); |
| | | } |
| | | } |
| | | public byte loopId; |
| | | public byte LoopId |
| | | { |
| | | get |
| | | { |
| | | return Convert.ToByte(loopId, 16); |
| | | } |
| | | } |
| | | |
| | | public string loopId; |
| | | } |
| | | |
| | | public static class SPK |
| | |
| | | /// <summary> |
| | | /// 家电、插座 |
| | | /// </summary> |
| | | public const string ElectricSocket = "electric.socket ";
|
| | | public const string ElectricSocket = "electrical.socket";
|
| | | /// <summary> |
| | | /// 家电、电视 |
| | | /// </summary> |
| | | public const string ElectricTV = "electric.tv";
|
| | | public const string ElectricTV = "electrical.tv";
|
| | | /// <summary> |
| | | /// 家电、风扇 |
| | | /// </summary> |
| | | public const string ElectricFan = "electric.fan"; |
| | | public const string ElectricFan = "electrical.fan"; |
| | | } |
| | | |
| | | } |
| | | } |