Subscribe with two Nano 33 BLE Central Device to one Nano 33 BLE Peripheral Device

This is my first project with Arduino Nano 33 BLE.
I have an Anemometer connected to an Arduino Nano 33 BLE REV2.
On my two Solar Panel I have, per panel, a Nano 33 BLE connected to move the panel with linear motors to the brightest point.

If we have to much wind, the panel should move to horizonal. For this I need the Data from the Anemometer (peripheral device) via BLE.

The Arduino on the Anemometer calculate the Windspeed and gives me the status back (true, if Windspeed is high, false, if Windspeed ist low). This are not sensitive data, they can broadcasted or what ever the best solution is.

I don't know how to subscribe from the two central devices and get only Data if the status changed (characteristic.valueUpdated()).

After three weeks of trial and error, I'm still not sure what the best approach is. I've done a lot of research online, but I'm not sure I fully understand the sequence I should be using.

For programing I use Visual Studio Code with PlatformIO.
Many thanks for any help in advance
      Gene

Code for the peripheral device

// Code for peripheral device
#include <Arduino.h>
#include <ArduinoBLE.h>

/*
 * https://www.bluetooth.com/wp-content/uploads/Files/Specification/HTML/Assigned_Numbers/out/en/Assigned_Numbers.pdf?v=1730037065143
 * 1816 - "Cycling Speed and Cadence Service" - siehe Seite 66 (Kapitel 3.4 GATT Services   - 3.4.1 Services by Name)
 * 2A70 - "True Wind Speed" Characteristics   - siehe Seite 94 (Kapitel 3.8 Characteristics - 3.8.1 Characteristics by Name)
 * 
 * https://docs.arduino.cc/libraries/arduinoble/#BLECharacteristic%20Class
 * https://reference.arduino.cc/reference/en/libraries/arduinoble/
 * 
 * https://forum.arduino.cc/t/ble-notify-with-nano-33-ble/1077156/3
 * https://github.com/Robocraze/Nano-33-BLE-Examples/blob/main/environment_sensor_ble/environment_sensor_ble.ino
 * https://forum.arduino.cc/t/bluetooth-communications/902610
 * https://forum.arduino.cc/t/arduino-nano-33-ble-2-way-communication/938251
 * (*1) https://stackoverflow.com/questions/72626516/how-to-enable-notification-and-indications-on-arduino-nano-33-iot-ble-descriptor
 * https://forum.arduino.cc/t/connecting-two-ble-peripheral-devices-to-one-central-device/1242915
 */

const char* BLE_Service_UUID_TrueWindSpeed        = "181a";  // Service         - Environmental Sensing Service  
const char* BLE_Characeristics_UUDI_TrueWindSpeed = "2a70";  // Characteristics - True Wind Speed 

BLEService environmentalService(BLE_Service_UUID_TrueWindSpeed); // Bluetoothยฎ Low Energy Binary Sensor Service
BLEIntCharacteristic windSpeedCharacteristic(BLE_Characeristics_UUDI_TrueWindSpeed, BLERead | BLENotify);  // GATT
// BLEDescriptor Descriptor("beca6057-955c-4f8a-e1e3-56a1633f04b1","Descriptor");

bool oldWindSpeedLevel    = 0;           // last Wind Speed level reading from Anemometer
long previousMillis       = 0;           // last Wind Speed level was checked in before x millis
int checkWindCounter      = 0;
const int mds             = 5;           // measure duration in seconds
const float mts           = 2.5;         // max Anemometer turns per second
int pauseAfterWindMeasure = 30 * 1000;   // Pause after wind measurement in millis (sec * 1000 = msec)
const int pinReedSensor   = 8 ;          // REED Sensorport (Anemometer)

//โ•โ•โ•โ•โ• Function declarations โ•โ•โ•โ•โ•
// void updateWindLevel();
bool   readAnemometer();
String iif(bool check, String rString1, String rString2);
void   blePeripheralConnectHandler( BLEDevice central );
void   blePeripheralDisconnectHandler( BLEDevice central );
void   setupBLE_Environment();                                            // Setup Bluetooth Environment

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
  pinMode(pinReedSensor, INPUT_PULLDOWN);

  setupBLE_Environment();
}

void loop() 
{
  Serial.print(timeSinceStart());Serial.print(" ");
  BLE.advertise();
  bool WindLevel = readAnemometer();
  BLEDevice central = BLE.central();  // wait for a Bluetoothยฎ Low Energy central

  Serial.print(" windSpeedCharacteristic is ");
  if (windSpeedCharacteristic.subscribed()) 
  { // set a new value , that well be pushed to subscribed Bluetoothยฎ Low Energy devices
    Serial.println("subscribed");
    windSpeedCharacteristic.writeValue(WindLevel);
  }
  else
  {
    Serial.println("not subscribed");
  }

  if (central)   // if a central is connected to the peripheral:
  {
    // while (central.connected())     // while the central is connected:
    // {
      // long currentMillis = millis();
      if(oldWindSpeedLevel != WindLevel)
        {
          Serial.print("change characteristics from ");Serial.print(oldWindSpeedLevel);Serial.print(" to ");Serial.println(WindLevel);
          windSpeedCharacteristic.writeValue(WindLevel);
        }
    // }
    oldWindSpeedLevel = WindLevel;
    delay(500);

    if(WindLevel)
    {
      Serial.print("wait ");Serial.print(pauseAfterWindMeasure/1000);Serial.println(" seconds");
      delay (pauseAfterWindMeasure);
    }
  }
}

bool readAnemometer()
{
  int newState    = LOW;
  int oldState    = LOW;
  int windCounter = 0;
  bool WindSpeedLevel = LOW;  // or HIGH

  unsigned long endTime = millis() + (mds * 1000);
  
  while (endTime > millis() )  // Anemometer mds-Sekunden abfragen
  {
    newState = digitalRead(pinReedSensor);
    if(oldState == LOW && newState == HIGH)  // Bei jeder Umdrehung wird newState auf HIGH gesetzt, wenn der REED-Sensor aktiviert wird.
    { windCounter++; }
    // Serial.print(endTime);Serial.print(" - ");Serial.print(millis()); Serial.print(" newState = ");Serial.print(newState); Serial.print(" oldState = ");Serial.print(oldState); Serial.print(" WindCounter = "); Serial.println(windCounter);
    oldState = newState;
  }

  WindSpeedLevel = windCounter > (mts * mds);
  Serial.print(checkWindCounter); Serial.print(") Wind Speed is ");Serial.println(iif(WindSpeedLevel,"HIGH","LOW"));

  if(WindSpeedLevel)  // Wenn zuviel Wind - max erlaubte Umdrehungen pro Sekunde * Messdauer
  {
    checkWindCounter = 0;
  }
  else
  {
    checkWindCounter++;
  }
  return WindSpeedLevel;
}

String iif(bool check, String rString1, String rString2)
{
  String rValue = rString2;
  if (check)
  {
    rValue = rString1;
  }
  return rValue;
}

void blePeripheralConnectHandler( BLEDevice central )
{
  digitalWrite( LED_BUILTIN, HIGH );
  Serial.print( F ( "Connected to central: " ) );
  Serial.println( central.address() );
}

void blePeripheralDisconnectHandler( BLEDevice central )
{
  digitalWrite( LED_BUILTIN, LOW );
  Serial.print( F( "Disconnected from central: " ) );
  Serial.println( central.address() );
}

void setupBLE_Environment()
{
 /*โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
   โ•‘ 1. Bluetooth starten                             โ•‘
   โ•‘ 2. Bluetooth konfigurieren                       โ•‘
   โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•*/

  // begin initialization
  while (!BLE.begin()) {
    // Serial.println("starting BLE failed!");
    digitalWrite(LED_BUILTIN,HIGH);
    delay(200);
    digitalWrite(LED_BUILTIN,LOW);
    // while (1);
  }

  BLE.setLocalName("Anemometer");
  BLE.setDeviceName("Anemometer");
  BLE.setAdvertisedService(environmentalService);                  // add the service UUID
  environmentalService.addCharacteristic(windSpeedCharacteristic); // add the Windlevel characteristic

  // windSpeedCharacteristic.addDescriptor(Descriptor);
  // BLE_Characeristics_UUDI_TrueWindSpeed.addDescriptor(Descriptor);   //  siehe Link (*1)
  // echoService.addCharacteristic(charac);

  BLE.addService(environmentalService);                            // Add the Enviromental service

  // set BLE event handlers
  BLE.setEventHandler( BLEConnected,    blePeripheralConnectHandler );
  BLE.setEventHandler( BLEDisconnected, blePeripheralDisconnectHandler );

  windSpeedCharacteristic.writeValue(oldWindSpeedLevel);           // set initial value for this characteristic

  BLE.advertise();  // start advertising

  Serial.println("Bluetoothยฎ device active, waiting for connections...");
}

Code for the central device

// Code for central device
#include <Arduino.h>
#include "Arduino_BMI270_BMM150.h"    // Modul fรผr Gyro laden
#include <ArduinoBLE.h>               // Bluetooth-Modul laden

// โ•โ•โ•โ•โ• BlueTooth โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
const char* BLE_Service_UUID_TrueWindSpeed        = "181a";  // Service         - Environmental Sensing Service  
const char* BLE_Characeristics_UUDI_TrueWindSpeed = "2a70";  // Characteristics - True Wind Speed 

byte oldCommand = 0;

// โ•โ•โ•โ•โ• Photoresistor Pins โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
int pinServoToSouth =  4;   // gelb   zu gelb
int pinLdrSouth     = A0; 
int pinServoToNorth =  5;   // braun  zu braun
int pinLdrNorth     = A1; 
int pinServoToWest  =  6;   // orange zu gelb
int pinLdrWest      = A2; 
int pinServoToEast  =  7;   // grau   zu grรผn
int pinLdrEast      = A3; 

int minLDR_Lux     = 5;   // minum Licht das auf LDR fรคllt
int maxError       = 40;  // ein gerade Zahl > 2 verwenden
int maxEndStopLoop = 400; // Anzahl Loops

//Difference between the opposite photoresistors
int lastNorthSouth_error  = 0;
int lastWestEast_error    = 0;
int eStopCounterNS        = 0;
int eStopCounterWE        = 0;
int x = 0;  // temporarly defined

// โ•โ•โ•โ•โ• Acceleration Sensor โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
// float x, y, z;
int degreesX = 0;
int degreesY = 0;
int accelerationX         = 0;
int accelerationY         = 0;
int xAxis                 = 0;  // fรผr Array
int yAxis                 = 1;  // fรผr Array
int zAxis                 = 2;  // fรผr Array
int accelerationValue[2]  = {0,0};

// โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
int dirPin       = pinServoToSouth;  // Vorbelegen, damit im WHILE-Loop alles funktioniert
int initDirPin   = pinServoToSouth;

bool hitEndStopWE = false;
bool hitEndStopNS = false;

void movePanel(int &r_Pin_A, int &r_Pin_B, bool &r_HitEndStop, int &r_LastDirError, int &r_Pin_Up, int &r_Pin_Down,int &r_eStopCounter, String axis);
int  iif(bool booleanValue,int returnValue1, int returnValue2);
int  getLDR_Div(int pin_a, int pin_b, String Txta);
void debug(String moveDirection,int ldrDiff);
void printV_Error(int west_LDR, int east_LDR, int error);
void moveToHorizontalPos(String geoPos ,String reason);
void readAcc(int *lAccelerationValue);
void connectToCentral();
void connectToPeripheral();
void controlPeripheral(BLEDevice peripheral);
int  gestureDetectection() ;
void writeGesture(int gesture) ;
void getDataPeripheral(BLEDevice peripheral);

void setup() 
{
  Serial.begin(9600);
  if (!BLE.begin())
  {
    Serial.println("* Starting Bluetoothยฎ Low Energy module failed!");
    while (1);
  }
  else 
  {
    Serial.println("* Starting Bluetoothยฎ");
  }

  if (!IMU.begin())    // Lagesensor initialisieren
  {
    Serial.println("Failed to initialize IMU!");
    while (1);
  }

  BLE.setLocalName("Nano 33 BLE (Central)"); 
  BLE.setDeviceName("Arduino Central");
  Serial.println("Arduino Nano 33 BLE Sense (Central Device)");
  BLE.scanForUuid(BLE_Service_UUID_TrueWindSpeed);
  // BLE.scan();   // scan for all devices 

  BLEUnsignedCharCharacteristic windSpeedCharacteristic(BLE_Characeristics_UUDI_TrueWindSpeed,  BLERead | BLENotify); // remote clients will be able to get notifications if this characteristic changes

  pinMode(pinServoToWest,  OUTPUT);
  pinMode(pinServoToEast,  OUTPUT);
  pinMode(pinServoToSouth, OUTPUT);
  pinMode(pinServoToNorth, OUTPUT);

}

void loop() 
{
  Serial.print(timeSinceStart());Serial.print(" ");
  Serial.println("* starting ");
  connectToPeripheral();
}

void connectToPeripheral()
{
  BLEDevice peripheral;
  // Serial.print(x++);
  int loopCounter = 0;
  do
  {
    BLE.scanForUuid(BLE_Service_UUID_TrueWindSpeed);  // start scanning for peripherals
    peripheral = BLE.available();

    delay(50);
    Serial.print("~");Serial.print(peripheral);Serial.print("");
  } while (!peripheral && (loopCounter++ < 100));

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

    BLE.stopScan();    // stop scanning
  
    getDataPeripheral(peripheral);
  }
}

