From 70e0b038e634610555f95cbfe22baf237b1d09c3 Mon Sep 17 00:00:00 2001 From: Mike Geppert Date: Wed, 7 Jan 2026 20:30:53 -0600 Subject: [PATCH] Fix device matching to check template NAME field - DeviceName comes from template's NAME field (e.g., 'Treatlife SS02') - Config keys use different names (e.g., 'TreatLife_SW_SS02S') - Now falls back to checking template NAME if key doesn't match - Fixes issue where devices with template-based names weren't getting console settings - Both console_settings and device_diff use same matching logic --- console_settings.py | 18 ++++++++++++++++-- device_diff.py | 17 ++++++++++++++++- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/console_settings.py b/console_settings.py index 376da2d..bcb8e34 100644 --- a/console_settings.py +++ b/console_settings.py @@ -97,16 +97,30 @@ class ConsoleSettingsManager: """ device_list = self.config.get('device_list', {}) - # First try exact match + # First try exact match on key if device_type in device_list: return device_list[device_type].get('console_set') - # Then try case-insensitive match + # Then try case-insensitive match on key device_type_lower = device_type.lower() for template_name, template_data in device_list.items(): if template_name.lower() == device_type_lower: return template_data.get('console_set') + # Finally, try matching against the template NAME field + # DeviceName comes from the template's NAME field + import json + for template_name, template_data in device_list.items(): + template_str = template_data.get('template', '') + if template_str: + try: + template_obj = json.loads(template_str) + template_device_name = template_obj.get('NAME', '') + if template_device_name.lower() == device_type_lower: + return template_data.get('console_set') + except json.JSONDecodeError: + continue + return None def _get_console_commands(self, console_set_name: str) -> List[str]: diff --git a/device_diff.py b/device_diff.py index efa7237..872774d 100644 --- a/device_diff.py +++ b/device_diff.py @@ -118,13 +118,28 @@ class DeviceComparison: if device_type in device_list: console_set_name = device_list[device_type].get('console_set') else: - # Try case-insensitive match + # Try case-insensitive match on key device_type_lower = device_type.lower() for template_name, template_data in device_list.items(): if template_name.lower() == device_type_lower: console_set_name = template_data.get('console_set') break + # If still not found, try matching against template NAME field + if not console_set_name: + import json + for template_name, template_data in device_list.items(): + template_str = template_data.get('template', '') + if template_str: + try: + template_obj = json.loads(template_str) + template_device_name = template_obj.get('NAME', '') + if template_device_name.lower() == device_type_lower: + console_set_name = template_data.get('console_set') + break + except json.JSONDecodeError: + continue + if not console_set_name: self.logger.warning(f"No console_set found for device type: {device_type}") return expected