BLE DHT11 and Home Assistant

:nerd_face: My first post
I have read post after post, and cannot get it. I have modified this code to use a DHT11,
I have ESPHome installed via Intergrations and am using HA Supervised.
:point_right:Here is the code for the esp32 server:

/*********
  Rui Santos
  Complete instructions at https://RandomNerdTutorials.com/esp32-ble-server-client/
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*********/

#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>

#include "DHT.h"
#define DHTTYPE DHT11  // DHT 11
#define dht_PIN 4      // Saras Room
DHT dht(dht_PIN, DHTTYPE);


//BLE server name
#define bleServerName "Temperature_ESP32"

float temp;
float tempF;
float hum;

// Timer variables
unsigned long lastTime = 0;
unsigned long timerDelay = 30000;

bool deviceConnected = false;

// See the following for generating UUIDs:
// https://www.uuidgenerator.net/
#define SERVICE_UUID "91bad492-b950-4226-aa2b-4ede9fa42f59"

// Temperature Characteristic and Descriptor
#ifdef temperatureCelsius
BLECharacteristic dhtTemperatureCelsiusCharacteristics("cba1d466-344c-4be3-ab3f-189f80dd7518", BLECharacteristic::PROPERTY_NOTIFY);
BLEDescriptor dhtTemperatureCelsiusDescriptor(BLEUUID((uint16_t)0x2902));
#else
BLECharacteristic dhtTemperatureFahrenheitCharacteristics("f78ebbff-c8b7-4107-93de-889a6a06d408", BLECharacteristic::PROPERTY_NOTIFY);
BLEDescriptor dhtTemperatureFahrenheitDescriptor(BLEUUID((uint16_t)0x2901));
#endif

// Humidity Characteristic and Descriptor
BLECharacteristic dhtHumidityCharacteristics("ca73b3ba-39f6-4ab3-91ae-186dc9577d99", BLECharacteristic::PROPERTY_NOTIFY);
BLEDescriptor dhtHumidityDescriptor(BLEUUID((uint16_t)0x2903));

//Setup callbacks onConnect and onDisconnect
class MyServerCallbacks : public BLEServerCallbacks {
  void onConnect(BLEServer *pServer) {
    deviceConnected = true;
  };
  void onDisconnect(BLEServer *pServer) {
    deviceConnected = false;
  }
};


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

  // Init dht Sensor
  //initdht();
  dht.begin();
  // Create the BLE Device
  BLEDevice::init(bleServerName);

  // Create the BLE Server
  BLEServer *pServer = BLEDevice::createServer();
  pServer->setCallbacks(new MyServerCallbacks());

  // Create the BLE Service
  BLEService *dhtService = pServer->createService(SERVICE_UUID);

// Create BLE Characteristics and Create a BLE Descriptor
// Temperature
#ifdef temperatureCelsius
  dhtService->addCharacteristic(&dhtTemperatureCelsiusCharacteristics);
  dhtTemperatureCelsiusDescriptor.setValue("dht temperature Celsius");
  dhtTemperatureCelsiusCharacteristics.addDescriptor(&dhtTemperatureCelsiusDescriptor);
#else
  dhtService->addCharacteristic(&dhtTemperatureFahrenheitCharacteristics);
  dhtTemperatureFahrenheitDescriptor.setValue("dht temperature Fahrenheit");
  dhtTemperatureFahrenheitCharacteristics.addDescriptor(&dhtTemperatureFahrenheitDescriptor);
#endif

  // Humidity
  dhtService->addCharacteristic(&dhtHumidityCharacteristics);
  dhtHumidityDescriptor.setValue("dht humidity");
  dhtHumidityCharacteristics.addDescriptor(new BLE2902());

  // Start the service
  dhtService->start();

  // Start advertising
  BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
  pAdvertising->addServiceUUID(SERVICE_UUID);
  pServer->getAdvertising()->start();
  Serial.println("Waiting a client connection to notify...");
}

