mirror of
https://github.com/maziggy/bambuddy.git
synced 2026-10-05 05:31:31 +02:00
Fix: Internal Model Code Detection for Camera Protocol
Root Cause: P2S (and other newer models) may report their model as internal codes (e.g., "N7" for P2S) rather than display names in MQTT/SSDP responses. The camera code only checked for display names like "P2S", causing it to incorrectly use the chamber image protocol (for A1/P1) instead of RTSP. Internal Code Mapping: BL-P001 → X1/X1C (RTSP) C13 → X1E (RTSP) O1D → H2D (RTSP) O1C → H2C (RTSP) O1S → H2S (RTSP) O1E → H2D Pro (RTSP) N7 → P2S (RTSP) C11 → P1P (Chamber) C12 → P1S (Chamber) N2S → A1 (Chamber) N1 → A1 Mini (Chamber) Closes #127
This commit is contained in:
@@ -66,12 +66,25 @@ def supports_rtsp(model: str | None) -> bool:
|
||||
|
||||
RTSP supported: X1, X1C, X1E, H2C, H2D, H2DPRO, H2S, P2S
|
||||
Chamber image only: A1, A1MINI, P1P, P1S
|
||||
|
||||
Note: Model can be either display name (e.g., "P2S") or internal code (e.g., "N7").
|
||||
Internal codes from MQTT/SSDP:
|
||||
- BL-P001: X1/X1C
|
||||
- C13: X1E
|
||||
- O1D: H2D
|
||||
- O1C: H2C
|
||||
- O1S: H2S
|
||||
- O1E: H2D Pro
|
||||
- N7: P2S
|
||||
"""
|
||||
if model:
|
||||
model_upper = model.upper()
|
||||
# These models support RTSP on port 322
|
||||
# Display names: X1, X1C, X1E, H2C, H2D, H2DPRO, H2S, P2S
|
||||
if model_upper.startswith(("X1", "H2", "P2")):
|
||||
return True
|
||||
# Internal codes for RTSP models
|
||||
if model_upper in ("BL-P001", "C13", "O1D", "O1C", "O1S", "O1E", "N7"):
|
||||
return True
|
||||
# A1/P1 and unknown models use chamber image protocol
|
||||
return False
|
||||
|
||||
|
||||
@@ -10,8 +10,10 @@ from backend.app.services.bambu_mqtt import BambuMQTTClient, MQTTLogEntry, Print
|
||||
# Models that have a real chamber temperature sensor
|
||||
# Based on Home Assistant Bambu Lab integration
|
||||
# P1P/P1S and A1/A1Mini do NOT have chamber temp sensors
|
||||
# Includes both display names and internal codes from MQTT/SSDP
|
||||
CHAMBER_TEMP_SUPPORTED_MODELS = frozenset(
|
||||
[
|
||||
# Display names
|
||||
"X1",
|
||||
"X1C",
|
||||
"X1E", # X1 series
|
||||
@@ -20,6 +22,14 @@ CHAMBER_TEMP_SUPPORTED_MODELS = frozenset(
|
||||
"H2D",
|
||||
"H2DPRO",
|
||||
"H2S", # H2 series
|
||||
# Internal codes (from MQTT/SSDP)
|
||||
"BL-P001", # X1/X1C
|
||||
"C13", # X1E
|
||||
"O1D", # H2D
|
||||
"O1C", # H2C
|
||||
"O1S", # H2S
|
||||
"O1E", # H2D Pro
|
||||
"N7", # P2S
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
@@ -839,6 +839,34 @@ class TestSupportsChamberTemp:
|
||||
assert supports_chamber_temp("X1c") is True
|
||||
assert supports_chamber_temp("p1s") is False
|
||||
|
||||
def test_internal_model_codes_supported(self):
|
||||
"""Verify internal model codes from MQTT/SSDP are recognized."""
|
||||
# X1/X1C
|
||||
assert supports_chamber_temp("BL-P001") is True
|
||||
# X1E
|
||||
assert supports_chamber_temp("C13") is True
|
||||
# H2D
|
||||
assert supports_chamber_temp("O1D") is True
|
||||
# H2C
|
||||
assert supports_chamber_temp("O1C") is True
|
||||
# H2S
|
||||
assert supports_chamber_temp("O1S") is True
|
||||
# H2D Pro
|
||||
assert supports_chamber_temp("O1E") is True
|
||||
# P2S
|
||||
assert supports_chamber_temp("N7") is True
|
||||
|
||||
def test_internal_model_codes_not_supported(self):
|
||||
"""Verify A1/P1 internal codes are NOT supported."""
|
||||
# P1P
|
||||
assert supports_chamber_temp("C11") is False
|
||||
# P1S
|
||||
assert supports_chamber_temp("C12") is False
|
||||
# A1
|
||||
assert supports_chamber_temp("N2S") is False
|
||||
# A1 Mini
|
||||
assert supports_chamber_temp("N1") is False
|
||||
|
||||
|
||||
class TestGetDerivedStatusName:
|
||||
"""Tests for get_derived_status_name function."""
|
||||
|
||||
Reference in New Issue
Block a user