From 2e7e5f9af5b32cfe1fc3c6ba40bf7eb984bbd0a4 Mon Sep 17 00:00:00 2001
From: 黄学彪 <hxb@hdlchina.com.cn>
Date: 星期一, 11 五月 2020 17:52:06 +0800
Subject: [PATCH] ???????
---
ZigbeeApp/Shared/Common/Device.cs | 209 ++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 178 insertions(+), 31 deletions(-)
diff --git a/ZigbeeApp/Shared/Common/Device.cs b/ZigbeeApp/Shared/Common/Device.cs
index 13acb40..7275b4d 100755
--- a/ZigbeeApp/Shared/Common/Device.cs
+++ b/ZigbeeApp/Shared/Common/Device.cs
@@ -400,6 +400,27 @@
}
}
+ /// <summary>
+ /// 娣诲姞铏氭嫙璁惧鍒扮紦瀛�
+ /// </summary>
+ /// <param name="device">璁惧瀵硅薄</param>
+ public void AddVirtualDeviceToMemory(CommonDevice device)
+ {
+ string mainKeys = this.GetDeviceMainKeys(device);
+ this.dicAllDevice[mainKeys] = device;
+
+ //璁惧鍥炶矾鏀堕泦
+ if (this.dicDeviceEpoint.ContainsKey(device.DeviceAddr) == false)
+ {
+ this.dicDeviceEpoint[device.DeviceAddr] = new HashSet<int>();
+ }
+ if (this.dicDeviceEpoint[device.DeviceAddr].Contains(device.DeviceEpoint) == false)
+ {
+ this.dicDeviceEpoint[device.DeviceAddr].Add(device.DeviceEpoint);
+ }
+ device.ReSave();
+ }
+
#endregion
#region 鈻� 淇敼璁惧___________________________
@@ -416,6 +437,14 @@
this.SetEpointName(device, newName);
this.BackupDeviceAfterReName(device);
+
+ //濡傛灉浣忓畢涓鸿櫄鎷熶綇瀹�
+ if (Common.Config.Instance.Home.IsVirtually == true)
+ {
+ //淇敼璁惧鍚嶅瓧鐨勮瘽,涓婚〉闇�瑕侀噸鏂板埛鏂�
+ Phone.UserView.UserPage.Instance.RefreshForm = true;
+ return true;
+ }
//涓嶅啀妫�娴嬪悕瀛楁槸鍚︿竴鏍�
//鎴愬憳鍙兘淇敼鑷繁鏈湴鐨勫悕瀛�
@@ -438,6 +467,8 @@
//澶囦唤鏁版嵁
await HdlGatewayLogic.Current.UpLoadDeviceBackupDataToGateway(device, GatewayBackupEnum.A绔偣鍚嶇О, newName);
}
+ //淇敼璁惧鍚嶅瓧鐨勮瘽,涓婚〉闇�瑕侀噸鏂板埛鏂�
+ Phone.UserView.UserPage.Instance.RefreshForm = true;
return true;
}
@@ -462,6 +493,11 @@
//鏇存敼鍚嶅瓧鍚庯紝鍒锋柊璁惧缂撳瓨
this.BackupDeviceAfterReName(device2);
+ }
+ //濡傛灉浣忓畢涓鸿櫄鎷熶綇瀹�
+ if (Common.Config.Instance.Home.IsVirtually == true)
+ {
+ return true;
}
CommonDevice device = listDevice[0];
@@ -596,6 +632,9 @@
/// <param name="deleteRoom">鏄惁浠庢埧闂村垹闄�</param>
public void DeleteMemmoryDevice(CommonDevice device, bool deleteRoom = true)
{
+ //鍒犻櫎缂撳瓨璁惧鐨勮瘽,涓婚〉闇�瑕侀噸鏂板埛鏂�
+ Phone.UserView.UserPage.Instance.RefreshForm = true;
+
if (deleteRoom == true)
{
//浠庢埧闂翠腑鍒犻櫎
@@ -679,7 +718,11 @@
/// <param name="device"></param>
public void SetFixedPositionCommand(CommonDevice device)
{
- device.IdentifyControl(device.DeviceAddr, device.DeviceEpoint, 5);
+ //濡傛灉褰撳墠浣忓畢涓嶆槸铏氭嫙浣忓畢
+ if (Common.Config.Instance.Home.IsVirtually == false)
+ {
+ device.IdentifyControl(device.DeviceAddr, device.DeviceEpoint, 5);
+ }
}
/// <summary>
@@ -1003,15 +1046,8 @@
//缁х數鍣�,鎺夊厜鍣ㄩ兘鍙洖璺�
return Language.StringByID(R.MyInternationalizationString.uDeviceCircuit) + epointNo;
}
- //鑾峰彇璁惧绫诲瀷
- var deviceInfoType = this.GetMyDeviceEnumInfo(new List<CommonDevice>() { device });
if (device.Type == DeviceType.Thermostat)
{
- //鏂伴闈㈡澘涓殑Thermostat鍙俯搴︿紶鎰熷櫒
- if (deviceInfoType.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueFreshAir)
- {
- return Language.StringByID(R.MyInternationalizationString.TemperatureSensor);
- }
//绌鸿皟閮藉彨瀹ゅ唴鏈�
return Language.StringByID(R.MyInternationalizationString.uIndoorUnit) + epointNo;
}
@@ -1025,7 +1061,10 @@
//鏂伴闈㈡澘婀垮害浼犳劅鍣�
return Language.StringByID(R.MyInternationalizationString.HumiditySensor);
}
- else if (device.Type == DeviceType.OnOffSwitch)
+
+ //鑾峰彇璁惧绫诲瀷
+ var deviceInfoType = this.GetMyDeviceEnumInfo(new List<CommonDevice>() { device });
+ if (device.Type == DeviceType.OnOffSwitch)
{
//闈㈡澘鐨勫共鎺ョ偣鍙寜閿�
if (deviceInfoType.BeloneType == DeviceBeloneType.A鎸夐敭闈㈡澘)
@@ -1036,6 +1075,19 @@
else
{
return Language.StringByID(R.MyInternationalizationString.uDeviceBelongId16) + epointNo;
+ }
+ }
+ else if (device.Type == DeviceType.TemperatureSensor)
+ {
+ if (deviceInfoType.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueFreshAir)
+ {
+ //鏂伴闈㈡澘涓殑Thermostat涓烘俯搴︿紶鎰熷櫒
+ return Language.StringByID(R.MyInternationalizationString.TemperatureSensor);
+ }
+ else if (deviceInfoType.BeloneType == DeviceBeloneType.A鎸夐敭闈㈡澘)
+ {
+ //闈㈡澘鐨勬俯搴︽帰澶村彨 闈㈡澘鍚嶅瓧+娓╁害
+ return Language.StringByID(deviceInfoType.DefultNameId) + Language.StringByID(R.MyInternationalizationString.uTemperature);
}
}
//鍏朵粬鎯呭喌,浣跨敤瀹冪殑榛樿鍚嶇О
@@ -1758,6 +1810,14 @@
}
info.ObjectTypeNameId = 60000;//浼犳劅鍣�
}
+ //14鏂伴璁惧
+ else if (dicType.ContainsKey(DeviceType.FreshAir) == true)
+ {
+ info.ConcreteTextId = R.MyInternationalizationString.uDeviceModelId2310;
+ info.BeloneType = DeviceBeloneType.A鏂伴;
+ info.ConcreteType = DeviceConcreteType.Relay_FangyueFreshAirModul;
+ info.ObjectTypeNameId = 60011;//鏂伴
+ }
int value = (int)info.BeloneType;
if (dicDeviceAllNameID.ContainsKey("uDeviceBelongId" + value) == true)
@@ -1934,9 +1994,19 @@
/// <param name="listMac">璁惧Mac鍦板潃</param>
public void DeleteRealDeviceFromRoom(List<string> listMac)
{
+ bool save = false;
foreach (var deviceMacAddr in listMac)
{
- this.dicDeviceRoomId.Remove(deviceMacAddr);
+ if (this.dicDeviceRoomId.ContainsKey(deviceMacAddr) == true)
+ {
+ this.dicDeviceRoomId.Remove(deviceMacAddr);
+ save = true;
+ }
+ }
+ if (save == false)
+ {
+ //娌℃湁鏀瑰彉,涓嶉渶瑕佷繚瀛�
+ return;
}
//淇濆瓨璁板綍
string fullName = UserCenterLogic.CombinePath(DirNameResourse.DeviceRoomIdFile);
@@ -2007,6 +2077,7 @@
list.Add(DeviceBeloneType.A鎻掑骇);
list.Add(DeviceBeloneType.A璋冨厜鍣�);
list.Add(DeviceBeloneType.A绐楀笜);
+ list.Add(DeviceBeloneType.A鏂伴);
list.Add(DeviceBeloneType.A绌鸿皟);
list.Add(DeviceBeloneType.A缁х數鍣�);
list.Add(DeviceBeloneType.A骞叉帴鐐�);
@@ -2022,7 +2093,62 @@
#endregion
+ #region 鈻� 鑾峰彇璁惧鍦ㄧ嚎鐘舵�佸垪琛╛______________
+
+ /// <summary>
+ /// 鑾峰彇璁惧鍦ㄧ嚎鐘舵�佸垪琛�(娉ㄦ剰,涓�涓澶囧彧杩斿洖涓�涓洖璺�)
+ /// </summary>
+ /// <param name="gwId">缃戝叧id</param>
+ /// <returns></returns>
+ public List<CommonDevice> GetDeviceOnlineList(string gwId)
+ {
+ var zbway = HdlGatewayLogic.Current.GetLocalGateway(gwId);
+ int statu = 0;
+ var listDevice = this.GetDeviceListFromGateway(zbway, ref statu, false, ShowErrorMode.NO);
+ if (statu == -1)
+ {
+ //褰撳嚭鐜板紓甯告椂,浣跨敤鍚庡鎿嶄綔,鐩存帴鑾峰彇鏈湴鐨勮澶囧垪琛�
+ listDevice = this.GetDeviceByGatewayID(gwId);
+ }
+
+ var dicDevice = new Dictionary<string, CommonDevice>();
+ foreach (var device in listDevice)
+ {
+ if (dicDevice.ContainsKey(device.DeviceAddr) == false)
+ {
+ dicDevice[device.DeviceAddr] = device;
+ continue;
+ }
+ //璁惧鏄惁澶勪簬鍦ㄧ嚎鐘舵��
+ bool online = this.CheckDeviceIsOnline(device);
+ if (online == true)
+ {
+ //濡傛灉璁惧鍥炶矾鍦ㄧ嚎,鍒欎紭鍏堜娇鐢ㄥ湪绾跨殑鍥炶矾,鍚庢潵鐨勭洿鎺ヨ鐩�
+ dicDevice[device.DeviceAddr] = device;
+ }
+ }
+ var listReturn = new List<CommonDevice>();
+ foreach (var device in dicDevice.Values)
+ {
+ listReturn.Add(device);
+ }
+ return listReturn;
+ }
+
+ #endregion
+
#region 鈻� 涓�鑸柟娉昣__________________________
+
+ /// <summary>
+ /// 浠庣紦瀛樺彉閲忔娴嬭澶囨槸鍚﹀湪绾�
+ /// </summary>
+ /// <param name="i_device"></param>
+ /// <returns></returns>
+ public bool CheckDeviceIsOnline(CommonDevice i_device)
+ {
+ //0:绂荤嚎 1:鍦ㄧ嚎 2:姝e湪鍒锋柊鐘舵��
+ return i_device.IsOnline == 1 || i_device.IsOnline == 2;
+ }
/// <summary>
/// 鍒ゆ柇璇ヨ澶囨槸鍚﹀彲浠ユ樉绀哄湪涓婚〉
@@ -2040,6 +2166,15 @@
{
//2020.03.23杩藉姞寮忔牱:鏈寚瀹氱被鍨嬬殑缁х數鍣�,涓嶆樉绀�
if (i_device.DfunctionType == DeviceFunctionType.A鏈畾涔�)
+ {
+ return false;
+ }
+ }
+ //濡傛灉鏄柊椋庨潰鏉跨殑鏂伴璁惧,鍒欎笉鏄剧ず
+ else if (i_device.Type == DeviceType.FreshAir)
+ {
+ var myInfoType = LocalDevice.Current.GetMyDeviceEnumInfo(new List<CommonDevice>() { i_device });
+ if (myInfoType.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueFreshAir)
{
return false;
}
@@ -2393,8 +2528,6 @@
mainDevice.InClusterList.AddRange(device.DeviceInfo.InClusterList);
mainDevice.OutClusterList.Clear();
mainDevice.OutClusterList.AddRange(device.DeviceInfo.OutClusterList);
- mainDevice.AttributeStatus.Clear();
- mainDevice.AttributeStatus.AddRange(device.DeviceInfo.AttributeStatus);
//濡傛灉鏄俯搴︿紶鎰熷櫒
if (mainDevice.Type == DeviceType.TemperatureSensor)
@@ -2501,11 +2634,9 @@
public void SetNewDeviceMainKeys(CommonDevice device, Newtonsoft.Json.Linq.JObject jobject)
{
//璁剧疆璁惧涓婚敭绫�
- device.Time = jobject.Value<int>("Time");
device.DeviceID = jobject.Value<int>("Device_ID");
device.DeviceAddr = jobject.Value<string>("DeviceAddr");
device.DeviceEpoint = jobject.Value<int>("Epoint");
- device.DataID = jobject.Value<int>("Data_ID");
}
#endregion
@@ -2574,23 +2705,27 @@
//=========鈽呪槄瀹夐槻绫讳紶鎰熷櫒绫�(1300-2299)鈽呪槄=========
//杩欓噷鏄害涔愬厠鐨�
- this.dicDeviceModelIdEnum["MULTI-GASE--EA07"] = "1300-1300-60000";//鐕冩皵浼犳劅鍣�
- this.dicDeviceModelIdEnum["MULTI-MECI--EA01"] = "1301-1300-60000";//闂ㄧ獥纾佷紶鎰熷櫒
- this.dicDeviceModelIdEnum["MULTI-FIRE--EA05"] = "1302-1300-60000";//鐑熼浘浼犳劅鍣�
- this.dicDeviceModelIdEnum["MULTI-MOTI--EA04"] = "1303-1300-60000";//绾㈠浼犳劅鍣�
- this.dicDeviceModelIdEnum["MULTI-WATE--EA02"] = "1304-1300-60000";//姘存蹈浼犳劅鍣�
- this.dicDeviceModelIdEnum["MULTI-BURO--EA06"] = "1305-1300-60000";//绱ф�ユ寜閿�
+ this.dicDeviceModelIdEnum["MULTI-GASE--EA07"] = "1300-1200-60000";//鐕冩皵浼犳劅鍣�
+ this.dicDeviceModelIdEnum["MULTI-MECI--EA01"] = "1301-1200-60000";//闂ㄧ獥纾佷紶鎰熷櫒
+ this.dicDeviceModelIdEnum["MULTI-FIRE--EA05"] = "1302-1200-60000";//鐑熼浘浼犳劅鍣�
+ this.dicDeviceModelIdEnum["MULTI-MOTI--EA04"] = "1303-1200-60000";//绾㈠浼犳劅鍣�
+ this.dicDeviceModelIdEnum["MULTI-WATE--EA02"] = "1304-1200-60000";//姘存蹈浼犳劅鍣�
+ this.dicDeviceModelIdEnum["MULTI-BURO--EA06"] = "1305-1200-60000";//绱ф�ユ寜閿�
//杩欓噷鏄渤涓滅殑
- this.dicDeviceModelIdEnum["MSG01/M-ZB.10"] = "1300-1300-60000";//鐕冩皵浼犳劅鍣�
- this.dicDeviceModelIdEnum["MSDC01/M-ZB.10"] = "1301-1300-60000";//闂ㄧ獥纾佷紶鎰熷櫒
- this.dicDeviceModelIdEnum["MSS01/M-ZB.10"] = "1302-1300-60000";//鐑熼浘浼犳劅鍣�
- this.dicDeviceModelIdEnum["MSPIR01/M-ZB.10"] = "1303-1300-60000";//绾㈠浼犳劅鍣�
- this.dicDeviceModelIdEnum["MSW01/M-ZB.10"] = "1304-1300-60000";//姘存蹈浼犳劅鍣�
- this.dicDeviceModelIdEnum["MBU01/M-ZB.10"] = "1305-1300-60000";//绱ф�ユ寜閿�
+ this.dicDeviceModelIdEnum["MSG01/M-ZB.10"] = "1300-1200-60000";//鐕冩皵浼犳劅鍣�
+ this.dicDeviceModelIdEnum["MSDC01/M-ZB.10"] = "1301-1200-60000";//闂ㄧ獥纾佷紶鎰熷櫒
+ this.dicDeviceModelIdEnum["MSS01/M-ZB.10"] = "1302-1200-60000";//鐑熼浘浼犳劅鍣�
+ this.dicDeviceModelIdEnum["MSPIR01/M-ZB.10"] = "1303-1200-60000";//绾㈠浼犳劅鍣�
+ this.dicDeviceModelIdEnum["MSW01/M-ZB.10"] = "1304-1200-60000";//姘存蹈浼犳劅鍣�
+ this.dicDeviceModelIdEnum["MBU01/M-ZB.10"] = "1305-1200-60000";//绱ф�ユ寜閿�
+ this.dicDeviceModelIdEnum["MGCD01/ZB.10"] = "1306-1200-60000";//鍚搁《鐕冩皵浼犳劅鍣�
+
+ //PM2.5绌烘皵璐ㄩ噺浼犳劅鍣� 銆愯璁惧灞炰簬绗笁鏂硅澶囷紝娌℃湁闀滃儚ID銆�
+ this.dicDeviceModelIdEnum["SZ_PM100"] = "1307-1200-60000";//PM2.5绌烘皵璐ㄩ噺浼犳劅鍣�
//=========鈽呪槄缁х數鍣ㄧ被(2300-2499)鈽呪槄=========
this.dicDeviceModelIdEnum["MPR0310-ZB.10"] = "2300-2300-60001";//3璺户鐢靛櫒灏忔ā鍧�
- this.dicDeviceModelIdEnum["MFA01-ZB1.0"] = "2310-2300-60001";//鏂规偊鏂伴灏忔ā鍧�
+ this.dicDeviceModelIdEnum["MFA01-ZB.10"] = "2310-2300-60011";//鏂规偊鏂伴灏忔ā鍧�
//=========鈽呪槄璋冨厜鍣ㄧ被(2500-2799)鈽呪槄=========
this.dicDeviceModelIdEnum["MPD0101-ZB.10"] = "2500-2500-60007";//1璺皟鍏夊櫒灏忔ā鍧�
@@ -2633,9 +2768,8 @@
this.dicPictrueShard["ButtonPanel_SimpleFour"] = "ButtonPanel_Four";//绠�绾�4鎸夐敭闈㈡澘 娌跨敤 4鎸夐敭鐨勫浘鏍�
this.dicPictrueShard["ButtonPanel_SimpleThree"] = "ButtonPanel_Three";//绠�绾�3鎸夐敭闈㈡澘 娌跨敤 3鎸夐敭鐨勫浘鏍�
this.dicPictrueShard["ButtonPanel_SimpleTwo"] = "ButtonPanel_Two";//绠�绾�2鎸夐敭闈㈡澘 娌跨敤 2鎸夐敭鐨勫浘鏍�
- this.dicPictrueShard["IntelligentLocks_Sone"] = "IntelligentLocks_H06C";//S-one鐨勯棬閿佸浘鐗囨部鐢℉06C鐨勫浘鏍�
- this.dicPictrueShard["Relay_FangyueFreshAirModul"] = "Relay_ThreeLoad";//鏂规偊鏂伴灏忔ā鍧楀浘鐗囨部鐢�3璺户鐢靛櫒鐨勫浘鏍�
-
+ this.dicPictrueShard["IntelligentLocks_Sone"] = "IntelligentLocks_H06C";//S-one鐨勯棬閿佸浘鐗� 娌跨敤 H06C鐨勫浘鏍�
+ this.dicPictrueShard["Relay_FangyueFreshAirModul"] = "Relay_ThreeLoad";//鏂规偊鏂伴灏忔ā鍧楀浘鐗� 娌跨敤 3璺户鐢靛櫒鐨勫浘鏍�
}
#endregion
@@ -2775,6 +2909,15 @@
/// 绱ф�ユ寜閽�
/// </summary>
Sensor_EmergencyButton = 1305,
+ /// <summary>
+ /// 鍚搁《鐕冩皵浼犳劅鍣�
+ /// </summary>
+ Sensor_CeilingGas = 1306,
+ /// <summary>
+ /// PM2.5绌烘皵璐ㄩ噺浼犳劅鍣�
+ /// </summary>
+ Sensor_PMTwoPointFive = 1307,
+
/// <summary>
/// 杩愬姩浼犳劅鍣�
/// </summary>
@@ -2930,6 +3073,10 @@
/// </summary>
A缁х數鍣� = 2300,
/// <summary>
+ /// 鏂伴
+ /// </summary>
+ A鏂伴 = 2310,
+ /// <summary>
/// 璋冨厜鍣�(2500-2799)
/// </summary>
A璋冨厜鍣� = 2500,
@@ -2984,7 +3131,7 @@
/// <summary>
/// 骞叉帴鐐�
/// </summary>
- A骞叉帴鐐� = 16
+ A骞叉帴鐐� = 16,
}
#endregion
--
Gitblit v1.8.0