Skip to content

Protocol Reference

papac0rn edited this page Sep 17, 2026 · 1 revision

Protocol Reference

Technical details of the MAK Pellet Boss WiFi HTTP protocol. This documents the communication between the grill's WiFi controller and the server (originally makgrillsmobile.com, now your Home Assistant instance).

Overview

The Pellet Boss WiFi controller is an HTTP client. It periodically POSTs form-encoded telemetry to a fixed endpoint and parses the response body as a command string. There is no authentication, no TLS requirement, and no session state — each POST is independent.

Endpoint

POST /GrillService/Service HTTP/1.1
Host: makgrillsmobile.com
Content-Type: application/x-www-form-urlencoded

The grill resolves makgrillsmobile.com via DNS and POSTs to port 80. With a DNS rewrite pointing that hostname to your HA IP, the POST arrives at HA's HTTP server.

Request (grill → server)

Format

Standard form-encoded body (application/x-www-form-urlencoded).

Fields

Field Type Example Description
GrillId String WiFiCD240B Unique grill identifier (typically "WiFi" + last 6 hex of MAC)
Temp Integer 275 Current pit temperature in °F
Power String ON Current power state
Probe1 Integer 165 Meat probe 1 temperature in °F (0 = not connected)
Probe2 Integer 0 Meat probe 2 temperature in °F (0 = not connected)
Probe3 Integer 0 Meat probe 3 temperature in °F (0 = not connected)
GrillFlags String ATSET Status flags (comma-separated if multiple)

Power states

Value Meaning
ON Grill is running normally
OFF Grill is powered off
COOL Grill is in cooldown cycle (fan running, fire extinguishing)
CD Alternate cooldown indicator

Grill flags

Value Meaning
ATSET Grill has reached the target setpoint temperature
(empty) Normal operation, not at setpoint

Example request body

GrillId=WiFiCD240B&Temp=275&Power=ON&Probe1=165&Probe2=0&Probe3=0&GrillFlags=ATSET

Response (server → grill)

Format

The response body is a quoted string containing URL-encoded parameters. The grill parses these as commands.

"setPoint=225&potStatus=&cookMode=1&zoneProbe=1&power=1"

Important: The entire response body is wrapped in double quotes. The grill expects this format.

Fields

Field Type Values Description
setPoint Integer 150–500 Target temperature in °F
potStatus String (empty) Reserved (always empty in current implementation)
cookMode Integer 1, 2, 3 Cooking mode
zoneProbe Integer 1–4 Which probe controls the zone
power Integer 0, 1 Power command

Cook modes

Value Mode Description
1 Smoke Low temperature, heavy smoke production
2 Grill Medium temperature, moderate smoke
3 Sear High temperature, minimal smoke

Zone probes

Value Probe
1 Probe 1
2 Probe 2
3 Probe 3
4 Pit probe

Power values

Value Action
0 Power off
1 Power on

Example response

"setPoint=275&potStatus=&cookMode=2&zoneProbe=1&power=1"

This tells the grill: set target to 275°F, grill mode, zone controlled by probe 1, power on.

Timing

  • The grill POSTs every few seconds while powered on (interval varies, typically 3–10 seconds)
  • The grill stops POSTing when powered off (after cooldown completes)
  • There is no keepalive or heartbeat when the grill is off
  • The integration uses a 60-second timeout to determine connectivity

POST flow diagram

  Grill powers on
       │
       ▼
  Connect to WiFi
       │
       ▼
  Resolve makgrillsmobile.com via DNS
       │
       ▼
  ┌─────────────────────────┐
  │ POST /GrillService/Service │◄─── repeats every few seconds
  │ Body: GrillId=...&Temp=... │
  └─────────────┬─────────────┘
                │
                ▼
  ┌─────────────────────────────┐
  │ Response: "setPoint=...&..." │
  └─────────────┬───────────────┘
                │
                ▼
  Grill applies commands
  (setpoint, cook mode, power)
                │
                ▼
  Wait interval, then POST again

Security considerations

  • No authentication — any device that can reach the endpoint can send commands to the grill. This is why network isolation (VLAN + firewall rules) is recommended. See Network Hardening.
  • No encryption — traffic is plain HTTP. On a local network this is acceptable; do not expose the endpoint to the internet.
  • No replay protection — the grill applies whatever the last response says. The integration tracks user-set commands to avoid overriding the grill's own state.

Building on this protocol

If you want to build your own controller (not using Home Assistant), the minimum viable implementation is:

  1. Run an HTTP server on port 80
  2. Handle POST /GrillService/Service
  3. Parse the form-encoded body for telemetry
  4. Return a quoted command string
# Minimal example (Python/Flask)
from flask import Flask, request

app = Flask(__name__)

@app.route('/GrillService/Service', methods=['POST'])
def grill_service():
    temp = request.form.get('Temp', '0')
    power = request.form.get('Power', 'OFF')
    print(f"Grill: {temp}°F, Power: {power}")
    return '"setPoint=225&potStatus=&cookMode=1&zoneProbe=1&power=1"'

app.run(host='0.0.0.0', port=80)

For a Docker-based implementation, see bawilson2/mak-controller which was the original proof-of-concept for local MAK grill control.

Clone this wiki locally