A device that has a temperature sensor in an office might report temperature in degrees Fahrenheit or in degrees Celsius. It is not efficient to configure applications to be able to consume data in all these formats. Instead, the data needs to be collected, transformed, and normalized to create a single logical model so that an application can interact with the different devices in the same way.
The data management component of Platform Service includes a device twin feature and an asset twin feature. The device twin feature lets you take advantage of the collection, transformation, and normalization of different formats of device data into a single logical model. The asset twin feature lets you group different devices together to create a Thing, which is a higher value asset-based data structure. You can even group Things together to create new Things. An application can interact with the logical model, regardless of the data format that is used by the individual devices or Things.
For example, a group of devices that report temperature, humidity, and ambient light can be aggregated into a “Room” Thing to represent the comfort level in a specific office. A number of “Room” Things can be aggregated into a “Floor” Thing to represent all offices on a specific level, and a number of “Floor” Things can be aggregated into a “Building” Thing. By using a Thing abstraction, your application is decoupled from the specifics of how the devices are connected, the format in which the devices publish event data, and how the data is combined.
The explanation above i got from the knowledge center, just to introduce about a problem i got last week.
The problem: When we create device types we must define a Hardware and a Logical interface. When we create the interfaces we are modeling the schema of a table were data will be saved. You can define “the fields and his type”. As usual i create my interfaces, devices and put the sensors to send data, but some sensors are not sending one of the variables. For example the data expected was { voltage : value , kwh: value) but the sensor send {voltage: value}. The data is not saved on the database.
To solve the problem i create a ticket and the answer was to test if a key exists if not save it as a null value.
On the logical interface, for each key i need to put the following (example for kwh) : $exists($event.kwh) ? $event.kwh(null)