TasmotaManager/tests/test_rule1_encoding.py
2025-10-28 00:21:08 +00:00

106 lines
3.2 KiB
Python

#!/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()