From 86db3175d109ab7d5abfb65058228a496f2492ec Mon Sep 17 00:00:00 2001
From: wei <kaede@kaededeMacBook-Air.local>
Date: 星期一, 07 十二月 2020 11:31:41 +0800
Subject: [PATCH] 20201207

---
 HDL_ON/Entity/Function/Function.cs                    |   28 ++-
 HDL_ON/UI/UI2/1-HomePage/HomePage.cs                  |    3 
 HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPageBLL.cs |    2 
 HDL_ON/UI/UI2/UserPage.cs                             |    2 
 HDL_ON/Entity/DB_ResidenceData.cs                     |   36 -----
 .vs/HDL_APP_Project/xs/UserPrefs.xml                  |   29 ++--
 HDL_ON/DAL/DriverLayer/Control.cs                     |   67 +++++++--
 HDL_ON/DAL/Mqtt/MqttClient.cs                         |  162 ++++++++++++++++++++++
 HDL_ON/Entity/FunctionList.cs                         |   48 ++++++
 HDL_ON/DAL/DriverLayer/A_Protocol_Common.cs           |   14 +
 10 files changed, 304 insertions(+), 87 deletions(-)

diff --git a/.vs/HDL_APP_Project/xs/UserPrefs.xml b/.vs/HDL_APP_Project/xs/UserPrefs.xml
index 7ec0c9f..0677f46 100644
--- a/.vs/HDL_APP_Project/xs/UserPrefs.xml
+++ b/.vs/HDL_APP_Project/xs/UserPrefs.xml
@@ -1,24 +1,25 @@
 锘�<Properties StartupConfiguration="{D998E133-F0DD-4760-BE3C-461632F54DA4}|Default">
   <MonoDevelop.Ide.ItemProperties.HDL-ON__iOS PreferredExecutionTarget="MonoDevelop.IPhone.IPhoneDeviceTarget.6242be7109c740c6cb8999a8904b6e0ea8d45192" />
-  <MonoDevelop.Ide.Workbench ActiveDocument="HDL_ON/UI/UI1-Login/LoginPage.cs">
+  <MonoDevelop.Ide.Workbench ActiveDocument="HDL_ON/DAL/DriverLayer/Control.cs">
     <Files>
-      <File FileName="HDL_ON/UI/MainPage.cs" Line="203" Column="62" />
-      <File FileName="HDL_ON/Entity/FunctionList.cs" />
-      <File FileName="HDL_ON/UI/UI2/4-PersonalCenter/MemberManagement/MemberManagementPage.cs" />
-      <File FileName="HDL_ON/Entity/Function/Function.cs" />
-      <File FileName="HDL_ON/DAL/DriverLayer/Control.cs" Line="239" Column="3" />
-      <File FileName="HDL_ON/DAL/Server/HttpServerRequest.cs" Line="621" Column="21" />
-      <File FileName="HDL_ON/Entity/DB_ResidenceData.cs" />
-      <File FileName="HDL_ON/DAL/Server/NewApiRes.cs" />
-      <File FileName="HDL_ON/UI/UI1-Login/LoginPage.cs" Line="26" Column="33" />
+      <File FileName="HDL_ON/DAL/Mqtt/MqttClient.cs" Line="468" Column="28" />
+      <File FileName="HDL_ON/DAL/DriverLayer/Packet.cs" Line="491" Column="5" />
+      <File FileName="HDL_ON/Entity/FunctionList.cs" Line="541" Column="64" />
+      <File FileName="HDL_ON/Entity/DB_ResidenceData.cs" Line="290" Column="69" />
+      <File FileName="HDL_ON/UI/UI2/UserPage.cs" Line="132" Column="25" />
+      <File FileName="HDL_ON/DAL/DriverLayer/Control.cs" Line="322" Column="54" />
+      <File FileName="HDL_ON/DAL/DriverLayer/Control_Udp.cs" Line="538" Column="21" />
     </Files>
     <Pads>
       <Pad Id="ProjectPad">
         <State name="__root__">
           <Node name="HDL_APP_Project" expanded="True">
             <Node name="HDL_ON" expanded="True">
+              <Node name="Common" expanded="True" />
               <Node name="DAL" expanded="True">
