ELIoT – Emulating IoT devices
Emulated IoT Platform (ELIoT) is a new open source IoT testbed that can emulate thousands of IoT devices using well-known standards and libraries. It saves time and money compared with deploying a testbed of thousands of IoT devices in a real environment.
If you have ever deployed a testbed of thousands of devices in a real environment just for prototyping purposes, you know it is time-consuming and expensive when compared to emulation.
Plus, over the years, if you have been working with “IoT” or “M2M”, you have almost certainly had the pleasure of working with dozens of different hardware platforms, and you know that the one constant among all of them is that they get outdated and require some maintenance.
The situation is improving, and it is getting easier and easier to build and deploy IoT devices using Jerryscript and Espruino, among other languages and tools, which has streamlined work on hardware devices. Nevertheless, those interested exclusively on the cloud side of IoT still need to deploy and maintain thousands of nodes even if it is outside of their scope of interest.
By the time you read this, another hardware platform would have appeared.
This is why we have built an Emulated IoT Platform (ELIoT) for those interested mostly in the software and server side of things and that just want to have endpoints that are addressable and can be interacted with over common application protocols.
ELIoT has its own Docker image – alias d/eliot4 – where we store device applications and the configuration files needed to run the emulated devices. You can launch any number of containers on the platform, each with its own network interface and with a simple logic that simulates that of an IoT device. We also have taken metrics from the European Telecommunications Standards Institute (ETSI) to build a set of IoT use cases referred to as public lighting scenarios.
Based on the European Telecommunications Standards Institute (ETSI) requirements, ELIoT can emulate lighting points and a control cabinet, as well as evaluate Lightweight M2M (LwM2M) functionality in accordance to the Constrained Application Protocol (CoAP) and LwM2M specifications. It is built on top of Leshan for the server side, and coap-node, which is a nodejs implementation of LwM2M for the client side.
In ELIoT we emulate CoAP, LwM2M and a generate simple device logic.
We used ELIoT to test the scalability of a LwM2M Server. In the first scalability test, we used the bridge mode as network setup and scheduled the launch of fifty weather observer devices every ten seconds (the ten seconds delay was necessary to avoid HTTP timeout errors from the Leshan Web Interface). As expected, as a result of the use of Docker in bridge mode, we could only run 1023 containers (1 server, 1022 devices).
We tried various scheduling mechanisms of launched devices per unit of time in order to overcome system load limitations. However, the main target was to increase the number of emulated devices within Docker. To overcome the network limitations, we used Docker in host-network setup and increased the amount of memory and processing power.
We got 50 virtual machines (VMs) in Azure cloud (Azure DSv2-series featuring a 1-core 2.4 GHz Intel Xeon E5-2673 v3, 3.5 GiB of memory and 7 GiB local SSD). One VM was dedicated only for the Leshan server, while others were running clients, simple presence detector devices.
With this setup, we were able to run 7123 devices in total. This was achieved by having 150 containers per VM. It took 109 seconds to register all the clients to the LwM2M Server. In terms of memory the VMs should have been able to handle around 250 containers in theory.
So basically, we launched a simple IoT testbed of seven thousand devices in about two-and-a-half minutes. This test was enough to accomplish our goal of testing scalability on the server side, although we could have continue increasing the amount of devices given more time.