/// <summary> /// zigbee网关发送 /// 拼装1002指令,发送给网关,执行改变状态操作 /// 1.Zigbee窗帘(Smart_ZigbeeCurtain):pt控制窗帘开度百分比,0为全关闭,100为全打开 /// 速度:打开窗帘230、4289。关闭窗帘229、3599 等104速度太慢,存在关闭的时候104关闭不充分,打开13,关闭86 /// {"code":1002,"id":"010000124b000f81eea6","ep":8,"serial":1,"control":{"on":false,"pt":0},"result":0,"zigbee":"00ff2c2c2c6a6f0057f3"}//关闭 /// 2.Zigbee开关(Panel_Zigbee):on /// 速度:打开开关239、392。关闭开关228、411 /// {"code":1002,"id":"010000124b0014c5d116","ep":1,"serial":1,"control":{"on":true},"result":0,"zigbee":"00ff2c2c2c6a6f0057f3"} /// </summary> /// <param name="deviceEntity"></param> /// <param name="state"></param> /// <returns></returns> public static bool YunZigSendMsg(host_device deviceEntity, object obj, bool state) { string cachekey = deviceEntity.cachekey;//缓存处理-- //发送到zigbee网关并遍历状态 if (obj != null) { Zigbee1002 zigbee1002 = new Zigbee1002() { code = 1002, id = deviceEntity.devmac, //mac地址,010000124b0014c6aaee ep = Convert.ToInt32(deviceEntity.devport), //端口 serial = 1, control = obj, result = 0, zigbee = deviceEntity.devchannel//网关,00ff2c2c2c6a6f005979 }; string _1002 = JsonConvert.SerializeObject(zigbee1002); YunZigClient.SendMsg(_1002);//发送到网关服务器YunZig log.Debug($"向YunZig网关发送1002指令{_1002},确认器开始遍历状态是否改变{cachekey}"); if (StateResult(cachekey, state.ToString())) { //返回广播消息,直接开始广播 //user:hiddenpath_% type:other msg:hiddenpath_Server;devrefresh;924150429051,false,hiddenpath_ASDFDSSE123$/r$ //relayUser = appUser.Split('_')[0] + "_%"; //relayUser = appUser; //return $"{appUser};{code};{device};Zip;{success}$/r$";//ok//closeok@808 181248576 //return $"{relayUser};devrefresh;{device},{state},{appUser}$/r$";//后面的发给前面的,与请求的对调一下 return(true); } else { log.Debug($"设备状态改变超时失败! cachekey:{cachekey}!"); //relayUser = appUser; //return $"{appUser};{code};{device};Zip;H4sIAAAAAAAEAEstKsovAgBxvN1dBQAAAA==$/r$";//error return(false); } } else { log.Debug($"设备状态改变失败!cachekey:{cachekey}! 不存在设备类型:{deviceEntity.devtype}"); return(false); } }
/// <summary> /// 8145关闭设备 8;8135;设备id /// </summary> /// <param name="msg">user:0203_Server type:other msg:0203_ASDFDSSE123;8;8145;808181248576;3,0$/r$</param> public static string Host8145(string msg) { Zigbee1002 zigbee1002 = new Zigbee1002() { code = 1002, id = "010000124b00198c4341", ep = 1, serial = 1, control = new Control { on = false }, result = 0, zigbee = "00ff2c2c2c6a6f005979" }; YunHostClient.SendMsg(JsonConvert.SerializeObject(zigbee1002)); return("123_DCD9165057AD;8145;808181248576;Zip;H4sIAAAAAAAAAEvOyS9Ozc92sDCwMLQwNDKxMDU3AwCjJ+18FAAAAA==$/r$"); }
/// <summary> /// zigbee网关发送 /// 拼装1002指令,发送给网关,执行改变状态操作 /// 1.Zigbee窗帘(Smart_ZigbeeCurtain):pt控制窗帘开度百分比,0为全关闭,100为全打开 /// 速度:打开窗帘230、4289。关闭窗帘229、3599 等104速度太慢,存在关闭的时候104关闭不充分,打开13,关闭86 /// {"code":1002,"id":"010000124b000f81eea6","ep":8,"serial":1,"control":{"on":false,"pt":0},"result":0,"zigbee":"00ff2c2c2c6a6f0057f3"}//关闭 /// 2.Zigbee开关(Panel_Zigbee):on /// 速度:打开开关239、392。关闭开关228、411 /// {"code":1002,"id":"010000124b0014c5d116","ep":1,"serial":1,"control":{"on":true},"result":0,"zigbee":"00ff2c2c2c6a6f0057f3"} /// </summary> /// <param name="deviceEntity"></param> /// <param name="state"></param> /// <returns></returns> public static bool YunZigSendMsg(host_device deviceEntity, object obj, bool state) { string cachekey = deviceEntity.cachekey;//缓存处理-- //发送到zigbee网关并遍历状态 if (obj != null) { Zigbee1002 zigbee1002 = new Zigbee1002() { code = 1002, id = deviceEntity.devmac, //mac地址,010000124b0014c6aaee ep = Convert.ToInt32(deviceEntity.devport), //端口 serial = 1, control = obj, result = 0 //zigbee = deviceEntity.devchannel//网关,00ff2c2c2c6a6f005979 }; string _1002 = JsonConvert.SerializeObject(zigbee1002); if (CloudHostServer.Gateway_SessionDic.ContainsKey(deviceEntity.devchannel)) { CloudHostServer.Gateway_SessionDic[deviceEntity.devchannel].Send(_1002); return(true); } else { log.Debug($"请求网关的session不存在 {deviceEntity.devchannel}: {_1002}"); return(false); } } else { log.Debug($"设备状态改变失败!cachekey:{cachekey}! 不存在设备类型:{deviceEntity.devtype}"); return(false); } }
/// <summary> /// 8145关闭设备 8;8135;设备id /// user:123_DCD9165057AD type:other msg:123_DCD9165057AD;8;8145;01120925117040;3,0$/r$ /// 8135打开设备 8;8135;设备id /// user:123_DCD9165057AD type:other msg:123_DCD9165057AD;8;8135;01120925117040;2;8$/r$ /// {"code":1002,"id":"010000124b0014c6aaee","ep":1,"serial":1,"control":{"on":true},"result":0,"zigbee":"00ff2c2c2c6a6f005979"} /// user:DAJCHSF_% type:other msg:DAJCHSF_Server;devrefresh;1041656180510,true,DAJCHSF_2047DABEF936$/r$ /// </summary> /// <param name="msg"></param> public static bool DeviceStateChange(string msg)//, string code, bool state, string success, out string relayUser { try { //string appUser = msg.Split(';')[0]; string code = msg.Split(';')[2]; string device = msg.Split(';')[3]; bool state; if (code == "8135") { state = true; } else if (code == "8145") { state = false; } else { return(false);//指令不对返回失败 } using (HsfDBContext hsfDBContext = new HsfDBContext()) { var deviceEntity = hsfDBContext.host_device.Where(t => t.deviceid == device && t.deletemark == 0).FirstOrDefault();//注意device的唯一性 if (deviceEntity != null) { string cachekey = deviceEntity.cachekey;//缓存处理-- Zigbee1002 zigbee1002 = new Zigbee1002() { code = 1002, id = deviceEntity.devmac,//010000124b0014c6aaee ep = Convert.ToInt32(deviceEntity.devport), serial = 1, control = new Control { on = state }, result = 0, zigbee = deviceEntity.devchannel //00ff2c2c2c6a6f005979 }; YunZigClient.SendMsg(JsonConvert.SerializeObject(zigbee1002)); //发送 if (StateResult(cachekey, state)) { //返回广播消息,直接开始广播 //user:hiddenpath_% type:other msg:hiddenpath_Server;devrefresh;924150429051,false,hiddenpath_ASDFDSSE123$/r$ //relayUser = appUser.Split('_')[0] + "_%"; //relayUser = appUser; //return $"{appUser};{code};{device};Zip;{success}$/r$";//ok//closeok@808 181248576 //return $"{relayUser};devrefresh;{device},{state},{appUser}$/r$";//后面的发给前面的,与请求的对调一下 return(true); } else { log.Debug($"设备状态改变超时失败! cachekey:{cachekey}!"); //relayUser = appUser; //return $"{appUser};{code};{device};Zip;H4sIAAAAAAAEAEstKsovAgBxvN1dBQAAAA==$/r$";//error return(false); } } else { //relayUser = appUser; return(false);//error } } } catch (Exception) { throw; } }