Recommendation for BBQ thermostat that can work with HA

Hey,

I was wondering if you could explain a bit more how you got this working? I have done some probing with BLE on my ESP32 but I can’t figure out how I can get it to work. I got the same probe as you, so any help would be greatly appreciated. Thanks!

In Europe I can find this model BF-30 Pro Wireless Meat Thermometer – BFOUR but can you explain with more detail how did you perform the integration? I have the GL-iNet GL-S10 flashed with ESPhome.
Thank you.

I have a Fireboard 2 with the blower controller and they have a API you can use. This is what I use to get that setup:

# rest.yaml
- authentication: basic
  username: !secret email_login
  password: !secret fireboard_pass
  scan_interval: 20
  resource: https://fireboard.io/api/v1/devices/your-api-url.json
  sensor:
    - name: "Fireboard name"
      value_template: "OK"
      json_attributes:
        - device_log
        - channels
        - latest_temps

# template.yaml
- sensor:
  - device_class: TEMPERATURE
    unit_of_measurement: °F
    default_entity_id: sensor.fireboard_channel1_temp
    name: Fireboard 1
    state: '{{ state_attr(''sensor.fireboard_name'', ''latest_temps'') | selectattr(''channel'',
      ''eq'', 1) | map(attribute=''temp'') | list | first | default(0.0) }}'

  - device_class: TEMPERATURE
    unit_of_measurement: °F
    default_entity_id: sensor.fireboard_channel2_temp
    name: Fireboard 2
    state: '{{ state_attr(''sensor.fireboard_name'', ''latest_temps'') | selectattr(''channel'',
      ''eq'', 2) | map(attribute=''temp'') | list | first | default(0.0) }}'

  - device_class: TEMPERATURE
    unit_of_measurement: °F
    default_entity_id: sensor.fireboard_channel3_temp
    name: Fireboard 3
    state: '{{ state_attr(''sensor.fireboard_name'', ''latest_temps'') | selectattr(''channel'',
      ''eq'', 3) | map(attribute=''temp'') | list | first | default(0.0) }}'

  - device_class: TEMPERATURE
    unit_of_measurement: °F
    default_entity_id: sensor.fireboard_channel4_temp
    name: Fireboard 4
    state: '{{ state_attr(''sensor.fireboard_name'', ''latest_temps'') | selectattr(''channel'',
      ''eq'', 4) | map(attribute=''temp'') | list | first | default(0.0) }}'

  - device_class: TEMPERATURE
    unit_of_measurement: °F
    default_entity_id: sensor.fireboard_channel5_temp
    name: Fireboard 5
    state: '{{ state_attr(''sensor.fireboard_name'', ''latest_temps'') | selectattr(''channel'',
      ''eq'', 5) | map(attribute=''temp'') | list | first | default(0.0) }}'

  - device_class: TEMPERATURE
    unit_of_measurement: °F
    default_entity_id: sensor.fireboard_channel6_temp
    name: Fireboard 6
    state: '{{ state_attr(''sensor.fireboard_name'', ''latest_temps'') | selectattr(''channel'',
      ''eq'', 6) | map(attribute=''temp'') | list | first | default(0.0) }}'

  - default_entity_id: sensor.fireboard_channel1_label
    name: FB Label 1
    state: '{{ state_attr(''sensor.fireboard_name'', ''channels'') | selectattr(''channel'',
      ''eq'', 1) | map(attribute=''channel_label'') | list | first | default('' '')
      }}'

  - default_entity_id: sensor.fireboard_channel2_label
    name: FB Label 2
    state: '{{ state_attr(''sensor.fireboard_name'', ''channels'') | selectattr(''channel'',
      ''eq'', 2) | map(attribute=''channel_label'') | list | first | default('' '')
      }}'

  - default_entity_id: sensor.fireboard_channel3_label
    name: FB Label 3
    state: '{{ state_attr(''sensor.fireboard_name'', ''channels'') | selectattr(''channel'',
      ''eq'', 3) | map(attribute=''channel_label'') | list | first | default('' '')
      }}'

  - default_entity_id: sensor.fireboard_channel4_label
    name: FB Label 4
    state: '{{ state_attr(''sensor.fireboard_name'', ''channels'') | selectattr(''channel'',
      ''eq'', 4) | map(attribute=''channel_label'') | list | first | default('' '')
      }}'

  - default_entity_id: sensor.fireboard_channel5_label
    name: FB Label 5
    state: '{{ state_attr(''sensor.fireboard_name'', ''channels'') | selectattr(''channel'',
      ''eq'', 5) | map(attribute=''channel_label'') | list | first | default('' '')
      }}'

  - default_entity_id: sensor.fireboard_channel6_label
    name: FB Label 6
    state: '{{ state_attr(''sensor.fireboard_name'', ''channels'') | selectattr(''channel'',
      ''eq'', 6) | map(attribute=''channel_label'') | list | first | default('' '')
      }}'

