本帖最后由 悠哉悠哉 于 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_dayspurge_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 配合自动化。
- 或直接操作数据库清理旧数据。
- 根据需求选择灵活的方式实现数据管理。
|