From 73acc411455b349b38df71074bc6b1f51578617f Mon Sep 17 00:00:00 2001 From: Mike Geppert Date: Sun, 4 Jan 2026 22:30:43 -0600 Subject: [PATCH] Fix SetOption verification to handle ON/OFF vs 1/0 responses - Tasmota returns 'ON'/'OFF' for SetOption queries - Config file uses '1'/'0' for SetOption values - Added normalize_value() to convert both formats to comparable values - Eliminates false verification warnings for correctly applied settings --- console_settings.py | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/console_settings.py b/console_settings.py index 8204881..8f2b6a1 100644 --- a/console_settings.py +++ b/console_settings.py @@ -206,40 +206,50 @@ class ConsoleSettingsManager: time.sleep(0.3) # Brief delay between commands return True - def _verify_command(self, device_ip: str, device_name: str, + def _verify_command(self, device_ip: str, device_name: str, param_name: str, expected_value: str) -> bool: """ Verify a command was applied (where possible). - + Args: device_ip: Device IP address device_name: Device name for logging param_name: Parameter name expected_value: Expected value - + Returns: bool: True if verified or verification not possible """ # Only verify certain parameters verifiable = ['PowerOnState', 'SetOption'] - + if not any(param_name.startswith(v) for v in verifiable): return True # Can't verify, assume success - + # Get current value result, success = send_tasmota_command( device_ip, param_name, timeout=5, logger=self.logger ) - + if not success or not result: return True # Can't verify, assume success - + # Check if value matches - current_value = result.get(param_name, '') - - if str(current_value) == str(expected_value): + current_value = str(result.get(param_name, '')) + expected = str(expected_value) + + # Normalize values for comparison (Tasmota returns ON/OFF for 1/0) + def normalize_value(val: str) -> str: + val_lower = val.lower() + if val_lower in ['on', '1', 'true']: + return '1' + elif val_lower in ['off', '0', 'false']: + return '0' + return val_lower + + if normalize_value(current_value) == normalize_value(expected): return True - + return False def print_failure_summary(self):