void getDataPeripheral(BLEDevice peripheral) {
  if (peripheral.connect()) {
    Serial.println("Connected");
  } else {
    Serial.println("Failed to connect!");
    return;
  }
  // discover peripheral attributes
  Serial.println("Discovering attributes ...");
  if (peripheral.discoverAttributes()) {
    Serial.println("Attributes discovered");
  } else {
    Serial.println("Attribute discovery failed!");
    peripheral.disconnect();
    return;
  }

  BLECharacteristic windCharacteristic = peripheral.characteristic(BLE_Characeristics_UUDI_TrueWindSpeed);
  if(windCharacteristic.subscribe())
    Serial.println("โ• โ• โ• โ• Subscribed โ• โ• โ• โ• ");

  Serial.print(BLE_Characeristics_UUDI_TrueWindSpeed);Serial.print("` ... ");
  if (!windCharacteristic) 
  {
    Serial.println("no Wind characteristic found!");
    peripheral.disconnect();
    return;
  } else if (!windCharacteristic.canSubscribe()) {
    Serial.println("Wind characteristic is not subscribable!");
    peripheral.disconnect();
    return;
  } else if (!windCharacteristic.subscribe()) {
    Serial.println("subscription failed!");
    peripheral.disconnect();
     return;
  } else {
    Serial.println("Subscribed");
  }
  
  while (peripheral.connected()) {   // while the peripheral is connected
    if (windCharacteristic.valueUpdated()) {    // check if the value of the gesture characteristic has been updated
      byte command;
      windCharacteristic.readValue(command);
      if (oldCommand == command)
      {
        continue;
      }
      oldCommand = command;
      Serial.print(":");
      continue;
    }
    peripheral.disconnect();
    delay(50);
  }
}

I've modifyed the code, to get some output in the Terminal.
The central-device reports often "Attribute discovery failed!"
As you can see in the attached output at arround 0:41 Seconds the "Attributes discovered" and the subscription was established. But in the next loop right after it could not found "Attribute".

