VPS-78: hass 主机文档同步 v5(归档不经过 HA + 新口径 + 自愈 job + check 9)

- 澄清 csg_history 归档全部在 pgdb 侧:HA scribe 集成只写 states_raw,
  1010/1011 在 pgdb 读 states_raw 落表 → 口径/job 变更不需要动 HA 配置或重启 Core
- 区分模板传感器 sensor.csg_history(读集成 attributes)与同名表
- 口径:日期+用量同源 latest_day_kwh;日费用 = csg_ladder_cost_raw 边际差分 + round(...,2)
- 指向 runbooks/pgdb-health.md check 9 与 hosts/pgdb.md Known issues 2026-09-22
This commit is contained in:
windyboy
2026-09-22 08:48:24 +08:00
parent 906fb4a759
commit 5a5eba8014
+26 -10
View File
@@ -348,16 +348,32 @@ supervisor 代理 WS 被拒(loop prevention),用
经 WS `lovelace/config/save` 写回;再扫描 helper 引用,确认无消费者后才可删除 经 WS `lovelace/config/save` 写回;再扫描 helper 引用,确认无消费者后才可删除
配置入口,勿直改 `.storage/` 配置入口,勿直改 `.storage/`
**CSG 长期归档(W1N-243, 2026-08-29;任务改号 2026-09-21:** scribe 库新增 **CSG 长期归档(W1N-243, 2026-08-29;任务改号 2026-09-21;口径统一 v5 2026-09-22:**
`csg_history` 表(逐日 usage/cost/ladder/balance + 逐月累计;2026-07-01 起回填, scribe 库 `csg_history` 表(逐日 usage/cost/ladder/balance + 逐月累计;2026-07-01 起
永久),由 TimescaleDB 每日任务 **1010**(原 10082026-09-21 重建) 回填,永久),由 TimescaleDB **两个**任务维护(**均为 TS job,非 pg_cron**):
`csg_daily_snapshot()`**14:30 UTC = 22:30 Asia/Shanghai****TS job 非 pg_cron** **1010** `csg_daily_snapshot()`14:30 UTC = 22:30 Asia/Shanghai写当日行;
upsert 维护;计费用 `csg_ladder_cost(kwh, month)`。日行 usage 取集成 **1011** `csg_backfill_missing_days()`15:10 UTC = 23:10 Asia/Shanghai)是
`yesterday_kwh`,日费用在原生 `latest_day_cost` 缺失时回退 = 昨日用电 × **断档自愈**——只 `INSERT` 缺失日期、`ON CONFLICT DO NOTHING`**绝不覆盖既有行**。
当前档费率(模板 `csg_current_ladder_tariff`);月行由阶梯助手重算。**语义**:
day 行 usage/cost 为该日值,ladder/balance 为快照值。详见 > **归档逻辑全部在 pgdb 侧,不经过 HA。** HA 的 scribe 集成只往 `states_raw` 写状态,
[hosts/pgdb.md](../hosts/pgdb.md) § Known issues 2026-09-21(含原 1008 从未成功 > 上面两个任务在 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-211008 从未成功的根因与回填)与 **2026-09-22**(v5 口径统一 + 自愈 + 校验)。
**CSG 预测值复核(2026-09-21,只读):** **CSG 预测值复核(2026-09-21,只读):**
`sensor.csg_*` 全部 14 个派生值用独立 Python 实现按同一输入重算,逐个与 HA `sensor.csg_*` 全部 14 个派生值用独立 Python 实现按同一输入重算,逐个与 HA