From e238b9cc3caef879fd907ceab8997d08ae891ea3 Mon Sep 17 00:00:00 2001
From: wei <kaede@kaededeMacBook-Air.local>
Date: 星期四, 04 十一月 2021 09:22:08 +0800
Subject: [PATCH] BUG修复
---
HDL_ON/DAL/DriverLayer/Control.cs | 221 ++++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 185 insertions(+), 36 deletions(-)
diff --git a/HDL_ON/DAL/DriverLayer/Control.cs b/HDL_ON/DAL/DriverLayer/Control.cs
index e3d0166..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
@@ -63,7 +68,19 @@
/// 鏄惁鎼滅储鏈湴缃戝叧鎴愬姛
/// </summary>
public bool IsSearchLocalGatewaySuccessful = false;
-
+ /// <summary>
+ /// 鏄惁鏈湴鍔犲瘑锛岀洰鍓嶅彧瀵笰缃戝叧鏈夌敤
+ /// </summary>
+ public bool IsLocalEncrypt;
+ /// <summary>
+ /// 鍒ゆ柇鏄惁鏈湴鍔犲瘑骞朵笖鍔犲瘑key涓嶄负绌�
+ /// </summary>
+ public bool IsLocalEncryptAndGetAesKey {
+ get {
+ return IsLocalEncrypt && (!string.IsNullOrEmpty(DB_ResidenceData.Instance.CurrentRegion.localSecret));
+ }
+ }
+
bool _GatewayOnline_Local = false;
/// <summary>
/// 缃戝叧鍦ㄧ嚎-灞�鍩熺綉
@@ -267,6 +284,7 @@
else if (DB_ResidenceData.Instance.GatewayType == 1)
{
new Control_Udp().SearchLocalGateway();
+ new Control_Udp().SearchLocalGateway(true);
}
System.Threading.Thread.Sleep(500);
}
@@ -341,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;
@@ -395,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;
}
@@ -435,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}");
}
}
@@ -467,6 +488,7 @@
var actionObjs = new List<ApiAlinkControlActionObj>();
actionObjs.Add(apiControlData);
var pack = httpServer.ControlDevice(actionObjs);
+ MainPage.Log($"杩滅▼鎺у埗鍙嶉:{pack.message}");
}
}
@@ -602,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);
@@ -633,6 +655,7 @@
gatewayId = DB_ResidenceData.Instance.HomeGateway.gatewayId,
sid = securityAlarm.sid, status = state, userSecurityId = securityAlarm.userSecurityId
} });
+ MainPage.Log($"瀹夐槻鎺у埗缁撴灉:{result.Code}");
}
else
{
@@ -681,21 +704,66 @@
};
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>
- public byte[] ConvertSendBodyData(string topic, string bodyDataString)
+ /// <param name="topic">涓婚</param>
+ /// <param name="bodyDataString">body鍐呭鏁版嵁</param>
+ /// <param name="isEncryption">鏄惁瑕佸body鍔犲瘑</param>
+ /// <returns></returns>
+ public byte[] ConvertSendBodyData(string topic, string bodyDataString, bool isEncryption = true)
{
- string topicString = "Topic:" + topic + "\r\n";
- byte[] bodyBytes = Encoding.ASCII.GetBytes(bodyDataString);
- string lengthString = "Length:" + bodyBytes.Length.ToString() + "\r\n" + "\r\n";
+ //string topicString = "Topic:" + topic + "\r\n";
+ //byte[] bodyBytes = Encoding.ASCII.GetBytes(bodyDataString);
+ //string lengthString = "Length:" + bodyBytes.Length.ToString() + "\r\n" + "\r\n";
- string sendDataString = topicString + lengthString + bodyDataString;
- byte[] sendDataBytes = Encoding.ASCII.GetBytes(sendDataString);
- MainPage.Log($"杞崲HDL-Link鏁版嵁\r\n{sendDataString}\r\n");
+ //string sendDataString = topicString + lengthString + bodyDataString;
+ //byte[] sendDataBytes = Encoding.ASCII.GetBytes(sendDataString);
+ //MainPage.Log($"杞崲HDL-Link鏁版嵁\r\n{sendDataString}\r\n");
+
+ //***************************************************************
+ //2021-09-23 澧炲姞鏈湴閫氫俊鍔犲瘑澶勭悊
+ //1.鎷兼帴澶�
+ string topicString = "Topic:" + topic + "\r\n";
+ //2.Body瀛楃涓茶浆涓篵yte鏁扮粍
+ byte[] bodyBytes = Encoding.UTF8.GetBytes(bodyDataString);
+ //鍒ゆ柇鏄惁闇�鍔犲瘑Body鏁版嵁
+ if (isEncryption && IsLocalEncryptAndGetAesKey)
+ {
+ bodyBytes = Securitys.EncryptionService.AesEncryptPayload(bodyBytes, DB_ResidenceData.Instance.CurrentRegion.localSecret);
+ //bodyDataString = Encoding.UTF8.GetString(bodyBytes);
+ //MainPage.Log($"杞崲HDL-Link鏁版嵁 鍔犲瘑key锛�" + DB_ResidenceData.Instance.CurrentRegion.localSecret);
+ }
+ //3.鎷兼帴body鐨凩ength闀垮害鏁版嵁
+ string lengthString = "Length:" + bodyBytes.Length.ToString() + "\r\n" + "\r\n";
+ string topicAndLengthString = topicString + lengthString;
+ byte[] topicAndLengthBytes = Encoding.UTF8.GetBytes(topicAndLengthString);
+ //4.鎷兼帴鍚堝苟 Topic 鍜� body鐨刡yte鏁扮粍鏁版嵁
+ byte[] sendDataBytes = new byte[topicAndLengthBytes.Length + bodyBytes.Length];
+ topicAndLengthBytes.CopyTo(sendDataBytes, 0);
+ bodyBytes.CopyTo(sendDataBytes, topicAndLengthBytes.Length);
+
+ //var sendDataString = Encoding.UTF8.GetString(sendDataBytes);
+ //MainPage.Log($"杞崲HDL-Link鏁版嵁\r\n{sendDataString}\r\n");
+ //***************************************************************
return sendDataBytes;
}
@@ -703,18 +771,22 @@
/// 杞崲鎺ユ敹鍒扮殑鏁版嵁
/// </summary>
/// <returns></returns>
- public void ConvertReceiveData(byte[] receiveBytes)
+ public void ConvertReceiveData(byte[] receiveBytes,string ip)
{
var reString = Encoding.UTF8.GetString(receiveBytes);
- AnalysisReceiveData(reString);
+ AnalysisReceiveData(reString, receiveBytes,ip);
}
/// <summary>
/// 杞崲鎺ユ敹鍒扮殑鏁版嵁
/// </summary>
+ /// <param name="receiveString">杞琒tring鍚庣殑鏁版嵁</param>
+ /// <param name="originalReceiveBytes"鍘熷Bytes鏁版嵁</param>
/// <returns></returns>
- public LocalCommunicationData AnalysisReceiveData(string receiveString)
+ 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");
@@ -736,8 +808,7 @@
}
}
- MainPage.Log($"灞�鍩熺綉淇℃伅: {receiveObj.Topic} : 鍐呭: {res[1]}");
-
+ //MainPage.Log($"灞�鍩熺綉淇℃伅: {receiveObj.Topic} : 鍐呭: {res[1]}");
//楠岃瘉鏈夋晥鏁版嵁闀垮害
//if (res[1].Length != receiveObj.Length)
@@ -746,6 +817,44 @@
// return receiveObj;
//}
receiveObj.BodyDataString = res[1];
+
+ //2021-09-23 杩囨护涓嶉渶瑕佽В瀵嗙殑涓婚 鐩墠鎼滅储缃戝叧涓婚涓嶅姞瀵�
+ if (receiveObj.Topic != CommunicationTopic.SearchLoaclGatewayReply)
+ {
+ //鍒ゆ柇褰撳墠缃戝叧鏄惁寮�鍚簡鏈湴鍔犲瘑
+ if (IsLocalEncryptAndGetAesKey)
+ {
+ MainPage.Log($"灞�鍩熺綉淇℃伅 寮�濮嬭В瀵�");
+ if (originalReceiveBytes != null)
+ {
+ //鎷垮埌鍘熷Bytes鏁版嵁鍘昏В瀵�
+ byte[] topicBytes = Encoding.UTF8.GetBytes(res[0]);
+ byte[] bodyBytes = new byte[receiveObj.Length];
+ Array.Copy(originalReceiveBytes, topicBytes.Length + 4, bodyBytes, 0, receiveObj.Length);
+ byte[] receiveBytes = Securitys.EncryptionService.AesDecryptPayload(bodyBytes, DB_ResidenceData.Instance.CurrentRegion.localSecret);
+ 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
+ {
+ //鐩墠涓嶆嬁鍘熷Bytes鏁版嵁 瑙e瘑涓嶄簡
+ //byte[] receiveBytes = Encoding.UTF8.GetBytes(res[1]);
+ //MainPage.Log($"灞�鍩熺綉淇℃伅 receiveBytes {receiveBytes.Length}");
+ //receiveBytes = Securitys.EncryptionService.AesDecryptPayload(receiveBytes, DB_ResidenceData.Instance.CurrentRegion.localSecret);
+ //MainPage.Log($"灞�鍩熺綉淇℃伅 瑙e瘑鍚庯細receiveBytes {receiveBytes.Length}");
+ //var revString = Encoding.UTF8.GetString(receiveBytes);
+ //receiveObj.BodyDataString = revString;
+ //MainPage.Log($"灞�鍩熺綉淇℃伅: 瑙e瘑鍚庯細" + receiveObj.BodyDataString);
+ }
+
+ }
+ }
+
if (receiveObj.Topic == CommunicationTopic.SearchLoaclGatewayReply || receiveObj.Topic == CommunicationTopic.GatewayBroadcast)
{
@@ -770,12 +879,20 @@
{
Ins.GatewayId = device.device_mac;
}
- reportIp = "239.0.168.188";// device.ip_address;//涓绘挱鍦板潃涔熻兘鎺у埗璁惧
+ if (!string.IsNullOrEmpty(sIp))
+ {
+ device.ip_address = sIp;
+ }
+ reportIp = device.ip_address;//涓绘挱鍦板潃涔熻兘鎺у埗璁惧//"239.0.168.188";//
+ //2021-09-23 鏂板鑾峰彇褰撳墠缃戝叧鏄惁鏈湴鍔犲瘑
+ Ins.IsLocalEncrypt = device.isLocalEncrypt;
+ //MainPage.Log("缃戝叧鏈湴鍔犲瘑鐘舵�侊細" + device.local_encrypt.ToString());
}
}
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);
@@ -784,21 +901,31 @@
|| receiveObj.Topic == CommunicationTopic.ct.ReadSecurityStatus + "_reply"
|| receiveObj.Topic == CommunicationTopic.ct.SecurityStatusUp)
{
- var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<SecurityStatusObj>(receiveObj.BodyDataString);
- if (temp != null)
+ try
{
- Control_Udp.ReceiveRepeatManager(temp.id, null);
- foreach (var updataSecurity in temp.objects)
- {
- var updataLocalSecurity = FunctionList.List.securities.Find((obj) => obj.sid == updataSecurity.sid);
- if (updataLocalSecurity != null)
+ MainPage.Log($"灞�鍩熺綉瀹夐槻淇℃伅: {receiveObj.Topic} : 鍐呭: {res[1]}");
+ var tt = "";
+ lock (tt) {
+ var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<SecurityStatusObj>(receiveObj.BodyDataString);
+ if (temp != null)
{
- updataLocalSecurity.status = updataSecurity.status;
- updataLocalSecurity.alarm = updataSecurity.alarm;
+ Control_Udp.ReceiveRepeatManager(temp.id, null);
+ foreach (var updataSecurity in temp.objects)
+ {
+ var updataLocalSecurity = FunctionList.List.securities.Find((obj) => obj.sid == updataSecurity.sid);
+ if (updataLocalSecurity != null)
+ {
+ updataLocalSecurity.status = updataSecurity.status;
+ updataLocalSecurity.alarm = updataSecurity.alarm;
+ ArmCenterPage.LoadEvent_RefreshSecurityStatus(updataLocalSecurity);
+ }
+ }
+ HomePage.LoadEvent_RefreshSecurityStatus();
}
}
- HomePage.LoadEvent_RefreshSecurityStatus();
- ArmCenterPage.LoadEvent_RefreshSecurityStatus();
+ }
+ catch (Exception ex){
+ MainPage.Log($"瀹夐槻灞�鍩熺綉寮傚父锛歿ex.Message}");
}
}
else
@@ -855,7 +982,7 @@
return;
}
}
- MainPage.Log($"A鍗忚鏇存柊鐘舵��:{revString}");
+ //MainPage.Log($"A鍗忚鏇存柊鐘舵��:{revString}");
foreach (var attr in updateTemp.status)
{
localFunction.time_stamp = temp.time_stamp;
@@ -863,9 +990,15 @@
}
//鏇存柊鐣岄潰鐘舵��
- 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);
break;
@@ -878,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);
@@ -907,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)
{
@@ -945,10 +1081,12 @@
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))
{
case "normal":
@@ -975,6 +1113,7 @@
case SPK.SensorTVOC:
case SPK.SensorTemperature:
case SPK.SensorHumidity:
+ case SPK.SensorHcho:
if(localFunction.spk == SPK.SensorTemperature)
{
HomePage.LoadEvent_RefreshEnvirIndoorTemp();
@@ -984,6 +1123,7 @@
HomePage.LoadEvent_RefreshEnvirIndoorHumi();
}
EnvironmentalPage.LoadEvent_UpdataStatus(localFunction);
+ //A_EnvironmentalDataCenter.LoadEvent_UpdataStatus(localFunction);
break;
case SPK.SensorEnvironment:
case SPK.SensorEnvironment2:
@@ -997,23 +1137,32 @@
HomePage.LoadEvent_RefreshEnvirIndoorHumi();
}
EnvironmentalPage.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