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

 找回密码
 立即注册
查看: 7595|回复: 18

[插件集成] 【替代】官方插件修改,让hostory stats历史记录精确到秒

[复制链接]

10

主题

181

帖子

2580

积分

金牌会员

Rank: 6Rank: 6

积分
2580
金钱
2394
HASS币
60
发表于 2020-6-26 02:02:36 | 显示全部楼层 |阅读模式
本帖最后由 lyfff 于 2021-1-17 23:18 编辑

注意,本文给出的插件已失效(HA版本:108.4)。替代方案放到了6#
↓下面的内容失效了↓
官方的传感器插件中有个History Stats,专门用于记录实体处于某个状态的时长。例如你要记录某个switch全天处于“On”状态的时长,那么可以在sensor:里面加入:
- platform: history_stats
  name: XXX On
  entity_id: switch.xxx
  state: 'on'
  type: time
  end: '{{ now() }}'
  start: >
    {{ now().replace(hour=0).replace(minute=0).replace(second=0) }}

BUT, 这个官方传感器记录的时间长度是以小时为单位,而且精度只到0.01。也就意味着这个传感器最快也要(0.01h*3600s/h=)36秒才会更新一次数值。这对于我这种想通过观察某个设备的使用时间精确到多少来处理事情,就没法实现了。Inspired by 这个帖子。我对官方的插件做了一点点修改。改成了可以精确到秒的"History Stats in Seconds 传感器"自定义插件。
效果如下:
使用前(随便找个用官方插件的图):
1.png
使用后:
2.png
这样,我就可以通过知道我的水泵开了多少秒,计算水在水管里面的什么位置了。

插件使用方法:
将插件放到custom_components目录,配置方法与官方文档完全一致,只是将platform: history_stats改为platform: history_stats_in_seconds。

游客,如果您要查看本帖隐藏内容请回复






评分

参与人数 1金钱 +20 HASS币 +10 收起 理由
+ 20 + 10 厉害了word楼主!

查看全部评分

大佬: 请勿咨询任何问题,所有问题都能 Google 到答案
回复

使用道具 举报

20

主题

459

帖子

2819

积分

金牌会员

Rank: 6Rank: 6

积分
2819
金钱
2360
HASS币
0
发表于 2020-6-26 09:39:03 | 显示全部楼层
这将会急剧加大数据库的容量吧
回复

使用道具 举报

2

主题

223

帖子

3300

积分

论坛元老

Rank: 8Rank: 8

积分
3300
金钱
3077
HASS币
0
发表于 2020-6-26 09:48:42 | 显示全部楼层
厉害,虽然我还不知道我能拿来干啥
回复

使用道具 举报

24

主题

604

帖子

3400

积分

元老级技术达人

积分
3400
金钱
2791
HASS币
0

卓越贡献

发表于 2020-6-26 09:52:53 | 显示全部楼层
厉害!对于一些安全性或是类似于浇花阀门的。用来看记录是最好的。但是会不会加大数据库的记录以及性能的运行呢?感谢分享!
回复

使用道具 举报

10

主题

181

帖子

2580

积分

金牌会员

Rank: 6Rank: 6

积分
2580
金钱
2394
HASS币
60
 楼主| 发表于 2020-6-26 12:28:16 | 显示全部楼层
showphi 发表于 2020-6-26 09:39
这将会急剧加大数据库的容量吧

貌似不会,但具体的【不良反应】应该还属“尚不明确”。我的情况是,传感器还是需要一个自动化来实现每秒更新,否则更新频率还是36秒1次。我只在要计算时间的时候让自动化运行,所以只有在这段时间内会增加数据库体积。
这个情况是因为我不会python,所以代码并不是很完善导致的,看看有什么大佬帮改的好一点吧...
大佬: 请勿咨询任何问题,所有问题都能 Google 到答案
回复

使用道具 举报

10

主题

181

帖子

2580

积分

金牌会员

Rank: 6Rank: 6

积分
2580
金钱
2394
HASS币
60
 楼主| 发表于 2021-1-17 23:15:27 | 显示全部楼层
随着HA的升级,这个乱改版本的插件就失效了,看来想要稳,还是得用官方的方案才行!
下面是目前(HA版本108.4)的替代方案,既然不能乱改插件,那就自己做一个:
先设置一个数值
(直接在UI中添加)
1.png
然后用一个自动化来实现,让它“每秒钟”更新,达到计秒的目的:
(其实也可以在UI中添加自动化,但不好截图,所以这里给出yaml)
alias: ××× Update per Second
trigger:
  - platform: time_pattern
    seconds: /1
condition:
  - condition: state
    entity_id: ×××
    state: 'on'
action:
  - service: input_number.set_value
    data:
      value: |
        {{ states('input_number.×××')|int() + 1 }}
    entity_id: input_number.×××
mode: single
当然,你还需要按需清零,所以还要加一个自动化,让这个数值在某个条件时清零(下面给出实体关闭时清零的例子,具体条件要按实际应用设置):
alias: ××× Reset
trigger:
  - platform: state
    entity_id: ×××
    from: 'on'
    to: 'off'
    for: '00:00:00'
condition: []
action:
  - service: input_number.set_value
    data:
      value: 0
    entity_id: input_number.×××
mode: single
完成上述设置之后,就可以用{{ states('input_number.water_pump_work_second_counter') }}来调用这个秒数的值了,可以放到其他地方,完成不可描述的自动化。
大佬: 请勿咨询任何问题,所有问题都能 Google 到答案
回复

使用道具 举报

0

主题

22

帖子

587

积分

高级会员

Rank: 4

积分
587
金钱
565
HASS币
0
发表于 2021-1-18 10:53:13 来自手机 | 显示全部楼层
终于有替代方案了
回复

使用道具 举报

3

主题

201

帖子

2154

积分

金牌会员

Rank: 6Rank: 6

积分
2154
金钱
1953
HASS币
0
发表于 2021-1-18 11:08:34 | 显示全部楼层
学习下 谢谢!!!!!!!!!!!
回复

使用道具 举报

1

主题

118

帖子

2466

积分

金牌会员

Rank: 6Rank: 6

积分
2466
金钱
2348
HASS币
0
发表于 2021-1-18 14:00:46 | 显示全部楼层
赶紧看看,有什么变化
回复

使用道具 举报

0

主题

46

帖子

167

积分

注册会员

Rank: 2

积分
167
金钱
121
HASS币
0
发表于 2022-5-22 10:09:45 | 显示全部楼层
感谢~~~学习~~~
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-20 09:20 , Processed in 0.435086 second(s), 36 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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