본문 바로가기
서버/리눅스 서버

HomeAssistant 천정 에어컨 온도 정확하게 맞추기 자동화

by 도정진 ㅋㅋ잠자 2020. 7. 12.

안녕하세요? 


하기 랜이님 글을 보면서 확신을 갖게 되어 세팅을 해보았습니다.


https://cafe.naver.com/koreassistant/2076


저 같은 경우, 에어컨이 천정에어컨인데 그리고 특수하게 동향에 위치한 방이라.. 


27도를 맞춰놓아도 24도 까지 내려가버리는 문제가 있었습니다. 이 문제는 랜이님이 언급한 대로, 실제로 대류 현상때문에 위 아래 공기가 차이가 나버려서 생기는 문제였습니다.


조금 더 쾌적한 상황을 만들기 위해 아래의 생각을 자동화로 작성해 보았습니다.


1. 정속형이 아니기 때문에 에어컨을 끄지 않아야한다.

2. 설정한 온도가 되면 송풍 모드로 전환한다.

3. 설정한 온도 보다 높게 될 경우, 현재 값을 반영하여 재 세팅을 한다.


이런식의 생각을 아래와 같이 구현해 보았습니다.


일단은 하기의 글을 이전에 작성했는데요. 이것과 이어지는 부분입니다.


https://djjproject.tistory.com/672





1. 만들어야 할 구성요소


0. IR 쉘 커맨드


shell_command:

  tasmota_aircon_on: 'curl -G "http://192.168.0.64/cm" --data-urlencode "cmnd=IRhvac {"Vendor":"SAMSUNG_AC", "Power":"On","Mode":"Cool","FanSpeed":"Auto","Temp":28}"'

  tasmota_aircon_off: 'curl -G "http://192.168.0.64/cm" --data-urlencode "cmnd=IRhvac {"Vendor":"SAMSUNG_AC", "Power":"Off"}"'

  tasmota_aircon_set: 'curl -G "http://192.168.0.64/cm" --data-urlencode "cmnd=IRhvac {"Vendor":"SAMSUNG_AC", "Power":"On","Mode":"Cool","FanSpeed":"Auto","Temp":{{temp}}}"'

  tasmota_aircon_dehumi: 'curl -G "http://192.168.0.64/cm" --data-urlencode "cmnd=IRhvac {"Vendor":"SAMSUNG_AC", "Power":"On", "Mode":"Dry", "Temp":"28", "FanSpeed":"Auto"}"'

  tasmota_aircon_fan: 'curl -G "http://192.168.0.64/cm" --data-urlencode "cmnd=IRhvac {"Vendor":"SAMSUNG_AC", "Power":"On", "Mode":"Fan", "FanSpeed":"3"}"'

  tasmota_aircon_fan_1: 'curl -G "http://192.168.0.64/cm" --data-urlencode "cmnd=IRhvac {"Vendor":"SAMSUNG_AC", "Power":"On", "Mode":"Fan", "FanSpeed":"1"}"'

  tasmota_aircon_fan_2: 'curl -G "http://192.168.0.64/cm" --data-urlencode "cmnd=IRhvac {"Vendor":"SAMSUNG_AC", "Power":"On", "Mode":"Fan", "FanSpeed":"2"}"'

  tasmota_aircon_fan_3: 'curl -G "http://192.168.0.64/cm" --data-urlencode "cmnd=IRhvac {"Vendor":"SAMSUNG_AC", "Power":"On", "Mode":"Fan", "FanSpeed":"3"}"'


1. generic thermostat


  - platform: generic_thermostat

    name: "Air_Conditioner"

    heater: switch.air_thermo_temp_switch

    target_sensor: sensor.0x00158d0003cd1d89_temperature

    ac_mode: True

    cold_tolerance: 0

    hot_tolerance: 1

    min_temp: 18

    max_temp: 30

    target_temp: 28

    initial_hvac_mode: "off"

    precision: 1

    away_temp: 30


2. 써모스탯의 온도 설정값을 트래킹하는 센서


- platform: template

  sensors:

    thermo_temperature_setted_value:

      value_template: '{{ state_attr(''climate.air_conditioner'', ''temperature'') | int }}'

      unit_of_measurement: °C

      device_class: temperature


