diff --git a/hosts/hass.windy.lan.md b/hosts/hass.windy.lan.md index 309aa31..92f8608 100644 --- a/hosts/hass.windy.lan.md +++ b/hosts/hass.windy.lan.md @@ -348,16 +348,32 @@ supervisor 代理 WS 被拒(loop prevention),用 经 WS `lovelace/config/save` 写回;再扫描 helper 引用,确认无消费者后才可删除 配置入口,勿直改 `.storage/`。 -**CSG 长期归档(W1N-243, 2026-08-29;任务改号 2026-09-21):** scribe 库新增 -`csg_history` 表(逐日 usage/cost/ladder/balance + 逐月累计;2026-07-01 起回填, -永久),由 TimescaleDB 每日任务 **1010**(原 1008,2026-09-21 重建) -`csg_daily_snapshot()`(**14:30 UTC = 22:30 Asia/Shanghai**;**TS job 非 pg_cron**) -upsert 维护;计费用 `csg_ladder_cost(kwh, month)`。日行 usage 取集成 -`yesterday_kwh`,日费用在原生 `latest_day_cost` 缺失时回退 = 昨日用电 × -当前档费率(模板 `csg_current_ladder_tariff`);月行由阶梯助手重算。**语义**: -day 行 usage/cost 为该日值,ladder/balance 为快照值。详见 -[hosts/pgdb.md](../hosts/pgdb.md) § Known issues 2026-09-21(含原 1008 从未成功 -的根因与回填)。 +**CSG 长期归档(W1N-243, 2026-08-29;任务改号 2026-09-21;口径统一 v5 2026-09-22):** +scribe 库 `csg_history` 表(逐日 usage/cost/ladder/balance + 逐月累计;2026-07-01 起 +回填,永久),由 TimescaleDB **两个**任务维护(**均为 TS job,非 pg_cron**): +**1010** `csg_daily_snapshot()`(14:30 UTC = 22:30 Asia/Shanghai)写当日行; +**1011** `csg_backfill_missing_days()`(15:10 UTC = 23:10 Asia/Shanghai)是 +**断档自愈**——只 `INSERT` 缺失日期、`ON CONFLICT DO NOTHING`,**绝不覆盖既有行**。 + +> **归档逻辑全部在 pgdb 侧,不经过 HA。** HA 的 scribe 集成只往 `states_raw` 写状态, +> 上面两个任务在 pgdb 侧读 `states_raw` 落表。因此 `csg_history` 相关的口径/job 变更 +> **不需要改 HA 配置、不需要重启 Core**。另注意:模板传感器 +> `sensor.csg_history`(state = 天数「51 条」)读的是集成 attributes +> `this_month_by_day` / `last_month_by_day`,**与这张同名表无关**,别混淆。 + +**v5 口径(2026-09-22)**:数据日期与当日用量取**同一实体同一行** +`sensor.0800041935246530_latest_day_kwh`(`latest_day_date` 属性 + `value`;v3 曾用它的 +属性定日期却用 `yesterday_kwh` 取值,两实体可能错配,且后者归档少一条 09-06 = 9.29)。 +日费用 = `round(csg_ladder_cost_raw(c1) − csg_ladder_cost_raw(c0), 2)`,即**当月累积的 +边际差分**,与 v3 回填同口径;`csg_ladder_cost_raw` 是新增的**无舍入**版助手(直接用 +`csg_ladder_cost(c1) − csg_ladder_cost(c0)` 会二次舍入,7 月实测 1 天差 0.01)。月行由 +`csg_ladder_cost` 单次舍入重算。**语义**:day 行 usage/cost 为该日值,ladder/balance 为 +快照值;各月 `|sum(day cost) − month cost| ≤ 0.05` 元是**逐日舍入的累积**(非缺陷), +月行才是权威值。脚本 `compose/pgdb/csg-snapshot-v5.sql`,快照 `csg_history_bak_20260922`。 +健康检查:[pgdb-health](../runbooks/pgdb-health.md) 第 9 项专查归档新鲜度——**上游停更时 +job 会反复 upsert 同一行、`last_run_status` 仍是 `Success`、日期上也没有缺口,只有 +「最新 day 行日期」这条断言能发现**。详见 [hosts/pgdb.md](pgdb.md) § Known issues +2026-09-21(1008 从未成功的根因与回填)与 **2026-09-22**(v5 口径统一 + 自愈 + 校验)。 **CSG 预测值复核(2026-09-21,只读):** 对 `sensor.csg_*` 全部 14 个派生值用独立 Python 实现按同一输入重算,逐个与 HA