『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 383|回复: 11

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

[复制链接]

49

主题

221

帖子

1023

积分

金牌会员

Rank: 6Rank: 6

积分
1023
金钱
802
HASS币
0
发表于 2025-1-21 03:29:20 | 显示全部楼层 |阅读模式
HA的数据库设置采用了include和exclude的方式来屏蔽纪录和进行纪录你需要的传感器。
请问这个include和exclude对于采用其他数据库,比如mariadb安装了以后。这个include和exclude的设置是否还是有效的

第二个问题:有没有办法对于某些传感器纪录某些特定的日期,比如某些可能需要诊断的sensor需要纪录比如1-7天
7天以后得都不保留
比如电流。比如功率。也是如此。
因为有时候一个月过去了就不想要再纪录了。
就是针对某个entity。纪录特定的时间长。
如果有的话请赐教。
回复

使用道具 举报

4

主题

79

帖子

311

积分

论坛分享达人

积分
311
金钱
232
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 配合自动化。
    • 或直接操作数据库清理旧数据。
  • 根据需求选择灵活的方式实现数据管理。

回复

使用道具 举报

49

主题

221

帖子

1023

积分

金牌会员

Rank: 6Rank: 6

积分
1023
金钱
802
HASS币
0
 楼主| 发表于 2025-1-21 04:42:31 | 显示全部楼层
悠哉悠哉 发表于 2025-1-21 04:08
### **第一个问题:HA 的 include 和 exclude 设置在使用其他数据库(如 MariaDB)时是否有效?**

是的,H ...

感谢了。要是有那种参数可以直接针对你指定的entity id后面加一个时间。自动删除最早的该多好
回复

使用道具 举报

49

主题

221

帖子

1023

积分

金牌会员

Rank: 6Rank: 6

积分
1023
金钱
802
HASS币
0
 楼主| 发表于 2025-1-22 15:57:19 | 显示全部楼层
悠哉悠哉 发表于 2025-1-21 04:08
第一个问题:HA 的 include 和 exclude 设置在使用其他数据库(如 MariaDB)时是否有效?是的,Home Assist ...

