diff --git a/CHANGELOG.md b/CHANGELOG.md index d009f0f77..574fadcf1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ All notable changes to Bambuddy will be documented in this file. - **Spoolman Creates Duplicate Spools on Startup** ([#295](https://github.com/maziggy/bambuddy/pull/295)) — Each AMS tray independently fetched all spools from Spoolman, causing redundant API calls and duplicate spool creation with large databases (300+ spools). Now fetches spools once and reuses cached data across all tray operations. Added retry logic (3 attempts, 500ms delay) with connection recreation for transient network errors. - **Filament Usage Charts Inflated by Quantity Multiplier** ([#229](https://github.com/maziggy/bambuddy/issues/229)) — Daily, weekly, and filament-type charts were multiplying `filament_used_grams` by print quantity, even though the value already represents the total for the entire job. A 26-object print using 126g was counted as 3,276g. Removed the erroneous multiplier from three aggregations in `FilamentTrends.tsx`. - **Energy Cost Shows 0.00 in "Total Consumption" Mode** ([#284](https://github.com/maziggy/bambuddy/issues/284)) — Statistics Quick Stats showed 0.00 energy cost when Energy Display Mode was set to "Total Consumption" with Home Assistant smart plugs. The `homeassistant_service` was not configured with HA URL/token before querying plug energy data, causing it to silently return nothing. +- **H2D Pro Prints Fail at ~75% With Extrusion Motor Overload** ([#245](https://github.com/maziggy/bambuddy/issues/245)) — H2D Pro firmware interprets `use_ams: 1` (integer) as a nozzle index, routing filament to the deputy nozzle instead of the main nozzle. Bambu Studio sends `use_ams: true` (boolean) while using integers for other fields. Fixed by keeping `use_ams` as boolean for all printers including H2D series. ### Documentation - **Proxy Mode Security Warning** — Added FTP data channel security warning to wiki, README, and website. Bambu Studio does not encrypt the FTP data channel despite negotiating PROT P; MQTT and FTP control channels are fully TLS-encrypted. VPN (Tailscale/WireGuard) recommended for full data encryption. diff --git a/backend/app/services/bambu_mqtt.py b/backend/app/services/bambu_mqtt.py index 89cf09d69..45a3c3937 100644 --- a/backend/app/services/bambu_mqtt.py +++ b/backend/app/services/bambu_mqtt.py @@ -2049,8 +2049,10 @@ class BambuMQTTClient: slot_id = tray_id % 4 ams_mapping2.append({"ams_id": ams_id, "slot_id": slot_id}) - # H2D series requires integer values (0/1) for boolean fields - # Other printers (X1C, P1S, A1, etc.) require actual booleans + # H2D series requires integer values (0/1) for calibration/leveling fields + # but use_ams MUST remain boolean — H2D Pro firmware interprets integer + # values as nozzle index (1 = deputy nozzle), causing wrong extruder routing + # Other printers (X1C, P1S, A1, etc.) require actual booleans for all fields is_h2d = self.model and self.model.upper().strip() in ("H2D", "H2D PRO", "H2DPRO", "H2C", "H2S") command = { @@ -2068,7 +2070,7 @@ class BambuMQTTClient: "flow_cali": (1 if flow_cali else 0) if is_h2d else flow_cali, "vibration_cali": (1 if vibration_cali else 0) if is_h2d else vibration_cali, "layer_inspect": (1 if layer_inspect else 0) if is_h2d else layer_inspect, - "use_ams": (1 if use_ams else 0) if is_h2d else use_ams, + "use_ams": use_ams, "cfg": "0", "extrude_cali_flag": 0, "extrude_cali_manual_mode": 0, @@ -2082,7 +2084,10 @@ class BambuMQTTClient: } if is_h2d: - logger.info("[%s] H2D series detected: using integer format for boolean fields", self.serial_number) + logger.info( + "[%s] H2D series detected: using integer format for calibration fields (use_ams stays boolean)", + self.serial_number, + ) # P2S-specific parameter adjustments # P2S printer doesn't support vibration calibration like X1/P1 series