本帖最后由 lijun9701 于 2019-3-3 20:09 编辑
接触树莓派已经有几个月了,自动化代码基本上是从论坛里学来的。自动化从最初的开灯、关灯,到后来的场景设计,慢慢地复杂起来。自动化代码也越来越多,有时候为了修改一段代码,要在众多的代码中翻找。慢慢参考坛里大神的方法,把每个自动化用分隔线隔起来,查找起来快一点。
近日,在修改刚开始编写的自动代码时,发现自己的代码冗长。有些自动化完全可合并成一个自动化。于是开始动手优化,下面我举个例子,希望能帮到一个刚入门的朋友。
这是一个根据米家PM2.5检测数值自动开关空气净化器的自动化。下面的代码是优化前的,开机与关机分成2个自动化做的。
##### 净化器控制 ########################################################################################################################
####### 空气净化器开启 ##
- alias: air_on
initial_state: true #重启HA自动化是开启(true)还是关闭(false)
hide_entity: true #隐藏自动化false
trigger:
- platform: numeric_state
entity_id: sensor.pm25 # PM2.5监测仪
above: 50
condition:
condition: and
conditions:
- condition: state
entity_id: group.all_devices #
state: 'home'
- condition: state
entity_id: group.all_fans #
state: 'off'
action:
- service_template: "fan.turn_on"
entity_id: group.all_fans #净化器
####### 空气净化器关闭 ##
[hide]- alias: air_off
initial_state: true #重启HA自动化是开启(true)还是关闭(false)
hide_entity: true #隐藏自动化false
trigger:
- platform: numeric_state
entity_id: sensor.pm25 # PM2.5监测仪
below: 20
condition:
condition: state
entity_id: group.all_fans #
state: 'on'
action:
- service_template: "fan.turn_off"
entity_id: group.all_fans
下面是优化后的代码,将两个自动化合并到一起,在执行阶段通过判断条件,决定执行开机还是关机。
##### 净化器控制 ########################################################################################################################
####### 空气净化器开启 20190303修改 ##
- alias: air_cleaner
initial_state: true #重启HA自动化是开启(true)还是关闭(false)
hide_entity: true #隐藏自动化false
trigger:
- platform: numeric_state
entity_id: sensor.pm25 # PM2.5监测仪
above: 50
- platform: numeric_state
entity_id: sensor.pm25 # PM2.5监测仪
below: 20
condition:
condition: and
conditions:
- condition: state
entity_id: group.all_devices #
state: 'home'
- condition: state # 睡眠模式关闭
entity_id: input_boolean.good_night
state: 'off'
action:
- service_template: "fan.turn_{% if states.sensor.pm25.state | int < 20 %}off{% elif states.sensor.pm25.state | int > 50 %}on{% else %}off{% endif %}"
entity_id: group.all_fans #净化器
[/hide]
希望我的方法能帮助你进一步优化代码,也许你有更好 的方法,可以在留言里告诉我。帮助我提高。
|