fix: use earlier realtime tick for arrival ETA
This commit is contained in:
@@ -17,6 +17,7 @@
|
|||||||
| C | 文本解析到了正确 ETA,但后来又被 NBT 计算值覆盖,或因为键规范化不一致而未命中覆盖 | Medium | Low | In Progress |
|
| C | 文本解析到了正确 ETA,但后来又被 NBT 计算值覆盖,或因为键规范化不一致而未命中覆盖 | Medium | Low | In Progress |
|
||||||
| D | 同一班车在 NBT 与文本中的目的地/车次格式仍有额外差异(空格、平台、后缀) | High | Low | Rejected |
|
| D | 同一班车在 NBT 与文本中的目的地/车次格式仍有额外差异(空格、平台、后缀) | High | Low | Rejected |
|
||||||
| E | `create_target` 文本切分错位,把 ETA 数值丢掉了,只留下中文单位(在 CC 中显示为 `??`) | High | Low | Confirmed |
|
| E | `create_target` 文本切分错位,把 ETA 数值丢掉了,只留下中文单位(在 CC 中显示为 `??`) | High | Low | Confirmed |
|
||||||
|
| F | NBT 中 `RealTimeArrival` / `RealTimeDeparture` 对当前用途语义与预期相反,取错字段后会把停站时间算进去 | High | Low | Confirmed |
|
||||||
|
|
||||||
## Log Evidence
|
## Log Evidence
|
||||||
- 屏幕证据:`TK:[Local]1123_HC-02 2`
|
- 屏幕证据:`TK:[Local]1123_HC-02 2`
|
||||||
@@ -25,7 +26,9 @@
|
|||||||
- 屏幕证据:`ETASTR:??`
|
- 屏幕证据:`ETASTR:??`
|
||||||
- 结论:文本键已匹配成功,但 `etaStr` 仅剩单位文本,数值部分在切分时被错误丢弃。
|
- 结论:文本键已匹配成功,但 `etaStr` 仅剩单位文本,数值部分在切分时被错误丢弃。
|
||||||
- 后续证据:修复切分后,`TXT:60` 但 `USE` 仍保持 NBT 值,说明文本 ETA 未稳定命中最终覆盖,需统一键规范化。
|
- 后续证据:修复切分后,`TXT:60` 但 `USE` 仍保持 NBT 值,说明文本 ETA 未稳定命中最终覆盖,需统一键规范化。
|
||||||
|
- 样本证据:`LastRefreshed=122113`,`RealTimeDeparture=122228`,`RealTimeArrival=123428`,两者相差约 1200 tick(60s 停站时间);取 `RealTimeArrival` 会天然带入停站时间。
|
||||||
|
|
||||||
## Verification Conclusion
|
## Verification Conclusion
|
||||||
- 已确认根因 1:`create_target` 文本解析错误地将第一段数字当成独立字段丢掉,导致 ETA 解析只看到中文单位。
|
- 已确认根因 1:`create_target` 文本解析错误地将第一段数字当成独立字段丢掉,导致 ETA 解析只看到中文单位。
|
||||||
- 新增根因 2:文本键与 NBT 键需要统一规范化(空格压缩/去首尾),否则文本 ETA 无法稳定覆盖最终值。
|
- 新增根因 2:文本键与 NBT 键需要统一规范化(空格压缩/去首尾),否则文本 ETA 无法稳定覆盖最终值。
|
||||||
|
- 已确认根因 3:对于“进站 ETA”用途,应该取 `RealTimeArrival/RealTimeDeparture` 中更早的那个时间点,而不是固定取 `RealTimeArrival`。
|
||||||
|
|||||||
+12
-3
@@ -2,7 +2,7 @@
|
|||||||
-- ============================================================================
|
-- ============================================================================
|
||||||
-- 1. Configuration & Constants
|
-- 1. Configuration & Constants
|
||||||
-- ============================================================================
|
-- ============================================================================
|
||||||
local APP_VERSION_TEXT = "v1.0.33"
|
local APP_VERSION_TEXT = "v1.0.34"
|
||||||
|
|
||||||
local CONFIG = {
|
local CONFIG = {
|
||||||
CLOUD_URL = "ws://stabadmin.fse-media.group",
|
CLOUD_URL = "ws://stabadmin.fse-media.group",
|
||||||
@@ -2427,6 +2427,15 @@ local function normalizeUpcomingKey(trainName, destination)
|
|||||||
return clean(trainName) .. "_" .. clean(destination)
|
return clean(trainName) .. "_" .. clean(destination)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function pickEarlierTick(a, b)
|
||||||
|
local ta = tonumber(a)
|
||||||
|
local tb = tonumber(b)
|
||||||
|
if ta and tb then
|
||||||
|
return math.min(ta, tb)
|
||||||
|
end
|
||||||
|
return ta or tb or 0
|
||||||
|
end
|
||||||
|
|
||||||
function Main.loop()
|
function Main.loop()
|
||||||
while true do
|
while true do
|
||||||
local now = os.epoch("utc")
|
local now = os.epoch("utc")
|
||||||
@@ -2560,8 +2569,8 @@ function Main.loop()
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- Calculate ETA in seconds using interpolated currentTick
|
-- Calculate ETA in seconds using interpolated currentTick
|
||||||
local scheduledArrival = st.ScheduledArrival or 0
|
local scheduledArrival = pickEarlierTick(st.ScheduledArrival, st.ScheduledDeparture)
|
||||||
local realArrival = st.RealTimeArrival or 0
|
local realArrival = pickEarlierTick(st.RealTimeArrival, st.RealTimeDeparture)
|
||||||
local etaTicks = realArrival - currentTick
|
local etaTicks = realArrival - currentTick
|
||||||
local etaSeconds = math.floor(etaTicks / (State.tickRate or 20))
|
local etaSeconds = math.floor(etaTicks / (State.tickRate or 20))
|
||||||
if etaSeconds < 0 then etaSeconds = 0 end
|
if etaSeconds < 0 then etaSeconds = 0 end
|
||||||
|
|||||||
Reference in New Issue
Block a user