| | |
| | | var deviceAddr = receiveData.Value<string>("DeviceAddr");
|
| | | var deviceEpoint = receiveData.Value<int>("Epoint");
|
| | |
|
| | | var tempDevice = new CommonDevice { DeviceAddr = deviceAddr, DeviceEpoint = deviceEpoint };
|
| | | tempDevice.DeviceStatusReport = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.DeviceStatusReportData>(receiveData["Data"].ToString());
|
| | | var report = new CommonDevice { DeviceAddr = deviceAddr, DeviceEpoint = deviceEpoint };
|
| | | report.DeviceStatusReport = Newtonsoft.Json.JsonConvert.DeserializeObject<CommonDevice.DeviceStatusReportData>(receiveData["Data"].ToString());
|
| | | if (report.DeviceStatusReport.AttriBute.Count == 0)
|
| | | {
|
| | | //网关有些奇葩,没有属性它也会发过来
|
| | | return;
|
| | | }
|
| | |
|
| | | this.DeviceReportPush(tempDevice, ReceiveComandDiv.A设备属性上报);
|
| | | //处理网关上报的数据,然后变更本地缓存
|
| | | var locadevice = Common.LocalDevice.Current.GetDevice(deviceAddr, deviceEpoint);
|
| | | if (locadevice != null)
|
| | | {
|
| | | //有反馈,这个设备肯定是在线的
|
| | | locadevice.IsOnline = 1;
|
| | | locadevice.LastDateTime = DateTime.Now;
|
| | |
|
| | | #region ■ 开关功能
|
| | | //开关功能
|
| | | if (report.DeviceStatusReport.CluterID == 6)
|
| | | {
|
| | | if (locadevice is LightBase)
|
| | | {
|
| | | locadevice.DeviceStatusReport = report.DeviceStatusReport;
|
| | | ((LightBase)locadevice).OnOffStatus = report.DeviceStatusReport.AttriBute[0].AttriButeData;
|
| | | //已经接收到状态
|
| | | locadevice.HadReadDeviceStatu = true;
|
| | | }
|
| | | }
|
| | | #endregion
|
| | |
|
| | | #region ■ 窗帘数据
|
| | | //窗帘数据
|
| | | else if (report.DeviceStatusReport.CluterID == 258)
|
| | | {
|
| | | //窗帘类型
|
| | | if (report.DeviceStatusReport.AttriBute[0].AttributeId == 0)
|
| | | {
|
| | | locadevice.DeviceStatusReport = report.DeviceStatusReport;
|
| | | ((Rollershade)locadevice).WcdType = report.DeviceStatusReport.AttriBute[0].AttriButeData;
|
| | | //这个东西要保存
|
| | | locadevice.ReSave();
|
| | | }
|
| | | //窗帘百分比
|
| | | else if (report.DeviceStatusReport.AttriBute[0].AttributeId == 8)
|
| | | {
|
| | | locadevice.DeviceStatusReport = report.DeviceStatusReport;
|
| | | ((Rollershade)locadevice).WcdCurrentPositionLiftPercentage = report.DeviceStatusReport.AttriBute[0].AttriButeData;
|
| | | //已经接收到状态
|
| | | locadevice.HadReadDeviceStatu = true;
|
| | | }
|
| | | }
|
| | | #endregion
|
| | |
|
| | | #region ■ 空调数据
|
| | | //空调数据
|
| | | else if (report.DeviceStatusReport.CluterID == 513)
|
| | | {
|
| | | locadevice.DeviceStatusReport = report.DeviceStatusReport;
|
| | | foreach (var attData in report.DeviceStatusReport.AttriBute)
|
| | | {
|
| | | var curTemp = attData.AttriButeData / 100;
|
| | | if (attData.AttributeId == 0)
|
| | | {
|
| | | //此属性表明室内当前的温度 * 100,实际温度为“LocalTemperature / 100”,单位:℃
|
| | | ((AC)locadevice).currentLocalTemperature = curTemp;
|
| | | //已经接收到状态
|
| | | locadevice.HadReadDeviceStatu = true;
|
| | | }
|
| | | else if (attData.AttributeId == 17)
|
| | | {
|
| | | //此属性表明室内当前的温度 * 100,实际温度为“LocalTemperature / 100”,单位:℃
|
| | | ((AC)locadevice).currentCoolingSetpoint = curTemp;
|
| | | //已经接收到状态
|
| | | locadevice.HadReadDeviceStatu = true;
|
| | | }
|
| | | else if (attData.AttributeId == 18)
|
| | | {
|
| | | //此属性表明此设备当前的制热温度,实际温度为“HeatingSetpoint / 100”,单位:℃。
|
| | | ((AC)locadevice).currentHeatingSetpoint = curTemp;
|
| | | //已经接收到状态
|
| | | locadevice.HadReadDeviceStatu = true;
|
| | | }
|
| | | else if (attData.AttributeId == 28)
|
| | | {
|
| | | //此属性描述恒温设备正处于哪种模式
|
| | | ((AC)locadevice).currentSystemMode = attData.AttriButeData;
|
| | | //已经接收到状态
|
| | | locadevice.HadReadDeviceStatu = true;
|
| | | }
|
| | | else if (attData.AttributeId == 4096)
|
| | | {
|
| | | //此属性表明此设备当前的自动温度,实际温度为“AutoSetpoint / 100”,单位:℃。
|
| | | ((AC)locadevice).currentAutoSetpoint = curTemp;
|
| | | //已经接收到状态
|
| | | locadevice.HadReadDeviceStatu = true;
|
| | | }
|
| | | }
|
| | | }
|
| | | //空调数据
|
| | | else if (report.DeviceStatusReport.CluterID == 514)
|
| | | {
|
| | | locadevice.DeviceStatusReport = report.DeviceStatusReport;
|
| | | foreach (var attData in report.DeviceStatusReport.AttriBute)
|
| | | {
|
| | | if (attData.AttributeId == 0)
|
| | | {
|
| | | //风扇模式
|
| | | ((AC)locadevice).currentFanMode = attData.AttriButeData;
|
| | | //已经接收到状态
|
| | | locadevice.HadReadDeviceStatu = true;
|
| | | }
|
| | | else if (attData.AttributeId == 4096)
|
| | | {
|
| | | //风扇扫风
|
| | | ((AC)locadevice).currentFanSwingMode = attData.AttriButeData;
|
| | | //已经接收到状态
|
| | | locadevice.HadReadDeviceStatu = true;
|
| | | }
|
| | | }
|
| | | }
|
| | | #endregion
|
| | |
|
| | | #region ■ 亮度数据
|
| | | //亮度数据
|
| | | else if (report.DeviceStatusReport.CluterID == 8)
|
| | | {
|
| | | locadevice.DeviceStatusReport = report.DeviceStatusReport;
|
| | | if (report.DeviceStatusReport.AttriBute[0].AttributeId == 0)
|
| | | {
|
| | | //此属性表明当前亮度程度
|
| | | ((DimmableLight)locadevice).Level = report.DeviceStatusReport.AttriBute[0].AttriButeData;
|
| | | //已经接收到状态
|
| | | locadevice.HadReadDeviceStatu = true;
|
| | | }
|
| | | }
|
| | | #endregion
|
| | |
|
| | | #region ■ 温度数据
|
| | | //温度数据
|
| | | else if (report.DeviceStatusReport.CluterID == 1026)
|
| | | {
|
| | | foreach (var attData in report.DeviceStatusReport.AttriBute)
|
| | | {
|
| | | //温度
|
| | | if (attData.AttributeId == (int)AttriButeId.MeasuredValue)
|
| | | {
|
| | | if (attData.AttriButeData == 0)
|
| | | {
|
| | | ((TemperatureSensor)locadevice).Temperatrue = 0;
|
| | | }
|
| | | else if (attData.AttriButeData > 32767)
|
| | | {
|
| | | //负数(特殊处理)
|
| | | string strValue = (attData.AttriButeData - 65536).ToString();
|
| | | //小数点需要一位
|
| | | strValue = strValue.Substring(0, strValue.Length - 1);
|
| | | ((TemperatureSensor)locadevice).Temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, "."));
|
| | | }
|
| | | else
|
| | | {
|
| | | //小数点需要一位
|
| | | string strValue = attData.AttriButeData.ToString();
|
| | | strValue = strValue.Substring(0, strValue.Length - 1);
|
| | | ((TemperatureSensor)locadevice).Temperatrue = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, "."));
|
| | | }
|
| | | //已经接收到状态
|
| | | locadevice.HadReadDeviceStatu = true;
|
| | | }
|
| | | }
|
| | | }
|
| | | #endregion
|
| | |
|
| | | #region ■ 湿度数据
|
| | | //湿度数据
|
| | | else if (report.DeviceStatusReport.CluterID == 1029)
|
| | | {
|
| | | foreach (var attData in report.DeviceStatusReport.AttriBute)
|
| | | {
|
| | | //湿度
|
| | | if (attData.AttributeId == (int)AttriButeId.MeasuredValue)
|
| | | {
|
| | | if (attData.AttriButeData == 0)
|
| | | {
|
| | | ((TemperatureSensor)locadevice).Humidity = 0;
|
| | | }
|
| | | else
|
| | | {
|
| | | //小数点需要一位(湿度没有负数)
|
| | | string strValue = attData.AttriButeData.ToString();
|
| | | strValue = strValue.Substring(0, strValue.Length - 1);
|
| | | ((TemperatureSensor)locadevice).Humidity = Convert.ToDecimal(strValue.Insert(strValue.Length - 1, "."));
|
| | | }
|
| | | }
|
| | | //已经接收到状态
|
| | | locadevice.HadReadDeviceStatu = true;
|
| | | }
|
| | | }
|
| | | #endregion
|
| | | }
|
| | |
|
| | | this.DeviceReportPush(report, ReceiveComandDiv.A设备属性上报);
|
| | | }
|
| | |
|
| | | #endregion
|
| | |
| | | {
|
| | | //保存安防报警信息到本地
|
| | | HdlAlarmsLogic.Current.SaveSafeguardAlarmInfo(ias);
|
| | | }
|
| | |
|
| | | //处理网关上报的数据,然后变更本地缓存
|
| | | var locadevice = Common.LocalDevice.Current.GetDevice(ias.DeviceAddr, ias.DeviceEpoint);
|
| | | if (locadevice != null)
|
| | | {
|
| | | ((IASZone)locadevice).iASInfo = ias.iASInfo;
|
| | | //记录回复时间
|
| | | locadevice.LastDateTime = DateTime.Now;
|
| | | }
|
| | |
|
| | | this.DeviceReportPush(ias, ReceiveComandDiv.A传感器上报);
|
| | |
| | | }
|
| | | var tempDevice = new CommonDevice() { DeviceAddr = receiveData.Value<string>("DeviceAddr"), DeviceEpoint = receiveData.Value<int>("Epoint") };
|
| | | tempDevice.IsOnline = Convert.ToInt32(receiveData["Data"]["IsOnline"].ToString());
|
| | |
|
| | | //处理网关上报的数据,然后变更本地缓存
|
| | | var locadevice = Common.LocalDevice.Current.GetDevice(tempDevice.DeviceAddr, tempDevice.DeviceEpoint);
|
| | | if (locadevice != null)
|
| | | {
|
| | | locadevice.IsOnline = tempDevice.IsOnline;
|
| | | //记录回复时间
|
| | | locadevice.LastDateTime = DateTime.Now;
|
| | | locadevice.ReSave();
|
| | | }
|
| | |
|
| | | this.DeviceReportPush(tempDevice, ReceiveComandDiv.A设备在线上报);
|
| | | }
|
| | |
| | | #region ■ 一般方法___________________________
|
| | |
|
| | | /// <summary>
|
| | | /// 设备上报推送
|
| | | /// 设备上报推送(调用此方法,他会推送到各自的界面)
|
| | | /// </summary>
|
| | | /// <param name="common"></param>
|
| | | /// <param name="comand"></param>
|
| | | private void DeviceReportPush(CommonDevice common, ReceiveComandDiv comand)
|
| | | public void DeviceReportPush(CommonDevice common, ReceiveComandDiv comand)
|
| | | {
|
| | | if (this.dicDeviceEvent.Count == 0)
|
| | | {
|