# Internet of Things Platforms for Academic Research and Development: A Critical Review
## 2 Internet of Things Platforms
### Open Source Platforms
Lelylan provides in fact a middleware between users and applications running in the cloud or on the internet and hardware platforms by providing so-called Lelylan Nodes; the current version of the platform only provides MQTT as a Node, limiting the support to devices that use this communication protocol. The core goal of Lelylan is thus to collect user/application requests sent from a Web App over HTTP and forward them to the interested hardware devices, decoupling thus applications and hardware. As such, Lelylan has no built-in data processing or visualization capabilities: it only provides a notification service to applications/users of the outcome of the actions, allowing them to collect the corresponding data for visualization or processing on external platforms. Security in Lelylan is provided by means of the People API, enabling OAuth 2.0-compliant user authorization and authentication. Lelylan can be installed using docker containers with a single script; local installation of sources requires however the separate download and build of each micro-service from the Github repository. Documentation is limited to the the Github repository documentation, since the project webpage is no longer available. The Lelylan platform, although still currently available for download, has not seen significant updates in the last few years. It can be thus assumed that it is not being developed any longer, and thus no updates will be released in the foreseeable future. As in the case of Kaa 0.X, the lack of development should be taken into account when evaluating the adoption of the platform for R and D activities. The Macchina.io EDGE platform [41] allows to develop applications for IoT devices running Linux. The platform provides access to a wide range of devices, exposing hardware-independent APIs to developers, and thus allowing to write code for multiple platforms using JavaScript and C++ languages. The Macchina.io EDGE exposes in fact sensors and actuators made available by each device through a standard web interface, that can be accessed by the application using the platform APIs. This significantly reduces the effort required to build an application for supported devices. Support for devices is provided in Macchina.io by means of the open service platform, that adopts a plugin-based approach to support a wide range of IoT sensors and actuators. The current version supports the MQTT protocol, but support for other protocols such as SOAP, CoAP and Modbus is under development. Security in Macchina.io EDGE is mostly demanded to an external component, Macchina.io REMOTE, that provides secure access to IoT devices by creating a secure tunnel. External clients will connect to Macchina.io REMOTE rather than directly to Macchina.io EDGE. This feature is, however, limited to five devices in the open source version of the platform. The platform can be installed by downloading sources and compiling them with the make tool with a single command. Following the compilation the platform can be launched as an executable, and accessed through a web interface. Documentation is available both in the Github repository and on the platform webpage. The webpage, in particular, offers a rich documentation including installation instructions and several tutorials on the use of the platform. The platform is available for free under a GPLv3 license, but paid access is also available for companies interested in releasing proprietary products based on this platform without the open source license restrictions. OpenMTC [42] is an implementation of the oneM2M standard for M2M communications [43]. The platform consists of two main components: the OpenMTC Backend, that consists of a middleware aggregator that takes care of connectivity with devices, data management and authentication/authorization aspects, and a set of OpenMTC Gateways.