From 6d73bf6e816570291865674bef8bce8972e4de3f Mon Sep 17 00:00:00 2001
From: xm <1271024303@qq.com>
Date: 星期三, 01 十二月 2021 16:32:57 +0800
Subject: [PATCH] 2021-12-01-01

---
 HDL_ON/DAL/DriverLayer/Control.cs |   82 ++++++++++++++++++++++++++++++++--------
 1 files changed, 65 insertions(+), 17 deletions(-)

diff --git a/HDL_ON/DAL/DriverLayer/Control.cs b/HDL_ON/DAL/DriverLayer/Control.cs
index 09db486..be5293d 100644
--- a/HDL_ON/DAL/DriverLayer/Control.cs
+++ b/HDL_ON/DAL/DriverLayer/Control.cs
@@ -38,6 +38,11 @@
                 return _control;
             }
         }
+        /// <summary>
+        /// 璁板綍鎺ユ敹鍒扮殑娑堟伅锛屾柟渚縵b鐨勫伐绋嬪笀璋冭瘯浠栦滑鐨勮澶�
+        /// </summary>
+        public List<string> MsgInfoList = new List<string>();
+
         int _msg_id = 1;
         /// <summary>
         /// 閫氳ID
@@ -279,6 +284,7 @@
                         else if (DB_ResidenceData.Instance.GatewayType == 1)
                         {
                             new Control_Udp().SearchLocalGateway();
+                            new Control_Udp().SearchLocalGateway(true);
                         }
                         System.Threading.Thread.Sleep(500);
                     }
@@ -353,7 +359,7 @@
         /// <param name="function"></param>
         /// <param name="useRemote">鏄惁鐩存帴浣跨敤杩滅▼鍙戦��</param>
         /// <returns></returns>
-        public void SendWriteCommand(Function function, Dictionary<string, string> commandDictionary, bool useRemote = false)
+        public void SendWriteCommand(Function function, Dictionary<string, string> commandDictionary, bool useRemote = false,int resend = 3)
         {
             function.controlCounter++;
             function.refreshTime = DateTime.Now;
@@ -407,9 +413,12 @@
             switch (function.spk)
             {
                 case SPK.ElectricTuyaAirCleaner:
+                case SPK.ElectricTuyaAirCleaner2:
                 case SPK.ElectricTuyaFan:
+                case SPK.ElectricTuyaFan2:
                 case SPK.ElectricTuyaWaterValve:
                 case SPK.ElectricTuyaWeepRobot:
+                case SPK.ElectricTuyaWeepRobot2:
                     useRemote = true;
                     break;
             }
@@ -447,7 +456,7 @@
                         var functionControlDataObj = function.GetGatewayAlinkControlData(commandDictionary);
                         var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(functionControlDataObj);
                         var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ControlFunctionTopic, functionControlDataJson);
-                        new Control_Udp().SendLocalHdlLinkData(sendBytes, functionControlDataObj.id);
+                        new Control_Udp().SendLocalHdlLinkData(sendBytes, functionControlDataObj.id,resend);
                         MainPage.Log($"鏈湴閫氳 鍙戦�丠DL-Link鏁版嵁:{functionControlDataJson}");
                     }
                 }
@@ -615,9 +624,9 @@
                         {
                             id = Ins.msg_id.ToString(),
                             objects = new List<Dictionary<string, string>>()
-                        {
-                            readKey
-                        },
+                                        {
+                                            readKey
+                                        },
                             time_stamp = Utlis.GetTimestamp()
                         };
                         var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(readDataObj);
@@ -695,9 +704,24 @@
                 };
                 var aLinkJson = Newtonsoft.Json.JsonConvert.SerializeObject(aLinkData);
                 var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ControlScene, aLinkJson);
-                new Control_Udp().SendLocalHdlLinkData(sendBytes, aLinkData.id);
+                new Control_Udp().SendLocalHdlLinkData(sendBytes, aLinkData.id,0);
             }
         }
+        /// <summary>
+        /// 缃戝叧杩涘叆閰嶇綉妯″紡
+        /// </summary>
+        public void AuthGateway()
+        {
+            var objects1 = new { spk = "", time = "180" };
+            //{"objects":[{"spk":"","time":"180"}],"id":"8","time_stamp":"1635241216669"}
+            var sendId = Ins.msg_id.ToString();
+            var sendObj = new { objects = objects1, id = sendId, time_stamp = Utlis.GetTimestamp() };
+
+            var aLinkJson = Newtonsoft.Json.JsonConvert.SerializeObject(sendObj);
+            var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.AuthGateway, aLinkJson);
+            new Control_Udp().SendLocalHdlLinkData(sendBytes, Ins.msg_id.ToString());
+        }
+
         /// <summary>
         /// 杞崲鍙戦�佹暟鎹�
         /// </summary>