0:41 * starting
~0~0~0~1
Found d8:3f:78:15:d5:64 'Anemometer' Characteristics Count = 0 181a
Connected
Discovering attributes ...
Attributes discovered
Characteristics 2a70` ... Subscribed

After a few minutes (~10 Minutes), the central device can't find the peripheral device anymore.

Output from peripheral-device

--- Terminal on COM23 | 9600 8-N-1
--- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time
--- More details at https://bit.ly/pio-monitor-filters
--- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H
2) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
0:16 advertise 3) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
0:21 Disconnected from central: 86:32:11:35:ad:2b
advertise 4) Wind Speed is LOW
Connected to central: 86:32:11:35:ad:2b
 windSpeedCharacteristic is not subscribed
0:27 advertise 5) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
0:32 Disconnected from central: 86:32:11:35:ad:2b
Connected to central: 86:32:11:35:ad:2b
advertise 6) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
0:38 Disconnected from central: 86:32:11:35:ad:2b
Connected to central: 86:32:11:35:ad:2b
advertise 7) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
0:43 Disconnected from central: 86:32:11:35:ad:2b
Connected to central: 86:32:11:35:ad:2b
Disconnected from central: 86:32:11:35:ad:2b
Connected to central: 86:32:11:35:ad:2b
advertise 8) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
0:50 Disconnected from central: 86:32:11:35:ad:2b
advertise 9) Wind Speed is LOW
Connected to central: 86:32:11:35:ad:2b
 windSpeedCharacteristic is not subscribed
0:56 advertise 10) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
1:01 advertise 11) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
1:07 advertise 12) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
1:12 Disconnected from central: 86:32:11:35:ad:2b
Connected to central: 86:32:11:35:ad:2b
advertise 13) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
1:18 advertise 14) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
1:23 Disconnected from central: 86:32:11:35:ad:2b
Connected to central: 86:32:11:35:ad:2b
Disconnected from central: 86:32:11:35:ad:2b
advertise 15) Wind Speed is LOW
Connected to central: 86:32:11:35:ad:2b
 windSpeedCharacteristic is not subscribed
1:30 advertise 16) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
1:35 Disconnected from central: 86:32:11:35:ad:2b
Connected to central: 86:32:11:35:ad:2b
advertise 17) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
1:41 Disconnected from central: 86:32:11:35:ad:2b
advertise 18) Wind Speed is LOW
Connected to central: 86:32:11:35:ad:2b
:
:
10:29 advertise 112) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
10:34 Disconnected from central: 86:32:11:35:ad:2b
advertise 113) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
10:40 advertise 114) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
10:45 advertise 115) Wind Speed is LOW
Connected to central: 86:32:11:35:ad:2b
Disconnected from central: 86:32:11:35:ad:2b
 windSpeedCharacteristic is not subscribed
10:51 advertise 116) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
10:56 advertise 117) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
11:02 advertise 118) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
11:07 advertise 119) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
11:13 advertise 120) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
11:18 advertise 121) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed

Output from central-device

--- Terminal on COM7 | 9600 8-N-1
--- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time
--- More details at https://bit.ly/pio-monitor-filters
--- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H
Arduino Nano 33 BLE Sense (Central Device)
0:07 * starting 
~0~0~0~1
Found  d8:3f:78:15:d5:64 'Anemometer' Characteristics Count = 0 181a
Connected
Discovering attributes ...
Attribute discovery failed!
0:19 * starting 
~0~1
Found  d8:3f:78:15:d5:64 'Anemometer' Characteristics Count = 0 181a
Connected
Discovering attributes ...
Attribute discovery failed!
0:20 * starting
~0~0~1
Found  d8:3f:78:15:d5:64 'Anemometer' Characteristics Count = 0 181a
Connected
Discovering attributes ...
Attribute discovery failed!
0:30 * starting 
~0~0~0~1
Found  d8:3f:78:15:d5:64 'Anemometer' Characteristics Count = 0 181a
Connected
Discovering attributes ...
Attribute discovery failed!
0:36 * starting
~0~0~1
Found  d8:3f:78:15:d5:64 'Anemometer' Characteristics Count = 0 181a
Connected
Discovering attributes ...
Attribute discovery failed!
0:41 * starting
~0~0~0~1
Found  d8:3f:78:15:d5:64 'Anemometer' Characteristics Count = 0 181a
Connected
Discovering attributes ...
Attributes discovered
Characteristics 2a70` ... Subscribed
(1)0:42 * starting 
~0~1
Found  d8:3f:78:15:d5:64 'Anemometer' Characteristics Count = 0 181a
Connected
Discovering attributes ...
Attribute discovery failed!
0:48 * starting 
~0~0~0~0~0~1
Found  d8:3f:78:15:d5:64 'Anemometer' Characteristics Count = 0 181a
Connected
Discovering attributes ...
Attribute discovery failed!
1:10 * starting 
~0~1
Found  d8:3f:78:15:d5:64 'Anemometer' Characteristics Count = 0 181a
Connected
Discovering attributes ...
Attribute discovery failed!
1:21 * starting 
~0~0~1
Found  d8:3f:78:15:d5:64 'Anemometer' Characteristics Count = 0 181a
Connected
Discovering attributes ...
Attributes discovered
Characteristics 2a70` ... Subscribed
(1)1:22 * starting 
~0~0~1
Found  d8:3f:78:15:d5:64 'Anemometer' Characteristics Count = 0 181a
Connected
Discovering attributes ...
:
:
10:16 * starting
~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~1
Found  d8:3f:78:15:d5:64 'Anemometer' Characteristics Count = 0 181a
Connected
Discovering attributes ...
Attribute discovery failed!
10:32 * starting 
~0~0~1
Found  d8:3f:78:15:d5:64 'Anemometer' Characteristics Count = 0 181a
Failed to connect!
10:37 * starting
~0~0~0~0~0~0~0~0~0~0~0~0~0~0~1
Found  d8:3f:78:15:d5:64 'Anemometer' Characteristics Count = 0 181a
Failed to connect!
10:43 * starting
~0~0~0~0~1
Found  d8:3f:78:15:d5:64 'Anemometer' Characteristics Count = 0 181a
Connected
Discovering attributes ...
Attribute discovery failed!
10:47 * starting
~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0
10:55 * starting 
~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0
11:03 * starting 
~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0
11:11 * starting 
~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0

Output from central-device
Output from peripheral-device

It looks like you have attributed the outputs to the wrong device.

My suggestion is to get the peripheral device sending the windspeed working in a solid fashion with a BLE app on a phone like LightBlue or nrfConnect before implementing custom central code on another Nano 33 BLE.

Thanks for your reply.
You are right. I've updated the description.

I've installed nRF Connect on my iPad. When I open the app and connect the peripheral-device (Anemometer) and press the subscription button, the peripheral-device shows that it's subscribed to the windSpeedCharacteristic. Then I turn on the fan to rotate the anemometer. On nRF the value "True Wind Speed" changes from 0 to 1 and back to 0 if I turn off the fan. It seems to work.
Here are the ouput on the peripheral-device terminal.

0:30 advertise 6) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
0:35 advertise 7) Wind Speed is LOW
Connected to central: 4e:82:5b:42:2b:4a
 windSpeedCharacteristic is not subscribed
0:40 advertise 8) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
0:46 advertise 9) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
0:52 advertise 10) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
0:57 advertise 11) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
1:03 advertise 12) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
1:08 advertise 13) Wind Speed is LOW
 windSpeedCharacteristic is subscribed
1:14 advertise 14) Wind Speed is LOW
 windSpeedCharacteristic is subscribed
1:19 advertise 15) Wind Speed is LOW
 windSpeedCharacteristic is subscribed
1:25 advertise 16) Wind Speed is LOW
 windSpeedCharacteristic is subscribed
1:30 advertise 17) Wind Speed is LOW
 windSpeedCharacteristic is subscribed
1:36 advertise 18) Wind Speed is HIGH
 windSpeedCharacteristic is subscribed
change characteristics from 0 to 1
wait 30 seconds
2:11 advertise 0) Wind Speed is HIGH
 windSpeedCharacteristic is subscribed
wait 30 seconds
2:47 advertise 0) Wind Speed is LOW
 windSpeedCharacteristic is subscribed
change characteristics from 1 to 0
2:53 advertise 1) Wind Speed is LOW
 windSpeedCharacteristic is subscribed
2:58 advertise 2) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
3:04 advertise 3) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed

Yes. The output is as expected, although I'm not clear about what is printing the word "advertise" before the checkWindCounter value. Is it part of the missing function timeSinceStart( )?

I'm not clear about the switch from subscribed to not subscribed as the end off the print out

2:53 advertise 1) Wind Speed is LOW
windSpeedCharacteristic is subscribed
2:58 advertise 2) Wind Speed is LOW
windSpeedCharacteristic is not subscribed
3:04 advertise 3) Wind Speed is LOW
windSpeedCharacteristic is not subscribed

With the code looking good on the peripheral side, you can concentrate on the Central. I would recommend removing all the IMU and other things from the central code until you have the BLE connection working. Can you please post some simplified central code.

I'm not certain you want to be disconnecting the peripheral in this block after an updated reading

while (peripheral.connected()) {   // while the peripheral is connected
    if (windCharacteristic.valueUpdated()) {    // check if the value of the gesture characteristic has been updated
      byte command;
      windCharacteristic.readValue(command);
      if (oldCommand == command)
      {
        continue;
      }
      oldCommand = command;
      Serial.print(":");
      continue;
    }
    peripheral.disconnect();
    delay(50);
  }

I'll try and get a pair of Nano 33 BLE's set up to match your environment.

I added Serial.print("advertise ") at the beginning of loop().

void loop()
{
  Serial.print(timeSinceStart());Serial.print(" ");
  BLE.advertise(); Serial.print("advertise ");

I got a "windSpeedCharacteristic is not subscribed" message because I closed the app on the iPad.

Later on, the second central Nano should also get the data from the peripheral device. I think the first Nano has to be disconnected before the second one can connect, but I could be wrong.

I'll clean up the central code and will then post it.

I've removed all the unnecessary code and added some Serial.print statements to make the terminal output easier to read.
I tested it with the Arduino (central device), but it didn't work. It loops after Line 117

  } else {
    Serial.println(" โ•โ•โ•โ•โ•โ•ฃSubscribedโ• โ•โ•โ•โ•โ•");
  }
  
  while (peripheral) {   // while the peripheral is connected
    if (windCharacteristic.valueUpdated()) {    // check if the value of the gesture characteristic has been updated

because there is no peripheral available.

Then I also tested with "nRF Connect" and this test was successful. Below you'll find the output from the terminal with additional comments.

  1. Peripheral device code
#include <Arduino.h>
#include <ArduinoBLE.h>

const char* BLE_Service_UUID_TrueWindSpeed         = "181a";  // Service         - Environmental Sensing Service  
const char* BLE_Characteristics_UUDI_TrueWindSpeed = "2a70";  // Characteristics - True Wind Speed 

BLEService environmentalService(BLE_Service_UUID_TrueWindSpeed); // Bluetoothยฎ Low Energy Binary Sensor Service
BLEBoolCharacteristic windSpeedCharacteristic(BLE_Characteristics_UUDI_TrueWindSpeed, BLERead | BLENotify);  // GATT
// BLEDescriptor Descriptor("beca6057-955c-4f8a-e1e3-56a1633f04b1","Descriptor");

bool oldWindSpeedLevel    = 0;           // last Wind Speed level reading from Anemometer
long previousMillis       = 0;           // last Wind Speed level was checked in before x millis
int checkWindCounter      = 0;
const int mds             = 5;           // measure duration in seconds
const float mts           = 2.5;         // max Anemometer turns per second
int pauseAfterWindMeasure = 30 * 1000;   // Pause after wind measurement in millis (sec * 1000 = msec)
const int pinReedSensor   = 8 ;          // REED Sensorport (Anemometer)

//โ•โ•โ•โ•โ• Function declarations โ•โ•โ•โ•โ•
// void updateWindLevel();
bool   readAnemometer();
String iif(bool check, String rString1, String rString2);
void   blePeripheralConnectHandler( BLEDevice central );
void   blePeripheralDisconnectHandler( BLEDevice central );
void   setupBLE_Environment();                                            // Setup Bluetooth Environment

String timeSinceStart()
{
  char text[20];
  unsigned int secondsSinceStart = millis()/1000;
  // Serial.println("currentMillis");Serial.println(secondsSinceStart);
  unsigned int seconds = secondsSinceStart % 60;
  unsigned int minutes = (secondsSinceStart - seconds) / 60;
  sprintf(text, "%d:%02d", minutes,seconds);
  return text;
}

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
  pinMode(pinReedSensor, INPUT_PULLDOWN);

  setupBLE_Environment();
}

void loop() 
{
  Serial.print(timeSinceStart());Serial.print(" ");
  BLE.advertise(); Serial.print("advertise "); // start advertising nochmals
  bool WindLevel = readAnemometer();
  BLEDevice central = BLE.central();  // wait for a Bluetoothยฎ Low Energy central

  Serial.print(" windSpeedCharacteristic is ");
  if (windSpeedCharacteristic.subscribed()) 
  { // set a new value , that well be pushed to subscribed Bluetoothยฎ Low Energy devices
    Serial.println("    SUBSCRIBED");
    windSpeedCharacteristic.writeValue(WindLevel);
  }
  else
  {
    Serial.println("not subscribed");
  }

  if (central)   // if a central is connected to the peripheral:
  {
    // while (central.connected())     // while the central is connected:
    // {
      // long currentMillis = millis();
      if(oldWindSpeedLevel != WindLevel)
        {
          Serial.print("change characteristics from ");Serial.print(oldWindSpeedLevel);Serial.print(" to ");Serial.println(WindLevel);
          windSpeedCharacteristic.writeValue(WindLevel);
        }
    // }
    oldWindSpeedLevel = WindLevel;
    delay(500);

    // If WindLevel is HIGH (stormy weather), it'll be HIGH for longer Time
    //  - Wait some time and then check Wind again.
    if(WindLevel) 
    {
      Serial.print("wait ");Serial.print(pauseAfterWindMeasure/1000);Serial.println(" seconds");
      delay (pauseAfterWindMeasure);
    }
  }
}

bool readAnemometer()
{
  int newState    = LOW;
  int oldState    = LOW;
  int windCounter = 0;
  bool WindSpeedLevel = LOW;  // or HIGH

  unsigned long endTime = millis() + (mds * 1000);
  
  while (endTime > millis() )  // Anemometer mds-Sekunden abfragen
  {
    newState = digitalRead(pinReedSensor);
    if(oldState == LOW && newState == HIGH)  // Bei jeder Umdrehung wird newState auf HIGH gesetzt, wenn der REED-Sensor aktiviert wird.
    { windCounter++; }
    // Serial.print(endTime);Serial.print(" - ");Serial.print(millis()); Serial.print(" newState = ");Serial.print(newState); Serial.print(" oldState = ");Serial.print(oldState); Serial.print(" WindCounter = "); Serial.println(windCounter);
    oldState = newState;
  }

  WindSpeedLevel = windCounter > (mts * mds);
  Serial.print(checkWindCounter); Serial.print(") Wind Speed is ");Serial.println(iif(WindSpeedLevel,"HIGH","LOW"));

  if(WindSpeedLevel)  // Wenn zuviel Wind - max erlaubte Umdrehungen pro Sekunde * Messdauer
  {
    checkWindCounter = 0;
  }
  else
  {
    checkWindCounter++;
  }
  return WindSpeedLevel;
}

String iif(bool check, String rString1, String rString2)
{
  String rValue = rString2;
  if (check)
  {
    rValue = rString1;
  }
  return rValue;
}

void blePeripheralConnectHandler( BLEDevice central )
{
//  digitalWrite( LED_BUILTIN, HIGH );
  digitalWrite(LEDB,HIGH);
  Serial.print( F ( "Connected to central: " ) );
  Serial.println( central.address() );
}

void blePeripheralDisconnectHandler( BLEDevice central )
{
  // digitalWrite( LED_BUILTIN, LOW );
  digitalWrite(LEDB,LOW);
  Serial.print( F( "Disconnected from central: " ) );
  Serial.println( central.address() );
}

void setupBLE_Environment()
{
 /*โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
   โ•‘ 1. Bluetooth starten                             โ•‘
   โ•‘ 2. Bluetooth konfigurieren                       โ•‘
   โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•*/

  // begin initialization
  while (!BLE.begin()) {
    // Serial.println("starting BLE failed!");
    digitalWrite(LED_BUILTIN,HIGH);
    delay(200);
    digitalWrite(LED_BUILTIN,LOW);
    // 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.setLocalName("Anemometer");
  BLE.setDeviceName("Anemometer");
  BLE.setAdvertisedService(environmentalService);                  // add the service UUID
  environmentalService.addCharacteristic(windSpeedCharacteristic); // add the Windlevel characteristic

  // windSpeedCharacteristic.addDescriptor(Descriptor);
  // BLE_Characteristics_UUDI_TrueWindSpeed.addDescriptor(Descriptor);   //  siehe Link (*1)
  // echoService.addCharacteristic(charac);

  BLE.addService(environmentalService);                            // Add the Enviromental service

  // set BLE event handlers
  BLE.setEventHandler( BLEConnected,    blePeripheralConnectHandler );
  BLE.setEventHandler( BLEDisconnected, blePeripheralDisconnectHandler );

  windSpeedCharacteristic.writeValue(oldWindSpeedLevel);           // 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 
   */

  BLE.advertise();  // start advertising

  Serial.println("Bluetoothยฎ device active, waiting for connections...");
}
  1. Central device code
#include <Arduino.h>
#include <ArduinoBLE.h>               // Bluetooth-Library laden

// โ•โ•โ•โ•โ• BlueTooth โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
const char* BLE_Service_UUID_TrueWindSpeed         = "181a";  // Service         - Environmental Sensing Service  
const char* BLE_Characteristics_UUDI_TrueWindSpeed = "2a70";  // Characteristics - True Wind Speed 

byte oldCommand = 0;

String iif(bool check, String rString1, String rString2);
void connectToPeripheral();
void getPeripheralData(BLEDevice peripheral);
String timeSinceStart();  // Create Timestring min:Sec (only for debugging)

void setup() 
{
  Serial.begin(9600);  // Kommunikation mit Serial Interface starten

  if (!BLE.begin()) {   // Bluetooth initialisieren
    Serial.println("* Starting Bluetoothยฎ Low Energy module failed!");
    while (1);
  } else {
    Serial.println("* Starting Bluetoothยฎ");
  }

  BLE.setLocalName("Nano 33 BLE (Central)"); 
  BLE.setDeviceName("Arduino Central");
  Serial.println("Arduino Nano 33 BLE Sense (Central Device)");
  BLE.scanForUuid(BLE_Service_UUID_TrueWindSpeed);

  BLEUnsignedCharCharacteristic windSpeedCharacteristic(BLE_Characteristics_UUDI_TrueWindSpeed,  BLERead | BLENotify); // remote clients will be able to get notifications if this characteristic changes
}

void loop() {
  Serial.print(timeSinceStart());Serial.print(" ");
  Serial.println("* starting ");
  connectToPeripheral();
}

// โ•โ•โ•โ•โ•โ•โ•โ• function connectToPeripheral() โ•โ•โ•โ•โ•โ•โ•โ•
void connectToPeripheral() {
  Serial.println("โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• connectToPeripheral() โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•");
  BLEDevice peripheral;
  int loopCounter = 0;
  do {
    loopCounter++;
    BLE.scanForUuid(BLE_Service_UUID_TrueWindSpeed);  // start scanning for peripherals
    peripheral = BLE.available();

    delay(50);
  } while (!peripheral && (loopCounter < 100));

  if(peripheral) { 
    Serial.print("+ + + + + + ");Serial.print(loopCounter);Serial.println(iif(loopCounter == 1," try"," tries") + " to find Peripheral");
  } else { 
    Serial.print("โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ Peripheral not found after ");Serial.print(loopCounter);Serial.println(iif(loopCounter == 1," try"," tries "));
  }

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

    BLE.stopScan();    // stop scanning
  
    getPeripheralData(peripheral);
  }
}

// โ•โ•โ•โ•โ•โ•โ•โ• function getPeripheralData() โ•โ•โ•โ•โ•โ•โ•โ•
void getPeripheralData(BLEDevice peripheral) {
  if (peripheral.connect()) {
    Serial.println("+ + + + + + Connected");
  } else {
    Serial.println("โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ Failed to connect! ");
    return;
  }
  // discover peripheral attributes
  Serial.println("Discovering attributes ...");
  if (peripheral.discoverAttributes()) {
    Serial.println("+ + + + + + Attributes discovered");
  } else {
    Serial.println("โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ Attribute discovery failed!");
    peripheral.disconnect();
    return;
  }

  BLECharacteristic windCharacteristic = peripheral.characteristic(BLE_Characteristics_UUDI_TrueWindSpeed);
  // if(windCharacteristic.subscribe())
  //   Serial.println("โ• โ• โ• โ• Subscribed โ• โ• โ• โ• ");

  Serial.print("Characteristics ");Serial.print(BLE_Characteristics_UUDI_TrueWindSpeed);Serial.print("` ... ");
  if (!windCharacteristic) {
    Serial.println("no Wind characteristic found!");
    peripheral.disconnect();
    return;
  } else if (!windCharacteristic.canSubscribe()) {
    Serial.println("Wind characteristic is not subscribable!");
    peripheral.disconnect();
    return;
  } else if (!windCharacteristic.subscribe()) {
    Serial.println("subscription failed!");
    peripheral.disconnect();
    return;
  } else {
    Serial.println(" โ•โ•โ•โ•โ•โ•ฃSubscribedโ• โ•โ•โ•โ•โ•");
  }
  
  while (peripheral) {   // while the peripheral is connected
    if (windCharacteristic.valueUpdated()) {    // check if the value of the gesture characteristic has been updated
      byte command;
      windCharacteristic.readValue(command);
      if (oldCommand == command) {
        continue;
      }

      oldCommand = command;
       
      Serial.print(":");
      continue;
    }
    Serial.print(" no way out ");
    peripheral.disconnect();
    delay(50);
  }
}

// โ•โ•โ•โ•โ•โ•โ•โ• function iif() โ•โ•โ•โ•โ•โ•โ•โ•
String iif(bool check, String rString1, String rString2) {
  String rValue = rString2;
  if (check) {
    rValue = rString1;
  }
  return rValue;
}

// โ•โ•โ•โ•โ•โ•โ•โ• function timeSinceStart() โ•โ•โ•โ•โ•โ•โ•โ•
String timeSinceStart() {
  char text[20];
  unsigned int secondsSinceStart = millis()/1000;
  // Serial.println("currentMillis");Serial.println(secondsSinceStart);
  unsigned int seconds = secondsSinceStart % 60;
  unsigned int minutes = (secondsSinceStart - seconds) / 60;
  sprintf(text, "%d:%02d", minutes,seconds);
  return text;
}
  1. Test with nRF Connect - Terminal output from peripheral device.
--- Terminal on COM23 | 9600 8-N-1
--- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time
--- More details at https://bit.ly/pio-monitor-filters
--- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H
0) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
0:05 advertise 1) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
0:10 advertise 2) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
0:15 advertise 3) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
======> Here I have the "nRF Connect" APP started 
0:20 advertise 4) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
0:25 advertise 5) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
0:30 advertise 6) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
======> In the APP [Connect] button pressed
0:35 advertise 7) Wind Speed is LOW
Connected to central: 63:95:b9:2f:5b:29
 windSpeedCharacteristic is not subscribed
0:41 advertise 8) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
0:46 advertise 9) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
0:52 advertise 10) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
0:57 advertise 11) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
======> In the APP [subscribe] button pressed (Arrow with underline)
1:03 advertise 12) Wind Speed is LOW
 windSpeedCharacteristic is     SUBSCRIBED
1:08 advertise 13) Wind Speed is LOW
 windSpeedCharacteristic is     SUBSCRIBED
1:14 advertise 14) Wind Speed is LOW
 windSpeedCharacteristic is     SUBSCRIBED
1:19 advertise 15) Wind Speed is LOW
 windSpeedCharacteristic is     SUBSCRIBED
