JLChen
2021-01-05 f500e14c0a994487070380c50c85e0929cbc8e63
Crabtree/SmartHome/UI/SimpleControl/CommonPage.cs
@@ -26,7 +26,7 @@
                        //127.0.0.1
                        if (ip == "0.0.0.0") {
                            try {
                                ip = System.Net.Dns.GetHostEntry ("homeautomation.havells.com").AddressList [0].ToString ();
                                ip = System.Net.Dns.GetHostEntry ("smarth-api.havells.com").AddressList [0].ToString ();
                            } catch { }
                        }
                        return new System.Net.IPEndPoint (System.Net.IPAddress.Parse (ip), 9999);
@@ -103,7 +103,7 @@
                    foreach (var bin in usefullBytes) {
                        pushBytesString += bin + ",";
                    }
                    Console.WriteLine (pushBytesString);
                    Utlis.WriteLine (pushBytesString);
#endif
                    if (DeviceList.Find ((l) => { return l.SubnetID == subnetID && l.DeviceID == deviceID; }) != null) {
                        return;
@@ -122,7 +122,7 @@
                            continue;
                        }
                        DeviceType deviceType_wireless = (DeviceType)(usefullBytes [i] * 256 + usefullBytes [i + 1]);
                        Console.WriteLine (deviceType_wireless.ToString ());
                        Utlis.WriteLine (deviceType_wireless.ToString ());
                        if (noRemake || MyEncodingGB2312.GetString (usefullBytes, 2, 20).Trim ('\0') == "") {
                            byte [] ddd = CommonPage.MyEncodingGB2312.GetBytes (deviceType_wireless.ToString () + "-" + subnetID.ToString () + "-" + deviceID.ToString ());
                            byte [] newddd = new byte [20];
@@ -256,7 +256,8 @@
                    }
                    break;
                case Command.SetSingleLightACK:
                    Console.WriteLine ("Command.SetSingleLightACK");
                    //Utlis.WriteLine ($"Command.SetSingleLightACK: subnetID:{subnetID} deviceID:{deviceID} 回路:{usefullBytes [0]}");
                    //Utlis.WriteLine ("Command.SetSingleLightACK");
                    foreach (var room in Room.Lists) {
                        var common = room.DeviceList.Find ((obj) => obj.CommonLoopID == subnetID.ToString () + "_" + deviceID.ToString () + "_" + usefullBytes [0].ToString ());
                        if (common != null) {
@@ -279,7 +280,14 @@
                                    hadBeUpdate = false;
                                (common as LightDimming).CurrentBrightness = usefullBytes [2];
                            } else if (common.Type == DeviceType.FanModule) {
                                //if ((common as FanModule).Switch == usefullBytes [2]) {
                                //    hadBeUpdate = false;
                                //}
                                (common as FanModule).Switch = usefullBytes [2];
                                if (usefullBytes [2] != 0)
                                    (common as FanModule).WindSpeed = usefullBytes [2];
                                //(common as FanModule).Switch = usefullBytes [2];
                            } else if (common.Type == DeviceType.LightMixSwitch) {
                                if ((common as LightMixSwitch).CurrentBrightness == usefullBytes [2])
                                    hadBeUpdate = false;
@@ -312,6 +320,7 @@
                                if (!string.IsNullOrEmpty (room.Name))
                                    UserDeviceToLight.UpdateBrighingCount (updateFlag);
                                if (hadBeUpdate) {
                                    UserRoom.UpdataDeviceStatus (common);
                                    UserLightPage.UpdateStatus (updateFlag, usefullBytes [2]);
                                    UserDeviceToLight.UpdateStatus (updateFlag, usefullBytes [2]);
@@ -339,18 +348,20 @@
                                    UserDeviceToLight.UpdataEnergy (usefullBytes [0], updateFlag, usefullBytes [2] * 256 + usefullBytes [3]);
                                    UserRoom.UpdataEnergy (usefullBytes [0], common.Type + "_" + updateFlag, usefullBytes [2] * 256 + usefullBytes [3]);
                                    break;
                                } else if (usefullBytes [0] == 11) {
                                    UserDeviceToSocket.UpdataEnergy (usefullBytes [0], updateFlag, usefullBytes [2] * 256 * 256 * 256 + usefullBytes [3] * 256 * 256 + usefullBytes [4] * 256 + usefullBytes [5]);
                                    UserDeviceToLight.UpdataEnergy (usefullBytes [0], updateFlag, usefullBytes [2] * 256 * 256 * 256 + usefullBytes [3] * 256 * 256 + usefullBytes [4] * 256 + usefullBytes [5]);
                                    UserRoom.UpdataEnergy (usefullBytes [0], common.Type + "_" + updateFlag, usefullBytes [2] * 256 * 256 * 256 + usefullBytes [3] * 256 * 256 + usefullBytes [4] * 256 + usefullBytes [5]);
                                    break;
                                }
                                //2020-07-01 客户提出隐藏kwh
                                //else if (usefullBytes [0] == 11) {
                                //    UserDeviceToSocket.UpdataEnergy (usefullBytes [0], updateFlag, usefullBytes [2] * 256 * 256 * 256 + usefullBytes [3] * 256 * 256 + usefullBytes [4] * 256 + usefullBytes [5]);
                                //    UserDeviceToLight.UpdataEnergy (usefullBytes [0], updateFlag, usefullBytes [2] * 256 * 256 * 256 + usefullBytes [3] * 256 * 256 + usefullBytes [4] * 256 + usefullBytes [5]);
                                //    UserRoom.UpdataEnergy (usefullBytes [0], common.Type + "_" + updateFlag, usefullBytes [2] * 256 * 256 * 256 + usefullBytes [3] * 256 * 256 + usefullBytes [4] * 256 + usefullBytes [5]);
                                //    break;
                                //}
                            }
                                int dddd = usefullBytes [0] & 0x3F;
                            int dddd = usefullBytes [0] & 0x3F;
                            // 0xXX:公司内部协议对应的序号
                            // common.Type:对应的是编辑软件的序号(没有一一对应,是为了将相近的调整在一起,方便客户使用)
@@ -704,7 +715,7 @@
                            case "DISPMODE":
                                if (7 <= backResult [1].Length) {
                                    music.playMode = int.Parse (backResult [1].Substring (6, 1));
                                    System.Console.WriteLine ("DISPMODE=====" + music.playMode);
                                    Utlis.WriteLine ("DISPMODE=====" + music.playMode);
                                }
                                break;
                            }
