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
This commit is contained in:
maziggy
2026-01-17 07:12:57 +01:00
parent 03f4f8436a
commit 699d7b0c71
2 changed files with 19 additions and 2 deletions
+9
View File
@@ -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
View File
@@ -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,