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

 找回密码
 立即注册
查看: 4691|回复: 5

[求助] 空调自动化代码遭遇的代码问题

[复制链接]

35

主题

533

帖子

2889

积分

金牌会员

Rank: 6Rank: 6

积分
2889
金钱
2356
HASS币
0
发表于 2018-11-6 23:51:48 | 显示全部楼层 |阅读模式
本帖最后由 debitus 于 2018-11-6 23:52 编辑

因为希望遥控器和HA可以同时控制空调,并且,如果是通过遥控器打开/关闭空调,可以把状态同步给HA。
后面这种情况,通过论坛里大神的方法,使用了一个小米的门磁解决了。
夏天开冷风,一切正常。
但冬天开暖风的时候,机器要预热,然后空调的盖板会【先打开再复位到初始的负角度位置】等待大概2分钟多,预热完毕后再重新打开。
这样会导致门磁打开后,又检测到关闭,然后执行关闭代码。
请问各位大神,有什么好的解决方案吗?


下面是部分相关代码:
- alias: auto switch AC
  initial_state: True
  trigger:
    platform: state
    entity_id: input_boolean.ac_1, input_boolean.ac_2
  action:
    service_template: >
      {% if trigger.to_state.state == 'on' %}
        switch.turn_on
      {% elif trigger.to_state.state == 'off' %}
        switch.turn_off
      {% else %} #这里写不写else是不是并没有意义?
      {% endif %}
    data_template:
      entity_id: >
        {% if (trigger.entity_id == 'input_boolean.ac_1') and (states('sensor.temperature_158d00016fc23e') | float < 24) %} #用室温来判断开暖风还是冷风
          switch.ac_livingroom_warm
        {% elif (trigger.entity_id == 'input_boolean.ac_1') and (states('sensor.temperature_158d00016fc23e') | float >= 24) %}
          switch.ac_livingroom_cool
        {% elif (trigger.entity_id == 'input_boolean.ac_2') and (states('sensor.temperature_158d0001b1aceb') | float < 24) %}
          switch.ac_bedroom_warm
        {% elif (trigger.entity_id == 'input_boolean.ac_2') and (states('sensor.temperature_158d0001b1aceb') | float >= 24) %}
          switch.ac_bedroom_cool
        {% endif %}

回复

使用道具 举报

12

主题

243

帖子

1919

积分

论坛技术达人

积分
1919
金钱
1665
HASS币
40
发表于 2018-11-7 09:43:34 | 显示全部楼层
delay延迟可以解决
回复

使用道具 举报

35

主题

533

帖子

2889

积分

金牌会员

Rank: 6Rank: 6

积分
2889
金钱
2356
HASS币
0
 楼主| 发表于 2018-11-7 11:51:06 | 显示全部楼层
needs 发表于 2018-11-7 09:43
delay延迟可以解决

大神能否详细指导一下?
具体在哪里设置delay?

之前想到过不用这种简洁的写法。
直接判断trigger里面从on到off的for时长,大于2分半再继续下一步。
但这个方案有点笨。
回复

使用道具 举报

12

主题

243

帖子

1919

积分

论坛技术达人

积分
1919
金钱
1665
HASS币
40
发表于 2018-11-7 14:22:38 | 显示全部楼层
debitus 发表于 2018-11-7 11:51
大神能否详细指导一下?
具体在哪里设置delay?

放在if上面
回复

使用道具 举报

35

主题

533

帖子

2889

积分

金牌会员

Rank: 6Rank: 6

积分
2889
金钱
2356
HASS币
0
 楼主| 发表于 2018-11-7 14:28:16 | 显示全部楼层

好,我再研究一下。
感谢。
回复

使用道具 举报

35

主题

533

帖子

2889

积分

金牌会员

Rank: 6Rank: 6

积分
2889
金钱
2356
HASS币
0
 楼主| 发表于 2018-11-8 16:24:20 | 显示全部楼层
本帖最后由 debitus 于 2018-11-8 16:25 编辑

想到了这样的方法,还不知道是否可行。回家试试。先通过温度感应,判断是否执行了制热模式的代码,如果没有,则按照常规开关判断流程。
然后延时4分钟,再判断感应器是否始终是闭合状态超过了3分钟(200秒),如果超过了,则再次执行常规判断流程。
- alias: AC1_state_switch
  initial_state: True
  trigger:
    - platform: state
      entity_id: binary_sensor.door_window_sensor_158d000239f4e4
  action:
    - service_template: >
       {% if  (states('sensor.temperature_158d00016fc23e') | float >= 24) %}
         {% if (trigger.to_state.state == 'on') and (states('input_boolean.ac_1') == 'off') %}
            input_boolean.turn_on
         {% elif (trigger.to_state.state == 'off') and (states('input_boolean.ac_1') == 'on') %}
            input_boolean.turn_off
         {% else %}
         {% endif %}
       {% endif %}
      entity_id: input_boolean.ac_1
    - delay: 00:04:00 
    - service_template: >
       {% if as_timestamp(now()) - as_timestamp(states.binary_sensor.door_window_sensor_158d000239f4e4.last_changed) | float >= 200 %}
         {% if (trigger.to_state.state == 'on') and (states('input_boolean.ac_1') == 'off') %}
            input_boolean.turn_on
         {% elif (trigger.to_state.state == 'off') and (states('input_boolean.ac_1') == 'on') %}
            input_boolean.turn_off
         {% else %}
         {% endif %}
       {% endif %}
      entity_id: input_boolean.ac_1


回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-9-27 06:08 , Processed in 0.144815 second(s), 28 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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