106 lines
3.2 KiB
Python
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() |