에어컨을 적외선으로 직접 제어하는 것은 오래 전부터 생각해 왔는데, 이번에 한번 만들어 보았습니다. 물론, 굳이 이렇게까지 하지 않고 아래에 보듯이 간단하므로 리모콘으로 제어하면 되기는 합니다 :-)
온도는 29도가 넘고 습도가 80%가 넘을 때 장마 기간 평소 루틴
- 제습 운전으로 25도 설정
- 습도가 72%로 떨어지면 온도를 28도로 올린 후 2분 후 끄기
요즘 에어컨은 자동으로 송풍 운전 후 종료하지만 2004년 LG 휘센 모델(LPNC151BUA)인데 별도로 송풍 기능이 리모콘 버튼에 없어서(오리지널 리모콘 분실) 온도를 올리거나 실외기 작동이 멈춘 후 기다리다가 끄고 있습니다. 바로 이 부분을 자동화하고 싶은 것입니다.
참고로, 실외기 작동 LED에 빛 센서를 조합하신 분도 있었습니다.(https://blog.naver.com/PostView.naver?blogId=ohminy11&logNo=222422518082&parentCategoryNo=&categoryNo=7&viewDate=&isShowPopularPosts=true&from=search) 저도 일단 빛 센서는 주문했는데, 그냥 온도 올려서 하는 것이 더 간편해 보이기는 합니다. 혹은 두꺼비집에 클램프로 연결하는 IoT CT 전력량계를 연동할 수도 있습니다. 예를 들면, 소비 전력이 1kWh이하로 감소한 후 증가하면 곧 바로 끄기를 통해 충분한 시간 동안 송풍을 할 수 있겠습니다.
여담이지만 벌써 20년이 다 되어 가네요. 몇 년 전에 한번 캐패시터(복합콘덴서)가 고장나서 DIY 수리한 적은 있습니다. 증상은 어느 날 갑자기 실외기 운전 시 크게 딸깍하던 소리가 사라지고 송풍만 되었습니다. 실외기를 뜯어서 부품 확인한 후 "에어컨 복합콘덴서 6/45 370 400VAC"로 검색해서 교체했었습니다. 아니면 여름이라 밀려서 3주간 A/S를 기다릴 뻔 했었지요.
[참고한 블로그]
- 알리익스프레스의 Universal IR remote제품을 이용 - https://kwonkyo.tistory.com/516
- Esphome on a Tuya IR Remote Control blaster - Esphome on a Tuya IR Remote Control blaster - espthings.io
위에 링크한 기존 제품을 활용하고자 했는데, 갖고 있던 제품은 뜯어 보니까 ESP8266이 아니었습니다. 알리익스프레스에서 찾아봤더니 이제는 ESP8266으로 되어 있는 제품이 거의 없었습니다.
[하드웨어 준비]
다행히 ESP8266 보드와 적외선 송수신 보드는 이미 갖고 있어서 한번 만들어 보았습니다.
- D1(GPIO5) - 적외선 수신부 DAT핀
- D5(GPIO14) - 적외선 송신부 DAT핀
- D2(GPIO4) - Home Assistant에서 제어할 수 있는 LED 연결(220옴 저항)
참고로 어떤 USB 방식 D1 mini 보드는 알 수 없는 이유로 부트 모드로 진입이 안되는 경우가 있는데, 이 때에는 D3(GPIO0)를 GND에 연결한 후 USB를 꼽으면 됩니다.
기성품은 몇 m의 거리에서도 작동하는 반면, 위 송신기는 신호가 약하여 2미터 이내에서 작동합니다. 참고로 아래의 yaml에서 carrier_duty_percent가 50인데 100으로 바꾸면 작동이 안되었습니다(자세한 건 알아보지 않음).
[스크립트 준비]
일단 위와 같이 와이어로 연결만 하고 나면 프로그램은 짤 필요도 없이 아래 스크립트를 참조하면 됩니다. 물론 저도 위 블로그를 보고 연결한 후 스크립트도 참고 했습니다.
물론 그 전에 ESPHome 설치가 필요합니다. https://esphome.io/index.html
참고로 저 위에 있는 D1 mini보드는 뒤집어진 상태입니다. 보통은 다리를 보드 밑에 붙이는데 저는 위로 붙여서...
ESPHome을 위해 만든 irremocon.yaml 의 내용
esphome:
name: irremocon
esp8266:
board: d1_mini
# Enable logging
logger:
# Enable Home Assistant API
api:
password: ""
ota:
password: ""
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
domain: !secret domain
manual_ip:
# Set this to the IP of the ESP
static_ip: 192.168.0.77
# Set this to the IP address of the router. Often ends with .1
gateway: 192.168.0.1
# The subnet of the network. 255.255.255.0 works for most home networks.
subnet: 255.255.255.0
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "irremocon Fallback Hotspot"
password: !secret wifi_password
captive_portal:
# D1
remote_receiver:
pin:
number: GPIO5
inverted: true
mode: INPUT_PULLUP
tolerance: 55%
dump: lg #lg, all, raw
# D5
remote_transmitter:
pin: GPIO14
# Infrared remotes use a 50% carrier signal
carrier_duty_percent: 50%
# D2
output:
- platform: esp8266_pwm
id: esphome_ir1_led
pin:
number: GPIO4
inverted: false
light:
- platform: monochromatic
name: "White LED"
output: esphome_ir1_led
id: light_led
sensor:
- platform: homeassistant
entity_id: sensor.a4c1383321fe_temperature
id: room_temperature
climate:
- platform: climate_ir_lg
name: "Living Room AC"
sensor: room_temperature
switch:
- platform: template
name: Raw_0 Power
turn_on_action:
- remote_transmitter.transmit_raw:
carrier_frequency: 38kHz
code: [9039, -4416, 627, -531, 599, -1620, 627, -1620, 626, -530, 599, -531, 599, -531, 598, -533, 595, -1628, 618, -536, 593, -1652, 594, -1653, 594, -538, 592, -1653, 594, -536, 594, -1652, 595, -536, 593, -1653, 594, -537, 594, -536, 593, -537, 593, -537, 593, -537, 593, -537, 593, -1653, 594, -537, 593, -1653, 594, -1653, 594, -1652, 594, -1653, 594, -1654, 593, -1653, 594, -537, 593]
- platform: template
name: Raw_1 Dry Mode
turn_on_action:
- remote_transmitter.transmit_raw:
carrier_frequency: 38kHz
code: [9064, -4391, 652, -504, 626, -1594, 653, -1594, 652, -504, 625, -505, 624, -506, 623, -508, 620, -1602, 644, -511, 617, -1628, 618, -1629, 618, -513, 617, -1629, 617, -513, 617, -1629, 618, -513, 617, -1629, 618, -513, 617, -513, 617, -1629, 618, -512, 617, -513, 617, -513, 618, -1629, 617, -513, 617, -1629, 617, -1630, 618, -513, 617, -1629, 617, -1629, 618, -1629, 618, -512, 618]
- platform: template
name: Raw_2 Plazma
turn_on_action:
- remote_transmitter.transmit_raw:
carrier_frequency: 38kHz
code: [9064, -4390, 654, -503, 626, -1593, 653, -1594, 653, -503, 627, -503, 626, -504, 625, -505, 623, -1598, 647, -509, 595, -1649, 596, -1651, 595, -538, 592, -1652, 594, -537, 594, -1652, 594, -537, 593, -533, 597, -536, 594, -1652, 594,-1653, 594, -537, 593, -536, 594, -536, 593, -1653, 594, -1653, 594, -1652, 594, -537, 593, -537, 594, -1652, 594, -1652, 594, -1653, 594, -537, 593]
- platform: template
name: Raw_3 Up
turn_on_action:
- remote_transmitter.transmit_raw:
carrier_frequency: 38kHz
code: [9065, -4389, 655, -503, 626, -1592, 655, -1592, 654, -503, 627, -503, 627, -503, 627, -503, 626, -1594, 651, -506, 623, -1598, 647, -1601, 644, -511, 593, -1652, 594, -537, 593, -1653, 594, -537, 593, -537, 593, -1653, 594, -1652, 594,-537, 593, -1653, 594, -537, 593, -537, 593, -1653, 594, -1652, 594, -537, 593, -537, 594, -1652, 594, -537, 593, -1653, 594, -1652, 594, -537, 593]
- platform: template
name: Raw_4 Down
turn_on_action:
- remote_transmitter.transmit_raw:
carrier_frequency: 38kHz
code: [9064, -4389, 655, -503, 627, -1591, 655, -1592, 654, -504, 626, -504, 626, -503, 626, -504, 626, -1594, 651, -506, 623, -1598, 646, -1602, 619, -536, 593, -1652, 594, -538, 592, -1653, 594, -537, 593, -1653, 594, -1653, 594, -1653, 593, -537, 594, -1652, 594, -537, 593, -537, 593, -1653, 594, -537, 593, -537, 593, -536, 593, -1655, 592, -537, 593, -1653, 594, -1653, 594, -537, 593]
아래에 있는 remote_transmitter.transmit_raw 명령들은 제가 갖고 있는 리모콘으로 작동시켜서 수신(esphome logs irremocon.yaml) 한 내용입니다.
- remote_receiver와 remote_transmitter의 내용은 일단 바꾸지 않는 것고 테스트하는 것이 좋습니다.
- dump: lg #lg, all, raw에서 raw로 바꾸면 갖고 있는 리모콘의 코드 값들을 확인할 수 있으며, 로그에서는 2줄로 나뉘더라도 숫자 끝에 콤마가 있다면 한 줄로 합쳐서 code: [ ]에 넣어주면 됩니다.
- 저는 room_temperature에 Home Assistant의 다른 센서인 sensor.a4c1383321fe_temperature를 매핑시켰습니다. 거실에 있는 샤오미 블루투스 온도계입니다.
raw로 하는 것은 잘 작동하고 있는데, lg로 하는 것(아래 참조)은 일단 잘 안되었습니다.
- platform: template
name: LG Cold Mode
turn_on_action:
- remote_transmitter.transmit_lg:
data: 0x656AF14E # Cold button
nbits: 32
[홈어시스턴트에서 제어하기]
저희 에어컨의 경우에는 온도 설정이 작동이 안되고 15도로 리셋되어 나옵니다.
어쩔 수 없이 아래와 같이 Up 버튼을 10번 누르는? 혹은 켤 때 Raw_1 Power로 켜면 기존 설정 온도가 덮어 써지지 않았습니다. 하지만 그 전 상태가 얼마인지 모르니까 10번 누르는 무식한 방법이 더 확실할 지도 모르겠네요.
켤 때 사용하는 스크립트입니다.
Set HVAC mode에서는 dry 즉 제습 모드를 선택합니다. 공기 정화(플라즈마) 기능도 켭니다.
끌 때 사용하는 스크립트입니다.
위 대기 코드에는 내부적으로 15분 동안 대기하다가 습도가 내려오지 않으면(혹은 처음부터 습도가 그 보다 낮았다면) 그냥 꺼지도록 하여 필요 이상의 전기를 쓰지 않도록 했습니다.
이제 자동화 쪽에 가서 온도와 습도 조건을 달고 위 스크립트들을 호출하면 됩니다. 잘 작동하네요.~
[추가 작업]
A0핀에 연결할 광센서 부품을 추가했습니다. 목적은 "실외기" 작동 LED를 감지하려는 것입니다. 실외기 작동 중에 전원이 꺼지면 습한 상태가 되어서 나중에 켤 때 냄새가 더 나는 것을 방지하기 위합입니다. 지금은 없지만 IoT 무선 스위치를 추가하여 켜기/냉방/제습/끄기를 할 수 있게 하면 좋을 것 같네요.
ESP8266의 A0 입력은 0~1V로 들어온다고 합니다. 꺼져 있을 때 0.03V가량 나오고 있습니다. 일단, 현재 잘 작동하지 않고 있습니다. 송풍은 온도 올려서 처리 중이라 별로 필요 없기도 합니다... => 7/27 체크해 보니까 스마트폰 손전등을 켜니까 3.5V가량 나오고 약간 어두운 형광등에서는 0.2V만 나옵니다. 냉장고의 LED가 빛이 약해서 잘 인지하지 못하는 것으로 보입니다.
sensor:
- platform: adc
pin: A0
name: "Outdoor Unit Operation"
filters:
- multiply: 3.3
id: outdoor_operation
binary_sensor:
- platform: analog_threshold
name: "On operation"
sensor_id: outdoor_operation
threshold: 0.5
위 광센서를 쓰기 위해 만능기판에 옮기고 에어컨에 부착(?)했습니다. 실외기 LED 위에 광센서를 투명매직테이프로 고정했습니다. 보드의 좌측은 그냥 LED이고 위에는 적외선 수신부, 아래에는 적외선 송신부가 위치합니다.
오늘(7/26) 특히 온도가 높아서 29.0도를 넘겨서 자동으로 5번 작동했습니다. 두 번은 수동으로 켰습니다. 그 결과 2kWh쯤 소비한 것 같네요. 서큘레이터를 계속 가동 중이고 어느 정도 온도에 적응해서 28.4도 이하로 내려오면 춥습니다...
'홈어시스턴트 IoT' 카테고리의 다른 글
미세먼지와 이산화탄소에 진심? Waveshare e-ink에 항상 표시 (0) | 2023.08.02 |
---|---|
8x8 적외선 온도계 GY-MCU8833의 ESPHome 커스텀 센서 연동 (0) | 2023.07.23 |
가정 내 소비전력 모니터링 - 시하스 PMM-300-Z 지그비 (0) | 2023.07.05 |
Xiaomi Gateway 3 최신 펌웨어(v1.5.5.xxx) 홈어시스턴트 통합 주의 (0) | 2023.06.25 |
레인지후드 자동화 - 열화상센서 온도 활용, 홈어시스턴트(HA) (0) | 2023.05.15 |