======> Fan started
1:25 advertise 16) Wind Speed is LOW
 windSpeedCharacteristic is     SUBSCRIBED
1:30 advertise 17) Wind Speed is HIGH
 windSpeedCharacteristic is     SUBSCRIBED
change characteristics from 0 to 1
wait 30 seconds
2:06 advertise 0) Wind Speed is HIGH
 windSpeedCharacteristic is     SUBSCRIBED
wait 30 seconds
======> Fan stopped
2:42 advertise 0) Wind Speed is LOW
 windSpeedCharacteristic is     SUBSCRIBED
change characteristics from 1 to 0
2:47 advertise 1) Wind Speed is LOW
 windSpeedCharacteristic is     SUBSCRIBED
======> to unsubscribe, in the APP [subscribe] button pressed 
2:53 advertise 2) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
2:58 advertise 3) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
3:04 advertise 4) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
======> APP closed
3:09 advertise 5) Wind Speed is LOW
Disconnected from central: 63:95:b9:2f:5b:29
 windSpeedCharacteristic is not subscribed
3:14 advertise 6) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
3:19 advertise 7) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
3:24 advertise 8) Wind Speed is LOW
 windSpeedCharacteristic is not subscribed
  1. Test central device - Terminal output on the central
--- Terminal on COM7 | 9600 8-N-1
--- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time
--- More details at https://bit.ly/pio-monitor-filters
--- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H
โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ Attribute discovery failed!
0:09 * starting
โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• connectToPeripheral() โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
+ + + + + + 2 tries to find Peripheral

Found  d8:3f:78:15:d5:64 'Anemometer' Characteristics Count = 0 181a
+ + + + + + Connected     
Discovering attributes ...
โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ Attribute discovery failed!
0:25 * starting 
โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• connectToPeripheral() โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
+ + + + + + 2 tries to find Peripheral

Found  d8:3f:78:15:d5:64 'Anemometer' Characteristics Count = 0 181a
+ + + + + + Connected
Discovering attributes ...
โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ Attribute discovery failed!
0:36 * starting 
โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• connectToPeripheral() โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
+ + + + + + 2 tries to find Peripheral

Found  d8:3f:78:15:d5:64 'Anemometer' Characteristics Count = 0 181a
+ + + + + + Connected
Discovering attributes ...
โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ Attribute discovery failed!
0:47 * starting 
โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• connectToPeripheral() โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
+ + + + + + 2 tries to find Peripheral

Found  d8:3f:78:15:d5:64 'Anemometer' Characteristics Count = 0 181a
+ + + + + + Connected
Discovering attributes ...
โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ Attribute discovery failed!
0:53 * starting 
โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• connectToPeripheral() โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
+ + + + + + 2 tries to find Peripheral

Found  d8:3f:78:15:d5:64 'Anemometer' Characteristics Count = 0 181a
+ + + + + + Connected
Discovering attributes ...
+ + + + + + Attributes discovered
Characteristics 2a70` ...  โ•โ•โ•โ•โ•โ•ฃSubscribedโ• โ•โ•โ•โ•โ•
 no way out  no way out  no way out  no way out  no way out  no way out  no way out  no way out  no way out  no way out  no way out  no way out  no way out  no way out  no way 
out  no way out  

I figured out, if I remove "if (windCharacteristic.valueUpdated()"

  while (peripheral1) {   // while the peripheral is connected
    // if (windCharacteristic.valueUpdated()) {    // check if the value of the gesture characteristic has been updated
      byte command;
      Serial.println();Serial.print(timeSinceStart());Serial.print(" readValue ");
      windCharacteristic.readValue(command);
      if (oldCommand == command) {
        continue;
      }

      oldCommand = command;
       
      Serial.print(":");Serial.println(command);
      continue;
    // }
    peripheral1.disconnect();
    delay(50);
  }

the readValue() does its job and give me the changed value back.
But this could not be the sollution at all.
I have to investigate more.

These two pieces of code seem to play well together. I've added some additional printouts to help see what's going on when the old command == command in the Central. I've managed to have my phone and the Nano33BLE central connected to the peripheral at the same time, so I don't think you will have an issue with that part of the project.

Peripheral Sketch

#include <Arduino.h>
#include <ArduinoBLE.h>

const char* BLE_Service_UUID_TrueWindSpeed         = "181a";  // Service         - Environmental Sensing Service  
const char* BLE_Characteristics_UUDI_TrueWindSpeed = "2a70";  // Characteristics - True Wind Speed 

BLEService environmentalService(BLE_Service_UUID_TrueWindSpeed); // Bluetoothยฎ Low Energy Binary Sensor Service
BLEBoolCharacteristic windSpeedCharacteristic(BLE_Characteristics_UUDI_TrueWindSpeed, BLERead | BLENotify);  // GATT
// BLEDescriptor Descriptor("beca6057-955c-4f8a-e1e3-56a1633f04b1","Descriptor");

bool oldWindSpeedLevel    = 0;           // last Wind Speed level reading from Anemometer
long previousMillis       = 0;           // last Wind Speed level was checked in before x millis
int checkWindCounter      = 0;
const int mds             = 5;           // measure duration in seconds
const float mts           = 2.5;         // max Anemometer turns per second
int pauseAfterWindMeasure = 30 * 1000;   // Pause after wind measurement in millis (sec * 1000 = msec)
const int pinReedSensor   = 8 ;          // REED Sensorport (Anemometer)

//โ•โ•โ•โ•โ• Function declarations โ•โ•โ•โ•โ•
// void updateWindLevel();
bool   readAnemometer();
String iif(bool check, String rString1, String rString2);
void   blePeripheralConnectHandler( BLEDevice central );
void   blePeripheralDisconnectHandler( BLEDevice central );
void   setupBLE_Environment();                                            // Setup Bluetooth Environment

String timeSinceStart()
{
  char text[20];
  unsigned int secondsSinceStart = millis()/1000;
  // Serial.println("currentMillis");Serial.println(secondsSinceStart);
  unsigned int seconds = secondsSinceStart % 60;
  unsigned int minutes = (secondsSinceStart - seconds) / 60;
  sprintf(text, "%d:%02d", minutes,seconds);
  return text;
}

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
  pinMode(pinReedSensor, INPUT_PULLDOWN);

  setupBLE_Environment();
}

void loop() 
{
  Serial.print(timeSinceStart());Serial.print(" ");
  BLE.advertise(); Serial.print("advertise "); // start advertising nochmals
  bool WindLevel = readAnemometer();
  BLEDevice central = BLE.central();  // wait for a Bluetoothยฎ Low Energy central

  Serial.print(" windSpeedCharacteristic is ");
  if (windSpeedCharacteristic.subscribed()) 
  { // set a new value , that well be pushed to subscribed Bluetoothยฎ Low Energy devices
    Serial.println("    SUBSCRIBED");
    windSpeedCharacteristic.writeValue(WindLevel);
  }
  else
  {
    Serial.println("not subscribed");
  }

  if (central)   // if a central is connected to the peripheral:
  {
    // while (central.connected())     // while the central is connected:
    // {
      // long currentMillis = millis();
      if(oldWindSpeedLevel != WindLevel)
        {
          Serial.print("change characteristics from ");Serial.print(oldWindSpeedLevel);Serial.print(" to ");Serial.println(WindLevel);
          windSpeedCharacteristic.writeValue(WindLevel);
        }
    // }
    oldWindSpeedLevel = WindLevel;
    delay(500);

    // If WindLevel is HIGH (stormy weather), it'll be HIGH for longer Time
    //  - Wait some time and then check Wind again.
    if(WindLevel) 
    {
      Serial.print("wait ");Serial.print(pauseAfterWindMeasure/1000);Serial.println(" seconds");
      delay (pauseAfterWindMeasure);
    }
  }
}

bool readAnemometer()
{
  int newState    = LOW;
  int oldState    = LOW;
  int windCounter = 0;
  bool WindSpeedLevel = LOW;  // or HIGH

  unsigned long endTime = millis() + (mds * 1000);
  
  while (endTime > millis() )  // Anemometer mds-Sekunden abfragen
  {
    newState = digitalRead(pinReedSensor);
    if(oldState == LOW && newState == HIGH)  // Bei jeder Umdrehung wird newState auf HIGH gesetzt, wenn der REED-Sensor aktiviert wird.
    { windCounter++; }
    // Serial.print(endTime);Serial.print(" - ");Serial.print(millis()); Serial.print(" newState = ");Serial.print(newState); Serial.print(" oldState = ");Serial.print(oldState); Serial.print(" WindCounter = "); Serial.println(windCounter);
    oldState = newState;
  }

  WindSpeedLevel = windCounter > (mts * mds);
  Serial.print(checkWindCounter); Serial.print(") Wind Speed is ");Serial.println(iif(WindSpeedLevel,"HIGH","LOW"));

  if(WindSpeedLevel)  // Wenn zuviel Wind - max erlaubte Umdrehungen pro Sekunde * Messdauer
  {
    checkWindCounter = 0;
  }
  else
  {
    checkWindCounter++;
  }
  return WindSpeedLevel;
}

String iif(bool check, String rString1, String rString2)
{
  String rValue = rString2;
  if (check)
  {
    rValue = rString1;
  }
  return rValue;
}

void blePeripheralConnectHandler( BLEDevice central )
{
//  digitalWrite( LED_BUILTIN, HIGH );
  digitalWrite(LEDB,HIGH);
  Serial.print( F ( "Connected to central: " ) );
  Serial.println( central.address() );
}

void blePeripheralDisconnectHandler( BLEDevice central )
{
  // digitalWrite( LED_BUILTIN, LOW );
  digitalWrite(LEDB,LOW);
  Serial.print( F( "Disconnected from central: " ) );
  Serial.println( central.address() );
}

void setupBLE_Environment()
{
 /*โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
   โ•‘ 1. Bluetooth starten                             โ•‘
   โ•‘ 2. Bluetooth konfigurieren                       โ•‘
   โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•*/

  // begin initialization
  while (!BLE.begin()) {
    // Serial.println("starting BLE failed!");
    digitalWrite(LED_BUILTIN,HIGH);
    delay(200);
    digitalWrite(LED_BUILTIN,LOW);
    // 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.setLocalName("Anemometer");
  BLE.setDeviceName("Anemometer");
  BLE.setAdvertisedService(environmentalService);                  // add the service UUID
  environmentalService.addCharacteristic(windSpeedCharacteristic); // add the Windlevel characteristic

  // windSpeedCharacteristic.addDescriptor(Descriptor);
  // BLE_Characteristics_UUDI_TrueWindSpeed.addDescriptor(Descriptor);   //  siehe Link (*1)
  // echoService.addCharacteristic(charac);

  BLE.addService(environmentalService);                            // Add the Enviromental service

  // set BLE event handlers
  BLE.setEventHandler( BLEConnected,    blePeripheralConnectHandler );
  BLE.setEventHandler( BLEDisconnected, blePeripheralDisconnectHandler );

  windSpeedCharacteristic.writeValue(oldWindSpeedLevel);           // 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 
   */

  BLE.advertise();  // start advertising

  Serial.println("Bluetoothยฎ device active, waiting for connections...");
}

Central

#include <Arduino.h>
#include <ArduinoBLE.h>               // Bluetooth-Library laden

// โ•โ•โ•โ•โ• BlueTooth โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
const char* BLE_Service_UUID_TrueWindSpeed         = "181a";  // Service         - Environmental Sensing Service
const char* BLE_Characteristics_UUDI_TrueWindSpeed = "2a70";  // Characteristics - True Wind Speed

byte oldCommand = 0;

String iif(bool check, String rString1, String rString2);
void connectToPeripheral();
void getPeripheralData(BLEDevice peripheral);
String timeSinceStart();  // Create Timestring min:Sec (only for debugging)

void setup()
{
  Serial.begin(9600);  // Kommunikation mit Serial Interface starten
  while (!Serial);
  if (!BLE.begin()) {   // Bluetooth initialisieren
    Serial.println("* Starting Bluetoothยฎ Low Energy module failed!");
    while (1);
  } else {
    Serial.println("* Starting Bluetoothยฎ");
  }

  BLE.setLocalName("Nano 33 BLE (Central)");
  BLE.setDeviceName("Arduino Central");
  Serial.println("Arduino Nano 33 BLE Sense (Central Device)");
  BLE.scanForUuid(BLE_Service_UUID_TrueWindSpeed);

  BLEUnsignedCharCharacteristic windSpeedCharacteristic(BLE_Characteristics_UUDI_TrueWindSpeed,  BLERead | BLENotify); // remote clients will be able to get notifications if this characteristic changes
}

void loop() {
  Serial.print(timeSinceStart()); Serial.print(" ");
  Serial.println("* starting ");
  connectToPeripheral();
}

// โ•โ•โ•โ•โ•โ•โ•โ• function connectToPeripheral() โ•โ•โ•โ•โ•โ•โ•โ•
void connectToPeripheral() {
  Serial.println("โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• connectToPeripheral() โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•");
  BLEDevice peripheral;
  int loopCounter = 0;
  do {
    loopCounter++;
    BLE.scanForUuid(BLE_Service_UUID_TrueWindSpeed);  // start scanning for peripherals
    peripheral = BLE.available();

    delay(50);
  } while (!peripheral && (loopCounter < 100));

  if (peripheral) {
    Serial.print("+ + + + + + "); Serial.print(loopCounter); Serial.println(iif(loopCounter == 1, " try", " tries") + " to find Peripheral");
  } else {
    Serial.print("โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ Peripheral not found after "); Serial.print(loopCounter); Serial.println(iif(loopCounter == 1, " try", " tries "));
  }

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

    BLE.stopScan();    // stop scanning

    getPeripheralData(peripheral);
  }
}

// โ•โ•โ•โ•โ•โ•โ•โ• function getPeripheralData() โ•โ•โ•โ•โ•โ•โ•โ•
void getPeripheralData(BLEDevice peripheral) {
  if (peripheral.connect()) {
    Serial.println("+ + + + + + Connected");
  } else {
    Serial.println("โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ Failed to connect! ");
    return;
  }
  // discover peripheral attributes
  Serial.println("Discovering attributes ...");
  if (peripheral.discoverAttributes()) {
    Serial.println("+ + + + + + Attributes discovered");
  } else {
    Serial.println("โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ Attribute discovery failed!");
    peripheral.disconnect();
    return;
  }

  BLECharacteristic windCharacteristic = peripheral.characteristic(BLE_Characteristics_UUDI_TrueWindSpeed);
   if(windCharacteristic.subscribe())
     Serial.println("โ• โ• โ• โ• Subscribed โ• โ• โ• โ• ");

  Serial.print("Characteristics "); Serial.print(BLE_Characteristics_UUDI_TrueWindSpeed); Serial.print("` ... ");
  if (!windCharacteristic) {
    Serial.println("no Wind characteristic found!");
    peripheral.disconnect();
    return;
  } else if (!windCharacteristic.canSubscribe()) {
    Serial.println("Wind characteristic is not subscribable!");
    peripheral.disconnect();
    return;
  } else if (!windCharacteristic.subscribe()) {
    Serial.println("subscription failed!");
    peripheral.disconnect();
    return;
  } else {
    Serial.println(" โ•โ•โ•โ•โ•โ•ฃSubscribedโ• โ•โ•โ•โ•โ•");
  }

  while (peripheral) {// while the peripheral is connected
    if (windCharacteristic.valueUpdated()) {    // check if the value of the gesture characteristic has been updated
      byte command;
      windCharacteristic.readValue(command);
      if (oldCommand == command) {
        //continue;
        Serial.print(oldCommand);
        Serial.print(' ');
        static byte sameCnt = 0;
        sameCnt++;
        if(sameCnt == 10)
        {
          sameCnt = 0;
          Serial.println();
        }
      }
      else
      {
        Serial.println();
        Serial.print("Command Updated New Value: ");
        Serial.println(command);
        //take actions based on changed command
      }

      oldCommand = command;
    }
    delay(50);
  }
}

