Cannot subscribe BLE characteristic

Hello,
I cannot subscribe a BLE Characteristic. My BLE central device is an ARDUINO UNO WIFI Rev.2. The peripheral is a LAIRD BL654 developement board with the software demo htss.health.thermometer.sensor.custom. The software on the Laird board sends temperature data on service: 0x1809, Characteristic: 0x2A1C
With a smartphone I can subscribe/indicate the characteristic and get data.
The canSubscribe command says that the characteristic is subscribable. But subscription the always failed with the ARDUINO UNO WIFI.

Here is my code:

/*
  BLE subscription test
  
  Connect to Laird BL654 developement board with software: htss.health.thermometer.sensor.custom
  The software on the Laird board sends the temperature on service:0x1809, Characteristic 0x2A1C
*/

#include <ArduinoBLE.h>

void setup() {
  Serial.begin(9600);
  while (!Serial);

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

    while (1);
  }

  Serial.println("BLE Central - SensorTag button");
  Serial.println("Make sure to turn on the device.");

  // start scanning for peripheral
  BLE.scan();
}

void loop() {
  // check if a peripheral has been discovered
  BLEDevice peripheral = BLE.available();

  if (peripheral) {
    // discovered a peripheral, print out address, local name, and advertised service
    Serial.print("Found ");
    Serial.print(peripheral.address());
    Serial.print(" '");
    Serial.print(peripheral.localName());
    Serial.print("' ");
    Serial.print(peripheral.advertisedServiceUuid());
    Serial.println();

    // Check if the peripheral is the Laird temperature Sensor, the local name will be: "LAIRD_TS"
    if (peripheral.localName() == "LAIRD_TS") {
      // stop scanning
      BLE.stopScan();

      monitorTemperature(peripheral);

      // peripheral disconnected, start scanning again
      BLE.scan();
    }
  }
}

void monitorTemperature(BLEDevice peripheral) {
  // connect to the peripheral
  Serial.println("Connecting ...");
  if (peripheral.connect()) {
    Serial.println("Connected");
  } else {
    Serial.println("Failed to connect!");
    return;
  }

  // discover peripheral attributes
  Serial.println("Discovering service 0x1809 ...");
  if (peripheral.discoverService("1809")) {
    Serial.println("Service 0x1809 found");
  } else {
    Serial.println("Attribute discovery failed.");
    peripheral.disconnect();

    while (1);
    return;
  }
    
  // retrieve the temperaturecharacteristic
  BLECharacteristic tempChar = peripheral.characteristic("2a1c");

  //if (tempChar.canSubscribe()) {
  //  Serial.println("tempChar is subscribable");
  //}


  // subscribe to the temperature characteristic
  Serial.println("Subscribing to tempChar ...");
  if (!tempChar) {
    Serial.println("no tempCharc found!");
    peripheral.disconnect();
    return;
  } else if (!tempChar.canSubscribe()) {
    Serial.println("tempChar is not subscribable!");
    peripheral.disconnect();
    return;
  } else if (!tempChar.subscribe()) {
    Serial.println("subscription failed!");
    peripheral.disconnect();
    return;
  } else {
    Serial.println("Subscribed");
  }

  while (peripheral.connected()) {
    // while the peripheral is connected

    // check if the value of the simple key characteristic has been updated
    if (tempChar.valueUpdated()) {
      // yes, get the value, characteristic is 6 byte: flag(1) + float(4) + tempType(1)
      tempChar.read();
    if (tempChar.valueLength() > 0) {
      // print out the value of the characteristic
      Serial.print(", value 0x");
      printData(tempChar.value(), tempChar.valueLength());
    }
   }
  }
  Serial.println("LAIRD_TS disconnected!");
}


void printData(const unsigned char data[], int length) {
  for (int i = 0; i < length; i++) {
    unsigned char b = data[i];

    if (b < 16) {
      Serial.print("0");
    }

    Serial.print(b, HEX);
  }
}