LG에어컨 Iot 에어컨으로 만들기


안녕하세요 라이프온룸 이지 뭐야 빠끄 ㅋㅋ 

저번 시간에 이어서 여름맡이 집밬에서 에어컨 켜기 DIY를 이어가도록 하겠습니다. ㅎㅎ 

저번 시간에 IR 라이브러리 lirc에 대해서 열띤 설명을 했었죠 .. 그래서 제가 쓰는 LG 에어컨 리모컨을 irrecord로 등록하려고 하는데 .. IR 신호가 단발성이더라고요 …. 그래서 conf 파일을 만드는게 불가능 했습니다…. 미친듯이 눌러도 “.”이 안늘어 나요 ㅜㅜ …

LG Remote Controller

망함이라고 생각하는 순간 pigpio 라이브러리 에서 제공하는 예제 덕택에 살아 났습니다. 

저의 썸머 라이프의 은인 pigpio 어떻게 사용하는지 알아 볼게요 !! ㅎㅎ

1. pigpio 사용법

아래 URL에 보면 IR Record and Playback 이라는 예제를 다운 받을 수 있는데요 이 예제를 이용하면 정말 쉽게 IR 신호를 받아서 Transmitter를 통해 내보낼 수 있습니다. 

http://abyz.me.uk/rpi/pigpio/examples.html

다만 그전에 pigpio 데몬과 Python 라이브러리를 설치해줘야 해요 ! 아래 명령어로 설치 하시면 됩니다. 

sudo apt-get install pigpio
# 가상환경 Enable 후 
pip install pigpio
#pigpio daemon 실행 
sudo pigpiod

명령어를 다 입력 했으면 이제 다운로드한 Python 코드로 IR 신호를 Recording 해 볼게요 아래와 같이 입력해주면 됩니다. 

python irrp.py -r -g18 -fir-codes 1 2 3 4

-r은 IR Receiver 입니다. -g18 은 GPIO 18번(IR Receiver pin 번호)이라는 의미구요 -fir-codes 는 Recording 한 데이터를 ir-codes 라는 파일에 저장 하라는 의미입니다. 그 뒤에 나오는 숫자는 Recording 되는 IR 신호의 이름이에요! 문자열을 입력해도 상관 없습니다. 

실행을 시키면 등록하고 싶은 리모컨 버튼을 누르라고 하고 버튼을 누르면 확인차 한번 더 누르라고 합니다. 이렇게 버튼 당 두번만 누르면 등록 끝이에요 …. 아 이 좋은 걸 이제 알았다니 .. ㅜㅜ 

다만 에어컨 리모컨의 경우 리모컨이 꺼진 상태에서 전원 버튼을  누를때와 켜진 상태에서 누를때, IR 값이 달라지는 것 같더라구요! 즉 동일한 버튼이지만 에어컨을 조작하려는 기능에 따라 IR 값이 전부 다른 것 같습니다. 이 점 참고 하셔서 작업해야 할 것 같아요 

여튼 이 IR 신호를 Play 하려면 아래 명령어를 입력해 보세요 

python irrp.py -p -g22 -fir-codes 1

이 명령어는 ir-codes 파일의 1번 IR Signal을 발생 시키라는 의미입니다. 저의 경우엔 1번이 에어컨 On 이고 2번이 에어콘 Off 였어요. 이렇게 하면 실제 에어컨이 켜지게 됩니다. 

2. fauxmo 와 연동 

아래 프로젝트에 IR 코드를 추가 해볼게요 ㅎㅎ 물론 여러분이 볼때 쯤엔 이미 코드가 포함되어 있겠지만요 

https://github.com/hog225/echowemoclient

우선 건드린 파일은 세개입니다. 

  • gpioControl.py
  • irlib.py
  • example-minimal.py

어떻게 바뀌었냐면요 

gpioControl.py 에 IR 에 사용되는 GPIO 포트를 정의해 줬구요

IR_R = 18
IR_S = 22