// โ•โ•โ•โ•โ•โ•โ•โ• function iif() โ•โ•โ•โ•โ•โ•โ•โ•
String iif(bool check, String rString1, String rString2) {
  String rValue = rString2;
  if (check) {
    rValue = rString1;
  }
  return rValue;
}

// โ•โ•โ•โ•โ•โ•โ•โ• function timeSinceStart() โ•โ•โ•โ•โ•โ•โ•โ•
String timeSinceStart() {
  char text[20];
  unsigned int secondsSinceStart = millis() / 1000;
  // Serial.println("currentMillis");Serial.println(secondsSinceStart);
  unsigned int seconds = secondsSinceStart % 60;
  unsigned int minutes = (secondsSinceStart - seconds) / 60;
  sprintf(text, "%d:%02d", minutes, seconds);
  return text;
}

It was just the 'continue' command?
Thank you for your help @cattledog.
I uploaded the code and the test was successful.
Now I can try to get out of the "while loop" and put the other stuff for moving the solar panel back into the code.

โ•โ•โ•โ•โ•โ•>  Central device <=====                                          โ”‚โ•โ•โ•โ•โ•โ•> Peripheral device
* Starting Bluetoothยฎ                                                   โ”‚
Arduino Nano 33 BLE Sense (Central Device)                              โ”‚
0:09 * starting                                                         โ”‚2) Wind Speed is LOW
โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• connectToPeripheral() โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•            โ”‚Connected to central: 86:32:11:35:ad:2b
+ + + + + + 1 try to find Peripheral                                    โ”‚ windSpeedCharacteristic is not subscribed
                                                                        โ”‚0:15 advertise 3) Wind Speed is LOW
Found  d8:3f:78:15:d5:64 'Anemometer' Characteristics Count = 0 181a    โ”‚ windSpeedCharacteristic is not subscribed
+ + + + + + Connected                                                   โ”‚0:21 advertise 4) Wind Speed is LOW
Discovering attributes ...                                              โ”‚ windSpeedCharacteristic is not subscribed
โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ Attribute discovery failed!                                 โ”‚
0:25 * starting                                                         โ”‚0:26 Disconnected from central: 86:32:11:35:ad:2b
โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• connectToPeripheral() โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•            โ”‚Connected to central: 86:32:11:35:ad:2b
+ + + + + + 2 tries to find Peripheral                                  โ”‚advertise 5) Wind Speed is LOW
                                                                        โ”‚ windSpeedCharacteristic is not subscribed
Found  d8:3f:78:15:d5:64 'Anemometer' Characteristics Count = 0 181a    โ”‚
+ + + + + + Connected                                                   โ”‚
Discovering attributes ...                                              โ”‚
โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ Attribute discovery failed!                                 โ”‚
0:31 * starting                                                         โ”‚
โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• connectToPeripheral() โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•            โ”‚0:32 Disconnected from central: 86:32:11:35:ad:2b
+ + + + + + 4 tries to find Peripheral                                  โ”‚Connected to central: 86:32:11:35:ad:2b
                                                                        โ”‚advertise 6) Wind Speed is LOW
Found  d8:3f:78:15:d5:64 'Anemometer' Characteristics Count = 0 181a    โ”‚ windSpeedCharacteristic is not subscribed
+ + + + + + Connected                                                   โ”‚
Discovering attributes ...                                              โ”‚
โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ Attribute discovery failed!                                 โ”‚
0:36 * starting                                                         โ”‚
โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• connectToPeripheral() โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•            โ”‚0:37 Disconnected from central: 86:32:11:35:ad:2b
+ + + + + + 2 tries to find Peripheral                                  โ”‚Connected to central: 86:32:11:35:ad:2b
                                                                        โ”‚advertise 7) Wind Speed is LOW
