Exemple #1
0
        /// <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);
        }
Exemple #3
0
        /// <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);
            }
        }
Exemple #5
0
        /// <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!");
                        }
                    }
                }
            }
        }
Exemple #7
0
        /// <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);
        }
Exemple #8
0
        /// <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;
            }
        }
Exemple #10
0
        /// <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);
            }
        }
Exemple #15
0
        /// <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);
        }
Exemple #16
0
        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();
        }
Exemple #17
0
        /// <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
                });
            }
        }
Exemple #19
0
 /// <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;
     }
 }
Exemple #20
0
        /// <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);
            }
        }
Exemple #21
0
        /// <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;
            }
        }
Exemple #23
0
        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;
            }
        }