/// <summary>
        /// Sets the specified argument.
        /// </summary>
        /// <param name="argument">The argument.</param>
        /// <param name="elementId">The element identifier.</param>
        /// <param name="value">The optional value.</param>
        /// <returns></returns>
        public JObject Set(SetArgument argument, int elementId, string value = null)
        {
            var argumentValue = argument.GetEnumMemberValue();

            this.CheckDeviceIdRange(elementId, argumentValue);
            if (string.IsNullOrEmpty(value))
            {
                return(this.DoRequest($"Set{argumentValue}={this.FormatDeviceId(elementId, argumentValue)}"));
            }
            else
            {
                return(this.DoRequest($"Set{argumentValue}{this.FormatDeviceId(elementId, argumentValue)}={value}"));
            }
        }
        /// <summary>
        /// Toggles the specified argument.
        /// </summary>
        /// <param name="argument">The argument.</param>
        /// <param name="elementId">The element identifier.</param>
        /// <returns></returns>
        /// <exception cref="System.ArgumentOutOfRangeException">argument - Unsupported argument for this action</exception>
        public JObject Toggle(SetArgument argument, int elementId)
        {
            switch (argument)
            {
            case SetArgument.Output:
            case SetArgument.VirtualInput:
            case SetArgument.VirtualOutput:
            case SetArgument.EnOcean:
                var argumentValue = argument.GetEnumMemberValue();
                this.CheckDeviceIdRange(elementId, argumentValue);
                return(this.DoRequest($"Toggle{argumentValue}={this.FormatDeviceId(elementId, argumentValue)}"));

            default:
                throw new ArgumentOutOfRangeException(nameof(argument), "Unsupported argument for this action");
            }
        }