-                <Node name="DriverLayer" expanded="True" />
+                <Node name="DriverLayer" expanded="True">
+                  <Node name="Control.cs" selected="True" />
+                </Node>
                 <Node name="Mqtt" expanded="True" />
                 <Node name="Server" expanded="True" />
               </Node>
@@ -26,9 +27,7 @@
                 <Node name="Function" expanded="True" />
               </Node>
               <Node name="UI" expanded="True">
-                <Node name="UI1-Login" expanded="True">
-                  <Node name="LoginPage.cs" selected="True" />
-                </Node>
+                <Node name="UI1-Login" expanded="True" />
                 <Node name="UI2" expanded="True">
                   <Node name="1-HomePage" expanded="True" />
                   <Node name="3-Intelligence" expanded="True">
@@ -58,7 +57,7 @@
   <MonoDevelop.Ide.DebuggingService.Breakpoints>
     <BreakpointStore>
       <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/UI/UI2/4-PersonalCenter/RoomListManage/FloorsManagementPage.cs" relfile="HDL_ON/UI/UI2/4-PersonalCenter/RoomListManage/FloorsManagementPage.cs" line="176" column="1" />
-      <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/DAL/Server/HttpServerRequest.cs" relfile="HDL_ON/DAL/Server/HttpServerRequest.cs" line="631" column="1" />
+      <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/Entity/FunctionList.cs" relfile="HDL_ON/Entity/FunctionList.cs" line="534" column="1" />
     </BreakpointStore>
   </MonoDevelop.Ide.DebuggingService.Breakpoints>
   <MultiItemStartupConfigurations />
diff --git a/HDL_ON/DAL/DriverLayer/A_Protocol_Common.cs b/HDL_ON/DAL/DriverLayer/A_Protocol_Common.cs
index 6cf95ed..8142462 100644
--- a/HDL_ON/DAL/DriverLayer/A_Protocol_Common.cs
+++ b/HDL_ON/DAL/DriverLayer/A_Protocol_Common.cs
@@ -75,7 +75,9 @@
         /// </summary>
         public const string BusPcGetAppSids = "/user/onpro/custom/function/list/get";
 
-
+        /// <summary>
+        /// 鏈湴鎺у埗鍔熻兘鐘舵�佷富棰�
+        /// </summary>
         public string ControlFunctionTopic
         {
             get
@@ -83,5 +85,15 @@
                 return $"/base/{Control.Ins.GatewayId}/thing/property/down";
             }
         }
+        /// <summary>
+        /// 璇诲彇鍔熻兘鐘舵��
+        /// </summary>
+        public string ReadStatus
+        {
+            get
+            {
+                return $"/base/{Control.Ins.GatewayId}/thing/property/read";
+            }
+        }
     }
 }
\ No newline at end of file
diff --git a/HDL_ON/DAL/DriverLayer/Control.cs b/HDL_ON/DAL/DriverLayer/Control.cs
index aeb874a..80e292b 100644
--- a/HDL_ON/DAL/DriverLayer/Control.cs
+++ b/HDL_ON/DAL/DriverLayer/Control.cs
@@ -70,6 +70,7 @@
                 _gatewayOnline = value;
                 //淇敼涓婚〉杩炴帴鐘舵��
                 UI.HomePage.LoadEvent_CheckLinkStatus();
+                FunctionList.List.ReadAllFunctionStatus();
             }
         }
         /// <summary>
@@ -228,7 +229,7 @@
             function.refreshTime = DateTime.Now;
             DAL.Server.HttpServerRequest httpServer = new DAL.Server.HttpServerRequest();
             //杩滅▼閫氳
-            if (!Ins.IsRemote)
+            if (Ins.IsRemote || true) 
             {
                 //ALink鎺у埗銆丅us鎺у埗浣跨敤鍚屼竴涓帴鍙f帶鍒讹紝鐢变簯绔礋璐hВ鏋�
                 var apiControlData = function.GetApiControlData(commandDictionary);
@@ -240,7 +241,7 @@
             //鏈湴閫氳
             else
             {
-                //ALink鎺у埗
+                //Bus鎺у埗
                 if (DB_ResidenceData.residenceData.GatewayType == 0)
                 {
                     try
@@ -255,7 +256,7 @@
                         MainPage.Log($"鍙戦�佹暟鎹紓甯�: {ex.Message}");
                     }
                 }
-                //Bus鎺у埗
+                //ALink鎺у埗
                 else
                 {
                     if (myUdp != null)
@@ -264,7 +265,6 @@
                         var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(functionControlDataObj);
                         var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ControlFunctionTopic, functionControlDataJson);
                         myUdp.SendLocalHdlLinkData(sendBytes);
-                        //MainPage.Log($"鍙戦�佹湰鍦癏DL-Link鏁版嵁{functionControlDataJson}\r\n");
                     }
                 }
             }