@@ -966,7 +977,56 @@
                        //});
                        #endregion
                        break;
                    case DeviceType.OnePortMqttFR:
                        #region
                        OnePortMqttFR onePortMqttFR = new OnePortMqttFR ();
                        string mqttFRPath = "Equipment_" + typeof (OnePortMqttFR).Name + "_" + subnetID + "_" + deviceID;
                        var bytesmqttFR = IO.FileUtils.ReadFile (mqttFRPath);
                        if (bytesmqttFR.Length > 1) {
                            onePortMqttFR = Newtonsoft.Json.JsonConvert.DeserializeObject<OnePortMqttFR> (MyEncodingUTF8.GetString (bytesmqttFR));
                        }
                        onePortMqttFR.SubnetID = subnetID;
                        onePortMqttFR.DeviceID = deviceID;
                        onePortMqttFR.ChNumberCount = usefullBytes [4];
                        onePortMqttFR.MAC = byteToHex16 (usefullBytes [5]) + "." + byteToHex16 (usefullBytes [6]) + "." + byteToHex16 (usefullBytes [7]) + "." + byteToHex16 (usefullBytes [8]) + "." + byteToHex16 (usefullBytes [9]) + "." + byteToHex16 (usefullBytes [10]) + "." + byteToHex16 (usefullBytes [11]) + "." + byteToHex16 (usefullBytes [12]);
                        onePortMqttFR.Name = MyEncodingGB2312.GetString (usefullBytes, 13, 20).Trim ('\0');//=============
                        onePortMqttFR.IPAddress = usefullBytes [33] + "." + usefullBytes [34] + "." + usefullBytes [35] + "." + usefullBytes [36];
                        onePortMqttFR.RouteIPAddress = usefullBytes [37] + "." + usefullBytes [38] + "." + usefullBytes [39] + "." + usefullBytes [40];
                        onePortMqttFR.IPMAC = usefullBytes [41] + "." + usefullBytes [42] + "." + usefullBytes [43] + "." + usefullBytes [44] + "." + usefullBytes [45] + "." + usefullBytes [46];
                        onePortMqttFR.SubnetMask = usefullBytes [47] + "." + usefullBytes [48] + "." + usefullBytes [49] + "." + usefullBytes [50];
                        onePortMqttFR.DHCP = usefullBytes [51] == 0 ? false : true;
                        if (usefullBytes.Length == 97) {
                            onePortMqttFR.AESEnable = usefullBytes [53] == 0 ? false : true;
                            onePortMqttFR.AESPassword = MyEncodingGB2312.GetString (usefullBytes, 54, 16).Trim ('\0');
                            onePortMqttFR.DNSEnable = usefullBytes [70] == 0 ? false : true;
                            onePortMqttFR.DNSAddress = usefullBytes [71] + "." + usefullBytes [72] + "." + usefullBytes [73] + "." + usefullBytes [74];
                            onePortMqttFR.DNSAlternateAddress = usefullBytes [75] + "." + usefullBytes [76] + "." + usefullBytes [77] + "." + usefullBytes [78];
                            onePortMqttFR.WirelessBand = usefullBytes [79];
                            onePortMqttFR.WirelessChannel = usefullBytes [80];
                            onePortMqttFR.WirelessPassword = MyEncodingGB2312.GetString (usefullBytes, 81, 16).Trim ('\0');
                        }
                        GateWayList.Add (onePortMqttFR);
                        if (onePortMqttFR.Name == "") {
                            onePortMqttFR.Name = onePortMqttFR.CommonLoopID.ToString ();
                        }
                        Application.RunOnMainThread (() => {
                            GuideAddGateway.InitGatewayRowView (onePortMqttFR);
                        });
                        //IO.FileUtils.SaveEquipmentMessage (onePortWirelessFR);
                        //System.Threading.Tasks.Task.Run (() => {
                        //    if (string.IsNullOrEmpty (UserConfig.Current.RemoteModeFile)) {
                        //        var gatewayBytes = Control.ControlBytesSendHasReturn (Command.ReadGateWayModelInfo, onePortWirelessFR.SubnetID, onePortWirelessFR.DeviceID, new byte [] { });
                        //        if (gatewayBytes!=null&&gatewayBytes [0] == 2) {
                        //            UserConfig.Current.RemoteModeFile = "Equipment_" + onePortWirelessFR.Type.ToString () + "_" + onePortWirelessFR.SubnetID.ToString () + "_" + onePortWirelessFR.DeviceID.ToString ();
                        //            UserConfig.Current.SaveUserConfig ();
                        //        }
                        //    }
                        //});
                        #endregion
                        break;
                    case DeviceType.OnePortWirelessFR:
                        #region
                        OnePortWirelessFR onePortWirelessFR = new OnePortWirelessFR ();
                        string wirelessPath = "Equipment_" + typeof (OnePortWirelessFR).Name + "_" + subnetID + "_" + deviceID;
