지난 포스팅 중 구글 포토의 백업 정책 변경으로 계속적인 무료 사용을 위해서 구글의 픽셀 폰을 백업 머신으로 사용하기로 했다는 내용이 있었습니다.
이번에는 바로 그 픽셀 폰의 만수무강을 기원하는 차원에서 자동으로 배터리를 관리하는 시스템의 구축기입니다.
배경
픽셀은 백업을 위해서 항시 켜져있어야 합니다. 그래서 늘 충전기에 꼽혀 있어야 하는 신세인데, 배터리라는 것이 완충과 완방 상태를 매우 싫어하는 특성이 있기 때문에 배터리 수명을 길게 사용하려면 항시 충전되어 있는 것보다는 배터리 잔량이 50% 정도인 상태를 유지하도록 하는 게 좋다고 하더군요. 그래서 와이파이에 연결되는 스마트 플러그를 사서 여기에 핸드폰 충전기와 픽셀을 연결해두고 픽셀 폰의 배터리 잔량에 따라서 전원을 켜고 꺼서 배터리가 50% 언저리에서만 왔다 갔다 하도록 해 보겠습니다.
스마트 플러그 Sonoff S20
제가 선택한 제품은 Sonoff S20이라는 모델입니다. 워낙 커스텀 시장에서는 유명한 제품이기도 하고 그만큼 저도 Sonoff 제품이 익숙해서 골라봤습니다.
구성품은 본체와 설명서 및 인증서로 간단합니다.
요건 설명서인데, 이 제품에 ESPHome 펌웨어를 올려서 쓸 거라서 설명서는 뭐 의미 없습니다.
S20 ESPHome 펌웨어 올리기
이 제품은 ESPHome 홈페이지에 커스텀 방법이 소개되어 있을 정도로 커스텀의 필수 코스 중 하나입니다.
그래서 이것저것 고민하고 걱정할 필요도 없습니다. 일단 뚜껑 열어줍니다.
보드의 생김새가 ESPHome에 소개된 것과는 약간 차이는 잇지만 UART 포트 부분이 친절하게 표기된 것은 변함없습니다. 핀헤더 납땜해주었습니다.
이제 여기서부터는 기존 펌웨어 백업하고 새로운 ESPHome 펌웨어 만들어서 올려주고 하는 루틴 한 과정들입니다. 제 블로그에서 여러 번 다루었던 내용이기 때문에 ESPHome 펌웨어를 올리는 기본적인 내용에 대해서는 아래 링크의 이전 포스팅을 참고해 주시면 감사하겠습니다.
여기서는 이 제품만의 특이한 점이 있으면 그것만 언급하는 정도로 작성할 예정이니 참고해 주세요.
일단 USB-UART 브릿지로 S20을 컴퓨터와 연결하고 칩셋 정보 가장 먼저 확인해야겠죠. ESP8266 모듈은 펌웨어 작업을 하기 위해서는 프로그램 모드로 진입해야 하고 그러기 위해서는 부팅할 때 GPIO0번 핀이 Low 상태여야 하는데요. S20은 특이한 점이라면 제품 전면에 있는 전원 버튼이 아마 GPIO0번에 연결되어 있는 것 같습니다. 컴퓨터 USB에 연결할 때 이 버튼을 누른 상태에서 연결을 해 주면 프로그램 모드로 진입할 수 있었습니다.
이렇게 하여 확인한 칩셋 정보입니다.
플래시 메모리는 1MB이네요. 여기에 맞게 기존 펌웨어 백업하고 새로운 펌웨어 만들어주면 되겠습니다.
요건 제가 백업해둔 펌웨어입니다.
이제 새로운 펌웨어를 만들어 줍니다. 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 스마트 플러그와 거의 유사한 제품입니다.
약간의 귀찮음과 투박한 디자인 정도 감수할 수 있다면 부가적인 기능을 마음대로 추가할 수 있어서 자작의 매력이 있긴 하지만 제가 만들었던 스마트 플러그와 같이 놓고 비교해보니 역시 공산품의 아름다움은 남다르네요. ^^;
끝!
'Tips' 카테고리의 다른 글
highlight.js + linenumberV2.js - 코드블럭에 줄번호 외 다양한 기능 추가하기 (0) | 2021.06.17 |
---|---|
안드로이드 원격제어 프로그램 "scrcpy" (2) | 2021.06.01 |
ADB(Android Debug Bridge) 연결하기 (무선 & 유선) (3) | 2021.05.24 |
Skybox vs Pigasus 그리고 Pigasus smb 연결 오류 해결 (4) | 2021.05.22 |
댓글