Are they BT or Wifi? What integration do you use?

Bluetooth.
Inkbird integration

Sorry I should have asked in the first place...

Which model?

I'd like to use a wireless version and I see them on Amazon but I'm not sure if that version works with that integration.

I got this one:
INKBIRD Bluetooth BBQ-grilltermometer med 6 prober IBT-6XS

Thank you for the info.

There's a few different brands/models I'm looking at right now.

I have a completely homemade one using an ESP module over MQTT with wired temp sensors that I've been using for years but it's finicky sometimes and it might be time for an upgrade. And the wireless ones are looking tempting.

Well the one I linked to is not truly wireless.
It has wired probes to a battery powered brick that you can charge with USB C (I'm 99% sure about the USB C part).
The brick has magnets to that you can attach it to the BBQ

Sorry I wasn't clear.

I saw that yours weren't wireless to the hub and I'm looking for totally wireless ones like the Meater probes that use BT to it's hub.

But the Meater probes are a bit pricey so I was looking for a bit cheaper alternative that was also totally wireless.

That is why I bought the one I did.
I did not find the wires that much of an inconvenience compared to the price.
Especially since I don't use the thermometer that much.

A question of a rookie: where should I place this configuration to make it work?

That is ESP32 YAML.
You need an ESP32 and ESP-Home, the YAML should be added to the ESPs configuration and flashed.

If the code works as he posted then its just a few minutes of work.
You connect USB, create a new device ( a few clicks) and then you copy paste what the code and append it to the base configuration that is already premade for you.

Thank you so much! I just started to upload it on an esp32! any idea how I can set the preset temperature on HA and get in on the screen of Bfour?

I doubt that is possible.
Can it be done using the phone?

Hey, did you get this working? I tried the above and it has an issue triggering the lambda, it seems to only receive the first byte of the temperature message,

Thanks!

Yeap I did! Here is my code:

substitutions:
  name: gl-s10-bt-proxy-d7a4b8
  friendly_name: Bluetooth Proxy d7a4b8
packages:
  esphome.bluetooth-proxy: github://esphome/bluetooth-proxies/gl-inet/gl-s10.yaml@main
esphome:
  name: ${name}
  name_add_mac_suffix: false
  friendly_name: ${friendly_name}
api:
  encryption:
    key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
ota:
  - platform: esphome

button:
  - platform: restart
    name: Restart

esp32_ble:
  max_connections: 5
ble_client:
  - mac_address: XX:XX:XX:XX:XX:XX
    id: grill_bt5
    auto_connect: true

sensor:
  - name: "BF-60 Probe 1"
    platform: ble_client
    type: characteristic
    ble_client_id: grill_bt5
    service_uuid: "0000ffb0-0000-1000-8000-00805f9b34fb"
    characteristic_uuid: "0000ffb2-0000-1000-8000-00805f9b34fb"
    notify: true
    device_class: temperature
    unit_of_measurement: "°C"
    accuracy_decimals: 1
    lambda: |-
      auto offset = 0;
      auto temp = ((uint16_t)x[2+offset]*256 + x[3+offset]);
      if (temp == 0xFFFF) return NAN;
      return (float)temp/10;

  - name: "BF-60 Probe 2"
    platform: ble_client
    type: characteristic
    ble_client_id: grill_bt5
    service_uuid: "0000ffb0-0000-1000-8000-00805f9b34fb"
    characteristic_uuid: "0000ffb2-0000-1000-8000-00805f9b34fb"
    notify: true
    device_class: temperature
    unit_of_measurement: "°C"
    accuracy_decimals: 1
    lambda: |-
      auto offset = 2;
      auto temp = ((uint16_t)x[2+offset]*256 + x[3+offset]);
      if (temp == 0xFFFF) return NAN;
      return (float)temp/10;