본문 바로가기

경험나눔

한전 파워플래너 앱에서 발전량을 OCR 후 텔레그램으로 보내기

옥상에 3kW 태양광에 인버터는 RS-485를 지원한다고 되어 있는데, 한번 시도해 보았으나 데이터가 나오지 않았습니다. 사실 여러 가지 방식으로 가능하고 각각 문제점이 있습니다. 

  • 제조사에 연락하여 연결 방법을 배우고 한다 해도 RS-485 라인을 옥상에서 1층으로 내리기는 번거롭다. 
  • WiFi로 RS-485를 받을 수 있는 장치가 있지만, 전원(5V)을 공급해 주어야 한다. 인버터 내부에서 전원을 따는 것은 불안하고 어느 핀에서 빼야 할 지도 고민 대상이다. 
  • CT(Current Transformer) 방식으로 전력 측정하는 WiFi 장치의 클램프를 AC 출력부에 걸어 주면 되는데, 역시 장치를 전원을 위해 220V 출력 단자에 접속은 해야 하므로 인버터는 전원 스위치가 없는 것 같아서 라이브로 연결해 주어야 하는 부담이 있다. 
  • ESP32-CAM을 인버터 앞에 달아주는 것은 전원문제도 있고, 태풍급 비바람에 견뎌야 하므로 비현실적이다. 
  • 별도의 CCTV용 태양광 패널과 CCTV를 달아주는 것은 좀 과하다는 생각이 든다. 
 

일단 현재 건물 내 차단기에는 CT 클램프를 걸어서 집 안으로 들어오는 전력은 계량이 가능합니다. 그리고, 한전에서 설치해 준 스마트 계량기를 통해 수전과 발전(송전)량을 파워플래너 앱으로 파악할 수 있습니다. 

 

다만, API가 가정용은 아직 없는 것 같고 웹크롤링은 하라고 하지만 그게 쉬운 일도 아니고 더구나 파워플래너 사이트에는 발전량이 안보입니다. 사이버지점에 접속하면 가능한데 아주 복잡한 홈페이지이지요. => 개편되었습니다.  https://online.kepco.co.kr/MYM022D00 요금상세 - 요금상계거래내역조회에서 확인이 가능합니다.  

 

그래서 스마트폰에 파워플래너 앱을 띄우고 그 화면을 캡쳐하여 텔레그램으로 보내는 것을 해보았고 나중에는 OCR도 추가하여 아래와 같이 받을 수 있게 되었습니다. 

 

텔레그램으로 받은 파워플래너 앱 화면과 OCR 결과

이제 저 값을 Home Assistant에 보내려고 했는데 쉽지 않아 보이고, 최초 이러한 일을 하게 된 목적이 "5년 무상보증이 끝났는데 언제 고장나더라도 알 수가 없기 때문에 매일 자동으로 모니터링하고 싶다"였기 때문에 위 화면까지만 진행하였습니다. 물론 파워플래너 앱을 띄우면 되는데 잊지 않고 매일 그것 하게 되기는 쉽지 않겠죠? 

 

[텔레그램 준비] 

우선 bot를 하나 만들어야 합니다. BotFather를 텔레그램에서 초대한 후 /newbot을 입력하고 봇 이름 등을 지정해 주면 HTTP API에 쓸 수 있는 토큰을 하나 줍니다. chat_id도 알아 내야 하는데...

https://api.telegram.org/botxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxx/getUpdates

받은 토큰을 xxxxxx:xxxxxxx 부분에 입력한 후 브라우저에 붙인 후 실행해 봅니다. chat_id는 아직 안나오는데, 이제 방금 새로이 만든 bot한테 /로 시작하는 것 말고 일반 hello 같은 것을 메시지로 보내고 다시 위 명령을 실행하면 id 값이 나타납니다. 이제 chat_id와 token을 얻었으니 준비가 완료입니다. 

 

[Takser 자동화 앱 준비 및 텔레그램으로 수발전량 보내기]

여기서부터 돈이 많이(?) 들어갑니다. 저는 태스커는 진작에 샀었고 아래 작업 수행을 위해 2개 Tasker 플러그인(AutoInput, AutoTools) 앱을 사느라 5천여원을 들였습니다. Trial도 있긴 한데 그냥 구입...

 

