본문 바로가기
Hardware/Home Assistant

Home Assistant - ESPHome 연동

by lovey25 2020. 10. 29.

IoT, 스마트 가전 등등 이런 키워드로 깊이 들어가면 결국은 집안의 모든 가전기기를 묶어서 모니터링하고 컨트롤하는 홈오토메이션으로 귀결되기 때문에 저도 최근에 "Home Assistant(HA)"라는 오픈소스 홈오토메이션 솔루션에 발을 들이게 되었고 이것저것 눈이 보이는 건 다 연결하고 싶어서 부품들을 알아보고 있는 중입니다.

이전 포스팅에서 없는 실력에 이것저것 알아보며 힘겹게 ESP01 모듈을 활용해서 WiFi로 켜고 끌 수 있는 전등 스위치를 제작했었는데요. 웹소켓도 적용하고 타이머 기능도 넣어서 나름 쓸만한 정도가 되었다고 생각하고 한동안 유용하게 사용을 했었습니다.

 

ESP01 모듈로 만드는 IoT 웹서버 2.0 - 웹소켓, 타이머 적용

오늘은 기존 프로젝트의 업그레이 후기입니다. ESP01 모듈과 릴레이를 활용해서 거실에서 사용하는 보조등을 와이파이로 켜고 끌 수 있는 컨트롤러를 만들어 봤었는데요. ESP01 모듈로 만드는 IoT

kwonkyo.tistory.com

그런데 HA가 워낙 범용이라 그 활용 가능성은 정말 한계가 없다고 할 수 있는데요. 여기서 또 욕심이 제가 만든 WiFi 스위치를 HA에서 컨트롤할 수 있으면 좋겠다는 생각을 하게 되었습니다. 그런데 역시 세상은 넓고 능력자는 많습니다. ESPHome이라는 새로운 기술을 알게 되었는데요. 이름에서 알 수 있듯 ESP8266 같은 모듈을 컨트롤하는 펌웨어로 복잡한 코딩 없이 간단한 스크립트 언어로 IoT 기기를 만들어 낼 수 있습니다. 그리고 HA에서 Add-ons으로 설치할 수 있어서 HA에서 스위치 컨트롤은 물론이고 펌웨어 유지관리도 할 수 있는 엄청난 기능을 제공하고 있습니다.

그래서 오늘은 기존에 만들어 두었던 ESP8266-01 모듈의 전등 스위치에 ESPHome을 설치하고 HA와 연동하는 방법을 정리해 보겠습니다.

먼저 HA가 설치된 서버가 있어야 합니다. 혹시 HA가 준비되지 않으셨다면 아래 HA설치 글부터 확인해 주세요.

 

라즈베리파이에 Home Assistant 이미지로 설치 (공식 권장 설치법)

