smart-home/test_433mhz.py
2026-02-26 09:16:34 +08:00

147 lines
4.5 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
433MHz模块测试脚本
用于测试ESP32上的RTM300-433M模块功能
"""
import requests
import time
import json
import sys
import argparse
# 默认设备IP地址
DEFAULT_DEVICE_IP = "192.168.1.3"
def get_status(device_ip):
"""获取433MHz模块状态"""
url = f"http://{device_ip}/api/rf433/status"
try:
response = requests.get(url, timeout=5)
if response.status_code == 200:
return response.json()
else:
print(f"错误: 状态码 {response.status_code}")
return None
except Exception as e:
print(f"请求失败: {e}")
return None
def send_data(device_ip, hex_data):
"""发送433MHz数据"""
url = f"http://{device_ip}/api/rf433/send"
payload = {
"data": hex_data
}
try:
response = requests.post(url, json=payload, timeout=5)
if response.status_code == 200:
return response.json()
else:
print(f"错误: 状态码 {response.status_code}")
return None
except Exception as e:
print(f"请求失败: {e}")
return None
def enable_receive(device_ip, enable=True):
"""启用/禁用接收模式"""
url = f"http://{device_ip}/api/rf433/receive"
payload = {
"enable": enable
}
try:
response = requests.post(url, json=payload, timeout=5)
if response.status_code == 200:
return response.json()
else:
print(f"错误: 状态码 {response.status_code}")
return None
except Exception as e:
print(f"请求失败: {e}")
return None
def read_register(device_ip, reg_addr):
"""读取寄存器值"""
url = f"http://{device_ip}/api/rf433/register?addr={reg_addr}"
try:
response = requests.get(url, timeout=5)
if response.status_code == 200:
return response.json()
else:
print(f"错误: 状态码 {response.status_code}")
return None
except Exception as e:
print(f"请求失败: {e}")
return None
def test_basic_functions(device_ip):
"""测试基本功能"""
print("===== 433MHz模块基本功能测试 =====")
# 测试1: 获取模块状态
print("\n[测试1] 获取模块状态...")
status = get_status(device_ip)
if status:
print(f"模块状态: {json.dumps(status, indent=2, ensure_ascii=False)}")
if status.get("ready", False):
print("✅ 模块就绪")
else:
print("❌ 模块未就绪")
else:
print("❌ 获取状态失败")
return False
# 测试2: 发送数据
print("\n[测试2] 发送测试数据...")
test_data = "A55A01020304" # 测试数据: 0xA5 0x5A 0x01 0x02 0x03 0x04
send_result = send_data(device_ip, test_data)
if send_result:
print(f"发送结果: {json.dumps(send_result, indent=2, ensure_ascii=False)}")
if send_result.get("success", False):
print(f"✅ 数据发送成功: {test_data}")
else:
print(f"❌ 数据发送失败: {test_data}")
else:
print("❌ 发送请求失败")
# 测试3: 启用接收模式
print("\n[测试3] 启用接收模式...")
receive_result = enable_receive(device_ip, True)
if receive_result:
print(f"接收模式设置结果: {json.dumps(receive_result, indent=2, ensure_ascii=False)}")
if receive_result.get("success", False):
print("✅ 接收模式启用成功")
else:
print("❌ 接收模式启用失败")
else:
print("❌ 设置接收模式请求失败")
# 测试4: 读取寄存器
print("\n[测试4] 读取寄存器值...")
reg_addr = 0x00 # 控制寄存器
reg_result = read_register(device_ip, reg_addr)
if reg_result:
print(f"寄存器0x{reg_addr:02X}值: {json.dumps(reg_result, indent=2, ensure_ascii=False)}")
if "value" in reg_result:
print(f"✅ 寄存器值: 0x{reg_result['value']:02X}")
else:
print("❌ 读取寄存器失败")
else:
print("❌ 读取寄存器请求失败")
print("\n===== 测试完成 =====")
return True
def main():
parser = argparse.ArgumentParser(description='433MHz模块测试工具')
parser.add_argument('--ip', default=DEFAULT_DEVICE_IP, help='ESP32设备IP地址')
args = parser.parse_args()
print(f"使用设备IP: {args.ip}")
test_basic_functions(args.ip)
if __name__ == "__main__":
main()