Files
HECO2/TestProgram/PC_ERV_Protocol.md
jeon 5a96a696b1 chore: HERV 통합 저장소 초기 커밋
- 펌웨어(program), C# 대시보드(TestProgram), 시뮬레이터(Simulator),
  프로토콜/문서(Protocol, doc) 전체를 단일 저장소로 통합
- program 폴더의 별도 git 저장소를 제거하고 통합 저장소에 흡수
- 빌드 산출물(program/build, bin/obj, *.o/.elf/.bin/.hex 등) .gitignore 처리
- 사내 Synology NAS Git 원격 연결 예정

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 21:44:23 +09:00

9.6 KiB
Raw Permalink Blame History

HuevenEco DL 각실제어 대시보드 ↔ ERV 메인보드 통신 프로토콜

  • 물리계층 : RS-485 (또는 USB-Serial), 115200 bps, 8 Data, None Parity, 1 Stop (N81)
  • 역할 : PC 대시보드(Host) ↔ ERV 메인보드(Main Board)
  • 본 프로토콜은 Protocol/Each_Room_Jushin_protocol_RS485_Rev1.2 의 프레임 형식(0xAA 시작 + CRC)을 참고하여, PC 모니터링/제어 전용으로 재정의한 것이다. 펌웨어(UART1 / HOMENET_485)도 본 규격에 맞춰 수정한다.

1. 공통 프레임

+------+------+------+------------------+--------+--------+
| STX  | CMD  | LEN  |  PAYLOAD[LEN]    | CRC_L  | CRC_H  |
+------+------+------+------------------+--------+--------+
  0xAA   1B     1B        LEN bytes        16-bit CRC
필드 크기 설명
STX 1 고정 0xAA
CMD 1 명령/응답 코드 (아래 표)
LEN 1 PAYLOAD 바이트 수 (0~255)
PAYLOAD LEN 명령별 데이터
CRC 2 CRC-16/MODBUS (poly 0xA001, init 0xFFFF), CMD~PAYLOAD까지, 리틀엔디안
  • 멀티바이트 수치는 모두 빅엔디안(상위 바이트 먼저) 으로 표기한다. (CRC만 리틀엔디안)
  • 프레임 간 구분은 STX(0xAA) 탐색 + LEN/CRC 검증으로 처리한다.

2. 명령 코드 (CMD)

2.1 PC → ERV (제어)

CMD 이름 PAYLOAD 설명
0x01 CTRL_POWER [onoff] 전원 0=OFF / 1=ON
0x02 CTRL_RUNMODE [mode] 운전모드 (3.1 참조)
0x03 CTRL_FAN [speed] 풍량 0~4 (자동모드에서는 무시)
0x04 CTRL_SUBMODE [type][onoff] 부가모드 토글 (3.2 참조)
0x05 CTRL_HOOD [onoff] 연동후드 0=OFF / 1=ON
0x06 CTRL_HYST_PRESET [preset] 히스테리시스 프리셋 0=ECO/1=NORMAL/2=TURBO
0x07 CTRL_HYST_VALUE [preset][pm25(2)][pm10(2)][voc(2)][co2(2)] 프리셋별 히스테리시스 임계값 설정 (preset 0 ECO/1 NORMAL/2 TURBO, 값 BE)
0x08 CTRL_DAMPER [room][type][onoff] 각실 댐퍼 type 0=급기(SA)/1=배기(EA), 0=닫힘 / 1=열림
0x09 CTRL_LED [room][dim] 각실 LED 디밍 0~9
0x0A REQ_STATUS (없음) 상태 1회 즉시 요청
0x0B CTRL_RESET [onoff] ERV 리셋 토글 0/1
0x0C CTRL_VSP [group][index][sa(2)][ea(2)] 풍량 VSP 값 설정 (3.5 참조, sa/ea BE)
  • room : 1=거실, 2=침실1, 3=침실2, 4=침실3

2.2 ERV → PC (상태/응답)

CMD 이름 PAYLOAD 설명
0x81 STATUS 134 byte (4장 참조) 전체 상태 스냅샷 (주기 송신 + REQ_STATUS 응답)
0x82 ACK [echoCmd][result] 제어 명령 수신 응답 result 0=OK / 1=ERR

3. 값 정의

3.1 운전모드 (RunMode)

코드 의미 펌웨어 매핑
0x00 OFF Power_On = 0
0x01 환기 MODE_VENTILATION (0)
0x02 자동 MODE_AUTO (1)
0x03 공청 MODE_AIRCLEAN (2)
0x04 바이패스 MODE_BYPASS (3)

3.2 부가모드 (SubMode)

CTRL_SUBMODEtype :

type 의미 펌웨어 매핑(예정)
0x01 스마트수면 (신규)
0x02 쾌적조리 SamKeopSal_Mode_Flag
0x03 안심회복 Focus_Mode

STATUS 의 subMode 는 비트맵 : bit0=스마트수면, bit1=쾌적조리, bit2=안심회복

3.3 공기질 상태 (AirQuality) — 판단 기준은 힘펠 협의 예정, 임시값