아래 과정에서는 절전 및 안드로이드 보안 부분을 포기하는 부분이 많아서 추천하기는 힘들고 그냥 이렇게 할 수 있구나 정도로 보시면 되겠습니다. 

 

태스커에 등록한 자동화 내역

별 내용이 없어서 그 중에 4, 6, 8, 9, 11, 14 정도만 알아보겠습니다. 

 

파워플래너 앱이 로딩되는데 최대 10초 가량 걸리는데 모두 올라온 후, "사용량" 부분을 터치를 해야 합니다. 4번을 보면 이름이 "사용량"인 부분을 찾아서 터치를 해주는 기능을 AutoInput이 대신 해 줍니다. 

 

이후 6번에서는 스크린샷을 특정 위치에 저장하는 기능을 역시 AutoInput 플러그인이 해주게 됩니다. 파일 이름은 편의상 powerplanner.png로 고정합니다. 계속 보관하고 싶다면 시각에 따라 이름을 바꿀 수도 있는데 그럴 경우 파일 이름을 변수에 보관한 후 그 다음 과정에서 이용해야겠습니다. 원래는 구글 포토의 백업 기능을 쓰려고 했는데 원하는 대로 잘 저장이 안되더군요... 

 

8번에서 가장 골탕을 먹었습니다. HTTP Request로 하면 된다는데 잘 안되더군요. ChatGPT와 Bing이 알려준 사용법도 안 먹혔습니다. 그러던 중 Uploader for Tasker가 있는 것을 게임 사이트에서 알게 되어 APKPure에서 받았습니다(미국 플레이스토어에만 있습니다). 

 

Uploader 설정과 이미지 전송은 한번에 잘 되었습니다(알 수 없는 이유로 이후에 계속해서 잘 되는 것은 아닙니다 아주 가끔 되는 정도예요).

- HOST = https://api.telegram.org/botxxxxxxxx:xxxxxxxxxxxxxxxxxxxxx/sendPhoto 
- Input File = /storge/emulated/0/Pictures/Screenshots/powerplanner.png
- Filename = powerplanner 
- Form name = photo 
- File content type = image/png 
- Parameters탭에서 Add More를 누른 후 chat_id 줄 바꾸고 xxxxxxxxx(실제 챗아이디)를 넣어주면 됩니다. 

 

9번은 OCR인데요, 위 powerplanner.png를 지정해 준 후 OCR을 원하는 좌표를 적어주면 됩니다. 

그림판에서 알아낸 좌표를 넣은 모습(LX, LY, RX, RY)

11번은 OCR의 결과로 나온 4줄(수전 발전량 숫자 4개) %atocrvalue()을 %PowerPlanner로 저장한 후, %PowerPlanner1, %PowerPlanner2... 등으로 나누는 과정입니다. 보통 ','로 나뉘지만 여기에서는 줄이 바뀌는 관계로 Split의 기준 부분은 비워두면 알아서 공백과 줄바뀜문자를 기준으로 다 쪼개집니다. Tasker의 Variables 탭에 가면 어떻게 저장되었는지 볼 수 있어서 14번으로 메시지를 보낼 때 조합해서 보내면 됩니다. 

 

메시지 보내는 것은 별 문제 없이 잘 됩니다. 

 

OCR로 인식된 숫자들을 봇에게 메시지로 보내기

위와 같이 작동은 되지만, 화면 캡쳐 등 위험한 행동(?)을 하는 부분이 있어서 증권/금융앱에서 경고 메시지를 볼 수 있으며 가끔은 보안 문제 때문에 파워플래너 로딩이 실패합니다. 아직 어떤 조건에서 오류가 나는 지 명확하게 파악하지는 못했습니다. 

 

15번은 나중에 추가했는데 아직 잘 되는 지 모르겠네요. 루팅을 하지는 않았습니다. AutoInput이 잘 작동하게 하려면 개발자모드로 컴퓨터와 연결해야 할 수도 있습니다. ADB를 활용하는 것인데 도중에 설명이 잘 나오므로 따라 하면 됩니다. 

 

뭐 이렇게까지? 하는 부분이 있는데 Tasker가 참 별의별 작업을 다 해주네요. UI가 익숙해지는데 시간이 좀 걸립니다. 설명서도 그리 친절한 편은 아닌 것 같아요.