| | |
| | | using System; |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using Newtonsoft.Json.Linq; |
| | | using Shared; |
| | | |
| | | namespace HDL_ON.Entity |
| | | { |
| | | public class AC : Function |
| | | public class AC |
| | | { |
| | | /* |
| | | * 空调:trait: [switch, mode, fan, temperature, swing, lock]
|
| | | * 属性 描述
|
| | | * on_off on/off
|
| | | * mode mode: auto, cool, heat, dry, fan
|
| | | * fan high, medium, low, auto
|
| | | * temperature up,down,value
|
| | | * swing up/down/left/right
|
| | | * lock boolean (Lock锁定控制) |
| | | */ |
| | | public AC() |
| | | { |
| | | } |
| | | /// <summary> |
| | | /// 当前温度模式 |
| | | /// 0:摄氏度 |
| | | /// 1:华氏度 |
| | | /// 当前温度模式字符 |
| | | /// </summary> |
| | | [Newtonsoft.Json.JsonIgnore] |
| | | public int curTempType = 0; |
| | | public string GetTempUnitString(Function function) |
| | | { |
| | | var tt = function.GetAttrState(FunctionAttributeKey.TempType); |
| | | if (tt == "0") |
| | | { |
| | | return "°C"; |
| | | } |
| | | else |
| | | { |
| | | return tt; |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 当前空调模式 |
| | | /// 获取温度单位bus标识 |
| | | /// </summary> |
| | | [Newtonsoft.Json.JsonIgnore] |
| | | public string curMode = "cool"; |
| | | /// <param name="function"></param> |
| | | /// <returns></returns> |
| | | public int GetTempUintIndex(Function function) |
| | | { |
| | | var tt = function.GetAttrState(FunctionAttributeKey.TempType); |
| | | if(tt == "°F") |
| | | { |
| | | return 1; |
| | | } |
| | | else |
| | | { |
| | | return 0; |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 根据bus标识设置温度单位 |
| | | /// </summary> |
| | | /// <param name="function"></param> |
| | | /// <returns></returns> |
| | | public void SetTempUint(Function function,int index) |
| | | { |
| | | if (index == 0) |
| | | { |
| | | function.SetAttrState(FunctionAttributeKey.TempType, "°C"); |
| | | } |
| | | else |
| | | { |
| | | function.SetAttrState(FunctionAttributeKey.TempType, "°F"); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 当前模式索引 |
| | | /// bus控制命令使用 |
| | | /// </summary> |
| | | public byte curModeIndex |
| | | public byte GetModeIndex(Function function) |
| | | { |
| | | get |
| | | var value = function.GetAttrState(FunctionAttributeKey.Mode); |
| | | byte index = 0; |
| | | switch (value) |
| | | { |
| | | try |
| | | { |
| | | byte index = 0; |
| | | switch (curMode) |
| | | { |
| | | case "auto": |
| | | index = 3; |
| | | break; |
| | | case "cool": |
| | | index = 0; |
| | | break; |
| | | case "heat": |
| | | index = 1; |
| | | break; |
| | | case "dry": |
| | | index = 4; |
| | | break; |
| | | case "fan": |
| | | index = 2; |
| | | break; |
| | | default: |
| | | index = 0; |
| | | break; |
| | | } |
| | | return index; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | MainPage.Log($"get curModeIndex error : {ex.Message}"); |
| | | return 0; |
| | | } |
| | | case "auto": |
| | | index = 3; |
| | | break; |
| | | case "cool": |
| | | index = 0; |
| | | break; |
| | | case "heat": |
| | | index = 1; |
| | | break; |
| | | case "dry": |
| | | index = 4; |
| | | break; |
| | | case "fan": |
| | | index = 2; |
| | | break; |
| | | default: |
| | | index = 0; |
| | | break; |
| | | } |
| | | set |
| | | { |
| | | switch (value) |
| | | { |
| | | case 0: |
| | | curMode = "cool"; |
| | | break; |
| | | case 1: |
| | | curMode = "heat"; |
| | | break; |
| | | case 2: |
| | | curMode = "fan"; |
| | | break; |
| | | case 3: |
| | | curMode = "auto"; |
| | | break; |
| | | case 4: |
| | | curMode = "dry"; |
| | | break; |
| | | default: |
| | | curMode = "cool"; |
| | | break; |
| | | |
| | | } |
| | | } |
| | | return index; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 设置bus协议标记设置a协议数据 |
| | | /// </summary> |
| | | public void SetMode(int index , Function function) |
| | | { |
| | | string value = "auto"; |
| | | switch (index) |
| | | { |
| | | case 3: |
| | | value = "auto"; |
| | | break; |
| | | case 0: |
| | | value = "cool"; |
| | | break; |
| | | case 1: |
| | | value = "heat"; |
| | | break; |
| | | case 4: |
| | | value = "dry"; |
| | | break; |
| | | case 2: |
| | | value = "fan"; |
| | | break; |
| | | } |
| | | function.SetAttrState(FunctionAttributeKey.Mode, value); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 当前风速索引 |
| | | /// bus控制命令使用 |
| | | /// </summary> |
| | | [Newtonsoft.Json.JsonIgnore] |
| | | public byte curFanIndex |
| | | public byte GetFanIndex(Function function) |
| | | { |
| | | get |
| | | var value = function.GetAttrState(FunctionAttributeKey.FanSpeed); |
| | | byte index = 0; |
| | | switch (value) |
| | | { |
| | | try |
| | | { |
| | | byte index = 0; |
| | | switch (curFan) |
| | | { |
| | | case "high": |
| | | index = 1; |
| | | break; |
| | | case "medium": |
| | | index = 2; |
| | | break; |
| | | case "low": |
| | | index = 3; |
| | | break; |
| | | case "auto": |
| | | index = 0; |
| | | break; |
| | | default: |
| | | index = 0; |
| | | break; |
| | | } |
| | | return index; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | MainPage.Log($"get curFanIndex error : {ex.Message}"); |
| | | return 0; |
| | | } |
| | | case "high": |
| | | index = 1; |
| | | break; |
| | | case "medium": |
| | | index = 2; |
| | | break; |
| | | case "low": |
| | | index = 3; |
| | | break; |
| | | case "auto": |
| | | index = 0; |
| | | break; |
| | | default: |
| | | index = 0; |
| | | break; |
| | | } |
| | | set |
| | | { |
| | | switch (value) |
| | | { |
| | | case 0: |
| | | curFan = "auto"; |
| | | break; |
| | | case 1: |
| | | curFan = "high"; |
| | | break; |
| | | case 2: |
| | | curFan = "medium"; |
| | | break; |
| | | case 3: |
| | | curFan = "low"; |
| | | break; |
| | | default: |
| | | curFan = "high"; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 空调模式 |
| | | /// </summary> |
| | | [Newtonsoft.Json.JsonIgnore] |
| | | public List<string> mode |
| | | { |
| | | get |
| | | { |
| | | try |
| | | { |
| | | //#if DEBUG |
| | | // return new List<string> { "cool", "heat", "dry", "fan", "auto"}; |
| | | //#endif |
| | | string b = ""; |
| | | dicPropert.TryGetValue("mode", out b); |
| | | if (b == "") |
| | | { |
| | | return new List<string> { "auto", "cool", "heat", "dry", "fan" }; |
| | | } |
| | | return new List<string>(b.Split(",")); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | MainPage.Log($"ac get mode error : {ex.Message}"); |
| | | return new List<string> { "auto", "cool", "heat", "dry", "fan" }; |
| | | } |
| | | } |
| | | set |
| | | { |
| | | try |
| | | { |
| | | dicPropert["mode"] = value.ToString(); |
| | | } |
| | | catch |
| | | { |
| | | MainPage.Log("mode 数据刷新失败."); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 当前空调风速 |
| | | /// </summary> |
| | | [Newtonsoft.Json.JsonIgnore] |
| | | public string curFan = "high"; |
| | | |
| | | /// <summary> |
| | | /// 空调风速模式 |
| | | /// </summary> |
| | | [Newtonsoft.Json.JsonIgnore] |
| | | public List<string> fan |
| | | { |
| | | get |
| | | { |
| | | try |
| | | { |
| | | //#if DEBUG |
| | | // return new List<string> { "high", "medium", "low", "auto" }; |
| | | //#endif |
| | | string b = ""; |
| | | dicPropert.TryGetValue("fan", out b); |
| | | if (b == "") |
| | | { |
| | | return new List<string> { "high", "medium", "low", "auto" }; |
| | | } |
| | | return new List<string>(b.Split(",")); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | MainPage.Log($"ac get fan error : {ex.Message}"); |
| | | return new List<string> { "high", "medium", "low", "auto" }; |
| | | } |
| | | } |
| | | return index; |
| | | } |
| | | /// <summary> |
| | | /// 当前空调温度 |
| | | /// 根据bus协议风速标记设置a协议标记 |
| | | /// </summary> |
| | | [Newtonsoft.Json.JsonIgnore] |
| | | public int curTemp = 20; |
| | | // temperature up, down, value |
| | | // swing up/down/left/right |
| | | [Newtonsoft.Json.JsonIgnore] |
| | | public string curSwting; |
| | | /// <summary> |
| | | /// 空调扫风模式 |
| | | /// </summary> |
| | | [Newtonsoft.Json.JsonIgnore] |
| | | public List<string> swting |
| | | public void SetFan(int index,Function function) |
| | | { |
| | | get |
| | | string value = "high"; |
| | | switch (index) |
| | | { |
| | | try |
| | | { |
| | | #if DEBUG |
| | | return new List<string> { "up", "down", "left", "right" }; |
| | | #endif |
| | | string b = ""; |
| | | dicPropert.TryGetValue("swting", out b); |
| | | if (b == "") |
| | | { |
| | | return new List<string> { "up", "down", "left", "right" }; |
| | | } |
| | | return new List<string>(b.Split(",")); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | MainPage.Log($"ac get swting error : {ex.Message}"); |
| | | return new List<string> { "up", "down", "left", "right" }; |
| | | } |
| | | case 1: |
| | | value = "high"; |
| | | break; |
| | | case 2: |
| | | value = "medium"; |
| | | break; |
| | | case 3: |
| | | value = "low"; |
| | | break; |
| | | case 0: |
| | | value = "auto"; |
| | | break; |
| | | } |
| | | function.SetAttrState(FunctionAttributeKey.FanSpeed, value); |
| | | } |
| | | /// <summary> |
| | | /// 室内温度 |
| | | /// </summary> |
| | | [Newtonsoft.Json.JsonIgnore] |
| | | public int indoorTemp = 20; |
| | | |
| | | /// <summary> |
| | | /// 当前模式的icon路径 |
| | | /// </summary> |
| | | [Newtonsoft.Json.JsonIgnore] |
| | | public string curModeImage |
| | | /// <param name="lightingIcon">获取的图标类型,默认是点亮</param> |
| | | /// <returns></returns> |
| | | public string GetModeIconPath(string modeValue , bool lightingIcon = true) |
| | | { |
| | | get |
| | | var imagePath = "FunctionIcon/AC/CoolIcon.png"; |
| | | if (lightingIcon) |
| | | { |
| | | try |
| | | switch (modeValue) |
| | | { |
| | | var imagePath = "FunctionIcon/AC/CoolIcon.png"; |
| | | switch (curMode) |
| | | { |
| | | case "auto": |
| | | imagePath = "FunctionIcon/AC/AutoIcon.png"; |
| | | break; |
| | | case "cool": |
| | | imagePath = "FunctionIcon/AC/CoolIcon.png"; |
| | | break; |
| | | case "heat": |
| | | imagePath = "FunctionIcon/AC/HeatingIcon.png"; |
| | | break; |
| | | case "dry": |
| | | imagePath = "FunctionIcon/AC/DehumidificationIcon.png"; |
| | | break; |
| | | case "fan": |
| | | imagePath = "FunctionIcon/AC/AirSupplyIcon.png"; |
| | | break; |
| | | default: |
| | | imagePath = "FunctionIcon/AC/CoolIcon.png"; |
| | | break; |
| | | } |
| | | return imagePath; |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | MainPage.Log($"ac ge curModeImage error : {ex.Message}"); |
| | | return "FunctionIcon/AC/CoolIcon.png"; |
| | | case "auto": |
| | | imagePath = "FunctionIcon/AC/AutoIcon.png"; |
| | | break; |
| | | case "cool": |
| | | imagePath = "FunctionIcon/AC/CoolIcon.png"; |
| | | break; |
| | | case "heat": |
| | | imagePath = "FunctionIcon/AC/HeatingIcon.png"; |
| | | break; |
| | | case "dry": |
| | | imagePath = "FunctionIcon/AC/DehumidificationIcon.png"; |
| | | break; |
| | | case "fan": |
| | | imagePath = "FunctionIcon/AC/AirSupplyIcon.png"; |
| | | break; |
| | | default: |
| | | imagePath = "FunctionIcon/AC/CoolIcon.png"; |
| | | break; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | imagePath = "FunctionIcon/AC/AutoIconGray.png"; |
| | | switch (modeValue) |
| | | { |
| | | case "auto": |
| | | imagePath = "FunctionIcon/AC/AutoIconGray.png"; |
| | | break; |
| | | case "cool": |
| | | imagePath = "FunctionIcon/AC/CoolIconGray.png"; |
| | | break; |
| | | case "heat": |
| | | imagePath = "FunctionIcon/AC/HeatingIconGray.png"; |
| | | break; |
| | | case "dry": |
| | | imagePath = "FunctionIcon/AC/DehumidificationIconGray.png"; |
| | | break; |
| | | case "fan": |
| | | imagePath = "FunctionIcon/AC/AirSupplyIconGray.png"; |
| | | break; |
| | | } |
| | | } |
| | | return imagePath; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 当前模式的icon路径 |
| | | /// </summary> |
| | | /// <param name="lightingIcon">获取的图标类型,默认是点亮</param> |
| | | /// <returns></returns> |
| | | public string GetSwingIconPath(string swingValue,bool lightingIcon = true) |
| | | { |
| | | var imagePath = "FunctionIcon/AC/SweepIconNullOn.png"; |
| | | if (lightingIcon) |
| | | { |
| | | switch (swingValue) |
| | | { |
| | | case "up_down": |
| | | imagePath = "FunctionIcon/AC/SweepIconUDOn.png"; |
| | | break; |
| | | case "left_right": |
| | | imagePath = "FunctionIcon/AC/SweepIconLROn.png"; |
| | | break; |
| | | case "stop": |
| | | imagePath = "FunctionIcon/AC/SweepIconNullOn.png"; |
| | | break; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | imagePath = "FunctionIcon/AC/SweepIconNull.png"; |
| | | switch (swingValue) |
| | | { |
| | | case "up_down": |
| | | imagePath = "FunctionIcon/AC/SweepIconUD.png"; |
| | | break; |
| | | case "left_right": |
| | | imagePath = "FunctionIcon/AC/SweepIconLR.png"; |
| | | break; |
| | | case "stop": |
| | | imagePath = "FunctionIcon/AC/SweepIconNull.png"; |
| | | break; |
| | | } |
| | | } |
| | | return imagePath; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 当前风速的icon路径 |
| | | /// </summary> |
| | | [Newtonsoft.Json.JsonIgnore] |
| | | public string curFanImage |
| | | /// <param name="lightingIcon">获取的图标类型,默认是点亮</param> |
| | | /// <returns></returns> |
| | | public string GetFanIconPath(string modeValue, bool lightingIcon = true) |
| | | { |
| | | get |
| | | var imagePath = "FunctionIcon/AC/WindHighIcon.png"; |
| | | if (lightingIcon) |
| | | { |
| | | try |
| | | switch (modeValue) |
| | | { |
| | | var imagePath = "FunctionIcon/AC/WindHighIcon.png"; |
| | | switch (curFan) |
| | | { |
| | | case "high": |
| | | imagePath = "FunctionIcon/AC/WindHighIcon.png"; |
| | | break; |
| | | case "medium": |
| | | imagePath = "FunctionIcon/AC/WindMediumIcon.png"; |
| | | break; |
| | | case "low": |
| | | imagePath = "FunctionIcon/AC/WindLowIcon.png"; |
| | | break; |
| | | case "auto": |
| | | imagePath = "FunctionIcon/AC/AutoIcon.png"; |
| | | break; |
| | | default: |
| | | imagePath = "FunctionIcon/AC/WindHighIcon.png"; |
| | | break; |
| | | } |
| | | return imagePath; |
| | | }catch (Exception ex) |
| | | { |
| | | MainPage.Log($"ac get curFanImage error : {ex.Message}"); |
| | | return "FunctionIcon/AC/WindHighIcon.png"; |
| | | case "high": |
| | | imagePath = "FunctionIcon/AC/WindHighIcon.png"; |
| | | break; |
| | | case "medium": |
| | | imagePath = "FunctionIcon/AC/WindMediumIcon.png"; |
| | | break; |
| | | case "low": |
| | | imagePath = "FunctionIcon/AC/WindLowIcon.png"; |
| | | break; |
| | | case "auto": |
| | | imagePath = "FunctionIcon/AC/AutoIcon.png"; |
| | | break; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | switch (modeValue) |
| | | { |
| | | case "high": |
| | | imagePath = "FunctionIcon/AC/WindHighIconGray.png"; |
| | | break; |
| | | case "medium": |
| | | imagePath = "FunctionIcon/AC/WindMediumIconGray.png"; |
| | | break; |
| | | case "low": |
| | | imagePath = "FunctionIcon/AC/WindLowIconGray.png"; |
| | | break; |
| | | case "auto": |
| | | imagePath = "FunctionIcon/AC/AutoIconGray.png"; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | return imagePath; |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 拼接、获取A协议操作数据 |
| | | /// 获取模式属性文本 |
| | | /// </summary> |
| | | public override JObject GetSendJObject(CommandType_A command) |
| | | /// <returns></returns> |
| | | public string GetModeAttrText(string value) |
| | | { |
| | | var sendJob = new JObject(); |
| | | if (command == CommandType_A.write) |
| | | string text = ""; |
| | | switch (value) |
| | | { |
| | | sendJob = new JObject { { "Namespace", vendor_code }, { "Command", command.ToString() }, { "Type", "device" } }; |
| | | JObject data = new JObject { { "openLevel", dicPropert["openLevel"] }, { "sid", sid } }; |
| | | sendJob.Add("objects", data); |
| | | #region 模式 |
| | | 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; |
| | | #endregion |
| | | } |
| | | else if (command == CommandType_A.read) |
| | | return text; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取扫风模式属性文本 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public string GetSwingAttrText(string value) |
| | | { |
| | | string text = ""; |
| | | switch (value) |
| | | { |
| | | sendJob = new JObject { { "Namespace", vendor_code }, { "Command", command.ToString() }, { "Type", "device" } }; |
| | | var data = new JObject { { "sid", sid } }; |
| | | sendJob.Add("objects", data); |
| | | #region 模式 |
| | | case "up_down": |
| | | text = Language.StringByID(StringId.Swing_Up_Down); |
| | | break; |
| | | case "left_right": |
| | | text = Language.StringByID(StringId.Swing_Left_Right); |
| | | break; |
| | | case "stop": |
| | | text = Language.StringByID(StringId.tingzhi); |
| | | break; |
| | | #endregion |
| | | } |
| | | return sendJob; |
| | | return text; |
| | | } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 获取风速属性文本 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public string GetFanAttrText(string value) |
| | | { |
| | | string text = ""; |
| | | switch (value) |
| | | { |
| | | #region 风速 |
| | | 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; |
| | | #endregion |
| | | } |
| | | return text; |
| | | } |
| | | |
| | | } |
| | | } |