3. 써모스탯의 파워를 켯을 때를 위한 더미 스위치


값이 변해야 함으로 그냥 인풋 풀린의 값을 돌리도록 설정했습니다.


- platform: template

  switches:

    air_thermo_temp_switch:

      value_template: "{{ is_state('binary_sensor.0x00158d0003e74169_contact','on') }}"

      turn_on:

        service: input_boolean.turn_on

        data:

          entity_id: input_boolean.air_state

      turn_off:

        service: input_boolean.turn_off

        data:

          entity_id: input_boolean.air_state


4. 에어컨 날개에 붙어있는 도어센서의 바이너리 센서


직비라서 그냥 올라옵니다.



5. 도어센서를 value 로 하여, IR 시그널을 보내는 스위치


- platform: template

  switches:

    airconditioner:

      friendly_name: 에어컨

      value_template: '{{ is_state(''binary_sensor.0x00158d0003e74169_contact'',''on'') }}'

      turn_on:

        service: shell_command.tasmota_aircon_on

      turn_off:

        service: shell_command.tasmota_aircon_off

      icon_template: "{% if is_state('binary_sensor.0x00158d0003e74169_contact', 'on') %}\n\

        \  mdi:air-conditioner-on\n{% else %}\n  mdi:air-conditioner\n{% endif %}"

    air_dehumi_mode:

      value_template: '{{ is_state(''binary_sensor.0x00158d0003e74169_contact'',''on'') }}'

      turn_on:

        service: shell_command.tasmota_aircon_dehumi

      turn_off:

        service: shell_command.tasmota_aircon_dehumi

    air_fan_mode:

      value_template: '{{ is_state(''binary_sensor.0x00158d0003e74169_contact'',''on'') }}'

      turn_on:

        service: shell_command.tasmota_aircon_fan

      turn_off:

        service: shell_command.tasmota_aircon_fan

    air_fan_speed_1:

      value_template: '{{ is_state(''binary_sensor.0x00158d0003e74169_contact'',''on'') }}'

      turn_on:

        service: shell_command.tasmota_aircon_fan_1

      turn_off:

        service: shell_command.tasmota_aircon_fan_1


6. 써모스탯의 파워를 트리거하여 에어컨을 켜고 끄는 IR 자동화


기본적으로 기기를 켜면 IR 로 28도를 설정하기 때문에


써모스탯의 온도 설정값도 28도로 초기화 시켜 줍니다.


- id: '1592761882988'

  alias: thermo_aircon_turnon

  description: ''

  trigger:

  - entity_id: climate.air_conditioner

    platform: state

    to: cool

  condition: []

  action:

  - data: {}

    service: shell_command.tasmota_aircon_on

  - data:

      temperature: 28

    entity_id: climate.air_conditioner

    service: climate.set_temperature


- id: 612c29343cf24eb0b304bbb56d40a816

  alias: thermo_aircon_turnoff

  description: ''

  trigger:

  - entity_id: climate.air_conditioner

    platform: state

    to: 'off'

  condition: []

  action:

  - data: {}

    service: shell_command.tasmota_aircon_off


7. 써모스탯의 파워가 켜져 있으면, 2번의 센서를 기반으로 온도를 설정하는 IR 자동화


이는 써모스탯의 온도를 변경하면 해당 온도값이 IR 로 전송 되는 자동화 입니다.


- id: ef3f852e00524592b13cce5c4a9af935

  alias: thermo_aircon_temp_set

  description: ''

  trigger:

  - entity_id: sensor.thermo_temperature_setted_value

    platform: state

  condition:

  - condition: and

    conditions:

    - condition: state

      entity_id: binary_sensor.0x00158d0003e74169_contact

      state: 'on'

  action:

  - data_template:

      temp: '{{ states("sensor.thermo_temperature_setted_value") }}'

    service: shell_command.tasmota_aircon_set


8. 2번의 센서와 공기청정기 온도 센서를 이용하여 송풍 모드 / 6번을 트리거 하는 자동화