@@ -277,25 +277,58 @@
         public void SendReadCommand(Function function)
         {
             function.refreshTime = DateTime.Now;
-            if (function.bus_Data != null)
+            if (Ins.IsRemote)
             {
-                try
-                {
-                    //ReadBusData(function);
-                }
-                catch (Exception ex)
-                {
-                    MainPage.Log($"鍙戦�佹暟鎹紓甯�: {ex.Message}");
-                }
+
             }
             else
             {
-                //var commandObj = function.GetSendJObject(CommandType_A.read);
-                //var commandString = Newtonsoft.Json.JsonConvert.SerializeObject(commandObj);
-                //var commandBytes = System.Text.Encoding.UTF8.GetBytes(commandString);
-                //MqttCommon.MqttRemoteSend(commandBytes);
+                if (function.bus_Data != null)
+                {
+                    try
+                    {
+                        Ins.myUdp.ReadBusData(function);
+                    }
+                    catch (Exception ex)
+                    {
+                        MainPage.Log($"鍙戦�佹暟鎹紓甯�: {ex.Message}");
+                    }
+                }
+                else
+                {
+                    var readKey = new Dictionary<string, string>();
+                    readKey.Add("sid", function.sid);
+
+                    var readDataObj = new GatewayAlinkReadObj()
+                    {
+                        id = Ins.msg_id.ToString(),
+                        objects = new List<Dictionary<string, string>>()
+                        {
+                            readKey
+                        },
+                         //time_stamp = 
+                    };
+                    var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(readDataObj);
+                    var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ReadStatus, functionControlDataJson);
+                    Ins.myUdp.SendLocalHdlLinkData(sendBytes);
+                }
             }
         }
+        /// <summary>
+        /// 鍙戦�丄鍗忚璇诲彇鍛戒护
+        /// </summary>
+        public void SendReadCommand(List<Dictionary<string, string>> keyValuePairs)
+        {
+            var readDataObj = new GatewayAlinkReadObj()
+            {
+                id = Ins.msg_id.ToString(),
+                objects = keyValuePairs,
+                //time_stamp = 
+            };
+            var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(readDataObj);
+            var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ReadStatus, functionControlDataJson);
+            Ins.myUdp.SendLocalHdlLinkData(sendBytes);
+        }
 
         /// <summary>
         /// 鎺у埗a鍗忚鍦烘櫙
diff --git a/HDL_ON/DAL/Mqtt/MqttClient.cs b/HDL_ON/DAL/Mqtt/MqttClient.cs
index 591e8a2..a4a1695 100644
--- a/HDL_ON/DAL/Mqtt/MqttClient.cs
+++ b/HDL_ON/DAL/Mqtt/MqttClient.cs
@@ -10,6 +10,7 @@
 using System.Security.Cryptography;
 using HDL_ON.DriverLayer;
 using HDL_ON.Entity;
