[进阶教程]睡觉开空调需要定时功能HA没有?自己写一个,超级简单

  • Published2025-10-29 08:06:37

本帖最后由 Dreamray 于 2022-7-15 10:37 编辑

HAOS自带的Gree Climate集成没有定时功能,下面用自动化和timer集成实现一个:

首先定义一个input_number,用于在前端面板显示一个1-8(定时1-8小时)的数字slider:

input_number:

bedroom_ac_set_time_input_num:

name: 定时

mode: slider

min: 0

max: 8

step: 1

unit_of_measurement: 时

复制代码

再定义一个timer,用于倒计时:

timer:

bedroom_ac_set_time_timer:

name: 主卧空调定时倒计时

复制代码

我们需要的是在前端面板滑动input_number后,它的状态数值传递给timer,比如,滑动后为1,就把1传递给timer,让它倒计时1小时,为3,让timer倒计时3小时,automations.yaml里用以下代码实现:

- id: input_num_state_to_ac_timer

alias: input_num_state_to_ac_timer

initial_state: true

trigger:

- platform: state

entity_id: input_number.bedroom_ac_set_time_input_num

action:

- service: timer.start

target:

entity_id: timer.bedroom_ac_set_time_timer

data:

duration: "{{ (trigger.to_state.state | int * 3600) }}"

复制代码

解释:input_number状态的改变后触发action,action执行 把input_number改变后把数值传递给timer,timer接收到数值后乘以3600(因为time以秒为单位)作为自己的倒计时时间,,然后开启timer.

接下来设置timer倒计时走完后的action,即关闭空调:

- id: timer_finish_bedroom_ac_off

alias: timer_finish_bedroom_ac_off

initial_state: true

trigger:

- platform: event

event_type: timer.finished

event_data:

entity_id: timer.bedroom_ac_set_time_timer

action:

- service: climate.turn_off

entity_id: climate.bedroom1_ac

复制代码

最后把input_number加到前端面板空调控制的下边就行了。

20220622更新:有点不完美,input_number滑动后为零的时候应该取消定时,以上代码不会取消,而是会重复上一次的定时。解决方法只需把滑动后为0和滑动后为1-8的自动化分开即可,滑动后为0执行取消定时,滑动后为1-8还是像上边代码一样传递数值,

另外再增加一个空调关闭后,把input_number归零的自动化,再增加一个手动取消timer后input_number归零

这样就完美了。

我直接上传了修改后的yaml文件,climate.yaml 放到 \config\packages 即可。

登录/注册后可看大图

1.jpg (31.02 KB, 下载次数: 0)

下载附件

2022-6-22 09:38 上传

automations.yaml

(2.72 KB, 下载次数: 72)

2022-7-15 10:37 上传

点击文件名下载附件

climate.yaml

(247 Bytes, 下载次数: 67)

2022-7-15 10:37 上传

点击文件名下载附件