找回密码
 立即注册
搜索
查看: 1578|回复: 11

[技术探讨] 关于数据库的设置

[复制链接]

8

主题

87

回帖

404

积分

论坛分享达人

积分
404
金钱
309
HASS币
0
发表于 2025-1-21 04:08:59 | 显示全部楼层
本帖最后由 悠哉悠哉 于 2025-1-23 11:05 编辑

第一个问题:HA 的 include 和 exclude 设置在使用其他数据库(如 MariaDB)时是否有效?
是的,Home Assistant 的 include 和 exclude 设置依然有效,即使更换数据库为 MariaDB 等。
这些设置主要在 recorder 集成中配置,recorder 是管理数据记录(包括选择哪些实体要记录、哪些不要记录)的核心组件。数据库(SQLite、MariaDB 等)只是存储数据的工具,而是否记录具体的实体由 recorder 决定。
示例:
recorder:  <div>  db_url: mysql://user:[email protected]/homeassistant  </div><div>  include:    </div><div>    entities: </div><div>     - sensor.temperature  </div><div>      exclude:    </div><div>        domains:  </div><div>          - automation</div>

无论使用内置的 SQLite 还是 MariaDB,这些规则都会被遵循。

第二个问题:如何设置某些实体的记录保留特定时间?
Home Assistant 提供了以下方法实现这种精细化的数据保留策略:
1. 配置 recorder 的 purge 和 purge_keep_days
purge_keep_days 是全局设置,适用于所有实体数据的保留时长。如果您需要更细粒度的控制,需结合 include 和 exclude。
2. 借助 auto_purge 自定义脚本
如果希望为某些实体设置特定保留时长(如 7 天),可以通过 SQL 查询结合自动化完成:
  • 采用 MariaDB 时,可以创建 SQL 查询清理特定实体的旧数据。
  • 利用 Home Assistant 的 service: recorder.purge_entities 自动化。
示例:
  • 删除特定实体的旧数据:
<div>service: </div><div>  recorder.purge_entitiesdata:</div><div>   entity_ids: </div><div>    - sensor.current  </div><div>    - sensor.power  </div><div>  domains:    </div><div>    - sensor  keep_days: 7</div>


  • 触发自动化:
<div>automation:</div><div>  - alias: "每周清理数据"</div><div>    trigger:</div><div>      - platform: time</div><div>        at: "03:00:00"</div><div>    action:</div><div>      - service: recorder.purge_entities</div><div>        data:</div><div>          entity_ids:</div><div>            - sensor.current</div><div>            - sensor.power</div><div>          keep_days: 7</div>



3. 借助外部工具或脚本
对于更复杂的需求,可以直接操作 MariaDB 数据库(如清理特定表中的数据)。以下是一个简单的 SQL 示例:
DELETE FROM states WHERE entity_id = 'sensor.current' AND last_updated < NOW() - INTERVAL 7 DAY;
可以通过 cron 定时执行此 SQL 脚本实现自动化。

总结
  • include 和 exclude 设置无论是 SQLite 还是 MariaDB 都有效。
  • 对于特定实体的保留时长:
    • 使用 recorder.purge_entities 配合自动化。
    • 或直接操作数据库清理旧数据。
  • 根据需求选择灵活的方式实现数据管理。

回复

使用道具 举报

8

主题

87

回帖

404

积分

论坛分享达人

积分
404
金钱
309
HASS币
0
发表于 2025-1-23 11:02:46 | 显示全部楼层
norikohxb 发表于 2025-1-22 15:57
昨天通宵了一个晚上懵懵懂懂安装好了postgresql.。确实证明了,配置include和exclude对于postgresql也一 ...
exclude:    
  domains:      
    - automation

这个会关掉自动化的日志
可以不用它。然后有具体的自动化需要屏蔽日志的,可以采用具体指定的方式来屏蔽,如下面这样
exclude:    
  domains:      
    - automation.myautomation1
    - automation.myautomation2
回复

使用道具 举报

8

主题

87

回帖

404

积分

论坛分享达人

积分
404
金钱
309
HASS币
0
发表于 2025-1-24 04:09:17 | 显示全部楼层
norikohxb 发表于 2025-1-23 19:08
能否百忙中抽空帮我看看,我提供了我的配置文件!

之前回复你的代码是我测试过的,没有问题
你的代码里script写成scrip了
但是这不是根本原因,按照你的故障现象来看,你的数据库是连不通或者没有正确配置的

回复

使用道具 举报

8

主题

87

回帖

404

积分

论坛分享达人

积分
404
金钱
309
HASS币
0
发表于 2025-1-24 14:49:22 | 显示全部楼层
norikohxb 发表于 2025-1-24 12:45
你说得对,我确实script 写成为scrip 少了一个t。这个感谢你指出来,
这个是我在咨询你以后追击上去,其 ...

对于备份,按设计来看它会把你postgresql里的数据也备份的,因为数据库连接只是底层实现, 备份都是基于ORM对象访问来备份的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian ( 晋ICP备17001384号-1 )

GMT+8, 2025-6-29 19:27 , Processed in 0.156188 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表