@@ -720,7 +744,7 @@
             //1.鎷兼帴澶�
             string topicString = "Topic:" + topic + "\r\n";
             //2.Body瀛楃涓茶浆涓篵yte鏁扮粍
-            byte[] bodyBytes = Encoding.ASCII.GetBytes(bodyDataString);
+            byte[] bodyBytes = Encoding.UTF8.GetBytes(bodyDataString);
             //鍒ゆ柇鏄惁闇�鍔犲瘑Body鏁版嵁
             if (isEncryption && IsLocalEncryptAndGetAesKey)
             {
@@ -731,7 +755,7 @@
             //3.鎷兼帴body鐨凩ength闀垮害鏁版嵁
             string lengthString = "Length:" + bodyBytes.Length.ToString() + "\r\n" + "\r\n";
             string topicAndLengthString = topicString + lengthString;
-            byte[] topicAndLengthBytes = Encoding.ASCII.GetBytes(topicAndLengthString);
+            byte[] topicAndLengthBytes = Encoding.UTF8.GetBytes(topicAndLengthString);
             //4.鎷兼帴鍚堝苟 Topic 鍜� body鐨刡yte鏁扮粍鏁版嵁
             byte[] sendDataBytes = new byte[topicAndLengthBytes.Length + bodyBytes.Length];
             topicAndLengthBytes.CopyTo(sendDataBytes, 0);
@@ -747,10 +771,10 @@
         /// 杞崲鎺ユ敹鍒扮殑鏁版嵁
         /// </summary>
         /// <returns></returns>
-        public void ConvertReceiveData(byte[] receiveBytes)
+        public void ConvertReceiveData(byte[] receiveBytes,string ip)
         {
             var reString = Encoding.UTF8.GetString(receiveBytes);
-            AnalysisReceiveData(reString, receiveBytes);
+            AnalysisReceiveData(reString, receiveBytes,ip);
         }
         /// <summary>
         /// 杞崲鎺ユ敹鍒扮殑鏁版嵁
@@ -758,7 +782,7 @@
         /// <param name="receiveString">杞琒tring鍚庣殑鏁版嵁</param>
         /// <param name="originalReceiveBytes"鍘熷Bytes鏁版嵁</param>
         /// <returns></returns>
-        public LocalCommunicationData AnalysisReceiveData(string receiveString, byte[] originalReceiveBytes)
+        public LocalCommunicationData AnalysisReceiveData(string receiveString, byte[] originalReceiveBytes , string sIp = null)
         {
             LocalCommunicationData receiveObj = new LocalCommunicationData();
 
@@ -811,6 +835,10 @@
                             var revString = Encoding.UTF8.GetString(receiveBytes);
                             receiveObj.BodyDataString = revString;
                             MainPage.Log($"灞�鍩熺綉淇℃伅: 瑙e瘑鍚庯細" + receiveObj.BodyDataString);
+                            if(receiveObj.Topic.EndsWith("/thing/property/up"))
+                            {
+                                MsgInfoList.Add(revString + "\r\n");
+                            }
                         }
                         else
                         {
@@ -851,6 +879,10 @@
                         {
                             Ins.GatewayId = device.device_mac;
                         }
+                        if (!string.IsNullOrEmpty(sIp))
+                        {
+                            device.ip_address = sIp;
+                        }
                         reportIp = device.ip_address;//涓绘挱鍦板潃涔熻兘鎺у埗璁惧//"239.0.168.188";//
                         //2021-09-23 鏂板鑾峰彇褰撳墠缃戝叧鏄惁鏈湴鍔犲瘑
                         Ins.IsLocalEncrypt = device.isLocalEncrypt;
@@ -859,7 +891,8 @@
                 }
                 else if (receiveObj.Topic == CommunicationTopic.ct.ReadStatus + "_reply" ||
                     receiveObj.Topic == CommunicationTopic.ct.ControlFunctionTopic + "_reply" ||
-                    receiveObj.Topic == CommunicationTopic.ct.GatewayUpStatus)
+                    receiveObj.Topic == CommunicationTopic.ct.GatewayUpStatus ||
+                    receiveObj.Topic.Contains( CommunicationTopic.ct.GatewayUpSortTopic))
                 {
                     //TODO 鏆傛椂涓嶄紶姝g‘鐨勬暟鎹笂鍘伙紝濡傛灉鍚庨潰瑕佷紭鍖栧墠闈㈣繖浜涗唬鐮�
                     UpdataFunctionStatus(receiveObj.BodyDataString, null);
@@ -957,11 +990,14 @@
                         }
 
                         //鏇存柊鐣岄潰鐘舵��
