示例#1
0
        /// <summary>
        /// 发送自定义数据到门口机
        /// 并等待设备的回执
        /// </summary>
        /// <param name="num">设备机身号</param>
        /// <param name="data">数据内容</param>
        /// <exception cref="TimeoutException"></exception>
        /// <returns></returns>
        public static async Task <Message> EM_CustomDataSendAsync(string num, TimeoutDataSetting data)
        {
            var api    = Api.EM_CustomData_Send;
            var device = new Device(num);

            return(await EmqttdClient.SendAsync(device.SubDevice, api, data));
        }
示例#2
0
        /// <summary>
        /// 发送自定义数据到客户端
        /// 并等待设备的回执
        /// </summary>
        /// <param name="id">客户端id</param>
        /// <param name="data">数据内容</param>
        /// <exception cref="TimeoutException"></exception>
        /// <returns></returns>
        public static async Task <Message> Push_CustomDataSendAsync(string id, TimeoutDataSetting data)
        {
            var api    = Api.Push_CustomData_Send;
            var client = new PushClient(id);

            return(await EmqttdClient.SendAsync(client.SubPushClient, api, data));
        }
示例#3
0
 /// <summary>
 /// 要求上传日志指令
 /// </summary>
 /// <param name="num">设备机身号</param>
 /// <param name="data">控制内容</param>
 /// <returns></returns>
 public static async Task Sys_UploadLogAsync(string num, UploadLogSetting data)
 {
     var api     = Api.Sys_UploadLog;
     var device  = new Device(num);
     var timeout = TimeoutRequest.Default;
     await EmqttdClient.PostAsync(device.SubDevice, api, data);
 }
示例#4
0
        /// <summary>
        /// 设置智能门锁 - 获取临时密码列表
        /// </summary>
        /// <param name="num">中控机机身号</param>
        /// <param name="data">CMCtrlRequest 实体</param>
        /// <exception cref="TimeoutException"></exception>
        /// <returns></returns>
        public static async Task <Message <CMTempPassWordBody[]> > CM_GetTempPassWordListAsync(string num, CMCtrlRequest data)
        {
            var api     = Api.CM_GetTempPassWordList;
            var device  = new Device(num);
            var message = await EmqttdClient.SendAsync(device.SubDevice, api, data);

            return(message.Cast <CMTempPassWordBody[]>());
        }
示例#5
0
        ///// <summary>
        ///// 智能空调控制
        ///// </summary>
        ///// <param name="num">中控机机身号</param>
        ///// <param name="data">CMAirBody 空调控制实体</param>
        ///// <exception cref="TimeoutException"></exception>
        ///// <returns></returns>
        //public static async Task<Message<bool>> CM_SetAirAsync(string num, CMAirSetting data)
        //{
        //    var api = Api.CM_SetAir;
        //    var device = new Device(num);
        //    var message = await EmqttdClient.SendAsync(device.SubDevice, api, data);
        //    return message.Cast<bool>();
        //}

        /// <summary>
        /// 恒亦明LED控制器
        /// </summary>
        /// <param name="num">中控机机身号</param>
        /// <param name="data">CMLedBody 控制实体</param>
        /// <exception cref="TimeoutException"></exception>
        /// <returns></returns>
        public static async Task <Message <bool> > CM_SetLedAsync(string num, CMLedSetting data)
        {
            var api     = Api.CM_SetLed;
            var device  = new Device(num);
            var message = await EmqttdClient.SendAsync(device.SubDevice, api, data);

            return(message.Cast <bool>());
        }
示例#6
0
        /// <summary>
        /// 设备系统控制
        /// </summary>
        /// <param name="num">设备机身号</param>
        /// <param name="data">控制内容</param>
        /// <exception cref="TimeoutException"></exception>
        /// <returns></returns>
        public static async Task <Message <bool> > Sys_ControlAsync(string num, SysCtrlSetting data)
        {
            var api     = Api.Sys_Control;
            var device  = new Device(num);
            var message = await EmqttdClient.SendAsync(device.SubDevice, api, data);

            return(message.Cast <bool>());
        }
