본문 바로가기
Tips

스마트 플러그 Sonoff S20, 커스텀 펌웨어 적용 + HomeAssistant 연결 + 구글 픽셀 배터리 레벨 관리

by lovey25 2021. 5. 30.
반응형

지난 포스팅 중 구글 포토의 백업 정책 변경으로 계속적인 무료 사용을 위해서 구글의 픽셀 폰을 백업 머신으로 사용하기로 했다는 내용이 있었습니다.

 

구글 픽셀, 구글 포토 무제한 백업 계속 무료로 사용

구글 포토 고화질 사진의 무료 저장 기한의 마지막 달이 왔습니다. 다음 달인 6월 1일부터는 어떤 화질로 사진을 저장하던지 구글 계정의 용량을 차지하기 때문에 클라우드 용량 추가 구입 말고

kwonkyo.tistory.com

이번에는 바로 그 픽셀 폰의 만수무강을 기원하는 차원에서 자동으로 배터리를 관리하는 시스템의 구축기입니다.

배경

픽셀은 백업을 위해서 항시 켜져있어야 합니다. 그래서 늘 충전기에 꼽혀 있어야 하는 신세인데, 배터리라는 것이 완충과 완방 상태를 매우 싫어하는 특성이 있기 때문에 배터리 수명을 길게 사용하려면 항시 충전되어 있는 것보다는 배터리 잔량이 50% 정도인 상태를 유지하도록 하는 게 좋다고 하더군요. 그래서 와이파이에 연결되는 스마트 플러그를 사서 여기에 핸드폰 충전기와 픽셀을 연결해두고 픽셀 폰의 배터리 잔량에 따라서 전원을 켜고 꺼서 배터리가 50% 언저리에서만 왔다 갔다 하도록 해 보겠습니다.

스마트 플러그 Sonoff S20

제가 선택한 제품은 Sonoff S20이라는 모델입니다. 워낙 커스텀 시장에서는 유명한 제품이기도 하고 그만큼 저도 Sonoff 제품이 익숙해서 골라봤습니다.

구성품은 본체와 설명서 및 인증서로 간단합니다.

요건 설명서인데, 이 제품에 ESPHome 펌웨어를 올려서 쓸 거라서 설명서는 뭐 의미 없습니다.

S20 ESPHome 펌웨어 올리기

이 제품은 ESPHome 홈페이지에 커스텀 방법이 소개되어 있을 정도로 커스텀의 필수 코스 중 하나입니다.

 

Using With Sonoff S20

Instructions for putting Sonoff S20 devices into flash mode and installing ESPHome on them.

esphome.io

그래서 이것저것 고민하고 걱정할 필요도 없습니다. 일단 뚜껑 열어줍니다.

보드의 생김새가 ESPHome에 소개된 것과는 약간 차이는 잇지만 UART 포트 부분이 친절하게 표기된 것은 변함없습니다. 핀헤더 납땜해주었습니다.

이제 여기서부터는 기존 펌웨어 백업하고 새로운 ESPHome 펌웨어 만들어서 올려주고 하는 루틴 한 과정들입니다. 제 블로그에서 여러 번 다루었던 내용이기 때문에 ESPHome 펌웨어를 올리는 기본적인 내용에 대해서는 아래 링크의 이전 포스팅을 참고해 주시면 감사하겠습니다.

 

DIY IoT 부품 - Sonoff pow r2 개봉기 및 펌웨어 백업

DIY IoT 환경을 꾸미는데 가장 기본적인 부품은 바로 스마트 스위치인데요. ESP8266 모듈에 릴레이를 붙여서 간단한 스마트 스위치를 만들어 사용해보기도 했습니다만, Sonoff라는 기성품이 있어서

kwonkyo.tistory.com

 

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

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

kwonkyo.tistory.com

 

Zemismart WIFI 스위치 KS-811 펌웨어 수정 및 설치 & Home Assistant 연동(feat. 중성선 매립)

Home Assistant(HA)를 서버로 두고 Wifi스위치에 보조등을 달아서 원격 컨트롤하며 사용하고 있고 그리고 아파트 홈네트워크의 RS485 인터페이스로 거실 및 복도 등을 연동해서 컨트롤하고 있습니다.

kwonkyo.tistory.com

여기서는 이 제품만의 특이한 점이 있으면 그것만 언급하는 정도로 작성할 예정이니 참고해 주세요.

일단 USB-UART 브릿지로 S20을 컴퓨터와 연결하고 칩셋 정보 가장 먼저 확인해야겠죠. ESP8266 모듈은 펌웨어 작업을 하기 위해서는 프로그램 모드로 진입해야 하고 그러기 위해서는 부팅할 때 GPIO0번 핀이 Low 상태여야 하는데요. S20은 특이한 점이라면 제품 전면에 있는 전원 버튼이 아마 GPIO0번에 연결되어 있는 것 같습니다. 컴퓨터 USB에 연결할 때 이 버튼을 누른 상태에서 연결을 해 주면 프로그램 모드로 진입할 수 있었습니다.

전원버튼을 누른 상태에서 USB연결을 해서 프로그램 모드로 진입