-                        Function localObj = null;
                         switch (localFunction.spk)
                         {
                             case SPK.AirSwitch:
                                 AirSwitchPage.UpdataState(localFunction);
+                                if(localFunction.GetAttribute(FunctionAttributeKey.Power)!=null)//濡傛灉鏄甫鐢甸噺鐨勭┖寮�涔熻鏇存柊鑳芥簮鐣岄潰
+                                {
+                                    EnergyMainPage.UpdataStatus(localFunction);
+                                }
                                 break;
                             case SPK.ElectricEnergy:
                                 EnergyMainPage.UpdataStatus(localFunction);
@@ -975,6 +1011,7 @@
                                 DimmerPage.UpdataStates(localFunction);
                                 break;
                             case SPK.ElectricFan:
+                            case SPK.HvacFan:
                                 localFunction.lastState = Language.StringByID(StringId.Level) + " : " +
                                    localFunction.GetAttrState(FunctionAttributeKey.OpenLevel);
                                 FanPage.UpdataState(localFunction);
@@ -1004,6 +1041,8 @@
                             case SPK.CurtainShades:
                                 break;
                             case SPK.AcStandard:
+                            case SPK.HvacAC:
+                            case SPK.AcIr:
                                 Stan.HdlDeviceStatuPushLogic.Current.UpdateDeviceStatu(updateTemp.sid, updateTemp.status);
                                 if (localFunction != null)
                                 {
@@ -1042,9 +1081,10 @@
                                             break;
                                     }
                                     localFunction.lastState += " " + localFunction.GetAttrState(FunctionAttributeKey.SetTemp) + new AC().GetTempUnitString(localFunction);
-                                    ACPage.UpdataStates(localFunction);
+
                                 }
                                 break;
+                            case SPK.HvacFloorHeat:
                             case SPK.FloorHeatStandard:
                                 localFunction.lastState = "";
                                 switch (localFunction.GetAttrState(FunctionAttributeKey.Mode))
@@ -1073,6 +1113,7 @@
                             case SPK.SensorTVOC:
                             case SPK.SensorTemperature:
                             case SPK.SensorHumidity:
+                            case SPK.SensorHcho:
                                 if(localFunction.spk == SPK.SensorTemperature)
                                 {
                                     HomePage.LoadEvent_RefreshEnvirIndoorTemp();
@@ -1082,7 +1123,7 @@
                                     HomePage.LoadEvent_RefreshEnvirIndoorHumi();
                                 }
                                 EnvironmentalPage.LoadEvent_UpdataStatus(localFunction);
-                                A_EnvironmentalDataCenter.LoadEvent_UpdataStatus(localFunction);
+                                //A_EnvironmentalDataCenter.LoadEvent_UpdataStatus(localFunction);
                                 break;
                             case SPK.SensorEnvironment:
                             case SPK.SensorEnvironment2:
@@ -1096,25 +1137,32 @@
                                     HomePage.LoadEvent_RefreshEnvirIndoorHumi();
                                 }
                                 EnvironmentalPage.LoadEvent_UpdataStatus(localFunction);
-                                A_EnvironmentalDataCenter.LoadEvent_UpdataStatus(localFunction);
+                                //A_EnvironmentalDataCenter.LoadEvent_UpdataStatus(localFunction);
                                 break;
                             case SPK.ElectricSocket:
+                            case SPK.PanelSocket:
                                 SocketPage.UpdataState(localFunction);
                                 break;
                             case SPK.ElectricTV:
                                 break;
                             case SPK.ElectricTuyaAirCleaner:
+                            case SPK.ElectricTuyaAirCleaner2:
                             case SPK.ElectricTuyaFan:
+                            case SPK.ElectricTuyaFan2:
                             case SPK.ElectricTuyaWeepRobot:
+                            case SPK.ElectricTuyaWeepRobot2:
                             case SPK.ElectricTuyaWaterValve:
+                            case SPK.ElectricTuyaWaterValve2:
                             case SPK.SensorPir:
                             case SPK.SensorDoorWindow:
                             case SPK.SensorSmoke:
                             case SPK.SensorWater:
                             case SPK.ClothesHanger:
-                            case SPK.AcIr:
                             case SPK.SenesorMegahealth:
+                            case SPK.SenesorMegahealth2:
                             case SPK.AirFreshStandard:
+                            case SPK.HvacAirFresh:
+                            case SPK.SensorGas:
                                 //璁惧鐘舵�佹帹閫�
                                 //鐘舵�佹洿鏂�
                                 Stan.HdlDeviceStatuPushLogic.Current.UpdateDeviceStatu(updateTemp.sid, updateTemp.status);

--
Gitblit v1.8.0