Found  d8:3f:78:15:d5:64 'Anemometer' Characteristics Count = 0 181a    โ”‚ windSpeedCharacteristic is     SUBSCRIBED
+ + + + + + Connected                                                   โ”‚0:44 advertise 8) Wind Speed is LOW
Discovering attributes ...                                              โ”‚ windSpeedCharacteristic is     SUBSCRIBED
+ + + + + + Attributes discovered                                       โ”‚0:49 advertise 9) Wind Speed is LOW
โ• โ• โ• โ• Subscribed โ• โ• โ• โ•                                              โ”‚ windSpeedCharacteristic is     SUBSCRIBED
Characteristics 2a70` ...  โ•โ•โ•โ•โ•โ•ฃSubscribedโ• โ•โ•โ•โ•โ•                       โ”‚0:55 advertise 10) Wind Speed is LOW
0 0 0 0 0 0 0 0                                                         โ”‚ windSpeedCharacteristic is     SUBSCRIBED
                                                                        โ”‚1:01 advertise 11) Wind Speed is LOW
                                                                        โ”‚ windSpeedCharacteristic is     SUBSCRIBED
                                                                        โ”‚1:06 advertise 12) Wind Speed is LOW
                                                                        โ”‚ windSpeedCharacteristic is     SUBSCRIBED
                                                                        โ”‚1:12 advertise 13) Wind Speed is LOW
                                                                        โ”‚ windSpeedCharacteristic is     SUBSCRIBED
                                                                        โ”‚1:17 advertise 14) Wind Speed is LOW
                                                                        โ”‚ windSpeedCharacteristic is     SUBSCRIBED
                                         โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•> Fan started <โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
                                                                        โ”‚1:23 advertise 15) Wind Speed is HIGH
1:27 Command Updated New Value: 1                                       โ”‚ windSpeedCharacteristic is     SUBSCRIBED
1 1                                                                     โ”‚change characteristics from 0 to 1
                                                                        โ”‚wait 30 seconds
                                                                        โ”‚1:58 advertise 0) Wind Speed is HIGH
                                                                        โ”‚ windSpeedCharacteristic is     SUBSCRIBED
                                                                        โ”‚wait 30 seconds
                                                                        โ”‚2:34 advertise 0) Wind Speed is HIGH
                                                                        โ”‚ windSpeedCharacteristic is     SUBSCRIBED
                                         โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•> Fan stoped <โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
                                                                        โ”‚ wait 30 seconds
                                                                        โ”‚ 3:09 advertise 0) Wind Speed is LOW
                                                                        โ”‚  windSpeedCharacteristic is     SUBSCRIBED
                                                                        โ”‚ change characteristics from 1 to 0
3:14 Command Updated New Value: 0                                       โ”‚ 3:15 advertise 1) Wind Speed is LOW
0 0 0 0 0 0 0 0 0 0                                                     โ”‚  windSpeedCharacteristic is     SUBSCRIBED
                                                                        โ”‚ 3:21 advertise 2) Wind Speed is LOW
                                                                        โ”‚  windSpeedCharacteristic is     SUBSCRIBED
                                                                        โ”‚ 3:26 advertise 3) Wind Speed is LOW
                                                                        โ”‚  windSpeedCharacteristic is     SUBSCRIBED
                                                                        โ”‚ 3:32 advertise 4) Wind Speed is LOW
                                                                        โ”‚  windSpeedCharacteristic is     SUBSCRIBED
                                                                        โ”‚ 3:37 advertise 5) Wind Speed is LOW
                                                                        โ”‚  windSpeedCharacteristic is     SUBSCRIBED
                                                                        โ”‚ 3:43 advertise 6) Wind Speed is LOW
                                                                        โ”‚  windSpeedCharacteristic is     SUBSCRIBED
                                                                        โ”‚ 3:48 advertise 7) Wind Speed is LOW
                                                                        โ”‚  windSpeedCharacteristic is     SUBSCRIBED
                                                                        โ”‚ 3:54 advertise 8) Wind Speed is LOW
                                                                        โ”‚  windSpeedCharacteristic is     SUBSCRIBED
                                                                        โ”‚ 3:59 advertise 9) Wind Speed is LOW
                                                                        โ”‚  windSpeedCharacteristic is     SUBSCRIBED
                                                                        โ”‚ 4:05 advertise 10) Wind Speed is LOW
                                                                        โ”‚  windSpeedCharacteristic is     SUBSCRIBED
                                                                        โ”‚ 4:10 advertise 11) Wind Speed is LOW
                                                                        โ”‚  windSpeedCharacteristic is     SUBSCRIBED
                                                                        โ”‚ 4:16 advertise 12) Wind Speed is LOW
                                                                        โ”‚  windSpeedCharacteristic is     SUBSCRIBED
                                                                        โ”‚ 4:21 advertise 13) Wind Speed is LOW

Hello
I give up the project I described at the beginning.
After another two weeks of searching, and this day after day, I found no solution. I have only found references that want to connect two peripheral devices to several central devices. I have found similar entries before, but they did not contain a solution that I could use or I don't anderstand it. Some of them didn't even get an answer, which leads me to believe that a solution is not so easy to realise.
As the anemometer is to be powered by batteries or button cells, my intention was to find the most efficient and power-saving solution. I think, if the central devices have periodicaly to reconnect, that's not energy saving.
I probably misunderstood the term "subcribe". I thought I could permanently connect (subscribe) the two solar panels (Arduino Nano 33 BLE) to the anemometer (Arduino Nano 33 IoT or Arduino Nano 33 BLE) and then, when the anemometer reports strong wind via Notify (changing the characteristics value from 0 to 1), react directly to it and move the panels to the horizontal position. The two central devices have the main task of following the sun and aligning the panels, which works well so far.

Thanks for the help.
PS: Sorry, if my description is not clear enough but my native language is german.

After another two weeks of searching, and this day after day, I found no solution.

I'm sorry to hear that you are having difficulties, but I'm not certain that I understand your issues.

In my previous testing I could have two central devices(one phone, one Nano 33 BLE) connected and subscribed to one peripheral. Can you replicate that with two Nano33 BLE centrals?

It's possible that there may be a different architecture which will work better for you than the two subscriptions. You may be able to place the anerometer date in the manufacturer data section of the advertising of the peripheral and extract it in two centrals without the connection and subscription.

As the anemometer is to be powered by batteries or button cells, my intention was to find the most efficient and power-saving solution. I think, if the central devices have periodically to reconnect, that's not energy saving.

BLE is designed for low energy, and battery powered operation. I'm not clear if the power used by the peripheral is dependent upon centrals being connected or not, the energy cost of reconnection by the central, and the data being read by the central after subscription/notification. Have you taken measurements of the current draw of the peripheral under different scenarios. How much is used by advertising? Have you compared notification to just being read periodically?

If you don't use BLE to send the data from the anerometer, is there a different methodology which will work to tell you that you need to level the panels in the wind?

One question I have is do you really need two centrals to control the panel positions? Could one Nano33 BLE do the job?

I naturally had tunnel vision on my intended solution. Thanks for the tip.
I will try to get the data in another way.
One possibility would be to connect just one Arduino Nano 33 BLE to the anemometer and configure the second one to get the data from the first one.

No, I haven't tested that, I once connected it to a power bank, but due to the low power consumption, it switched off after a short time. I had actually planned to test it with batteries when everything is working and then decide about the capacity and size. Perhaps this is a bad idee.

At the moment I haven't think about another solution but perhaps it is possible to establish a connection to HomeMatic and Home Assistant. But I don't know how Homeassistant and BLE work together.

The solar panels are moved into the appropriate position using linear motors. As the motors are not synchronised and they are from different manufacturers, this is not really possible. Even a slight deviation in the power supply changes the speed of the motors. I was able to purchase these motors at a favourable price and so, one of them has as peed from ~5mm/s and another has ~14mm/s.

Here are the result of the test did today:

I switch on the peripheral device.
Then I start the first Nano.
It establishes the connection, then disconnects again, only to re-establish it seconds later, which happens continuously.
Now I start the second Nano.
This also immediately establishes the connection, only to immediately disconnect and re-establish it again.
Both are now in the loop establish / disconnect / establish . . .

In my opinion, this behaviour is caused by the attribute discovery, which fails.
But what is the reason for the attribute discovery failing? I could not figure out what the reason is.

(00:15:00) I connect the iPad with nRF Connect to the peripheral device - The connection has been established, but I do not receive a message on the serial monitor (blePeripheralConnectHandler Connected to central: xx:xx:xx:xx:xx:xx:xx), and the loops described above are no longer present.

(00:21:00) After starting, I switch on subscription on the iPad, which is immediately confirmed with the message "21:06 windSpeedCharacteristic is SUBSCRIBED". - that's OK

(00:23:00) I switch off subscription again - message: "23:07 windSpeedCharacteristic is not subscribed" - that's OK

(00:24:00) I disconnect from the iPad "24:02 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64" - Strange; Why this one? This is the address form peripheral device 1?

(00:27:00) Establishing a connection to the Android phone - No message about a successful connection. Establishing the connection no longer seems to work, as the phone immediately switches back to the Disconnected status.

(00:34:00) Establishing the connection to the iPad - Again, no message that the connection could be established and the iPad cancels the connection establishment.
On a second attempt, the connection was re-established, but here too I no longer receive any indication (from the serial monitor of the peripheral device) of a functioning connection. Subscribe no longer supplies any data.

(00:43:00) Starting Serial Monitor on PC for central device.

--- Terminal on COM9 | 9600 8-N-1
--- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time
--- More details at https://bit.ly/pio-monitor-filters
--- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H
โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ Attribute discovery failed! 
42:11 * starting
โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• connectToPeripheral() โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
+ + + + + + 2 tries to find Peripheral

Found  d4:d4:da:4e:7b:8e 'Anemometer' Characteristics Count = 0 181a
+ + + + + + Connected     
Discovering attributes ...
โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ Attribute discovery failed!
42:22 * starting 
:
:
:

This is the output from the peripheral device

--- Terminal on COM26 | 9600 8-N-1
--- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time
--- More details at https://bit.ly/pio-monitor-filters
--- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H
0:10 1) Wind Speed is LOW
0:10 windSpeedCharacteristic is not subscribed
0:10 advertise
0:15 2) Wind Speed is LOW
0:15 windSpeedCharacteristic is not subscribed
0:15 advertise
:
: same message as above several times
:
0:56 10) Wind Speed is LOW
0:56 windSpeedCharacteristic is not subscribed
0:56 advertise
1:01 11) Wind Speed is LOW
1:01 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
1:01 windSpeedCharacteristic is not subscribed
1:01 advertise
1:06 12) Wind Speed is LOW
1:06 windSpeedCharacteristic is not subscribed
1:07 advertise
1:07 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
1:12 13) Wind Speed is LOW
1:12 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
1:12 windSpeedCharacteristic is not subscribed
1:12 advertise
1:17 14) Wind Speed is LOW
1:17 windSpeedCharacteristic is not subscribed
1:18 advertise
1:23 15) Wind Speed is LOW
1:23 windSpeedCharacteristic is not subscribed
1:23 advertise
1:28 16) Wind Speed is LOW
1:28 windSpeedCharacteristic is not subscribed
1:29 advertise
1:29 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
1:29 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
1:34 17) Wind Speed is LOW
1:34 windSpeedCharacteristic is not subscribed
1:34 advertise
1:39 18) Wind Speed is LOW
1:39 windSpeedCharacteristic is not subscribed
1:40 advertise
1:40 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
1:40 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
1:45 19) Wind Speed is LOW
1:45 windSpeedCharacteristic is not subscribed
1:45 advertise
1:45 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
1:45 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
1:50 20) Wind Speed is LOW
1:50 windSpeedCharacteristic is not subscribed
1:51 advertise
1:56 21) Wind Speed is LOW
1:56 windSpeedCharacteristic is not subscribed
1:56 advertise
1:56 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
2:01 22) Wind Speed is LOW
2:01 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
2:01 windSpeedCharacteristic is not subscribed
2:02 advertise
2:07 23) Wind Speed is LOW
2:07 windSpeedCharacteristic is not subscribed
2:07 advertise
2:07 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
2:12 24) Wind Speed is LOW
2:12 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
2:12 windSpeedCharacteristic is not subscribed
2:13 advertise
2:18 25) Wind Speed is LOW
2:18 windSpeedCharacteristic is not subscribed
2:18 advertise
2:23 26) Wind Speed is LOW
2:23 windSpeedCharacteristic is not subscribed
2:24 advertise
2:24 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
2:24 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
2:29 27) Wind Speed is LOW
2:29 windSpeedCharacteristic is not subscribed
2:29 advertise
2:34 28) Wind Speed is LOW
2:34 windSpeedCharacteristic is not subscribed
2:35 advertise
2:40 29) Wind Speed is LOW
2:40 windSpeedCharacteristic is not subscribed
2:40 advertise
2:40 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
2:40 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
2:45 30) Wind Speed is LOW
2:45 windSpeedCharacteristic is not subscribed
2:46 advertise
2:46 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
2:46 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
2:51 31) Wind Speed is LOW
2:51 windSpeedCharacteristic is not subscribed
2:51 advertise
2:56 32) Wind Speed is LOW
2:56 windSpeedCharacteristic is not subscribed
2:57 advertise
2:57 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
2:57 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
3:02 33) Wind Speed is LOW
3:02 windSpeedCharacteristic is not subscribed
3:02 advertise
3:02 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
3:02 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
3:07 34) Wind Speed is LOW
3:07 windSpeedCharacteristic is not subscribed
3:08 advertise
3:08 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
3:08 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
3:13 35) Wind Speed is LOW
3:13 windSpeedCharacteristic is not subscribed
3:13 advertise
3:18 36) Wind Speed is LOW
3:18 windSpeedCharacteristic is not subscribed
3:19 advertise
3:24 37) Wind Speed is LOW
3:24 windSpeedCharacteristic is not subscribed
3:24 advertise
3:24 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
3:24 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
3:29 38) Wind Speed is LOW
3:29 windSpeedCharacteristic is not subscribed
3:30 advertise
3:35 39) Wind Speed is LOW
3:35 windSpeedCharacteristic is not subscribed
3:35 advertise
3:35 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
3:40 40) Wind Speed is LOW
3:40 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
3:40 windSpeedCharacteristic is not subscribed
3:41 advertise
3:41 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
3:46 41) Wind Speed is LOW
3:46 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
3:46 windSpeedCharacteristic is not subscribed
3:46 advertise
3:51 42) Wind Speed is LOW
3:51 windSpeedCharacteristic is not subscribed
3:52 advertise
3:57 43) Wind Speed is LOW
3:57 windSpeedCharacteristic is not subscribed
3:57 advertise
3:57 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
3:57 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
4:02 44) Wind Speed is LOW
4:02 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
4:02 windSpeedCharacteristic is not subscribed
4:03 advertise
4:03 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
4:08 45) Wind Speed is LOW
4:08 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
4:08 windSpeedCharacteristic is not subscribed
4:08 advertise
4:08 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
4:13 46) Wind Speed is LOW
4:13 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
4:13 windSpeedCharacteristic is not subscribed
4:14 advertise
4:19 47) Wind Speed is LOW
4:19 windSpeedCharacteristic is not subscribed
4:19 advertise
4:19 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
4:24 48) Wind Speed is LOW
4:24 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
4:24 windSpeedCharacteristic is not subscribed
4:25 advertise
4:30 49) Wind Speed is LOW
4:30 windSpeedCharacteristic is not subscribed
4:30 advertise
4:30 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
4:30 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
4:35 50) Wind Speed is LOW
4:35 windSpeedCharacteristic is not subscribed
4:36 advertise
4:36 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
4:36 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
4:41 51) Wind Speed is LOW
4:41 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
4:41 windSpeedCharacteristic is not subscribed
4:41 advertise
4:46 52) Wind Speed is LOW
4:46 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
4:46 windSpeedCharacteristic is not subscribed
4:47 advertise
4:52 53) Wind Speed is LOW
4:52 windSpeedCharacteristic is not subscribed
4:52 advertise
4:52 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
4:52 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
4:57 54) Wind Speed is LOW
4:57 windSpeedCharacteristic is not subscribed
4:58 advertise
4:58 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
4:58 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
4:58 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
5:03 55) Wind Speed is LOW
5:03 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
5:03 windSpeedCharacteristic is not subscribed
5:03 advertise
5:08 56) Wind Speed is LOW
5:08 windSpeedCharacteristic is not subscribed
5:09 advertise
5:09 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
5:09 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
5:14 57) Wind Speed is LOW
5:14 windSpeedCharacteristic is not subscribed
5:14 advertise
5:14 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
5:14 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
5:19 58) Wind Speed is LOW
5:19 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
5:19 windSpeedCharacteristic is not subscribed
5:20 advertise
5:25 59) Wind Speed is LOW
5:25 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
5:25 windSpeedCharacteristic is not subscribed
5:25 advertise
5:30 60) Wind Speed is LOW
5:30 windSpeedCharacteristic is not subscribed
5:31 advertise
5:31 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
5:31 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
5:31 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
5:36 61) Wind Speed is LOW
5:36 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
5:36 windSpeedCharacteristic is not subscribed
5:36 advertise
5:41 62) Wind Speed is LOW
5:41 windSpeedCharacteristic is not subscribed
5:42 advertise
5:42 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
5:42 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
5:42 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
5:47 63) Wind Speed is LOW
5:47 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
5:47 windSpeedCharacteristic is not subscribed
5:47 advertise
5:52 64) Wind Speed is LOW
5:52 windSpeedCharacteristic is not subscribed
5:53 advertise
5:53 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
5:53 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
5:53 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
5:58 65) Wind Speed is LOW
5:58 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
5:58 windSpeedCharacteristic is not subscribed
5:58 advertise
5:58 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
6:03 66) Wind Speed is LOW
6:03 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
6:03 windSpeedCharacteristic is not subscribed
6:04 advertise
6:04 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
6:09 67) Wind Speed is LOW
6:09 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
6:09 windSpeedCharacteristic is not subscribed
6:09 advertise
6:09 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
6:14 68) Wind Speed is LOW
6:14 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
6:14 windSpeedCharacteristic is not subscribed
6:15 advertise
6:15 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
6:20 69) Wind Speed is LOW
6:20 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
6:20 windSpeedCharacteristic is not subscribed
6:20 advertise
6:25 70) Wind Speed is LOW
6:25 windSpeedCharacteristic is not subscribed
6:26 advertise
6:26 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
6:26 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
6:31 71) Wind Speed is LOW
6:31 windSpeedCharacteristic is not subscribed
6:31 advertise
6:31 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
6:31 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
6:36 72) Wind Speed is LOW
6:36 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
6:36 windSpeedCharacteristic is not subscribed
6:37 advertise
6:42 73) Wind Speed is LOW
6:42 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
6:42 windSpeedCharacteristic is not subscribed
6:42 advertise
6:47 74) Wind Speed is LOW
6:47 windSpeedCharacteristic is not subscribed
6:48 advertise
6:48 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
6:48 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
6:53 75) Wind Speed is LOW
6:53 windSpeedCharacteristic is not subscribed
6:53 advertise
6:53 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
6:53 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
6:53 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
6:53 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
6:58 76) Wind Speed is LOW
6:58 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
6:58 windSpeedCharacteristic is not subscribed
6:59 advertise
7:04 77) Wind Speed is LOW
7:04 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
7:04 windSpeedCharacteristic is not subscribed
7:04 advertise
7:04 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
7:09 78) Wind Speed is LOW
7:09 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
7:09 windSpeedCharacteristic is not subscribed
7:10 advertise
7:15 79) Wind Speed is LOW
7:15 windSpeedCharacteristic is not subscribed
7:15 advertise
7:15 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
7:15 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
7:20 80) Wind Speed is LOW
7:20 windSpeedCharacteristic is not subscribed
7:21 advertise
7:21 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
7:21 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
7:21 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
7:26 81) Wind Speed is LOW
7:26 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
7:26 windSpeedCharacteristic is not subscribed
7:26 advertise
7:26 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
7:31 82) Wind Speed is LOW
7:31 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
7:31 windSpeedCharacteristic is not subscribed
7:32 advertise
7:32 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
7:37 83) Wind Speed is LOW
7:37 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
7:37 windSpeedCharacteristic is not subscribed
7:37 advertise
7:37 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
7:42 84) Wind Speed is LOW
7:42 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
7:42 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
7:42 windSpeedCharacteristic is not subscribed
7:43 advertise
7:43 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
7:48 85) Wind Speed is LOW
7:48 windSpeedCharacteristic is not subscribed
7:48 advertise
7:53 86) Wind Speed is LOW
7:53 windSpeedCharacteristic is not subscribed
7:54 advertise
7:59 87) Wind Speed is LOW
7:59 windSpeedCharacteristic is not subscribed
7:59 advertise
8:04 88) Wind Speed is LOW
8:04 windSpeedCharacteristic is not subscribed
8:05 advertise
8:05 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
8:10 89) Wind Speed is LOW
8:10 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
8:10 windSpeedCharacteristic is not subscribed
8:10 advertise
8:10 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
8:15 90) Wind Speed is LOW
8:15 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
8:15 windSpeedCharacteristic is not subscribed
8:16 advertise
8:21 91) Wind Speed is LOW
8:21 windSpeedCharacteristic is not subscribed
8:21 advertise
8:21 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
8:21 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
8:21 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
8:26 92) Wind Speed is LOW
8:26 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
8:26 windSpeedCharacteristic is not subscribed
8:27 advertise
8:27 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
8:32 93) Wind Speed is LOW
8:32 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
8:32 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
8:32 windSpeedCharacteristic is not subscribed
8:32 advertise
8:32 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
8:37 94) Wind Speed is LOW
8:37 windSpeedCharacteristic is not subscribed
8:38 advertise
8:38 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
8:38 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
8:43 95) Wind Speed is LOW
8:43 windSpeedCharacteristic is not subscribed
8:43 advertise
8:43 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
8:43 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
8:48 96) Wind Speed is LOW
8:48 windSpeedCharacteristic is not subscribed
8:49 advertise
8:54 97) Wind Speed is LOW
8:54 windSpeedCharacteristic is not subscribed
8:54 advertise
8:54 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
8:54 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
8:59 98) Wind Speed is LOW
8:59 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
8:59 windSpeedCharacteristic is not subscribed
9:00 advertise
9:05 99) Wind Speed is LOW
9:05 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
9:05 windSpeedCharacteristic is not subscribed
9:05 advertise
9:10 100) Wind Speed is LOW
9:10 windSpeedCharacteristic is not subscribed
9:11 advertise
9:16 101) Wind Speed is LOW
9:16 windSpeedCharacteristic is not subscribed
9:17 advertise
9:17 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
9:17 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
9:17 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
9:22 102) Wind Speed is LOW
9:22 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
9:22 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
9:22 windSpeedCharacteristic is not subscribed
9:22 advertise
9:27 103) Wind Speed is LOW
9:27 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
9:27 windSpeedCharacteristic is not subscribed
9:28 advertise
9:33 104) Wind Speed is LOW
9:33 windSpeedCharacteristic is not subscribed
9:33 advertise
9:33 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
9:33 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
9:38 105) Wind Speed is LOW
9:38 windSpeedCharacteristic is not subscribed
9:39 advertise
9:39 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
9:39 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
9:39 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
9:44 106) Wind Speed is LOW
9:44 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
9:44 windSpeedCharacteristic is not subscribed
9:44 advertise
9:44 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
9:49 107) Wind Speed is LOW
9:49 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
9:49 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
9:49 windSpeedCharacteristic is not subscribed
9:50 advertise
9:50 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
9:50 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
9:55 108) Wind Speed is LOW
9:55 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
9:55 windSpeedCharacteristic is not subscribed
9:55 advertise
10:00 109) Wind Speed is LOW
10:00 windSpeedCharacteristic is not subscribed
10:01 advertise
10:01 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
10:01 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
10:06 110) Wind Speed is LOW
10:06 windSpeedCharacteristic is not subscribed
10:06 advertise
10:06 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
10:06 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
10:06 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
10:11 111) Wind Speed is LOW
10:11 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
10:11 windSpeedCharacteristic is not subscribed
10:12 advertise
10:17 112) Wind Speed is LOW
10:17 windSpeedCharacteristic is not subscribed
10:17 advertise
10:17 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
10:17 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
10:22 113) Wind Speed is LOW
10:22 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
10:22 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
10:22 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
10:22 windSpeedCharacteristic is not subscribed
10:23 advertise
10:23 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
10:28 114) Wind Speed is LOW
10:28 windSpeedCharacteristic is not subscribed
10:28 advertise
10:28 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
10:28 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
10:28 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
10:33 115) Wind Speed is LOW
10:33 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
10:33 windSpeedCharacteristic is not subscribed
10:34 advertise
10:39 116) Wind Speed is LOW
10:39 windSpeedCharacteristic is not subscribed
10:39 advertise
10:39 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
10:39 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
10:39 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
10:44 117) Wind Speed is LOW
10:44 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
10:44 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
10:44 windSpeedCharacteristic is not subscribed
10:45 advertise
10:45 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
10:45 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
10:50 118) Wind Speed is LOW
10:50 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
10:50 windSpeedCharacteristic is not subscribed
10:50 advertise
10:55 119) Wind Speed is LOW
10:55 windSpeedCharacteristic is not subscribed
10:56 advertise
11:01 120) Wind Speed is LOW
11:01 windSpeedCharacteristic is not subscribed
11:01 advertise
11:06 121) Wind Speed is LOW
11:06 windSpeedCharacteristic is not subscribed
11:07 advertise
11:07 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
11:07 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
11:12 122) Wind Speed is LOW
11:12 windSpeedCharacteristic is not subscribed
11:12 advertise
11:17 123) Wind Speed is LOW
11:17 windSpeedCharacteristic is not subscribed
11:18 advertise
11:18 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
11:18 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
11:18 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
11:23 124) Wind Speed is LOW
11:23 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
11:23 windSpeedCharacteristic is not subscribed
11:23 advertise
11:28 125) Wind Speed is LOW
11:28 windSpeedCharacteristic is not subscribed
11:29 advertise
11:29 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
11:29 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
11:29 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
11:34 126) Wind Speed is LOW
11:34 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
11:34 windSpeedCharacteristic is not subscribed
11:34 advertise
11:39 127) Wind Speed is LOW
11:39 windSpeedCharacteristic is not subscribed
11:40 advertise
11:40 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
11:40 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
11:40 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
11:40 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
11:45 128) Wind Speed is LOW
11:45 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
11:45 windSpeedCharacteristic is not subscribed
11:45 advertise
11:50 129) Wind Speed is LOW
11:50 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
11:50 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
11:50 windSpeedCharacteristic is not subscribed
11:51 advertise
11:51 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
11:51 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
11:56 130) Wind Speed is LOW
11:56 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
11:56 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
11:56 windSpeedCharacteristic is not subscribed
11:56 advertise
11:56 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
11:56 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
12:01 131) Wind Speed is LOW
12:01 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
12:01 windSpeedCharacteristic is not subscribed
12:02 advertise
12:02 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
12:02 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
12:07 132) Wind Speed is LOW
12:07 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
12:07 windSpeedCharacteristic is not subscribed
12:07 advertise
12:12 133) Wind Speed is LOW
12:12 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
12:12 windSpeedCharacteristic is not subscribed
12:13 advertise
12:13 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
12:18 134) Wind Speed is LOW
12:18 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
12:18 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
12:18 windSpeedCharacteristic is not subscribed
12:18 advertise
12:18 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
12:18 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
12:23 135) Wind Speed is LOW
12:23 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
12:23 windSpeedCharacteristic is not subscribed
12:24 advertise
12:29 136) Wind Speed is LOW
12:29 windSpeedCharacteristic is not subscribed
12:29 advertise
12:34 137) Wind Speed is LOW
12:34 windSpeedCharacteristic is not subscribed
12:35 advertise
12:40 138) Wind Speed is LOW
12:40 windSpeedCharacteristic is not subscribed
12:40 advertise
12:40 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
12:40 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
12:40 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
12:45 139) Wind Speed is LOW
12:45 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
12:45 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
12:45 windSpeedCharacteristic is not subscribed
12:46 advertise
12:46 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
12:46 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
12:51 140) Wind Speed is LOW
12:51 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
12:51 windSpeedCharacteristic is not subscribed
12:51 advertise
12:51 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
12:56 141) Wind Speed is LOW
12:56 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
12:56 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
12:56 windSpeedCharacteristic is not subscribed
12:57 advertise
12:57 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
12:57 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
13:02 142) Wind Speed is LOW
13:02 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
13:02 windSpeedCharacteristic is not subscribed
13:02 advertise
13:07 143) Wind Speed is LOW
13:07 windSpeedCharacteristic is not subscribed
13:08 advertise
13:08 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
13:08 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
13:08 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
13:08 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
13:13 144) Wind Speed is LOW
13:13 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
13:13 windSpeedCharacteristic is not subscribed
13:13 advertise
13:18 145) Wind Speed is LOW
13:18 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
13:18 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
13:18 windSpeedCharacteristic is not subscribed
13:19 advertise
13:19 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
13:19 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
13:24 146) Wind Speed is LOW
13:24 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
13:24 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
13:24 windSpeedCharacteristic is not subscribed
13:24 advertise
13:29 147) Wind Speed is LOW
13:29 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
13:29 windSpeedCharacteristic is not subscribed
13:30 advertise
13:35 148) Wind Speed is LOW
13:35 windSpeedCharacteristic is not subscribed
13:35 advertise
13:35 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
13:35 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
13:40 149) Wind Speed is LOW
13:40 windSpeedCharacteristic is not subscribed
13:41 advertise
13:46 150) Wind Speed is LOW
13:46 windSpeedCharacteristic is not subscribed
13:46 advertise
13:46 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
13:46 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
13:46 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
13:46 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
13:51 151) Wind Speed is LOW
13:51 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
13:51 windSpeedCharacteristic is not subscribed
13:52 advertise
13:57 152) Wind Speed is LOW
13:57 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
13:57 windSpeedCharacteristic is not subscribed
13:57 advertise
13:57 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
14:02 153) Wind Speed is LOW
14:02 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
14:02 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
14:02 windSpeedCharacteristic is not subscribed
14:03 advertise
14:03 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
14:03 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
14:08 154) Wind Speed is LOW
14:08 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
14:08 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
14:08 windSpeedCharacteristic is not subscribed
14:08 advertise
14:08 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
14:08 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
14:13 155) Wind Speed is LOW
14:13 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
14:13 windSpeedCharacteristic is not subscribed
14:14 advertise
14:14 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
14:19 156) Wind Speed is LOW
14:19 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
14:19 windSpeedCharacteristic is not subscribed
14:19 advertise
14:24 157) Wind Speed is LOW
14:24 windSpeedCharacteristic is not subscribed
14:25 advertise
14:25 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
14:25 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
14:30 158) Wind Speed is LOW
14:30 windSpeedCharacteristic is not subscribed
14:30 advertise
14:30 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
14:30 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
14:30 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
14:35 159) Wind Speed is LOW
14:35 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
14:35 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
14:35 windSpeedCharacteristic is not subscribed
14:36 advertise
14:36 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
14:36 blePeripheralConnectHandler    Connected to central: 86:32:11:35:ad:2b
14:41 160) Wind Speed is LOW
14:41 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
14:41 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
14:41 windSpeedCharacteristic is not subscribed
14:41 advertise
14:41 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
14:41 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
14:46 161) Wind Speed is LOW
14:46 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
14:46 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
14:46 windSpeedCharacteristic is not subscribed
14:47 advertise
14:47 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
14:47 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
14:52 162) Wind Speed is LOW
14:52 blePeripheralConnectHandler    Connected to central: d8:3f:78:15:d5:64
14:52 windSpeedCharacteristic is not subscribed
14:52 advertise
14:57 163) Wind Speed is LOW
14:57 windSpeedCharacteristic is not subscribed
14:58 advertise
15:03 164) Wind Speed is LOW
15:03 windSpeedCharacteristic is not subscribed
15:03 advertise
15:03 blePeripheralDisconnectHandler Disconnected from central: 86:32:11:35:ad:2b
15:08 165) Wind Speed is LOW
15:08 windSpeedCharacteristic is not subscribed
15:09 advertise
15:14 166) Wind Speed is LOW
15:14 windSpeedCharacteristic is not subscribed
:
: same message as above several times (~every 5 seconds)
: 
20:56 advertise
21:01 229) Wind Speed is LOW
21:01 windSpeedCharacteristic is not subscribed
21:01 advertise
21:06 230) Wind Speed is LOW
21:06 windSpeedCharacteristic is     SUBSCRIBED
:
: same message as above several times (~every 5 seconds)
: 
22:57 advertise
23:02 251) Wind Speed is LOW
23:02 windSpeedCharacteristic is     SUBSCRIBED
23:02 advertise
23:07 252) Wind Speed is LOW
23:07 windSpeedCharacteristic is not subscribed
23:08 advertise
23:13 253) Wind Speed is LOW
23:13 windSpeedCharacteristic is not subscribed
:
: same message as above several times (~every 5 seconds)
: 
23:52 advertise
23:57 261) Wind Speed is LOW
23:57 windSpeedCharacteristic is not subscribed
23:57 advertise
24:02 262) Wind Speed is LOW
24:02 blePeripheralDisconnectHandler Disconnected from central: d8:3f:78:15:d5:64
24:02 windSpeedCharacteristic is not subscribed
24:02 advertise
24:07 263) Wind Speed is LOW
24:07 windSpeedCharacteristic is not subscribed
:
: same message as above several times (~every 5 seconds)
: 
37:28 advertise
37:33 424) Wind Speed is LOW
37:33 windSpeedCharacteristic is not subscribed
37:33 advertise

Can you get the two linear motor controlling Arduinos connected by wires? How far apart are they? The Nano 33 BLE's have multiple serial uarts and can easily communicate over wires. If quite far apart, then perhaps RS232 could be used for a wired connection.

I had actually planned to test it with batteries when everything is working and then decide about the capacity and size. Perhaps this is a bad idea.

No, its a good idea. Leave the battery issue for later.

Have you done any research on placing the data in the advertising packet? The more I think about it, it is a very good way to go since you are only wanting to transmit a 1 or 0.

I haven't had time to review your findings from the tests, but clearly the full BLE implementation as compared to the testing in posts 9 and 10 is not going as expected.

For the test I used the same code as in your post 9, with minor changes for Serial.print().
This morning, after 20 minutes of trying, one of the Arduinos was able to connect to the peripheral device and the subscripting also worked. But further attempts have failed so far.

19:21 * starting
โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• connectToPeripheral() โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
+ + + + + + 2 tries to find Peripheral

Found  d4:d4:da:4e:7b:8e 'Anemometer' Characteristics Count = 0 181a
+ + + + + + Connected
Discovering attributes ...
โ”€ โ”€ โ”€ โ”€ โ”€ โ”€ Attribute discovery failed!
19:27 * starting
โ•โ•โ•โ•โ•โ•โ•โ•โ•โ• connectToPeripheral() โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
+ + + + + + 3 tries to find Peripheral

Found  d4:d4:da:4e:7b:8e 'Anemometer' Characteristics Count = 0 181a
+ + + + + + Connected
Discovering attributes ...
+ + + + + + Attributes discovered + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
โ• โ• โ• โ• Subscribed โ• โ• โ• โ•
Characteristics 2a70` ...  โ•โ•โ•โ•โ•โ•ฃSubscribedโ• โ•โ•โ•โ•โ•
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0
Command Updated New Value: 1

