Bambu Printer Manager - Data Dictionary
Overview
This comprehensive data dictionary documents all attributes manifested in the bambu-printer-manager library. Each attribute includes its ancestry (parent class), telemetry source (MQTT JSON path), type information, valid ranges, and purpose.
Related Documentation
- MQTT Protocol Reference — Details how to control printer attributes via MQTT commands with field breakdowns, example JSON payloads, and usage patterns
- Code Reference — API/class/function reference generated from source modules
- API Reference — REST API endpoints and client container implementation
- Container Setup — Docker deployment guide with authentication configuration
Reference Implementations
Attributes are validated against these authoritative public repositories:
- BambuStudio - Official Bambu Lab client implementation with complete telemetry mapping and protocol definitions
- OrcaSlicer - Community fork with enhanced telemetry handling and data structure examples
- ha-bambulab - Home Assistant integration with comprehensive MQTT topic and payload documentation
- ha-bambulab pybambu - Low-level Python MQTT client implementation and message parsing
- Bambu-HomeAssistant-Flows - Workflow patterns and integration examples using Bambu Lab printers
- OpenBambuAPI - Alternative API implementation with detailed protocol documentation
- X1Plus - Community firmware and protocol analysis for extended printer capabilities
- bambu-node - Node.js implementation providing cross-language verification and alternative patterns
Dataclass Hierarchy
BambuPrinter (runtime root / orchestration)
├── config: BambuConfig
├── printer_state: BambuState
└── active_job_info: ActiveJobInfo
BambuConfig (configuration root)
├── hostname, access_code, serial_number
├── mqtt_port, mqtt_client_id, mqtt_username
├── mqtt_connection_timeout, ftps_connection_timeout
├── watchdog_timeout, external_chamber
├── bpm_cache_path, printer_model
├── firmware_version, ams_firmware_version
└── capabilities: PrinterCapabilities
├── has_ams, has_lidar, has_camera
├── has_dual_extruder, has_air_filtration
└── has_chamber_temp, has_chamber_door_sensor
BambuState (telemetry root)
├── gcode_state, active_tool, etc.
├── active_nozzle: NozzleCharacteristics (the active extruder's nozzle)
├── ams_units: list[AMSUnitState]
│ ├── ams_id, model, temp_actual, humidity, tray_exists
│ └── dryer: AMSDryerState | None (AMS 2 Pro and AMS HT only)
│ ├── state, sub_status, fan1/2_status, remaining_minutes
│ ├── temp_target, duration_target_hours, filament_target
│ └── refusals, refusal_message, fail_code/message/count
├── extruders: list[ExtruderState]
│ ├── id, temps, state, status, nozzle: NozzleCharacteristics
│ └── active_tray_id, target_tray_id, tray_state
├── spools: list[BambuSpool]
│ └── Filament properties, color, temps, remaining
├── extension_tool: ExtensionToolState (H2-series toolhead accessory)
│ └── tool_type, mount_state, calibration_raw, type_raw
└── climate: BambuClimate
├── bed_temp, chamber_temp
├── fans: part_cooling, aux, exhaust, heatbreak, enhanced_cooling_fan_target
└── doors: chamber_door, lid, top_vent
ActiveJobInfo (project root)
├── project_info: ProjectInfo
│ ├── id, name, size, timestamp, md5
│ └── plate_num, metadata
├── project_file_command
├── stage_id, stage_name
├── current_layer, total_layers
├── print_percentage
├── elapsed_minutes, remaining_minutes
├── wall_start_time
└── subtask_name, gcode_file, print_type, plate_num, plate_type
Data Dictionary Index
Quick alphabetical reference to all documented fields. Fields marked with * appear in multiple classes.
| Field | Class | Description | Source Material |
|---|---|---|---|
| access_code | BambuConfig | 8-character LAN-only access code for MQTT authentication | Field Definition · BambuConfig |
| info_bits | ExtruderState | Raw bitmask containing filament sensor states | Field Definition · ExtruderState |
| active_ams_id | BambuState | Currently active AMS unit ID | Field Definition · BambuState |
| is_chamber_door_open | BambuClimate | Chamber door open sensor (H2 series) | Field Definition · BambuClimate |
| active_nozzle_temp | BambuState | Current nozzle temperature | Field Definition · BambuState |
| is_chamber_lid_open | BambuClimate | Chamber lid open sensor (H2 series) | Field Definition · BambuClimate |
| active_nozzle_temp_target | BambuState | Target nozzle temperature | Field Definition · BambuState |
| is_external_spool_active | BambuState | Indicates external spool usage | Field Definition · BambuState |
| active_tool | BambuState | Currently active extruder in dual-extruder systems | Field Definition · BambuState |
| active_tray_id | BambuState, ExtruderState | Currently active tray for this extruder | Field Definition · BambuState, ExtruderState |
| k | BambuSpool | K-Factor for linear advance (flow rate) | Field Definition · BambuSpool |
| active_tray_state | BambuState | Filament loading operational state | Field Definition · BambuState |
| active_tray_state_name | BambuState | Human-readable tray state | Field Definition · BambuState |
| md5 | ProjectInfo | The MD5 checksum of this 3MF file | Field Definition · ProjectInfo |
| air_conditioning_mode | BambuClimate | Chamber climate control mode | Field Definition · BambuClimate |
| metadata | ProjectInfo | The associated metadata of this 3MF file | Field Definition · ProjectInfo |
| airduct_mode | BambuClimate | Raw airduct mode value | Field Definition · BambuClimate |
| model | AMSUnitState | AMS hardware model type | Field Definition · AMSUnitState |
| airduct_sub_mode | BambuClimate | Raw airduct sub-mode value | Field Definition · BambuClimate |
| wall_start_time | ActiveJobInfo | Wall-clock timestamp of when this job started | Field Definition · ActiveJobInfo |
| ams_connected_count | BambuState | Number of connected AMS units | Field Definition · BambuState |
| mqtt_client_id | BambuConfig | Unique identifier used during the MQTT handshake protocol | Field Definition · BambuConfig |
| ams_exist_bits | BambuState | Bitmask of connected AMS units | Field Definition · BambuState |
| mqtt_port | BambuConfig | Network port for the SSL-encrypted MQTT broker | Field Definition · BambuConfig |
| ams_firmware_version | BambuConfig | Semantic version string of the primary AMS controller | Field Definition · BambuConfig |
| mqtt_username | BambuConfig | Authentication username for the local MQTT broker | Field Definition · BambuConfig |
| ams_id | AMSUnitState, BambuSpool | Associated AMS unit | Field Definition · AMSUnitState, BambuSpool |
| ams_info | AMSUnitState | Raw AMS info bitmask containing all drying/assignment data | Field Definition · AMSUnitState |
| name | BambuSpool, ProjectInfo | The filename portion of the 3MF id | Field Definition · BambuSpool, ProjectInfo |
| ams_status_raw | BambuState | Raw AMS status bitmask | Field Definition · BambuState |
| nozzle_temp_max | BambuSpool | Maximum safe nozzle temperature | Field Definition · BambuSpool |
| ams_status_text | BambuState | Human-readable AMS status | Field Definition · BambuState |
| filament_step | BambuState | The running load or unload step, as Bambu Studio names it | Field Definition · BambuState |
| hw_switch_state | BambuState | Filament-at-extruder switch | Field Definition · BambuState |
| nozzle_temp_min | BambuSpool | Minimum safe nozzle temperature | Field Definition · BambuSpool |
| ams_units | BambuState | Complete state of all connected AMS units | Field Definition · BambuState |
| assigned_to_ams_id | ExtruderState | AMS unit assigned to this extruder | Field Definition · ExtruderState |
| part_cooling_fan_speed_percent | BambuClimate | Part cooling fan speed | Field Definition · BambuClimate |
| assigned_to_extruder | AMSUnitState | Target extruder for H2D dual-extruder systems | Field Definition · AMSUnitState |
| part_cooling_fan_speed_target_percent | BambuClimate | Target part cooling fan speed | Field Definition · BambuClimate |
| auto_recovery | BambuConfig | Firmware-level toggle for resuming prints after step-loss | Field Definition · BambuConfig |
| plate_num | ProjectInfo, ActiveJobInfo | The plate number this job is targeting | Field Definition · ProjectInfo, ActiveJobInfo |
| auto_switch_filament | BambuConfig | Enables automatic AMS failover to redundant spools | Field Definition · BambuConfig |
| plate_type | ActiveJobInfo | The plate type associated with the job | Field Definition · ActiveJobInfo |
| bpm_cache_path | BambuConfig | The underlying directory BPM uses for managing cache/metadata | Field Definition · BambuConfig |
| plates | ProjectInfo | The set of plate numbers discovered in the 3MF package | Field Definition · ProjectInfo |
| aux_fan_speed_percent | BambuClimate | Auxiliary fan speed | Field Definition · BambuClimate |
| print_error | BambuState | Main error code (32-bit HMS error) | Field Definition · BambuState |
| print_percentage | ActiveJobInfo | Overall print completion percentage | Field Definition · ActiveJobInfo |
| bed_temp | BambuClimate, BambuSpool | Recommended bed temperature | Field Definition · BambuClimate, BambuSpool |
| print_type | ActiveJobInfo | Indicates whether this is a cloud or local job | Field Definition · ActiveJobInfo |
| bed_temp_target | BambuClimate | Target bed temperature | Field Definition · BambuClimate |
| printer_model | BambuConfig | Classification of the printer hardware (e.g., A1, H2D) derived from the serial number prefix | Field Definition · BambuConfig |
| buildplate_marker_detector | BambuConfig | Toggles the AI vision ArUco marker scanning system used to verify build surface compatibility | Field Definition · BambuConfig |
| project_file_command | ActiveJobInfo | The project_file command that triggered this job (if one did) | Field Definition · ActiveJobInfo |
| calibrate_remain_flag | BambuConfig | Enablement for the spool-weight based estimation of the remaining filament length in the AMS | Field Definition · BambuConfig |
| project_info | ActiveJobInfo | The 3MF details for the active job | Field Definition · ActiveJobInfo |
| capabilities | BambuConfig | Pre-defined or discovered hardware feature set | Field Definition · BambuConfig |
| remaining_minutes | ActiveJobInfo | Time remaining in minutes for the current job | Field Definition · ActiveJobInfo |
| chamber_temp | BambuClimate | Current chamber temperature | Field Definition · BambuClimate |
| remaining_percent | BambuSpool | Estimated remaining filament | Field Definition · BambuSpool |
| chamber_temp_target | BambuClimate | Target chamber temperature | Field Definition · BambuClimate |
| chip_id | AMSUnitState | Hardware serial number | Field Definition · AMSUnitState |
| serial_number | BambuConfig | Unique hardware identifier used to derive the printer model | Field Definition · BambuConfig |
| climate | BambuState | All temperature, fan, and environmental data | Field Definition · BambuState |
| size | ProjectInfo | The size of this 3MF file | Field Definition · ProjectInfo |
| color | BambuSpool | Filament color | Field Definition · BambuSpool |
| slot_id | BambuSpool | Physical slot number | Field Definition · BambuSpool |
| current_layer | ActiveJobInfo | Current layer index during print | Field Definition · ActiveJobInfo |
| sound_enable | BambuConfig | Controls the machine's internal speaker for user notifications | Field Definition · BambuConfig |
| spools | BambuState | All filament spools with properties | Field Definition · BambuState |
| stage_id | ActiveJobInfo | Current Stage numeric ID | Field Definition · ActiveJobInfo |
| stage_name | ActiveJobInfo | Current Stage human-readable name | Field Definition · ActiveJobInfo |
| startup_read_option | BambuConfig | Configures whether the AMS unit performs a full RFID scan of all slots upon printer power-on | Field Definition · BambuConfig |
| stat | BambuState | Raw status bitmask (hex string) - contains chamber door/lid sensor bits | Field Definition · BambuState |
| state | ExtruderState, BambuSpool | Spool operational state | Field Definition · ExtruderState, BambuSpool |
| drying_temp | BambuSpool | Recommended drying temperature | Field Definition · BambuSpool |
| status | ExtruderState | Operational extruder state | Field Definition · ExtruderState |
| drying_time | BambuSpool | Recommended drying duration | Field Definition · BambuSpool |
| sub_brands | BambuSpool | Filament variant/specialization | Field Definition · BambuSpool |
| subtask_name | ActiveJobInfo | The subtask name for this job | Field Definition · ActiveJobInfo |
| elapsed_minutes | ActiveJobInfo | The elapsed time in minutes for this (or the last) job | Field Definition · ActiveJobInfo |
| exhaust_fan_speed_percent | BambuClimate | Exhaust/chamber fan speed | Field Definition · BambuClimate |
| target_tray_id | BambuState, ExtruderState | Target tray for this extruder | Field Definition · BambuState, ExtruderState |
| external_chamber | BambuConfig | If True, ignores internal CTC telemetry to allow manual sensor injection | Field Definition · BambuConfig |
| temp | ExtruderState | Current extruder temperature | Field Definition · ExtruderState |
| extruders | BambuState | State of all physical extruders | Field Definition · BambuState |
| temp_actual | AMSUnitState | Current AMS internal temperature | Field Definition · AMSUnitState |
| temp_target | ExtruderState, AMSDryerState | Target temperature (nozzle; or a dry's ordered temperature) | Field Definition · ExtruderState, AMSDryerState |
| dryer | AMSUnitState | The unit's dryer; None without one |
Field Definition · AMSUnitState |
| filament_tangle_detect | BambuConfig | Master switch for AMS tension-based monitor logic | Field Definition · BambuConfig |
| timestamp | ProjectInfo | The epoch timestamp of this 3MF file | Field Definition · ProjectInfo |
| firmware_version | BambuConfig | Semantic version string of the main printer firmware | Field Definition · BambuConfig |
| total_layers | ActiveJobInfo | The total number of layers for this job | Field Definition · ActiveJobInfo |
| fun | BambuState | Raw function bitmask (hex string) - contains capability flags | Field Definition · BambuState |
| total_length | BambuSpool | Total filament length on spool | Field Definition · BambuSpool |
| state | AMSDryerState | Dryer heater state | Field Definition · AMSDryerState |
| sub_status | AMSDryerState | Drying phase | Field Definition · AMSDryerState |
| fan1_status | AMSDryerState | Drying fan 1 state | Field Definition · AMSDryerState |
| fan2_status | AMSDryerState | Drying fan 2 state | Field Definition · AMSDryerState |
| remaining_minutes | AMSDryerState | Minutes left in the dry | Field Definition · AMSDryerState |
| duration_target_hours | AMSDryerState | Running dry's ordered duration | Field Definition · AMSDryerState |
| filament_target | AMSDryerState | Running dry's ordered filament | Field Definition · AMSDryerState |
| refusals | AMSDryerState | Why a dry cannot start now | Field Definition · AMSDryerState |
| refusal_message | AMSDryerState | Studio's text for the refusal | Field Definition · AMSDryerState |
| fail_code | AMSDryerState | Last refused drying command reply | Field Definition · AMSDryerState |
| fail_message | AMSDryerState | Text for the last refused reply | Field Definition · AMSDryerState |
| fail_count | AMSDryerState | Count of refused drying replies | Field Definition · AMSDryerState |
| tray_exists | AMSUnitState | Which tray slots have filament present | Field Definition · AMSUnitState |
| gcode_file | ActiveJobInfo | The underlying G-code filename from this job feeding the printer | Field Definition · ActiveJobInfo |
| tray_info_idx | BambuSpool | Filament preset index in Bambu Studio | Field Definition · BambuSpool |
| gcode_state | BambuState | Current G-code execution state | Field Definition · BambuState |
| tray_read_option | BambuConfig | Toggles the automatic RFID identification sequence when a new filament spool is inserted or detected | Field Definition · BambuConfig |
| tray_state | ExtruderState | Loading state for this extruder's tray | Field Definition · ExtruderState |
| has_air_filtration | PrinterCapabilities | Indicates the motorized airduct and filtration subsystem is physically installed | Field Definition · PrinterCapabilities |
| tray_weight | BambuSpool | Current spool weight | Field Definition · BambuSpool |
| has_ams | PrinterCapabilities | Indicates an active AMS unit is detected on the hardware bus via the ams block |
Field Definition · PrinterCapabilities |
| type | BambuSpool | Filament material type | Field Definition · BambuSpool |
| has_camera | PrinterCapabilities | Verified availability of the onboard AI camera module | Field Definition · PrinterCapabilities |
| has_chamber_door_sensor | PrinterCapabilities | Verification that the front glass enclosure is equipped with a hall-effect sensor | Field Definition · PrinterCapabilities |
| verbose | BambuConfig | Provides an additional log level for dumping all messages | Field Definition · BambuConfig |
| has_chamber_temp | PrinterCapabilities | Confirmed presence of the Chamber Thermal Controller (CTC) ambient sensor | Field Definition · PrinterCapabilities |
| has_dual_extruder | PrinterCapabilities | Identifies the H2D dual-path architecture where independent hotend monitoring is required | Field Definition · PrinterCapabilities |
| watchdog_timeout | BambuConfig | Duration before a connection is flagged as stale | Field Definition · BambuConfig |
| has_lidar | PrinterCapabilities | Confirmed presence of the Micro LiDAR sensor based on xcam telemetry existence |
Field Definition · PrinterCapabilities |
| wifi_signal_strength | BambuState | Wi-Fi signal strength indicator | Field Definition · BambuState |
| heatbreak_fan_speed_percent | BambuClimate | Heatbreak cooling fan speed | Field Definition · BambuClimate |
| zone_aux_percent | BambuClimate | Auxiliary fan zone control | Field Definition · BambuClimate |
| hms_errors | BambuState | List of active HMS errors | Field Definition · BambuState |
| zone_exhaust_percent | BambuClimate | Exhaust fan zone control | Field Definition · BambuClimate |
| hostname | BambuConfig | IP address or DNS name of the printer on the local subnet | Field Definition · BambuConfig |
| zone_intake_open | BambuClimate | Heater intake damper state | Field Definition · BambuClimate |
| humidity_index | AMSUnitState | Humidity level index | Field Definition · AMSUnitState |
| zone_part_fan_percent | BambuClimate | Internal part fan zone control | Field Definition · BambuClimate |
| humidity_raw | AMSUnitState | Raw humidity percentage | Field Definition · AMSUnitState |
| zone_top_vent_open | BambuClimate | Top vent open state (derived) | Field Definition · BambuClimate |
| id | ExtruderState, AMSUnitState, BambuSpool, ProjectInfo | The unique identifier for this project (3MF storage location) | Field Definition · ExtruderState, AMSUnitState, BambuSpool, ProjectInfo |
| ams | BambuState (raw print field) | AMS aggregate payload root used for AMS unit parsing and spool reconstruction | Field Definition · BambuState |
| mc_percent | BambuState (raw print field) | Raw print completion percentage from firmware | Field Definition · BambuState |
| ams_rfid_status | BambuState (raw print field) | Raw AMS RFID subsystem status code | Field Definition · BambuState |
| mc_remaining_time | BambuState (raw print field) | Raw remaining-time estimate from firmware | Field Definition · BambuState |
| cooling_fan_speed | BambuState (raw print field) | Raw part-cooling fan signal used by fallback fan mapping logic | Field Definition · BambuState |
| net | BambuState (raw print field) | Raw network configuration/status block | Field Definition · BambuState |
| device | BambuState (raw print field) | Device subsystem container for dual-extruder, CTC, and airduct telemetry blocks | Field Definition · BambuState |
| device_airduct | BambuState (raw print field) | Airduct/HVAC payload used for mode and per-zone actuator state | Field Definition · BambuState |
| device_ctc | BambuState (raw print field) | Chamber Thermal Controller payload used for chamber current/target temperatures | Field Definition · BambuState |
| device_extruder | BambuState (raw print field) | Multi-extruder status block with active tool and per-extruder telemetry list | Field Definition · BambuState |
| fail_reason | BambuState (raw print field) | Raw firmware failure reason code/string | Field Definition · BambuState |
| online | BambuState (raw print field) | Raw subsystem online/offline status block (e.g. ahb, rfid, version) |
Field Definition · BambuState |
| fan_gear | BambuState (raw print field) | Firmware fan profile/gear indicator for diagnostics and UI parity | Field Definition · BambuState |
| upgrade_state | BambuState (raw print field) | Firmware upgrade state block including status/progress and module details | Field Definition · BambuState |
| force_upgrade | BambuState (raw print field) | Indicates forced-upgrade requirement state from firmware | Field Definition · BambuState |
| upload | BambuState (raw print field) | Raw file upload status block including progress and status text | Field Definition · BambuState |
| home_flag | BambuState (raw print field) | Packed option bitfield for device behavior toggles | Field Definition · BambuState |
| vir_slot | BambuState (raw print field) | Virtual external tray entries (typically IDs 254/255) used to construct spool entries |
Field Definition · BambuState |
| ipcam | BambuState (raw print field) | Camera service/configuration block (recording, mode bits, stream capabilities) | Field Definition · BambuState |
| vt_tray | BambuState (raw print field) | External/manual tray payload block used to construct spool entries | Field Definition · BambuState |
| lights_report | BambuState (raw print field) | Light status report entries (for example chamber light mode) | Field Definition · BambuState |
| xcam | BambuState (raw print field) | AI camera/inspection status and feature flags | Field Definition · BambuState |
| stg | BambuState (raw print field) | Firmware stage sequence/state vector | Field Definition · BambuState |
| s_obj | BambuState (raw print field) | Skipped-object payload list consumed by runtime skipped-object cache | Field Definition · BambuState |
| filam_bak | BambuState (raw print field) | Firmware filament backup/alternate list block | Field Definition · BambuState |
| active_nozzle | BambuState | Normalized characteristics of the currently active nozzle | Field Definition · BambuState |
| nozzle | ExtruderState | Normalized nozzle characteristics for this extruder | Field Definition · ExtruderState |
| material | NozzleCharacteristics | Canonical nozzle material | Field Definition · NozzleCharacteristics |
| diameter_mm | NozzleCharacteristics | Nozzle diameter in millimeters | Field Definition · NozzleCharacteristics |
| flow | NozzleCharacteristics | Nozzle flow family | Field Definition · NozzleCharacteristics |
| encoded_id | NozzleCharacteristics | Raw encoded nozzle identifier | Field Definition · NozzleCharacteristics |
| telemetry_type_raw | NozzleCharacteristics | Raw nozzle_type telemetry string |
Field Definition · NozzleCharacteristics |
| extension_tool | BambuState | Toolhead extension-tool interface state | Field Definition · BambuState |
| tool_type | ExtensionToolState | Attached extension tool type | Field Definition · ExtensionToolState |
| mount_state | ExtensionToolState | Extension tool mount state | Field Definition · ExtensionToolState |
| calibration_raw | ExtensionToolState | Raw extension tool calibration value | Field Definition · ExtensionToolState |
| type_raw | ExtensionToolState | Raw extension tool type code | Field Definition · ExtensionToolState |
| is_enhanced_cooling_fan_mounted | ExtensionToolState | Whether the Enhanced Cooling Fan is mounted and connected | Field Definition · ExtensionToolState |
| enhanced_cooling_fan_target_percent | BambuClimate | Commanded Toolhead Enhanced Cooling Fan speed | Field Definition · BambuClimate |
| mqtt_connection_timeout | BambuConfig | MQTT connection timeout | Field Definition · BambuConfig |
| ftps_connection_timeout | BambuConfig | FTPS connection timeout | Field Definition · BambuConfig |
| spaghetti_detector | BambuConfig | Toggles the spaghetti detector | Field Definition · BambuConfig |
| spaghetti_detector_sensitivity | BambuConfig | Spaghetti detector sensitivity | Field Definition · BambuConfig |
| purgechutepileup_detector | BambuConfig | Toggles the purge-chute pile-up detector | Field Definition · BambuConfig |
| purgechutepileup_detector_sensitivity | BambuConfig | Purge-chute pile-up detector sensitivity | Field Definition · BambuConfig |
| nozzleclumping_detector | BambuConfig | Toggles the nozzle clumping detector | Field Definition · BambuConfig |
| nozzleclumping_detector_sensitivity | BambuConfig | Nozzle clumping detector sensitivity | Field Definition · BambuConfig |
| airprinting_detector | BambuConfig | Toggles the air-printing detector | Field Definition · BambuConfig |
| airprinting_detector_sensitivity | BambuConfig | Air-printing detector sensitivity | Field Definition · BambuConfig |
| nozzle_blob_detect | BambuConfig | Legacy firmware nozzle blob detection | Field Definition · BambuConfig |
| air_print_detect | BambuConfig | Legacy firmware air-print detection | Field Definition · BambuConfig |
| has_sound_enable_support | PrinterCapabilities | Sound control support flag | Field Definition · PrinterCapabilities |
| has_auto_recovery_support | PrinterCapabilities | Auto-recovery support flag | Field Definition · PrinterCapabilities |
| has_auto_switch_filament_support | PrinterCapabilities | AMS auto-switch support flag | Field Definition · PrinterCapabilities |
| has_filament_tangle_detect_support | PrinterCapabilities | Filament tangle detect support flag | Field Definition · PrinterCapabilities |
| has_nozzle_blob_detect_support | PrinterCapabilities | Nozzle blob detect support flag | Field Definition · PrinterCapabilities |
| has_air_print_detect_support | PrinterCapabilities | Air-print detect support flag | Field Definition · PrinterCapabilities |
| has_buildplate_marker_detector_support | PrinterCapabilities | Buildplate marker detector support flag | Field Definition · PrinterCapabilities |
| has_spaghetti_detector_support | PrinterCapabilities | Spaghetti detector support flag | Field Definition · PrinterCapabilities |
| has_purgechutepileup_detector_support | PrinterCapabilities | Purge-chute pile-up detector support flag | Field Definition · PrinterCapabilities |
| has_nozzleclumping_detector_support | PrinterCapabilities | Nozzle clumping detector support flag | Field Definition · PrinterCapabilities |
| has_airprinting_detector_support | PrinterCapabilities | Air-printing detector support flag | Field Definition · PrinterCapabilities |
BambuConfig
Main configuration class for BambuPrinter containing connection parameters, behavioral settings, and hardware capabilities.
Source: src/bpm/bambuconfig.py
Required Parameters
hostname
- Type:
str - Purpose: IP address or DNS name of the printer on the local subnet
- Example:
"192.168.1.100"or"bambu-h2d-printer" - Reference: MQTT broker connection endpoint
access_code
- Type:
str - Purpose: 8-character LAN-only access code for MQTT authentication
- Valid Format: 8 alphanumeric characters
- Security: Never log or transmit outside local network
- Reference: Found in printer LCD Settings → LAN Access
serial_number
- Type:
str - Purpose: Unique hardware identifier used to derive the printer model
- Format: Varies by model (e.g., H2D starts with specific prefix)
- Usage: Automatically determines
printer_modelin__post_init__ - Reference: BambuStudio device identification
Network Configuration
mqtt_port
- Type:
int - Default:
8883 - Purpose: Network port for the SSL-encrypted MQTT broker
- Reference: Standard Bambu Lab MQTT TLS port
mqtt_client_id
- Type:
str - Default:
"studio_client_id:0c1f" - Purpose: Unique identifier used during the MQTT handshake protocol
- Reference: BambuStudio client identification pattern
mqtt_username
- Type:
str - Default:
"bblp" - Purpose: Authentication username for the local MQTT broker
- Reference: Bambu Lab Printer username constant
mqtt_connection_timeout
- Type:
int - Default:
10 - Unit: seconds
- Purpose: Duration to wait for the MQTT connection to be established before timing out
- Reference: MQTT connection handshake
ftps_connection_timeout
- Type:
int - Default:
15 - Unit: seconds
- Purpose: Duration to wait for the FTPS control connection to be established before timing out
- Reference:
BambuPrinter.ftp_connection()passes this as theIoTFTPSClienttimeout
Operational Settings
watchdog_timeout
- Type:
int - Default:
30 - Unit: seconds
- Purpose: Duration before a connection is flagged as stale
- Reference: Connection health monitoring
external_chamber
- Type:
bool - Default:
False - Purpose: If True, ignores internal CTC telemetry to allow manual sensor injection
- Use Case: Custom chamber temperature monitoring with external sensors
- Reference: CTC (Chamber Thermal Controller) override
capabilities
- Type:
PrinterCapabilities - Default:
field(default_factory=PrinterCapabilities)— a fresh default-valued instance; notNone, and__post_init__never touches it (it only setsprinter_modeland createsbpm_cache_path) - Purpose: Pre-defined or discovered hardware feature set
- Reference: See PrinterCapabilities section
bpm_cache_path
- Type:
Path | None - Default:
None(defaults to~/.bpmin__post_init__) - Purpose: The underlying directory BPM uses for managing cache/metadata
- Auto-Creation: Creates the root on initialization; subdirectories are created lazily on first write
- Reference: Project metadata and 3MF caching location; also holds
<serial>/elapsed/<job_key>.jsonand<serial>/job/active.json(the persisted job record, see project_info)
Read-Only Attributes
printer_model
- Type:
PrinterModel(IntEnum) - Default:
PrinterModel.UNKNOWN - Purpose: Classification of the printer hardware (e.g., A1, H2D) derived from the serial number prefix
- Initialization: Set in
__post_init__viagetPrinterModelBySerial() - Reference: BambuStudio printer type detection
firmware_version
- Type:
str - Default:
"" - Purpose: Semantic version string of the main printer firmware
- Example:
"01.09.00.00" - Reference: Retrieved from telemetry during connection
ams_firmware_version
- Type:
str - Default:
"" - Purpose: Semantic version string of the primary AMS controller
- Example:
"00.00.06.60" - Reference: Retrieved from AMS telemetry
Feature Flags
auto_recovery
- Type:
bool - Default:
False - Purpose: Firmware-level toggle for resuming prints after step-loss
- MQTT Control: Set Print Options
- Reference: BambuStudio recovery settings
filament_tangle_detect
- Type:
bool - Default:
False - Purpose: Master switch for AMS tension-based filament tangle monitor logic. Only meaningful when an AMS unit is present and actively feeding — has no effect during external spool or standalone prints.
- MQTT Control: Set Print Options
- Reference: AMS filament runout/tangle detection
sound_enable
- Type:
bool - Default:
False - Purpose: Controls the machine's internal speaker for user notifications
- MQTT Control: Set Print Options
- Reference: Printer audio feedback system
auto_switch_filament
- Type:
bool - Default:
False - Purpose: Enables automatic AMS failover when the active spool runs out, switching to another AMS slot loaded with the same filament type AND color. Both conditions (type and color) must match. Applies to AMS-hosted spools only — the external spool holder is not eligible.
- MQTT Control: Set Print Options
- Reference: AMS automatic spool switching
startup_read_option
- Type:
bool - Default:
False - Purpose: Configures whether the AMS unit performs a full RFID scan of all slots upon printer power-on
- MQTT Control: AMS User Settings
- Reference: AMS initialization behavior
tray_read_option
- Type:
bool - Default:
False - Purpose: Toggles the automatic RFID identification sequence when a new filament spool is inserted or detected
- MQTT Control: AMS User Settings
- Reference: AMS hot-swap RFID reading
calibrate_remain_flag
- Type:
bool - Default:
False - Purpose: Enablement for spool-weight based estimation of remaining filament length. Requires an AMS unit with built-in weight sensors. AMS 2 Pro only — AMS Lite and AMS HT do not have weight sensors and will not respond to this setting.
- MQTT Control: AMS User Settings
- Reference: AMS filament remaining calculation
buildplate_marker_detector
- Type:
bool - Default:
False - Purpose: Toggles the AI vision ArUco marker scanning system used to verify build surface compatibility
- MQTT Control: Buildplate Marker Detection
- Reference: Camera-based plate detection feature
spaghetti_detector
- Type:
bool - Default:
False - Purpose: Toggles the X-Cam AI spaghetti / failed-print detector; halts the print on a detected anomaly
- MQTT Control:
BambuPrinter.set_spaghetti_detector(enabled, sensitivity) - Reference: Guarded by
PrinterCapabilities.has_spaghetti_detector_support
spaghetti_detector_sensitivity
- Type:
str - Default:
"medium" - Purpose: Sensitivity level for spaghetti detection pause behavior (
low|medium|high) - Reference: See DetectorSensitivity
purgechutepileup_detector
- Type:
bool - Default:
False - Purpose: Toggles the X-Cam AI purge-chute pile-up detector; halts the print to prevent purge waste blocking the toolhead
- MQTT Control:
BambuPrinter.set_purgechutepileup_detector(enabled, sensitivity) - Reference: Guarded by
PrinterCapabilities.has_purgechutepileup_detector_support
purgechutepileup_detector_sensitivity
- Type:
str - Default:
"medium" - Purpose: Sensitivity level for purge-chute pile-up pause behavior (
low|medium|high) - Reference: See DetectorSensitivity
nozzleclumping_detector
- Type:
bool - Default:
False - Purpose: Toggles the X-Cam AI nozzle clumping detector; halts the print to prevent damage from filament build-up on the nozzle
- MQTT Control:
BambuPrinter.set_nozzleclumping_detector(enabled, sensitivity) - Reference: Guarded by
PrinterCapabilities.has_nozzleclumping_detector_support
nozzleclumping_detector_sensitivity
- Type:
str - Default:
"medium" - Purpose: Sensitivity level for nozzle clumping pause behavior (
low|medium|high) - Reference: See DetectorSensitivity
airprinting_detector
- Type:
bool - Default:
False - Purpose: Toggles the X-Cam AI air-printing / no-extrusion detector; halts the print when the nozzle is detected extruding into open air
- MQTT Control:
BambuPrinter.set_airprinting_detector(enabled, sensitivity) - Reference: Guarded by
PrinterCapabilities.has_airprinting_detector_support
airprinting_detector_sensitivity
- Type:
str - Default:
"medium" - Purpose: Sensitivity level for air-printing pause behavior (
low|medium|high) - Reference: See DetectorSensitivity
nozzle_blob_detect
- Type:
bool - Default:
False - Purpose: Legacy firmware-level (
home_flag) nozzle blob/clump detection. On supported printers, prefer the X-Cam AIset_nozzleclumping_detector()(adds sensitivity control) - MQTT Control:
PrintOption.NOZZLE_BLOB_DETECTviaBambuPrinter.set_print_option() - Reference: Guarded by
PrinterCapabilities.has_nozzle_blob_detect_support
air_print_detect
- Type:
bool - Default:
False - Purpose: Legacy firmware-level (
home_flag) air-printing / no-extrusion detection. On supported printers, prefer the X-Cam AIset_airprinting_detector()(adds sensitivity control) - MQTT Control:
PrintOption.AIR_PRINT_DETECTviaBambuPrinter.set_print_option() - Reference: Guarded by
PrinterCapabilities.has_air_print_detect_support
verbose
- Type:
bool - Default:
False - Purpose: Provides an additional log level for dumping all messages
- MQTT Control: None (local configuration only)
- Reference: Debug logging control
PrinterCapabilities
Hardware capabilities discovered during the initial handshake or telemetry analysis.
Source: src/bpm/bambuconfig.py
Hardware Detection Attributes
has_ams
- Type:
bool - Default:
False - Purpose: Indicates an active AMS unit is detected on the hardware bus via the
amsblock - Detection: Presence of
amstelemetry data - Reference: AMS (Automatic Material System) availability
has_lidar
- Type:
bool - Default:
False - Purpose: Confirmed presence of the Micro LiDAR sensor based on
xcamtelemetry existence - Detection:
print.xcam.first_layer_inspectorwhen anxcamblock is present; otherwise the previous value is kept - Reference: First-layer inspection and spaghetti detection feature
has_camera
- Type:
bool - Default:
False - Purpose: Verified availability of the onboard AI camera module
- Detection: Set unconditionally to
Trueon every parsed frame — bpm assumes every supported printer has a camera - Reference: Time-lapse and monitoring capabilities
has_dual_extruder
- Type:
bool - Default:
False - Purpose: Identifies the H2D dual-path architecture where independent hotend monitoring is required
- Detection:
len(print.device.extruder.info) > 1— more than one entry in the extruder telemetry list; not derived from the printer model - Reference: Multi-material printing support
has_air_filtration
- Type:
bool - Default:
False - Purpose: Indicates the motorized airduct and filtration subsystem is physically installed
- Detection: Presence of a
print.device.airductblock - Reference: Active carbon filter and VOC management
has_chamber_temp
- Type:
bool - Default:
False - Purpose: Confirmed presence of the Chamber Thermal Controller (CTC) ambient sensor
- Detection: Presence of a
print.device.ctcblock.chamber_temperis the fallback telemetry field read when there is no CTC (andBambuConfig.external_chamberis not set), not the detection signal itself - Reference: Enclosed chamber temperature monitoring
- Override: Can be ignored if
BambuConfig.external_chamberis True
has_chamber_door_sensor
- Type:
bool - Default:
False - Purpose: Verification that the front glass enclosure is equipped with a hall-effect sensor
- Detection: Bit 12 of the
print.funcapability bitmask - Reference: Safety interlock and environmental control; see is_chamber_door_open for the sensor reading itself
has_sound_enable_support
- Type:
bool - Default:
False - Purpose: Indicates whether prompt sound control is supported by firmware telemetry flags
- Detection: Bit 18 of
print.home_flag - Reference: Guards
BambuConfig.sound_enable/PrintOption.SOUND_ENABLE
has_auto_recovery_support
- Type:
bool - Default:
False - Purpose: Indicates whether auto-recovery control is supported by explicit support telemetry keys
- Detection: Set
Truewheneverprint.home_flagis present - Reference: Guards
BambuConfig.auto_recovery/PrintOption.AUTO_RECOVERY
has_auto_switch_filament_support
- Type:
bool - Default:
False - Purpose: Indicates whether AMS auto-switch control is supported by explicit support telemetry keys
- Detection: Mirrors
has_ams— setTruewheneverprint.ams/print.ams.amstelemetry is present - Reference: Guards
BambuConfig.auto_switch_filament/PrintOption.AUTO_SWITCH_FILAMENT
has_filament_tangle_detect_support
- Type:
bool - Default:
False - Purpose: Indicates whether filament tangle detection control is supported by firmware telemetry flags
- Detection: Bit 19 of
print.home_flag - Reference: Guards
BambuConfig.filament_tangle_detect/PrintOption.FILAMENT_TANGLE_DETECT
has_nozzle_blob_detect_support
- Type:
bool - Default:
False - Purpose: Indicates whether nozzle blob detection control is supported by firmware telemetry flags
- Detection: Bit 25 of
print.home_flag - Reference: Guards
BambuConfig.nozzle_blob_detect/PrintOption.NOZZLE_BLOB_DETECT
has_air_print_detect_support
- Type:
bool - Default:
False - Purpose: Indicates whether air-print detection control is supported by firmware telemetry flags
- Detection: Bit 29 of
print.home_flag - Reference: Guards
BambuConfig.air_print_detect/PrintOption.AIR_PRINT_DETECT
has_buildplate_marker_detector_support
- Type:
bool - Default:
False - Purpose: Indicates whether buildplate marker detector control is supported by xcam telemetry
- Detection: Set
Truethe first timeprint.xcam.buildplate_marker_detectoris reported - Reference: Guards
BambuConfig.buildplate_marker_detector
has_spaghetti_detector_support
- Type:
bool - Default:
False - Purpose: Indicates whether spaghetti detector control is supported by xcam telemetry
- Detection: Bit 42 of
print.fun(older firmware withoutfun: setTrueon the legacyprint.xcam.spaghetti_detectorkey or the packedprint.xcam.cfgform) - Reference: Guards
BambuConfig.spaghetti_detector
has_purgechutepileup_detector_support
- Type:
bool - Default:
False - Purpose: Indicates whether purge-chute pile-up detector control is supported by xcam telemetry
- Detection: Bit 43 of
print.fun(older firmware: legacyprint.xcam.pileup_detectorkey or packedprint.xcam.cfg) - Reference: Guards
BambuConfig.purgechutepileup_detector
has_nozzleclumping_detector_support
- Type:
bool - Default:
False - Purpose: Indicates whether nozzle-clumping detector control is supported by xcam telemetry
- Detection: Bit 44 of
print.fun(older firmware: legacyprint.xcam.clump_detectorkey or packedprint.xcam.cfg) - Reference: Guards
BambuConfig.nozzleclumping_detector
has_airprinting_detector_support
- Type:
bool - Default:
False - Purpose: Indicates whether air-printing detector control is supported by xcam telemetry
- Detection: Bit 45 of
print.fun(older firmware: legacyprint.xcam.airprint_detectorkey or packedprint.xcam.cfg) - Reference: Guards
BambuConfig.airprinting_detector
BambuState
Root state object representing complete printer telemetry.
Source: src/bpm/bambustate.py
Telemetry Root: data.get("print", {})
Core State Attributes
gcode_state
- Type:
str - Telemetry:
print.gcode_state - Valid Values:
IDLE,PREPARE,RUNNING,PAUSE,FINISH,FAILED,UNKNOWN - Purpose: Current G-code execution state
- Reference: BambuStudio
GCodeStateenum - MQTT Structure: MQTT Protocol Reference
active_tool
- Type:
ActiveTool(IntEnum) - Telemetry:
print.device.extruder.state(bits 4-7) - Valid Values:
SINGLE_EXTRUDER (-1): X1/P1/A1 single toolheadRIGHT_EXTRUDER (0): H2D primary toolheadLEFT_EXTRUDER (1): H2D secondary toolheadNOT_ACTIVE (15): Transitional state- Purpose: Currently active extruder in dual-extruder systems
- Reference: BambuStudio
ActiveToolmapping - MQTT Control: Select Active Extruder
active_ams_id
- Type:
int - Telemetry:
- Single-extruder (X1/P1/A1): Computed from
active_tray_id >> 2 - Multi-extruder (H2D):
a_ext.assigned_to_ams_id(physical AMS port assigned to the active extruder) - Valid Range:
-1(no AMS),0-3(standard AMS),128-131(AMS HT) - Purpose: Currently active AMS unit ID
- Reference: AMS slot addressing scheme
active_tray_id
- Type:
int - Telemetry:
- Multi-extruder (H2D): Computed via
parseExtruderTrayStatefrom extruder info - Single-extruder (X1/P1/A1):
print.ams.tray_now; value255normalized to-1 - Valid Range:
0-15: Standard AMS slots (4 trays × 4 units)254-255: External spool-1: No tray- Purpose: Current filament tray identifier
- Reference: BambuStudio tray indexing
- MQTT Structure: MQTT Protocol Reference
active_tray_state
- Type:
TrayState(IntEnum) - Telemetry:
- Multi-extruder (H2D): Computed from extruder info/status
- Single-extruder (X1/P1/A1): Computed from
stage_id— stage 24 →LOADING, stage 22 →UNLOADING, valid tray →LOADED, no tray →UNLOADED - Valid Values:
UNLOADED (0)LOADED (1)LOADING (2)UNLOADING (3)- Purpose: Filament loading operational state
- Reference: BambuStudio
TrayState
active_tray_state_name
- Type:
str - Telemetry: Derived from
active_tray_state.name - Purpose: Human-readable tray state
- Reference: N/A (convenience attribute)
target_tray_id
- Type:
int - Telemetry:
print.ams.tray_tar; value255normalized to-1 - Valid Range: Same as
active_tray_id - Purpose: Next tray to be loaded
- Reference: BambuStudio tray targeting
is_external_spool_active
- Type:
bool - Telemetry: Computed from
active_tray_id in [254, 255] - Purpose: Indicates external spool usage
- Reference: N/A (derived)
active_nozzle_temp
- Type:
float - Telemetry:
print.nozzle_temperor active extruder temp - Unit: °C
- Purpose: Current nozzle temperature
- Reference: BambuStudio thermal monitoring
- MQTT Structure: MQTT Protocol Reference
active_nozzle_temp_target
- Type:
int - Telemetry:
print.nozzle_target_temperor extruder target - Unit: °C
- Purpose: Target nozzle temperature
- Reference: BambuStudio thermal control
- MQTT Control: Set Nozzle Temperature Target
- MQTT Structure: MQTT Protocol Reference
active_nozzle
- Type:
NozzleCharacteristics - Telemetry: The active extruder's
nozzle(multi-extruder), or built fromprint.nozzle_type/print.nozzle_diameter/print.nozzle_id(single-extruder) - Purpose: Normalized characteristics (material, diameter, flow family) of the currently active nozzle
- Reference: See NozzleCharacteristics section. The deprecated
BambuPrinter.nozzle_diameter/.nozzle_typeproperties are superseded byactive_nozzle.diameter_mm/.material
AMS Status Attributes
ams_status_raw
- Type:
int - Telemetry:
print.ams_status - Purpose: Raw AMS status bitmask
- Reference: BambuStudio AMS status codes
- MQTT Structure: MQTT Protocol Reference
ams_status_text
- Type:
str - Telemetry: Parsed from
ams_status_raw - Valid Values:
Idle,Filament Changing,RFID Identifying,Assist/Engaged,Calibration,Self Check,Debug,Unknown - Purpose: Human-readable AMS status
- Reference: BambuStudio AMS state machine
filament_step
- Type:
FilamentStep(IntEnum), withfilament_step_type: FilamentStepType,filament_step_name: strandfilament_step_text: str - Telemetry: Derived from
ams_status_raw,target_tray_idandhw_switch_statebyparseFilamentStep - Rule: only while the
ams_statushigh byte is 1 (filament change); otherwiseIDLE. The low byte is the step code. A target of 254 or 255 is an external-holder load (VT_LOAD: 0x02 heat, 0x05 push, 0x06 confirm extruded, 0x07 purge, anything elseIDLE). A target of -1 is an unload. Otherwise it is an AMS load (0x02 heat, 0x03 cut, 0x04 pull back, 0x05 and 0x06 push, 0x07 purge, 0x08 and 0x0B check position). Code 0x09 is a wait and keeps the step before. Withhw_switch_state0 an AMS load names 0x05 "Cut filament" and 0x07 "Pull back current filament", as Studio does. - Text: Studio's labels, e.g. "Heat the nozzle", "Push new filament into extruder", "Confirm extruded"; empty when
IDLE - Reference: BambuStudio
StatusPanel.cpp(the filament step update) andWidgets/FilamentLoad.cpp
hw_switch_state
- Type:
int - Telemetry:
print.hw_switch_state - Valid Values: 1 filament at the extruder, 0 none, -1 not reported (read as filament present, Studio's default)
- Purpose: Chooses Studio's step names for an AMS load (
filament_step)
ams_exist_bits
- Type:
int - Telemetry:
print.ams.ams_exist_bits - Purpose: Bitmask of connected AMS units
- Reference: BambuStudio AMS detection
ams_connected_count
- Type:
int - Telemetry: Computed from
bin(ams_exist_bits).count("1") - Valid Range:
0-4standard,0-8with AMS HT - Purpose: Number of connected AMS units
- Reference: N/A (derived)
Error Handling Attributes
print_error
- Type:
int - Telemetry:
print.print_error - Purpose: Main error code (32-bit HMS error)
- Decoding:
decodeError(print_error)extracts module, severity, message - Reference: BambuStudio HMS error handling
- MQTT Structure: MQTT Protocol Reference
hms_errors
- Type:
list[dict] - Telemetry:
print.hms+ decodedprint_error - Structure: Each error contains
code,msg,module,severity,is_critical,type,url.typeisdevice_error(fromprint_error),device_hms(fromprint.hms) orcommand_error(a refused command reply, which also carriescommand,ams_idandtimestamp, the epoch second bpm received it).url: adevice_hmsentry linkshttps://e.bambulab.com/?e=<16 hex>, which redirects to that code's wiki page; adevice_error(8-digit) entry links Bambu's table of those codes,https://wiki.bambulab.com/en/hms/error-code, since the redirector has no page for them. - Schema (
print.hms[]):
| Field | Type | Description |
|---|---|---|
attr |
int | Raw HMS attribute/status payload from firmware |
code |
int | HMS event/error code |
action |
int | Firmware action indicator for the HMS event |
timestamp |
int | Event timestamp (epoch seconds) |
- Purpose: List of decoded HMS errors. bpm does not split active from historical entries: severity and is_critical come from the mask byte alone, so a stale code can read Fatal. A consumer that needs "active now" must apply its own rule (bambu-mcp keeps a device_error plus the first device_hms as active and marks the rest Historical). |
||
- Update rule: a print frame with no hms key (a gcode_line ACK, a partial push_status) keeps the previous entries. Only an explicit "hms": [] clears the list. The print_error entry (type: device_error) is re-derived on every frame. |
||
- Refused commands: the printer refuses a load or unload in its ams_change_filament reply (result: fail, err_code), not in print_error or hms. bpm decodes the err_code with decodeError into a command_error entry, e.g. HMS_0500-C04F "The AMS is drying and cannot perform this operation at the moment." It survives the frames that rebuild the list, and goes when load_filament / unload_filament sends that command again, when the printer replies result: success to it (an accepted reply has not been captured yet), or when clear_command_errors() is called (BPA calls it when the user dismisses the alert). A reply with no err_code gives an entry with an empty code and the message "The printer refused the filament change." |
||
- Buttons: the device_error entry also carries actions, the buttons Bambu Studio shows for that print_error on this printer, in order: [{"id", "name", "label", "command"}] (bambutools.hmsActions). They come from HMS_ACTIONS in bambucommands.py, Studio's per-printer table (hms_action_<first 3 of serial>.json, e.g. H2D 094 ver 202604230018, A1 039 ver 202603041659). A printer with no table gets []. Studio's retry codes (HMS_RETRY_CODES: 0701-8004, 0701-8005, 0701-8007, 0701-8012, 0702-8012, 0703-8012, 07FF-8012, 07FF-8013) get Retry (resume) and Confirm (clean_print_error) on any printer instead of the table, and 0300-8002/8003/800A add View Liveview. Ids Studio does not know are dropped. command is resume, done or abort (an ams_control param), clean_print_error, assistant (open the error's url) or close (send nothing), and empty for a button whose command bpm does not send (e.g. RESUME_PRINTING_PROBELM_SOLVED, which Studio sends as command_hms_resume). Press one with BambuPrinter.send_hms_action(id). Examples: 07FFC006 gives CONTINUE; 07FF8007 gives FILAMENT_EXTRUDED and RETRY_FILAMENT_EXTRUDED. |
||
| - Reference: BambuStudio HMS system, ha-bambulab error decoding | ||
| - MQTT Structure: MQTT Protocol Reference |
Network Attributes
wifi_signal_strength
- Type:
str - Telemetry:
print.wifi_signal - Unit: dBm
- Purpose: Wi-Fi signal strength indicator
- Reference: BambuStudio network monitoring
- MQTT Structure: MQTT Protocol Reference
Extension Tool Attributes
extension_tool
- Type:
ExtensionToolState - Telemetry:
print.device.ext_tool - Purpose: Toolhead extension-tool interface state — the Toolhead Enhanced Cooling Fan, cutting module, and laser module all report through this one block (H2-series only)
- Reference: See ExtensionToolState section
Top-Level MQTT Fields (Raw)
These fields appear in print.push_status payloads and are consumed directly,
mapped into other attributes, or used as runtime control/diagnostic inputs.
ams
- Type:
dict - Telemetry:
print.ams - Purpose: AMS aggregate payload root used for AMS unit parsing and spool reconstruction
- Mapped To: ams_units, ams_exist_bits, active_tray_id, spools
- Schema:
| Field | Type | Description |
|---|---|---|
ams |
list[dict] | AMS unit list (print.ams.ams[]) |
ams_exist_bits |
string | int | Connected AMS bitmask |
tray_exist_bits |
string | int | Per-slot tray presence bitmask |
tray_is_bbl_bits |
string | int | Bambu tray bitmask |
tray_tar |
string | int | Target tray identifier |
tray_now |
string | int | Active tray identifier |
tray_pre |
string | int | Previous tray identifier |
tray_read_done_bits |
string | int | Tray-read completion bitmask |
tray_reading_bits |
string | int | Tray-read in-progress bitmask |
version |
int | AMS payload version marker |
insert_flag |
bool | Tray insertion behavior flag |
power_on_flag |
bool | Startup tray-read behavior flag |
- ams[] Schema: |
| Field | Type | Description |
|---|---|---|
id |
string | int | AMS unit identifier |
chip_id |
string | AMS hardware serial |
check |
int | AMS check/status code |
humidity |
string | int | Humidity index |
humidity_raw |
string | int | Raw humidity value |
temp |
string | float | AMS temperature |
dry_time |
int | Remaining dry time (minutes) |
dry_sf_reason |
list[int] | Why a dry cannot start now (AMSDryerRefusal); [] when it can, [6] while one runs |
dry_setting |
dict | The running dry's order: dry_temperature (°C), dry_duration (hours), dry_filament; -1 / "" when idle |
info |
string | AMS info bitfield (hex string) |
tray |
list[dict] | Tray list for this AMS unit |
- ams[].tray[] Schema: |
device
- Type:
dict - Telemetry:
print.device - Purpose: Device subsystem container for dual-extruder, CTC, and airduct telemetry blocks
- Mapped To: extruders, active_tool, chamber_temp, chamber_temp_target, airduct_mode, airduct_sub_mode
- Schema:
| Field | Type | Description |
|---|---|---|
extruder |
dict | Extruder subsystem block (print.device.extruder) |
ctc |
dict | Chamber thermal controller block (print.device.ctc) |
airduct |
dict | Airduct subsystem block (print.device.airduct) |
device_extruder
- Type:
dict - Telemetry:
print.device.extruder - Purpose: Multi-extruder status block with active tool and per-extruder telemetry list
- Mapped To: extruders, active_tool
- Schema:
| Field | Type | Description |
|---|---|---|
state |
int | Active extruder/tool selector bitfield |
info |
list[dict] | Per-extruder telemetry list (print.device.extruder.info[]) |
device_ctc
- Type:
dict - Telemetry:
print.device.ctc - Purpose: Chamber Thermal Controller payload used for chamber current/target temperatures
- Mapped To: chamber_temp, chamber_temp_target
- Schema:
| Field | Type | Description |
|---|---|---|
info |
dict | CTC data container |
info.temp |
int | float | Packed current/target chamber temperature value parsed by [unpackTemperature()](reference/bpm/bambutools.md#bpm.bambutools.unpackTemperature) |
device_airduct
- Type:
dict - Telemetry:
print.device.airduct - Purpose: Airduct/HVAC payload used for mode and per-zone actuator state
- Mapped To: airduct_mode, airduct_sub_mode, zone_part_fan_percent, zone_aux_percent, zone_exhaust_percent, zone_intake_open, zone_top_vent_open
- Schema:
| Field | Type | Description |
|---|---|---|
modeCur |
int | Current airduct mode |
subMode |
int | Current airduct sub-mode |
parts |
list[dict] | Per-zone actuator state list |
parts[].id |
int | Zone/actuator identifier (16, 32, 48, 96) |
parts[].state |
int | Zone actuator value |
mc_percent
- Type:
int - Telemetry:
print.mc_percent - Purpose: Raw print completion percentage from firmware
- Mapped To: print_percentage
mc_remaining_time
- Type:
int - Telemetry:
print.mc_remaining_time - Unit: minutes
- Purpose: Raw remaining-time estimate from firmware
- Mapped To: remaining_minutes
cooling_fan_speed
- Type:
str | int - Telemetry:
print.cooling_fan_speed - Purpose: Raw part-cooling fan signal used by fallback fan mapping logic
- Mapped To: part_cooling_fan_speed_percent
fan_gear
- Type:
int - Telemetry:
print.fan_gear - Purpose: Firmware fan profile/gear indicator for diagnostics and UI parity
stg
- Type:
list[int] - Telemetry:
print.stg - Purpose: Firmware stage sequence/state vector
s_obj
- Type:
list[Any] - Telemetry:
print.s_obj - Purpose: Skipped-object payload list consumed by runtime skipped-object cache
filam_bak
- Type:
list[Any] - Telemetry:
print.filam_bak - Purpose: Firmware filament backup/alternate list block
ams_rfid_status
- Type:
int - Telemetry:
print.ams_rfid_status - Purpose: Raw AMS RFID subsystem status code
vt_tray
- Type:
dict - Telemetry:
print.vt_tray - Purpose: External/manual tray payload block used to construct spool entries
- Mapped To: spools
- Schema:
vir_slot
- Type:
list[dict] - Telemetry:
print.vir_slot[] - Purpose: Virtual external tray entries (typically IDs
254/255) used to construct spool entries - Mapped To: spools
- Schema:
fail_reason
- Type:
str | int - Telemetry:
print.fail_reason - Purpose: Raw firmware failure reason code/string
home_flag
- Type:
int - Telemetry:
print.home_flag - Purpose: Packed option bitfield for device behavior toggles
- Mapped To: sound_enable, auto_recovery, auto_switch_filament, filament_tangle_detect, calibrate_remain_flag
online
- Type:
dict - Telemetry:
print.online - Purpose: Raw subsystem online/offline status block (e.g.
ahb,rfid,version) - Schema:
| Field | Type | Description |
|---|---|---|
ahb |
bool | Online state for ahb subsystem |
rfid |
bool | Online state for RFID subsystem |
version |
int | Online payload version/revision marker |
upgrade_state
- Type:
dict - Telemetry:
print.upgrade_state - Purpose: Firmware upgrade state block including status/progress and module details
- Schema:
| Field | Type | Description |
|---|---|---|
sequence_id |
string | int | Upgrade event sequence identifier |
progress |
string | int | Upgrade progress value |
status |
string | Upgrade state label |
consistency_request |
bool | Consistency-check request flag |
dis_state |
int | Device/dispatcher state code |
err_code |
int | Upgrade error code |
force_upgrade |
bool | Forced-upgrade requirement flag |
message |
string | Upgrade status/error message |
module |
string | Active module target label |
new_version_state |
int | New-version availability state |
cur_state_code |
int | Current upgrade state code |
idx2 |
int | Firmware-provided opaque index/value |
new_ver_list |
list[Any] | Firmware-provided version list |
mc_for_ams_firmware |
dict | AMS firmware grouping block |
mc_for_ams_firmware.current_run_firmware_id |
int | Current running AMS firmware target ID |
mc_for_ams_firmware.current_firmware_id |
int | Current AMS firmware ID |
mc_for_ams_firmware.status |
string | AMS firmware upgrade state label |
mc_for_ams_firmware.firmware |
list[dict] | AMS firmware target list |
mc_for_ams_firmware.firmware[] Field |
Type | Description |
|---|---|---|
id |
int | Firmware target identifier |
name |
string | Firmware target display name |
force_upgrade
- Type:
bool - Telemetry:
print.force_upgrade - Purpose: Indicates forced-upgrade requirement state from firmware
ipcam
- Type:
dict - Telemetry:
print.ipcam - Purpose: Camera service/configuration block (recording, mode bits, stream capabilities)
- Schema:
| Field | Type | Description |
|---|---|---|
ipcam_dev |
string | Camera device enabled/disabled flag |
ipcam_record |
string | Recording mode |
timelapse |
string | Timelapse mode |
resolution |
string | Stream/recording resolution |
tutk_server |
string | TUTK relay mode |
mode_bits |
int | Camera capability/mode bitfield |
lights_report
- Type:
list[dict] - Telemetry:
print.lights_report - Purpose: Light status report entries (for example chamber light mode)
- Schema:
| Field | Type | Description |
|---|---|---|
node |
string | Light node identifier (for example chamber_light) |
mode |
string | Current node mode/state (for example on/off) |
xcam
- Type:
dict - Telemetry:
print.xcam - Purpose: AI camera/inspection status and feature flags
- Schema:
| Field | Type | Description |
|---|---|---|
buildplate_marker_detector |
bool | Buildplate marker detector state |
first_layer_inspector |
bool | First-layer inspector/lidar capability state |
net
- Type:
dict - Telemetry:
print.net - Purpose: Raw network configuration/status block
- Schema:
| Field | Type | Description |
|---|---|---|
conf |
int | Network configuration/status code |
info |
list[dict] | Interface/address info list |
info[] Field |
Type | Description |
|---|---|---|
ip |
int | IPv4 address value (integer encoded) |
mask |
int | IPv4 subnet mask value (integer encoded) |
upload
- Type:
dict - Telemetry:
print.upload - Purpose: Raw file upload status block including progress and status text
- Schema:
| Field | Type | Description |
|---|---|---|
status |
string | Upload status/state text |
progress |
int | Upload progress value |
message |
string | Upload status/error message |
Collections
ams_units
- Type:
list[AMSUnitState] - Telemetry:
print.ams.ams[]+info.module[] - Purpose: Complete state of all connected AMS units
- Reference: See AMSUnitState section
- MQTT Structure: MQTT Protocol Reference
extruders
- Type:
list[ExtruderState] - Telemetry:
print.device.extruder.info[] - Purpose: State of all physical extruders
- Reference: See ExtruderState section
spools
- Type:
list[BambuSpool] - Telemetry: Aggregated from AMS trays and external spools
- Purpose: All filament spools with properties
- Reference: See BambuSpool section / Code Reference
- MQTT Structure: MQTT Protocol Reference
climate
- Type:
BambuClimate - Telemetry: Multiple sources (see BambuClimate section)
- Purpose: All temperature, fan, and environmental data
- Reference: See BambuClimate section / Code Reference
Internal/Debug Attributes
stat
- Type:
str - Telemetry:
print.stat - Purpose: Raw status bitmask (hex string) - contains chamber door/lid sensor bits
- Reference: BambuStudio status flags
fun
- Type:
str - Telemetry:
print.fun - Purpose: Raw function bitmask (hex string) - contains capability flags
- Reference: BambuStudio feature detection
ExtruderState
Physical extruder/toolhead state.
Source: src/bpm/bambustate.py
Telemetry Root: print.device.extruder.info[id]
Identification
id
- Type:
int - Telemetry:
extruder.info[].id - Valid Values:
0(right/primary),1(left/secondary);-1(ActiveTool.SINGLE_EXTRUDER) on the single-extruder placeholder built for X1/P1/A1 printers, which carry noextruder.info[]block at all - Purpose: Physical extruder identifier
- Reference: BambuStudio extruder indexing
Temperature Attributes
temp
- Type:
float - Telemetry:
extruder.info[].temp(unpacked viaunpackTemperature()) - Unit: °C
- Purpose: Current extruder temperature
- Reference: BambuStudio thermal monitoring
temp_target
- Type:
int - Telemetry:
extruder.info[].temp(high 16 bits) - Unit: °C
- Purpose: Target extruder temperature
- MQTT Control: Set Nozzle Temperature Target
- Reference: BambuStudio thermal control
State Attributes
info_bits
- Type:
int - Telemetry:
extruder.info[].info - Purpose: Raw bitmask containing filament sensor states
- Bit Structure:
- Bit 3: Nozzle present
- Bit 2: Buffer loaded
- Bit 1: Filament loaded
- Reference: BambuStudio
ExtruderInfoparsing
state
- Type:
ExtruderInfoState(IntEnum) - Telemetry: Parsed from
info_bits - Valid Values:
NO_NOZZLE (0): No nozzle detectedEMPTY (1): Nozzle present, no filamentBUFFER_LOADED (2): Filament in bufferLOADED (3): Filament fully loadedNOT_AVAILABLE (4): Single-extruder printer placeholder — noextruder.info[]block exists to parse- Purpose: Filament presence state
- Reference: BambuStudio
parseExtruderInfo()
status
- Type:
ExtruderStatus(IntEnum) - Telemetry:
extruder.info[].stat(parsed) - Valid Values:
IDLE (0): Not activeHEATING (1): Heating in progressACTIVE (2): Actively extrudingSUCCESS (3): Operation completedNOT_AVAILABLE (4): Single-extruder printer placeholder — noextruder.info[]block exists to parse- Purpose: Operational extruder state
- Reference: BambuStudio
BBL_EXTRUDER_STATEenum
Nozzle Attributes
nozzle
- Type:
NozzleCharacteristics - Telemetry:
device.nozzle.info[], matched to this extruder byhnow/id (multi-extruder), orprint.nozzle_type/print.nozzle_diameter/print.nozzle_id(single-extruder) - Purpose: Normalized nozzle characteristics (material, diameter, flow family) for this extruder
- Reference: See NozzleCharacteristics section
Tray Assignment Attributes
active_tray_id
- Type:
int - Telemetry:
- Multi-extruder (H2D): Computed from
extruder.info[].hnow,extruder.info[].snow - Single-extruder (id == SINGLE_EXTRUDER):
print.ams.tray_now - Valid Range:
-1,0-15,254-255 - Purpose: Currently active tray for this extruder
- Reference: BambuStudio tray tracking algorithm
target_tray_id
- Type:
int - Telemetry:
- Multi-extruder (H2D): Computed from
extruder.info[].htar,extruder.info[].star - Single-extruder (id == SINGLE_EXTRUDER):
print.ams.tray_tar - Valid Range: Same as
active_tray_id - Purpose: Target tray for this extruder
- Reference: BambuStudio tray targeting
tray_state
- Type:
TrayState(IntEnum) - Telemetry:
- Multi-extruder (H2D): Computed from
state+statuscombination. An idle extruder keeps the previous state of the extruder with the sameid, and a fresh default when there is none, so the single-extruder placeholder a partial first frame builds is never inherited. - Single-extruder (id == SINGLE_EXTRUDER): Computed from
stage_id— stage 24 →LOADING, stage 22 →UNLOADING, valid tray →LOADED, no tray →UNLOADED - Purpose: Loading state for this extruder's tray
- Reference: State machine derived from BambuStudio
assigned_to_ams_id
- Type:
int - Telemetry:
- Multi-extruder (H2D): Set when AMS unit reports H2D extruder assignment
- Single-extruder: Computed as
active_tray_id >> 2when a valid tray is loaded;-1when no tray (external spool or idle) - Valid Range:
-1,0-3,128-131 - Purpose: AMS unit assigned to this extruder
- Reference: BambuStudio dual-extruder AMS routing
NozzleCharacteristics
Normalized nozzle material, diameter, and flow-family metadata, built from either raw telemetry fields or an encoded nozzle identifier (e.g. HS00-0.4). Held in ExtruderState.nozzle (per-extruder) and BambuState.active_nozzle (the currently active extruder's nozzle). Frozen dataclass — built fresh each frame via NozzleCharacteristics.from_telemetry().
Source: src/bpm/bambustate.py
Telemetry Root: print.device.nozzle.info[] (matched to an extruder by hnow/id), or print.nozzle_type / print.nozzle_diameter / print.nozzle_id on single-extruder printers
Identification
material
- Type:
NozzleType(Enum) - Default:
NozzleType.UNKNOWN - Telemetry:
nozzle.info[].type(e.g."hardened_steel"), or parsed from an encoded identifier's material code when the telemetry string is absent or unrecognized - Purpose: Canonical nozzle material
- Reference: See NozzleType
diameter_mm
- Type:
float - Default:
0.0 - Telemetry:
nozzle.info[].diameter - Unit: mm
- Purpose: Nozzle diameter
flow
- Type:
NozzleFlowType(Enum) - Default:
NozzleFlowType.UNKNOWN - Telemetry: Parsed from the encoded nozzle identifier's second character (
nozzle.info[].id, e.g.HS00-0.4), or forced toNozzleFlowType.STANDARDon the single-extruder fallback path - Purpose: Nozzle flow family (standard / high-flow / TPU high-flow)
- Reference: See NozzleFlowType
encoded_id
- Type:
str - Default:
"" - Telemetry:
nozzle.info[].id(e.g."HS00-0.4"), orprint.nozzle_idon single-extruder printers - Purpose: Raw encoded nozzle identifier, when the printer reports one
telemetry_type_raw
- Type:
str - Default:
"" - Telemetry:
nozzle.info[].type/print.nozzle_type, verbatim - Purpose: The original raw
nozzle_typetelemetry string, preserved even when it does not map to a knownNozzleType
Methods
from_telemetry(nozzle_type, nozzle_diameter, nozzle_id=None, flow_type=NozzleFlowType.UNKNOWN): builds an instance from raw telemetry fields, resolvingmaterial/flowfromnozzle_typefirst and, when still unknown, from a parseablenozzle_id.to_identifier(): returnsencoded_idwhen present; otherwise builds one frommaterial/flow/diameter_mmviabuild_nozzle_identifier(). Returns""whenflowisUNKNOWN.
ExtensionToolState
State of the toolhead extension-tool interface (H2-series only): the Toolhead Enhanced Cooling Fan, the cutting module, and the laser module all report through this one block. Held in BambuState.extension_tool. Frozen dataclass.
Source: src/bpm/bambustate.py
Telemetry Root: print.device.ext_tool
Fields
tool_type
- Type:
ExtensionToolType(Enum) - Default:
ExtensionToolType.NONE - Telemetry:
device.ext_tool.type - Purpose: Attached tool type
- Note: On cable loss the printer reports
typeas""(NONE) withmount_stateNO_CABLE— key presence checks usemount_state, nottool_typealone - Reference: See ExtensionToolType
mount_state
- Type:
ExtensionToolMountState(IntEnum) - Default:
ExtensionToolMountState.UNKNOWN - Telemetry:
device.ext_tool.mount_3d - Purpose: Mount state;
MOUNTEDis the only healthy attached state - Reference: See ExtensionToolMountState
calibration_raw
- Type:
int - Default:
-1 - Telemetry:
device.ext_tool.calib - Purpose: Raw calibration value (
0=none,1=first,2=mount, per BambuStudio'sCalibState)
type_raw
- Type:
str - Default:
"" - Telemetry:
device.ext_tool.type, verbatim - Purpose: Raw type code from telemetry, preserved for unrecognized tools
Computed Properties
is_enhanced_cooling_fan_mounted
- Type:
bool(property) - Purpose:
Truewhen the Toolhead Enhanced Cooling Fan is mounted with its cable connected (tool_type == ENHANCED_COOLING_FAN and mount_state == MOUNTED)
AMSUnitState
Individual AMS unit state and drying control.
Source: src/bpm/bambustate.py
Telemetry Root: print.ams.ams[id]
Identification
ams_id
- Type:
int - Telemetry:
ams[].id - Valid Range:
0-3: Standard AMS units128-131: AMS HT units- Purpose: Unique AMS unit identifier
- Reference: BambuStudio AMS addressing
chip_id
- Type:
str - Telemetry:
info.module[].snwhere module name starts withn3f/,n3s/, orams - Purpose: Hardware serial number
- Reference: BambuStudio module enumeration
model
- Type:
AMSModel(IntEnum) - Telemetry: Parsed from
ams[].infobits 0-3, or derived fromchip_idprefix - Valid Values:
UNKNOWN (0)AMS_1 (1): First generation (SN: 006xxx)AMS_LITE (2): Lite variant (SN: 03Cxxx)AMS_2_PRO (3): Second gen Pro / N3F (SN: 19Cxxx)AMS_HT (4): High-Temp / N3S (SN: 19Fxxx)- Purpose: AMS hardware model type
- Reference: BambuStudio
AMSModelenum, serial prefix mapping
Temperature Attributes
temp_actual
- Type:
float - Telemetry:
ams[].temp - Unit: °C
- Purpose: Current AMS internal temperature
- Reference: BambuStudio thermal monitoring
Humidity Attributes
humidity_index
- Type:
int - Telemetry:
ams[].humidity - Valid Range:
1-5(levels) - Purpose: Humidity level index
- Reference: BambuStudio humidity display
humidity_raw
- Type:
int - Telemetry:
ams[].humidity_raw - Valid Range:
0-100(%) - Purpose: Raw humidity percentage
- Reference: BambuStudio sensor data
AMS Info Bit Field Attributes
All attributes below are extracted from the 32-bit ams[].info hex value.
Reference: BambuStudio DevFilaSystem.cpp ParseAmsInfo() function
ams_info
- Type:
int - Telemetry:
ams[].info(hex string converted to int) - Purpose: Raw AMS info bitmask containing all drying/assignment data
- Reference: BambuStudio AMS telemetry
dryer
- Type:
AMSDryerState | None - Purpose: The unit's filament dryer. Set on an AMS 2 Pro or AMS HT the first time its model is known, from
info.module[].sn(a version reply alone is enough) orams[].info, before that frame's dryer fields are read. A serial whose prefix bpm does not know leaves an already-known model unchanged.NonewithmodelUNKNOWNmeans the unit has not reported yet;Nonewith any other model means the unit has no dryer. Serialized as a nested object, ornull. - Reference: see AMSDryerState
Tray Management
tray_exists
- Type:
list[bool] - Telemetry:
print.ams.tray_exist_bits(parsed per-AMS) - Size:
4for standard AMS,1for AMS HT - Bit Mapping:
- Standard AMS (id 0-3): shift =
4 * id, check 4 bits - AMS HT (id 128-131): shift =
16 + (4 * (id - 128)), check 1 bit - Purpose: Which tray slots have filament present
- Reference: BambuStudio tray existence detection
assigned_to_extruder
- Type:
ActiveTool(IntEnum) - Telemetry:
ams[].infobits 8-11 (extruder_id) - Purpose: Target extruder for H2D dual-extruder systems
- Reference: BambuStudio H2D AMS routing
AMSDryerState
The filament dryer of an AMS 2 Pro or AMS HT, held in AMSUnitState.dryer. Measured values are plain; values the printer was ordered to use end in _target.
Source: src/bpm/bambustate.py
Telemetry Root: print.ams.ams[id], and the ams_filament_drying command reply
Heater And Fans
All four are extracted from the 32-bit ams[].info hex value (BambuStudio DevFilaSystem.cpp ParseAmsInfo()).
state
- Type:
AMSHeatingState(IntEnum) - Telemetry:
ams[].infobits 4-7 - Valid Values:
OFF (0): No drying activeCHECKING (1): Checking drying statusDRYING (2): Active drying phaseCOOLING (3): Cooling after dryingSTOPPING (4): Stopping drying processERROR (5): Error stateCANNOT_STOP_HEAT_OOC (6): Heat control out of controlPRODUCT_TEST (7): Product testing mode- Purpose: The dryer's heater state
- Reference: BambuStudio
DryStatusenum
sub_status
- Type:
AMSDryerSubStatus(IntEnum) - Telemetry:
ams[].infobits 22-25 - Valid Values:
OFF (0): No active drying phaseHEATING (1): Heating phaseDEHUMIDIFY (2): Dehumidification phase- Purpose: Specific drying cycle phase
- Reference: BambuStudio
DrySubStatusenum
fan1_status, fan2_status
- Type:
AMSDryerFanStatus(IntEnum) - Telemetry:
ams[].infobits 18-19 and 20-21 - Valid Values:
OFF (0),ON (1) - Purpose: Drying fan states
- Reference: BambuStudio
DryFanStatusenum
Time And Order
remaining_minutes
- Type:
int - Telemetry:
ams[].dry_time - Unit: Minutes
- Purpose: Time left in the running dry
temp_target, duration_target_hours, filament_target
- Type:
int,int,str - Telemetry:
ams[].dry_setting.dry_temperature/.dry_duration/.dry_filament; an acceptedams_filament_dryingstart reply (mode1) also setstemp_targetfrom itstemp, and an accepted stop reply (mode0) sets it to -1 - Unit: °C, hours
- Purpose: The running dry's order;
-1/""when idle.temp_targetis the order, never a measured temperature (AMSUnitState.temp_actualis)
Refusals
refusals
- Type:
list[int](values ofAMSDryerRefusal; unknown values are kept) - Telemetry:
ams[].dry_sf_reason - Valid Values:
TASK_OCCUPIED (0),INSUFFICIENT_POWER (1),AMS_BUSY (2)(calibrating, reading RFID, loading or unloading)FILAMENT_AT_OUTLET (3): filament fed past the AMS outlet; unload before dryingINITIATING_DRYING (4),NOT_SUPPORTED_IN_2D_MODE (5),DRYING_IN_PROGRESS (6),UPGRADING (7)INSUFFICIENT_POWER_PLUG_IN (8),FILAMENT_AT_OUTLET_MANUAL_UNLOAD (10)- Purpose: Why the dryer cannot start now. An empty list means a dry can start;
[6]alone means one is running. Kept when a frame omits the key. - Reference: BambuStudio
DevAms::CannotDryReason(DevFilaSystem.h)
refusal_message
- Type:
str - Source:
dryerRefusalMessage(refusals) - Purpose: BambuStudio's explanation, one line per reason shown; empty when a dry can start
- Reference: BambuStudio
AMSDryControl.cpporganize_cannot_reasons_text
fail_code, fail_message, fail_count
- Type:
str,str,int - Telemetry: the
ams_filament_dryingcommand reply withresult: failand itserr_code - Purpose: Why the printer refused the last drying command (e.g.
HMS_0500-C04B, filament in AMS outlet), decoded fromHMS_STATUS. Code and message clear on the next accepted reply; the count only grows, so a consumer can tell a new refusal from an old one.
BambuClimate
All environmental, thermal, and fan control data.
Source: src/bpm/bambustate.py
Telemetry Root: Multiple sources
Bed Temperature
bed_temp
- Type:
float - Telemetry:
print.bed_temper - Unit: °C
- Purpose: Current bed temperature
- Reference: BambuStudio thermal monitoring
bed_temp_target
- Type:
int - Telemetry:
print.bed_target_temper - Unit: °C
- Purpose: Target bed temperature
- Reference: BambuStudio thermal control
- MQTT Control: Set Bed Temperature Target
Chamber Temperature
chamber_temp
- Type:
float - Telemetry:
print.device.ctc.info.temp(unpacked) orprint.chamber_temper - Unit: °C
- Purpose: Current chamber temperature
- Reference: BambuStudio CTC decoding
chamber_temp_target
- Type:
int - Telemetry:
print.device.ctc.info.temp(high 16 bits) or set viaset_cttcommand - Unit: °C
- Purpose: Target chamber temperature
- Reference: BambuStudio chamber control
- MQTT Control: Set Chamber Temperature Target
Air Conditioning Control
air_conditioning_mode
- Type:
AirConditioningMode(IntEnum) - Telemetry: Derived from
print.device.airduct.modeCur - Valid Values:
NOT_SUPPORTED (-1): No AC systemCOOL_MODE (0): Cooling/vent modeHEAT_MODE (1): Heating/recirculation mode- Purpose: Chamber climate control mode
- Reference: BambuStudio airduct mode mapping
airduct_mode
- Type:
int - Telemetry:
print.device.airduct.modeCur - Purpose: Raw airduct mode value
- Reference: BambuStudio airduct control
- MQTT Control: Chamber Air Conditioning Mode
airduct_sub_mode
- Type:
int - Telemetry:
print.device.airduct.subMode - Purpose: Raw airduct sub-mode value
- Reference: BambuStudio airduct control
Fan Speed Attributes
All fan speeds are scaled 0-100%.
part_cooling_fan_speed_percent
- Type:
int - Telemetry:
print.cooling_fan_speed(scaled) orairduct.parts[16].state - Valid Range:
0-100 - Unit: %
- Purpose: Part cooling fan speed
- Reference: BambuStudio fan control, scaled via
scaleFanSpeed()(0-15 → 0-100)
part_cooling_fan_speed_target_percent
- Type:
int - Telemetry: Currently mirrors
part_cooling_fan_speed_percent - Valid Range:
0-100 - Unit: %
- Purpose: Target part cooling fan speed
- Reference: BambuStudio fan targets
- MQTT Control: Part Cooling Fan (Layer Cooling)
aux_fan_speed_percent
- Type:
int - Telemetry:
print.big_fan1_speed(scaled) orairduct.parts[32].state - Valid Range:
0-100 - Unit: %
- Purpose: Auxiliary fan speed
- Reference: BambuStudio fan control
- MQTT Control: Aux Fan (Hotend Cooling)
exhaust_fan_speed_percent
- Type:
int - Telemetry:
print.big_fan2_speed(scaled) orairduct.parts[48].state - Valid Range:
0-100 - Unit: %
- Purpose: Exhaust/chamber fan speed
- Reference: BambuStudio fan control
- MQTT Control: Exhaust Fan
heatbreak_fan_speed_percent
- Type:
int - Telemetry:
print.heatbreak_fan_speed(scaled) - Valid Range:
0-100 - Unit: %
- Purpose: Heatbreak cooling fan speed
- Reference: BambuStudio fan control
enhanced_cooling_fan_target_percent
- Type:
int - Default:
0 - Valid Range:
0-100 - Unit: %
- Purpose: Commanded speed for the Toolhead Enhanced Cooling Fan (
M106 P9), set byBambuPrinter.set_enhanced_cooling_fan_speed_target_percent() - Reference: Unlike every other fan field, this is never updated from telemetry — the printer publishes no run-state for this fan (verified fw 01.03.00.00), so the last commanded value is the only state that exists. Reset to
0by the parser only whenextension_tool'smount_stateleavesMOUNTED(unplugged/removed), since the commanded value no longer describes reality.
Zone Control Attributes
zone_intake_open
- Type:
bool - Telemetry:
print.device.airduct.parts[96].state(non-zero = open) - Purpose: Heater intake damper state
- Reference: BambuStudio zone control
zone_part_fan_percent
- Type:
int - Telemetry:
print.device.airduct.parts[16].state - Valid Range:
0-100 - Unit: %
- Purpose: Internal part fan zone control
- Reference: BambuStudio zone mapping
zone_aux_percent
- Type:
int - Telemetry:
print.device.airduct.parts[32].state - Valid Range:
0-100 - Unit: %
- Purpose: Auxiliary fan zone control
- Reference: BambuStudio zone mapping
zone_exhaust_percent
- Type:
int - Telemetry:
print.device.airduct.parts[48].state - Valid Range:
0-100 - Unit: %
- Purpose: Exhaust fan zone control
- Reference: BambuStudio zone mapping
zone_top_vent_open
- Type:
bool - Telemetry: Computed from
zone_exhaust_percent > 0 and not zone_intake_open - Purpose: Top vent open state (derived)
- Reference: Logic derived from BambuStudio behavior
Door/Lid Sensors
is_chamber_door_open
- Type:
bool - Telemetry:
print.statbit 23 - Purpose: Chamber door open sensor (H2 series)
- Capability: Requires
PrinterCapabilities.has_chamber_door_sensor - Reference: BambuStudio
funbit 12 detection,statbit 23 state
is_chamber_lid_open
- Type:
bool - Telemetry:
print.statbit 24 - Purpose: Chamber lid open sensor (H2 series)
- Capability: Requires
PrinterCapabilities.has_chamber_door_sensor - Reference: BambuStudio
statbit 24 state
BambuSpool
Filament spool properties and state.
Source: src/bpm/bambuspool.py
Telemetry Root: print.ams.ams[].tray[] or virtual spool
Identification
id
- Type:
int - Telemetry: Computed from AMS/tray combination — standard AMS:
ams_id * 4 + slot_id; AMS HT:int(ams_id / 128 + 15); external: the rawvt_tray/vir_slottray id - Valid Range:
0-15(standard AMS:ams_id0-3 × 4 slots),16+(AMS HT — integer division collapses every AMS HT unit's single tray toward the same low value),254-255(external) - Purpose: Global spool identifier
- Reference: BambuStudio spool indexing
slot_id
- Type:
int - Telemetry: Tray index within AMS
- Valid Range:
0-3(standard AMS),0(AMS HT),254-255(external) - Purpose: Physical slot number
- Reference: BambuStudio tray addressing
ams_id
- Type:
int - Telemetry: Parent AMS unit ID
- Valid Range:
-1(external),0-3,128-131 - Purpose: Associated AMS unit
- Reference: BambuStudio AMS association
Filament Properties
name
- Type:
str - Telemetry:
tray[].tray_id_name - Purpose: Filament product name
- Reference: BambuStudio filament database. Do not confuse with
tray_info_idx, a separate field carrying the filament preset index
type
- Type:
str - Telemetry:
tray[].tray_type - Examples:
PLA,PETG,ABS,TPU,ASA,PA,PET, etc. - Purpose: Filament material type
- Reference: BambuStudio material types
sub_brands
- Type:
str - Telemetry:
tray[].tray_sub_brands - Examples:
Matte,Pro,Tough,Support, etc. - Purpose: Filament variant/specialization
- Reference: Bambu Lab product variants
color
- Type:
str - Telemetry:
tray[].tray_color(hex code converted viawebcolors) - Format: Hex
#RRGGBBor color name - Purpose: Filament color
- Reference: BambuStudio color handling
tray_info_idx
- Type:
str - Telemetry:
tray[].tray_info_idx - Purpose: Filament preset index in Bambu Studio
- Reference: BambuStudio filament database indexing
- Catalog:
bambucommands.FILAMENT_CATALOGis keyed by this value. It is generated from Bambu Studio's system filament profiles bybambu-mqtt/get_filament_data.py. Each entry carries name, vendor,filament_type, nozzle and plate temperatures, and Studio's AMS drying preset: drying_temp_idle/drying_hours_idle,drying_temp_print/drying_hours_print: dicts keyed byAMSModelname (AMS_2_PRO,AMS_HT). Temperatures are °C. Times are hours, the unit of theams_filament_dryingcommand'sduration.drying_full_dry: the AMS models Studio says can dry this filament completely.drying_heat_distortion_temp,drying_softening_temp: °C. Studio warns above the first and sends the second as the command'scooling_temp.
Temperature Settings
bed_temp
- Type:
int - Telemetry:
tray[].bed_temportray[].bed_temp_type - Unit: °C
- Purpose: Recommended bed temperature
- Reference: BambuStudio filament profiles
nozzle_temp_min
- Type:
int - Telemetry:
tray[].nozzle_temp_min - Unit: °C
- Purpose: Minimum safe nozzle temperature
- Reference: BambuStudio filament profiles
- MQTT Control: Set Filament Details / Spool Settings
nozzle_temp_max
- Type:
int - Telemetry:
tray[].nozzle_temp_max - Unit: °C
- Purpose: Maximum safe nozzle temperature
- Reference: BambuStudio filament profiles
- MQTT Control: Set Filament Details / Spool Settings
drying_temp
- Type:
int - Telemetry:
tray[].drying_temp - Unit: °C
- Purpose: Recommended drying temperature
- Reference: BambuStudio filament drying settings
- MQTT Control: AMS Filament Drying
drying_time
- Type:
int - Telemetry:
tray[].drying_time - Unit: Hours
- Purpose: Recommended drying duration
- Reference: BambuStudio filament drying settings
- MQTT Control: AMS Filament Drying
Print Settings
k
- Type:
float - Telemetry:
tray[].k - Purpose: K-Factor for linear advance (flow rate)
- Reference: BambuStudio pressure advance tuning
Spool Status
remaining_percent
- Type:
int - Telemetry:
tray[].remain - Valid Range:
0-100 - Unit: %
- Purpose: Estimated remaining filament
- Reference: BambuStudio filament tracking
state
- Type:
int - Telemetry:
tray[].state - Purpose: Spool operational state
- Reference: BambuStudio tray state
total_length
- Type:
int - Telemetry:
tray[].total_len - Unit: mm
- Purpose: Total filament length on spool
- Reference: BambuStudio filament tracking
tray_weight
- Type:
int - Telemetry:
tray[].tray_weight - Unit: grams
- Purpose: Current spool weight
- Reference: BambuStudio weighing system
ProjectInfo
Details of the associated project (3MF file) including metadata and identification.
Source: src/bpm/bambuproject.py
Identification Attributes
id
- Type:
str - Default:
"" - Purpose: The unique identifier for this project (3MF storage location)
- Format: Full path on printer or FTPS server (e.g.,
/cache/my_model.3mf) - Reference: FTPS file path or project identifier
name
- Type:
str - Default:
"" - Purpose: The filename portion of the 3MF id
- Example:
"my_model.3mf" - Reference: Extracted from the
idpath
size
- Type:
int - Default:
0 - Unit: bytes
- Purpose: The size of this 3MF file
- Reference: File system metadata
timestamp
- Type:
int - Default:
0 - Unit: epoch seconds
- Purpose: The epoch timestamp of this 3MF file
- Reference: File modification time
md5
- Type:
str - Default:
"" - Purpose: The MD5 checksum of this 3MF file
- Format: 32-character hexadecimal string
- Usage: Cache validation and file integrity verification
- Reference: Computed via
get_file_md5()utility
Print Configuration
plate_num
- Type:
int - Default:
1 - Valid Range:
1-N(depends on model capabilities) - Purpose: The plate number this 3MF targets
- Reference: BambuStudio multi-plate support
metadata
- Type:
dict - Default:
{}(empty dict) - Purpose: The associated metadata of this 3MF file for
plate_num, populated byget_project_info() - Content: Extracted from 3MF files:
map— fullMetadata/plate_N.jsoncontent (bounding boxes, filament ids/colors per plate)filament— normalized per-filament list fromMetadata/slice_info.config(falls back toMetadata/project_settings.config, then the plate gcode header, whenslice_info.configis sparse)thumbnail/topimg— base64data:image/png;base64,...URIs fromMetadata/plate_N.png/Metadata/top_N.pngams_mapping,filament_extruders,physical_extruder_map,external_spool_trays— AMS/extruder assignment data derived fromslice_info.configand the plate gcode's config block (see Key Subfields below)slicer_settings— key slicer parameters fromMetadata/project_settings.config; keys always present, each falling back to a hard-coded default when the file is absent or lacks that key- Key Subfields:
thumbnail(str) —data:image/png;base64,..., fromMetadata/plate_N.pngtopimg(str) —data:image/png;base64,..., fromMetadata/top_N.pngmap(dict) — fullMetadata/plate_N.jsoncontent, includingfilament_ids,filament_colors, andbbox_objects(each enriched with an integeridfromslice_info.config'sidentify_id)map.bbox_objects- Array of objects in the model; each entry carries the slicer's own keys plusid(int,identify_idfromslice_info.config, added byget_project_info),name(str, slicer object name) andval(list, bounding-box extents[x_min, y_min, x_max, y_max]). Used with Skip Objects During Print — theidvalues are passed directly toBambuPrinter.skip_objects.map.bed_type- Type of print bed (e.g., "textured_plate")filament(list[dict]) - Array of filaments withid(1-indexed),type,color(#RRGGBB). Filament IDs correlate withams_mapping/filament_extruders/external_spool_trayspositions.ams_mapping(list[str]) — NOT tray IDs. A placeholder in the SHAPE ofBambuPrinter.print_3mf_file'sams_mappingparameter: indexid - 1holdsstr(id)for every filament infilament,"-1"fills the gaps. The 3mf carries no tray ids — itsfilament_mapsvalue (kept separately asfilament_extruders) is the slicer's per-filament extruder choice, not an AMS slot — so a real tray-id mapping must be resolved against the spools currently loaded on the printer before being passed toprint_3mf_file.filament_extruders(list[int]) — the slicer's 1-based logical extruder per filament, at indexid - 1, fromfilament_mapsinslice_info.config. Empty when absent.physical_extruder_map(list[int]) — physical extruder per logical extruder, from the plate gcode's config block:0main,1deputy. Empty when absent. On H2D it is[1, 0], so logical extruder 1 is the LEFT extruder.external_spool_trays(list[int]) — the external spool holder feeding each filament, at indexid - 1:255main (right on H2D),254deputy (left on H2D),-1unused/unmapped. Derived on every read from the printer's live capabilities viaresolve_external_spool_trays(); never written to the metadata cache.slicer_settings(dict) —enable_support,support_type,brim_type,brim_width,raft_layers,sparse_infill_density,wall_loops,layer_height,initial_layer_height, fromMetadata/project_settings.config. Every key is always present: each falls back to a hard-coded default (enable_support/raft_layers/brim_width:"0",support_type:"normal",brim_type:"no_brim",sparse_infill_density:"15%",wall_loops:"2",layer_height/initial_layer_height:"0.2") when that file is absent from the 3mf or lacks that key.- AMS Mapping Correlation (
ams_mappingis a filament-id placeholder, not a tray id — see above):
| Filament ID | Array Index | Placeholder Value | Note |
|---|---|---|---|
| 1 | ams_mapping[0] |
"1" |
Used |
| 2 | ams_mapping[1] |
"-1" |
Gap / unused filament id |
| 3 | ams_mapping[2] |
"3" |
Used |
plates
- Type:
list[int] - Default:
[] - Purpose: The set of plate numbers discovered in the 3MF package
- Valid Values: Positive plate indices (typically
1..N); not assumed to be contiguous or to start at 1 - Usage: Drives UI plate selection and validation for multi-plate projects;
get_all_project_info()iterates it to fetch every plate in one call - Reference: Parsed from the
Metadata/plate_*.jsonentries present in the 3mf zip
ActiveJobInfo
Details of the currently active job running on the printer, including progress, stage, and project information.
Source: src/bpm/bambuproject.py
Telemetry Root: Computed from multiple telemetry sources
Project Reference
project_info
- Type:
ProjectInfo | None - Default:
ProjectInfo()(empty instance) - Purpose: The 3MF details for the active job
- Reference: See ProjectInfo section
- Update: Populated via
get_project_info()method - Note: When
gcode_statetransitions toPREPAREorRUNNINGwithproject_infoempty (typically after a process restart), BPM first tries the persisted job record, then a fallback FTP lookup that searches the SD card 3MF file list bysubtask_nameand callsget_project_info(). Guarded byproject_info_fetch_attemptedto prevent repeated FTP calls on every MQTT push_status message. - Persisted job record (GH #59): a job started at the printer's screen reports an empty
subtask_name, so the name lookup cannot find it. Every successfulproject_fileframe therefore clears the previous record and the previous job'sproject_info(and resetsproject_info_fetch_attempted, so the new job gets its own name lookup), and, when bpm can read the file, writes a new one to<bpm_cache_path>/<serial>/job/active.json(path, md5, plate). An unreadable path, such as the internal eMMC URLfile:///userdata/…a touchscreen reprint sends, writes no record. A recovery whose fetch fails still falls through to the name lookup. That lookup searches the SD/USB tree by file name: first the file name of theproject_fileurl(a touchscreen history start sendsfile:///userdata/model/history/<file>and the project title assubtask_name, while the same<file>often sits on the card), thensubtask_nameitself when it already ends in.3mf(an A1 touchscreen start sends noproject_fileand names the file, extension included, assubtask_name), then<subtask_name>.gcode.3mfand<subtask_name>.3mf. The fixed staging nameproject_file.gcode.3mfis never looked up. Once the job isRUNNINGwith a task id and a layer count, the record is sealed with a fingerprint oftask_id,gcode_file,subtask_nameandtotal_layer_num. After a restart it is used only when that fingerprint matches live telemetry. An unsealed record or any mismatch deletes it and leavesproject_infoempty. It is also deleted when the job reachesFINISHorFAILED, and when the first status after a start showsIDLE,FINISHorFAILED. Known limit: the A1 reportstask_id"0"for every job, so there the other three fields carry the match.
project_info_fetch_attempted
- Type:
bool - Default:
False - Purpose: Guards the fallback
project_infofetch so FTP is only attempted once per job, preventing repeated FTP calls on every MQTT push_status message whileproject_info.idis empty
project_file_command
- Type:
dict - Default:
{}(empty dict) - Purpose: The project_file command that triggered this job (if one did)
- Content: MQTT command payload used to start the print
- Reference: Original MQTT
project_filecommand structure
Stage Information
stage_id
- Type:
int - Default:
0 - Telemetry:
print.stg_cur - Purpose: Current Stage numeric ID
- Valid Values: Raw firmware stage code, named by the
stage_mapdict insideparseStage()— not a formal enum (noStageclass exists in bpm).0and-1both map to""(no stage name);100is"Printing". SeeparseStage()for the full 60+ entry map (e.g.1="Auto bed leveling",24="Filament loading",255="Completed") - Reference: BambuStudio print-stage codes, decoded by
parseStage()
stage_name
- Type:
str - Default:
"" - Telemetry: Computed from
stage_idviaparseStage() - Purpose: Current Stage human-readable name
- Examples:
"Printing"(stage100),"Auto bed leveling"(stage1),"Heatbed preheating"(stage2) - Reference: BambuStudio stage naming,
parseStage()
Progress Tracking
current_layer
- Type:
int - Default:
0 - Telemetry:
print.layer_num - Valid Range:
0tototal_layers - Purpose: Current layer index during print
- Reference: BambuStudio progress tracking
total_layers
- Type:
int - Default:
0 - Telemetry:
print.total_layer_num - Purpose: The total number of layers for this job
- Reference: Sliced G-code layer count
print_percentage
- Type:
int - Default:
0 - Telemetry:
print.mc_percent - Valid Range:
0-100 - Unit: %
- Purpose: Overall print completion percentage
- Reference: BambuStudio progress calculation
Time Tracking
elapsed_minutes
- Type:
int - Default:
0 - Telemetry: Computed from
mc_remaining_time+wall_start_time - Unit: minutes
- Purpose: The elapsed time in minutes for this (or the last) job
- Reference: Calculated as
max(0, time.time() - wall_start_time) / 60.wall_start_timeis persisted to{bpm_cache_path}/<serial>/elapsed/<job_key>.json(default~/.bpm/<serial>/elapsed/<job_key>.json) so elapsed survives process restarts. Themax(0, …)guard prevents negative values if the system clock steps backward (e.g. NTP correction).
remaining_minutes
- Type:
int - Default:
0 - Telemetry:
print.mc_remaining_time - Unit: minutes
- Purpose: Time remaining in minutes for the current job
- Reference: BambuStudio time estimation
wall_start_time
- Type:
float - Default:
-1.0(unset) - Purpose: Wall-clock timestamp (
time.time()) of when this job started - Reference: Set on PREPARE/RUNNING state transition; loaded from
{bpm_cache_path}/<serial>/elapsed/<job_key>.json(default~/.bpm/<serial>/elapsed/<job_key>.json) on restart so the anchor survives process restarts. Usemax(0, time.time() - wall_start_time)when computing elapsed — guards against NTP clock steps backward. - Replaces:
monotonic_start_time(removed —time.monotonic()is process-relative and resets on every restart, making elapsed incorrect after any process restart)
Job Details
subtask_name
- Type:
str - Default:
"" - Telemetry:
print.subtask_name - Purpose: The subtask name for this job
- Reference: BambuStudio job naming
gcode_file
- Type:
str - Default:
"" - Telemetry:
print.gcode_file - Purpose: The underlying G-code filename from this job feeding the printer
- Format: Path to plate-specific G-code extracted from 3MF
- Example:
"/cache/my_model_plate_1.gcode" - Reference: BambuStudio G-code extraction
print_type
- Type:
str - Default:
"" - Telemetry:
print.print_type - Valid Values:
"local","cloud"(should always be"local"for BPM) - Purpose: Indicates whether this is a cloud or local job
- Reference: BambuStudio print source type
plate_num
- Type:
int - Default:
-1 - Telemetry: Parsed from a
plate_(\d{1,2})match on theproject_filecommand'sparam(defaults to1when the command carries no plate number), or the same pattern againstactive_job_info.gcode_fileduring the fallback name-lookup path - Valid Range:
1-Nor-1(unknown) - Purpose: The plate number this job is targeting
- Reference:
BambuPrinter._on_messageproject_filecommand handling
plate_type
- Type:
PlateType(Enum) - Default:
PlateType.NONE - Telemetry:
print.bed_type - Valid Values: See
PlateTypeenum (Cool Plate, Engineering Plate, etc.) - Purpose: The plate type associated with the job
- Reference: BambuStudio plate type enumeration
Enumerations Reference
ActiveTool
Source: src/bpm/bambutools.py
| Value | Name | Description |
|---|---|---|
| -1 | SINGLE_EXTRUDER | Standard single toolhead (X1/P1/A1) |
| 0 | RIGHT_EXTRUDER | Primary toolhead in H2D systems |
| 1 | LEFT_EXTRUDER | Secondary toolhead in H2D systems |
| 15 | NOT_ACTIVE | Transitional state |
AirConditioningMode
Source: src/bpm/bambutools.py
| Value | Name | Description |
|---|---|---|
| -1 | NOT_SUPPORTED | No AC system |
| 0 | COOL_MODE | Cooling/vent mode, top vent may open |
| 1 | HEAT_MODE | Heating mode, recirculation active |
AMSModel
Source: src/bpm/bambutools.py
| Value | Name | Serial Prefix | Description |
|---|---|---|---|
| 0 | UNKNOWN | N/A | Unknown model |
| 1 | AMS_1 | 006 | First generation AMS |
| 2 | AMS_LITE | 03C | Lite variant |
| 3 | AMS_2_PRO | 19C | Second gen Pro (N3F) |
| 4 | AMS_HT | 19F | High-Temp variant (N3S) |
AMSControlCommand
Source: src/bpm/bambutools.py
| Value | Name | Description |
|---|---|---|
| 0 | PAUSE | Pause AMS action |
| 1 | RESUME | Resume AMS action |
| 2 | RESET | Reset AMS subsystem state |
| 3 | DONE | Filament extruded, the load may continue (Studio's "Filament Extruded, Continue") |
| 4 | ABORT | Cancel the running load or unload (Studio's "Abort" and the load view's "Stop") |
FilamentStep / FilamentStepType
Source: src/bpm/bambutools.py
FilamentStep: 0 IDLE, 1 HEAT_NOZZLE, 2 CUT_FILAMENT, 3 PULL_CURR_FILAMENT, 4 PUSH_NEW_FILAMENT, 5 PURGE_OLD_FILAMENT, 6 CONFIRM_EXTRUDED, 7 CHECK_POSITION. Labels in FILAMENT_STEP_TEXT. FilamentStepType: 0 LOAD, 1 UNLOAD, 2 VT_LOAD. See filament_step.
HMSAction
Source: src/bpm/bambutools.py
Bambu Studio's dialog button ids (DeviceErrorDialog.hpp ActionButton), with Studio's text in HMS_ACTION_LABEL and what bpm sends in HMS_ACTION_COMMAND. See hms_errors.
AMSSeries
Source: src/bpm/bambutools.py
| Value | Name | Description |
|---|---|---|
| 0 | UNKNOWN | Unknown AMS generation |
| 1 | GEN_1 | Gen 1 AMS family |
| 2 | GEN_2 | Gen 2 AMS family |
AMSUserSetting
Source: src/bpm/bambutools.py
| Value | Name | Description |
|---|---|---|
| 0 | CALIBRATE_REMAIN_FLAG | Toggle filament remaining calibration |
| 1 | STARTUP_READ_OPTION | Toggle startup tray read behavior |
| 2 | TRAY_READ_OPTION | Toggle tray insert read behavior |
AMSHeatingState
Source: src/bpm/bambutools.py
Reference: BambuStudio DryStatus enum
| Value | Name | Description |
|---|---|---|
| 0 | OFF | No drying active |
| 1 | CHECKING | Checking drying status |
| 2 | DRYING | Active drying phase |
| 3 | COOLING | Cooling after drying |
| 4 | STOPPING | Stopping drying process |
| 5 | ERROR | Error state |
| 6 | CANNOT_STOP_HEAT_OOC | Heat control out of control |
| 7 | PRODUCT_TEST | Product testing mode |
AMSDryerSubStatus
Source: src/bpm/bambutools.py
Reference: BambuStudio DrySubStatus enum
| Value | Name | Description |
|---|---|---|
| 0 | OFF | No active drying phase |
| 1 | HEATING | Heating phase of drying |
| 2 | DEHUMIDIFY | Dehumidification phase |
AMSDryerFanStatus
Source: src/bpm/bambutools.py
Reference: BambuStudio DryFanStatus enum
| Value | Name | Description |
|---|---|---|
| 0 | OFF | Fan is off |
| 1 | ON | Fan is running |
ExtruderInfoState
Source: src/bpm/bambutools.py
| Value | Name | Description |
|---|---|---|
| 0 | NO_NOZZLE | No nozzle detected |
| 1 | EMPTY | Nozzle present, no filament |
| 2 | BUFFER_LOADED | Filament in buffer |
| 3 | LOADED | Filament fully loaded |
| 4 | NOT_AVAILABLE | Single-extruder printer placeholder — no extruder.info[] block exists to parse |
ExtruderStatus
Source: src/bpm/bambutools.py
Reference: BambuStudio BBL_EXTRUDER_STATE enum
| Value | Name | Description |
|---|---|---|
| 0 | IDLE | Not active |
| 1 | HEATING | Heating in progress |
| 2 | ACTIVE | Actively extruding |
| 3 | SUCCESS | Operation completed |
| 4 | NOT_AVAILABLE | Single-extruder printer placeholder — no extruder.info[] block exists to parse |
NozzleDiameter
Source: src/bpm/bambutools.py
| Value | Name | Description |
|---|---|---|
| 0.0 | UNKNOWN | Unknown or unsupported nozzle diameter |
| 0.2 | POINT_TWO_MM | 0.2mm nozzle |
| 0.4 | POINT_FOUR_MM | 0.4mm nozzle |
| 0.6 | POINT_SIX_MM | 0.6mm nozzle |
| 0.8 | POINT_EIGHT_MM | 0.8mm nozzle |
NozzleType
Source: src/bpm/bambutools.py
| Value | Name | Description |
|---|---|---|
| 0 | UNKNOWN | Unknown nozzle type |
| 1 | STAINLESS_STEEL | Stainless steel nozzle |
| 2 | HARDENED_STEEL | Hardened steel nozzle |
| 3 | TUNGSTEN_CARBIDE | Tungsten carbide nozzle |
| 4 | BRASS | Brass nozzle |
| 5 | E3D | E3D nozzle |
NozzleFlowType
Source: src/bpm/bambutools.py
| Value | Name | Description |
|---|---|---|
? |
UNKNOWN | Unrecognized flow family |
S |
STANDARD | Standard flow |
H |
HIGH_FLOW | High flow |
U |
TPU_HIGH_FLOW | TPU high flow |
Encoded as the second character of a nozzle identifier such as HS00-0.4. See NozzleCharacteristics.
NozzleMaterialCode
Source: src/bpm/bambutools.py
| Value | Name | Description |
|---|---|---|
?? |
UNKNOWN | Unrecognized material code |
00 |
STAINLESS_STEEL | Stainless steel |
01 |
HARDENED_STEEL | Hardened steel |
05 |
TUNGSTEN_CARBIDE | Tungsten carbide |
Encoded as characters 3-4 of a nozzle identifier such as HS00-0.4. BRASS and E3D have no encoded-identifier code. See NozzleCharacteristics.
ExtensionToolType
Source: src/bpm/bambutools.py
Reference: BambuStudio DevExtensionTool (TOOL_TYPE_*)
| Value | Name | Description |
|---|---|---|
"" |
NONE | No extension tool attached (or the attached tool is unpowered) |
CP00 |
CUTTING_MODULE | Blade cutting module |
LB00 |
LASER_MODULE | Laser module |
F000 |
ENHANCED_COOLING_FAN | Toolhead Enhanced Cooling Fan |
? |
UNKNOWN | Unrecognized type code (future extension tool) |
See ExtensionToolState.
ExtensionToolMountState
Source: src/bpm/bambutools.py
Reference: BambuStudio DevExtensionTool MountState
| Value | Name | Description |
|---|---|---|
| -1 | UNKNOWN | No telemetry received yet, or unrecognized value |
| 0 | NOT_MOUNTED | No extension tool mounted |
| 1 | MOUNTED | Extension tool mounted and communicating |
| 2 | NO_MODULE | Mount detected but no module present |
| 3 | NO_CABLE | Module mounted but its cable is not connected |
See ExtensionToolState.
AMSDryerRefusal
Source: src/bpm/bambutools.py
Reference: BambuStudio DevAms::CannotDryReason
| Value | Name | Description |
|---|---|---|
| 0 | TASK_OCCUPIED | Task occupied |
| 1 | INSUFFICIENT_POWER | Insufficient power |
| 2 | AMS_BUSY | Calibrating, reading RFID, loading or unloading |
| 3 | FILAMENT_AT_OUTLET | Filament fed past the AMS outlet |
| 4 | INITIATING_DRYING | Initiating AMS drying |
| 5 | NOT_SUPPORTED_IN_2D_MODE | Not supported in 2D mode |
| 6 | DRYING_IN_PROGRESS | A dry is already running |
| 7 | UPGRADING | Firmware update in progress |
| 8 | INSUFFICIENT_POWER_PLUG_IN | Insufficient power; plug in required |
| 10 | FILAMENT_AT_OUTLET_MANUAL_UNLOAD | Filament in AMS outlet; manual unload required |
See refusals (AMSDryerState).
DetectorSensitivity
Source: src/bpm/bambutools.py
| Value | Name | Description |
|---|---|---|
low |
LOW | Low sensitivity |
medium |
MEDIUM | Medium sensitivity |
high |
HIGH | High sensitivity |
Sent directly in the halt_print_sensitivity MQTT field for the spaghetti, purge-chute pile-up, nozzle-clumping, and air-printing X-Cam detectors.
SpeedLevel
Source: src/bpm/bambutools.py
| Value | Name | Description |
|---|---|---|
| 1 | QUIET | Quiet speed profile |
| 2 | STANDARD | Standard speed profile |
| 3 | SPORT | Sport speed profile |
| 4 | LUDICROUS | Ludicrous speed profile |
Maps human-readable names to the firmware integer codes sent in the print_speed MQTT command's param field, and reported back in spd_lvl. Used by BambuPrinter.speed_level (getter/setter).
PlateType
Source: src/bpm/bambutools.py
| Value | Name | Description |
|---|---|---|
| 0 | AUTO | Use slicer/printer default selection |
| 1 | COOL_PLATE | Cool plate |
| 2 | ENG_PLATE | Engineering plate |
| 3 | HOT_PLATE | Hot plate |
| 4 | TEXTURED_PLATE | Textured plate |
| 999 | NONE | No plate selected |
PrinterModel
Source: src/bpm/bambutools.py
PrinterModel is a plain Enum with string values (not sequential integers):
| Value | Name | Serial Prefix | Description |
|---|---|---|---|
"unknown" |
UNKNOWN | (none matched) | Unknown printer model |
"x1c" |
X1C | 00M |
X1 Carbon |
"x1" |
X1 | 00W |
X1 |
"x1e" |
X1E | 03W |
X1E |
"p1p" |
P1P | 01S |
P1P |
"p1s" |
P1S | 01P |
P1S |
"a1_mini" |
A1_MINI | 030 |
A1 Mini |
"a1" |
A1 | 039 |
A1 |
"p2s" |
P2S | 22E |
P2S |
"h2s" |
H2S | 093 |
H2S |
"h2d" |
H2D | 094 |
H2D |
Serial prefix mapping via getPrinterModelBySerial().
PrinterSeries
Source: src/bpm/bambutools.py
| Value | Name | Description |
|---|---|---|
| 0 | UNKNOWN | Unknown printer family |
| 1 | X1 | X1 family |
| 2 | P1 | P1 family |
| 3 | A1 | A1 family |
| 4 | P2 | P2 family |
| 5 | H2 | H2 family |
PrintOption
Source: src/bpm/bambutools.py
| Value | Name | Description |
|---|---|---|
| 0 | AUTO_RECOVERY | Resume print automatically after power loss or hardware fault. |
| 1 | FILAMENT_TANGLE_DETECT | Pause if AMS sensors detect a filament tangle. AMS-only; no effect on external spool prints. Guarded by has_filament_tangle_detect_support. |
| 2 | SOUND_ENABLE | Enable audible beep notifications for print events. Guarded by has_sound_enable_support. |
| 3 | AUTO_SWITCH_FILAMENT | Auto-switch to another AMS slot when the active spool runs out, if a slot with the same filament type AND color is available. AMS-hosted spools only. |
| 4 | NOZZLE_BLOB_DETECT | Legacy firmware-level (home_flag) nozzle blob detection. On supported printers, prefer set_nozzleclumping_detector() (xcam AI) which adds sensitivity control. Guarded by has_nozzle_blob_detect_support. |
| 5 | AIR_PRINT_DETECT | Legacy firmware-level (home_flag) air-printing detection. On supported printers, prefer set_airprinting_detector() (xcam AI) which adds sensitivity control. Guarded by has_air_print_detect_support. |
ServiceState
Source: src/bpm/bambutools.py
| Value | Name | Description |
|---|---|---|
| 0 | NO_STATE | Uninitialized |
| 1 | CONNECTED | Connected to MQTT broker |
| 2 | DISCONNECTED | Disconnected from broker |
| 3 | PAUSED | Session paused |
| 4 | QUIT | Session terminated |
TrayState
Source: src/bpm/bambutools.py
| Value | Name | Description |
|---|---|---|
| 0 | UNLOADED | Tray unloaded |
| 1 | LOADED | Tray loaded |
| 2 | LOADING | Loading in progress |
| 3 | UNLOADING | Unloading in progress |
Parsing Functions Reference
Temperature Unpacking
unpackTemperature(raw_temp: int) -> tuple[float, float]
Source: src/bpm/bambutools.py
- Input: 32-bit packed temperature integer
- Output:
(current_temp, target_temp)tuple - Algorithm:
- Current = low 16 bits (
raw_temp & 0xFFFF) - Target = high 16 bits (
(raw_temp >> 16) & 0xFFFF) - Reference: BambuStudio temperature encoding
AMS Info Parsing
parseAMSInfo(info_hex: str) -> dict
Source: src/bpm/bambutools.py
Reference: BambuStudio DevFilaSystem::ParseAmsInfo()
Extracts 6 bit fields from 32-bit AMS info value:
| Bits | Field | Type | Description |
|---|---|---|---|
| 0-3 | ams_type | AMSModel | Hardware model |
| 4-7 | heater_state | AMSHeatingState | Drying state |
| 8-11 | extruder_id | int | H2D toolhead assignment |
| 18-19 | dry_fan1_status | AMSDryerFanStatus | Fan 1 state |
| 20-21 | dry_fan2_status | AMSDryerFanStatus | Fan 2 state |
| 22-25 | dry_sub_status | AMSDryerSubStatus | Drying phase |
Extruder Parsing
parseExtruderInfo(info_int: int) -> ExtruderInfoState
Source: src/bpm/bambutools.py
- Bit 3: Nozzle present flag
- Bit 2: Buffer loaded flag
- Bit 1: Filament loaded flag
- Reference: BambuStudio extruder sensor logic
parseExtruderStatus(stat_int: int) -> ExtruderStatus
Source: src/bpm/bambutools.py
- Bits 8-9: Working state (
0x02/0x03= ACTIVE) - Bit 0: Heating flag
- Reference: BambuStudio
BBL_EXTRUDER_STATE
Fan Speed Scaling
scaleFanSpeed(raw_val: Any) -> int
Source: src/bpm/bambutools.py
- Input: 0-15 proprietary fan speed
- Output: 0-100 percentage
- Formula:
round((val / 15.0) * 100) - Reference: BambuStudio fan speed mapping
Error Decoding
decodeError(error: int) -> dict
Source: src/bpm/bambutools.py
Decodes 32-bit HMS error into structured dictionary:
- Bits 24-31: Module ID
- Bits 16-23: Severity mask
- Bits 0-15: Error code
- Output:
{code, msg, module, severity, is_critical, type, url} - Reference: BambuStudio HMS error database
decodeHMS(hms_list: list) -> list[dict]
Source: src/bpm/bambutools.py
Processes HMS error list from telemetry:
- Input:
[{attr: int, code: int}, ...] - Output: List of decoded error dictionaries
- Reference: BambuStudio HMS processing
Additional Utility / Parsing Functions
The following helpers are part of the mapped data pipeline and support class-level state population or metadata derivation.
| Function | Source Module | Purpose |
|---|---|---|
getAMSHeatingState(ams_info: int) |
bambutools.py |
Decode AMS heater state from bit field |
getAMSModelBySerial(serial: str) |
bambutools.py |
Infer AMS model from serial prefix |
getAMSSeriesByModel(model: AMSModel) |
bambutools.py |
Convert AMS model to AMS generation |
getPrinterModelBySerial(serial: str) |
bambutools.py |
Infer printer model from serial prefix |
getPrinterSeriesByModel(model: PrinterModel) |
bambutools.py |
Convert model to printer family |
parseAMSStatus(status_int: int) |
bambutools.py |
Convert AMS status integer to readable state |
parseExtruderTrayState(extruder: int, hotend, slot) |
bambutools.py |
Convert extruder tray bits to tray ID |
parseFilamentStep(ams_status, target_tray_id, filament_at_extruder, previous) |
bambutools.py |
Name the running filament load/unload step, as Bambu Studio's StatusPanel does. See filament_step |
dryerRefusalMessage(reasons: list[int]) |
bambutools.py |
Build BambuStudio's dry-refusal explanation text. See refusal_message |
hmsActions(serial_number, print_error) |
bambutools.py |
The dialog buttons Bambu Studio shows for a print_error. See hms_errors |
parse_nozzle_identifier(nozzle_id: str) |
bambutools.py |
Parse an encoded nozzle id (e.g. HS00-0.4) into flow/material/diameter |
build_nozzle_identifier(flow_type, nozzle_type, diameter) |
bambutools.py |
Build a canonical encoded nozzle id |
parse_nozzle_type(value: str \| None) |
bambutools.py |
Resolve a NozzleType from telemetry strings or encoded ids |
nozzle_type_to_telemetry(value: NozzleType) |
bambutools.py |
Convert a canonical NozzleType back to its telemetry string |
resolve_external_spool_trays(filament_extruders, physical_extruder_map, used_filament_ids) |
bambutools.py |
Name the external spool holder feeding each filament of a dual-nozzle plate |
parseRFIDStatus(status) |
bambutools.py |
Convert RFID state code to readable status |
parseStage(stage_int: int) |
bambutools.py |
Convert print stage ID to stage name |
sortFileTreeAlphabetically(source) |
bambutools.py |
Stable sort for SD-card tree output |
get_file_md5(file_path: str \| Path) |
bambutools.py |
Compute file checksum for cache integrity |
jsonSerializer(obj) |
bambutools.py |
Module-level json.dumps(default=...) serializer for dataclasses / non-JSON-native objects |
get_3mf_entry_by_name(node, target_name) |
bambuproject.py |
Locate 3MF tree node by filename |
get_3mf_entry_by_id(node, target_id) |
bambuproject.py |
Locate 3MF tree node by identifier |
get_project_info(...) |
bambuproject.py |
Build ProjectInfo from printer or local 3MF source |
get_all_project_info(...) |
bambuproject.py |
Build one ProjectInfo per plate in a 3MF in a single call |
BambuState.fromJson(data, printer) |
bambustate.py |
Primary state parser mapping MQTT payloads to dataclasses |
Disk-Persistence Framework (bambutools.py)
General-purpose helpers for persisting any JSON-serializable runtime value across process restarts. All BPM on-disk state should use these functions.
| Function | Purpose |
|---|---|
make_cache_key(raw, max_len=80) → str \| None |
Sanitize any raw string (subtask name, gcode path, etc.) into a filesystem-safe filename stem. Returns None for empty input. |
cache_write(cache_dir, key, value) |
Persist a JSON-serializable value to cache_dir/<key>.json. Creates the directory if needed. Silent on error. |
cache_read(cache_dir, key, default=None) |
Load a persisted value from cache_dir/<key>.json. Returns default on any error or cache miss. |
cache_delete(cache_dir, key) |
Remove cache_dir/<key>.json. Silent on error or missing file. |
Usage pattern:
cache_dir = self.config.bpm_cache_path / "<subdir>"
key = make_cache_key(raw_identifier) # returns None if empty
cache_write(cache_dir, key, {"field": value})
data = cache_read(cache_dir, key) # None = miss
cache_delete(cache_dir, key)
The cache directory is created lazily on first cache_write. Do not pre-create
subdirs in BambuConfig.set_new_bpm_cache_path() — that method creates the root only.
Class & Method Coverage Index
This index verifies current class/method/property coverage for the src/bpm
surface area and links each area to its documentation section.
Class Coverage
| Class | Coverage |
|---|---|
BambuConfig |
Documented in BambuConfig |
PrinterCapabilities |
Documented in PrinterCapabilities |
BambuState |
Documented in BambuState |
ExtruderState |
Documented in ExtruderState |
AMSUnitState |
Documented in AMSUnitState |
AMSDryerState |
Documented in AMSDryerState |
BambuClimate |
Documented in BambuClimate |
BambuSpool |
Documented in BambuSpool |
NozzleCharacteristics |
Documented in NozzleCharacteristics |
ExtensionToolState |
Documented in ExtensionToolState |
ProjectInfo |
Documented in ProjectInfo |
ActiveJobInfo |
Documented in ActiveJobInfo |
BambuPrinter |
Method/property coverage indexed below; command payloads documented in MQTT Protocol Reference |
FtpListItem |
Covered in FTPS class index below |
ImplicitTLS |
Covered in FTPS class index below |
IoTFTPSClient |
Covered in FTPS class index below |
Non-Printer Methods / Constructors
| Module / Class | Methods |
|---|---|
BambuConfig |
__post_init__, set_new_bpm_cache_path |
BambuState |
fromJson |
NozzleCharacteristics |
from_telemetry (classmethod), to_identifier |
bambuproject |
get_3mf_entry_by_name, get_3mf_entry_by_id, get_project_info, get_all_project_info |
get_project_info internal helpers |
get_nodes_by_plate_id, _split_config_list, _extract_list_from_config, _extract_list_from_gcode_header, _read_gcode_config_block, _to_int_list, _attach_external_spool_trays, _normalize_hex_color, _ensure_ams_mapping |
BambuPrinter Public Methods
| Category | Methods |
|---|---|
| Session lifecycle | start_session, pause_session, resume_session, quit, refresh, rename_printer |
| Temperature/fans | set_bed_temp_target, set_nozzle_temp_target, set_chamber_temp, set_chamber_temp_target, set_part_cooling_fan_speed_target_percent, set_aux_fan_speed_target_percent, set_exhaust_fan_speed_target_percent, set_enhanced_cooling_fan_speed_target_percent |
| Filament / AMS | unload_filament, load_filament, set_ams_user_setting, set_spool_k_factor, set_spool_details, send_ams_control_command, turn_on_ams_dryer, turn_off_ams_dryer, refresh_spool_rfid, select_extrusion_calibration_profile, get_current_bind_list, refresh_nozzles |
| Print control | print_3mf_file, stop_printing, pause_printing, resume_printing, set_print_option, set_active_tool, set_nozzle_details, set_buildplate_marker_detector, set_spaghetti_detector, set_purgechutepileup_detector, set_nozzleclumping_detector, set_airprinting_detector, skip_objects |
| Error handling | clean_print_error, clean_print_error_uiop, clear_command_errors, send_hms_action |
| Raw/send helpers | send_gcode, send_anything |
| SD card / FTPS | ftp_connection, get_sdcard_contents, get_sdcard_3mf_files, delete_sdcard_file, delete_sdcard_folder, upload_sdcard_file, download_sdcard_file, make_sdcard_directory, rename_sdcard_file, sdcard_file_exists |
| Serialization/introspection | toJson, jsonSerializer (bambutools.py module function, used as json.dumps's default=) |
BambuPrinter Properties / Accessors
| Property | Notes |
|---|---|
config |
Config object getter/setter |
service_state |
Connection state getter/setter |
client |
MQTT client getter/setter |
on_update |
Update callback getter/setter |
recent_update |
Read-only recent update marker |
bed_temp_target_time, tool_temp_target_time, chamber_temp_target_time, fan_speed_target_time |
Read-only target-change timestamps |
light_state |
Light mode getter/setter (bool, from lights_report[0].mode) |
speed_level |
Speed profile getter/setter (SpeedLevel \| int) |
printer_state |
Current parsed BambuState |
active_job_info |
Current parsed ActiveJobInfo |
internalException |
Last internal exception getter |
cached_sd_card_contents, cached_sd_card_3mf_files |
SD card cache getters |
skipped_objects |
Last skipped object list — deprecated (v1.0.0), no replacement yet |
nozzle_diameter, nozzle_type |
Normalized nozzle metadata getters — deprecated (v1.0.0); use active_nozzle's diameter_mm / material instead |
FTPS Classes & Methods
| Class | Methods / Properties |
|---|---|
FtpListItem |
Dataclass fields: path, name, size, is_dir, timestamp, owner, group, permissions |
ImplicitTLS |
__init__, sock (getter/setter), ntransfercmd |
IoTFTPSClient |
__init__, __repr__, instantiate_ftps_session, disconnect, download_file, upload_file, delete_file, delete_folder, move_file, mkdir, fexists, list_files, list_files_ex |
Internal Methods (Parsing/Infrastructure)
| Method | Purpose |
|---|---|
_notify_update |
Execute update callback safely |
_start_watchdog |
Session timeout and re-announce loop |
_on_message |
Primary inbound MQTT message handler |
_get_sftp_files |
FTPS file listing helper |
Telemetry Message Structure
Standard Telemetry Update
{
"print": {
"gcode_state": "RUNNING",
"mc_percent": 45,
"nozzle_temper": 220.5,
"bed_temper": 60.0,
"ams": {
"tray_now": "3",
"ams_exist_bits": "F",
"ams": [
{
"id": 0,
"temp": 25.5,
"humidity": 3,
"info": "2003"
}
]
},
"device": {
"extruder": {
"state": 0,
"info": [
{
"id": 0,
"temp": 14418176,
"info": 11,
"stat": 0
}
]
}
}
}
}
AMS Drying Status Update
{
"print": {
"ams": {
"ams": [
{
"id": 0,
"temp": 65.2,
"dry_time": 180,
"info": "142024"
}
]
}
}
}
HMS Error Update
Version History
| Version | Date | Changes |
|---|---|---|
| 1.3 | 2026-09-27 | Full code-vs-doc reconciliation pass. Added NozzleCharacteristics and ExtensionToolState classes (previously undocumented entirely, including BambuState.active_nozzle/.extension_tool and ExtruderState.nozzle); added BambuClimate.enhanced_cooling_fan_target_percent; added BambuConfig.mqtt_connection_timeout/.ftps_connection_timeout and the 10 detector feature-flag fields; added the 11 missing PrinterCapabilities.has_*_support flags with their actual bit/telemetry detection sources; added NozzleFlowType, NozzleMaterialCode, ExtensionToolType, ExtensionToolMountState, AMSDryerRefusal, DetectorSensitivity, SpeedLevel to the Enumerations Reference; corrected ActiveJobInfo.stage_id/.plate_num telemetry sources (no Stage enum exists; stage_id is stg_cur not mc_print_stage), ExtruderInfoState/ExtruderStatus missing NOT_AVAILABLE(4), BambuConfig.capabilities's type/default, several PrinterCapabilities detection-mechanism claims, BambuSpool.name/.total_length telemetry sources, ProjectInfo.metadata.ams_mapping (corrected from "absolute tray IDs" to the actual filament-id placeholder; NOT tray IDs), ProjectInfo.plates's source file and its table placement, and PrinterModel's enum values (string, not sequential int). Synced bpm-class-diagram.mmd/.svg to match (fixed stale monotonic_start_time, added the same missing fields/classes, fixed the FtpListItem/IoTFTPSClient field lists and a wrong ImplicitTLS inheritance relationship) |
| 1.2 | 2026-02-25 | Added missing ProjectInfo.plates, expanded enum coverage (all current enums), added utility/parsing function index, and added class/method/property coverage index including BambuPrinter |
| 1.1 | 2026-02-25 | Added BambuConfig, PrinterCapabilities, ProjectInfo, ActiveJobInfo dataclasses; comprehensive MQTT Control references; field-level consistency |
| 1.0 | 2026-02-23 | Initial comprehensive data dictionary |