These last years OMG has grown leveraging different types of libraries for device decoding:
- RCSwitch at the beginning for RF/433mhz
- IRRemote and IRRemote ESP8266 for Infrared
- ESPilight and RTL_433_ESP for RF
And many others for sensors, actuators, processing, mqtt...
I thank all the maintainers and contributors of these libraries, without them, OMG would not exist.
As you know OMG support also Bluetooth device decoding and control, we are not relying on a library for this, but rather on the OMG code.
This is mainly due to the history, with the first reading of a Mi Flora by an HM10 integrated in November 2017 and the ESP32 reading of this same sensor in January 2018.
After BLE devices were added from time to time to reach a list of more than 25 devices compatible.
A lot of other open-source software are using the BLE data broadcasted to propose a similar approach, sometimes dedicated to one or a range of devices, for a particular platform, or for a particular controller.
My opinion is that each time, a part of the wheel is reinvented, decoding data, converting hex to decimal, processing, defining sensors parameters...
So why not have one library that does this, and can be used by different projects, platforms, or controllers. Leveraging one format for better interoperability.
This is how TheengsDecoder library was created.
With the great help of @h2zero we created and published this piece of code that converts a gibberish information into a human and machine readable format.
This library can decode data coming from various BLE broadcaster devices and provide a comprehensive json for each message. It can be easily extended thanks to an understandable decoder definition in json format also:
{
"brand":"ThermoBeacon",
"model":"WS02",
"model_id":"WS02",
"condition":["manufacturerdata", "contain", "100000001a11"],
"properties":{
"tempc":{
"decoder":["value_from_hex_data", "manufacturerdata", 24, 4, true],
"post_proc":["/", 16]
},
"hum":{
"decoder":["value_from_hex_data", "manufacturerdata", 28, 4, true],
"post_proc":["/", 16]
},
"volt":{
"decoder":["value_from_hex_data", "manufacturerdata", 20, 4, true],
"post_proc":["/", 1000]
}
}
I like the library approach because it enables other projects to benefit from the work and avoid finding everywhere in the open-source world duplicate functions with the same goals.
Some other projects prefer to internalize the code by integrating these libraries, there are Pros and Cons but in the case of OMG, I prefer to take the other approach and propose these functionalities outside of OpenMQTTGateway.
I think that having this approach will avoid some wasted effort globally and enable other projects to have easy access to the decoding functions.
TheengsDecoder will be integrated into OpenMQTTGateway from version v0.9.9
Commentaires
Enregistrer un commentaire