Inkbird INT-11P-B BBQ Probe

I have an Inkbird INT-11P-B BBQ probe that doesn’t work with the Inkbird integration so I spent some time getting it working with ESP Home, here’s the config for anybody else that might find it useful.

If anybody can help me work out the probe battery level I’d appreciate that.

ble_client:
  - mac_address: "00:00:00:00:00:00"
    id: inkbird

switch:
  - platform: ble_client
    ble_client_id: inkbird
    name: "Enable Inkbird INT-11P-B"

sensor:
  - platform: ble_client
    type: characteristic
    ble_client_id: inkbird
    name: Inkbird Internal
    id: inkbird_internal
    service_uuid: 0000fff0-0000-1000-8000-00805f9b34fb
    characteristic_uuid: 0000fff1-0000-1000-8000-00805f9b34fb
    unit_of_measurement: '°C'
    lambda: |-
      // Display the hex string for debugging.
      std::vector<uint8_t> data = x;
      String hex_string = "";
      for (size_t i = 0; i < x.size(); ++i) {
        char hex_buffer[3];
        snprintf(hex_buffer, sizeof(hex_buffer), "%02X", data[i]);
        hex_string += hex_buffer;
        if (i % 2 == 1 && i != data.size() - 1) {
          hex_string += " ";  // Insert a space every two bytes
        }
      }
      uint8_t arr_size = x.size();
      ESP_LOGW("LOG_TAG", "INKBIRD Hexadecimal string: %s", hex_string.c_str());
      uint8_t value = x[1];
      return value;
    device_class: "temperature"
  - platform: ble_client
    type: characteristic
    ble_client_id: inkbird
    name: Inkbird Ambient
    id: inkbird_ambient
    service_uuid: 0000fff0-0000-1000-8000-00805f9b34fb
    characteristic_uuid: 0000fff1-0000-1000-8000-00805f9b34fb
    unit_of_measurement: '°C'
    lambda: |-
        uint8_t value = x[3];
        return value;
    filters:
      - filter_out: 0.0
    device_class: "temperature"
  - platform: ble_client
    type: characteristic
    ble_client_id: inkbird
    name: Inkbird Flags
    id: inkbird_flags
    service_uuid: 0000fff0-0000-1000-8000-00805f9b34fb
    characteristic_uuid: 0000fff1-0000-1000-8000-00805f9b34fb
    lambda: |-
        uint8_t value = x[2];
        return value;
  # This almost certainly relates to probe battery, possibly without the most significant bit?
  - platform: ble_client
    type: characteristic
    ble_client_id: inkbird
    name: Inkbird Unknown 4
    id: inkbird_unknown_4
    service_uuid: 0000fff0-0000-1000-8000-00805f9b34fb
    characteristic_uuid: 0000fff1-0000-1000-8000-00805f9b34fb
    lambda: |-
        uint8_t value = x[4];
        return value;
    device_class: voltage
  - platform: ble_client
    type: characteristic
    ble_client_id: inkbird
    name: Inkbird Probe Battery
    id: inkbird_probe_battery
    service_uuid: 0000fff0-0000-1000-8000-00805f9b34fb
    characteristic_uuid: 0000fff1-0000-1000-8000-00805f9b34fb
    lambda: |-
        uint8_t value = (x[4] & 0x7F);
        return value;
    unit_of_measurement: '%'
    device_class: battery
  - platform: ble_client
    type: characteristic
    ble_client_id: inkbird
    name: Inkbird Unknown 5
    id: inkbird_unknown_5
    service_uuid: 0000fff0-0000-1000-8000-00805f9b34fb
    characteristic_uuid: 0000fff1-0000-1000-8000-00805f9b34fb
    lambda: |-
        uint8_t value = x[5];
        return value;
    device_class: voltage
  - platform: ble_client
    type: characteristic
    ble_client_id: inkbird
    name: Inkbird Case Battery
    id: inkbird_case_battery
    service_uuid: 0000fff0-0000-1000-8000-00805f9b34fb
    characteristic_uuid: 0000fff1-0000-1000-8000-00805f9b34fb
    lambda: |-
        uint8_t value = x[5] >> 1;
        return value;
    unit_of_measurement: '%'
    device_class: battery
  - platform: ble_client
    type: characteristic
    ble_client_id: inkbird
    name: Inkbird Case Charging
    icon: mdi:battery-charging
    id: inkbird_case_charging
    service_uuid: 0000fff0-0000-1000-8000-00805f9b34fb
    characteristic_uuid: 0000fff1-0000-1000-8000-00805f9b34fb
    lambda: |-
        bool value = (x[5] & 0x01);
        return value;
  - platform: ble_client
    type: characteristic
    ble_client_id: inkbird
    name: Inkbird Probe Charging
    icon: mdi:battery-charging
    id: inkbird_probe_charging
    service_uuid: 0000fff0-0000-1000-8000-00805f9b34fb
    characteristic_uuid: 0000fff1-0000-1000-8000-00805f9b34fb
    lambda: |-
        bool value = (x[2] >> 7);
        return value;
