From 8f780c8ea5411f01f788d52bad7c9440d68eb349 Mon Sep 17 00:00:00 2001 From: gxc <guoxuecheng@guoxuechengdeMacBook-Pro.local> Date: 星期一, 30 十二月 2019 13:35:01 +0800 Subject: [PATCH] 2019.12.30 --- ZigbeeApp/.vs/GateWay/xs/UserPrefs.xml | 31 ++ ZigbeeApp/Shared/Phone/Device/CommonForm/RoomView.cs | 224 ++++++++++++-------- ZigbeeApp/.vs/GateWay/xs/sqlite3/storage.ide | 0 ZigbeeApp/Shared/Phone/Device/DeviceLogic/ReadDeviceAttributeLogic.cs | 91 ++++++++ ZigbeeApp/Shared/Phone/Device/Room/EditRoom.cs | 307 +++++++++++++-------------- 5 files changed, 394 insertions(+), 259 deletions(-) diff --git a/ZigbeeApp/.vs/GateWay/xs/UserPrefs.xml b/ZigbeeApp/.vs/GateWay/xs/UserPrefs.xml index 9205cd3..fdcd02e 100644 --- a/ZigbeeApp/.vs/GateWay/xs/UserPrefs.xml +++ b/ZigbeeApp/.vs/GateWay/xs/UserPrefs.xml @@ -1,27 +1,42 @@ 锘�<Properties StartupConfiguration="{28EDE1FF-20EF-476B-8AF8-24A3EEB69F45}|Default"> - <MonoDevelop.Ide.ItemProperties.GateWay.Droid PreferredExecutionTarget="Android.SelectDevice" /> + <MonoDevelop.Ide.ItemProperties.GateWay.Droid PreferredExecutionTarget="Android.M7BBB18B19152766" /> <MonoDevelop.Ide.ItemProperties.GateWay.Ios automaticSigning="False" PreferredExecutionTarget="MonoDevelop.IPhone.IPhoneDeviceTarget.8c0bdb303f25d82c2a42fb8bfca449bfaca00260" /> <MonoDevelop.Ide.ItemProperties.ShardLib PreferredExecutionTarget="Android.M7BBB18B19152766" /> - <MonoDevelop.Ide.Workbench ActiveDocument="Shared/R.cs"> + <MonoDevelop.Ide.Workbench ActiveDocument="Shared/Phone/Device/Room/EditRoom.cs"> <Files> - <File FileName="Shared/R.cs" Line="808" Column="2" /> + <File FileName="Shared/R.cs" Line="809" Column="16" /> <File FileName="GateWay.Droid/Assets/Language.ini" /> <File FileName="Shared/Phone/Device/Category/Category.cs" /> <File FileName="Shared/Phone/Device/Category/SelectDevice.cs" /> <File FileName="Shared/Common/Device.cs" /> <File FileName="Shared/Phone/UserView/UserHomeView.cs" /> + <File FileName="Shared/Phone/Device/Light/LightControl.cs" /> <File FileName="Shared/Phone/Device/Category/CategoryAddScene.cs" /> - <File FileName="Shared/Phone/Device/CommonForm/DeviceInfoEditRow.cs" /> - <File FileName="Shared/Common/DeviceUI.cs" /> - <File FileName="Shared/Phone/Device/CommonForm/RoomView.cs" /> - <File FileName="Shared/Phone/Device/CommonForm/DeviceInfoRow.cs" /> + <File FileName="Shared/Phone/Device/CommonForm/RoomView.cs" Line="271" Column="59" /> + <File FileName="Shared/Phone/Device/Room/EditRoom.cs" Line="84" Column="74" /> + <File FileName="Shared/Phone/Device/Room/RoomTemperatureSetting.cs" /> + <File FileName="Shared/Phone/Device/Room/RoomHumiditySetting.cs" /> </Files> <Pads> <Pad Id="ProjectPad"> <State name="__root__"> <Node name="GateWay" expanded="True"> <Node name="Shared" expanded="True"> - <Node name="R.cs" selected="True" /> + <Node name="Common" expanded="True" /> + <Node name="Phone" expanded="True"> + <Node name="Device" expanded="True"> + <Node name="CommonForm" expanded="True" /> + <Node name="DeviceLogic" expanded="True" /> + <Node name="Light" expanded="True" /> + <Node name="Room" expanded="True"> + <Node name="EditRoom.cs" selected="True" /> + </Node> + </Node> + <Node name="UserCenter" expanded="True"> + <Node name="Residence" expanded="True" /> + </Node> + <Node name="UserView" expanded="True" /> + </Node> </Node> </Node> </State> diff --git a/ZigbeeApp/.vs/GateWay/xs/sqlite3/storage.ide b/ZigbeeApp/.vs/GateWay/xs/sqlite3/storage.ide index 23a5b6f..836de9c 100644 --- a/ZigbeeApp/.vs/GateWay/xs/sqlite3/storage.ide +++ b/ZigbeeApp/.vs/GateWay/xs/sqlite3/storage.ide Binary files differ diff --git a/ZigbeeApp/Shared/Phone/Device/CommonForm/RoomView.cs b/ZigbeeApp/Shared/Phone/Device/CommonForm/RoomView.cs index 0d012e2..e042f59 100644 --- a/ZigbeeApp/Shared/Phone/Device/CommonForm/RoomView.cs +++ b/ZigbeeApp/Shared/Phone/Device/CommonForm/RoomView.cs @@ -1,11 +1,13 @@ 锘縰sing System; using Shared.Common; +using Shared.Phone.Device.DeviceLogic; using Shared.Phone.UserCenter; using Shared.Phone.UserView; +using ZigBee.Device; namespace Shared.Phone.Device.CommonForm { - public class RoomView:FrameLayout + public class RoomView:FrameLayout, ZigBee.Common.IStatus { /// <summary> /// Room @@ -22,10 +24,130 @@ Button roomListBtn; + Button temperatureText; + + Button humidityText; + + CommonDevice temperDevice; + + CommonDevice humidDevice; + + #region 鈼� 鎺ュ彛__________________________ + /// <summary> + /// 澶勭悊鍙樺寲浜嬩欢 --灏嗗純鐢� 鏀圭敤DeviceInfoChange() + /// </summary> + /// <returns>The changed.</returns> + /// <param name="common">Common.</param> + public void Changed(CommonDevice common) + { + + } + /// <summary> + /// Changeds the IL ogic status. + /// </summary> + /// <param name="logic">Logic.</param> + public void ChangedILogicStatus(ZigBee.Device.Logic logic) + { + //throw new NotImplementedException(); + } + /// <summary> + /// Changeds the IS cene status. + /// </summary> + /// <param name="scene">Scene.</param> + public void ChangedISceneStatus(Scene scene) + { + //throw new NotImplementedException(); + } + /// <summary> + /// 璁惧鐘舵�佹洿鏂版帴鍙� + /// <para>type锛氬鏋滀负 DeviceInComingRespon:璁惧鏂颁笂鎶�</para> + /// <para>type锛氬鏋滀负 IASInfoReport:RemoveDeviceRespon</para> + /// <para>type锛氬鏋滀负 DeviceStatusReport:璁惧涓婃姤</para> + /// <para>type锛氬鏋滀负 IASInfoReport:IAS瀹夐槻淇℃伅涓婃姤</para> + /// <para>type锛氬鏋滀负 OnlineStatusChange: 璁惧鍦ㄧ嚎鐘舵�佹洿鏂�</para> + /// </summary> + /// <param name="common">Common.</param> + /// <param name="typeTag">Type tag.</param> + public void DeviceInfoChange(CommonDevice common, string typeTag) + { + if (typeTag == "DeviceStatusReport") + { + Application.RunOnMainThread(() => + { + try + { + if (common.DeviceStatusReport.AttriBute == null || common.DeviceStatusReport.AttriBute.Count == 0) + { + return; + } + //鏄惁涓哄綋鍓嶈澶� + if ((temperDevice?.DeviceEpoint != common.DeviceEpoint || temperDevice?.DeviceAddr != common.DeviceAddr) && (humidDevice?.DeviceEpoint != common.DeviceEpoint || humidDevice?.DeviceAddr != common.DeviceAddr) ) + { + //return; + } + + //if (common.Type == DeviceType.TemperatureSensor) + //{ + if (common.DeviceStatusReport.CluterID == 1026) + { + foreach (var data in common.DeviceStatusReport.AttriBute) + { + if (data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue) + { + if (data.AttriButeData == 0) + { + //0 + humidityText.Text = "--%"; + room.Humidity = 0; + } + else + { + //灏忔暟鐐归渶瑕佷竴浣�(婀垮害娌℃湁璐熸暟) + string strValue = data.AttriButeData.ToString(); + strValue = strValue.Substring(0, strValue.Length - 1); + humidityText.Text = strValue.Insert(strValue.Length - 1, ".") + "%"; + room.Humidity = int.Parse(strValue) * 0.1; + } + } + } + } + else if (common.DeviceStatusReport.CluterID == 1029) + { + foreach (var data in common.DeviceStatusReport.AttriBute) + { + if (data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue) + { + if (data.AttriButeData == 0) + { + //0 + humidityText.Text = "--%"; + room.Humidity = 0; + } + else + { + //灏忔暟鐐归渶瑕佷竴浣�(婀垮害娌℃湁璐熸暟) + string strValue = data.AttriButeData.ToString(); + strValue = strValue.Substring(0, strValue.Length - 1); + humidityText.Text = strValue.Insert(strValue.Length - 1, ".") + "%"; + room.Humidity = int.Parse(strValue) * 0.1; + } + } + } + } + //} + } + catch (Exception ex) + { + System.Console.WriteLine($"Error:{ex.Message}"); + } + }); + } + } + #endregion + public override void RemoveFromParent() { - HdlGatewayReceiveLogic.Current.RemoveEvent("TemperatrueDevice" + room.Id); - HdlGatewayReceiveLogic.Current.RemoveEvent("HumidityDevice" + room.Id); + ZbGateway.StatusList.Remove(this); base.RemoveFromParent(); } @@ -40,6 +162,7 @@ Y = Application.GetRealHeight(y); Width = Application.GetRealWidth(717); Height = Application.GetRealHeight(478); + ZbGateway.StatusList.Add(this); } /// <summary> @@ -49,6 +172,10 @@ public void Init(Common.Room r) { this.room = r; + + this.temperDevice= Common.LocalDevice.Current.GetDevice(room.TemperatrueDevice); + + this.humidDevice= Common.LocalDevice.Current.GetDevice(room.HumidityDevice); var roomBackView = new FrameLayout() { @@ -106,13 +233,13 @@ }; roomTemperatureBackground.AddChidren(temperatureIcon); - var temperatureText = new Button + temperatureText = new Button { X = Application.GetRealWidth(69), Width = Application.GetRealWidth(120), Height = Application.GetRealHeight(58), Gravity = Gravity.CenterVertical, - Text = $"{room.Temperatrue}鈩�" + Text = Math.Abs(room.Temperatrue) <= 0 ? "--鈩�" : $"{room.Temperatrue}鈩�" }; roomTemperatureBackground.AddChidren(temperatureText); @@ -126,107 +253,28 @@ }; roomTemperatureBackground.AddChidren(humidityIcon); - var humidityText = new Button + humidityText = new Button { X = Application.GetRealWidth(260), Width = Application.GetRealWidth(120), Height = Application.GetRealHeight(58), Gravity = Gravity.CenterVertical, - Text = $"{room.Humidity}%" + Text = Math.Abs(room.Temperatrue) <= 0 ? "--%" : $"{room.Humidity}%" }; roomTemperatureBackground.AddChidren(humidityText); if (string.IsNullOrEmpty(room.TemperatrueDevice) == false) { - HdlGatewayReceiveLogic.Current.RemoveEvent("TemperatrueDevice" + room.Id); - HdlGatewayReceiveLogic.Current.AddAttributeEvent("TemperatrueDevice" + room.Id, ReceiveComandDiv.A璁惧灞炴�т笂鎶�, (report) => - { - string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(report); - if (room.TemperatrueDevice != mainKeys) - { - return; - } - //绉婚櫎鎺変簨浠� - HdlGatewayReceiveLogic.Current.RemoveEvent("TemperatrueDevice"); - - foreach (var data in report.DeviceStatusReport.AttriBute) - { - if (data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue) - { - if (data.AttriButeData == 0) - { - //0鈩� - temperatureText.Text = "0.0鈩�"; - room.Temperatrue = 0; - } - else if (data.AttriButeData > 32767) - { - //璐熸暟(鐗规畩澶勭悊) - string strValue = (data.AttriButeData - 65536).ToString(); - //灏忔暟鐐归渶瑕佷竴浣� - strValue = strValue.Substring(0, strValue.Length - 1); - temperatureText.Text = strValue.Insert(strValue.Length - 1, ".") + "鈩�"; - room.Temperatrue = int.Parse(strValue) * 0.1; - } - else - { - //灏忔暟鐐归渶瑕佷竴浣� - string strValue = data.AttriButeData.ToString(); - strValue = strValue.Substring(0, strValue.Length - 1); - temperatureText.Text = strValue.Insert(strValue.Length - 1, ".") + "鈩�"; - room.Temperatrue = int.Parse(strValue) * 0.1; - } - } - } - }); //鍙戦�佽幏鍙栨俯搴︾殑鍛戒护 var dev = Common.LocalDevice.Current.GetDevice(room.TemperatrueDevice); - if (dev != null) - { - (dev as ZigBee.Device.TemperatureSensor).ReadTemperatureOrHumidity(); - } + ReadDeviceAttributeLogic.Instance.SendTemperatureStatuComand(dev); } if (string.IsNullOrEmpty(room.HumidityDevice) == false) { - HdlGatewayReceiveLogic.Current.RemoveEvent("HumidityDevice"+room.Id); - HdlGatewayReceiveLogic.Current.AddAttributeEvent("HumidityDevice" + room.Id, ReceiveComandDiv.A璁惧灞炴�т笂鎶�, (report) => - { - string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(report); - if (room.HumidityDevice != mainKeys) - { - return; - } - //绉婚櫎鎺変簨浠� - HdlGatewayReceiveLogic.Current.RemoveEvent("HumidityDevice"); - foreach (var data in report.DeviceStatusReport.AttriBute) - { - if (data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue) - { - if (data.AttriButeData == 0) - { - //0 - humidityText.Text = "0.0%"; - room.Humidity = 0; - } - else - { - //灏忔暟鐐归渶瑕佷竴浣�(婀垮害娌℃湁璐熸暟) - string strValue = data.AttriButeData.ToString(); - strValue = strValue.Substring(0, strValue.Length - 1); - humidityText.Text = strValue.Insert(strValue.Length - 1, ".") + "%"; - room.Humidity = int.Parse(strValue) * 0.1; - } - } - } - }); - //鍙戦�佽幏鍙栨箍搴︾殑鍛戒护 var dev = Common.LocalDevice.Current.GetDevice(room.HumidityDevice); - if (dev != null) - { - (dev as ZigBee.Device.TemperatureSensor).ReadTemperatureOrHumidity(); - } + ReadDeviceAttributeLogic.Instance.SendHumidityStatuComand(dev); } diff --git a/ZigbeeApp/Shared/Phone/Device/DeviceLogic/ReadDeviceAttributeLogic.cs b/ZigbeeApp/Shared/Phone/Device/DeviceLogic/ReadDeviceAttributeLogic.cs index e283fca..6171782 100644 --- a/ZigbeeApp/Shared/Phone/Device/DeviceLogic/ReadDeviceAttributeLogic.cs +++ b/ZigbeeApp/Shared/Phone/Device/DeviceLogic/ReadDeviceAttributeLogic.cs @@ -35,6 +35,10 @@ /// <param name="device">璁惧</param> public void SendACStatuComand(CommonDevice device) { + if (device == null) + { + return; + } new System.Threading.Thread(() => { SendFanStatuComand(device); @@ -50,6 +54,10 @@ /// <param name="device">璁惧</param> private void SendThermostatStatuComand(CommonDevice device) { + if (device == null) + { + return; + } var jObject = new Newtonsoft.Json.Linq.JObject { { "DeviceAddr",device.DeviceAddr }, @@ -99,6 +107,10 @@ /// <param name="device">璁惧</param> private void SendFanStatuComand(CommonDevice device) { + if (device == null) + { + return; + } var jObject = new Newtonsoft.Json.Linq.JObject { { "DeviceAddr",device.DeviceAddr }, @@ -131,6 +143,10 @@ /// <param name="device">绐楀笜</param> public void SendCurtainStatuComand(CommonDevice device) { + if (device == null) + { + return; + } var jObject = new Newtonsoft.Json.Linq.JObject { { "DeviceAddr",device.DeviceAddr }, @@ -169,6 +185,10 @@ /// <param name="device"></param> public void SendDimmableLightStatuComand(CommonDevice device) { + if (device == null) + { + return; + } new System.Threading.Thread(() => { SendSwitchStatuComand(device); @@ -184,6 +204,10 @@ /// <param name="device">绐楀笜</param> private void SendSwitchStatuComand(CommonDevice device) { + if (device == null) + { + return; + } var jObject = new Newtonsoft.Json.Linq.JObject { { "DeviceAddr",device.DeviceAddr }, @@ -209,6 +233,10 @@ /// <param name="device">绐楀笜</param> private void SendLevelStatuComand(CommonDevice device) { + if (device == null) + { + return; + } var jObject = new Newtonsoft.Json.Linq.JObject { { "DeviceAddr",device.DeviceAddr }, @@ -229,5 +257,68 @@ } #endregion + + #region 鈼� 娓╂箍搴___________________________ + + /// <summary> + /// 璇诲彇娓╁害 + /// </summary> + /// <param name="device"></param> + public void SendTemperatureStatuComand(CommonDevice device) + { + if (device == null) + { + return; + } + var jObject = new Newtonsoft.Json.Linq.JObject + { + { "DeviceAddr",device.DeviceAddr }, + { "Epoint", device.DeviceEpoint }, + { "Cluster_ID", (int)Cluster_ID.TemperatureMeasurement }, + { "Command", 108 } + }; + var attriBute = new Newtonsoft.Json.Linq.JArray + { + new Newtonsoft.Json.Linq.JObject + { + { "AttriButeId", (int)AttriButeId.MeasuredValue} + } + }; + var data = new Newtonsoft.Json.Linq.JObject { { "AttriBute", attriBute } }; + jObject.Add("Data", data); + device.Gateway?.Send(("GetDeviceStatus"), jObject.ToString()); + } + + /// <summary> + /// 璇诲彇婀垮害 + /// </summary> + /// <param name="device"></param> + public void SendHumidityStatuComand(CommonDevice device) + { + if (device == null) + { + return; + } + var jObject = new Newtonsoft.Json.Linq.JObject + { + { "DeviceAddr",device.DeviceAddr }, + { "Epoint", device.DeviceEpoint }, + { "Cluster_ID", (int)Cluster_ID.RelativeHumidityMeasurement }, + { "Command", 108 } + }; + var attriBute = new Newtonsoft.Json.Linq.JArray + { + new Newtonsoft.Json.Linq.JObject + { + { "AttriButeId", (int)AttriButeId.MeasuredValue} + } + }; + var data = new Newtonsoft.Json.Linq.JObject { { "AttriBute", attriBute } }; + jObject.Add("Data", data); + device.Gateway?.Send(("GetDeviceStatus"), jObject.ToString()); + } + + #endregion + } } diff --git a/ZigbeeApp/Shared/Phone/Device/Room/EditRoom.cs b/ZigbeeApp/Shared/Phone/Device/Room/EditRoom.cs index 15ae5d4..5742330 100644 --- a/ZigbeeApp/Shared/Phone/Device/Room/EditRoom.cs +++ b/ZigbeeApp/Shared/Phone/Device/Room/EditRoom.cs @@ -3,12 +3,14 @@ using System.Globalization; using Shared.Common; using Shared.Phone.Device.CommonForm; +using Shared.Phone.Device.DeviceLogic; using Shared.Phone.UserCenter; using Shared.Phone.UserView; +using ZigBee.Device; namespace Shared.Phone.Device.Room { - public class EditRoom : FrameLayout + public class EditRoom : FrameLayout, ZigBee.Common.IStatus { #region 鈼� 鍙橀噺____________________________ /// <summary> @@ -44,11 +46,143 @@ /// </summary> public int OldIconPathType; - + CommonDevice temperDevice; + + CommonDevice humidDevice; + + DeviceInfoRow temperatureRow; + + DeviceInfoRow humidityRow; + #endregion + + #region 鈼� 鎺ュ彛__________________________ + /// <summary> + /// 澶勭悊鍙樺寲浜嬩欢 --灏嗗純鐢� 鏀圭敤DeviceInfoChange() + /// </summary> + /// <returns>The changed.</returns> + /// <param name="common">Common.</param> + public void Changed(CommonDevice common) + { + + } + /// <summary> + /// Changeds the IL ogic status. + /// </summary> + /// <param name="logic">Logic.</param> + public void ChangedILogicStatus(ZigBee.Device.Logic logic) + { + //throw new NotImplementedException(); + } + /// <summary> + /// Changeds the IS cene status. + /// </summary> + /// <param name="scene">Scene.</param> + public void ChangedISceneStatus(Scene scene) + { + //throw new NotImplementedException(); + } + /// <summary> + /// 璁惧鐘舵�佹洿鏂版帴鍙� + /// <para>type锛氬鏋滀负 DeviceInComingRespon:璁惧鏂颁笂鎶�</para> + /// <para>type锛氬鏋滀负 IASInfoReport:RemoveDeviceRespon</para> + /// <para>type锛氬鏋滀负 DeviceStatusReport:璁惧涓婃姤</para> + /// <para>type锛氬鏋滀负 IASInfoReport:IAS瀹夐槻淇℃伅涓婃姤</para> + /// <para>type锛氬鏋滀负 OnlineStatusChange: 璁惧鍦ㄧ嚎鐘舵�佹洿鏂�</para> + /// </summary> + /// <param name="common">Common.</param> + /// <param name="typeTag">Type tag.</param> + public void DeviceInfoChange(CommonDevice common, string typeTag) + { + if (typeTag == "DeviceStatusReport") + { + Application.RunOnMainThread(() => + { + try + { + if (common.DeviceStatusReport.AttriBute == null || common.DeviceStatusReport.AttriBute.Count == 0) + { + return; + } + //鏄惁涓哄綋鍓嶈澶� + if ((temperDevice?.DeviceEpoint != common.DeviceEpoint || temperDevice?.DeviceAddr != common.DeviceAddr) && (humidDevice?.DeviceEpoint != common.DeviceEpoint || humidDevice?.DeviceAddr != common.DeviceAddr)) + { + //return; + } + + //if (common.Type == DeviceType.TemperatureSensor) + //{ + if (common.DeviceStatusReport.CluterID == 1026) + { + foreach (var data in common.DeviceStatusReport.AttriBute) + { + if (data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue) + { + if (data.AttriButeData == 0) + { + //0鈩� + temperatureRow.NameText.Text = "--鈩�"; + room.Temperatrue = 0; + } + else if (data.AttriButeData > 32767) + { + //璐熸暟(鐗规畩澶勭悊) + string strValue = (data.AttriButeData - 65536).ToString(); + //灏忔暟鐐归渶瑕佷竴浣� + strValue = strValue.Substring(0, strValue.Length - 1); + temperatureRow.NameText.Text = strValue.Insert(strValue.Length - 1, ".") + "鈩�"; + room.Temperatrue = int.Parse(strValue) * 0.1; + } + else + { + //灏忔暟鐐归渶瑕佷竴浣� + string strValue = data.AttriButeData.ToString(); + strValue = strValue.Substring(0, strValue.Length - 1); + temperatureRow.NameText.Text = strValue.Insert(strValue.Length - 1, ".") + "鈩�"; + room.Temperatrue = int.Parse(strValue) * 0.1; + } + } + } + } + else if (common.DeviceStatusReport.CluterID == 1029) + { + foreach (var data in common.DeviceStatusReport.AttriBute) + { + if (data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue) + { + if (data.AttriButeData == 0) + { + //0 + humidityRow.NameText.Text = "--%"; + room.Humidity = 0; + } + else + { + //灏忔暟鐐归渶瑕佷竴浣�(婀垮害娌℃湁璐熸暟) + string strValue = data.AttriButeData.ToString(); + strValue = strValue.Substring(0, strValue.Length - 1); + humidityRow.NameText.Text = strValue.Insert(strValue.Length - 1, ".") + "%"; + room.Humidity = int.Parse(strValue) * 0.1; + } + } + } + } + //} + } + catch (Exception ex) + { + System.Console.WriteLine($"Error:{ex.Message}"); + } + }); + } + } + #endregion + + public EditRoom() { + ZbGateway.StatusList.Add(this); BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor; } @@ -71,10 +205,8 @@ } public override void RemoveFromParent() - { - HdlGatewayReceiveLogic.Current.RemoveEvent("TemperatrueDevice"); - HdlGatewayReceiveLogic.Current.RemoveEvent("HumidityDevice"); - + { + ZbGateway.StatusList.Remove(this); CommonPage.Instance.IsDrawerLockMode = false; base.RemoveFromParent(); } @@ -188,7 +320,7 @@ }; - var temperatureRow = new DeviceInfoRow(446); + temperatureRow = new DeviceInfoRow(446); temperatureRow.Init(); temperatureRow.SetTipTitle(R.MyInternationalizationString.Temperature); temperatureRow.NameText.TextAlignment = TextAlignment.CenterRight; @@ -208,102 +340,16 @@ } room.TemperatrueDevice = $"{selectTemp.DeviceAddr}{selectTemp.DeviceEpoint}"; temperatureRow.SetTitle(R.MyInternationalizationString.Getting); - - HdlGatewayReceiveLogic.Current.RemoveEvent("TemperatrueDevice"); - HdlGatewayReceiveLogic.Current.AddAttributeEvent("TemperatrueDevice", ReceiveComandDiv.A璁惧灞炴�т笂鎶�, (Action<ZigBee.Device.CommonDevice>)((report) => - { - string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(report); - if (room.TemperatrueDevice != mainKeys) - { - return; - } - //绉婚櫎鎺変簨浠� - HdlGatewayReceiveLogic.Current.RemoveEvent("TemperatrueDevice"); - - foreach (var data in report.DeviceStatusReport.AttriBute) - { - if (data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue) - { - if (data.AttriButeData == 0) - { - //0鈩� - temperatureRow.NameText.Text = "0.0鈩�"; - room.Temperatrue = 0; - } - else if (data.AttriButeData > 32767) - { - //璐熸暟(鐗规畩澶勭悊) - string strValue = (data.AttriButeData - 65536).ToString(); - //灏忔暟鐐归渶瑕佷竴浣� - strValue = strValue.Substring(0, strValue.Length - 1); - temperatureRow.NameText.Text = strValue.Insert(strValue.Length - 1, ".") + "鈩�"; - room.Temperatrue = int.Parse(strValue) * 0.1; - } - else - { - //灏忔暟鐐归渶瑕佷竴浣� - string strValue = data.AttriButeData.ToString(); - strValue = strValue.Substring(0, strValue.Length - 1); - temperatureRow.NameText.Text = strValue.Insert(strValue.Length - 1, ".") + "鈩�"; - room.Temperatrue = int.Parse(strValue) *0.1; - } - } - } - })); //鍙戦�佽幏鍙栨俯搴︾殑鍛戒护 - (selectTemp as ZigBee.Device.TemperatureSensor).ReadTemperatureOrHumidity(); + ReadDeviceAttributeLogic.Instance.SendTemperatureStatuComand(selectTemp); }; }; if (string.IsNullOrEmpty(room.TemperatrueDevice) == false) { temperatureRow.SetTitle(R.MyInternationalizationString.Getting); - HdlGatewayReceiveLogic.Current.RemoveEvent("TemperatrueDevice"); - HdlGatewayReceiveLogic.Current.AddAttributeEvent("TemperatrueDevice", ReceiveComandDiv.A璁惧灞炴�т笂鎶�, (Action<ZigBee.Device.CommonDevice>)((report) => - { - string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(report); - if (room.TemperatrueDevice != mainKeys) - { - return; - } - //绉婚櫎鎺変簨浠� - HdlGatewayReceiveLogic.Current.RemoveEvent("TemperatrueDevice"); - - foreach (var data in report.DeviceStatusReport.AttriBute) - { - if (data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue) - { - if (data.AttriButeData == 0) - { - //0鈩� - temperatureRow.NameText.Text = "0.0鈩�"; - room.Temperatrue = 0; - } - else if (data.AttriButeData > 32767) - { - //璐熸暟(鐗规畩澶勭悊) - string strValue = (data.AttriButeData - 65536).ToString(); - //灏忔暟鐐归渶瑕佷竴浣� - strValue = strValue.Substring(0, strValue.Length - 1); - temperatureRow.NameText.Text = strValue.Insert(strValue.Length - 1, ".") + "鈩�"; - room.Temperatrue = int.Parse(strValue) * 0.1; - } - else - { - //灏忔暟鐐归渶瑕佷竴浣� - string strValue = data.AttriButeData.ToString(); - strValue = strValue.Substring(0, strValue.Length - 1); - temperatureRow.NameText.Text = strValue.Insert(strValue.Length - 1, ".") + "鈩�"; - room.Temperatrue = int.Parse(strValue) * 0.1; - } - } - } - })); //鍙戦�佽幏鍙栨俯搴︾殑鍛戒护 var dev = Common.LocalDevice.Current.GetDevice(room.TemperatrueDevice); - if (dev != null) - { - (dev as ZigBee.Device.TemperatureSensor).ReadTemperatureOrHumidity(); - } + ReadDeviceAttributeLogic.Instance.SendTemperatureStatuComand(dev); } else { @@ -311,7 +357,7 @@ } - var humidityRow = new DeviceInfoRow(585); + humidityRow = new DeviceInfoRow(585); humidityRow.Init(); humidityRow.SetTipTitle(R.MyInternationalizationString.Humidity); humidityRow.NameText.TextAlignment = TextAlignment.CenterRight; @@ -332,81 +378,16 @@ room.HumidityDevice = $"{selectTemp.DeviceAddr}{selectTemp.DeviceEpoint}"; humidityRow.SetTitle(R.MyInternationalizationString.Getting); - HdlGatewayReceiveLogic.Current.RemoveEvent("HumidityDevice"); - HdlGatewayReceiveLogic.Current.AddAttributeEvent("HumidityDevice", ReceiveComandDiv.A璁惧灞炴�т笂鎶�, (report) => - { - string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(report); - if (room.HumidityDevice != mainKeys) - { - return; - } - //绉婚櫎鎺変簨浠� - HdlGatewayReceiveLogic.Current.RemoveEvent("HumidityDevice"); - foreach (var data in report.DeviceStatusReport.AttriBute) - { - if (data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue) - { - if (data.AttriButeData == 0) - { - //0 - humidityRow.NameText.Text = "0.0%"; - room.Humidity = 0; - } - else - { - //灏忔暟鐐归渶瑕佷竴浣�(婀垮害娌℃湁璐熸暟) - string strValue = data.AttriButeData.ToString(); - strValue = strValue.Substring(0, strValue.Length - 1); - humidityRow.NameText.Text = strValue.Insert(strValue.Length - 1, ".") + "%"; - room.Humidity = int.Parse(strValue) * 0.1; - } - } - } - }); //鍙戦�佽幏鍙栨箍搴︾殑鍛戒护 - (selectTemp as ZigBee.Device.TemperatureSensor).ReadTemperatureOrHumidity(); + ReadDeviceAttributeLogic.Instance.SendHumidityStatuComand(selectTemp); }; }; if (string.IsNullOrEmpty(room.HumidityDevice) == false) { humidityRow.SetTitle(R.MyInternationalizationString.Getting); - HdlGatewayReceiveLogic.Current.RemoveEvent("HumidityDevice"); - HdlGatewayReceiveLogic.Current.AddAttributeEvent("HumidityDevice", ReceiveComandDiv.A璁惧灞炴�т笂鎶�, (report) => - { - string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(report); - if (room.HumidityDevice != mainKeys) - { - return; - } - //绉婚櫎鎺変簨浠� - HdlGatewayReceiveLogic.Current.RemoveEvent("HumidityDevice"); - foreach (var data in report.DeviceStatusReport.AttriBute) - { - if (data.AttributeId == (int)ZigBee.Device.AttriButeId.MeasuredValue) - { - if (data.AttriButeData == 0) - { - //0 - humidityRow.NameText.Text = "0.0%"; - room.Humidity = 0; - } - else - { - //灏忔暟鐐归渶瑕佷竴浣�(婀垮害娌℃湁璐熸暟) - string strValue = data.AttriButeData.ToString(); - strValue = strValue.Substring(0, strValue.Length - 1); - humidityRow.NameText.Text = strValue.Insert(strValue.Length - 1, ".") + "%"; - room.Humidity = int.Parse(strValue) * 0.1; - } - } - } - }); //鍙戦�佽幏鍙栨箍搴︾殑鍛戒护 var dev = Common.LocalDevice.Current.GetDevice(room.HumidityDevice); - if (dev != null) - { - (dev as ZigBee.Device.TemperatureSensor).ReadTemperatureOrHumidity(); - } + ReadDeviceAttributeLogic.Instance.SendHumidityStatuComand(dev); } else { -- Gitblit v1.8.0