102 lines
4.1 KiB
Markdown
102 lines
4.1 KiB
Markdown
# Console Duplicate and Template Matching Fix Summary
|
|
|
|
## Issues Addressed
|
|
|
|
1. **Duplicate Console Settings**: Console settings were being applied twice during device configuration.
|
|
2. **Template Matching Failure**: The template matching algorithm was not handling the response format correctly, causing the config_other settings to not be applied.
|
|
|
|
## Changes Made
|
|
|
|
### 1. Fix for Duplicate Console Settings
|
|
|
|
The console settings were being applied in two places:
|
|
|
|
1. In `configure_mqtt_settings()` called from `check_mqtt_settings()`
|
|
2. Directly in `get_device_details()`
|
|
|
|
To fix this issue:
|
|
|
|
1. Added a `skip_console` parameter to `configure_mqtt_settings()`:
|
|
```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, skip_console=False):
|
|
```
|
|
|
|
2. Modified the function to skip console settings if `skip_console` is True:
|
|
```python
|
|
# Apply console settings
|
|
console_updated = False
|
|
console_params = mqtt_config.get('console', {})
|
|
if console_params and not skip_console:
|
|
# Console settings application code...
|
|
```
|
|
|
|
3. Updated `check_mqtt_settings()` to pass `skip_console=True`:
|
|
```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,
|
|
skip_console=True # Skip console settings here as they'll be applied separately
|
|
)
|
|
```
|
|
|
|
This ensures that console settings are only applied once, directly in `get_device_details()`.
|
|
|
|
### 2. Fix for Template Matching Failure
|
|
|
|
The template matching algorithm was not handling the response format correctly. The function expected a "Template" key in the response, but the actual response had a different structure.
|
|
|
|
To fix this issue:
|
|
|
|
1. Added logging of the actual response format for debugging:
|
|
```python
|
|
self.logger.debug(f"{name}: Template response: {template_data}")
|
|
```
|
|
|
|
2. Enhanced the template extraction logic to handle different response formats:
|
|
```python
|
|
# Extract current template - handle different response formats
|
|
current_template = ""
|
|
|
|
# Try different possible response formats
|
|
if "Template" in template_data:
|
|
current_template = template_data.get("Template", "")
|
|
elif isinstance(template_data, dict) and len(template_data) > 0:
|
|
# If there's no "Template" key but we have a dict, try to get the first value
|
|
# This handles cases where the response might be {"NAME":"...","GPIO":[...]}
|
|
first_key = next(iter(template_data))
|
|
if isinstance(template_data[first_key], str) and "{" in template_data[first_key]:
|
|
current_template = template_data[first_key]
|
|
self.logger.debug(f"{name}: Found template in alternate format under key: {first_key}")
|
|
# Handle the case where the template is returned as a dict with NAME, GPIO, FLAG, BASE keys
|
|
elif all(key in template_data for key in ['NAME', 'GPIO', 'FLAG', 'BASE']):
|
|
# Convert the dict to a JSON string to match the expected format
|
|
import json
|
|
current_template = json.dumps(template_data)
|
|
self.logger.debug(f"{name}: Found template in dict format with NAME, GPIO, FLAG, BASE keys")
|
|
```
|
|
|
|
This allows the function to handle the specific response format with 'NAME', 'GPIO', 'FLAG', and 'BASE' keys, which is what the OfficeLight device returns.
|
|
|
|
## Testing and Verification
|
|
|
|
The changes were tested with the OfficeLight device and both issues were resolved:
|
|
|
|
1. Console settings are now only applied once
|
|
2. Template matching is working correctly and updating the template as needed
|
|
|
|
The TasmotaDevices.json file confirms that the template was successfully updated, with `"template_status": "Updated"`.
|
|
|
|
## Conclusion
|
|
|
|
These changes optimize the device configuration process by:
|
|
|
|
1. Eliminating duplicate application of console settings
|
|
2. Improving the template matching algorithm to handle different response formats
|
|
|
|
This ensures that all configuration steps (MQTT, config_other, and console) are applied correctly and efficiently. |