diff --git a/TasmotaManager.py b/TasmotaManager.py index a564774..d8ec9ad 100755 --- a/TasmotaManager.py +++ b/TasmotaManager.py @@ -542,6 +542,7 @@ class TasmotaDiscovery: # Initialize the UniFi hostname bug flag unifi_hostname_bug_detected = False + device_reported_hostname = None # Check if device name or hostname matches unknown patterns unifi_name_matches_unknown = ( @@ -579,6 +580,10 @@ class TasmotaDiscovery: unifi_hostname_bug_detected = True self.logger.info(f"UniFi OS hostname bug detected for {device_name}: self-reported hostname '{device_reported_hostname}' doesn't match unknown patterns") + # If bug detected and we have the device-reported hostname, log it but keep UniFi fields for listing + if unifi_hostname_bug_detected and device_reported_hostname: + self.logger.info(f"UniFi bug detected: will prefer self-reported hostname '{device_reported_hostname}' during processing; keeping UniFi listing name '{device_name}'") + device_info = { "name": device_name, "ip": device_ip, @@ -1948,6 +1953,7 @@ class TasmotaDiscovery: # Check if device is in unknown_device_patterns unknown_patterns = target_network.get('unknown_device_patterns', []) is_unknown = False + device_reported_hostname = None # Initialize variables for hostname bug detection unifi_name_matches_unknown = False @@ -2020,6 +2026,12 @@ class TasmotaDiscovery: unifi_hostname_bug_detected = (unifi_name_matches_unknown and not is_unknown and not device_hostname_matches_unknown) + # If bug detected and we have the device-reported hostname, prefer it going forward + if unifi_hostname_bug_detected and device_reported_hostname: + self.logger.info(f"Using device self-reported hostname '{device_reported_hostname}' instead of UniFi '{device_name}' for IP {device_ip}") + device_name = device_reported_hostname + device_hostname = device_reported_hostname + device_info = { "name": device_name, "ip": device_ip, @@ -2237,12 +2249,18 @@ class TasmotaDiscovery: url_mqtt = f"http://{ip}/cm?cmnd=Status%206" response = requests.get(url_mqtt, timeout=5) mqtt_data = response.json() + + # Decide the effective name to use for operations/logs + op_name = name + if device.get('unifi_hostname_bug_detected') and hostname_success and hostname: + op_name = hostname + self.logger.info(f"Using device self-reported hostname '{op_name}' for operations instead of UniFi name '{name}' (IP: {ip})") # Check and update MQTT settings if needed - mqtt_updated = check_mqtt_settings(ip, name, mqtt_data) + mqtt_updated = check_mqtt_settings(ip, op_name, mqtt_data) # Check and update template (config_other) if needed - template_updated = self.apply_config_other(ip, name) + template_updated = self.apply_config_other(ip, op_name) # Console settings are now applied in configure_mqtt_settings console_updated = mqtt_updated