From f14dcfd967404e197e7ec995ca8d6f2b090d3b7d Mon Sep 17 00:00:00 2001
From: xm <1271024303@qq.com>
Date: 星期五, 11 九月 2020 09:16:59 +0800
Subject: [PATCH] 优化多功能面板:绑定温湿度传感器目标,和设备列表回路显示。优化数据矫正功能温湿度度不设置的情况。优化门锁时间设置最后一天和最后最后一个月的时间显示等 细节

---
 ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceAttributeLogic.cs |  499 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 499 insertions(+), 0 deletions(-)

diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceAttributeLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceAttributeLogic.cs
new file mode 100755
index 0000000..ec80f72
--- /dev/null
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlDeviceAttributeLogic.cs
@@ -0,0 +1,499 @@
+锘縰sing Shared.Common;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using ZigBee.Device;
+
+namespace Shared.Phone.UserCenter
+{
+    /// <summary>
+    /// 璁惧灞炴�х殑閫昏緫绫�
+    /// </summary>
+    public class HdlDeviceAttributeLogic
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 灞炴�х殑閫昏緫
+        /// </summary>
+        private static HdlDeviceAttributeLogic m_Current = null;
+        /// <summary>
+        /// 灞炴�х殑閫昏緫
+        /// </summary>
+        public static HdlDeviceAttributeLogic Current
+        {
+            get
+            {
+                if (m_Current == null)
+                {
+                    m_Current = new HdlDeviceAttributeLogic();
+                }
+                return m_Current;
+            }
+            set
+            {
+                m_Current = value;
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 鍐欏叆璁惧灞炴�______________________
+
+        /// <summary>
+        /// 鑾峰彇鏇存敼璁惧绉佹湁灞炴�х殑鍛戒护
+        /// </summary>
+        /// <param name="clusterId"></param>
+        /// <param name="attributeId"></param>
+        /// <param name="attributeDataType"></param>
+        /// <param name="attributeData"></param>
+        /// <returns></returns>
+        public string GetWriteDeviceAttributeText(string DeviceAddr, int DeviceEpoint, int clusterId, int attributeId, int attributeDataType, object attributeData)
+        {
+            var jObject = new Newtonsoft.Json.Linq.JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", DeviceEpoint }, { "Cluster_ID", clusterId }, { "Command", 120 } };
+            Newtonsoft.Json.Linq.JObject data = null;
+            if (attributeData is int)
+            {
+                data = new Newtonsoft.Json.Linq.JObject { { "Undivided", 0 }, { "AttributeId", attributeId }, { "AttributeDataType", attributeDataType }, { "AttributeData", Convert.ToInt32(attributeData) } };
+            }
+            else
+            {
+                data = new Newtonsoft.Json.Linq.JObject { { "Undivided", 0 }, { "AttributeId", attributeId }, { "AttributeDataType", attributeDataType }, { "AttributeData", attributeData.ToString() } };
+            }
+            jObject.Add("Data", data);
+
+            return jObject.ToString();
+        }
+
+        #endregion
+
+        #region 鈻� 绌鸿皟_______________________________
+
+        /// <summary>
+        /// SendACStatuComand
+        /// </summary>
+        /// <param name="device">璁惧</param>
+        public void SendACStatuComand(CommonDevice device)
+        {
+            if (device == null)
+            {
+                return;
+            }
+            new System.Threading.Thread(() =>
+            {
+                SendFanStatuComand(device);
+                System.Threading.Thread.Sleep(300);
+                SendThermostatStatuComand(device);
+            })
+            { IsBackground = true }.Start();
+        }
+
+        /// <summary>
+        /// SendThermostatStatuComand
+        /// </summary>
+        /// <param name="device">璁惧</param>
+        public void SendThermostatStatuComand(CommonDevice device)
+        {
+            if (device == null)
+            {
+                return;
+            }
+            var jObject = new Newtonsoft.Json.Linq.JObject
+            {
+                { "DeviceAddr",device.DeviceAddr },
+                { "Epoint", device.DeviceEpoint },
+                { "Cluster_ID", (int)Cluster_ID.Thermostat },
+                { "Command", 108 }
+            };
+            var attriBute = new Newtonsoft.Json.Linq.JArray
+            {
+               new Newtonsoft.Json.Linq.JObject
+               {
+                 { "AttriButeId", (int)AttriButeId.LocalTemperature}
+               },
+               new Newtonsoft.Json.Linq.JObject
+               {
+                 { "AttriButeId", (int)AttriButeId.CoolingSetpoint}
+               },
+               new Newtonsoft.Json.Linq.JObject
+               {
+                 { "AttriButeId", (int)AttriButeId.HeatingSetpoint}
+               },
+               new Newtonsoft.Json.Linq.JObject
+               {
+                 { "AttriButeId", (int)AttriButeId.AutoSetpoint}
+               },
+               new Newtonsoft.Json.Linq.JObject
+               {
+                 { "AttriButeId", (int)AttriButeId.SystemMode}
+               },
+               new Newtonsoft.Json.Linq.JObject
+               {
+                 { "AttriButeId", (int)AttriButeId.AcModeSupport}
+               },
+               new Newtonsoft.Json.Linq.JObject
+               {
+                 { "AttriButeId", (int)AttriButeId.CleanStatu}
+               }
+            };
+            var data = new Newtonsoft.Json.Linq.JObject { { "AttriBute", attriBute } };
+            jObject.Add("Data", data);
+            device.Gateway?.Send(("GetDeviceStatus"), jObject.ToString());
+        }
+
+        /// <summary>
+        /// SendFanStatuComand
+        /// </summary>
+        /// <param name="device">璁惧</param>
+        private void SendFanStatuComand(CommonDevice device)
+        {
+            if (device == null)
+            {
+                return;
+            }
+            var jObject = new Newtonsoft.Json.Linq.JObject
+            {
+                { "DeviceAddr",device.DeviceAddr },
+                { "Epoint", device.DeviceEpoint },
+                { "Cluster_ID", (int)Cluster_ID.FanControl },
+                { "Command", 108 }
+            };
+            var attriBute = new Newtonsoft.Json.Linq.JArray
+            {
+               new Newtonsoft.Json.Linq.JObject
+               {
+                 { "AttriButeId", (int)AttriButeId.FanMode}
+               },
+               new Newtonsoft.Json.Linq.JObject
+               {
+                 { "AttriButeId", (int)AttriButeId.FanSwing}
+               }
+            };
+            var data = new Newtonsoft.Json.Linq.JObject { { "AttriBute", attriBute } };
+            jObject.Add("Data", data);
+            device.Gateway?.Send("GetDeviceStatus", jObject.ToString());
+        }
+
+        #endregion
+
+        #region 鈻� 鏂伴_______________________________
+        /// <summary>
+        /// SendFreshAirStatuComand
+        /// </summary>
+        /// <param name="device">璁惧</param>
+        public void SendFreshAirStatuComand(CommonDevice device)
+        {
+            if (device == null)
+            {
+                return;
+            }
+            new System.Threading.Thread(() =>
+            {
+                SendFreshAirFanStatuComand(device);
+                System.Threading.Thread.Sleep(300);
+            })
+            { IsBackground = true }.Start();
+        }
+
+        /// <summary>
+        /// SendFanStatuComand
+        /// </summary>
+        /// <param name="device">璁惧</param>
+        private void SendFreshAirFanStatuComand(CommonDevice device)
+        {
+            if (device == null)
+            {
+                return;
+            }
+            var jObject = new Newtonsoft.Json.Linq.JObject
+            {
+                { "DeviceAddr",device.DeviceAddr },
+                { "Epoint", device.DeviceEpoint },
+                { "Cluster_ID", (int)Cluster_ID.FanControl },
+                { "Command", 108 }
+            };
+            var attriBute = new Newtonsoft.Json.Linq.JArray
+            {
+               new Newtonsoft.Json.Linq.JObject
+               {
+                 { "AttriButeId", (int)AttriButeId.FanMode}
+               }
+            };
+            var data = new Newtonsoft.Json.Linq.JObject { { "AttriBute", attriBute } };
+            jObject.Add("Data", data);
+            device.Gateway?.Send("GetDeviceStatus", jObject.ToString());
+        }
+
+        #endregion
+
+        #region 鈻� PM2.5_______________________________
+        /// <summary>
+        /// SendPmSensorComand
+        /// </summary>
+        /// <param name="device">璁惧</param>
+        public void SendPmSensorComand(CommonDevice device)
+        {
+            if (device == null)
+            {
+                return;
+            }
+            new System.Threading.Thread(() =>
+            {
+                SendPmSensorStatuComand(device);
+                //璇诲彇Pm2.5浼犳劅鍣ㄧ殑娓╁害鏁版嵁
+                HdlDeviceAttributeLogic.Current.SendTemperatureStatuComand(device);
+                //璇诲彇Pm2.5浼犳劅鍣ㄧ殑婀垮害鏁版嵁
+                HdlDeviceAttributeLogic.Current.SendHumidityStatuComand(device);
+                System.Threading.Thread.Sleep(300);
+            })
+            { IsBackground = true }.Start();
+        }
+
+        /// <summary>
+        /// SendFanStatuComand
+        /// </summary>
+        /// <param name="device">璁惧</param>
+        private void SendPmSensorStatuComand(CommonDevice device)
+        {
+            if (device == null)
+            {
+                return;
+            }
+            var jObject = new Newtonsoft.Json.Linq.JObject
+            {
+                { "DeviceAddr",device.DeviceAddr },
+                { "Epoint", device.DeviceEpoint },
+                { "Cluster_ID", (int)Cluster_ID.PmTwoPointFiveMeasurement  },
+                { "Command", 108 }
+            };
+            var attriBute = new Newtonsoft.Json.Linq.JArray
+            {
+               new Newtonsoft.Json.Linq.JObject
+               {
+                 { "AttriButeId", (int)AttriButeId.MeasuredValue}
+               }
+            };
+            var data = new Newtonsoft.Json.Linq.JObject { { "AttriBute", attriBute } };
+            jObject.Add("Data", data);
+            device.Gateway?.Send("GetDeviceStatus", jObject.ToString());
+        }
+
+        #endregion
+
+        #region 鈻� 绐楀笜_______________________________
+        /// <summary>
+        /// 鍙戦�佽幏鍙栫獥甯樼姸鎬佸懡浠�
+        /// </summary>
+        /// <param name="device">绐楀笜</param>
+        public void SendCurtainStatuComand(CommonDevice device)
+        {
+            if (device == null)
+            {
+                return;
+            }
+            var jObject = new Newtonsoft.Json.Linq.JObject
+            {
+                { "DeviceAddr",device.DeviceAddr },
+                { "Epoint", device.DeviceEpoint },
+                { "Cluster_ID", (int)Cluster_ID.WindowCovering },
+                { "Command", 108 }
+            };
+            var attriBute = new Newtonsoft.Json.Linq.JArray
+            {
+               new Newtonsoft.Json.Linq.JObject
+               {
+                 { "AttriButeId", (int)AttriButeId.CurrentPositionLiftPercentage}
+               }
+            };
+            var data = new Newtonsoft.Json.Linq.JObject { { "AttriBute", attriBute } };
+            jObject.Add("Data", data);
+            device.Gateway?.Send(("GetDeviceStatus"), jObject.ToString());
+        }
+
+        #endregion
+
+        #region 鈻� 鐏厜_______________________________
+
+        /// <summary>
+        /// Light
+        /// </summary>
+        /// <param name="device"></param>
+        public void SendLightStatuComand(CommonDevice device)
+        {
+            SendSwitchStatuComand(device);
+        }
+
+        /// <summary>
+        /// Light
+        /// </summary>
+        /// <param name="device"></param>
+        public void SendDimmableLightStatuComand(CommonDevice device)
+        {
+            if (device == null)
+            {
+                return;
+            }
+            new System.Threading.Thread(() =>
+            {
+                SendSwitchStatuComand(device);
+                System.Threading.Thread.Sleep(300);
+                SendLevelStatuComand(device);
+            })
+            { IsBackground = true }.Start();
+        }
+
+        /// <summary>
+        /// 鍙戦�佽幏鍙栫伅鍏夌姸鎬佸懡浠�
+        /// </summary>
+        /// <param name="device">绐楀笜</param>
+        private void SendSwitchStatuComand(CommonDevice device)
+        {
+            if (device == null)
+            {
+                return;
+            }
+            var jObject = new Newtonsoft.Json.Linq.JObject
+            {
+                { "DeviceAddr",device.DeviceAddr },
+                { "Epoint", device.DeviceEpoint },
+                { "Cluster_ID", (int)Cluster_ID.Switch },
+                { "Command", 108 }
+            };
+            var attriBute = new Newtonsoft.Json.Linq.JArray
+            {
+               new Newtonsoft.Json.Linq.JObject
+               {
+                 { "AttriButeId", (int)AttriButeId.Switch}
+               }
+            };
+            var data = new Newtonsoft.Json.Linq.JObject { { "AttriBute", attriBute } };
+            jObject.Add("Data", data);
+            device.Gateway?.Send(("GetDeviceStatus"), jObject.ToString());
+        }
+
+        /// <summary>
+        /// 鍙戦�佽幏鍙栫伅鍏夌姸鎬佸懡浠�
+        /// </summary>
+        /// <param name="device">绐楀笜</param>
+        public void SendLevelStatuComand(CommonDevice device)
+        {
+            if (device == null)
+            {
+                return;
+            }
+            var jObject = new Newtonsoft.Json.Linq.JObject
+            {
+                { "DeviceAddr",device.DeviceAddr },
+                { "Epoint", device.DeviceEpoint },
+                { "Cluster_ID", (int)Cluster_ID.LevelControl },
+                { "Command", 108 }
+            };
+            var attriBute = new Newtonsoft.Json.Linq.JArray
+            {
+               new Newtonsoft.Json.Linq.JObject
+               {
+                 { "AttriButeId", (int)AttriButeId.LevelControl}
+               }
+            };
+            var data = new Newtonsoft.Json.Linq.JObject { { "AttriBute", attriBute } };
+            jObject.Add("Data", data);
+            device.Gateway?.Send(("GetDeviceStatus"), jObject.ToString());
+        }
+
+        #endregion
+
+        #region 鈻� 鑹叉俯鐏痏____________________________
+
+        /// <summary>
+        /// 鍙戦�佽幏鍙栬壊娓╃伅鐘舵�佸懡浠�
+        /// </summary>
+        /// <param name="device"></param>
+        public void SendColorTemperatureLightStatuComand(CommonDevice device)
+        {
+            if (device == null)
+            {
+                return;
+            }
+            var colorDevice = (ColorTemperatureLight)device;
+            new System.Threading.Thread(() =>
+            {
+                colorDevice.ReadOnOffStatus();
+                System.Threading.Thread.Sleep(300);
+                colorDevice.ReadLevel();
+                System.Threading.Thread.Sleep(300);
+                colorDevice.ReadColorTemperature();
+                if (LocalDevice.Current.IsMiniLight(device) == true)
+                {
+                    //mini澶滅伅闇�瑕佽鍙栬渹楦e櫒鐘舵��
+                    System.Threading.Thread.Sleep(300);
+                    colorDevice.ReadBuzzerStatu();
+                }
+            })
+            { IsBackground = true }.Start();
+        }
+
+        #endregion
+
+        #region 鈻� 娓╂箍搴____________________________
+
+        /// <summary>
+        /// 璇诲彇娓╁害
+        /// </summary>
+        /// <param name="device"></param>
+        public void SendTemperatureStatuComand(CommonDevice device)
+        {
+            if (device == null)
+            {
+                return;
+            }
+            var jObject = new Newtonsoft.Json.Linq.JObject
+            {
+                { "DeviceAddr",device.DeviceAddr },
+                { "Epoint", device.DeviceEpoint },
+                { "Cluster_ID", (int)Cluster_ID.TemperatureMeasurement },
+                { "Command", 108 }
+            };
+            var attriBute = new Newtonsoft.Json.Linq.JArray
+            {
+               new Newtonsoft.Json.Linq.JObject
+               {
+                 { "AttriButeId", (int)AttriButeId.MeasuredValue}
+               }
+            };
+            var data = new Newtonsoft.Json.Linq.JObject { { "AttriBute", attriBute } };
+            jObject.Add("Data", data);
+            device.Gateway?.Send(("GetDeviceStatus"), jObject.ToString());
+        }
+
+        /// <summary>
+        /// 璇诲彇婀垮害
+        /// </summary>
+        /// <param name="device"></param>
+        public void SendHumidityStatuComand(CommonDevice device)
+        {
+            if (device == null)
+            {
+                return;
+            }
+            var jObject = new Newtonsoft.Json.Linq.JObject
+            {
+                { "DeviceAddr",device.DeviceAddr },
+                { "Epoint", device.DeviceEpoint },
+                { "Cluster_ID", (int)Cluster_ID.RelativeHumidityMeasurement },
+                { "Command", 108 }
+            };
+            var attriBute = new Newtonsoft.Json.Linq.JArray
+            {
+               new Newtonsoft.Json.Linq.JObject
+               {
+                 { "AttriButeId", (int)AttriButeId.MeasuredValue}
+               }
+            };
+            var data = new Newtonsoft.Json.Linq.JObject { { "AttriBute", attriBute } };
+            jObject.Add("Data", data);
+            device.Gateway?.Send(("GetDeviceStatus"), jObject.ToString());
+        }
+
+        #endregion
+    }
+}

--
Gitblit v1.8.0