How to simplify industrial machine firmware management and more

Philip Hooker
Published in
5 min readMay 10, 2023

Learn how release 0.10 of the open-source project can reduce the development time and increase the quality of your connected product software.

Software engineers continuously wrestle with competing demands when developing software for industrial machines. On one hand, there are the demands of efficiency and productivity, requiring the software to operate quickly and flawlessly in order to keep the machines running smoothly. On the other hand, there are the demands of safety and reliability, which require the software to be meticulously tested and rigorously validated to ensure that it would never put anything at risk. And now with new regional security regulations requiring a product’s software to remain compliant to reduce the risk of cyber-attacks and other security threats, they are walking an even finer tightrope between success and failure.

Connecting your industrial product to a backend system solves some of these problems, but previously these software engineers had to either build the connectivity and device management modules themselves or relinquish their flexibility and lock themselves to a single cloud or hardware provider. Recently a third way has become more prominent. Open-source software can provide the core proven building blocks, reducing software development time, improving performance and increasing productivity. However, until now there hasn’t been a project focused on delivering the common secure connectivity and robust device management capabilities required for all industrial products.

Hardware agnostic, cloud agnostic, language agnostic is the first open-source, cloud-agnostic IoT framework designed for resource constrained edge devices. The project provides modular components that can be easily deployed on a wide range of industrial PLCs, protocol gateways, and devices using Linux-based operating systems. Essentially delivering the client-side connectivity and device management capability necessary for edge computing in industrial environments.

To ensure operational reliability, the base code for is written in Rust that provides memory safety, high performance, and concurrency support, but works with edge apps written in any language through its Mosquitto MQTT bridge. It natively supports certificate management and can easily be configured for any new IoT platform through the configuration of the data mapper, with mappings for Azure IoT, AWS IoT and Cumulocity IoT available in the base build.

More proven features to speed your development

The recent 0.10 release of introduces a range of features and updates including: firmware management of child devices, service monitoring, remote access, official apt repository, and software container management. Let me cover the most notable of these in more detail.

Firmware management of child devices

Child or leaf devices are typically specialised electronic devices that locally communicate with a more generic parent device (e.g. IoT gateway). This parent device is connected to an IoT edge or cloud platform for data transfer and management. For example, an io-link compatible temperature sensor that is attached to a machine in an industrial setting could be considered a child device. Equally a robot arm could also be considered a child device. Many child devices are typically connected to each parent device, and some child devices may also have their own children.

Release 0.10 of supports the firmware operation handling for child devices, initially for Cumulocity IoT. This provides users with the visibility of the child device firmware within Cumulocity IoT, the ability to update the firmware, and error capture processes.

Successful child device firmware update visualised in Cumulocity IoT

Service Monitoring

With both mission critical real-time industrial applications and predictive analytics increasingly running on industrial equipment, its important to continuously monitor the health of devices to avoid system failures. can monitor the health of any application service (including itself) running on the host device and child devices, with the health status information available to be sent to the connected IoT platform.

Every application service emits service health information onto the MQTT bus, which are then translated to the service monitoring message format for the respective IoT platform by the mapper, before being transferred. The initial reference implementation uses Cumulocity IoT.

Transferred healthy application service status visualised in Cumulocity IoT

Extended AWS IoT Support

Increasingly IoT solutions need to take some action locally at the edge, and not just transfer large volumes of data to the cloud. The ability to act locally requires the edge device to receive and process operations from the connected IoT platform.

The initial AWS IoT integration has now been extended to support bi-directional communication. This allows to easily be used in use cases which require applications to both transfer data to AWS IoT and custom MQTT message to be retrieved from the cloud.

Connected device details visualised in AWS IoT

Official Apt Repository

Initially could only be installed via a curl script with other approaches, including the Yocto reference, available shortly after. However, as the Debian apt repository is the most popular software package manager for good reason (supporting easy installation and updating, security updates and stable releases) release 0.10 makes available via an official apt repository. Making it easier for you to incorporate into your projects. apt repository on Cloudsmith
# Configure repository
curl -1sLf \
'' \
| sudo -E bash

# Install/update packages
sudo apt-get install -y \
tedge \
tedge-mapper \
tedge-agent \
tedge-watchdog \
c8y-configuration-plugin \
tedge-apt-plugin \
c8y-firmware-plugin \
c8y-remote-access-plugin \

These updates in release 0.10 of help simplify the management of industry product firmware, so you can do more of what you like doing. Whether that’s sitting on a beach at sunset, or something completely different.

More technical information about release 0.10 can be found on the project’s GitHub repository.

We are always eager to get feedback on the new features and how the open-source project is progressing. So please send your comments to us on the Discord channel.