6 Likes

Is it possible for you to document how you discovered how to do this? There are precious few examples of analysing ble messages and reducing it to esp code.

1 Like

Sure, I’ll get something written up, I was lucky that the probe broadcasts its data and doesn’t have to be queried in this case which made it much easier.

I think the first lambda should be returning a temp.
Is it just x[1]?

I’ve just chucked the probe in my oven to test. Neither x[1] (internal?) nor x[3] (ambient) seem to return values over 127. In theory they could go up to 255, which wouldn’t be enough for the ambient sensor which specs say can range from 0-300.

However, if there were just some more significant bits somewhere, I’d expect these values to cycle round to 0 again, but they stay at 127.

Yep, that was a copy/paste fail. You’re right that I had x[1], I’ve updated it above.

Odd that you’re values aren’t going above 127 though, I not sure what’s going on there. Assuming you have this probe, the same as me?

Does the hex log give any clues?

Thanks for sharing this @Markg! My probe will be arriving… soon, will see if I can get your config working.

The Inkbird integration in Home Assistant core uses inkbird-ble/src/inkbird_ble/parser.py at cb5ceeac9d7a2dd6d923c8ca5b7ddd220ef798a3 · Bluetooth-Devices/inkbird-ble · GitHub to parse the advertisement packets - looks like it should be a fairly straightforward change to get your work translated into Python and added to that repo?

I have the same probe and would like to get it working in HA.
Is the code all written to the esp32 in esphome, I did try and compile on the older version of the code but got an error on the lambda section on ble_client.

I’ve tried again with the updated code and works aftering entering the correct mac address.

Yes I’m using esp32, what did you need to change? I may have messed up copying something else and will update the snippet above.

Great that you got it working!

That sounds like a good plan, I did take a look but couldn’t work it out, will take another look sometime if nobody beats me to it.

Same probe, I’ll try to take some logs when I have time. Nevertheless you can’t fit 0-300 in 8 bits, so there must be some more info somewhere, no?

Thanks for your work on this so far, it’s going to be great to have this hooked up to HA.

That’s a good point, I hadn’t checked the max temp of the probe and only really use it for low and slow bbq so didn’t notice. I wonder if it’ll use the last bit of the first byte for the ambient temp, which has always been a constant 0xAA when I’ve looked.

Hi All, perhaps a noob question but I am looking for an easy way to check what Mac address to use? any tips and or recommendations are more than welcome.

BTW, thank you so much for putting the effort in setting this up!

Check the Setting up devices section on the page above and add this section to your ESP32:

# Example configuration entry for finding
# MAC addresses, Service UUIDs, iBeacon UUIDs, and identifiers
esp32_ble_tracker:
  on_ble_advertise:
    - then:

logger:
  level: VERY_VERBOSE
1 Like

How great that you made this working with ESP Home and that you share this with us.

I’m trying to configure this in ESP Home, but am a beginner. What I did is in the ESPHome Device Builder, add-on add a new device, and select for ESP32. When I edit the yaml I just copied your code in there.
But then it gives an error at the first line:
‘esphome’ section missing from configuration. Please make sure your configuration has an ‘esphome:’ line in it.

What am I doing wrong here? Or can’t I just copy/paste this code?

You’ll need some basic config for esphome aswell as the above, something similar to the example at the top of this page, depending on which device you have.

# Example configuration entry
esphome:
    name: livingroom
    comment: Living room ESP32 controller
    area: Living Room

esp32:
    board: nodemcu-32s

Thank you, I think I’m getting it now a bit more. And do you also need an ESP32 device with BLE? Or is it possible to run this from HA directly without this?

You’d need an esphome device with ble, although if someone was to amend the Inkbird home assistant integration that could change.

1 Like

Thank you so much with helping out. I got all working now.

1 Like

@Markg awesome job

I have a cheaper/newer Model which is not supported yet and also does not work with your code. Inkbird INT-11I-B
How did you finde the characteristic_uuid. How did you find out how the data is encoded?
Any advise on how to get started?