本帖最后由 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"
效果如下图,无论是重启还是掉电,都可以显示上次触发的时间了。
至此,问题解决。
=================以上为解决方法===============
我用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") }}'
结果是能显示出来的,如下图:
但是我发现,只要重启HA,那么这个数据就不再显示了,显示的是None,如下图:
这时查看HA里实体的属性,发现last_triggered的属性值变为null,难怪在卡片里显示的是None,如下图:
我以为是last_triggered这个属性值没有被记录到数据库,点开来看发现不是的,记录是有的,只是除了记录上次触发的时间之外,还有大段的“None”记录,这就是重启后自动化实例没有触发时的记录。如下图:
这就是重启后不能获取上次触发时间的原因,因为其属性已经变为None,而不是上次触发的时间了。
我还试了安装Cuscom UI,添加了show_last_changed这个属性,有了这个之后是能够在自动化实例的名称下方显示时间了,而这个时间是上次状态改变的时间,也就是说,如果是没有重启过HA的话,的确能显示是多久前触发过,不过同样的,由于自动化触发后没有重启,所以last_triggered这个属性是有时间的。重启HA后,虽然自动化实例名称下方能显示是多久前,但是这个却不是自动化触发的时间,而是last_triggered改变为None的时间。
至此,我实在是想不出怎么样才能获取上次触发的时间了,所在不得不在这里请教各位高手,如何实现。谢谢!!
|