Files
bambuddy/backend
maziggy 38abf57bb7 Let a print start on a nozzle the printer can fetch (issue #2885)
The nozzle-diameter guard compared the sliced diameter against the
    mounted hotends alone. On an H2C both hotends commonly read the same
    size, so a job sliced for anything else was failed before upload with
    "install the matching nozzle before printing" -- even with that nozzle
    sitting in the tool-changer rack, which the printer fetches by itself
    as part of starting a print. The reporter saw it as an asymmetry:
    going to 0.4mm always worked, going to 0.2mm never did, and only
    fetching the nozzle by hand on the printer's own screen let the print
    run. It was never only about 0.2mm -- with a 0.6mm docked and 0.4mm
    hotends, a 0.6mm slice was refused identically.

    Placement is what made it fatal rather than merely wrong. The guard
    runs near the top of _start_print and the rack picker near the bottom,
    so the item was failed before the code that would have chosen the dock
    ever ran.

    Bambuddy had the rack contents the whole time. nozzle_info carries an
    entry per nozzle -- ids 0/1 for the hotends, 16-21 for the docks --
    each with its diameter, so the guard now tests the slice against both
    sets. It keys off the ids rather than the printer model: only a rack
    machine reports 16-21, which leaves no registry to keep in sync. An
    empty dock is absent from the payload entirely, so an id appearing
    there already means a nozzle is in it. stat is left uninterpreted; it
    read 0 on every entry, occupied and empty alike.

    A diameter in neither a hotend nor a dock still stops the print before
    it uploads, and the message now names both sets so the machine's real
    stock is visible.

    The same telemetry showed a second fault, pointing the other way. A
    hotend with nothing mounted is still reported, keeping the diameter of
    the nozzle it last held -- measured at idle, where the rack-side hotend
    read 0.4mm with max_temp 0 and serial "N/A" after parking its nozzle
    back in the dock. That stale value counted as installed. Presence now
    comes from the serial and the temperature rating, and emptiness has to
    be stated rather than merely unstated: the serial must be the
    firmware's explicit "N/A" and the rating absent. A firmware that
    reports neither field normalises to exactly that, and reading it as
    empty would switch the guard off on that machine.

    Confirmed on an H2C with 0.4mm hotends and a 0.2mm in R6: the job
    dispatches with nozzle_mapping [21], chosen by Bambuddy rather than
    left to the firmware.
2026-08-23 12:41:45 +02:00
..