chore: HERV 통합 저장소 재초기화 커밋

손상된 .git 히스토리(missing tree)로 재초기화 후 작업트리 전체 커밋.
.claude/ 만 제외(로컬 에이전트 설정). 구 저장소 백업(.git_corrupt_backup/) 포함.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
jeon
2026-06-16 09:29:03 +09:00
commit a502322188
630 changed files with 65126 additions and 0 deletions
+142
View File
@@ -0,0 +1,142 @@
# EW11 (RS-485 ↔ WiFi) HOMENET 연결 검토
- 작성일: 2026-05-26
- 대상 장비: Elfin EW11A (Hi-Flying) — RS-485 ↔ WiFi 투명 시리얼 브리지
- 대상 MCU: Nuvoton Nano100 시리즈 (HERV)
- 관련 문서:
- `EW11_RS485 TO WIFI/EW11A manual/Elfin-EW1X_User ManualV1.3(20200415).pdf`
- `EW11_RS485 TO WIFI/IOTService3.1.0_20220926/`
- `doc/HERV_MCU PINMAP & CONNECTOR.txt`
---
## 1. 결론
**하드웨어/펌웨어 모두 가능**. 단, UART1 채널이 PC_Monitoring(디버그)과 HOMENET(CVnet)에 동시에 사용될 수 없는 구조적 트레이드오프가 있음.
EW11은 **투명 시리얼 브리지(Transparent Serial Bridge)**이므로 UART ↔ TCP/WiFi 변환을 EW11 내부에서 처리한다. MCU 펌웨어 측에서는 EW11의 존재를 알 필요가 없고, 기존 CVnet 프로토콜 코드를 그대로 사용하면 된다.
---
## 2. 현재 시스템 UART 채널 구성
| 채널 | 용도 | 초기화 위치 | Baud |
|---|---|---|---|
| UART0 | Hood (후드, CN6/CN13) | `program/User/My_system.c:36` | 9600 |
| **UART1** | **HOMENET (CVnet) — CN15** | `program/User/My_system.c:50` | 9600 |
| SC0 (SCUART) | Roomcon 232 | `program/User/My_system.c:64` | 1200 |
| SC1 (SCUART) | Bunbaegi 분배기 | `program/User/My_system.c:73` | 115200 |
### HOMENET 핀맵 (CN15, RED, HOMENET_485)
- TX: PB.5 (E485_TX)
- RX: PB.4 (E485_RX)
- DIR: PB.6 (E485_DIR)
> Nano100 시리즈는 **UART0/UART1 2개만 제공**하므로 추가 UART 확보가 불가능하다.
---
## 3. 하드웨어 연결 방안
| 항목 | 기존 HOMENET | EW11 연결 |
|---|---|---|
| 커넥터 | CN15 (RED), HOMENET_485 | CN15 RS-485 A/B 라인에 EW11 RS-485 단자 병렬 연결 |
| MCU 핀 | UART1: PB.4(RX), PB.5(TX), PB.6(DIR) | 변경 없음 |
| Baud | 9600 8N1 | EW11도 9600 8N1로 설정 |
EW11은 자체 RS-485 트랜시버를 가지고 DIR을 자동 제어하므로 MCU의 PB.6 DIR 제어와 충돌하지 않는다(RS-485 멀티드롭 버스 구성).
```
[홈넷 서버/앱] ──(WiFi/TCP)── [EW11] ──(RS-485 A/B)── [CN15] ── [MCU UART1]
```
---
## 4. 펌웨어 측 필요 작업
### 4.1 CVnet 프로토콜 복구 (직전 작업 되돌리기)
직전 작업으로 비활성화한 두 곳을 다시 활성화해야 HOMENET 패킷을 처리할 수 있다.
- `program/User/main.c:110`
```c
CVnet_Com_process();
```
- `program/User/My_Uart.c:1758`
```c
rx_debug_check(u8InChar);
Rx_CVnet_TimeOut = 50;
```
### 4.2 PC_Monitoring과 동시 사용 불가 ⚠️
UART1은 단 하나의 물리 채널이므로 PC_Monitoring(디버그)과 CVnet(홈넷)이 **동시에 사용 불가**하다. 다음 중 하나를 선택해야 한다.
| 옵션 | 설명 | 비용 | 권장 |
|---|---|---|---|
| ① 평소 CVnet만, 디버그 시에만 PC_Monitoring | `#ifdef DEBUG_PC_MODE` 컴파일 스위치로 분리 | 펌웨어만 수정 | **★ 권장** |
| ② PC_Monitoring을 UART0(Hood)로 이전 | Hood 통신을 잠시 끊고 디버그 | Hood 제어 일시 중단 | △ |
| ③ 다른 시리얼(SC0/SC1) 사용 | 기존 통신 영향 | 다른 통신 끊김 | △ |
### 4.3 CVnet 타임아웃 검토
WiFi 경로는 **20 ~ 200 ms의 가변 지연**이 발생한다.
- MCU 측 `Rx_CVnet_TimeOut = 50` (50 ms): **패킷 수신 중단 감지용**이므로 EW11 bridge엔 직접 영향 없음.
- 홈넷 마스터(서버) 측의 응답 타임아웃은 EW11 RTT를 감안해 설정 필요. 너무 짧으면 재전송 빈발.
---
## 5. EW11 설정 (PC에서 IOTService 도구로)
| 항목 | 권장값 |
|---|---|
| Serial Baudrate | 9600 |
| Data / Parity / Stop | 8 / None / 1 |
| Flow Control | None |
| Protocol | **TCP Server** (홈넷 서버가 클라이언트로 접속) 또는 **TCP Client** (EW11이 서버에 접속) |
| Port | 홈넷 게이트웨이와 합의된 포트 |
| Buffer length | 8 (CVnet 패킷이 8바이트 고정) — 패킷 단위 전송 보장 |
| Heartbeat / KeepAlive | 활성화 (WiFi 연결 유지) |
| WiFi 보안 | WPA2-PSK |
| Reconnect | 자동 재접속 활성화 |
IOTService 다운로드: `http://ftp.hi-flying.com:9000/IOTService/`
---
## 6. 위험 요소 및 평가
| 항목 | 평가 |
|---|---|
| 펌웨어 변경량 | 매우 적음 (CVnet 코드 복구만) |
| 하드웨어 비용 | EW11 1개 + 5V 전원 + WiFi AP |
| 응답 지연 | WiFi RTT 20~200 ms 추가 — 시나리오 제어용으론 충분 |
| 신뢰성 | WiFi 끊김 시 홈넷 단절. EW11 자동 재접속 설정 필수 |
| 보안 | EW11 자체 암호화는 제한적. 동일 LAN 내 사용 권장. 외부 노출 시 VPN/방화벽 필요 |
| 디버그 병행 | **불가** — PC 디버그 채널을 별도 UART로 이전하거나 컴파일 분리 필요 |
| 멀티드롭 충돌 | MCU와 EW11이 같은 RS-485 버스 → 마스터-슬레이브 규칙 준수 시 문제없음 |
---
## 7. 권장 진행 순서
1. **CVnet 코드 복구** — `main.c:110`, `My_Uart.c:1758` 주석 해제
2. **PC_Monitoring 조건부 컴파일 분리** — `#ifdef DEBUG_PC_MODE`로 양산 빌드에서 제외
3. **EW11 평가보드 1대 확보** 후 단독 테스트
- PC ↔ EW11(WiFi) ↔ RS-485 루프백 (송수신 확인)
- PC ↔ EW11(WiFi) ↔ RS-485 ↔ MCU 통신 (CVnet 패킷 응답 확인)
4. **응답 지연 측정** — 마스터-슬레이브 타임아웃 마진 검증
5. **장시간 안정성 시험** — WiFi 끊김/재접속 시나리오 포함
---
## 8. 참고
- EW11A 매뉴얼: `EW11_RS485 TO WIFI/EW11A manual/Elfin-EW1X_User ManualV1.3(20200415).pdf`
- 운용 가이드: `EW11_RS485 TO WIFI/EW11A manual/HF2211S_EW1X_PW1X_Wport-W30_Operation Guide(20220525).pdf`
- 소프트웨어 기능: `EW11_RS485 TO WIFI/EW11A manual/IOT_Device_Series_Software_Funtion_20250328.pdf`
- IOTService 매뉴얼: `EW11_RS485 TO WIFI/IOTService3.1.0_20220926/IOTService_User_Manual_20200708.pdf`
- 핀맵: `doc/HERV_MCU PINMAP & CONNECTOR.txt`
- HOMENET 프로토콜: `Protocol/힘펠_환기장치프로토콜V3.7_240111.xlsx`
- 시나리오 프로토콜: `Protocol/DL 환기 시나리오 제어 프로토콜_20260319-1_노량진모델하우스_2차.xlsx`
@@ -0,0 +1,134 @@
# EW11 → 인터넷(AWS) 데이터 전송 검토
- 작성일: 2026-06-03
- 목적: ERV 각실제어 데이터(신규 PC 대시보드 0xAA 프로토콜)를 **EW11(RS-485↔WiFi)** 로 인터넷 서버에 전송
- 대상 장비: Elfin EW11A (Hi-Flying)
- 관련 문서:
- `EW11A manual/IOT_Device_Series_Software_Funtion_20250328.pdf`
- `TestProgram/PC_ERV_Protocol.md` (전송할 프레임 규격)
- `260526_EW11_검토.md` (기존: 로컬 HOMENET 연결 검토)
---
## 1. 결론 요약
**EW11 사용 가능.** 가장 적합한 방식은 **EW11 = TCP Client → AWS 자체 서버(EC2/Lightsail)** 이며, 우리 0xAA 바이너리 프레임이 **투명 전송(Transparent)** 으로 그대로 서버에 도달한다(PC 대시보드의 파서/프로토콜 코드를 서버에서 재사용 가능).
- **AWS IoT Core 직결은 비권장** — IoT Core는 MQTT 연결 시 **X.509 클라이언트 인증서 기반 mutual TLS**(또는 커스텀 권한부여자)가 필수인데, EW11의 TLS는 매뉴얼상 **"no certificate method"**(클라이언트 인증서 제시 불가)라 직접 연결이 곤란하다.
- 표준 IoT 스택이 필요하면 **EC2에 Mosquitto MQTT 브로커**를 띄우고 EW11 MQTT Client(user/password + 서버 TLS)로 붙이는 방식이 차선.
---
## 2. EW11 네트워크 기능 (매뉴얼 확인)
| 기능 | 지원 | 비고 |
|---|---|---|
| TCP Client / TCP Server | ✅ | Client 모드로 외부 서버 접속 가능 |
| UDP Client / Server | ✅ | |
| Multiple Socket | ✅ | 최대 5 소켓 동시 |
| HTTP (GET/POST) | ✅ | UART 데이터를 HTTP 본문/쿼리로 래핑, 헤더 커스텀 |
| WebSocket Client | ✅ | |
| **MQTT Client** | ✅ | Version 4(MQTT 3.1.1), Client ID/User/Password, Sub/Pub Topic, QoS |
| 암호화 | ✅ | **AES**(CBC, 16자 키), **DES3**(24자), **TLS(인증서 없음)** |
| TCP Keepalive / Reconnect | ✅ | 연결 끊김 자동 재접속 |
| Register / Heartbeat | ✅ | 접속 시 장치 ID 전송, 주기적 하트비트 |
| NTP | ✅ | 시각 동기 |
> ⚠️ **TLS 제약**: "TLS use no certificate method" — 서버/클라이언트 인증서 검증을 하지 않는 단순 암호화. → AWS IoT Core(mutual TLS 강제) 직결 불가, HTTPS(API Gateway) 서버 인증서 검증도 신뢰 어려움.
---
## 3. 전송 토폴로지
```
ERV 메인보드 (RS-485, 0xAA STATUS/ACK 프레임, 115200 8N1)
│ A / B
┌────────┐
│ EW11 │ WiFi
└────────┘────────── [현장 공유기] ──── 인터넷 ────┐
(TCP Client / MQTT Client, AES 암호화) │
┌──────────────┐
│ AWS 서버 │
│ 0xAA 파서 + │
│ 저장 + 웹표시 │
└──────────────┘
```
- PC 대시보드는 (a) 기존처럼 로컬 시리얼로 직결하거나, (b) 동일 0xAA 프레임을 AWS 서버에서 받아 보는 형태로 확장 가능.
- 양방향(제어 CTRL_*)도 같은 TCP 소켓으로 가능(서버→EW11→ERV).
---
## 4. AWS 서버 옵션 비교
| 옵션 | 구성 | 우리 프로토콜 적합성 | 비용(개략) | 평가 |
|---|---|---|---|---|
| **A. EC2/Lightsail + 경량 TCP 서버** | EW11=TCP Client → 공인IP:Port. 서버가 0xAA 프레임 파싱·저장·웹표시 | ★★★ 바이너리 그대로 투명 전송, PC 파서 재사용 | t4g.nano ~$2~3/월, Lightsail $3.5~5/월 | **권장 1** |
| **B. EC2 + Mosquitto(MQTT)** | EW11=MQTT Client(user/pass+TLS) → up/down 토픽 | ★★ 표준 IoT, 장치 다수 확장 유리 | EC2 비용 + 운영 | 권장 2 |
| C. AWS IoT Core 직결 | EW11=MQTT Client | ✗ 클라이언트 인증서 필요(EW11 미지원) | 종량제 | **비권장**(브리지 필요) |
| D. HTTP→API Gateway+Lambda+DynamoDB | EW11=HTTP POST | △ HTTPS 인증서 이슈 + 바이너리 본문 번거로움 + 주기 폴링형 펌웨어 필요 | 서버리스 종량제 | 부적합 |
### 권장안 상세 (옵션 A)
1. **AWS Lightsail**(가장 운영이 간단) 또는 **EC2 t4g.nano** 1대 + 고정 공인 IP.
2. 그 위에 경량 TCP 서버(Node.js/Python) 실행 → 포트 개방.
3. EW11을 **TCP Client** 로 설정(서버 공인 IP/포트, AES 암호화, Keepalive/Register 활성).
4. 서버는 `PC_ERV_Protocol.md` 와 동일한 파서(STX 0xAA → CMD/LEN/PAYLOAD → CRC16-MODBUS 검증)로 STATUS(0x81) 73B 해석 → DB/파일 적재 → 간단 웹대시보드 또는 API 제공.
---
## 5. EW11 설정 포인트
| 항목 | 권장값 |
|---|---|
| Serial Baudrate | **115200** (신규 PC 프로토콜 기준. 기존 HOMENET 9600과 다름 주의) |
| Data/Parity/Stop | 8 / None / 1 |
| Protocol | **TCP Client** (서버 공인 IP/포트) — 또는 MQTT |
| Buffer Size | ≥ 최대 프레임(STATUS 78B 이상 여유) |
| UART Auto-Frame | Frame Time(gap) 또는 Frame Length로 프레임 경계 정렬 (단, 프로토콜에 LEN 필드 있어 서버 재조립도 가능) |
| Security | AES(16자 키) 활성 + 서버 동일 키 복호화 |
| Keepalive / Reconnect / Heartbeat | 활성 |
| NTP | 활성(타임스탬프 정확도) |
설정 도구: IOTService (`IOTService3.1.0_20220926/`) 또는 내장 웹페이지.
---
## 6. 보안 / 위험 평가
| 항목 | 평가 / 대책 |
|---|---|
| EW11 TLS 신뢰성 | "no certificate" → MITM 방어 약함. **AES 암호화 병행** 필수 |
| 공인 포트 노출 | EC2 보안그룹 inbound를 **현장 공인 IP로 제한**, 불필요 포트 폐쇄 |
| 권장 폐쇄망 | 가능하면 VPN / 4G 라우터 / 사설망 경유 |
| WiFi 끊김 | EW11 자동 재접속 + 서버측 연결 상태 모니터링 |
| 응답 지연 | WiFi+인터넷 RTT 수십~수백 ms. 모니터링/시나리오 제어엔 충분, 실시간 폐루프 제어엔 부적합 |
| 트래픽 | STATUS 78B를 1초 주기 전송 시 ≈ 200MB/월 → 비용 영향 미미 |
---
## 7. 권장 진행 순서
1. AWS **Lightsail nano**(또는 EC2 t4g.nano) 1대 생성 + 고정 IP.
2. 경량 TCP 서버 작성(0xAA 파서는 `DashboardProtocol` 로직 이식) → 수신 로그 확인.
3. EW11 1대 확보 → IOTService로 TCP Client + AES + 115200 설정.
4. **루프백 시험**: PC(0xAA 프레임 송신) → EW11 → 서버 수신 파싱 검증.
5. **실연동**: ERV → EW11 → 서버 STATUS 적재 확인.
6. 보안그룹/암호화/재접속 안정성 시험 후 운영.
---
## 8. 비용 메모 (2026-06 기준, 변동 가능)
- **EC2 t4g.nano**: us-east-1 약 $2~3/월 (ARM Graviton, 0.5GB RAM). t4g.small은 2026-12-31까지 750h/월 무료 체험.
- **신규 AWS 계정**: 12개월 t3.micro 750h/월 무료.
- **Lightsail**: 최저 $3.5/월(IPv6, 512MB/2vCPU/20GB/1TB), 공인 IPv4 포함 $5/월. 고정요금이라 가장 단순.
- AWS IoT Core: 종량제(연결/메시지/규칙별 과금). 본 케이스에선 비권장.
---
## 9. 참고
- EW11 소프트웨어 기능: `EW11A manual/IOT_Device_Series_Software_Funtion_20250328.pdf` (1.4 Working Mode, 1.5 암호화, 1.17 Register, 1.18 Heartbeat)
- AWS IoT Core 클라이언트 인증: https://docs.aws.amazon.com/iot/latest/developerguide/client-authentication.html
- 전송 프레임 규격: `TestProgram/PC_ERV_Protocol.md`
Binary file not shown.
@@ -0,0 +1,3 @@
IOTService工具下载地址:
IOTService tools download address
http://ftp.hi-flying.com:9000/IOTService/