#!/usr/bin/env python3 import requests import urllib.parse import time import logging # 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__) # Device to test - use the same device from test_rule1_device_mode.py DEVICE_IP = "192.168.8.35" # Rule1 value from network_configuration.json RULE1_VALUE = "on button1#state=10 do power0 toggle endon" def check_rule1(): """Check the current rule1 setting on the device""" url = f"http://{DEVICE_IP}/cm?cmnd=rule1" logger.info(f"Checking rule1: {url}") response = requests.get(url, timeout=5) if response.status_code == 200: logger.info(f"Rule1 response: {response.text}") return response.text else: logger.error(f"Failed to get rule1: HTTP {response.status_code}") return None def set_rule1_with_encoding(): """Set rule1 with proper URL encoding""" # URL encode the rule value encoded_value = urllib.parse.quote(RULE1_VALUE) url = f"http://{DEVICE_IP}/cm?cmnd=rule1%20{encoded_value}" logger.info(f"Setting rule1 with encoding: {url}") response = requests.get(url, timeout=5) if response.status_code == 200: logger.info(f"Set rule1 response: {response.text}") return True else: logger.error(f"Failed to set rule1: HTTP {response.status_code}") return False def enable_rule1(): """Enable rule1""" url = f"http://{DEVICE_IP}/cm?cmnd=Rule1%201" logger.info(f"Enabling rule1: {url}") response = requests.get(url, timeout=5) if response.status_code == 200: logger.info(f"Enable rule1 response: {response.text}") return True else: logger.error(f"Failed to enable rule1: HTTP {response.status_code}") return False def main(): # Check current rule1 logger.info("Checking current rule1") current_rule1 = check_rule1() # Set rule1 with proper URL encoding logger.info("Setting rule1 with proper URL encoding") success = set_rule1_with_encoding() if not success: logger.error("Failed to set rule1") return 1 # Wait for the command to take effect logger.info("Waiting for command to take effect...") time.sleep(2) # Check rule1 after setting logger.info("Checking rule1 after setting") after_set_rule1 = check_rule1() # Enable rule1 logger.info("Enabling rule1") success = enable_rule1() if not success: logger.error("Failed to enable rule1") return 1 # Wait for the command to take effect logger.info("Waiting for command to take effect...") time.sleep(2) # Check rule1 after enabling logger.info("Checking rule1 after enabling") after_enable_rule1 = check_rule1() # Compare with expected value if RULE1_VALUE in after_enable_rule1: logger.info("SUCCESS: rule1 was correctly set!") return 0 else: logger.error(f"FAILURE: rule1 was not set correctly!") logger.error(f" Expected: {RULE1_VALUE}") logger.error(f" Actual: {after_enable_rule1}") return 1 if __name__ == "__main__": main()