A digital twin is the digital representation of a real-world entity or system. It implements the data model and processes that represents a physical object to make it easier to interact with the physical object in the digital world. For instance, a windmill might have a digital twin representation that is used to control the windmill and predict maintenance schedules. Gartner Group has predicted two-thirds of companies with IoT implementations will have deployed a digital twin into production.
A key driving factor for digital twins is to reduce the complexity of IoT deployments. A consistent digital representation of the physical asset makes it easier to develop services such as data analysis, simulation, augmented reality, product maintenance, etc.
When we first started the Eclipse Ditto project our goal was to make it easier to create digital twins. We wanted to create a framework to provide a consistent interoperable format that would allow digital twins to be developed by subject matter experts. Our thinking was that if we developed a flexible framework that handled the basic data interaction between the physical and virtual world, this would allow the digital twin builders to focus on the digital twin domain.
Eclipse Ditto: A framework for building the bridge between devices and their digital twins.
After lots of requirements discovery, coding, testing and community input, we are thrilled to introduce the 1.0 release of the Eclipse Ditto project. We really see Ditto as offering a device-as-a-service for digital twin builders.
Eclipse Ditto – Device as a service
Ditto is for digital twin builders who require a consistent view across a variety of devices. At the core of Ditto is a data model, called a ‘Thing’, that provides the representation of the physical device. The Ditto Thing is accessible through an API that allows digital twin domain experts to interact with the device. This API essentially creates a device-as-a-service for interaction with a digital twin. Ditto services support interaction with the data model through the following features:
- Persistence and notification of changes to the device information
- Search across different Ditto Things
- Payload transformation
- Authorization policies to restrict access to certain parts of a Ditto Things
- Live channel establishing direct interaction with connected devices
Device persistence and notifications
Eclipse Ditto will save the most recent values of a device in a database. This allows digital twins to query the last reported value of a device. A digital twin can also establish that it needs to be notified when the value changes. Based on a change, devices can also be notified if an application wants to change something in the device.
Eclipse Ditto provides extensive search capabilities across a large number of devices. Search queries may include generating a list of all current twins or searching for twins above a certain data threshold, ex. devices with a temperature of greater than 20 degrees. Search against the reported data is supported. Search is also supported to query against device meta information, ex. list all of twins that represent temperature sensors.
For example, Ditto search services could be used by an application that wants to create a dashboard to show the real-time data of a fleet of devices.
Eclipse Ditto is device and domain agnostic. It can support existing devices that are already deployed and newly designed devices. The way these different devices format and transmit the data will often be different. Therefore, Ditto allows for the mapping of different device data into a consistent lightweight JSON model. This allows Eclipse Ditto to provide a consistent interface for a heterogeneous set of devices.
Ditto can restrict access to the APIs based on predefined authorization policies. Ditto authorization services protects the privacy and integrity of the device data. Only predefined authorized clients are granted read/write access to individual elements of a Ditto Thing. Clients are authenticated in Ditto using the OAuth 2.0 and OpenID Connect standard.
Ditto as part of an IoT platform
The Eclipse Ditto services are typically deployed with some type of IoT platform. Ditto runs in the cloud and relies on connectivity to the devices through different types of connectivity services, such as Eclipse Hono, a MQTT broker, MS Azure IoT, etc.
In addition to the persistent mode, Ditto has a ‘live’ channel which lets an application communicate directly with a device. Using live channel, Ditto acts as a router forwarding requests via the device connectivity layer to the actual devices. This channel can also be used to invoke operations (like e.g. “turn the light on now”) on the device and accept a response back from a device. Ditto live channel does check the authorization policies for a device to ensure only authorized clients have access to the device information.
Ditto 1.0: Ready for production
As I have mentioned, the 1.0 release of Ditto is now available. This is a significant achievement for our project. Within the Eclipse Foundation community a 1.0 release signifies a number of things: 1) our APIs are stable, 2) the code base is mature, 3) we will be applying semantic versioning for future releases, 4) and all our IP issues are cleared by the Eclipse Foundation.
We have also done a tremendous amount of work on the horizontal scalability of Ditto 1.0. Running in a cluster environment, Ditto can now scale to support millions of Things (twins). At this point in time, Ditto is ready for production use.
Ditto community and ecosystem
We want Ditto to become an industry standard for creating digital twins. For this reason, Ditto is an open source project within the Eclipse IoT working group at the Eclipse Foundation. We believe the open source community is the best way to create a vendor-neutral community.
Ditto is already building a healthy community of adopters. My company, Bosch.IO (formerly Bosch Software Innovations), offers Ditto as a service in the Bosch IoT Suite. Companies such as Aloxy, Othermo and Kiwigrid are adopting Ditto as part of their IoT platforms. For instance, Aloxy is an Industrial IoT startup that is specializing in monitoring industrial values. They use Eclipse Ditto to create a common API their customers can use to query, report and interact with the Aloxy values.
Eclipse Ditto is a community effort and I would like to invite everyone to participate. There is a Ditto sandbox and a repository of examples for developers who want to start learning about Ditto. Our project is hosted on github so PR and Issues are welcome. If you do start to use Ditto in your solution, please let us know. We really want to build a digital twin community around Ditto.