☰
用 Home Assistant 报表看懂你家的历史数据统计
2026/11/2 1:30:14 网站建设 项目流程

用 Home Assistant 报表看懂你家的历史数据统计

【免费下载链接】core:house_with_garden: Open source home automation that puts local control and privacy first.项目地址: https://gitcode.com/GitHub_Trending/co/core

上个月电费比前一个月多了 40 多块,你想确认到底是哪台设备在深夜偷偷跑电——打开 Home Assistant,它的历史数据统计模块能把每个传感器每一次状态变化都记下来,再自动算出均值、极值和累计量。这篇文章带你走完一条路径:先让数据落库,再用历史数据 API 拉曲线,最后把月度能源统计导出成 CSV,全程三处配置、两段接口调用。

先把最近 10 天的数据录下来

Home Assistant 里负责落库的组件叫 Recorder,简单说就是把实体状态按时间存进数据库的"行车记录仪"。它默认开启,默认保留 10 天。想调保留时长、排除掉高频变动但不重要的实体(比如自动化状态),在 configuration.yaml 里加一段 recorder 配置:

recorder: db_url: sqlite:////config/home-assistant_v2.db purge_keep_days: 30 exclude: domains: - automation

重启后,状态变化会按原始状态 → 5 分钟聚合 → 小时级汇总三级滚动入库:原始行存在states表,短期统计在statistics_short_term表,长期统计在statistics表,元信息统一挂在statistics_meta里。聚合逻辑在 homeassistant/components/recorder/statistics.py,配置常量在 homeassistant/components/recorder/const.py。

一条请求拉出 30 天温度曲线

📊 目标:拿到某实体过去 30 天的显著状态变化。历史数据 API 是带访问令牌的 REST 接口,只返回"实质变化"的行,不返回每次属性刷新。

curl -H "Authorization: Bearer $LONG_LIVED_TOKEN" \ "http://homeassistant.local:8123/api/history/period/2026-07-29T00:00:00Z?filter_entity_id=sensor.living_room_temp&end_time=2026-08-28T00:00:00Z&significant_changes_only=1"

预期输出是数组,每个元素含entity_id和states列表,states里是state、last_changed等字段,直接喂给绘图库即可。

⚠️ 常见坑:路径里的日期含冒号和+时,不编码会直接 404;用Z结尾的 UTC 格式最省事。前端仪表盘里看到的历史曲线走的就是同一份数据。

如果不想每次轮询,历史模块还有一个history/streamWebSocket 消息(见 homeassistant/components/history/websocket_api.py),建连后状态变化会推送过来,适合做实时大屏。

把月度能源统计导出成 CSV

📈 目标:统计报表导出——按天汇总用电量。在能import homeassistant的脚本里(比如自动化或自定义集成)直接调统计接口:

from homeassistant.components.recorder.statistics import get_statistics import csv with open("energy_daily.csv", "w", newline="") as f: writer = csv.writer(f) writer.writerow(["day", "kWh_total", "mean", "peak"]) for day in range(7): stats = get_statistics(hass, start, end, {entity_id}, "daily") row = stats[entity_id][0] writer.writerow([start.date(), round(row["sum"], 2), round(row["mean"], 2), round(row["max"], 2)])

预期输出是一行一天的 CSV,sum列就是当天累计 kWh。⚠️ 常见坑:sum是累计值,别对多条记录再求一次和,否则翻倍;另外只有状态是数值且带单位的实体才会生成统计,unavailable不会算进去。

没有数据,或查得很慢?按这个顺序排查

🔍 先排除配置问题,再谈性能:

  1. 统计报表为空?先确认该实体状态是纯数字且带单位;再看有没有被 recorder 的 exclude 排除;最后看数据是否早于purge_keep_days保留窗口。
  2. 历史 API 查着查着超时?把单次查询跨度压到 30 天以内,优先按filter_entity_id过滤,别拉全站实体。
  3. 写库变慢?SQLite 单实例够用,打开 WAL 模式即可;实体上千、多设备并发写入时再换 MariaDB。

动手清单

  • 在 configuration.yaml 加上面那段 recorder 配置,按需要调purge_keep_days
  • 用历史数据 API 拉一条 30 天曲线,画成图放进仪表盘
  • 跑一遍 CSV 导出脚本,确认sum列和电费账单对得上

深入细节可以查项目自带的官方文档和讨论区:recorder 与 statistics 的完整参数都在 homeassistant/components/recorder/ 的strings.json和const.py里。

【免费下载链接】core:house_with_garden: Open source home automation that puts local control and privacy first.项目地址: https://gitcode.com/GitHub_Trending/co/core

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询