diff --git a/bot_listener.py b/bot_listener.py index 1f755f13..3ba8f9ea 100644 --- a/bot_listener.py +++ b/bot_listener.py @@ -73,19 +73,31 @@ def analyze_weather_trend(weather_data, temp_symbol): if curr_temp is not None and forecast_high is not None: diff = forecast_high - curr_temp - # 1. 气温节奏判定 - if local_hour >= 17: - if curr_temp >= forecast_high - 0.5: - insights.append(f"✅ 今日峰值已达:当前已触及预报最高,大概率已定格。") + # 1. 气温节奏判定 (动态参考峰值时刻) + last_peak_h = int(peak_hours[-1].split(":")[0]) if peak_hours else 15 + first_peak_h = int(peak_hours[0].split(":")[0]) if peak_hours else 13 + + if local_hour > last_peak_h: + # 已经过了预报的峰值时段 + if curr_temp >= forecast_high - 0.5 or (max_so_far and max_so_far >= forecast_high - 0.5): + insights.append(f"✅ 今日峰值已过:气温已触及或接近预报最高,目前处于高位波动或缓慢回落。") else: - insights.append(f"📉 处于降温期:气温已跌落峰值,今日反弹乏力。") - elif 10 <= local_hour < 17: + insights.append(f"📉 处于降温期:已过预报峰值时段,且当前气温乏力,冲击高点概率降低。") + elif first_peak_h <= local_hour <= last_peak_h: + # 正在峰值窗口内 + if diff <= 0.8: + insights.append(f"⚖️ 高位横盘:正处于预测峰值时段,气温将在当前水平小幅波动。") + else: + insights.append(f"⏳ 峰值窗口中:虽在预报高点时段,但目前仍有差距,紧盯最后冲刺。") + elif local_hour < first_peak_h: + # 还没到峰值窗口 if diff > 1.2: - insights.append(f"📈 升温进程中:距离峰值还有约 {diff:.1f}° 空间,正向高点冲击。") + insights.append(f"📈 升温进程中:距离峰值时段还有 {first_peak_h - local_hour}h,正向高点冲击。") else: - insights.append(f"⚖️ 高位横盘:气温已在高位,将在当前水平小幅波动。") + insights.append(f"🌅 临近峰值:即将进入高点时段,气温已处于预报高位。") else: - insights.append(f"🌅 早间爬升:气温正快速起步,等待午后冲击。") + # 回退逻辑 + insights.append(f"🌌 夜间/早间:等待日出后的新一轮波动。") # 2. 湿度与露点带来的“粘性”分析 humidity = metar.get("current", {}).get("humidity") @@ -103,9 +115,9 @@ def analyze_weather_trend(weather_data, temp_symbol): elif wind_speed >= 10: insights.append(f"🍃 清劲风:空气流动快,虽然有助于散热,但可能伴随阵风引起微小波动。") - # 4. 云层遮挡分析 (对午后增温影响巨大) + # 4. 云层遮挡分析 (仅在升温期/峰值期有意义) clouds = metar.get("current", {}).get("clouds", []) - if clouds and 10 <= local_hour <= 16: + if clouds and local_hour <= last_peak_h + 1: # 取覆盖范围最大的云层 main_cloud = clouds[-1] # METAR 通常按高度由低到高排列,最后一层往往代表主要云量 cover = main_cloud.get("cover", "")