본문 바로가기
Hardware/Home Assistant(라즈베리파이)

Home Assistant(HA) + ESPHome + Sonoff Basic R2, 침대 취침등 개조

by lovey25 2020. 12. 6.
반응형

침대에 달려있는 LED취침등을 Home Assistnat(HA)와 연동해 보겠습니다. 약 8년전인가? 에몬스가구에서 구입한 침대이고 이렇게 머리맡에 작은 물건을 놓을 수 있는 자리가 있는데 그 위에 LED 조명이 내장되어 있는 모델입니다.

누워서 손을 뻗으면 닫을 수 있는 거리에 스위치가 있긴하지만 그냥 잠들어 버렸을 때 저절로 꺼지게 한다던가 아니면 자다가 화장실을 갈 때 동작센서를 사용해서 저절로 켜질 수 있게 HA에 연동해 주려합니다.

취침등의 구조는 220V 전원 2가닥 중 하나가 위 사진에 있는 똑딱 스위치를 거치도록 되어있고 220V 전원은 220-12V 컨버터로 들어갑니다. 그리고 이 컨버터가  LED에 연결되어 있습니다.

침대 뒷면에 배선이 있기 때문에 자세가 불편해서 처음엔 선이 뭐이리 복잡해라고 생각했는데 결국 저 12V 컨버터를 켜고 끄는게 핵심이었습니다. 당연한 얘기겠죠?! ㅎ

지난번 세탁기 모니터링에 사용한 Sonoff Pow에 이어서 같이 주문했던 Sonoff Basic도 도착을 했습니다. 제가 전에 만들었던 거실 보조등 스위치와 하드웨어 스펙은 거의 동일하지만 역시 공산품이 모양새가 깔끔합니다. 이놈을 연결해서 취침등으로 들어가는 전원을 제어하려 합니다.

Sonoff Basic 펌웨어 올리기 

Sonoff Basic은 지금까지 2번의 개정이 있어서 지금은 R3 버전까지 나온것 같습니다. 제가 구매한건 R2인데 살때는 그런 개념없이 그냥 싼것만 찾아서 구매를 했는데 물건을 받고나서 나중에 안 사실인데 저처럼 DIY용으로 사용한다면 R3보단 R2가 적합하다고 합니다. 여기에 Sonoff Basic 버전별 특징을 살 설명해 놓은 페이지가 있는데 읽어보면 R3는 UART 포트가 가려져 있어서 펌웨어 업로드가 까다롭다고 합니다. 

내용품은 아주 심플합니다. 본체와 뚜껑 고정하는 나사 4개가 별도로 동봉되어 있습니다. Sonoff Pow R2와는 다르게 Basic모델은 2선식으로 접지 연결단자는 따로 없습니다. 정말 제가 만든 스위치와 동일하게 ESP8266, 릴레이, 컨버터를 한보드에 올려놓은거에 불과합니다.

하우징을 벗겨내면 PCB를 안쪽에서 고정하는 나사도 없어서 그냥 보드를 분리해 낼 수 있습니다. 인터넷에 Sonoff Basic에 커스텀 펌웨어를 올려서 DIY하는 대부분의 글들은 Sonoff Basic R1을 기반으로 하고 있어서 R2와는 생긴게 다릅니다. 많이 달라져서 지금까지 준비했던걸 못써먹으면 어쩌나 잠깐 걱정했는데 사진으로 확인할 수 있듯 보드에 너무도 친절하게 UART단자가 잘 표시되어 큰 문제없이 진행할 수 있었습니다.

바로 헤더핀을 설치해서 펌웨어 백업하고 업로드하기 용의하도록 하였습니다.

이제 UART단자에 USB브리지를 연결해서 PC에 연결하고 지난 Sonoff POW때와 마찬가지로 ESPHome으로 만든 펌웨어를 올려줍니다.

먼저 Sonoff Basic이 잘 인식이 되었는지 확인합니다.

esptool.py -p COM5 flash_id

잘 연결이 되었습니다. 플래시 메모리는 1MB네요

아래 명령어로 Sonoff Basic에 깔려있는 원래 펌웨어는 백업해 둡니다. 쓸일은 없지만 혹시나해서 빼놓습니다.

esptool.py -p COM5 read_flash 0x00000 0x100000 Sonoff_Basic_1M.bin

참고로 요건 백업한 펌웨어 입니다.

Sonoff_Basic_1M.bin
1.00MB

 

이제 다음 yaml 스크립트를 이용해서 HA, ESPHome에서 펌웨어를 컴파일합니다. 노드를 추가하고 스크립트를 저장합니다.

esphome:
  name: bed_light
  platform: ESP8266
  board: esp01_1m

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "SOS_BedLight"
    password: !secret ota_password

captive_portal:

# Enable logging
logger:

# Enable Home Assistant API
api:
  password: !secret ota_password

ota:
  password: !secret ota_password

binary_sensor:
  - platform: gpio
    pin:
      number: GPIO0
      mode: INPUT_PULLUP
      inverted: True
    name: "Sonoff Basic Button"
    on_press:
      - switch.toggle: relay

switch:
  - platform: gpio
    name: "Sonoff Basic Relay"
    pin: GPIO12
    id: relay

status_led:
  pin:
    number: GPIO13
    inverted: yes

노드 메뉴에서 컴파일을 하고,

컴파일이 끝나면 "Download binary"를 눌러서 펌웨어를 다운로드 합니다.

다운받은 파일을 가지고 아래 명령어로 Sonoff Basic에 펌웨어를 올려줍니다.

esptool.py --p COM5 write_flash -fs 1MB -fm dout 0x0 bed_light.bin

펌웨어가 잘 올라갔다면 HA에서는 노드를 바로 인식해서 다음과 같이 알림이 켜집니다.

컴파일시 지정한 비밀번호를 넣어서 ESPHome 요소로 기기를 추가합니다.

이제 다음과 같은 구성요소 2가지를 사용할 수 있는데요. Button은 Sonoff Basic에 달려있는 스위치의 상태를 표시하는 바이너리 센서이고 그 아래 릴레이는 말 그대로 릴레이의 on/off를 직접 컨트롤 하는 스위치 입니다. 물리 스위치의 개폐가 인식되면 그 즉시 릴레이가 토글되는 방식으로 동작을 합니다.

아무리 HA를 이용한 원격 제어가 편하다고 하지만 물리 스위치는 반드시 있어야 합니다. 당장 코앞에 있는 전등 키자고 핸드폰 찾는일은 없어야 하니까요. 그래서 침대에 있던 기존 스위치를 푸시버튼을 교체하고 시그널 와이어를 길~게 연결해서 Sonoff Basic 보드에 있는 스위치와 연결해 줍니다. 스위치에 있는 핀 4개는 둘씩 쌍으로 연결되어 있기 때문에 버튼 상태에 따라서 연결되고 떨어지는 핀을 찾아서 아무쪽이나 2개만 연결하면 됩니다. 

이제 물리 스위치도 사용할 수 있고 HA를 이용해서 원격으로도 사용할 수 있게 되었습니다. ^^

이제 침대뒤에 보이지 않게 숨기고 선도 대충 정리했습니다. ^^

 

끝!

반응형

댓글