- id: '1594459894657'

  alias: aircon accurate temperature set to fan mode

  description: ''

  trigger:

  - platform: template

    value_template: '{{ (states("sensor.xiaomi_airpurifier_temp") | float)

      < (states("sensor.thermo_temperature_setted_value") | float) }}'

  condition:

  - condition: state

    entity_id: binary_sensor.0x00158d0003e74169_contact

    state: 'on'

  action:

  - data: {}

    entity_id: switch.air_fan_speed_1

    service: switch.turn_on


- id: '1594460084332'
  alias: aircon accurate temperature set to cool mode
  description: ''
  trigger:
  - platform: template
    value_template: '{{ (states("sensor.xiaomi_airpurifier_temp") | float)
      > (states("sensor.thermo_temperature_setted_value") | float) }}'
  condition:
  - condition: state
    entity_id: binary_sensor.0x00158d0003e74169_contact
    state: 'on'
  action:
  - data: {}
    entity_id: automation.thermo_aircon_temp_30 <-- 상기에 설정한 자동화를 재활용하는 부분입니다.
    service: automation.trigger





2. 자동화 오류 해결


혹시 설정한 온도값이 28도 / 현재 온도가 26도로 송풍모드로 바뀌어야 하는 경우,


이미 상기 1번의 8번 자동화가 트리거가 한참 이전에 걸린 상태이기 때문에 다시 발동되지 않는 문제가 있습니다.


말로 설명하기가 힘든데.. 중복 트리가가 안된다는 이야기 입니다.


예로써 온도값이 변할때마다 트리거가 걸리면 27도 설정 후, 실내온도가 26.9 26.8 등으로 변하면 계속적으로 IR 시그널이 전송되어 에어컨에서 띵띵 소리가 날텐데.. 실제로는 한번 트리거 된 후, 경계값으로 오지 않으면 트리거가 걸리지 않습니다.


이런 문제가 에어컨을 방금 켰을 경우 생길 수가 있는데... 상기 6번 트리거에 service_template 를 추가하여 해결을 합니다.


- id: '1592761882988'

  alias: thermo_aircon_turnon

  description: ''

  trigger:

  - entity_id: climate.air_conditioner

    platform: state

    to: cool

  condition: []

  action:

  - data: {}

    service: shell_command.tasmota_aircon_on

  - data:

      temperature: 28

    entity_id: climate.air_conditioner

    service: climate.set_temperature

  - delay: '00:00:01'

  - service_template: >

      {% set cur_temp = (states('sensor.xiaomi_airpurifier_temp') | float) %}

      {% set target_temp = (states('sensor.thermo_temperature_setted_value') | float) %}

      {% if cur_temp < target_temp %}

        shell_command.tasmota_aircon_fan_1

      {% else %}

        automation.trigger

        entity_id: automation.thermo_aircon_temp_30

      {% endif %}


켜는 순간에 냉방 / 송풍을 한번 설정해 주는 부분입니다.


특히 자동화를 작성할 때, " ' 에 영향을 많이 받습니다.


상기 service_template 를 작성하면서 따옴표 쌍따옴표 주의하시면서 작성을 해야합니다.





3. 결과물


본래 처음에는 공기청정기 센서로 하지 않고, 직비 샤오미 온도 센서로 작업하게 되었습니다.


샤오미 온도센서를 기반으로 할때 변화는 아래와 같습니다.



샤오미 온도센서가 방 안쪽에, 공기청정기가 창가쪽으로 있기 때문에 해가 뜨니 온도가 올라감을 알 수 있습니다.


그래서 지금은 샤오미 온도센서를 기반으로 에어컨이 컨트롤 되도록 수정을 해두었습니다.


27도 근방에 머무는 것을 확인 할 수 있습니다.


다만, 27도로 세팅했을 때, 송풍모드로 바뀌더라도, 냉기가 일정량 남아 있어서 26.4도 정도로 내려갔다가 27도로 되면 또 바로 냉기를 땡기지 않기 때문에 


대략 범위가 26.5 ~ 27.3 도로 유지가 됩니다.


인버터형이라 전원을 내리기 보다 송풍 / 냉방을 왔다갔다 하는게 이상적이기 때문에 상기와 같이 세팅을 하게 되었네요.


Simple is Best 라고 제네릭 써모스탯과 제습모드 송풍모드 버튼을 추가해서 아래와같이 사용하고 있습니다.



감사합니다.



댓글0