IoT

삼성 에어컨 IR 리턴 상태값 반영하기 (하트IR / tasmota)

ㅋㅋ잠자 2022. 8. 19. 00:26
반응형

안녕하세요? 도정진입니다.

 

이때까지 에어컨 켜짐 꺼짐을 도어센서로 감지하고 있었는데.. 이게 실은 무풍모드로 많이 쓰다보니 감지가 잘 안되네요.

그래서 생각을 해보다가 이전부터 좀 묵혀오던게 있었는데..

 

에어컨 리모컨으로 값을 보내면 에어컨에서 리턴이 오는 점이였습니다.

 

이번 기회로 패킷을 분석을 해보았는데 온도나 이런 값들은 맞지가 않고 ON/OFF 정보는 정확하게 맞네요.

그래서 바로 작성해서 테스트 해보았습니다.

 

1. 하트IR 사용기

https://blog.djjproject.com/672

 

2. MQTT 설정

아래와 같이 웹 UI 에서 설정이 가능합니다.

실은 패킷 보내는 것도 MQTT로 해보려고 했는데, 실은 homeassistant yaml 문법이 잘 이해가 되지 않아서 현재는 curl 로 http 로 요청을 보내는 상태입니다. 추후에 한번 생각을 해봐야겠습니다.

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

이에 따른 자동화는 아래와 같습니다.

data_template:
  temp: '{{ states("sensor.thermo_temperature_setted_value") }}'
service_template: >
  {% set cur_temp = (states('sensor.zhimi_airpurifier_ma2_temperature') | float)
  %} {% set target_temp = (states('sensor.thermo_temperature_setted_value') |
  float) %} {% if cur_temp <= target_temp %}
    shell_command.tasmota_aircon_30
  {% else %}
    shell_command.tasmota_aircon_set
  {% endif %}

tasmota_aircon_set 에 "Temp": {{temp}} 이 값을 받게 되어 있는데 자동화에서 temp: 변수가 지정되어 전달 됩니다.

 

3. 데이타 확인

MQTT Explorer 로 데이타를 한번 확인해봅니다.

http://mqtt-explorer.com/

에어컨을 껏을 때

{
  "IrReceived": {
    "Protocol": "SAMSUNG_AC",
    "Bits": 168,
    "Data": "0x0x02B20F000000C001D20F000000000102FF718011C0",
    "Repeat": 0,
    "IRHVAC": {
      "Vendor": "SAMSUNG_AC",
      "Model": -1,
      "Power": "Off",
      "Mode": "Off",
      "Celsius": "On",
      "Temp": 16,
      "FanSpeed": "Auto",
      "SwingV": "Off",
      "SwingH": "Off",
      "Quiet": "Off",
      "Turbo": "Off",
      "Econo": "Off",
      "Light": "Off",
      "Filter": "Off",
      "Clean": "Off",
      "Beep": "Off",
      "Sleep": -1
    }
  }
}

에어컨을 28도로 켰을 때

{
  "IrReceived": {
    "Protocol": "SAMSUNG_AC",
    "Bits": 168,
    "Data": "0x0x02920F000000F001D20F0000000001E2FE718011F0",
    "Repeat": 0,
    "IRHVAC": {
      "Vendor": "SAMSUNG_AC",
      "Model": -1,
      "Power": "On",
      "Mode": "Auto",
      "Celsius": "On",
      "Temp": 16,
      "FanSpeed": "Auto",
      "SwingV": "Off",
      "SwingH": "Off",
      "Quiet": "Off",
      "Turbo": "Off",
      "Econo": "Off",
      "Light": "Off",
      "Filter": "Off",
      "Clean": "Off",
      "Beep": "Off",
      "Sleep": -1
    }
  }
}

즉 저기서 Power 정보 말고는 맞는게 없습니다.

그럼 센서를 하나 생성해서 tele/tasmota_59B492/result 를 보면 되겠네요.

 

4. 센서 만들기

HomeAssistant 에서 아래와 같이 센서를 작성합니다.

- platform: mqtt
  name: ir_aircon_state
  state_topic: "tele/tasmota_59B492/RESULT"
  value_template: >-
    {{ value_json.IrReceived.IRHVAC.Power.lower() }}

 

5. generic climate 에 연동

  - 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

이 스위치를 보기 때문에 스위치 상태 value_template 를 변경해야합니다.

- platform: template
  switches:
    air_thermo_temp_switch:
      value_template: '{{ is_state(''sensor.ir_aircon_state'',''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

 

6. 연동 결과

아래 연동결과는 무풍모드에서는 강제 건조가 되지 않아서 (버그인거 같습니다.)

무풍모드에서는 그냥 에어컨이 꺼져서 냄새가 발생해서... 결국 일반 냉방 모드로 전환한 다음 종료하게 되어 있습니다.

그럼 자동 건조가 되더라구요.

그래서 반응이 조금 늦습니다. 켤때는 즉각이네요.

 

감사합니다. 마치겠습니다.

반응형