YOGYUI

현대통신 월패드 RS-485 통신 프로토콜 명세 - 공통 사양 본문

홈네트워크(IoT)/힐스테이트 광교산

현대통신 월패드 RS-485 통신 프로토콜 명세 - 공통 사양

요겨 2024. 11. 7. 17:01
반응형

 

※ 티스토리 오블완(오늘 블로그 완료) 챌린지용 포스팅

RS-485 시리얼 통신 스펙

  • 일반 장치: 9600 baudrate, 8 databit, 1 stopbit, no parity
  • 주방 비디오폰(서브폰): 3840 baudrate, 8 databit, 1 stopbit, no parity

주방 비디오폰 보레이트 관련 포스팅: 힐스테이트 광교산::주방 비디오폰 RS-485 패킷 해석

RS-485 패킷 공통사양

Index 0 1 2 3 4 [5:4+M] N-2 N-1
Content Prefix Length ? Dev.Type Packet.Type Data Checksum Suffix
Value F7h N 01h -- -- -- -- --  -- EEh
  • 패킷 길이: 바이트
  • 데이터 길이: M (= N - 7) 바이트, M≥1
  • Index 0: 패킷의 시작을 나타내는 접두사(Prefix) 바이트, 값 = 0xF7
  • Index 1: 온전한 한 패킷의 길이 = N
  • Index 2: 값=0x01
    • 이외의 값을 발견한 적 없음, 월패드의 아이디로 추정됨 
  • Index 3: 제어 대상 장치(device) 종류 구분을 위한 바이트, 값에 따라 다른 종류의 디바이스
    • 0x15: 감성 조명
    • 0x18: 난방
    • 0x19: 일반 조명
    • 0x1A: 디밍(dimming) 조명
    • 0x1B: 주방 도시가스 밸브
    • 0x1C: 시스템 에어컨
    • 0x1E: 현관 도어락
    • 0x1F: 아울렛 (대기전력 차단 콘센트)
    • 0x2A: 일괄소등 스위치
    • 0x2B: 전열교환기 (환기)
    • 0x34: 엘리베이터
    • 0x43: HEMS
    • 0x44: 현재 시간
  • Index 4: 패킷의 유형
    • 0x01: 장치의 상태 조회(쿼리), 통신 방향: [월패드]→[개별 장치]
    • 0x02: 장치 제어 명령, 통신 방향: [월패드]→[개별 장치]
    • 0x04: 쿼리/명령 응답, 통신 방향: [개별 장치]→[월패드]
  • Index 5 ~ 4 + M: 장치의 제어 명령, 현재 상태 확인 등의 정보가 
  • Index N - 2: 패킷 유효성 검증을 위한 체크섬 바이트
    • 알고리즘: XOR SUM
    • 계산 타겟: Index 0 ~ N - 3
  • Index N - 1: 패킷의 끝을 나타내는 접미사(Suffix) 바이트, 값 = 0xEE
    • 유효한 패킷의 시작(prefix)와 끝(suffix)가 정해져 있기 때문에, 끊어져서 수신되는 RS-485 byte chunk들에 대한 버퍼링 구현도 굉장히 간단하다

※ 주의: 주방 비디오폰은 프로토콜이 상이함, 이에 대해서는 별도로 포스팅 예정

XOR 체크섬 계산 의사코드 (C/C++)

/* pseudo code */
uint8_t packet[N];
packet[0] = 0xF7;

/* ... */ 
uint8_t checksum = 0x00;
for (int i = 0; i < N - 2; i++) {
  checksum ^= packet[i];
}
packet[N - 2] = checksum;
packet[N - 1] = 0xEE;
현대통신 월패드는 위에 언급된 장치 외에도 주방 쿡탑, 전동 커튼 등 마이너(?)한 종류의 장치들도 연동할 수 있다
필자는 언제나 열린 마음으로 패킷 제보를 기다리고 있다 ^^

 

반응형