Accéder au contenu principal

Externalize the BLE devices decoding in a library - TheengsDecoder

 These last years OMG has grown leveraging different types of libraries for device decoding:

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

Posts les plus consultés de ce blog

433toMQTTto433 - Bidirectional ESP8266 NodeMCU gateway between RF 433Mhz signal and MQTT

The goal  is to act as a gateway between 433Mhz sensors and a MQTT broker or between the MQTT broker and 433Mhz actuators, It enables to: receive MQTT data from a topic and send RF 433Mhz signal corresponding to the received MQTT data  publish MQTT data to a different topic related to received 433Mhz signal  It can be an interesting part in an home automation system so as to interface sensors and actuators (wall sockets) with software like openhab . List of compatible sensors here The interest of putting this gateway to an ESP8266 and not on a raspberry pi is to be able to manage security actions at gateway level (power on a siren, cut power to certain devices) following RF data received by sensors without being dependent to the PI for security related actions. [EDIT] all infos are now centralized into  the github repository  take a look at it you will find up to date info about OpenMQTTGateway You need: Software: Mosquitto Arduino IDE latest version (tested ok with 1.6.10

SONOFF RF BRIDGE + Pilight or How to extend the supported protocols by our little bridge

With version V0.9 of OpenMQTTGateway  @steadramon  &  @puuu  (the ESP library creator) enabled by their work to integrate Pilight library on OMG. Permiting to increase significantly the list of RF protocols of OMG . But now that we have this interesting possibility and with the goal of OMG of beiing multi boards compatible, why not trying to put Pilight on a Sonoff RF Bridge . So as to do this test I ordered a new one so as to be on the same hardware as most of the users (my other RF Bridge is a demonstration old one) So as to decode RF signals the Sonoff RF Bridge has a special dedicated chip (EFM8BB1)  that communicate with the esp8285 with a serial connection. If we want to increase the number of RF protocols compatibles on the device without modifying the hardware, the only software based solution is to hack the  EFM8BB1. This hack is available and made by @ Portisch . The list of protocol is interesting but at the moment not as big as Pilight one. Maybe I will t

Infrared IR, 433mhz and MQTT on ESP8266 bidirectional gateway OpenMQTTGateway

Following discussions on the home assistant forum people gave me the idea to add Infrared communication to the 433mhz gateway.  The goal is to act as a gateway between 433Mhz sensors, infrared remote controls and a MQTT broker or between the MQTT broker and 433Mhz actuators, infrared devices, It enables to: receive MQTT data from a topic and send RF 433Mhz signal corresponding to the received MQTT data  publish MQTT data to a different topic related to received 433Mhz signal  receive MQTT data from a topic and send infrared signal corresponding to the received MQTT data  publish MQTT data to a different topic related to received infrared signal  It can be an interesting part in an home automation system so as to interface sensors and actuators (wall sockets), your tv, home cinema, hifi ... with software like  openhab  or home assistant . List of compatible RF sensors here [EDIT] all infos are now centralized into the github repository  take a look at it you will find up to d