/// <summary>
        /// Sends a ir command.
        /// </summary>
        /// <returns>Send ir command task.</returns>
        /// <param name="state">State ir to send.</param>
        public async Task SendIRCommandStateAsync(IRCommandState state)
        {
            var msg = new JsonBaseMessage {
                msgid = next_msg_id, request = "SendKey", @params = new { button_id = $"{state.cmd}", device_id = state.stump_device }
            };

            await _transport.SendAsync(msg);
        }
        /// <summary>
        /// get a ir commands
        /// </summary>
        /// <returns>Array of ir commands can be issued task.</returns>
        public async Task <IEnumerable <IRDevice> > GetIRCommandsAsync()
        {
            var message = new JsonBaseMessage {
                msgid = next_msg_id, request = "GetConfiguration"
            };

            var receive_task = MessageExtensions.WaitForMessageAsync <JsonBaseMessage, JsonBaseMessage>(
                _transport,
                TimeSpan.FromSeconds(10),
                () => _transport.SendAsync(message),
                (to_filter) => to_filter.msgid == message.msgid
                );

            var res = await receive_task;

            if (res.@params is JArray ja)
            {
                return(ja.ToObject <IRDevice[]>());
            }
            return(null);
        }