A simple way to look at Eclipse IoT
Eclipse IoT is a collection of open source projects for the development of Internet of Things solutions. It is one of the most active working groups in the Eclipse Foundation, currently featuring 25 projects. Here we present a brief overview of some popular offerings.
If you’re new to Java and not a member of the Church of Emacs, then there’s a chance that Eclipse is synonymous to your integrated development environment (IDE). Even long-time users are often not aware of the vast software ecosystem that flourishes under the flag of the Eclipse Foundation. Over the past almost fifteen years, the Eclipse project has been restructured into a foundation that works language-agnostic on a wide range of software projects across many verticals; very much like Apache used to be a web server and now is a software foundation that has a much wider product range.
The Internet-of-Things (IoT), in case you’ve had your Internet access blocked for the past five years or been hiding under a rock, is the now ubiquitous fancy term for machine-to-machine communication (M2M), and technologies and concepts emerging from it. Under the organizational lead of Ian Skerrett and Benjamin Cabé from the Eclipse Foundation, one of the seven working groups around particular verticals is Eclipse IoT. It is an umbrella project, which coordinates the efforts of developers that are primarily based at a dozen companies with an interested in IoT or M2M. Amongst those are major players such as IBM, Bosch and Siemens, but also smaller companies that work in particular corners of the IoT, like dc-square and the integration platform openHAB.
The architecture of IoT solutions can be confusing at the best of times, and gaining an overview of when and where particular Eclipse IoT projects fit into that stack can be a daunting task. While it’s possible to find all necessary information in a table on the Eclipse website, especially those new to IoT can easily get lost between protocol acronyms such as CoAP and MQTT, and cryptic project names. (I’m looking at you, Wakaama and Leshan…) One can think about the various Eclipse IoT projects in terms of ecosystems, standards and components.
On the ecosystem level, Eclipse IoT acts as integrator for projects that are required to build complete end-to-end solutions, starting from embedded code on microcontrollers to message brokers on gateways to backend software. Especially industry users often appreciate package solutions that don’t require an elaborate mix-and-match of components. The 4diac project, for example, provides software implementations for the IEC 61499 standard for industrial control systems. This includes the runtime environment, an IDE as well as pre-defined function blocks that can be used in end user applications.
A set of conceptually related tools around embedded IoT is Vorto, EDJE, hawkBit and Concierge. The Vorto GUI allows one to provide language-independent descriptions of devices, which via the Vorto code generators can be conveniently translated into objects/classes in any programming language for which such generator exists. (A lay description how that works is featured in this recent blog post about Vorto). On a very abstract level, a programmer could refer to “the radio” and “send x bytes” in their code, an interface presented by the EDJE hardware abstraction layer that takes care of the technical differences between various devices. Once developed, one can deploy the new code via hawkBIT to a large number of devices at once. As such, hawkBIT may remind some of resin.io, a “send a Docker container to all your embedded devices” service I wrote about earlier. On the device itself then, the Concierge system is a small footprint OSGi-compliant Java core that would run that code.
On the component level, Eclipse Kura deserves a very honourable mention in the very long list of projects that can simply be deployed in one own’s IoT solutions. Kura is an easy-to-use gateway system that acts between sensor devices and a backend. Traditionally used for demonstrations on a Raspberry Pi, Kura and Pi now almost always go together. Somewhat more complex and usually a foundation for home automation products such as openHAB, Eclipse SmartHome is being widely used by hobbyists and professionals alike because it offers bindings for commonly used hardware.
While it is always possible to drill into the actual code of all Eclipse projects (open source, sic!), both on the ecosystem and the component level one doesn’t necessarily have to engage with the nitty-gritty of the underlying code. However, as Eclipse IoT also embraces important standards, their libraries for M2M/IoT device communication via MQTT, CoAP or ETSI M2M are extremely powerful.
On the example of MQTT one can see the power of these open source solutions. Originally termed ‘MQ Telemetry Transport’, this common publish-subscribe IoT protocol is used to send information from devices to gateways to servers. A message is divided into a topic (like the subject of an email) and a payload (its body). MQTT sits on top of TCP/IP. While the Mosquitto broker (another Eclipse ‘component’) can simply be installed on most Unix systems and takes care of all of the message handling, the programmer only needs to memorize a few lines of syntax of e.g. the Paho library to connect to the broker or react to particular MQTT topics via callback functions.
A minimalistic response on the basis of the Paho Python example is shown here:
import paho.mqtt.client as mqtt # The callback for when the client receives a CONNACK. def on_connect(client, userdata, rc): print("Connected with result code "+str(rc)) client.subscribe("$TEMPERATURE/#") # subscribing to all topics startings with "TEMPERATURE" # The callback for when a PUBLISH message is received. def on_message(client, userdata, msg): print(msg.topic+" "+str(msg.payload)) # MAIN client = mqtt.Client() client.on_connect = on_connect client.on_message = on_message client.connect("iot.eclipse.org", 1883, 60) client.loop_forever()
At this stage Eclipse IoT still misses a project dedicated to visualization and analysis of IoT data. However, Eclipse has recently embraced the Open Analytics project and cross-fertilization to and from Eclipse IoT is hopefully just a question of time.
The figures in this article are all available on SlideShare.