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

 找回密码
 立即注册
查看: 11113|回复: 7

[已解决] 请教一个如何获取自动化实例中的上次触发属性的问题

[复制链接]

16

主题

135

帖子

1091

积分

金牌会员

Rank: 6Rank: 6

积分
1091
金钱
956
HASS币
0
发表于 2018-5-11 15:13:39 | 显示全部楼层 |阅读模式
本帖最后由 roc634 于 2018-6-23 14:49 编辑

================已解决===================
这个自动化触发时间应该是记录在数据库里了的,但是重启后会莫名其妙变为None,我相信这个以后会得到修正的。
根据各位提供的建议,我现在用MQTT实现了这一目的,重启后也不会丢失自动化触发时间这一属性了。


首先要安装MQTT服务,不建议使用内置的HBMQTT,原因下文再表。我这里用的是Mosquitto。

然后在configuration.yaml中配置MQTT
mqtt:
  broker: localhost
  port: 1883
  username: (用户名)
  password: (密码)


接着新建一个自动化,在电磁阀触发时向MQTT发送一条包含当前时间的信息。
- alias: balcony last water
  hide_entity: false
  initial_state: 'on'
  trigger:
    platform: state
    entity_id: switch.switch1
    from: 'off'
    to: 'on'
  action:
    - service: mqtt.publish
      data_template:
        topic: "mqtt/balcony_last_water"
        payload_template: '{{ as_timestamp(now())  | timestamp_custom("%m月%d日 %H:%M") }}'
        retain: true

这里需要注意,MQTT中retain默认的属性是false,重启后信息就丢失了,因此需要将其设置为true。上文说到不建议用内置的HBMQTT,是因为它
会忽略retain的属性,而不会保留信息,因此重启后信息依然是丢失的,所以不建议使用。


最后,在configuration.yaml中添加一个MQTT的sensor就可以了
  - platform: mqtt
    name: balcony_last_water
    state_topic: "mqtt/balcony_last_water"


效果如下图,无论是重启还是掉电,都可以显示上次触发的时间了。
last_water_ok.jpg
至此,问题解决。
=================以上为解决方法===============




我用HA配合电磁阀做了一个自动给植物浇水的自动化实例。由于是自动浇水,我希望显示上次自动浇水的时间,以避免在自动化失效的时候能及时发现手动浇水。

我注意到每个自动化实例中都有一个last_triggered属性,于是我用template通过value_template读取数据后作为一个实例能够显示出来,如下:
  - platform: template
    sensors:
      balcony_water_last:
        value_template: '{{ as_timestamp(states.automation.balcony_water.attributes.last_triggered)  | timestamp_custom("%m%d %H:%M") }}'
结果是能显示出来的,如下图:
lastok.jpg
但是我发现,只要重启HA,那么这个数据就不再显示了,显示的是None,如下图:
lastnone.jpg
这时查看HA里实体的属性,发现last_triggered的属性值变为null,难怪在卡片里显示的是None,如下图:
state.jpg
我以为是last_triggered这个属性值没有被记录到数据库,点开来看发现不是的,记录是有的,只是除了记录上次触发的时间之外,还有大段的“None”记录,这就是重启后自动化实例没有触发时的记录。如下图:
auto.jpg
这就是重启后不能获取上次触发时间的原因,因为其属性已经变为None,而不是上次触发的时间了。
我还试了安装Cuscom UI,添加了show_last_changed这个属性,有了这个之后是能够在自动化实例的名称下方显示时间了,而这个时间是上次状态改变的时间,也就是说,如果是没有重启过HA的话,的确能显示是多久前触发过,不过同样的,由于自动化触发后没有重启,所以last_triggered这个属性是有时间的。重启HA后,虽然自动化实例名称下方能显示是多久前,但是这个却不是自动化触发的时间,而是last_triggered改变为None的时间。
至此,我实在是想不出怎么样才能获取上次触发的时间了,所在不得不在这里请教各位高手,如何实现。谢谢!!