지난번에 라즈베리파이를 다양한 용도로 사용해 보려고 라즈베리파이 OS 깔려있는 상태에서 매뉴얼로 Home Assistant(HA) 설치를 했다가 "Supervisor"탭이 없는 걸 확인하고 좌절한 적이 있었습니다. (공

kwonkyo.tistory.com

ESPHome Add-on 설치

자 이제 HA에 관리자 계정으로 로그인하고 "Supervisor >> Add-on Store" 메뉴로 이동합니다.

검색창에 "esp"를 넣으면 ESPHome이라는 Add-on이 하나 검색되는데요. 눌러서 "Install" 버튼을 눌러서 설치를 해줍니다.

설치가 완료되면 이런 화면을 볼 수 있는데요 아래에 "START"를 누르고 잠시 기다려줍니다.

잠시 뒤 ESPHome이 실행되면 하단의 버튼이 위와 같이 바뀌고 ESPHome을 사용할 준비가 끝났습니다.

ESP8266 모듈에 ESPHome 펌웨어 업로드

ESPHome 펌웨어를 모듈에 업로드하는 방법은 2가지가 있습니다. UBS로 연결해서 보통 아두이노 스케치 업로드하듯 하는 방법이 있고 또 하나는 OTA로 무선으로 업로드하는 방법이 있습니다. 그런데 OTA업로드를 사용하기 위해서는 일단 최초에 한 번은 USB로 펌웨어를 업로드해주는 과정을 거쳐야 합니다.

제가 그전에 사용하고 있던 ESP01 모듈은 OTA 라이브러리가 포함된 펌웨어가 설치되어 있었지만 처음부터 OTA를 통한 업로드를 시도했을 때 정상적으로 동작하지 못했습니다. 이유는 잘 모르지만 그냥 첨엔 무조건 유선으로 펌웨어 올리는 게 속 편합니다.

ESP01 모듈과 같이 USB 브릿지가 없는 모델은 별도의 USB 연결 모듈을 통해서 연결해 주어야 하고 USB 포트가 달려있는 모델은 바로 연결해 주면 됩니다.

전 아두이노 우노에 보드에 붙여서 쓸 수 있도록 ESP01용 업로드 실드를 만들어서 쓰고 있었는데요. 이상하게 아두이노 우노 보드를 이용했을 때는 라즈베리파이가 저전압으로 멈추는 바람에 뭔가를 할 수가 없었습니다. 아마 제가 사용하고 있는 라즈베리파이 전원 아답타가 일반 핸드폰 충전기라서 전압이 5V 아래로 설정이 되어 있어서 그런 게 아닌가 싶습니다. 평소에도 저전압 경고가 많이 있었거든요. 라즈베리파이에 외부 전원도 연결해보고 했는데 해결이 안 돼서 이건 포기하고 USB브릿지를 다른 걸로 바꿨습니다.

USB-I2C 변환 모듈이 다행히 구매해둔 게 있었네요. 요걸로 연결하니까 라즈베리파이가 죽지는 않고 동작하네요. 아마 라즈베리 전용 아답터를 사용하면 이런 문제는 없지 않을까 싶네요.

이제 ESPHome 설정 페이지에서 "Open Web UI"로 이동해서 ESP장치를 추가합니다. 화면 우측 하단의 초록색 동그라미의 + 버튼을 클릭합니다.

Node Name은 ESP모듈에 부여하고 싶은 고유 이름을 지정하는 자리입니다. 전 그냥 test라고 했습니다.

그리고 디바이스의 종류를 지정해주어야 하는데 정말 다양한 모듈을 목록에서 선택할 수 있습니다. 가장 비슷한 타입을 선택하면 되는데 웬만하면 Generic ESP8266으로 커버될 것 같네요.

이렇게 하면 ESPHome UI에 새로 추가한 디바이스가 표시되는데요. test라는 이름이 추가되었습니다. 박스 윗면에 붉은색 줄이 있는데 연결되지 않았다는 표시입니다. 아직 펌웨어가 올라가지 않았으니 연결이 안 되겠죠. 제가 이미 만들어서 사용 중인 esp1 디바이스는 연결이 되어 있는 상태라서 박스 윗줄이 녹색임을 알 수 있습니다.

이제 우측 상단의 OTA라고 된 메뉴를 눌러서 펌웨어를 업로드할 방법을 선택해야 하는데 처음에는 유선 방식으로 해야 한다고 했는데요. ESP모듈이 연결된 USB가 나중에 꼽혔다면 ESPHome에서 디바이스를 인식하지 못하고 있을 겁니다. 이럴 땐 ESPHome 초기 설정 페이지에서 ESPHome Add-on을 재시작해줍니다. 그러면 ESP모듈이 연결된 USB를 선택할 수 있습니다.

그리고 앞에서 만들어둔 test 디바이스의 메뉴에서 "EDIT"를 눌러줍니다.

앞서 입력한 초기 설정값을 바탕으로 yaml파일이 만들어져 있는데요. 여기에 우리가 릴레이를 컨트롤할 핀의 기능을 추가해 줍니다. 6~13행이 추가된 코드인데, 한마디로 스위치라는 요소와 연결해서 눌려질 때마다 GPIO0핀의 상태를 HIGH, LOW로 왔다 갔다 하게 한다는 겁니다. 그리고 11행에 "inverted"라는 설정이 있는데 제가 사용하는 ESP01-realy모듈이 HIGH상태에서 릴레이가 ON이 아니라 OFF 상태가 돼서 로직을 뒤집어주기 위해서 추가되었습니다.

esphome:
  name: esp1
  platform: ESP8266
  board: esp01_1m

switch:
  # Button 1 / Relay 1st
  - platform: gpio
    name: ESP1 Button0"
    pin: GPIO0
    inverted: True
    id: button0
    icon: "mdi:lightbulb"

wifi:
  ssid: "SSID"
  password: "PASSWORD"

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esp1 Fallback Hotspot"
    password: "L3nxldzyfW2n"

captive_portal:

# Enable logging
logger:

# Enable Home Assistant API
api:
  password: "admin"

ota:
  password: "admin"
  port: "8266"

이제 모든 준비가 끝났습니다. 저장을 하고 "UPLOAD"를 클릭합니다. 처음에는 컴파일과 업로드에 약간 시간이 소요되는데 정상적으로 작업이 완료되면 아래와 같은 화면을 볼 수 있습니다.

이제 ESP모듈을 USB브릿지에서 제거하고 스위치의 원래 자리에 조립해줍니다. 이제는 간단하게 OTA로 무선 업데이트도 가능해졌습니다.

HA버튼 카드 추가

마지막으로 HA에 디바이스를 추가해서 켜고 끄는 버튼을 추가하겠습니다. 사실 여기까지 하면 HA에서 자동으로 새로 추가된 디바이스를 인식해서 구성요소로 추가할 수 있다는 알람을 보내줍니다. 수동으로 추가하고 싶다면 "Lovelace"대시보드에 카드 추가를 해서 "switch"구성요소 중 앞에서 지정한 이름의 디바이스를 찾아서 추가해 줍니다.

이제 HA의 전용 앱을 통해서 손쉽게 컨트롤을 할 수 있게 되었습니다. 그리고 HA의 자동화 기능을 이용해서 다른 이벤트에 연동해서 전등이 켜지고 꺼지게끔 설정할 수도 있고 사용자를 등록해서 모든 가족들이 같이 사용할 수도 있게 되었습니다. 그리고 그전에는 아이피 주소만 알면 누구나 접속할 수 있었던 스위치가 이제는 HA의 서버를 통해서 접근을 하기 때문에 네트워크 보안 문제도 해결이 되었습니다.

 

끝!

728x90

댓글0