코드 등급 색상
0x01 매우나쁨 빨강
0x02 나쁨 주황
0x03 보통 초록
0x04 좋음 파랑

3.4 자동운전 상태 (AutoState)

코드 의미
0x00 분산
0x01 집중

3.5 풍량 VSP (CTRL_VSP 0x0C / STATUS VSP 블록)

급기(SA)/배기(EA) 풍량 설정값. CTRL_VSP 로 한 엔트리씩 설정, STATUS 로 전체 표시.

  • group : 0=환기(Vent), 1=바이패스(Bypass), 2=공청(AirClean)
  • index : 환기/공청 1~4, 바이패스 1
  • sa,ea : 각 u16 빅엔디안 (풍량 설정값/RPM·duty)

STATUS VSP 9 엔트리 순서 (각 SA,EA): 환기1, 환기2, 환기3, 환기4, 바이패스, 공청1, 공청2, 공청3, 공청4


4. STATUS(0x81) PAYLOAD 레이아웃 (73 byte)

4.1 글로벌 (offset 0~16, 17 byte)

off 크기 필드 비고
0 1 power Power_On
1 1 runMode 3.1
2 1 autoState 3.4 (분산/집중)
3 1 fanMode 0~4 (Fan_Mode)
4 1 subMode 비트맵 (3.2)
5 1 hood Hood_YeunDong_Enable / Hood_Status
6 1 hystPreset 0 ECO / 1 NORMAL / 2 TURBO
7 2 hystPM25 히스테리시스 PM2.5
9 2 hystPM10 히스테리시스 PM10
11 2 hystVOC 히스테리시스 VOC (m_VOC_Level)
13 2 hystCO2 히스테리시스 CO2 (m_CO2_Level)
15 2 errorCode 비트맵 (프로토콜 xlsx Error Code)

4.2 각실 블록 (offset 17~, 14 byte × 4실 = 56 byte)

순서: 거실 → 침실1 → 침실2 → 침실3

off(상대) 크기 필드 비고
+0 1 damper 비트맵 bit0=급기(SA) 열림 / bit1=배기(EA) 열림
+1 2 pm25 SEN66_pm2p5
+3 2 pm10 SEN66_pm10p0
+5 2 voc SEN66_VOC_value
+7 2 co2 SEN66_CO2_value
+9 1 airQuality 3.3
+10 1 ledDim 0~9 (Light_Bright)
+11 2 loadScore 각실 부하점수
+13 1 finalVolume 최종 풍량 (ROOM_air_volume)

4.3 ERV 리셋 (offset 73, 1 byte)

off 크기 필드 비고
73 1 reset ERV 리셋 토글 0/1

4.4 풍량 VSP 블록 (offset 74~109, 9엔트리 × u16 SA·EA = 36 byte)

순서(3.5): 환기14 → 바이패스 → 공청14. 각 엔트리 SA(2) + EA(2), 빅엔디안.

off(상대) 크기 필드
+0 2 환기1 SA
+2 2 환기1 EA
+4 2 환기2 SA
+6 2 환기2 EA
+8 2 환기3 SA
+10 2 환기3 EA
+12 2 환기4 SA
+14 2 환기4 EA
+16 2 바이패스 SA
+18 2 바이패스 EA
+20 2 공청1 SA
+22 2 공청1 EA
+24 2 공청2 SA
+26 2 공청2 EA
+28 2 공청3 SA
+30 2 공청3 EA
+32 2 공청4 SA
+34 2 공청4 EA

4.5 히스테리시스 프리셋 테이블 (offset 110~133, 3프리셋 × PM2.5/PM10/VOC/CO2 u16 = 24 byte)

프리셋(ECO/NORMAL/TURBO)별 임계값. 현재 적용값은 글로벌의 hystPM25~hystCO2(off 7~14) = 본 테이블의 [hystPreset] 행.

off(상대) 크기 필드
+0 2 ECO PM2.5
+2 2 ECO PM10
+4 2 ECO VOC
+6 2 ECO CO2
+8 2 NORMAL PM2.5
+10 2 NORMAL PM10
+12 2 NORMAL VOC
+14 2 NORMAL CO2
+16 2 TURBO PM2.5
+18 2 TURBO PM10
+20 2 TURBO VOC
+22 2 TURBO CO2

총 PAYLOAD = 17(글로벌) + 56(각실) + 1(reset) + 36(VSP) + 24(히스테리시스) = 134 byte


5. 동작 시나리오

  1. PC 연결 후 REQ_STATUS(0x0A) 송신 → ERV 가 STATUS(0x81) 응답.
  2. ERV 는 약 500ms~1s 주기로 STATUS(0x81) 를 자동 송신 (대시보드 실시간 갱신).
  3. PC 가 토글/슬라이드/선택 시 해당 CTRL_* 송신 → ERV 가 ACK(0x82) + 다음 STATUS 에 반영.
  4. PC 는 STATUS 수신 시마다 로그(날짜·시간 + 전체 상태)에 적재/저장.

본 문서는 PC 대시보드 작성 기준 초안이며, 펌웨어(UART1) 구현 시 세부 필드는 상호 합의하여 조정한다.