昨天通宵了一个晚上懵懵懂懂安装好了postgresql.。确实证明了,配置include和exclude对于postgresql也一样有效果。
但是自从用了你的include和exclude我发现我的脚本找不到执行记录
请问在HA里面创建的脚本。他的执行记录(脚本-》信息-》历史-》未找到日志事件。

哪个tag是会把脚本的执行的纪录也给关闭了?
回复

使用道具 举报

4

主题

79

帖子

311

积分

论坛分享达人

积分
311
金钱
232
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
回复

使用道具 举报

49

主题

221

帖子

1023

积分

金牌会员

Rank: 6Rank: 6

积分
1023
金钱
802
HASS币
0
 楼主| 发表于 2025-1-23 19:07:26 | 显示全部楼层


recorder:
  db_url: postgresql://ha:[email protected]:5432/hacs
  purge_keep_days: 365  #数据保存时长,默认10天
  commit_interval: 1      #数据上传延迟,默认5秒
  exclude:              #排除数据
    domains:
      - sensor
      - media_player
      - number
      - binary_sensor
  include:                        #选择数据
    domains:
      - switch
      - light
      - scrip
      #- climate
    entities:
      - sensor.zhu_re_shui_qi_temperature
      - sensor.dian_chi_tou_temperature
      - sensor.xun_huan_shui_xiang_temperature
      - binary_sensor.hu_xi_shui_mian_occupancy
      - sensor.tasmota_energy_total
      - sensor.guang_du
      - sensor.guang_du_cost
      - sensor.dong_zuo_du
      - sensor.dong_zuo_du_cost
    entity_globs:
      - input_boolean*
      - sensor.*_energy_yesterday*
      - sensor.*_energy_total_*
      - sensor.*_energy_today*
      - sensor.*_energy_power*
      - sensor.*_energy_current*
      - sensor.dianbiao_energy_*
      - sensor.dianbiao_current_*
      - sensor.dianbiao_power_*
      - sensor.e4b5_current_*
      - sensor.e4b5_energy_*
      - sensor.e4b5_power_*     
      - sensor.c5f0e7_current_*
      - sensor.c5f0e7_energy_*
      - sensor.c5f0e7_power_*      
      - sensor.unknown_current_*
      - sensor.unknown_energy_current_*
      - sensor.unknown_energy_power_*
      - sensor.unknown_energy_total_*
      - sensor.unknown_energy_yesterday_*
      - sensor.unknown_power_*
      - sensor.*dang_qian_jie_ti*
      - binary_sensor.*relay_triggered
      - binary_sensor.*_cell_motion_detection
      - binary_sensor.*_motion_alarm

这个是我的数据库配置。
我并没有屏蔽掉 automation。我的自动化是没有纪录的;可以执行但是没有纪录
我的脚本也是没有纪录的
回复

使用道具 举报

49

主题

221

帖子

1023

积分

金牌会员

Rank: 6Rank: 6

积分
1023
金钱
802
HASS币
0
 楼主| 发表于 2025-1-23 19:08:46 | 显示全部楼层
悠哉悠哉 发表于 2025-1-23 11:02
这个会关掉自动化的日志
可以不用它。然后有具体的自动化需要屏蔽日志的,可以采用具体指定的方式来屏蔽 ...

能否百忙中抽空帮我看看,我提供了我的配置文件!




recorder:
  db_url: postgresql://ha:[email protected]:5432/hacs
  purge_keep_days: 365  #数据保存时长,默认10天
  commit_interval: 1      #数据上传延迟,默认5秒
  exclude:              #排除数据
    domains:
      - sensor
      - media_player
      - number
      - binary_sensor
  include:                        #选择数据
    domains:
      - switch
      - light
      - scrip
      #- climate
    entities:
      - sensor.zhu_re_shui_qi_temperature
      - sensor.dian_chi_tou_temperature
      - sensor.xun_huan_shui_xiang_temperature
      - binary_sensor.hu_xi_shui_mian_occupancy
      - sensor.tasmota_energy_total
      - sensor.guang_du
      - sensor.guang_du_cost
      - sensor.dong_zuo_du
      - sensor.dong_zuo_du_cost
    entity_globs:
      - input_boolean*
      - sensor.*_energy_yesterday*
      - sensor.*_energy_total_*
      - sensor.*_energy_today*
      - sensor.*_energy_power*
      - sensor.*_energy_current*
      - sensor.dianbiao_energy_*
      - sensor.dianbiao_current_*
      - sensor.dianbiao_power_*
      - sensor.e4b5_current_*
      - sensor.e4b5_energy_*
      - sensor.e4b5_power_*     
      - sensor.c5f0e7_current_*
      - sensor.c5f0e7_energy_*
      - sensor.c5f0e7_power_*      
      - sensor.unknown_current_*
      - sensor.unknown_energy_current_*
      - sensor.unknown_energy_power_*
      - sensor.unknown_energy_total_*
      - sensor.unknown_energy_yesterday_*
      - sensor.unknown_power_*
      - sensor.*dang_qian_jie_ti*
      - binary_sensor.*relay_triggered
      - binary_sensor.*_cell_motion_detection
      - binary_sensor.*_motion_alarm

我现在自动化是没有纪录的。并且脚本也是没有纪录的
回复

使用道具 举报

4

主题

79

帖子

311

积分

论坛分享达人

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

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

回复

使用道具 举报

23

主题

341

帖子

1403

积分

金牌会员

Rank: 6Rank: 6

积分
1403
金钱
1062
HASS币
0
发表于 2025-1-24 11:46:54 | 显示全部楼层
请教楼主一个入门问题。

改成SQL库之前,是需要自己创建一个空database并把这个名字写进configuration.yaml里面,还是不需要创建database只需要写进数据库服务器地址,然后HA会自动创建database?
回复

使用道具 举报

49

主题

221

帖子

1023

积分

金牌会员

Rank: 6Rank: 6

积分
1023
金钱
802
HASS币
0
 楼主| 发表于 2025-1-24 12:45:18 | 显示全部楼层
悠哉悠哉 发表于 2025-1-24 04:09
之前回复你的代码是我测试过的,没有问题
你的代码里script写成scrip了
但是这不是根本原因,按照你的故 ...

你说得对,我确实script 写成为scrip 少了一个t。这个感谢你指出来,
这个是我在咨询你以后追击上去,其实我原来exclude根本也就没有script。include当然也没有
也就应该说数据库里面script是必须有纪录的
但是就是没有我在咨询你以后就想着我不然自己给他添加到include里面

2:我的数据库是正确连接的因为其他的传感器都有历史记录。

3:我的另外一个疑问。之前db是自己HA原生的。所以备份的时候是连数据库一起备份生成一个备份包,现在数据库改成了postresql以后。采用的是外部的独立数据库服务器。这个时候HA的备份懂得连数据库一起提取成为自己需要备份的格式进行备份吗?
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2025-2-2 11:47 , Processed in 0.062304 second(s), 31 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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