Files
HECO2/TestProgram/PC_ERV_Protocol.md
T
jeon a502322188 chore: HERV 통합 저장소 재초기화 커밋
손상된 .git 히스토리(missing tree)로 재초기화 후 작업트리 전체 커밋.
.claude/ 만 제외(로컬 에이전트 설정). 구 저장소 백업(.git_corrupt_backup/) 포함.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 09:32:17 +09:00

213 lines
9.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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_SUBMODE``type` :
| 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): 환기1~4 → 바이패스 → 공청1~4. 각 엔트리 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) 구현 시 세부 필드는 상호 합의하여 조정한다.