From 351bdda734832d821a9764b0cde8be5d83c4ec50 Mon Sep 17 00:00:00 2001
From: wjc <1243177876@qq.com>
Date: 星期四, 01 十二月 2022 09:56:25 +0800
Subject: [PATCH] 2022年12月01日09:56:23
---
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceCurtainLogic.cs | 954 +++++++++++++++++++++++++++++-----------------------------
1 files changed, 477 insertions(+), 477 deletions(-)
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceCurtainLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceCurtainLogic.cs
old mode 100755
new mode 100644
index a3af533..bf9497a
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceCurtainLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceCurtainLogic.cs
@@ -1,477 +1,477 @@
-锘縰sing Newtonsoft.Json;
-using Newtonsoft.Json.Linq;
-using Shared.Phone.TemplateData;
-using System;
-using System.Collections.Generic;
-using System.Text;
-using System.Threading.Tasks;
-using ZigBee.Device;
-
-namespace Shared.Phone.UserCenter
-{
- /// <summary>
- /// 绐楀笜鐨勯�昏緫
- /// </summary>
- public class HdlDeviceCurtainLogic
- {
- #region 鈻� 鍙橀噺澹版槑___________________________
-
- /// <summary>
- /// 绐楀笜鐨勯�昏緫
- /// </summary>
- private static HdlDeviceCurtainLogic m_Current = null;
- /// <summary>
- /// 绐楀笜鐨勯�昏緫
- /// </summary>
- public static HdlDeviceCurtainLogic Current
- {
- get
- {
- if (m_Current == null)
- {
- m_Current = new HdlDeviceCurtainLogic();
- }
- return m_Current;
- }
- }
-
- #endregion
-
- #region 鈻� 鎵嬫媺鎺у埗___________________________
-
- /// <summary>
- /// 璁剧疆鎵嬫媺鎺у埗鐘舵�佸�� 鈽嗏槅鈽嗏槅鈽�
- /// </summary>
- /// <param name="device">绐楀笜瀵硅薄</param>
- /// <param name="bolStatu">鎵嬫媺鎺у埗鐘舵�佸��</param>
- /// <returns></returns>
- public bool SetHandPullControl(CommonDevice device, bool bolStatu)
- {
- //濡傛灉鏄櫄鎷熶綇瀹�
- if (Common.Config.Instance.Home.IsVirtually == true)
- {
- //娣诲姞缂撳瓨
- TemplateDeviceDataLogic.Current.SetCurtainHandPullControl(device, bolStatu, null);
- return true;
- }
- //鑾峰彇鍙戦�佺殑鍛戒护瀛楃
- var sendData = this.GetHandPullControlText(device.DeviceAddr, device.DeviceEpoint, bolStatu);
- //鍙戦�佺粰缃戝叧
- var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway(device, "SetWritableValue", sendData, "SetWritableValue_Respon");
- if (result.ErrorMsg != null)
- {
- this.ShowTipMsg(result.ErrorMsg);
- return false;
- }
- if (result.ErrorMsgDiv == 0)
- {
- //鍒囨崲鎵嬫媺鎺у埗澶辫触
- string msg = Language.StringByID(R.MyInternationalizationString.uChangeHandPullControlFail);
- //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
- msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
- this.ShowTipMsg(msg);
- return false;
- }
-
- var data = JsonConvert.DeserializeObject<CommonDevice.SetWritableValueResponData>(result.ReceiptData);
- if (data.Status != 0)
- {
- //鍒囨崲鎵嬫媺鎺у埗澶辫触
- string msg = Language.StringByID(R.MyInternationalizationString.uChangeHandPullControlFail);
- this.ShowTipMsg(msg);
- return false;
- }
- //娣诲姞缂撳瓨
- TemplateDeviceDataLogic.Current.SetCurtainHandPullControl(device, bolStatu, result.JsonData[0]);
-
- return true;
- }
-
- /// <summary>
- /// 鑾峰彇鏇存敼鎵嬫媺鎺у埗鐘舵�佺殑瀛楃涓插懡浠� 鈽嗏槅鈽嗏槅鈽�
- /// </summary>
- /// <param name="DeviceAddr">DeviceAddr</param>
- /// <param name="DeviceEpoint">DeviceEpoint</param>
- /// <param name="bolStatu">鎵嬫媺鎺у埗鐘舵�佸��</param>
- /// <returns></returns>
- public string GetHandPullControlText(string DeviceAddr, int DeviceEpoint, bool bolStatu)
- {
- int bit2 = bolStatu == true ? 1 : 0;
- int attributeData = bit2 * 4;
- var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", DeviceEpoint }, { "Cluster_ID", 258 }, { "Command", 120 } };
- var data = new JObject { { "Undivided", 0 }, { "AttributeId", 23 }, { "AttributeDataType", 24 }, { "AttributeData", attributeData } };
- jObject.Add("Data", data);
- return jObject.ToString();
- }
-
- #endregion
-
- #region 鈻� 绐楀笜鏂瑰悜閰嶇疆_______________________
-
- /// <summary>
- /// 閰嶇疆绐楀笜鐨勬柟鍚�
- /// </summary>
- /// <param name="rollershade">绐楀笜瀵硅薄</param>
- /// <param name="bolStatu">false:鐢垫満鏂瑰悜姝e悜锛泃rue:鐢垫満鏂瑰悜鍙嶅悜</param>
- /// <returns></returns>
- public bool SetCurtainDirection(CommonDevice rollershade, bool bolStatu)
- {
- var result = this.SetCurtainDirectionAsync(rollershade, bolStatu);
- //妫�娴嬬綉鍏宠繑鍥炵殑鍏遍�氶敊璇姸鎬佺爜
- string error = HdlCheckLogic.Current.CheckCommonErrorCode(result);
- if (error != null)
- {
- this.ShowTipMsg(error);
- return false;
- }
- if (result == null || result.setWritableValueResponData == null)
- {
- //绐楀笜鏂瑰悜璁剧疆澶辫触
- string msg = Language.StringByID(R.MyInternationalizationString.uSetCurtainDirectionFail);
- //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
- msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
- this.ShowTipMsg(msg);
- return false;
- }
- if (result.setWritableValueResponData.Status != 0)
- {
- //绐楀笜鏂瑰悜璁剧疆澶辫触
- string msg = Language.StringByID(R.MyInternationalizationString.uSetCurtainDirectionFail);
- this.ShowTipMsg(msg);
- return false;
- }
-
- return true;
- }
-
- /// <summary>
- /// 璁剧疆寮�鍚堝笜鐢垫満鏂瑰悜
- /// <para>isDirectionReversed (false:鐢垫満鏂瑰悜姝e悜锛泃rue:鐢垫満鏂瑰悜鍙嶅悜锛�)</para> .
- /// </summary>
- private CommonDevice.SetWritableValueResponAllData SetCurtainDirectionAsync(CommonDevice device, bool isDirectionReversed)
- {
- //濡傛灉褰撳墠鏄櫄鎷熶綇瀹�
- if (Common.Config.Instance.Home.IsVirtually == true)
- {
- return TemplateDeviceDataLogic.Current.SetCurtainDirection(device, isDirectionReversed, null);
- }
- //鑾峰彇缂栬緫绐楀笜鏂瑰悜鐨勫懡浠ゅ瓧绗�
- var sendData = this.GetCurtainDirectionCommadText(device.DeviceAddr, device.DeviceEpoint, isDirectionReversed);
- var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway(device, "SetWritableValue", sendData, "SetWritableValue_Respon");
- if (result.ErrorMsg != null || result.ErrorMsgDiv == 0)
- {
- return null;
- }
-
- //娣诲姞缂撳瓨
- TemplateDeviceDataLogic.Current.SetCurtainDirection(device, isDirectionReversed, result.JsonData[0]);
-
- var tempData = JsonConvert.DeserializeObject<CommonDevice.SetWritableValueResponData>(result.ReceiptData);
- return new CommonDevice.SetWritableValueResponAllData { setWritableValueResponData = tempData };
- }
-
- /// <summary>
- /// 鑾峰彇缂栬緫绐楀笜鏂瑰悜鐨勫懡浠ゅ瓧绗�
- /// </summary>
- /// <param name="DeviceAddr"></param>
- /// <param name="DeviceEpoint"></param>
- /// <param name="isDirectionReversed"></param>
- /// <returns></returns>
- public string GetCurtainDirectionCommadText(string DeviceAddr,int DeviceEpoint, bool isDirectionReversed)
- {
- int bit0 = isDirectionReversed == true ? 1 : 0;
- int attributeData = bit0 * 1;
- var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", DeviceEpoint }, { "Cluster_ID", 258 }, { "Command", 120 } };
- var data = new JObject { { "Undivided", 0 }, { "AttributeId", 23 }, { "AttributeDataType", 24 }, { "AttributeData", attributeData } };
- jObject.Add("Data", data);
-
- return jObject.ToString();
- }
-
- #endregion
-
- #region 鈻� 寮�鍚堝笜闄愪綅閰嶇疆_____________________
-
- /// <summary>
- /// 璁剧疆寮�鍚堝笜闄愪綅
- /// </summary>
- /// <param name="rollershade"></param>
- /// <param name="upLimit">寮�闄愪綅</param>
- /// <param name="downLimit">鍚堥檺浣�</param>
- /// <param name="curtainLength">瀵艰建闀垮害(杩欎釜鏄粰铏氭嫙璁惧鐢ㄧ殑)</param>
- /// <returns></returns>
- public bool SetAutoOpenCurtainLimitPoint(CommonDevice rollershade, int upLimit, int downLimit, int curtainLength)
- {
- //濡傛灉褰撳墠鏄櫄鎷熶綇瀹�
- if (Common.Config.Instance.Home.IsVirtually == true)
- {
- return TemplateData.TemplateDeviceDataLogic.Current.SetCurtainLimitPoint(rollershade, upLimit, downLimit, curtainLength, null);
- }
- //鑾峰彇缂栬緫寮�鍚堝笜闄愪綅鐨勫懡浠ゅ瓧绗�
- var sendData = this.GetAutoOpenCurtainLimitPointCommandText(rollershade.DeviceAddr, rollershade.DeviceEpoint, upLimit, downLimit);
- var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway(rollershade, "SetWritableValue", sendData, "SetWritableValue_Respon");
- if (result.ErrorMsg != null || result.ErrorMsgDiv == 0)
- {
- //璁剧疆绐楀笜闄愪綅鐐瑰け璐�
- string msg = Language.StringByID(R.MyInternationalizationString.uCommitCurtainLimitFail);
- //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
- msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
- this.ShowTipMsg(msg);
- return false;
- }
- var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.SetWritableValueResponData>(result.ReceiptData);
- if (tempData.Status != 0)
- {
- //璁剧疆绐楀笜闄愪綅鐐瑰け璐�
- string msg = Language.StringByID(R.MyInternationalizationString.uCommitCurtainLimitFail);
- this.ShowTipMsg(msg);
- return false;
- }
-
- //娣诲姞缂撳瓨
- TemplateDeviceDataLogic.Current.SetCurtainLimitPoint(rollershade, upLimit, downLimit, curtainLength, result.JsonData[0]);
-
- return true;
- }
-
-
- /// <summary>
- /// 鑾峰彇缂栬緫寮�鍚堝笜闄愪綅鐨勫懡浠ゅ瓧绗�
- /// </summary>
- /// <param name="DeviceAddr"></param>
- /// <param name="DeviceEpoint"></param>
- /// <param name="upLimit"></param>
- /// <param name="downLimit"></param>
- /// <returns></returns>
- public string GetAutoOpenCurtainLimitPointCommandText(string DeviceAddr, int DeviceEpoint, int upLimit, int downLimit)
- {
- //杩欎釜鏄紑鍚堝笜 "2,0x00ff,0x00ff"鏍煎紡 鍚堥檺浣嶅湪鍓嶏紝寮�闄愪綅鍦ㄥ悗
- string convertData = "\"2,0x" + Convert.ToString(downLimit, 16).PadLeft(4, '0');
- convertData += ",0x" + Convert.ToString(upLimit, 16).PadLeft(4, '0') + "\"";
- //鐒跺悗灏嗗畠浠浆涓篈SK鐮佹暟鍊�,鐒跺悗鍐嶈浆涓�16杩涘埗
- //鎬昏闀垮害涓�17(杩欓噷鏄�16杩涘埗)
- string sendData = "11";
- foreach (char c in convertData)
- {
- sendData += Convert.ToString((int)c, 16).PadLeft(2, '0');
- }
-
- var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", DeviceEpoint }, { "Cluster_ID", 258 }, { "Command", 120 } };
- var data = new JObject { { "Undivided", 0 }, { "AttributeId", 24 }, { "AttributeDataType", 65 }, { "AttributeData", sendData } };
- jObject.Add("Data", data);
-
- return jObject.ToString();
- }
-
- #endregion
-
- #region 鈻� 绐楀笜闄愪綅閰嶇疆_______________________
-
- /// <summary>
- /// 鎵ц纭鍙婅鐩栫獥甯橀檺浣嶇偣
- /// </summary>
- /// <param name="rollershade">绐楀笜瀵硅薄</param>
- /// <param name="limiType">纭鍙婅鐩栦笂闄愪綅杩樻槸涓嬮檺浣�</param>
- /// <param name="upLimit">涓婇檺浣嶇殑鍊�(闀垮害鍊�,涓嶆槸鐧惧垎姣�)</param>
- /// <param name="downLimit">涓嬮檺浣嶇殑鍊�(闀垮害鍊�,涓嶆槸鐧惧垎姣�)</param>
- /// <returns></returns>
- public async Task<bool> CommitCurtainLimitPoint(Rollershade rollershade, Rollershade.CurtainPrivateInstalledLimi limiType, int upLimit, int downLimit)
- {
- CommonDevice.SetWritableValueResponAllData result = null;
- if (upLimit == -1 && downLimit == -1)
- {
- //杩欎釜鏄嵎甯�
- result = await rollershade.SetCurtainInstalledLimitAsync(limiType);
- }
- else
- {
- //杩欎釜鏄紑鍚堝笜 "2,0x00ff,0x00ff"鏍煎紡 鍚堥檺浣嶅湪鍓嶏紝寮�闄愪綅鍦ㄥ悗
- string convertData = "\"2,0x" + Convert.ToString(downLimit, 16).PadLeft(4, '0');
- convertData += ",0x" + Convert.ToString(upLimit, 16).PadLeft(4, '0') + "\"";
- //鐒跺悗灏嗗畠浠浆涓篈SK鐮佹暟鍊�,鐒跺悗鍐嶈浆涓�16杩涘埗
- //鎬昏闀垮害涓�17(杩欓噷鏄�16杩涘埗)
- string sendData = "11";
- foreach (char c in convertData)
- {
- sendData += Convert.ToString((int)c, 16).PadLeft(2, '0');
- }
- //result = await HdlDeviceAttributeLogic.Current.WriteDeviceAttribute(rollershade, 258, 24, 65, sendData);
- }
- //妫�娴嬬綉鍏宠繑鍥炵殑鍏遍�氶敊璇姸鎬佺爜
- string error = HdlCheckLogic.Current.CheckCommonErrorCode(result);
- if (error != null)
- {
- this.ShowTipMsg(error);
- return false;
- }
- if (result == null || result.setWritableValueResponData == null)
- {
- //璁剧疆绐楀笜闄愪綅鐐瑰け璐�
- string msg = Language.StringByID(R.MyInternationalizationString.uCommitCurtainLimitFail);
- //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
- msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
- this.ShowTipMsg(msg);
- return false;
- }
- if (result.setWritableValueResponData.Status != 0)
- {
- //璁剧疆绐楀笜闄愪綅鐐瑰け璐�
- string msg = Language.StringByID(R.MyInternationalizationString.uCommitCurtainLimitFail);
- this.ShowTipMsg(msg);
- return false;
- }
-
- return true;
- }
-
- /// <summary>
- /// 鍒犻櫎闄愪綅鐐�
- /// </summary>
- /// <param name="rollershade">绐楀笜瀵硅薄</param>
- /// <param name="limiType">鍒犻櫎涓婇檺浣嶈繕鏄垹闄や笅闄愪綅</param>
- /// <returns></returns>
- public async Task<bool> DeleteCurtainLimitPoint(Rollershade rollershade, Rollershade.LimiType limiType)
- {
- var result = await rollershade.DeleteCurtainLimitsAsync(limiType);
- //妫�娴嬬綉鍏宠繑鍥炵殑鍏遍�氶敊璇姸鎬佺爜
- string error = HdlCheckLogic.Current.CheckCommonErrorCode(result);
- if (error != null)
- {
- this.ShowTipMsg(error);
- return false;
- }
- if (result == null || result.setWritableValueResponData == null)
- {
- //閲嶇疆绐楀笜闄愪綅鐐瑰け璐�
- string msg = Language.StringByID(R.MyInternationalizationString.uDeleteCurtainLimitFail);
- //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
- msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
- this.ShowTipMsg(msg);
- return false;
- }
- if (result.setWritableValueResponData.Status != 0)
- {
- //閲嶇疆绐楀笜闄愪綅鐐瑰け璐�
- string msg = Language.StringByID(R.MyInternationalizationString.uDeleteCurtainLimitFail);
- this.ShowTipMsg(msg);
- return false;
- }
- return true;
- }
-
- #endregion
-
- #region 鈻� 鑾峰彇绐楀笜闄愪綅閰嶇疆___________________
-
- /// <summary>
- /// 鍙戦�佽幏鍙栫獥甯橀檺浣嶉厤缃殑鍛戒护
- /// </summary>
- /// <param name="rollershade">绐楀笜瀵硅薄</param>
- public void SetGetCurtainLimitSettionComand(Rollershade rollershade)
- {
- var jObject = new Newtonsoft.Json.Linq.JObject
- {
- { "DeviceAddr",rollershade.DeviceAddr },
- { "Epoint", rollershade.DeviceEpoint },
- { "Cluster_ID", (int)Cluster_ID.WindowCovering },
- { "Command", 108 }
- };
- var attriBute = new Newtonsoft.Json.Linq.JArray
- {
- new Newtonsoft.Json.Linq.JObject
- {
- //寮�鍚堝笜鏂瑰悜
- { "AttriButeId", (int)AttriButeId.WindowCoveringMode}
- },
- new Newtonsoft.Json.Linq.JObject
- {
- //寮�鍚堝笜鎬婚暱
- { "AttriButeId", (int)AttriButeId.WindowCoveringLength}
- },
- new Newtonsoft.Json.Linq.JObject
- {
- //寮�闄愪綅
- { "AttriButeId", (int)AttriButeId.InstalledOpenLimitLift}
- },
- new Newtonsoft.Json.Linq.JObject
- {
- //鍚堥檺浣�
- { "AttriButeId", (int)AttriButeId.InstalledClosedLimitLift}
- }
- };
- var data = new Newtonsoft.Json.Linq.JObject { { "AttriBute", attriBute } };
- jObject.Add("Data", data);
- rollershade.Gateway?.Send(("GetDeviceStatus"), jObject.ToString());
- }
-
- #endregion
-
- #region 鈻� 閲嶇疆绐楀笜___________________________
-
- /// <summary>
- /// 閲嶇疆绐楀笜
- /// </summary>
- /// <param name="rollershade">绐楀笜瀵硅薄</param>
- /// <returns></returns>
- public async Task<bool> RestoreCurtain(Rollershade rollershade)
- {
- var result = await rollershade.RestoreCurtainLimitAsync();
- //妫�娴嬬綉鍏宠繑鍥炵殑鍏遍�氶敊璇姸鎬佺爜
- string error = HdlCheckLogic.Current.CheckCommonErrorCode(result);
- if (error != null)
- {
- this.ShowTipMsg(error);
- return false;
- }
- if (result == null || result.setWritableValueResponData == null)
- {
- //閲嶇疆绐楀笜澶辫触
- string msg = Language.StringByID(R.MyInternationalizationString.uRestoreCurtainFail);
- //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
- msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
- this.ShowTipMsg(msg);
- return false;
- }
- if (result.setWritableValueResponData.Status != 0)
- {
- //閲嶇疆绐楀笜澶辫触
- string msg = Language.StringByID(R.MyInternationalizationString.uRestoreCurtainFail);
- this.ShowTipMsg(msg);
- return false;
- }
- return true;
- }
-
- #endregion
-
- #region 鈻� 涓�鑸柟娉昣__________________________
-
- /// <summary>
- /// 鏄剧ず閿欒淇℃伅绐楀彛
- /// </summary>
- /// <param name="msg"></param>
- private void ShowErrorMsg(string msg)
- {
- Application.RunOnMainThread(() =>
- {
- var contr = new ShowMsgControl(ShowMsgType.Error, msg);
- contr.Show();
- });
- }
-
- /// <summary>
- /// 鏄剧ずTip淇℃伅绐楀彛
- /// </summary>
- /// <param name="msg"></param>
- private void ShowTipMsg(string msg)
- {
- Application.RunOnMainThread(() =>
- {
- var contr = new ShowMsgControl(ShowMsgType.Tip, msg);
- contr.Show();
- });
- }
-
- #endregion
- }
-}
+锘縰sing Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using Shared.Phone.TemplateData;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Threading.Tasks;
+using ZigBee.Device;
+
+namespace Shared.Phone.UserCenter
+{
+ /// <summary>
+ /// 绐楀笜鐨勯�昏緫
+ /// </summary>
+ public class HdlDeviceCurtainLogic
+ {
+ #region 鈻� 鍙橀噺澹版槑___________________________
+
+ /// <summary>
+ /// 绐楀笜鐨勯�昏緫
+ /// </summary>
+ private static HdlDeviceCurtainLogic m_Current = null;
+ /// <summary>
+ /// 绐楀笜鐨勯�昏緫
+ /// </summary>
+ public static HdlDeviceCurtainLogic Current
+ {
+ get
+ {
+ if (m_Current == null)
+ {
+ m_Current = new HdlDeviceCurtainLogic();
+ }
+ return m_Current;
+ }
+ }
+
+ #endregion
+
+ #region 鈻� 鎵嬫媺鎺у埗___________________________
+
+ /// <summary>
+ /// 璁剧疆鎵嬫媺鎺у埗鐘舵�佸�� 鈽嗏槅鈽嗏槅鈽�
+ /// </summary>
+ /// <param name="device">绐楀笜瀵硅薄</param>
+ /// <param name="bolStatu">鎵嬫媺鎺у埗鐘舵�佸��</param>
+ /// <returns></returns>
+ public bool SetHandPullControl(CommonDevice device, bool bolStatu)
+ {
+ //濡傛灉鏄櫄鎷熶綇瀹�
+ if (Common.Config.Instance.Home.IsVirtually == true)
+ {
+ //娣诲姞缂撳瓨
+ TemplateDeviceDataLogic.Current.SetCurtainHandPullControl(device, bolStatu, null);
+ return true;
+ }
+ //鑾峰彇鍙戦�佺殑鍛戒护瀛楃
+ var sendData = this.GetHandPullControlText(device.DeviceAddr, device.DeviceEpoint, bolStatu);
+ //鍙戦�佺粰缃戝叧
+ var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway(device, "SetWritableValue", sendData, "SetWritableValue_Respon");
+ if (result.ErrorMsg != null)
+ {
+ this.ShowTipMsg(result.ErrorMsg);
+ return false;
+ }
+ if (result.ErrorMsgDiv == 0)
+ {
+ //鍒囨崲鎵嬫媺鎺у埗澶辫触
+ string msg = Language.StringByID(R.MyInternationalizationString.uChangeHandPullControlFail);
+ //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
+ msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
+ this.ShowTipMsg(msg);
+ return false;
+ }
+
+ var data = JsonConvert.DeserializeObject<CommonDevice.SetWritableValueResponData>(result.ReceiptData);
+ if (data.Status != 0)
+ {
+ //鍒囨崲鎵嬫媺鎺у埗澶辫触
+ string msg = Language.StringByID(R.MyInternationalizationString.uChangeHandPullControlFail);
+ this.ShowTipMsg(msg);
+ return false;
+ }
+ //娣诲姞缂撳瓨
+ TemplateDeviceDataLogic.Current.SetCurtainHandPullControl(device, bolStatu, result.JsonData[0]);
+
+ return true;
+ }
+
+ /// <summary>
+ /// 鑾峰彇鏇存敼鎵嬫媺鎺у埗鐘舵�佺殑瀛楃涓插懡浠� 鈽嗏槅鈽嗏槅鈽�
+ /// </summary>
+ /// <param name="DeviceAddr">DeviceAddr</param>
+ /// <param name="DeviceEpoint">DeviceEpoint</param>
+ /// <param name="bolStatu">鎵嬫媺鎺у埗鐘舵�佸��</param>
+ /// <returns></returns>
+ public string GetHandPullControlText(string DeviceAddr, int DeviceEpoint, bool bolStatu)
+ {
+ int bit2 = bolStatu == true ? 1 : 0;
+ int attributeData = bit2 * 4;
+ var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", DeviceEpoint }, { "Cluster_ID", 258 }, { "Command", 120 } };
+ var data = new JObject { { "Undivided", 0 }, { "AttributeId", 23 }, { "AttributeDataType", 24 }, { "AttributeData", attributeData } };
+ jObject.Add("Data", data);
+ return jObject.ToString();
+ }
+
+ #endregion
+
+ #region 鈻� 绐楀笜鏂瑰悜閰嶇疆_______________________
+
+ /// <summary>
+ /// 閰嶇疆绐楀笜鐨勬柟鍚�
+ /// </summary>
+ /// <param name="rollershade">绐楀笜瀵硅薄</param>
+ /// <param name="bolStatu">false:鐢垫満鏂瑰悜姝e悜锛泃rue:鐢垫満鏂瑰悜鍙嶅悜</param>
+ /// <returns></returns>
+ public bool SetCurtainDirection(CommonDevice rollershade, bool bolStatu)
+ {
+ var result = this.SetCurtainDirectionAsync(rollershade, bolStatu);
+ //妫�娴嬬綉鍏宠繑鍥炵殑鍏遍�氶敊璇姸鎬佺爜
+ string error = HdlCheckLogic.Current.CheckCommonErrorCode(result);
+ if (error != null)
+ {
+ this.ShowTipMsg(error);
+ return false;
+ }
+ if (result == null || result.setWritableValueResponData == null)
+ {
+ //绐楀笜鏂瑰悜璁剧疆澶辫触
+ string msg = Language.StringByID(R.MyInternationalizationString.uSetCurtainDirectionFail);
+ //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
+ msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
+ this.ShowTipMsg(msg);
+ return false;
+ }
+ if (result.setWritableValueResponData.Status != 0)
+ {
+ //绐楀笜鏂瑰悜璁剧疆澶辫触
+ string msg = Language.StringByID(R.MyInternationalizationString.uSetCurtainDirectionFail);
+ this.ShowTipMsg(msg);
+ return false;
+ }
+
+ return true;
+ }
+
+ /// <summary>
+ /// 璁剧疆寮�鍚堝笜鐢垫満鏂瑰悜
+ /// <para>isDirectionReversed (false:鐢垫満鏂瑰悜姝e悜锛泃rue:鐢垫満鏂瑰悜鍙嶅悜锛�)</para> .
+ /// </summary>
+ private CommonDevice.SetWritableValueResponAllData SetCurtainDirectionAsync(CommonDevice device, bool isDirectionReversed)
+ {
+ //濡傛灉褰撳墠鏄櫄鎷熶綇瀹�
+ if (Common.Config.Instance.Home.IsVirtually == true)
+ {
+ return TemplateDeviceDataLogic.Current.SetCurtainDirection(device, isDirectionReversed, null);
+ }
+ //鑾峰彇缂栬緫绐楀笜鏂瑰悜鐨勫懡浠ゅ瓧绗�
+ var sendData = this.GetCurtainDirectionCommadText(device.DeviceAddr, device.DeviceEpoint, isDirectionReversed);
+ var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway(device, "SetWritableValue", sendData, "SetWritableValue_Respon");
+ if (result.ErrorMsg != null || result.ErrorMsgDiv == 0)
+ {
+ return null;
+ }
+
+ //娣诲姞缂撳瓨
+ TemplateDeviceDataLogic.Current.SetCurtainDirection(device, isDirectionReversed, result.JsonData[0]);
+
+ var tempData = JsonConvert.DeserializeObject<CommonDevice.SetWritableValueResponData>(result.ReceiptData);
+ return new CommonDevice.SetWritableValueResponAllData { setWritableValueResponData = tempData };
+ }
+
+ /// <summary>
+ /// 鑾峰彇缂栬緫绐楀笜鏂瑰悜鐨勫懡浠ゅ瓧绗�
+ /// </summary>
+ /// <param name="DeviceAddr"></param>
+ /// <param name="DeviceEpoint"></param>
+ /// <param name="isDirectionReversed"></param>
+ /// <returns></returns>
+ public string GetCurtainDirectionCommadText(string DeviceAddr,int DeviceEpoint, bool isDirectionReversed)
+ {
+ int bit0 = isDirectionReversed == true ? 1 : 0;
+ int attributeData = bit0 * 1;
+ var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", DeviceEpoint }, { "Cluster_ID", 258 }, { "Command", 120 } };
+ var data = new JObject { { "Undivided", 0 }, { "AttributeId", 23 }, { "AttributeDataType", 24 }, { "AttributeData", attributeData } };
+ jObject.Add("Data", data);
+
+ return jObject.ToString();
+ }
+
+ #endregion
+
+ #region 鈻� 寮�鍚堝笜闄愪綅閰嶇疆_____________________
+
+ /// <summary>
+ /// 璁剧疆寮�鍚堝笜闄愪綅
+ /// </summary>
+ /// <param name="rollershade"></param>
+ /// <param name="upLimit">寮�闄愪綅</param>
+ /// <param name="downLimit">鍚堥檺浣�</param>
+ /// <param name="curtainLength">瀵艰建闀垮害(杩欎釜鏄粰铏氭嫙璁惧鐢ㄧ殑)</param>
+ /// <returns></returns>
+ public bool SetAutoOpenCurtainLimitPoint(CommonDevice rollershade, int upLimit, int downLimit, int curtainLength)
+ {
+ //濡傛灉褰撳墠鏄櫄鎷熶綇瀹�
+ if (Common.Config.Instance.Home.IsVirtually == true)
+ {
+ return TemplateData.TemplateDeviceDataLogic.Current.SetCurtainLimitPoint(rollershade, upLimit, downLimit, curtainLength, null);
+ }
+ //鑾峰彇缂栬緫寮�鍚堝笜闄愪綅鐨勫懡浠ゅ瓧绗�
+ var sendData = this.GetAutoOpenCurtainLimitPointCommandText(rollershade.DeviceAddr, rollershade.DeviceEpoint, upLimit, downLimit);
+ var result = HdlDeviceCommonLogic.Current.SendJobjectDataToGateway(rollershade, "SetWritableValue", sendData, "SetWritableValue_Respon");
+ if (result.ErrorMsg != null || result.ErrorMsgDiv == 0)
+ {
+ //璁剧疆绐楀笜闄愪綅鐐瑰け璐�
+ string msg = Language.StringByID(R.MyInternationalizationString.uCommitCurtainLimitFail);
+ //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
+ msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
+ this.ShowTipMsg(msg);
+ return false;
+ }
+ var tempData = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.SetWritableValueResponData>(result.ReceiptData);
+ if (tempData.Status != 0)
+ {
+ //璁剧疆绐楀笜闄愪綅鐐瑰け璐�
+ string msg = Language.StringByID(R.MyInternationalizationString.uCommitCurtainLimitFail);
+ this.ShowTipMsg(msg);
+ return false;
+ }
+
+ //娣诲姞缂撳瓨
+ TemplateDeviceDataLogic.Current.SetCurtainLimitPoint(rollershade, upLimit, downLimit, curtainLength, result.JsonData[0]);
+
+ return true;
+ }
+
+
+ /// <summary>
+ /// 鑾峰彇缂栬緫寮�鍚堝笜闄愪綅鐨勫懡浠ゅ瓧绗�
+ /// </summary>
+ /// <param name="DeviceAddr"></param>
+ /// <param name="DeviceEpoint"></param>
+ /// <param name="upLimit"></param>
+ /// <param name="downLimit"></param>
+ /// <returns></returns>
+ public string GetAutoOpenCurtainLimitPointCommandText(string DeviceAddr, int DeviceEpoint, int upLimit, int downLimit)
+ {
+ //杩欎釜鏄紑鍚堝笜 "2,0x00ff,0x00ff"鏍煎紡 鍚堥檺浣嶅湪鍓嶏紝寮�闄愪綅鍦ㄥ悗
+ string convertData = "\"2,0x" + Convert.ToString(downLimit, 16).PadLeft(4, '0');
+ convertData += ",0x" + Convert.ToString(upLimit, 16).PadLeft(4, '0') + "\"";
+ //鐒跺悗灏嗗畠浠浆涓篈SK鐮佹暟鍊�,鐒跺悗鍐嶈浆涓�16杩涘埗
+ //鎬昏闀垮害涓�17(杩欓噷鏄�16杩涘埗)
+ string sendData = "11";
+ foreach (char c in convertData)
+ {
+ sendData += Convert.ToString((int)c, 16).PadLeft(2, '0');
+ }
+
+ var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", DeviceEpoint }, { "Cluster_ID", 258 }, { "Command", 120 } };
+ var data = new JObject { { "Undivided", 0 }, { "AttributeId", 24 }, { "AttributeDataType", 65 }, { "AttributeData", sendData } };
+ jObject.Add("Data", data);
+
+ return jObject.ToString();
+ }
+
+ #endregion
+
+ #region 鈻� 绐楀笜闄愪綅閰嶇疆_______________________
+
+ /// <summary>
+ /// 鎵ц纭鍙婅鐩栫獥甯橀檺浣嶇偣
+ /// </summary>
+ /// <param name="rollershade">绐楀笜瀵硅薄</param>
+ /// <param name="limiType">纭鍙婅鐩栦笂闄愪綅杩樻槸涓嬮檺浣�</param>
+ /// <param name="upLimit">涓婇檺浣嶇殑鍊�(闀垮害鍊�,涓嶆槸鐧惧垎姣�)</param>
+ /// <param name="downLimit">涓嬮檺浣嶇殑鍊�(闀垮害鍊�,涓嶆槸鐧惧垎姣�)</param>
+ /// <returns></returns>
+ public async Task<bool> CommitCurtainLimitPoint(Rollershade rollershade, Rollershade.CurtainPrivateInstalledLimi limiType, int upLimit, int downLimit)
+ {
+ CommonDevice.SetWritableValueResponAllData result = null;
+ if (upLimit == -1 && downLimit == -1)
+ {
+ //杩欎釜鏄嵎甯�
+ result = await rollershade.SetCurtainInstalledLimitAsync(limiType);
+ }
+ else
+ {
+ //杩欎釜鏄紑鍚堝笜 "2,0x00ff,0x00ff"鏍煎紡 鍚堥檺浣嶅湪鍓嶏紝寮�闄愪綅鍦ㄥ悗
+ string convertData = "\"2,0x" + Convert.ToString(downLimit, 16).PadLeft(4, '0');
+ convertData += ",0x" + Convert.ToString(upLimit, 16).PadLeft(4, '0') + "\"";
+ //鐒跺悗灏嗗畠浠浆涓篈SK鐮佹暟鍊�,鐒跺悗鍐嶈浆涓�16杩涘埗
+ //鎬昏闀垮害涓�17(杩欓噷鏄�16杩涘埗)
+ string sendData = "11";
+ foreach (char c in convertData)
+ {
+ sendData += Convert.ToString((int)c, 16).PadLeft(2, '0');
+ }
+ //result = await HdlDeviceAttributeLogic.Current.WriteDeviceAttribute(rollershade, 258, 24, 65, sendData);
+ }
+ //妫�娴嬬綉鍏宠繑鍥炵殑鍏遍�氶敊璇姸鎬佺爜
+ string error = HdlCheckLogic.Current.CheckCommonErrorCode(result);
+ if (error != null)
+ {
+ this.ShowTipMsg(error);
+ return false;
+ }
+ if (result == null || result.setWritableValueResponData == null)
+ {
+ //璁剧疆绐楀笜闄愪綅鐐瑰け璐�
+ string msg = Language.StringByID(R.MyInternationalizationString.uCommitCurtainLimitFail);
+ //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
+ msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
+ this.ShowTipMsg(msg);
+ return false;
+ }
+ if (result.setWritableValueResponData.Status != 0)
+ {
+ //璁剧疆绐楀笜闄愪綅鐐瑰け璐�
+ string msg = Language.StringByID(R.MyInternationalizationString.uCommitCurtainLimitFail);
+ this.ShowTipMsg(msg);
+ return false;
+ }
+
+ return true;
+ }
+
+ /// <summary>
+ /// 鍒犻櫎闄愪綅鐐�
+ /// </summary>
+ /// <param name="rollershade">绐楀笜瀵硅薄</param>
+ /// <param name="limiType">鍒犻櫎涓婇檺浣嶈繕鏄垹闄や笅闄愪綅</param>
+ /// <returns></returns>
+ public async Task<bool> DeleteCurtainLimitPoint(Rollershade rollershade, Rollershade.LimiType limiType)
+ {
+ var result = await rollershade.DeleteCurtainLimitsAsync(limiType);
+ //妫�娴嬬綉鍏宠繑鍥炵殑鍏遍�氶敊璇姸鎬佺爜
+ string error = HdlCheckLogic.Current.CheckCommonErrorCode(result);
+ if (error != null)
+ {
+ this.ShowTipMsg(error);
+ return false;
+ }
+ if (result == null || result.setWritableValueResponData == null)
+ {
+ //閲嶇疆绐楀笜闄愪綅鐐瑰け璐�
+ string msg = Language.StringByID(R.MyInternationalizationString.uDeleteCurtainLimitFail);
+ //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
+ msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
+ this.ShowTipMsg(msg);
+ return false;
+ }
+ if (result.setWritableValueResponData.Status != 0)
+ {
+ //閲嶇疆绐楀笜闄愪綅鐐瑰け璐�
+ string msg = Language.StringByID(R.MyInternationalizationString.uDeleteCurtainLimitFail);
+ this.ShowTipMsg(msg);
+ return false;
+ }
+ return true;
+ }
+
+ #endregion
+
+ #region 鈻� 鑾峰彇绐楀笜闄愪綅閰嶇疆___________________
+
+ /// <summary>
+ /// 鍙戦�佽幏鍙栫獥甯橀檺浣嶉厤缃殑鍛戒护
+ /// </summary>
+ /// <param name="rollershade">绐楀笜瀵硅薄</param>
+ public void SetGetCurtainLimitSettionComand(Rollershade rollershade)
+ {
+ var jObject = new Newtonsoft.Json.Linq.JObject
+ {
+ { "DeviceAddr",rollershade.DeviceAddr },
+ { "Epoint", rollershade.DeviceEpoint },
+ { "Cluster_ID", (int)Cluster_ID.WindowCovering },
+ { "Command", 108 }
+ };
+ var attriBute = new Newtonsoft.Json.Linq.JArray
+ {
+ new Newtonsoft.Json.Linq.JObject
+ {
+ //寮�鍚堝笜鏂瑰悜
+ { "AttriButeId", (int)AttriButeId.WindowCoveringMode}
+ },
+ new Newtonsoft.Json.Linq.JObject
+ {
+ //寮�鍚堝笜鎬婚暱
+ { "AttriButeId", (int)AttriButeId.WindowCoveringLength}
+ },
+ new Newtonsoft.Json.Linq.JObject
+ {
+ //寮�闄愪綅
+ { "AttriButeId", (int)AttriButeId.InstalledOpenLimitLift}
+ },
+ new Newtonsoft.Json.Linq.JObject
+ {
+ //鍚堥檺浣�
+ { "AttriButeId", (int)AttriButeId.InstalledClosedLimitLift}
+ }
+ };
+ var data = new Newtonsoft.Json.Linq.JObject { { "AttriBute", attriBute } };
+ jObject.Add("Data", data);
+ rollershade.Gateway?.Send(("GetDeviceStatus"), jObject.ToString());
+ }
+
+ #endregion
+
+ #region 鈻� 閲嶇疆绐楀笜___________________________
+
+ /// <summary>
+ /// 閲嶇疆绐楀笜
+ /// </summary>
+ /// <param name="rollershade">绐楀笜瀵硅薄</param>
+ /// <returns></returns>
+ public async Task<bool> RestoreCurtain(Rollershade rollershade)
+ {
+ var result = await rollershade.RestoreCurtainLimitAsync();
+ //妫�娴嬬綉鍏宠繑鍥炵殑鍏遍�氶敊璇姸鎬佺爜
+ string error = HdlCheckLogic.Current.CheckCommonErrorCode(result);
+ if (error != null)
+ {
+ this.ShowTipMsg(error);
+ return false;
+ }
+ if (result == null || result.setWritableValueResponData == null)
+ {
+ //閲嶇疆绐楀笜澶辫触
+ string msg = Language.StringByID(R.MyInternationalizationString.uRestoreCurtainFail);
+ //鎷兼帴涓娿�愮綉鍏冲洖澶嶈秴鏃躲�戠殑Msg
+ msg = UserCenterLogic.CombineGatewayTimeOutMsg(msg, result);
+ this.ShowTipMsg(msg);
+ return false;
+ }
+ if (result.setWritableValueResponData.Status != 0)
+ {
+ //閲嶇疆绐楀笜澶辫触
+ string msg = Language.StringByID(R.MyInternationalizationString.uRestoreCurtainFail);
+ this.ShowTipMsg(msg);
+ return false;
+ }
+ return true;
+ }
+
+ #endregion
+
+ #region 鈻� 涓�鑸柟娉昣__________________________
+
+ /// <summary>
+ /// 鏄剧ず閿欒淇℃伅绐楀彛
+ /// </summary>
+ /// <param name="msg"></param>
+ private void ShowErrorMsg(string msg)
+ {
+ Application.RunOnMainThread(() =>
+ {
+ var contr = new ShowMsgControl(ShowMsgType.Error, msg);
+ contr.Show();
+ });
+ }
+
+ /// <summary>
+ /// 鏄剧ずTip淇℃伅绐楀彛
+ /// </summary>
+ /// <param name="msg"></param>
+ private void ShowTipMsg(string msg)
+ {
+ Application.RunOnMainThread(() =>
+ {
+ var contr = new ShowMsgControl(ShowMsgType.Tip, msg);
+ contr.Show();
+ });
+ }
+
+ #endregion
+ }
+}
--
Gitblit v1.8.0