ESPHome Custom Component for the iGrill Bluetooth Thermometers This component will let you use a supported ESP32 to read sensor values from IGrill bluetooth thermometers and Pulse BBQ's.
Important
To be compatible with ESPHome 2026.3.0 or above, you need to v1.4 or later of this component
To use this component, include it as an External component
external_components:
- source: github://bendikwa/esphome-igrill@v1.4IGrill devices can be found using the igrill_ble_listener
To find out your device’s MAC address, add the following to your ESPHome configuration:
esp32_ble_tracker:
igrill_ble_listener:The device will then listen for nearby devices, and display a message like this one:
[I][igrill_ble_listener:029]: Found IGrill device Name: iGrill_mini (MAC: 70:91:8F:XX:XX:XX)
Once the device is found, take note of the device MAC address. You will use it when configuring a sensor below.
You can now remove the igrill_ble_listener device tracker from your configuration.
In principle, all IGrill devices, including the Pulse 2000 are supported, but I do not own all of them. The ones with a checkmark in the list are confirmed working IGrill models:
- IGrill mini
- IGrill mini V2
- IGrill V2 - Thanks to stogs for verifying
- IGrill V202
- IGrill V3
- Weber Pulse 1000 Thanks to samvanh for verifying
- Weber Pulse 2000 Thanks to PaulAntonDeen for testing and verifying
- iDevices LLC Kitchen Bleutooth Smart Thermometer Thanks to Burak for testing and verifying
If you own one of the untested models, I would be thankfull if you create a ticket so we can get it confirmed working.
esp32_ble_tracker:
ble_client:
- mac_address: 70:91:8F:XX:XX:XX
id: igrill_device
sensor:
- platform: igrill
ble_client_id: igrill_device
update_interval: 30s # default
battery_level:
name: "IGrill v3 battery"
temperature_probe1:
name: "IGrill v3 temp probe 1"
temperature_probe2:
name: "IGrill v3 temp probe 2"
temperature_probe3:
name: "IGrill v3 temp probe 3"
temperature_probe4:
name: "IGrill v3 temp probe 4"- update_interval (Optional, Time) The interval between each read and publish of sensor values. Defaults to "30s"
- unit_of_measurement (Optional, string): Manually set the unit of measurement the sensor should advertise its values with. This does not actually do any maths (conversion between units). Defaults to "°C"
- send_value_when_unplugged (Optional, boolean): When set to
false, the component will skip publishing for probes that are unplugged. Defaults totrue - unplugged_probe_value (Optional, integer): The value to publish when a probe is disconnected, and send_value_when_unplugged is
true. Defaults to 0
- temperature_probe1 (Optional) The reported temperature of probe 1
- temperature_probe2 (Optional) The reported temperature of probe 2
- temperature_probe3 (Optional) The reported temperature of probe 3
- temperature_probe4 (Optional) The reported temperature of probe 4
- pulse_heating_actual1 (Optional) The reported temperature of the left heating element on a Pulse 2000
- pulse_heating_actual2 (Optional) The reported temperature of the right heating element on a Pulse 2000
- pulse_heating_setpoint1 (Optional) The reported setpoint of the left heating element on a Pulse 2000
- pulse_heating_setpoint2 (Optional) The reported setpoint of the right heating element on a Pulse 2000
- propane_level (Optional) The propane level on a V3 device
- battery_level (Optional) The battery level of the igrill device
If you require HA sensors to indicate if a BT connection to the iGrill device is established (e.g. for conditional cards), you can use the automations included in ble_client to update a template binary sensor like this:
ble_client:
- mac_address: 70:91:8F:XX:XX:XX
id: igrillv3
on_connect:
then:
- binary_sensor.template.publish:
id: v3_connection_bin
state: ON
on_disconnect:
then:
- binary_sensor.template.publish:
id: v3_connection_bin
state: OFF
binary_sensor:
- platform: template
name: "iGrill V3 connection status"
id: v3_connection_bin
device_class: connectivity
entity_category: diagnosticESPHome does not support setting sensor temperature unit runtime, so this must be set at compiletime in the YAML config using the unit_of_measurement value. This defaults to "°C".
The ESPHome setting is per sensor, but the iGrill has the same for all probes, so if you want to have temperature reported in Farenheit, you need to set unit_of_measurement: "°F" on all probes.
You need to set your device to the same unit as you configure in YAML using the iGrill app.
A warning is logged if a mismatch in config is detected.
If the ESPHome device can't connect to your IGrill, please make sure that you disconnect it from any other devices you have used in the past. IGrill devices can't maintain multiple connections.
The same goes the other way around. If you use this component to connect to your IGrill, you can not use the mobile app at the same time.
Also, you can turn the log level up to Verbose to see more diagnostics:
logger:
level: VERBOSEThis is a work in progress, and some things do not work yet.
What works:
- MAC address discovery with
igrill_ble_listener - Connection and authorization
- Detection of model and number of probes
- Publishing of probe temperatures
- Publishing of Pulse 2000 heating element values
- Publishing of battery level
- Publishing of propane level (Untested)
Use correct temperature unit (read from device)
TODO:
- Publish firmware version
- Read and write temperature setpoint on probes
- Set temperature unit (write to device)