/// <summary> /// 注册音响 /// </summary> /// <param name="msg">user:wali_Server type:other /// msg:wali_Server;8;8212;ALL;H4sIAAAAAAAAAG2RsU7DMBCG38VzVOUcN6TZGBlggBGh6ORcUkuJHdlJI1RVYmFn4ykQAyuv04G3wIlLRBHy4u/+/3y/zvd7dkPjLUljS5b3dqCIFcpf44jJrdKosSWWM5RZUiUgCKsL5qUGnasmH8s8lrTDBm3rMZDcotbULKwkzWbgsAbBIRYiSeOT1s1CEqhFOeGGryDNVlm2gpgHpUOLLN/72cZNkY7PH1+vbxEHiPz522A60pPp8+n48v6/6RCeNbZfcnbGqV4ZHaICCJHGsPlJaqmWpqTfcV2PPS3tM8E58gX7x26yXl4V16Tr0gy+rFqsw2q8AeK1LzW1myP5H+jM6Bc7nAYMjuxsHbFRxR3ZHVl2ePgGQ/XuYsMBAAA=$/r$</param> public static void RegSoundHost(string msg) { string msg64j = EncryptionHelp.Decrypt(msg.Split(';')[4].Replace("$/r$", ""), true);//解密"设备无法识别@打开窗帘" msg64j = msg64j.Replace("[", "").Replace("]", ""); SoundHost _SoundHost = JsonConvert.DeserializeObject <SoundHost>(msg64j);//反序列化 using (HsfDBContext hsfDBContext = new HsfDBContext()) { sound_host sound_Host = new sound_host() { id = Guid.NewGuid().ToString(), chinaname = _SoundHost.chinaname, classfid = _SoundHost.classfid, deviceid = _SoundHost.deviceid, devip = _SoundHost.devip, devmac = _SoundHost.devmac, devport = _SoundHost.devport, devposition = _SoundHost.devposition, devregcode = _SoundHost.devregcode, devtype = _SoundHost.devtype, imageid = _SoundHost.imageid, lgsort = _SoundHost.lgsort, userid = _SoundHost.userid, playstate = 1,//是否自身播放音乐状态反转,0:否,1:是 createtime = DateTime.Now }; hsfDBContext.sound_host.Add(sound_Host); hsfDBContext.SaveChanges(); } }
public async Task <AuthResDto> Register([FromServices] AccountLib.AccountLibClient client, [FromServices] IOptionsMonitor <AuthAESConfig> options, [FromBody] RegisterDto dto) { Common.GrpcLibrary.Single.Types.BoolData res = await client.IsExistsAsync(new Common.GrpcLibrary.Single.Types.StringData() { Data = dto.Name }); if (res.Data) { return(new AuthResDto() { Success = false, Message = $"username : '******' has been created!!!", }); } RegisterRes registerRes = await client.RegisterAsync(mapper.Map <RegisterReq>(dto)); var authRes = new AuthResDto() { Success = registerRes.IsSuccess, Message = registerRes.Error }; if (registerRes.ID > 0) { authRes.Token = EncryptionHelp.AESEncrypt(registerRes.ID.ToString(), options.CurrentValue.Key, options.CurrentValue.SaltBytes); } return(authRes); }
/// <summary> /// 注册音响 /// </summary> /// <param name="msg">user:wali_Server type:other /// msg:wali_Server;8;8212;ALL;H4sIAAAAAAAAAG2RsU7DMBCG38VzVOUcN6TZGBlggBGh6ORcUkuJHdlJI1RVYmFn4ykQAyuv04G3wIlLRBHy4u/+/3y/zvd7dkPjLUljS5b3dqCIFcpf44jJrdKosSWWM5RZUiUgCKsL5qUGnasmH8s8lrTDBm3rMZDcotbULKwkzWbgsAbBIRYiSeOT1s1CEqhFOeGGryDNVlm2gpgHpUOLLN/72cZNkY7PH1+vbxEHiPz522A60pPp8+n48v6/6RCeNbZfcnbGqV4ZHaICCJHGsPlJaqmWpqTfcV2PPS3tM8E58gX7x26yXl4V16Tr0gy+rFqsw2q8AeK1LzW1myP5H+jM6Bc7nAYMjuxsHbFRxR3ZHVl2ePgGQ/XuYsMBAAA=$/r$</param> public static string RegSoundBinding(string msg) { string msg64j = EncryptionHelp.Decrypt(msg.Split(';')[4].Replace("$/r$", ""), true);//解密"设备无法识别@打开窗帘" msg64j = msg64j.Replace("[", "").Replace("]", ""); SoundHost _SoundHost = JsonConvert.DeserializeObject <SoundHost>(msg64j);//反序列化 if (!string.IsNullOrEmpty(_SoundHost.userid)) { using (HsfDBContext hsfDBContext = new HsfDBContext()) { _SoundHost.userid = GetNewUserId_Server(_SoundHost.userid); //根据音响的设备id:devmac去判断,有的话软删除,没有的话注册新增 var soundhostEntity = hsfDBContext.sound_host.Where(t => t.devmac == _SoundHost.devmac && t.deletemark == 0).FirstOrDefault(); if (soundhostEntity != null) { soundhostEntity.deletemark = 1;//软删除old记录 soundhostEntity.modifiytime = DateTime.Now; BindNewHost(hsfDBContext, _SoundHost); return($"Binding OK Again"); } else { BindNewHost(hsfDBContext, _SoundHost); return($"Binding OK"); } } } else { return($"Binding Fail"); } }
/// <summary> /// 瑞瀛网关修改新的mac地址 /// 01 06 00 02 01 03 69 9B /// 第六位 03 为开关新的物理地址 /// CC DD F1 01 06 00 02 01 06 a9 98 /// 更新固件之后mac统一设置为01之后 /// 发送修改: /// cc dd F1 01 06 00 02 01 05 e9 99 /// cc dd f1 01 06 00 02 05 01 ea 9a /// /// cc dd f1 01 06 00 02 05 01 ea 9a /// cc dd f1 01 06 00 02 02 01 e8 aa /// </summary> /// <param name="devmac">192.168.1.55;f1;50000</param> /// <returns></returns> public static bool RYZigMacModifyMsg(string oldDevmac, string newDevmac) { string old_ip = oldDevmac.Split(';')[0]; //192.168.1.55 string old_ff = oldDevmac.Split(';')[1]; //f1 string old_mac = "01"; //oldDevmac.Split(';')[2];//06老mac统一改为01 string new_ip = newDevmac.Split(';')[0]; //192.168.1.55 string new_ff = newDevmac.Split(';')[1]; //f1 string new_mac = newDevmac.Split(';')[2]; //06 string msg1 = $"{old_mac} 06 00 02 01 {new_mac}"; string crc = EncryptionHelp.CRCCalc(msg1); //crc校验 string msg = $"cc dd {new_ff} {msg1} {crc}"; string ipmsg = msg + "|" + newDevmac; //CC DD F1 01 06 00 02 01 06 a9 98|192.168.82.107;f1;06//普通字符串+16进制字符串,cc开头 string mac16 = RYZigClient.ToHex(ipmsg, "utf-8", false); RYZigClient.Send(mac16);//发送到网关服务器YunZig log.Debug($"向RYZig网关发送指令{ipmsg},确认器开始遍历mac是否改变 {new_mac}"); if (MacResult("BusSwitch_" + new_ip, new_mac)) { return(true); } else { log.Debug($"设备状态改变超时失败! cachekey:{new_mac}!"); return(false); } }
/// <summary> /// 播放url内容,播放完成后自动唤醒 /// </summary> /// <param name="msg">user:wali_Server type:other /// msg:wali_C40BCB80050A;3;3011;ac83f318064f(设备id);64(中文)1$/r$</param> public static string SoundMsg(string msg) { string devmac = msg.Split(';')[3];//给指定的音响发送消息 string msg64j = EncryptionHelp.Decrypt(msg.Split(';')[4].Replace("$/r$", ""), false); //SoundPassiveRequest _SoundPassiveRequest = new SoundPassiveRequest() //{ // sessionId = Guid.NewGuid().ToString(), // deviceId = devmac, // actionId = "2011", // req= msg64j, // url= BaiduSDK.Tts(msg64j), // blwakeup = "0" //}; SoundBodyResult _SoundBodyRequest = new SoundBodyResult() { sessionId = Guid.NewGuid().ToString(), deviceId = devmac, questions = "提醒", actionId = "301",//与2011相似 req = msg64j, url = BaiduSDK.Tts(msg64j), blwakeup = "0" }; if (_NlpControlerRequestMsg(_SoundBodyRequest)) { return($"Remind OK"); } else { return($"Remind Fail"); } }
/// <summary> /// 登录验证 /// </summary> /// <param name="account"></param> /// <param name="password"></param> /// <returns></returns> public static string CheckLogin(string account, string password) { hsf_owner ownerEntity = null; using (HsfDBContext hsfDBContext = new HsfDBContext()) { using (RedisHashService service = new RedisHashService()) { string _password = service.GetValueFromHash("Login", account); if (string.IsNullOrEmpty(_password)) { ownerEntity = hsfDBContext.hsf_owner.Where(t => t.telphone == account && t.deletemark == 0).FirstOrDefault(); if (ownerEntity != null) { service.SetEntryInHash("Login", account, ownerEntity.password); if (ownerEntity.password == password) { return(EncryptionHelp.Encryption(JsonConvert.SerializeObject(ownerEntity), false)); } else { return("error:Password error!"); } } else { return("error:No account exists!"); } } else { if (_password == password) { string _Owner = service.GetValueFromHash("Owner", account); if (string.IsNullOrEmpty(_Owner)) { ownerEntity = hsfDBContext.hsf_owner.Where(t => t.telphone == account && t.deletemark == 0).FirstOrDefault(); if (ownerEntity != null) { service.SetEntryInHash("Owner", ownerEntity.telphone, JsonConvert.SerializeObject(ownerEntity)); return(EncryptionHelp.Encryption(JsonConvert.SerializeObject(ownerEntity), false)); } else { return("error:No account exists!"); } } else { return(EncryptionHelp.Encryption(_Owner, false)); } } else { return("error:Password error!"); } } } } }
/// <summary> /// 向智能主机发送音响语音内容,异步返回答案为null /// </summary> /// <param name="body"></param> /// <returns></returns> public static NlpAnswers SendMsg(SoundBodyRequest body) { log.Info($"音响{body.sessionId}向智能家居smarthome发送问题:{body.questions}"); string user = "******"; string sendstr = ""; if (!string.IsNullOrEmpty(body.deviceId)) { //读取配置文件中音响对应的主机 user = ConfigAppSettings.GetValue(body.deviceId);//wali_Server log.Info($"音响{body.deviceId}对应的主机为:{user}"); } else { log.Info($"音响{body.deviceId}对应的主机不存在,请配置。"); } try { ///这里要判断,数据类型了 if (body.sourceId == "mengdou") { String temp = body.req.ToString(); if (temp.IndexOf("service\":\"musicX") > -1) { sendstr = body.sessionId + "_" + body.deviceId + ";5;517;" + EncryptionHelp.Encryption("music@" + body.req, false) + "$/r$" + "\r\n"; } else if (temp.IndexOf("service\":\"news") > -1) { sendstr = body.sessionId + "_" + body.deviceId + ";5;517;" + EncryptionHelp.Encryption("news@" + body.req, false) + "$/r$" + "\r\n"; } else if (temp.IndexOf("service\":\"story") > -1) { sendstr = body.sessionId + "_" + body.deviceId + ";5;517;" + EncryptionHelp.Encryption("story@" + body.req, false) + "$/r$" + "\r\n"; } else if (temp.IndexOf("service\":\"joke") > -1) { sendstr = body.sessionId + "_" + body.deviceId + ";5;517;" + EncryptionHelp.Encryption("joke@" + body.req, false) + "$/r$" + "\r\n"; } else { sendstr = body.sessionId + "_" + body.deviceId + ";5;513;" + EncryptionHelp.Encryption(body.questions, false) + "$/r$" + "\r\n"; } } else { //sessionid_deviceId;5;513;base64不zip(打开窗帘)$/r$ sendstr = body.sessionId + "_" + body.deviceId + ";5;513;" + EncryptionHelp.Encryption(body.questions, false) + "$/r$" + "\r\n"; } SmartHomeServer.SendMsg(user, sendstr); log.Info($"智能家居给{user}发送数据:{sendstr}完毕"); } catch {}; return(null); }
/// <summary> /// 添加设备 8;8211;All;+Base64(zip(设备对象jhson串)) /// </summary> /// <param name="msg">user:123_Server type:other msg: /// 123_DCD9165057AD;8;8211;ALL;H4sIAAAAAAAAAH2QPU7EMBCF7zJ1CjuRs2wuQEdBuQitBmectZTEke2wQqutEAeg5Bx0SHscfo6Bf6JINMiNv/eeZ8Zzd4IbOt6SNLaFxtuZCtjrcGUFyIMeccSBoIGvt4+f58v35fXz5Z1B8Hp0TsUgXAVs6RF7tEPATPKA40j9ylpSCvOyFFyIWvCKbdniTcFgTKlSxlNjrRgTG6WyPaD815/QIjSncwZjfWxTic12sY3TXpsx1siKpU6altI0VZacR0/rsIn4XyxX9E9TjO5090C0v44PC9ADdvmHIcGZCFLfuTRM2ORkjmE/89JhdmRTFM73v4aKUN2AAQAA$/r$</param> public static string Host8211(string msg) { try { if (msg.Split(';').Length >= 4) { string appUser = msg.Split(';')[0]; string zipStr = msg.Split(';')[4].Replace("$/r$", ""); string base64j = EncryptionHelp.Decrypt(zipStr, true); var deviceLists = JsonConvert.DeserializeObject <List <host_device> >(base64j);//list多件开关,ALL数组 string posid = ""; string cachekey = ""; using (HsfDBContext hsfDBContext = new HsfDBContext()) { foreach (var item in deviceLists) { posid = item.devposition; cachekey = item.devmac + "_" + item.devport;//存在mac相同,端口不相同的多键设备 if (string.IsNullOrEmpty(item.userid)) { item.userid = appUser; } var deviceEntity = hsfDBContext.host_device.Where(t => t.cachekey == cachekey && t.deletemark == 0).FirstOrDefault(); if (deviceEntity != null) { deviceEntity.deletemark = 1; deviceEntity.modifiytime = DateTime.Now; AddDevice(hsfDBContext, item); log.Debug($"8211 OK,重新添加设备成功!"); } else { //当前房间id需要保存,网关房间id为0,不可以 AddDevice(hsfDBContext, item); } } //2.主机返回app添加成功 string msgResult = $"{appUser};8211;ALL;Zip;H4sIAAAAAAAAAHNMScnPBgD0Si5gBQAAAA==$/r$"; //拼接 //清除房间设备列表缓存 using (RedisHashService service = new RedisHashService()) { service.RemoveEntryFromHash("RoomDevices", appUser + "|" + posid);//解决默认posid都为0的问题 } log.Info($"8211 OK,添加设备成功!返回信息:{msgResult}"); return(msgResult); } } else { log.Error($"8211 Fail,添加设备失败,命令不符合规范!"); return(null); } } catch (Exception) { throw; } }
/// <summary> ///1.告诉主机重命名设备名称 解压(射灯,0115170616344) 新名,房间id ///connect user:123_Server type:other msg:123_DCD9165057AD;8;823;01240943509560;5bCE54GvLDAxMTUxNzA2MTYzNDQ=$/r$ ///2.主机返回改名成功renameok@1041140155612 ///user:DAJCHSF_2047DABEF936 type:other msg:DAJCHSF_2047DABEF936;823;1041140155612;Zip;H4sIAAAAAAAAACtKzUvMTc3PdjA0MDE0NDEwNDU1MzQCAFBUoP4WAAAA$/r$ /// </summary> /// <param name="msg"></param> public static string Host823(string msg) { try { if (msg.Split(';').Length >= 4) { string appUser = msg.Split(';')[0]; string account = appUser.Split('_')[0]; string deviceId = msg.Split(';')[3]; string newName_Pid_ya = msg.Split(';')[4].Replace("$/r$", ""); string newName_Pid = EncryptionHelp.Decrypt(newName_Pid_ya, false); string newName = newName_Pid.Split(',')[0]; string posid = newName_Pid.Split(',')[1]; using (HsfDBContext hsfDBContext = new HsfDBContext()) { //根据房间id+设备id查询要改名的设备 var deviceEntity = hsfDBContext.host_device.Where(t => t.deviceid == deviceId && t.devposition == posid && t.deletemark == 0).FirstOrDefault(); if (deviceEntity != null) { deviceEntity.chinaname = newName;//改名 deviceEntity.modifiyuser = appUser; deviceEntity.modifiytime = DateTime.Now; hsfDBContext.SaveChanges(); //2.主机返回app删除成功 string msgResult = $"{appUser};823;{deviceId};Zip;H4sIAAAAAAAEACtKzUvMTc3PBgC88yB7CAAAAA==$/r$";//拼接 renameok //清除房间设备列表缓存 service.HashDelete("RoomDevices", account + "|" + posid); log.Debug($"清除房间设备列表缓存RoomDevices {account}|{posid}"); //清除当前设备类型的设备列表缓存 service.HashDelete("TypeDevices", account + "|" + deviceEntity.devtype); log.Debug($"清除当前设备类型的设备列表缓存TypeDevices {account}|{deviceEntity.devtype}"); log.Debug($"823 OK,设备重命名成功!返回信息:{msgResult}"); return(msgResult); } else { log.Debug($"823 Fail,设备重命名失败,设备不存在!"); return(null); } } } else { log.Debug($"823 Fail,设备重命名失败,命令不符合规范!"); return(null); } } catch (Exception) { throw; } }
/// <summary> /// 新增房间 /// </summary> /// <param name="msg">user:123_Server type:other msg: /// 123_DCD9165057AD;8;836;H4sIAAAAAAAAAC2Muw7CIBSG3+XMDBxavLAZmR18gYbgiTIADdAQ0/Tdhdbt+68rPKg+ycb0AlXSQgwm15AzsB8XTDCeQEGtwMDZGBp38uZNvQYpRo/NmWPeNQohceQ4ohguhz+bZECt2y7Kd+5/vEW5mELH35Ip/efDpO/6iifJ5fmmYfsBAlhUH6EAAAA=$/r$ /// {"NewRecord":true,"_id":0,"chinaname":"ww","icon":"","imageid":"room1","posid":"1225140141238","pospara":{},"postype":"0","state":"","userid":"123_DCD9165057AD"}</param> public static void Host836(string msg) { try { if (msg.Split(';').Length >= 3) { string appUser = msg.Split(';')[0]; if (appUser.Contains("_")) { string account = appUser.Split('_')[0]; string mac = appUser.Split('_')[1]; string zipStr = msg.Split(';')[3].Replace("$/r$", ""); string base64j = EncryptionHelp.Decrypt(zipStr, true); var room = JsonConvert.DeserializeObject <host_room>(base64j);//list多件开关 room.Account = account; room.Mac = mac; using (HsfDBContext hsfDBContext = new HsfDBContext()) { var roomEntity = hsfDBContext.host_room.Where(t => t.posid == room.posid && t.DeleteMark == 0).FirstOrDefault(); if (roomEntity != null) { roomEntity.DeleteMark = 1; roomEntity.ModifyTime = DateTime.Now; AddRoom(hsfDBContext, room); log.Debug($"836 Ok,房间信息修改成功!"); } else { //当前房间id需要保存,网关房间id为0,不可以 AddRoom(hsfDBContext, room); log.Info($"836 OK,添加房间成功!"); } //清除房间缓存信息,等待查询之后再次缓存 using (RedisHashService service = new RedisHashService()) { service.RemoveEntryFromHash("Room", account);//解决默认posid都为0的问题 } } } else { log.Error($"836 Fail,添加房间失败,命令不符合规范!"); } } else { log.Error($"836 Fail,添加房间失败,命令不符合规范!"); } } catch (Exception) { throw; } }
/// <summary> /// 新增房间 /// </summary> /// <param name="msg">user:123_Server type:other msg: /// 123_DCD9165057AD;8;836;H4sIAAAAAAAAAC2Muw7CIBSG3+XMDBxavLAZmR18gYbgiTIADdAQ0/Tdhdbt+68rPKg+ycb0AlXSQgwm15AzsB8XTDCeQEGtwMDZGBp38uZNvQYpRo/NmWPeNQohceQ4ohguhz+bZECt2y7Kd+5/vEW5mELH35Ip/efDpO/6iifJ5fmmYfsBAlhUH6EAAAA=$/r$ /// {"NewRecord":true,"_id":0,"chinaname":"ww","icon":"","imageid":"room1","posid":"1225140141238","pospara":{},"postype":"0","state":"","userid":"123_DCD9165057AD"}</param> public static string Host836(string msg) { try { string appUser = msg.Split(';')[0]; if (appUser.Contains("_")) { string account = appUser.Split('_')[0]; string mac = appUser.Split('_')[1]; string zipStr = msg.Split(';')[3].Replace("$/r$", ""); string base64j = EncryptionHelp.Decrypt(zipStr, true); var room = JsonConvert.DeserializeObject <host_room>(base64j); using (HsfDBContext hsfDBContext = new HsfDBContext()) { using (RedisHashService service = new RedisHashService()) { var roomEntity = hsfDBContext.host_room.Where(t => t.posid == room.posid && t.DeleteMark == 0).FirstOrDefault(); if (roomEntity != null) { //roomEntity.DeleteMark = 1; //roomEntity.ModifyUser = appUser; //roomEntity.ModifyTime = DateTime.Now; hsfDBContext.host_room.Remove(roomEntity);//真实删除 AddRoom(hsfDBContext, room, appUser, account, mac); log.Debug($"836 Ok,房间信息修改成功!"); } else { //当前房间id需要保存,网关房间id为0,不可以 AddRoom(hsfDBContext, room, appUser, account, mac); log.Debug($"836 OK,添加房间成功!"); } //清除房间缓存信息,等待查询之后再次缓存 service.RemoveEntryFromHash("Room", account); //解决默认posid都为0的问题 log.Debug($"清除家庭缓存{account}"); return($"{appUser};836;ALL;Zip;H4sIAAAAAAAAAHNMScnPBgD0Si5gBQAAAA==$/r$"); //Addok } } } else { log.Debug($"836 Fail,添加房间失败,命令不符合规范!"); return($"{appUser};836;ALL;Zip;H4sIAAAAAAAEAEstKsovAgBxvN1dBQAAAA==$/r$");//error } } catch (Exception) { throw; } }
/// <summary> /// 1.请求主机房间列表 /// user:DAJCHSF_Server type:other msg:DAJCHSF_2047DABEF936;8;835;admin$/r$ /// 2.主机返回房间列表 /// user:DAJCHSF_2047DABEF936 type:other msg:DAJCHSF_2047DABEF936;835;admin;Zip;H4sIAAAAAAAAAIuuViotTi3KTFGyUlLSUSouSSxJBTJLikpTgdzkjMy8xLzEXJDQs46Jz2e1PF23DSiemZyfB9GQmZuYngrTXZBfDGYaQNgFiUWJSlbVSimpZSX5JYk5QBlDS5AliWmpxaklJZl56TCrasEaSioLUqHa40EGGego+aWWB6Um5xcBeSCFtTrY3Yvm1qfrFj3ta8Xh0KL8/FxDJNcaGhgbmpoYG1iam5iiOJzajupd/nTdEtIcBcRmBjR1VNe8p61rSHaXkampBW0Da13nyxmbSHOUsYmBkTl5jooFAHQFerEIAwAA$/r$ /// </summary> /// <param name="msg">user:DAJCHSF_Server type:other msg:DAJCHSF_2047DABEF936;8;835;admin$/r$</param> public static string Host835(string msg) { try { if (msg.Split(';').Length >= 3) { string appUser = msg.Split(';')[0]; if (appUser.Contains("_")) { string account = appUser.Split('_')[0];//DAJCHSF,一个家庭可能有多个用户,mac不同,只取账户 List <host_room> roomList = null; string roomListJson = ""; string msgResult = ""; using (RedisHashService service = new RedisHashService()) { //获取当前房间的设备列表,先找缓存 roomListJson = service.GetValueFromHash("Room", account); if (string.IsNullOrEmpty(roomListJson)) { using (HsfDBContext hsfDBContext = new HsfDBContext()) { roomList = hsfDBContext.host_room.Where(t => t.Account == account && t.DeleteMark == 0).ToList(); roomListJson = JsonConvert.SerializeObject(roomList); //缓存当前账户房间列表返回字符串 service.SetEntryInHash("Room", account, JsonConvert.SerializeObject(roomList)); } } msgResult = $"{appUser};835;admin;Zip;{EncryptionHelp.Encryption(roomListJson, true)}$/r$";//带上用户信息 log.Debug($"835 OK,返回房间列表成功!返回信息:{msgResult}"); return(msgResult); } } else { log.Debug($"835 Fail,命令不符合规范!"); return(null); } } else { log.Debug($"835 Fail,命令不符合规范!"); return(null); } } catch (Exception) { throw; } }
/// <summary> /// 获得总线网关要添加的设备信息sendsocket(8, "8;876;"+zhujitype+";"+devmac);//按一下总线开关,缓存总线开关mac地址,点击总线网关,返回当前要添加的几键开关 /// </summary> /// <param name="msg">1.查询总线网关下的开关connect user:123_Server type:other msg:123_e0ddc0a405d9;8;876;Safe_Center;58.57.32.162$/r$ /// 2.返回结果 123_e0ddc0a405d9;876;all;Zip;H4sIAAAAAAAEAGWQyw6CMBRE/6VrQ3gENLI38RuMi5tykRv6SlswxPjvoryqLufMTDvt5cHOFTuqTogdq7AnjrRq3pACBRJXIMC5msKCH8xoszhjU98EngQ+WvkhyvdRlkZJkZanpIyLKWq09evBwBtscQjKRjvypFWAeANKoVgISbgFazuHdlNG33sQHQZ158H/6eQXpAsAznWn1omfx8xrLY7B933fxNP2VVJXVNMQhmYUpioU6FGCbSfyvL4AcWAUMpEBAAA=$/r$ /// </param> public static string Host876(string msg) { try { if (msg.Split(';').Length >= 4) { using (RedisStringService service = new RedisStringService()) { string appUser = msg.Split(';')[0]; string account = appUser.Split('_')[0]; string devmac = msg.Split(';')[4].Replace("$/r$", ""); //本地外网ip string BusSwitchMac = service.Get("BusSwitch_" + devmac); //先提前按一下,瑞瀛网关服务器缓存开关mac地址,两分钟 if (!string.IsNullOrEmpty(BusSwitchMac)) { BusSwitchMac = BusSwitchMac.Replace("\"", ""); string[] macs = BusSwitchMac.Split(';'); List <host_device> deviceList = new List <host_device>(); foreach (var item in macs) { host_device host_Device = new host_device()//可能是个数组,有多个开关同时按的情况 { devmac = devmac + ";F1;" + BusSwitchMac, devtype = "03", devport = "0" }; deviceList.Add(host_Device); } string zipStr = EncryptionHelp.Encryption(JsonConvert.SerializeObject(deviceList), true); string msgResult = $"{appUser};876;all;Zip;{zipStr}$/r$";//拼接 log.Debug($"876 OK,返回设备类型的设备列表成功!返回信息:{msgResult}"); return(msgResult); } return(null); } } else { log.Debug($"855 Fail,命令不符合规范!"); return(null); } } catch (Exception) { throw; } }
/// <summary> /// 瑞瀛网关开关指令发送 /// </summary> /// <param name="deviceEntity"></param> /// <param name="state"></param> /// <returns></returns> public static bool RYZigSendMsg(host_device deviceEntity, bool state) { string devmac = deviceEntity.devmac; //192.168.1.55;f1;50000 string ip = devmac.Split(';')[0]; //192.168.1.55 string ff = devmac.Split(';')[1]; //f1 string mac = devmac.Split(';')[2]; //06 string port = deviceEntity.devport; //0;1,0;1,0;3,自定义添加的时候做了+1,还多了分号 int iport = int.Parse(port.Replace(";", "")) - 1; //去分号,减1 string iportStr = "0" + iport; string st = state ? "01" : "00"; string cachekey = deviceEntity.cachekey;//缓存处理-- //发送到zigbee网关并遍历状态 if (!string.IsNullOrEmpty(st)) { //cc dd 开头固定 //f1 第一个485通道 //06 物理地址 //05 00 08 //00 继电器 //01 为打开继电器 //8D C8 为crc校验码 string msg1 = $"{mac} 05 00 08 {iportStr} {st}"; string crc = EncryptionHelp.CRCCalc(msg1); //crc校验 string msg = $"cc dd {ff} {msg1} {crc}"; string ipmsg = msg + "|" + devmac; //ccddf10605000800018c7f|192.168.82.107;f1;06//普通字符串+16进制字符串 string mac16 = RYZigClient.ToHex(ipmsg, "utf-8", false); RYZigClient.Send(mac16); //发送到网关服务器YunZig log.Debug($"向RYZig网关发送指令{ipmsg},确认器开始遍历状态是否改变 {state.ToString()}"); if (StateResult(cachekey, state.ToString())) { return(true); } else { log.Debug($"设备状态改变超时失败! cachekey:{cachekey}!"); return(false); } } else { log.Debug($"设备状态改变失败!cachekey:{cachekey}! 不存在设备类型:{deviceEntity.devtype}"); return(false); } }
/// <summary> /// 拼装得到发送给智能家居的命令 /// </summary> /// <param name="sessionId"></param> /// <param name="deviceId"></param> /// <param name="req"></param> /// <param name="questions"></param> /// <returns></returns> public static string GetMengDouSendStr(string sessionId, string deviceId, string req, string questions) { string sendstr = ""; if (req.Contains("service\":\"musicX")) { sendstr = sessionId + "_" + deviceId + ";5;517;Zip;" + EncryptionHelp.Encryption("music@" + req, true) + "$/r$" + "\r\n"; } else if (req.Contains("service\":\"news")) { sendstr = sessionId + "_" + deviceId + ";5;517;Zip;" + EncryptionHelp.Encryption("news@" + req, true) + "$/r$" + "\r\n"; } else if (req.Contains("service\":\"story")) { sendstr = sessionId + "_" + deviceId + ";5;517;Zip;" + EncryptionHelp.Encryption("story@" + req, true) + "$/r$" + "\r\n"; } else if (req.Contains("service\":\"joke")) { sendstr = sessionId + "_" + deviceId + ";5;517;Zip;" + EncryptionHelp.Encryption("joke@" + req, true) + "$/r$" + "\r\n"; } else if (req.Contains("service\": \"weather")) { try { dynamic result = JsonConvert.DeserializeObject <dynamic>(req);//反序列化 string answer_text = result.nameValuePairs.answer.nameValuePairs["text"].Value; //string airQuality = result.nameValuePairs.data.nameValuePairs.result.values[0].nameValuePairs["airQuality"].Value;//;空气质量:{airQuality} string pm25 = result.nameValuePairs.data.nameValuePairs.result.values[0].nameValuePairs["pm25"].Value; req = $"info@{questions}@{answer_text};PM2.5:{pm25}"; sendstr = sessionId + "_" + deviceId + ";5;515;" + EncryptionHelp.Encryption(req, false) + "$/r$" + "\r\n"; } catch (Exception ex) { log.Error("天气json处理错误:" + ex.Message); return(sessionId + "_" + deviceId + ";5;515;" + EncryptionHelp.Encryption("info@" + questions + "@天气json处理错误:" + ex.Message, false) + "$/r$" + "\r\n"); } } else { sendstr = sessionId + "_" + deviceId + ";5;513;" + EncryptionHelp.Encryption(questions, false) + "$/r$" + "\r\n"; } return(sendstr); }
static void Main(string[] args) { string key = "(!@^#*(&"; byte[] saltByte = new byte[] { 12, 31, 123, 41, 11, 55, 33, 23 }; string token = EncryptionHelp.AESEncrypt("1", key, saltByte); Console.WriteLine(token); string value = EncryptionHelp.AESDecrypt(token, key, saltByte); Console.WriteLine(value); //new TestVisitorDemo().Run(); Console.WriteLine("Hello World!"); Console.ReadKey(); }
/// <summary> /// 异步返回智能家居数据 /// 12345678_Ying;513;5omT5byA56qX5biY;Zip;H4sIAAAAAAAAAAEfAOD/6K6+5aSH5peg5rOV6K+G5YirQOaJk+W8gOeql+W4mCDHP38fAAAA$/r$ /// </summary> /// <param name="msg"></param> public static void AsyncReceiveMsg(string msg) { log.Info($"AsyncSmartHomeReceiveMsg异步返回:{msg}"); try { if (msg.IndexOf(";") > 0) { //根据返回字符串得到sessionId string sessionId = msg.Split(';')[0].Split('_')[0]; string deviceId = msg.Split(';')[0].Split('_')[1]; log.Info("AsyncSmartHomeReceiveMsg异步返回sessionId:" + sessionId); //添加当前智能家居异步返回语义 string msg64j = EncryptionHelp.Decrypt(msg.Split(';')[4].Replace("$/r$", ""), true);//解密"设备无法识别@打开窗帘" string Answers; if (msg64j.IndexOf("@") > 0) { Answers = "";//2020播放响应效果音可持续交流 } else { Answers = msg64j; //2011播放url内容,播放完自动唤醒 } NlpAnswers _NlpAnswers = new NlpAnswers() { Code = "SmartHomeNlp", Name = "家居", Answers = Answers, }; //————————————————向中枢控制器指定的sessionId发送返回的语义结果—————————————————————————— NlpControler.AsyncReturnMsg(sessionId, _NlpAnswers); log.Info($"AsyncSmartHomeReceiveMsg异步完毕,向中枢控制器指定的{sessionId}发送返回的语义结果:{_NlpAnswers.Answers}"); } } catch (Exception ex) { log.Info($"异步发生异常:" + ex.Message); } }
public async Task <AuthResDto> Login([FromServices] AccountLib.AccountLibClient client, [FromServices] IOptionsMonitor <AuthAESConfig> options, [FromBody] LoginDto dto) { LoginRes res = await client.LoginAsync(mapper.Map <LoginReq>(dto)); if (res.AccountID > 0) { return(new AuthResDto() { Success = true, Token = EncryptionHelp.AESEncrypt(res.AccountID.ToString(), options.CurrentValue.Key, options.CurrentValue.SaltBytes) }); } else { return(new AuthResDto() { Success = false, Message = res.Message }); } }
/// <summary> /// 异步返回智能家居数据 /// user:16080_ac83f318064f type:other msg:16080_ac83f318064f;513;6Zi/5aeo5L+u6YeM6Z2i;Zip;H4sIAAAAAAAAAAEiAN3/6K6+5aSH5peg5rOV6K+G5YirQOmYv+WnqOS/rumHjOmdokgOnEMiAAAA$/r$ /// </summary> /// <param name="msg">收到的响应结果</param> public static void SmartHomeNlpReceiveMsg(string msg) { try { string sessionId = msg.Split(';')[0].Split('_')[0]; //根据返回字符串得到sessionId string msg64j = EncryptionHelp.Decrypt(msg.Split(';')[4].Replace("$/r$", ""), true); //解密"设备无法识别@打开窗帘" //拼装返回答案 NlpAnswers _NlpAnswers = new NlpAnswers() { Code = "SmartHomeNlp", Name = "家居", Answers = msg64j, Level = 1 }; //向中枢控制器指定的sessionId发送返回的语义结果 _NlpControlerReceiveMsg(sessionId, _NlpAnswers); } catch (Exception) { throw; } }
/// <summary> /// 发送消息str /// </summary> /// <param name="body"></param> /// <param name="hostid"></param> public static void SendStr(SoundBodyRequest body, string hostid) { string sendstr = ""; ///这里要判断,数据类型了 if (body.talkstate == "train") { //训练模式不发送开关指令,执行5135指令 } else { if (body.sourceId == "mengdou") { //得到发送给智能家居的命令 sendstr = GetMengDouSendStr(body.sessionId, body.deviceId, body.req.ToString(), body.questions); } else { sendstr = body.sessionId + "_" + body.deviceId + ";5;513;" + EncryptionHelp.Encryption(body.questions, false) + "$/r$" + "\r\n"; } //向主机发送数据 SmartHomeNlpServer.SendMsg(hostid, sendstr); } }
/// <summary> /// 处理Nlp请求req /// </summary> /// <param name="msg"> ///1.二楼全开 ///connect user:Nlp_Server type:home msg:Nlp_Server ///connect user:Nlp_Server type:other msg:123_25995;5;513;5omT5byA5byA5YWz$/r$ /// ///connect user:Nlp_Server type:other msg:123_17920;5;513;5omT5byA6ZiB5qW8$/r$ ///123_17920;513;5omT5byA6ZiB5qW8;Zip;H4sIAAAAAAAEAAEYAOf/5omT5byA77ya6ZiB5qW844CC5aSx6LSlgj8c4BgAAAA=$/r$ /// ///2.返回结果 开启所有灯光、音乐、窗帘4 ///connect user:25995_ac83f317b8c7 type:other msg:25995_ac83f317b8c7;513;5LqM5qW85YWo5byA;Zip;H4sIAAAAAAAAAHu6p+HphPXPOhuezel83rj+aWvn44bGl/M3P9k5Ach4vmr60x0zTAAnYIhxJQAAAA==$/r$ ///25995_123;513;5omT5byA5byA5YWz;Zip;H4sIAAAAAAAEAHvWOfnpnob3e2Y9m7nrRfNeIPtp62YTk8cNTcgCpqZoAmZmaAIGBmgChoZoAkZGaALGxmgCieh8dIEkdD66QDI6H10gBY2fisZPQ+OnA/lPl2x8sWUpAHyIeM8pAQAA$/r$ /// </param> public static string HostNlpRequest(string msg) { try { if (msg.Split(';').Length >= 3) { string session_account = msg.Split(';')[0]; if (session_account.Contains("_")) { string account = session_account.Split('_')[1]; string req = msg.Split(';')[3].Replace("$/r$", ""); string deviceStr = EncryptionHelp.Decrypt(req, false);//解码无zip string code = ""; string msgResult = ""; string actionStr = ""; bool state = false; if (deviceStr.Contains("打开")) { actionStr = "打开"; code = "8135"; deviceStr = deviceStr.Replace("打开", ""); state = true; } else if (deviceStr.Contains("关闭")) { actionStr = "关闭"; code = "8145"; deviceStr = deviceStr.Replace("关闭", ""); state = false; } if (!string.IsNullOrEmpty(code)) { using (RedisHashService service = new RedisHashService()) { List <host_device> deviceList = null; //获取当前房间的设备列表,先找缓存 string devices = service.GetValueFromHash("AccountDevices", account); if (!string.IsNullOrEmpty(devices)) { deviceList = JsonConvert.DeserializeObject <List <host_device> >(devices);//list多件开关,ALL数组 } else { using (HsfDBContext hsfDBContext = new HsfDBContext()) { deviceList = hsfDBContext.host_device.Where(t => t.account == account && t.deletemark == 0).ToList(); service.SetEntryInHash("AccountDevices", account, JsonConvert.SerializeObject(deviceList)); } } if (deviceList.Count() != 0) { var deviceControl = deviceList.Where(t => t.chinaname.Contains(deviceStr)).ToList();//包含“开关”名称的所有设备 if (deviceControl.Count() != 0) { string okDevices = ""; string failDevices = ""; foreach (var item in deviceControl) { //发送指令给网关,改变状态,避免两次查库 //DeviceStateChange($"{session_account};8;{code};{item.deviceid};$/r$") if (ChangeStateMain.StateChangeByType(item, state)) { okDevices += item.chinaname + "。"; } else { failDevices += item.chinaname + "。"; } } string resultDevices = ""; if (!string.IsNullOrEmpty(okDevices)) { resultDevices += $"已经为您{actionStr}:{okDevices}"; } if (!string.IsNullOrEmpty(failDevices)) { resultDevices += $"{actionStr}:{failDevices}失败"; } msgResult = $"{session_account};513;{req};Zip;{EncryptionHelp.Encryption(resultDevices, true)}$/r$"; log.Debug($"{resultDevices}! cachekey:{msgResult}"); return(msgResult); } else { log.Debug($"不存在该设备! {req}"); return(null); } } else { log.Debug($"不存在该账户的设备列表! {msg}"); return(null); } } } else { log.Debug($"code不符合规范! {msg}"); return(null); } } else { log.Debug($"命令不符合规范! {msg}"); return(null); } } else { log.Debug($"命令不符合规范! {msg}"); return(null); } } catch (Exception) { throw; } }
/// <summary> ///1.修改总线开关mac地址 解压(总线开关01,0115170616344,58.57.32.162;F1;06,58.57.32.162;F1;01) 新名,房间id,老的地址,新的地址 ///connect user:123_Server type:other msg:123_DCD9165057AD;8;823;01240943509560;5bCE54GvLDAxMTUxNzA2MTYzNDQ=$/r$ ///2.主机返回改名成功renameok@1041140155612 ///user:DAJCHSF_2047DABEF936 type:other msg:DAJCHSF_2047DABEF936;823;1041140155612;Zip;H4sIAAAAAAAAACtKzUvMTc3PdjA0MDE0NDEwNDU1MzQCAFBUoP4WAAAA$/r$ /// </summary> /// <param name="msg"></param> public static string Host8231(string msg) { string msgResult = ""; try { if (msg.Split(';').Length >= 4) { string appUser = msg.Split(';')[0]; string account = appUser.Split('_')[0]; string deviceId = msg.Split(';')[3]; string newName_Pid_ya = msg.Split(';')[4].Replace("$/r$", ""); string newName_Pid = EncryptionHelp.Decrypt(newName_Pid_ya, false); string newName = newName_Pid.Split(',')[0]; string posid = newName_Pid.Split(',')[1]; string oldDevmac = newName_Pid.Split(',')[2]; //总线开关旧的mac地址 string newDevmac = newName_Pid.Split(',')[3]; //总线开关新的mac地址 if (!string.IsNullOrEmpty(oldDevmac) && !string.IsNullOrEmpty(newDevmac) && oldDevmac != newDevmac) { //发送修改mac地址指令到网关服务器 bool isModify = RYZigMacModifyMsg(oldDevmac, newDevmac); if (isModify) { using (HsfDBContext hsfDBContext = new HsfDBContext()) { using (RedisHashService service = new RedisHashService()) { //根据老mac检索出同一开关下的继电器,一起修改mac List <host_device> deviceList = hsfDBContext.host_device.Where(t => t.devmac == oldDevmac && t.devposition == posid && t.account == account && t.deletemark == 0).ToList(); if (deviceList.Count() != 0) { string devtype = deviceList[0].devtype; foreach (var item in deviceList) { //修改mac,缓存状态也要对应的修改,否则显示离线 //先拿到之前的key状态,删掉,再赋值给新的key string st = service.GetValueFromHash("DeviceStatus", item.cachekey); service.RemoveEntryFromHash("DeviceStatus", item.cachekey); //当前名称变动的话,修改名称 if (deviceId == item.deviceid) { item.chinaname = newName; //改名 } item.devmac = newDevmac; //改mac item.devip = newDevmac; //改mac item.cachekey = newDevmac + "_" + item.devport; //改mac item.modifiyuser = appUser; item.modifiytime = DateTime.Now; hsfDBContext.SaveChanges(); //再赋值给新的key{"String 引用没有设置为 String 的实例。\r\n参数名: s"} if (!string.IsNullOrEmpty(st)) { service.SetEntryInHash("DeviceStatus", item.cachekey, st); log.Debug($"改名key缓存新的状态 {item.cachekey} :{st}"); } else { service.SetEntryInHash("DeviceStatus", item.cachekey, "False"); log.Debug($"改名key缓存新的状态 {item.cachekey} 默认:False"); } //清除当前设备缓存 service.RemoveEntryFromHash("DeviceEntity", item.deviceid); log.Debug($"清除设备缓存DeviceEntity {item.deviceid}"); } //2.主机返回app修改成功 msgResult = $"{appUser};8231;{deviceId};Zip;H4sIAAAAAAAEACtKzUvMTc3PBgC88yB7CAAAAA==$/r$";//拼接 renameok //清除房间设备列表缓存 service.RemoveEntryFromHash("RoomDevices", account + "|" + posid); log.Debug($"清除房间设备列表缓存RoomDevices {account}|{posid}"); //清除当前设备类型的设备列表缓存 service.RemoveEntryFromHash("TypeDevices", account + "|" + devtype); log.Debug($"清除当前设备类型的设备列表缓存TypeDevices {account}|{devtype}"); log.Debug($"8231 OK,设备重命名成功!返回信息:{msgResult}"); return(msgResult); } else { log.Debug($"8231 Fail,修改mac地址数据库失败,设备不存在!"); return(null); } } } } else { log.Debug($"8231 Fail,修改mac地址失败,修改失败!"); msgResult = $"{appUser};8231;{deviceId};Zip;H4sIAAAAAAAEAEstKsovAgBxvN1dBQAAAA==$/r$";//拼接 error return(msgResult); } } else { log.Debug($"8231 Fail,修改mac地址失败,mac地址不能为空,新旧地址不能相同!"); msgResult = $"{appUser};8231;{deviceId};Zip;H4sIAAAAAAAEAEstKsovAgBxvN1dBQAAAA==$/r$";//拼接 error return(msgResult); } } else { log.Debug($"8231 Fail,设备重命名失败,命令不符合规范!"); return(null); } } catch (Exception) { throw; } }
public string sendvoice(SoundBodyRequest body) { log.Info("智能家居smarthome:::::::" + body.questions); string user = "******"; string sendstr = ""; if (!string.IsNullOrEmpty(body.deviceId)) { user = ConfigAppSettings.GetValue(body.deviceId);//wali_Server } else { return(""); } bool sok = false; //群发广播 if (user.IndexOf("%") > 0) { user = user.Replace("%", ""); foreach (var us in ls) { if (us.user.IndexOf(user) > -1) { try { //sendstr = requestInfo.Body.Split(' ')[2].Substring(4, requestInfo.Body.Split(' ')[2].Length - 4); sendstr = "connect user:"******" type:other msg:" + "12345678_Ying" + ";5;513;5omT5byA56qX5biY" + "$/r$" + "\r\n"; us.sesson.Send(sendstr); } catch { }; sok = true; } } } else { user = "******"; foreach (var us in ls) { if (us.user == user) { try { //Task.Run(() => //{ log.Info("多线程发送数据user是:" + user); sendstr = body.sessionId + "_" + body.deviceId + ";5;513;" + EncryptionHelp.Encryption(body.questions, true) + "$/r$" + "\r\n"; us.sesson.Send(sendstr); log.Info("给user发送数据完毕" + body.sessionId); //}); } catch { }; sok = true; break; } } } if (!sok) { //requestInfo.Body.Split(' ')[2].Split(':')[1].Split(';')[0] return("server noactive"); } log.Info("智能家居smarthome完毕:::::::" + body.sessionId); return("sendok"); }
/// <summary> /// 添加设备 8;8211;All;+Base64(zip(设备对象jhson串)) /// </summary> /// <param name="msg">user:123_Server type:other msg: /// 123_DCD9165057AD;8;8211;ALL;H4sIAAAAAAAAAH2QPU7EMBCF7zJ1CjuRs2wuQEdBuQitBmectZTEke2wQqutEAeg5Bx0SHscfo6Bf6JINMiNv/eeZ8Zzd4IbOt6SNLaFxtuZCtjrcGUFyIMeccSBoIGvt4+f58v35fXz5Z1B8Hp0TsUgXAVs6RF7tEPATPKA40j9ylpSCvOyFFyIWvCKbdniTcFgTKlSxlNjrRgTG6WyPaD815/QIjSncwZjfWxTic12sY3TXpsx1siKpU6altI0VZacR0/rsIn4XyxX9E9TjO5090C0v44PC9ADdvmHIcGZCFLfuTRM2ORkjmE/89JhdmRTFM73v4aKUN2AAQAA$/r$ /// user:123_DCD9165057AD type:other msg: /// 123_DCD9165057AD;8;8212;ALL;H4sIAAAAAAAAAG2RsU7DMBCG38VzVOUcN6TZGBlggBGh6ORcUkuJHdlJI1RVYmFn4ykQAyuv04G3wIlLRBHy4u/+/3y/zvd7dkPjLUljS5b3dqCIFcpf44jJrdKosSWWM5RZUiUgCKsL5qUGnasmH8s8lrTDBm3rMZDcotbULKwkzWbgsAbBIRYiSeOT1s1CEqhFOeGGryDNVlm2gpgHpUOLLN/72cZNkY7PH1+vbxEHiPz522A60pPp8+n48v6/6RCeNbZfcnbGqV4ZHaICCJHGsPlJaqmWpqTfcV2PPS3tM8E58gX7x26yXl4V16Tr0gy+rFqsw2q8AeK1LzW1myP5H+jM6Bc7nAYMjuxsHbFRxR3ZHVl2ePgGQ/XuYsMBAAA=$/r$ /// [{"NewRecord":true,"_id":0,"chinaname":"ac83f314eaf7","classfid":"8","devalarm":"","devchannel":"","deviceid":"12151421044360","devip":"123","devmac":"192.168.88.102","devpara":{"close":"关闭,211,1,192.168.88.102","open":"开启,211,1,192.168.88.102"},"devport":"","devposition":"1211144601960","devregcode":"123","devstate":"","devstate1":"","devstate2":"","devtype":"AI_Mengdou","imageid":"dev105","lgsort":0,"powvalue":"","userid":"wali_Server"}] /// /// </param> public static string AddDeviceToRoom(string msg, string code) { try { if (msg.Split(';').Length >= 4) { using (RedisHashService service = new RedisHashService()) { string appUser = msg.Split(';')[0]; string account = appUser.Split('_')[0]; string mac = appUser.Split('_')[1]; string zipStr = msg.Split(';')[4].Replace("$/r$", ""); string base64j = EncryptionHelp.Decrypt(zipStr, true); var deviceLists = JsonConvert.DeserializeObject <List <host_device> >(base64j);//list多件开关,ALL数组 using (HsfDBContext hsfDBContext = new HsfDBContext()) { string posid = ""; string cachekey = ""; string devchannel = ""; string devtype = ""; string devmac = ""; foreach (var item in deviceLists) { devtype = item.devtype; devchannel = item.devchannel; posid = item.devposition; devmac = item.devmac; if (!string.IsNullOrEmpty(item.devport)) { cachekey = item.devmac + "_" + item.devport;//存在mac相同,端口不相同的多键设备 } else { cachekey = item.devmac;//存在mac相同,端口不相同的多键设备 } var deviceEntity = hsfDBContext.host_device.Where(t => t.cachekey == cachekey && t.deletemark == 0).FirstOrDefault(); if (deviceEntity != null) { //deviceEntity.deletemark = 1; //deviceEntity.modifiyuser = appUser; //deviceEntity.modifiytime = DateTime.Now; hsfDBContext.host_device.Remove(deviceEntity);//真实删除 AddDeviceEntity(hsfDBContext, item, appUser, account, mac); log.Debug($"{code} OK,重新添加设备成功!"); } else { //当前房间id需要保存,网关房间id为0,不可以 AddDeviceEntity(hsfDBContext, item, appUser, account, mac); } string statusStr = service.GetValueFromHash("DeviceStatus", cachekey); if (string.IsNullOrEmpty(statusStr)) { //缓存状态不存在的,先设备状态默认为False,在线,关闭 service.SetEntryInHash("DeviceStatus", cachekey, "False"); } } //如果设备网关字段不为空,则查询网关最初状态,可能不全部关闭? if (!string.IsNullOrEmpty(devchannel) && devtype.Contains("Zigbee")) { YunZigClient.SendMsg($"{{\"code\" :5001,\"serial\": 11111,\"device\":[{{\"id\": \"{devmac}\"}}],\"zigbee\":\"{devchannel}\"}}");//zigbee查询初始状态,向网关 } //1清除房间设备列表缓存 service.RemoveEntryFromHash("RoomDevices", account + "|" + posid); if (posid != "0") { service.RemoveEntryFromHash("RoomDevices", account + "|0");//房间内设备变动时,0所有设备的缓存也随之清除 } log.Debug($"1.添加设备,清除房间设备列表缓存RoomDevices {account}|{posid}"); //2清除当前设备类型的设备列表缓存 service.RemoveEntryFromHash("TypeDevices", account + "|" + devtype); log.Debug($"2.添加设备,清除当前设备类型的设备列表缓存TypeDevices {account}|{devtype}"); //3同步DuerOS设备 DuerOSClient.PutDeviceChangeQueue(account); log.Debug($"3.添加设备,同步DuerOS设备 {account}"); //主机返回app添加成功 string msgResult = $"{appUser};{code};ALL;Zip;H4sIAAAAAAAAAHNMScnPBgD0Si5gBQAAAA==$/r$";//拼接 log.Debug($"{code} OK,添加设备成功!返回信息:{msgResult}"); return(msgResult); } } } else { log.Debug($"{code} Fail,添加设备失败,命令不符合规范!"); return(null); } } catch (Exception) { throw; } }
/// <summary> ///1.告诉主机重命名设备名称 解压(射灯,0115170616344) 新名,房间id ///connect user:123_Server type:other msg:123_DCD9165057AD;8;823;01240943509560;5bCE54GvLDAxMTUxNzA2MTYzNDQ=$/r$ ///2.主机返回改名成功renameok@1041140155612 ///user:DAJCHSF_2047DABEF936 type:other msg:DAJCHSF_2047DABEF936;823;1041140155612;Zip;H4sIAAAAAAAAACtKzUvMTc3PdjA0MDE0NDEwNDU1MzQCAFBUoP4WAAAA$/r$ /// </summary> /// <param name="msg"></param> public static string Host823(string msg) { string msgResult = ""; try { if (msg.Split(';').Length >= 4) { string appUser = msg.Split(';')[0]; string account = appUser.Split('_')[0]; string deviceId = msg.Split(';')[3]; string newName_Pid_ya = msg.Split(';')[4].Replace("$/r$", ""); string newName_Pid = EncryptionHelp.Decrypt(newName_Pid_ya, false); string newName = newName_Pid.Split(',')[0]; string posid = newName_Pid.Split(',')[1]; using (HsfDBContext hsfDBContext = new HsfDBContext()) { using (RedisHashService service = new RedisHashService()) { //根据房间id+设备id查询要改名的设备 var deviceEntity = hsfDBContext.host_device.Where(t => t.deviceid == deviceId && t.devposition == posid && t.deletemark == 0).FirstOrDefault(); if (deviceEntity != null) { deviceEntity.chinaname = newName;//改名 deviceEntity.modifiyuser = appUser; deviceEntity.modifiytime = DateTime.Now; hsfDBContext.SaveChanges(); //2.主机返回app重命名成功 msgResult = $"{appUser};823;{deviceId};Zip;H4sIAAAAAAAEACtKzUvMTc3PBgC88yB7CAAAAA==$/r$";//拼接 renameok //清除房间设备列表缓存 service.RemoveEntryFromHash("RoomDevices", account + "|" + posid); log.Debug($"1.设备重命名,清除房间设备列表缓存RoomDevices {account}|{posid}"); if (posid != "0") { service.RemoveEntryFromHash("RoomDevices", account + "|0");//房间内设备变动时,0所有设备的缓存也随之清除 } //清除当前设备类型的设备列表缓存 service.RemoveEntryFromHash("TypeDevices", account + "|" + deviceEntity.devtype); log.Debug($"2.设备重命名,清除当前设备类型的设备列表缓存TypeDevices {account}|{deviceEntity.devtype}"); //4同步DuerOS设备 DuerOSClient.PutDeviceChangeQueue(account); log.Debug($"3.设备重命名,同步DuerOS设备 {account}"); log.Debug($"823 OK,设备重命名成功!返回信息:{msgResult}"); return(msgResult); } else { log.Debug($"823 Fail,设备重命名失败,设备不存在!"); msgResult = $"{appUser};823;{deviceId};Zip;H4sIAAAAAAAEAEstKsovAgBxvN1dBQAAAA==$/r$";//拼接 error return(msgResult); } } } } else { log.Debug($"823 Fail,设备重命名失败,命令不符合规范!"); return(null); } } catch (Exception) { throw; } }
/// <summary> /// 获得当前房间的设备列表的命令8;815;+ posid /// </summary> /// <param name="msg">user:123_Server type:other msg: /// 123_DCD9165057AD;8;815;1225155025360$/r$</param> public static string Host815(string msg) { try { if (msg.Split(';').Length >= 4) { using (RedisHashService service = new RedisHashService()) { string appUser = msg.Split(';')[0]; string account = appUser.Split('_')[0]; string posid = msg.Split(';')[3].Replace("$/r$", "");//房间id ,默认id为0, List <host_device> deviceList = null; //获取当前房间的设备列表,先找缓存 string deviceListJson = service.GetValueFromHash("RoomDevices", account + "|" + posid); if (!string.IsNullOrEmpty(deviceListJson)) { deviceList = JsonConvert.DeserializeObject <List <host_device> >(deviceListJson); } else { using (HsfDBContext hsfDBContext = new HsfDBContext()) { if (posid == "0")//新app首页获取所有设备account { //默认房间为0,查询当前账号所有设备列表 deviceList = hsfDBContext.host_device.Where(t => t.account == account && t.deletemark == 0).OrderBy(t => t.createtime).ToList(); ////包括大华的设备 //List<host_device> outdeviceList = GetOutDevice(account); //foreach (var item in outdeviceList) //{ // deviceList.Add(item);//室内+室外 //} //缓存当前房间的设备列表,不包括状态,不管空与否都缓存,防止第二次还查数据库RoomDevices service.SetEntryInHash("RoomDevices", account + "|" + posid, JsonConvert.SerializeObject(deviceList));//解决默认posid都为0的问题 } else { //posid房间id deviceList = hsfDBContext.host_device.Where(t => t.devposition == posid && t.deletemark == 0).OrderBy(t => t.createtime).ToList(); //缓存当前房间的设备列表,不包括状态,不管空与否都缓存,防止第二次还查数据库 service.SetEntryInHash("RoomDevices", account + "|" + posid, JsonConvert.SerializeObject(deviceList));//解决默认posid都为0的问题 } } } //真正更新设备状态 string zipStr = ""; foreach (var item in deviceList) { if (!string.IsNullOrEmpty(item.cachekey)) { //读取缓存状态 string status = service.GetValueFromHash("DeviceStatus", item.cachekey); if (string.IsNullOrEmpty(status)) { //离线 item.powvalue = "离线"; item.devstate = "false"; } else { item.powvalue = "在线"; item.devstate = status.ToLower(); } } } zipStr = EncryptionHelp.Encryption(JsonConvert.SerializeObject(deviceList), true); string msgResult = $"{appUser};815;{posid};Zip;{zipStr}$/r$";//拼接 log.Debug($"815 OK,返回房间设备列表成功!返回信息:{msgResult}"); return(msgResult); } } else { log.Debug($"815 Fail,命令不符合规范!"); return(null); } } catch (Exception) { throw; } }
/// <summary> /// 获得当前设备类型的设备列表的命令8;855;+ devtype /// </summary> /// <param name="msg">1.查询设备类型 /// user:DAJCHSF_Server type:other /// msg:DAJCHSF_2047DABEF936;8;855;0;Panel_Smartsix,Panel_Wired_Control,Panel_Zigbee,Panel_SingleZigbee,Panel_485Gao,Panel_485Hotel,Panel_485Bus$/r$ 面板 /// user:JYWH_Server type:other /// msg:JYWH_2047DABEF936;8;855;0;Panel_Smartsix,Panel_Wired_Control,Panel_Zigbee,Panel_SingleZigbee,Panel_485Gao,Panel_485Hotel,Panel_485Bus$/r$ /// user:123_Server type:other /// msg:123_DCD9165057AD;8;855;0;Zigbee_Gate$/r$ 网关 /// 2.返回结果 /// user:DAJCHSF_2047DABEF936 type:other /// msg:DAJCHSF_2047DABEF936;855;0;Zip;H4sIAAAAAAAAAOWZb2vTQBjAv4rkdZG7y92l2YcQ8aUi45pdukD/kaQOGQOH5oWFjb0Qq0wcOtGiMgcbUoqyT3Pr+i28a9LON2240kObNjTluculye8JvzyXPNq12hEPgy1rw7JKVqu584TV2lxG4l1vOLiSbd520GANVh83nn0Uh4k46gz3f6iuGosifzJ4i8uxLKxPI2+bNRq8JmMAfB95aqGM+gAQl5J0m8Dj4/EQ2JCiMoYUY5B1tVQ7cu4CucC0rc48tTsI5AciXJFrB/kU80ra32IhszZ299KgGcZqF1lXMwrioNnI/oxgG7gOzg4jilmsTtBntYj/1QSnJzMO0TSMn7bU9veZPMHNh0G1wtWwoM6qfMKjVo3GBwBK1qZqk7/3+M4D7jVDGcVhm++VFsJ//sIkfgKXix8VDL9kL/qfzeFHy8VvFwy/ON03dPW7kABXWz7cdytkHeRz/XZw8/y3+PVMJBfQGH9t++Tw17GPovLf4k+v/uvX56PTQ2P0qa58cugXSD4H34avTkbdS3HUH334aUZBuIwAwlBPQdgDNuFgHRSkbr3JS5H0pIWM4Ud6BsrFX5z65xZ/cmEOv56CcvEXR0E3V8ejbi+dfN1ZPn8HIgApcBewj78W9kn5myr/U/wQLGCfefiLY5/s8jc0+c3wL2KfefiLYx9x8EWcfTL16MexCSJ2mejKh7g2dBeQj/xSsHr4jcknxU915ZODf6Z8VhS/Mfmk+B1d+eTgnymfFcVvavI7wW8vFz8uGP7h167ov1k2fgxcRCB0gOaTN3XrdZk9G3+B3H98KQYdM+6f4td88JaLv3DuNzLtvcWvX3jOxV8g93fei+S7sdoTQ4gBJIRoTnzVixfqLVJ7IkLKq1X6TzNgpP6ZZIBqzn1zMzBTQaubAUM3gUkGoP7Lx7kZmGmhf5+Bx38AI07FAvsgAAA=$/r$</param> public static string Host855(string msg) { try { if (msg.Split(';').Length >= 4) { using (RedisHashService service = new RedisHashService()) { string appUser = msg.Split(';')[0]; string account = appUser.Split('_')[0]; string devtypeStr = msg.Split(';')[4].Replace("$/r$", "");//设备类型列表 string[] devtypes = devtypeStr.Split(','); List <host_device> deviceList = null; //获取当前设备类型的设备列表,先找缓存 string deviceListJson = service.GetValueFromHash("TypeDevices", account + "|" + devtypeStr); if (!string.IsNullOrEmpty(deviceListJson)) { deviceList = JsonConvert.DeserializeObject <List <host_device> >(deviceListJson); } //如果缓存中没有,再查数据库 else { using (HsfDBContext hsfDBContext = new HsfDBContext()) { deviceList = hsfDBContext.host_device.Where(t => t.account == account && devtypes.Contains(t.devtype) && t.deletemark == 0).OrderBy(t => t.createtime).ToList(); //缓存当前设备类型的设备列表,不包括状态,不管空与否都缓存,防止第二次还查数据库 service.SetEntryInHash("TypeDevices", account + "|" + devtypeStr, JsonConvert.SerializeObject(deviceList));//解决默认posid都为0的问题 } } //真正更新设备状态 string zipStr = ""; foreach (var item in deviceList) { //读取缓存状态 string status = service.GetValueFromHash("DeviceStatus", item.cachekey); if (string.IsNullOrEmpty(status)) { //离线 item.powvalue = "离线"; item.devstate = "false"; } else { item.powvalue = "在线"; item.devstate = status.ToLower(); } } zipStr = EncryptionHelp.Encryption(JsonConvert.SerializeObject(deviceList), true); string msgResult = $"{appUser};855;0;Zip;{zipStr}$/r$";//拼接 log.Debug($"855 OK,返回设备类型的设备列表成功!返回信息:{msgResult}"); return(msgResult); } } else { log.Debug($"855 Fail,命令不符合规范!"); return(null); } } catch (Exception) { throw; } }
/// <summary> /// 获取室外设备大华 /// </summary> /// <param name="account"></param> /// <returns></returns> public static string GetOutDevice(string account) { try { string outdeviceListStr = ""; //List<host_device> outdeviceList = new List<host_device>(); using (RedisHashService service = new RedisHashService()) { using (HsfDBContext hsfDBContext = new HsfDBContext()) { if (account.Split('-').Length >= 3)//length:1开始 { //室外,大华产品 string _residential = account.Split('-')[0]; //小区 string _building = account.Split('-')[1]; //楼号 string _unit = account.Split('-')[2]; //单元 string cachekey = _residential + "-" + _building + "-" + _unit; //默认房间 //先查单元对应的缓存,没有再缓存 string outDeviceListJson = service.GetValueFromHash("OutDevices", cachekey); if (!string.IsNullOrEmpty(outDeviceListJson)) { //outdeviceList = JsonConvert.DeserializeObject<List<host_device>>(outDeviceListJson); return(outDeviceListJson); } else { List <hsf_outdevice> dh_deviceList = hsfDBContext.hsf_outdevice.Where(t => t.residential == _residential && t.deletemark == 0).ToList(); //foreach (var item in dh_deviceList) //{ // switch (item.devtype) // { // case "Dahua_EntranceGuard"://门禁 // host_device EntranceGuard = new host_device() // { // deviceid = item.deviceid, // chinaname = item.chinaname, // devtype = item.devtype // }; // outdeviceList.Add(EntranceGuard); // break; // case "Dahua_UnitDoor"://大华单元门口机 // if (_building == item.building && _unit == item.unit) // { // host_device UnitDoor = new host_device() // { // deviceid = item.deviceid, // chinaname = item.chinaname, // devtype = item.devtype // }; // outdeviceList.Add(UnitDoor); // } // break; // case "Elevator"://电梯 // if (_building == item.building && _unit == item.unit) // { // host_device Elevator = new host_device() // { // deviceid = item.deviceid, // chinaname = item.chinaname, // devtype = item.devtype // }; // outdeviceList.Add(Elevator); // } // break; // default: // break; // } //} outdeviceListStr = EncryptionHelp.Encryption(JsonConvert.SerializeObject(dh_deviceList), false); service.SetEntryInHash("OutDevices", cachekey, outdeviceListStr);//缓存室外有权限控制的设备OutDevices return(outdeviceListStr); } } else { return("error:host format error"); } } } } catch (Exception) { throw; } }
/// <summary> /// 获得当前房间的设备列表的命令8;815;+ posid /// </summary> /// <param name="msg">user:123_Server type:other msg: /// 123_DCD9165057AD;8;815;1225155025360$/r$</param> public static string Host815(string msg) { try { if (msg.Split(';').Length >= 3) { string appUser = msg.Split(';')[0]; string account = appUser.Split('_')[0]; string posid = msg.Split(';')[3].Replace("$/r$", "");//房间id ,默认id为0, List <host_device> deviceList = null; //获取当前房间的设备列表,先找缓存 string deviceListJson = service.HashGet("RoomDevices", account + "|" + posid); if (!string.IsNullOrEmpty(deviceListJson)) { deviceList = JsonConvert.DeserializeObject <List <host_device> >(deviceListJson); } //如果缓存中没有,再查数据库 else { using (HsfDBContext hsfDBContext = new HsfDBContext()) { deviceList = hsfDBContext.host_device.Where(t => t.devposition == posid && t.deletemark == 0).OrderBy(t => t.createtime).ToList(); //缓存当前房间的设备列表,不包括状态,不管空与否都缓存,防止第二次还查数据库 service.HashSet("RoomDevices", account + "|" + posid, JsonConvert.SerializeObject(deviceList));//解决默认posid都为0的问题 } } //真正更新设备状态 string zipStr = ""; foreach (var item in deviceList) { //读取缓存状态 string status = service.HashGet("DeviceStatus", item.cachekey); if (string.IsNullOrEmpty(status)) { //离线 item.powvalue = "离线"; item.devstate = "false"; } else { item.powvalue = "在线"; item.devstate = status.ToLower(); } } zipStr = EncryptionHelp.Encryption(JsonConvert.SerializeObject(deviceList), true); string msgResult = $"{appUser};815;{posid};Zip;{zipStr}$/r$";//拼接 log.Debug($"815 OK,返回房间设备列表成功!返回信息:{msgResult}"); return(msgResult); } else { log.Debug($"815 Fail,命令不符合规范!"); return(null); } } catch (Exception) { throw; } }
/// <summary> /// 添加设备 8;8211;All;+Base64(zip(设备对象jhson串)) /// </summary> /// <param name="msg">user:123_Server type:other msg: /// 123_DCD9165057AD;8;8211;ALL;H4sIAAAAAAAAAH2QPU7EMBCF7zJ1CjuRs2wuQEdBuQitBmectZTEke2wQqutEAeg5Bx0SHscfo6Bf6JINMiNv/eeZ8Zzd4IbOt6SNLaFxtuZCtjrcGUFyIMeccSBoIGvt4+f58v35fXz5Z1B8Hp0TsUgXAVs6RF7tEPATPKA40j9ylpSCvOyFFyIWvCKbdniTcFgTKlSxlNjrRgTG6WyPaD815/QIjSncwZjfWxTic12sY3TXpsx1siKpU6altI0VZacR0/rsIn4XyxX9E9TjO5090C0v44PC9ADdvmHIcGZCFLfuTRM2ORkjmE/89JhdmRTFM73v4aKUN2AAQAA$/r$ /// user:123_DCD9165057AD type:other msg: /// 123_DCD9165057AD;8;8212;ALL;H4sIAAAAAAAAAG2RsU7DMBCG38VzVOUcN6TZGBlggBGh6ORcUkuJHdlJI1RVYmFn4ykQAyuv04G3wIlLRBHy4u/+/3y/zvd7dkPjLUljS5b3dqCIFcpf44jJrdKosSWWM5RZUiUgCKsL5qUGnasmH8s8lrTDBm3rMZDcotbULKwkzWbgsAbBIRYiSeOT1s1CEqhFOeGGryDNVlm2gpgHpUOLLN/72cZNkY7PH1+vbxEHiPz522A60pPp8+n48v6/6RCeNbZfcnbGqV4ZHaICCJHGsPlJaqmWpqTfcV2PPS3tM8E58gX7x26yXl4V16Tr0gy+rFqsw2q8AeK1LzW1myP5H+jM6Bc7nAYMjuxsHbFRxR3ZHVl2ePgGQ/XuYsMBAAA=$/r$ /// /// </param> public static string AddDeviceToRoom(string msg, string code) { try { if (msg.Split(';').Length >= 4) { string appUser = msg.Split(';')[0]; string account = appUser.Split('_')[0]; string mac = appUser.Split('_')[1]; string zipStr = msg.Split(';')[4].Replace("$/r$", ""); string base64j = EncryptionHelp.Decrypt(zipStr, true); var deviceLists = JsonConvert.DeserializeObject <List <host_device> >(base64j);//list多件开关,ALL数组 using (HsfDBContext hsfDBContext = new HsfDBContext()) { string posid = ""; string cachekey = ""; string devchannel = ""; string devtype = ""; string devmac = ""; foreach (var item in deviceLists) { devtype = item.devtype; devchannel = item.devchannel; posid = item.devposition; devmac = item.devmac; cachekey = item.devmac + "_" + item.devport;//存在mac相同,端口不相同的多键设备 var deviceEntity = hsfDBContext.host_device.Where(t => t.cachekey == cachekey && t.deletemark == 0).FirstOrDefault(); if (deviceEntity != null) { deviceEntity.deletemark = 1; deviceEntity.modifiyuser = appUser; deviceEntity.modifiytime = DateTime.Now; AddDeviceEntity(hsfDBContext, item, appUser, account, mac); log.Debug($"{code} OK,重新添加设备成功!"); } else { //当前房间id需要保存,网关房间id为0,不可以 AddDeviceEntity(hsfDBContext, item, appUser, account, mac); } } //如果设备网关字段不为空,则查询网关最初状态,可能不全部关闭? if (!string.IsNullOrEmpty(devchannel) && devtype.Contains("Zigbee")) { YunZigClient.SendMsg($"{{\"code\" :5001,\"serial\": 11111,\"device\":[{{\"id\": \"{devmac}\"}}],\"zigbee\":\"{devchannel}\"}}");//发送 } //清除房间设备列表缓存 service.HashDelete("RoomDevices", account + "|" + posid); log.Debug($"清除房间设备列表缓存RoomDevices {account}|{posid}"); //清除当前设备类型的设备列表缓存 service.HashDelete("TypeDevices", account + "|" + devtype); log.Debug($"清除当前设备类型的设备列表缓存TypeDevices {account}|{devtype}"); //2.主机返回app添加成功 string msgResult = $"{appUser};{code};ALL;Zip;H4sIAAAAAAAAAHNMScnPBgD0Si5gBQAAAA==$/r$";//拼接 log.Debug($"{code} OK,添加设备成功!返回信息:{msgResult}"); return(msgResult); } } else { log.Debug($"{code} Fail,添加设备失败,命令不符合规范!"); return(null); } } catch (Exception) { throw; } }