fix: filter MGM -9999 sentinel values and skip display for missing data

This commit is contained in:
2569718930@qq.com
2026-02-27 18:55:39 +08:00
parent d1a17fabb4
commit fdb6d88697
2 changed files with 28 additions and 12 deletions
+13 -2
View File
@@ -584,13 +584,24 @@ def start_bot():
m_c = mgm.get("current", {})
# 翻译风向
wind_dir = m_c.get("wind_dir")
wind_speed_ms = m_c.get("wind_speed_ms")
dir_str = ""
if wind_dir is not None:
dirs = ["", "东北", "", "东南", "", "西南", "西", "西北"]
dir_str = dirs[int((float(wind_dir) + 22.5) % 360 / 45)] + ""
msg_lines.append(f" [MGM] 🌡️ 体感: {m_c.get('feels_like')}°C | 💧 {m_c.get('humidity')}%")
msg_lines.append(f" [MGM] 🌬️ {dir_str}{wind_dir}° ({m_c.get('wind_speed_ms')} m/s) | 💧 降水: {m_c.get('rain_24h') or 0}mm")
# 体感和湿度(跳过缺失数据)
feels_like = m_c.get("feels_like")
humidity = m_c.get("humidity")
if feels_like is not None or humidity is not None:
parts = []
if feels_like is not None: parts.append(f"🌡️ 体感: {feels_like}°C")
if humidity is not None: parts.append(f"💧 {humidity}%")
msg_lines.append(f" [MGM] {' | '.join(parts)}")
# 风况(跳过缺失数据)
if wind_dir is not None and wind_speed_ms is not None:
msg_lines.append(f" [MGM] 🌬️ {dir_str}{wind_dir}° ({wind_speed_ms} m/s) | 💧 降水: {m_c.get('rain_24h') or 0}mm")
# 新增:气压和云量
extra_parts = []
+15 -10
View File
@@ -373,18 +373,23 @@ class WeatherDataCollector:
# MGM 数据字段映射
# ruzgarHiz 实测为 km/h,转为 m/s 需要除以 3.6
ruz_hiz_kmh = latest.get("ruzgarHiz", 0)
# MGM 返回 -9999 表示数据缺失,需要过滤
def _valid(v):
return v is not None and v > -9000
results["current"] = {
"temp": latest.get("sicaklik"),
"feels_like": latest.get("hissedilenSicaklik") or latest.get("sicaklik"),
"humidity": latest.get("nem"),
"wind_speed_ms": round(ruz_hiz_kmh / 3.6, 1) if ruz_hiz_kmh is not None else None,
"wind_speed_kt": round(ruz_hiz_kmh / 1.852, 1) if ruz_hiz_kmh is not None else None,
"wind_dir": latest.get("ruzgarYon"),
"rain_24h": latest.get("toplamYagis"),
"pressure": latest.get("aktuelBasinc"),
"temp": latest.get("sicaklik") if _valid(latest.get("sicaklik")) else None,
"feels_like": latest.get("hissedilenSicaklik") if _valid(latest.get("hissedilenSicaklik")) else None,
"humidity": latest.get("nem") if _valid(latest.get("nem")) else None,
"wind_speed_ms": round(ruz_hiz_kmh / 3.6, 1) if _valid(ruz_hiz_kmh) else None,
"wind_speed_kt": round(ruz_hiz_kmh / 1.852, 1) if _valid(ruz_hiz_kmh) else None,
"wind_dir": latest.get("ruzgarYon") if _valid(latest.get("ruzgarYon")) else None,
"rain_24h": latest.get("toplamYagis") if _valid(latest.get("toplamYagis")) else None,
"pressure": latest.get("aktuelBasinc") if _valid(latest.get("aktuelBasinc")) else None,
"cloud_cover": latest.get("kapalilik"), # 0-8 八分位云量
"mgm_max_temp": latest.get("maxSicaklik"), # MGM 官方实测最高温
"time": latest.get("veriZamani"), # 观测时间
"mgm_max_temp": latest.get("maxSicaklik") if _valid(latest.get("maxSicaklik")) else None,
"time": latest.get("veriZamani"),
"station_name": latest.get("istasyonAd") or latest.get("adi") or latest.get("merkezAd") or "Ankara Esenboğa"
}