fix: filter MGM -9999 sentinel values and skip display for missing data
This commit is contained in:
+13
-2
@@ -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 = []
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user