Support for MEATER true wireless cooking thermometer

Hi,

I have a MEATER bluetooth LE cooking thermometer: https://store-eu.meater.com/products/meater

Meater produces 3 versions:
The original MEATER,
MEATER plus and
MEATER Block

The last one is supported using the MEATER integration, but it relies on a cloud service and uses wifi.

All 3 versions is using self-contained bluetooth LE probes that can connect by bluetooth directly to a phone.
I have used LightBlue (app) to sniff trafik from it, and it seems to use simple unencrypted bluetooth, so I believe it should be reasonably simple to implement a direct integration, possibly using ESPHome bluetooth proxy.

But this is way out of my abilities :frowning:
If anyone is up for this task (@bdraco ?), I’m more than willing to provide any info I can gather from LightBlue or what ever app’s that might be helpful.

Regards
Morten Vinding

I think the best way would be to see if the BLE Passive monitor integration could handle this.
The framework for catching the BLE data and pass them on to HA is already there, so it is just a matter of decoding the device communication.

BTW: always remember to vote for your suggestions. :wink:

Good idea!
Didn’t realise it existed. I will have a look at it and see if I, or somebody more knowledgeable than me, can make it work.

Thank you

For BLE monitor, I have made a special page with info how to collect data.

Just found it.
Excellent work, makes it very easy to submit data :+1:

I have created https://github.com/custom-components/ble_monitor/issues/1087 for this.

Not really sure if any of the data from Home Assistant is of any use, but en LightBlue I have found a value there seems to change with temperature, although I haven’t been able to figure out if it’s HEX, DEC or F or C.
UUID: 7EDDA774-045E-4BBF-909B-45D1991A2876

1 Like

Any update on the Meater BLE soultion? Would be great to have a bluetooth proxy and/or a direct blueooth integration for HA. Meater is great, but I don’t like to “waste” my phone for cooking purposes for hours :slight_smile:

I have made a ESPHome yaml config to get it in to HA.
But the MEATER probe can only handle one bluetooth connection a time, so you can’t have it both in HA and connected to the app.

What I really would like to do, is to have ESPHome broadcast the MEATER data either as UDP packages or send it to the MEATER MQTT cloud server.
It looks like the MEATER block, and the MEATER app does both.

Notice it’s for a ESP32-C3, but will also compile for classic ESP32.
You will have to find your MEATER’s MAC address and ad to the yaml

2 Likes

Hi,
I just received my Wemos D1 Mini EPS32 and would like to try this. How did you get the Mac of the meater?
It is not on the device and hwn it is connecte dto my Iphone I can´t find it and my Windows PC does not even want to connect to it at all. Any hint on how to easily get the Mac?

Thanks

Pyha it’s been some time and honestly I don’t remember exactly how I got it.
iPhones seems to hide it for the user (I’m a iPhone user my self).

I think it was either using bluez in linux, or using the passive ble integration in Home Assistant.

But it looks like this should do exactly what you need: ESP32 Bluetooth Low Energy Scanner — ESPHome

Then just look at the log output from it.

Hi @MortenVinding, I’ve taken the code you posted above and it seems to be working, although my Meater is showing the same value for ambient and tip. Have you come across this?

I think that this is a Meater feature rather than a bug. In the Meater app the ambient sensor doesn’t report back under 40 degrees (docs), in this case the code above reports back the same values for both.

Ahh yes you are right.
Totally forgot that.
The ambient temperature is a function of the tip temperature.

Not really sure how this works to be honest, I just shamefully stole it from a python script :blush:

First of all, great work and thanks for sharing the esphome code! But in line with earlier questions, do you you ever get different readings for tip and ambient? Just tested it with some hot water where the probe is submerged in hot water, just above ‘line’ and the black part is clearly on the outside.

Even at 90C, the reading stays the same for both ambient and tip, so I guess there is something amiss…either in my probe, or in the code…

@anthonyangel did you get it to work?

Update: Never mind…that was an evening wasted…I had in my mind that the minimum of the tip should be over 40C to show differences…but of course this should be that the ambient should be over 40C to see it changing…Put my test setup in a preheating oven and quickly saw the ambient temperature rising whereas the tip stayed the same. Ah well…did learn some new stuff…