irlib.py 는 irrp.py를 복사해서 gpioControl 를 import 하여 수정해줬습니다. 코드를 다운로드 한 뒤 원본 파일과 비교해 보세요 !

example-minimal.py Aircon 이라는 Device 를 추가해주고 device_handler 에 Alexa 로 부터 명령이 들어 왔을 때 처리해 주는 루틴을 추가해 줬습니다. 

import irlib as ir
# ------------ Device Name -----------------
COMPUTER = 'Desktop'
#(추가된 부분)
AIRCON = 'Aircon'
# ------------------IR BUTTON(추가된 부분)----------------------
IR_BUTTON_FILE = "ir-codes"
AIRCON_ON = 1
AIRCON_OFF = 2
class device_handler(debounce_handler):
    """Publishes the on/off state requested,
       and the IP address of the Echo making the request.
    """
    # Device
    TRIGGERS = {COMPUTER: 51999, AIRCON: 52000}
    def act(self, client_address, state, name):
        print "State", state, "on ", name, "from client @"
        # "Desktop" 에 관한 명령이 Echo dot 으로 들어오면 처리해 주는 부분
        if name == COMPUTER:
            if state == True:
                tf.bt_q.put_nowait('True')
            elif state == False:
                tf.publishMSG(BROKER_IP, BROKER_PORT, MQ_TOPIC, 'Off')        
    # aircon control 추가된 부분----------------------
        elif name == AIRCON:
            if state == True:
                ir.sendIRSignal(IR_BUTTON_FILE, AIRCON_ON)
            elif state == False:
                ir.sendIRSignal(IR_BUTTON_FILE, AIRCON_OFF)
        return True

 

 

이렇게 한 뒤 가상환경을 Enable 하고 ./start.sh 로 코드를 실행시켜 보세요 ! 그런뒤 알렉사에게 외칩니다. 

Alexa! find connected devices

요렇게 하면 aircon이라는 Device를 찾을 거에요

그런 뒤 외쳐줍니다. 

Alexa! turn on aircon

그러면 에어컨이 켜집니다. 

이렇게 Device를 Alexa에 등록하면 Alexa APP을 이용해 집밬에서도 휴대폰으로 미리 에어컨을 켜고 끌 수 있습니다. 작년 여름에 집에 들어오면 너무 더워서 짜증 났는데 ㅜㅜ 이젠 그럴 걱정좀 덜었내요 ㅎㅎ 

혹시 애완동물이 있으시거나 집이 너무 습해지신 다거나 집에 들어 왔을 때 쾌적한 환경을 원하시는 분들은 이 포스팅을 참조 하셔서 스마트한 여름 라이프 보내세요~~ 

Project Code

https://github.com/hog225/echowemoclient

You may also like...

4 Responses

  1. 상아 댓글:

    적외선 송출하는 거 애 먹고 있었는데, 덕분에 스마트iot 프로젝트 잘 끝낼 수 있었어요~! 유익한 정보 감사합니다:)

  2. 조인현 댓글:

    질문을 해도 되는지 모르겠습니다.
    위 내용중에서 ” IR 신호가 단발성이더라고요 …”에서 단발성이 무었을 의미하는지 궁금합니다.
    요즘 에스원 리모컨으로 irrecord로 conf파일을 만드는데 만들어지지 않아서 고생하고 있어서 질문드리는 겁니다.
    좋은 답변 기다리겠습니다.

    • 호그 댓글:

      리모컨을 꾹 눌렀을 때 IR 신호가 계속 나가는 리모컨이 있고 그렇지 않은 리모컨이 있습니다. LG 리모컨의 경우에는 꾹눌렀을때 IR 신호가 한번만 나가고 추가로 나가질 않더군요 그래서 단발성이라는 표현을 썼습니다. irrecord의 경우 인식률이 별로 좋지 못한것 같습니다…. 그래서 저도 이렇게 한번씩 눌러서 하다간 날 샐꺼 같아서 그냥 다른 라이브러리로 작업 했습니다.