A web-based dashboard for monitoring and controlling Green Mountain Grills. Provides reliable alerting for critical grill events like low pellets or target temperatures being reached.
- Slack and webhook alerts for grill events
- Configurable browser alert sounds
- Auto connect/reconnect to grill
- Real-time temperature history chart
- Grill controls (power, food temp, grill temp)
- Timers (stopwatch and countdown)
- REST API and JS client for extensions
Server cannot auto-discover the grill in Docker, so you must provide its IP:
cd src
docker build -t gmg .
docker run -it -p 80:80 -e "GMG_GRILL_HOST=xx.xx.xx.xx" gmgYou can omit GMG_ALERTS_SLACK_WEBHOOKURL if you're not using Slack.
Docker Compose runs the app alongside the grill emulator for local testing:
docker compose up --buildThe app will be available at http://localhost:3000.
The server is configured via environment variables or config files in src/gmg-server/config/.
| Variable | Description | Default |
|---|---|---|
GMG_GRILL_HOST |
IP address of the grill | 255.255.255.255 (broadcast/auto-discover) |
GMG_GRILL_PORT |
Grill UDP port | 8080 |
GMG_STATUS_POLLING_INTERVAL |
Status poll interval (ms) | 5000 |
GMG_ALERTS_SLACK_WEBHOOKURL |
Slack webhook URL for alerts | none |
GMG_DB_PATH |
Directory for SQLite database file | src/gmg-server/data/ |
GMG_DB_MAX_SIZE_MB |
Max database size before oldest rows are pruned | 50 |
See .env.example for a template. To customize alert sounds, replace the mp3 files in src/gmg-server/public/alerts/.
Prerequisites: Node 24+, .NET 10+ SDK (for the emulator)
- Clone the repo
- Start the emulator:
cd src/gmg-emulator && dotnet run - Start the server:
cd src/gmg-server && npm install && npm run start:dev - Start the UI:
cd src/gmg-app && npm install && npm run dev
The dev server (Vite) runs on http://localhost:5173 and proxies API requests to the server on port 3001.
VSCode users can open gmg.code-workspace and use the pre-configured debug launch configs.
A Makefile is included for common tasks. Run make help to see all targets:
make unit-test # run unit tests for gmg-client and gmg-server
make test # start app + emulator via Docker Compose
make test-down # stop testing environment
make test-logs # tail Docker Compose logs
make test-rebuild # rebuild and restart testing environment
make image # build Docker images (app + emulator)
make image-nc # build with no cache
make build-emulator # build the grill emulator (.NET)
make install # install all npm dependencies
make build # build UI and publish to server
make dev # start dev servers (server + Vite)
make clean # remove node_modules and build artifacts- Frontend: React 18, MUI 6, Vite, Chart.js 3, Socket.IO
- Backend: Express, Socket.IO, SQLite
- Emulator: .NET 10 (C#)