@@ -1150,7 +1210,7 @@
                            continue;
                        }
                        deviceType = (DeviceType)(usefullBytes [iReadDeviceModulACK] * 256 + usefullBytes [iReadDeviceModulACK + 1]);
                        Console.WriteLine (deviceType.ToString ());
                        Utlis.WriteLine (deviceType.ToString ());
                        string devcieTempName = MyEncodingGB2312.GetString (usefullBytes, 2, 20).Trim ('\0');
                        if (notHasRemake || MyEncodingGB2312.GetString (usefullBytes, 2, 20).Trim ('\0') == "") {
                            devcieTempName = deviceType.ToString ().Replace (DeviceType.Sensor.ToString (), "") + "-" + deviceID.ToString ();
@@ -1183,7 +1243,7 @@
                            common.isMixBox = true;
                        } else {
                            Application.RunOnMainThread (() => {
                                MainPage.Loading.Start ("Search for device:" + devcieTempName);
                                //MainPage.Loading.Start ("Search for device:" + devcieTempName);
                                ++searchTotal;
                                GuideSettingGateway.InitSearchDeviceList (common);
                                for (int k = 1; k <= common.LoopCount; k++) {
@@ -1216,6 +1276,14 @@
                        //} else if (deviceType1.ToString ().Contains ("Switch")) {
                        //    devcieLoopName = "Relay SW" + usefullBytes [2].ToString ();
                        //}
                        //2020-07-03 如果是红外模块类型,备注为空的话,默认为TV名字
                        if (deviceType1 == DeviceType.InfraredMode) {
                            devcieLoopName = "TV " + usefullBytes [2].ToString ();
                        } else if (deviceType1 == DeviceType.ACInfrared) {
                            //2020-08-28 如果是红外空调类型,备注为空的话,默认为AC名字
                            devcieLoopName = "AC " + usefullBytes [2].ToString ();
                        }
                        byte [] ddd = CommonPage.MyEncodingGB2312.GetBytes (devcieLoopName);
                        byte [] newddd = new byte [20];
                        Array.Copy (ddd, 0, newddd, 0, 20 < ddd.Length ? 20 : ddd.Length);
@@ -1534,7 +1602,7 @@
                        wirelessPanelButtonKey.Name = MyEncodingGB2312.GetString (usefullBytes, 3, 20).Trim ('\0');
                        wirelessPanelButtonKey.Mode = usefullBytes [23];
                        ButtonBkeyModelList.Add (wirelessPanelButtonKey.Mode);
                        System.Console.WriteLine ("读取面板按键:回路号:" + wirelessPanelButtonKey.LoopID + "  模式:" + wirelessPanelButtonKey.Mode);
                        Utlis.WriteLine ("读取面板按键:回路号:" + wirelessPanelButtonKey.LoopID + "  模式:" + wirelessPanelButtonKey.Mode);
                        IO.FileUtils.SaveEquipmentMessage (wirelessPanelButtonKey, wirelessPanelButtonKey.LoopID.ToString ());
                        #endregion
                        break;
@@ -2011,7 +2079,7 @@
                    //01 01 59(+30) 02 0D 03 64 00 01 
                    break;
                case Command.AssignedAddressACK:
                    Console.WriteLine (usefullBytes [0].ToString ());
                    Utlis.WriteLine (usefullBytes [0].ToString ());
                    if (usefullBytes [0] == 3) {
                        dt = DateTime.Now;
                    } else if (usefullBytes [0] == 4) {
@@ -2019,24 +2087,24 @@
                    }
                    break;
                case Command.Remote3thACK:
                    Console.WriteLine (usefullBytes [0]);
                    Utlis.WriteLine (usefullBytes [0]);
                    break;
                case Command.DownloadInfraredACK:
                    string loopID_IM = usefullBytes [0] < 10 ? "0" + usefullBytes [0].ToString () : usefullBytes [0].ToString ();
                    if ((InfraredType)usefullBytes [2] != InfraredType.AC) {
                        if ((InfraredType)usefullBytes [2] == InfraredType.NULL) {
                            Console.WriteLine ("NULL-------------");
                            Utlis.WriteLine ("NULL-------------");
                        }
                        string filePath = "Equipment_InfraredMode_" + subnetID + "_" + deviceID + "_" + loopID_IM;
                        InfraredMode im = Newtonsoft.Json.JsonConvert.DeserializeObject<InfraredMode> (CommonPage.MyEncodingUTF8.GetString (IO.FileUtils.ReadFile (filePath)));
                        im.InfraredType = (InfraredType)usefullBytes [2];
                        Console.WriteLine (im.InfraredType.ToString () + "------------------------------------------------------");
                        Utlis.WriteLine (im.InfraredType.ToString () + "------------------------------------------------------");
                        IO.FileUtils.SaveEquipmentMessage (im, im.LoopID.ToString ());
                    }
                    break;
                }
            } catch (Exception ex) {
                Console.WriteLine ("Packet_ReceiveEvent:" + ex.ToString ());
                Utlis.WriteLine ("Packet_ReceiveEvent:" + ex.ToString ());
            }
        }
@@ -2053,6 +2121,85 @@
            }
            return s;//
        }
        //static void httpListener_EventHandler (System.Collections.Specialized.NameValueCollection nameValueCollection, System.IO.Stream outputStream, System.IO.Stream inputStream)
        //{
        //    //if (!isHttpListenerStart) {
        //    //    return;
        //    //}
        //    try {
        //        //System.Net.WebClient webClient = new System.Net.WebClient ();
        //        //byte []bytes= webClient.DownloadData("http://ip:6001/GetAllFiles");
        //        //               System.Text.Encoding.UTF8.GetString (bytes);
        //        //List<string> list = new List<string> ();
        //        //foreach(string s in list) {
        //        //    byte [] bytes = webClient.DownloadData ("http://ip:6001/Get"+s);
        //        //    FileUtils.WriteFileByBytes (s, bytes);
        //        //}
        //        if (nameValueCollection ["Command"] != null && nameValueCollection ["Command"].StartsWith ("Get")) {
        //            string tempFileName = nameValueCollection ["Command"].Replace ("Get", "");
        //            if ("AllFiles" == tempFileName) {
        //                byte [] bytes = System.Text.Encoding.UTF8.GetBytes (Newtonsoft.Json.JsonConvert.SerializeObject (IO.FileUtils.ReadFiles ()));
        //                outputStream.Write (bytes, 0, bytes.Length);
        //                outputStream.Flush ();
        //            } else {
        //                byte [] bytes;
        //                if (!IO.FileUtils.Exists (tempFileName)) {
        //                    bytes = System.Text.Encoding.UTF8.GetBytes ("文件名不存在!");
        //                    outputStream.Write (bytes, 0, bytes.Length);
        //                    outputStream.Flush ();
        //                    return;
        //                }
        //                System.IO.FileStream fs = new System.IO.FileStream (Application.RootPath + tempFileName, System.IO.FileMode.Open);
        //                bytes = new byte [fs.Length];
        //                fs.Read (bytes, 0, bytes.Length);
        //                fs.Close ();
        //                outputStream.Write (bytes, 0, bytes.Length);
        //                outputStream.Flush ();
        //            }
        //        } else if (nameValueCollection ["Command"].StartsWith ("Upload")) {
        //            string path = Application.RootPath + nameValueCollection ["Command"].Replace ("Upload", "");
        //            string dePath = nameValueCollection ["Command"].Replace ("Upload", "");
        //            if (dePath.StartsWith ("Room_")) {
        //                new Room ().Add (dePath);
        //            }
        //            if (dePath.Split ('_').Length == 5) {
        //                if (dePath.Split ('_') [1] == (typeof (OnePortBus).Name) || dePath.Split ('_') [1] == (typeof (OnePortWirelessFR).Name)) {
        //                    UserConfig.Instance.RemoteModeFile = dePath;
        //                    UserConfig.Instance.SaveUserConfig ();
        //                }
        //                if (dePath.Split ('_') [1] == (typeof (SecurityModul).Name)) {
        //                    if (UserConfig.Instance.HideDeviceTypes.Contains ((R.MyInternationalizationString.Security))) {
        //                        UserConfig.Instance.HideDeviceTypes.Remove (R.MyInternationalizationString.Security);
        //                        UserConfig.Instance.SaveUserConfig ();
        //                    }
        //                }
        //            }
        //            if (dePath.Split ('_').Length == 2 && dePath.StartsWith ("GlobalScene")) {
        //                var sceneFileList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<string>> (System.Text.Encoding.UTF8.GetString (IO.FileUtils.ReadFile (Scene.GlobalSceneFilePath)));
        //                if (!sceneFileList.Contains (dePath)) {
        //                    sceneFileList.Add (dePath);
        //                    IO.FileUtils.WriteFileByBytes (Scene.GlobalSceneFilePath, CommonPage.MyEncodingUTF8.GetBytes (Newtonsoft.Json.JsonConvert.SerializeObject (sceneFileList)));
        //                }
        //            }
        //            //Utlis.WriteLine ("接收"+path);
        //            FileUtils.WriteFileByInputStream (path, inputStream);
        //            Common common = Newtonsoft.Json.JsonConvert.DeserializeObject<Common> (CommonPage.MyEncodingUTF8.GetString (IO.FileUtils.ReadFile (path)));
        //            if (common.DeviceTextID == R.MyInternationalizationString.ElectricalControl) {
        //                UserConfig.Instance.SocketList.Add (common.CommonLoopID);
        //            }
        //        } else {
        //            byte [] bytes = System.Text.Encoding.UTF8.GetBytes ("请求命令无效!");
        //            outputStream.Write (bytes, 0, bytes.Length);
        //            outputStream.Flush ();
        //        }
        //    } catch (Exception ex) {
        //        Utlis.WriteLine ("httpListener_EventHandler" + ex.ToString ());
        //    }
        //}
        static void httpListener_EventHandler (System.Collections.Specialized.NameValueCollection nameValueCollection, System.IO.Stream outputStream, System.IO.Stream inputStream)
        {
@@ -2093,9 +2240,11 @@
                } else if (nameValueCollection ["Command"].StartsWith ("Upload")) {
                    string path = Application.RootPath + nameValueCollection ["Command"].Replace ("Upload", "");
                    string dePath = nameValueCollection ["Command"].Replace ("Upload", "");
                    if (dePath.StartsWith ("Room_")) {
                    if (dePath.Contains ("Room_")) {
                        new Room ().Add (dePath);
                    }
                    if (dePath.Split ('_').Length == 5) {
                        if (dePath.Split ('_') [1] == (typeof (OnePortBus).Name) || dePath.Split ('_') [1] == (typeof (OnePortWirelessFR).Name)) {
                            UserConfig.Instance.RemoteModeFile = dePath;
@@ -2107,6 +2256,7 @@
                                UserConfig.Instance.SaveUserConfig ();
                            }
                        }
                    }
                    if (dePath.Split ('_').Length == 2 && dePath.StartsWith ("GlobalScene")) {
@@ -2127,8 +2277,8 @@
                    outputStream.Flush ();
                }
            } catch (Exception ex) {
                Console.WriteLine ("httpListener_EventHandler" + ex.ToString ());
            }
                Utlis.WriteLine ("httpListener_EventHandler" + ex.ToString ());
            }
        }
        /// <summary>