+using HDL_ON.UI;
 
 namespace HDL_ON.DAL.Mqtt
 {
@@ -285,6 +286,161 @@
                                     else
                                     {
                                         //A鍗忚鏁版嵁澶勭悊
+                                        var revString = System.Text.Encoding.UTF8.GetString(e.ApplicationMessage.Payload);
+                                        var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<GatewayAlinkControlObj>(revString);
+                                        if (temp != null)
+                                        {
+                                            var allLocalFuntion = FunctionList.List.GetAllDeviceFunctionList();
+                                            foreach (var updateTemp in temp.objects)
+                                            {
+                                                bool hadChange = false;//鐘舵�佹湁鍙樺寲鍐嶆洿鏂扮晫闈�
+                                                var updataObj = allLocalFuntion.Find((obj) => obj.sid == updateTemp.sid);
+                                                if (updataObj != null)
+                                                {
+                                                    foreach (var attr in updateTemp.status)
+                                                    {
+                                                        foreach (var locatAttr in updataObj.attributes)
+                                                        {
+                                                            if (attr.key == locatAttr.key)
+                                                            {
+                                                                if (locatAttr.curValue.ToString() == attr.value)
+                                                                {
+                                                                    continue;
+                                                                }
+                                                                locatAttr.curValue = attr.value;
+                                                                hadChange = true;
+                                                            }
+                                                        }
+                                                    }
+                                                    if(!hadChange)//鐘舵�佹湁鍙樺寲鍐嶆洿鏂扮晫闈�
+                                                    {
+                                                        continue;
+                                                    }
+                                                    //鏇存柊鐣岄潰鐘舵��
+                                                    switch (updataObj.spk)
+                                                    {
+                                                        case SPK.LightSwitch:
+                                                            RelayPage.UpdataState(updataObj as Light);
+                                                            break;
+                                                        case SPK.LightDimming:
+                                                            var dimming = updataObj as Light;
+                                                            dimming.lastState = Language.StringByID(StringId.Brightness) + " : " + dimming.brightness + "%";
+                                                            DimmerPage.UpdataStates(dimming);
+                                                            break;
+                                                        case SPK.ElectricFan:
+                                                            var fan = updataObj as Fan;
+                                                            fan.lastState = Language.StringByID(StringId.Level) + " : " + fan.openLevel;
+                                                            FanPage.UpdataState(fan);
+                                                            break;
+                                                        case SPK.LightRGB:
+                                                            var rgb = updataObj as Light;
+                                                            rgb.lastState = Language.StringByID(StringId.Brightness) + " : " + rgb.brightness + "%";
+                                                            RGBPage.UpdataStates(rgb);
+                                                            break;
+                                                        case SPK.LightRGBW:
+                                                        case SPK.LightCCT:
+                                                            break;
+                                                        case SPK.CurtainSwitch:
+                                                            var curtain = updataObj as Curtain;
+                                                            curtain.lastState = curtain.trait_on_off.curValue.ToString() == "on" ? Language.StringByID(StringId.Open) : Language.StringByID(StringId.Close);
+                                                            CurtainModulePage.UpdataState(curtain);
+                                                            break;
+                                                        case SPK.CurtainTrietex:
+                                                            var trietex = updataObj as Curtain;
+                                                            trietex.lastState = Language.StringByID(StringId.Open) + trietex.percent + "%";
+                                                            MotorCurtainPage.UpdataState(trietex);
+                                                            break;
+                                                        case SPK.CurtainRoller:
+                                                            var roller = updataObj as Curtain;
+                                                            roller.lastState = Language.StringByID(StringId.Open) + roller.percent + "%";
+                                                            RollingShutterPage.UpdataState(roller);
+                                                            break;
+                                                        case SPK.CurtainShades:
+                                                            break;
+                                                        case SPK.AcStandard:
+                                                            var ac = updataObj as AC;
+                                                            ac.lastState = "";
+                                                            switch (ac.trait_mode.curValue.ToString())
+                                                            {
+                                                                case "cool":
+                                                                    ac.lastState = Language.StringByID(StringId.Cool);
+                                                                    break;
+                                                                case "heat":
+                                                                    ac.lastState = Language.StringByID(StringId.Heat);
+                                                                    break;
+                                                                case "dry":
+                                                                    ac.lastState = Language.StringByID(StringId.Dry);
+                                                                    break;
+                                                                case "auto":
+                                                                    ac.lastState = Language.StringByID(StringId.Auto);
+                                                                    break;
+                                                                case "fan":
+                                                                    ac.lastState = Language.StringByID(StringId.AirSupply);
+                                                                    break;
+                                                            }
+                                                            switch (ac.trait_fan.curValue.ToString())
+                                                            {
+                                                                case "high":
+                                                                    ac.lastState += " " + Language.StringByID(StringId.HighWindSpeed);
+                                                                    break;
+                                                                case "medium":
+                                                                    ac.lastState += " " + Language.StringByID(StringId.MiddleWindSpeed);
+                                                                    break;
+                                                                case "low":
+                                                                    ac.lastState += " " + Language.StringByID(StringId.LowWindSpeed);
+                                                                    break;
+                                                                case "auto":
+                                                                    ac.lastState += " " + Language.StringByID(StringId.Auto);
+                                                                    break;
+                                                            }
+                                                            ac.lastState += " " + ac.trait_temp.curValue + ac.tempUnitString;
+                                                            ACPage.UpdataStates(ac);
+                                                            break;
+                                                        case SPK.FloorHeatStandard:
+                                                            var fh = updataObj as FloorHeating;
+                                                            switch (fh.trait_mode.curValue)
+                                                            {
+                                                                case "normal":
+                                                                    fh.lastState = Language.StringByID(StringId.Normal);
+                                                                    break;
+                                                                case "day":
+                                                                    fh.lastState = Language.StringByID(StringId.Day);
+                                                                    break;
+                                                                case "night":
+                                                                    fh.lastState = Language.StringByID(StringId.Night);
+                                                                    break;
+                                                                case "timer":
+                                                                    fh.lastState = Language.StringByID(StringId.Auto);
+                                                                    break;
+                                                                case "away":
+                                                                    fh.lastState = Language.StringByID(StringId.Away);
+                                                                    break;
+                                                            }
+                                                            fh.lastState += " " + fh.trait_temp.curValue + fh.tempUnitString;
+                                                            FloorHeatingPage.UpdataStates(fh);
+                                                            break;
+                                                        case SPK.SensorPm25:
+                                                        case SPK.SensorCO2:
+                                                        case SPK.SensorTVOC:
+                                                        case SPK.SensorTemperature:
+                                                        case SPK.SensorHumidity:
+                                                            var sensor = updataObj as Sensor;
+                                                            EnvironmentalSciencePage.LoadEvent_UpdataStatus(sensor);
+                                                            break;
+                                                        case SPK.ElectricSocket:
+                                                            break;
+                                                        case SPK.ElectricTV:
+                                                            break;
+                                                        default:
+                                                            break;
+                                                    }
+                                                    HomePage.UpdataFunctionStates(updataObj);
+                                                    RoomPage.UpdataStates(updataObj);
+                                                    FunctionPage.UpdataStates(updataObj);
+                                                    ClassificationPage.UpdataInfo(updataObj);
+                                                }
+                                            }
+                                        }
                                     }
                                 }
                             }