void loop() {
  if (deviceConnected) {
    if ((millis() - lastTime) > timerDelay) {
      // Read temperature as Celsius (the default)
      temp = dht.readTemperature();
      // Fahrenheit
      tempF = 1.8 * temp + 32;
      // Read humidity
      hum = dht.readHumidity();

//Notify temperature reading from DHT sensor
#ifdef temperatureCelsius
      static char temperatureCTemp[6];
      dtostrf(temp, 6, 2, temperatureCTemp);
      //Set temperature Characteristic value and notify connected client
      dhtTemperatureCelsiusCharacteristics.setValue(temperatureCTemp);
      dhtTemperatureCelsiusCharacteristics.notify();
      Serial.print("Temperature Celsius: ");
      Serial.print(temp);
      Serial.print(" ºC");
#else
      static char temperatureFTemp[6];
      dtostrf(tempF, 6, 2, temperatureFTemp);
      //Set temperature Characteristic value and notify connected client
      dhtTemperatureFahrenheitCharacteristics.setValue(temperatureFTemp);
      dhtTemperatureFahrenheitCharacteristics.notify();
      Serial.print("Temperature Fahrenheit: ");
      Serial.print(tempF);
      Serial.print(" ºF");
#endif

      //Notify humidity reading from dht
      static char humidityTemp[6];
      dtostrf(hum, 6, 2, humidityTemp);
      //Set humidity Characteristic value and notify connected client
      dhtHumidityCharacteristics.setValue(humidityTemp);
      dhtHumidityCharacteristics.notify();
      Serial.print(" - Humidity: ");
      Serial.print(hum);
      Serial.println(" %");

      lastTime = millis();
    }
  }
}

:point_right: Here is my ESPhome Yaml:

esphome:
  name: myble-client

esp32:
  board: wemos_d1_mini32
  framework:
    type: arduino

# Enable Home Assistant API
api:
  encryption:
    key: "gdOpgYZcDBnLlk9GJ46i4iOtmh3pS3hcC9dHjwI/0EI="

wifi:
  ssid: "DD_***"
  password: "****"
  manual_ip:
    static_ip: 192.168.3.160
    gateway: 192.168.3.1
    subnet: 255.255.255.0
    #dns1: 192.168.3.1
    #dns2: 8.8.8.8

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "esp_32_2 Fallback Hotspot"
    password: "***"

captive_portal:

# Enable logging
logger:

ota:
  password: "***"

web_server:
  port: 80
  ota: true

esp32_ble_tracker:

ble_client:
  - mac_address: 78:E3:6D:10:6D:BA
    id: my_ble_client  
    on_connect:
      then:
        - lambda: |-
            ESP_LOGD("ble_client_lambda", "Connected to BLE device");

text_sensor:
  - platform: template
    name: "My_Esp_Tmp_Atmpt"
    
  - platform: ble_client
    ble_client_id: 
    id: my_ble_client1
    name: "Humidity"
    service_uuid: "91bad492-b950-4226-aa2b-4ede9fa42f59"  # Humidity
    characteristic_uuid: "ca73b3ba-39f6-4ab3-91ae-186dc9577d99"  
    notify: true

  - platform: ble_client
    ble_client_id: 
    id: my_ble_client2
    name: "Temperature"
    service_uuid: "91bad492-b950-4226-aa2b-4ede9fa42f59"  # Temperarure
    characteristic_uuid: "f78ebbff-c8b7-4107-93de-889a6a06d408"  
    notify: true

This is the web page from the esp32-server:

How do I turn the Temp. and Humid. results into a home-assistant sensor or (entity) such as:
ESPHOME_TMP_SENSOR

Did you add the esp device to ha via the integration?

Go here Open your Home Assistant instance and show your integrations.

Press Add Integration, choose esphome, and proceed.

I have esphome installed. I should have also mentioned I am using HA Supervised.

I Understand I will Try now.

I am sorry i thought the question was if I added the Addon ESPHome

WORKS PERFECTLY!

THANK YOU!
EDIT: Yes I did add the device to Home Assistant.

You did not answer Nick’s question. Did you add the device to Home Assistant?

1 Like