/// <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);
            }
        }
Example #2
0
        /// <summary>
        /// 8145关闭设备 8;8135;设备id
        /// </summary>
        /// <param name="msg">user:0203_Server type:other msg:0203_ASDFDSSE123;8;8145;808181248576;3,0$/r$</param>
        public static string Host8145(string msg)
        {
            Zigbee1002 zigbee1002 = new Zigbee1002()
            {
                code    = 1002,
                id      = "010000124b00198c4341",
                ep      = 1,
                serial  = 1,
                control = new Control {
                    on = false
                },
                result = 0,
                zigbee = "00ff2c2c2c6a6f005979"
            };

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

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


                if (CloudHostServer.Gateway_SessionDic.ContainsKey(deviceEntity.devchannel))
                {
                    CloudHostServer.Gateway_SessionDic[deviceEntity.devchannel].Send(_1002);
                    return(true);
                }
                else
                {
                    log.Debug($"请求网关的session不存在 {deviceEntity.devchannel}: {_1002}");
                    return(false);
                }
            }
            else
            {
                log.Debug($"设备状态改变失败!cachekey:{cachekey}! 不存在设备类型:{deviceEntity.devtype}");
                return(false);
            }
        }
        /// <summary>
        /// 8145关闭设备 8;8135;设备id
        /// user:123_DCD9165057AD type:other msg:123_DCD9165057AD;8;8145;01120925117040;3,0$/r$
        /// 8135打开设备 8;8135;设备id
        /// user:123_DCD9165057AD type:other msg:123_DCD9165057AD;8;8135;01120925117040;2;8$/r$
        /// {"code":1002,"id":"010000124b0014c6aaee","ep":1,"serial":1,"control":{"on":true},"result":0,"zigbee":"00ff2c2c2c6a6f005979"}
        /// user:DAJCHSF_% type:other msg:DAJCHSF_Server;devrefresh;1041656180510,true,DAJCHSF_2047DABEF936$/r$
        /// </summary>
        /// <param name="msg"></param>
        public static bool DeviceStateChange(string msg)//, string code, bool state, string success, out string relayUser
        {
            try
            {
                //string appUser = msg.Split(';')[0];
                string code   = msg.Split(';')[2];
                string device = msg.Split(';')[3];
                bool   state;
                if (code == "8135")
                {
                    state = true;
                }
                else if (code == "8145")
                {
                    state = false;
                }
                else
                {
                    return(false);//指令不对返回失败
                }

                using (HsfDBContext hsfDBContext = new HsfDBContext())
                {
                    var deviceEntity = hsfDBContext.host_device.Where(t => t.deviceid == device && t.deletemark == 0).FirstOrDefault();//注意device的唯一性
                    if (deviceEntity != null)
                    {
                        string cachekey = deviceEntity.cachekey;//缓存处理--

                        Zigbee1002 zigbee1002 = new Zigbee1002()
                        {
                            code    = 1002,
                            id      = deviceEntity.devmac,//010000124b0014c6aaee
                            ep      = Convert.ToInt32(deviceEntity.devport),
                            serial  = 1,
                            control = new Control {
                                on = state
                            },
                            result = 0,
                            zigbee = deviceEntity.devchannel                           //00ff2c2c2c6a6f005979
                        };
                        YunZigClient.SendMsg(JsonConvert.SerializeObject(zigbee1002)); //发送
                        if (StateResult(cachekey, state))
                        {
                            //返回广播消息,直接开始广播
                            //user:hiddenpath_% type:other msg:hiddenpath_Server;devrefresh;924150429051,false,hiddenpath_ASDFDSSE123$/r$
                            //relayUser = appUser.Split('_')[0] + "_%";
                            //relayUser = appUser;
                            //return $"{appUser};{code};{device};Zip;{success}$/r$";//ok//closeok@808 181248576
                            //return $"{relayUser};devrefresh;{device},{state},{appUser}$/r$";//后面的发给前面的,与请求的对调一下
                            return(true);
                        }
                        else
                        {
                            log.Debug($"设备状态改变超时失败! cachekey:{cachekey}!");
                            //relayUser = appUser;
                            //return $"{appUser};{code};{device};Zip;H4sIAAAAAAAEAEstKsovAgBxvN1dBQAAAA==$/r$";//error
                            return(false);
                        }
                    }
                    else
                    {
                        //relayUser = appUser;
                        return(false);//error
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }
        }