@@ -308,11 +464,7 @@
                             IfNeedReadAllDeviceStatus = true;
                             Utlis.WriteLine($"============>Mqtt杩滅▼杩炴帴鎴愬姛");
                             SendPushSignOut();
-
-                            //if (Control.Ins.IsRemote) {
-                            //    //Utlis.ShowAppLinkStatus (AppLinkStatus.CloudLink);
-                            //    MainPage.AddTip (Language.StringByID (SimpleControl.R.MyInternationalizationString.LinkSuccess));
-                            //}
+                            FunctionList.List.ReadAllFunctionStatus();
                         });
                     }
                     #endregion
diff --git a/HDL_ON/Entity/DB_ResidenceData.cs b/HDL_ON/Entity/DB_ResidenceData.cs
index f733b0e..0d6b029 100644
--- a/HDL_ON/Entity/DB_ResidenceData.cs
+++ b/HDL_ON/Entity/DB_ResidenceData.cs
@@ -289,42 +289,6 @@
         #region 鍔熻兘鏁版嵁
         public static FunctionList functionList = FunctionList.List;
 
-        /// <summary>
-        /// 鍒锋柊浣忓畢閲岄潰鐨勬悳绱㈣澶囩姸鎬�
-        /// </summary>
-        public void RefreshResidenceFunctionStatus()
-        {
-            new Thread(() =>
-            {
-                try
-                {
-                    foreach (var function in functionList.GetAllDeviceFunctionList())
-                    {
-                        Thread.Sleep(100);
-                        switch (function.functionCategory)
-                        {
-                            case FunctionCategory.Light:
-                            case FunctionCategory.Electrical:
-                            case FunctionCategory.SwitchDevice:
-                            case FunctionCategory.Curtain:
-                            case FunctionCategory.Thermostat:
-                                if (DB_ResidenceData.residenceData.GatewayType == 0)
-                                {
-                                    DriverLayer.Control.Ins.SendReadCommand(function);
-                                }
-                                break;
-                        }
-                    }
-                }
-                catch (Exception ex)
-                {
-                    MainPage.Log($"Refresh Residence Function Status Error : {ex.Message}");
-                }
-            })
-            { IsBackground = true }.Start();
-        }
-
-
         #endregion
 
         #region oid鍒楄〃 a鍗忚杞琤us鍗忚鎺у埗浣跨敤
