环境
WeatherKit:当前 main / Rewrite 模块(weatherkit.pages.dev)
iOS:26.1(Build 23B85)
Shadowrocket:3378
数据源:ColorfulClouds
相关问题:WeatherKit 无法添加 1 小时降雨数据 #79
问题描述
在确实正在降雨、且彩云分钟级接口未来 60 分钟全部返回非零降水的情况下,Apple 天气仍不显示 forecastNextHour(未来一小时降水强度)卡片。
进一步检查发现,问题并非彩云没有分钟数据,而是 ForecastNextHour 的降水类型识别和轻雨强度缩放会把有效微雨转换为 Apple 天气不可见的数据。
可复现数据
测试位置:山西省大同市原南郊区附近(约 40.00347, 113.14041)
测试时间:2026-08-02 00:08(UTC+8)
彩云返回的关键数据:
{
"realtime" : {
"temperature" : 23.65 ,
"skycon" : " LIGHT_RAIN"
},
"minutely" : {
"status" : " ok" ,
"description" : " 未来2小时有降水" ,
"probability" : [30 , 30 , 30 , 30 ],
"count" : 120 ,
"nonzero_first_60" : 60 ,
"max_first_60" : 0.3869
}
}
Apple 天气页面同时显示“23°、微雨”,但没有未来一小时降水卡片。
原因一:通用“降水”描述被识别成 CLEAR
当前 ForecastNextHour.PrecipitationType() 只匹配 rain / 雨 / snow / 雪 / 冰雹 等关键词:
https://github.com/NSRingo/WeatherKit/blob/main/src/class/ForecastNextHour.mjs
彩云本次描述为:
其中不包含“雨”或“雪”,因此当前实现会回退为:
随后非零分钟数据的 summaryCondition 也会成为 CLEAR;部分路径还可能产生 POSSIBLE_CLEAR。这会让有效降水被编码成晴朗/未知条件,最终被 Apple 天气隐藏。
原因二:有效轻雨被缩放到 Apple 的不可见区间
当前 mmph 轻雨换算近似为:
perceived = (intensity - 0.08) / (3.44 - 0.08)
并截断到三位小数。当前最大雨强 0.3869 mm/h 被转换为:
(0.3869 - 0.08) / 3.36 = 0.091...
=> 0.091
源码注释说明 Apple Weather 在 perceivedPrecipitationIntensity < 0.1 时显示为无降水,但当前实现仍会把 0.08~约 0.419 mm/h 的有效轻雨压到该不可见区间。
由于判断使用严格的 > 0.1 且结果截断三位小数,实际约需达到:
0.08 + 0.101 × 3.36 = 0.41936 mm/h
才进入可见轻雨分支。
复现步骤
安装当前 Shadowrocket Rewrite 模块。
使用 ColorfulClouds 作为 NextHour.Provider。
打开未来一小时存在持续微雨、且彩云描述为“未来2小时有降水”的城市。
当前天气和小时预报显示降雨。
forecastNextHour 卡片不显示。
期望行为
当分钟数组包含非零降水时,无法从描述确定雨/雪类型不应默认回退为 CLEAR。
可以根据更可靠的类型字段、当前天气条件,或显式 fallback 推导降水类型。
有效轻雨应至少映射到 Apple 可显示的 0.1 档位。
可见轻雨分支建议使用 >= 0.1,并避免截断使边界值再次跌出显示范围。
一种可参考的缩放方式:
perceivedPrecipitationIntensity =
0.1 + Math . min ( 0.9 , lightProgress * 0.9 ) ;
实际行为
彩云分钟数据有效且未来 60 分钟持续非零,但经过类型识别与强度转换后被表示为 CLEAR / 低于 0.1,Apple 天气不显示 forecastNextHour 卡片。
环境
main/ Rewrite 模块(weatherkit.pages.dev)问题描述
在确实正在降雨、且彩云分钟级接口未来 60 分钟全部返回非零降水的情况下,Apple 天气仍不显示
forecastNextHour(未来一小时降水强度)卡片。进一步检查发现,问题并非彩云没有分钟数据,而是
ForecastNextHour的降水类型识别和轻雨强度缩放会把有效微雨转换为 Apple 天气不可见的数据。可复现数据
测试位置:山西省大同市原南郊区附近(约
40.00347, 113.14041)测试时间:2026-08-02 00:08(UTC+8)
彩云返回的关键数据:
{ "realtime": { "temperature": 23.65, "skycon": "LIGHT_RAIN" }, "minutely": { "status": "ok", "description": "未来2小时有降水", "probability": [30, 30, 30, 30], "count": 120, "nonzero_first_60": 60, "max_first_60": 0.3869 } }Apple 天气页面同时显示“23°、微雨”,但没有未来一小时降水卡片。
原因一:通用“降水”描述被识别成
CLEAR当前
ForecastNextHour.PrecipitationType()只匹配rain / 雨 / snow / 雪 / 冰雹等关键词:https://github.com/NSRingo/WeatherKit/blob/main/src/class/ForecastNextHour.mjs
彩云本次描述为:
其中不包含“雨”或“雪”,因此当前实现会回退为:
随后非零分钟数据的
summaryCondition也会成为CLEAR;部分路径还可能产生POSSIBLE_CLEAR。这会让有效降水被编码成晴朗/未知条件,最终被 Apple 天气隐藏。原因二:有效轻雨被缩放到 Apple 的不可见区间
当前
mmph轻雨换算近似为:并截断到三位小数。当前最大雨强
0.3869 mm/h被转换为:源码注释说明 Apple Weather 在
perceivedPrecipitationIntensity < 0.1时显示为无降水,但当前实现仍会把0.08~约 0.419 mm/h的有效轻雨压到该不可见区间。由于判断使用严格的
> 0.1且结果截断三位小数,实际约需达到:才进入可见轻雨分支。
复现步骤
NextHour.Provider。forecastNextHour卡片不显示。期望行为
CLEAR。0.1档位。>= 0.1,并避免截断使边界值再次跌出显示范围。一种可参考的缩放方式:
实际行为
彩云分钟数据有效且未来 60 分钟持续非零,但经过类型识别与强度转换后被表示为
CLEAR/ 低于0.1,Apple 天气不显示forecastNextHour卡片。