Skip to content

Repository files navigation

meater-golang

meater-golang logo

Read the MEATER wireless meat thermometer probe over Bluetooth Low Energy from Go — with a clean, self-hosted web UI.

The program scans for a probe advertising the name MEATER, connects to it, subscribes to the temperature characteristic, decodes the tip (internal meat) and ambient (cook) temperatures, and serves a live dashboard with a temperature chart, doneness targets, ETA, and browser alerts.

MEATER Monitor web UI

More screenshots: Grafana dashboards · Home Assistant

Quick start: Home Assistant + ESP32

  1. Flash a Wi-Fi ESP32 (requires PlatformIO):
cd firmware
pio run -e esp32-wifi -t upload
  1. Connect the bridge to Wi-Fi. Join the meater-bridge-setup network that appears after first boot and choose your home Wi-Fi in the setup page.

  2. Run the monitor. If Home Assistant runs in Docker on Linux, start this container beside it:

    docker run -d \
      --name meater \
      --restart unless-stopped \
      --network host \
      -v meater-data:/data \
      ghcr.io/awlx/meater:latest \
      -http :8088 -db /data/meater.db -bridge auto

    --network host lets mDNS find the ESP32 automatically. Home Assistant OS cannot run arbitrary Docker containers, so run this command on another always-on Linux/Docker computer on the same network instead.

  3. Add it to Home Assistant. In HACS, add this repository as an Integration, install MEATER Monitor (self-hosted), restart Home Assistant, then add the integration and enter the monitor computer's hostname and port 8088.

Take the probe out of its charger and start the cook from the Home Assistant Cook session switch. See the ESP32 guide, installation guide, and Home Assistant guide for persistent service setup and troubleshooting.

Highlights

  • Everything stays on your network — no MEATER account, no cloud, ever. The probe is read directly over Bluetooth (or the ESP32 bridge below) and served from your own instance; the Home Assistant integration talks straight to that instance over the LAN too, so nothing about your cook ever leaves your network.
  • Live web dashboard — a temperature-over-time chart, doneness presets, and an ETA that stays sane through a stall, all pushed to the browser in real time (no polling), for as many phones/laptops as want to watch.
  • 📡 Put the probe anywhere — no Bluetooth range needed at the server. The host running this program normally has to be within a few meters of the probe, which is awkward when the grill is outside and the server lives indoors. Add a cheap ESP32 bridge next to the grill instead: it holds the Bluetooth link and relays the probe over your existing network (Ethernet or WiFi) to the host, wherever that lives. This is the feature that makes an always-on, self-hosted setup actually practical — see docs/remote-bridge.md.
  • Cook history & smarter ETA — every cook is saved to SQLite, past cooks can be browsed or deleted, and the ETA learns from your own past cooks of the same meat type.
  • Home Assistant integration (via HACS) and Prometheus metrics for automation and monitoring, with ready-made Grafana dashboards for either source.
  • Mock mode to explore the UI with simulated data — no probe or Bluetooth required.

See docs/ for the full feature list, configuration reference, and integration guides.

Requirements

  • A charged MEATER probe removed from its charging block (it only advertises when out of the block).
  • A Bluetooth LE adapter — or an ESP32 bridge instead, in which case the host itself needs no local Bluetooth at all.
  • Go 1.26+ to build from source.

Quick start

go run . -mock        # explore the web UI with simulated data

Open http://localhost:8080/ and press Start — the app sits idle until you do, so it never scans in the background. With a real probe, just drop -mock:

go run .              # serve the dashboard on :8080, idle until you press Start

Press Ctrl+C to disconnect and exit.

Install

Docker — try the UI with no probe needed:

docker run --rm -p 8080:8080 ghcr.io/awlx/meater:latest -mock -http :8080

Binary + systemd:

CGO_ENABLED=0 go build -o meater .

Full instructions for both (Docker Compose for a real probe, GHCR images, and the systemd unit) are in docs/install.md.

Documentation

Doc Covers
docs/install.md Docker Compose, GHCR images, binary + systemd setup.
docs/configuration.md The full -flag reference.
docs/remote-bridge.md 📡 The ESP32 bridge — read the probe over the network instead of local Bluetooth.
docs/https.md HTTPS/TLS options, and how multiple viewers share one probe.
docs/home-assistant.md Installing via HACS and the entities it exposes.
docs/metrics.md The Prometheus /metrics endpoint and example alert rules.
docs/grafana/ Ready-made Grafana dashboards, for the native /metrics or Home Assistant.
docs/architecture.md Project layout and how the BLE temperature payload is decoded.
firmware/ ESP32 bridge firmware (PlatformIO/C++), wiring, and flashing.

Acknowledgements

Thanks to nathanfaber/meaterble for the community reverse-engineering pointers — it was a helpful reference for where to look in the BLE GATT services and temperature payload.

About

Read a MEATER wireless meat thermometer over BLE from Go or remote via ESP32, NO Cloud required, with a live self-hosted web dashboard and Homeassistant integration (HACS)

Resources

Stars

8 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages