Переглянути джерело

1:同步json 文件
2:修正get_tmp_extremes的跨膜压差极值的逻辑,22-26改为 26,0.01下限覆盖整个数据集

wmy 2 місяців тому
батько
коміт
8579704862
2 змінених файлів з 46 додано та 37 видалено
  1. 29 27
      device_states.json
  2. 17 10
      loop_main.py

+ 29 - 27
device_states.json

@@ -1,49 +1,51 @@
 {
     "_comment": "此文件用于存储每个设备的运行时状态。时间格式为 YYYY-MM-DD HH:MM:SS",
     "UF1": {
-        "model_prev_L_s": 4400.0,
-        "model_prev_t_bw_s": 82.0,
-        "last_cycle_end_time": "2025-11-11 18:52:17",
+        "model_prev_L_s": 4340.0,
+        "model_prev_t_bw_s": 74.0,
+        "last_cycle_end_time": "2025-11-21 04:32:38",
         "recent_tmp_values": [
-            0.0248,
-            0.0242,
-            0.0235,
-            0.0222
+            0.0222,
+            0.0212,
+            0.0197,
+            0.0205,
+            0.0209
         ]
     },
     "UF2": {
-        "model_prev_L_s": 4340.0,
-        "model_prev_t_bw_s": 78.0,
-        "last_cycle_end_time": "2025-11-11 17:46:22",
+        "model_prev_L_s": 4400.0,
+        "model_prev_t_bw_s": 70.0,
+        "last_cycle_end_time": "2025-11-21 06:40:48",
         "recent_tmp_values": [
-            0.0215,
-            0.0302,
-            0.0225,
-            0.0233,
-            0.0202
+            0.0202,
+            0.0244,
+            0.0183,
+            0.02,
+            0.0248
         ]
     },
     "UF3": {
         "model_prev_L_s": 4340.0,
-        "model_prev_t_bw_s": 78.0,
-        "last_cycle_end_time": "2025-11-13 08:45:14",
+        "model_prev_t_bw_s": 72.0,
+        "last_cycle_end_time": "2025-11-21 09:22:55",
         "recent_tmp_values": [
-            0.0177,
-            0.0204,
-            0.0242,
             0.0229,
-            0.0188
+            0.0188,
+            0.0204,
+            0.0236,
+            0.0263
         ]
     },
     "UF4": {
-        "model_prev_L_s": 4400.0,
-        "model_prev_t_bw_s": 82.0,
-        "last_cycle_end_time": "2025-11-11 05:12:02",
+        "model_prev_L_s": 4340.0,
+        "model_prev_t_bw_s": 76.0,
+        "last_cycle_end_time": "2025-11-19 16:00:13",
         "recent_tmp_values": [
-            0.0211,
-            0.0221,
             0.0235,
-            0.0248
+            0.0248,
+            0.0215,
+            0.0171,
+            0.0185
         ]
     }
 }

+ 17 - 10
loop_main.py

@@ -275,10 +275,10 @@ def get_tmp_extremes(item_name, start_time, end_time, word_control):
             matched_count = 0
             for item in data2["data"]:
                 val = item.get("val")
-                # 兼容字符串和数字类型,支持22-26范围
+                # 兼容字符串和数字类型,只匹配控制字为26的数据
                 try:
                     val_int = int(float(val)) if val is not None else None
-                    if val_int is not None and 22 <= val_int <= 26:
+                    if val_int == 26:
                         time = item.get("htime_at")
                         # 如果在第一次数据中找到了对应的跨膜压差值
                         if time in item_values:
@@ -287,22 +287,29 @@ def get_tmp_extremes(item_name, start_time, end_time, word_control):
                 except (ValueError, TypeError):
                     pass
 
-            logger.info(f"第二次API查询成功,22-26范围内匹配数量:{matched_count}")
+            logger.info(f"第二次API查询成功,控制字为26的匹配数量:{matched_count}")
 
             if control_26_values:
-                logger.info(f"找到控制字为22-26范围的数据点,合并跨膜压差数据")
-                max_val = max(control_26_values)
-                min_val = min(control_26_values)
-                # 增加最小跨膜压差的下限值
-                if min_val < 0.01:
+                logger.info(f"找到控制字为26的数据点,合并跨膜压差数据")
+                # 过滤掉小于 0.01 的异常值
+                valid_values = [v for v in control_26_values if v >= 0.01]
+                
+                if valid_values:
+                    max_val = max(valid_values)
+                    min_val = min(valid_values)
+                    logger.info(f"过滤后有效数据点数量: {len(valid_values)}/{len(control_26_values)}")
+                    logger.info(f"控制字为26时的最大跨膜压差值={max_val},最小跨膜压差值={min_val}")
+                else:
+                    # 如果所有值都小于 0.01,使用 0.01 作为保护值
+                    max_val = 0.01
                     min_val = 0.01
-                logger.info(f"控制字为22-26时的最大跨膜压差值={max_val},最小跨膜压差值={min_val}")
+                    logger.warning(f"所有数据点均小于0.01,使用保护值0.01 (原始数据点数量: {len(control_26_values)})")
 
         if max_val is not None and min_val is not None:
             logger.info(f"API查询成功 最大跨膜压差值={max_val} 最小跨膜压差值={min_val}")
             return max_val, min_val
         else:
-            logger.warning(f"未找到有效的控制字为22-26时的跨膜压差数据 (跨膜压差数据点:{len(item_values)}, 控制字数据点:{control_data_count if 'control_data_count' in locals() else 0}, 匹配数量:{matched_count if 'matched_count' in locals() else 0})")
+            logger.warning(f"未找到有效的控制字为26时的跨膜压差数据 (跨膜压差数据点:{len(item_values)}, 控制字数据点:{len(data2.get('data', []))}, 匹配数量:{matched_count if 'matched_count' in locals() else 0})")
             return None, None
             
     except requests.exceptions.RequestException as e: