Sign inSign up

xomoxcc/wachtmeater

By xomoxcc

Updated about 2 months ago

Image
0

2.4K

xomoxcc/wachtmeater repository overview

black-lint mypy and pytests BuildAndPushMultiarch Cumulative Clones PyPI Downloads PyPI

Gemini_Generated_Image_vka2wyvka2wyvka2_250x250.png

wachtmeater

MEATER BBQ probe monitoring with Matrix chat alerts and SIP phone call notifications.

Scrapes MEATER Cloud cook pages via CDP (Chrome DevTools Protocol), posts periodic status updates to Matrix rooms, and triggers SIP phone calls when alerts fire (fire out, target temperature reached, stall detected, etc.).

Why this exists

Long cooks (10-16 h) mean you sleep while the meat is on — and miss it when the fire goes out, a stall drags on, or the target temp is reached at 3 a.m. wachtmeater watches the MEATER Cloud page continuously, posts periodic status updates to Matrix so you can check in at a glance, and triggers a SIP phone call when something actually needs your attention. Tip: save the calling number as a VIP/priority contact on your phone so the call bypasses Do Not Disturb and wakes you up.

Screenshots

Beef Brisket, ~14 h cook, monitored start to finish.

Matrix chat mid-cook status: 86 °C, 9 h 22 min elapsed

Mid-cook Matrix status — 86 °C, 9 h 22 min elapsed.

MEATER Cloud dashboard: 5 min before cook ends, 94 °C / 95 °C target

MEATER Cloud: "5 min before cook ends" — 94 °C / 95 °C target.

Matrix chat near-end status: 94 °C, 13 h 36 min elapsed

Near-end Matrix status — 94 °C, 13 h 36 min elapsed.

MEATER Cloud finished summary: target 95 °C, peak 94 °C, approximately 14 hours

MEATER Cloud finished summary — target 95 °C, peak 94 °C, ~14 h total.

What it does

  • Periodically scrapes a MEATER Cloud cook URL via a remote Chrome browser (CDP)
  • Posts temperature status (internal, ambient, target) to E2E-encrypted Matrix rooms
  • Auto-creates a dedicated Matrix room per cook UUID; can simultaneously broadcast to a fixed operator room (room ID or #alias:srv)
  • Listens for Matrix commands to enable/disable alerts (tempdown, stall, wrap, ruhephase, ambient range, cookend, station-offline), override the per-cook check interval, and for testcall [<text>] to dial the pitmaster on demand
  • Cook-end detection via 4 mechanisms: consecutive fetch errors, probe removed, target reached, MEATER Cloud "finished" state
  • Triggers SIP phone calls via sipstuff-operator when alerts fire
  • Ships an in-cluster operator mode (wachtmeater-operator) that spawns/destroys/lists/resumes per-cook watcher Jobs from Matrix operator new <url> / operator delete <spec> / operator list / operator resume <spec> commands — only the configured pitmaster MXID may issue them
  • Persists state per cook UUID for resumable monitoring
  • TOML config support (wachtmeater.toml / wachtmeater.local.toml) alongside env vars / .env

Quick Start

Watcher (one cook)
docker run --rm \
  -e MEATER_URL=https://cooks.cloud.meater.com/cook/<uuid> \
  -e BROWSER_CDP_URL=http://your-chrome:9222 \
  -e MATRIX_HOMESERVER=https://matrix.example.com \
  -e MATRIX_USER=@bot:example.com \
  -e MATRIX_PASSWORD=secret \
  xomoxcc/wachtmeater:latest wachtmeater watcher
Operator (Matrix-driven controller)
docker run --rm \
  -e MATRIX_HOMESERVER=https://matrix.example.com \
  -e MATRIX_USER=@bot:example.com \
  -e MATRIX_PASSWORD=secret \
  -e MATRIX_PITMASTER=@you:example.com \
  -e MATRIX_OPERATOR_LISTENING_ROOM='#wachtmeater-ops:matrix.example.com' \
  xomoxcc/wachtmeater:latest wachtmeater-operator

In the listening room, the pitmaster MXID can then send operator new https://cooks.cloud.meater.com/cook/<uuid> to spawn a watcher Job, operator list to inspect, operator delete <uuid|short|index> to tear down. See the README for the full operator command reference.

Key Environment Variables

VariableDescription
MEATER_URLMEATER Cloud cook URL to monitor (required)
BROWSER_CDP_URLCDP endpoint for headless Chrome
MATRIX_HOMESERVERMatrix homeserver URL
MATRIX_USERMatrix bot user ID
MATRIX_PASSWORDMatrix bot password
AUTH_METHODpassword or jwt
CHECK_INTERVALSeconds between checks (default: 600)
COOKEND_ERROR_THRESHOLDConsecutive fetch errors before cook-end (default: 3)
COOKEND_PROBE_REMOVED_TEMPInternal temp (°C) below which probe counts as removed (default: 35.0)
STATION_OFFLINE_CALL_THRESHOLDConsecutive offline checks before the station-offline SIP call fires (default: 2)
MATRIX_AUTO_CREATE_ROOMAuto-create E2E-encrypted Matrix room per cook (default: false)
MATRIX_PITMASTERMXID allowed to issue operator … commands
MATRIX_OPERATOR_LISTENING_ROOMRoom ID/alias the operator listens in
OPERATOR_CRYPTO_STORE_PATHSeparate nio crypto store for the operator (default: /data/operator_crypto_store)
SOPERATORURLsipstuff-operator call endpoint

See the full README for all options.

Image Details

  • Base: python:3.14-slim-trixie
  • Non-root user (pythonuser)
  • Entrypoint: tini --
  • Multi-arch: linux/amd64, linux/arm64

License

This project is licensed under the LGPL where applicable/possible — see LICENSE.md. Some files/parts may use other licenses: MIT | GPL | LGPL. Always check per‑file headers/comments.

Authors

  • Repo owner (primary author)
  • Additional attributions are noted inline in code comments

Acknowledgments

  • Inspirations and snippets are referenced in code comments where appropriate.

⚠️ Note

This is a development/experimental project. For production use, review security settings, customize configurations, and test thoroughly in your environment. Provided "as is" without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software. Use at your own risk.

Tag summary

Content type

Image

Digest

sha256:cb41d07e0

Size

252.5 MB

Last updated

about 2 months ago

docker pull xomoxcc/wachtmeater