Inkbird BT thermometer iBBQ with ESP32

I’ve been setting this up along with some xiaomi temp/humidity sensors and I think the inkbird section might be “blocking” the xiaomi as they both use BLE.
Has anyone done something similar? It’s like if the inkbird is off then the Xiaomi stuff is fine, but if it is on then it takes over and only the inkbird stats will get sent.

I wondered if it’s because they both use the BLE tracker:

I combined this example with the one from VanFlipsen, I think I needed the mac address filter otherwise it would ignore the Xiaomi devices, does anyone know what the BLE tracker does if you have the mac filter but then something else advertises data?
thanks!

I suggest you install the Passive BLE Monitor custom integration. It supports both the iBBQ and your Xiaomi device (and a whole bunch of others):

It works fine for me with iBBQ, Xiaomi and Mi Flora devices simultaneously.

1 Like

thanks, does that need the home assistant server to have a BT dongle though? Or can I use the ESP32 as a relay still?

Passive BLE Monitor supports BLE Gateway from here: https://github.com/myhomeiot/esphome-components
That way you can use an ESP32 to relay BLE packets, and do not need a bluetooth device on your HASS server.

2 Likes

Thanks Anders, this is working great!

Was very happy to find this thread! Was using a solution found here which uses this, but this required me to use an MQTT server and using code which I did not fully grasp/had no real control over. So very happy to find proper esphome code!

With that said, I have been experimenting with the code a bit, got some node-red automations working to trigger notifications and such, but was a bit surprised about the somewhat erratic update intervals. Now I already read in this discussion that doing a proper login/connection would be the solution, so I was wondering if anybody already got this working.

I can get it to connect following the procedures described by esphome, but thats about where my handy work gets me. Some insights such as the UUIDs to query can be gained from the code mentioned earlier (this one), but how to translate that in working code is beyond me.

Anyone have more insights on this?

Just used this and it was so simple to setup, been looking for an easy way for ages. Thanks

Good evening, trying to replicate this setup with a Weber Connect Hub. I found the MAC address.
All I see now is the following :
[22:19:11][I][ble_adv:139]: address: 70:91:8F:21:34:15
[22:19:11][I][ble_adv:140]: name: Weber Connect Hub 9555
[22:19:11][I][ble_adv:141]: Advertised service UUIDs:
[22:19:11][I][ble_adv:144]: - 0xFD97
[22:19:11][I][ble_adv:147]: Advertised service data:

Ok after some reading I think I am on the right doc : ESP32 Bluetooth Low Energy Tracker Hub — ESPHome

Now just trying to make sense of all of this :stuck_out_tongue:

Not sure what Im doing wrong. I have this code updated with my mac_address and ble_client to pair automatically. But the temp probe0 and probe1 always says 0.00000. Cant get it to read the correct temps.

Can someone give me some assistance? Thank you.

esphome:
  name: electricsmoker
  on_boot:
    priority: -10
    then:
      - lambda: |-
          {
            id(ble_sensor_1).publish_state(false);
            id(ble_sensor_2).publish_state(false);        
          }

esp32:
  board: esp-wrover-kit
  framework:
    type: arduino
  

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:
  password: "d81494f71266ca88bf31a80ae2dbe90b"

wifi:
  ssid: XXXXXX
  password: XXXXXXXXX

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esphome-Web-C5025C"
    password: "ruMTKeZOnf4X"

captive_portal:

script:
  - id: timer
    then:
      - delay: 60s
      - lambda: |-
          {
            id(ble_sensor_1).publish_state(false);
            id(ble_sensor_2).publish_state(false);        
          }
  