Command Updated New Value: 0
0 0 0 0
0 0 0 0 0 0 0 0 0 0

I found the following reference on GitHub, but I dont't know, how to interpret it.

However, using the latest versions of the nano33ble core there are problems when trying to handle multiple connections.

  • With version 1.1.3 of the core arduino/ArduinoCore-nRF528x-mbedos@ the board does not present any problems.
  • With version 1.1.4 arduino/ArduinoCore-nRF528x-mbedos@ and following, if the nano33ble board works as a central device, then it cannot connect to multiple peripherals. On the other hand, if it works as a peripheral device, then it is able to handle multiple central devices connected to it.

I have been investigating a change of course to use the advertised manufacturer data from the anerometer peripheral to carry the wind speed variable 0 or 1. This manufacturer data can be an array of bytes to carry more information if required.

I have also written a central which scans for the anerometer peripheral and reads and reports the manufacturer data. There are no connections required, and I have had a phone and central reading the wind data at the same time without issue.

I think for this approach to best work, the anerometer needs to be advertising continually, and the anerometer reading needs to be non blocking.

The current wind speed algorithm counts the number of pulses in 5 seconds, and then if that number is >(mds*mts) the condition is windy.
This is can be done in a non blocking manner without the while loop.

The lockout after a windy condition may be better placed in the central. I think that all the logic of what to do when its windy or not should be in the central moving the panel and not the peripheral measuring the wind.

