Use Theengs Gateway as a BLE central device

I’m very interested to this project and I’m trying it as Home Assistant’s integration.
Anyway I’ve any doubts on how it really works.
I’ll try to explain my doubts.
I know that I can connect, via BLE, a peripheral device (that acts as a server) with a central device (client).
For this purpose I’ve created a periperal device with an ESP32 board that has a:

BLEService batteryService("180F")

and a:

BLEUnsignedCharCharacteristic batteryLevelChar("2A19")

It sends every two seconds values read on pin 32 of the ESP 32 board.

When I connect this periperal device to a central device like nRF connect installed on my iPhone, I see correctly values sended by the peripheral device (ESP32):

At this point I’d like to use Theengs Gateway and to send the same values to TG and then to MQTT server.
But the question is:
since values are sended only if the peripheral device (ESP32) is connected to Central device (nRF connect on iphone) how could I connect the peripferal device to Theengs Gateway hosted on Home Assistant?
In other words how may I configure Theeng Gateway+Home Assistant+Raspberry Pi4 as a central device?
If it can be useful I attach the entire peripheral device code that I’ve used.
Any idea?
Thanks in advance.

  Battery Monitor

  This example creates a Bluetooth® Low Energy peripheral with the standard battery service and
  level characteristic. The A0 pin is used to calculate the battery level.

  The circuit:
  - Arduino MKR WiFi 1010, Arduino Uno WiFi Rev2 board, Arduino Nano 33 IoT,
    Arduino Nano 33 BLE, or Arduino Nano 33 BLE Sense board.

  You can use a generic Bluetooth® Low Energy central app, like LightBlue (iOS and Android) or
  nRF Connect (Android), to interact with the services and characteristics
  created in this sketch.

  This example code is in the public domain.

#include <ArduinoBLE.h>

 // Bluetooth® Low Energy Battery Service
BLEService batteryService("180F");

// Bluetooth® Low Energy Battery Level Characteristic
BLEUnsignedCharCharacteristic batteryLevelChar("2A19",  // standard 16-bit characteristic UUID
    BLERead | BLENotify); // remote clients will be able to get notifications if this characteristic changes

int oldBatteryLevel = 0;  // last battery level reading from analog input
long previousMillis = 0;  // last time the battery level was checked, in ms

void setup() {
  Serial.begin(9600);    // initialize serial communication
  while (!Serial);

  pinMode(LED_BUILTIN, OUTPUT); // initialize the built-in LED pin to indicate when a central is connected

  // begin initialization
  if (!BLE.begin()) {
    Serial.println("starting BLE failed!");

    while (1);

  /* Set a local name for the Bluetooth® Low Energy device
     This name will appear in advertising packets
     and can be used by remote devices to identify this Bluetooth® Low Energy device
     The name can be changed but maybe be truncated based on space left in advertisement packet
  BLE.setAdvertisedService(batteryService); // add the service UUID
  batteryService.addCharacteristic(batteryLevelChar); // add the battery level characteristic
  BLE.addService(batteryService); // Add the battery service
  batteryLevelChar.writeValue(oldBatteryLevel); // set initial value for this characteristic

  /* Start advertising Bluetooth® Low Energy.  It will start continuously transmitting Bluetooth® Low Energy
     advertising packets and will be visible to remote Bluetooth® Low Energy central devices
     until it receives a new connection */

  // start advertising

  Serial.println("Bluetooth® device active, waiting for connections...");

void loop() {
  // wait for a Bluetooth® Low Energy central
  BLEDevice central = BLE.central();

  // if a central is connected to the peripheral:
  if (central) {
    Serial.print("Connected to central: ");
    // print the central's BT address:
    // turn on the LED to indicate the connection:
    digitalWrite(LED_BUILTIN, HIGH);

    // check the battery level every 200ms
    // while the central is connected:
    while (central.connected()) {
      long currentMillis = millis();
      // if 2000ms have passed, check the battery level:
      if (currentMillis - previousMillis >= 2000) {
        previousMillis = currentMillis;
    // when the central disconnects, turn off the LED:
    digitalWrite(LED_BUILTIN, LOW);
    Serial.print("Disconnected from central: ");

void updateBatteryLevel() {
  /* Read the current voltage level on the A0 analog input pin.
     This is used here to simulate the charge level of a battery.
  int battery = analogRead(32);
  int batteryLevel = map(battery, 0, 1023, 0, 100);
  if (batteryLevel != oldBatteryLevel) {      // if the battery level has changed
    Serial.print("Battery Level % is now: "); // print it
    batteryLevelChar.writeValue(batteryLevel);  // and update the battery level characteristic
    oldBatteryLevel = batteryLevel;           // save the level for next comparison

Theengs Gateway doesn’t currently support connecting to BLE devices, except for one specific case (time synchronization). So at the moment, this is not possible.