#!/usr/bin/env python3 """ 测试新创建的实验状态变化 """ import sqlite3 import json from pathlib import Path from influxdb_client import InfluxDBClient, Point from influxdb_client.client.write_api import SYNCHRONOUS import datetime import time def check_experiment_status(exp_id): """检查实验状态""" try: db_path = Path(__file__).parent / "experiments.db" db = sqlite3.connect(str(db_path)) cur = db.cursor() cur.execute(""" SELECT id, work_order_no, start_ts, end_ts, created_at FROM experiments WHERE id = ? """, (exp_id,)) result = cur.fetchone() if result: exp_id_db, work_order, start_ts, end_ts, created_at = result print(f"实验 {exp_id_db} (工单: {work_order}):") print(f" 创建时间: {created_at}") print(f" 开始时间: {start_ts or '未开始'}") print(f" 结束时间: {end_ts or '未结束'}") if start_ts and end_ts: status = "已完成" elif start_ts: status = "进行中" else: status = "等待开始" print(f" 状态: {status}") return status db.close() except Exception as e: print(f"ERROR 检查状态失败: {e}") return None def write_status_change(status_value, description): """写入状态变化""" try: # 加载配置 with open("default.json", 'r', encoding='utf-8') as f: config = json.load(f) influx_config = config.get('influx', {}) client = InfluxDBClient( url=influx_config.get('url', 'http://127.0.0.1:8086'), token=influx_config.get('token', ''), org=influx_config.get('org', 'MEASCON') ) write_api = client.write_api(write_options=SYNCHRONOUS) measurement = influx_config.get('measurement', 'PCM_Measurement') bucket = influx_config.get('bucket', 'PCM') point = Point(measurement) \ .tag("data_type", "Breaker") \ .field("load_status", str(status_value)) \ .time(datetime.datetime.now(datetime.timezone.utc)) write_api.write(bucket=bucket, record=point) print(f"OK {description}: load_status = {status_value}") client.close() except Exception as e: print(f"ERROR 写入失败: {e}") def main(): print("测试新实验状态变化") print("=" * 50) exp_id = 148 # 刚创建的实验ID print("步骤1: 检查初始状态") print("-" * 30) initial_status = check_experiment_status(exp_id) if initial_status != "等待开始": print(f"WARNING 初始状态不是'等待开始',而是'{initial_status}'") print("\n步骤2: 写入实验开始状态") print("-" * 30) write_status_change("1", "写入开始状态") print("等待10秒让监控器检测...") time.sleep(10) print("\n步骤3: 检查开始后状态") print("-" * 30) start_status = check_experiment_status(exp_id) print("\n步骤4: 写入实验结束状态") print("-" * 30) write_status_change("0", "写入结束状态") print("等待10秒让监控器检测...") time.sleep(10) print("\n步骤5: 检查最终状态") print("-" * 30) final_status = check_experiment_status(exp_id) print("\n" + "=" * 50) print("测试结果总结:") print(f"初始状态: {initial_status}") print(f"开始后状态: {start_status}") print(f"最终状态: {final_status}") if final_status == "已完成": print("SUCCESS 测试成功!实验状态正确更新") else: print("ERROR 测试失败!实验状态未正确更新") print("可能原因:") print("1. 监控器未运行") print("2. 监控器配置错误") print("3. UI刷新问题") if __name__ == "__main__": main()