Skip to content

Bambu Lab

Track 3D print progress with layer counts, nozzle temperature, and ETA on your Lock Screen via local MQTT.

Live Activity demonstration

How It Works

The pushward-bambulab bridge connects directly to your printer over local MQTT (no cloud dependency) and streams print progress to PushWard.

  1. MQTT connection -- connects to printer on port 8883 using TLS with the printer's access code
  2. State tracking -- subscribes to printer reports and merges delta updates into a full state
  3. Progress updates -- sends layer count, nozzle temperature, and progress bar to PushWard every 5s (configurable)
  4. Lifecycle management -- automatically starts tracking when a print begins and ends when it finishes, fails, or is cancelled

Setup

1. Enable Developer Mode

On your Bambu Lab printer, enable Developer Mode (or LAN-only mode) in the printer settings. This allows local MQTT connections.

2. Get the Access Code

Navigate to Settings > WLAN on the printer to find the 8-character access code.

3. Get Your Integration Key

Open the PushWard app → Settings → Integration Key to find your default hlk_ key.

To create a dedicated key for this integration:

  1. Go to Settings → Manage Keys
  2. Tap +
  3. Set name (e.g. "Bambu Lab"), choose , scope, and optionally restrict tobambu-*
  4. Copy the generated hlk_ key

4. Deploy the Bridge

docker-compose.yml
services:
  pushward-bambulab:
    image: ghcr.io/mac-lucky/pushward-bambulab:latest
    environment:
      PUSHWARD_URL: https://api.pushward.app
      PUSHWARD_API_KEY: hlk_YOUR_INTEGRATION_KEY
      PUSHWARD_BAMBULAB_HOST: 192.168.1.100
      PUSHWARD_BAMBULAB_ACCESS_CODE: 12345678
      PUSHWARD_BAMBULAB_SERIAL: 01S00A123456789
    restart: unless-stopped
Info

No ports need to be exposed -- the bridge connects outbound to both the printer (MQTT) and PushWard API.

Configuration

Environment VariableDescriptionDefault
PUSHWARD_URLPushWard server URL--
PUSHWARD_API_KEYIntegration key (hlk_ prefix)--
PUSHWARD_BAMBULAB_HOSTPrinter IP address or hostname--
PUSHWARD_BAMBULAB_ACCESS_CODE8-character access code from printer Settings > WLAN--
PUSHWARD_BAMBULAB_SERIALPrinter serial number (15 characters)--
PUSHWARD_BAMBULAB_CERT_FINGERPRINTOptional SHA-256 fingerprint of the printer cert (hex, with or without : separators). Pins TLS to that exact cert. When unset, the bridge auto-pins on first connect (TOFU).--
PUSHWARD_POLL_INTERVALHow often to send progress updates5s
PUSHWARD_PRIORITYActivity priority (0-10)1
PUSHWARD_CLEANUP_DELAYHow long the activity stays after ending15m
PUSHWARD_STALE_TIMEOUTEnds activity if no updates received60m
Info

To pin explicitly up front (recommended for hardened setups), extract the printer's SHA-256 fingerprint from a trusted network and set PUSHWARD_BAMBULAB_CERT_FINGERPRINT:

openssl s_client -connect <printer-ip>:8883 -servername <printer-ip> </dev/null \
  | openssl x509 -fingerprint -sha256 -noout

Run this on a network you trust — TOFU (auto-pin on first connect) and ad-hoc fingerprint extraction are both only as trustworthy as the network at extraction time. openssl will print "verify error" lines for the printer's self-signed cert; those are expected and the fingerprint output below is still valid. The fingerprint changes any time the printer regenerates its cert (e.g. after a factory reset).

Print States

Printer StateLive ActivityColor
PREPAREPreparing...Blue
RUNNINGLayer N/MBlue
PAUSEPausedOrange
FINISHCompleteGreen
FAILEDFailedRed
💡 Tip

The bridge automatically resumes tracking if it starts while a print is already in progress, so it recovers gracefully from restarts.

Activity Slug Format

Uses the format bambu-<serial> (serial lowercased), e.g. bambu-01s00a123456789. One activity per printer.