Bambu AMS Dashboard — Full Data Flow
Phase 1 — Spool Scan & Loading
NFC Tag on Spool
UID, material, color, temps, weight
SpoolSense Scanner
Reads NFC tag → publishes to MQTT
MQTT: spoolsense/{id}/tag/state
uid, material, color, remaining_g,
spoolman_id, temps
Home Assistant
sensor.spoolsense_{id}_spool → "present"
HTTP: Spoolman UID lookup (async)
Spoolman
Returns weight, spoolman_id
trigger: sensor state → "present"
Blueprint: SpoolSense → Bambu AMS
spoolsense_bambu_ams.yaml
Waits for user to physically load spool into AMS tray
(wait_for_trigger: tray empty → not empty)
bambu_lab.set_filament
tray_type, tray_color,
tray_info_idx, temps
Bambu Printer
Updates AMS tray info
MQTT: cmd/tray_assign
{tray_index, uid, spoolman_id}
Scanner stores UID→Tray
NVS: maps UID to tray index
Enqueues Spoolman weight lookup
Phase 2 — Dashboard Update
Bambu Printer
Reports tray state via Bambu MQTT
sensor.{printer}_ams_tray_{1-N}
type, color, empty, name
trigger: any tray state change
Blueprint: Bambu AMS Dashboard
spoolsense_bambu_dashboard.yaml
Reads tray attributes (type, color, empty)
Builds JSON array, skips empty trays
MQTT: spoolsense/{id}/cmd/tray_update
[{tray_index, ams_id, material, color}, ...]
SpoolSense Scanner
Parses tray data → persists to NVS → renders dashboard
Phase 3 — Weight Enrichment
Spoolman Weight Lookup
Triggered by cmd/tray_assign
For trays with stored UIDs
HTTP: streaming UID lookup
Spoolman
Returns remaining weight for UID
SPOOLMAN_SYNCED → update weight_g → re-render
Deduction (follow-up)
cmd/deduct_tray arrives →
scanner resolves tray → UID →
subtract weight → re-render
Automatic weight updates
after every print —
pending print test verification
TFT Dashboard
2x2 / 2x4 / 4x4 grid — color, material, weight per tray