ACE 2 Pro Unit Profile Assignment Failure: AttributeError on multiColorBox/report #100
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Description
This might be a bit niche or very specific work flow but
After connecting a new ACE Unit, the bridge does not automatically pull the correct Vendor and Filament type/Material (e.g., GEEETECH / Anycubic PLA) into the ACE view slots. Furthermore, when attempting to select the profile manually, the bridge throws a Python
AttributeErrorin the MQTT callback and fails to update the slot.Additional Context:
Steps to Reproduce
Expected Behavior
The ACE view should automatically parse and display the correct Vendor and Filament Material from the OrcaSlicer profile. Manually selecting or assigning a profile to a slot should succeed without crashing the MQTT callback.
Actual Behavior
The slot details remain empty/incorrect, and attempting to manually assign the profile triggers a Python exception (



'list' object has no attribute 'get') handling themultiColorBox/reportMQTT payload.Environment
Logs
Thanks for the detailed logs, @Blaim — the
'list' object has no attribute 'get'crash is fixed.Root cause: when the printer rejects a manual
multiColorBox setInfoassignment, it replies withstate: "failed"anddataas a 2-element list (["multi_color_box", [...]]) instead of the normal dict shape ({"multi_color_box": [...]}). The bridge's callback called.get(...)on it unconditionally, which crashed and silently dropped the report entirely (including the regular slot-state update it would otherwise have applied). That's fixed now in_on_multicolor_boxwith a proper guard for the failure shape, plus a defensive check for any other unexpecteddatashape.Important — this fixes the crash, not necessarily your underlying issue: the printer/ACE is still rejecting the assignment itself for your GEEETECH PLA Bas slot (and per your report, even for official Anycubic filament in the ACE, while the toolhead works fine). After this fix you'll get a clean rejection instead of a crash, but the slot still won't get assigned until we know why the printer is refusing it.
Could you help narrow that down:
typestring and color are being sent when you assign the GEEETECH slot manually (should be visible in the bridge log assetInfo (web) global=... type=... color=...)?This will help figure out whether the ACE firmware expects a fixed set of material-type strings (and is rejecting free-text ones) or something else is going on.
Fix is committed locally on
nightly, will go out with the next nightly build.i will add debug log for 1. and 2.
Follow-up: the questions in my last comment weren't fair to ask of you — that's information the bridge should already be putting in its own logs. I've fixed that instead of asking you to dig it out manually.
One piece was actually already answerable from what you posted (
setInfo (web) global=6 box=0 local_slot=3 type=PLA color=[33, 39, 33]), but the second question (whether the same assignment fails on a non-RFID stock slot) would've required you to run an extra reproduction step just to compensate for our logs not correlating the failure with its cause.The printer's rejection payload (
["multi_color_box", [{"filaments": {"id": 2}, "id": 0}]]) carries no slot/type/color info by itself — just an opaque box id and some internal id. So the bridge now remembers thesetInforequest it just sent and logs it together with the rejection, e.g.:That's one log line with everything needed to correlate a rejection with what was actually sent — no reproduction steps needed on your end. If you hit this again on the next nightly build, just paste that line and we'll have what we need directly.
Both fixes committed locally on
nightly, going out with the next nightly build.Hey so the error is fixed with nightly .42 and I'm able to switch the profile but it doesn't keep the custom selected profile.
after a refresh of the site

kx-bridge-log_20260724-154635.txt
Thanks for confirming the crash fix works, @Blaim — sorry it took a bit to get back to this one.
I dug further into the underlying rejection (not the crash, the actual "assignment doesn't stick" behavior) with a live MQTT capture against a real printer.
What I confirmed:
The
setInfopayload the bridge sends is correct — I tested the exact same schema ({multi_color_box:[{id, slots:[{index,type,color}]}]}) against a real printer's non-ACE slot (box id: -1) and it applies cleanly (state: success, slot value actually changes). So this isn't a payload-format bug on our side.For a real ACE box (
id: 0), the printer flat-out rejects the same call withcode: 10501, msg: "设置失败"("setting failed") — even though the request itself was just plaintype: "PLA", not the custom "GEEETECH PLA Bas" string. So it's not the ACE rejecting an unrecognized material name either.Looking at your log more closely: your slot 2 in box 0 had
sku: ""(empty) before the assignment attempt — meaning the printer/ACE has no recognized filament profile (SKU) for that spool, since it was written with a custom/third-party RFID tag rather than genuine Anycubic SKU data. After the repeated failedsetInfocalls, that slot's report briefly showedstatus: 4, type: ""— i.e. the ACE dropped it into an error/unloaded state rather than leaving the old value alone. That's consistent with what you saw after refreshing: the manual selection didn't stick because the printer itself never accepted it, and the bridge's optimistic UI update got overwritten by the next real status report.Conclusion: this looks like a firmware-level restriction — the ACE unit seems to require its own SKU/RFID-recognized profile before it will accept a manual type/color override via MQTT, and custom-written without a matching SKU don't satisfy that. This isn't something the bridge can work around at the protocol level; there's no alternate payload shape that bypasses it (I tried a couple of variants, all either succeeded exactly like the original shape or failed with the identical generic rejection).
I don't have a real ACE unit to test further variations against (e.g. whether writing a stock SKU via the ACE app first, then trying setInfo, changes anything) — if you're up for one more experiment: does the same manual assignment succeed on an ACE slot loaded with genuine Anycubic filament (proper SKU, no custom)? That would confirm whether SKU-presence is really the gate, or if it's something else specific to that ACE unit/slot.
Given this seems to sit in Anycubic's firmware rather than something fixable on the bridge side, I'll leave this open for now but move it out of active development unless the above test turns up something actionable.
I ran the test with genuine Anycubic filament on the ACE unit, and checking the bridge logs revealed something interesting: the printer rejected setInfo on the genuine Anycubic slot too.
In my test, Slot 0 had an official Anycubic spool (sku: "HPL18-107"), and Slot 2 had a custom spool (sku: "").
When I tried manual assignment on Slot 0, the printer returned state=failed identical to the rejection on Slot 2
So it looks like Anycubic's firmware locks out manual setInfo MQTT overrides on ACE (box: 0) slots universally, not just when a SKU is missing.
Funny enough my fix in #101 (comment) fixed the manual assignment issue aswell!
Following up here since your original report actually described two separate problems, and one of them just got resolved as a side effect of the deeper dig in #101.
"Bridge does not automatically pull the correct Vendor and Filament type/Material into the ACE view slots" — this is now fixed, tracked and explained in detail in #101: the auto-matching logic for combined ACE-RFID strings like "GEEETECH PLA Bas" existed but was never actually wired into the code path that feeds the dashboard, so the ACE view kept showing the raw unmatched string. That's fixed now — see #101 for the full root-cause writeup.
Still open / not resolved by either fix: the manual profile-assignment rejection (the printer replying
code: 10501/ "setting failed" when you try to explicitly assign a profile to an ACE-box slot, as opposed to it just not auto-detecting one) — that one still looks like a firmware-level restriction, as discussed earlier in this thread, not something fixable on the bridge side. Leaving this issue open for that part specifically; the crash and the auto-detection gap are both resolved.If the improved auto-matching from #101 means you no longer need the manual-assignment path day-to-day, let us know and we can close this out — otherwise it stays open as a firmware-limitation tracker.
No you understood me wrong, with the fix I provided I was also able to manually assign the filament profile for the ace units and it kept + synced it correctly to Orca Slicer even after a refresh of the browser.
Even tho it gave out that rejection in the log.
But will try it out once I got the new nightly!