Przeglądaj źródła

Fix chamber temp showing on A1/P1S in multi-printer setups

The REST API endpoint GET /printers/{id}/status was returning raw
temperatures without filtering based on printer model. WebSocket
broadcasts correctly filtered chamber temp via printer_state_to_dict(),
but the REST endpoint built its own response and bypassed this filter.

When users added a second printer, the frontend would fetch initial
status via REST API, causing chamber temp to reappear on printers
that don't have a chamber sensor (A1, A1Mini, P1P, P1S).

Changes:
- Import supports_chamber_temp in printers.py
- Filter chamber/chamber_target/chamber_heating in get_printer_status()

Fixes #82
maziggy 4 miesięcy temu
rodzic
commit
699d7b0c71
2 zmienionych plików z 19 dodań i 2 usunięć
  1. 9 0
      CHANGELOG.md
  2. 10 2
      backend/app/api/routes/printers.py

+ 9 - 0
CHANGELOG.md

@@ -2,6 +2,15 @@
 
 All notable changes to Bambuddy will be documented in this file.
 
+## [0.1.6b14] - 2026-01-17
+
+### Fixed
+- **Chamber temp showing on printers without sensor in multi-printer setups** - Fixed regression where A1/P1S chamber temperature would appear after adding a second printer:
+  - Root cause: REST API `/printers/{id}/status` endpoint wasn't filtering chamber temp by model
+  - WebSocket broadcasts filtered correctly, but initial REST fetch didn't
+  - Now both REST and WebSocket consistently filter chamber temp for P1P/P1S/A1/A1Mini
+  - Fixes [#82](https://github.com/maziggy/bambuddy/issues/82) (multi-printer regression)
+
 ## [0.1.6b13] - 2026-01-16
 
 ### Fixed

+ 10 - 2
backend/app/api/routes/printers.py

@@ -30,7 +30,7 @@ from backend.app.services.bambu_ftp import (
     get_storage_info_async,
     list_files_async,
 )
-from backend.app.services.printer_manager import get_derived_status_name, printer_manager
+from backend.app.services.printer_manager import get_derived_status_name, printer_manager, supports_chamber_temp
 
 logger = logging.getLogger(__name__)
 router = APIRouter(prefix="/printers", tags=["printers"])
@@ -338,6 +338,14 @@ async def get_printer_status(printer_id: int, db: AsyncSession = Depends(get_db)
     tray_now = state.tray_now
     logger.debug(f"Using tray_now directly as global ID: {tray_now}")
 
+    # Filter out chamber temp for models that don't have a real sensor
+    # P1P, P1S, A1, A1Mini report meaningless chamber_temper values
+    temperatures = state.temperatures
+    if not supports_chamber_temp(printer.model):
+        temperatures = {
+            k: v for k, v in temperatures.items() if k not in ("chamber", "chamber_target", "chamber_heating")
+        }
+
     return PrinterStatus(
         id=printer_id,
         name=printer.name,
@@ -350,7 +358,7 @@ async def get_printer_status(printer_id: int, db: AsyncSession = Depends(get_db)
         remaining_time=state.remaining_time,
         layer_num=state.layer_num,
         total_layers=state.total_layers,
-        temperatures=state.temperatures,
+        temperatures=temperatures,
         cover_url=cover_url,
         hms_errors=hms_errors,
         ams=ams_units,