From fefffbc9451499013b7af2a15fac0ccc3b394364 Mon Sep 17 00:00:00 2001
From: wxr <464027401@qq.com>
Date: 星期一, 15 四月 2024 16:31:25 +0800
Subject: [PATCH] 去掉Siri先
---
HDL_ON/DAL/DriverLayer/Control.cs | 551 ++++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 429 insertions(+), 122 deletions(-)
diff --git a/HDL_ON/DAL/DriverLayer/Control.cs b/HDL_ON/DAL/DriverLayer/Control.cs
index 08092a6..5195709 100644
--- a/HDL_ON/DAL/DriverLayer/Control.cs
+++ b/HDL_ON/DAL/DriverLayer/Control.cs
@@ -1,29 +1,16 @@
锘縰sing System;
using System.Collections.Generic;
using System.Text;
+using HDL_ON.DAL.Mqtt;
using HDL_ON.DAL.Server;
using HDL_ON.Entity;
using HDL_ON.UI;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
using Shared;
namespace HDL_ON.DriverLayer
{
- /// <summary>
- /// 閫氳鏂瑰紡
- /// </summary>
- public enum CommunicationMode
- {
- none,
- /// <summary>
- /// 鏈湴udp
- /// </summary>
- local_BusUdp,
- /// <summary>
- /// 鏈湴tcp瀹㈡埛绔�
- /// </summary>
- tcp_local_client,
- }
-
public class Control
{
@@ -43,6 +30,27 @@
/// 璁板綍鎺ユ敹鍒扮殑娑堟伅锛屾柟渚縵b鐨勫伐绋嬪笀璋冭瘯浠栦滑鐨勮澶�
/// </summary>
public List<string> MsgInfoList = new List<string>();
+ private bool _LocalTcpClientLogin = false;
+ /// <summary>
+ /// 鏈湴tcp瀹㈡埛绔繛鎺ユ槸鍚︽垚鍔�
+ /// 鏄惁鐧诲綍缃戝叧鎴愬姛
+ /// </summary>
+ public bool LocalTcpClientLogin
+ {
+ get
+ {
+ return _LocalTcpClientLogin;
+ }
+ set
+ {
+ _LocalTcpClientLogin = value;
+ if (!value)
+ {
+ loginGatewayThread?.Abort();
+ loginGatewayThread = null;
+ }
+ }
+ }
int _msg_id = 1;
/// <summary>
@@ -76,8 +84,10 @@
/// <summary>
/// 鍒ゆ柇鏄惁鏈湴鍔犲瘑骞朵笖鍔犲瘑key涓嶄负绌�
/// </summary>
- public bool IsLocalEncryptAndGetAesKey {
- get {
+ public bool IsLocalEncryptAndGetAesKey
+ {
+ get
+ {
return IsLocalEncrypt && (!string.IsNullOrEmpty(DB_ResidenceData.Instance.CurrentRegion.localSecret));
}
}
@@ -115,6 +125,10 @@
HomePage.LoadEvent_CheckLinkStatus();
}
}
+ else
+ {
+ MainPage.Log($"鐘舵�佷竴鑷达紝涓嶆洿鏂版暟鎹�(鏈湴)");
+ }
}
}
bool _GatewayOnline_Cloud = false;
@@ -129,45 +143,64 @@
}
set
{
- if (_GatewayOnline_Cloud != value)
+ try
{
- _GatewayOnline_Cloud = value;
- if(GatewayOnline_Local)
+ if (_GatewayOnline_Cloud != value)
{
- return;
- }
- if (value)
- {
- if (DB_ResidenceData.Instance.HomeGateway == null)
+ _GatewayOnline_Cloud = value;
+ if (GatewayOnline_Local)
{
return;
}
- if (!DB_ResidenceData.Instance.HomeGateway.gatewayStatus)//杩滅▼鎯呭喌涓嬶紝缃戝叧鏈摼鎺ユ湇鍔″櫒涓嶈兘淇敼涓婚〉缃戝叧鐘舵��
+ if (value)
{
+ if (DB_ResidenceData.Instance.HomeGateway == null)
+ {
+ return;
+ }
+ if (!DB_ResidenceData.Instance.HomeGateway.gatewayStatus)//杩滅▼鎯呭喌涓嬶紝缃戝叧鏈摼鎺ユ湇鍔″櫒涓嶈兘淇敼涓婚〉缃戝叧鐘舵��
+ {
+ new System.Threading.Thread(() =>
+ {
+ System.Threading.Thread.Sleep(3000);
+ var pm = new DAL.Server.HttpServerRequest();
+ pm.GetGatewayInfo();
+ })
+ { IsBackground = true }.Start();
+ return;
+ }
+ //淇敼涓婚〉杩炴帴鐘舵��
+ HomePage.LoadEvent_CheckLinkStatus();
+ MainPage.Log($"缃戝叧浜戠鍦ㄧ嚎锛屽埛鏂拌澶囩姸鎬�");
new System.Threading.Thread(() =>
{
- System.Threading.Thread.Sleep(3000);
- var pm = new DAL.Server.HttpServerRequest();
- pm.GetGatewayInfo();
+ int count = 20;
+ while (true)
+ {
+ System.Threading.Thread.Sleep(500);
+ if (MqttClient.isSubscribeSuccess || count<1)
+ {
+ break;
+ }
+ count--;
+ }
+ FunctionList.List.ReadAllFunctionStatus();
})
- { IsBackground = true }.Start();
- return;
+ { IsBackground = true, Priority = System.Threading.ThreadPriority.AboveNormal }.Start();
}
- //淇敼涓婚〉杩炴帴鐘舵��
- HomePage.LoadEvent_CheckLinkStatus();
- MainPage.Log($"缃戝叧浜戠鍦ㄧ嚎锛屽埛鏂拌澶囩姸鎬�");
- new System.Threading.Thread(() =>
+ else
{
- System.Threading.Thread.Sleep(1000);
- FunctionList.List.ReadAllFunctionStatus();
- })
- { IsBackground = true, Priority = System.Threading.ThreadPriority.AboveNormal }.Start();
+ //淇敼涓婚〉杩炴帴鐘舵��
+ HomePage.LoadEvent_CheckLinkStatus();
+ }
}
else
{
- //淇敼涓婚〉杩炴帴鐘舵��
- HomePage.LoadEvent_CheckLinkStatus();
+ MainPage.Log($"鐘舵�佷竴鑷达紝涓嶆洿鏂版暟鎹�(浜戠)");
}
+ }catch(Exception ex)
+ {
+ MainPage.Log($"Set GatewayCloudOnline Error:{ex.Message}");
}
}
}
@@ -200,11 +233,6 @@
public Control_Udp myUdp1 = null;
/// <summary>
- /// 閫氳鏂瑰紡
- /// </summary>
- public CommunicationMode communicationMode;
-
- /// <summary>
/// 鎵撳紑tcp鏈嶅姟绔�
/// </summary>
public void OpenTcpServer()
@@ -233,11 +261,13 @@
/// </summary>
public void OpenTcpClent()
{
+ return;
if (myTcpClient == null)
{
myTcpClient = new Control_TcpClient(reportIp);
- myTcpClient.Connect();
}
+ myTcpClient.Connect();
+
}
/// <summary>
@@ -246,7 +276,8 @@
public void SearchLoaclGateway()
{
//2021-01-15 : 浣忓畢娌℃湁缁戝畾缃戝叧鐨勬椂鍊欎笉鐢ㄦ悳绱紝骞朵笖涓嶈兘閾炬帴mqtt
- if(DB_ResidenceData.Instance.HomeGateway == null || string.IsNullOrEmpty(DB_ResidenceData.Instance.HomeGateway.gatewayId))
+ if (DB_ResidenceData.Instance.HomeGateway == null || string.IsNullOrEmpty(DB_ResidenceData.Instance.HomeGateway.gatewayId) ||
+ !UserInfo.Current.IsLogin)
{
return;
}
@@ -265,6 +296,7 @@
}
else if (MainPage.InternetStatus == 2)
{
+ DAL.Mqtt.MqttClient.InitState();
OpenUdp(DB_ResidenceData.Instance.GatewayType == 0 ? 6000 : 8585);
//閲嶇疆鎼滅储缃戝叧鏍囧織
IsSearchLocalGatewaySuccessful = false;
@@ -291,11 +323,64 @@
System.Threading.Thread.Sleep(500);
}
- DAL.Mqtt.MqttClient.InitState();
})
{ IsBackground = true }.Start();
}
}
+
+
+ private System.Threading.Thread loginGatewayThread;
+
+ /// <summary>
+ /// 鐧诲綍缃戝叧
+ /// </summary>
+ public void LoginGateway()
+ {
+ return;//tcp鎺у埗瀛樺湪闂锛屼絾鏄厛涓嶇敤tcp鎺у埗浜嗭紝瑕佺粡杩囨祴璇曞厛 2023-07-29 10:14:32
+ if (loginGatewayThread == null)
+ {
+ loginGatewayThread = new System.Threading.Thread(() =>
+ {
+ while (!Ins.myTcpClient.isConnected)
+ {
+ if (Ins.GatewayOnline_Local && myTcpClient.isConnected)
+ {
+ var sendData = new { clientType = "app", version = "1.0" };
+ var sendJob = new { id = Control.Ins.msg_id.ToString(), time_stamp = Utlis.GetTimestamp(), objects = sendData };
+
+ var bodyString = JsonConvert.SerializeObject(sendJob);
+
+ var sendBytes = ConvertSendBodyData($"/user/{GatewayId}/custom/gateway/login", bodyString);
+
+ Ins.myTcpClient.SendMessage(sendBytes);
+ }
+ System.Threading.Thread.Sleep(2000);
+ }
+ //loginGatewayThread?.Abort();
+ //loginGatewayThread = null;
+
+ });
+ loginGatewayThread.Start();
+ }
+ else
+ {
+ try
+ {
+ loginGatewayThread?.Abort();
+ }
+ catch (Exception ex)
+ {
+ MainPage.Log($"閲嶅惎鐧诲綍缃戝叧绾跨▼寮傚父:{ex.Message}");
+ }
+ finally
+ {
+ loginGatewayThread = null;
+ LoginGateway();
+ }
+ }
+
+ }
+
/// <summary>
/// 鍦烘櫙鎺у埗鍏ュ彛
@@ -303,9 +388,9 @@
public void ControlScene(Scene scene)
{
//浣撻獙妯″紡
- if(MainPage.NoLoginMode)
+ if (MainPage.NoLoginMode)
{
- foreach(var sceneFunction in scene.functions)
+ foreach (var sceneFunction in scene.functions)
{
var revString = "";
var upDataObj = new AlinkFunctionStatusObj();
@@ -342,15 +427,6 @@
}
}
}
- /// <summary>
- /// 瀹夐槻鎺у埗
- /// </summary>
- public void ControlArm()
- {
- DAL.Server.HttpServerRequest httpServer = new DAL.Server.HttpServerRequest();
- //var pack = httpServer.GetSecurityAlarmLogList
- }
-
/// <summary>
/// 鍙戦�佸懡浠�
@@ -361,7 +437,7 @@
/// <param name="function"></param>
/// <param name="useRemote">鏄惁鐩存帴浣跨敤杩滅▼鍙戦��</param>
/// <returns></returns>
- public bool SendWriteCommand(Function function, Dictionary<string, string> commandDictionary, bool useRemote = false,int resend = 3)
+ public bool SendWriteCommand(Function function, Dictionary<string, string> commandDictionary, bool useRemote = false, int resend = 3)
{
function.controlCounter++;
function.refreshTime = DateTime.Now;
@@ -408,7 +484,6 @@
UpdataFunctionStatus(revString, null, true);
return true;
}
-
//MainPage.Log($"鍙戦�佹暟鎹�:{Newtonsoft.Json.JsonConvert.SerializeObject(commandDictionary)}");
@@ -459,8 +534,9 @@
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,resend);
+ new Control_Udp().SendLocalHdlLinkData(sendBytes, functionControlDataObj.id, resend);
MainPage.Log($"鏈湴閫氳 鍙戦�丠DL-Link鏁版嵁:{functionControlDataJson}");
+ //Ins.myTcpClient.SendMessage(sendBytes);
}
}
//杩滅▼閫氳
@@ -477,7 +553,7 @@
commandDictionary.Add(FunctionAttributeKey.OnOff, commandDictionary[FunctionAttributeKey.Brightness] == "0" ? "off" : "on");
}
}
- if(function.spk == SPK.LightCCT)
+ if (function.spk == SPK.LightCCT)
{
if (!commandDictionary.ContainsKey(FunctionAttributeKey.CCT))
{
@@ -501,10 +577,10 @@
/// <summary>
/// 鍏ㄥ紑鍏ㄥ叧鍔熻兘
/// </summary>
- public void SwtichFunctions(bool open,List<Function> functions)
+ public void SwtichFunctions(bool open, List<Function> functions)
{
//dome妯″紡鎺у埗
- if(MainPage.NoLoginMode)
+ if (MainPage.NoLoginMode)
{
new System.Threading.Thread(() =>
{
@@ -512,7 +588,7 @@
{
Dictionary<string, string> d1 = new Dictionary<string, string>();
d1.Add(FunctionAttributeKey.OnOff, open ? "on" : "off");
- if (function.spk == SPK.PanelSocket)
+ if (function.spk == SPK.PanelSocket)
{
if (function.attributes.Find((obj) => obj.key == "on_off_usb") != null)
{
@@ -550,6 +626,10 @@
{
foreach (var temp in functions)
{
+ if((temp.trait_on_off.state.ToString() == "on" && open)|| temp.trait_on_off.state.ToString() == "off"&& !open)
+ {
+ continue;
+ }
var apiControlData = temp.GetApiControlData(d);
actionObjs.Add(apiControlData);
count++;
@@ -561,7 +641,10 @@
System.Threading.Thread.Sleep(100);
}
}
- var pack = pm.ControlDevice(actionObjs);
+ if (actionObjs.Count > 0)
+ {
+ var pack = pm.ControlDevice(actionObjs);
+ }
}
}
@@ -578,16 +661,16 @@
{
var pm = new DAL.Server.HttpServerRequest();
var pack = pm.GetDeviceInfoList(functionIds);
- if(pack!= null&& pack.Data!=null)
+ if (pack != null && pack.Data != null)
{
//寰呮祴璇�2021-03-04
var ddd = Newtonsoft.Json.JsonConvert.DeserializeObject<List<AlinkStatusData>>(pack.Data.ToString());
- if(ddd!= null)
+ if (ddd != null)
{
- foreach(var function in ddd)
+ foreach (var function in ddd)
{
var temp = FunctionList.List.GetDeviceFunctionList().Find((obj) => obj.deviceId == function.deviceId);
- if(temp!= null)
+ if (temp != null)
{
if (SPK.Get3tySpk(SPK.BrandType.Tuya).Contains(temp.spk))
{
@@ -603,7 +686,7 @@
/// 鍙戦�佽鍙栧懡浠�
/// 鑷姩鍒ゆ柇鏄惁涓篈鍗忚璁惧
/// </summary>
- public void SendReadCommand(Function function ,bool forceRemote = false)
+ public void SendReadCommand(Function function, bool forceRemote = false)
{
function.refreshTime = DateTime.Now;
if (forceRemote)
@@ -649,8 +732,18 @@
}
else
{
- var pm = new DAL.Server.HttpServerRequest();
- var pack = pm.RefreshDeviceStatus(new List<string>() { function.deviceId });
+ var pm = new HttpServerRequest();
+ try
+ {
+ pm.RefreshDeviceStatus(new List<string>() { function.deviceId });
+ }catch(Exception ex)
+ {
+ MainPage.Log($"杩滅▼璇诲彇璁惧鐘舵�佸紓甯�:{ex.Message}");
+ }
+ finally
+ {
+ pm = null;
+ }
}
}
}
@@ -687,7 +780,7 @@
{
busClient.ReadBusData(function);
}
-
+
}
catch (Exception ex)
{
@@ -731,7 +824,7 @@
/// <summary>
/// 瀹夐槻鎺у埗
/// </summary>
- public void ControlSecurity(SecurityAlarm securityAlarm,string state)
+ public void ControlSecurity(SecurityAlarm securityAlarm, string state)
{
if (!Ins.GatewayOnline_Local)//缃戝叧鏈湴涓嶅湪绾�
{
@@ -787,11 +880,38 @@
},
time_stamp = Utlis.GetTimestamp()
};
- var aLinkJson = Newtonsoft.Json.JsonConvert.SerializeObject(aLinkData);
+ var aLinkJson = JsonConvert.SerializeObject(aLinkData);
var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ControlScene, aLinkJson);
- new Control_Udp().SendLocalHdlLinkData(sendBytes, aLinkData.id,0);
+ new Control_Udp().SendLocalHdlLinkData(sendBytes, aLinkData.id, 0);
}
}
+
+
+ /// <summary>
+ /// 鑾峰彇闊充箰鐩綍
+ /// </summary>
+ public void GetMusicDirectory(Function function)
+ {
+ if (Ins.GatewayOnline_Local)
+ {
+ var objects = new List<Dictionary<string, string>>();
+ var readKey = new Dictionary<string, string>();
+ readKey.Add("sid", function.sid);
+ objects.Add(readKey);
+ var readDataObj = new AlinkReadFunctionStatusObj()
+ {
+ id = Ins.msg_id.ToString(),
+ objects = objects,
+ time_stamp = Utlis.GetTimestamp()
+ };
+ var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(readDataObj);
+ var sendBytes = Ins.ConvertSendBodyData($"/base/{DB_ResidenceData.Instance.HomeGateway.gatewayId}/thing/service/MusicPlayGroupListGet/down", functionControlDataJson);
+ MainPage.Log($"鏈湴閫氳 鍙戦�丠DL-Link鏁版嵁:{functionControlDataJson}");
+ new Control_Udp().SendLocalHdlLinkData(sendBytes, readDataObj.id);
+ }
+
+ }
+
/// <summary>
/// 缃戝叧杩涘叆閰嶇綉妯″紡
/// </summary>
@@ -856,10 +976,14 @@
/// 杞崲鎺ユ敹鍒扮殑鏁版嵁
/// </summary>
/// <returns></returns>
- public void ConvertReceiveData(byte[] receiveBytes,string ip)
+ public void ConvertReceiveData(byte[] receiveBytes, string ip)
{
+ if (!UserInfo.Current.IsLogin)
+ {
+ return;
+ }
var reString = Encoding.UTF8.GetString(receiveBytes);
- AnalysisReceiveData(reString, receiveBytes,ip);
+ AnalysisReceiveData(reString, receiveBytes, ip);
}
/// <summary>
/// 杞崲鎺ユ敹鍒扮殑鏁版嵁
@@ -867,11 +991,11 @@
/// <param name="receiveString">杞琒tring鍚庣殑鏁版嵁</param>
/// <param name="originalReceiveBytes"鍘熷Bytes鏁版嵁</param>
/// <returns></returns>
- public LocalCommunicationData AnalysisReceiveData(string receiveString, byte[] originalReceiveBytes , string sIp = null)
+ public LocalCommunicationData AnalysisReceiveData(string receiveString, byte[] originalReceiveBytes, string sIp = null)
{
+
LocalCommunicationData receiveObj = new LocalCommunicationData();
- MainPage.Log($"灞�鍩熺綉淇℃伅: \r\n{receiveString}");
var res = receiveString.Split("\r\n\r\n");
@@ -903,13 +1027,19 @@
//}
receiveObj.BodyDataString = res[1];
+ if (receiveObj.Topic == CommunicationTopic.ct.HeartBeat + "_reply")
+ {
+ //Ins.myTcpClient.ClearHeartBeatLog();
+ MainPage.Log("tcp蹇冭烦鍥炲");
+ return null;
+ }
+
//2021-09-23 杩囨护涓嶉渶瑕佽В瀵嗙殑涓婚 鐩墠鎼滅储缃戝叧涓婚涓嶅姞瀵�
if (receiveObj.Topic != CommunicationTopic.SearchLoaclGatewayReply)
{
//鍒ゆ柇褰撳墠缃戝叧鏄惁寮�鍚簡鏈湴鍔犲瘑
if (IsLocalEncryptAndGetAesKey)
{
- MainPage.Log($"灞�鍩熺綉淇℃伅 寮�濮嬭В瀵�");
if (originalReceiveBytes != null)
{
//鎷垮埌鍘熷Bytes鏁版嵁鍘昏В瀵�
@@ -941,8 +1071,27 @@
}
}
+ else
+ {
+ MainPage.Log($"灞�鍩熺綉淇℃伅: 鏄庢枃锛�" + receiveObj.BodyDataString);
+ }
}
+ try
+ {
+ var idMsg = Newtonsoft.Json.JsonConvert.DeserializeObject<ResponsePack>(res[1]);
+ var hasProcess = hasItBeenProcessed(idMsg.id);
+ if (hasProcess)
+ {
+ return null;
+ }
+ MainPage.Log($"澶勭悊灞�鍩熺綉鏁版嵁id:{idMsg.id}");
+
+ }
+ catch (Exception ex)
+ {
+ MainPage.Log($"瑙f瀽灞�鍩熺綉鏁版嵁寮傚父{ex.Message}");
+ }
if (receiveObj.Topic == CommunicationTopic.SearchLoaclGatewayReply || receiveObj.Topic == CommunicationTopic.GatewayBroadcast)
{
@@ -975,17 +1124,23 @@
//2021-09-23 鏂板鑾峰彇褰撳墠缃戝叧鏄惁鏈湴鍔犲瘑
Ins.IsLocalEncrypt = device.isLocalEncrypt;
//MainPage.Log("缃戝叧鏈湴鍔犲瘑鐘舵�侊細" + device.local_encrypt.ToString());
+ //鐧诲綍缃戝叧Tcp
+ //OpenTcpClent();
+
+
}
}
else if (receiveObj.Topic == CommunicationTopic.ct.ReadStatus + "_reply" ||
- receiveObj.Topic == CommunicationTopic.ct.ControlFunctionTopic + "_reply" ||
+ receiveObj.Topic == CommunicationTopic.ct.ControlFunctionTopic + "_reply" ||
+ receiveObj.Topic == CommunicationTopic.ct.ControlGroupControlTopic + "_reply" ||
receiveObj.Topic == CommunicationTopic.ct.GatewayUpStatus ||
- receiveObj.Topic.Contains( CommunicationTopic.ct.GatewayUpSortTopic))
+ receiveObj.Topic.Contains(CommunicationTopic.ct.GatewayUpSortTopic))
{
//TODO 鏆傛椂涓嶄紶姝g‘鐨勬暟鎹笂鍘伙紝濡傛灉鍚庨潰瑕佷紭鍖栧墠闈㈣繖浜涗唬鐮�
+ //Console.WriteLine($"{receiveObj.Topic}\r\n{receiveObj.BodyDataString}");
UpdataFunctionStatus(receiveObj.BodyDataString, null);
}
- else if (receiveObj.Topic == CommunicationTopic.ct.ControlSeurity +"_reply"
+ else if (receiveObj.Topic == CommunicationTopic.ct.ControlSeurity + "_reply"
|| receiveObj.Topic == CommunicationTopic.ct.ReadSecurityStatus + "_reply"
|| receiveObj.Topic == CommunicationTopic.ct.SecurityStatusUp)
{
@@ -993,7 +1148,8 @@
{
MainPage.Log($"灞�鍩熺綉瀹夐槻淇℃伅: {receiveObj.Topic} : 鍐呭: {res[1]}");
var tt = "";
- lock (tt) {
+ lock (tt)
+ {
var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<SecurityStatusObj>(receiveObj.BodyDataString);
if (temp != null)
{
@@ -1012,8 +1168,30 @@
}
}
}
- catch (Exception ex){
+ catch (Exception ex)
+ {
MainPage.Log($"瀹夐槻灞�鍩熺綉寮傚父锛歿ex.Message}");
+ }
+ }
+ else if (receiveObj.Topic == $"/user/{GatewayId}/custom/gateway/login_reply")
+ {
+ var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<JObject>(receiveObj.BodyDataString);
+ if (temp.GetValue("objects").ToString().Contains("success"))
+ {
+ LocalTcpClientLogin = true;
+ try
+ {
+ loginGatewayThread?.Abort();
+ }
+ catch (Exception ex)
+ {
+ MainPage.Log($"缁堟鐧诲綍缃戝叧tcp寮傚父锛歿ex.Message}");
+ }
+ finally
+ {
+ loginGatewayThread = null;
+ }
+ MainPage.Log("灞�鍩熺綉tcp杩炴帴鐧诲綍缃戝叧鎴愬姛");
}
}
else
@@ -1025,14 +1203,94 @@
return receiveObj;
}
+
+ private List<string> processedDataList = new List<string>();
+ /// <summary>
+ /// 鏄惁宸茬粡澶勭悊杩囨暟鎹�
+ /// </summary>
+ /// <returns></returns>
+ private bool hasItBeenProcessed(string msgId)
+ {
+ if (processedDataList.Contains(msgId))
+ {
+ return true;
+ }
+ else
+ {
+ if (processedDataList.Count > 50)
+ {
+ processedDataList.RemoveAt(0);
+ }
+ return false;
+ }
+
+ }
+
+
+ /// <summary>
+ /// 鏇存柊缇ゆ帶璁惧鐘舵��
+ /// A鍗忚鏁版嵁
+ /// </summary>
+ public void UpdataGroupControlStatus(string revString, byte[] usefulBytes, bool isCloudData = false)
+ {
+ var temp = JsonConvert.DeserializeObject<AlinkFunctionStatusObj>(revString);
+ if (temp != null)
+ {
+ Control_Udp.ReceiveRepeatManager(temp.id, usefulBytes);
+ var allLocalFuntion = FunctionList.List.groupControls;
+ foreach (var updateTemp in temp.objects)
+ {
+ try
+ {
+ var localFunction = allLocalFuntion.Find((obj) => obj.sid == updateTemp.sid);
+ if (localFunction == null)
+ {
+ continue;
+ }
+ MainPage.Log($"鏀跺埌缇ゆ帶鏁版嵁:{revString}");
+ foreach (var attr in updateTemp.status)
+ {
+ localFunction.time_stamp = temp.time_stamp;
+ localFunction.SetAttrState(attr.key, attr.value);
+
+ }
+
+ //鏇存柊鐣岄潰鐘舵��
+ switch (localFunction.spk)
+ {
+ case SPK.ElectricEnergy:
+ EnergyMainPage.UpdataStatus(localFunction);
+ break;
+ }
+
+ HomePage.UpdataFunctionStates(localFunction);
+ RoomPage.UpdataStates(localFunction);
+ FunctionPage.UpdataStates(localFunction);
+ ClassificationPage.UpdataInfo(localFunction);
+
+ }
+ catch (Exception ex)
+ {
+ MainPage.Log($"A鍗忚鏇存柊鐘舵�佸紓甯�:{ex.Message}");
+ }
+ }
+ }
+ }
+
+
/// <summary>
/// 鏇存柊璁惧鐘舵��
/// A鍗忚鏁版嵁
/// </summary>
- /// <param name="updateBytes"></param>
- public void UpdataFunctionStatus(string revString, byte[] usefulBytes,bool isCloudData = false)
+ public void UpdataFunctionStatus(string revString, byte[] usefulBytes, bool isCloudData = false)
{
- var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<AlinkFunctionStatusObj>(revString);
+ ////test 浜戠杩炴帴鎴愬姛鏃讹紝涓嶉�傜敤鏈湴鏁版嵁鏇存柊
+ //if (Ins.GatewayOnline_Cloud && !isCloudData)
+ //{
+ // return;
+ //}
+
+ var temp = JsonConvert.DeserializeObject<AlinkFunctionStatusObj>(revString);
if (temp != null)
{
Control_Udp.ReceiveRepeatManager(temp.id, usefulBytes);
@@ -1044,11 +1302,15 @@
if (Ins.GatewayOnline_Local && isCloudData)//鏈湴閾炬帴锛岄櫎浜嗘秱楦﹁澶囨暟鎹箣澶栫殑浜戠鏁版嵁涓嶅鐞�
{
- if (FunctionList.List.OtherBrandFunction.Count != 0)
+ if (FunctionList.List.OtherBrandFunction.Count == 0)
+ {
+ MainPage.Log($"A鍗忚鏇存柊鐘舵��:鏈湴閾炬帴锛岄櫎浜嗘秱楦﹁澶囨暟鎹箣澶栫殑浜戠鏁版嵁涓嶅鐞�...");
+ return;
+ }
+ else
{
if (FunctionList.List.OtherBrandFunction.Find((obj) => obj.sid == updateTemp.sid) == null)
{
- //MainPage.Log($"A鍗忚鏇存柊鐘舵��:鏈湴閾炬帴锛岄櫎浜嗘秱楦﹁澶囨暟鎹箣澶栫殑浜戠鏁版嵁涓嶅鐞�...");
return;
}
}
@@ -1061,16 +1323,6 @@
}
MainPage.Log(localFunction.name);
- if (Ins.GatewayOnline_Local && isCloudData)//鏈湴閾炬帴锛岄櫎浜嗘秱楦﹁澶囨暟鎹箣澶栫殑浜戠鏁版嵁涓嶅鐞�
- {
- if (!SPK.Get3tySpk(SPK.BrandType.All3tyBrand).Contains(localFunction.spk) && !SPK.MusicSpkList().Contains( localFunction.spk))
- {
- //MainPage.Log($"A鍗忚鏇存柊鐘舵��:鏈湴閾炬帴锛岄櫎浜嗘秱楦﹁澶囨暟鎹箣澶栫殑浜戠鏁版嵁涓嶅鐞�........");
-
- return;
- }
- }
-
//if (SPK.MusicSpkList().Contains(localFunction.spk))
//{
// if (updateTemp.status.Count < 3)
@@ -1080,24 +1332,43 @@
// return;
// }
//}
- //MainPage.Log($"A鍗忚鏇存柊鐘舵��:{revString}");
+ MainPage.Log($"鏀跺埌鏁版嵁:{revString}");
foreach (var attr in updateTemp.status)
{
localFunction.time_stamp = temp.time_stamp;
localFunction.SetAttrState(attr.key, attr.value);
- //Console.WriteLine("闊充箰鎾斁鍣ㄦ坊鍔犵紦瀛樻暟鎹�=======" + revString);
-
+
}
+ if(localFunction.spk == SPK.AirSwitchP3)
+ {
+ localFunction.online = updateTemp.online;
+ }
+ if (SPK.LightSpkList().Contains(localFunction.spk))
+ {
+ localFunction.updateTime = DateTime.Now;
+ }
+
//鏇存柊鐣岄潰鐘舵��
switch (localFunction.spk)
{
+ case SPK.AcstParent:
+ AcstParentPage.UpdateAcstParentInfo(localFunction);
+ break;
+ case SPK.AcstSub:
+ AcstParentPage.UpdateAcstSubInfo(localFunction);
+ AcstSubPage.UpdateStatus(localFunction);
+ break;
case SPK.AirSwitch:
AirSwitchPage.UpdataState(localFunction);
- if(localFunction.GetAttribute(FunctionAttributeKey.Power)!=null)//濡傛灉鏄甫鐢甸噺鐨勭┖寮�涔熻鏇存柊鑳芥簮鐣岄潰
+ if (localFunction.GetAttribute(FunctionAttributeKey.Power) != null)//濡傛灉鏄甫鐢甸噺鐨勭┖寮�涔熻鏇存柊鑳芥簮鐣岄潰
{
EnergyMainPage.UpdataStatus(localFunction);
}
+ break;
+ case SPK.AirSwitchP3:
+ AirSwitchP3Page.UpdataState(localFunction);
+ AirSwitchP3SubloopEnergyPage.UpdataStatus(localFunction);
break;
case SPK.ElectricEnergy:
EnergyMainPage.UpdataStatus(localFunction);
@@ -1121,6 +1392,8 @@
RGBPage.UpdataStates(localFunction);
break;
case SPK.LightRGBW:
+ localFunction.lastState = Language.StringByID(StringId.Brightness) + " : " + localFunction.GetAttrState(FunctionAttributeKey.Brightness) + "%";
+ RGBWPage.UpdataStates(localFunction);
break;
case SPK.LightCCT:
localFunction.lastState = Language.StringByID(StringId.Brightness) + " : " + localFunction.GetAttrState(FunctionAttributeKey.Brightness) + "%";
@@ -1131,7 +1404,7 @@
CurtainModulePage.UpdataState(localFunction);
break;
case SPK.CurtainDream:
- if(localFunction.GetAttrState(FunctionAttributeKey.Percent) == "0")
+ if (localFunction.GetAttrState(FunctionAttributeKey.Percent) == "0")
{
localFunction.SetAttrState(FunctionAttributeKey.OnOff, "off");
}
@@ -1147,6 +1420,8 @@
RollingShutterPage.UpdataState(localFunction);
break;
case SPK.CurtainShades:
+ localFunction.lastState = Language.StringByID(StringId.Open) + localFunction.GetAttrState(FunctionAttributeKey.Percent) + "%";
+ VenetianBlindsPage.UpdataState(localFunction);
break;
case SPK.AcStandard:
case SPK.HvacAC:
@@ -1217,12 +1492,14 @@
FloorHeatingPage.UpdataStates(localFunction);
break;
case SPK.SensorPm25:
+ case SPK.SensorPm10:
case SPK.SensorCO2:
case SPK.SensorTVOC:
case SPK.SensorTemperature:
case SPK.SensorHumidity:
case SPK.SensorHcho:
- if(localFunction.spk == SPK.SensorTemperature)
+ case SPK.SensorLight:
+ if (localFunction.spk == SPK.SensorTemperature)
{
HomePage.LoadEvent_RefreshEnvirIndoorTemp();
}
@@ -1233,7 +1510,7 @@
EnvironmentalPage.LoadEvent_UpdataStatus(localFunction);
//A_EnvironmentalDataCenter.LoadEvent_UpdataStatus(localFunction);
break;
- case SPK.SensorEnvironment:
+ case SPK.SensorEnvironment:case SPK.SensorEnvironmentHailin:
case SPK.SensorEnvironment2:
case SPK.SensorEnvironment3:
if (localFunction.GetAttributes().Contains(FunctionAttributeKey.Temperature))
@@ -1262,7 +1539,6 @@
case SPK.ElectricTuyaWeepRobot2:
case SPK.ElectricTuyaWaterValve:
case SPK.ElectricTuyaWaterValve2:
- case SPK.SensorPir:
case SPK.SensorDoorWindow:
case SPK.SensorSmoke:
case SPK.SensorWater:
@@ -1271,12 +1547,31 @@
case SPK.HvacAirFresh:
case SPK.SensorGas:
case SPK.HvacCac:
+ case SPK.SensorHelp:
+ case SPK.MechanicalArm:
//璁惧鐘舵�佹帹閫�
//鐘舵�佹洿鏂�
Stan.HdlDeviceStatuPushLogic.Current.UpdateDeviceStatu(updateTemp.sid, updateTemp.status);
break;
+ case SPK.SensorPir:
+ case SPK.SensorPirHold:
+ var tempPirStatus = localFunction.attributes.Find((sta) => sta.key == "people_status");
+ if (tempPirStatus != null)
+ {
+ if(tempPirStatus.state == "true")
+ {
+ localFunction.lastState = Language.StringByID(StringId.Someone);
+ }
+ else
+ {
+ localFunction.lastState = Language.StringByID(StringId.wuren);
+ }
+ }
+ Stan.HdlDeviceStatuPushLogic.Current.UpdateDeviceStatu(updateTemp.sid, updateTemp.status);
+ break;
case SPK.SenesorMegahealth:
case SPK.SenesorMegahealth2:
+ case SPK.SensorMmvPose:
var tempStatus = localFunction.attributes.Find((sta) => sta.key == FunctionAttributeKey.TargetStatus);
if (tempStatus != null)
@@ -1285,7 +1580,7 @@
switch (tempStatus.state)
{//0绌猴紝1璧帮紝2璺戯紝3鍧愶紝4璺屽�掞紝5绔�
case "0":
- localFunction.lastState = Language.StringByID(StringId.SensorNormalState);
+ localFunction.lastState = Language.StringByID(StringId.wuren);
break;
case "1":
localFunction.lastState = Language.StringByID(StringId.SomeoneIn);
@@ -1321,11 +1616,20 @@
case SPK.AvMusic:
case SPK.MusicStandard:
//UI.Music.MusicMain.mMusicMain.RefreshView(updateTemp);
- //Console.WriteLine("闊充箰鎾斁鍣ㄦ樉绀虹姸鎬�======="+ revString);
+ Console.WriteLine("闊充箰鎾斁鍣ㄦ樉绀虹姸鎬�=======" + revString);
//wjc
+ break;
+ case SPK.Inverter:
+ case SPK.InverterRst:
+ var status = new Dictionary<string, object> { ["method"] = "status", ["data"] = temp.objects };
+ Application.RunOnMainThread(() =>
+ {
+ Inverter.Ins.H5Page.CallJS($"nativeToJs(\'{Newtonsoft.Json.JsonConvert.SerializeObject(status)}\')");
+ });
break;
}
+
HomePage.UpdataFunctionStates(localFunction);
RoomPage.UpdataStates(localFunction);
FunctionPage.UpdataStates(localFunction);
@@ -1347,12 +1651,12 @@
/// <summary>
/// //涓�閿紙杩滅▼锛夊紑閿�
/// </summary>
- public void OneKeyUnlocking(Function doorlock,string extStr)
+ public void OneKeyUnlocking(Function doorlock, string extStr)
{
if (Ins.GatewayOnline_Local)
{
Dictionary<string, string> dic = new Dictionary<string, string>();
- var functionControlDataObj = doorlock.GetGatewayAlinkDoorlockData(UserInfo.Current.ID,extStr);
+ var functionControlDataObj = doorlock.GetGatewayAlinkDoorlockData(UserInfo.Current.ID, extStr);
var functionControlDataJson = Newtonsoft.Json.JsonConvert.SerializeObject(functionControlDataObj);
var sendBytes = Ins.ConvertSendBodyData($"/base/{Control.Ins.GatewayId}/thing/service/doorRemoteOpen/down", functionControlDataJson);
new Control_Udp().SendLocalHdlLinkData(sendBytes, functionControlDataObj.id, 0);
@@ -1367,7 +1671,7 @@
/// </summary>
/// <param name="functionId"></param>
/// <param name="pwd"></param>
- public void ConfirmUnlocking(string functionId,string pwd)
+ public void ConfirmUnlocking(string functionId, string pwd)
{
Loading loading = new Loading();
MainPage.BaseView.AddChidren(loading);
@@ -1403,8 +1707,10 @@
//{
// return false;
//}
- if (pack.Code != StateCode.SUCCESS) {
- Application.RunOnMainThread(() => {
+ if (pack.Code != StateCode.SUCCESS)
+ {
+ Application.RunOnMainThread(() =>
+ {
new PublicAssmebly().TipMsg(Language.StringByID(StringId.Tip), pack.message);
UserInfo.Current.doorPasswordString = "";//
UserInfo.Current.LastTimeOpenDoor = DateTime.MinValue;
@@ -1413,8 +1719,9 @@
}
if (pack.Code != StateCode.SUCCESS)
{
- Application.RunOnMainThread(() => {
- if(string.IsNullOrEmpty(pack.message))
+ Application.RunOnMainThread(() =>
+ {
+ if (string.IsNullOrEmpty(pack.message))
{
new PublicAssmebly().TipMsg(Language.StringByID(StringId.Tip),
Language.StringByID(StringId.OperationFailed));
--
Gitblit v1.8.0