Of course this time it will be all different, so, let’s talk about the “new” Internet of Things. As embedded hardware gets ever more powerful, and at the same time affordable, a lot of devices come with Ethernet or Wi-Fi interfaces, as well as powerful application processors. Microcontrollers containing Ethernet hardware can be purchased for a few dollars, and even more powerful SoCs capable of running Embedded Linux can be purchased for under 10 dollars a piece, given proper volume. This enables all kinds of previously “offline” devices to connect to the internet. Devices like TVs, heating control systems, smart home and building automation devices, whiteware, control systems for photovoltaic and solarthermal plants, industrial equipment and automation systems, office equipment, and even cars become members of the internet.
But internet-capable embedded devices are only one part of the story. Equally important is affordable computing power, typically provided by cloud services like Amazon or Rackspace, that will run the backend and web applications that help us make sense of all the data produced by myriads of internet-connected devices and their sensors. And finally there are mobile internet devices — smart phones and tablets, that will connect us to the internet of things, from almost anywhere.
Making the Internet of Things work requires millions of lines of code of software, all the way from operating systems and network protocol stacks, middleware and application frameworks, up to powerful server applications and easy-to-use mobile apps.
So how do the C++ libraries and tools from Applied Informatics fit into this picture? Surprisingly well, it turns out. Starting from the free, open source POCO C++ Libraries, which provide the basic building blocks for almost any kind of C++ application running on devices, desktops or servers. From basic features like filesystem access, multithreading, XML processing, logging, SQL database access (including SQLite), up to various internet protocols (HTTP, FTP, SMTP, POP3), including a powerful web server framework that makes integrating a web server into a device quite easy.
A huge advantage is the comprehensive platform support of the Applied Informatics C++ frameworks. From desktop and server platforms (Windows, Linux, OS X, as well as various other Unix platforms) to embedded platforms (Embedded Linux, Windows Embedded CE, QNX, VxWorks) to mobile platforms (iOS, Android, Blackberry 10), all can be targetted with a common code base.
Built on top of the POCO C++ Libraries, Applied Informatics provides higher-level commercial frameworks. The Open Service Platform provides a powerful component architecture and “embedded application server” that makes it easy to build modular, dynamically extensible applications for embedded devices and servers. Applications built with OSP are based on a “plug-in” architecture that makes it possible to extend an application dynamically at runtime, without the need to restart the application. Parts of an application can even be upgraded dynamically. This provides two important features for smart devices. First, it’s possible to easily build different variants of the device software for a range of similar devices, or to cover specific customer requirements. Second, it’s very easy to upgrade or extend the device software even if the devices are already in the field, without the need for a complete firmware update.
Remoting is a distributed objects and web services framework for C++. With Remoting, building distributed applications, implementing high-level object-based inter-process communication (IPC)/remote method invocation (RMI) or web services based on the Simple Object Access Protocol (SOAP) and the Web Service Definition Language (WSDL) becomes a breeze. There are two main uses of Remoting in a smart device. The first is to provide a powerful inter-process communication mechanism, which allows splitting the device software into separate processes, which helps to make the software more robust. For instance, the backend logic and, the user interface and the web interface can be split into separate processes, which talk to each other using Remoting as IPC mechanism. Second, Remoting can be used to either implement SOAP web services directly in the device, or to allow the device to access external web services.
And finally, my-devices.net neatly solves the problem of how to make smart devices located behind a NAT router or firewall accessible from the internet in a controlled, safe and secure way. This makes it possible for enterprise applications or mobile apps to directly connect to a device in the field.
Using the comprehensive frameworks provided by Applied Informatics in a software project has many advantages, such as:
- A well integrated, consistent code base, as well as consistent programming interfaces minimize the learning effort for developers.
- Code duplication is avoided, e.g., there is a single XML parser and a single web server implementation that can be used for the web user interface, UPnP services, as well as SOAP or REST web services provided by the device. In addition to making software maintenance easier, this also helps save precious RAM and flash memory due to a smaller code size.
- The frameworks are fully cross-platform, making it easy to re-use the code base on different platforms (e.g., the embedded Linux device, as well as for iOS, Android or Windows applications).
- The overall development effort and risk is greatly reduced, as a lot of functionality is already provided by a well-maintained, widely tested and proven codebase.
- There is no software integration overhead required for making software components from different vendors play nicely together.
- For full-blown, no-compromise C++ frameworks, the resource usage is pretty modest. Linux-based devices using the UPnP or Remoting framework can be built with a minimum of 8 MB RAM and 4 MB flash memory. OSP-based applications require a minimum of 16 MB RAM and flash memory.