Add detailed reporting when no template match is found
This commit is contained in:
parent
d585f0f284
commit
3e6001568f
@ -678,7 +678,14 @@ class TasmotaDiscovery:
|
|||||||
else:
|
else:
|
||||||
self.logger.error(f"{name}: Failed to update device name")
|
self.logger.error(f"{name}: Failed to update device name")
|
||||||
else:
|
else:
|
||||||
self.logger.debug(f"{name}: No matches found in config_other for device name or template")
|
# No matches found, print detailed information about what's on the device
|
||||||
|
self.logger.info(f"{name}: No matches found in config_other for either Device Name or Template")
|
||||||
|
self.logger.info(f"{name}: Current Device Name on device: '{device_name}'")
|
||||||
|
self.logger.info(f"{name}: Current Template on device: '{current_template}'")
|
||||||
|
print(f"\nNo template match found for device {name} at {ip}")
|
||||||
|
print(f" Device Name on device: '{device_name}'")
|
||||||
|
print(f" Template on device: '{current_template}'")
|
||||||
|
print("Please add an appropriate entry to mqtt.config_other in your configuration file.")
|
||||||
|
|
||||||
return template_updated
|
return template_updated
|
||||||
|
|
||||||
|
|||||||
63
template_no_match_summary.md
Normal file
63
template_no_match_summary.md
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
# Template No Match Tracking and Reporting
|
||||||
|
|
||||||
|
## Issue Description
|
||||||
|
|
||||||
|
When the `check_and_update_template` method couldn't find a match for either the Device Name or Template in the `mqtt.config_other` configuration, it would silently continue without providing any information about what was set on the device. This made it difficult for users to understand why a template wasn't applied and what the current device configuration was.
|
||||||
|
|
||||||
|
## Changes Made
|
||||||
|
|
||||||
|
The `check_and_update_template` method has been enhanced to track and report detailed information when no match is found. Specifically:
|
||||||
|
|
||||||
|
1. Changed the log level from DEBUG to INFO for better visibility in logs
|
||||||
|
2. Added more detailed log messages that include:
|
||||||
|
- A clear message that no matches were found
|
||||||
|
- The current Device Name on the device
|
||||||
|
- The current Template on the device
|
||||||
|
3. Added user-friendly console output using `print()` statements that:
|
||||||
|
- Clearly indicates no template match was found
|
||||||
|
- Shows the device name and IP address
|
||||||
|
- Displays the current Device Name on the device
|
||||||
|
- Displays the current Template on the device
|
||||||
|
- Provides a suggestion to add an appropriate entry to the configuration file
|
||||||
|
|
||||||
|
## Code Changes
|
||||||
|
|
||||||
|
The following changes were made to the `check_and_update_template` method:
|
||||||
|
|
||||||
|
```python
|
||||||
|
# Before
|
||||||
|
else:
|
||||||
|
self.logger.debug(f"{name}: No matches found in config_other for device name or template")
|
||||||
|
|
||||||
|
# After
|
||||||
|
else:
|
||||||
|
# No matches found, print detailed information about what's on the device
|
||||||
|
self.logger.info(f"{name}: No matches found in config_other for either Device Name or Template")
|
||||||
|
self.logger.info(f"{name}: Current Device Name on device: '{device_name}'")
|
||||||
|
self.logger.info(f"{name}: Current Template on device: '{current_template}'")
|
||||||
|
print(f"\nNo template match found for device {name} at {ip}")
|
||||||
|
print(f" Device Name on device: '{device_name}'")
|
||||||
|
print(f" Template on device: '{current_template}'")
|
||||||
|
print("Please add an appropriate entry to mqtt.config_other in your configuration file.")
|
||||||
|
```
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
A test script `test_template_no_match.py` was created to verify the changes. The script:
|
||||||
|
|
||||||
|
1. Gets a test device from current.json
|
||||||
|
2. Temporarily modifies the mqtt.config_other section to ensure no match will be found
|
||||||
|
3. Calls the check_and_update_template method
|
||||||
|
4. Verifies that appropriate messages are printed
|
||||||
|
|
||||||
|
The test confirmed that the method now correctly tracks and reports detailed information when no match is found.
|
||||||
|
|
||||||
|
## Benefits
|
||||||
|
|
||||||
|
These changes provide several benefits:
|
||||||
|
|
||||||
|
1. **Better Visibility**: Users can now see when a template match is not found, rather than the process silently continuing.
|
||||||
|
2. **Detailed Information**: The current Device Name and Template on the device are clearly displayed, making it easier to understand the current configuration.
|
||||||
|
3. **Actionable Guidance**: The message suggests adding an appropriate entry to the configuration file, guiding users on how to resolve the issue.
|
||||||
|
|
||||||
|
This enhancement improves the user experience by providing clear, actionable information when a template match is not found, helping users understand and resolve configuration issues more easily.
|
||||||
88
test_template_no_match.py
Executable file
88
test_template_no_match.py
Executable file
@ -0,0 +1,88 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Test script to verify that appropriate messages are printed when no template match is found.
|
||||||
|
|
||||||
|
This script:
|
||||||
|
1. Gets a test device from current.json
|
||||||
|
2. Temporarily modifies the mqtt.config_other section to ensure no match will be found
|
||||||
|
3. Calls the check_and_update_template method
|
||||||
|
4. Verifies that appropriate messages are printed
|
||||||
|
"""
|
||||||
|
|
||||||
|
import json
|
||||||
|
import logging
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
|
||||||
|
# Configure logging
|
||||||
|
logging.basicConfig(
|
||||||
|
level=logging.INFO,
|
||||||
|
format='%(asctime)s - %(levelname)s - %(message)s',
|
||||||
|
datefmt='%Y-%m-%d %H:%M:%S'
|
||||||
|
)
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
# Import TasmotaManager class
|
||||||
|
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
|
||||||
|
from TasmotaManager import TasmotaDiscovery
|
||||||
|
|
||||||
|
def get_test_device():
|
||||||
|
"""Get a test device from current.json"""
|
||||||
|
try:
|
||||||
|
with open('current.json', 'r') as f:
|
||||||
|
data = json.load(f)
|
||||||
|
devices = data.get('tasmota', {}).get('devices', [])
|
||||||
|
if devices:
|
||||||
|
return devices[0] # Use the first device
|
||||||
|
else:
|
||||||
|
logger.error("No devices found in current.json")
|
||||||
|
return None
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Error reading current.json: {e}")
|
||||||
|
return None
|
||||||
|
|
||||||
|
def main():
|
||||||
|
"""Main test function"""
|
||||||
|
# Get a test device
|
||||||
|
device = get_test_device()
|
||||||
|
if not device:
|
||||||
|
logger.error("No test device available. Run discovery first.")
|
||||||
|
return 1
|
||||||
|
|
||||||
|
device_name = device.get('name')
|
||||||
|
device_ip = device.get('ip')
|
||||||
|
|
||||||
|
logger.info(f"Testing with device: {device_name} (IP: {device_ip})")
|
||||||
|
|
||||||
|
# Create a TasmotaDiscovery instance
|
||||||
|
discovery = TasmotaDiscovery(debug=True)
|
||||||
|
|
||||||
|
# Load the configuration
|
||||||
|
discovery.load_config('network_configuration.json')
|
||||||
|
|
||||||
|
# Temporarily modify the mqtt.config_other section to ensure no match will be found
|
||||||
|
# Save the original config_other
|
||||||
|
original_config_other = discovery.config.get('mqtt', {}).get('config_other', {})
|
||||||
|
|
||||||
|
# Set an empty config_other to ensure no match
|
||||||
|
discovery.config['mqtt']['config_other'] = {
|
||||||
|
"NonExistentDevice": '{"NAME":"Test Device","GPIO":[0,0,0,0,0,0,0,0,0,0,0,0,0],"FLAG":0,"BASE":18}'
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.info("Modified mqtt.config_other to ensure no match will be found")
|
||||||
|
|
||||||
|
# Call the check_and_update_template method
|
||||||
|
logger.info("Calling check_and_update_template method")
|
||||||
|
result = discovery.check_and_update_template(device_ip, device_name)
|
||||||
|
|
||||||
|
# Verify the result
|
||||||
|
logger.info(f"Result of check_and_update_template: {result}")
|
||||||
|
|
||||||
|
# Restore the original config_other
|
||||||
|
discovery.config['mqtt']['config_other'] = original_config_other
|
||||||
|
|
||||||
|
logger.info("Test completed. Check the output above to verify that appropriate messages were printed.")
|
||||||
|
return 0
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
sys.exit(main())
|
||||||
Loading…
Reference in New Issue
Block a user