From ba352feb34956544f5509fda6953921e3e828e08 Mon Sep 17 00:00:00 2001 From: "2569718930@qq.com" <2569718930@qq.com> Date: Sun, 10 May 2026 18:18:40 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A6=96=E5=B0=94/=E9=87=9C=E5=B1=B1=E6=9C=BA?= =?UTF-8?q?=E5=9C=BA=E6=8A=A5=E6=96=87=E4=BC=98=E5=85=88=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=20AMOS=EF=BC=88=E6=9B=B4=E6=96=B0=E6=9B=B4=E5=BF=AB=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - analysis_service.py:AMOS 数据覆盖 airport_current 的 raw_metar、wind、pressure - source_label 设为 "AMOS"(区别于 aviationweather.gov METAR) - stale_for_today 强制 false(AMOS 数据本身证明了时效性) - observation_time 优先使用 AMOS 时间戳 - AI 读取的 city_snapshot.current.raw_metar 来自 AMOS 跑道传感器 优先级:AMOS raw_metar > aviationweather.gov METAR(首尔/釜山) Reason: AMOS 直连韩国机场系统,延迟更低,更新更快 --- web/analysis_service.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/web/analysis_service.py b/web/analysis_service.py index d2f67ff3..0769d9a3 100644 --- a/web/analysis_service.py +++ b/web/analysis_service.py @@ -1819,6 +1819,10 @@ def _analyze( ) except Exception: obs_time_str = str(obs_t)[:16] + if not obs_time_str and current_source == "amos": + amos_obs_time = amos_data.get("observation_time") + if amos_obs_time: + obs_time_str = _format_observation_time_local(amos_obs_time, int(utc_offset or 0)) if not obs_time_str and current_source == "nmc": nmc_fallback = _fetch_nmc_current_fallback(city, use_fahrenheit=is_f) obs_time_str = _format_observation_time_local( @@ -2458,15 +2462,15 @@ def _analyze( "report_time": metar.get("report_time") if metar else None, "receipt_time": metar.get("receipt_time") if metar else None, "obs_time_epoch": metar.get("obs_time_epoch") if metar else None, - "wind_speed_kt": _sf(live_mc.get("wind_speed_kt")), + "wind_speed_kt": _sf(amos_data.get("wind_kt")) if current_source == "amos" else _sf(live_mc.get("wind_speed_kt")), "wind_dir": _sf(live_mc.get("wind_dir")), "humidity": _sf(live_mc.get("humidity")), "cloud_desc": metar.get("cloud_desc") if metar else None, "visibility_mi": _sf(live_mc.get("visibility_mi")), "wx_desc": live_mc.get("wx_desc"), - "raw_metar": live_mc.get("raw_metar"), - "source_label": "METAR", - "stale_for_today": bool(metar) and not metar_current_is_today, + "raw_metar": amos_data.get("raw_metar") if current_source == "amos" else live_mc.get("raw_metar"), + "source_label": "AMOS" if current_source == "amos" else "METAR", + "stale_for_today": False if current_source == "amos" else (bool(metar) and not metar_current_is_today), "last_observation_local_date": metar.get("observation_local_date") if metar else None, "current_local_date": local_date_str, },