esp32_ble_tracker:
  on_ble_advertise:
    - mac_address: 73:7F:00:00:07:7F
      then:
        - script.stop: timer
        - lambda: |-
            if (x.get_name() != "xBBQ") return;
            
            ESP_LOGI("ble_adv", "New BLE device");
            ESP_LOGI("ble_adv", "  address: %s", x.address_str().c_str());
            ESP_LOGI("ble_adv", "  name: %s", x.get_name().c_str());
            ESP_LOGI("ble_adv", "  Advertised service UUIDs:");
            
            for (auto uuid : x.get_service_uuids()) {
              ESP_LOGI("ble_adv", "    - %s", uuid.to_string().c_str());
            }
            
            ESP_LOGI("ble_adv", "  Advertised service data:");
            
            for (auto data : x.get_service_datas()) {
              ESP_LOGI("ble_adv", "    - %s: (length %i)", data.uuid.to_string().c_str(), data.data.size());
            }
            
            ESP_LOGI("ble_adv", "  Advertised manufacturer data:");
            
            for (auto data : x.get_manufacturer_datas()) {
              ESP_LOGI("ble_adv", "    - %s: (%s)", data.uuid.to_string().c_str(), hexencode(data.data).c_str());
              
              if (data.uuid.contains(0, 0)) {
    
                int probe0 = (data.data[9] << 8) + data.data[8];
                int probe1 = (data.data[11] << 8) + data.data[10];
                    
                ESP_LOGI("ble_data", "    - %f %f", probe0 / 10.0, probe1 / 10.0);
    
                if (probe0 < 60000) {
                  id(ble_sensor_1).publish_state(probe0 / 10.0);
                } else {
                  id(ble_sensor_1).publish_state(0);                
                }
    
                if (probe1 < 60000) {
                  id(ble_sensor_2).publish_state(probe1 / 10.0);
                } else {
                  id(ble_sensor_2).publish_state(0);                
                }
              }
            }
        - script.execute: timer

ble_client:
  - mac_address: 73:7F:00:00:07:7F
    id: xBBQ
    
sensor: 
  - platform: template
    name: "xBBQ Temperature Probe 1"
    id: ble_sensor_1
    unit_of_measurement: "°C"
    accuracy_decimals: 0
  - platform: template
    name: "xBBQ Temperature Probe 2"
    id: ble_sensor_2
    unit_of_measurement: "°C"
    accuracy_decimals: 0

22 posts were merged into an existing topic: Presence detection, BLE, mi flora, RF gateway with ESP32, OpenMQTTGateway is now compatible

Does this work with any Bluetooth meat probe or only a specific one and if so which one?

You should be able to develop a similar integration for any bluetooth device, but this thread deals with the sensors mentioned by @paddy0174 in the first post.

2 Likes

I have a generic brand thermometer and it uses the same protocol as the original Inkbird one. I use it with the BLE passive monitor but it should work well with anything that supports Inkbird.

This is sold by a swedish company and branded with their “generic” brand:

I believe you will find that several sites selling the same type thermometer with assorted brand names.

Using an Inkbird and OpenMQTTGateway. It throws erroneous values at times which just ruins my chart :frowning: The chart in the inbird BBQ go app looks normal.

Any ideas?
Thanks,
Grey

Nope, no idea, as I’m not using OpenMQTTGateway (as stated above). :wink:

Please feel free to ask in the corresponding thread, here:

We are discussing this issue below :

1 Like

What are your expected measurement/temperature data when you see this ?

I’ll start my own thread since it’s a diff probe…

Hi guys,

Setting up my first ESP32 device to use exclusively with Inkbird BT4 and asking for a little help here.
I basically followed the steps from the first post, copy pasted all the configs.
I can see probes temperature in ESPHome logs:

But in home assistant sensors are not appearing, thought they are created under different names, but cannot find anything that may look like those sensors. To me it feels like ESP32 board not publishing anything to HA, but as it’s my first board I may miss something.

Update:

I think I found where my problem is - had to setup ESPHome integration in order for this to work.

Setup couldn’t be easier so thanks for the detailed setup instructions! I was able to get my BT thermometer into HA pretty quickly without any changes to the setup. Although sadly like a few other posts I also had dropouts which would cause my graphs to have huge spikes to 0 at times, range isn’t the issue as they’re VERY close to each other. The iBBQ app must either not get the connection drops or must smooth the map over as the issue isn’t present there. Given once you connect your phone the BT connection to the ESP also drops so sadly had to resort back to the iBBQ app for last weekends 7 hour smoke and miss out on all that juicy HA data!

1 Like