## 1 Introduction  
The Internet of Things (IoT) paradigm is quickly maturing to a state were the technology is being adopted in industry for a wide range of applications including medical [1], precision agriculture [2] and Building Energy Management System (BEMS) [3]. An IoT solution allows for quick and increasingly cost effective deployment of sensors to gather data and perform actions within a controlled environment. An underlying wireless communications network facilitates the collection of data and delivery of commands to the necessary locations. This network is responsible for delivering reliable, efficient and timely communications within an inherently dynamic environment. Difficult communication conditions, often experienced in IoT networks, can lead to a trade off between delivering these requirements in the network. Not only does each new application demand a different type of trade off between requirements, but each different environment will also effect how a network can deliver the requirements. Obtaining the required response from the network for each application is essential to the adoption of IoT technologies and is regarded as one of the main challenges facing IoT networks [4]. This challenge is currently being addressed with many new communications solutionsentering the IoT landscape. This, however, introduces a wide variety of different communications solutions many of which have been tested and evaluated under disparate environmental conditions. This presents two further issues for industry application development:  
* Application developers will not have the network experience or expertise to choose the best solution for the given application or environment leading to reduced performance. * It is difficult to directly compare solutions. Each prospective solution, therefore, must be tested within the specific deployment environment to ensure the best solution. This incurs additional time and cost per deployment. This article presents a framework which can be used to address these issues presented for industry application development. The framework constitutes a testing procedure and system to autonomously choose a communications solution for a network. This creates a layer of abstraction on top of the network layer for the application developer. The application developer must only define the preferred requirements set for the application leaving the system to evaluate and choose the most appropriate solution for the deployment. The framework uses a modular design consisting of four main tenets:  
* **Maintaining a solution repository:** Collate a set of data from a wide range of communications solutions each evaluated under the same conditions and criteria. This provides a consistent set of data to compare each solution. * **Solution modelling:** Model the response of each of the communications solutions under the changing conditions for the purpose of prediction. The model can be used by the system to easily predict how a solution will perform in a given set of conditions and compare with competing solutions. * **Analysing deployment:** As a prediction model is in place, only the environmental conditions of the deployment need be collected. The system can use simple and minimally invasive means to collect the current environmental conditions. * **Solution selection and deployment:** Based on the current conditions, choose and deploy the most appropriate solution given the competition in predicted performance. The implemented system is dependent on the ability of the chosen environmental variables to characterise the response effectively and the suitability of the modelling technique to model that response. While the main purpose of the article is to present the framework as a whole, the framework is demonstrated using a defined set of evaluation metrics, network condition variables used to characterise the response in the network and modelling tools used in prediction modelling.