요즘에는 스마트폰으로 태양광패널(인버터)의 작동 상태를 확인할 수 있지만, 구형 모델의 경우 기능이 없습니다. 간접적으로 "파워플래너"앱을 통해 발전량을 확인할 수는 있습니다(스마트미터를 설치한 경우).
매일 파워플래너를 실행하지 않으면, 보증기간 5년이 지난 후 고장나도 한전에서 알려주는 것이 없다면 알 수가 없는 셈입니다.
고려해 본 방법들은
- 인버터 앞에 카메라를 장착하기 - 카메라의 설치가 애매
- 클램프 방식의 CT 센서 장착하기 - 전류 측정은 클램프라서 직접 연결은 아니지만, 어차피 장치 전원 연결은 220V를 연결해야 해서 인버터를 건드려야 하는...
- RS-485 단자를 사용하여 인버터와 통신하기 - 통신 단자만 활용하고 장치는 외부에 두어서 인버터에 영향을 주지 않는 방법입니다.
Elfin EW11를 인버터의 RS-485 포트에 연결
설치하여 사용 중인 인버터는 벨츠 에너지 테크놀러지(헵시바)의 SPC-3500 모델로 RS-485 단자(+/-)를 내장하고 있으며 아래와 같이 연결하여 보았습니다.
위 사진에서는 추가로 설치한 작은 태양광패널의 전원 출력을 직접 Elfin EW11 입력(5~18V)에 연결하고, RS-485는 태양광 인버터 제어판에 붙어 있는 핀에 연결한 모습입니다. 작은 태양광 패널이 동쪽 방향이지만 태양광 패널 아래의 그늘이라서 여름이라면 AM7시~10시 사이에 전원이 켜져 있게 됩니다.
Elfin EW11 RS485 무선 어댑터는 국내에서도 홈오토메이션 DIY에 많이 사용되고 있다고 합니다. 원격에서 RS-485 통신 자료를 수신한 후 WiFi를 통한 다양한 통신 방법을 지원해 주는 장비입니다. 주택 옥상에 설치했는데 ASUS 공유기와 WiFi 접속은 잘 되었습니다.
Elfin EW11을 이용하여 아파트에 설치된 홈오토메이션장비를 홈어시스턴트에 결합하기 쉽도록 HACS(홈 어시스턴트 커뮤니티 스토어)를 통해 통합구성요소도 제공되고 있다고 합니다.
발전하는 시간 내내 모니터링을 하기 위해서 배터리를 내장한 CCTV용 태양광 패널로 교체할 예정입니다. 아래는 국산 18650 배터리를 장착한 모습입니다. 65mm 길이의 배터리만 장착 가능하다고 하여 KC인증 받은 것을 구입해 보았습니다. 이제 태양빛을 오래 받기 위해서는 인버터와 조금 떨어진 곳에 설치해야 하므로 RS-485 케이블도 연장하기 위해 주문한 상태입니다.
RS-485 선을 연장하고, CCTV용 태양광 패널에 EW11을 가까이 연결하여 새로 설치하였습니다. 이제 충전 시간이 길어졌으므로 계속 수신이 가능할 것으로 예상됩니다.
방전 시 문제와 릴레이 추가 작업
위 방법으로만 했더니 문제가 있었는데, CCTV용 태양광패널의 배터리가 방전된 후에는 충전이 되더라도 EW11이 살아나지 않았고, 전원 버튼을 직접 껐다가 켜야만 되었습니다.
계산해 보면 약 200mA@5V를 소비 할 때 24시간이면 4,800mAh@5V인 셈인데 총 6,000mAh@3.7V의 용량으로는 하루도 버티지 못하는 셈이 됩니다.
그래서 ESP8266 릴레이 모듈을 추가하기로 했습니다. 3시간에 5분만 켜지고 나머지 시간에는 deep sleep으로 들어가서 전력을 소비하지 않도록 하는 것입니다.
ESP 릴레이 모듈은 ESP-01 보드를 사용합니다. 한참 테스트하는데 제대로 안되어서 이상하다 했더니 deep sleep은 지원되지 않는다고 하더군요. 검색해 보니 아래 사진과 같이 RESET핀을 ESP8266EX 칩의 GPIO16번(사진에서 좌하단 끝쪽 핀)과 연결하면 deep sleep 진입 시킬 수 있다고 하며 역시 잘 작동 되었습니다(납땜은 좀 어려워서 ESP-01 모듈 하나는 버렸습니다). 빨간색 점퍼 선을 참고하시면 되겠습니다.
3분씩 하루에 8번 켜지게 설정하였으므로 24분이고 3일이면 1.2시간 동안 400mA(릴레이 200mA + EW11 200mA) x 5V를 소비한다고 계산해 볼 수 있고, 2,000mWh인데 배터리 용량은 2000mA x 3.7V = 7400mWh이므로 이론상 일주일 가량 해가 뜨지 않아도 작동한다고 예상할 수 있겠습니다.
deep sleep이 안되어서 혹시나 싶어서 바꾼 부분이고 필요 없을 수도 있는데요, 릴레이 보드에서 GPIO0가 기본 연결이지만 GPIO2를 사용하도록, GPIO0에 연결된 패턴 중간 부분을 커터칼로 긁어 내어 끊고 GPIO2와 점퍼선(저항에서 잘라낸 선을 이용)을 연결했습니다.
작동 확인을 위하여 임시로 아래 사진과 같이 투명매직테이프를 이용하여 고정해 보았습니다.
릴레이 작동을 위한 ESPHome 코드
esphome:
name: "esp8266-relay"
friendly_name: "esp8266-relay"
on_boot:
priority: -100
then:
- switch.turn_on: my_relay
esp8266:
board: esp01_1m
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: ""
ota:
- platform: esphome
password: ""
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Esp8266-Relay-Module"
password: ""
captive_portal:
switch:
- platform: gpio
name: "Relay"
id: my_relay
pin: GPIO2
inverted: yes
restore_mode: RESTORE_DEFAULT_ON
deep_sleep:
run_duration: 5min
sleep_duration: 175min
불필요하게 밤에 켜 있을 것에 대비하여 아래 자동화 기능도 추가했습니다.
통신 속도 설정
일단 EW11을 WiFi 공유기에 접속을 시키게 되면 웹페이지(기본 설정된 id와 password는 admin으로 동일)를 통하여 시리얼통신 속도를 비롯한 다양한 설정이 가능하였습니다. 요즘 크롬은 HTTPS가 기본이므로 http://192.168.0.68과 같이 주소에 모두 써주어면 좋습니다. 보통은 TCP server로 EW11을 설정하고 8899 포트를 할당하여, PC에서는 Realterm이나 SerialPortMon 등 TCP Client 기능을 제공하는 프로그램으로 테스트가 가능합니다.
신재생에너지 표준프로토콜 지원 여부 확인
MQTT도 가능하다는데, 신재생에너지 표준프로토콜 가이드라인에서는 단말장치에서 인버터로 자료를 요청해야만 데이터가 나오는 방식이라서 가능할 지 모르겠네요.
신재생에너지 표준프로토콜은 상당히 간단한 패킷으로 만들어져 있으며, https://rems.energy.or.kr/pub/view/archive에서 REMS설비테스트프로그램_v1.0.0.0_TCP라는 자바 프로그램을 받으면 태양광으로 자료를 요청하는 패킷을 만들어서 TCP 통신을 통하여 보낼 수 있더군요. 예를 들면, 0x7E 0x01 0x01 0xD1 0x88 은 1번 장치에게 자료를 요청하는 패킷이라고 합니다. 또 다른 프로그램은 COM포트도 지원하므로 직접 컴퓨터를 연결하여 테스트도 가능할 듯합니다.
어쨌든 SPC-3500C모델에 테스트를 해 본 결과 "신재생에너지 표준프로토콜 가이드라인_설비제조사_v1.2.6" 문서에 의한 프로토콜을 통한 통신은 실패하였습니다. 2018년에 설치하였으니 아마도 프로토콜 가이드라인이 나온 시기(2018~2019년) 이전에 나온 모델이라서 그런 듯합니다. 제조사에 RS-485를 통한 상태 출력 프로토콜이 구현되어 있는 지 문의를 해 봐야겠습니다.
본사 A/S 센터에 전화로 문의해 본 결과 자체 프로토콜을 사용한다는 것을 알게 되었습니다. 보통 태양광 설치 업체에서 개발하며 프로토콜 설명서를 제공한다고 합니다.
설정 및 RS485 통신 성공
SPC-3500C 모델의 경우 앞 케이스를 분리한 후에 메뉴 접근이 가능한데, 특별히 설정할 것은 없었습니다. 1대만 설치되어 있고, 태양광 인버터의 기본 주소는 1번으로 되어 있습니다.
Realterm이라는 통신 프로그램으로 EW11의 IP 주소(공유기에서 주소 확인 가능)인 192.168.0.68:8899 로 접속해서 패킷을 보내보니까 응답이 잘 왔습니다.
통신 방법은 간단합니다. #WR001RX 라는 ASCII 패킷을 보내고 들어오는 패킷의 주요 부분은 아래와 같습니다.
- T00137 : 일간 발전 시간(분) = 2시간 17분
- -A000 : 상태 및 에러 = 0
- B000 : 초기 카운트
- H497 : 단위 발전량 (Wh) = 497Wh
- I003 : 일간 누적 발전량 (x100 Wh) = 300Wh
- J23387 : 총 누적 발전량 (kWh) = 23,387kWh
상태 및 에러 값이 -A000 이 아닌 경우에 주의하면 될 듯합니다.
홈어시스턴트에 TCP 센서로 통합하기
Home Assistant에 통합시켜서 통신을 해야 하므로 약간 작업을 해 주어야 합니다.
- EW11 장비는 RS-485로 연결한 타겟 장비와 다양한 통신 방법을 제공해 주고 있는데 EW11의 MQTT 기능을 쓰면 좋겠지만 저는 간단하게 TCP 방식으로 연결해 보려고 합니다.
- TCP 통합 관련 자료:https://www.home-assistant.io/integrations/tcp/
방법은 TCP 통합을 통해 Sensor를 만드는 것입니다. 위 링크의 예제를 보고 조금만 변형하면 됩니다.
패킷 분석하는 것은 어렵지 않지만 Jinja2 문법을 모르므로 Gemini와 ChatGPT에게 문의해서 Jinja2 template 문법으로 디코딩 해 달라고 하면 됩니다.
- Home Assistant에서 TCP sensor를 구성 중인데, 수신되는 데이터의 형태는 "#WR001T00197-A000B000C293D039E224F050G599H114I011J23388X" 이고, I라는 문자 뒤에 3개의 숫자가 나오며 예를 들면 001, 002 식으로 나와요. 이 값을 Jinja2 template의 문법으로 추출한 후 숫자로 바꿔주는데 regex_search는 사용하지 말아줘요.
- 위와 같이 질문하니까 아래에 제가 ChatGPT에게 받아서 사용한 것과 다르게 나오기는 하네요. 하지만 좀 더 간단하게 나오는 듯하니 참고하여 작업하시면 됩니다.
sensor:
- platform: tcp
name: Veltz Daily Power Generation
host: 192.168.0.68
port: 8899
timeout: 5
scan_interval: 60
payload: "#WR001RX"
value_template: >
{% set index = value.find('I') %}
{% if index != -1 %}
{% set extracted_value = value[index + 1:index + 4] %}
{{ extracted_value | int * 100 }}
{% else %}
0
{% endif %}
unit_of_measurement: Wh
- platform: tcp
name: Veltz Status Code
host: 192.168.0.68
port: 8899
timeout: 5
scan_interval: 60
payload: "#WR001RX"
value_template: >
{% set index = value.find('A') %}
{% if index != -1 %}
{% set extracted_value = value[index + 1:index + 4] %}
{{ extracted_value | int }}
{% else %}
0
{% endif %}
이상과 같이 작업하여 홈어시스턴트 대시보드에 다음을 추가했습니다. 해가 비치는 오전 몇 시간만 작동하겠지만 인버터 고장 여부를 이제 쉽게 알 수 있게 되었습니다.
홈어시스턴트 에너지 항목에 추가하기
홈어시스턴트의 에너지 항목에 태양광 패널의 발전량을 모니터링할 수 있습니다.(https://www.home-assistant.io/docs/energy/solar-panels/)
이것을 위해서는 단위 발전량이 필요한 것 같네요. state_class에 total 혹은 total_increasing이 필요하다고 합니다. 아마 단위 발전량만 있다면 계산을 추가해야 될 것입니다(순간 전력을 수학적으로 합해서 kWh를 만들기).
다소 복잡하지만 계속 오류가 떠서 ChatGPT에게 물어본 후 알아낸 방법입니다. 아마도 tcp 센서를 곧바로 energy 클래스와 total_increasing 클래스로 지정이 불가능한 듯합니다.
먼저, configuration.yaml에 다음 항목이 필요합니다.
# 센서들을 모아 놓은 파일을 포함시키기
sensor: !include devices/sensor.yaml
# tcp나 template로 만든 에너지 센서는 곧바로 사용할 수 없어서 customize.yaml을 새로 만들어야 함
homeassistant:
customize: !include customize.yaml
devices 밑의 sensor.yaml의 에너지와 관련된 내용은 다음과 같습니다.
- platform: tcp
name: Veltz Summation Delivered Raw
host: 192.168.0.68
port: 8899
timeout: 5
scan_interval: 60
payload: "#WR001RX"
value_template: >
{% set index = value.find('J') %}
{% if index != -1 %}
{% set extracted_value = value[index + 1:index + 6] %}
{{ extracted_value | int }}
{% else %}
0
{% endif %}
unit_of_measurement: kWh
이제 customize.yaml의 내용은 다음과 같습니다. device_class와 state_class가 있어야만 에너지 항목의 태양광 패널 구성에 입력이 가능합니다.
sensor.veltz_summation_delivered_raw:
device_class: energy
state_class: total_increasing
에너지 항목에서 태양광 발전량 추가 버튼을 누른 후, "태양광 생산 에너지" 부분에 Veltz Summation Delivered Raw를 추가하면 되겠습니다.
이제 에너지 항목에 가면 기존에 댁내 클램프 센서로 사용 전력 측정한 것(아래 관련 글 참조)만 나왔는데, 태양광 에너지 값도 같이 연결해서 볼 수 있게 되었습니다. (주의: 제가 알아낸 정보가 틀릴 수도 있습니다)
다만, 태양광 인버터에서 측정한 값은 순수하게 생산된 전기를 나타냅니다. 하지만 그 전기가 모두 집으로 흘러들어 오는 것은 아니고, 잉여가 발생하는 경우 한국전력으로 전송이 되는데 그 부분은 표시가 안되는 셈입니다.
흐린 날이 이어졌을 때 방전 문제 해결 확인
앞 부분의 "방전 시 문제와 릴레이 추가 작업"에 대한 확인을 해보기 위하여 홈어시스턴트 화면의 에너지 부분을 확인하여 보았습니다.
태양광 발전량이 하루 5kWh 이하의 흐린 날이 많았지만, 18650 배터리가 방전되는 문제 없이 계속 태양광 발전량을 RS485 통신을 통해 가져 올 수 있었음을 알 수 있습니다. 3kW 패널이므로 이론적으로는 2시간 이내로 발전이 이루어진 날이 11일 중에 7일이었습니다. 참고로 첫날 11일에 35kW가 넘은 것은 그 전날 것을 포함해서 나타난 값입니다.
사실 위 에너지 다이어그램 및 화면은 틀렸음을 알게 되었습니다. 클리앙에 쓴 글을 참고 부탁드립니다.
혹은 좀 더 단순하게 생각해서 "그리드 합계" 부분에는 ShinaSystem PMM-300Z2 요약 전달됨을 연결하고, 그리드로 보내는 값에 Veltz Summation Delivered Raw 값을 매핑하면 파워플래너앱에서 나오는 값과 다르기는 하지만 최종적으로 한국전력에서 얼마나 전기를 소비했는지 간접적으로 알 수 있는 듯합니다. 다시 말하면 태양광 발전량 중 얼만큼을 내부 소비하고 얼만큼을 송전했는지는 알 수 없지만, 수전량은 대략 파악 가능합니다.
위 그래프에서 1월5일은 이렇게 매핑하기 전이라서 기록이 없습니다. 집에서 소비한 총량에서 태양광 발전 총량을 빼면 한국전력에서 수전한 양이 나온다고 볼 수 있습니다. 45.91kWh로 표시되네요.
수전량에서 발전량을 빼면 전기요금이 부과되는 양이고 39kWh으로 나타납니다.
1월5일에 발전한 양은 4.1%이니까 1.37kWh로 추정되므로 45.91에서 빼면 44.54kWh로 나오므로 39kWh와 오차가 보이지만, 결론적으로는 위와 같이 매핑해서 이용해도 되겠다는 생각을 할 수 있습니다.
태양광 관련 글
'DIY' 카테고리의 다른 글
7.5인치 e-ink 디스플레이 날씨 정보 표시 ESPHome (0) | 2025.01.03 |
---|---|
FIREBAT T8 Pro Plus 분해 및 써멀 재도포 (0) | 2024.07.06 |
PETOI 구형 자동급식기 IoT(Home Assistant)가 되도록 개조 (1) | 2023.12.02 |
ASUS 공유기 방열팬 부착 후 CPU온도 85도에서 69도로 하강 (0) | 2023.10.20 |
근접 자동 열림 급식기 - auto pet feeder, ESPHome, Home Assistant, DIY (2) | 2023.10.11 |