Cybele bridges Bluetooth Low Energy devices to MQTT on Linux devices. MQ Telemetry Transport Protocol (MQTT), invented by IBM, is an ISO standard that uses lightweight publish/subscribe messaging to send data to a server.
When people think about IoT sensors they tend to envisage, for experimenters, discrete electronic components connected to single board computers (SBC) or for industrial, custom sensors connected to microcontrollers.
The problem for experimenters is the solution is fragile and needs to be evolved into a custom electronic design before it can be used in production. For industrial solutions, they tend to be proprietary, require deeply invasive installation and very expensive.
Sensor beacons provide an easy, ready-made solution that have the following advantages:
They provide a solution that’s equally as good for experimentation as it is for the final production
The Bluetooth SIG has a new Developer Study Guide by Martin Woolley showing how to create a Bluetooth gateway. Gateways are the bridge between Bluetooth devices and the Internet.
The developer study guide explains GAP, GATT, broadcasting devices and develops an architecture for capturing Bluetooth data:
It’s implemented using Python on a Raspberry Pi 4:
The guide has a section on Buy vs Build where it’s explained that, depending on your skills and budget, you might consider buying a commercial gateway.
Raspberry Pi based solutions aren’t always reliable in the long term because the micro SD card eventually fails. Most gateways also send (push) data to your server rather than an application having to query (pull) the gateway as is the case with the example in the study guide.
This gateway detects Bluetooth LE advertising and sends it on to your chosen HTTP(S) or MQTT server via WiFi or Ethernet. There’s a configurable upload period and filtering by RSSI, Bluetooth Service, MAC address (including partial address) and iBeacon. It’s powered by Ethernet PoE or micro USB. It supports up to 240 advertising detections per second when using Ethernet.
It never been easier to collect Bluetooth sensor information and store it in the cloud. The INGICS gateways come with step-by-step instructions how to set up AWS IoT Core, Azure IoT Hub and Google IoT Core.
If you are rolling out many gateways, there comes a time when you start wondering if all of them are working and connected. While it’s possible to write a server side script/code to detect whether or not data has been received from the gateway in the last n seconds/minutes, this doesn’t work when there aren’t any Bluetooth devices in the vicinity of some gateways which won’t be sending payloads.
The INGICS gateways have a way of setting up a heartbeat that’s a dummy payload used to indicate a gateway is working and connected. It’s set up by telnet to the gateway and issuing the following command followed by a reboot:
> SYS HEARTBEAT 1 > REBOOT
The ‘1’ signifies every 1 minute and allows setting up to 255 minutes. A $HBRP data payload is to the server in the form:
The heartbeat functionality is available on firmware IGS01-v2.0.0 and IGS01S-v2.0.0 or later.
The INGICS iGS01S (WiFi) and iGS02E (Ethernet) gateways support MQTT to send data to a server.
MQTT defines three levels of Quality of Service (QoS) that relate to whether requests are resent if not acknowledged:
0 – The broker/client will deliver the message once, with no confirmation.
1 – The broker/client will deliver the message at least once, with confirmation required.
2 – The broker/client will deliver the message exactly once by using a four step handshake.
The INGICS gateways only support QoS level 0. This is because these gateways have lower memory and processing capability. They don’t have enough memory to queue unacknowledged requests required of other QoS levels. The extra processing would also significantly impact the performance and hence throughput.
If you need a higher MQTT service level then try the Minew G1 that supports QoS levels 0 and 1.
Our article on What are Beacons shows the kind of data sent by beacons. While this might be iBeacon or Eddystone, both are a subset of all Bluetooth advertising as sent out by all Bluetooth LE devices such as smartphones, Fitbits and even industrial machines. The Bluetooth LE advertising advertising is just a short series of numbers.
Gateways look for Bluetooth advertising and send this on to a web server together with the signal strength of the detected device, the gateway’s own Bluetooth MAC address and MAC address of the detected Bluetooth device.
In some situations a very large number of devices can be detected, most of which aren’t the ones that need to be detected. This can cause either the gateway to become overloaded or too much extraneous data to be sent to the server.
All gateways have ways of filtering what advertising is sent to the server. This usually includes matching some or all of the advertising with a given hexadecimal string and the ability to ignore devices weaker than a given signal strength.
Even after filtering, it’s possible in extreme circumstances that a gateway processes too many beacons and becomes overloaded. In these cases it’s important to have a gateway that can support the highest throughput. Gateway specifications detail the typical maximum number of devices that can be detected which varies considerably between devices. Ethernet connected devices tend to be more performant than those connected by WiFi. Also consider setting the gateway to only detect beacons close by and use more gateways per given area. Consider using MQTT in preference to HTTP so as to cause the gateway to do less work.