# Thinger.io: An Open Source Platform for Deploying Data Fusion Applications in IoT Environments
## 3 Thinger.io Overview
### Research Efforts at Thinger.io
#### 3.1.1 Transmission Efficiency  
Most of the state-of-the-art IoT platforms use traditional transport protocols based on HTTP (Hypertext Transfer Protocol) or MQTT (Message Queuing Telemetry Transport) for pushing data from devices to the cloud [33; 34]. In the HTTP approach, every device sending data to the cloud issues a HTTP request with a custom payload. The IoT platform receives this information, just like a regular web server, and stores this information in a database. This way of communication results in an inefficient way of transmitting information, in terms of bandwidth, latency, and power consumption, which are constraints for IoT devices [35]. As such, every sensed point requires the creation of a new connection to the cloud, and the creation of a HTTP request which includes several headers and a payload, usually in JSON or XML. This mechanism, based on traditional HTTP requests, implies a huge overhead for sending small and regular payloads, which in most cases, consists of a few bytes with sensor measurements. This is the preferred approach for other open and standard solutions, such as Fiware, a cloud-based infrastructure for IoT platforms funded by the European Union and the European Commission, as seen in multiple developments [36; 37]. There are other solutions such as Xively [38], ThingSpeak [39], or Temboo [40], which all started offering only HTTP interfaces.  
There are other IoT approaches based on protocols like MQTT [41], which is a telemetry protocol designed decades ago that provides a bidirectional communication between servers and devices, based on a publish-subscribe-based messaging protocol. This approach is much more efficient than HTTP-based solutions, as discussed in [35], as it scales better, requires less bandwidth, and reduces latency. Big companies such as Amazon Web Services are basing their IoT solutions on this protocol [33]. Nowadays, almost all IoT players started to integrate MQTT in their solutions, including the ones mentioned above, and others like Kaa, Carriots, or Ubidots [42].  
Thinger.io proposes a similar efficient approach to the MQTT solution, in the sense of using raw binary connections without the HTTP overhead, or being able to provide publish-subscribe mechanisms. It also provides features not found on MQTT, like transparent HTTP interoperability, as described later, but in terms of transmission efficiency, it also defines the payload encoding (as opposed to MQTT). It uses an optimized encoding scheme called Protoson (PSON) ([[https://github.com/thinger-io/Protoson](https://github.com/thinger-io/Protoson)]([https://github.com/thinger-io/Protoson](https://github.com/thinger-io/Protoson))). Protoson was designed from scratch just to support devices with constrained resources such as memory or processing power.  
This solution allows encoding unstructured data like in JSON, but in a compact binary format. Figure 2 provides a comparison of encoding sizes between different common formats used by platforms, such as JSON, BON (Binary JSON), MessagePack, XML, and the proposed PSON, which performs slightly better than the most efficient alternative (MessagePack), which is not quite common in the IoT domain. As such, the proposed solution reduces latency while sending information to the cloud, saves bandwidth, reduces memory footprint, and save battery by offering efficient protocols and an encoding mechanism.