diff --git a/HDL_ON/Entity/Function/Function.cs b/HDL_ON/Entity/Function/Function.cs
index 1e58983..2a722a1 100644
--- a/HDL_ON/Entity/Function/Function.cs
+++ b/HDL_ON/Entity/Function/Function.cs
@@ -30,7 +30,7 @@
         public Function()
         {
         }
-      
+
 
         #region base info
         /// <summary>
@@ -43,10 +43,10 @@
         /// 浜у搧鏃堕棿鎴筹細4bytes	浠�2020骞�1鏈�1鏃ョ畻鍑虹殑鏃堕棿鎴�0.1s涓哄崟浣� 
         /// 浜у搧绫诲埆锛�01	璋冨厜鍣ㄣ��02 缁х數鍣ㄣ��03	骞叉帴鐐规ā鍧椼��04	浼犳劅鍣ㄣ��05 闈㈡澘
         /// 鐗╂ā鍨嬬被鍨嬶細
-		///     01	寮�鍏崇被锛�01 寮�鍏炽��02 鎻掑骇銆�03	
-		///     02	鐓ф槑锛� 01 寮�鍏炽��02	璋冨厜銆�03	鑹叉俯銆�04	LED
+        ///     01	寮�鍏崇被锛�01 寮�鍏炽��02 鎻掑骇銆�03	
+        ///     02	鐓ф槑锛� 01 寮�鍏炽��02	璋冨厜銆�03	鑹叉俯銆�04	LED
         ///     03	閬槼锛� 01	绐楀笜鐢垫満銆�02 鐧惧彾绐椼��03 寮�鍚堝笜銆�04 鍗峰笜
-		///     04	鎭掓俯鍣細01 绌鸿皟銆�02 鍦版殩銆�03 姣涚粏绌鸿皟
+        ///     04	鎭掓俯鍣細01 绌鸿皟銆�02 鍦版殩銆�03 姣涚粏绌鸿皟
         ///     05	鏂伴		
         ///     06	褰遍煶		
         ///     07	闊充箰		
@@ -234,7 +234,7 @@
         /// </summary>
         public int fixedSerialNumber = int.MaxValue;
 