回复

使用道具 举报

4

主题

313

帖子

1965

积分

金牌会员

Rank: 6Rank: 6

积分
1965
金钱
1652
HASS币
0
发表于 2018-5-11 19:00:41 | 显示全部楼层
'{{as_timestamp(states.automation.##########.attributes.last_triggered) | timestamp_custom("%H:%M") }}'
我和你一样做了个浇花的,模板这样写你看行吗?
回复

使用道具 举报

16

主题

135

帖子

1091

积分

金牌会员

Rank: 6Rank: 6

积分
1091
金钱
956
HASS币
0
 楼主| 发表于 2018-5-11 19:42:21 | 显示全部楼层
xinfan 发表于 2018-5-11 19:00
'{{as_timestamp(states.automation.##########.attributes.last_triggered) | timestamp_custom("%H:%M")  ...

这个模板是可行的,我用的也是这个,但是这个last_triggered的属性会在重启HA后变为None,而不是显示上次触发的时间了,您也可以试一下是不是出现这样的情况。目前我就是寻求重启后依然能正确显示上次触发时间的解决方法。
回复

使用道具 举报

75

主题

1976

帖子

8181

积分

元老级技术达人

积分
8181
金钱
6155
HASS币
430

活跃会员教程狂人

发表于 2018-5-12 05:32:34 | 显示全部楼层
不知道这个帖子有没有参考性。
https://bbs.hassbian.com/thread-3522-1-1.html
需要custom-ui。
重启后状态复位的问题应该是需要将状态触发时间通过某种方式写入sd卡上,好像没人去研究这个。。。
所有过往,皆为序章。
回复

使用道具 举报

16

主题

135

帖子

1091

积分

金牌会员

Rank: 6Rank: 6

积分
1091
金钱
956
HASS币
0
 楼主| 发表于 2018-5-12 09:47:14 | 显示全部楼层
咸味土豆 发表于 2018-5-12 05:32
不知道这个帖子有没有参考性。
https://bbs.hassbian.com/thread-3522-1-1.html
需要custom-ui。

谢谢您的回复。我仔细看了一下帖子中的内容,我同样是安装了custom ui,然后通过调用last_triggered这个属性来显示上次触发时间的,只是代码不太一样而已,但是现在的问题是重启后last_triggered变成null,这样模板根据条件得出的结果是“从未执行”。也不知道原程序会在重启后将last_triggered变为null,这会不会是一个bug?
回复

使用道具 举报

26

主题

553

帖子

2728

积分

金牌会员

Rank: 6Rank: 6

积分
2728
金钱
2150
HASS币
100

教程狂人

发表于 2018-5-13 04:23:51 | 显示全部楼层
这个,暂时没想到啥聪明办法,不行用傻办法吧。
比如:
自动化的action里加入一段脚本代码,
每次触发自动化的时候执行这段代码,
代码为保存当前时间到本地文件中。
在建一个传感器,
读取本地文件中的这个时间,
从而达到监测上次自动化执行时间的目的。
回复

使用道具 举报

16

主题

135

帖子

1091

积分

金牌会员

Rank: 6Rank: 6

积分
1091
金钱
956
HASS币
0
 楼主| 发表于 2018-6-23 14:28:00 | 显示全部楼层
Mirukuteii 发表于 2018-5-13 04:23
这个,暂时没想到啥聪明办法,不行用傻办法吧。
比如:
自动化的action里加入一段脚本代码,

谢谢你的建议,根据你提供的思路,现在我用MQTT实现了这一目的,解决方法更新在一楼,供大家参考。
回复

使用道具 举报

33

主题

2196

帖子

5838

积分

论坛元老

Rank: 8Rank: 8

积分
5838
金钱
3642
HASS币
60
QQ
发表于 2021-2-24 14:49:47 | 显示全部楼层
膜拜大佬,学习了。
我不生产技术,我只是技术的搬运工。
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-25 09:43 , Processed in 0.258808 second(s), 34 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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