// If WindLevel is HIGH (stormy weather), it'll be HIGH for longer Time
    //  - Wait some time and then check Wind again.
    if(WindLevel) 
    {
      Serial.print("wait ");Serial.print(pauseAfterWindMeasure/1000);Serial.println(" seconds");
      delay (pauseAfterWindMeasure);
    }

Here's some code I have been playing around with. The peripheral just changes the manufacturer data every 5 seconds, and the central reads and reports the value every second. Let me know if you think this approach has value.

Here's the peripheral advertiser's code


#include <ArduinoBLE.h>

const char* BLE_Service_UUID_TrueWindSpeed         = "181a";  // Service         - Environmental Sensing Service
const char* BLE_Characteristics_UUDI_TrueWindSpeed = "2a70";  // Characteristics - True Wind Speed

BLEService environmentalService(BLE_Service_UUID_TrueWindSpeed); // Bluetoothยฎ Low Energy Binary Sensor Service
BLEBoolCharacteristic windSpeedCharacteristic(BLE_Characteristics_UUDI_TrueWindSpeed, BLERead | BLENotify);  // GATT

const int pinReedSensor   = 8 ;          // REED Sensorport (Anemometer)
byte windData = 1;//will be 0 or 1 depending on wind condition

void setup() {
  Serial.begin(115200);    // initialize serial communication
 
  pinMode(pinReedSensor, INPUT_PULLDOWN);
  pinMode(LED_BUILTIN, OUTPUT);

  setupBLE_Environment();
}

void loop()
{
  BLE.advertise();
  static unsigned long lastTime = 0;
  if (millis() - lastTime >= 5000)
  {
    lastTime = millis();
    if (windData == 1)
      windData = 0;
    else
      windData = 1;

    BLE.setManufacturerData(&windData, 1);//function wants address of(or pointer to) windData

    Serial.print("windData= ");
    Serial.println(windData);
  }

}

void setupBLE_Environment()
{
  while (!BLE.begin()) {
    // Serial.println("starting BLE failed!");
    digitalWrite(LED_BUILTIN, HIGH);
    delay(200);
    digitalWrite(LED_BUILTIN, LOW);
  }

  /* 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.setLocalName("Anemometer");
  BLE.setDeviceName("Anemometer");
  BLE.setAdvertisedService(environmentalService);                  // add the service UUID
  environmentalService.addCharacteristic(windSpeedCharacteristic); // add the Windlevel characteristic

  BLE.addService(environmentalService);                            // Add the Enviromental service

  BLE.setManufacturerData(&windData, 1);

  BLE.advertise();  // start advertising
 
}

Here's the code which scans and reports the manufacturer data of windData every second.

#include <ArduinoBLE.h>

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

  // begin initialization
  if (!BLE.begin()) {
    Serial.println("starting Bluetoothยฎ Low Energy module failed!");

    while (1);
  }

  Serial.println("Bluetoothยฎ Low Energy Central - Peripheral Explorer");
}

void loop()
{
  BLE.scanForUuid("181a");
  BLEDevice peripheral = BLE.available();
  static unsigned long lastPrint = 0;
  if (peripheral and millis()-lastPrint >= 1000)
  {
    lastPrint = millis();
    //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();

    // see if peripheral has manufacturing data
    if (peripheral.hasManufacturerData())
    {
      Serial.println("Found manufacturer data");
      int ManuDataLen = peripheral.manufacturerDataLength();
      //Serial.println(ManuDataLen);
      //retrieve the data.... using manufacturerData etc.
      uint8_t manuDataBuffer[ManuDataLen];
      if (peripheral.manufacturerData(manuDataBuffer, ManuDataLen))
      {
        Serial.print("Manufacturer Data: ");
        for (int x = 0; x < ManuDataLen; x++) {
          Serial.print(manuDataBuffer[x]);
        }
        Serial.println();
      }
    }
  }
}

Thank you for the investigation. I am not able to test at the moment, but I will test it tomorrow.

Here's a revision of the Anerometer code to set the manufacturer data 0 or 1 based on the pulse counts during a period of time. It should be apparent to you how to change the threshold number of counts or the mds time period if I didn't get it correct for what you have found to be "windy".

I think that what do do with a windy condition, how to check if its windy for a long period of time, when to move the panels, etc. should all be done in the code which reads the wind data.


#include <ArduinoBLE.h>

const char* BLE_Service_UUID_TrueWindSpeed         = "181a";  // Service         - Environmental Sensing Service
const char* BLE_Characteristics_UUDI_TrueWindSpeed = "2a70";  // Characteristics - True Wind Speed

BLEService environmentalService(BLE_Service_UUID_TrueWindSpeed); // Bluetoothยฎ Low Energy Binary Sensor Service
BLEBoolCharacteristic windSpeedCharacteristic(BLE_Characteristics_UUDI_TrueWindSpeed, BLERead | BLENotify);  // GATT

const int pinReedSensor   = 8 ;// REED Sensorport(Anemometer)
byte windCounter = 0;//pulse count on reed sensor pin
byte windData = 0;//will be 0 or 1 depending on windCounter in time period

const unsigned long mds = 5;// measure time duration in seconds
//const float mts = 2.5;
//wind counter greater than 2.5*5 =7.5  i.e. 8 or more
byte highThreshold = 8; 

void setup() {
  Serial.begin(115200);    // initialize serial communication

  pinMode(pinReedSensor, INPUT_PULLDOWN);
  pinMode(LED_BUILTIN, OUTPUT);

  setupBLE_Environment();
}

void loop()
{
  BLE.advertise();
  readAnemometer();//counts pulses
  //check for number of anerometer pulses in timed period
  static unsigned long lastTime = 0;
  if (millis() - lastTime >= mds * 1000)
  {
    lastTime = millis();
    Serial.print("windCounter = ");
    Serial.println(windCounter);
    if (windCounter >= highThreshold)
    {
      windData = 1;
    }
    else
    {
      windData = 0;
    }
    windCounter = 0; //reset counter

    BLE.setManufacturerData(&windData, 1);//function wants address of(or pointer to) windData

    Serial.print("windData= ");
    Serial.println(windData);
  }

}

void setupBLE_Environment()
{
  while (!BLE.begin()) {
    // Serial.println("starting BLE failed!");
    digitalWrite(LED_BUILTIN, HIGH);
    delay(200);
    digitalWrite(LED_BUILTIN, LOW);
  }

  /* 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.setLocalName("Anemometer");
  BLE.setDeviceName("Anemometer");
  BLE.setAdvertisedService(environmentalService);                  // add the service UUID
  environmentalService.addCharacteristic(windSpeedCharacteristic); // add the Windlevel characteristic

  BLE.addService(environmentalService);                            // Add the Enviromental service

  BLE.setManufacturerData(&windData, 1);

  BLE.advertise();  // start advertising

}

void readAnemometer()
{
  static byte newState    = LOW;
  static byte oldState    = LOW;
  newState = digitalRead(pinReedSensor);
  if (oldState == LOW && newState == HIGH) // Bei jeder Umdrehung wird newState auf HIGH gesetzt, wenn der REED-Sensor aktiviert wird.
  {
    windCounter++;
  }
  oldState = newState;
}

Thank you @cattledog
Your approach seems to working. But it looks like the main problem is in my environment. Sometimes it can find the peripheral device but often not. I added a Serial.print statement to see, how long it takes to find the peripheral. Below you can see the output from each central device.

Bluetoothยฎ Low Energy Central d8:3f:78:15:d5:64 - Peripheral Explorer
61 seconds - Found  'Anemometer'
Found manufacturer data
Manufacturer Data: 1
106 seconds - Found  'Anemometer'
Found manufacturer data
Manufacturer Data: 1
451 seconds - Found  'Anemometer'
Found manufacturer data
Manufacturer Data: 0
1026 seconds - Found  'Anemometer'
Found manufacturer data
Manufacturer Data: 1
1111 seconds - Found  'Anemometer'
Found manufacturer data
Manufacturer Data: 1
1912 seconds - Found  'Anemometer'
Found manufacturer data
Manufacturer Data: 1
2322 seconds - Found  'Anemometer'
Found manufacturer data
Manufacturer Data: 0
2732 seconds - Found  'Anemometer'
Found manufacturer data
Manufacturer Data: 0
3172 seconds - Found  'Anemometer'
Found manufacturer data
Manufacturer Data: 0
3697 seconds - Found  'Anemometer'
Found manufacturer data
Manufacturer Data: 0
Bluetoothยฎ Low Energy Central 86:32:11:35:ad:2b - Peripheral Explorer
541 seconds - Found  'Anemometer' 
Found manufacturer data
Manufacturer Data: 0
1736 seconds - Found  'Anemometer' 
Found manufacturer data
Manufacturer Data: 1
2041 seconds - Found  'Anemometer' 
Found manufacturer data
Manufacturer Data: 1
2126 seconds - Found  'Anemometer' 
Found manufacturer data
Manufacturer Data: 1
2376 seconds - Found  'Anemometer' 
Found manufacturer data
Manufacturer Data: 0
2611 seconds - Found  'Anemometer' 
Found manufacturer data
Manufacturer Data: 0
2681 seconds - Found  'Anemometer' 
Found manufacturer data
Manufacturer Data: 0