이렇게 하여 확인한 칩셋 정보입니다.

플래시 메모리는 1MB이네요. 여기에 맞게 기존 펌웨어 백업하고 새로운 펌웨어 만들어주면 되겠습니다.

sonoff_s20.bin
1.00MB

요건 제가 백업해둔 펌웨어입니다.

이제 새로운 펌웨어를 만들어 줍니다. ESPHome 대시보드에서 아래 스크립트로 새로운 노드를 만들고 컴파일하여 펌웨어 바이너리 파일 생성합니다.

esphome:
  name: pixelcharger
  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: "Pixelcharger Fallback Hotspot"
    password: !secret wifi_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: "Button"
  - platform: status
    name: "Status"

switch:
  - platform: gpio
    name: "Relay"
    pin: GPIO12

그리고 펌웨어 업로드해 주었습니다.

이렇게 해주면 Home Assistant에서 새로운 노드가 자연스럽게 인식이 됩니다.

노드 추가해주었고 S20에도 픽셀 폰 연결해서 충전기 하나 꽂아두고 방구석에 잘 모셔두었습니다.

픽셀 폰 HA에 등록

이제 픽셀 폰의 정보를 HA에서 읽을 수 있도록 등록합니다. 방법은 간단하죠 픽셀 폰에 HA 앱을 설치하고 로그인합니다. 그러면 HA에서 다음과 같이 스마트폰의 기본적인 정보들을 확인할 수 있습니다. 여기서 저는 "배터리 잔량"만 있으면 됩니다.

자 이제 이정보를 바탕으로 우선 아래와 같은 Lovelace 요소 하나 만들었습니다.

type: horizontal-stack
cards:
  - type: sensor
    graph: line
    entity: sensor.pixel_baeteori_janryang
  - type: button
    tap_action:
      action: toggle
    entity: switch.relay

픽셀 폰의 배터리를 확인할 수 있고 배터리 상태에 따라서 오른쪽의 릴레이 버튼을 누르면 픽셀 폰이 연결된 충전기의 전원이 들어가면서 충전을 시작할 수 있습니다.

HA 자동화로 배터리 충전 수준 유지하기

이제 기능의 구현은 모두 끝났으니 이 과정이 자동으로 이루어지도록 하겠습니다. HA 자동화를 이용해서 픽셀의 배터리 잔량을 트리거로 하여 일정 수준 이하가 되면 충전을 시작하고 일정 이상이 되면 충전이 멈추도록 하였습니다.

alias: pixel자동충전
description: pixel 배터리를 40~70% 사이를 유지
trigger:
  - type: battery_level
    platform: device
    device_id: 6ec35d110a9d8d566f4675b6cf74cebf
    entity_id: sensor.pixel_baeteori_janryang
    domain: sensor
    below: 40
  - type: battery_level
    platform: device
    device_id: 6ec35d110a9d8d566f4675b6cf74cebf
    entity_id: sensor.pixel_baeteori_janryang
    domain: sensor
    above: 70
    below: 100
condition: []
action:
  - choose:
      - conditions:
          - type: is_battery_level
            condition: device
            device_id: 6ec35d110a9d8d566f4675b6cf74cebf
            entity_id: sensor.pixel_baeteori_janryang
            domain: sensor
            below: 40
        sequence:
          - type: turn_on
            device_id: 97bb14836f545dbcc94a6bcd87e9e4cc
            entity_id: switch.relay
            domain: switch
    default:
      - type: turn_off
        device_id: 97bb14836f545dbcc94a6bcd87e9e4cc
        entity_id: switch.relay
        domain: switch
mode: single

그리고 아래는 약 10간의 배터리 상태 기록입니다. 초반에는 40~80%를 유지하도록 설정했었는데 보시는 것처럼 정확하게 80%가 되었을 때 멈추는 게 아니라 약간 딜레이가 발생해서 설정 충전량 이상으로 충전이 되었습니다. 방전도 마찬가지고요. 

이건 HA가 픽셀의 정보를 읽어오는 주기가 있어서 그런 것 같았습니다. 그래서 지금은 40~70% 구간을 유지하도록 했는데 좀 더 줄여야 할지 고민 중입니다. 

아무튼 이로써 백업 머신인 픽셀 폰의 충전도 더 이상 걱정할 필요가 없어졌습니다.

Sonoff S20는 지난주에 포스팅했던 DIY 스마트 플러그와 거의 유사한 제품입니다.

 

온풍기 자동 온도조절용 스마트 플러그 DIY

2021-06-03 update log: 캠핑장 실 사용 후기 추가 ESP8266 모듈을 활용한 새로운 프로젝트 캠핑용 온풍기를 온도조절이 가능하도록 하는 스마트 플러그를 만들어볼까 합니다. 지난번에 캠핑용 온풍기를

kwonkyo.tistory.com

약간의 귀찮음과 투박한 디자인 정도 감수할 수 있다면 부가적인 기능을 마음대로 추가할 수 있어서 자작의 매력이 있긴 하지만 제가 만들었던 스마트 플러그와 같이 놓고 비교해보니 역시 공산품의 아름다움은 남다르네요. ^^;

 

끝!

반응형

댓글