示例#7
0
        /// <summary>
        /// 设置智能门锁
        /// </summary>
        /// <param name="num">中控机机身号</param>
        /// <param name="data">请求数据</param>
        /// <exception cref="TimeoutException"></exception>
        /// <returns></returns>
        public static async Task <Message <bool> > CM_SmartLockOpenAsync(string num, CMCtrlRequest data)
        {
            var api     = Api.CM_SmartLockOpen;
            var device  = new Device(num);
            var message = await EmqttdClient.SendAsync(device.SubDevice, api, data);

            return(message.Cast <bool>());
        }
示例#8
0
        /// <summary>
        /// 门口机开锁
        /// </summary>
        /// <param name="num">门口机机身号</param>
        /// <param name="data">数据</param>
        /// <exception cref="TimeoutException"></exception>
        /// <returns></returns>
        public static async Task <Message <bool> > EM_UnlockAsync(string num, TimeoutDataSetting data)
        {
            var api    = Api.EM_Unlock;
            var device = new Device(num);

            var message = await EmqttdClient.SendAsync(device.SubDevice, api, data);

            return(message.Cast <bool>());
        }
示例#9
0
        /// <summary>
        /// 红外电视按键学习
        /// </summary>
        /// <param name="num">中控机机身号</param>
        /// <param name="data">电视控制数据实体</param>
        /// <exception cref="TimeoutException"></exception>
        /// <returns></returns>
        public static async Task <Message <bool> > CM_LearnInfTvKeyAsync(string num, CMInfTvKeyCtrl data)
        {
            var api    = Api.CM_LearnInfTvKey;
            var device = new Device(num);

            var message = await EmqttdClient.SendAsync(device.SubDevice, api, data);

            return(message.Cast <bool>());
        }
示例#10
0
        /// <summary>
        /// 获取红外电视按键学习状态
        /// </summary>
        /// <param name="num">中控机机身号</param>
        /// <param name="data">电视控制数据实体</param>
        /// <exception cref="TimeoutException"></exception>
        /// <returns></returns>
        public static async Task <Message <CMInfTvKeyState[]> > CM_GetInfTvKeysAsync(string num, CMCtrlRequest data)
        {
            var api    = Api.CM_GetInfTvKeys;
            var device = new Device(num);

            var message = await EmqttdClient.SendAsync(device.SubDevice, api, data);

            return(message.Cast <CMInfTvKeyState[]>());
        }
示例#11
0
        /// <summary>
        /// 获取中控机的设备列表
        /// </summary>
        /// <param name="num">中控机机身号</param>
        /// <exception cref="TimeoutException"></exception>
        /// <returns></returns>
        public static async Task <Message <CMDeivceData> > CM_GetDeviceListAsync(string num)
        {
            var api    = Api.CM_GetDeviceList;
            var data   = TimeoutRequest.Default;
            var device = new Device(num);

            var message = await EmqttdClient.SendAsync(device.SubDevice, api, data);

            return(message.Cast <CMDeivceData>());
        }
示例#12
0
        /// <summary>
        /// 测试数据
        /// </summary>
        /// <param name="num">设备机身号</param>
        /// <param name="data">数据</pm>
        /// <exception cref="TimeoutException"></exception>
        /// <returns></returns>
        public static async Task <Message <string> > Sys_TestDataAsync(string num, string data)
        {
            var api    = Api.Sys_TestData;
            var device = new Device(num);
            var body   = new TimeoutDataSetting {
                Timeout = 5, Data = data
            };
            var message = await EmqttdClient.SendAsync(device.SubDevice, api, body);

            return(message.Cast <string>());
        }
