TasmotaManager/console_settings_optimization.md

3.5 KiB

Console Settings Optimization

Issue Description

The issue was related to how console settings were being applied in the TasmotaManager code. The original implementation used a skip_console parameter in the configure_mqtt_settings function to prevent console settings from being applied twice:

  1. Once in configure_mqtt_settings (but skipped with skip_console=True)
  2. Again directly in get_device_details

The question was raised: "I question why the skip_console was needed. Seems like the console settings before thecheck_mqtt_settings should be the one deleted?"

Analysis

After reviewing the code, I found that:

  1. In get_device_details, it calls check_mqtt_settings which calls configure_mqtt_settings with skip_console=True. This prevents configure_mqtt_settings from applying console settings.

  2. Later in get_device_details, console settings are applied directly with a large block of code that duplicates functionality already present in configure_mqtt_settings.

  3. In configure_unknown_device, it calls configure_mqtt_settings without specifying skip_console, so it uses the default value of False. This means console settings are applied when configuring unknown devices.

This approach added unnecessary complexity with the skip_console parameter and made the code less intuitive (why skip in one place and apply in another?).

Changes Made

I implemented the following changes to optimize the code:

  1. Removed the skip_console parameter from the configure_mqtt_settings function signature:

    def configure_mqtt_settings(self, ip, name, mqtt_status=None, is_new_device=False, set_friendly_name=False, enable_mqtt=False, with_retry=False, reboot=False):
    
  2. Updated the condition in configure_mqtt_settings to always apply console settings:

    # Apply console settings
    console_updated = False
    console_params = mqtt_config.get('console', {})
    if console_params:
        self.logger.info(f"{name}: Setting console parameters from configuration")
    
  3. Updated check_mqtt_settings to call configure_mqtt_settings without the skip_console parameter:

    return self.configure_mqtt_settings(
        ip=ip,
        name=name,
        mqtt_status=mqtt_status,
        is_new_device=False,
        set_friendly_name=False,
        enable_mqtt=False,
        with_retry=True,
        reboot=False
    )
    
  4. Removed the console settings application code in get_device_details and replaced it with:

    # Console settings are now applied in configure_mqtt_settings
    console_updated = mqtt_updated
    

Benefits

These changes provide several benefits:

  1. Simplified Code: Removed the skip_console parameter and eliminated duplicate code.

  2. More Intuitive Design: Console settings are now applied in the same place as MQTT settings, making the code more logical and easier to understand.

  3. Reduced Maintenance: With only one place to update console settings logic, future changes will be easier to implement.

  4. Consistent Behavior: Console settings are now applied consistently for both unknown and known devices.

Testing

The changes were tested to ensure that console settings are still applied correctly. The console_updated flag is now set based on the result of the MQTT settings update, which includes console settings application.

This approach maintains all the functionality of the original code while making it more maintainable and easier to understand.