/// <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)); }
/// <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)); }
/// <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); }
/// <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[]>()); }
///// <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>()); }
/// <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>()); }
/// <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>()); }
/// <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>()); }
/// <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>()); }
/// <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[]>()); }
/// <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>()); }
/// <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>()); }
/// <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()); }
/// <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; } } }
/// <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); }
/// <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); }
/// <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); }
/// <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); }