78 lines
3.5 KiB
Markdown
78 lines
3.5 KiB
Markdown
# 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:
|
|
```python
|
|
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:
|
|
```python
|
|
# 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:
|
|
```python
|
|
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:
|
|
```python
|
|
# 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. |