using System; using System.Collections.Generic; using Newtonsoft.Json.Linq; namespace ZigBee.Device { public class PIRSensor: BindObj { public PIRSensor() { this.Type = DeviceType.IASZone; } //#region PIR传感器参数配置 ///// /////PIR传感器参数配置 ///// //public async System.Threading.Tasks.Task SetPIRSensorParamateAsync(ConfigureParamates configureParamates) //{ // ResponseAllData result = null; // if (Gateway == null) // { // result = new ResponseAllData { errorMessageBase = "当前没有网关" }; // return result; // } // return await System.Threading.Tasks.Task.Run(async () => // { // Action action = (topic, message) => // { // var gatewayID = topic.Split('/')[0]; // var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); // if (topic == gatewayID + "/" + "Error_Respon") // { // var gatewayTemp = new ZbGateway() { Time = jobject.Value("Time"), DataID = jobject.Value("Data_ID"), CurrentGateWayId = Gateway.getGatewayBaseInfo.gwID }; // var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); // if (temp == null) // { // result = new ResponseAllData { errorMessageBase = "网关错误回复,且数据是空" }; // } // else // { // result = new ResponseAllData { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; // } // } // if (topic == gatewayID + "/" + "ZbDataPassthrough") // { // var gatewayTemp = new ZbGateway() { DataID = jobject.Value("Data_ID") }; // gatewayTemp.clientDataPassthroughResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); // if (gatewayTemp.clientDataPassthroughResponseData == null) // { // result = new ResponseAllData { errorMessageBase = "网关返回的数据为空" }; // } // else // { // result = new ResponseAllData { }; // if (clientDataPassthroughResponseData?.PassData != null) // { // var data = clientDataPassthroughResponseData.PassData; // if (data.Length == 14) // { // result.responseData.command = int.Parse(data[10].ToString() + data[11].ToString()+ data[12].ToString() + data[13].ToString()); // result.responseData.status = int.Parse(data[14].ToString() + data[15].ToString()); // } // } // System.Console.WriteLine($"UI收到通知后的主题_{ topic}"); // } // } // }; // try // { // var passData = SetPIRSensorData(configureParamates); // var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } }; // var data = new JObject { { "PassData", passData } }; // jObject.Add("Data", data); // CurrentGateWayId = Gateway.getGatewayBaseInfo?.gwID; // Gateway.Send(("ClientDataPassthrough"), Common.SecuritySet.Encryption((jObject.ToString()))); // } // catch { } // var dateTime = DateTime.Now; // while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) // { // await System.Threading.Tasks.Task.Delay(10); // if (result != null) // { // break; // } // } // if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) // { // result = new ResponseAllData { errorMessageBase = " 回复超时,请重新操作" }; // } // Gateway.Actions -= action; // System.Console.WriteLine("ClientDataPassthrough_Actions 退出" + System.DateTime.Now.ToString()); // return result; // }); //} ///// ///// PIR配置参数回复 ///// //public ParamatesInfo paramatesInfo; //[System.Serializable] //public class ParamatesInfo //{ // /// // /// 错误信息 // /// // public string errorMessageBase; // /// // /// 网关信息错误反馈 // /// 当网关接收到客户端信息后,出现以下异常情况将反馈错误。 // /// // public ErrorResponData errorResponData; // /// // /// PIR配置参数 // /// // public ConfigureParamates configureParamates ; //} ///// ///// PIR配置参数 ///// //[System.Serializable] //public class ConfigureParamates //{ // /// // ///亮度(光照度)使能 // /// false:不使能 // /// true:使能 // /// // public bool levelEnable; // /// // /// 光照度等级 // /// // public LevelSize levelSize = new LevelSize{}; // /// // ///亮度(光照度)使能 // /// false:不使能 // /// true:使能 // /// // public bool controlDevEnable; // /// // /// 触发开灯到触发关灯的时间间隔,(注意:该参数为16进制) // /// 0-ffff 单位秒 // /// // public int transitionTime; // } ///// ///// 按键指示灯颜色信息对应顺序号 ///// //public enum LevelSize //{ // /// // /// 白天 // /// // Daytime = 1, // /// // /// 昏暗 // /// // Dusky = 2, // /// // /// 黑夜 // /// // Night = 3, //} ///// ///// 配置PIR配置参数 ///// 发配置按键指示灯颜色命令时,此时为发送到网关的透传数据 ///// //string SetPIRSensorData(ConfigureParamates configureParamates) //{ // string data = ""; // string dataLength = "09"; // string dataComand1 = "00"; // string dataComand2 = "03"; // string dataSerialNum = "01"; // string addDataLength = "05"; // string levelEnable = ""; // string levelSize = ""; // string controlDevEnable = ""; // string transitionTime = ""; // try // { // if (configureParamates != null) // { // if (configureParamates.levelEnable) // { // levelEnable = "00"; // } // else // { // levelEnable = "01"; // } // switch (configureParamates.levelSize) // { // case LevelSize.Daytime: // levelSize = "01"; // break; // case LevelSize.Dusky: // levelSize = "02"; // break; // case LevelSize.Night: // levelSize = "03"; // break; // } // if (configureParamates.controlDevEnable) // { // controlDevEnable = "00"; // } // else // { // controlDevEnable = "01"; // } // var time = configureParamates.transitionTime.ToString(); // var sbString = new System.Text.StringBuilder(); // switch (time.Length) // { // case 1: // transitionTime = "000"+ time; // break; // case 2: // transitionTime = "00" + time; // break; // case 3: // transitionTime = "0" + time; // break; // case 4: // transitionTime = time; // break; // } // sbString.Append(transitionTime.ToUpper()); // } // data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength + // levelEnable + levelSize + controlDevEnable + transitionTime; // } // catch { }; // return data; //} //#endregion //#region 获取PIR配置数据 ///// /////PIR传感器参数配置 ///// reserve:0-ff ///// //public async System.Threading.Tasks.Task GetPIRSensorParamateAsync(string reserve="01") //{ // ParamatesInfo result = null; // if (Gateway == null) // { // result = new ParamatesInfo { errorMessageBase = "当前没有网关" }; // return result; // } // return await System.Threading.Tasks.Task.Run(async () => // { // Action action = (topic, message) => // { // var gatewayID = topic.Split('/')[0]; // var jobject = Newtonsoft.Json.Linq.JObject.Parse(message); // if (topic == gatewayID + "/" + "Error_Respon") // { // var gatewayTemp = new ZbGateway() { Time = jobject.Value("Time"), DataID = jobject.Value("Data_ID"), CurrentGateWayId = Gateway.getGatewayBaseInfo.gwID }; // var temp = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); // if (temp == null) // { // result = new ParamatesInfo { errorMessageBase = "网关错误回复,且数据是空" }; // } // else // { // result = new ParamatesInfo { errorResponData = temp, errorMessageBase = ErrorMess(temp.Error) }; // } // } // if (topic == gatewayID + "/" + "ZbDataPassthrough") // { // var gatewayTemp = new ZbGateway() { DataID = jobject.Value("Data_ID") }; // gatewayTemp.clientDataPassthroughResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject(jobject["Data"].ToString()); // if (gatewayTemp.clientDataPassthroughResponseData == null) // { // result = new ParamatesInfo { errorMessageBase = "网关返回的数据为空" }; // } // else // { // result = new ParamatesInfo { }; // if (clientDataPassthroughResponseData?.PassData != null) // { // var data = clientDataPassthroughResponseData.PassData; // if (data.Length == 18) // { // var le = data[8].ToString() + data[9].ToString(); // if (le == "01") // { // result.configureParamates.levelEnable = true; // } // else // { // result.configureParamates.levelEnable = false; // } // var size = data[10].ToString() + data[11].ToString(); // switch (size) // { // case "01": // result.configureParamates.levelSize = LevelSize.Daytime; // break; // case "02": // result.configureParamates.levelSize = LevelSize.Dusky; // break; // case "03": // result.configureParamates.levelSize = LevelSize.Night; // break; // } // var cdl = data[12].ToString() + data[13].ToString(); // if (cdl == "01") // { // result.configureParamates.controlDevEnable = true; // } // else // { // result.configureParamates.controlDevEnable = false; // } // result.configureParamates.transitionTime = int.Parse(data[14].ToString() + data[15].ToString() + data[16].ToString() + data[17].ToString()); // } // } // System.Console.WriteLine($"UI收到通知后的主题_{ topic}"); // } // } // }; // try // { // var passData = GetPIRSensorData(reserve); // var jObject = new JObject { { "DeviceAddr", DeviceAddr }, { "Epoint", 200 }, { "Cluster_ID", 64513 }, { "Command", 0 } }; // var data = new JObject { { "PassData", passData } }; // jObject.Add("Data", data); // CurrentGateWayId = Gateway.getGatewayBaseInfo?.gwID; // Gateway.Send(("ClientDataPassthrough"), Common.SecuritySet.Encryption((jObject.ToString()))); // } // catch { } // var dateTime = DateTime.Now; // while ((DateTime.Now - dateTime).TotalMilliseconds < WaitReceiveDataTime) // { // await System.Threading.Tasks.Task.Delay(10); // if (result != null) // { // break; // } // } // if ((DateTime.Now - dateTime).TotalMilliseconds > WaitReceiveDataTime) // { // result = new ParamatesInfo { errorMessageBase = " 回复超时,请重新操作" }; // } // Gateway.Actions -= action; // System.Console.WriteLine("ClientDataPassthrough_Actions 退出" + System.DateTime.Now.ToString()); // return result; // }); //} ///// ///// 配置PIR配置参数 ///// 发配置按键指示灯颜色命令时,此时为发送到网关的透传数据 ///// //string GetPIRSensorData(string reserve) //{ // string data = ""; // string dataLength = "05"; // string dataComand1 = "01"; // string dataComand2 = "03"; // string dataSerialNum = "01"; // string addDataLength = "01"; // string reserveData = reserve; // try // { // data = dataLength + dataComand1 + dataComand2 + dataSerialNum + addDataLength + // reserveData; // } // catch { }; // return data; //} //#endregion } }