Awesome! This actually makes the Meater useful.
Works like a charm :sunglasses:

Does anyone know if this works with the new Meater 2 Plus probes?

3 Likes

Thank you :slight_smile:
Glad it is useful

1 Like

Works perfect! However, I notice my Meater+ charger/repeater seems to shut off after a while causing a disconnection. Have you ever observed the same?

Ich copied the code and only changed the mac and chanched the board to esp32dev

But I only got this from my Meater 2 Plus

[10:54:16][W][ble_sensor:123]: [firmware] Cannot poll, not connected
[10:54:17][W][ble_sensor:123]: [MEATER tip temperature] Cannot poll, not connected
[10:54:22][D][esp32_ble_client:110]: [0] [MAC] ESP_GATTC_CONNECT_EVT
[10:54:22][D][esp32_ble_client:110]: [0] [MAC] ESP_GATTC_OPEN_EVT
[10:54:22][I][ble_sensor:031]: [MEATER tip temperature] Connected successfully!
[10:54:22][I][ble_sensor:031]: [MEATER ambient temperature] Connected successfully!
[10:54:22][I][ble_sensor:031]: [MEATER battery level] Connected successfully!
[10:54:22][I][ble_sensor:031]: [firmware] Connected successfully!
[10:54:22][D][esp32_ble_tracker:266]: Starting scan...
[10:54:23][D][esp32_ble_client:306]: [0] [MAC] Event 46
[10:54:23][D][esp32_ble_client:110]: [0] [MAC] ESP_GATTC_SEARCH_CMPL_EVT
[10:54:23][I][esp32_ble_client:227]: [0] [MAC] Connected
[10:54:23][D][sensor:094]: 'MEATER tip temperature': Sending state nan °C with 2 decimals of accuracy
[10:54:23][W][ble_sensor:049]: No sensor characteristic found at service A75CC7FC-C956-488F-AC2A-2DBC08B63A04 char 7EDDA774-045E-4BBF-909B-45D1991A2876
[10:54:23][D][sensor:094]: 'MEATER ambient temperature': Sending state nan °C with 2 decimals of accuracy
[10:54:23][W][ble_sensor:049]: No sensor characteristic found at service A75CC7FC-C956-488F-AC2A-2DBC08B63A04 char 7EDDA774-045E-4BBF-909B-45D1991A2876
[10:54:23][D][sensor:094]: 'MEATER battery level': Sending state nan % with 0 decimals of accuracy
[10:54:23][W][ble_sensor:049]: No sensor characteristic found at service A75CC7FC-C956-488F-AC2A-2DBC08B63A04 char 2ADB4877-68D8-4884-BD3C-D83853BF27B8
[10:54:23][D][esp32_ble_client:188]: [0] [MAC] cfg_mtu status 0, mtu 247
[10:54:23][I][ble_rssi_sensor:049]: ESP_GAP_BLE_READ_RSSI_COMPLETE_EVT RSSI: -82
[10:54:23][D][sensor:094]: 'MEATER RSSI': Sending state -82.00000 dBm with 0 decimals of accuracy
[10:54:23][W][component:214]: Component esp32_ble took a long time for an operation (0.11 s).
[10:54:23][W][component:215]: Components should block for at most 20-30ms.
[10:54:52][D][api:102]: Accepted 192.168.2.100
[10:54:52][W][api.connection:107]: : Reading failed: BAD_INDICATOR errno=11
[10:55:01][I][ble_rssi_sensor:049]: ESP_GAP_BLE_READ_RSSI_COMPLETE_EVT RSSI: -79
[10:55:01][D][sensor:094]: 'MEATER RSSI': Sending state -79.00000 dBm with 0 decimals of accuracy
[10:55:11][W][ble_sensor:123]: [MEATER battery level] Cannot poll, not connected
[10:55:15][W][ble_sensor:123]: [MEATER ambient temperature] Cannot poll, not connected
[10:55:16][D][esp32_ble_client:110]: [0] [MAC] ESP_GATTC_READ_CHAR_EVT
[10:55:16][D][text_sensor:064]: 'MEATER firmware': Sending state '02|00.02.02.39'
[10:55:16][D][sensor:094]: 'firmware': Sending state 14.00000  with 0 decimals of accuracy
[10:55:17][W][ble_sensor:123]: [MEATER tip temperature] Cannot poll, not connected
[10:55:52][D][api:102]: Accepted 192.168.2.100
[10:55:52][W][api.connection:107]: : Reading failed: BAD_INDICATOR errno=11
[10:56:01][I][ble_rssi_sensor:049]: ESP_GAP_BLE_READ_RSSI_COMPLETE_EVT RSSI: -102
[10:56:01][D][sensor:094]: 'MEATER RSSI': Sending state -102.00000 dBm with 0 decimals of accuracy
[10:56:11][W][ble_sensor:123]: [MEATER battery level] Cannot poll, not connected
[10:56:15][W][ble_sensor:123]: [MEATER ambient temperature] Cannot poll, not connected
[10:56:16][D][esp32_ble_client:110]: [0] [MAC] ESP_GATTC_READ_CHAR_EVT
[10:56:16][D][text_sensor:064]: 'MEATER firmware': Sending state '02|00.02.02.39'
[10:56:16][D][sensor:094]: 'firmware': Sending state 14.00000  with 0 decimals of accuracy
[10:56:17][W][ble_sensor:123]: [MEATER tip temperature] Cannot poll, not connected
[10:56:52][D][api:102]: Accepted 192.168.2.100
[10:56:53][W][api.connection:107]: : Reading failed: BAD_INDICATOR errno=11
[10:57:01][I][ble_rssi_sensor:049]: ESP_GAP_BLE_READ_RSSI_COMPLETE_EVT RSSI: -78
[10:57:01][D][sensor:094]: 'MEATER RSSI': Sending state -78.00000 dBm with 0 decimals of accuracy
[10:57:11][W][ble_sensor:123]: [MEATER battery level] Cannot poll, not connected
[10:57:15][W][ble_sensor:123]: [MEATER ambient temperature] Cannot poll, not connected
[10:57:16][D][esp32_ble_client:110]: [0] [MAC] ESP_GATTC_READ_CHAR_EVT
[10:57:16][D][text_sensor:064]: 'MEATER firmware': Sending state '02|00.02.02.39'
[10:57:16][D][sensor:094]: 'firmware': Sending state 14.00000  with 0 decimals of accuracy
[10:57:17][W][ble_sensor:123]: [MEATER tip temperature] Cannot poll, not connected
[10:57:53][D][api:102]: Accepted 192.168.2.100
[10:57:53][W][api.connection:107]: : Reading failed: BAD_INDICATOR errno=11
[10:58:01][I][ble_rssi_sensor:049]: ESP_GAP_BLE_READ_RSSI_COMPLETE_EVT RSSI: -78
[10:58:01][D][sensor:094]: 'MEATER RSSI': Sending state -78.00000 dBm with 0 decimals of accuracy
[10:58:11][W][ble_sensor:123]: [MEATER battery level] Cannot poll, not connected

Update: I recive some data, but the Temperature is worng.

I chanced:

    service_uuid: 'c9e2746c-59f1-4e54-a0dd-e1e54555cf8b'
    characteristic_uuid: '2adb4877-68d8-4884-bd3c-d83853bf27b8'
    id: firmware
    service_uuid: '180A'
    characteristic_uuid: '2A26'

Wrong Tip Temp:

19.491,00 °C

Sould be

23,4 °C

Hi
Just noticed your post. I am exeriencing exactly the same disconnectoin after a while.
If connected to the Meater app it does not happen. I suspect there is some kind of keep-alive signal sent to the thermometer to keep it running.
Anyone have a suggestion how to pick this up between the app and the probe? Then it would probably be fairly straight forward to add this to the ESPHome code.

So far I haven’t noticed any disconnections. How long does it take for these to come?

I have the problem that the temperature is displayed incorrectly. What kind of model do you use?