-        public string GetBusId ()
+        public string GetBusId()
         {
             string busId = "";
             if (bus_Data != null)
@@ -251,7 +251,7 @@
         public string GetRoomListName()
         {
             string roomNameList = "";
-            foreach(var roomId in roomIds)
+            foreach (var roomId in roomIds)
             {
                 var findRoom = DB_ResidenceData.residenceData.Rooms.Find(obj => obj.uid == roomId);
                 if (findRoom == null)
@@ -287,7 +287,7 @@
         public void SaveFunctionData()
         {
             var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this));
-            FileUtils.WriteFileByBytes( savePath, ssd);
+            FileUtils.WriteFileByBytes(savePath, ssd);
             MainPage.Log($"Save FunctionData {this.functionType} : {this.sid}");
         }
 
@@ -323,7 +323,7 @@
             var acd = new AlinkControlData();
             acd.sid = sid;
             var aca = new AlinkControlAttributes();
-            foreach(var dic in commandDictionary)
+            foreach (var dic in commandDictionary)
             {
                 aca.key = dic.Key;
                 aca.value = dic.Value;
@@ -338,7 +338,7 @@
         /// 鑾峰彇Api鎺у埗鏁版嵁
         /// </summary>
         /// <returns></returns>
-        public ApiAlinkControlActionObj GetApiControlData(Dictionary<string,string> keyValues)
+        public ApiAlinkControlActionObj GetApiControlData(Dictionary<string, string> keyValues)
         {
             ApiAlinkControlActionObj aaao = new ApiAlinkControlActionObj();
             aaao.deviceId = this.deviceId;
@@ -388,6 +388,16 @@
         public string id = "";
     }
     /// <summary>
+    /// 鏈湴鐘舵�佽鍙�
+    /// A鍗忚鐘舵�佽鍙栨牸寮忓璞�
+    /// </summary>
+    public class GatewayAlinkReadObj
+    {
+        public string id = "0";
+        public List<Dictionary<string, string>> objects = new List<Dictionary<string, string>>();
+        public string time_stamp = "";
+    }
+    /// <summary>
     /// A鍗忚鎺у埗鏁版嵁
     /// </summary>
     public class AlinkControlData
diff --git a/HDL_ON/Entity/FunctionList.cs b/HDL_ON/Entity/FunctionList.cs
index a48047a..a7ef6e8 100644
--- a/HDL_ON/Entity/FunctionList.cs
+++ b/HDL_ON/Entity/FunctionList.cs
@@ -1,6 +1,7 @@
 锘縰sing System;
 using System.Collections.Generic;
 using System.Linq;
+using System.Threading;
 using HDL_ON.DAL;
 using HDL_ON.DAL.Server;
 
@@ -503,6 +504,53 @@
             FileUtils.DeleteFile(delTemp.savePath);
         }
 
+        /// <summary>
+        /// 璇诲彇鍏ㄩ儴鍔熻兘鐨勭姸鎬�
+        /// </summary>
+        public void ReadAllFunctionStatus()
+        {
+            new Thread(() =>
+            {
+                try
+                {
+                    if (DB_ResidenceData.residenceData.GatewayType == 0)
+                    {
+                        foreach (var function in GetAllDeviceFunctionList())
+                        {
+                            switch (function.functionCategory)
+                            {
+                                case FunctionCategory.Light:
+                                case FunctionCategory.Electrical:
+                                case FunctionCategory.SwitchDevice:
+                                case FunctionCategory.Curtain:
+                                case FunctionCategory.Thermostat:
+                                    DriverLayer.Control.Ins.SendReadCommand(function);
+                                    break;
+                            }
+                        }
+                    }
+                    else
+                    {
+                        List<Dictionary<string, string>> keyValuePairs = new List<Dictionary<string, string>>();
+                        foreach (var function in GetAllDeviceFunctionList())
+                        {
+                            var kv = new Dictionary<string, string>();
+                            kv.Add("sid", function.sid);
+                            keyValuePairs.Add(kv);
+                        }
+                        DriverLayer.Control.Ins.SendReadCommand(keyValuePairs);
+                    }
+                }
+                catch (Exception ex)
+                {
+                    MainPage.Log($"Refresh Residence Function Status Error : {ex.Message}");
+                }
+            })
+            { IsBackground = true }.Start();
+
+
+        }
+
     }
 
 }
diff --git a/HDL_ON/UI/UI2/1-HomePage/HomePage.cs b/HDL_ON/UI/UI2/1-HomePage/HomePage.cs
index 470d76d..b4a9572 100644
--- a/HDL_ON/UI/UI2/1-HomePage/HomePage.cs
+++ b/HDL_ON/UI/UI2/1-HomePage/HomePage.cs
@@ -144,7 +144,8 @@
                     System.Threading.Tasks.Task.Run(() =>
                         {
                             //DriverLayer.Control.Ins.SearchLoaclGateway();
-                            MainPage.InitializationData();
+                            //MainPage.InitializationData();
+                            DriverLayer.Control.Ins.IsRemote = true;
                         });
                 };
 #endif
diff --git a/HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPageBLL.cs b/HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPageBLL.cs
index 5007461..e5f1ef4 100644
--- a/HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPageBLL.cs
+++ b/HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPageBLL.cs
@@ -47,7 +47,6 @@
                 try
                 {
                     var backuplist = FileUtils.ReadFiles();
-                    FileUtils.DeleteRegionFiles(oldRegionRootPath);
                     //绉诲姩鏂囦欢
                     foreach (var fileName in backuplist)
                     {
@@ -58,6 +57,7 @@
                             MainPage.Log("move file : " + fileName);
                         }
                     }
+                    FileUtils.DeleteRegionFiles(oldRegionRootPath);
                 }
                 catch (Exception ex)
                 {
diff --git a/HDL_ON/UI/UI2/UserPage.cs b/HDL_ON/UI/UI2/UserPage.cs
index fca117f..2ccc7fb 100644
--- a/HDL_ON/UI/UI2/UserPage.cs
+++ b/HDL_ON/UI/UI2/UserPage.cs
@@ -129,8 +129,6 @@
                 ContextView.AddChidren(homePage);
                 homePage.LoadPage();
 
-                //鍒锋柊鍔熻兘鐘舵��
-                DB_ResidenceData.residenceData.RefreshResidenceFunctionStatus();
                 //娉ㄥ唽鎺ㄩ�両D
                 RegisteredPush();
 

--
Gitblit v1.8.0