/// <summary>
        /// zigbee网关发送
        /// 拼装1002指令,发送给网关,执行改变状态操作
        /// 1.Zigbee窗帘(Smart_ZigbeeCurtain):pt控制窗帘开度百分比,0为全关闭,100为全打开
        /// 速度:打开窗帘230、4289。关闭窗帘229、3599  等104速度太慢,存在关闭的时候104关闭不充分,打开13,关闭86
        /// {"code":1002,"id":"010000124b000f81eea6","ep":8,"serial":1,"control":{"on":false,"pt":0},"result":0,"zigbee":"00ff2c2c2c6a6f0057f3"}//关闭
        /// 2.Zigbee开关(Panel_Zigbee):on
        /// 速度:打开开关239、392。关闭开关228、411
        /// {"code":1002,"id":"010000124b0014c5d116","ep":1,"serial":1,"control":{"on":true},"result":0,"zigbee":"00ff2c2c2c6a6f0057f3"}
        /// </summary>
        /// <param name="deviceEntity"></param>
        /// <param name="state"></param>
        /// <returns></returns>
        public static bool YunZigSendMsg(host_device deviceEntity, object obj, bool state)
        {
            string cachekey = deviceEntity.cachekey;//缓存处理--

            //发送到zigbee网关并遍历状态
            if (obj != null)
            {
                Zigbee1002 zigbee1002 = new Zigbee1002()
                {
                    code    = 1002,
                    id      = deviceEntity.devmac,                   //mac地址,010000124b0014c6aaee
                    ep      = Convert.ToInt32(deviceEntity.devport), //端口
                    serial  = 1,
                    control = obj,
                    result  = 0,
                    zigbee  = deviceEntity.devchannel//网关,00ff2c2c2c6a6f005979
                };
                string _1002 = JsonConvert.SerializeObject(zigbee1002);
                YunZigClient.SendMsg(_1002);//发送到网关服务器YunZig

                log.Debug($"向YunZig网关发送1002指令{_1002},确认器开始遍历状态是否改变{cachekey}");
                if (StateResult(cachekey, state.ToString()))
                {
                    //返回广播消息,直接开始广播
                    //user:hiddenpath_% type:other msg:hiddenpath_Server;devrefresh;924150429051,false,hiddenpath_ASDFDSSE123$/r$
                    //relayUser = appUser.Split('_')[0] + "_%";
                    //relayUser = appUser;
                    //return $"{appUser};{code};{device};Zip;{success}$/r$";//ok//closeok@808 181248576
                    //return $"{relayUser};devrefresh;{device},{state},{appUser}$/r$";//后面的发给前面的,与请求的对调一下
                    return(true);
                }
                else
                {
                    log.Debug($"设备状态改变超时失败! cachekey:{cachekey}!");
                    //relayUser = appUser;
                    //return $"{appUser};{code};{device};Zip;H4sIAAAAAAAEAEstKsovAgBxvN1dBQAAAA==$/r$";//error
                    return(false);
                }
            }
            else
            {
                log.Debug($"设备状态改变失败!cachekey:{cachekey}! 不存在设备类型:{deviceEntity.devtype}");
                return(false);
            }
        }
        /// <summary>
        /// 添加设备 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;
            }
        }