Guest post by Ian Skerrett, Eclipse Foundation
In the previous article, Three Software Stacks Required to Implement IoT , we introduce the 3 software stacks that are required for any IoT solution: 1) Constrained Devices, 2) IoT Gateways and Smart Devices, and 3) IoT Cloud Platforms. In part 2 of this series, we discuss how open source software communities and in particular the Eclipse IoT open source community is becoming a key provider of the building blocks required to implement each of the three software stacks. Similar to how the LAMP (Linux/Apache HTTP Server/MySQL/PHP) stack has dominated the web infrastructures, it is believed a similar open source stack will dominate IoT deployments.
The Importance of open stacks for IoT
The separation of concerns brought by separating any IoT architecture into three stacks is a great step forward for building scalable and maintainable solutions. What’s more, building a software stack on top of open technologies helps achieve the following:
- Open standards ensure interoperability – The use of proprietary communication protocols create silos of IoT networks which cannot easily exchange information. Building IoT stacks on top of open standards (radio protocols, messaging protocols, etc.) helps with the overall interoperability in IoT.
- Software reuse reduces TCO – The total cost of ownership is an important consideration for any IoT solution provider. Open source technology is often being made available as building blocks that one can re-use across several solutions. An IoT solution based on open source software may for example leverage the same protocol implementations in the devices and in the gateways.
- No vendor lock-in – Building a solution on top of proprietary technologies and software exposes to the risk of having a third-party vendor change its roadmap, or stopping the support of its solution. An IoT stack based on open source technology enables solution providers to adapt the software to their needs if a feature is missing, without having to ask or wait for the feature to be implemented by a given vendor.
- Open stacks attract developers – Open source communities are vibrant ecosystems of companies and individuals who innovate and collaborate. A company using open source software will typically find it easier to attract or find developers who have the required skills to work with the stack.
- Reduce risk and time to market - Users of open source technology benefit from reusing technology that has been used and test by others, which reduce the overall development time and ensure a smoother transition from prototype to pilot to production.
Open Source Technology for IoT
The open source community has become an active producer of technology for IoT solutions. Like the LAMP stack for websites, there are a set of open source projects that can be used as the building blocks for an IoT solution architecture.
The Eclipse IoT community is very active in providing the technology that can be used in each stack of an IoT solution. Eclipse IoT has 26 different open source projects that address different features of the IoT stacks. In addition to the Eclipse IoT projects, there are other open source projects that are also relevant to an IoT stack. The next few pages provide a brief summary of how Eclipse IoT as well as other open source projects can be used to implement IoT stacks.
Open Source Stack for Constrained Devices
Eclipse IoT provides a set of libraries that can be deployed on a constrained embedded device to provide a complete IoT development stack.
- IoT Operating Systems – RIOT, FreeRTOS, Zephyr, Apache Mynewt.
- Hardware Abstraction – Eclipse Edjeprovides an high-level Java API for accessing hardware features provided by microcontrollers (e.g GPIO, ADC, MEMS, etc.). It can directly connect to native libraries, drivers and board support packages provided by silicon vendors.
- Device Management – Eclipse Wakaama provides a C implementation of the OMA LWM2M standard.
- Communication – Open source projects like Eclipse Paho or Eclipse Wakaamaprovide implementation of IoT communication protocols such as, respectively, MQTT or LWM2M. Eclipse Paho has a C implementation of MQTT that is less than 2,000 LOC.
Open Source Stack for Gateways: Connected and Smart Things
Within the Eclipse IoT community there are a variety of projects that work to provide the capabilities that an IoT gateway requires.
Eclipse Kura provides a general purpose middleware and application container for IoT gateway services. An IoT gateway stack based on Eclipse Kura would include the following:
- Operating system – Linux (Ubuntu/Ubuntu Core, Yocto-based linux distribution), Windows.
- Application container or runtime environment – Eclipse Equinox or Eclipse Concierge (OSGi Runtime).
- Connectivity support for devices – Eclipse Kura includes APIs to interface with the gateway I/Os (e.g. Serial, RS-485, BLE, GPIO, etc.) and support for many field protocols that can be used to connect to devices, e.g MODBUS, CAN bus, etc.
- Networking support – Eclipse Kura provides advanced networking and routing capabilities over a wide-range of interfaces (cellular, Wi-Fi, Ethernet, etc.).
- Data management & Messaging – Eclipse Kura implements a native MQTT-based messaging solution, that allows application running on the gateway to transparently communicate with a Cloud Platform, without having to deal with the availability of the network interfaces, or how to represent IoT data. Support for additional messaging protocols is available through the built-in Apache Camel message routing engine.
- Remote management – Eclipse Kura provides a remote management solution based on the MQTT protocol, that allows to monitor the overall health of an IoT Gateway, in addition to control (install, update, modify settings) the software it’s running.
Eclipse SmartHome provides an IoT gateway platform that is specifically focused on the home automation domain. An Eclipse SmartHome stack would including the following:
- Operating system – Linux (Ubuntu/Ubuntu Core, Yocto-based linux distribution), Windows or macOS.
- Application container or runtime environment – Eclipse Equinox or Eclipse Concierge (OSGi Runtimes).
- Communication and Connectivity – Eclipse SmartHome brings support for many off-the-shelf home automation devices such as Belkin WeMo, LIFX, Philips Hue, Sonos, etc. Eclipse SmartHome focuses on enabling home automation solutions to communicate within an “Intranet of Things”; therefore offline capabilities are a paramount design goal.
- Data management & Messaging – Eclipse SmartHome has an internal event bus, which can be exposed to external systems through e.g. SSE or MQTT. It furthermore provides mechanisms for persisting values in databases and for running local business logic through a rule engine.
- Remote management – Eclipse SmartHome supports device onboarding and configuration through its APIs. It furthermore provides an infrastructure to perform firmware update of connected devices.
Eclipse 4DIACprovides an industrial-grade open source infrastructure for distributed industrial process measurement and control systems based on the IEC 61499 standard. 4DIAC is ideally suited for Industrie 4.0 and Industrial IoT applications in a manufacturing setting. The IEC 61499 standard defines a domain specific modeling language for developing distributed industrial control solutions by providing a vendor independent format and for simplifying support for controller to controller communication.
Open Source Stack for IoT Cloud Platforms
The Eclipse IoT Community has a number of projects that are focused on providing the functionality required for IoT cloud platforms.
Eclipse Kapua is a modular platform providing the services required to manage IoT gateways and smart edge devices. Kapua provides a core integration framework and an initial set of core IoT services including a device registry, device management services, messaging services, data management, and application enablement.
The goal of Eclipse Kapua is to create a growing ecosystem of micro services through the extensions provided by other Eclipse IoT projects and organizations.
Eclipse OM2M is an IoT Platform specific for the telecommunication industry, based on the oneM2M specification. It provides a horizontal Common Service Entity (CSE) that can be deployed in an M2M server, a gateway, or a device. Each CSE provides Application Enablement, Security, Triggering, Notification, Persistency, Device Interworking, Device Management.
The Eclipse IoT community also has a number of standalone projects that provide functionality to address key features required for an IoT cloud platform. These projects can be used independently of Eclipse Kapua and over time some may be integrated into Kapua.
Connectivity and Protocol Support
- Eclipse Hono provides a uniform API for interacting with devices using arbitrary protocols, as well as an extensible framework to add other protocols.
- Eclipse Mosquitto provides an implementation of an MQTT broker.
Device Management and Device Registry
- Eclipse Leshan provides an implementation of the OMA LWM2M device management protocol.
- Eclipse hawkBitprovides the management tools to roll out software updates to devices and gateways.
Event management and application enablement
- Eclipse Hono helps to expose consistent APIs for consuming telemetry data or sending commands to devices, so as to rationalize IoT application development.
Analytics and Visualization – Outside of the Eclipse IoT community there are many open source options for data analytics and visualization, including Apache Hadoop, Apache Spark, and Apache Storm. Within the Eclipse community, Eclipse BIRT provides support for dashboards and reporting of data stored in a variety of data repositories.
Open Source for Cross-Stack Functionality
- Eclipse tinydtls provides an implementation of the DTLS security protocol providing transport layer security between the device and server.
- Eclipse ACS provides an access control service that allows each stack in an IoT solution to protect their resources using a RESTful interface.
- Eclipse Unide is a protocol for Production Performance Management (PPM) in the manufacturing industry. It establishes an ontology for sharing machine performance information.
- Eclipse Whiskers implements the OGC SensorThings API that provides a standard way to share location based information for devices.
Development Tools and SDKs
- Eclipse Vorto provides a set of tools and repository for creating device information models.
- Eclipse JDT and CDT allow for integrated development of IoT solutions. For example, Eclipse Kura applications can be tested and debugged from within the Eclipse Java IDE (JDT).
- Eclipse Che provides a browser-based IDE that can be used for building IoT solutions.
An IoT Solution requires substantial amount of technology in the form of software, hardware, and networking. In this series of articles we have defined the software requirements across three different stacks and the open source software that can be used to build the stacks
The last twenty years have proven that open source software and open source communities are key providers of technology for the software industry. The Internet of Things is following a similar trend, and it is expected that more and more IoT solutions will be built on open source software.
For the past five years, the Eclipse IoT community has been very active in building a portfolio of open source projects that companies and individuals use today to build their IoT solutions. If you are interested in participating, please join us and visit https://iot.eclipse.org.