added AMS hex color trimming

This commit is contained in:
RNL
2026-02-24 21:33:43 +11:00
parent b1858a9129
commit d513f951dd
2 changed files with 7 additions and 4 deletions

View File

@@ -332,7 +332,6 @@ class Command(BaseCommand):
color_code = strip_color_padding(mqtt_color) color_code = strip_color_padding(mqtt_color)
color_hex = f"#{color_code}" if color_code else None color_hex = f"#{color_code}" if color_code else None
color_name = mqtt_color
filament_color = match_filament_color( filament_color = match_filament_color(
filament_type=type_val, filament_type=type_val,
filament_sub_type=sub_type, filament_sub_type=sub_type,
@@ -345,7 +344,7 @@ class Command(BaseCommand):
if self.verbose: if self.verbose:
logger.info(f"Matched color from database: {color_name} (#{color_code})") logger.info(f"Matched color from database: {color_name} (#{color_code})")
else: else:
color_name = mqtt_color color_name = color_hex or mqtt_color
if self.verbose: if self.verbose:
logger.warning( logger.warning(
f"No color match in database for {type_val} {sub_type} #{color_code}. " f"No color match in database for {type_val} {sub_type} #{color_code}. "

View File

@@ -2,6 +2,10 @@
Utility functions for filament color matching Utility functions for filament color matching
""" """
# BambuLab AMS reports colors as 8-char hex with an alpha channel suffix (e.g. '489FDFFF').
# The last two chars are always 'FF' (fully opaque). Only the first 6 chars are the RGB value.
MQTT_COLOR_HEX_LENGTH = 6
def strip_color_padding(mqtt_color): def strip_color_padding(mqtt_color):
""" """
@@ -12,8 +16,8 @@ def strip_color_padding(mqtt_color):
if not mqtt_color: if not mqtt_color:
return None return None
if len(mqtt_color) == 8: if len(mqtt_color) == 8:
return mqtt_color[:6].upper() return mqtt_color[:MQTT_COLOR_HEX_LENGTH].upper()
return mqtt_color[:6].upper() if len(mqtt_color) >= 6 else mqtt_color.upper() return mqtt_color[:MQTT_COLOR_HEX_LENGTH].upper() if len(mqtt_color) >= MQTT_COLOR_HEX_LENGTH else mqtt_color.upper()
def match_filament_color(filament_type, filament_sub_type, color_code, brand='Bambu Lab'): def match_filament_color(filament_type, filament_sub_type, color_code, brand='Bambu Lab'):