示例#13
0
        /// <summary>
        /// 发送消息到远程端并等待返回
        /// </summary>
        /// <param name="topic">主题</param>
        /// <param name="api">api</param>
        /// <param name="body">内容</param>
        /// <exception cref="TimeoutException"></exception>
        /// <returns></returns>
        public static async Task <Message> SendAsync(SingleTopic topic, Api api, ITimeoutRequest body)
        {
            var message    = EmqttdClient.GenerateMessage(api, body, Mode.Send);
            var key        = message.GetUniqueKey(topic.UniqueId);
            var timeout    = TimeSpan.FromSeconds(body.Timeout);
            var taskSetter = taskTable.Create <Message>(key, timeout);

            await EmqttdClient.PublishAsync(topic, message);

            return(await taskSetter.GetTask());
        }
示例#14
0
        /// <summary>
        /// 初始化mqtt客户端
        /// </summary>
        /// <returns></returns>
        private async static Task InitMqttClientAsync()
        {
            using (await asyncRoot.LockAsync())
            {
                if (_mqttClientInstance != null)
                {
                    return;
                }

                var userName = EmqttdClient.GetSubAccout();
                var password = config.Subscribe.Password;

                await MqttAcl.AuthAclAsync(userName, password);

                await MqttAcl.AuthAclAsync(config.Publish.Account, config.Publish.Password);

                _mqttClientInstance = new MqttClient(config.Subscribe.Address, userName);
                _mqttClientInstance.OnMessageArrived += EmqttdClient.OnMqttClientReturn;
                _mqttClientInstance.OnConnectionLost += mqttClient_OnConnectionLost;
                var option = new ConnectOption
                {
                    Username = userName,
                    Password = password,
                };

                try
                {
                    Logger.Info("IIS_MQTT", "Connect " + option.ToDebugString());
                    await _mqttClientInstance.ConnectAsync(option);

                    Logger.Info("IIS_MQTT", "Connect OK ...");
                    await _mqttClientInstance.SubscribeAsync(mqTopic, MqttQoS.ExactlyOnce);
                }
                catch (Exception ex)
                {
                    Logger.Error("IIS_MQTT", ex.ToString());
                    Logger.Exception(ex);
                    throw ex;
                }
            }
        }
示例#15
0
 /// <summary>
 /// 投递消息到远程端
 /// </summary>
 /// <param name="topic">主题</param>
 /// <param name="api">api</param>
 /// <param name="body">内容</param>
 /// <returns></returns>
 public static async Task PostAsync(Topic topic, Api api, object body)
 {
     var message = EmqttdClient.GenerateMessage(api, body, Mode.Post);
     await EmqttdClient.PublishAsync(topic, message);
 }
示例#16
0
 /// <summary>
 /// 回复消息到远程端
 /// </summary>
 /// <param name="topic">主题</param>
 /// <param name="api">api</param>
 /// <param name="body">内容</param>
 /// <returns></returns>
 public static async Task ReturnAsync(SingleTopic topic, Api api, object body)
 {
     var message = GenerateMessage(api, body, Mode.Return);
     await EmqttdClient.PublishAsync(topic, message);
 }
示例#17
0
 /// <summary>
 /// 投递自定义数据到客户端
 /// 不等待设备的回执
 /// </summary>
 /// <param name="id">客户端id</param>
 /// <param name="data">数据内容</param>
 /// <returns></returns>
 public static async Task Push_CustomDataPostAsync(string id, string data)
 {
     var api    = Api.Push_CustomData_Post;
     var client = new PushClient(id);
     await EmqttdClient.PostAsync(client.SubPushClient, api, data);
 }
示例#18
0
 /// <summary>
 /// 投递自定义数据到门口机
 /// 不等待设备的回执
 /// </summary>
 /// <param name="num">设备机身号</param>
 /// <param name="data">数据内容</param>
 /// <returns></returns>
 public static async Task EM_CustomDataPostAsync(string num, string data)
 {
     var api    = Api.EM_CustomData_Post;
     var device = new Device(num);
     await EmqttdClient.PostAsync(device.SubDevice, api, data);
 }