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>
This commit is contained in:
@@ -0,0 +1,212 @@
|
||||
# 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) 구현 시 세부 필드는 상호 합의하여 조정한다.
|
||||
Reference in New Issue
Block a user