- 作者:
- 分类:知识&开发->IOT
- 阅读:10
- 点赞:0
- 版权:CC BY-SA 4.0
- 创建:2025-03-24
- 更新:2025-03-24
版权声明:本文为 neucrack 的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接(持续更新):https://neucrack.com/p/568
原文链接(持续更新):https://neucrack.com/p/568
homeassistant 官方不支持直接添加历史数据(2025.03.25),所以要想添加需要其它方法,有点麻烦。
使用场景
homeassistant添加数据的时间都是自动生成的,不是手动设置的,有些情况比如有些数据不方便实时上传,想过一段时间导入一次。
或者导入一些历史的书记,比如股票、金价等。
方法
使用集成: https://github.com/klausj1/homeassistant-statistics
按照其 README 使用说明使用即可,详细阅读,下面简要介绍一下大概的步骤,实际以README为准:
- 复制 custom_components 下的文件夹到 ~/.homeassistant/custom_components,
- 然后在~/.homeassistant/automations.yaml 加上
import_statistics:
重启 hass 服务,可以在web点击重启,也可以
sudo systemctl restart hass
准备数据,可以用
\t
(tab)隔开(注意不是空格),或者建议用|
避免tab
和空格
混淆,比如这里金价生成tsv脚本:def gen_tsv_table(id, unit, values, tsv_path):
'''
values: e.g. [[944524800000, 74.3297], [946425600000, 77.4334], [946598400000, 77.2623]]
'''
content = "statistic_id unit start min max mean\n"
final_values = {}
for t, v in values:
if v is None:
continue
t_str = datetime.fromtimestamp(t/1000).strftime("%d-%m-%Y %H:00")
if t_str in final_values:
final_values[t_str]["min"] = min(final_values[t_str]["min"], v)
final_values[t_str]["max"] = min(final_values[t_str]["max"], v)
final_values[t_str]["values"].append(v)
final_values[t_str]["mean"] = round(sum(final_values[t_str]["values"]) / len(final_values[t_str]["values"]), 3)
else:
final_values[t_str] = {
"min": v,
"max": v,
"values": [v],
"mean": v
}
for t, v in final_values.items():
content += f"{id} {unit} {t} {v["min"]} {v["max"]} {v["mean"]}\n"
with open(tsv_path, "w", encoding="utf-8") as f:
f.write(content)
将数据 csv/tsv 放到
~/.homeassistant/
目录下web界面开发者工具 -> 动作(action)导入,如下图:
然后就能在传感器中看到了,需要手动选一下日期区间才能看到老的数据
另外好像遇到了提示说导入数据后传感器没有状态类,不知道啥问题,重启保证log没报错(sudo journalctl -u hass),选择删除重新导入一次就好了,可能重复导入导致的?暂时没细究