到这里,Homeassistant的主要功能就了解的差不多了,其实所谓“智能”主要就是自动化加上想象力。
注意:本文内容已过时,仅做参考!
脚本
就是手动触发,然后执行一个或多个动作,详见 文档 。比如下面这个就是延迟三十分钟关闭电扇,这里其实是延迟和关闭开关两个动作了。
script:
delay_turn_off_switch
alias: 延迟关闭电扇
sequence:
- delay: '00:30'
- service: homeassistant.turn_off
entity_id: switch.xiaomi_switch_one
自动化
自动化其实也是去执行动作,不过不需要手动触发,而是由某个状态发生改变触发,如时间、开关打开、温度变化等;此外可能还需要一个环境条件,比如人在家、某个时间段内。
举个例子,如果人在家的话,每天早上9点播报天气情况。这里每天9点就是触发条件,人在家就是环境条件,播报天气就是动作。每个自动化实例可以有多个触发条件和环境条件。
这里我写了个自动重启HomeAssistant的脚本,
shell_command
可以执行linux命令,添加了一个脚本去执行这个命令;自动化中
trigger
是触发条件,这里设定的时间11:30(似乎有简单的写法);
condition
是环境条件,这里是设备组的状态,没有设备在家(这个组排除了智能设备)才会执行;
action
是动作,执行重启的脚本。
shell_command:
restart_hass: sudo service home-assistant@pi restart
script:
restart_hass:
alias: 重启HomeAssistant
sequence:
- service: shell_command.restart_hass
automation:
- alias: restart_hass_daily
initial_state: true
trigger:
- platform: time
hours: 11
minutes: 30
seconds: 00
condition:
- condition: state
entity_id: group.human_device
state: not_home
action:
- service: script.turn_on
entity_id: script.restart_hass
Package
这个东西还挺有用的,就是把一些配置打包成一个文件(上面那个自动重启的代码其实就是了),因为很多功能是需要多个部分的配置,打包后配置更清晰,也方便分享。
需要在
configuration.yaml
中添加
packages: !include_dir_named packages
,然后下载的或自己写的配置直接扔到配置目录下的
packages
文件夹即可。
这里需要说明一点,如果
antomations.yaml
中没有内容,而在包里面有自动化的内容,重启之后会出错,而脚本好像没这个问题,感觉是很奇怪的Bug,所以要先往
antomations.yaml
里面放至少一个自动化。
分享一个我参考网上代码修改的延时开关配置,需要修改
xiaomi_switch_one
为你自己的开关,保存为
.yaml
后缀放入
packages
。(需安装Custom UI,参考
上一篇
)
homeassistant:
customize:
input_boolean.alarm_clock:
friendly_name: 延时开关
sensor.relative_alarm_time:
friendly_name: 设定时间
custom_ui_state_card: state-card-custom-ui
extra_data_template: if (entities['switch.xiaomi_switch_one'].state === 'on') return '延时关闭时间'; else return '延时开启时间';
sensor:
- platform: template
sensors:
relative_alarm_time:
value_template: >
{% set relative_time = (states.input_number.alarmhour.state|float|multiply(60) + states.input_number.alarmminutes.state|float) + (now().hour|float|multiply(60) + now().minute|float) %}
{%- if relative_time > 1440 -%}
{{((relative_time-1920) |int |multiply(60)) | timestamp_custom("%H:%M")}}
{%- else -%}
{{((relative_time-480) |int |multiply(60)) | timestamp_custom("%H:%M")}}
{%- endif %}
unit_of_measurement: "min"
input_boolean:
alarm_clock:
initial: off
icon: mdi:timer
input_number:
alarmhour:
name: 小时
icon: mdi:timer
initial: 0
min: 0
max: 5
step: 1
alarmminutes:
name: 分钟
icon: mdi:timer
initial: 30
min: 0
max: 55
step: 1
group:
switch1:
name: 电扇
control: hidden
view: no
entities:
- switch.xiaomi_switch_one
- input_boolean.alarm_clock
- sensor.relative_alarm_time
- input_number.alarmhour
- input_number.alarmminutes
automation:
- alias: countdown time
initial_state: true
trigger:
platform: time
minutes: '/1'
seconds: 00
condition:
condition: and
conditions:
- condition: state
entity_id: input_boolean.alarm_clock
state: 'on'
- condition: template
value_template: '{{ (now().hour|float|multiply(60) + now().minute|float - 480 ) |multiply(60) | timestamp_custom("%H:%M") == states.sensor.relative_alarm_time.state }}'
action:
- service_template: >
{% if is_state('switch.xiaomi_switch_one', 'off') %}
switch.turn_on
{% else %}
switch.turn_off
{% endif %}
data:
entity_id: switch.xiaomi_switch_one
- service: homeassistant.turn_off
entity_id: input_boolean.alarm_clock
参考
https://bbs.hassbian.com/forum.php?mod=viewthread&tid=1806&highlight=%E5%BB%B6%E6%97%B6
https://community.home-assistant.io/t/solved-automation-in-package-not-working/24768
https://www.home-assistant.io/components/script/
https://www.hachina.io/docs/1848.html